iCAx开思工具箱

标题: CAA中如何删除零件中的中的关系、表?? [打印本页]

作者: chengongcumt    时间: 2005-9-14 14:39
标题: CAA中如何删除零件中的中的关系、表??
获取了零件的CATIParmPublisher指针,然后可以取得表pDeleteSheet ,已经能够对表pDeleteSheet读取数据,但是删除时 pIParmPublisher->RemoveChild(pDeleteSheet );出错!!删除关系也是出错。而在CATIA中交互操作时,这些表、关系是可以删除的。不知为什么?请高手指教!不胜感激!!
作者: along533    时间: 2005-9-14 15:49
爱慕难助
作者: chengongcumt    时间: 2005-9-14 16:24
谢谢关注。请高手指教啊!
作者: chengongcumt    时间: 2005-9-16 08:34
各位请帮忙啊!拜托!先谢谢了!
作者: chengongcumt    时间: 2005-9-16 09:23
acoka、saeba、xyzhu等CAA高手,你们最近很忙吗?不知能否帮我解决这个问题啊!谢谢!!
作者: saeba    时间: 2005-9-16 10:32
我没有做过sheet的经验,说说我的想法:
不知道你的relation是怎么做成的,我想可能是先做一个sheet,再把这个sheet当作参数来做一个relation吧。
删除的时候,应该是两个都要删,顺序嘛,试试看吧
但是似乎,你的情况是两个都出错?
出错不要紧,看看出错的信息就知道什么原因了。试试CATError这个类吧:
CATError::CATCleanLastError();
//Do you delete
//rc = pPublisher->RemoveChild(...);
CATError *pMyError = CATError::CATGetLastError(rc);
cout << "Error message : " << pMyError->GetNLSMessage << endl;
如果还是看不出什么问题,把你的source发上来给大家看看吧,
最好,生成和删除的部分都有。

>>最近很忙吗?
是啊,最近作了一个很恶心的活儿
话说回来了,CAA的活儿哪个不恶心。。。
作者: chengongcumt    时间: 2005-9-16 18:00
非常感谢saeba的热心帮助!!并祝中秋节快乐!
作者: chengongcumt    时间: 2005-9-16 18:05
表是在CATIA中交互生成的,不是在CAA中用代码生成的。就是已有的包含参数表的模型(标准件),用CAA获得表,然后想在CAA中删除,主要是标准件实例化后不想在包含表了,就象CATIA的CATALOG实例化一样,实例化零件中包含了表会有一些问题。
作者: chengongcumt    时间: 2005-9-16 18:11
相关代码如下:
CATISpecObject_var spSpecObjectPart = pSpecContainer1->GetPart();
    if ( NULL_var == spSpecObjectPart )
        {
                cout << "The MechanicalPart is NULL"<< endl;
                rc = E_FAIL ;
    }
        else              
        {
                CATIParmPublisher * pIParmPublisher = NULL ;                  
                rc = spSpecObjectPart->QueryInterface(IID_CATIParmPublisher,
                                                         (void **) &pIParmPublisher);                  
                if ( SUCCEEDED(rc) )                  
                {
                        CATLISTV (CATISpecObject_var) DesignTableList ;
                        pIParmPublisher->GetAllChildren("CATIDesignTable",DesignTableList);
                        NbDesignTable = DesignTableList.Size();
                        if ( NbDesignTable >= 1 )
                        {
                                CATISpecObject_var specObj = DesignTableList[1] ;
                                CATIDesignTable_var  opDesignTable(NULL_var);
                                rc = specObj->QueryInterface(IID_CATIDesignTable,(void**)& opDesignTable);
                                if(opDesignTable!=NULL_var)
                                {
                                        CATICkeSheet_var pDeleteSheet=opDesignTable->Sheet ();
                                                int ColumnNum =pDeleteSheet->Columns ();
                                                int i;
                                                for(i=1;i<=ColumnNum;i++)
                                                        opDesignTable->RemoveAssociation (pDeleteSheet->Cell(1,i));
                                                //pIParmPublisher->RemoveChild(pDeleteSheet );///删除表,有问题!!
                                }                               
                        }                       
                        pIParmPublisher->Release();                     
                        pIParmPublisher = NULL ;                  
                }              
        }


请各位高手指教!!谢谢!
作者: xyzhu    时间: 2005-9-16 20:04
试试这样行不行:

if ( NbDesignTable >= 1 )
           pIParmPublisher->RemoveChild(DesignTableList[1]);

直接删DesignTable.

还有个小问题:
CATISpecObject_var specObj = DesignTableList[1] ;
CATIDesignTable_var  opDesignTable(NULL_var);
rc = specObj->QueryInterface(IID_CATIDesignTable,(void**)& opDesignTable);
可直接写成:
CATISpecObject_var specObj = DesignTableList[1] ;
CATIDesignTable_var  opDesignTable(specObj);

SmartPointer 就是用来省去QueryInterface的麻烦.
作者: acoka    时间: 2005-9-17 01:40
为什么用RemoveChild呢?把这个表和普通的feature一样用CCP或LifeCycle不能删除?

最近被借去做手机的数据库,估计下星期为止。那地方连网都上不了,干活都是unix和oracle,天天vi,

所有cad/cam的客户都很自我中心,客户的spec要求书是从使用者的角度出发的
什么都听客户的,最后自己会很被动。对不符合实际或系统逻辑的要求,必须说服客户,说请利弊,并且提出代替方案
双方都做出一定妥协后,估计工时,在开始写基础设计书,详细设计书和测试设计书
在我这里,比如一个 1个人做3个月的命令,基本上编程也就是2-3周,其他时间都是做调查,写设计书,做测试
作者: chengongcumt    时间: 2005-9-19 10:27
谢谢xyzhu :   pIParmPublisher->RemoveChild(DesignTableList[1]);我原来也试过的,行不通啊。
acoka 提供的思路我再试试!非常感谢!
作者: chengongcumt    时间: 2005-9-19 14:44
用CCP方法确实把表删除了,非常感谢acoka兄!祝一切顺利!
作者: hoobye    时间: 2009-6-19 16:38
你好,怎么删除的呢?可以把这段代码放上来看看吗?谢谢
作者: liu1513    时间: 2009-6-25 09:01
好东西支持
作者: y分建    时间: 2009-8-30 04:26
标题: 很不错
美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频 美女视频




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3