iCAx开思网

标题: CATIA&CAA中如何利用零件中发布(Publication)的几何对象进行装配约束? [打印本页]

作者: chengongcumt    时间: 2005-12-25 11:22
标题: CATIA&CAA中如何利用零件中发布(Publication)的几何对象进行装配约束?
CATIA&CAA中如何利用零件中发布(Publication)的几何对象进行装配约束?(以前讨论过的问题,一直未解决,请高手门再关注一下!)
将一个螺栓零件中发布的轴线与用户选择的另一个零件上的孔轴线在程序中添加约束.用方式1时,再调用用 CreateConstraint添加约束,装配树

中可以看到约束被添加上了,但是查看约束属性时,螺栓零件的几何对象类型为"Unknown",故约束无效,实际上我已经将GetFinalObject获得的对

象转为CATLine了啊.而用方式2时,获得的pConnectorAxisOnBolt也不为空,但是用 CreateConstraint添加约束时则出现错误.问题的关键是
CATIPrdObjectPublisher对象的GetFinalObject或GetDirectObject获得的对象到底是什么,如何获得所发布几何对象的装配联接对象

CATIConnector*...请各位高手指教!!不胜感激!
       
        CATIPrdObjectPublisher *pDocPublisher=NULL;       
        rc=piInstanceProd->QueryInterface(IID_CATIPrdObjectPublisher, (void**)&pDocPublisher) ;
        //piInstanceProd为零件插入装配体的装配实例
        if( FAILED(rc) )
        {
                cout << "Error, the CATIPrdObjectPublisher is not found!!!!"<< endl;
                return FALSE;
        }       
       
        CATIConnector* pConnectorAxisOnBolt=NULL;
       
        if(pDocPublisher!=NULL)
        {               
                CATBaseUnknown *pAssObjInPub=NULL;
                CATUnicodeString oSubPublicationName;
                CATISpecObject_var pTestvar(NULL_var);
                if((pAssObjInPub=pDocPublisher->GetFinalObject("BOLT_ASS_AXIS"))!=NULL)       
                //“BOLT_ASS_AXIS”为发布的一个轴线对象
                //if((pDocPublisher->GetDirectObject("BOLT_ASS_AXIS",(CATBaseUnknown*&)pAssObjInPub,oSubPublicationName))==1)
                {                       
                        CATLine *axis;
                        //pAssObjInPub->QueryInterface(IID_CATLine,(void**)&axis);

                        //方式1——————————————————————————————————
                        axis=(CATLine*)pAssObjInPub;
                        pTestvar=axis;
                        CATILinkableObject_var  geometry1;
                        geometry1=pTestvar;
                        int iCreation=0;
                        GetProductConnector(geometry1,
                                                                   piInstanceProd,                                          
                                                                   iActiveComponent,
                                                                   0,
                                                                   pConnectorAxisOnBolt,   
                                                                   iCreation); //获取了pConnectorAxisOnBolt
                        //方式2——————————————————————————————————
                        //pConnectorAxisOnBolt=(CATIConnector *)pAssObjInPub;


                        //查看是否能获得装配连接对象pConnectorAxisOnBolt
                        if(pConnectorAxisOnBolt==NULL)//
                                cout<<"不能发现轴线:BOLT_ASS_AXIS装配连接对象!"<< endl;
                        else
                        {
                                cout <<"发现了轴线:BOLT_ASS_AXIS装配连接对象!"<< endl;
                        }
                        //piInstanceBolt=piInstanceProd;                       
                }
                ......
作者: chengongcumt    时间: 2005-12-25 11:24
标题: 以前讨论过的问题
以前讨论过的问题,一直未得到解决,还请各位高手再关注一下,提供一些思路,谢谢!!
作者: chengongcumt    时间: 2005-12-25 11:39
标题: 请指教
acoka、saeba、 cms_nuaa等CAA高手,请指教!
作者: chengongcumt    时间: 2005-12-27 17:50
请大家给点意见啊!谢谢了!
作者: chengongcumt    时间: 2005-12-28 14:44
标题: 终于解决了
终于解决了,原来需要"折腾"一下:
pConnectorAxisOnBolt=(CATIConnector *)pAssObjInPub;
得到的轴线,或装配面不能直接使用,需下面的代码:
CATILinkableObject_var link1(NULL_var);
pConnectorAxisOnBolt=(CATIConnector *)pAssObjInPub;
link1=pConnectorAxisOnBolt->GiveReferenceObject();
pConnectorAxisOnBolt=GetConnectorByLinkableVar(link1,piInstanceProd,iActiveComponent);
GetConnectorByLinkableVar为自定义函数,就是用GetProductConnector获取CATIConnector *
不知为什么获得的pConnectorAxisOnBolt不能直接使用。我用的零件模型是CATIA自带的模型库,不知是否是模型的问题还是CATIA&CAA(V5R11)的问题。自己做的模型,对于发布的轴线来说或得的pConnectorAxisOnBolt可以直接使用,但是对于发布的平面好象还是不行,还需要这样"折腾"一下。不知为什么,如果哪位高手知道,请告之一下,谢谢!!
作者: 谷中人之风舞    时间: 2012-10-13 21:51
和你遇到过同样的问题,也是这样解决的,包括圆心的相合约束。想继续请教:你可以通过轴线找到所在的Component或者零件吗?




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3