ActiveX

ActiveX bietet weitere Möglichkeiten das AutoCAD zu verbessern. ActiveX greift direkt in die AutoCAD-Struktur ein und

ermöglicht so das Ändern von Layers, Blockdefinitionen, Optionen und Einstellungen bzw. Objekte.

 

Wenn wir mit ActiveX arbeiten wollen muss zuerst, (vl-load-com), aufgerufen werden um die ActiveX-Funktionen zu laden.

Es gibt Funktionen die mit vl- beginnen, diese sind VisualLisp-Funktionen die nur die normalen Lisp-Funktioen erweitern.

Die ActiveX-funktionen beginnen mit  vla-  vlax-  vlr-. Wobei dei vlax- Funktionen die wichtigen ActiveX-Funktionen sind und vla- meist Abkürzungen sind und die vlr- sind Reactoren die auf gewisse Zustände oder Befehle reagieren.

 

1. Bearbeiten von Objekten

Zuerste muss das Objekt , (car (entsel)), zu einem ActiveX-Objekt konvertierte werden, die dafür benötigte Funktion lautet:

(vlax-ename->vla-obj [Objekt])

Um Eigenschaften von Objekt abzufragen gitb es die Funktion:

(vlax-get-property [vla-Objekt] [Eigenschaft])

Um Eigenschaften zu setzen benötigen wir die Funktion:

(vlax-put-property [vla-Objekt]  [Eigenschaft]  [Wert])

 

Z.B.: Um die Farbe eines Objekts, Linie, zu ermitteln:

(vlax-get-property (vlax-ename->vla-object (car (entsel))) "Color")

oder die vla- variante

(vla-get-color (vlax-ename->vla-object (car (entsel))))

Um die Farbe eines Objekt zu ändern:

(vlax-put-property (vlax-ename->vla-object (car (entsel))) "Color" 1)

Ändern die Farbe eines Objekts auf 1, Rot, 0 ist VONBLOCK und 256 ist VONLAYER

Die vla- Variante:

(vla-put-color (vlax-ename->vla-object (car (entsel)) 1)

 

Es muss nicht nur Farbe sein, es kann auch:

Layer

Angle

Length

Linetype

Linetypescale

Lineweight

Startpoint

Endpoint

Name (Bei Blöcken)

...

 

Um zu ermittel welche Eigenschaften ein Objekt hat gibt es auch einen Befehl.

(vla-dump-object [vla-objekt])

 

2. ActiveX-Struktur

Bild aus der Entwickler-Hilfe von AutoCAD
Bild aus der Entwickler-Hilfe von AutoCAD

Rechts sieht man die Struktur an die amn sich halten muss.

Der Ausgangspunkt ist

(vlax-get-acad-object)

 

Als nächsters wird die Einstellungen, Perferences, oder ein Dokument gewählt. Wir wählen das aktuelle Dokument, Zeichnung.

(vlax-get-property 

              (vlax-get-acad-object)

             "ActiveDocument"

)

vla- Variante:

(vla-get-ActiveDocument

           (vlax-get-acad-object)

)

=>  #<VLA-OBJECT IAcadDocument 000000000ea9b6a0>

 

Jetzt können sogenannte Collection gewählt werden.

Wie zum Beispiel die Layer:

(vlax-get-propert

               (vlax-get-property

                            (vlax-get-acad-object)

                           "ActiveDocument"

                 )

              "Layers"

)

vla- Variante:

(vla-get-layers

             (vla-get-ActiveDocument

                           (vlax-get-acad-object)

              )

)

 

Um jetzt gezielt einen Layer aus dem Collection zu piken benötigen wir die Method-Funktion mit Item:

(vlax-invoke-method 

               (vlax-get-property

                             (vlax-get-property

                                                (vlax-get-acad-object)

                                                "ActiveDocument"

                              )

                             "Layers"

                )

               "item"

               [Layernamen/Zahl]

)

 

Jetzt können wir die Eigenschaften wieder von diesen Objekten abfragen bzw. setzen.

Um die Farbe der Layers 0 abzufragen:

(vlax-get-property

               (vlax-invoke-method 

                              (vlax-get-property

                                             (vlax-get-property

                                                            (vlax-get-acad-object)

                                                            "ActiveDocument"

                                                            )

                                              "Layers"

                                              )

                               "item"

                               "0"

                               )

                "Color"

 )

=> 7