36 #include "boost/bind.hpp" 38 #include <vtkProperty.h> 39 #include <vtkPolyDataMapper.h> 40 #include <vtkPolyDataNormals.h> 41 #include <vtkSTLReader.h> 42 #include <vtkMatrix4x4.h> 43 #include <vtkRenderer.h> 60 mSpaceProvider(spaceProvider),
61 mSphereRadiusInNormalizedViewport(false),
62 mStipplePattern(0xFFFF)
64 mTooltipPointColor =
settings()->
value(
"View/toolTipPointColor").value<QColor>();
65 mOffsetPointColor =
settings()->
value(
"View/toolOffsetPointColor").value<QColor>();
66 mOffsetLineColor =
settings()->
value(
"View/toolOffsetLineColor").value<QColor>();
69 mStayHiddenAfterVisible =
false;
70 mStayVisibleAfterHide =
false;
71 mOffsetPointVisibleAtZeroOffset =
false;
72 mToolActor = vtkActorPtr::New();
73 mPolyDataMapper = vtkPolyDataMapperPtr::New();
81 mProbeSectorPolyDataMapper = vtkPolyDataMapperPtr::New();
82 mProbeSectorActor = vtkActorPtr::New();
110 void ToolRep3D::updateToolActor()
114 mToolActor->SetMapper(NULL);
123 normals->SetInputData(model);
124 mPolyDataMapper->SetInputConnection(normals->GetOutputPort());
125 mPolyDataMapper->Update();
126 mToolActor->SetMapper(mPolyDataMapper);
130 mToolActor->GetProperty()->SetColor(1.0, 1.0, 1.0);
137 mToolActor->SetVisibility(mTool->getVisible());
145 mTracer->setTool(tool);
149 disconnect(mTool.get(), SIGNAL(toolTransformAndTimestamp(
Transform3D,
double)),
this, SLOT(
setModified()));
150 disconnect(mTool.get(), SIGNAL(toolVisible(
bool)),
this, SLOT(receiveVisible(
bool)));
151 disconnect(mTool.get(), SIGNAL(tooltipOffset(
double)),
this, SLOT(tooltipOffsetSlot(
double)));
152 disconnect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(probeSectorChanged()));
153 disconnect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(updateToolActor()));
161 connect(mTool.get(), SIGNAL(toolVisible(
bool)),
this, SLOT(receiveVisible(
bool)));
162 connect(mTool.get(), SIGNAL(tooltipOffset(
double)),
this, SLOT(tooltipOffsetSlot(
double)));
163 connect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(probeSectorChanged()));
164 connect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(updateToolActor()));
167 this->updateToolActor();
169 this->probeSectorChanged();
174 return (mTool == tool);
179 mSphereRadius = radius;
181 mOffsetPoint->setRadius(mSphereRadius);
183 mTooltipPoint->setRadius(mSphereRadius);
188 if (mSphereRadiusInNormalizedViewport == on)
191 mSphereRadiusInNormalizedViewport = on;
196 mViewportListener->setCallback(boost::bind(&ToolRep3D::scaleSpheres,
this));
200 mViewportListener.reset();
214 mTooltipPoint->setColor(color);
220 mOffsetPoint->setColor(color);
226 mOffsetLine->setColor(color);
231 view->getRenderer()->AddActor(mTracer->getActor());
233 view->getRenderer()->AddActor(mToolActor);
234 view->getRenderer()->AddActor(mProbeSectorActor);
237 mOffsetPoint->setRadius(mSphereRadius);
238 mOffsetPoint->setColor(mOffsetPointColor);
241 mTooltipPoint->setRadius(mSphereRadius);
242 mTooltipPoint->setColor(mTooltipPointColor);
245 mOffsetLine->setColor(mOffsetLineColor);
246 mOffsetLine->setStipple(mStipplePattern);
248 mTooltipPoint->getActor()->SetVisibility(
false);
249 mOffsetPoint->getActor()->SetVisibility(
false);
250 mOffsetLine->getActor()->SetVisibility(
false);
252 if (mViewportListener)
253 mViewportListener->startListen(view->getRenderer());
258 view->getRenderer()->RemoveActor(mTracer->getActor());
259 view->getRenderer()->RemoveActor(mToolActor);
260 view->getRenderer()->RemoveActor(mProbeSectorActor);
266 if (mViewportListener)
267 mViewportListener->stopListen();
276 void ToolRep3D::scaleSpheres()
278 if (!mViewportListener)
280 if (!mViewportListener->isListening())
283 double size = mViewportListener->getVpnZoom(this->
getTool()->get_prMt().translation());
284 double sphereSize = mSphereRadius/100/size;
287 mOffsetPoint->setRadius(sphereSize);
289 mTooltipPoint->setRadius(sphereSize);
298 void ToolRep3D::update()
302 prMt = mTool->get_prMt();
306 mToolActor->SetUserMatrix(rMt.getVtkMatrix());
311 mProbeSectorActor->SetUserMatrix((rMpr * prMt * tMu).
getVtkMatrix());
312 mProbeSectorActor->SetVisibility(mTool->getVisible());
315 mProbeSectorActor->SetVisibility(
false);
317 this->updateOffsetGraphics();
320 void ToolRep3D::probeSectorChanged()
330 mProbeSector->setData(mTool->getProbe()->getProbeDefinition());
333 mProbeSectorPolyDataMapper->SetInputData(mProbeSector->getSectorLinesOnly());
334 if (mProbeSectorPolyDataMapper->GetInput())
336 mProbeSectorActor->SetMapper(mProbeSectorPolyDataMapper);
338 mProbeSectorActor->SetUserMatrix((rMpr * prMt * tMu).
getVtkMatrix());
339 mProbeSectorActor->SetVisibility(mTool->getVisible());
342 mProbeSectorActor->SetVisibility(
false);
345 void ToolRep3D::updateOffsetGraphics()
347 bool visible = mTool && mTool->getVisible();
349 if (!mStayVisibleAfterHide || (mOffsetPoint->getActor()->GetVisibility() ==
false))
351 mOffsetPoint->getActor()->SetVisibility(visible);
352 mTooltipPoint->getActor()->SetVisibility(visible);
354 if (mStayHiddenAfterVisible)
355 mTooltipPoint->getActor()->SetVisibility(
false);
356 mOffsetLine->getActor()->SetVisibility(visible);
359 if (
similar(0.0, mTool->getTooltipOffset()))
362 mTooltipPoint->getActor()->SetVisibility(
false);
364 mTooltipPoint->getActor()->SetVisibility(visible && mOffsetPointVisibleAtZeroOffset);
365 mOffsetPoint->getActor()->SetVisibility(
false);
366 mOffsetLine->getActor()->SetVisibility(
false);
376 mOffsetPoint->setValue(p1);
377 mOffsetLine->setValue(p0, p1);
378 mTooltipPoint->setValue(
Vector3D(p0));
380 this->scaleSpheres();
383 void ToolRep3D::receiveVisible(
bool visible)
385 if (!visible && mStayVisibleAfterHide)
387 mToolActor->SetVisibility(visible);
389 if (mStayHiddenAfterVisible)
390 mToolActor->SetVisibility(
false);
392 mToolActor->SetVisibility(mTool->getVisible());
399 mStayHiddenAfterVisible = val;
401 receiveVisible(mTool->getVisible());
410 mStayVisibleAfterHide = val;
415 mOffsetPointVisibleAtZeroOffset = val;
418 void ToolRep3D::tooltipOffsetSlot(
double val)
420 updateOffsetGraphics();
boost::shared_ptr< class SpaceProvider > SpaceProviderPtr
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
static boost::shared_ptr< REP > wrap_new(REP *object, QString uid)
QVariant value(const QString &key, const QVariant &defaultValue=QVariant()) const
boost::shared_ptr< class ToolTracer > ToolTracerPtr
Helper for rendering a point in 3D.
boost::shared_ptr< class View > ViewPtr
Listens to changes in viewport and camera matrix.
vtkSmartPointer< class vtkPolyDataNormals > vtkPolyDataNormalsPtr
Helper for rendering a line in 3D.
Default implementation of Rep.
Settings * settings()
Shortcut for accessing the settings instance.
vtkSmartPointer< vtkPolyData > vtkPolyDataPtr
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
bool similar(const CameraInfo &lhs, const CameraInfo &rhs, double tol)
Utility functions for drawing an US Probe sector.
boost::shared_ptr< class ToolRep3D > ToolRep3DPtr
void setColorAndOpacity(vtkPropertyOrProperty2DPtr property, QColor color)
Namespace for all CustusX production code.
boost::shared_ptr< class Tool > ToolPtr