装配对齐1
常用的装配方法中有两种,约束装配和坐标装配。约束装配涉及约束条件在开发中不易操做,坐标装配在开发中只需给定装配位置和矢量方向就能达到装配目的。
CAA开发中提供了CATIMovable接口支持开发者对组件的位置进行设置。开发者通过CATMathtransfomation.SetVector可以设置定位组件的原点,CATMath3x3Matrix.SetThridVector可以设置组件矢量方向。CATMath3x3matrix矩阵同时控制着组件的空间位置、比例。
这里我们便可以提出一个问题,已知装配位置CATMathPoint point1, 已知装配矢量CATMathVector vector1,已知目标组件CATIProduct product1.要求把product1装配到point1沿vector1方向摆放。
处理方法:
1.通过product1 获取CATIMobale接口,进而通过该接口获取和设置原点和向量矩阵。
2.需要把point1转为 CATMathVector.这里的CATMathTransformation.SetVector实际上是设置组件原点,也不知道为什么要这么命名这个方法。
3.需要把vector1转为向量矩阵,也就是得到这个矩阵的三个分量设置给CATMath3x3Matrix.
通过以上处理之后我们可以让product1的正Z方向沿vector1摆放。(这里我需要注明螺栓本身不是沿Z向摆放的,需要让螺栓方向与vector1重合还需要做进一步的处理。)
void SetProductPosition(CATIProduct *product1, CATMathPoint point1, CATMathVector vector1)
{
CATIMovable *pmovable = NULL;
product1->QueryInterface(IID_CATIMovable, (void **)&pmovable);
if(NULL != pmovable)
{
CATMathTransformation mathtrans;
pmovable->GetAbsPosition(mathtrans);
CATMath3x3Matrix matrix;
mathtrans.GetMatrix(matrix);
vector1.Normalize();
CATMathVector xvec, yvec;
CAA_MATH_ask_vertical_vec(vector1, xvec, yvec);
matrix.SetFirstColumn(xvec);
matrix.SetSecondColumn(yvec);
matrix.SetThirdColumn(vector1);
CATMathVector orgvec(point1.GetX(), point1.GetY(), point1.GetZ());
mathtrans.SetVector(orgvec);
mathtrans.SetMatrix(matrix);
pmovable->SetAbsPosition(mathtrans);
pmovable->Release();
}
}
装配对齐2
沿上。
有时候我们需要设置的对齐方向不是部件的正Z方向而是自己定义的方向。这里我给出我自己总结出来的处理方法。
1. 在product1 中发布一条直线,该直线作为目标设置值计算参考。
2. 实际上要装配的位置是在上一节之后要旋转的位置。
3. 假设向量vector2是螺栓部件中发布直线的向量值。vector1和vector2叉乘可以得到一个新的向量vector3。vector1所在的矩阵沿向量vector3旋转vector2到vector1的角度。新的矩阵matrix2才是该例子中需要的解。