In diesem Blog-Beitrag werden wir uns ansehen, wie wir mit pyautocad-Modul in AutoCAD mit 3D-Netzobjekten arbeiten können. Wenn wir möchten, können wir auch das pywin32-Modul verwenden, um mit 3D-Mesh zu arbeiten.
Bedeutung der 3D-Mesh-Darstellung
Das 3D-Netz kann in mehreren Branchen für unterschiedliche Zwecke eingesetzt werden.
Als Bauingenieur kann ich definitiv sagen, dass bei der Arbeit als Landvermesser das 3D-Netz bei der Darstellung von Konturpunkten sehr hilfreich sein kann. Es kann auch bei Konstruktionsfehlern verwendet werden, indem eine Inspektion der Koordinaten jedes kleinen Elements einer Struktur durchgeführt wird.
Es kann in der mechanischen Industrie bei der Arbeit mit Maschinendesign verwendet werden.
Heutzutage verwenden wir das Mesh-Modell auch zur Gesichtserkennung. Hier kann es darüber hinaus z. B. zur Erkennung von Veränderungen im Gesichtsausdruck eingesetzt werden.
Es gibt weitere solcher Anwendungsfälle von 3D-Mesh, die in vielen Branchen eine sehr wichtige Rolle spielen.
Initiieren des Skripts in Python mit pyautocad oder pywin32
Wir können unsere Arbeitsumgebung mit dem pyautocad-Modul wie unten angegeben einrichten:
from pyautocad import Autocad, aDouble
acad = Autocad(create_if_not_exists=True)
Alternativ können wir auch win32com.client verwenden, um die Dinge gemäß dem folgenden Skript zum Laufen zu bringen:
from win32com.client import *
import pythoncom
acad = win32com.client.Dispatch("AutoCAD.Application")
acadModel = acad.ActiveDocument.ModelSpace
def aDouble(*argv):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (argv))
Hinzufügen von 3D-Mesh zu AutoCAD-Vorlagen mit pyautocad oder pywin32
Um ein 3D-Netz auf die AutoCAD-Vorlage zu zeichnen, ist ein sehr kleiner Befehl mit wenigen Parametern erforderlich.
Die Syntax des Befehls ist wie folgt:
object.Add3DMesh(M, N, PointsMatrix)
Hier nimmt M & N eine ganzzahlige Eingabe im Bereich von 2–256, die die Größe des Arrays in (oder die Anzahl der Scheitelpunkte entlang) in beiden M- und N-Richtungen darstellt.
Die PointsMatrix repräsentiert das Array von Doubles. Es ist dieselbe Matrix, die wir zB beim Erstellen von Polylinien mit pyautocad verwenden .
Lassen Sie uns ein solches Netzmodell anhand des vorhandenen Beispiels erstellen, das in der Autodesk-Dokumentation bereitgestellt wird. Ich werde die PointsMatrix nehmen, wie in der Dokumentation angegeben.
pmatrx = aDouble(10, 1, 3, 10, 5, 5, 10, 10, 3, 15, 1, 0, 15, 5, 0, 15, 10, 0, 20, 1, 0, 20, 5, -1, 20, 10, 0, 25, 1, 0, 25, 5, 0, 25, 10, 0)
mesh1 = acad.model.Add3DMesh(4, 3, pmatrx)
In diesem Code haben wir 12 Koordinatenpunkte in der PointsMatrix bereitgestellt.
Außerdem wollen wir 4 Scheitelpunkte entlang der M-Richtung und 3 Scheitelpunkte entlang der N-Richtung.
Analyse des neu erstellten 3D-Netzes
Wie wir in den Abbildungen 2.1 und 2.2 sehen können, haben wir 4 Scheitelpunkte in der M-Richtung und 3 Scheitelpunkte entlang N, wie im Befehl übergeben.
Bevor wir dasselbe zeichnen, haben wir uns vorgestellt, dass die Scheitelpunkte dieses Format haben sollen. dh
Andernfalls, wenn wir versuchen, ein Netz mit einer Polylinie zu zeichnen, indem wir denselben Satz von Koordinatenpunkten verwenden, führt dies nicht zu einem Netz, sondern verbindet einfach die Punkte in einer bestimmten Reihe, die ein Zickzackmuster bilden.
pl = acad.model.AddPolyline(pmatrx)
Wir können auch sehen, wie das Netzmodell aussieht, wenn wir die realistische Ansicht anstelle des 2D-Drahtmodells verwenden. Dies zeigt uns deutlich die Vertiefungen oder Buckel, falls vorhanden, im gegebenen Netzmodell.
Wie oben erwähnt, ist in Abbildung 3.3 die Vertiefung in der rechten Hälfte des Netzes deutlich zu sehen, außerdem ragt der mittlere Teil der linken Hälfte an der Grenze heraus.
Eigenschaften eines 3D-Netzes mit Pyautocad
Wir haben einige netzspezifische Methoden, die verwendet werden können, um die Eigenschaften eines bestimmten Netzes abzurufen, abgesehen von einigen gängigen Methoden, die wir in AutoCAD-Operationen verwenden.
print("Coordinates of the mesh:", end='')
print(mesh1.Coordinates)
print("Is mesh one is closed in M direction: " + str(mesh1.MClose))
print("Density of mesh in M direction: " + str(mesh1.MDensity))
print("Number of vertices in M direction: " + str(mesh1.MVertexCount))
print("Is mesh one is closed in N direction: " + str(mesh1.NClose))
print("Density of mesh in N direction: " + str(mesh1.NDensity))
print("Number of vertices in N direction: " + str(mesh1.NVertexCount))
O/p:
Coordinates of the mesh:(10.0, 1.0, 3.0, 10.0, 5.0, 5.0, 10.0, 10.0, 3.0, 15.0, 1.0, 0.0, 15.0, 5.0, 0.0, 15.0, 10.0, 0.0, 20.0, 1.0, 0.0, 20.0, 5.0, -1.0, 20.0, 10.0, 0.0, 25.0, 1.0, 0.0, 25.0, 5.0, 0.0, 25.0, 10.0, 0.0)
Is mesh one is closed in M direction: False
Density of mesh in M direction: 0
Number of vertices in M direction: 4
Is mesh one is closed in N direction: False
Density of mesh in N direction: 0
Number of vertices in N direction: 3
Leave a Reply