gpt4 book ai didi

python - NURBS 曲面到水密 STL

转载 作者:行者123 更新时间:2023-12-05 06:47:31 24 4
gpt4 key购买 nike

我一直在使用 NURBS 实现进行参数化设计 geomdl在 python 。问题是它是空心的,不能用 cgal 或 3dprinted 处理。我正在寻找一种通过关闭顶部和底部使其防水的方法。我已经尝试使用 trimesh 库中的 trimesh.covex.convex_hull 函数,但它搞砸了设计。

example image

示例代码:

import os
from geomdl import NURBS
from geomdl import construct
from geomdl import exchange
from geomdl.visualization import VisMPL as vis
from geomdl import knotvector

os.chdir(os.path.dirname(os.path.realpath(__file__)))

# Create a NURBS surface instance
surf = NURBS.Surface()

# Set degrees
surf.degree_u = 2
surf.degree_v = 2

# Set control points from a template file
surf.set_ctrlpts(*exchange.import_txt("ctrlpts.cptw", two_dimensional=True, jinja2=True))

# Set knot vectors
surf.knotvector_u = knotvector.generate(surf.degree_u, surf.ctrlpts_size_u)
surf.knotvector_v = knotvector.generate(surf.degree_v, surf.ctrlpts_size_v)#[0, 0, 0, 0.25, 0.25, 0.5, 0.5, 0.75, 0.75, 1, 1, 1]

# Set evaluation delta
surf.delta = 0.05

exchange.export_stl(surf, "test2.stl")
os.system('fstl ./test2.stl')

和控制点:

4.00,0.00,0.00,1.00;2.83,2.83,0.00,1.00;0.00,4.00,0.00,1.00;-2.83,2.83,0.00,1.00;-4.00,0.00,0.00,1.00;-2.83,-2.83,0.00,1.00;0.00,-4.00,0.00,1.00;2.83,-2.83,0.00,1.00;4.00,0.00,0.00,1.00
4.00,0.00,10.00,1.00;2.83,2.83,10.00,1.00;0.00,4.00,10.00,1.00;-2.83,2.83,10.00,1.00;-4.00,0.00,10.00,1.00;-2.83,-2.83,10.00,1.00;0.00,-4.00,10.00,1.00;2.83,-2.83,10.00,1.00;4.00,0.00,10.00,1.00
4.00,0.00,20.00,1.00;2.83,2.83,20.00,1.00;0.00,4.00,20.00,1.00;-2.83,2.83,20.00,1.00;-4.00,0.00,20.00,1.00;-2.83,-2.83,20.00,1.00;0.00,-4.00,20.00,1.00;2.83,-2.83,20.00,1.00;4.00,0.00,20.00,1.00
4.00,0.00,30.00,1.00;2.83,2.83,30.00,1.00;0.00,4.00,30.00,1.00;-2.83,2.83,30.00,1.00;-4.00,0.00,30.00,1.00;-2.83,-2.83,30.00,1.00;0.00,-4.00,30.00,1.00;2.83,-2.83,30.00,1.00;4.00,0.00,30.00,1.00
4.00,0.00,40.00,1.00;2.83,2.83,40.00,1.00;0.00,4.00,40.00,1.00;-2.83,2.83,40.00,1.00;-4.00,0.00,40.00,1.00;-2.83,-2.83,40.00,1.00;0.00,-4.00,40.00,1.00;2.83,-2.83,40.00,1.00;4.00,0.00,40.00,1.00
4.30,0.00,50.00,1.00;3.04,3.04,50.00,1.00;0.00,4.30,50.00,1.00;-3.04,3.04,50.00,1.00;-4.30,0.00,50.00,1.00;-3.04,-3.04,50.00,1.00;0.00,-4.30,50.00,1.00;3.04,-3.04,50.00,1.00;4.30,0.00,50.00,1.00
4.60,0.00,60.00,1.00;3.25,3.25,60.00,1.00;0.00,4.60,60.00,1.00;-3.25,3.25,60.00,1.00;-4.60,0.00,60.00,1.00;-3.25,-3.25,60.00,1.00;0.00,-4.60,60.00,1.00;3.25,-3.25,60.00,1.00;4.60,0.00,60.00,1.00
0.30,0.00,70.00,1.00;-0.96,3.04,70.00,1.00;-4.00,4.30,70.00,1.00;-7.04,3.04,70.00,1.00;-8.30,0.00,70.00,1.00;-7.04,-3.04,70.00,1.00;-4.00,-4.30,70.00,1.00;-0.96,-3.04,70.00,1.00;0.30,0.00,70.00,1.00
-3.70,0.00,80.00,1.00;-4.96,3.04,80.00,1.00;-8.00,4.30,80.00,1.00;-11.04,3.04,80.00,1.00;-12.30,0.00,80.00,1.00;-11.04,-3.04,80.00,1.00;-8.00,-4.30,80.00,1.00;-4.96,-3.04,80.00,1.00;-3.70,0.00,80.00,1.00
-7.70,0.00,90.00,1.00;-8.96,3.04,90.00,1.00;-12.00,4.30,90.00,1.00;-15.04,3.04,90.00,1.00;-16.30,0.00,90.00,1.00;-15.04,-3.04,90.00,1.00;-12.00,-4.30,90.00,1.00;-8.96,-3.04,90.00,1.00;-7.70,0.00,90.00,1.00
-11.70,0.00,100.00,1.00;-12.96,3.04,100.00,1.00;-16.00,4.30,100.00,1.00;-19.04,3.04,100.00,1.00;-20.30,0.00,100.00,1.00;-19.04,-3.04,100.00,1.00;-16.00,-4.30,100.00,1.00;-12.96,-3.04,100.00,1.00;-11.70,0.00,100.00,1.00
-15.70,0.00,110.00,1.00;-16.96,3.04,110.00,1.00;-20.00,4.30,110.00,1.00;-23.04,3.04,110.00,1.00;-24.30,0.00,110.00,1.00;-23.04,-3.04,110.00,1.00;-20.00,-4.30,110.00,1.00;-16.96,-3.04,110.00,1.00;-15.70,0.00,110.00,1.00

最佳答案

一个简单易行的方法是使用 3D alpha-shape (也称为凹壳)。您可以对您的 NURBS 曲面进行采样(可能在“帽”上添加额外的点,但从您问题中的数字来看,我相信您的上下文即使这不是必需的)然后构建 3D alpha 形状曲面,它应该给出你就是你正在寻找的防水网。

参见 my previous answer例如调用的 python 代码,用于在一组 3D 点上构造(和绘制)alpha 形状并进行进一步解释。答案基于在这个漂亮的 answer 中找到的 3D alpha 形状代码。 .

如果您不想使用 alpha 形状,您可以通过对 NURBS 曲面的 uv 域进行均匀采样并获取用于从样本索引创建三角形的连接信息来自己构造一个水密曲面网格(例如,(u[i],v[j]) 中的样本点将创建一个三角形,其中 (u[i+1], v[j+1])(u[i], v[j+1]) 和其他邻居类似)。要关闭“盖子”,您可以在管端的中间添加一个额外的点(例如,在 (u[0], v[:]) 处的点的平均点,类似地在 (u[-1], v[:]) 的另一端的平均点。并从这个附加点到管表面边界圆上的点添加三角形。

关于python - NURBS 曲面到水密 STL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67088711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com