| | | 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, eine Pressemitteilung
|
Autor
|
Thema: Angenommener Schnittpunkt (2213 mal gelesen)
|
Benny4 Mitglied Softwareentwickler
Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2008 WIN XP Pro SP2
|
erstellt am: 07. Mai. 2009 09:56 <-- editieren / zitieren --> Unities abgeben:
Hi, ich kann mit der Funktion IntersectWith ja die Schnittpunkte zweier Objekte ermitteln. Diese werden aber allen Anschein nach nur dann ausgegeben, wenn diese 2 Objekte auf der selben Ebene liegen. In AutoCAD gibt es ja noch diesen angenommenen Schnittpunkt. Gibt es in .NET auch die Möglichkeit diese Schnittpunkte zu ermitteln? ------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Mai. 2009 13:03 <-- editieren / zitieren -->
Hi, imho nein, zumindest keine eingebaute Funktion. Du kannst aber zu diesem Zwecke (wenn die Geometrie zumindest parallel zur Grundebene, nur auf verschiedenen Höhen ist) von beiden Elementen eine Kopie machen, diese dann auf gleichen Z-Wert legen, die Intersection rechnen, und dann vertschüssen. Wenn die Elemente auf nicht parallelen Ebenen liegen, dann heissts zuerst ein geometrisches Abbild von einer Ebene in die andere rechnen, das wird bei einem Kreis schon mal eine Ellipse - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 07. Mai. 2009 13:22 <-- editieren / zitieren -->
Hi nochmals, eine Ergänzung schon noch: ich weiss zwar nicht auswendig wo, aber es gibt, solange Deine Elemente zu DataBaseServices.Curve umwandelbar sind, in den ..Curve-Funktionen auch etwas wie projizieren (sitze leider nicht an einem Entwicklungsrechner, daher leider keine genaue Info), dann musst Du nicht Kreis auf Ellipse händisch rechnen. - alfred - ------------------ www.hollaus.at |
Benny4 Mitglied Softwareentwickler
Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2008 WIN XP Pro SP2
|
erstellt am: 07. Mai. 2009 13:39 <-- editieren / zitieren --> Unities abgeben:
Hi Alfred, das Problem habe ich bei einer Spline. Selbst wenn ich die manuell in ACAD zeichne und nicht aus irgendeinem Programm herkriege, sind einige Kotrollpunkte in Z nicht exakt auf 0. Es kann vorkommen dass die 10 ersten Punkte auf 0 liegen und dann die nächsten in Z -0.00000034 oder so. Und da kriegt ACAD keine Schnittpunkte mehr raus. Ich habe dann versucht die Spline so zu verändern:
Code:
Dim sss As Spline sss.SetControlPointAt(1, New Point3d(sss.GetControlPointAt(1).X, sss.GetControlPointAt(1).Y, 0))
Aber da kriege ich den Fehler: eGeneralModelingFailure Werd da nicht schlau aus diesem Fehler: Eigentlich möchte ich da ja die X und Y Koordinaten behalten und Z auf 0 setzen. ------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Mai. 2009 16:27 <-- editieren / zitieren --> Unities abgeben: Nur für Benny4
Hallo Benny, Hallo Alfred! Steh ich da aufm Schlauch, oder versteh ich da was falsch? Das was du, Benny suchst, heißt in englisch doch "apparent intersection", oder? Wenn ich in den "ObjectARX for AutoCAD 2010 : Managed Class Reference Guide" schaue, gibt es dort 2 Methoden-Signaturen für Entity.IntersectWith: Entity.IntersectWith Method (Entity, Autodesk.AutoCAD.DatabaseServices.Intersect, Point3dCollection, int, int) Entity.IntersectWith Method (Entity, Autodesk.AutoCAD.DatabaseServices.Intersect, Plane, Point3dCollection, int, int) Der Unterschied der 2. Methode ist der Parameter Plane. Die Beschreibung ist für beide Methoden (wenn ich es richtig verglichen habe) ident. Daher ist Autodesk bei der Beschreibung anscheinend ein Fehler unterlaufen. Wenn ich mir die Beschreibungen der equivalenten unmanaged C++-Methoden anschaue, sollte die 2. Methode aber genau die sein, die du, Benny suchst - mit der ein angenommener Schnittpunkt ermittelt werden kann. Du musst dir halt beide Beschreiungen (.NET + C++) anschauen und dann die richtige Handhabung für .NET im schlimmsten Fall durch trial and error herausfinden. Oder hab ich da was übersehen?
------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Benny4 Mitglied Softwareentwickler
Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2008 WIN XP Pro SP2
|
erstellt am: 07. Mai. 2009 17:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Stephan, ja ich habe gesehen dass es da 2 Überladungen gibt. Habe auch versucht beim Parameter Plane die Methoden GetPlane von beiden Objekten anzugeben, hatte aber keine Auswirkung. Was genau muss ich beim Parameter Plane angeben? ------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Mai. 2009 18:23 <-- editieren / zitieren --> Unities abgeben: Nur für Benny4
Also, soweit ich es aus der C++-Doku rauslesen kann, gehört dort ein Plane-Objekt übergeben, auf das dann beide Objekte normal projeziert werden. Dann werden auf dem Plane die Schnittpunkte beider Projektionen ermittelt und diese Punkte wieder auf das ursprüngliche Haupt-Objekt zurückprojeziert. Heißt, um die angenommenen/scheinbaren Schnittpunkte in der aktuellen Ansicht zu bekommen, müsste das Plane-Objekt parallel "zum Bildschirm" sein. Ist aber alles ungetestet. ------------------ Gruß, Stephan www.stbartl.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 10. Mai. 2009 11:29 <-- editieren / zitieren -->
Hi Benny, wenn's um die Plane-Erstellung geht, dann: Code: ...., New Geometry.Plane(Geometry.Point3d.Origin,New Geometry.Vector3d(0,0,1)), ....
HTH, - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|