Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Autocad Attribute und Texte bearbeiten

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:  Autocad Attribute und Texte bearbeiten (4647 mal gelesen)
veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

erstellt am: 20. Aug. 2008 07:17    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!

Ich habe folgendes Problem:

Ich möchte gerne bei bestimmten Attributen in einer Autocad Zeichnung verändern.

Was ich habe: der Name des Attributs, den aktuellen Wert und den neuen Wert.

Die ersten beiden habe ich mir von der Zeichnung ausgelesen, der neue Wert wird benutzerdefiniert angegeben.

Mein Problem ist jetzt, dass ich es nicht schaffe auf ein Autocad Attribut zuzugreifen und dann den Wert zu ändern...

so habe ich es ausgelesen:

For Each blockdef In ThisDraw.Blocks
            For Each ActElement In blockdef
                Select Case LCase(ActElement.ObjectName)
                    Case "acdbblockreference"
                        blockref = ActElement
                        If blockref.HasAttributes = True Then
                            attributeObj = blockref.GetAttributes()

                            For i = LBound(attributeObj) To UBound(attributeObj)
                                strAttributes = strAttributes & _
                                            "  Tag: " & attributeObj(i).TagString & _
                                          "  Value: " & attributeObj(i).TextString & "    "
                            Next
                        End If
                        MsgBox(strAttributes)
                    Case "acdbmtext"
                        Mtext = ActElement
                        strTexts = strTexts & _
                                            "  Tag: " & Mtext.TagString & _
                                          "  Value: " & Mtext.TextString & "    "
                        MsgBox("MTEXT= " & Mtext.TextString)
                    Case Else

                End Select
            Next ActElement
        Next blockdef

wie kann ich nun gleich bei einem Attribut den Wert ändern?

mfg

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

Carsten1210
Mitglied
staatl. geprüfter Holztechniker


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

Beiträge: 1357
Registriert: 24.07.2002

AutoCAD ACA 2018
Solidworks 2016 Sp5
Enterprise PDM 2016 Sp5
Pascam Woodworks
Visual Studio 2017 Pro
Windows 10 64Bit
Dell T3620
Intel Core i7-7700K
16 GB Arbeitsspeicher
2x Samsung S24C650
Dell M4800

erstellt am: 20. Aug. 2008 07:39    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 veydan 10 Unities + Antwort hilfreich

Hi Veydan,

Das zuweisen eines (neuen) Wertes eines Attribut-Werts kannst du so machen: Attrib(1).textString = "Teststring"
Über GetAttributes kommst du ja an die Attribut-Werte und kannst diese so auslesen: Userform1.TextBox1.Text = (Attrib(1).textString)

Gruß, Carsten

[Diese Nachricht wurde von Carsten1210 am 20. Aug. 2008 editiert.]

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

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

erstellt am: 20. Aug. 2008 07:57    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

Jetzt hats funktioniert.
Hatte ich vorher wahrscheinlich einen kleinen Denkfehler.
Nachdem ich jetzt jeden gefundenen Wert auf AA gesetzt habe, wurde dies auch in der Zeichnung aktualisiert.
Vorher war nichts passiert und dann kam die Idee, dass es vl eine eigene Funktion zum setzen gibt...

danke nochmal

mfg

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: 20. Aug. 2008 08:07    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 veydan 10 Unities + Antwort hilfreich

Kannst es auch gleich sehen, wenn Du ActElement.update nach dem Zuweisen ausführen läßt.

Klaus

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

CADMENSCH
Mitglied
Holztechniker / Gestalter


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

Beiträge: 18
Registriert: 12.03.2013

erstellt am: 19. Jul. 2013 07:57    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 veydan 10 Unities + Antwort hilfreich

Hallo Zusammen,
könnt Ihr mir sagen wo ich die AcDbBlockReference Nr. auslesen kann.

Ich habe einen Block der nach dem Befehl : "Prüfung" einen Fehler aufweist und nach automatischen Fehlerbehebung gelöscht wird.
Ich würde gerne wissen was das für eine Blockreferenz ist.

Danke
CADMENSCH

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 19. Jul. 2013 08:53    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 veydan 10 Unities + Antwort hilfreich

Wäre einfacher wenn du die Meldung gepostet hättest, ein AutoCAD-Objekt hat nämlich viele "Nr.", spontan fallen mir 3 ein  

In deinem Fall (_Audit-Meldung) sollten HANDLE genant werden, also das Einzige was auch über das Schließen und Öffnen einer Datei hinaus Bestand hat.

Eigenschaft: HANDLE

Wer keine Angst vor Klammern hat: Öffne die Version vor dem _recover/_audit und dann das in die CommandLine:
(command "_.ZOOM" "_o" (handent (getstring "\nHandle: ")) "")


------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

[Diese Nachricht wurde von cadffm am 19. Jul. 2013 editiert.]

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

CADMENSCH
Mitglied
Holztechniker / Gestalter


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

Beiträge: 18
Registriert: 12.03.2013

erstellt am: 19. Jul. 2013 10:58    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 veydan 10 Unities + Antwort hilfreich

Danke ich werde mir das erst einmal in Ruhe anschauen.

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 06. Aug. 2013 01:45    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 veydan 10 Unities + Antwort hilfreich

So wird das auch nix 
Blockdefinitionen halten zwar die container (Attribute) vor nur ausgefuellt werden die mit BLOCKREFERENCE


Function block_get_attribute(blo As AcadBlockReference, tagname) As String
    Dim AttList As Variant
    On Error Resume Next
    If blo.HasAttributes Then
        AttList = blo.GetAttributes
        For i = LBound(AttList) To UBound(AttList)
            If UCase(AttList(i).TagString) = tagname Or UCase(Trim(AttList(i).TagString)) = tagname & "_001" Then
                block_get_attribute = AttList(i).textstring
                Exit Function

            End If
        Next
    End If
End Function

Sub block_set_attribute(blo As AcadBlockReference, tagname, tagvalue)
    Dim AttList As Variant
    If blo Is Nothing Then Exit Sub
    If blo.HasAttributes Then
        tagname = Trim(UCase(tagname))
        AttList = blo.GetAttributes
        For i = LBound(AttList) To UBound(AttList)
            ''debug.print "#" & UCase(attlist(i).TagString) & "#", tagname
            If UCase(AttList(i).TagString) = tagname Or UCase(Trim(AttList(i).TagString)) = tagname & "_001" Then
                'On Error Resume Next
                AttList(i).textstring = "" & tagvalue

                ' attlist(I).Update
                ' On Error GoTo 0
                Exit Sub
            End If
        Next

    End If
End Sub

Sub block_references_delete_all(Name As String)
    Dim entity As AcadEntity
    Dim BLOCKDEF As AcadBlock
    Dim layertext As String

application.update
    For Each entity In ThisDrawing.modelspace
        If LCASE(entity.ObjectName) = "acdbblockreference" Then
            If LCASE(entity.EffectiveName) = LCASE(Name) Then
                'entity.Delete
            End If
        End If
    Next entity

    For Each entity In ThisDrawing.PaperSpace
        If LCASE(entity.ObjectName) = "acdbblockreference" Then
            If LCASE(entity.EffectiveName) = LCASE(Name) Then
                'entity.Delete
            End If
        End If
    Next entity


    On Error GoTo 0
End Sub

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !

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