找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 212|回复: 0

[每日一码] 求Line和Su**ce的交点

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-2-23 22:42:17 | 显示全部楼层 |阅读模式
下面是示例代码,求端点是(0 0 0) (0 0 1)的LINE和Su**ce的交点。

注意:include和lib文件在  ObjectARX SDK\\utils\brep 目录下。
  1. static AcGePoint3dArray Intersect(AcDbSu**ce* pSu**ce,AcGeLine3d line)
  2. {
  3.     AcGePoint3dArray returnPtArray;
  4.   AcDbBody* pBody = new AcDbBody();
  5.   // 2013
  6.   // Acad::ErrorStatus es = pBody->setASMBody(pSu**ce->ASMBodyCopy());
  7.   //before 20123
  8.    Acad::ErrorStatus es = pBody->setBody(pSu**ce->body());
  9.    //build AcBrBrep
  10.    AcBrBrep* pBrep = new AcBrBrep();
  11.    //
  12.   if(AcBr::eOk == pBrep->set(*pBody))
  13.   {
  14.     AcBrBrepFaceTraverser* pFaceTrav = new AcBrBrepFaceTraverser;
  15.     if(AcBr::eOk == pFaceTrav->setBrep(*pBrep))
  16.    {
  17.        for(pFaceTrav->restart();!pFaceTrav->done();pFaceTrav->next())
  18.        {
  19.         AcB**ce face;
  20.         if(AcBr::eOk == pFaceTrav->getFace(face))
  21.         {
  22.           double area = 0.0f;
  23.          face.getSu**ceArea(area);
  24.          acutPrintf(L"\nSu**ce Area: %f", area);
  25.         //*****whole su**ce of the Brep face******        
  26.         //AcGeNurbSu**ce nurbSu**ce;
  27.         //face.getSu**ceAsNurb(nurbSu**ce);
  28.         //AcGeCurveSurfInt curveSI;
  29.         ////input the curve and line
  30.         //curveSI.set(line,nurbSu**ce);
  31.         ////get the count of intersect points
  32.         //int count = curveSI.numIntPoints(err采用1);
  33.         //    if(err采用1 == AcGe::kXXOk && count >0 )
  34.         //    {      
  35.         //        AcGeIntersectError err采用2;
  36.         //        for(int index = 0 ;index < count; index ++)
  37.         //        {
  38.         //           AcGePoint3d pt =
  39.         //             curveSI.intPoint(index,err采用2);      
  40.         //            returnPtArray.append(pt);
  41.         //        }      
  42.         //      
  43.         //    }
  44.         //**********
  45.         //****real su**ce of the orignal AcDbSu**ce      
  46.           AcGeExternalBoundedSu**ce** nurbs = NULL;
  47.           Adesk::UInt32 numNurbs = 0;
  48.           face.getSu**ceAsTrimmedNurbs(numNurbs,nurbs);
  49.           //*****
  50.         for (Adesk::UInt32 i = 0; i < numNurbs; i++)
  51.         {
  52.             AcGeCurveSurfInt curveSI;
  53.             AcGeIntersectError  err采用1 = AcGe::kXXOk;         
  54.              //input the curve and line
  55.             curveSI.set(line,*nurbs<i>);
  56.             //get the count of intersect points
  57.             int count = curveSI.numIntPoints(err采用1);
  58.             if(err采用1 == AcGe::kXXOk && count >0 )
  59.             {
  60.                 AcGeIntersectError err采用2;
  61.                 for(int index = 0 ;index < count; index ++)
  62.                 {
  63.                     AcGePoint3d pt =
  64.                         curveSI.intPoint(index,err采用2);      
  65.                     returnPtArray.append(pt);
  66.                 }      
  67.             }
  68.             delete nurbs<i>;
  69.         }
  70.         // your responsibility to delete the
  71.        // array of su**ces
  72.         delete[] nurbs;
  73.       }
  74.     }
  75.   }
  76.   delete pFaceTrav;
  77.   }
  78.   delete pBrep;
  79.   return returnPtArray;
  80. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 14:35 , Processed in 0.157163 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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