def transformPolyData(polyData, transform): t = vtk.vtkTransformPolyDataFilter() t.SetTransform(transform) t.SetInputData(shallowCopy(polyData)) t.Update() return shallowCopy(t.GetOutput())
def transformPolyData(polyData, transform): t = vtk.vtkTransformPolyDataFilter() t.SetTransform(transform) t.SetInput(shallowCopy(polyData)) t.Update() return shallowCopy(t.GetOutput())
def updateGeometryFromProperties(self): filename = self.getProperty('Filename') scale = self.getProperty('Scale') if not filename: polyData = vtk.vtkPolyData() else: polyData = self.getMeshManager().get(filename) if not polyData: if not os.path.isabs(filename): filename = os.path.join(director.getDRCBaseDir(), filename) if os.path.isfile(filename): polyData = ioUtils.readPolyData(filename) if not scale == [1, 1, 1]: transform = vtk.vtkTransform() transform.Scale(scale) transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetInput(polyData) transformFilter.SetTransform(transform) transformFilter.Update() polyData = transformFilter.GetOutput() else: # use axes as a placeholder mesh d = DebugData() d.addFrame(vtk.vtkTransform(), scale=0.1, tubeRadius=0.005) polyData = d.getPolyData() self.setPolyData(polyData)
def updateGeometryFromProperties(self): filename = self.getProperty('Filename') scale = self.getProperty('Scale') if not filename: polyData = vtk.vtkPolyData() else: polyData = self.getMeshManager().get(filename) if not polyData: if not os.path.isabs(filename): filename = os.path.join(director.getDRCBaseDir(), filename) if os.path.isfile(filename): polyData = ioUtils.readPolyData(filename) if not scale == [1, 1, 1]: transform = vtk.vtkTransform() transform.Scale(scale) transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetInput(polyData) transformFilter.SetTransform(transform) transformFilter.Update() polyData = transformFilter.GetOutput() else: # use axes as a placeholder mesh d = DebugData() d.addFrame(vtk.vtkTransform(), scale=0.1, tubeRadius=0.005) polyData = d.getPolyData() self.setPolyData(polyData)
def vtkICP(self): object_name = str(self.ui.alignObject.text) if object_name == "" or not om.findObjectByName(object_name): print "object: " + object_name + " not found" return model = vtk.vtkPolyData() om.findObjectByName(object_name + ".urdf").model.getModelMesh(model) scene = om.findObjectByName(object_name).polyData icp = vtk.vtkIterativeClosestPointTransform() icp.SetMaximumNumberOfIterations(100) #need to shift centroid to center of abject after clicking on it icp.StartByMatchingCentroidsOn() icp.SetSource(model) icp.SetTarget(scene) icp.GetLandmarkTransform().SetModeToRigidBody() icp.Modified() icp.Update() t = vtk.vtkTransformPolyDataFilter() t.SetInput(model) t.SetTransform(icp) t.Update() transformedObject = t.GetOutput() print transformedObject vis.showPolyData(transformedObject, object_name + "_transform", color=[0, 1, 0], parent=self.getTransformedObjectsFolder()) self.packageAlignmentResult(object_name, icp.GetMatrix())
def addFrame(self, frame, scale, tubeRadius=0.0): axes = vtk.vtkAxes() axes.ComputeNormalsOff() axes.SetScaleFactor(scale) transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetTransform(frame) transformFilter.SetInputConnection(axes.GetOutputPort()) transformFilter.Update() polyData = transformFilter.GetOutput() colors = np.array([[255, 0, 0], [255, 0, 0], [0, 255, 0], [0, 255, 0], [0, 0, 255], [0, 0, 255]], dtype=np.uint8) vnp.addNumpyToVtk(polyData, colors, 'RGB255') if tubeRadius: polyData = applyTubeFilter(polyData, tubeRadius) self.addPolyData(polyData, color=None)
def addTorus(self, radius, thickness, resolution=30): q = vtk.vtkSuperquadricSource() q.SetToroidal(1) q.SetSize(radius) q.SetThetaResolution(resolution) # thickness doesnt seem to match to Eucliean units. 0 is none. 1 is full. .1 is a good valve q.SetThickness(thickness) q.Update() # rotate Torus so that the hole axis (internally y), is set to be z, which we use for valves transform = vtk.vtkTransform() transform.RotateWXYZ(90, 1, 0, 0) transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetTransform(transform) transformFilter.SetInputConnection(q.GetOutputPort()) transformFilter.Update() self.addPolyData(transformFilter.GetOutput())
def addFrame(self, frame, scale, tubeRadius=0.0): axes = vtk.vtkAxes() axes.ComputeNormalsOff() axes.SetScaleFactor(scale) transformFilter=vtk.vtkTransformPolyDataFilter() transformFilter.SetTransform(frame) transformFilter.SetInputConnection(axes.GetOutputPort()) transformFilter.Update() polyData = transformFilter.GetOutput() colors = np.array( [[255, 0, 0], [255, 0, 0], [0, 255, 0], [0, 255, 0], [0, 0, 255], [0, 0, 255]], dtype=np.uint8) vnp.addNumpyToVtk(polyData, colors, 'RGB255') if tubeRadius: polyData = applyTubeFilter(polyData, tubeRadius) self.addPolyData(polyData, color=None)
def addTorus(self, radius, thickness, resolution=30): q = vtk.vtkSuperquadricSource() q.SetToroidal(1) q.SetSize(radius) q.SetThetaResolution(resolution) # thickness doesnt seem to match to Eucliean units. 0 is none. 1 is full. .1 is a good valve q.SetThickness(thickness) q.Update() # rotate Torus so that the hole axis (internally y), is set to be z, which we use for valves transform = vtk.vtkTransform() transform.RotateWXYZ(90,1,0,0) transformFilter=vtk.vtkTransformPolyDataFilter() transformFilter.SetTransform(transform) transformFilter.SetInputConnection(q.GetOutputPort()) transformFilter.Update() self.addPolyData(transformFilter.GetOutput())
def addEllipsoid(self, center, radii, resolution=24, color=[1, 1, 1]): """ Add an ellipsoid centered at [center] with x, y, and z principal axis radii given by radii = [x_scale, y_scale, z_scale] """ sphere = vtk.vtkSphereSource() sphere.SetCenter([0, 0, 0]) sphere.SetThetaResolution(resolution) sphere.SetPhiResolution(resolution) sphere.SetRadius(1.0) sphere.Update() transform = vtk.vtkTransform() transform.Translate(center) transform.Scale(radii) transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetTransform(transform) transformFilter.SetInputConnection(sphere.GetOutputPort()) transformFilter.Update() self.addPolyData(transformFilter.GetOutput(), color)
def addEllipsoid(self, center, radii, resolution=24, color=[1,1,1]): """ Add an ellipsoid centered at [center] with x, y, and z principal axis radii given by radii = [x_scale, y_scale, z_scale] """ sphere = vtk.vtkSphereSource() sphere.SetCenter([0,0,0]) sphere.SetThetaResolution(resolution) sphere.SetPhiResolution(resolution) sphere.SetRadius(1.0) sphere.Update() transform = vtk.vtkTransform() transform.Translate(center) transform.Scale(radii) transformFilter = vtk.vtkTransformPolyDataFilter() transformFilter.SetTransform(transform) transformFilter.SetInputConnection(sphere.GetOutputPort()) transformFilter.Update() self.addPolyData(transformFilter.GetOutput(), color)