16 #include "vtkRenderer.h"
17 #include "vtkRenderWindow.h"
18 #include "vtkInteractorStyleTrackballCamera.h"
19 #include "vtkRenderWindowInteractor.h"
20 #include "vtkPolyData.h"
21 #include "vtkPoints.h"
22 #include "vtkProperty.h"
23 #include "vtkCellData.h"
24 #include "vtkCellArray.h"
25 #include "vtkDoubleArray.h"
26 #include "vtkElevationFilter.h"
27 #include "vtkPolyDataMapper.h"
28 #include "vtkPolyDataNormals.h"
29 #include "vtkLookupTable.h"
30 #include "vtkDataSetMapper.h"
32 #include "vtkLODActor.h"
34 #include "vtkPointData.h"
42 #include "SimpleOpt.h"
44 enum {
OPT_HELP,
OPT_DIR,
OPT_SMOOTH,
OPT_TRI,
OPT_PTSIZE,
OPT_CAMERA,
OPT_IMAGE,
OPT_GREY,
OPT_SCALAR,
OPT_SCALARD,
OPT_SCALARL,
OPT_STEPS,
OPT_MAG,
OPT_TRA,
OPT_AXES };
54 {
OPT_GREY, _T(
"--greyscale"), SO_NONE },
58 {
OPT_MAG, _T(
"-m"), SO_REQ_SEP },
59 {
OPT_MAG, _T(
"--magnification"), SO_REQ_SEP },
60 {
OPT_TRI, _T(
"-t"), SO_REQ_SEP },
61 {
OPT_TRI, _T(
"--triangle"), SO_REQ_SEP },
67 {
OPT_SCALAR, _T(
"--scalar-file"), SO_REQ_SEP },
93 #include "view_li.help"
100 int main(
int argc,
char ** argv)
102 std::string tri_file;
103 bool with_scalars =
false;
105 int magnification = 1;
106 bool is_greyscale =
false;
107 double number_steps = 256;
108 double m_scalar = 1.e30;
109 double M_scalar = -1.e30;
110 bool invert_scalar =
false;
111 bool line_scalar =
false;
112 bool with_axes =
false;
113 std::string code(
"z");
114 std::string scalar_file;
118 if (args.LastError() == SO_SUCCESS)
122 else if (args.OptionId() ==
OPT_DIR)
124 std::string code0(args.OptionText());
125 code = code0.substr(1,1);
129 else if (args.OptionId() ==
OPT_TRA)
131 else if (args.OptionId() ==
OPT_GREY)
134 invert_scalar =
true;
141 scalar_file = args.OptionArg();
143 else if (args.OptionId() ==
OPT_TRI)
145 tri_file = args.OptionArg();
149 std::ostringstream o;
150 o << args.OptionArg();
151 std::istringstream
in(o.str().c_str());
154 if ((size > 0)&&(size < 100))
159 std::ostringstream o;
160 o << args.OptionArg();
161 std::istringstream
in(o.str().c_str());
164 if ((size > 0)&&(size < 256))
167 else if (args.OptionId() ==
OPT_MAG)
169 std::ostringstream o;
170 o << args.OptionArg();
171 std::istringstream
in(o.str().c_str());
174 if ((size > 1)&&(size < 100))
175 magnification = size;
178 std::ifstream
in(args.OptionArg());
181 std::cerr <<
"cannot open file: '" << args.OptionArg() <<
"'" << std::endl;
188 else if (args.OptionId() ==
OPT_AXES)
194 std::cerr <<
"Invalid argument: " << args.OptionText() << std::endl;
195 return error(args.LastError());
203 vtkPoints * pts = vtkPoints::New();
204 vtkDoubleArray * scalars;
207 std::ifstream
in(scalar_file.c_str());
210 std::cerr <<
"Cannot open file '" << scalar_file <<
"'" << std::endl;
213 scalars = vtkDoubleArray::New();
214 scalars->SetNumberOfComponents(1);
220 for (
unsigned int i=0; i<nlis; i++)
222 for (
short j=0; j<nj; j++)
230 scalars->InsertNextValue(val);
236 for (
unsigned int k = 0; k < nlis; k++)
238 for (
short j=0; j<2; j++)
241 std::cin >> x >> y >> z;
242 pts->InsertNextPoint(x,y,z);
245 ren = vtkRenderer::New();
246 vtkRenderWindow * renWin = vtkRenderWindow::New();
247 renWin->AddRenderer(
ren);
248 renWin->SetStereoTypeToAnaglyph();
251 style->
name(
"view_li");
252 if (magnification != 1)
254 vtkRenderWindowInteractor * iren = vtkRenderWindowInteractor::New();
255 iren->SetRenderWindow(renWin);
257 iren->SetInteractorStyle(style);
258 iren->LightFollowCameraOff();
259 vtkCellArray * lines = vtkCellArray::New();
260 for (
unsigned int k = 0; k < nlis; k++)
262 vtkIdType co[] = {2*k,2*k+1};
263 lines->InsertNextCell(2,co);
265 vtkPolyData * data = vtkPolyData::New();
266 data->SetPoints(pts);
268 data->SetLines(lines);
273 data->GetCellData()->SetScalars(scalars);
275 data->GetPointData()->SetScalars(scalars);
280 vtkElevationFilter * elevation = vtkElevationFilter::New();
283 else if (code !=
"s")
285 elevation = vtkElevationFilter::New();
286 elevation->SetInputData(data);
288 elevation->SetScalarRange(0,20);
296 elevation->SetLowPoint(bd[0],0,0);
297 elevation->SetHighPoint(bd[1],0,0);
300 else if (code ==
"y")
306 elevation->SetLowPoint(0,bd[2],0);
307 elevation->SetHighPoint(0,bd[3],0);
310 else if (code ==
"z")
316 elevation->SetLowPoint(0,0,bd[4]);
317 elevation->SetHighPoint(0,0,bd[5]);
320 vtkDataSetMapper * map = vtkDataSetMapper::New();
321 map->SetResolveCoincidentTopologyToShiftZBuffer();
322 if ((!flat)||(with_scalars))
324 vtkLookupTable * lut = vtkLookupTable::New();
325 lut->SetNumberOfTableValues(number_steps);
328 lut->SetHueRange(0,0);
329 lut->SetSaturationRange(0,0);
331 lut->SetValueRange(1,0);
333 lut->SetValueRange(0,1);
337 lut->SetHueRange(0,0.6);
339 lut->SetHueRange(0.6,0);
340 lut->SetSaturationRange(1,1);
341 lut->SetValueRange(1,1);
343 map->SetLookupTable(lut);
347 map->SetScalarRange(m_scalar,M_scalar);
348 map->SetInputData(data);
353 map->SetInputConnection(elevation->GetOutputPort());
355 map->SetScalarRange(0,20);
360 map->SetInputData(data);
366 actor = vtkLODActor::New();
367 ((vtkLODActor *)(actor))->SetNumberOfCloudPoints(5000);
370 actor = vtkActor::New();
371 actor->SetMapper(map);
373 actor->GetProperty()->SetLineWidth(li_width);
374 actor->GetProperty()->SetInterpolationToFlat();
375 ren->AddActor(actor);
379 renWin->SetSize(640,480);
380 renWin->SetWindowName(
"view_pt (central)");
383 vtkAxes * axes = vtkAxes::New();
384 axes->SetOrigin(0.,0.,0.);
385 axes->SetScaleFactor(1.);
386 vtkLookupTable * lut = vtkLookupTable::New();
387 lut->SetHueRange(0,1);
388 lut->SetSaturationRange(1,1);
389 lut->SetValueRange(1,1);
390 vtkPolyDataMapper * map = vtkPolyDataMapper::New();
391 map->SetInputConnection(axes->GetOutputPort());
393 map->SetLookupTable(lut);
395 actor = vtkActor::New();
396 actor->SetMapper(map);
398 actor->GetProperty()->SetLineWidth(3);
399 actor->GetProperty()->SetInterpolationToFlat();
400 ren->AddActor(actor);
402 renWin->SetSize(renWin->GetScreenSize());
void name(const std::string &name)
static a_interactor * New()
void magnification(int val)
CSimpleOpt::SOption g_rgOptions[]
int main(int argc, char **argv)
std::string image_file("")
int view_triangles(const std::string &name, bool flat)