Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Herausfinden ob Objekt parallel zum BKS ist

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:  Herausfinden ob Objekt parallel zum BKS ist (1516 mal gelesen)
Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 28. Mrz. 2010 13:18    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

Hallo.

Ob ein Objekt (Curve) planar ist, kann ich bei vb.net mit IsPlanar prüfen.
Aber wie finde ich heraus, ob das Objekt parallel zum aktuellen BKS (nicht WKS)ist?

Hintergrund:
Ich möchte an ein vorhandenes Objekt einen Bogen in tangentialer Richtung ansetzen. Wenn das Objekt aber nicht parallel zum BKS liegt, führt die Punktauswahl zum falschen Ergebnis.

------------------
Gruß
Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 28. Mrz. 2010 13:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

das hängt aber sehr stark von dem Typ Deines Objekts ab. Ist es eine Linie (mehrere mögliche Koordinatensysteme), eine Polylinie (ein oder mehrere mögliche Koordinatensysteme), ein Volumenkörper (je Fläche des Körpers ein mögliches Koordinatensystem), ...

So eindeutig ist das leider gar nicht. Viele Objekte haben eine Eigenschaft 'Normal', das wäre ein Ansatz, dieses Vektor zu vergleichen, aber wie schon gesagt, da ist nichts eindeutig solange die Ebene des Bogens nicht klar ist. Das wohl schwierigste Objekt wird die Linie (oder eine 2D-Poly, LW-Poly, 3D-Poly mit jeweils -) mit nur einem Segment sein, denn da steht für die Tangentialrichtung nichts fest, um die Ebene des Bogens zu definieren.

- alfred -

------------------
www.hollaus.at

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 28. Mrz. 2010 14:04    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

Hi Alfred,

wie bereits gesagt möchte ich gerne einen Bogen tangential an ein vorhandenes Curve-Objekt (Linie, Polylinie, Bogen, Spline...) ansetzen. Dazu wählt man das gewünschte Objekt aus, wählt den Ansetzpunkt (z.B. den Start- oder Endpunkt) und dann muss nur noch der Endpunkt des Bogens ausgewählt werden (Darstellung mittels Jig).
Wenn das Curve-Objekt auf dem WKS liegt, funktioniert alles wunderbar.

Nur wenn das BKS nicht gleich dem WKS ist, bekomme ich einen Bogen, der frei im Raum liegt (weil dann der Endpunkt eine andere Z-Höhe hat). Wie gehe ich da am Besten vor?
Schön wäre es, wenn sich dieser Bogen auch im BKS an ein Objekt ansetzen ließe.

Alternativ dürfte der Befehl nur funktionieren, wenn BKS=WKS ist. Wie kann ich das überprüfen?

------------------
Gruß
Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 28. Mrz. 2010 17:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Markus,

da musst Du die Punkte zuerst von BKS auf WKS umrechnen und die Normale mitsetzen. Es hängt jetzt davon ab, mit welcher Funktion die auf die Punkte des Objekts hingreifst oder diese ermittelst, manche Funktionen geben Dir Koordinaten in BKS, manche in WKS, wenn Du einen Bogen erstellst, must Du immer WKS-Koordinaten einstellen.

Zeig mal die Code-Teile

a) mit denen Du auf ein Objekt hingreifst, um dessen Endpunkt zu bestimmen

b) mit dem Du den neuen Bogen erstellst.

...es gibt da halt zu viel Varianten.

- alfred -

------------------
www.hollaus.at

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 28. Mrz. 2010 20:47    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


Bogen.gif

 
Hi Alfred,

hier sind mal die wichtigsten Codeteile.
Wesentliches Problem ist meiner Meinung nach auch, dass die Funktion "GetMittelpunkt" nur die X- und Y-Koordinaten für den Bogenmittelpunkt berechnet.
Aber da ein Bogen ja auch immer Planar ist, kann man das vielleicht auch mit einer gedrehten Ebene (BKS) lösen (Ebene aus Startpunkt, Endpunkt und Startvektor) 

Zum besseren Verständnis der Funktion "GetMittelpunkt" hab ich eine Grafik angehängt auf der erkennbar ist, wie ich an den Bogenmittelpunkt kommen möchte (die Sache hatte ich auch schon mal hier gepostet).

Code:

    Ansetzpunkt = SelCurve.StartPoint oder Ansetzpunkt = SelCurve.EndPoint
    Startrichtung = SelCurve.GetFirstDerivative(Ansetzpunkt)
    Dim neuerBogen As Arc = TBogen.GetTanBogen(Ansetzpunkt, Startrichtung, SelCurve)

Code:

    Dim MP As Point3d = GetMittelpunkt(locStartpunkt, locStartrichtung, EPRes.Value)
    '>>> Hier wird der CircularArc3d in einen Arc umgewandelt:
    '>>>EPRes.Value ist der Endpunkt (Auswahl mit Jig-Darstellung)
    Return convertArc2Arc(New CircularArc3d(locStartpunkt, MP, EPRes.Value))

Code:

    ''' <summary> Berechnet aus Startpunkt, Endpunkt und Startrichtung den Bogenmittelpunkt </summary>
    Public Function GetMittelpunkt(ByVal Startpunkt As Point3d, ByVal Startrichtung As Vector3d, ByVal Endpunkt As Point3d) As Point3d
        Dim vecSP As Vector3d = Startpunkt.GetAsVector
        Dim vecSehne As Vector3d = Startpunkt.GetVectorTo(Endpunkt)
        Dim vecSehnenMitte As Vector3d = Startpunkt.Add(vecSehne * 0.5).GetAsVector
        Dim vecSPZentrum As Vector3d = Startrichtung.GetPerpendicularVector
        Dim vecWinkelhalb As Vector3d = vecSehne.GetPerpendicularVector

        Dim D As Double = vecSPZentrum.Y * vecWinkelhalb.X - vecSPZentrum.X * vecWinkelhalb.Y
        '>>>Wenn D=0 ist, sind die beiden Vektoren Parallel und es gibt keinen Bogenmittelpunkt
        If D = 0 Then Return Nothing
        Dim Ds As Double = (vecSehnenMitte.Y - vecSP.Y) * vecWinkelhalb.X - (vecSehnenMitte.X - vecSP.X) * vecWinkelhalb.Y
        Dim s As Double = Ds / D

        Dim Zentrum As Point3d = Startpunkt.Add(s * vecSPZentrum)
        Dim Radius As Double = Startpunkt.DistanceTo(Zentrum)

        '>>>Wechsel von rechts- auf linksläufigen Bogen:
        If s < 0 Then
            Return Zentrum.Add(vecWinkelhalb * Radius)
        Else
            Return Zentrum.Add(vecWinkelhalb * -Radius)
        End If
    End Function


Code:

    ''' <summary> Wandelt einen CircularArc3d in einen Arc um </summary>
    Function convertArc2Arc(ByVal Bogen As CircularArc3d) As Arc
        Dim refVec As Vector3d = Bogen.ReferenceVector
        Dim Ebene As New Plane(Bogen.Center, Bogen.Normal)
        Dim Winkel As Double = refVec.AngleOnPlane(Ebene)

        Return New Arc(Bogen.Center, Bogen.Normal, Bogen.Radius, Bogen.StartAngle + Winkel, Bogen.EndAngle + Winkel)

    End Function


Hoffentlich wirst du schlau hieraus.

------------------
Gruß
Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 28. Mrz. 2010 21:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

nur um's zu verifizieren (Code hab ich jetzt nicht angesehen, denn bei Deiner Skizze hat's bei mir KLICK gemacht) und daher die Frage: wieso hat >>>dieses<<< nicht funktioniert, war doch die gleiche Aufgabe oder hat sich was geändert?

- alfred -

------------------
www.hollaus.at

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 28. Mrz. 2010 22:00    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

Hi Alfred,

das Problem von damals habe ich gelöst. Mein Code funktioniert, solange BKS=WKS ist.

Bei deinem Code bekomme ich, wenn ich ein vom WKS unterschiedliches BKS einstelle und die Testkoordinaten entsprechend auf dieses BKS ändere, die Meldung: "Bogenmittelpunkt ist nicht zu errechnen"

Der Code hilft mir also auch nicht weiter. Oder habe ich etwas übersehen?

Bleibt mir als Lösung nur noch zu überprüfen, ob BKS=WKS ist und mein Programm ansonsten abzubrechen?

------------------
Gruß
Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 28. Mrz. 2010 22:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ok, jetzt versteh ich. Und damit auch Dein Problem mit dem Code ==> Du nimmst nur einen Winkel an, aber dem Zeitpunkt, wo Du 3D unterwegs bist, hast Du aber zumindest 2 Winkel für die Startrichtung zu berechnen und davon alle abhängigen Winkel/Vektoren.

Beginnen wirst Du damit müssen, dass Du bei der Startrichtung sowohl den XY-Winkel wie auch den XZ- (oder YZ-)-Winkel mitbrauchst. Und ab hier wird alles eben dreidimensional zu rechnen sein.

- alfred -

------------------
www.hollaus.at

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 28. Mrz. 2010 22:23    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

Eine Frage habe ich aber noch, bevor ich alles 3-dimensonal ausrechne:

Angenommen das gewählte Objekt, von dem aus der Bogen starten will, liegt genau auf dem BKS.
Kann ich dann nicht alle berechneten Punkte mit einer Matrix vom WKS auf das BKS umrechnen lassen?

Mit soetwas kenne ich mich leider noch zuwenig aus...

------------------
Gruß
Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 28. Mrz. 2010 22:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi.

ja, es gibt eine Menge 'transform' Functions, die auch dazu verwendet werden, von BKS zu WKS und umgekehrt zu rechnen. Damit kannst Du gut mit Punkten rechnen, trotz allem sind da dreidimensionale Winkel und diese brauchst Du zuvor.

Wenn ich mich recht erinnere, ist in den CHM-Files (Hilfe-Dateien) von ObjektARX der Aufbau der Transformationsmatrizen detailliert erklärt.

- alfred -

------------------
www.hollaus.at

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 28. Mrz. 2010 22:35    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

OK. Dann werde ich mich mal schlau machen.

Vielen Dank für deine Tips!

------------------
Gruß
Markus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

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