找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

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

CAA中利用CATNavigation3DViewer预览装配组件的问题

[复制链接]
跳转到指定楼层
1
发表于 2005-9-21 14:47:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

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

x
CAA中利用CATNavigation3DViewer可以预览零件模型。想用它来显示装配组件,已经由piProductOnRoot获得了各个零件的CATIProduct_var piProductOnProduct,然后调用piProductOnProduct->GetShapeRep(spLinkableOnShapeRep),再由spLinkableOnShapeRep获得了各个零件实例的CAT3DRep * p3DRep;然后调用_p3DViewer->AddRep( p3DRep);各个零件的p3DRep加入后,最后调用_p3DViewer->Draw();但是却得不到正确的显示结果,不知为什么?而由CAT3DBoundingSphere pBe = p3DRep->GetBoundingElement();获得的CAT3DBoundingSphere 是正确的,可以看到各个零件的CAT3DBoundingSphere半径。请高手指点!!谢谢!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 赞一下!赞一下!
24
发表于 2014-4-23 16:52:41 | 只看该作者
这个贴不错,普及了这块呀!
23
发表于 2008-3-14 15:03:04 | 只看该作者
恩? 怎么看不到附件
22
发表于 2007-11-5 02:49:54 | 只看该作者
这个不错!
21
发表于 2005-9-27 12:50:21 | 只看该作者
呵呵,不错~~

saeba 兄诲人不倦,很佩服~~
20
发表于 2005-9-27 11:26:20 | 只看该作者
非常感谢Saeba!我上午也发现这个问题了,其实好像还有更简单的方法:
spSpecObjectPart=piProductOnRoot;//零件用pSpecContainer->GetPart();
       
        //组件--------------------------------------------------------------
        if(spSpecObjectPart==NULL_var)
        {
                cout<<"spSpecObjectPart==NULL_var!"<<endl;
                return 5;
        }
        CATPathElement* RootObjectPath=new CATPathElement(spSpecObjectPart);
接下来就和零件显示一样了。
谢谢!祝顺利!
19
发表于 2005-9-27 10:14:35 | 只看该作者
>但是好象不直接与零件相关的Product就不能得到GetShapeRep的结果。不知如何构造装配体的CAT3DRep *描述,以便用CAT3DViewer或CATNavigation3DViewer显示

根本不必GetShapeRep,product直接就可以QI到CATI3DGeoVisu。
查查Object Browser就知道了
18
发表于 2005-9-27 10:11:26 | 只看该作者
好消息,我想是解决了!

一个一个来,
首先,为什么return 6改成continue以后就没了显示,
今天仔细看了看,原来你在之后,作了document的remove:
rc = CATDocumentServices::Remove (*pDoc);
这样一来,整个product的信息全部从session中删除,自然也就没了显示
把这个remove注释掉,果然显示就出来了。
但是这时的显示,因为没有matrix信息,看起来就像只有一个part被显示了一样。

那么怎么显示实际的装配图呢?
有两个方法,
1。直接显示主product,这时根本就不用循环了
                                ...
                                CATPathElement* RootObjectPath=new CATPathElement(spRootProduct);
                               
                                        rc = pVisManager->AttachTo(RootObjectPath, pVP, ListIVisu3d, NULL, 0, 1);                               

                                        if ( FAILED(rc) )
                                        {
                                                cout <<" ERROR in the AttachTo method" << endl;
                                                return 6;
                                        }else{
                                                cout << "AttachTo OK." << endl;
                                        }

                                        CATI3DGeoVisu * pIVisuOnRoot =NULL ;   
                                        rc = spRootProduct->QueryInterface(IID_CATI3DGeoVisu, (void **) & pIVisuOnRoot);
                                        ...
就可以

2。如果你想控制其中的几个子product不显示或别的什么,
不必用piProductOnProduct->GetShapeRep(spLinkableOnShapeRep) (循环还是要的)
而是:
在循环中
                                ...
                                CATPathElement* RootObjectPath=new CATPathElement(piProductOnProduct);
                               
                                        rc = pVisManager->AttachTo(RootObjectPath, pVP, ListIVisu3d, NULL, 0, 1);                               

                                        if ( FAILED(rc) )
                                        {
                                                cout <<" ERROR in the AttachTo method" << endl;
                                                continue;
                                        }else{
                                                cout << "AttachTo OK." << endl;
                                        }

                                        CATI3DGeoVisu * pIVisuOnRoot =NULL ;   
                                        rc = piProductOnProduct->QueryInterface(IID_CATI3DGeoVisu, (void **) & pIVisuOnRoot);
                                ...

都会得到附图的结果

本帖子中包含更多资源

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

x
17
发表于 2005-9-27 08:59:27 | 只看该作者
谢谢cms_nuaa、xyzhu !

xyzhu兄提供的思路试过了,可还是不行啊,不知问题到底在哪里?
组建是装配好 的,不知cms_nuaa说的直接显示如何实现,好象是一个不错的思路。我最初也曾想直接显示装配体:
if (SUCCEEDED(piProductOnRoot->GetShapeRep(spLinkableOnShapeRep)))  
        {
                cout<<"piProductOnRoot GetShapeRep Succeed!!"<<endl;
        }
        else
        {
                cout<<"piProductOnRoot GetShapeRep Failed!!"<<endl;

        }
但是好象不直接与零件相关的Product就不能得到GetShapeRep的结果。不知如何构造装配体的CAT3DRep *描述,以便用CAT3DViewer或CATNavigation3DViewer显示。请cms_nuaa指教!谢谢!!
16
发表于 2005-9-26 20:03:29 | 只看该作者
你在循环里用了 rc = pVisManager->AttachTo ( RootObjectPath, pVP, ListIVisu3d);然后在循环外用了_p3DViewer->AddRep((CAT3DRep *) _pTheModelToDisplay); 这两个重复了. 试试删除AttachTo那句.
还有,AddRep是"Adds a representation 3D in the Main 3D Viewpoint", 那个Main 3D Viewpooint是通过CATViewer::GetMain3DViewpoint()得到的, 你用了new CAT3DViewpoint, 也许这也会产生问题.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025-9-23 05:35 , Processed in 0.026693 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

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