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 WriteData(Agglomerative &A, ModelFile &Model) { std::vector<unsigned int> PointLabels = A.getPointLabels(); std::vector<unsigned int> UniqueLabels = Tools::UniqueElements(PointLabels); std::vector<Color<unsigned char> > Colors = Spectrum(UniqueLabels.size()); for(unsigned int label = 0; label < UniqueLabels.size(); label++) { for(unsigned int p = 0; p < Model.NumPoints(); p++) { if(PointLabels[p] == UniqueLabels[label]) Model.Points_[p].setColor(Colors[label]); } } Model.Write("Clusters.vtp"); vsl_b_ofstream outputPDM("PointDistanceMatrix.bin"); vsl_b_write(outputPDM, A.PointDistanceMatrix); outputPDM.close(); vbl_array_2d<double> CDMValue(PointLabels.size(), PointLabels.size()); vbl_array_2d<bool> CDMValid(PointLabels.size(), PointLabels.size()); for(unsigned int i = 0; i < PointLabels.size(); i++) { for(unsigned int j = 0; j < PointLabels.size(); j++) { CDMValue(i,j) = A.ClusterDistanceMatrix(i,j).Value; CDMValid(i,j) = A.ClusterDistanceMatrix(i,j).Valid; } } vsl_b_ofstream outputCDMValue("ClusterDistanceMatrixValue.bin"); vsl_b_write(outputCDMValue, CDMValue); outputCDMValue.close(); vsl_b_ofstream outputCDMValid("ClusterDistanceMatrixValid.bin"); vsl_b_write(outputCDMValid, CDMValid); outputCDMValid.close(); /* vsl_b_ofstream outputCDM("ClusterDistanceMatrix.bin"); vsl_b_write(outputCDM, A.ClusterDistanceMatrix); outputCDM.close(); */ vsl_b_ofstream outputPL("PointLabels.bin"); vsl_b_write(outputPL, PointLabels); outputPL.close(); }
int main(int argc, char *argv[]) { std::string SceneFilename, ModelFilename; double mismatch; //parse arguments po::options_description desc("Allowed options"); desc.add_options() ("help", "Help message.") ("scene", po::value<std::string>(&SceneFilename), "Set scene file") ("model", po::value<std::string>(&ModelFilename), "Set model file") ("mismatch", po::value<double>(&mismatch), "Set mismatch.") ; 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 Scene; Scene.Read(SceneFilename); Scene.Init(); ModelFile Model; Model.Read(ModelFilename); Model.Init(); if(Scene.NumPoints() != Model.NumPoints() ) { std::cout << "Number of points do not match (points should already be correspondences.)!" << std::endl; exit(-1); } vgl_point_3d<double> ScannerLocation; bool IsScan = Scene.getScannerLocation(ScannerLocation); std::vector<Color<unsigned char> > Colors; for(unsigned int i = 0; i < Scene.NumPoints(); i++) { double s = (Scene.getCoord(i) - ScannerLocation).length(); double m = (Model.getCoord(i) - ScannerLocation).length(); if(s > (m + mismatch)) { Colors.push_back(Colors::Red()); } else { Colors.push_back(Colors::Green()); } } ModelFile SceneColored; SceneColored.setCoords(Scene.getCoords()); SceneColored.setColors(Colors); SceneColored.Write("SceneColored.vtp"); ModelFile ModelColored; ModelColored.setCoords(Model.getCoords()); ModelColored.setColors(Colors); ModelColored.Write("ModelColored.vtp"); return 0; }