| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Attribute auslesen (3082 mal gelesen)
|
Stechi Mitglied Informatiker
Beiträge: 75 Registriert: 17.01.2008
|
erstellt am: 05. Mrz. 2008 13:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich habe schon hier im Forum gesucht und zu diesem Thema einiges gefunden, aber irgendwie komme ich damit nicht zurecht. Ich möchte aus einem bestehenden Block die Attribute auslesen. Folgenden habe ich schon zusammengestellt: Dim aktblock As AcadBlock Dim block As AcadSelectionSet For Each aktblock In ThisDrawing.Blocks If aktblock.Name = "AKK_ZEKO" Then Set block = ThisDrawing.SelectionSets("AKK_ZEKO") . . . . Exit For End If Next aktblock
Irgendwie schaffe ich es jetzt nicht eine Schleife zu "bauen", mit der ich sämtliche Attribute auslesen kann. Kann mir jemand dabei mit einem Code behilflich sein? Danke! Gruß Markus 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: 05. Mrz. 2008 13:28 <-- editieren / zitieren --> Unities abgeben: Nur für Stechi
Hallo Markus, anstatt der ... kann folgender Code drin stehen
Code: ' Hat der eingefügte Block Attribute If Blockobj.HasAttributes Then attributes = Blockobj.GetAttributes For A = LBound(attributes) To UBound(attributes) Set attribut = attributes(A) If UCase(attribut.TagString) = UCase("VA") And AttrVA = True Then attribut.TextString = VA End If If UCase(attribut.TagString) = UCase("PNR") And attr = True Then attribut.TextString = pnr End If If UCase(attribut.TagString) = UCase("HOEHE") And AttrHoehe = True Then attribut.TextString = ZHöhe End If Next A End If
oder suche auch mal hier. 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 |
Stechi Mitglied Informatiker
Beiträge: 75 Registriert: 17.01.2008
|
erstellt am: 05. Mrz. 2008 14:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Wilfried, irgendwie klappt's nicht. Bei der Methode blockobj.Hasattribute bekomme ich die Meldung, das diese Methode nicht unterstützt wird. Das Gleiche bekomme ich auch bei block.objgetattributes. Was mache ich falsch? Bitte nochmal helfen! Gruß Markus 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: 05. Mrz. 2008 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für Stechi
Hallo Markus, Zitat: ich habe schon hier im Forum gesucht und zu diesem Thema einiges gefunden, aber irgendwie komme ich damit nicht zurecht. Ich möchte aus einem bestehenden Block die Attribute auslesen. Folgenden habe ich schon zusammengestellt: Dim aktblock As AcadBlock Dim block As AcadSelectionSet
Was möchtest du den wirklich ? Möchtest du Werte aus Attributen einer Blockreference (eingefügter Block) oder die Attributdefinition aus dem Block lesen. Wenn du die Attributwerte der Blockeinfügungen auslesen möchtest hat du auf jeden Fall den falschen Ansatz. Du durchläufst alle Blockdefinitionen. Dann bildest du ein Selektionset. Das passt alles nicht zusammen. Bist du mal dem "Such" Link gefolgt. Da gibt es etliche Beispiele. 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 |
Stechi Mitglied Informatiker
Beiträge: 75 Registriert: 17.01.2008
|
erstellt am: 05. Mrz. 2008 16:09 <-- editieren / zitieren --> Unities abgeben:
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 06. Mrz. 2008 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für Stechi
Hallo Markus, klick doch mal hier ===>> Beispiele für einige Beispiele. Du musst auf jeden Fall beachten das die Blockdefinition (Typ AcadBlock) was anderes ist als die Blockreference/Eingefügter Block (Typ AcadBlockReference). Du brauchst die Blockreference. 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 |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 06. Mrz. 2008 16:51 <-- editieren / zitieren --> Unities abgeben: Nur für Stechi
Hallo Markus, ja das Thema ist nicht so einfach wie die vielen Beiträge zeigen. Hier mal ein kleines Hilfsmakro zum Verständnis: Code:
Sub test_blocks() Dim returnObj As AcadObject Dim basePnt As Variant Dim blockRefObj As AcadBlockReference Dim attributeObj As Variant On Error Resume Next ' The following example waits for a selection from the user RETRY: ThisDrawing.Utility.GetEntity returnObj, basePnt, "Select an object" If Err <> 0 Then Err.Clear MsgBox "Program ended.", , "GetEntity Example" Exit Sub Else returnObj.Update ' Ausgabe welcher Objekttyp ausgewählt wurde MsgBox "The object type is: " & returnObj.EntityName, , "GetEntity Example" ' Wenn ein eingefügter Block ausgewählt wurde If returnObj.ObjectName = "AcDbBlockReference" Then Set blockRefObj = returnObj If blockRefObj.HasAttributes Then 'untersuchen ob Attribute vorhanden attributeObj = blockRefObj.GetAttributes ' diese aus der Tabelle holen 'und anzeigen strAttributes = "" For I = LBound(attributeObj) To UBound(attributeObj) strAttributes = strAttributes & _ " Tag: " & attributeObj(I).TagString & _ " Value: " & attributeObj(I).TextString & " " Next MsgBox "The attributes for blockReference " & blockRefObj.Name & " are: " & strAttributes, , "GetAttributes Example" End If End If returnObj.Update End If GoTo RETRY End Sub
Du kannst damit einen Block aus der Zeichnung auswählen und Dir die Attribute anzeigen lassen. Wenn Du jetzt alle Attribute aller Blöcke mit dem Namen "AKK_ZEKO" behandeln möchtest, würde ich zunächst einen Selectionset erstellen, der nur die betreffeneden Blöcke beinhaltet ( Gruppencode 0 "Insert" und 2 "AKK_ZERO" ) und danach wie von Wilfried beschrieben auf Grundlage der TagStrings die TextString (=Inhalte, angezeigte Werte) behandeln. Hoffe es hilft Dir zum Verständnis. Grüße, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |