| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Handle eines eingefügten blockes (1488 mal gelesen)
|
JoergAD Mitglied
Beiträge: 43 Registriert: 07.03.2007
|
erstellt am: 16. Aug. 2007 11:48 <-- editieren / zitieren --> Unities abgeben:
Hi VBA'ler, habe ein Problem und hoffe hier auf Hilfe. Ich habe einen Block in eine Zeichnung eingefügt und würde nun gern dessen Handle auslesen und speichern. Soweit alles klar. Aber jetzt das Problem: Den Block habe ich über die Befehlszeile eingefügt, also ThisDrawing.SendCommand "-einfüge" & vbCr ThisDrawing.SendCommand "Blockname" & vbCr & "100,40,0"& vbCr & Wandel(allBLFaktor) & vbCr & vbCr & vbCr Diesen Block möchte ich nun auslesen und sein Handle für spätere Aktionen speichern. Wie komme ich an den richtigen Block und dessen Handle? Vielen Dank im voraus für eure Hilfe. CU, Jörg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Headcase Mitglied Dipl.-Ing. (FH) --> Maschinenbau
Beiträge: 141 Registriert: 14.10.2004 WinXP Prof., SP3 AutoCAD Mechanical 2010 (2008) Inventor 2010 (2008)
|
erstellt am: 16. Aug. 2007 14:13 <-- editieren / zitieren --> Unities abgeben: Nur für JoergAD
Hallo! Also ganz spontan würde ich vorschlagen - da ja der Name des Blockes bekannt ist - einfach die Blockauflistung nach diesem Block zu durchsuchen und das Handle zu speichern, etwa so: Zitat:
Sub test()Dim Block As AcadBlock Dim MeinBlockHandle As String For Each Block In ThisDrawing.Blocks If Block.Name = blockname Then MeinBlockHandle = Block.Handle Next Block End Sub
Soweit mein Vorschlag... Grüße! René Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoergAD Mitglied
Beiträge: 43 Registriert: 07.03.2007
|
erstellt am: 16. Aug. 2007 14:21 <-- editieren / zitieren --> Unities abgeben:
Was, wenn der gleiche Block mehrmals eingefügt wird? Mit der obrigen Lösung darf der Block nicht nochmal eingefügt werden, richtig? Bei einem Durchlauf nach dem Blocknamen würde er so doch mehrere Ergebnisse finden. CU, Jörg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 16. Aug. 2007 14:27 <-- editieren / zitieren --> Unities abgeben: Nur für JoergAD
ach, du möchtest das Handle der zuletzt eingefügten Blockrefenz haben? mit Lisp: (cdr(assoc 5(entget(entlast)))) Mit VBA .. ist es wohl am sinnvollsten, die Methode InsertBlock zu verwenden, welche auch das Object zurückliefert, von dem man die Property Handle auslesen kann. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoergAD Mitglied
Beiträge: 43 Registriert: 07.03.2007
|
erstellt am: 16. Aug. 2007 14:47 <-- editieren / zitieren --> Unities abgeben:
Beide Antworten von Dir sind richtig, und mir auch bekannt. Der Sonderfall aber verlangt aus diversen Gründen eine Einfügung über die Zeile mit SendCommand. Und meine Frage zielte darauf, für diesen Fall das Handle auszulesen. Ist dies nicht möglich? Wenn nicht direkt, gibt es einen Trick? Vielleicht über die Befehlzeilenauswahl L (letztes) oder ähnlichen Tricks? CU, Jörg! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - ACA 2013 Arcibem System: Windows NT, 2000, XP Internet-Startseite: http://www.archi.de
|
erstellt am: 16. Aug. 2007 15:20 <-- editieren / zitieren --> Unities abgeben: Nur für JoergAD
Hi Jörg, versuchs mal mit Dim obj As AcadObject Set obj = AutoCAD.Application.ActiveDocument.ModelSpace.Item(AutoCAD.Application.ActiveDocument.ModelSpace.Count - 1) hd = obj.Handle Grüsse, Henning
------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 16. Aug. 2007 15:23 <-- editieren / zitieren --> Unities abgeben: Nur für JoergAD
und wenns im Paperspace eingefügt wurde ?? also doch erst Activespace auswerten und dann entsprechend verzweigen, aber ansonsten könnts ein Ersatz für (entlast) sein ... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoergAD Mitglied
Beiträge: 43 Registriert: 07.03.2007
|
erstellt am: 16. Aug. 2007 16:27 <-- editieren / zitieren --> Unities abgeben:
Das ist zumindest schon mal ein guter Lösungsansatz. Auch wenn er nur für den Modelbereich gilt, in diesem Fall, wo es benötigt wird kann man ausschliessen dass das Objekt auf dem Papierbereich liegt. Und wenn der User es dort einfügt hat er eh schon einen Zeichnungsstandartfehler gemacht, von daher... Danke, Jörg! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 16. Aug. 2007 19:09 <-- editieren / zitieren --> Unities abgeben: Nur für JoergAD
Hallo Jörg, warum von hinten durch die Brust ins Auge ?? Wenn du den Block per VBA einfügst hast du das Handle
Code: Dim Blockref As AcadBlockReference Dim Inspkt(0 To 2) As DoubleInspkt(0) = 10 Inspkt(1) = 20 Set Blockref = ThisDrawing.ModelSpace.InsertBlock(Inspkt, "Blockname", 1, 1, 1, 0) Debug.Print Blockref.Handle
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |