Hatching objects in AutoCAD with pywin32

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)
Abbildung 1: Schraffiert die geschlossene Schleife mit pywin32 auf einer AutoCAD-Vorlage

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
Abbildung 2: Geänderte Musterskalierung mit pywin32

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)
Abbildung 3: Mit pywin32 eine innere Schleife innerhalb des schraffierten Bereichs hinzugefügt

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Close

Meta