在曲面中插入边-CGAL错误:断言冲突



我正在使用qt-creator创建一个应用程序,该应用程序将.off文件读取为CGAL::Linear_cell_complex_for_combinational_map并预览它。我想对读取的网格进行操作,如删除边并恢复它。

它显示以下错误:

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");
}

输出:Darts=24,#0-cells=8,#1-cells=12,#2-cells=6,#ccs=1,valid=1

Darts=36,#0-cells=10,#1-cells=18,#2-cells=100,#ccs=1,valid=Map无效:dart 0x5d7df0没有顶点。

0

输出.off文件:

OFF 
8 10 0

我不知道它是如何成功插入边的,同时Map无效,输出.off文件也不正确。

我感谢你的帮助。

您使用的方法insert_cell_0_in_cell_1是来自组合映射的方法。

此方法修改对象的拓扑结构,插入新顶点,但不会更新几何体,因为组合贴图不一定具有几何体。

有两种解决方案:

  1. 您可以在插入后向新顶点添加一个点,例如使用set_vertex_attribute(d3,create_vertex-attribute(
  2. 将insertcell_0_incell1的使用替换为线性单元复数的方法,该方法更新拓扑和几何结构。例如,您可以使用insert_point_in_cell方法

使用其中一个解决方案将为您提供一个有效的线性单元复合体,因此您可以将其导出为非文件。

但是,一个重要的问题是,你想做什么?你似乎随机插入了一些细胞,因此很可能会获得一个非常奇怪的网格。

再次看一下线性单元复杂包的修改操作示例。当我插入单元格时,我不采用随机的飞镖,而是采用精确的飞镖来进行精确的操作。

相关内容

  • 没有找到相关文章

最新更新