DimAligned-Objekt in AutoCAD mit Python

In diesem Artikel stelle ich das DimAligned-Objekt in AutoCAD mit Python vor. Im Allgemeinen ist das manuelle Hinzufügen von Dimensionen eine sehr mühsame Aufgabe, die ich vermeiden kann, wenn ich stattdessen die Python-Automatisierung verwende.

Für dieses Tutorial verwende ich das pyautocad-Modul in Python. Ich kann dafür auch die Module pywin32 und win32com in Python verwenden. Diese Module bieten eine weitere Möglichkeit zur Durchführung der AutoCAD-Automatisierung in Python. Weitere Informationen zu diesen Modulen finden Sie in meinen vorherigen Blog-Beiträgen.

Hinzufügen von DimAligned-Objekten zu AutoCAD-Zeichnungen

Wie der Name des Artikels schon sagt, konzentriere ich mich auf Bemaßungen für lineare Einheiten. Ich kann dafür das DimAligned-Objekt verwenden.

Ich kann Dimensionen mit der AddDimAligned-Methode hinzufügen. Das erste, woran Sie denken sollten, ist, dass ein DimAligned-Objekt 3 Parameter benötigt:

  • ExtLine1Point (erster Endpunkt)
  • ExtLine2Point (zweiter Endpunkt)
  • TextPosition (Text für Bemaßungen)

In diesem Fall sind in meinem Modellbereich zwei Geometrien vorhanden. Die linke besteht aus Linien und die rechte ist eine Polylinie. Sie können dies im folgenden Screenshot sehen.

Angesichts der Tatsache, dass ich die Start- und Endpunkte eines AutoCAD- Linienobjekts abrufen kann, kann ich über das AcDbLine-Objekt iterieren und diese Punkte als Start- und Endpunkte für die Bemaßungen übergeben.

Für die Textposition verwende ich die Mittelpunktformel mit einem Faktor von 100 für den Versatz. Siehe Code unten.

for l in acad.iter_objects_fast(object_name_or_list="AcDbLine"):
    acad.model.AddDimAligned(APoint(l.StartPoint), APoint(l.EndPoint), APoint((l.StartPoint[0]+l.EndPoint[0]+100)/2, (l.StartPoint[1]+l.EndPoint[1]+100)/2, 0))

Andererseits gibt das Polylinienobjekt ein Array von Doubles für die Koordinaten jedes seiner Knoten zurück. In diesem Fall kann ich über dieses Array iterieren und diese Punkte bei jeder Iteration als Start- und Endpunkt übergeben.

for i in acad.iter_objects_fast(object_name_or_list="AcDbPolyline"):
    nodes = len(i.Coordinates)/2
    j=0
    while j <= nodes+1:
        acad.model.AddDimAligned(APoint(i.Coordinates[j], i.Coordinates[j+1], 0),    APoint(i.Coordinates[j+2], i.Coordinates[j+3], 0),    APoint((i.Coordinates[j]+i.Coordinates[j+2]+100)/2,     (i.Coordinates[j+1]+i.Coordinates[j+3]+100)/2, 0))
             j+=2

Dies ist natürlich ein sehr grundlegender Ansatz zum Hinzufügen von Bemaßungen zu jeder linearen Geometrie. Lassen Sie mich dies jedoch jetzt implementieren und die Ergebnisse sehen.

Offensichtlich kann ich, wie Sie im obigen Screenshot sehen können, sagen, dass ich die Abmessungen zu den linearen Geometrien hinzugefügt habe.

Eigenschaften des DimAligned-Objekts in AutoCAD

Nachdem ich die Maße zu den Figuren hinzugefügt habe, möchte ich einige ihrer wichtigen Eigenschaften vorstellen. Ich kann nicht jede von ihnen in diesem Artikel selbst erklären, da es insgesamt etwa 115 Eigenschaften gibt, von denen viele für verschiedene Dimensionsaspekte arbeiten.

Aber zuerst zeige ich einige grundlegende Eigenschaften im folgenden Python-Code.

# general properties
print(l.ObjectName)

print(l.Rotation) # rotation angle of object in radians

print(l.LinearScaleFactor) 
# specfies global scale factor for linear dimensioning  measurements

print(l.StyleName)

l.DecimalSeparator = "."
print(l.DecimalSeparator)


O/p:

AcDbAlignedDimension
0.0
1.0
ISO-25
.

Da in meiner Zeichnung mehrere Maßlinien vorhanden sind, wähle ich eine davon aus, um diese Eigenschaften anzuwenden. Außerdem gibt es ArrowHead-Eigenschaften, mit denen ich die Größe der Pfeilspitze festlegen kann, indem ich einen ganzzahligen Wert übergebe.

# arrow head properties
l.ArrowheadSize = 15
print(l.ArrowheadSize)
print(l.Arrowhead1Type)
print(l.Arrowhead2Type)

O/p:
15.0
0
0

Wie ich im obigen Code gezeigt habe, kann ich die Größe und den Typ der Pfeilspitze abrufen und festlegen. Für den Pfeilspitzentyp gibt es mehrere Optionen. Der Standardwert ist acArrowDefault (0). Die anderen Typen sind unten aufgeführt:

  • acArrowDefaultt
  • acArrowDot
  • acArrowDotSmall
  • acArrowDotBlank
  • acPfeilUrsprung
  • acArrowOrigin2
  • acPfeilÖffnen
  • acPfeilÖffnen90
  • acArrowOpen30
  • acPfeilGeschlossen
  • acArrowSmall
  • acArrowNone
  • acPfeilSchräg
  • acArrowBoxFilled
  • acArrowBoxBlank
  • acPfeilGeschlossenLeer
  • acArrowDatumFilled
  • acPfeilDatumBlank
  • acArrowIntegral
  • acArrowArchTick
  • acArrowBenutzerdefiniert Schreibgeschützt

Ebenso habe ich einige Maßlinieneigenschaften wie unten angegeben.

l.DimensionLineColor = 200
print("Dimension line color on the basis of 0-256 color index: " + str(l.DimensionLineColor))
    
print("The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: " + str(l.DimensionLineExtend))

print("The dimension line type is: " + l.DimensionLineType)l.DimensionLineWeight = 100    

print("Dimension lineweight: " + str(l.DimensionLineWeight))
    
print("Dimension text direction: ", end="" )
    
print(l.DimTxtDirection) 
# False: Left to right reading style
# True: Right to Left reading style 

print(l.Fit)

O/p:


Dimension line color on the basis of 0-256 color index: 200
The dimension line extends beyond the extension line when oblique strokes are drawn instead of arrowheads: 0.0
The dimension line type is: ByBlock
Dimension lineweight: 100
Dimension text direction: False
3

Die Fit-Eigenschaft hat 4 mögliche Werte, wie unten aufgeführt:

  • acTextAndArrows(0) : Um sowohl den Text als auch die Pfeilspitzen innerhalb der Verlängerungslinien zu platzieren.
  • acArrowsOnly(1): Um nur die Pfeilspitzen innerhalb der Verlängerungslinien zu platzieren. Der Text wird außerhalb der Pfeilspitzen platziert.
  • acTextOnly(2) : Um nur den Text innerhalb der Verlängerungslinien zu platzieren. Die Pfeilspitzen werden außerhalb der Hilfslinien platziert.
  • acBestFit(3) : Dies ist die Standardoption, die den Text und die Pfeilspitzen an der für den verfügbaren Platz am besten geeigneten Stelle platziert. Wenn genügend Platz für Text und Pfeilspitzen vorhanden ist, platziert diese Option beide zwischen den Hilfslinien.

Es gibt noch einige andere Eigenschaften wie Texteigenschaften und Toleranzeigenschaften. Lassen Sie mich ein paar von jeder dieser Eigenschaften hinzufügen, um sie zu erklären.

#Text properties
l.TextHeight = 20
print(l.TextHeight)
print(l.TextInside) 

#Tolerance properties
print(l.ToleranceDisplay)
print(l.TolerancePrecision)

O/p:
20.0
False
0
2

Hier hat die Eigenschaft TextInside einen booleschen Wert, um anzugeben, ob der Text zwangsweise (true) oder nur bei entsprechender Leerstelle (false) an die Hilfslinie angefügt werden soll.

Um Toleranzen im Bemaßungstext anzugeben, habe ich die ToleranceDisplay-Eigenschaft, die auch einen booleschen Wert zurückgibt. ToleranceDisplay gibt standardmäßig False zurück, dh wenn keine Toleranzen angegeben wurden.

Im Allgemeinen hat die Toleranzgenauigkeit 4 mögliche Werte:

  • acTolNone: 0 (Standard)
  • acTolSymmetrisch: 1
  • acTolAbweichung: 2
  • acTolLimits: 3
  • acTilBasic: 4

Tatsächlich gibt es, wie ich selbst schon erwähnt habe, noch viel mehr Eigenschaften, als ich oben angegeben habe, aber dies sind nur einige, um zu zeigen, wie man sie verwendet. Nachfolgend finden Sie eine Liste der Methoden der AutoCAD-Objektklasse DimAligned.

  • ArrayPolar
  • ArrayRechteckig
  • Kopieren
  • Löschen
  • GetBoundingBox
  • SchnittmengeMit
  • Spiegel
  • Mirror3D
  • Bewegen
  • Drehen
  • Drehen3D
  • ScaleEntity
  • Aktualisieren

Abschließende Bemerkungen

Abschließend kann ich sagen, dass ich das DimAligned-Objekt von AutoCAD behandelt habe und wie ich dasselbe mit Python automatisieren kann. Ebenso gibt es andere Dimensionsobjekte, die ich in meinen zukünftigen Blogbeiträgen behandeln werde. Falls Sie weitere technische Informationen oder Beratung benötigen, können Sie mich gerne über unser Kontaktformular kontaktieren . Hinterlassen Sie bei Zweifeln auch einen Kommentar in unserem Kommentarfeld.

You May Also Like

Leave a Reply

Leave a Reply

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.