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

iCAx开思网

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

CAA中怎么过滤鼠标选择的对象

[复制链接]
跳转到指定楼层
1
发表于 2006-1-17 17:35:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的一个命令要同时用到面的某边线和面,我做了一个Agent.
    ElementAgent->SetOrderedElementType("CATIMfMonoDimResult");
     ElementAgent->AddOrderedElementType("CATCurve");
     ElementAgent->AddOrderedElementType("CATLine");
    ElementAgent->AddOrderedElementType("CATIMfBiDimResult");
     ElementAgent->AddOrderedElementType("CATSurface");
     ElementAgent->AddOrderedElementType("CATFace");
     ElementAgent->SetBehavior      ( CATDlgEngWithPrevaluation | CATDlgEngWithCSO     | CATDlgEngOneShot         );
     ElementAgent->SetAgentBehavior ( MfPermanentBody | MfLastFeatureSupport | MfRelimitedFeaturization );
可是每次选择得到的都是edge。请问如何让它第一次得到线第二次得到面呢?

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2006-1-17 23:02:05 | 只看该作者
通常catia的command会做2个agent, 选的东西也会写入panel的2个selectorlist里

严格来说还应该用multi-state,选好第一个对象后state应该自动迁移到第2个去选面
点击穿panel的不同的selectorlist的时候,也应该实现state的迁移和highlight的变化
3
发表于 2006-1-18 16:02:27 | 只看该作者
呵呵,我的做法跟acoka兄一样啊
4
发表于 2006-1-18 17:31:42 | 只看该作者
谢谢两位,我看了看,可以知道什么时候点击panel的不同的selectorlist,但我没找到state转移的接口,两位大哥能说的具体一点吗,把那几句程序贴一下就好:)。
5
发表于 2006-1-19 11:50:31 | 只看该作者
// Axis selection state
    CATDialogState *WaitForAxisState= GetInitialPanelState("Select a Axis or another input field");
    WaitForAxisState -> AddDialogAgent ( _pAxisAgent           );
    WaitForAxisState -> AddDialogAgent ( _pFaceFieldAgent );
    WaitForAxisState -> AddDialogAgent ( _pAxisFieldAgent     );

    // Face selection state
    CATDialogState *WaitForFaceState= AddPanelState("Select a Face or another input field");
    WaitForFaceState -> AddDialogAgent ( _pFaceAgent       );
    WaitForFaceState -> AddDialogAgent ( _pAxisFieldAgent     );
    WaitForFaceState -> AddDialogAgent ( _pFaceFieldAgent     );
6
发表于 2006-1-19 13:40:23 | 只看该作者
那_pFaceFieldAgent 和 _pFaceFieldAgent 是如何设置的?field 多谢
7
发表于 2006-1-19 15:14:30 | 只看该作者
看了acoka兄的意见后,不太明白怎么写,我改了一下,可以在线的selectlist里面只能选边线;面的selectlist可以选面,但是选面时得到的名字还是edge。代码如下:
     ElementAgent = new CATFeatureImportAgent ("curve");
     ElementAgent->SetOrderedElementType("CATIMfMonoDimResult");
     ElementAgent->AddOrderedElementType("CATCurve");
     ElementAgent->AddOrderedElementType("CATLine");
     ElementAgent->SetBehavior      ( CATDlgEngWithPrevaluation | CATDlgEngWithCSO     | CATDlgEngOneShot         );
     ElementAgent->SetAgentBehavior ( MfPermanentBody | MfLastFeatureSupport | MfRelimitedFeaturization );
     ElementAgent->SetBehavior(CATDlgEngWithPSOHSO | CATDlgEngWithPrevaluation );
    AddCSOClient(ElementAgent);

    ElementAgent1 = new CATFeatureImportAgent ("curface");
    ElementAgent1->SetOrderedElementType("CATIMfBiDimResult");
     ElementAgent1->AddOrderedElementType("CATSurface");
     ElementAgent1->AddOrderedElementType("CATFace");
     ElementAgent1->SetBehavior      ( CATDlgEngWithPrevaluation | CATDlgEngWithCSO     | CATDlgEngOneShot         );
     ElementAgent1->SetAgentBehavior ( MfPermanentBody | MfLastFeatureSupport | MfRelimitedFeaturization );
     AddCSOClient(ElementAgent1);
    ElementAgent1->SetBehavior(CATDlgEngWithPSOHSO |
                CATDlgEngWithPrevaluation );

  _OKAgent=  new CATDialogAgent("OK Agent");
  _OKAgent->AcceptOnNotify ( pi, pi->GetDiaOKNotification());

   _CancelAgent=  new CATDialogAgent("CancelAgent");
  _CancelAgent->AcceptOnNotify ( pi, pi->GetDiaCANCELNotification());
    CATDialogState * initialState = GetInitialState("line");
   initialState -> AddDialogAgent (ElementAgent);
   CATDialogState *stState2 = AddDialogState("surface");
   stState2 -> AddDialogAgent (ElementAgent1);
   CATDialogState *stState3 = AddDialogState("panel");
    ElementAgent->InitializeAcquisition();
  stState3 -> AddDialogAgent (_OKAgent);
    stState3 -> AddDialogAgent (_CancelAgent);

  AddTransition( initialState, stState2,
                 IsOutputSetCondition (ElementAgent),
                 Action ((ActionMethod) &SimOffsetCurveCmd::SelectCurve));
   AddTransition( stState2, stState3,
                 IsOutputSetCondition (ElementAgent1),
                 Action ((ActionMethod) &SimOffsetCurveCmd::SelectPlane));
  AddTransition( stState3, NULL,
                 IsOutputSetCondition (_OKAgent),
                 Action ((ActionMethod) &SimOffsetCurveCmd::OkAction));
   AddTransition( stState3, NULL,
                 IsOutputSetCondition (_CancelAgent),
                 Action ((ActionMethod) &SimOffsetCurveCmd::ActionCancel));
8
发表于 2006-1-19 17:59:43 | 只看该作者
名字是edge,可是能作为面用,搞不懂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-24 09:03 , Processed in 0.024939 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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