修改对象属性

如何修改对象颜色

1 Acad::ErrorStatus CModifyEnt::ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex)
2 {
3     AcDbEntity *pEntity;   //申明指向实体的指针
4     acdbOpenAcDbEntity(pEntity,entId,AcDb::kForWrite);    //以写方式获取实体对象
5     pEntity->setColorIndex(colorIndex);    //修改实体颜色
6     pEntity->close();   //关闭实体
7 
8     return Acad::eOk;
9 }
1     static void CADShellCreateEntsUnmanaged_ChangeColor(void)
2     {
3         AcDbObjectId oId;
4         oId = CCreateEnt::CreateLine();    //创建直线,获取直线ObjectId
5         CModifyEnt::ChangeColor(oId,1);    //修改直线颜色
6     }

acdbOpenAcDbEntity函数,打开继承AcDbEntity的数据库常驻对象,这些对象一般都可在窗口中显示,如直线,圆

acdbOpenAcDbObject函数,打开层表,线性表等

acdbOpenObject函数,打开继承AcDbEntity的数据库常驻对象。

打开的对象操作完成后需要close

CreateLine方法已在“创建直线”这篇文章中实现。

修改图层方法的实现函数:

1 Acad::ErrorStatus CModifyEnt::ChangeLayer(AcDbObjectId entId,CString strLayerName)
2 {
3     AcDbEntity *pEnt;
4     acdbOpenObject(pEnt,entId,AcDb::kForWrite);    //打开对象
5     pEnt->setLayer(strLayerName);    //修改图层
6     pEnt->close();
7     return Acad::eOk;
8 }

strLayerName必须是已经存在的图层 

修改对象线型的实现函数:

1 Acad::ErrorStatus CModifyEnt::ChangeLinetype(AcDbObjectId entId, CString strLineTypeName)
2 {
3     AcDbEntity *pEnt;
4     acdbOpenObject(pEnt,entId,AcDb::kForWrite);    //打开对象
5     pEnt->setLinetype(strLineTypeName);    //设置对象的线型名称
6     pEnt->close();
7     ret

strLineTypeName必须是已经存在的线型的名称 

提交对象到模型空间的实现函数

 1 AcDbObjectId CCreateEnt::PostToModelSpace(AcDbEntity *pEnt)
 2 {
 3     AcDbBlockTable* pBlockTable;    //申明块表对象
 4     acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);    //获取块表对象
 5 
 6     AcDbBlockTableRecord* pBlockTableRecord;    //申明块表记录对象
 7     pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);    //以写的方式获取模型空间块表记录对象
 8 
 9     AcDbObjectId oId;    //什么对象ObjectId
10     pBlockTableRecord->appendAcDbEntity(oId,pEnt);    //添加实体到模型空间
11 
12     pBlockTable->close();
13     pBlockTableRecord->close();
14     pEnt->close();
15 
16     return oId;
17 }

 步骤:

(1) 获取当前数据库的块表对象

(2) 获取当前数据库的模型空间块表记录对象

(3) 添加实体到模型空间

(4) 关闭块表指针,块表记录指针,实体指针

对上一节的创建直线函数的封装

1 AcDbObjectId CCreateEnt::CreateLine(AcGePoint3d ptStart, AcGePoint3d ptEnd)
2 {
3     AcDbLine* pLine = new AcDbLine(ptStart,ptEnd);
4     AcDbObjectId oId = CCreateEnt::PostToModelSpace(pLine);
5     return oId;
6 }
原文地址:https://www.cnblogs.com/estival/p/3106581.html