我正在使用qt创建器创建一个应用程序,该应用程序以CGAL :: Linear_cell_complex_for_combinatorial_map读取.off文件并对其进行预览,我想对读取的网格进行操作,例如删除边缘并还原它。
它显示以下错误:
terminate called after throwing an instance of 'CGAL::Assertion_exception'
what(): CGAL ERROR: assertion violation!
Expr: i != idx.end()
我的代码:
filename =std::string("/home/nourhan/QT projects/cube.off");
std::ifstream ifile(filename.c_str());
if (ifile)
{
CGAL::load_off(lcc, ifile);
}
lcc.display_characteristics(std::cout) << ", valid=" <<
lcc.is_valid() << std::endl;
LCC_3::Dart_handle d2=lcc.darts().begin();
LCC_3::Dart_handle d3= lcc.insert_cell_0_in_cell_1( d2);
lcc.insert_cell_0_in_cell_2( d2);
std::vector<LCC_3::Dart_handle> adarts;
adarts.push_back(d2);
adarts.push_back(d3);
adarts.push_back(lcc.beta<1>(d3));
if (lcc.is_insertable_cell_1_in_cell_2(d2, d3))
lcc.insert_cell_1_in_cell_2( d2, d3);
lcc.display_characteristics(std::cout) << ", valid=" <<
lcc.is_valid() << std::endl;
CGAL::write_off(lcc, "copy-head.off");
}
输出: 飞镖= 24,#0-单元= 8,#1-单元= 12,#2-单元= 6,#ccs = 1,有效= 1
Darts = 36,#0-cells = 10,#1-cells = 18,#2-cells = 10,#ccs = 1,有效=地图无效:dart 0x5d7df0没有顶点。
0
.off输出文件:
OFF
8 10 0
我不知道它是如何成功插入边缘的,同时Map无效并且输出的.off文件不正确。
感谢您的帮助。
答案 0 :(得分:1)
您使用的方法insert_cell_0_in_cell_1是组合图中的方法。
此方法修改对象的拓扑,插入新的顶点,但是不会更新几何图形,因为组合图不一定具有几何图形。
有2种解决方案:
使用其中一种解决方案将为您提供有效的线性单元格复合体,因此您可以将其导出为非文件格式。
但是,一个重要的问题是您要做什么?似乎您随机插入了一些单元格,因此很可能会获得非常奇怪的网格。
再次查看线性单元复合体程序包的示例Modification Operations。插入单元格时,为了进行精确的操作,我不会随机飞镖,而是精确飞镖。