| |
 | 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 PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: Autocad Attribute und Texte bearbeiten (4861 mal gelesen)
|
veydan Mitglied
 
 Beiträge: 252 Registriert: 29.05.2008
|
erstellt am: 20. Aug. 2008 07:17 <-- editieren / zitieren --> Unities abgeben:         
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
   
 Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 20. Aug. 2008 07:39 <-- editieren / zitieren --> Unities abgeben:          Nur für veydan
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
 
 Beiträge: 252 Registriert: 29.05.2008
|
erstellt am: 20. Aug. 2008 07:57 <-- editieren / zitieren --> Unities abgeben:         
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

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 20. Aug. 2008 08:07 <-- editieren / zitieren --> Unities abgeben:          Nur für veydan
|
CADMENSCH Mitglied Holztechniker / Gestalter

 Beiträge: 18 Registriert: 12.03.2013
|
erstellt am: 19. Jul. 2013 07:57 <-- editieren / zitieren --> Unities abgeben:          Nur für veydan
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. 良い精神

 Beiträge: 22477 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 19. Jul. 2013 08:53 <-- editieren / zitieren --> Unities abgeben:          Nur für veydan
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

 Beiträge: 18 Registriert: 12.03.2013
|
erstellt am: 19. Jul. 2013 10:58 <-- editieren / zitieren --> Unities abgeben:          Nur für veydan
|

| Anzeige: | Infos zum Werbeplatz >> | isaleCAD CAD APP für Tiefbau, Umwelt Since 1985, AnkiSOFT Software developes software to design infrastructure projects.
isaleCAD has been developed for Water Transmission Line Design. It is for Drawing / Modelling / Planning / Design / Analyze the water transmission line.
The software works under AutoCAD or ZWCAD.
|
|
rexxitall Mitglied Dipl. -Ing. Bau
 
 Beiträge: 270 Registriert: 07.06.2013 Various: systems, Operating systems, cad systems, cad versions, programming languages.
|
erstellt am: 06. Aug. 2013 01:45 <-- editieren / zitieren --> Unities abgeben:          Nur für veydan
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 |