Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Ausrichtung Circle2D

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
Autor Thema:  Ausrichtung Circle2D (2534 mal gelesen)
roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 03. Dez. 2012 21:34    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 CAD.de-Gemeinde,

ich lese 2D-Elemente aus einem Sketch aus, darunter sind auch 2DCircle (also Kreise sowie Kreisbögen).

Ich kann durch die ausgelesenen Anfangs- und Endunkte sowie den Radien die geschlossenen Kreise bestimmen. Bei Kreisbögen ist mir aber nicht genau klar zu welcher Seite die Öffnung des Kreises liegt. Aus welcher Eigenschaft im Circle2D-Object kann ich das Auslesen?

Vielen Dank für Eure Hilfe

mfG
Mario

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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 05. Dez. 2012 17:31    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

Hallihallo,

ich habe noch etwas herum probiert und bin jetzt der Meinung das man die Öffnung des Bogens nicht einfach als Eigenschaft auslesen kann (Bitte korrigieren falls ich mich Irre).
Also müßte ich wohl die Öffnung des Bogens über Umwege bestimmen. Evtl. über eine Messung der Bogenlänge aber, was soll ich machen wenn die Bogenlänge genau die Hälfte ist des Kreisumfangs ist... 

Hat jemand eine andere Idee?

vielen Dank schonmal

mfG

Mario

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 05. Dez. 2012 19:14    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 Nur für roccat 10 Unities + Antwort hilfreich

Hallo roccat,

Wie soll das Ergebnis denn aussehen?

Mein Ansatz würde so aussehen...

1. Mittelpunkt über Start und Endpunkt berechnen
2. Startpunkt 90° um den Mittelpunkt rotieren

So kann man sich z.B. einen Vektor berechnen, der aus dem Bogen raus zeigt.

Gruß
  Mark

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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 05. Dez. 2012 20:20    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


Bild1.jpg


Bild2.jpg


Bild3.jpg

 
Hallo Mark,
und Danke für deine Antwort.

Zum Ergebnis:
Ich möchte einen oder mehrere Umrisse aus einem Sketch auslesen und damit einen Maschinencode (G-Code) erzeugen.

Siehe Bilder:
Bild 1 – Linienzug im Sketch
Bild 2 – Vorschauumriss, den ich im Programm generiere (Radien liegen im falschen Sektor)
Bild 3 – ein Linienzug der zufällig richtig interpretiert wird

Ich brauche also eine klare Definition der Radienöffnung.

Zu deinem Vorschlag:
Aus dem Circle2D-Object kann ich Problemlos den Startpunkt, Endpunkt, Mittelpunkt und Radius auslesen. Damit kann ich aber die Richtung nicht bestimmen.

Wenn ich dich richtig Verstanden habe soll ich den Startpunkt 90° um den Mittelpunkt drehen und dann prüfen ob der Punkt auf dem Bogen liegt, oder? Es könnten aber auch sehr kleine Bögen entstehen bei denen der Punkt auch nicht mehr auf dem Bogen liegt.

Ich habe in der Hilfe auch noch die Methoden GetCurvature und GetDerivatives gefunden, diese scheinen aber unter vba nicht zu funktionieren.

Hat damit schon jemand Erfahrungen?
mfG
Mario

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 05. Dez. 2012 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 Nur für roccat 10 Unities + Antwort hilfreich

Servus
Du könntest zB die Methode "GetParamExtents" nutzen um den Start- und Endwinkel (im Bogenmass) zu ermitteln, daraus kannst du wenn das noch nicht reicht noch mit "GetTangent" die Tangentenrichtung am Start- und Endpunkt ermitteln.
Da die Methoden als "restricted" definiert sind muss du den Kreis als Variant oder Objekt definieren (siehe auch hier):
Code:
Dim circle2D As circle2D
Set circle2D = geometricElements1.Item("Kreis.9")

Dim Obj_circle2D As Variant
Set Obj_circle2D = circle2D

Dim circle_angle(1) As Variant
Obj_circle2D.GetParamExtents circle_angle

Dim direction_tangent1(1) As Variant
Dim direction_tangent2(1) As Variant

circle2D1.GetTangent circle_angle(0), direction_tangent1
circle2D1.GetTangent circle_angle(1), direction_tangent2


Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

[Diese Nachricht wurde von bgrittmann am 05. Dez. 2012 editiert.]

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 06. Dez. 2012 00:50    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 Nur für roccat 10 Unities + Antwort hilfreich

Hallo,

mit dem Mittelpunkt meinte ich den Punkt zwischen Start und Endpunkt...nicht den Kreismittelpunkt. So kann man quasi ermitteln, wo die Öffnung liegt. Mit der Rotation kann man sich einen Vektor erzeugen, welcher aus dem Bogen raus zeigt. Dies wird Dir aber in diesem Fall nicht weiterhelfen.

Das Problem liegt hier in der Auswahl des richtigen G-Codes(G2/G3). Die Bögen folgen dabei einer festen Regel...vom Startpunkt geht es entgegen dem Uhrzeigersinn zum Endpunkt. Dies ist genau die Stelle, wo man ansetzen kann. Durch einen Vergleich des letzten Punktes(Endpunkt der vorigen Geometrie) mit dem Startpunkt des darauf folgenden Bogens kann die Richtung ermittelt werden. Sind diese identisch, geht es im entgegen dem Uhrzeigersinn weiter...also G3. Wenn nicht, müssen Start- und Endpunkt getauscht werden und es geht im Uhrzeigersinn weiter...also G2.

Entscheidend ist die Richtung, wie in den Bogen gefahren wird.

Gruß
  Mark

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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 06. Dez. 2012 06:34    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 Bernd, hallo Mark,

Danke für Eure Hilfe.

@Bernd
das könnte auch der Grund gewesen sein warum die GetCurvature und GetDerivatives Methoden nicht funktioniert haben. Das werde ich heute noch mal mit Variant versuchen. tausend Dank.

@Mark
ja, genau das ist mein Problem. Ich habe die G2/G3 Anweisung im Programm integriert, ich kann sie bloß noch nicht korrekt zuweisen. Ich habe die Geometrie bereits im Programm nach Start- und Endpunkte und nach Einzelkonturen in einem Array sortiert. Da ich aber die Mittelpunktbahn fräsen/gravieren möchte(also nicht G41/G42), kann es auch sein dass ich geöffnete Konturen habe. (z.B. nur einen Kreisbogen) Somit habe ich keinen letzen Punkt der vorhergehenden Kontur. Es wäre also wichtig allein aus dem Bogen die Info "ich verlaufe vom Startpunkt aus im Uhrzeigersinn oder entgegen" zu erhalten. Damit kann ich dann auch klar zwischen G2 und G3 entscheiden.

Ich werde mal mit den Info´s bissl was versuchen, ich melde mich dann nochmal.

tausend Dank

mfG
Mario

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 06. Dez. 2012 16: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 Nur für roccat 10 Unities + Antwort hilfreich

Hallo roccat,

leider hält sich Catia nicht immer an die Regeln, wie ich es gestern erst angenommen hatte. Ich habe mal etwas mit der Funktion "GetParamExtents" rumgespielt, welche Bernd vorgeschlagen hatte.

Vllt. hilft Dir der Ansatz etwas weiter...

Code:

Function GetCircleGCode(circle2D1 As Variant, dStartX As Variant, dStartY As Variant) As String

Dim coordCenter(1)
Dim circle_angle(1)
Dim dirVec(1)
Dim pktStart(1)
Dim pktEnd(1)
Dim pktRot(1)

    circle2D1.GetCenter coordCenter

    circle2D1.GetParamExtents circle_angle

   
    'Berechnung der Start-Endpunkte (entgegen Uhrzeigersinn)

    pktRot(0) = coordCenter(0) + circle2D1.Radius
    pktRot(1) = coordCenter(1)

    pktStart(0) = coordCenter(0) + (pktRot(0) - coordCenter(0)) * Cos(circle_angle(0)) - (pktRot(1) - coordCenter(1)) * Sin(circle_angle(0))
    pktStart(1) = coordCenter(1) + (pktRot(0) - coordCenter(0)) * Sin(circle_angle(0)) + (pktRot(1) - coordCenter(1)) * Cos(circle_angle(0))

    pktRot(0) = coordCenter(0) + circle2D1.Radius
    Y = coordCenter(1)

    pktEnd(0) = coordCenter(0) + (pktRot(0) - coordCenter(0)) * Cos(circle_angle(1)) - (pktRot(1) - coordCenter(1)) * Sin(circle_angle(1))
    pktEnd(1) = coordCenter(1) + (pktRot(0) - coordCenter(0)) * Sin(circle_angle(1)) + (pktRot(1) - coordCenter(1)) * Cos(circle_angle(1))

    'Vergleichen mit Eingangsdaten
   
    If (Abs(dStartX - pktStart(0)) < 0.1) And (Abs(dStartX - pktStart(0)) < 0.1) Then
   
        ' berechneter Endpunkt = Endpunkt
        GetCircleGCode = "G3" ' und irgendwas
       
    Else
   
        ' berechneter Startpunkt = Endpunkt
        GetCircleGCode = "G2" ' und irgendwas
       
    End If


End Function


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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 07. Dez. 2012 13:13    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 Mark,
tausend Dank für deine Mühe.

Ich hatte gestern nicht allzuviel Zeit, hab bloß mal kurz versucht zu verstehen was du da berechnet hast.

Ich glaube die if-Abfrage vergleicht zweimal den Anfangspunkt, ich glaube die zweite soll den Endpunkt vergleichen.

Ich schau's mir am Wochenende noch mal in Ruhe an.


Danke nochmal

mfG

Mario

[Diese Nachricht wurde von roccat am 07. Dez. 2012 editiert.]

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

roccat
Mitglied
Konstrukteur


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

Beiträge: 172
Registriert: 19.02.2010

WinXP/Win7
Office XP/2007
Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR
VB .Net 2010

erstellt am: 09. Dez. 2012 21: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


Bild4.jpg

 
Hi,

nach einigen Probieren ist hier mal meine Lösung. Ich Lese die Koordinaten für Anfangs und Endpunkt nicht mehr über ".EndPoint" und ".StartPoint" aus da diese je nach Erstellungsrichtung unterschiedlich sein können. Über ".GetParamExtents" bekommt man immer zuerst den kleinsten Winkel und dann den größeren Winkel zurück. Und dass immer Entgegen den Uhrzeigersinn. Somit habe ich die Richtung und über ".GetPointAtParam" lässt sich der Startpunkt und Entpunkt ermitteln.

Danke nochmal Euch beiden für Eure Hilfe.

Code:
Function CheckDirection(MyCircle As Variant) As Boolean

Dim MyAngle(1)  As Variant
Dim MyXY1(1)    As Variant
Dim MyXY2(1)    As Variant

'Start und Endwinkel holen
MyCircle.GetParamExtents MyAngle

'Koordinaten am Startwinkel holen
MyCircle.GetPointAtParam MyAngle(0), MyXY1


'Koordinaten am Endwinkel holen
MyCircle.GetPointAtParam MyAngle(1), MyXY2

'Drehrichtung ist immer entgegen dem Uhrzeigersinn
CheckDirection = True

End Function


mfG

Mario

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