コード例 #1
0
    def GenerateMould(self, facePolydata, distanceFromMask, ROI, tubePolydata, clippedFace):
        ROIExtents = self.utility.GetROIExtents(ROI)
        outerFaceImplicitFunction = vtk.vtkImplicitModeller()
        outerFaceImplicitFunction.SetInputConnection(facePolydata.GetOutputPort())
        outerFaceImplicitFunction.SetSampleDimensions(70, 70, 70)
        outerFaceImplicitFunction.SetMaximumDistance(distanceFromMask)
        outerFaceImplicitFunction.SetModelBounds(ROIExtents)
        outerFaceImplicitFunction.SetProcessModeToPerVoxel()
        outerMaskContourFunction = vtk.vtkContourFilter()
        # TODO Find out the the allowed thinkness of the plastic
        THICKNESS = 3
        outerMaskContourFunction.SetValue(0, THICKNESS)
        outerMaskContourFunction.SetInputConnection(outerFaceImplicitFunction.GetOutputPort())

        outerFaceNormalsFunction = vtk.vtkPolyDataNormals()
        outerFaceNormalsFunction.AutoOrientNormalsOn()
        outerFaceNormalsFunction.AddInputConnection(outerMaskContourFunction.GetOutputPort())
        # Subtract the Tubes from the mask
        subtractionFilter1 = vtk.vtkBooleanOperationPolyDataFilter()
        subtractionFilter1.SetOperationToDifference()
        subtractionFilter1.SetInputConnection(0, outerFaceNormalsFunction.GetOutputPort())
        subtractionFilter1.SetInputConnection(1, tubePolydata.GetOutputPort())
        # Subtract the inner face from the outer face to make the mask
        subtractionFilter2 = vtk.vtkBooleanOperationPolyDataFilter()
        subtractionFilter2.SetOperationToDifference()
        subtractionFilter2.SetInputConnection(0, subtractionFilter1.GetOutputPort())
        subtractionFilter2.SetInputConnection(1, clippedFace.GetOutputPort())
        x = self.utility.DisplayPolyData("Mask", subtractionFilter2.GetOutput())
        x.SetColor(0.8, 0.8, 0.8)
        x.SetOpacity(1)
コード例 #2
0
    def MinimumDistanceMask(self,
                            vtkAlgorythmObject,
                            distanceFromMask,
                            ROI,
                            ruler,
                            isBubble=False):
        """ Takes an algorythm object which is will send through a pipeline to 
    create a mask defining the minimum distance value from the skin surface
    returns an algorythm object as well to preform GetOutput() -> polydata
    or GetOutputPort() -> algorythm
    see MinimumDistanceMask.pdf 
    """
        if distanceFromMask < 2:
            print "WARNING: MouldLogic: MinimumDistanceMask implicit",
            "modeling is very unstable below 1.5 , mask may degrade",
            "and lines will become discontinuous."
        Extents = self.utility.GetROIExtents(ROI)
        if (isBubble):
            Extents = self.utility.ExpandExtents(Extents, 100)
        implicitModeller = vtk.vtkImplicitModeller()
        implicitModeller.SetInputConnection(vtkAlgorythmObject.GetOutputPort())
        implicitModeller.SetMaximumDistance(distanceFromMask)
        implicitModeller.SetModelBounds(Extents)
        implicitModeller.AdjustBoundsOn()
        implicitModeller.SetAdjustBounds(10)  # Removes the boundary effects
        implicitModeller.CappingOff(
        )  # Important to create disjoint inner and outer masks
        implicitModeller.SetProcessModeToPerVoxel()
        implicitModeller.Update()

        contourFilter = vtk.vtkContourFilter()
        contourFilter.SetValue(0, distanceFromMask)
        contourFilter.SetInputConnection(implicitModeller.GetOutputPort())
        contourFilter.Update()

        normalsFunction = vtk.vtkPolyDataNormals()
        normalsFunction.FlipNormalsOn()
        normalsFunction.AddInputConnection(contourFilter.GetOutputPort())
        normalsFunction.Update()

        implicitBoxRegion = vtk.vtkBox()
        implicitBoxRegion.SetBounds(Extents)
        clipper2 = vtk.vtkClipPolyData()
        clipper2.InsideOutOn()  # Clip the regions outside of implicit function
        clipper2.SetInputConnection(normalsFunction.GetOutputPort())
        clipper2.SetClipFunction(implicitBoxRegion)
        clipper2.Update()

        closestPoint = [0, 0, 0]
        ruler.GetPosition1(closestPoint)
        connectivityFilter = vtk.vtkPolyDataConnectivityFilter()
        connectivityFilter.SetInputConnection(clipper2.GetOutputPort())
        connectivityFilter.SetExtractionModeToClosestPointRegion()
        connectivityFilter.SetClosestPoint(closestPoint)
        connectivityFilter.Update()

        return connectivityFilter.GetOutput()
コード例 #3
0
    def MinimumDistanceMask(self, vtkAlgorythmObject, distanceFromMask, ROI, ruler, isBubble=False):
        """ Takes an algorythm object which is will send through a pipeline to 
    create a mask defining the minimum distance value from the skin surface
    returns an algorythm object as well to preform GetOutput() -> polydata
    or GetOutputPort() -> algorythm
    see MinimumDistanceMask.pdf 
    """
        if distanceFromMask < 2:
            print "WARNING: MouldLogic: MinimumDistanceMask implicit",
            "modeling is very unstable below 1.5 , mask may degrade",
            "and lines will become discontinuous."
        Extents = self.utility.GetROIExtents(ROI)
        if isBubble:
            Extents = self.utility.ExpandExtents(Extents, 100)
        implicitModeller = vtk.vtkImplicitModeller()
        implicitModeller.SetInputConnection(vtkAlgorythmObject.GetOutputPort())
        implicitModeller.SetMaximumDistance(distanceFromMask)
        implicitModeller.SetModelBounds(Extents)
        implicitModeller.AdjustBoundsOn()
        implicitModeller.SetAdjustBounds(10)  # Removes the boundary effects
        implicitModeller.CappingOff()  # Important to create disjoint inner and outer masks
        implicitModeller.SetProcessModeToPerVoxel()
        implicitModeller.Update()

        contourFilter = vtk.vtkContourFilter()
        contourFilter.SetValue(0, distanceFromMask)
        contourFilter.SetInputConnection(implicitModeller.GetOutputPort())
        contourFilter.Update()

        normalsFunction = vtk.vtkPolyDataNormals()
        normalsFunction.FlipNormalsOn()
        normalsFunction.AddInputConnection(contourFilter.GetOutputPort())
        normalsFunction.Update()

        implicitBoxRegion = vtk.vtkBox()
        implicitBoxRegion.SetBounds(Extents)
        clipper2 = vtk.vtkClipPolyData()
        clipper2.InsideOutOn()  # Clip the regions outside of implicit function
        clipper2.SetInputConnection(normalsFunction.GetOutputPort())
        clipper2.SetClipFunction(implicitBoxRegion)
        clipper2.Update()

        closestPoint = [0, 0, 0]
        ruler.GetPosition1(closestPoint)
        connectivityFilter = vtk.vtkPolyDataConnectivityFilter()
        connectivityFilter.SetInputConnection(clipper2.GetOutputPort())
        connectivityFilter.SetExtractionModeToClosestPointRegion()
        connectivityFilter.SetClosestPoint(closestPoint)
        connectivityFilter.Update()

        return connectivityFilter.GetOutput()
コード例 #4
0
    def AddTubeToMask(self, maskPolydata, tube, ROI, radius, ruler):
        ROIExtents = self.utility.GetROIExtents(ROI)
        implicitFilter = vtk.vtkImplicitModeller()
        implicitFilter.SetInput(tube)
        implicitFilter.SetSampleDimensions(70, 70, 70)
        implicitFilter.SetMaximumDistance(radius)
        implicitFilter.SetModelBounds(ROIExtents)
        implicitFilter.SetProcessModeToPerVoxel()
        contourFilter = vtk.vtkContourFilter()
        contourFilter.SetValue(0, radius)
        implicitFilter.AdjustBoundsOn()
        implicitFilter.SetAdjustBounds(1)  # Removes the boundary effects
        implicitFilter.CappingOff()
        contourFilter.SetInputConnection(implicitFilter.GetOutputPort())
        normalsFunction = vtk.vtkPolyDataNormals()
        normalsFunction.AutoOrientNormalsOn()
        normalsFunction.AddInputConnection(contourFilter.GetOutputPort())

        unionFilter = vtk.vtkBooleanOperationPolyDataFilter()
        unionFilter.SetOperationToUnion()
        unionFilter.SetInput(0, normalsFunction.GetOutput())
        unionFilter.SetInput(1, maskPolydata)
        return unionFilter.GetOutput()
コード例 #5
0
    def AddTubeToMask(self, maskPolydata, tube, ROI, radius, ruler):
        ROIExtents = self.utility.GetROIExtents(ROI)
        implicitFilter = vtk.vtkImplicitModeller()
        implicitFilter.SetInput(tube)
        implicitFilter.SetSampleDimensions(70, 70, 70)
        implicitFilter.SetMaximumDistance(radius)
        implicitFilter.SetModelBounds(ROIExtents)
        implicitFilter.SetProcessModeToPerVoxel()
        contourFilter = vtk.vtkContourFilter()
        contourFilter.SetValue(0, radius)
        implicitFilter.AdjustBoundsOn()
        implicitFilter.SetAdjustBounds(1)  # Removes the boundary effects
        implicitFilter.CappingOff()
        contourFilter.SetInputConnection(implicitFilter.GetOutputPort())
        normalsFunction = vtk.vtkPolyDataNormals()
        normalsFunction.AutoOrientNormalsOn()
        normalsFunction.AddInputConnection(contourFilter.GetOutputPort())

        unionFilter = vtk.vtkBooleanOperationPolyDataFilter()
        unionFilter.SetOperationToUnion()
        unionFilter.SetInput(0, normalsFunction.GetOutput())
        unionFilter.SetInput(1, maskPolydata)
        return unionFilter.GetOutput()
コード例 #6
0
    def GenerateMould(self, facePolydata, distanceFromMask, ROI, tubePolydata,
                      clippedFace):
        ROIExtents = self.utility.GetROIExtents(ROI)
        outerFaceImplicitFunction = vtk.vtkImplicitModeller()
        outerFaceImplicitFunction.SetInputConnection(
            facePolydata.GetOutputPort())
        outerFaceImplicitFunction.SetSampleDimensions(70, 70, 70)
        outerFaceImplicitFunction.SetMaximumDistance(distanceFromMask)
        outerFaceImplicitFunction.SetModelBounds(ROIExtents)
        outerFaceImplicitFunction.SetProcessModeToPerVoxel()
        outerMaskContourFunction = vtk.vtkContourFilter()
        #TODO Find out the the allowed thinkness of the plastic
        THICKNESS = 3
        outerMaskContourFunction.SetValue(0, THICKNESS)
        outerMaskContourFunction.SetInputConnection(
            outerFaceImplicitFunction.GetOutputPort())

        outerFaceNormalsFunction = vtk.vtkPolyDataNormals()
        outerFaceNormalsFunction.AutoOrientNormalsOn()
        outerFaceNormalsFunction.AddInputConnection(
            outerMaskContourFunction.GetOutputPort())
        # Subtract the Tubes from the mask
        subtractionFilter1 = vtk.vtkBooleanOperationPolyDataFilter()
        subtractionFilter1.SetOperationToDifference()
        subtractionFilter1.SetInputConnection(
            0, outerFaceNormalsFunction.GetOutputPort())
        subtractionFilter1.SetInputConnection(1, tubePolydata.GetOutputPort())
        # Subtract the inner face from the outer face to make the mask
        subtractionFilter2 = vtk.vtkBooleanOperationPolyDataFilter()
        subtractionFilter2.SetOperationToDifference()
        subtractionFilter2.SetInputConnection(
            0, subtractionFilter1.GetOutputPort())
        subtractionFilter2.SetInputConnection(1, clippedFace.GetOutputPort())
        x = self.utility.DisplayPolyData("Mask",
                                         subtractionFilter2.GetOutput())
        x.SetColor(0.8, 0.8, 0.8)
        x.SetOpacity(1)