Gruppencode & Handle / AutoCAD VBA
woppi 14. Jan. 2020, 13:27

Hallo,

weiß jemand, ob es die Möglichkeit gibt, wenn man von einem Auocadblock die object.Handle hat die Gruppencodes von dem Objekt abzufragen?

Ich habe in einem Programm ein Schleife, in der von anonyme  Blöcken mit Hilfe der object.Handle Nummer Parameter abgefragt werde, und möchte dabei prüfen ob das Opjekt überhaupt aktuell sichtbar ist (Gruppencode 60 = 0) und nicht verborgen (Gruppencode 60 = 1).

Alternativ würde es mir auch helfen, wenn man überprüfen kann ob die Objekte mit der object.Handle Nummer in einem Auswahlsatz vorhanden sind.

Hat einer eine Idee, und kann mir Tipps geben wie ich dort weiter komme?

Vielen Dank
Gruß Ludger

cadffm 14. Jan. 2020, 13:51

"Gruppencodes" gibt es in DXF und AutoLisp, mir ist gerade nicht ganz
klar warum du darüber im VBA-Forum sprichst?

Der Gruppencode 60 entspricht der Eigenschaft VISIBLE

cadffm 14. Jan. 2020, 13:58

Zitat:
Original erstellt von woppi:
Alternativ würde es mir auch helfen, wenn man überprüfen kann ob die Objekte mit der object.Handle Nummer in einem Auswahlsatz vorhanden sind

Dazu kann ich nichts schreiben, da ich noch nicht "das ganze Szenario" verstehe und
hier nicht klar ist ob mit object.Handle nun ein Objekt in der Blockdefinition gemeint ist, oder die Blockreferenz.
Die Blockreferenz muß auf einem getauten Layer und das Objekt auf einem EINgeschalteten getauten Layer leigen
und 'sichtbar' sein damit es am Bildschirm erscheint. Ist das alles schon berücksichtigt in den Überlegungen?

woppi 14. Jan. 2020, 14:27

Die Layer sind eingeschaltet und getaut, aber es kann sein, dass mit dem _.UNISOLATEOBJECTS Befehl Blöcke verborgen sind.
Ich weiß nur nicht wie ich das in VBA überprüfen kann, und dachte das man über die Eigenschaften des Blocks den Gruppencode 60 nachgucken kann.

Du hast ja geschrieben das ist dasselbe wie Eigenschaft VISIBLE, aber wenn ich damit ein Objekt verberge, kann ich es mit dem .UNISOLATEOBJECTS Befehl auch nicht wieder sichtbar machen, das ist scheinbar doch etwas anderes.

cadffm 14. Jan. 2020, 14:38

Zitat:
Original erstellt von woppi: das ist scheinbar doch etwas anderes.

Nein, es ist das Gleiche. Du kannst ja mal bei zwei Objekten Obj1 abfragen dann dann isolateobjects nutzen und Obj2 wählen.
Jetzt fragst du die Eigenschafte "visible" von Obj1 noch mal ab.. und siehst die Änderung.


Zitat:
aber wenn ich damit ein Objekt verberge, kann ich es mit dem .UNISOLATEOBJECTS Befehl auch nicht wieder sichtbar machen

Na klar, weil die Funktion hinter "isolateobjects" überhaupt nichts mit deiner Manipulation zutun hat.
Unisolateobjects schaltet natürlich nur die Objekte um welche zu vor über isplateobjects unsichtbar geschaltet wurden.


cadffm 14. Jan. 2020, 14:53

>"_.UNISOLATEOBJECTS / die Eigenschaften des Blocks"

Beim Thema (un)isolateobjects sind wir bei BlockREFERENZEN, nur um das mal genauer formuliert zu haben.


>"den Gruppencode 60 nachgucken kann"
Richtig, Gruppencode60 ist halt DXF/AutoLisp, VISIBLE wäre es in der VBA/VisualLisp/ActiveX Welt.


Mit der Systemvariable OBJECTISOLATIONMODE stellst du ein ob beim speichern
[edit]
die ISOLATEOBJECTS Manipulationen in der DWG gespeichert werden bleiben sollen.
Falls JA erhält jedes betroffene behalten die betroffenen Objekte die erweiterte Daten der Applikation AEC_ISOLATEDOBJECTS_XDATA.
[/edit]

[Diese Nachricht wurde von cadffm am 14. Jan. 2020 editiert.]

woppi 14. Jan. 2020, 15:21

Jetzt verstehe ich.  (oder hoffe es zumindest)
Der Gruppencode wird erst beim speichern (als DXF) erzeugt.
Ich dachte der wäre schon vorher vorhanden (den Gruppencode 8 für Layer kann ich ja auch immer verwenden).

Oder ist das jetzt wieder falsch?

Kann ich denn dann über die object.Handle Nummer feststellen ob der Block verborgen (bzw. Visible = False) ist, wenn er vorher mit dem Befehl "AECHIDEOBJECTS" verborgen worden ist?

cadffm 14. Jan. 2020, 15:36

Zitat:
Original erstellt von woppi:
Der Gruppencode wird erst beim speichern (als DXF) erzeugt.

Nein, passiert sofort [Ich habe die Antwort oben editiert und besser formuliert]

Die Einstellung über das behalten oder nicht behalten steuert nur wie die Daten
gespeichert werden, also sichtbar, oder nicht sichtbar.


Noch immer verstehe ich nicht warum du überhaupt mit dem Handler herum hantierst,
woher hast du das Handle und warum? SORRY falls ich es überlesen habe.
 

Und wenn du das Handle hast, dann kannst du doch auch die erweiterten Daten abfragen?
Wie oben bereits geschrieben, es geht um Daten der Applikation "AEC_ISOLATEDOBJECTS_XDATA"


http://help.autodesk.com/view/ACD/2020/DEU/?guid=GUID-330FCA31-A2A9-47F0-972D-6915B6B98426


[Diese Nachricht wurde von cadffm am 14. Jan. 2020 editiert.]

woppi 14. Jan. 2020, 16:48

Das hilft mir sicher weiter.

Ich benutze das object.Handle weil es um anonyme Blöcke geht (*U...)
Das Programm ist eigentlich fertig, ich will mit der Abfrage (Gruppencode 60 oder "AEC_ISOLATEDOBJECTS_XDATA") nur prüfen ob der Block auch gerade nicht verborgen ist.
Es werden da sehr viele Blöcke in einer Schleife durchlaufen, und ich suche jetzt so etwas wie:

Ist das Opjekt.Handle sichtbar?  dann ........

cadffm 14. Jan. 2020, 16:53

Aus der Erklärung heraus weiß ich zwar immernoch nicht warum du das handle hast
und zudem sind es noch immer blockreferenzen und keine Blöcke
und dazu ist es auch noch egal wie der Name des Blockes ist.

Wie auch immer, wenn es dir geholfen hat ist es ja gut 

cadffm 14. Jan. 2020, 17:00

Vielleicht stolpere ich ja über eine VBA-Geschichte die im DXF/Lisp einfach anders ist,
mir fällt nur nicht ein was&warum das so wäre. Kein VBA ler halt 

Brischke 15. Jan. 2020, 07:24

Zitat:
Original erstellt von woppi:
... weiß jemand, ob es die Möglichkeit gibt, wenn man von einem Auocadblock die object.Handle hat die Gruppencodes von dem Objekt abzufragen? ...

Hallo Ludger,

ich denke, du hast da einen Knoten in deinen Gedanken. Gruppencodes sind doch nur ein Vehikel für die Ausgabe in DXF bzw die nicht objektorientiert Programmierung (Lisp). Wenn du in VBA unterwegs bist, dann musst du die vom Objekt, dem Gruppencode entsprechenden, Eigenschaft abfragen. Visibility oder IsVisible (nur eine Vermutung)

Die Handle lässt sich sicher auch in VBA von einem Entity ermitteln, bzw. die ObjectId Satz ermitteln.

Grüße!
Holger