注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

XData的读取和设置  

2010-12-12 13:33:52|  分类: ObjectARX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转自Kean的博客,实现AutoCAD中实体的Xdata的设置和修改。

[CommandMethod("GetXD")]

static public void GetXData()

{

    Document doc =Application.DocumentManager.MdiActiveDocument;

    Editor ed = doc.Editor;

    PromptEntityOptions peo = new PromptEntityOptions("\n请选择实体");

    PromptEntityResult per =ed.GetEntity(peo);

    if (per.Status == PromptStatus.OK)

    {

        Transaction trans =doc.TransactionManager.StartTransaction();

        DBObject obj =trans.GetObject(per.ObjectId,OpenMode.ForRead);

        ResultBuffer rb = obj.XData;

        if (rb == null)

            ed.WriteMessage("\n实体不包括扩展数据");

        else

        {

            int n = 0;

            foreach (TypedValue tv in rb)

            {

                ed.WriteMessage("\n类型值{0} - 类型: {1}, : {2}",n,tv.TypeCode,tv.Value);

                n++;

            }

            rb.Dispose();

        }

        trans.Dispose();

    }//if

}

 

[CommandMethod("SetXD")]

static public void SetXData()

{

    Document doc = Application.DocumentManager.MdiActiveDocument;

    Editor ed = doc.Editor;

    PromptEntityOptions peo = new PromptEntityOptions("\n请选择实体");

    PromptEntityResult per = ed.GetEntity(peo);

    if (per.Status == PromptStatus.OK)

    {

        Transaction trans = doc.TransactionManager.StartTransaction();

        DBObject obj = trans.GetObject(per.ObjectId, OpenMode.ForWrite);

        AddRegAppTableRecord("Test");

        ResultBuffer rb = new ResultBuffer();

        rb.Add(new TypedValue(1001, "Test"));

        rb.Add(new TypedValue(1000, "only ascii under AutoCAD 2006"));

        rb.Add(new TypedValue(1000,"max length is 255"));

        /*

         * 1000 扩展数据中的ASCII串(最长字节)

         * 1001 扩展数据的已注册应用程序名(ASCII串,最长字节)。

         */

        obj.XData = rb;

        rb.Dispose();

        trans.Commit();

        trans.Dispose();

    }

}

 

static void AddRegAppTableRecord(string regAppName)

{

    Document doc = Application.DocumentManager.MdiActiveDocument;

    Editor ed = doc.Editor;

    Database db = doc.Database;

    Transaction trans = doc.TransactionManager.StartTransaction();

    RegAppTable rat = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForRead, false);

    if (!rat.Has(regAppName))

    {

        rat.UpgradeOpen();

        RegAppTableRecord ratr = new RegAppTableRecord();

        ratr.Name = regAppName;

        rat.Add(ratr);

        trans.AddNewlyCreatedDBObject(ratr, true);

    }

    trans.Commit();

    trans.Dispose();

}

 

  评论这张
 
阅读(2545)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016