.stl-Datei in Voxel

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
llllllllll
User
Beiträge: 2
Registriert: Montag 3. Mai 2021, 16:33

Hallo miteinander,
leider war ich auf meiner bisherigen Suche noch nicht so erfolgreich, weshalb ich hier meine Frage stelle:

Ich möchte ein 3D-Modell (CAD) was mir als .stl-File vorliegt voxelisieren. Die Auflösung (Verhältnis von Kantenlänge des Bauteils zu Voxelgröße) soll dabei einstellbar sein.
Ziel ist nachher ein 3D-Array zu haben mit dem ich weiterarbeiten kann...Die Größe des Array soll dann entsprechend nach Maximalmaß und Voxelgröße erstellt werden. Im Array soll dann unterschieden werden, ob ein Voxel/Listenelement belegt oder eben unbelegt ist. (Ich hatte auch mal überlegt dafür eine Klasse zu definieren, die Voxel durchzunummerieren und dann als Objekt der Klasse die Koordinaten und ob das Voxel belegt/unbelegt ist). Dazu hab ich bisschen Code geschrieben mit der Bibliothek open3d:

Code: Alles auswählen

component_path = r"C:\Users\User\Desktop\Bauteile\Wuerfel.stl"
mesh = o3d.io.read_triangle_mesh(component_path)

voxel_grid = o3d.geometry.VoxelGrid.create_from_triangle_mesh(mesh, voxel_size = 3)
ply_path = "Voxel.ply"
o3d.io.write_voxel_grid(ply_path, voxel_grid, True,True,True)

pcd = o3d.io.read_point_cloud(ply_path)
list_path = "Liste.xyz"
Diese Liste lese ich dann ein (f = open(list_path, 'r')), verarbeite die Daten zu Koordinatenpunkte und plotte sie...(Code kann ich auch noch schicken, wenn benötigt).
Fragen:
1. Bei der Voxelsize ändert sich auch das geplottete Maximalmaß (als wenn ich 100mm Kantenlänge habe, werden die bei Voxel_size=2 auf der Koordinate 50 geplottet). Wie kann ich das beheben? (Wahrscheinlich nur den Faktor 2 wieder draufmultiplizieren oder?
2. Wie kann ich tatsächlich Voxel darstellen und nicht nur Punkte im Raum?
3. Bei manchen Voxelgrößen wird der äußere Rand nicht dargestellt und das Bauteil ist plötzlich offen
4. Gibt es andere/bessere Möglichkeiten oder andere Bibliotheken eine Voxelisierung von .stl-Dateien durchzuführen und diese dann in ein Array zu schreiben
5. Kann man sich diese Umformatierung in ply und xyz und so weiter irgendwie sparen?
6. Ich hab nach Bibliotheken wie NURBS (geomdl) und Pyntcloud geschaut, aber da ist der Import und der Umgang mit den Daten auch ziemlich komplex. Gibt es noch andere Ansätze? Kann man die Voxelisierung einfach so durchführen?

Vielleicht kann mir der ein oder andere helfen! Das würde mich sehr freuen.

Viele Grüße
llllllllll
User
Beiträge: 2
Registriert: Montag 3. Mai 2021, 16:33

Für die Leute die es interessiert: Ich hab auch hier die Frage gestellt und nach etwas Zeit selber eine Lösung gefunden und gepostet:

https://stackoverflow.com/questions/673 ... o-np-array

Hier auch nochmal der Link zu Github: https://github.com/cpederkoff/stl-to-voxel

Und der Code:

Code: Alles auswählen

import stl_reader
import stltovoxel
import numpy as np
import copy
import os
import sys

input=r"C:\Users\user\Example.stl"
output=r"C:\Users\user\Test.xyz"
resolution = 50 #Resolution, into how many layers the model should be divided
stltovoxel.doExport(input, output, resolution)
Antworten