| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Probleme mit Schnittpunkberechnung (1154 mal gelesen)
|
Benny4 Mitglied Softwareentwickler
Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2008 WIN XP Pro SP2
|
erstellt am: 04. Mai. 2009 17:01 <-- editieren / zitieren --> Unities abgeben:
Hi, ich habe da ein mir unerklärliches Problem bei der Schnittpunktberechnung. Meine Aufgabe: Ich habe ein Entity (Bogen, Kreis, Polylinie und Spline). Entlang diesen Objekten möchte ich Kreise zeichnen. Ich mache das so, dass ich einen Kreis an den Startpunkt des Objektes erstelle. Aus dem Original und dem erzeugten Kreis ermittle ich alle Schnittpunkte. Der Schnittpunkt, der noch nicht in meiner Liste der Schnittpunkt drinnen ist dient als Zentrum für den nächsten Kreis. Das geht so lange, bis die gesamte Kontur abgearbeitet ist. Das funktioniert bei Bögen, Kreisen und Polylinien sehr gut, bei Splines habe ich da allerdings Probleme. Einige Kreise werden erzeugt, bis dann an einer mir unerklärlichen Stelle die Funktion IntersectWith nur mehr einen Schnittpunkt ermittelt, es müssen (und sind eigentlich auch) 2 sein. Anbei der Code:
Code:
Dim radius as Double = 2 Dim tmpEnt as Object = ta.GetObject(tmpObj(0), OpenMode.ForRead, True) Dim tmpCircle As Circle = New Circle() Dim tmpIntersectPoint As Point3dCollection = New Point3dCollection() tmpEnt.IntersectWith(tmpCircle, Intersect.OnBothOperands, tmpIntersectPoint, 0, 0) tmpPoints.Add(tmpEnt.StartPoint) 'Startpunkt der Spline hinzufügen tmpPoints.Add(tmpIntersectPoint(0)) 'Ersten Schnittpunkt hinzufügen Dim newCenter As Point3d = tmpIntersectPoint(0) Do tmpCircle = New Circle(newCenter, New Vector3d(0, 0, 1), radius) tmpIntersectPoint.Clear() 'Schnittpunktliste löschen tmpEnt.IntersectWith(tmpCircle, Intersect.OnBothOperands, tmpIntersectPoint, 0, 0) 'Neue Schnittpunkte ermitteln Dim pointFound As Boolean = False For Each tmpPoint As Point3d In tmpPoints 'If tmpPoint.Equals(tmpIntersectPoint.Item(0)) Then If comparePoints(tmpPoint, tmpIntersectPoint.Item(0), 2) Then pointFound = True Exit For End If Next If pointFound Then tmpPoints.Add(tmpIntersectPoint.Item(1)) newCenter = New Point3d(tmpIntersectPoint.Item(1).X, tmpIntersectPoint.Item(1).Y, newCenter.Z) Else tmpPoints.Add(tmpIntersectPoint.Item(0)) newCenter = tmpIntersectPoint.Item(0) End If Loop While tmpIntersectPoint.Count > 1 And tmpEnt.StartPoint.DistanceTo(newCenter) > radius
------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 10. Mai. 2009 12:35 <-- editieren / zitieren -->
Hi, sorry dass Antwort erst jetzt kommt (kanns erst jetzt probieren) Sei froh, dass Du nicht mit 2010 arbeitest, da bekomme ich hier teilweise 4 Schnittpunkte Aber viel Ärger (auch schon Deinem nächsten Thread zu entnehmen, dass Du am richtigen Weg bist) kannst Du Dir ersparen, wenn Du Code wie folgt änderst (zuerst Spline projizieren auf XY-Ebene) Code: Dim tmpEntOrig as Object = ta.GetObject(tmpObj(0), OpenMode.ForRead, True) Dim tmpEnt as Object = tmpEntOrig.GetOrthoProjectedCurve(New Plane(Point3d.Origin, New Vector3d(0, 0, 1)))
HTH, - alfred - ------------------ www.hollaus.at |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|