CAD修改对象属性

阅读 155

2022-11-16


一、简介

1、所有对象都一个唯一的标识id和句柄,都是用来标识对象,知道对象的Id或句柄,就能找到对象并修改属性。id是只在当前内存中唯一,下次再打开id就会发生变化,句柄会随图纸保存,并会一直不变。

2、对象Id,指针,句柄三者之前的转换关系 :

3、从ID到对象指针:通过Mx::mcdbOpenObject 打开对象,或使用智能指针打开, McDbObjectPointer。

4、从对象指针到ID:所有的数据库对象都继承自McDbObject,调用McDbObject::objectId()返回对象的ID。

5、从句柄到ID:使用McDbDatabase::getAcDbObjectId函数。

6、从ID到句柄:使用McDbObjectId::handle函数。

7、从指针到句柄:使用McDbObject::getAcDbHandle函数。

二、修改对象颜色

1、上一节中:函数McDbObjectId CreateLine1(McGePoint3d pt1,McGePoint3d pt2)会返回新绘制的对象id。

// -------------------------------------------------------------------------​​
​​// Summary:​​
​​// 改变实体颜色​​
​​// Parameters:​​
​​// id - 实体的id​​
​​// color - 实体的新颜色​​
​​// Returns:​​
​​// 成功返回true​​
​​// -------------------------------------------------------------------------​​
​​bool ChangeColor(McDbObjectId id,const McCmColor& color)​​
​​{​​
​​// 用智能指针打开对象,写方式打开。智能指针会自动关闭对象.​​
​​McDbObjectPointer spEnt(id,McDb::kForWrite);​​
​​if​​​​(spEnt.openStatus() != Mcad::eOk)​​
​​{​​
​​// 如果对象,在其它地方打开,就会打开的失败.​​
​​return​​​ ​​false​​​​;​​
​​}​​

​​// 设置对象颜色​​
​​spEnt->setColor(color);​​

​​return​​​ ​​true​​​​;​​
​​}​​

2、COM接口调用方式,如C#代码:

​​// -------------------------------------------------------------------------​​
​​// Summary:​​
​​// 改变实体颜色​​
​​// Parameters:​​
​​// id - 实体的id.​​
​​// iR, iG,iB - 实体的颜色​​
​​// Returns:​​
​​// 成功返回true​​
​​// -------------------------------------------------------------------------​​
​​bool ChangeColor(Int64 id,int iR,int iG,int iB)​​
​​{​​
​​// 由id得到实体对象.​​
​​MxDrawEntity ent = (MxDrawEntity)axMxDrawX1.ObjectIdToObject(id);​​
​​if​​​ ​​(ent == ​​​​null​​​​)​​
​​return​​​ ​​false​​​​;​​
​​MxDrawMcCmColor color = ​​​​new​​​ ​​MxDrawMcCmColor();​​
​​color.SetRGB(iR, iG, iB);​​

​​// 设置实体颜色。​​
​​ent.TrueColor = color;​​
​​return​​​ ​​true​​​​;​​
​​}​​

3、COM接口调用方式,如js代码:

// 向当前空间增加直线 newline 是增加的新直线。​​
​​var​​​ ​​newline = curSpace.AddLine(point1.x,point1.y,point2.x,point2.y);​​

​​var​​​ ​​color = MxDrawXCtrl_Obj.NewComObject(​​​​"IMxDrawMcCmColor"​​​​);​​
​​color.SetRGB(255,77,0);​​
​​newline.TrueColor = color;​​

三、修改实体的其他特性

1、下面实现修改其它属性的函数,比如:

(1)修改图层属性:

// -------------------------------------------------------------------------​​
​​// Summary:​​
​​// 修改对象图层.​​
​​// Parameters:​​
​​// id - 实体的id.​​
​​// pszLayerName - 层名,如果数据库,没有该层名,返回失败。​​
​​// Returns:​​
​​// 成功返回true​​
​​// -------------------------------------------------------------------------​​
​​bool ChangeLayer(McDbObjectId id,LPCTSTR pszLayerName)​​
​​{​​
​​// 用智能指针打开对象,写方式打开。智能指针会自动关闭对象.​​
​​McDbObjectPointer spEnt(id,McDb::kForWrite);​​
​​if​​​​(spEnt.openStatus() != Mcad::eOk)​​
​​{​​
​​// 如果对象,在其它地方打开,就会打开的失败.​​
​​return​​​ ​​false​​​​;​​
​​}​​

​​// 设置对象颜色​​
​​if​​​​(spEnt->setLayer(pszLayerName) != Mcad::eOk)​​
​​return​​​ ​​false​​​​;​​

​​return​​​ ​​true​​​​;​​
​​}​​

(2)比如修改线型属性:

// -------------------------------------------------------------------------​​
​​// Summary:​​
​​// 修改对象线型.​​
​​// Parameters:​​
​​// id - 实体的id.​​
​​// pszLinetypeName - 线型名,如果数据库,没有线型名,返回失败。​​
​​// Returns:​​
​​// 成功返回true​​
​​// -------------------------------------------------------------------------​​
​​bool ChangeLinetype(McDbObjectId id,LPCTSTR pszLinetypeName)​​
​​{​​
​​// 用智能指针打开对象,写方式打开。智能指针会自动关闭对象.​​
​​McDbObjectPointer spEnt(id,McDb::kForWrite);​​
​​if​​​​(spEnt.openStatus() != Mcad::eOk)​​
​​{​​
​​// 如果对象,在其它地方打开,就会打开的失败.​​
​​return​​​ ​​false​​​​;​​
​​}​​

​​// 设置对象颜色​​
​​if​​​​(spEnt->setLinetype(pszLinetypeName) != Mcad::eOk)​​
​​return​​​ ​​false​​​​;​​

​​return​​​ ​​true​​​​;​​
​​}​​

精彩评论(0)

0 0 举报