Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  Attribute aus AutoCAD in Array auslesen und verarbeiten

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
Autor Thema:  Attribute aus AutoCAD in Array auslesen und verarbeiten (1052 mal gelesen)
WolfgangSCH
Mitglied



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

Beiträge: 145
Registriert: 01.10.2002

AutoCAD 2021 64-bit
Windows 10 64-bit Home Premium
AMD Phenom II X6 1055T, 2,8GHz, 8GB RAM

erstellt am: 06. Jul. 2003 10:34    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 schreibe gerade ein Programm, mit dem ich gleiche Attribute in mehreren AutoCAD-Zeichnungen ändern kann (z.B. im Zeichnungskopf das Datum oder der Bearbeiter usw.)
Dazu lese ich Attribute eines Blockes aus einer Referenzzeichnung mit "GetAttributes" in einen Array ein. Diese Attribute werden in einem Formular in Textboxen eingetragen (ähnlich wie bei dem Formular welches mit dem befehl DDATTE in AutoCAD erscheint). In diesem Formular kann ich, je nach Attributanzahl, vorwärts und rückwärts blättern und mir die aus dem Block ausgelesenen Attribute anzeigen lassen.
Jetzt zu meinem Problem:
Ich möchte per Checkbox diejenigen Attribute in dem Formular markieren, welche ich ändern möchte. Diese markierten Attribute werden weiter verarbeitet, alle anderen Attribute werden nicht mehr benötigt. Wie kann ich dies in dem aus der Zeichnung ausgelesenen (ursprünglichen) Array realisieren? D.h. die nicht mehr benötigten Attribute sollten aus dem Array entfernt werden und die in den Textboxen geänderten Attributwerte sollten die ursprünglichen Attributwerte im Array überschreiben, damit ich mit diesem modifizierten Array die Attribute in weiteren Zeichnungen ändern kann.
Wer hat einen Tipp oder kann weiter helfen??

Gruß
Wolfgang

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

Rigobert
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 21.11.2001

SWX 2021 zu Risiken und Nebenwirkungen fragen Sie besser gar nicht erst.
Visual Studio 2019

erstellt am: 07. Jul. 2003 07:52    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 WolfgangSCH 10 Unities + Antwort hilfreich

Hallo Wolfgang,

klingt doch eigentlich alles machbar.
Habe selber mal eine ähnliche Routine geschrieben,
den Code der die Attribute ausliest und ändert hab ich mal aufgelistet,
vielleicht hilft´s ja.
Sonst beschreib mal genauer wo was hakt..

hier der Code :

Public Function SetCustomer(Kundenname As String, Kommissionsnummer As String) As String
Rem hier wird Autocad angewiesen  in das Schriftfeld
Rem den Kundennamen und die Kommissionsnummer einzutragen.
Rem zusätzlich wird der Dateiname und das Plotdatum in den Zeichnungsrahmen eingefügt
Dim mspace As AcadModelSpace  ' Modelbereich
Dim SFeldBlock As AcadBlock    ' die Beschreibung des Blocks Schriftfeld in der aktuellen Zeichnung
Dim SFeldBlockref As AcadBlockReference    ' das Schriftfeld im Modellbereich
Dim varAttributes As Variant ' Array in dem die Attribute abgelegt (und verändert ) werden
Dim FullName As String
On Error GoTo Fehlerbehandlung
Set ACAD = GetObject(, "AutoCAD.Application")
Set activeDoc = ACAD.ActiveDocument
FullName = activeDoc.FullName
Set mspace = ACAD.ActiveDocument.ModelSpace
For i = 0 To mspace.Count - 1
    If mspace.Item(i).ObjectName = "AcDbBlockReference" Then
        Select Case mspace.Item(i).Name
        Case "XYZ-TITLE" ' aktuelles Zeichenformat
            Set SFeldBlockref = mspace.Item(i) ' z.B.: 123-456-789
            varAttributes = SFeldBlockref.GetAttributes
            varAttributes(8).TextString = Kommissionsnummer
            varAttributes(7).TextString = Kundenname
            varAttributes(20).TextString = Date & "      " & Time
            varAttributes(21).TextString = "Dateiname : " & FullName
            Exit For
        End Select
    End If
Next i
ACAD.Update
Fehlerbehandlung:
If Err.Number = 0 Then
    SetCustomer = "SetCustomer : Kein Fehler"
Else
    SetCustomer = "SetCustomer : " & Err.Description
    Err.Clear
End If
End Function


Gruß Rigo

------------------

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

WolfgangSCH
Mitglied



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

Beiträge: 145
Registriert: 01.10.2002

erstellt am: 07. Jul. 2003 08:20    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 Rigo,
danke für Deine schnelle Antwort. Das Auslesen der Attribute in ein Array ist nicht das Problem. Ich möchte die Attributbezeichnung aus dem Array in einem Formular in Textboxen darstellen, darin ändern und nur die geänderten Attribute wieder weiterverarbeiten. Also z.B. im Array Block Kopfdaten (Revision, Revisiondsdatum, Bearbeiter usw.) werden im Formular die Elemente Array.TagString (Bearbeiter) und Array.TagText (Klaus Mustermann) usw. in der Textbox dargestellt. Dann möchte ich einige dieser Eintragungen in der Textbox ändern und diese Änderungen in weiteren Zeichnungen mit den gleichen Attributen auch anwenden.
Ich stelle mir vor die Elemente TagString und TagText in Varable zu speichern und diese in Textboxen darzustellen, darin zu ändern und weiter zu verarbeiten. Wie bekomme ich jedoch die Elemente aus dem Array in die Variablen, also z.B. Array(0).TextString in Attrib(0),
Array(1).TextString in Attrib(1) usw. Das funktioniert bei mir nicht.
Oder hast Du eine andere Idee wie ich mein Vorhaben realisieren kann??

Gruß

Wolfgang

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

Rigobert
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 21.11.2001

SWX 2021 zu Risiken und Nebenwirkungen fragen Sie besser gar nicht erst.
Visual Studio 2019

erstellt am: 07. Jul. 2003 09:38    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 WolfgangSCH 10 Unities + Antwort hilfreich

Hallo Wolfgang,

habe einfach mal in den Code folgende Zeilen eingefügt,

'*******************************************************************
Dim attrib(0 To 9) As String ' Deine Variable für die Texte
'*******************************************************************

'*******************************************************************
' hier werden die Inhalte der Attribute den VAriablen zugewiesen und
'  anschliessend in ein MsgBox angezeigt             
            For j = 0 To 9
                attrib(j) = varAttributes(j).TextString
            Next j
            For j = 0 To 9
                MsgBox "attrib(" & j & ") = " & attrib(j)
            Next j
'*******************************************************************

Das hat bei mir einwandfrei funktioniert.
Vielleicht hilft´s Dir ja weiter.

hier der neue Code :

Public Function SetCustomer(Kundenname As String, Kommissionsnummer As String) As String
Rem hier wird Autocad angewiesen  in das Schriftfeld
Rem den Kundennamen und die Kommissionsnummer einzutragen.
Rem zusätzlich wird der Dateiname und das Plotdatum in den Zeichnungsrahmen eingefügt
Dim mspace As AcadModelSpace  ' Modelbereich
Dim SFeldBlock As AcadBlock    ' die Beschreibung des Blocks Schriftfeld in der aktuellen Zeichnung
Dim SFeldBlockref As AcadBlockReference    ' das Schriftfeld im
Modellbereich
Dim varAttributes As Variant ' Array in dem die Attribute abgelegt (und verändert ) werden
Dim FullName As String
'************************************************************
Dim attrib(0 To 9) As String ' Deine Variable für die Texte
'************************************************************
On Error GoTo Fehlerbehandlung
Set ACAD = GetObject(, "AutoCAD.Application")
Set activeDoc = ACAD.ActiveDocument
FullName = activeDoc.FullName
Set mspace = ACAD.ActiveDocument.ModelSpace
For i = 0 To mspace.Count - 1
    If mspace.Item(i).ObjectName = "AcDbBlockReference" Then
        Select Case mspace.Item(i).Name
        Case "XYZ-TITLE" ' dies sollte der Name Deines Blocks sein
            Set SFeldBlockref = mspace.Item(i) ' z.B.: 123-456-789
            varAttributes = SFeldBlockref.GetAttributes
'*******************************************************************
' hier werden die Inhalte der Attribute den VAriablen zugewiesen und
'  anschliessend in ein MsgBox angezeigt             
            For j = 0 To 9
                attrib(j) = varAttributes(j).TextString
            Next j
            For j = 0 To 9
                MsgBox "attrib(" & j & ") = " & attrib(j)
            Next j
'*******************************************************************


            varAttributes(8).TextString = Kommissionsnummer
            varAttributes(7).TextString = Kundenname
            varAttributes(20).TextString = Date & "      " & Time
            varAttributes(21).TextString = "Dateiname : " & FullName
            Exit For
        End Select
    End If
Next i
ACAD.Update
Fehlerbehandlung:
If Err.Number = 0 Then
    SetCustomer = "SetCustomer : Kein Fehler"
Else
    SetCustomer = "SetCustomer : " & Err.Description
    Err.Clear
End If
End Function


Gruß Rigo

------------------

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

WolfgangSCH
Mitglied



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

Beiträge: 145
Registriert: 01.10.2002

erstellt am: 07. Jul. 2003 10:48    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 Rigo,
danke für Deine schnelle Hilfe.
Ich habe beim Deklarieren des Arrays einen Fehler gemacht. Dank Deinem Beispiel klappt es jetzt auch bei mir. Jedoch besteht noch folgendes Problem:
Du hast den Array mit Konstanten deklariert (Dim attrib(0 To 9) As String). Ich kann zwar die Anzahl der Attribute im Array ermitteln (AnzAttr = UBound(attrib), benötige für die Deklaration jedoch eine Konstante (Du gehst von 9 Attributen aus). Die "9" kann jedoch nicht durch die Variable AnzAttr ersetzt werden. Da verlangt der Rechner eine Konstante! Wie kann ich das realisieren, da ich im Voraus nicht weiss, wieviel Attribute sich im Array befinden.

Gruß
Wolfgang

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

Rigobert
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 21.11.2001

SWX 2021 zu Risiken und Nebenwirkungen fragen Sie besser gar nicht erst.
Visual Studio 2019

erstellt am: 07. Jul. 2003 11:23    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 WolfgangSCH 10 Unities + Antwort hilfreich

Hallo Wolfgang,

das müßte eigentlich mit nachfolgendem Code funktionieren :

Dim attrib() As String ' Deine Variable für die Texte


wenn Du dann die Anzahl der Attribute weißt, kannst Du das Feld neu definieren mit :

Redim attrib(0 to Anzahl) as String


das sollte dann funktionieren..

Viel Erfolg

Gruß Rigo

------------------

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

WolfgangSCH
Mitglied



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

Beiträge: 145
Registriert: 01.10.2002

erstellt am: 07. Jul. 2003 11:26    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 Rigo,
nochmals vielen Dank für Deine Hilfe.
Ich bin durch Deine Hilfe ein großes Stück weiter gekommen!
Ich werde dafür auch einmal auf den 10er klicken.

Gruß
Wolfgang

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

Rigobert
Mitglied
Konstrukteur


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

Beiträge: 239
Registriert: 21.11.2001

SWX 2021 zu Risiken und Nebenwirkungen fragen Sie besser gar nicht erst.
Visual Studio 2019

erstellt am: 07. Jul. 2003 11:52    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 WolfgangSCH 10 Unities + Antwort hilfreich

Gern geschehen !

------------------

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