iCAx开思工具箱

标题: 请教:如何利用CAA在CATIA中为product添加properties,并能够显示在属性页? [打印本页]

作者: zzzrrr    时间: 2006-3-9 20:42
标题: 请教:如何利用CAA在CATIA中为product添加properties,并能够显示在属性页?
CATIPrdProperties,CATIInstance ,CATIAttributesDescription  这几个接口都看了一下,没有找到能够添加属性的方法,不知道各位有没有高招?
作者: xyzhu    时间: 2006-3-11 00:08
这些Properties实际上存在CATICkeParameterSet下面。现在的问题是如何找出这个Set:
CATDocument --> CATInit --> CATInit::GetRootContainer("CATIContainer") --> CATIContainer:istMembersHere("CATICkeParameterSet", list)
在所有这些Set中找出其Name中含有Properties的那个,接下来就简单了, 用Parameters()可看到已有的Properties, 用CATIParmPublisher::Append可添加Properties。
作者: zzzrrr    时间: 2006-3-14 20:07
thank you xyzhu,I will try later.
作者: zzzrrr    时间: 2006-3-22 19:50
xyzhu你好。
添加新的property后,如何使它显示到属性对话框中呢?
我添加后,仅仅在product的parameterset里面新增了parameter.
作者: xyzhu    时间: 2006-3-22 22:22
A better way:
               CATIProduct* piInstanceProd = ....
               CATICkeParm_var spParm = ....
                CATIPrdProperties_var spProp(pInstanceProd);
                if(!!spProp)
                {
                        CATIParmPublisher* pPublisher = NULL;
                        spProp->GetUserProperties(pPublisher, TRUE);
                        pPublisher->Append(CATISpecObject_var(spParm));
                }

GetUserProperties is a "nodoc".
作者: zzzrrr    时间: 2006-3-29 21:03
xyzhu你好。你的办法我试了一下,没有成功。添加的parameter始终不能出现在property属性框里。
我看了一下user interface的内容,其中有个示例是为一个全新的feature添加属性页。整个例子涉及东西太多,我还没有理清楚。不知道你做过这方面的东西没有?
作者: acoka    时间: 2006-3-30 13:04
必须把你的parmeter给挂到一个type为Bom...的parameterSet下才可以看到
作者: xyzhu    时间: 2006-3-30 15:02
void AddProperties(CATIProduct* iInstanceProd, CATDocument * ipDoc)
{
        CATInit_var spInitOnDoc = ipDoc;
        if (NULL_var == spInitOnDoc)
        {
                cout << "Could not get init on doc.\n";
                return ;
        }
        CATIContainer * pCont =
                (CATIContainer*) spInitOnDoc->GetRootContainer("CATIContainer");
        CATICkeParmFactory_var spFact(pCont);
        if(NULL_var == spFact)
        {
                cout << "Could not get parm factory.\n";
                return;
        }

        CATUnicodeString key = "Key";
        CATICkeParm_var spParm = spFact->CreateString(key, "Hallo");
       
       
        CATIPrdProperties_var spProp(iInstanceProd);
        if(!!spProp)
        {
                CATIParmPublisher* pPublisher = NULL;
                spProp->GetUserProperties(pPublisher, TRUE);
                pPublisher->Append(CATISpecObject_var(spParm));
        }
}
作者: acoka    时间: 2006-3-30 16:36
其实是一码事,
GetUserProperties是nodoc的非公开method,所以用它而出现的问题无法向DS转嫁责任,实际上估计它内部也就是找type为BOMMANAGER的set
BOMMANAGER这个名字可以从BOM的interface里得到,用它检索出来的CATIParmPublisher如果出问题,可以说是DS的bug

改天有时间写个报告要求DS把这个nodoc去掉正式公开好了
作者: zzzrrr    时间: 2006-3-30 21:25
谢谢xyzhu兄,这次成功添加了属性,并能够正确显示。我今天终于弄明白了新属性页的添加方式,还想着明天来建立属性页与parameter之间的联系。晚上看到你的回复,问题一下就简化了,再次深表感谢!!

另外再问一下,正如acoka兄所说,这些都是非公开的method,对于此类方法你们是如何查到并获得其用法的呢?
去查CATIPrdProperties的头文件吗?
作者: yuqiong    时间: 2010-2-22 19:29
void AddProperties(CATIProduct* iInstanceProd, CATDocument * ipDoc)
{
        CATInit_var spInitOnDoc = ipDoc;
        if (NULL_var == spInitOnDoc)
        {
                cout << "Could not get init on doc.\n";
                return ;
        }
        CATIContainer * pCont =
                (CATIContainer*) spInitOnDoc->GetRootContainer("CATIContainer");
        CATICkeParmFactory_var spFact(pCont);
        if(NULL_var == spFact)
        {
                cout << "Could not get parm factory.\n";
                return;
        }

        CATUnicodeString key = "Key";
        CATICkeParm_var spParm = spFact->CreateString(key, "Hallo");
        
        
        CATIPrdProperties_var spProp(iInstanceProd);
        if(!!spProp)
        {
                CATIParmPublisher* pPublisher = NULL;
                spProp->GetUserProperties(pPublisher, TRUE);
                pPublisher->Append(CATISpecObject_var(spParm));
        }
}

请问我用上面的方法添加的属性怎么修改啊?
我用了CATIParmPublisher下的removechild方法删除参数可是没用。。。
作者: dufeng999    时间: 2010-8-15 18:13
qq群:CATIA交流  14722616
作者: yuhuimoon    时间: 2011-12-25 00:59
这帖子的内容正好用上,多谢各位分享
作者: goodtings    时间: 2012-8-9 19:01
为什么用v5r18,这种方法就不行了呢

作者: goodtings    时间: 2012-8-9 19:42
确实这个函数有bug。
作者: 文人可武    时间: 2014-6-10 16:49
楼主你好 请问利用CAA在CATIA中为part添加properties,并能够显示在属性页你知道怎么加呢?
作者: 文人可武    时间: 2014-6-10 16:50
xyzhu 发表于 2006-3-30 15:02
void AddProperties(CATIProduct* iInstanceProd, CATDocument * ipDoc)
{
        CATInit_var spInitOnDoc = i ...

product里面已经加好 请问利用CAA在CATIA中为part添加properties,并能够显示在属性页你知道怎么加呢,请高手指教?






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