CAD改变图形对象属性

匿名 (未验证) 提交于 2019-12-02 23:47:01

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


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


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

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

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


修改对象颜色


上一节中:函数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; }


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;         }


修改实体的其他特性


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


修改图层属性:


// ------------------------------------------------------------------------- // 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; }


比如修改线型属性:


 // ------------------------------------------------------------------------- // 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; }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!