In unseren vorherigen Blogbeiträgen haben wir besprochen, wie man 2D- und 3D-Objekte erstellt und mit ihren Eigenschaften spielt.
In diesem Blogbeitrag werden wir nun lernen, wie man Objekte mit pywin32 in der AutoCAD-Vorlage schraffiert.
Einrichten der Umgebung mit dem Modul pywin32
Zunächst werden wir unsere Arbeitsumgebung einrichten, um Python und AutoCAD mit dem Modul pywin32 zu integrieren und einige Pakete zu importieren.
import win32com.client
import pythoncom
import math
acad = win32com.client.Dispatch("AutoCAD.Application")
acadModel = acad.ActiveDocument.ModelSpace
Erstellen der erforderlichen Konstruktoren mit pywin32 und pythoncom
Beim Schraffieren von Objekten in AutoCAD mit Python benötigen wir bestimmte Typen eines Arrays spezifischer Datentypen.
Um ein Objekt zu schraffieren, müssen wir eine Schleife erstellen. Diese Schleife ist eine Gruppe von Zeichnungsobjekten, die zu einem geschlossenen Bereich führt.
Es kann mehrere solcher Objekte geben, die an dieses Array von Schleifen übergeben werden können. Daher benötigen wir gemäß der AutoCAD-Dokumentation ein Array von „Varianten“, um diese Schleife zu erstellen.
Hier verwenden wir den Datentyp VT_DISPATCH, um die Zeichnungsobjekte aus der AutoCAD-Vorlage abzurufen.
Außerdem benötigen wir andere Konstruktoren wie APoint und Double, um Objekte zu zeichnen. Wir haben dasselbe in unseren vorherigen Blogs besprochen.
def variants(object):
return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_DISPATCH, (object))
Schleife von Objekten in AutoCAD erstellen
Jetzt müssen wir mit einem oder mehreren Zeichnungsobjekten einen geschlossenen Raum erstellen und diesen in eine Schleife umwandeln.
Dieses Array kann ein oder mehrere Zeichnungsobjekte enthalten, die einen geschlossenen Raum bilden.
out_loop = []
sq = acadModel.AddPolyline(ADouble([0,0,0,1000,0,0,1000,1000,0,0,1000,0]))
arc = acadModel.AddArc(APoint(0, 500, 0), 500, 90*pi/180, 270*pi/180)
out_loop.append(sq)
out_loop.append(arc)
outer = variants(out_loop)
Schraffurobjekt erstellen und Schraffur anhängen
Nachdem wir das zu schraffierende geschlossene Objekt erstellt haben, erstellen wir ein Schraffurobjekt, um es der geschlossenen Schleife hinzuzufügen.
Um ein Schraffurobjekt zu erstellen, benötigen wir den Befehl AddHatch mit der folgenden Syntax:
object.AddHatch( Mustertyp, Mustername, Assoziativität )
Mustertypen sind hier 0 für vordefinierte Schraffurtypen, 1 für Linienmuster, die den aktuellen Linientyp verwenden, und 2 für Musternamen aus einer anderen PAT-Datei als der acad.pat -Datei.
An der Stelle des Parametermusternamens können wir den von AutoCAD bereitgestellten Musternamen oder den benutzerdefinierten Musternamen übergeben.
Assoziativität enthält einen booleschen Wert, um anzugeben, ob die Schraffur assoziativ oder nicht-assoziativ ist. Sie kann nur beim Erstellen des Schraffurobjekts festgelegt werden.
Eine assoziative Schraffur wird aktualisiert, wenn ihre Grenzen geändert werden. Eine nicht assoziative Schraffur wird nicht aktualisiert, wenn ihre Grenzen geändert werden.
Lassen Sie uns jetzt das Schraffurobjekt erstellen.
hatch = acadModel.AddHatch(0, "ANSI37", True)
Um diese Schraffur nun zu der von uns erstellten Schleife hinzuzufügen, verwenden wir die AppendOuterLoop-Methode.
hatch.AppendOuterLoop(outer)
Eigenschaften des AutoCAD-Schraffurobjekts in Python
Wie wir von anderen AutoCAD-Objekten wissen, können wir mit verschiedenen Methoden auch Eigenschaften von Schraffurobjekten abrufen oder ändern.
print(hatch.HatchStyle)
print(hatch.PatternName)
print(hatch.AssociativeHatch)
print(round(hatch.Area,2))
print(hatch.PatternAngle)
print(hatch.PatternDouble)
print(hatch.PatternScale)
print(hatch.PatternSpace)
print(hatch.PatternType)
print(hatch.NumberOfLoops)
O/p:
0
ANSI37
True
1392699.08
0.0
False
1.0
1.0
1
1
Ändern wir nun die Musterskala auf 10.
hatch.PatternScale = 10
Hinzufügen einer inneren Schleife zu einer schraffierten AutoCAD-Objektschleife
Wenn wir wollen, dass die Luke um das innere Objekt herum ist, müssen wir die Arbeit in umgekehrter Reihenfolge ausführen, was wir hier tun.
Wir haben ein äußeres Objekt schraffiert. Jetzt fügen wir ein inneres Objekt hinzu, das ich nicht schraffieren möchte.
In ähnlicher Weise können wir dem schraffierten Bereich nacheinander mehrere solcher inneren Schleifen hinzufügen.
in_loop = []
in_loop.append(acadModel.AddCircle(APoint(250, 250, 0), 100))
inner = variants(in_loop)
hatch.AppendInnerLoop(inner)
Lassen Sie uns nun den schraffierten Bereich überprüfen, nachdem Sie diese innere Schleife hinzugefügt haben.
print(round(hatch.Area,2))
O/p:
1361283.16
Wie wir der Codeausgabe und Abbildung 3 entnehmen können, wurde die Fläche um 31415,92 (Fläche des Kreises) reduziert, seit wir die innere Schleife zu der vorhandenen schraffierten Fläche hinzugefügt haben.
Leave a Reply