iCAx开思网
标题:
选择product下的某个对象
[打印本页]
作者:
124225512
时间:
2010-7-5 20:46
标题:
选择product下的某个对象
求
part1
和
part2
中心的距离
现在就是选择part1和part2的问题
发现现在只有点击树上的名字才能选中,在对话框中显示
part1.1
和
part2.2
,如图
1
如果直接点击模型,反而不能显示,如图
2
,似乎点击模型时只选中了面,不知道怎么上传图。。。笨死啦。。。
请问该怎么设置?才能不管是点击树还是模型都能在对话框中显示模型的名字
我现在写的程序是
{
_Body1Agent = new CATPathElementAgent ("Body1Agent");
_Body1Agent -> SetBehavior( CATDlgEngRepeat|CATDlgEngWithPSOHSO
);
_Body2Agent = new CATPathElementAgent ("Body2Agent");
_Body2Agent -> SetBehavior( CATDlgEngRepeat|CATDlgEngWithPSOHSO
);
_OKAgent=
new CATDialogAgent("OK Agent");
_OKAgent->AcceptOnNotify ( _Panel, _Panel->GetDiaOKNotification());
_CancelAgent=
new CATDialogAgent("Cancel Agent");
_CancelAgent->AcceptOnNotify ( _Panel, _Panel->GetDiaCANCELNotification());
// Define State
CATDialogState * FirstState = GetInitialState(" Select a Body1 ");
CATDialogState * SecState = AddDialogState(" Select a Body2 ");
// Plug Agent to the State
FirstState -> AddDialogAgent (_Body1Agent);
FirstState -> AddDialogAgent (_Body2Agent);
FirstState -> AddDialogAgent (_CancelAgent);
SecState -> AddDialogAgent (_Body2Agent);
SecState -> AddDialogAgent (_OKAgent);
SecState -> AddDialogAgent (_CancelAgent);
// Define transiton with condition and Action( optional)
AddTransition( FirstState, SecState,
IsOutputSetCondition (_Body1Agent),
Action ((ActionMethod) &FirstSpringBpdCmd::ActionOne));
AddTransition( SecState,SecState,
IsOutputSetCondition (_Body2Agent),
Action ((ActionMethod) &FirstSpringBpdCmd::ActionTwo));
AddTransition(SecState, NULL,
IsOutputSetCondition (_OKAgent),
Action ((ActionMethod) &FirstSpringBpdCmd::OKAction));
AddTransition( SecState, NULL,
IsOutputSetCondition (_CancelAgent),
Action ((ActionMethod) &FirstSpringBpdCmd::CancelAction));
}
ActionOne
函数里是这样写的:
ActionOne( void *data )
{
cout<< " Action one "<<endl;
//retrieve new selected
CATBaseUnknown *piUnknown = _Body1Agent->GetElementValue();
_spBody1 = NULL_var;
_spBody1 = piUnknown;
CATISpecObject_var spSpecOnBody1 =_spBody1;
_SelectorList003->SetLine(spSpecOnBody1->GetName(),0,CATDlgDataModify);
// Initiliase the acquisition
_Body1Agent->InitializeAcquisition();
return TRUE;
}
作者:
124225512
时间:
2010-7-5 20:48
附件中有图。。。希望好心人解答。。。谢谢啦
1#
124225512
作者:
歆韵
时间:
2010-7-6 10:22
将CATPathElementAgent 换成CATFeatureImportAgent
CATPathElementAgent 一般只能从结构树上选择得到需要的元素,CATFeatureImportAgent可以从结构树或者文档中直接点击模型进行选择
_Body1Agent = new CATFeatureImportAgent("Body1Agent");
_Body1Agent -> AddOrderedElementType("CATIGSMTool");
_Body1Agent -> SetBehavior( CATDlgEngRepeat|CATDlgEngWithPSOHSO);
看了你的附件,你在程序中要求选择的是两个Part文档,属于同一种类型,不需要定义两个_BodyAgent
你的代码有几个问题:
1、用你的方法来定义,你可以从第一状态跳到第二个状态,但不能从第二个状态跳到第一个状态,若第一个选择出现错误,你则不能重新选择;
2、若是选择之后,对第一个进行修改,你必须还要再选择第二个才能点击OK
3、在CATIA中一般选择一个元素,只对当前的进行高亮显示,之前选择的不高亮。但你选择的元素都会呈现高亮状态
作者:
124225512
时间:
2010-7-6 11:18
你说的问题都是在的,我用CATFeatureImportAgent也试过,但是在这个项目中有时需要选择的是两个part,有时选择的是几个part组成的product,如果用CATFeatureImportAgent中SetOrderedElementType限定为三维时,似乎只能在树中点击零部件下面的分支才能选中,请问这个应该如何解决呢?
以及刚刚你提到的几个问题:
1、用你的方法来定义,你可以从第一状态跳到第二个状态,但不能从第二个状态跳到第一个状态,若第一个选择出现错误,你则不能重新选择
——这个问题困扰我很久了,改了很多次都不知道怎么实现跳转
3、在CATIA中一般选择一个元素,只对当前的进行高亮显示,之前选择的不高亮。但你选择的元素都会呈现高亮状态
——这个是我设置上的错误,没有看明白百科全书中到底用哪个参数好
谢谢~~
3#
歆韵
作者:
歆韵
时间:
2010-7-7 09:15
选择Part或是Product的我自己没有做过,你可以尝试写几个AddOrderedElementType的方法,把你需要选择的类型都添加进去
状态变换的问题:对选择的是一种类型的元素只定义一个State(无论选择的元素有几个),但对存放选择元素的每个Editor都添加Agent(存放相同类型的元素的Editor),当选择出现错误时,用鼠标点击到相应的Editor后再进行选择。具体实现代码太多
高亮显示问题:使用CATHSO接口
其实你现在出现的问题我以前都遇到过,我们也是在前段时间才解决
作者:
dufeng999
时间:
2010-8-15 18:31
提示:
作者被禁止或删除 内容自动屏蔽
作者:
842367808
时间:
2014-3-17 20:39
_CancelAgent->AcceptOnNotify ( _Panel, _Panel->GetDiaCANCELNotification());
大神,这句话什么意思
欢迎光临 iCAx开思网 (https://www.icax.org/)
Powered by Discuz! X3.3