VTK 实例54:封闭性检测


1 #include "vtkAutoInit.h" 2 VTK_MODULE_INIT(vtkRenderingOpenGL2); 3 VTK_MODULE_INIT(vtkInteractionStyle); 4 5 #include <vtkSmartPointer.h> 6 #include <vtkSelectionNode.h> 7 #include <vtkInformation.h> 8 #include <vtkUnstructuredGrid.h> 9 #include <vtkPolyData.h> 10 #include <vtkPolyDataNormals.h> 11 #include <vtkPointData.h> 12 #include <vtkXMLPolyDataReader.h> 13 #include <vtkRenderWindoh> 14 #include <vtkRenderWindowInteractor.h> 15 #include <vtkRenderer.h> 16 #include <vtkSelection.h> 17 #include <vtkSelectionNode.h> 18 #include <vtkSphereSource.h> 19 #include <vtkPolyDataMapper.h> 20 #include <vtkActor.h> 21 #include <vtkCamera.h> 22 #include <vtkProperty.h> 23 #include <vtkIdTypeArray.h> 24 #include <vtkExtractSelection.h> 25 #include <vtkDataSetSurfaceFilter.h> 26 #include <vtkFeatureEdges.h> 27 #include <vtkFillHolesFilter.h> 28 29 void GenerateData(vtkSmartPointer<vtkPolyData> input) 30 65 66 int main(int argc, char *argv[]) 67 86 else 87 91 92 vtkSmartPointer<vtkFillHolesFilter> fillHolesFilter = 93 vtkSmartPointer<vtkFillHolesFilter>::New(); 94 fillHolesFilter>SetInputData(input); 95 fillHolesFilter>Update(); 96 97 vtkSmartPointer<vtkPolyDataNormals> normals = 98 vtkSmartPointer<vtkPolyDataNormals>::New(); 99 normals>SetInputConnection(fillHolesFilter>GetOutputPort()); 100 normals>ConsistencyOn(); 101 normals>SplittingOff(); 102 normals>Update(); 103 104 // 105 double leftViewport[4] = ; 106 double rightViewport[4] = ; 107 108 vtkSmartPointer<vtkPolyDataMapper> originalMapper = 109 vtkSmartPointer<vtkPolyDataMapper>::New(); 110 originalMapper>SetInputData(input); 111 112 vtkSmartPointer<vtkProperty> backfaceProp = 113 vtkSmartPointer<vtkProperty>::New(); 114 backfaceProp>SetDiffuseColor(0.89,0.81,0.34); 115 116 vtkSmartPointer<vtkActor> originalActor = 117 vtkSmartPointer<vtkActor>::New(); 118 originalActor>SetMapper(originalMapper); 119 originalActor>SetBackfaceProperty(backfaceProp); 120 originalActor>GetProperty()>SetDiffuseColor(1.0, 0.3882, 0.2784); 121 122 vtkSmartPointer<vtkPolyDataMapper> edgeMapper = 123 vtkSmartPointer<vtkPolyDataMapper>::New(); 124 edgeMapper>SetInputData(featureEdges>GetOutput()); 125 vtkSmartPointer<vtkActor> edgeActor = 126 vtkSmartPointer<vtkActor>::New(); 127 edgeActor>SetMapper(edgeMapper); 128 edgeActor>GetProperty()>SetEdgeColor(0.,0.,1.0); 129 edgeActor>GetProperty()>SetEdgeVisibility(1); 130 edgeActor>GetProperty()>SetLineWidth(5); 131 132 vtkSmartPointer<vtkPolyDataMapper> filledMapper = 133 vtkSmartPointer<vtkPolyDataMapper>::New(); 134 filledMapper>SetInputData(normals>GetOutput()); 135 136 vtkSmartPointer<vtkActor> filledActor = 137 vtkSmartPointer<vtkActor>::New(); 138 filledActor>SetMapper(filledMapper); 139 filledActor>GetProperty()>SetDiffuseColor(1.0, 0.3882, 0.2784); 140 141 vtkSmartPointer<vtkRenderer> leftRenderer = 142 vtkSmartPointer<vtkRenderer>::New(); 143 leftRenderer>SetViewport(leftViewport); 144 leftRenderer>AddActor(originalActor); 145 leftRenderer>AddActor(edgeActor); 146 leftRenderer>SetBackground(1.0, 1.0, 1.0); 147 148 vtkSmartPointer<vtkRenderer> rightRenderer = 149 vtkSmartPointer<vtkRenderer>::New(); 150 rightRenderer>SetViewport(rightViewport); 151 rightRenderer>AddActor(filledActor); 152 rightRenderer>SetBackground(1.0, 1.0, 1.0); 153 154 vtkSmartPointer<vtkRenderWindow> renderWindow = 155 vtkSmartPointer<vtkRenderWindow>::New(); 156 renderWindow>AddRenderer(leftRenderer); 157 renderWindow>AddRenderer(rightRenderer); 158 renderWindow>SetSize(640, 320); 159 renderWindow>Render(); 160 renderWindow>SetWindowName("PolyDataClosed"); 161 162 vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = 1 vtkSmartPointer<vtkRenderWindowInteractor>::New(); 164 renderWindowInteractor>SetRenderWindow(renderWindow); 165 166 leftRenderer>GetActiveCamera()>SetPosition(0, 1, 0); 167 leftRenderer>GetActiveCamera()>SetFocalPoint(0, 0, 0); 168 leftRenderer>GetActiveCamera()>SetViewUp(0, 0, 1); 169 leftRenderer>GetActiveCamera()>Azimuth(30); 170 leftRenderer>GetActiveCamera()>Elevation(30); 171 leftRenderer>ResetCamera(); 172 rightRenderer>SetActiveCamera(leftRenderer>GetActiveCamera()); 173 174 renderWindow>Render(); 175 renderWindowInteractor>Start(); 176 177 return EXIT_SUCCESS; 178 }

左图为原始模型,右图为漏洞填补后的结果



上一篇:VTK 实例63:纹理映射

下一篇:ITK 实例5 定义图像原点和间距


VTK
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图