| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Apparent Intersection von 3dPolylinien (1256 / mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 18. Aug. 2017 08:55 <-- editieren / zitieren --> Unities abgeben:
Ich bin auf der Suche nach einer Möglichkeit die Schnittpunkte an 3dPolylinien durch Polylinien mit Elevation 0 zu ermitteln. D.h. etwa so wie man manuell vorgeht, wenn in der Modelansicht eine Linie in der Ebene X/Y (Z=0) mit einer 3dPolylinie schneidet. Dabei wählt man den Objektfang "Apparent Intersect" die 3dPolylinie und anschliessend die 0-Polylinie. Der neu ermittelte Schnittpunkt liegt mit Z auf der 3dPolylinie in X/Y entspricht er visuell zwischen beiden Objekten in der XY-Ebene. Mein Versuch bei Schnitt von 3dPoly mit 2dPoly auf einer Ebene funktioniert so:
Code:
Point3dCollection points; Polyline3d other; Polyline2d baseCurveSampleLine; other.IntersectWith(baseCurveSampleLine, Intersect.ExtendBoth, points, IntPtr.Zero, IntPtr.Zero);
Ein Ansatz wäre vielleicht von Kean Finde ich jedoch kompliziert, da ich für jede 2dPoly dann ein "PlaneSurface" erzeugen müsste. [Diese Nachricht wurde von cadplayer am 09. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 18. Aug. 2017 09:12 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: ... Finde ich jedoch kompliziert, da ich für jede 2dPoly dann ein "PlaneSurface" erzeugen müsste.
Wenn du im Raum liegende Elemente hast, dann ist die Lage der augenscheinlichen Schnittpunkte immer davon abhängig, von wo aus man auf diese Elemente blickt. Folglich ist die Festlegung der Betrachtungsebene unumgänglich. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 18. Aug. 2017 09:29 <-- editieren / zitieren --> Unities abgeben:
Testprojekt!Das Objekt PlanSurf ist etwas umständlich zu handhaben. Beim Versuch es herkömmlich zu zeichnen: musste ich es erst in der X/Y ebene zeichnen und anschliessend um die X-achse drehen um 90 grad, um es räumlich darzustellen. Starte AcSpeedy_Intersect\_AcSpeedy_Intersect\bin\Debug\_Autocad_Intersect.dll mit Befehl CPI Das funktioniert soweit, gibt es vielleicht eine andere Möglichkeit? [Diese Nachricht wurde von cadplayer am 09. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 18. Aug. 2017 09:35 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
du musst ja kein PlanSurface nehmen. Du kannst dir die Ebene mit einem Plane selber definieren und dann eine Transformation ( Matrix3d erstellen, die die Objekte auf diese Ebene projektiert und dann von diesen transformierten Objekten die Schnittpunkte berechnen. 3D- ist richtig Aufwand. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 18. Aug. 2017 10:52 <-- editieren / zitieren --> Unities abgeben:
Danke Holger für deinen Ansatz, da weiss ich auf jeden Fall, das es eine Möglichkeit gibt - jetzt muss ich das halt nur mal durchprobieren. [Diese Nachricht wurde von cadplayer am 09. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 19. Aug. 2017 11:20 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal! Ein kleines Experiment ist geglückt. Ich habe im Testprojekt einen Befehl PPI geschaffen, der einen Schnittpunkt aus 3dPolylinie und LwPolylinie mittels Plane-Objekt ermittelt. Es funktioniert folgendermassen: man wählt die LwPolylinie (weise Linie), die in der Beispielzeichnung nur aus Anfangs- und Endpunkt besteht und anschliessend die 3dPolylinie (gelbe Linie). Gibt es eine Verschneidungspunkt, dann wird ein Punkt erzeugt und es gibt die Rückgabe "Point is on curve." Ein Frage zum Plane-Objekt, kann man eine Ebene auch aus einer LwPolyline mit mehreren Vertex-punkten erzeugen? [Diese Nachricht wurde von cadplayer am 09. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 19. Aug. 2017 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: ... Ein Frage zum Plane-Objekt, kann man eine Ebene auch aus einer LwPolyline mit mehreren Vertex-punkten erzeugen?
Ich verstehe deine Frage nicht. Ein Plane(Ebene) wird doch definiert aus einem Basispunkt und der Richtung der X- und Y-Achse (angegeben durch Punkte oder Vektoren). Du kannst doch diese Definitionsdaten bestimmen wir du willst - du entscheidest doch, wie das Plane bezogen auf die LwPolylinie definiert wird. Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 19. Aug. 2017 12:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger! Danke für deine schnelle rückmeldung zum thema Plane = Ebene habe ich nicht viel gefunden ausser wie du es sagst, eine Ebene konstruiert In meiner Zeichnung habe ich eine Basis polylinie mit zwei punkten, die ich für die vertikale ebene benötige. Was ist wenn ich ein Polylinie mit mehreren vertex punkten habe, müsste ich dann für jedes polylinien segment eine Ebene definieren bzw. was ist wenn die polylinie bogensegmente beinhaltet. dann funktioniert das konzept mit schnittpunkt aus 3dpolylinie mit lwPolylinie nicht mehr? [Diese Nachricht wurde von cadplayer am 09. Okt. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 19. Aug. 2017 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
nur dass ich es richtig verstehe, du hast Lw-Polylines und du hast 3d-Polylines. Du möchtest nun wissen, ob sich die 3d-Polylines in der aktuellen mit der LwPolyline schneiden - richtig? Grundsätzlich kannst du Schnittpunkte ja nur berechnen, wenn die Elemente nicht koplanar im Raum liegen. Deshalb muss dein Ziel sein, die Elemente alle ein eine Ebene zu bekommen, damit ein realer Schnittpunkt existiert. Die Verschiebung macht man mit einer Transformation. Die LwPolyline liefert dir die Ebene, auf die die gerade betrachtete 3dPolyline projiziert werden muss. Die Projektion erfolgt in die Richtung(Vektor) der Z-Achse der aktuellen Ansicht. Mit diesen beiden Infos bildest du eine Transformationsmatrix. Da 3dPolylines bekanntlich keine Bögen enthalten, kannst du jeden Vertex der 3dPolyline mithilfe der Transformationsmatrix nun in die Ebene der LwPolyline projizieren. (Bildest du aus den neu berechneten Punkten eine neue Polyline, sollte die in der aktuellen Ansicht deckungsgleich mit der 3dPolyline sein, aber in der Ebene der LwPolyline liegen.) Nun liegen beide Entities in einer Ebene und du kannst den Schnittpunkt berechnen, der dann in der Ebene der LwPolyline liegt. Um den Schnittpunkt auf die 3dPolyline zu bekommen, muss dieser nun in die entgegengesetzte Richtung(Vektor) der Z-Achse der aktuellen Ansicht transformiert werden. Dafür nimmst du die umgekehrte Transformationsmatrix. Ich hoffe, ich habe mich verständlich ausgedrückt. Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 19. Aug. 2017 13:32 <-- editieren / zitieren --> Unities abgeben:
|
Ingenieur Studio HOLLAUS Mitglied CAD / CAFM / GIS Beratung-Programmierung-Schulung
Beiträge: 1049 Registriert: 06.11.2008 Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks) RKV .... CAFM+mehr HMap ... Vermessung und Verkehr OoC .... Raumplanung CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)
|
erstellt am: 20. Aug. 2017 12:03 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: kannst du jeden Vertex der 3dPolyline mithilfe der Transformationsmatrix nun in die Ebene der LwPolyline projizieren
Ich würde die <Curve>.GetProjectedCurve Funktion vorziehen, ist schneller als jeden einzelnen Punkt manuell zu transformieren. Zusätzlich kann man jetzt die eingebaute Funkion ".IntersectWith" nutzen, da nun beide in einer Ebene liegen. ------------------
www.cars4fun.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 20. Aug. 2017 12:12 <-- editieren / zitieren --> Unities abgeben:
|