- UID
- 34598
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-3-10
- 最后登录
- 1970-1-1
|
发表于 2003-3-14 19:37:17
|
显示全部楼层
double Height = 60;
AcGeVector3d normal(0.0, 0.0, 1.0);
AcGePoint2dArray pt2d;
pt2d.setLogicalLength(8);
//(xi, yi) 是各个顶点坐标
pt2d[0].set(x1, y1);
pt2d[1].set(x2, y2);
pt2d[2].set(x3, y3);
pt2d[3].set(x4, y4);
pt2d[4].set(x5, y5);
pt2d[5].set(x6, y6);
pt2d[6].set(x7, y7);
pt2d[7].set(x8, y8);
AcDbPolyline *poly = new AcDbPolyline;
//设置多义线各顶点坐标及凸度值
double bulge = 22.5 / 180 * PI;
bulge = tan(bulge);
for(int i = 0; i < 8; i++)
{
poly->addVertexAt(i, pt2d, (i % 2 == 1) ? bulge : 0.0, 0.0, 0.0);
}
poly->setClosed(Adesk::kTrue);
poly->setNormal(normal);
AcDbVoidPtrArray lines, regions;
//获取指向封闭边界的无值型指针数组
lines.append((void *)poly);
//根据封闭边界中生成面域对象
AcDbRegion::createFromCurves(lines, regions);
//获得指向面域的指针
AcDbRegion *pRegion = AcDbRegion::cast((AcRxObject *)regions[0]);
AcDb3dSolid *p3dObj = new AcDb3dSolid;
p3dObj->extrude(pRegion, Height, 0);
delete pRegion;
AcDbBlockTable *pBlockTable; //定义块表指针
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead); //获得块表指针
AcDbBlockTableRecord *pBlockTableRecord; //定义块表记录指针
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite); //获得块表记录指针
AcDbObjectId entityId; //定义对象的 ID 号
pBlockTableRecord->appendAcDbEntity(entityId, p3dObj); //向块表记录添加对象
pBlockTable->close(); //关闭块表
pBlockTableRecord->close(); //关闭块表记录
p3dObj->close(); //关闭对象 |
|