Hallo liebe CATIA-Experten,
ich habe ein Makro geschrieben, das mir erlaubt durch das Klicken auf ein "planar face" eines Bauteils ein neues Part auf dem Flächenschwerpunkt zu platzieren. Das funktioniert soweit ganz gut, allerdings kommt es bei der Ermittlung der Flächennormalen (die für die Bestimmung des benötigten Drehwinkels des zu platzierenden Parts notwendig ist) zu einem Fehler:
Die Flächennormale ermittele ich über
Code:
Dim Planecoord(8)
Measurable.GetPlane Planecoord
Dadurch erhalte ich den
ersten und zweiten Vektor der Fläche (Einträge 3 bis 5 bzw 6 bis 8 in Planecoord). Aus diesen Bilde ich dann das Kreuzprodukt um den Normalenvektor der Fläche zu erhalten.
Code:
normx = Planecoord(4) * Planecoord(8) - Planecoord(7) * Planecoord(5)
normy = Planecoord(5) * Planecoord(6) - Planecoord(8) * Planecoord(3)
normz = Planecoord(3) * Planecoord(7) - Planecoord(6) * Planecoord(4)
Dieser Zeigt nun aber scheinbar nicht immer aus dem Bauteil heraus, sondern manchmal hinein, was bei der Rotation des Objektes zu einem um 180° falschen Winkel führt.
Meine Frage lautet also: Kann ich auf diese Art und Weise überhaupt den aus dem Körper zeigenden Normalenvektor ermitteln, oder erkennt CATIA gar nicht wie die Flächen, aus denen der Körper besteht, orientiert sind?
Gibt es eventuell noch andere Möglichkeiten zur Ermittlung der Flächennormalen?
Falls hilfreich, hier noch mehr vom verwendeten Code. So greife ich auf die Daten über die Fläche zu:
Code:
Set Sel = CATIA.ActiveDocument.Selection
Set Sel2 = CATIA.ActiveDocument
Dim ObjektTyp(0)
ObjektTyp(0) = "PlanarFace"
Sel.Clear
Do ' Do...LOOP-Schleife
Auswahl = Sel.SelectElement2(ObjektTyp, "Positionierungsfläche auswählen...", False) ' Aufforderung Catia-Fenster unten links
If Auswahl = "Normal" Then ' wenn Auswahl erfolgt dann...
Set Objekt = Sel.Item(1)
'Daten erfassen--------------------------------------
'Flächeninhalt bestimmen
Dim spabench As SPAWorkbench
Dim mymeas As Measurable
Dim ref1 As Reference
Dim myans As Double
Set ref1 = Sel.Item(1).Reference
'Flächenorientierung bestimmen
Dim myans3 As Double
Set usersel2 = Sel.Item(1).Value
Set Inertia2 = spabench.Inertias.Add(usersel2)
Set part2 = Sel
Set Measurable2 = spabench.GetMeasurable(ref1)
Dim Planecoord(8)
Measurable2.GetPlane Planecoord
Vielen Dank im Voraus!
Loogic
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP