Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Probleme mit Schnittpunkberechnung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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 (1155 mal gelesen)
Benny4
Mitglied
Softwareentwickler


Sehen Sie sich das Profil von Benny4 an!   Senden Sie eine Private Message an Benny4  Schreiben Sie einen Gästebucheintrag für Benny4

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 04. Mai. 2009 17:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Spline.zip

 
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz