【问题标题】:insert edges in faces- CGAL error: assertion violation在面中插入边 - CGAL 错误:断言违规
【发布时间】:2019-01-10 11:26:32
【问题描述】:

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

它显示以下错误: 在抛出 'CGAL::Assertion_exception' 的实例后调用终止 什么():CGAL 错误:断言违规! 表达式: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;
}

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

【问题讨论】:

    标签: c++ qt-creator combinatorics cgal


    【解决方案1】:

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

    要了解的重要一点是,当您在面中添加边时,您需要说明在哪里插入边。这就是你给两个精确飞镖的原因。当你想将一个面插入到一个体积中时,这也是类似的:你需要给出一系列 dart,它是体积中的一个边缘循环。

    【讨论】:

    • @gdaminad 我尝试了以下但没有插入: dh1= lcc.darts().begin() ; dh2=lcc.darts().end();如果(lcc.is_insertable_cell_1_in_cell_2(dh1,dh2)){lcc.insert_cell_1_in_cell_2(dh1,dh2); } lcc.display_characteristics(std::cout)
    猜你喜欢
    • 1970-01-01
    • 2016-03-18
    • 2020-04-29
    • 2018-11-23
    • 2017-11-03
    • 2018-10-25
    • 2015-04-20
    • 2021-04-17
    • 2016-01-05
    相关资源
    最近更新 更多