iCAx开思网
标题:
CAA中用GetAbsPosition能得到零件在装配中的位置么?
[打印本页]
作者:
cms_nuaa
时间:
2005-6-11 10:04
标题:
CAA中用GetAbsPosition能得到零件在装配中的位置么?
在CATIA的装配环境下,我想得到一个Part在装配中的绝对位置矩阵,如果我用程序来设定其位置(SetAbsPosition),则用GetAbsPosition能得到其位置矩阵;但是如果用CATIA的移动命令对Part进行操作后,再用GetAbsPosition得到的仍然是其原始的位置(原点)。程序如下:
CATMathTransformation LaterAbposition;
HRESULT rc2 = spReferenceProduct->QueryInterface(IID_CATIMovable, (void**) [$piMovableInBody2)]
if( SUCCEEDED(rc2))
{
rc = piMovableInBody2->GetAbsPosition(LaterAbposition);
double iCod[12];
LaterAbposition.GetCoef(iCod);
for(int i=0;i<12;i++)
cout<<"-------"<<iCod
<<endl;
}
请问原因何在?是我的程序有问题还是这种做法本身有问题?
作者:
cms_nuaa
时间:
2005-6-14 09:35
没人关注么?
作者:
hick
时间:
2005-6-14 09:52
不能,只能得到在绝对坐标系中的坐标
而非当前坐标系下,必须transf
CATMathTransformation,
CATDynTransformation
作者:
cms_nuaa
时间:
2005-6-14 10:01
不明白hick的意思。能否讲清楚点?
我的目的,是需要得到零件在装配环境下的位置。此位置对我是未知的,我如何transf ?
作者:
hick
时间:
2005-6-14 10:13
得到当前part的CATMathTransformation *ops,
然后
CATDynTransformation* pTrans =CATCreateDynTransformation( CATGeoFactory* iFactory, CATTopData* iData, CATBody* BodytoTransform) ;
pTrans->SetTransformation( *ops);
pTrans->Run();
CATBody * =pTrans->GetResult( ) ;
作者:
cms_nuaa
时间:
2005-6-14 10:24
看来是我的问题没有问清楚。实际上您所说的转换,我用CATTransfoManager也可以做到。
我的问题在于当前part的CATMathTransformation *ops的获得。
比如,在当前装配环境下,调入Part1,其所在位置矩阵为:(1000,0100,0010)。在CATIA中移动其位置(此移动为用户操作)后,我如何得到其现在位置的CATMathTransformation?使用CATIMovable->GetAbsPosition得到的矩阵仍然为:(1000,0100,0010)。
原因在哪里?
作者:
hick
时间:
2005-6-14 10:30
可以得到当前的transf
然后与你的absPosition相乘
应该是3x3 乘上个3x4 的矩阵(没记错的话)
就是当前的绝对坐标,实际是个坐标变换问题
作者:
hick
时间:
2005-6-14 13:32
错了点,是1x3
欢迎光临 iCAx开思网 (https://www.icax.org/)
Powered by Discuz! X3.3