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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值