• 创建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

  • 相关阅读:
    抽象类于接口
    继承
    分布式爬虫基于scrapy
    nginx wsgi django 建站配置最终版
    scrapy crawlspider内置方法源码
    redis数据的安装以及基本使用方法
    CrawlSpider 用法(页面链接提取解析 例如:下一页)
    请求传参
    日志等级
    代理操作
  • 原文地址:https://www.cnblogs.com/lzx838/p/2669174.html
Copyright © 2020-2023  润新知