iCAx开思网

标题: CAA如何状态转移 [打印本页]

作者: liuruixiao205    时间: 2006-2-24 09:54
标题: CAA如何状态转移
CAA里面好像不喜欢用回调函数(听别人说的:)),只是在命令类里面得到对话框的Notification然后执行某一个函数,但是存在状态转移的问题,我不知怎么解决。举例来说吧:对于对话框的cancel按钮,我的程序是
        _CancelAgent=  new CATDialogAgent("CancelAgent");
        _CancelAgent->AcceptOnNotify ( pi, pi->GetDiaCANCELNotification());
        CATDialogState *stState3 = AddDialogState("panel");
                       initialState -> AddDialogAgent (_CancelAgent);
             AddTransition( stState3 , NULL,
                 IsOutputSetCondition (_CancelAgent),
                 Action ((ActionMethod) &TCmd::ActionCancel));
如果打开对话框后什么也不做直接点cancel按钮想关闭对话框,因为状态还是stState1,就不会去执行ActionCancel函数。我想知道的是:如何做到不管当前处于哪个状态,只要点cancel按钮就自动转到stState3 ,然后执行ActionCancel函数。
作者: saeba    时间: 2006-2-24 11:05
AddTransition( stState3 , NULL, 。。。
为什么是stState3 呢?
你的CancelAgent明明在initialState里呀:
initialState -> AddDialogAgent (_CancelAgent);

>CAA里面好像不喜欢用回调函数(听别人说的:))
听我说的吧,呵呵。
其实也不能这么说,只是因为用途不同:
command里面回调函数主要用于UI方面的控制(比如输入检查之类)
而涉及到transation,回调函数就不如Agent强大了,反而有时会捣乱(比如flyerfang的例子)

终于,偷偷安装IME了。
就是觉得打中文慢。
作者: liuruixiao205    时间: 2006-2-24 12:24
呵呵,谢谢saeba兄,我用几个state是用来选不同的物体,选完一个对象后从initialState跳到下一个state,还没调试好。能不能贴点BuildGrath里面选几个对象(比如一个agent选面一个agent选线)的代码看看,这一部分的机制到现在也不太明白。
还有就是在命令结束时能不能在回调函数中把命令设为非活动状态,(我想在回调函数中把状态设为空能行吗?)
作者: saeba    时间: 2006-2-24 13:13
抱歉,我现在手头上已经没任何CAA/CATIA的东西了(转行了,呵呵)
我记得我给你发过的信里应该有这样的例子。

>把命令设为非活动状态
是什么意思?是指让图标变灰吗?这应该是对Addin(toolbar)的操作,以前找过但没找到方法。
>我想在回调函数中把状态设为空能行吗?
是指把state设成NULL吗?可是state被设成NULL仅仅意味着command结束。。。(和活动状态没有关系呀。。。而且命令结束的话,state就已经是NULL了)
作者: xinghesnak    时间: 2006-2-24 17:02
saeba兄,这么高的水平你怎么转行了呢?是不是CAA没有什么前途啊,打击中.......
作者: saeba    时间: 2006-2-24 17:10
实在是干烦了.
倒也不能说就没有前途,
喜欢的人还是很喜欢的,我是属于恨之入骨一类的,呵呵
作者: liuruixiao205    时间: 2006-2-27 09:33
还是不行呀,就是说我有两个state :state1、state2,有没有得到当前的state的函数,我才能吧它置空(或者干脆把所有的state 都置空行吗?)




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