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>
59 mSpaceProvider(spaceProvider),
60 mSphereRadiusInNormalizedViewport(false),
61 mTooltipPointColor(QColor::fromRgbF(1.0, 0.8, 0.0)),
62 mOffsetPointColor(QColor::fromRgbF(1.0, 0.8, 0.0)),
63 mOffsetLineColor(QColor::fromRgbF(1.0, 0.8, 0.0)),
64 mStipplePattern(0xFFFF)
67 mStayHiddenAfterVisible =
false;
68 mStayVisibleAfterHide =
false;
69 mOffsetPointVisibleAtZeroOffset =
false;
70 mToolActor = vtkActorPtr::New();
71 mPolyDataMapper = vtkPolyDataMapperPtr::New();
79 mProbeSectorPolyDataMapper = vtkPolyDataMapperPtr::New();
80 mProbeSectorActor = vtkActorPtr::New();
111 void ToolRep3D::updateToolActor()
115 mToolActor->SetMapper(NULL);
124 normals->SetInputData(model);
125 mPolyDataMapper->SetInputConnection(normals->GetOutputPort());
126 mPolyDataMapper->Update();
127 mToolActor->SetMapper(mPolyDataMapper);
131 mToolActor->GetProperty()->SetColor(1.0, 1.0, 1.0);
138 mToolActor->SetVisibility(mTool->getVisible());
146 mTracer->setTool(tool);
150 disconnect(mTool.get(), SIGNAL(toolTransformAndTimestamp(
Transform3D,
double)),
this, SLOT(
setModified()));
151 disconnect(mTool.get(), SIGNAL(toolVisible(
bool)),
this, SLOT(receiveVisible(
bool)));
152 disconnect(mTool.get(), SIGNAL(tooltipOffset(
double)),
this, SLOT(tooltipOffsetSlot(
double)));
153 disconnect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(probeSectorChanged()));
154 disconnect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(updateToolActor()));
162 connect(mTool.get(), SIGNAL(toolVisible(
bool)),
this, SLOT(receiveVisible(
bool)));
163 connect(mTool.get(), SIGNAL(tooltipOffset(
double)),
this, SLOT(tooltipOffsetSlot(
double)));
164 connect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(probeSectorChanged()));
165 connect(mTool.get(), SIGNAL(toolProbeSector()),
this, SLOT(updateToolActor()));
168 this->updateToolActor();
170 this->probeSectorChanged();
175 return (mTool == tool);
180 mSphereRadius = radius;
182 mOffsetPoint->setRadius(mSphereRadius);
184 mTooltipPoint->setRadius(mSphereRadius);
189 mTooltipPointColor = c;
194 mOffsetPointColor = c;
199 mOffsetLineColor = c;
204 mStipplePattern = pattern;
209 if (mSphereRadiusInNormalizedViewport == on)
212 mSphereRadiusInNormalizedViewport = on;
217 mViewportListener->setCallback(boost::bind(&ToolRep3D::scaleSpheres,
this));
221 mViewportListener.reset();
227 view->getRenderer()->AddActor(mTracer->getActor());
229 view->getRenderer()->AddActor(mToolActor);
230 view->getRenderer()->AddActor(mProbeSectorActor);
233 mOffsetPoint->setRadius(mSphereRadius);
234 mOffsetPoint->setColor(mOffsetPointColor);
237 mTooltipPoint->setRadius(mSphereRadius);
238 mTooltipPoint->setColor(mTooltipPointColor);
241 mOffsetLine->setColor(mOffsetLineColor);
242 mOffsetLine->setStipple(mStipplePattern);
244 mTooltipPoint->getActor()->SetVisibility(
false);
245 mOffsetPoint->getActor()->SetVisibility(
false);
246 mOffsetLine->getActor()->SetVisibility(
false);
248 if (mViewportListener)
249 mViewportListener->startListen(view->getRenderer());
252 view->getRenderer()->AddActor(mRTStream->getActor());
257 view->getRenderer()->RemoveActor(mTracer->getActor());
258 view->getRenderer()->RemoveActor(mToolActor);
259 view->getRenderer()->RemoveActor(mProbeSectorActor);
261 view->getRenderer()->RemoveActor(mRTStream->getActor());
267 if (mViewportListener)
268 mViewportListener->stopListen();
277 void ToolRep3D::scaleSpheres()
279 if (!mViewportListener)
281 if (!mViewportListener->isListening())
284 double size = mViewportListener->getVpnZoom();
285 double sphereSize = mSphereRadius/100/size;
288 mOffsetPoint->setRadius(sphereSize);
290 mTooltipPoint->setRadius(sphereSize);
299 void ToolRep3D::update()
303 prMt = mTool->get_prMt();
307 mToolActor->SetUserMatrix(rMt.getVtkMatrix());
312 mProbeSectorActor->SetUserMatrix((rMpr * prMt * tMu).
getVtkMatrix());
313 mProbeSectorActor->SetVisibility(mTool->getVisible());
316 mProbeSectorActor->SetVisibility(
false);
318 this->updateOffsetGraphics();
321 void ToolRep3D::probeSectorChanged()
331 mProbeSector->setData(mTool->getProbe()->getProbeData());
334 mProbeSectorPolyDataMapper->SetInputData(mProbeSector->getSectorLinesOnly());
335 if (mProbeSectorPolyDataMapper->GetInput())
337 mProbeSectorActor->SetMapper(mProbeSectorPolyDataMapper);
339 mProbeSectorActor->SetUserMatrix((rMpr * prMt * tMu).
getVtkMatrix());
340 mProbeSectorActor->SetVisibility(mTool->getVisible());
344 mRTStream->setTool(mTool);
347 mRTStream->setRealtimeStream(probe->getRTSource());
351 mProbeSectorActor->SetVisibility(
false);
354 void ToolRep3D::updateOffsetGraphics()
356 bool visible = mTool && mTool->getVisible();
358 if (!mStayVisibleAfterHide || (mOffsetPoint->getActor()->GetVisibility() ==
false))
360 mOffsetPoint->getActor()->SetVisibility(visible);
361 mTooltipPoint->getActor()->SetVisibility(visible);
363 if (mStayHiddenAfterVisible)
364 mTooltipPoint->getActor()->SetVisibility(
false);
365 mOffsetLine->getActor()->SetVisibility(visible);
368 if (
similar(0.0, mTool->getTooltipOffset()))
371 mTooltipPoint->getActor()->SetVisibility(
false);
373 mTooltipPoint->getActor()->SetVisibility(visible && mOffsetPointVisibleAtZeroOffset);
374 mOffsetPoint->getActor()->SetVisibility(
false);
375 mOffsetLine->getActor()->SetVisibility(
false);
385 mOffsetPoint->setValue(p1);
386 mOffsetLine->setValue(p0, p1);
387 mTooltipPoint->setValue(
Vector3D(p0));
389 this->scaleSpheres();
392 void ToolRep3D::receiveVisible(
bool visible)
394 if (!visible && mStayVisibleAfterHide)
396 mToolActor->SetVisibility(visible);
398 if (mStayHiddenAfterVisible)
399 mToolActor->SetVisibility(
false);
401 mToolActor->SetVisibility(mTool->getVisible());
408 mStayHiddenAfterVisible = val;
410 receiveVisible(mTool->getVisible());
419 mStayVisibleAfterHide = val;
424 mOffsetPointVisibleAtZeroOffset = val;
427 void ToolRep3D::tooltipOffsetSlot(
double val)
429 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)
boost::shared_ptr< class ToolTracer > ToolTracerPtr
Helper for rendering a point in 3D.
boost::shared_ptr< class View > ViewPtr
vtkSmartPointer< class vtkPolyData > vtkPolyDataPtr
bool similar(const DoubleBoundingBox3D &a, const DoubleBoundingBox3D &b, double tol)
Listens to changes in viewport and camera matrix.
Helper class for displaying a VideoSource.
boost::shared_ptr< Probe > ProbePtr
vtkSmartPointer< class vtkPolyDataNormals > vtkPolyDataNormalsPtr
Helper for rendering a line in 3D.
Default implementation of Rep.
cxLogicManager_EXPORT SpaceProviderPtr spaceProvider()
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
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