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 mTooltipPointColor = c;
193 mOffsetPointColor = c;
198 mOffsetLineColor = c;
203 mStipplePattern = pattern;
208 if (mSphereRadiusInNormalizedViewport == on)
211 mSphereRadiusInNormalizedViewport = on;
216 mViewportListener->setCallback(boost::bind(&ToolRep3D::scaleSpheres,
this));
220 mViewportListener.reset();
226 view->getRenderer()->AddActor(mTracer->getActor());
228 view->getRenderer()->AddActor(mToolActor);
229 view->getRenderer()->AddActor(mProbeSectorActor);
232 mOffsetPoint->setRadius(mSphereRadius);
233 mOffsetPoint->setColor(mOffsetPointColor);
236 mTooltipPoint->setRadius(mSphereRadius);
237 mTooltipPoint->setColor(mTooltipPointColor);
240 mOffsetLine->setColor(mOffsetLineColor);
241 mOffsetLine->setStipple(mStipplePattern);
243 mTooltipPoint->getActor()->SetVisibility(
false);
244 mOffsetPoint->getActor()->SetVisibility(
false);
245 mOffsetLine->getActor()->SetVisibility(
false);
247 if (mViewportListener)
248 mViewportListener->startListen(view->getRenderer());
253 view->getRenderer()->RemoveActor(mTracer->getActor());
254 view->getRenderer()->RemoveActor(mToolActor);
255 view->getRenderer()->RemoveActor(mProbeSectorActor);
261 if (mViewportListener)
262 mViewportListener->stopListen();
271 void ToolRep3D::scaleSpheres()
273 if (!mViewportListener)
275 if (!mViewportListener->isListening())
278 double size = mViewportListener->getVpnZoom();
279 double sphereSize = mSphereRadius/100/size;
282 mOffsetPoint->setRadius(sphereSize);
284 mTooltipPoint->setRadius(sphereSize);
293 void ToolRep3D::update()
297 prMt = mTool->get_prMt();
301 mToolActor->SetUserMatrix(rMt.getVtkMatrix());
306 mProbeSectorActor->SetUserMatrix((rMpr * prMt * tMu).
getVtkMatrix());
307 mProbeSectorActor->SetVisibility(mTool->getVisible());
310 mProbeSectorActor->SetVisibility(
false);
312 this->updateOffsetGraphics();
315 void ToolRep3D::probeSectorChanged()
325 mProbeSector->setData(mTool->getProbe()->getProbeDefinition());
328 mProbeSectorPolyDataMapper->SetInputData(mProbeSector->getSectorLinesOnly());
329 if (mProbeSectorPolyDataMapper->GetInput())
331 mProbeSectorActor->SetMapper(mProbeSectorPolyDataMapper);
333 mProbeSectorActor->SetUserMatrix((rMpr * prMt * tMu).
getVtkMatrix());
334 mProbeSectorActor->SetVisibility(mTool->getVisible());
337 mProbeSectorActor->SetVisibility(
false);
340 void ToolRep3D::updateOffsetGraphics()
342 bool visible = mTool && mTool->getVisible();
344 if (!mStayVisibleAfterHide || (mOffsetPoint->getActor()->GetVisibility() ==
false))
346 mOffsetPoint->getActor()->SetVisibility(visible);
347 mTooltipPoint->getActor()->SetVisibility(visible);
349 if (mStayHiddenAfterVisible)
350 mTooltipPoint->getActor()->SetVisibility(
false);
351 mOffsetLine->getActor()->SetVisibility(visible);
354 if (
similar(0.0, mTool->getTooltipOffset()))
357 mTooltipPoint->getActor()->SetVisibility(
false);
359 mTooltipPoint->getActor()->SetVisibility(visible && mOffsetPointVisibleAtZeroOffset);
360 mOffsetPoint->getActor()->SetVisibility(
false);
361 mOffsetLine->getActor()->SetVisibility(
false);
371 mOffsetPoint->setValue(p1);
372 mOffsetLine->setValue(p0, p1);
373 mTooltipPoint->setValue(
Vector3D(p0));
375 this->scaleSpheres();
378 void ToolRep3D::receiveVisible(
bool visible)
380 if (!visible && mStayVisibleAfterHide)
382 mToolActor->SetVisibility(visible);
384 if (mStayHiddenAfterVisible)
385 mToolActor->SetVisibility(
false);
387 mToolActor->SetVisibility(mTool->getVisible());
394 mStayHiddenAfterVisible = val;
396 receiveVisible(mTool->getVisible());
405 mStayVisibleAfterHide = val;
410 mOffsetPointVisibleAtZeroOffset = val;
413 void ToolRep3D::tooltipOffsetSlot(
double val)
415 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 vtkPolyData > vtkPolyDataPtr
vtkSmartPointer< class vtkPolyDataNormals > vtkPolyDataNormalsPtr
Helper for rendering a line in 3D.
Default implementation of Rep.
Settings * settings()
Shortcut for accessing the settings instance.
cxLogicManager_EXPORT SpaceProviderPtr spaceProvider()
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(vtkPropertyPtr property, QColor color)
boost::shared_ptr< class Tool > ToolPtr