Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Attribute auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Attribute auslesen (3001 mal gelesen)
Stechi
Mitglied
Informatiker


Sehen Sie sich das Profil von Stechi an!   Senden Sie eine Private Message an Stechi  Schreiben Sie einen Gästebucheintrag für Stechi

Beiträge: 75
Registriert: 17.01.2008

erstellt am: 05. Mrz. 2008 13:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 05. Mrz. 2008 13:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stechi 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Stechi an!   Senden Sie eine Private Message an Stechi  Schreiben Sie einen Gästebucheintrag für Stechi

Beiträge: 75
Registriert: 17.01.2008

erstellt am: 05. Mrz. 2008 14:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 05. Mrz. 2008 16:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stechi 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Stechi an!   Senden Sie eine Private Message an Stechi  Schreiben Sie einen Gästebucheintrag für Stechi

Beiträge: 75
Registriert: 17.01.2008

erstellt am: 05. Mrz. 2008 16:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Wilfried,

ich möchte die Werte der Attribute einer Blockreference!

Gruß

Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Moderator
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign,
MapGuide, Autodesk Topobase,
VS6, VS.net 2013

erstellt am: 06. Mrz. 2008 09:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stechi 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stechi 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz