int main(int argc, char *argv[]) { std::string WithTrianglesFilename, WithoutTrianglesFilename, OutputFilename; po::options_description desc("Allowed options"); desc.add_options() ("help", "Help message.") ("withtris", po::value<std::string>(&WithTrianglesFilename), "Set file with triangles.") ("withouttris", po::value<std::string>(&WithoutTrianglesFilename), "Set file without triangles.") ("output", po::value<std::string>(&OutputFilename), "Set output file.") ; po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); if(vm.count("help")) { std::cout << desc << std::endl; exit(-1); } CheckRequiredArgs(vm); ModelFile ModelWithTriangles; ModelWithTriangles.Read(WithTrianglesFilename); ModelWithTriangles.Init(); ModelFile ModelWithoutTriangles; ModelWithoutTriangles.Read(WithoutTrianglesFilename); ModelWithoutTriangles.Init(); if(ModelWithTriangles.NumPoints() != ModelWithoutTriangles.NumPoints()) { std::cout << "The two models must have identical point lists!" << std::endl; exit(-1); } std::vector<vector<unsigned int> > VertexLists = ModelWithTriangles.getVertexLists(); ModelWithoutTriangles.setVertexLists(VertexLists); ModelWithoutTriangles.Write(OutputFilename); return 0; }
void KeepShell(ModelFile &Model, const vector<LidarScanner> &Scanners, const string &OutputFilename) { vector<bool> KeepTri(Model.NumTriangles(), false); for(unsigned i = 0; i < Scanners.size(); i++) //for(unsigned i = 0; i < 1; i++) { LidarScanner Scanner = Scanners[i]; LidarScan Scan = Scanner.AcquireScene(Model); for(unsigned int t = 0; t < Scanner.ScanParams.getNumThetaPoints(); t++) { for(unsigned int p = 0; p < Scanner.ScanParams.getNumPhiPoints(); p++) { LidarPoint LP = Scan.getPoint(t, p); if(LP.getHit() == true) { //cout << "Hit Tri: " << LP.HitTri_ << " (out of " << Model.NumTriangles() << ")" << endl; KeepTri[LP.HitTri_] = true; } } } } vector<vector<unsigned int> > TriList = Model.getVertexLists(); vector<vector<unsigned int> > NewTriList; for(unsigned int i = 0; i < TriList.size(); i++) { if(KeepTri[i]) NewTriList.push_back(TriList[i]); } ModelFile OutputModel = Model; OutputModel.setVertexLists(NewTriList); OutputModel.Write(OutputFilename); }