iCAx开思网

标题: CAA中如何设置精度 accuracy [打印本页]

作者: HNBoTree    时间: 2005-9-19 13:07
标题: CAA中如何设置精度 accuracy
我怎么样才能够设置CATIA中的精度。我现在想将CATIA中原有的精度0.01重新设置成1,请各位高手指点应该用哪个API,我找到了几个API但是不知道怎么得到这几个接口。CATIVizVisualizationSettingAtt  和 CATSettingRepository 请高手们指点。谢谢!
作者: HNBoTree    时间: 2005-9-19 14:31
有没有人回啊!老大们!
作者: HNBoTree    时间: 2005-9-20 08:40
有哪位高手会啊,给点提示,谢谢了!
作者: saeba    时间: 2005-9-20 09:41
CATSettingRepository *VRepository=NULL;
                                                              VRepository=CATSettingRepository::GetRepository("VisualizationRepository");

                if (VRepository){
                        cout << "Got VisualizationRepository" << endl;
                        char        AttrName[256];
                        char        AttrClass[256];
                        long        AttrSize;
                        while(0 == VRepository->NextAttribute(AttrName, AttrClass, &AttrSize)){
                                cout << "Name : " << AttrName << endl;
                                cout << "Class : " << AttrClass << endl;
                                cout << "Size : " << AttrSize << endl;
                        }
                        VRepository->NextAttribute(AttrName, AttrClass, &AttrSize, 1);

                }

你会找到一个;
Name : 3DCvAccuracyRatio
Class : float
Size : 1

大概就是你想要的吧。
剩下的, WriteSetting。。。
commit?  SaveRepository? 随你
作者: HNBoTree    时间: 2005-9-20 10:55
thank you!
作者: HNBoTree    时间: 2005-9-20 13:20
现在我倒是可以得到我想要的值,并且也可以改正但是不惯我用什么API,界面上的不发生变化,这是为什么,但是如果我把CATIA重新启动一遍,界面上的显示就是我想要的了,有什么方法能够让界面上的值随着我的改动相应的变化。谢谢了!
作者: saeba    时间: 2005-9-20 14:11
CATSettingRepository only gives you the possilibity to change the settings, not do every thing for you. (and did you commit?)
Maybe you still have to fire a redraw event?

[ 本帖最后由 saeba 于 2005-9-20 14:12 编辑 ]
作者: HNBoTree    时间: 2005-9-20 14:53
是的,我Commit了,但是图像并没有刷新。界面显示仍然是5.0。
好的,我试试,我也觉得要触发某个事件,才能生效。
作者: HNBoTree    时间: 2005-9-20 15:52
怎样 fire a event 啊?有没有实例代码啊,seaba 老大!
作者: HNBoTree    时间: 2005-9-21 11:25
大家帮帮忙,我现在真的不知道怎么解决了!
作者: saeba    时间: 2005-9-21 14:06
为什么一定要“让界面上的值随着我的改动相应的变化“呢?
就我的经验,VisualizationRepository里的一些东西无法做到立即生效。
(虽然CATIA本身能做到,但CAA是另一个世界,似乎是Bug而且没有人愿意查更别说改)
作者: HNBoTree    时间: 2005-9-21 16:07
那可就难办了,我的目的是让CATIA的显示随着精度的变化而变化,当我重新设置一个精度的时候CATIA的3D图像也随着改变。
作者: HNBoTree    时间: 2005-9-26 13:58
大家帮帮忙啊,怎样在CAA中修改Option值
作者: HNBoTree    时间: 2005-9-26 13:59
这是个必须解决的问题啊,大家给点意见,先谢谢了!
作者: HNBoTree    时间: 2005-9-26 16:48
saeba 大哥还有什么方法指点指点,帮帮忙!
作者: saeba    时间: 2005-9-26 17:10
我,我也真的没有办法了。
前面说过,我也经历过类似的问题,结果似乎是CAA的Bug(之所以说似乎,是因为没有人愿意查)
如果你的公司和DS有协议,可以给DS发defect报告要求DS查和改正
如果没有。。。
只有等了,等有人做出来或者DS自己改好了
作者: HNBoTree    时间: 2005-9-27 09:14
谢谢了先。
作者: HNBoTree    时间: 2005-9-27 14:00
这绝对是CATIA的Bug现在是一会可以修改,一会不可以修改,我简直要哭了!
作者: HNBoTree    时间: 2005-9-27 16:18
我能不能够这样做:
1。不用CATSettingRepository类,而直接得到界面上我所要的值。直接修改界面上的值?
2。或者用CATSettingRepository类对我需要的值修改后,在对界面刷新这种办法?
现在我想的到Dlg上的内容,能不能够得到啊?
作者: acoka    时间: 2006-3-29 10:13
验证了一下,发现的确如你所说,不重起catia了话,它不会去更新设定值
1,改后不用关闭现有document, new个任意的part或paroduct后马上close它
2,改后打开option,dump一次
改过的值就反映出来了,试试看有没有什么简单的方法能让catia去重读一次设置


如果要马上生效对图形进行更新,或许必须Redraw整个model
1,取得当前document
2, ->CATIDocRoots
3,得到要重画的feature
4,利用CATIVisuChildren,CATI3DGeoVisu之类的对它们进行CATI3DGeoVisu::SetRepNotUpToDate()
5,        CATIModelEvents:ispatch
大致思路,或许在大的模型的时候会很慢而不实用

[ 本帖最后由 acoka 于 2006-3-29 13:31 编辑 ]
作者: acoka    时间: 2006-3-29 15:19
用下面的macro了话,可以马上反映值的变化
Language="VBSCRIPT"

Sub CATMain()

Dim settingControllers1 As SettingControllers
Set settingControllers1 = CATIA.SettingControllers

Dim visualizationSettingAtt1 As SettingController
Set visualizationSettingAtt1 = settingControllers1.Item("CATVizVisualizationSettingCtrl")

visualizationSettingAtt1.Viz3DFixedAccuracy = 2.000000

visualizationSettingAtt1.SaveRepository

End Sub

在VC如果可以得到CATIASettingController或CATISysSettingCtrl应该可以做到,尝试中

[ 本帖最后由 acoka 于 2006-3-29 15:59 编辑 ]
作者: acoka    时间: 2006-3-31 14:41
大致有些眉目了

取得当前的application,用它的 CATIAApplication的IF的
virtual HRESULT __stdcall get_SettingControllers(CATIASettingControllers *& oCtrl)
来取得CATIASettingControllers
然后用它的
virtual HRESULT __stdcall Item(const CATBSTR & iIndex, CATIASettingController *& oSetting);
取得oSetting应该可以cast->CATIVizVisualizationSettingAtt

然后用CATIVizVisualizationSettingAtt来改设定了话,应该和上面的macro是一个效果
作者: acoka    时间: 2006-4-5 16:46
新发现 CATInstantiateComponent

CATIVizVisualizationSettingAtt  *vizSettingCtrl  =  NULL;   
hr  =  ::CATInstantiateComponent("CATVizVisualizationSettingCtrl", IID_CATIVizVisualizationSettingAtt, (void**)&vizSettingCtrl );




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