📄 demo_stack.h
字号:
if ( ! out) { cerr << "Error: saveoff cannot write OFF file '" << argv[i+1] << "' correctly." << endl; error = 5; } } ++i; } else { error = 4; } } else if ( strcmp( argv[i], "dump") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } std::cout << nef.back(); /* } else if ( strcmp( argv[i], "sorted") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } nef.back().dump(true, std::cout); */ } else if ( strcmp( argv[i], "stats") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } std::cout << "Number of Vertices " << nef.back().number_of_vertices() << std::endl; std::cout << "Number of Facets " << nef.back().number_of_facets() << std::endl; } else if ( strcmp( argv[i], "vis") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; }#ifdef CGAL_NEF3_OLD_VISUALIZATION nef.back().visualize();#elif defined (CGAL_USE_QT) QApplication a(argc, argv); CGAL::Qt_widget_Nef_3<Nef_polyhedron>* w = new CGAL::Qt_widget_Nef_3<Nef_polyhedron>(nef.back()); a.setMainWidget(w); w->show(); a.exec();#else std::cout << "Sorry, this demo needs QT..." << std::endl;#endif } else if ( strcmp( argv[i], "trans") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } if ( assert_argc( argv[i], 4, argc - i - 1)) { NT x( std::atoi( argv[i+1])); NT y( std::atoi( argv[i+2])); NT z( std::atoi( argv[i+3])); NT w( std::atoi( argv[i+4])); if(w == 0) error = 4; else { typename Kernel::Vector_3 vec( x, y, z, w); typename Kernel::Aff_transformation_3 aff( CGAL::TRANSLATION, vec); nef.back().transform( aff); i += 4; } } else { error = 4; } } else if ( strcmp( argv[i], "scale") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } if ( assert_argc( argv[i], 2, argc - i - 1)) { NT s( std::atoi( argv[i+1])); NT w( std::atoi( argv[i+2])); typename Kernel::Aff_transformation_3 aff( CGAL::SCALING, s, w); nef.back().transform( aff); i += 2; } else { error = 4; } } else if ( strcmp( argv[i], "rotx") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } if ( assert_argc( argv[i], 1, argc - i - 1)) { double alpha = CGAL_PI * std::atof( argv[i+1]) / 180.0; NT diry = std::sin( alpha) * 256*256*256; NT dirx = std::cos( alpha) * 256*256*256; NT sin_alpha; NT cos_alpha; NT w; CGAL::rational_rotation_approximation( dirx, diry, sin_alpha, cos_alpha, w, NT(1), NT( 1000000)); typename Kernel::Aff_transformation_3 aff( w, NT(0), NT(0), NT(0), cos_alpha,-sin_alpha, NT(0), sin_alpha, cos_alpha, w); nef.back().transform( aff); ++i; } else { error = 4; } } else if ( strcmp( argv[i], "roty") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } if ( assert_argc( argv[i], 1, argc - i - 1)) { double alpha = CGAL_PI * std::atof( argv[i+1]) / 180.0; NT diry = std::sin( alpha) * 256*256*256; NT dirx = std::cos( alpha) * 256*256*256; NT sin_alpha; NT cos_alpha; NT w; CGAL::rational_rotation_approximation( dirx, diry, sin_alpha, cos_alpha, w, NT(1), NT( 1000000)); typename Kernel::Aff_transformation_3 aff( cos_alpha, NT(0), sin_alpha, NT(0), w, NT(0), -sin_alpha, NT(0), cos_alpha, w); nef.back().transform( aff); ++i; } else { error = 4; } } else if ( strcmp( argv[i], "rotz") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } if ( assert_argc( argv[i], 1, argc - i - 1)) { double alpha = CGAL_PI * std::atof( argv[i+1]) / 180.0; NT diry = std::sin( alpha) * 256*256*256; NT dirx = std::cos( alpha) * 256*256*256; NT sin_alpha; NT cos_alpha; NT w; CGAL::rational_rotation_approximation( dirx, diry, sin_alpha, cos_alpha, w, NT(1), NT( 1000000)); typename Kernel::Aff_transformation_3 aff( cos_alpha,-sin_alpha, NT(0), sin_alpha, cos_alpha, NT(0), NT(0), NT(0), w, w); nef.back().transform( aff); ++i; } else { error = 4; } } else if ( strcmp( argv[i], "inters") == 0) { if ( nef.size() < 2) { cerr << "Error: '" << argv[i] << "': less than 2 elements on " "stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf2 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.intersection( nf2); nef.push_back( nf); } else if ( strcmp( argv[i], "union") == 0) { if ( nef.size() < 2) { cerr << "Error: '" << argv[i] << "': less than 2 elements on " "stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf2 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.join( nf2); nef.push_back( nf); } else if ( strcmp( argv[i], "diff") == 0) { if ( nef.size() < 2) { cerr << "Error: '" << argv[i] << "': less than 2 elements on " "stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf2 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.difference( nf2); nef.push_back( nf); } else if ( strcmp( argv[i], "symdiff") == 0) { if ( nef.size() < 2) { cerr << "Error: '" << argv[i] << "': less than 2 elements on " "stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf2 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.symmetric_difference( nf2); nef.push_back( nf); } else if ( strcmp( argv[i], "compl") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.complement(); nef.push_back( nf); } else if ( strcmp( argv[i], "int") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.interior(); nef.push_back( nf); } else if ( strcmp( argv[i], "clos") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.closure(); nef.push_back( nf); } else if ( strcmp( argv[i], "bnd") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.boundary(); nef.push_back( nf); } else if ( strcmp( argv[i], "reg") == 0) { if ( nef.size() == 0) { cerr << "Error: '" << argv[i] << "' on empty stack." << endl; error = 2; continue; } Nef_polyhedron nf1 = nef.back(); nef.pop_back(); Nef_polyhedron nf = nf1.regularization(); nef.push_back( nf); } else if ( strcmp( argv[i], "plane") == 0) { if ( assert_argc( argv[i], 4, argc - i - 1)) { NT a( std::atoi( argv[i+1])); NT b( std::atoi( argv[i+2])); NT c( std::atoi( argv[i+3])); NT d( std::atoi( argv[i+4])); typename Kernel::Plane_3 pl( a, b, c, d); Nef_polyhedron nf(pl); nef.push_back( nf); i += 4; } else error = 4; } else if ( strcmp( argv[i], "start") == 0) { t.start(); } else if ( strcmp( argv[i], "stop") == 0) { t.stop(); } else if ( strcmp( argv[i], "time") == 0) { std::cerr << "Time " << t.time() << std::endl; } else if ( strcmp( argv[i], "time") == 0) { t.reset(); } else { cerr << "Error: unkown command '" << argv[i] << "'. Try 'help' for help." << endl; error = 3; } } return error; }};CGAL_END_NAMESPACE#endif // CGAL_NEF_DEMO_STACK_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -