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