CAD改变图形对象属性
1、所有对象都一个唯一的标识id和句柄,都是用来标识对象,知道对象的Id或句柄,就能找到对象并修改属性。id是只在当前内存中唯一,下次再打开id就会发生变化,句柄会随图纸保存,并会一直不变。
2、对象Id,指针,句柄三者之前的转换关系:
(1)从 ID 到对象指针:通过Mx::mcdbOpenObject 打开对象,或使用智能指针打开, McDbObjectPointer。
(2)从对象指针到 ID: 所有的数据库对象都继承自McDbObject,调用McDbObject::objectId()返回对象的ID。
(3)从 句 柄 到 ID: 使用McDbDatabase::getAcDbObjectId 函数。
(4)从 ID 到 句 柄: 使用McDbObjectId::handle 函数。
(5)从 指 针 到 句 柄:使用 McDbObject::getAcDbHandle 函数。
修改对象颜色
1、上一节中:函数McDbObjectId CreateLine1(McGePoint3d pt1,McGePoint3d pt2)会返回新绘制的对象id。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // ------------------------------------------------------------------------- // 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#代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | // ------------------------------------------------------------------------- // 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 ; } |
修改实体的其他特性
下面实现修改其它属性的函数,比如:
修改图层属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // ------------------------------------------------------------------------- // 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 ; } |
比如修改线型属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // ------------------------------------------------------------------------- // 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 ; } |
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~