zoukankan      html  css  js  c++  java
  • 创建AcDb2dPolyline实体

    遍历AcDb2dPolyline实体的顶点坐标

    View Code
     1     static void iterate(AcDbObjectId pLineId)
     2     {
     3         //打开AcDb2dPolyline对象
     4         AcDb2dPolyline *pPline;
     5         acdbOpenObject(pPline, pLineId, AcDb::kForRead);
     6 
     7         //获得多段线的矢量遍历器
     8         AcDbObjectIterator *pVertIter = pPline->vertexIterator();
     9         pPline->close();
    10 
    11         //对顶点进行遍历
    12         AcDb2dVertex *pVertex;
    13         AcGePoint3d location;
    14         AcDbObjectId vertexobjectId;
    15         for (int vertexNumber = 0; !pVertIter->done(); vertexNumber++, pVertIter->step())
    16         {
    17             //打开矢量对象
    18             vertexobjectId = pVertIter->objectId();
    19             acdbOpenObject(pVertex, vertexobjectId,AcDb::kForRead);
    20 
    21             //获得矢量对象的坐标
    22             location = pVertex->position();
    23             pVertex->close();
    24 
    25             //输出坐标
    26             acutPrintf(L"\nVertox %d location is : %0.3f, %0.3f, %0.3f", vertexNumber, location[X], location[Y], location[Z]);
    27         }
    28         delete pVertIter;
    29     }

    创建AcDb2dPolyline实体

    View Code
     1 static void lzxARX_AcDbDatabaseCreatePolyline(void)
     2     {
     3         //设置多段线的四个矢量
     4         AcGePoint3dArray ptArr;
     5         ptArr.setLogicalLength(4);
     6         for (int i = 0; i < 4; i++) 
     7         {
     8             ptArr[i].set((double)(i/2), (double)(i%2), 0.0);
     9         }
    10 
    11         //动态创建一个AcDb2dPolyline对象,在ptArr中给出四个顶点位置
    12         //缺省的线宽为0
    13         AcDb2dPolyline *pNewPline = new AcDb2dPolyline(AcDb::k2dSimplePoly, ptArr, 0.0, Adesk::kTrue);
    14 
    15         //设置实体颜色
    16         pNewPline->setColorIndex(3);
    17 
    18         //获得块表对象指针
    19         AcDbBlockTable *pBlockTable;
    20         acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);
    21 
    22         //获得模型空间块表记录指针
    23         AcDbBlockTableRecord *pBlockTableRecord;
    24         pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
    25 
    26         pBlockTable->close();
    27 
    28         //将多段线对象添加数据库中并获得其对象ID
    29         AcDbObjectId plineObjId;
    30         pBlockTableRecord->appendAcDbEntity(plineObjId, pNewPline);
    31 
    32         pBlockTableRecord->close();
    33 
    34         //设置多段线对象所在的层为0层
    35         pNewPline->setLayer(L"0");
    36 
    37         pNewPline->close();
    38 
    39         iterate(plineObjId);
    40     }

    程序执行结果:

    在图上画了一条多段线,并在命令行中输出每个顶点坐标,如下:

    Vertox 0 location is : 0.000, 0.000, 0.000
    Vertox 1 location is : 0.000, 1.000, 0.000
    Vertox 2 location is : 1.000, 0.000, 0.000
    Vertox 3 location is : 1.000, 1.000, 0.000

  • 相关阅读:
    System.ServiceModel.CommunicationException: 接收HTTP 响应时错误发生
    "智囊"王沪宁先后辅佐三任总书记 _中国经济网
    xx
    我告诉你哦,最好吃的海南鸡饭不在海南…
    服务密码重置_中国移动通信
    移动服务密码怎么查_服务密码忘记了怎么办_百度经验
    http://www.sohu.com/a/162795109_465329
    首页--易配菜-中国餐饮行业最大的综合解决方案提供商
    浙江方圆工程咨询有限公司
    MySQL中间件方案盘点_搜狐科技_搜狐网
  • 原文地址:https://www.cnblogs.com/lzx838/p/2669174.html
Copyright © 2011-2022 走看看