天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 177|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 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*/
    复制代码

     

     

     

     

    [每日一码] 转换同面的3DPOLYLINE到AcDb2dPolyline
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 09:32 , Processed in 0.140185 second(s), 24 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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