| |  | 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: Wert eines Textfeldes auslesen (2801 mal gelesen)
|
blacky1985 Mitglied Application Engineer
 
 Beiträge: 348 Registriert: 16.04.2008
|
erstellt am: 18. Sep. 2008 20:05 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich wollte mal Fragen wie der genaue API-Aufruf für VB.NET lautet um bei einer geöffneten ACAD-Zeichnung den Wert eines Textfeldes auszulesen. Beispielsdatei lege ich diesem Beitrag als ZIP-Anlage bei, damit ihr euch auch die DWG ansehene könnt in der nur ein Objekt vorhanden ist, nämlich dieses, von dem ich gern den Text ausgelesen hätte. Wäre super, wenn mir jemand weiterhelfen könnte. Bin etwas am verzweifeln gerade wie ich den Wert auslesen kann, da ich es irgendwie nicht hinbekomme den Wert auszulesen bzw. daran zu kommen. Danke im Voraus für eure Hilfe. 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: 18. Sep. 2008 20:26 <-- editieren / zitieren --> Unities abgeben:          Nur für blacky1985
|
blacky1985 Mitglied Application Engineer
 
 Beiträge: 348 Registriert: 16.04.2008
|
erstellt am: 19. Sep. 2008 07:10 <-- editieren / zitieren --> Unities abgeben:         
Also ich hab die DWG-Zeichnung in ACAD bereits geöffnet, kann auch über die APi-Schnittstelle ohne Probleme auf das geöffnete Document zugreifen...z.B. Code: oDrawDoc = oApp.Document
Mein Problem ist, wie kann ich über die API den Inhalt des Schriftfeldes auslesen ? Also wie komme ich daran. Hatte mal was in der Art versucht mit Code: oDrawdoc.ModelSpace.Item(0)
weil es ja nur ein Element im Beispiel gibt, daher die Item[0], aber dann bin ich nicht mehr weitergekommen und habe keine Möglichkeit mehr gesehen den Inhalt des Textfeldes auszulesen. Möglicherweise habe ich auch hier shcon den falschen Lösunsgansatz. Bin nicht so fit und noch recht unerfahren in Sachen ACAD-API. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Sep. 2008 07:42 <-- editieren / zitieren -->
hi blacky, gibt ein paar sachen dazu zu sagen. a) mit .net kannst du ueber mangaged-access auf die applikation/documents/elemente/... hingreifen, das geht schneller, ist aber ein wenig mehr programmierung b) mit .net kannst du ueber com-interface arbeiten, ist schneller programmiert, aber doch langsamer, also bei grossen datenmengen eher obiges. c) am modelspace koennen nicht-sichtbare elemente liegen, damit ist die vermutung, dass du mit .item(0) dein erstes gezeichnetes element bekommst, eben hinfaellig. du kannt probieren Debug.Print oDrawDoc.ModelSpace.Item(0).ObjectName 'gibt den autocad-internen klassennamen des objekts aus du hast fuer vba beispiele im programmverzeichnis installiert, wenn du .net-managed arbeiten willst, empfehle ich von autodesk die objectarx-lib's downzuloaden, denn in diesem sind beispiele fuer managed-code enthalten. - alfred - |
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. Sep. 2008 10:30 <-- editieren / zitieren --> Unities abgeben:          Nur für blacky1985
Hallo, ich glaube das Problem liegt schon im Ansatz. Wie willst du aus einer Adressdatei die Adresse selektieren wenn du kein Suchkriterium hast. Ich glaube, es ist fragwürdig sich darauf zu verlassen das es immer die Erste ist. Irgendeine eindeutige Eigenschaft (Layer, Farbe, Blockname, Inhalt etc.) sollte dein Objekt (Text) schon haben. Dann kannst du, mal unabhängig ob in VB/A/.net, eine Selektion machen. 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 |
Benny4 Mitglied Softwareentwickler
 
 Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2010 ZW-CAD 2012
|
erstellt am: 19. Sep. 2008 11:13 <-- editieren / zitieren --> Unities abgeben:          Nur für blacky1985
Hi, ich hab das mal so gemacht, vielleicht hilft das ja weiter: Code:
Sub getTextFromDrawing() Dim i As Integer For i = 0 To ThisDrawing.ModelSpace.Count - 1 If UCase(ThisDrawing.ModelSpace.Item(i).objectName) = "ACDBMTEXT" Or UCase(ThisDrawing.ModelSpace.Item(i).objectName) = "ACDBTEXT" Then MsgBox "Der Text lautet: " & ThisDrawing.ModelSpace.Item(i).TextString End If Next End Sub
------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
blacky1985 Mitglied Application Engineer
 
 Beiträge: 348 Registriert: 16.04.2008
|
erstellt am: 19. Sep. 2008 11:24 <-- editieren / zitieren --> Unities abgeben:         
Ich glaube ich hab das einfach viel zu kompliziert und missverständlich euch erklärt. Vielleicht wird es etwas klarer, wenn ich es nochmals versuche einfacher zu erklären, was ich genau machen will. Angenommen ich habe eine ACAD-Zeichnung, auf der mehrere Elemente vom Typ "Text" in ACAD selbst eingetragen sind. Dann kann ich in ACAD selber ja z.B. das Textelement anklicken und über die Objekteigenschaften die entsprechenden Eigenschaften abrufen. Dort steht dann bei Inhalt ja u.a. der Wert den das Textfeld enthält. (siehe auch neue Screenshots) Ziel ist es, dass ich alle vorhandene Textfelder auf der Zeichnung durchlaufen will, dort den Inhalt, also den Text auslesen will und diesen mit dem Dateinamen der geöffneten Zeichnung vergleichen muss, um festzustellen ob irgendwo auf der Zeichnung der Dateiname der ACAD-Zeichnung als Text vorkommt. Allerdings weiß ich nicht, wie ich Programmiertechnisch an der richtigen stelle angreifen kann um dies zu realisieren. Wie ich auf das Document zugreife via API ist kein Thema. Das habe ich in VB.Net raus und ist ja auch nicht schwer, nur finde ich keine Lösung wie gesagt alle Textelement auf der Zeichnung zu durchlaufen, deren Inhalt (= den Text des Textfeldes) auszulesen und mit dem Dateinamen der geöffneten Zeichnung abzugleichen. Gehe übrigens über folgenden Code auf das Dokument via VB.NET Code: Dim oApp As AcadApplication Dim oDrawDoc As AcadDocument oApp = GetObject(, "Autocad.Application") oDrawDoc = oApp.ActiveDocument
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
blacky1985 Mitglied Application Engineer
 
 Beiträge: 348 Registriert: 16.04.2008 PSP 2008 SP1 PSP 2009 SP1 PSP 2010 AIP 2008 SP3 AIP 2009 SP2 AIP 2010
|
erstellt am: 19. Sep. 2008 11:29 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Benny4: Hi,ich hab das mal so gemacht, vielleicht hilft das ja weiter: Code:
Sub getTextFromDrawing() Dim i As Integer For i = 0 To ThisDrawing.ModelSpace.Count - 1 If UCase(ThisDrawing.ModelSpace.Item(i).objectName) = "ACDBMTEXT" Or UCase(ThisDrawing.ModelSpace.Item(i).objectName) = "ACDBTEXT" Then MsgBox "Der Text lautet: " & ThisDrawing.ModelSpace.Item(i).TextString End If Next End Sub
Vielen Dank. Genau das hatte ich gesucht :-) Da war die letzte und richtige Antwort wohl schneller als ich weitere Infos posten konnte hier. Vielen Dank nochmals. War auch schon auf diesem Lösunsgweg unterwegs, habe aber dann wohl irgendwie beim Visual Studio beim Ausdruck Code: ThisDrawing.ModelSpace.Item(i).TextString
nicht das Attribut "TextString" finden können bzw. wurde mir da nicht angezeigt beim Debuggen etc. usw. Manchmal ist alles doch einfacher als man meint :-) Danke nochmals 10 Unities sind unterwegs zu dir [Diese Nachricht wurde von blacky1985 am 19. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |