簡體   English   中英

從頭開始創建3D三角網格

[英]Create 3D triangulated mesh from scratch

我正在嘗試做的是創建一個3D三角網格,可以將其解析為.vtk或.stl文件,以用於3D打印應用程序。 現在,我一直堅持創建三角形網格。 我要創建的幾何圖形基本上是具有一定厚度並相互交叉的三維正弦波。 到目前為止,我收到了一個正弦波。 這是MWE:

import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage
import scipy.spatial

# create empty 3d array
array = np.zeros((100, 100, 100))

# create 3D sine wave in empty array
strut = np.sin(np.linspace(1, 10, 100))*12
for k in enumerate(strut):
    y_shift = int(np.round(strut[k[0]]))
    array[k, 50 + y_shift, 50] = 1

pattern = np.ones((4, 4, 4))

# convolve the array with the pattern / apply thickness
conv_array = ndimage.convolve(array, pattern)

# create list with data coordinates from convolved array
data = list()
for j in range(conv_array.shape[0]):
    for k in range(conv_array.shape[1]):
        for l in range(conv_array.shape[2]):
            if conv_array[j, k, l] != 0:
                data.append([j, k, l])

data = np.asarray(data)

tri = scipy.spatial.Delaunay(data)

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
ax.hold(True)
ax.plot_trisurf(data[:, 0], data[:, 1], data[:, 2], triangles=tri.simplices)
plt.show()

它的作用:我創建一個空數組,並用一個代表的正弦波填充。 我將該陣列與一個定義大小的矩形陣列進行卷積,這給了我在空間上更厚的正弦波。 然后,將數組轉換為坐標形式,以便可以使用Delaunay三角剖分對其進行三角剖分。 我得到的是:

情節

如您所見,三角剖分有點奏效,但它填充了正弦波幅度之間的空間。 有沒有辦法消除填充的空格? 還是首先阻止他們這樣做? 正弦波的末端也看起來不對,我不確定為什么。 這甚至是我要嘗試實現的最佳方法嗎?

解析為.vtk文件應該不會出現問題,但是我首先需要一個干凈的結構。 預先感謝您的任何幫助!

我不會自己發明輪子,而是自己做所有的事情。 而是使用python-vtk和paraview(這是3D數據的后處理應用程序)為您進行三角剖分。 “僅”創建點,然后在該應用程序中完成其余的工作。

我對3D打印了解不多,但是我對STL和VTK有相當的了解。 手動操作 麻煩 ,VTK庫具有一些不錯的Python示例和專用的STLWriter 需要全神貫注於VTK的工作流程及其內部管理方式。 這是paraview非常方便的地方。 它使您可以記錄在GUI中執行的操作,並顯示它們並以Python顯示它們。 了解內部工作方式非常好。

最終我得到了非常接近我想要的東西。 如果有人對答案感興趣:

我沒有使用點雲方法,而是用python挖了VTK(這是一個很難學習的功能,但功能很多)。

我的算法基本上是這樣的:

  1. 首先將正弦波近似為簡單的三角波。
  2. 將波的x,y和z坐標輸入vtkPoints對象
  3. 使用vtkParametricSpline獲得平滑波
  4. vtkSplineFilter可以控制波形的平滑度
  5. vtkTubeFilter從行創建一個體積
  6. vtkTriangleFilter進行網格划分
  7. vtkSTLWriter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM