在面孔中插入边缘-CGAL错误:违反声明

时间:2019-01-10 11:26:33

标签: c++ qt-creator combinatorics cgal

我正在使用qt创建器创建一个应用程序,该应用程序以CGAL :: Linear_cell_complex_for_combinatorial_map读取.off文件并对其进行预览,我想对读取的网格进行操作,例如删除边缘并还原它。

它显示以下错误: 抛出'CGAL :: Assertion_exception'实例后终止调用   what():CGAL错误:违反声明! Expr:is_insertable_cell_1_in_cell_2(adart1,adart2)

我进行了搜索,但是找不到有用的解决方案

 QWidget* viewer ;
   std::string filename;
   Dart_handle dh3;
 LCC_3 lcc;
   QMainWindow qWin;
  CGAL::DefaultColorFunctorLCC fcolor;

void MainWindow ::insertCell()
{
      dh3=lcc.insert_cell_1_in_cell_2(lcc.darts().begin(), lcc.darts().end());
    CGAL_assertion( lcc.is_valid() );

    lcc.display_characteristics(std::cout) << ", valid=" <<
      lcc.is_valid() << std::endl;

    setCentralWidget( new CGAL::SimpleLCCViewerQt<LCC_3, CGAL::DefaultColorFunctorLCC>(&qWin ,
                      lcc,
                      "Basic LCC Viewer",
                      false,
                       fcolor ) );
    show();
}

 void MainWindow ::removeCell()
 {
    CGAL_assertion( (lcc.is_removable<2>(dh3)) );
    lcc.remove_cell<1>(dh3);
    CGAL_assertion( lcc.is_valid() );
     lcc.display_characteristics(std::cout) << ", valid="
                      << lcc.is_valid() << std::endl;
}

有什么帮助吗?或有用的链接来简化网格或删除顶点,边或面? 感谢您的帮助

1 个答案:

答案 0 :(得分:1)

要在面中插入边线,请参考文档here。对于卷中的人脸,文档为there。您还可以查看示例here

要理解的重要一点是,当您将一条边添加到面部时,您需要说出要插入边的位置。这就是为什么您要放两支精确的飞镖的原因。当您要在体积中插入一张脸时,这是相似的:您需要给出一系列的飞镖,这些飞镖是体积中边缘的循环。