I dette blogindlæg skal vi se på, hvordan vi kan arbejde med 3D-mesh-objekter i AutoCAD ved hjælp af pyautocad-modulet. Hvis vi vil, kan vi også bruge pywin32-modulet til at arbejde med 3D-mesh.
Betydningen af 3D mesh-repræsentation
3D-nettet kan bruges i flere brancher til forskellige formål.
Som civilingeniør kan jeg bestemt sige, at mens du arbejder som landinspektør, kan 3D-nettet være meget nyttigt, mens det repræsenterer konturpunkter. Det kan også bruges ved konstruktionsfejl ved at foretage en inspektion af koordinaterne for hvert lille element i en struktur.
Det kan bruges i den mekaniske industri, mens man arbejder med maskindesign.
I dag bruger vi også mesh-modellen til ansigtsgenkendelse. Her kan den desuden f.eks. bruges til at detektere ændringer i ansigtsudtryk.
Der er flere sådanne anvendelsessager af 3D-mesh, der spiller en meget vigtig rolle i mange industrier.
Start af scriptet i Python ved hjælp af pyautocad eller pywin32
Vi kan konfigurere vores arbejdsmiljø ved at bruge pyautocad-modulet som angivet nedenfor:
from pyautocad import Autocad, aDouble
acad = Autocad(create_if_not_exists=True)
Alternativt kan vi også bruge win32com.client til at få tingene til at køre i henhold til følgende script:
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))
Tilføjelse af 3D-mesh til AutoCAD-skabeloner ved hjælp af pyautocad eller pywin32
For at tegne et 3D-net på AutoCAD-skabelonen kræver det en meget lille kommando med nogle få parametre.
Syntaksen for kommandoen er som angivet nedenfor:
object.Add3DMesh(M, N, PointsMatrix)
Her tager M & N et heltal input fra 2-256, der repræsenterer størrelsen af arrayet i (eller antallet af hjørner langs) begge M & N retninger.

PointsMatrix repræsenterer rækken af doubler. Det er den samme matrix som vi f.eks. på når vi laver polylinjer med pyautocad .
Lad os oprette en sådan mesh-model ved at bruge det eksisterende eksempel som angivet i Autodesk-dokumentationen. Jeg tager PointsMatrix som angivet i dokumentationen.
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)
I denne kode har vi givet 12 koordinatpunkter i PointsMatrix.
Vi ønsker også 4 spidser langs M-retningen og 3 spidser langs N-retningen.


Analyse af det nyoprettede 3D mesh
Som vi kan se fra figur 2.1 og 2.2, har vi 4 spidser i M-retningen & 3 spidser langs N som passeret i kommandoen.
Før vi tegner det samme, har vi visualiseret, at hjørnerne skal være i dette format. dvs

Ellers, hvis vi forsøger at tegne en maske med en polylinje ved hjælp af det samme sæt af koordinatpunkter, vil det ikke resultere i, at en maske snarere blot forbinder punkterne i en given serie og danner et zigzag-mønster.
pl = acad.model.AddPolyline(pmatrx)

Vi kan også se, hvordan mesh-modellen ser ud, hvis vi bruger den realistiske visning frem for 2D wireframe. Dette vil tydeligt vise os fordybningerne eller puklerne, hvis nogen i den givne mesh-model.

Som nævnt ovenfor, fra figur 3.3, kan fordybningen tydeligt ses i højre halvdel af nettet, også den centrale del af venstre halvdel rager ud ved grænsen.
Egenskaber for et 3D-mesh ved hjælp af pyautocad
Vi har nogle mesh-specifikke metoder, der kan bruges til at hente egenskaberne for en given mesh, bortset fra nogle få almindelige metoder, som vi bruger i AutoCAD-operationer.
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