DBX - XREF-Pfadnamen ändern?? / Lisp
joern bosse 29. Mrz. 2010, 08:44

Hallo,
folgende Situation:
zur Zeit habe ich ein Programm, welches mir z.B. für Datei A.dwg einen Index vergibt => A_1.dwg
Wenn in der Datei A XREF's enthalten sind, dann sollen diese entsprechend dieses Index's ebenfalls umbenannt werden und in der Datei A_1.dwg muss der XREF-Pfad geändert werden.

Zur Zeit läuft das über einen Scriptbetrieb, d.h., ich habe eine beliebiege Zeichnung geöffnet, dann wird im Scriptbetrieb die umbenannte Datei A_1.dwg geöffnet. Innerhalb der Datei A_1.dwg kann ich dann über SSGET die XREF-Blöcke auswählen und über VLA-PUT-PATH den aktuellen Pfad ändern.

Weil der Scriptbetrieb in ACAD 2010 aber ein wenig hakelt möchte ich mich an einer anderen Variante versuchen, und zwar über die DBX-Objekte.

D.h., ich öffne die DWG-Datei als DBX-Objekt, und dann verlassen sie mich:
Wie komme ich an die enthaltenen XREF-Blöcke heran???
Kann mir da mal einer ein Beispiel machen? (Selbst wenn nur von einer vorhandenen Linie die Farbe geändert wird oder so, anhand dessen komme ich bestimmt weiter)

CADmium 29. Mrz. 2010, 08:50

du scanst die Blocktabelle und checkts auf xref

(vlax-for BLOCK (vla-get-blocks DOCUMENT)
  (if (=(vla-get-isxref BLOCK):vlax-true)
    ;; .... z.B.
    (vlax-dump-object BLOCK)
  )
)

joern bosse 29. Mrz. 2010, 10:23

Hallo CADmium,
super, hat funktioniert

Was ich jetzt aber immer noch nicht weiß, wie ich z.B. eine Linie im geöffneten DBX-Objekt ändern kann.
Wie wähle ich diese aus (vorausgesetzt ich habe genug Filterkriterien für die Auswahl, denn die Benutzerauswahl kann ich ja nicht verwenden). Geht das???

CADmium 29. Mrz. 2010, 10:47

ja .... jedes Geometrieobjekt liegt ja in einem Blockcontainer

also

(vlax-for ITEM (vla-item (vla-get-blocks DOCUMENT) "BLOCKNAME")
  ;...
  (vlax-dump-object ITEM)
)

oder
(vlax-for ITEM
  (vla-get-block (vla-item (vla-get-layouts DOCUMENT) "LAYOUTNAME"))
  ...
)

joern bosse 29. Mrz. 2010, 11:27

Danke Thomas, ich glaube so langsam komme ich dahinter:

(vlax-for ITEM (vla-item
                (vla-get-blocks
                  (vlax-get-property
                    (vlax-get-acad-object)
                    "ActiveDocument"))
                "*Model_Space")
  (if(=(vla-get-objectname ITEM)
      "AcDbLine")
    (alert "Linie, kann geändert werden."))
  )
Und das natürlich dann bezogen auf das DBX-Objekt.

CADmium 29. Mrz. 2010, 11:35

jo .. das ist das Prinzip .... hab leider momentan kein acad offen , deshalb nur die Schnipsel ..