iCAx开思工具箱

标题: 选择product下的某个对象 [打印本页]

作者: 124225512    时间: 2010-7-5 20:46
标题: 选择product下的某个对象
part1part2中心的距离
现在就是选择part1和part2的问题
发现现在只有点击树上的名字才能选中,在对话框中显示part1.1part2.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#  
作者: 歆韵    时间: 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
交流catia群: 14722616
作者: 842367808    时间: 2014-3-17 20:39
_CancelAgent->AcceptOnNotify ( _Panel, _Panel->GetDiaCANCELNotification());
大神,这句话什么意思




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