#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int 多边形圆球剪切()
{
vtkSmartPointer sphereSource =
vtkSmartPointer::New();
sphereSource->SetCenter(0.0, 0.0, 0.0);
sphereSource->SetRadius(5.0);
sphereSource->Update();
vtkPlane* vPlane = vtkPlane::New();
vtkSmartPointer plane =
vtkSmartPointer::New();
plane->SetOrigin(0, 3, 0);
plane->SetNormal(0, -1, 0);
vtkSmartPointer clipPolyData =
vtkSmartPointer::New();
clipPolyData->SetInputConnection(sphereSource->GetOutputPort());
clipPolyData->SetClipFunction(plane);
clipPolyData->GenerateClippedOutputOn();
clipPolyData->Update();
vtkSmartPointer mapper1 =
vtkSmartPointer::New();
mapper1->SetInputConnection(clipPolyData->GetOutputPort());
vtkSmartPointer actor1 =
vtkSmartPointer::New();
actor1->SetMapper(mapper1);
vtkSmartPointer mapper2 =
vtkSmartPointer::New();
mapper2->SetInputConnection(clipPolyData->GetClippedOutputPort());
vtkSmartPointer actor2 =
vtkSmartPointer::New();
actor2->SetMapper(mapper2);
vtkSmartPointer colors =
vtkSmartPointer::New();
vtkSmartPointer renderer1 =
vtkSmartPointer::New();
renderer1->SetBackground(colors->GetColor3d("Slate_grey").GetData());
renderer1->AddActor(actor1);
renderer1->SetViewport(0, 0, 0.5, 1);
vtkSmartPointer renderer2 =
vtkSmartPointer::New();
renderer2->SetBackground(colors->GetColor3d("Slate_blue").GetData());
renderer2->AddActor(actor2);
renderer2->SetViewport(0.5, 0, 1, 1);
vtkSmartPointer renderWindow =
vtkSmartPointer::New();
renderWindow->SetSize(600, 300);
renderWindow->AddRenderer(renderer1);
renderWindow->AddRenderer(renderer2);
vtkSmartPointer renderWindowInteractor =
vtkSmartPointer::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
vtkSmartPointer style =
vtkSmartPointer::New();
renderWindowInteractor->SetInteractorStyle(style);
renderWindow->Render();
renderWindowInteractor->Initialize();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
多边形圆球剪切
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// Readers
#include
#include
#include
#include
#include
#include
namespace {
vtkSmartPointer ReadPolyData(std::string const& fileName);
}
//
// Demonstrate the use of clipping and capping on polyhedral data
//
int main(int argc, char* argv[])
{
// Define colors
vtkNew colors;
auto backgroundColor = colors->GetColor3d("steel_blue");
auto boundaryColor = colors->GetColor3d("banana");
auto clipColor = colors->GetColor3d("tomato");
// PolyData to process
auto polyData = ReadPolyData(argc > 1 ? argv[1] : "");
vtkNew plane;
plane->SetOrigin(polyData->GetCenter());
plane->SetNormal(1.0, -1.0, -1.0);
vtkNew clipper;
clipper->SetInputData(polyData);
clipper->SetClipFunction(plane);
clipper->SetValue(0);
clipper->Update();
polyData = clipper->GetOutput();
vtkNew clipMapper;
clipMapper->SetInputData(polyData);
vtkNew clipActor;
clipActor->SetMapper(clipMapper);
clipActor->GetProperty()->SetDiffuseColor(clipColor.GetData());
clipActor->GetProperty()->SetInterpolationToFlat();
clipActor->GetProperty()->EdgeVisibilityOn();
// Now extract feature edges
vtkNew boundaryEdges;
boundaryEdges->SetInputData(polyData);
boundaryEdges->BoundaryEdgesOn();
boundaryEdges->FeatureEdgesOff();
boundaryEdges->NonManifoldEdgesOff();
boundaryEdges->ManifoldEdgesOff();
vtkNew boundaryStrips;
boundaryStrips->SetInputConnection(boundaryEdges->GetOutputPort());
boundaryStrips->Update();
// Change the polylines into polygons
vtkNew boundaryPoly;
boundaryPoly->SetPoints(boundaryStrips->GetOutput()->GetPoints());
boundaryPoly->SetPolys(boundaryStrips->GetOutput()->GetLines());
vtkNew boundaryMapper;
boundaryMapper->SetInputData(boundaryPoly);
vtkNew boundaryActor;
boundaryActor->SetMapper(boundaryMapper);
boundaryActor->GetProperty()->SetDiffuseColor(boundaryColor.GetData());
// Create graphics stuff
//
vtkNew renderer;
renderer->SetBackground(backgroundColor.GetData());
renderer->UseHiddenLineRemovalOn();
vtkNew renderWindow;
renderWindow->AddRenderer(renderer);
renderWindow->SetSize(640, 480);
vtkNew interactor;
interactor->SetRenderWindow(renderWindow);
// Add the actors to the renderer, set the background and size
//
renderer->AddActor(clipActor);
renderer->AddActor(boundaryActor);
// Generate an interesting view
//
renderer->ResetCamera();
renderer->GetActiveCamera()->Azimuth(30);
renderer->GetActiveCamera()->Elevation(30);
renderer->GetActiveCamera()->Dolly(1.2);
renderer->ResetCameraClippingRange();
renderWindow->Render();
renderWindow->SetWindowName("CapClip");
renderWindow->Render();
interactor->Start();
return EXIT_SUCCESS;
}
namespace {
vtkSmartPointer ReadPolyData(std::string const& fileName)
{
vtkSmartPointer polyData;
std::string extension = "";
if (fileName.find_last_of(".") != std::string::npos)
{
extension = fileName.substr(fileName.find_last_of("."));
}
// Make the extension lowercase
std::transform(extension.begin(), extension.end(), extension.begin(),
::tolower);
if (extension == ".ply")
{
vtkNew reader;
reader->SetFileName(fileName.c_str());
reader->Update();
polyData = reader->GetOutput();
}
else if (extension == ".vtp")
{
vtkNew reader;
reader->SetFileName(fileName.c_str());
reader->Update();
polyData = reader->GetOutput();
}
else if (extension == ".obj")
{
vtkNew reader;
reader->SetFileName(fileName.c_str());
reader->Update();
polyData = reader->GetOutput();
}
else if (extension == ".stl")
{
vtkNew reader;
reader->SetFileName(fileName.c_str());
reader->Update();
polyData = reader->GetOutput();
}
else if (extension == ".vtk")
{
vtkNew reader;
reader->SetFileName(fileName.c_str());
reader->Update();
polyData = reader->GetOutput();
}
else if (extension == ".g")
{
vtkNew reader;
reader->SetGeometryFileName(fileName.c_str());
reader->Update();
polyData = reader->GetOutput();
}
else
{
// Return a polydata sphere if the extension is unknown.
vtkNew source;
source->SetThetaResolution(20);
source->SetPhiResolution(11);
source->Update();
polyData = source->GetOutput();
}
return polyData;
}
} // namespace
切割实心球体
1 #include
2 #include
3 #include
4
5 #include
6 #include
7 #include
8
9 #include
10 #include
11 #include
12
13 #include
14 #include
15 #include
16
17 #include
18
19 #include "vtkSphereSource.h"
20 #include "vtkShrinkFilter.h"
21 #include "vtkElevationFilter.h"
22
23 #include "vtkCullerCollection.h"
24
25 #include
26 #include
27 #include
28 #include
29
30 #include
31 #include
32
33 #include
34
35 #include
36 #include
37
38 #include
39
40 #include
41 #include
42 #include
43 #include
44 #include
45 #include
46 #include
47 #include
48 //#include"InteractorStyle.hpp"
49 #include
50 #include
51 #include
52 #include
53 //#include"CustomPlaneCuteInteractorStyle.hpp"
54
55
56
57 #include
58 #include
59 #include
60 #include
61 #include
62 #include
63 #include
64 #include
65 #include
66 #include
67 #include
68 #include
69 #include
70 #include
71 #include
72 #include
73 #include
74 #include
75 #include
76 #include
77 #include
78 #include
79 #include
80 #include
81 #include
82 #include
83 VTK_MODULE_INIT(vtkRenderingOpenGL2)
84 VTK_MODULE_INIT(vtkRenderingContextOpenGL2)
85 VTK_MODULE_INIT(vtkInteractionStyle);
86 using namespace std;
87 using namespace vtk;
88
89 #include
90 #include
91 #include
92 #include
93 #include
94 #include
95 #include
96 #include
97 #include
98 #include
99 #include
100 #include
101 #include
102 #include
103 #include
104
105 #include "vtkPolyDataReader.h"
106 #include
107 #include
108 #include
109 #include
110 #include
111 #include
112 #include
113 #include
114 #include
115 #include
116 #include
117 #include
118 #include
119 #include
120 #include
121 #include
122 #include
123 #include
124 #include
125 #include "vtkDecimatePro.h"
126 #include "vtkSmoothPolyDataFilter.h"
127 #include "vtkPolyDataNormals.h"
128 #include "vtkAppendFilter.h"
129 #include "vtkDataSetCollection.h"
130 #include "vtkCollection.h"
131 #include "vtkIdFilter.h"
132 #include "vtkDataSet.h"
133 #include "vtkAreaPicker.h"
134 #include "vtkInteractorStyleRubberBandPick.h"
135 #include "vtkPlanes.h"
136 #include "vtkExtractGeometry.h"
137
138 // An highlighted block
139 #include
140
141 #include
142 #include
143 #include
144 #include
145 #include
146 #include
147 #include
148 #include
149 #include
150 #include
151 #include
152 #include
153 #include
154 #include
155 #include
156 #include
157 #include
158 #include
159 #include
160 #include
161 #include
162 #include
163 #include
164
165 #define VTKISRBP_ORIENT 0
166 #define VTKISRBP_SELECT 1
167
168 class InteractorStyle : public vtkInteractorStyleRubberBandPick
169 {
170 public:
171 static InteractorStyle* New();
172 vtkTypeMacro(InteractorStyle, vtkInteractorStyleRubberBandPick);
173
174 InteractorStyle()
175 {
176 selectedMapper = vtkSmartPointer::New();
177 selectedActor = vtkSmartPointer::New();
178 }
179
180 virtual void OnLeftButtonUp()
181 {
182 // Forward events
183 vtkInteractorStyleRubberBandPick::OnLeftButtonUp();
184
185 vtkPlanes* frustum = static_cast(this->GetInteractor()->GetPicker())->GetFrustum();
186
187 vtkSmartPointer extractGeometry =
188 vtkSmartPointer::New();
189 extractGeometry->SetImplicitFunction(frustum);
190 #if VTK_MAJOR_VERSION <= 5
191 extractGeometry->SetInput(this->Data);
192 #else
193 extractGeometry->SetInputData(this->Data);
194 #endif
195 extractGeometry->Update();
196 this->selectedMapper->SetInputConnection(extractGeometry->GetOutputPort());
197 this->selectedMapper->ScalarVisibilityOff();
198
199 this->selectedActor->SetMapper(selectedMapper);
200
201 this->selectedActor->GetProperty()->SetColor(1.0, 0.0, 0.0); //(R,G,B)
202
203 //this->CurrentRenderer->AddActor(SelectedActor);
204 this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(selectedActor);
205 this->GetInteractor()->GetRenderWindow()->Render();
206 }
207
208
209
210 vtkSmartPointer Data;
211 vtkSmartPointer selectedMapper;
212 vtkSmartPointer selectedActor;
213
214 };
215
216
217 vtkStandardNewMacro(InteractorStyle);
218
219 int main(int, char* [])
220 {
221
222 vtkSmartPointer sphereSource =
223 vtkSmartPointer::New();
224 sphereSource->Update();
225
226 vtkSmartPointer mapper =
227 vtkSmartPointer::New();
228 mapper->SetInputData(sphereSource->GetOutput());
229
230 vtkSmartPointer actor =
231 vtkSmartPointer::New();
232 actor->SetMapper(mapper);
233 actor->GetProperty()->SetColor(0.0, 0.6, 0.5);
234 // actor->GetProperty()->SetRepresentationToWireframe();
235
236 //actor->GetProperty()->SetRepresentationToPoints();
237
238 vtkSmartPointer renderer =
239 vtkSmartPointer::New();
240 vtkSmartPointer renderWindow =
241 vtkSmartPointer::New();
242 renderWindow->AddRenderer(renderer);
243 renderWindow->SetSize(640, 480);
244 vtkSmartPointer areaPicker = vtkSmartPointer::New();
245 vtkSmartPointer renderWindowInteractor =
246 vtkSmartPointer::New();
247 renderWindowInteractor->SetRenderWindow(renderWindow);
248 renderWindowInteractor->SetPicker(areaPicker);
249 renderWindowInteractor->Initialize();
250
251 // Set the custom stype to use for interaction.
252 vtkSmartPointer style =
253 vtkSmartPointer::New();
254 //style->SetDefaultRenderer(renderer);
255 style->Data = sphereSource->GetOutput();
256
257 renderWindowInteractor->SetInteractorStyle(style);
258
259 renderer->AddActor(actor);
260 renderer->ResetCamera();
261
262 renderer->SetBackground(0.6, 0.8, 0.8); // Blue
263
264 renderWindow->Render();
265 renderWindowInteractor->Start();
266
267 return EXIT_SUCCESS;
268 }
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17
18 int main(int argc, char* argv[]) {
19 vtkNew colors;
20
21 // PolyData to process
22 vtkSmartPointer polyData;
23
24 if (argc > 1) {
25 vtkNew reader;
26 reader->SetFileName(argv[1]);
27 reader->Update();
28 polyData = reader->GetOutput();
29 }
30 else {
31 // Create a sphere
32 vtkNew sphereSource;
33 sphereSource->SetThetaResolution(20);
34 sphereSource->SetPhiResolution(11);
35 sphereSource->Update();
36
37 polyData = sphereSource->GetOutput();
38 }
39
40 auto center = polyData->GetCenter();
41 vtkNew plane1;
42 plane1->SetOrigin(center[0], center[1], center[2]);
43 plane1->SetNormal(0.0, -1.0, 0.0);
44 vtkNew plane2;
45 plane2->SetOrigin(center[0], center[1], center[2]);
46 plane2->SetNormal(0.0, 0.0, 1.0);
47 vtkNew plane3;
48 plane3->SetOrigin(center[0], center[1], center[2]);
49 plane3->SetNormal(-1.0, 0.0, 0.0);
50
51 vtkNew planes;
52 planes->AddItem(plane1);
53 planes->AddItem(plane2);
54 planes->AddItem(plane3);
55
56 vtkNew clipper;
57 clipper->SetInputData(polyData);
58 clipper->SetClippingPlanes(planes);
59 clipper->SetActivePlaneId(2);
60 clipper->SetScalarModeToColors();
61 clipper->SetClipColor(colors->GetColor3d("Banana").GetData());
62 clipper->SetBaseColor(colors->GetColor3d("Tomato").GetData());
63 clipper->SetActivePlaneColor(colors->GetColor3d("SandyBrown").GetData());
64
65 vtkNew clipMapper;
66 clipMapper->SetInputConnection(clipper->GetOutputPort());
67
68 vtkNew clipActor;
69 clipActor->SetMapper(clipMapper);
70 clipActor->GetProperty()->SetColor(1.0000, 0.3882, 0.2784);
71 clipActor->GetProperty()->SetInterpolationToFlat();
72
73 // Create graphics stuff
74 vtkNew ren1;
75 ren1->SetBackground(colors->GetColor3d("SteelBlue").GetData());
76
77 vtkNew renWin;
78 renWin->AddRenderer(ren1);
79 renWin->SetSize(512, 512);
80 renWin->SetWindowName("ClipClosedSurface");
81
82 vtkNew iren;
83 iren->SetRenderWindow(renWin);
84
85 // Add the actors to the renderer, set the background and size
86 ren1->AddActor(clipActor);
87
88 // Generate an interesting view
89 ren1->ResetCamera();
90 ren1->GetActiveCamera()->Azimuth(120);
91 ren1->GetActiveCamera()->Elevation(30);
92 ren1->GetActiveCamera()->Dolly(1.0);
93 ren1->ResetCameraClippingRange();
94
95 renWin->Render();
96 iren->Initialize();
97 iren->Start();
98
99 return EXIT_SUCCESS;
100 }