找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
打印 上一主题 下一主题

[CAA] 关于CATIA消息响应(CATAttrNotification)

[复制链接]
11
发表于 2007-2-6 19:50:58 | 只看该作者
原帖由 acoka 于 2007-2-6 19:40 发表
有个笨方法

在addin里给每个asmproduct添加feature extension, 把他们的children的alias name以unicodestring形式保存

添加了children或删除后,你的ondel()会被呼叫,里头检测是否多了还是少了孩子,多了就 ...

呵呵,看来只能是硬生生把一个艺术家逼成小报记者了。
12
发表于 2007-2-6 21:01:48 | 只看该作者
原帖由 horizan 于 2007-2-6 19:50 发表

呵呵,看来只能是硬生生把一个艺术家逼成小报记者了。


. 看来这也是个办法, 能解决问题的一个办法
13
发表于 2007-2-7 16:34:43 | 只看该作者
Use the highlighting:

void MySubscriber::OnDelete(CATCallbackEvent iEvent,
                void *iFrom,
                CATNotification *iNotification, //CATCommandHeaderCommandStartedEvt
                CATSubscriberData iData,
                CATCallback iCallBack)
{
        CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
        if(pEditor)
        {
                CATHSO* pHso = pEditor->GetHSO();
                if(pHso)
                {
                        int size = pHso->GetSize();
                        if(size)
                        {
                                CATBaseUnknown* pBase = (*pHso)[0];
                                CATPathElement* pPath = (CATPathElement*)pBase;
                                if(pPath)               
                                {
                                        size = pPath->GetSize();
                                        for(int i=0; i<size; i++)
                                        {
                                                CATIProduct_var spPrd ((*pPath));
                                                if(!!spPrd)
                                                {
                                                        CATUnicodeString instName;
                                                        spPrd->GetPrdInstanceName(instName);
                                                        std::cout << "Delete: " << instName.ConvertToChar() << std::endl;
                                                }
                                        }
                                }
                        }
                }
        }
}
14
发表于 2007-2-7 17:23:27 | 只看该作者
这个ondel是在del完成后被呼叫的
object已经没了,取它的属性是不可能的吧

最好的解决方法就是可以找到一个catia在delete之前会先呼叫的断点
(CATIMechnicalCPP里的CanBeDel()会在被删除前呼叫,但MechnicalPart或ASMProduct好像没有这个I/F)
但即使有,这个东西也只是被呼叫来确认这个obj是不是被禁止删除,而不保证呼叫后它会被删除
15
发表于 2007-2-7 17:48:43 | 只看该作者
这个OnDelete响应的是CATCommandHeaderCommandStartedEvt,这时Delete应该还未被执行,因为事件CATCommandHeaderActivateEvt在CATCommandHeaderCommandStartedEvt之后产生.
16
发表于 2007-2-7 19:21:01 | 只看该作者
CommandStarted必须对应的是CommandHeader,而一个SpecObject根本没有这个Event。
17
发表于 2007-2-7 19:28:53 | 只看该作者
要我说干脆Entention接口lifeCyCleObject.
18
发表于 2007-2-7 20:42:21 | 只看该作者
可以用呀,只要你不坚持用attribute变化的notify

稍微修改一下就可以用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
19
发表于 2007-2-7 21:24:06 | 只看该作者
非常感谢xyzhu, acoka ,horizan(排名不分先后, )

确实是用, CATCommandHeaderCommandStartedEvt + CATHSO. 可以满足我的要求,解决问题!

先前放弃了CATCommandHeaderCommandStartedEvt ,是因为对这个事件不了解,手头查不到这个事件任何方法说明. 既然start是在active之前,
HSO是应该可以捕获到用户选择的对象

现在用这个方法已经可以解决问题了,也许还有别的方法....

再次感谢各位的大力热心帮助
20
发表于 2007-2-8 10:18:06 | 只看该作者
"CATCommandHeaderCommandStartedEvt"是CATCommandHeader宏CATDeclareCb(CommandStarted)的展开。
惭愧呀,偶压根没有想到去callback到delete这个command,还是太嫩了。
向xyzhu, acoka学习!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-24 20:55 , Processed in 0.023248 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表