问题标签 [csg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
122 浏览

three.js - 相交网格结果与整体网格

我正在使用 THREE,我正在尝试将一个盒子网格与我正在创建的自定义几何图形相交并将其转换为几何图形:

我的目标是为自定义几何图形添加面,这就是我这样做的原因。所以我希望从我的自定义几何图形+盒子的多边形的交叉点回来。

我确实明白了,尽管我也有一些漏洞,如下图所示:

在此处输入图像描述

我使用了许多现有的 csg 版本,manthrax 版本,ThreeCSG 等,但没有运气!

谢谢你

0 投票
1 回答
242 浏览

python - 为什么 Pymesh 布尔运算在我简单的几何设置中非常慢?

我正在测试 pymesh 中布尔运算的效率,以查看它计算布尔值的速度。但是与libigl 论文相比,我使用默认引擎获得的性能非常慢

0.25 s 计算 8616 个网格的自联合。

我做了一个与一个小的原始盒子相交的纹理网格的实验。纹理有 12 个顶点,原始框有 8 个顶点。谷物的位置刚好在盒子的一张脸的上方。计算这两个对象的交集用了 0.036 秒。

这么简单的计算,为什么需要 0.036 秒?在执行此布尔运算时,将我们的 Libigl pymesh 作为引擎,它是用 C++ 编写的。我是否必须用 C++ 编写代码才能直接使用 Libigl 才能获得类似的性能?

这些结果是在以下环境中产生的:

  • 处理器:2.3 GHz 双核 Intel Core i5
  • 内存:8 GB 2133 MHz LPDDR3
  • 操作系统:Mac OS Catalina 10.15.7
  • IDE:Visual Studio 代码、Jupyter Notebook
  • Python版本:3.7.5
  • Pymesh 版本:pymesh2==0.3
0 投票
1 回答
78 浏览

reactjs - React threejs 合并两个管子以创建一个 CSG 未按预期工作的 T 形件

我正在尝试创建一个适合管道领域的 T 恤。它由 2 个合并在一起的管子组成,并有 3个开口,如图所示。

我在threejs中编写了一些代码,我试图创建一个管网1和另一个管网2,然后尝试将它们与库@enable3d/three-graphics/jsm/csg联合到mesh3中——感谢@Marquizzo。使用函数 CSG.union 并将网格添加到场景中后,我可以看到我得到了一个 T 形球,但它还在几何 1 中创建了一个洞,这是意料之外的。您可以在此处看到正确孔(绿色)和错误创建孔(红色)的图片:

这个

相反,它应该看起来像这样,并且是一个几何图形。

在此处输入图像描述

谁能告诉我 CSG 是如何工作的以及为什么我在第一个几何图形的背面有一个额外的孔?

enter code here?

0 投票
1 回答
154 浏览

c# - 如何将 2DPoints 列表挤出到网格中并在 C# 中减去这些挤出?[构造立体几何]

我已经为有关Constructive Solid Geometry的问题苦苦挣扎了几天。实际上,我从必须在 3D 空间中拉伸的 2DLines(带有 2DPoints)列表开始。这是我设法用三角测量算法做的事情,我可以用 Helix Toolkit 进行可视化。比我尝试了几个开源库来做布尔运算“减法”,我得到最好结果的一个是这个库(但我当然对其他库开放)。我将给出的例子是这个问题的以下几点。

我用来做减法的代码是一个挤压,我已经过期了很多,以逆时针方向改变顶点的方向以获得正确的法线,但它仍然不起作用。

您会看到我得到的三角形并不完全正确,这有点令人沮丧。

我已经尝试了多个库(例如这个库:来自 Sebastian Loncar aka 'arakis' 的 Net3dBool)并尝试了实体多边形的顶点,多种算法来确定它是逆时针还是顺时针......没有解决方案。

是否有人做过类似的事情并想分享他是如何解决问题的?您使用了哪个库,您是如何挤出 2DPoints 列表的?

来自比利时的问候,约阿希姆

0 投票
0 回答
34 浏览

javascript - 如果与任何其他网格碰撞,ThreeJS 将网格分成两个或更多

我正在尝试找到一种将网格分成两个或更多的好方法(基于它是否与任何其他网格发生碰撞。

在此处输入图像描述

我已经尝试过 ThreeCSG,但问题是 ThreeCSG 不能分割网格,它只在中间部分不可见,而将整个木板作为单个木板返回。我的主要目标是拆分它。一种方法是创建自己的函数并检查新形状之间是否存在网格并自己添加两个模型,但这太复杂了,因为我们可能有多种形状不同角度的形状。如果有任何好的建议或解决方案,我将不胜感激。谢谢

0 投票
1 回答
169 浏览

computational-geometry - 将固体分解成组成部分

下面的3d模型——stl格式——由长方体和圆柱体组成

在此处输入图像描述

如何从复合材料中提取这些组成实体的尺寸和坐标,即长方体/圆柱体的尺寸和位置?

我尝试了一种基于构造立体几何的方法,这对我来说有点太慢和笨拙。由于缺乏数据集,机器学习或深度学习模型不是一种选择。

0 投票
0 回答
62 浏览

three.js - 从 CSG 获取 Threejs 面孔

我目前正在使用这个 CSG 库https://github.com/looeee/threejs-csg来生成实体。在图片中,您可以看到有孔的面。这些面孔是我想要检索的。

在我的项目中,我正在处理诸如胶合板之类的材料。我正在寻找带有孔的实体对象的面/边缘。我知道每张脸都被分成三角形。所以如果我这样做了,geometry.faces.length我会得到所有面孔(三角形)的计数。

在较低的对象中,带有 2 个孔的边缘将由多个三角形构成以实现这一点。如何以编程方式检索属于该边缘的所有面?

在此处输入图像描述

在上面的对象中,我需要获取构成 2 个平面的所有三角形以及拐角处的半径。这将被认为是我世界中的 1 个优势。

我还需要一种方法来组合每条边的所有这些三角形并进行计数。例如,下部形状将有 4 条边。而上部形状将仅包含 3 个边缘。

挖掘形状并检索我正在寻找的数据的最佳方法是什么?

0 投票
0 回答
90 浏览

c# - 为什么这个 CSG 库减法函数会留下顶点?

我目前正在使用这个CSG 库来减去两个实体。我选择这个特定的库是为了使用我项目的 .NET Framework 4.5 依赖项。我的目标是能够成功地在两个凹实体上使用布尔运算。但是,当我减去两个实体时,该函数会留下减去形状的一些顶点。

下面是一个以 3d 呈现的减去图像应该是什么样子的示例: 正确的实体减法

相反,该函数会产生如下内容: Failed Solid Subtraction

您可以看到一些顶点已留在减去的实体上方,这会导致渲染和进一步操作出现问题。我在这里的存储库上打开了一个 GitHub 问题,并且我还使用创建了一个失败的单元测试NUnit.Framework,它从.json文件中读取点(内容如下):

这里有什么问题?是否有更好的实体几何库可供我使用?

0 投票
1 回答
43 浏览

javascript - 收到错误“请求的模块'./three-csg.js'不提供名为'CSG'的导出”

我正在对立方体和球体进行一些简单的 CSG 操作.. 为此,我在进行操作后使用了三个 csg.js 库形式“https://github.com/manthrax/THREE-CSGMesh”,我收到了类似“ Uncaught SyntaxError: The requested module './three-csg.js' does not provide an export named 'CSG'"
编码如下,并且还根据需要添加了其他两个库(csg-lib.js,csg-lib.js )

0 投票
1 回答
94 浏览

c++ - 如何使用 vtk 计算 3 个几何之间的布尔交集?

我正在尝试使用 VTK 计算 3 个几何图形之间的交集。

我从这个BooleanOperationPolyDataFilter例子开始,做了一些小的调整,比如:

添加第三个球体:

尝试插入第一个布尔交集(在第一个两个球体之间)的结果,然后作为 Union 与第三个球体的测试:

完整代码清单:

问题是在球体 1,2 结果和球体 3 之间执行布尔运算时出现此错误:

我是 VTK 的新手,所以任何关于我可以测试/调试的提示/提示都会很棒!

更新:

Marco Musy 的回答是正确的(打电话Update())。作为参考,在我的场景中,这将是:

当我有一个操作时,映射可能已经在Update()幕后完成了,我完全错过了一个事实,即如果我需要将每个布尔操作的结果插入另一个操作,我需要手动更新它。

顺便说一句,他的图书馆vedo真的很酷:使用起来非常简单有趣!