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

posted @ 2012-09-03 17:33  翔麟  阅读(897)  评论(0编辑  收藏  举报