- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有点困惑连接是如何工作的。我正在尝试从网格中移除面,并调整连接性,移除未使用的边和顶点。当我使用 mesh.is_valid() 它显示连接问题
Integrity of previous halfedge of h1 corrupted. Halfedge of v0 is not an incoming halfedge. vertices: iterated: 1 vs number_of_vertices(): 5 halfedges: iterated: 2 vs number_of_halfedges(): 14 faces: iterated: 3 vs number_of_faces(): 3
代码:
#include <string>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Surface_mesh.h>
#include <boost/foreach.hpp>
#include <iostream>
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Gmpq.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Surface_mesh<K::Point_3> Mesh;
typedef Mesh::Vertex_index vertex_descriptor;
typedef Mesh::Face_index face_descriptor;
typedef Mesh::Halfedge_index halfedge_descriptor;
typedef Mesh::Edge_index edge_descriptor;
int main()
{
Mesh mesh;
vertex_descriptor v0 = mesh.add_vertex(K::Point_3(0,2,0));
vertex_descriptor v1 = mesh.add_vertex(K::Point_3(2,2,0));
vertex_descriptor v2 = mesh.add_vertex(K::Point_3(0,0,0));
vertex_descriptor v3 = mesh.add_vertex(K::Point_3(2,0,0));
vertex_descriptor v4 = mesh.add_vertex(K::Point_3(1,1,0));
mesh.add_face(v3, v1, v4);
mesh.add_face(v0, v4, v1);
mesh.add_face(v0, v2, v4);
mesh.add_face(v2, v3, v4);
int counter = 0;
std::vector <edge_descriptor> edg;
BOOST_FOREACH(face_descriptor fd, mesh.faces()){
if(counter == 0){
halfedge_descriptor hed = mesh.halfedge(fd);
halfedge_descriptor prev = mesh.prev(hed);
halfedge_descriptor next = mesh.next(hed);
mesh.set_vertex_halfedge_to_border_halfedge (next);
mesh.set_vertex_halfedge_to_border_halfedge (prev);
mesh.set_vertex_halfedge_to_border_halfedge (hed);
if(mesh.is_border(mesh.opposite(next))){
mesh.remove_edge(mesh.edge(next));
std::cout << "Remove next halfedge " << next << std::endl;
}else{
mesh.set_face(next, mesh.null_face());
std::cout << "sets next halfedge " << next << std::endl;
}
if(mesh.is_border(mesh.opposite(prev))){
mesh.remove_edge(mesh.edge(prev));
std::cout << "Remove prev halfedge " << prev << std::endl;
}else{
mesh.set_face(prev, mesh.null_face());
std::cout << "sets prev halfedge " << prev << std::endl;
}
if(mesh.is_border(mesh.opposite(hed))){
mesh.remove_edge(mesh.edge(hed));
std::cout << "Remove Face halfedge " << hed << std::endl;
}else{
mesh.set_face(hed, mesh.null_face());
std::cout << "sets Face halfedge " << hed << std::endl;
}
mesh.remove_face(fd);
counter++;
}
}
mesh.collect_garbage();
mesh.is_valid();
return 0;
}
最佳答案
使用 remove_face
Euler operations 的功能.它将在幕后为您“保持有效性”。欧拉运算适用于任何类型 Graph
的值,它是 MutableFaceGraph
的“模型” .幸运的是,你的SurfaceMesh
就是这样一个模型。
如果你用下面的代码替换你的循环(这是不必要的,因为你只想要一张脸),你会看到它是如何工作的:
int counter = 0;
BOOST_FOREACH(face_descriptor fd, mesh.faces()){
counter++;
}
std::cout << counter << " faces" << std::endl;
CGAL::Euler::remove_face(mesh.halfedge(*mesh.faces().begin()), mesh );
mesh.collect_garbage();
mesh.is_valid();
counter = 0;
BOOST_FOREACH(face_descriptor fd, mesh.faces()){
counter++;
}
std::cout << counter << " faces" << std::endl;
这不会产生验证错误,并确认操作后网格中少了一个面。
关于c++ - Cgal 表面网格 - 连通性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45652756/
我想知道是否有办法让我选择CGAL中使用的浮点位宽。 例如下面的代码只是直接从CGAL手册中拷贝过来的一个凸包例子: #include #include #include typedef CGA
我正在创建一个网格实用程序库,我想包含的功能之一是能够拆分网格的不相交分区。为此,我正在尝试编写一个接受 CGAL::Surface_mesh 的方法。并返回 std::vector ,其中每个元素都
在 CGAL 中有一个任意的多面体(可以是凸面、凹面,甚至是有孔的)如何对它的面进行三角剖分,以便我可以创建 OpenGL 缓冲区进行渲染? 我已经看到convex_hull_3()返回一个具有三角面
我想检查一个点是否位于带孔的多边形内部或外部。具体来说,我感兴趣的是给定点是否位于带孔多边形的“填充区域”内;如果该点位于孔内,我会认为它位于带孔的多边形之外。 我知道有一个 CGAL 函数 chec
假设我有一个非简单的多边形, CGAL 如何帮助我将其划分为一组简单的多边形? 例如,给定一个由一系列 2D 点表示的多边形: (1, 1) (1, -1) (-1, 1) (-1, -1) 我想获得
我正在尝试使用 CGAL 执行一些简单的 2D CSG 操作。这是两个多边形相交的示例。 实际问题是在生成的多边形中追踪每个线段的原点(用颜色标记)。 我想知道这是否可能,也许对 CGAL 本身进行一
我从 CGAL 开始。我想做的是创建坐标为数字 ~ 2^51 的点。 typedef CGAL::Exact_predicates_exact_constructions_kernel K; type
我从 CGAL 开始。我想做的是创建坐标为数字 ~ 2^51 的点。 typedef CGAL::Exact_predicates_exact_constructions_kernel K; type
我是 CGAL 库的新手。但是,我认为这是一个非常适合我想做的事情的包。 我有一组表示 3D 表面的点(如图 1 所示)。 我想在这个表面上安装一个 3d 三角剖分。曲面不是封闭的,因此不占据体积。
我开始学习如何处理复杂与简单的多边形,确定点是否在多边形内部/外部等(例如http://geomalgorithms.com/a09-_intersect-3.html和相关页面)。我希望找到一个 R
这是论坛上的常见问题,但我找不到解决方案。 Windows 10 64 位、CGAL 4.11、Cmake 3.9.2、Boost 1.65.1、Qt5 for MSVS 2017、libQGLVie
我发现 CGAL 示例无法在 Mac OS X 10.9 (Mavericks) 下编译。您可以成功编译主要的 CGAL 4.3 库并链接它,但是当使用某些类型的库时,我会收到如下所示的错误。 具体来
我是 CGAL 的新手,我在 Ubuntu 16.04 上使用 CGAL 4.7-4。我正在尝试编译并运行一个非常简单的 .cpp。这是代码: #include #include int main
在 CGAL 手册中,它说 here : Scattered data interpolation solves the following problem: given measures of a
我刚刚开始在飞机上使用Nef多面体-下面的简单程序创建了一个半平面,由y=0行定义,然后由CGAL Explorer探索该半平面。 #include #include #include #inc
我正在使用 CGAL 进行几何处理。进行 delaunay 三角剖分后,我需要检查一个点是在 2D 网格内部还是外部: 最佳答案 如果你使用过CGAL的二维网格生成器,你可以: 首先,在三角剖分中定位
我一直在使用 LSCM 参数化器来展开网格。我想获得一个具有精确测量值的二维平面模型,这样如果您 Papercut ,就可以将其物理地包裹回原始模型。 似乎 SMP::parameterize() 正
大家好堆垛机, 我想编写一个函数,循环遍历 CGAL 常规 3D 三角剖分的所有有限边,并计算共享该边的所有面(面)对之间的角度。在引用指南中,我找到了一个名为 incident_facets 的方法
如果我在多边形的 2 个顶点之间有一个线段,是否可以使用 CGAL 扩展该线段直到它到达多边形边界? (如果至少一个顶点是反射顶点,就会发生这种情况)。 最佳答案 您可以通过mySegment.sup
我目前正在学习使用 CGAL 执行 3D 三角剖分,到目前为止,我已经通过插入和三角剖分 4 个顶点设法创建了一个正四面体。但是当我尝试遍历四面体的边缘并获得与该边缘对应的顶点时,我将原点作为顶点或先
我是一名优秀的程序员,十分优秀!