Hallo,
habe leider kein Part internes Beispiel, habe nur ein Produktübergreifendes Beispiel. Die Vorgehensweise ist aber ähnlich.
Das Makro gibt dir die Koordinnaten eines Punktes im Rootprodukt.
Zum testen folgende Struktur aufbauen:
RootProd
|
|-SubProd1
|
|-SubProd2
|
|-Part (mit Punkt)
SubProd1, SubProd2 und Part im Raum verschieben (mit 3D constraints oder Kompasss)
Makro starten, Punkt selektieren. Als Ergebniss kriegst du die Koord vom Punkt im Rootprodukt. Über eine Schleife und Transformationen werden die Koordinnaten des Punkts im obersten Produkt berechnet.
Sub CATMain()
Set osel = CATIA.ActiveDocument.Selection
osel.Clear
Dim afilter(0)
afilter(0) = "Point"
Status = osel.SelectElement(afilter, "Select a point.", False)
Set opoint = osel.Item(1).Value
osel.EndSelectElement
Dim acoord_in_part(2)
opoint.GetCoordinates acoord_in_part
Dim acoord_part_in_product(11)
Dim acoord_product_in_sub_product(11)
Dim atmp(2)
Dim acoord_in_product(2)
osel.Clear
osel.Add opoint
Set opart_product = osel.FindObject("CATIAProduct")
opart_product.Position.GetComponents acoord_part_in_product
acoord_in_product(0) = acoord_part_in_product(0) * acoord_in_part(0) + acoord_part_in_product(3) * acoord_in_part(1) + acoord_part_in_product(6) * acoord_in_part(2) + acoord_part_in_product(9)
acoord_in_product(1) = acoord_part_in_product(1) * acoord_in_part(0) + acoord_part_in_product(4) * acoord_in_part(1) + acoord_part_in_product(7) * acoord_in_part(2) + acoord_part_in_product(10)
acoord_in_product(2) = acoord_part_in_product(2) * acoord_in_part(0) + acoord_part_in_product(5) * acoord_in_part(1) + acoord_part_in_product(8) * acoord_in_part(2) + acoord_part_in_product(11)
Set oparent_product = opart_product.Move.Parent.Parent
Do
oparent_product.Position.GetComponents acoord_product_in_sub_product
atmp(0) = acoord_in_product(0)
atmp(1) = acoord_in_product(1)
atmp(2) = acoord_in_product(2)
acoord_in_product(0) = acoord_product_in_sub_product(0) * atmp(0) + acoord_product_in_sub_product(3) * atmp(1) + acoord_product_in_sub_product(6) * atmp(2) + acoord_product_in_sub_product(9)
acoord_in_product(1) = acoord_product_in_sub_product(1) * atmp(0) + acoord_product_in_sub_product(4) * atmp(1) + acoord_product_in_sub_product(7) * atmp(2) + acoord_product_in_sub_product(10)
acoord_in_product(2) = acoord_product_in_sub_product(2) * atmp(0) + acoord_product_in_sub_product(5) * atmp(1) + acoord_product_in_sub_product(8) * atmp(2) + acoord_product_in_sub_product(11)
Set oparent_product = oparent_product.Move.Parent.Parent
Loop Until CATIA.ActiveDocument.Product.Name = oparent_product.Name
spart = "The coordinates of the point in his Local Part are:" & vbCrLf & vbCrLf & "X=" & acoord_in_part(0) & vbCrLf & "Y=" & acoord_in_part(1) & vbCrLf & "Z=" & acoord_in_part(2) & vbCrLf & vbCrLf
sproduct = "The coordinates of the same point in the Global Product are:" & vbCrLf & vbCrLf & "X=" & acoord_in_product(0) & vbCrLf & "Y=" & acoord_in_product(1) & vbCrLf & "Z=" & acoord_in_product(2)
MsgBox spart & sproduct
End Sub
Falls du es nicht hin kriegst, kann ich dir ein Skript schreiben was dir die Koord von einem Punkt in einem anderen AS als das Absolute umwandelt (Part intern). Falls ich richtig verstanden habe was du brauchst....
Gruß,
Prosper
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP