当方加工屋のため、加工対象となる形状が製品基準ではなく
こちらの都合の良いように配置し、CAM側に投げる事が多々あります。
古いリリースでは、GSDにしか座標変換のコマンドが無かったのですが、
今はPartデザインにもあるため、イチイチ移動させ回転させ・・等
面倒な事はせず、座標変換を利用するのですが、うっかり座標系を
左手で作成してしまうと、本来の形状の対象形状になってしまいます。
(一度、客先に納品後 "これ反転形状じゃない?" と指摘された事が・・・)
基本的に右手しか使用しない為、ミス防止のためにPartファイル内の座標系
全てをチェックするマクロを以前作成しました。
'VBA 左手系座標軸の存在チェック Sub AxisCheckStart() Dim ActiveDoc As Document Dim oPart As Part Dim msg As String Dim Leftmsg As String Set ActiveDoc = CATIA.ActiveDocument Set oPart = ActiveDoc.Part Dim oAxis As AxisSystem Dim Res As String msg = "" Leftmsg = "していません" For Each oAxis In oPart.AxisSystems msg = msg + oAxis.Name + " : " Res = RightOrLeft(oAxis) If Res Then msg = msg + "左手系座標軸" + vbCrLf Leftmsg = "しています!!" Else msg = msg + "右手系座標軸" + vbCrLf End If Next MsgBox ("左手系座標軸が存在" + Leftmsg + vbCrLf + vbCrLf + msg) End Sub Private Function RightOrLeft(ByVal axisSystem1) As Boolean Dim vectorXCoord(2) Dim vectorYCoord(2) Dim vectorZCoord(2) Dim outer(2) As Double Dim rightLeftCheck As Double axisSystem1.GetXAxis vectorXCoord axisSystem1.GetYAxis vectorYCoord axisSystem1.GetZAxis vectorZCoord ' X軸からY軸への外積を求める outer(0) = vectorXCoord(1) * vectorYCoord(2) - vectorXCoord(2) * vectorYCoord(1) outer(1) = vectorXCoord(2) * vectorYCoord(0) - vectorXCoord(0) * vectorYCoord(2) outer(2) = vectorXCoord(0) * vectorYCoord(1) - vectorXCoord(1) * vectorYCoord(0) ' 求めた外積とZ軸との内積を求める rightLeftCheck = vectorZCoord(0) * outer(0) + vectorZCoord(1) * outer(1) + vectorZCoord(2) * outer(2) ' 正負で判定 If rightLeftCheck > 0 Then RightOrLeft = False ' "right" Else RightOrLeft = True ' "left" End If End Function
以前、"Unofficial CATIA User Forum" で色々とアドバイスしてもらいました。
外積・内積を利用する事で判断可能とのことです。
・・・もちろん、マクロを作成している暇がない為のつなぎです。