iCAx开思网

标题: CAA 如何修改界面的值 [打印本页]

作者: HNBoTree    时间: 2005-10-9 13:16
标题: CAA 如何修改界面的值
如图,我想修改Options->DisPlay->performances中的3D Accuracy 的值将Fixed中的5.00改成0.1,应该如何操作?
作者: HNBoTree    时间: 2005-10-9 13:19
用        //VRepository=CATSettingRepository::GetRepository("VisualizationRepository");
        ////VRepository->Unlock("3DFxAccuracy");
        //VRepository->WriteSetting("3DFxAccuracy",&f);
        ////        VRepository->Lock("3DFxAccuracy");
        //VRepository->SaveRepository();
        //VRepository->Commit();
能够修改但是不能够即时刷新,我想通过直接修改界面的值去实现所需要的功能,能不能完成?
如果可以请帮忙指点一下思路。谢谢!
作者: acoka    时间: 2005-10-9 13:58
这个刷新要自己做

{
        // edit option setting

        // redraw
        do {
                // get current editor
                CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
                if(!pEditor){
                        break;
                }

                // get document from current editor
                CATDocument* pDocument = pEditor->GetDocument();
                if( !pDocument ) {
                        break;
                }

                // get docroot fromg document
                CATIDocRoots_var spDocRoots = pDocument;
                if( !spDocRoots ) {
                        break;
                }

                // get root object
                CATLISTV(CATBaseUnknown_var)* pRootProducts = spDocRoots->GiveDocRoots();
                if( !pRootProducts ) {
                        break;
                }
                if( pRootProducts->Size() <= 0 ) {
                        delete pRootProducts;
                        pRootProducts = NULL;
                        break;
                }

                // get CATIDescendants interface
                CATIDescendants_var spDescendants = (*pRootProducts)[1];
                delete pRootProducts;
                pRootProducts = NULL;
                if(!spDescendants){
                        break;
                }

                // get all object you want to redraw( if you want redraw all object, just dispath the root is OK
                CATLISTV(CATISpecObject_var) spList;
                spDescendants->GetAllChildren( _your_Mask_, spList);

                // loop
                for(int index = 1 ; index <= spList.Size() ; index++){
                        CATISpecObject_var spSpec = spList[index];
                        if(!spSpec){
                                continue;
                        }
                        // dispatch
                        // DispatchModelModifyToVisuFather of spSpec here
                }
        } while (false );

}

[ 本帖最后由 acoka 于 2005-10-9 14:36 编辑 ]
作者: HNBoTree    时间: 2005-10-9 15:33
非常感谢acoka兄,
我已经将CATISpecObject
   spSpec->SetUpToDate(false);
   spSpec->Update();
虽然我已经WriteSetting("3DFxAccuracy",&f);了
但是因为Options中的3D Accuracy值没有变化,
   spSpec->SetUpToDate(false);
   spSpec->Update();
操作之后图像仍然没有改变。
作者: HNBoTree    时间: 2005-10-9 15:34
怎样能够让界面的值由5.00变成我修改后的值?
帮帮忙!
作者: HNBoTree    时间: 2005-10-10 11:39
有谁能帮帮忙啊!
作者: acoka    时间: 2005-10-10 14:20
你在2楼不是说你已经可以修改了吗?
作者: HNBoTree    时间: 2005-10-10 16:57
没有,我用
用        //VRepository=CATSettingRepository::GetRepository("VisualizationRepository");
        ////VRepository->Unlock("3DFxAccuracy");
        //VRepository->WriteSetting("3DFxAccuracy",&f);
        ////        VRepository->Lock("3DFxAccuracy");
        //VRepository->SaveRepository();
        //VRepository->Commit();
能够修改但是界面(一楼的界面)上的值不能够即时刷新,要用鼠标重新点击一下Options弹出一楼的窗口,在取消掉后,我想要改的值才能发生变化。
换句话说才能由5.00变成我想要的0.01。
之后才能用到您给出的那部分代码。
您由什么方法能够在程序里刷新窗口(一楼的界面)的值吗?
作者: xyzhu    时间: 2005-10-10 17:23
联系到你的另一个提问"CAA 怎样能够在CAA中打开CATIA的options界面", 好象你想用CATAfrStartCommand("CATAfrOpenSettingsHdr", pCmd); 打开Options Dialog, 然后用API改变值,希望那个Dialog也相应变化.
这样应该不行吧.如果用了CATAfrStartCommand,就不能用API,如果要用API来改变Options的话,就不能用由CATAfrStartCommand激活的Dialog.因为你无法在由CATAfrStartCommand激活的Dialog和API之间建立联系.
作者: HNBoTree    时间: 2005-10-11 08:23
就是,我的思路就是您说的那样,但是确实像您说的不能够激活Dialog和API之间的联系,你还有什么高见吗?修改CATIA的sag我已经没有什么思路了。用发送消息的方式能不能够做到?
作者: HNBoTree    时间: 2005-10-11 10:21
怎样用API来改变Options呢,用什么样的API?
xyzhu兄帮帮忙啊!
作者: xyzhu    时间: 2005-10-11 15:15
如果你想用API 来改变Options并自动刷新的话,就不能用CATAfrStartCommand,用2楼和3楼的办法应该已经解决问题了.如果你一定要Dialog,让用户规定精确度,必须自己做一个Dialog.
作者: HNBoTree    时间: 2005-10-11 16:02
但是修改不能刷新到界面上(1楼界面),我用API已经改成0.01了,但是界面上显示仍然是5.00,但是重新启动CATIA,或者点击Options对话筐后再显示一次一楼界面,按界面上的取消键,或关闭按钮,再打开Options后界面才刷新,再用3楼的acoka兄的代码才可以。
作者: HNBoTree    时间: 2005-10-12 16:24
有没有人回复一下啊!
作者: HNBoTree    时间: 2006-1-16 15:11
[quote]原帖由 acoka 于 2005-10-9 13:58 发表
                // get all object you want to redraw( if you want redraw all object, just dispath the root is OK
                CATLISTV(CATISpecObject_var) spList;
                spDescendants->GetAllChildren( _your_Mask_, spList);

                // loop
                for(int index = 1 ; index <= spList.Size() ; index++){
                        CATISpecObject_var spSpec = spList[index];
                        if(!spSpec){
                                continue;
                        }
                        // dispatch
                        // DispatchModelModifyToVisuFather of spSpec here
                }


能告诉我怎么样dispatch 吗,我想redraw 所有的objects 如何做。
用update 效果不理想。




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