找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[每日一码] 转换同面的3DPOLYLINE到AcDb2dPolyline

[复制链接]

0

主题

0

回帖

28

积分

管理员

积分
28
发表于 2024-3-14 19:38:26 | 显示全部楼层 |阅读模式
  1. void asdktest()
  2. {
  3.   ads采用name ss;  
  4.   ACHAR* prompts[2]={L"\nSelect 3d polylines",L"\nUnselect objects"};
  5.   int res=acedSSGet(L":$",prompts,NULL,NULL,ss);  
  6.   if (RTNORM != res)  
  7.   {      
  8.    acutPrintf(L"\nNo objects selected");
  9.    return;  
  10.   }
  11.   long len;
  12.   res=acedSSLength(ss,&len);
  13.   if (RTNORM != res || len == 0)
  14.   {      
  15.    acutPrintf(L"\nNo objects selected");  
  16.    return;  
  17.   }
  18.   //get coordinate system from current UCS   
  19.   AcGeMatrix3d mat;   
  20.   acdbUcsMatrix(mat);   
  21.   AcGePoint3d  origin;  
  22.   AcGeVector3d xAxis;  
  23.   AcGeVector3d yAxis;  
  24.   AcGeVector3d norm;  
  25.   mat.getCoordSystem(origin,xAxis,yAxis,norm);
  26.   Acad::ErrorStatus es;  
  27.   for(int i=0 ; i < len ; i++)
  28.   {   
  29.    ads采用name eName;  
  30.    acedSSName(ss,i,eName);
  31.    AcDbObjectId objId;
  32.    acdbGetObjectId(objId,eName);
  33.    AcDb3dPolyline *pPline=NULL;
  34.    es=acdbOpenObject(pPline, objId, AcDb::kForRead);      
  35.    if (Acad::eOk == es)      
  36.    {         
  37.     AcDbObjectIterator *pVertIter= pPline->vertexIterator();  
  38.     Adesk::Boolean isClosed=Adesk::kFalse;
  39.     isClosed=pPline->isClosed();      
  40.     pPline->close();
  41.     // Finished with the pline header.      
  42.     AcGePoint3d location;   
  43.     AcDbObjectId vertexObjId;
  44.     AcGePoint3dArray aPts;   
  45.     for (;!pVertIter->done();pVertIter->step())   
  46.     {           
  47.      AcDb3dPolylineVertex *pVertex;   
  48.      vertexObjId = pVertIter->objectId();   
  49.      acdbOpenObject(pVertex, vertexObjId,  AcDb::kForRead);         
  50.      aPts.append(pVertex->position());      
  51.      pVertex->close();           
  52.     }
  53.     delete pVertIter;
  54.     AcGePoint3dArray newPts;     
  55.     AcGePoint3d newPt;      
  56.     for (int i=0 ; i  < aPts.length() ; i++)   
  57.     {            
  58.      acdbWcs2Ecs(asDblArray(aPts<i>),asDblArray(newPt), asDblArray(norm),Adesk::kFalse);
  59.      newPts.append( newPt);         
  60.     }                                       
  61.     AcDb2dPolyline *pPoly = new AcDb2dPolyline(AcDb::k2dSimplePoly /*poly type*/,
  62.                     newPts /* vertices */,
  63.                     newPts.at(0)[Z] /* elevation */,
  64.                     isClosed /* closed or open*/);   
  65.     pPoly->setNormal(norm);           
  66.     pPoly->setLayer(L"0");   
  67.     pPoly->setColorIndex(5); //blue color  
  68.     postToModelSpace(pPoly);
  69.     pPoly->close();  
  70.    }//if        
  71.   }//for   
  72.   acedSSFree(ss);
  73. }/* end of asktest*/
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-29 05:18 , Processed in 0.149618 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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