当前位置:首页 > 帮助文档 > 快速入门 > 修改对象属性
简介修改对象颜色修改实体的其他特性
简介

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


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


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

     

    从对象指针到ID:所有的数据库对象都继承自McDbObject,调用McDbObject::objectId()返回对象的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;
}
梦想CAD是专业的CAD插件(控件),可轻松在网页、手机及BS/CS程序中浏览编辑DWG文件,不需安装AutoCAD即可运行。经十余年累积已非常稳定可靠,有关键的空间搜索算法,并使用汇编优化,可同时处理50万级实体,有非常高的图形显示和处理效率。
联系我们
TEL:400-888-5703
185-8173-1060
客服I QQ: 3570505660
技术I QQ: 827867134
技术II QQ:6884123
VIP服务购买
销售TEL:156-8136-8971
销售QQ:710714273
用户交流
控件QQ交流群1:73281982
控件QQ交流群2:112199959
MxCAD软件群 1:515771658
技术I:QQ
827867134
客服I:QQ
3570505660
销售QQ
710714273
联系电话400-888-5703