Example #1
0
def transformPolyData(polyData, transform):

    t = vtk.vtkTransformPolyDataFilter()
    t.SetTransform(transform)
    t.SetInputData(shallowCopy(polyData))
    t.Update()
    return shallowCopy(t.GetOutput())
Example #2
0
def transformPolyData(polyData, transform):

    t = vtk.vtkTransformPolyDataFilter()
    t.SetTransform(transform)
    t.SetInput(shallowCopy(polyData))
    t.Update()
    return shallowCopy(t.GetOutput())
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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())
Example #6
0
 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)
Example #7
0
    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())
Example #8
0
 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)
Example #9
0
    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())
Example #10
0
    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)
Example #11
0
    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)