iCAx开思网

标题: 同一对话面板,我要选择两条直线,但始终只能选择一条 [打印本页]

作者: zsong22    时间: 2013-6-24 11:45
标题: 同一对话面板,我要选择两条直线,但始终只能选择一条

也就是说,我传递机制没做成功。我要是把      _pWiperAgent -> AddOrderedElementType("CATCurve");   这句话换成_pWiperAgent -> AddOrderedElementType("CATSurface");  来选择面,则两个都能选取。

void AreaCheckCmd::BuildGraph()
{
    _pAxisAgent                        = new CATFeatureImportAgent ( "CurveAgent", NULL, NULL, MfNoDuplicateFeature ) ;
        _pWiperAgent                        = new CATFeatureImportAgent ( "CurveAgent", NULL, NULL, MfNoDuplicateFeature ) ;
    _pOKAgent                                = new CATDialogAgent( "OKButton") ;
        _pOKAgent-> AcceptOnNotify( pAreaCheckDlg , pAreaCheckDlg->GetDiaOKNotification() );

//代理只能够选择实现接口CATSurface和CATPoint,CATCurve的组件,即此代理只能够选择面和曲线
        _pAxisAgent -> AddOrderedElementType( "CATCurve" );
        _pWiperAgent -> AddOrderedElementType("CATCurve");//一维的:CATIMfMonoDimResult
        _pAxisAgent -> SetBehavior( CATDlgEngWithPrevaluation | CATDlgEngWithCSO  | CATDlgEngOneShot  );
        _pWiperAgent -> SetBehavior( CATDlgEngWithPrevaluation | CATDlgEngWithCSO  | CATDlgEngOneShot  );

        //-----------------------------------------------------------------------------
        // Command States
        //-----------------------------------------------------------------------------
        CATDialogState *WaitForAxisState= GetInitialState("选择基准轴线");
        WaitForAxisState -> AddDialogAgent( _pAxisAgent);
       
        CATDialogState *WaitForWiperState= GetInitialState("选择与轴线相对应的线条");
        WaitForWiperState -> AddDialogAgent( _pWiperAgent);
       
        CATDialogState *OKState= GetInitialState("确定");
        OKState -> AddDialogAgent( _pOKAgent);
        //-----------------------------------------------------------------------------
        // Transitions
        //-----------------------------------------------------------------------------
        // 选择线
        AddTransition ( WaitForAxisState , WaitForWiperState ,
                IsOutputSetCondition ( _pAxisAgent ) ,
                Action ( ( ActionMethod ) &AreaCheckCmd::AxisSelected ) );
        //选择线
        AddTransition ( WaitForWiperState , OKState ,
                IsOutputSetCondition ( _pWiperAgent ) ,
                Action ( ( ActionMethod ) &AreaCheckCmd::WiperSelected ) );
        //传递到OK按钮
        AddTransition ( OKState , NULL ,
                IsOutputSetCondition ( _pOKAgent ) ,
                Action ( ( ActionMethod ) &AreaCheckCmd::OkAction ) );

        AddAnalyseNotificationCB (pAreaCheckDlg,
                pAreaCheckDlg->GetDiaCANCELNotification(),//这里 标明作用部分  为 取消按钮
                (CATCommandMethod)&AreaCheckCmd::CancelAction,
                NULL);
        AddAnalyseNotificationCB (pAreaCheckDlg,
                pAreaCheckDlg->GetWindCloseNotification(),//这里 标明作用部分  为 关闭按钮  也就是右上角的 叉
                (CATCommandMethod)&AreaCheckCmd::CancelAction,
                NULL);

}



该贴已经同步到 zsong22的微博
作者: zsong22    时间: 2013-6-24 14:45
修改搞定:
//-----------------------------------------------------------------------------
        // Command States
        //-----------------------------------------------------------------------------
        CATDialogState *WaitForAxisState= GetInitialState("选择基准轴线");
        WaitForAxisState -> AddDialogAgent( _pAxisAgent);
       
        CATDialogState *WaitForWiperState= AddDialogState("选择与轴线相对应的线条");
        WaitForWiperState -> AddDialogAgent( _pWiperAgent);
       
        CATDialogState *OKState= AddDialogState("确定");
        OKState -> AddDialogAgent( _pOKAgent);
作者: zsong22    时间: 2013-6-24 15:59
这样一来遇到新问题就是,一旦在选择的过程中,选错线条了,就没法修改了! 很是郁闷!
作者: linlily0925    时间: 2013-6-25 09:33
因为你一直在GetInitialState,如果有添加其他的状态,用AddDialogState

作者: linlily0925    时间: 2013-6-25 09:33
zsong22 发表于 2013-6-24 15:59
这样一来遇到新问题就是,一旦在选择的过程中,选错线条了,就没法修改了! 很是郁闷!

没法修改是因为你的状态没有切换,你可以试着多添加几个状态,或者添加Editor的Focus





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