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

iCAx开思网

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

[求助] 急:关于获取曲面的信息(节点、控制点等)有些疑问,代码如下

[复制链接]
跳转到指定楼层
1
发表于 2011-8-14 10:47:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
总的思路是获得面后转换为nurbs曲面,CATSurface有获得节点信息的函数GetKnotVectorU/V,CATNurbsSurface有获得控制点的函数GetOneControlPoint(CATLONG,CATLONG,CATMathPoint),节点好像是对的,但是控制点的输出很奇怪,很多零。请我呢有人知道怎么解决这个问题吗?可能我的思路也是有问题的,不知道有没有其他办法。目的就是获得曲面的表示。
if ( _spSurface != NULL )
        {
                CATSurface  *_SurfaceToBeInvented;
                HRESULT rc = _spSurface->QueryInterface(IID_CATSurface   , (void**)&_SurfaceToBeInvented);
                if (FAILED(rc))
                {
                        return;
                }
                if (_SurfaceToBeInvented==NULL)return;               
        

                if (SUCCEEDED(rc))
                {                        
                        const CATKnotVector *KV4DEG=_SurfaceToBeInvented->GetKnotVectorU();
                        const CATKnotVector *KV4DEGV=_SurfaceToBeInvented->GetKnotVectorV();               
                        
                        if (KV4DEG!=NULL&&KV4DEGV!=NULL)
                        {

                                const double * Knots4DEG = NULL;
                                KV4DEG->GetKnots(Knots4DEG);

                                const double * Knots4DEGV = NULL;
                                KV4DEGV->GetKnots(Knots4DEGV);
                                                               
                                CATLONG32 NbKnots4DEG = KV4DEG->GetNumberOfKnots();                                
                                CATLONG32 NbOfCPs4DEG = KV4DEG->GetNumberOfControlPoints();
                                CATLONG32 NewNbArcs4DEG = KV4DEG->GetNumberOfArcs();
                                CATLONG32 NewDegree4DEG = KV4DEG->GetDegree();

                                CATLONG32 NbKnots4DEGV = KV4DEGV->GetNumberOfKnots();                                
                                CATLONG32 NbOfCPs4DEGV = KV4DEGV->GetNumberOfControlPoints();
                                CATLONG32 NewNbArcs4DEGV = KV4DEGV->GetNumberOfArcs();
                                CATLONG32 NewDegree4DEGV = KV4DEGV->GetDegree();
                                
                                
                                CATGeoFactory* piGeomFactory = ::CATCreateCGMContainer() ;
                                if (NULL==piGeomFactory) return;

                                CATSurLimits surLimits;
                                _SurfaceToBeInvented->GetLimits(surLimits);

                                CATSurFittingToNurbsSur * pSurFitting1 =
                                        ::CATCreateSurFittingToNurbsSur(piGeomFactory,
                                        _SurfaceToBeInvented,
                                        surLimits,
                                        0.001,
                                        0,
                                        ADVANCED);

                                if (NULL==pSurFitting1)
                                {
                                        ::CATCloseCGMContainer(piGeomFactory);
                                        return;
                                }

if (_SurfaceToBeInvented!=NULL)
{
        _SurfaceToBeInvented->Release();
        _SurfaceToBeInvented=NULL;
}               

                                pSurFitting1->Run();        
                                CATNurbsSurface * pNurbsSurf1=NULL;
                                pNurbsSurf1= pSurFitting1->GetNurbsSurface();

                                if (NULL==pNurbsSurf1)
                                {
                                        ::CATCloseCGMContainer(piGeomFactory);
                                        return ;
                                }
               
                        
                                if (NULL!=pNurbsSurf1)
                                {
                                        CATMathPoint  * tabOfCPs  = new CATMathPoint [NbOfCPs4DEG*NbOfCPs4DEGV];        

                                        for (CATLONG32 i=0; i<NbOfCPs4DEG; i++)
                                        {
                                                for(CATLONG32 j=0;j<NbOfCPs4DEGV;j++)
                                                {                                       

                                                        pNurbsSurf1->GetOneControlPoint(i+1, j+1,tabOfCPs[i+j]);
                                                                                                

                                                }
                                        }                                       

                                
                                }

if (pSurFitting1!=NULL)
{
        delete pSurFitting1;
        pSurFitting1=NULL;
}

                                ::CATCloseCGMContainer(piGeomFactory);
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-23 13:11 , Processed in 0.025071 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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