Mit dem Catch-Mechanismus werden bei zwei Objekten lokale „benannte“ Punkte mit einem lokalen Achsensystem erstellt. Mit einem Programmaufruf werden diese zwei Koordinatensystem deckungsgleich übereinanderer gebracht.
.png)
Im obigen Beispiel werden die zwei kleinen Lokalen Achsensystem deckungsgleich übereinandergelegt. Beim Catch wird der Griff nicht nur positioniert sondern auch gedreht.
Catchpunkte definieren
Catchpunkte können auf zwei Arten angelegt werden:
DES-Files → Description-File
Programmtechnisch → AddCatchPointOrientation
Ein Catchpunkt besteht aus:
Position relativ zur Objektmatrix
Ausrichtung zur Objektmatrix
Name
Es muss für die Konfiguration der Catch-Name vom bewegenden Objekt und auch vom Zielobjekt bekannt sein. Ein vernünftiges Namensschema ist hier wichtig.
Catchpunkte werden relativ zur Objektmatrix (Nicht zu verwechseln mit der Position) angelegt. Jedes Objekt hat eine Objektausrichtung, eine Matrixposition und die Objektbox. Matrixposition und Objektbox müssen nicht übereinstimmen. Zu erkennen ist die am einfachsten in PLAN4, wenn Position und Absolut-Position nicht übereinstimmen:
.png)
Anlegen von Catchpunkten mit DES-Files
Das DES-File muss denselben Namen haben wie das A3d-File, und muss im selben Ordner abgelegt werden. Für jedes Objekt kann man dann einen Eintrag im DES-File schreiben.
Siehe Beispiel am Anfang → Die X-Achse schaut in X, die Y-Achse schaut nach oben (=Z), die Z-Achse schaut -Y (Aus dem Griff heraus) (Diese Verdrehung der Achse wird später erklärt.)
Inhalt eines DES-Files:
Object "Stange_L900_Halbrund_R"
{
Catch {
Delete Matrix = "BohrungZentrum";
Matrix = "BohrungZentrum", "Bohrung", 1,0,0, 0,0,1, 0,-1,0 , 12.5, 265, 650, FLAGS{INTERACTIVE};
Delete Matrix = "BohrungUnten";
Matrix = "BohrungUnten", "Bohrung", 1,0,0, 0,0,1, 0,-1,0 , 12.5, 265, 305, FLAGS{INTERACTIVE};
}
}
Rot = X-Achse
Grün = Y-Achse
Blau = Z-Achse
Gelb ist die Position
Programmtechnisches Anlegen der Catchpunkte
Mit dem Kernelbefehl „AddCatchPointOrientation“ kann ein Catchpunkt erzeugt werden. Um doppelte Catchpunkte zu vermeiden kann man mit „DeleteCatchInfo“ vorher Catchinformationen löschen.
Kernel.DeleteCatchInfo(objId, catchName)
Kernel.AddCatchPointOrientation(objId, catchName, "ProgammSnap", posX, posY, posZ, XAxisX,XAxisY,XAxisZ,YAxisX,YAxisY,YAxisZ)
Position und Achsenverdrehung
Die Flächenpunktnummerierung ist immer beginnend von links unten → gegen dem Uhrzeigersinn. (Ergänzung: Fläche = 5 = von Unten → Punkt 0 = links hinten, Punkt 2 = rechts hinten)
.png)
Das lokale Koordinatensystem ist in jeder Fläche gleicht definiert:
X-Achse geht von Punkt 0 Richtung Punkt 2
Y-Achse geht von Punkt 0 Richtung Punkt 6
Z-Achse zeigt aus der Fläche raus.
Wenn man einen Catchpunkt 100mm von der Fläche entfernt angeben will benötigt man offsetZ = 100.
GetBoxPointOrientationLocal
Kernel.GetBoxPointOrientationLocal( objId, boxFace, facePoint, offsetX, offsetY, offsetZ, rotateAngle, posX, posY, posZ, XAxisX, XAxisY, XAxisZ, YAxisX, YAxisY, YAxisZ )
objId = Kennzeichnung des Objektes
boxFace ( 0 -5 ) = Definition der Fläche
facePoint ( 0 – 8 ) = Definition des Punktes auf der Fläche.
offsetX, offsetY, offsetZ → Verschieben des Punktes auf dem lokalen Flächenkoordinatensystem.
rotateAngle → Winkel um welchen der Catchpunkt gedreht werden soll. (z.B. Griff vertikal, horizontal → Verdrehung um 90Grad)
Als Ergebnis erhält man die Position und die Verdrehung relativ zur Objektmatrix und man kann die Werte posX … XAxis… und YAxis… für den Befehl „AddCatchpointOrientation“ verwenden.
Beispiel:
Man möchte auf der rechten Seite mittig 100mm von unten einen waagrechten Stangengriff montieren.
boxFace = 1
bacePoint = 1 → (Unten in der Mitte)
offsetX = 0 → Keine Verschiebung links rechts
offsetY = 100 → Verschiebung um 100 nach oben (lokales Kordinatensystem)
offsetZ = 0 → Keine Verschiebung von Fläche weg.
rotateAngle = 90 → (In Abhängig von Griffmatrix → In unserem Beispiel muss der Griff gedreht werden)
Kernel. GetBoxPointOrientationLocal ( objId, 1, 1, 0, 100, 0, 90, posX, posY, posZ, XAxisX, XAxisY, XAxisZ, YAxisX, YAxisY, YAxisZ )
Kernel.DeleteCatchInfo( objId, catchName )
Kernel.AddCatchPointOrientation( objId, catchName, "ProgammSnap", posX, posY, posZ, XAxisX,XAxisY,XAxisZ,YAxisX,YAxisY,YAxisZ )
Ident mit GetBoxPointOrientationLocal gibt es auch „GetBoxPointOrientation“. Hier werden die gleichen Information, jedoch ins Weltkoordinatensystem umgerechnet geliefert.
Prüfen der Catchpunkte
In Plan4 werden Catchpunkte mit einem blauen Punkt markiert:
.png)
Im Debugdialog von OCX können die Definitonen der Catchpunkte ausgelesen werden:
.png)