找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

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

[CAA]如何捕获CATIA事件

[复制链接]
11
发表于 2007-1-24 18:27:09 | 只看该作者
原帖由 hick 于 2007-1-24 13:16 发表
addcallback ,有消息的Publisher和消息名称. 但是如果用addcallback, 我该放在什么地方呢, 该有个地方来调用初始化他才可以。

这个问题的答案是在你需要的地方。比如说,你自己定义了一个Class专门来添加 callback,以及处理消息。你可以在一个cmd的初始化函数中处理它,要知道你在Addin方式或其它方式添加Workshop/Workbench的时候会注册这个cmd,它就会同时将你的Class的一个实例创建出来,完成你的设定。当然你还可以在你需要的地方AdCallback。
不过我有一个问题,addcallback后,系统是否还能得到这个消息,也就是说是否现在你的callback托管了系统的这个消息?
12
发表于 2007-1-24 22:30:10 | 只看该作者
我试了一下,用AddCallback应该可以:

#include <TIE_CATIPRDWorkshopAddin.h>
TIE_CATIPRDWorkshopAddin(MyAddin);

#include <TIE_CATIAssyWorkBenchAddin.h>
TIE_CATIAssyWorkBenchAddin(MyAddin);

在CreateCommands中:

CATCommandHeader * pAfrDeleteHeader = NULL;
HRESULT hr = ::CATAfrGetCommandHeader("CATAfrDeleteHdr", pAfrDeleteHeader);
if(NULL == pAfrDeleteHeader)
        std::cout << "null header\n";
MyEventSubscriber* pMyEventSubscriber = new MyEventSubscriber;
//add callback
hr = ::AddCallback(pMyEventSubscriber ,pAfrDeleteHeader,
                "CATCommandHeaderCommandStartedEvt",
                (CATSubscriberMethod)&MyEventSubscriber::OnDelete,
                NULL);

MyEventSubscriber是一个继承CATBaseUnknown的类. 别忘了在dico中加入相应的Addin接口.
13
发表于 2007-1-25 10:57:35 | 只看该作者
事实上,例程CAAObjectModelBase里面有相关的代码。
Add...CB在重复使用在同一个消息上的时候,两个处理函数都将执行。因此,AddCallback或Add...CB只是注册了消息处理函数,没有托管系统消息,自己注册消息处理函数可能(没有测试过)会在系统处理之前完成。
14
发表于 2007-1-25 18:47:02 | 只看该作者
xyzhu, 照你说的做, 为什么我的代码就不可以呢?  或许错在什么地方

MyEventSubscriber.h

class MyEventSubscriber: public CATBaseUnknown
{
  CATDeclareClass;

  public:

  // Standard constructors and destructors
  // -------------------------------------
     MyEventSubscriber ();
     virtual ~MyEventSubscriber ();

void OnDelete    (CATCallbackEvent  iPublishedEvent,
                           void             *ipPublishingObject,
                           CATNotification  *ipPublishNotification,
                           CATSubscriberData iUsefulData,
                           CATCallback       iCallbackId );

  // Copy constructor and equal operator
  // -----------------------------------
  MyEventSubscriber (MyEventSubscriber &);
  MyEventSubscriber& operator=(MyEventSubscriber&);

};

void MyEventSubscriber::OnDelete    (  CATCallbackEvent  iPublishedEvent,
                                     void             *ipPublishingObject,
                                              CATNotification  *ipPublishNotification,
                                                     CATSubscriberData iUsefulData,
                                                  CATCallback       iCallbackId )
{
      cout<<"OK, Delete"<<endl;

}

addin中用的你的代码,CreateCommands 执行正确.

[ 本帖最后由 hick 于 2007-1-26 13:29 编辑 ]
15
发表于 2007-1-27 14:44:19 | 只看该作者
To hick:
hr = ::AddCallback(pMyEventSubscriber ,pAfrDeleteHeader,
                "CATCommandHeaderCommandStartedEvt",
                (CATSubscriberMethod)&MyEventSubscriber::OnDelete,
                NULL);
其中的"CATCommandHeaderCommandStartedEvt"应该替换为你所要Callback的消息,比如CATCommanderHeader::Actived()。
你的Callback没有执行,可能就是你的这个参数给的不对。
16
发表于 2007-1-29 17:00:44 | 只看该作者
试试加入CATIPrsConfigurationAddin
17
发表于 2007-1-30 17:44:29 | 只看该作者
To horizan :
  同样的addcallback,我如果做个extension impl, 就运行正确,可以获得删除消息. 所以应该不是addcallback参数的问题

To xyzhu:
  换个addin接口,依然存在同样的问题.应该和addin没多大关系.不过我可以试下CATIPrsConfigurationAddin


非常感谢俩位!
18
发表于 2007-1-30 19:55:04 | 只看该作者
直接addcallback的情况,我这里可以获得消息,没有问题。
搞不懂了。
19
发表于 2007-2-1 19:16:12 | 只看该作者
唉. 我也服了自己了, 陷入一个误区

改了个addin , CATIAssyWorkBenchAddin .  就可以监听我需要的消息了

再次感谢以上各位的热心帮助
20
发表于 2012-6-18 15:46:30 | 只看该作者
十分精彩,我想请问CATCommandHeaderCommandStartedEvt这个我怎么查不到?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-28 05:48 , Processed in 0.026324 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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