3D mesh objekt i AutoCAD (pyautocad)

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.

Figur 1: Netstruktur i henhold til Autodesk-dokumentation

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.

Figur 2.1: Set ovenfra af 3D-nettet oprettet på AutoCAD-skabelonen ved hjælp af pyautocad
Figur 2.2: Øverste højre hjørne af 3D-nettet oprettet på AutoCAD-skabelon ved hjælp af pyautocad

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

Figur 3.1: Afbildning af 3D maskedannelse

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)
Figur 3.2: Polyline, der bruger det samme sæt koordinater som brugt til at tegne 3D-nettet

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.

Figur 3.3: Realistisk visning af et 3D-net

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Close

Meta