def __init__(self, scene=None): logging.debug("In Ruler::__init__()") self._scene = scene self._distanceWidget = vtk.vtkDistanceWidget() self._handle = vtk.vtkPointHandleRepresentation3D() self._representation = vtk.vtkDistanceRepresentation2D() self._representation.SetHandleRepresentation(self._handle) self._distanceWidget.SetRepresentation(self._representation) self._distanceWidget.CreateDefaultRepresentation() self._distanceWidget.parent = self self._started = False self._lineColor = [0, 1, 0] self._fontColor = [0, 1, 0] self._handle.GetProperty().SetOpacity(0.01) self._distanceWidget.AddObserver("PlacePointEvent", self.startEvent)
def __init__(self, parent=None): QtWidgets.QMainWindow.__init__(self, parent) self.frame = QtWidgets.QFrame() self.vl = QtWidgets.QVBoxLayout() self.vtkWidget = QVTKRenderWindowInteractor(self.frame) self.vl.addWidget(self.vtkWidget) self.ren = vtk.vtkRenderer() self.vtkWidget.GetRenderWindow().AddRenderer(self.ren) self.iren = self.vtkWidget.GetRenderWindow().GetInteractor() self.widget = vtk.vtkDistanceWidget() self.widget.SetInteractor(self.iren) self.handle = vtk.vtkPointHandleRepresentation3D() self.representation = vtk.vtkDistanceRepresentation2D() self.representation.SetHandleRepresentation(self.handle) self.widget.SetRepresentation(self.representation) self.widget.CreateDefaultRepresentation() self.widget.On() # Create source source = vtk.vtkSphereSource() source.SetCenter(0, 0, 0) source.SetRadius(5.0) # Create a mapper mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(source.GetOutputPort()) # Create an actor actor = vtk.vtkActor() actor.SetMapper(mapper) self.ren.AddActor(actor) self.ren.ResetCamera() self.frame.setLayout(self.vl) self.setCentralWidget(self.frame) self.show() self.iren.Initialize() self.iren.Start()
def _handler_new_measurement_button(self, event): widget_type = 0 if widget_type == 0: # instantiate widget with correct init vars name = self._view_frame._measurement_panel.name_cb.GetValue() if not name or name in self._widgets: # FIXME: add error message here pass else: w = vtktudoss.vtkEllipseWidget() w.SetInteractor(self._view_frame._rwi) w.SetEnabled(1) widget = M2DWidget(w, name, 'ellipse') # add it to the internal list self._widgets.add(widget) def observer_interaction(o, e): r = o.GetRepresentation() s = r.GetLabelText() widget.measurement_string = s # c, axis_lengths, radius_vectors mi = widget.measurement_info mi.c = [0.0, 0.0, 0.0] r.GetCenterWorldPosition(mi.c) mi.c[2] = 0.0 mi.axis_lengths = (r.GetSemiMajorAxisLength() * 2.0, r.GetSemiMinorAxisLength() * 2.0, 0.0) mi.radius_vectors = ([0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]) # these vectors describe the principal HALF-axes # of the ellipse, starting out from the centre # (mi.c) r.GetSemiMajorAxisVector(mi.radius_vectors[0]) r.GetSemiMinorAxisVector(mi.radius_vectors[1]) self._sync_measurement_grid() # make sure state is initialised (if one just places # the widget without interacting, the observer won't # be invoked and measurement_info won't have the # necessary attributes; if the network then executes, # there will be errors) widget.measurement_string = '' mi = widget.measurement_info mi.c = [0.0, 0.0, 0.0] mi.axis_lengths = (0.0, 0.0, 0.0) mi.radius_vectors = ([0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]) w.AddObserver('EndInteractionEvent', observer_interaction) # and then make the display thing sync up self._sync_measurement_grid() else: handle = vtk.vtkPointHandleRepresentation2D() handle.GetProperty().SetColor(1, 0, 0) rep = vtk.vtkDistanceRepresentation2D() rep.SetHandleRepresentation(handle) rep.GetAxis().SetNumberOfMinorTicks(4) rep.GetAxis().SetTickLength(9) rep.GetAxis().SetTitlePosition(0.2) w = vtk.vtkDistanceWidget() w.SetInteractor(self._view_frame._rwi) #w.CreateDefaultRepresentation() w.SetRepresentation(rep) w.SetEnabled(1) # instantiate widget with correct init vars widget = M2DWidget(w, 'name', 'ellipse') # add it to the internal list self._widgets.add(w) self.render()
def _handler_new_measurement_button(self, event): widget_type = 0 if widget_type == 0: # instantiate widget with correct init vars name = self._view_frame._measurement_panel.name_cb.GetValue() if not name or name in self._widgets: # FIXME: add error message here pass else: w = vtktudoss.vtkEllipseWidget() w.SetInteractor(self._view_frame._rwi) w.SetEnabled(1) widget = M2DWidget(w, name, 'ellipse') # add it to the internal list self._widgets.add(widget) def observer_interaction(o, e): r = o.GetRepresentation() s = r.GetLabelText() widget.measurement_string = s # c, axis_lengths, radius_vectors mi = widget.measurement_info mi.c = [0.0,0.0,0.0] r.GetCenterWorldPosition(mi.c) mi.c[2] = 0.0 mi.axis_lengths = ( r.GetSemiMajorAxisLength() * 2.0, r.GetSemiMinorAxisLength() * 2.0, 0.0) mi.radius_vectors = ( [0.0,0.0,0.0], [0.0,0.0,0.0], [0.0,0.0,0.0]) # these vectors describe the principal HALF-axes # of the ellipse, starting out from the centre # (mi.c) r.GetSemiMajorAxisVector(mi.radius_vectors[0]) r.GetSemiMinorAxisVector(mi.radius_vectors[1]) self._sync_measurement_grid() # make sure state is initialised (if one just places # the widget without interacting, the observer won't # be invoked and measurement_info won't have the # necessary attributes; if the network then executes, # there will be errors) widget.measurement_string = '' mi = widget.measurement_info mi.c = [0.0,0.0,0.0] mi.axis_lengths = (0.0, 0.0, 0.0) mi.radius_vectors = ( [0.0,0.0,0.0], [0.0,0.0,0.0], [0.0,0.0,0.0]) w.AddObserver('EndInteractionEvent', observer_interaction) # and then make the display thing sync up self._sync_measurement_grid() else: handle = vtk.vtkPointHandleRepresentation2D() handle.GetProperty().SetColor(1,0,0) rep = vtk.vtkDistanceRepresentation2D() rep.SetHandleRepresentation(handle) rep.GetAxis().SetNumberOfMinorTicks(4) rep.GetAxis().SetTickLength(9) rep.GetAxis().SetTitlePosition(0.2) w = vtk.vtkDistanceWidget() w.SetInteractor(self._view_frame._rwi) #w.CreateDefaultRepresentation() w.SetRepresentation(rep) w.SetEnabled(1) # instantiate widget with correct init vars widget = M2DWidget(w, 'name', 'ellipse') # add it to the internal list self._widgets.add(w) self.render()
renWin.AddRenderer(ren1) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # Create a test pipeline ss = vtk.vtkSphereSource() mapper = vtk.vtkPolyDataMapper() mapper.SetInput(ss.GetOutput()) actor = vtk.vtkActor() actor.SetMapper(mapper) # Create the widget and its representation handle = vtk.vtkPointHandleRepresentation2D() handle.GetProperty().SetColor(1,0,0) rep = vtk.vtkDistanceRepresentation2D() rep.SetHandleRepresentation(handle) rep.GetAxis().SetNumberOfMinorTicks(4) rep.GetAxis().SetTickLength(9) rep.GetAxis().SetTitlePosition(0.2) widget = vtk.vtkDistanceWidget() widget.SetInteractor(iren) widget.CreateDefaultRepresentation() widget.SetRepresentation(rep) widget.AddObserver("InteractionEvent", vtkDistanceCallback) widget.AddObserver("EndInteractionEvent", vtkDistanceCallback) widget.AddObserver("PlacePointEvent", vtkDistanceCallback) widget.AddObserver("StartInteractionEvent", vtkDistanceCallback)