| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: MPolygon abfragen (4713 mal gelesen)
|
Harald Schwenk Mitglied

 Beiträge: 12 Registriert: 08.07.2004
|
erstellt am: 15. Jul. 2006 13:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich habe eine Zeichnung mit MPolygonen und möchte gerne auf die Eigenschaften und Methoden zu diesem Objekt zugreifen. Auswahlsatz mit MPolygonen erstellen, ansteuern des einzelnen MPolygon habe ich bereits realisiert. Nun möchte ich die Koordinaten jedes einzelnen Stützpunktes abrufen, Abhängigkeiten zu Inseln erfahren und evtl. auch weiteres. Hat eine(r) einen Katalog zu den Methoden und Eigenschaften zu diesem Elementtyp oder einen anderen Vorschlag zum vorgehen. Vorab bedanke ich mich schon einmal und verbleibe mit einem Gruß Harald 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: 15. Jul. 2006 17:27 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
Hallo Harald, Öffne in der VBA-IDE mal das Lokal-Fenster. Wenn du dann per Einzelschritt deinen Code durchläufst kannst du, sobald Objekte gewählt wurden, in diesem Fenster die Eigenschaften nachschauen. Für solche Sachen reicht einfach folgender Code, um an die Eigenschaften von einem Objekt zu kommen: Public Sub test123() Dim Object As Object Dim promt As String Dim Pickedpoint As Variant On Local Error Resume Next promt = "Objekt wählen:" Utility.GetEntity Object, Pickedpoint, promt If TypeName(Object) <> "Nothing" Then '<== Ab hier kannst du im Lokal-Fenster die Eigenschaften des Objekts sehen (Unter Objekt/...) MsgBox Object.name End If Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Harald Schwenk Mitglied

 Beiträge: 12 Registriert: 08.07.2004
|
erstellt am: 16. Jul. 2006 12:16 <-- editieren / zitieren --> Unities abgeben:         
Danke Carsten, komme mit Deinem Skript allerdings an die gleiche Stelle an der ich zuvor schon war. Ich bin auf der Suche nach einem Katalog von Methoden und Ereignissen über das dort angebotene hinaus. Koordinaten der Stützpunkte (von MPolygon) usw.. Die ObjektID, Handle und auch der Zugriff auf die Attribute im Zusammenhang mit Blöcken wird mit Deinem Verfahren nicht angeboten. Im Überwachungsfenster, so habe ich zur Laufzeit mein Skript beobachtet, ist auch nicht mehr zu sehen. Meine Frage erneut: Wie komme ich, über die zuvor beschriebenen Verfahren hinaus, an Methoden und Ereignisse zum Elementtyp MPolygon. Danke an Carsten und in der Hoffnung verständlich zu sein, verbleibe ich mit einem erneuten Gruß Harald 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: 16. Jul. 2006 16:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
Hallo Harald, An die Coordinaten des Polygons (oder Polylinie) kommst du mit dem Code sehr wohl ran. Probier mal das Schrittweise debuggen und Schau dann in das Lokalfenster, dort findest du unter Object/Coordinates eine Liste mit Coordinaten der Stützpunkte (Immer X- und Y-Werte abwechselnd). An das Handle des Objects kommst du über Handle = Object.Handle ran. An die ID des Objects kommst du über ObjectID = Object.objectID ran (Dies wird bei jedem Öffnen der Zeichnung neu vergeben). An Attribute in einem Block kommst du über Attrib = ssnew.Item(0).GetAttributes heran. Du kannst bei VBA sehr viel über die meines Erachtens gute Hilfe(F1) erfahren und ausserdem gibt es ja noch den Objektkatalog in der IDE (F2). Gruß, Carsten P.s.: Du willst an ein Polygon (geschlossene Polylinie) rankommen, aber nicht an ein Polygonmesh, oder?! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Harald Schwenk Mitglied

 Beiträge: 12 Registriert: 08.07.2004
|
erstellt am: 17. Jul. 2006 12:08 <-- editieren / zitieren --> Unities abgeben:         
Hallo Carsten, ich meine ein MPolygon. Keine geschlossene Polylinie und kein PolygonMesh! Zitat (Autodesk Map 3D Hilfe – Glossar): MPolygon Ein Polygonobjekt. Ein Polygon unterscheidet sich von einer geschlossenen Polylinie dadurch, dass es Informationen über seine inneren und äußeren Begrenzungen speichert. Mich beschleicht der Verdacht, dass es sich um ein Element handelt, welches nur in Map, Civil usw. auftaucht. Danke an Carsten! Wenn meine Eingangsfrage zu unpräzise war bitte ich das zu entschuldigen. Vorsorglich möchte ich noch erwähnen, dass meine Frage noch offen ist. Gruß Harald 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: 19. Jul. 2006 20:10 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
Hallo Harald, Es handelt sich bei deinem Mpolygon scheinbar wirklich um ein Element, das es nur in Map gibt. Da ich nur AutoCAD pur und ADT habe, bin ich hier raus. Vielleicht kann Stelli dir weiterhelfen, wenn er aus dem Urlaub wieder da ist, da er Map hat. Gruß, Carsten 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: 28. Jul. 2006 13:57 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
Hallo Harald, das MPOLYGON ist wohl eine Objekt aus Map/Civil. Damit sollen wohl Elemente aus shape Datei leichter eingelesen werden können. Ich habe noch nicht damit gearbeitet. Es gibt wohl auch Speicherprobleme bei grossen Mengen. Vielleicht lassen sich diese Elemente vermeiden ? Ansonsten binde doch mal die Bibliotheken von Map und Civil alls Verweis ein und schau mal nach ob es dieses Element gibt. Und such mal in der Entwicklerhilfe von Map. Tut mir leid das ich nicht mit 1. 2. 3. antworten kann Stelli ------------------ 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: 03. Aug. 2006 11:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
Hallo Harald, das Objekt scheint sich nicht über die COM-Schnittstelle ansprechen zu lassen. Ein Würg-Around (Werte auslesen) wäre folgendermassen: Log Datei umlenken Objekt selektieren Befehl "_Liste" auf das Objekt anwenden (Sendcommand) Log Datei (ASCII) auslesen. Stelli
------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Harald Schwenk Mitglied

 Beiträge: 12 Registriert: 08.07.2004
|
erstellt am: 03. Aug. 2006 13:58 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli, _list kann ich auf der Befehlszeile absetzen. Im Textfenster bekomme ich eine Reihe der Informationen die ich suche. In meinem Code habe ich versucht das folgendermaßen umzusetzen: Objekt ist selektiert, Variant ist eine Variable vom Typ vbVariant, Variant = MPolygon.SendCommand "_list" Variant sollte jetzt ein Array sein, mit den Informationen die ich im Textfenster habe. So ist es aber nicht, die Anweisung ruft einen Laufzeitfehler hervor. Danke für Deine Hilfe und Gruß Harald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 03. Aug. 2006 14:04 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
gib mal (entget(car(entsel))'("*")) in der Befehlszeile ein, bestätige, und selektiere dann ein MPolygon. Was sagt dir Autocad im Textfenster? ------------------ - 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 |
Harald Schwenk Mitglied

 Beiträge: 12 Registriert: 08.07.2004
|
erstellt am: 03. Aug. 2006 14:42 <-- editieren / zitieren --> Unities abgeben:         
Hallo Thomas, Was bedeutet der Befehl (entget(car(entsel))'("*"))? Ab hier die Eingabe auf der Befehlszeile von Autodesk Map: Befehl: (entget(car(entsel))'("*")) Objekt wählen: ((-1 . <Objektname: 7efefed0> ) (0 . "MPOLYGON") (5 . "5A") (102 . "{ACAD_XDICTIONARY") (360 . <Objektname: 7efefed8> ) (102 . "}") (330 . <Objektname: 7efefc10> ) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "B104") (100 . "AcDbMPolygon") (70 . 1) (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . "_SOLID") (71 . 1) (91 . 1) (92 . 2) (73 . 0) (72 . 0) (93 . 7) (10 3.4775e+006 5.55177e+006 0.0) (10 3.47753e+006 5.55168e+006 0.0) (10 3.47758e+006 5.5517e+006 0.0) (10 3.47759e+006 5.55171e+006 0.0) (10 3.47762e+006 5.55173e+006 0.0) (10 3.47764e+006 5.55173e+006 0.0) (10 3.47761e+006 5.55179e+006 0.0) (76 . 1) (63 . 144) (11 0.0 0.0 0.0) (99 . 0) (450 . 0) (451 . 0) (460 . 0.0) (461 . 0.0) (452 . 0) (462 . 0.0) (453 . 0) (470 . "") (-3 ("DCO15" (1071 . 1) (1071 . 1) (1000 . "Sachdaten") (1004 . "077B423130347D00")))) soweit Harald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 03. Aug. 2006 15:02 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
das ist Lisp, und Siehe da: in den 10'er GruppenCodes hast du auch die Koordinaten.. (vl-remove-if-not 'vl-consp (mapcar '(lambda(X) (if (=(car X)10)(cdr X)))(entget(car(entsel))))) extrahiert dir z.B. die Stützpunktkoordinaten des gewählten MPolygons ...scheinbar hast du in diesem Fall mit VBA schlechtere Karten ... ------------------ - 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 |
Stelli1 Moderator Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 03. Aug. 2006 15:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
Hallo Harald, ganz so einfach geht es nicht. Hier ein Beispiel
Code:
Sub test() Dim sset As AcadSelectionSet Dim LogDatei As String Dim Filtertype(0) As Integer Dim FilterData(0) As Variant ' Pfad für LogDatei ThisDrawing.SetVariable "LOGFILEPATH", "C:\TEMP\" LogDatei = ThisDrawing.GetVariable("LOGFILENAME") ' Datei leeren Open LogDatei For Output As #1 Close 1 ' Ausgabe in Datei lenken ThisDrawing.SetVariable "LOGFILEMODE", 1 ' Selectionset On Error Resume Next Set sset = ThisDrawing.SelectionSets("TEST") If Err.Number Then Set sset = ThisDrawing.SelectionSets.Add("TEST") End If On Error GoTo 0 ' Objekte wählen sset.Clear sset.Select acSelectionSetAll ' eventuell mit Filter für MPolygon sset.Highlight True ' Kommando Liste senden ThisDrawing.SendCommand "_list v " & Chr$(13) ' Ausgabe nur im Textfenster ThisDrawing.SetVariable "LOGFILEMODE", 0 End Sub
Hab nur im Moment keine Idee wie man die Eingabetaste im Textfenster unterdrücken kann.Vielleicht hilft es ja schon weiter. Stelli ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 05. Aug. 2006 21:44 <-- editieren / zitieren --> Unities abgeben:          Nur für Harald Schwenk
ach ja ... um die Eingabetaste bei LISTE zu unterdrücken setz doch mal die (undokumentierte) Systemvariable QAFLAGS auf 2 ------------------ - 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 |
Harald Schwenk Mitglied

 Beiträge: 12 Registriert: 08.07.2004
|
erstellt am: 07. Aug. 2006 13:53 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich möchte mich zunächst bedanken und die Sache mal etwas zusammen fassen. Meine Absicht ist die Objekte MPolygon abzufragen um daraus ein Datenbankobjekt unter Berücksichtigung der Simple Feature Spezifikationen gemäß OGC zu erzeugen. Und, ganz wichtig, neben der geometrischen Ausprägung sind auch die Sachinformationen zum Objekt und Informationen zum Layout. Das alles wird in einem SQL-Statement zusammen gefasst und weiter verarbeitet. Das zum Hintergrund. Dank Eurer Unterstützung kann ich die MPolygone selektieren und in ein file.log schreiben. Die Eingabetaste im Textfenster wird durch die Systemvariable QAFLAGS auch unterdrückt. Das Ergebnis liegt nun im Filesystem. An diese Stelle komme ich aber auch wenn ich die MPolygone in ein file.dxf schreibe. Der weiter Lauf wäre nun die Datei im Filesystem wieder aufzunehmen. Über die Referenz die Objektdaten zum jeweiligen MPolygon abfragen und dann das SQL-Statement erzeugen. Das sieht für mich etwas umständlich aus. Kann eine(r) sagen, ob es einfacher ist über das Autocad.NET Objektmodell an MPolygone zu kommen? Eure Anteilnahme bezüglich meiner Frage hat mir gut gefallen. Danke! Gruß Harald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |