| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Solid-Koordinaten mit VB.NET extrahieren (1661 mal gelesen)
|
autogis Mitglied Dr.-Ing. E-Technik
 
 Beiträge: 185 Registriert: 09.02.2001 BricsCAD V18 Spatial Manager MapGuide Open Source PostGIS
|
erstellt am: 20. Mrz. 2009 14:58 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, lange habe ich gesucht, bevor ich die Frage hier poste: Wie erhält man mit VB.NET die Koordinaten eines Solids? Zum Hintergrund der Frage: 1. Die Geometrie von Bemaßungen einer Zeichnung (Linien, Mtext,...) und unter anderem auch die Maßpfeile sollen in eine ASCII-Datei exportiert werden. Dazu explodiere ich die Bemaßungen und hole mir aus den entstehenden Elementen die Daten. Nur für die Solids habe ich absolut keinen Plan. 2. Bisher habe ich in VBA gearbeitet. Damit war das kein Problem. Über SendCommand die Maße explodiert (ging ja nicht mit VB) und dann die entstandenen Objekte ausgewertet. VB.NET ist für mich absolutes Neuland. Darum bitte ich um Nachsicht. Weiß selbst, dass mir noch Basics fehlen, aber irgend wann muß man sich ja mal einarbeiten. Danke im Voraus und viele Grüße - Peter - der hofft, hier im richtigen Forum gelandet zu sein? [Diese Nachricht wurde von autogis am 20. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 20. Mrz. 2009 15:28 <-- editieren / zitieren -->
Hi Peter, Zitat: - der hofft, hier im richtigen Forum gelandet zu sein
bisher hat es rund um dotNET die meisten Anfragen in diesem Forum gegeben, ...wir werden's natürlich auch hier durchgehen. Zum ersten, Du hast Dir eine schwere Aufgabe gestellt, hast schon mal vom ObjectARX-DevKit die BRep-Library angesehen (plus die Beispiele daraus)? Diese sind mal nicht auswendig im Detail zu können, aber sollte man als Überblick zum Verständnis mal überflogen haben. Darin wirst Du auch erkennen, dass '_explode' von 3D-Models eigentlich nicht so trivial ist, denn eine Kugel zu explodieren ist eben nicht eindeutig, könnte Kreise generieren, wie Du diese im 2D-Drahtmodell am Bidschirm siehst, könnte 3D-Flächen generieren (das verfälscht aber auch das Erscheinungsbild, weil eben Abflachungen auftreten), und dabei sind wir nicht einmal noch in die Tiefen der Boolschen-Operationen vortgedrungen. Und da stellt sich doch glatt die Frage zu 'die Koordinaten eines Solids' was sind denn Koordinaten von mehrfach verschnittenen Volumenkörpern? Alles hier vorzubeten schaffe ich zeitlich nicht, wenn Du mir ein wenig mehr Info gibst, was (welche Details) Du vom Volumenkörper haben willst, vorbildlich wäre (für meine begrenzte Phantasie ) wenn Du auch noch die Info mitgibst, was denn weiter mit diesen Detailinfos passieren wird. Let's start [EDIT]..danke an Udo, das hat mich wieder auf den Boden gebracht, ich lass es trotzdem mal da stehen, warte halt noch auf Reaktion, handelt es sich tatsächlich um 2DSolids, dann ist meiniges hier natürlich Themenverfehlung par excellence Code, bei dem Du schon mal bis zum Zerlegen und dann zum SOLID durchgedrungen bist, wäre hier schon vorteilhaft[/EDIT]
- alfred - ------------------ www.hollaus.at
[Diese Nachricht wurde von a.n. am 20. Mrz. 2009 editiert.] |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 20. Mrz. 2009 16:06 <-- editieren / zitieren --> Unities abgeben:          Nur für autogis
|
autogis Mitglied Dr.-Ing. E-Technik
 
 Beiträge: 185 Registriert: 09.02.2001
|
erstellt am: 20. Mrz. 2009 16:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Alfred, erst mal vielen Dank für die schnelle Antwort. Sollten weitere Fragen entstehen werde ich in das ARX-Forum gehen. Zitat: Original erstellt von a.n.: ... hast schon mal vom ObjectARX-DevKit die BRep-Library angesehen (plus die Beispiele daraus)?
... Schande über mich ... nein. Was ich hier habe, ist "VB.NET Programming for AutoCAD Customization" von Jerry Winters. Seit dem raucht mir der Kopf. DotNet neu (wie gesagt, früher nur VBA), und das dann noch mit AutoCAD. Bin fix und alle. Zitat: Original erstellt von a.n.: Alles hier vorzubeten schaffe ich zeitlich nicht, wenn Du mir ein wenig mehr Info gibst, was (welche Details) Du vom Volumenkörper haben willst, vorbildlich wäre (für meine begrenzte Phantasie ;) ) wenn Du auch noch die Info mitgibst, was denn weiter mit diesen Detailinfos passieren wird.
Klar, gerne versuche ich, einen Helfer in die Lage zu versetzen, mir zu helfen. Zunächst möchte ich eigentlich gar nichts mit 3D im weiteren Sinne anstellen. Ich habe es (zum Glück) "nur" mit 2D-Zeichnungen zu tun. Und aus denen sollen Geometrien in ein ASCII-Format konvertiert werden. Unter anderem auch Maße (AlignedDimension). Die enthalten im konkreten Fall Linien (ist einfach, Start- und Endpunkt stehen direkt drin), Texte/MTexte(nicht mehr ganz trivial, aber immerhin lassen sich Ausrichtung, Insertionpunkt... auch direkt aus den Eigenschaften nehmen) und halt auch Maßpfeile. Im konkreten Fall stellen sie sich als dreieckige Solids dar. Und genau davon brauche ich die drei Eckpunktkoordinaten. In VBA war das ganz simpel. Man iteriert sich durch die solidobjekt.coordinates und fertig. Aber für VB.NET habe ich absolut keinen Plan. Hier mal der Codeschnipsel, den ich mir aus dem Netz geladen und für erste Versuche ein wenig modifiziert habe. Code: <CommandMethod("TestDims")> _ Public Sub TestDims() Dim db As Database = HostApplicationServices.WorkingDatabase Dim ed As Editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor Using tr As Transaction = db.TransactionManager.StartTransaction Try Dim btr As BlockTableRecord = CType(tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord) Dim coll As DBObjectCollection = New Autodesk.AutoCAD.DatabaseServices.DBObjectCollection() Dim ent As Entity Dim objId As ObjectId Dim oDim As Dimension For Each objId In btr ent = CType(tr.GetObject(objId, OpenMode.ForWrite), Entity) If TypeOf (ent) Is Dimension Then oDim = ent oDim.Explode(coll) Dim iter As System.Collections.IEnumerator = coll.GetEnumerator() 'Add the entities from exploding the dimension to model space While iter.MoveNext() Dim entCur As Entity = CType(iter.Current, Entity) If TypeOf (entCur) Is Solid Then Dim SOL As Solid SOL = entCur End If If TypeOf (entCur) Is Line Then Dim Lin As Line Lin = entCur End If If TypeOf (entCur) Is MText Then Dim MT As MText MT = entCur End If btr.AppendEntity(entCur) tr.AddNewlyCreatedDBObject(entCur, True) End While 'oDim.Erase() coll.Clear() End If Next objId tr.Commit() Catch ex As System.Exception ed.WriteMessage(ex.ToString()) End Try End Using End Sub
In meinem jugendlichen Leichtsinn glaubte ich, etwas ähnliches, wie in VBA tun zu können. Aber dass war wohl Wunschdenken. Momentan fühlich ich mich um Jahre zurück geworfen. Danke im Voraus - Peter Solltest Du weitere Infos brauchen, lass es mich bitte wissen [Diese Nachricht wurde von autogis am 20. Mrz. 2009 editiert.] [Diese Nachricht wurde von autogis am 24. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autogis Mitglied Dr.-Ing. E-Technik
 
 Beiträge: 185 Registriert: 09.02.2001 BricsCAD V18 Spatial Manager MapGuide Open Source PostGIS
|
erstellt am: 20. Mrz. 2009 16:21 <-- editieren / zitieren --> Unities abgeben:         
Hallo Udo Hübner, Um Solids, Du warst schnelle mit Deiner Frage, als ich auf Alfreds Frage antworten konnte. Danke :-) [Diese Nachricht wurde von autogis am 20. Mrz. 2009 editiert.] [Diese Nachricht wurde von autogis am 20. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 20. Mrz. 2009 16:42 <-- editieren / zitieren -->
Hi, folgender Code liefert Dir die Koordinaten des SOLIDS, ich hoffe ich hab's jetzt richtig verstanden ) Code: Dim tCoords As Geometry.Point3dCollection = New Geometry.Point3dCollection Call CType(entCur, Solid).GetStretchPoints(tCoords) If (tCoords IsNot Nothing) AndAlso (tCoords.Count > 0) Then For Each tPnt As Geometry.Point3d In tCoords Debug.Print(tPnt.ToString) Next Else MsgBox("Solid-Abfrageefehler") End If
- alfred - ------------------ www.hollaus.at |
autogis Mitglied Dr.-Ing. E-Technik
 
 Beiträge: 185 Registriert: 09.02.2001
|
erstellt am: 20. Mrz. 2009 17:19 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |