| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| | |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
|
Autor
|
Thema: Atribute Export (1541 mal gelesen)
|
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 07. Mai. 2009 14:36 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, Wie lese ich mit ACad VBA ein Atribute von einem Objekt (bei doppel klick) aus (z. B. ein Tag). Anschließend möchte ich die Information über eine batch Datei an Access senden und ein gefiltertes Formular öffnen. Den Access/VBA Teil bekomme ich hin, leider verfüge ich nur sehr wenige / keine ACad Kenntnisse. Kann mir jemand einen Ansatz geben?. Danke Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Silvan01 Mitglied
 
 Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009
|
erstellt am: 07. Mai. 2009 16:17 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
Hallo und Willkommen hier  also wenn du grundsäztlich mal einfach Koordinaten usw abfragen willst dann würde ich auf ein Beispiel verweißen. (Das mir als Anfänger ziemlich geholfen hat!) Das Beispiel befindet sich in nem Thema unter diesem namens "Verbotene Zone erkennen". Grüße Silvan 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: 07. Mai. 2009 19:22 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
|
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 18. Jun. 2009 10:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, erstmal danke für das willkommen. Muss mich gleich entschuldigen für das späte antworten. Ich komme mit dem suchen auch nicht weiter, daher die Frage nochmals anders. Also wenn ich in ACad ein Object doppelklicke wird der "Enhanced Atribute Editor" geöffnet. Darin kann ich dann alle Attribute eines Objektes betrachten / ändern. Ich möchte nun im ersten schritt alle Attribute eines angeklickten Objektes in VBA auslesen. Wie geht es? Kann mir jemand ein Hinweis geben? Danke Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 18. Jun. 2009 10:38 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, erstmal danke für das willkommen. Muss mich gleich entschuldigen für das späte antworten. Ich komme mit dem suchen auch nicht weiter, daher die Frage nochmals anders. Also wenn ich in ACad ein Object doppelklicke wird der "Enhanced Atribute Editor" geöffnet. Darin kann ich dann alle Attribute eines Objektes betrachten / ändern. Ich möchte nun im ersten schritt alle Attribute eines angeklickten Objektes in VBA auslesen. Wie geht es? Kann mir jemand ein Hinweis geben? Danke Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13533 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 18. Jun. 2009 10:49 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
aus der ACADhilfe : Sub Example_GetAttributes() ' This example creates a block. It then adds attributes to that ' block. The block is then inserted into the drawing to create ' a block reference. ' Create the block Dim blockObj As AcadBlock Dim insertionPnt(0 To 2) As Double insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0# Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "TESTBLOCK") ' Define the attribute definition Dim attributeObj As AcadAttribute Dim height As Double Dim mode As Long Dim prompt As String Dim insertionPoint(0 To 2) As Double Dim tag As String Dim value As String height = 1# mode = acAttributeModeVerify prompt = "Attribute Prompt" insertionPoint(0) = 5#: insertionPoint(1) = 5#: insertionPoint(2) = 0 tag = "Attribute Tag" value = "Attribute Value" ' Create the attribute definition object in model space Set attributeObj = blockObj.AddAttribute(height, mode, prompt, insertionPoint, tag, value) ' Insert the block Dim blockRefObj As AcadBlockReference insertionPnt(0) = 2#: insertionPnt(1) = 2#: insertionPnt(2) = 0 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "TESTBLOCK", 1#, 1#, 1#, 0) ZoomAll ' Get the attributes for the block reference Dim varAttributes As Variant varAttributes = blockRefObj.GetAttributes ' Move the attribute tags and values into a string to be displayed in a Msgbox Dim strAttributes As String Dim I As Integer For I = LBound(varAttributes) To UBound(varAttributes) strAttributes = strAttributes & " Tag: " & varAttributes(I).TagString & _ " Value: " & varAttributes(I).textString & " " Next MsgBox "The attributes for blockReference " & blockRefObj.name & " are: " & strAttributes, , "GetAttributes Example" ' Change the value of the attribute ' Note: There is no SetAttributes. Once you have the variant array, you have the objects. ' Changing them changes the objects in the drawing. varAttributes(0).textString = "NEW VALUE!" ' Get the attributes Dim newvarAttributes As Variant newvarAttributes = blockRefObj.GetAttributes ' Again, display the tags and values strAttributes = "" For I = LBound(varAttributes) To UBound(varAttributes) strAttributes = strAttributes & " Tag: " & varAttributes(I).TagString & _ " Value: " & varAttributes(I).textString & " " Next MsgBox "The attributes for blockReference " & blockRefObj.name & " are: " & strAttributes, , "GetAttributes Example" End Sub ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 18. Jun. 2009 11:40 <-- editieren / zitieren --> Unities abgeben:         
Hi Thomas, es wird zuerst ein block erstellt und dann wieder ausgelesen. Ich vermisse den Punkt wie ich den bereits bestehenden Block, mit einem doppel klick ausgewählten, ermitteln kann. Ich hoffe nicht zu sehr zu nerven Danke Dirk 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: 18. Jun. 2009 11:41 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
Hallo Dirk, der angebene Suchweg enthielt im ersten Suchergebnis ein Beispiel. Hierin werden Blöcke aus der Zeichnung ausgewertet, Attributwerte der Blöcke in ein Listview gelesen. Zusätzlich kannst du hier auch Attributwerte ändern. Es sollte nicht schwerfallen das Beispiel so zu ändern das du die Attribute exportierst. 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 |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 18. Jun. 2009 11:53 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
Zitat: Original erstellt von DirkiBoy: Hi Thomas,es wird zuerst ein block erstellt und dann wieder ausgelesen. Ich vermisse den Punkt wie ich den bereits bestehenden Block, mit einem doppel klick ausgewählten, ermitteln kann. Ich hoffe nicht zu sehr zu nerven :D Danke Dirk
Mit Doppelklick wird das nichts werden.  Versuch doch mal mit der Funktion Thisdrawing.utlity.Getobject deinen Block zu wählen. 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 |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 19. Jun. 2009 10:51 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, habe Dank eurer Hinweise mein Ziel fast erreicht. Die gewünschte Info wird als MSGBox ausgegeben (siehe unten). Das restliche Programm bekomme ich hin. Ich habe jetzt über einen Plot eine .dwf Datei erstellt. Gibt es da eine Möglichkeit das VBA Programm mit zu exportieren, so dass die MSGBox (oder was auch immer) auch erscheint? Danke Dirk Private Sub AcadDocument_BeginRightClick(ByVal PickPoint As Variant) Dim sset As AcadSelectionSet, obj As AcadEntity, att, atts, strselect As String On Error Resume Next Set sset = ThisDrawing.SelectionSets.Add("1001") sset.SelectOnScreen For Each obj In sset If TypeOf obj Is AcadBlockReference Then If obj.HasAttributes Then atts = obj.GetAttributes For Each att In atts strselect = strselect & att.TextString Next End If End If Next sset.Delete MsgBox strselect End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Jun. 2009 13:28 <-- editieren / zitieren -->
Hi, Zitat: Ich habe jetzt über einen Plot eine .dwf Datei erstellt. Gibt es da eine Möglichkeit das VBA Programm mit zu exportieren, so dass die MSGBox (oder was auch immer) auch erscheint?
...versuchst Du damit zu fragen, ob das VBA dann im DWF eingebettet sein soll und wenn das DWF dann im DesignReview geöffnet wird, das DesignReview automatisch weiss, dass mit diesem: Private Sub AcadDocument_BeginRightClick(ByVal PickPoint As Variant) automatisch aus einem 'AcadDocument' ein DesignReview-Document geworden ist, dass DesignReview plötzlich weiss, wass ein 'ThisDrawing'-Objekt ist oder ein 'SelectionSet', ..... Bitte vergiss nicht, dass Du da von 2 komplett verschiedenen Produkten sprichst, wäre so, als wolltest Du ein Photoshop-Makro, das einen Farbverlauf macht, dann in Excel verwenden, damit es eine Zelle anmalt ....Oder hab ich was komplett falsch verstanden - alfred - ------------------ www.hollaus.at |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 19. Jun. 2009 14:05 <-- editieren / zitieren --> Unities abgeben:         
Hi Alfred, Du hast meinen vollen respekt, genau das meine ich . Die Fragestellung hätte von mir sein sollen Haste auch einen Lösungsvorschlag? Eventuell einen bestimmten viewer benutzen??? Danke Schonmal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Jun. 2009 14:10 <-- editieren / zitieren -->
Hi, leider kein Vorschlag, es gibt zwar für DesignReview ein ActiveX-Objekt, aber IMHO keine für Zugriff auf Objekte innerhalb der DWF-Datei. Sorry for that bad news, aber kann auch daran liegen, dass ich mit der DesignReview-API nicht vertraut bin, vielleicht nochmals fragen in DWF-Forum, vielleicht hat da wer was. Zwei Dinge, die sicher sind: im DWF kannst Du keine VBA-Makros einbetten und der Code, der für AutoCAD-VBA gebaut ist, kann nicht in DesignReview funktionieren. - alfred - ------------------ www.hollaus.at |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 19. Jun. 2009 15:07 <-- editieren / zitieren --> Unities abgeben:         
|
Ex-Mitglied
|
erstellt am: 19. Jun. 2009 15:11 <-- editieren / zitieren -->
Hi, Autolisp ist eine 'AutoCAD-Eigenheit'. DesignReview ist kein AutoCAD, also leider nix - alfred - ------------------ www.hollaus.at |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 19. Jun. 2009 15:29 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
Hallo Dirk, zugegeben, ich war erst mal sehr erstaunt das du deine Routine an das Ergeignis AcadDocument_BeginRightClickgehängt hast. Im AutoCAD würdest du dir damit keine Freunde machen wenn du das Kontextmenü quasi unbrauchbar machst. Ausserdem wieso soll der Benutzer dann nochmal wählen ? BTW: Wenn man ein schönes Programm um den Viewer baut, geht da schon auch was. Nur müsste das alles anders Organisiert sein. Aber, und das geht vom Ursprungsthema weg, wäre interessant was du da eigentlich machen willst. Dann kann man gezielte Vorschläge zu einer Lösung des Problems suchen. Bisher lese ich jetzt raus das du irgendwie Daten weitergeben willst und der Benutzer deine Info Funktion nutzen soll. Mit dem reinen Autocad kann man eine VBA Makro in eine Zeichnung einbetten. Des weiteren gibt es ein schönes Tool mit dem man Infos als Tooltip in einer Zeichnung anzeigen lassen kann. Bis jetzt ist das aber nur ein stochern im Heuhaufen. 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 |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 20. Jun. 2009 06:52 <-- editieren / zitieren --> Unities abgeben:         
Hi Wilfried, das mit den "right Click" ist nur ein Ansatz, kann geändert werden. Ein paar Erklärungen. Ich arbeite in Bulgarien in einer power plant und habe hobby mäßig ein Dokumenten DB aufgebaut, heisst ich bin kein profi programmer. Die DB wird an ca. 150 Arbeitsplätzen mit Leserecht und nochmals 30 mit Vollzugiff. Funktioniert jetzt seit 3 Jahren gut. Unsere Engineeringsabteilung hat ca. 350 PID in autocad erstellt, werden auch kontinuielich geändert. Die PID's enthalten sogenannte KKS nummern die sich auch in der DB wiederfinden. Wir wollen jetzt unsern Usern die Möglichkeit geben von einem PID auf die DB zuzugreifen. Die Datenmenge in der DB sind zu vielfälltig um sie in Autocad "Bubble like" darzustellen. Daher denke ich, daß Dein Lösungsvorschlag: "BTW : Wenn man ein schönes Programm um den Viewer baut, geht da schon auch was. Nur müsste das alles anders Organisiert sein." noch der beste Weg ist. Kannst Du mir in dieser Richtung ein paar Tipps geben? Danke Dirk
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: 20. Jun. 2009 12:23 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
Hallo Dirk, hab schon gesehen das du wohl in Sofia bei der "Telekom" arbeitest. Das hängt wohl davon ab in welcher DB (Access, Oracle ...)du deine Daten vorhälst. Eigentlich riecht das doch nach einer kleinen GIS Anwendung. Da braucht man nichts programmieren sondern nur einrichten. Ein Mittel wäre die Daten in MapGuide Enterprise oder MapGuide OpenSource zu publizieren. Da braucht die Auskunft noch nicht mal AutoCAD um die Grafik zu sehen. Ausserdem ist so der Zugriff auf die Datenbank Sachdaten gewährleitet. Als "Highend" Lösung wäre ein Crossgrad von Autocad auf Topobase zu nennen. Dann ist Grafik und Sachdaten eines. Ein Doppelklick auf dein Element öffnet die Sachdatenmaske. Da braucht gar nichts mehr programmiert werden. 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 |
DirkiBoy Mitglied

 Beiträge: 13 Registriert: 07.05.2009
|
erstellt am: 24. Jun. 2009 16:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wilfried, Hört sich erstmal nicht so gut für mich an. Habe daher eine Softwarefirma eingeschalted (ist Bulgarien nicht so teuer) die will jetzt mit .dfx files und hyperlinks arbeiten..... Gehe ich mir heute mal anschauen, schreibe dann ob es funktionier. Gruß Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13533 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 24. Jun. 2009 16:17 <-- editieren / zitieren --> Unities abgeben:          Nur für DirkiBoy
|