在命名对象词典中添加数据获取数据

/***********************************************************************
 * FileName:        DBDictionaryClass .CS
 * File Created: 2010-4-9 15:26
 * Description:      数据字典,数据字典引用
 * Purpose :      
 * History:
 * Creator :    成吉思汗
 ********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Client.AutoCad
{
    public class DBDictionaryClass
    {
        #region 添加词典
        /// <summary>
        /// 添加词典
        /// </summary>
        /// <param name="dictionaryname">数据字典名称</param>
        public void AddDBDictionary(string dictionaryname)
        {
            Autodesk.AutoCAD.DatabaseServices.Database db = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
            Autodesk.AutoCAD.DatabaseServices.Transaction trans = db.TransactionManager.StartTransaction();
            try
            {
                //获取命名对象词典(NOD)
                Autodesk.AutoCAD.DatabaseServices.DBDictionary NOD = trans.GetObject(db.NamedObjectsDictionaryId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.DBDictionary;
                // 声明一个新的词典
                Autodesk.AutoCAD.DatabaseServices.DBDictionary newdictionary;
                // 判断是否存在COPYRIGHT词典,没有则创建
                if (NOD.Contains(dictionaryname))
                {
                    // 获取newdictionary词典
                    newdictionary = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(NOD.GetAt(dictionaryname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);

                }
                else
                {
                    //在NOD下创建newdictionary词典
                    newdictionary = new Autodesk.AutoCAD.DatabaseServices.DBDictionary();
                    NOD.SetAt(dictionaryname, newdictionary);
                    trans.AddNewlyCreatedDBObject(newdictionary, true);
                }
                trans.Commit();
            }
            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
                //放弃事务
                trans.Abort();
            }
            finally
            {
                trans.Dispose();
            }
        }
      
        /// <summary>
        /// 添加数据字典A上添加数据字典B
        /// </summary>
        /// <param name="dictionaryname">数据字典A名称</param>
        /// <param name="sondictionarayname">数据字典B名称</param>
        public void AddDBDictionary(string dictionaryname,string sondictionarayname)
        {
            Autodesk.AutoCAD.DatabaseServices.Database db = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
            Autodesk.AutoCAD.DatabaseServices.Transaction trans = db.TransactionManager.StartTransaction();
            try
            {

                //获取命名对象词典(NOD)
                Autodesk.AutoCAD.DatabaseServices.DBDictionary NOD = trans.GetObject(db.NamedObjectsDictionaryId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.DBDictionary;
                // 声明一个新的词典
                Autodesk.AutoCAD.DatabaseServices.DBDictionary newdictionary;
                // 判断是否存在newdictionary词典,没有则创建


                // 获取newdictionary词典
                if (NOD.Contains(dictionaryname))
                    newdictionary = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(NOD.GetAt(dictionaryname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                else
                {
                    //在NOD下创建newdictionary词典
                    newdictionary = new Autodesk.AutoCAD.DatabaseServices.DBDictionary();
                    NOD.SetAt(dictionaryname, newdictionary);
                    trans.AddNewlyCreatedDBObject(newdictionary, true);
                }


                // 在newdictionary中,获取或创建 sondictionarayname 词典
                Autodesk.AutoCAD.DatabaseServices.DBDictionary newsondictionary;

                if (newdictionary.Contains(sondictionarayname))
                    newsondictionary = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(newdictionary.GetAt(sondictionarayname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite);
                else
                {
                    newsondictionary = new Autodesk.AutoCAD.DatabaseServices.DBDictionary();

                    newdictionary.UpgradeOpen();
                    newdictionary.SetAt(sondictionarayname, newsondictionary);
                    trans.AddNewlyCreatedDBObject(newsondictionary, true);
                }
                trans.Commit();
            }
            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
                trans.Abort();
            }
            finally
            {
                trans.Dispose();
            }
        }
        #endregion

        #region 在DBDictionary上添加扩展记录
        /// <summary>
        /// 在DBDictionary上添加扩展记录
        /// </summary>
        /// <param name="dictionaryname">在即将要的数据字典上添加扩展记录的数据字典名称</param>
        /// <param name="xrecordname">即将要添加扩展记录的名称</param>
        /// <param name="obj">添加扩展记录的数据</param>
        public void AddXrecord(string dictionaryname,string xrecordname,Object obj)
        {
             Autodesk.AutoCAD.DatabaseServices.Database db = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
             Autodesk.AutoCAD.DatabaseServices.Transaction trans = db.TransactionManager.StartTransaction();
            try
            {
                //获取命名对象词典(NOD)
                Autodesk.AutoCAD.DatabaseServices.DBDictionary NOD = trans.GetObject(db.NamedObjectsDictionaryId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.DBDictionary;
                // 声明一个新的词典
                Autodesk.AutoCAD.DatabaseServices.DBDictionary dictionary;
                // 通过Xrecord和ResultBuffer添加扩展数据
                Autodesk.AutoCAD.DatabaseServices.Xrecord xrec;
                // 判断是否存在dictionary词典,没有则创建
                if(NOD.Contains(dictionaryname))
                {
                    // 获取dictionary词典
                    dictionary = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(NOD.GetAt(dictionaryname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                }
                else
                {
                    goto label;
                }
              
                if(dictionary.Contains(xrecordname))
                {
                    xrec = (Autodesk.AutoCAD.DatabaseServices.Xrecord)trans.GetObject(dictionary.GetAt(xrecordname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite);
                }
                else
                {
                    xrec = new Autodesk.AutoCAD.DatabaseServices.Xrecord();
                    xrec.Data = new Autodesk.AutoCAD.DatabaseServices.ResultBuffer(new Autodesk.AutoCAD.DatabaseServices.TypedValue((int)Autodesk.AutoCAD.DatabaseServices.DxfCode.Text, obj));
                    dictionary.SetAt(xrecordname, xrec);
                    trans.AddNewlyCreatedDBObject(xrec, true);
                }
            label:       
                trans.Commit();
            }
            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
                trans.Abort();
            }
            finally
            {
                trans.Dispose();
            }
        }
        #endregion

        #region 获取字典上的扩展记录
        /// <summary>
        /// 获取字典上的扩展记录
        /// </summary>
        /// <param name="dictionaryname">数据字典名称</param>
        /// <param name="xrecordname">扩展记录名称</param>
        /// <returns>返回对象</returns>
        public System.Object GetXRecordInDBDictionary(string dictionaryname, string xrecordname)
        {
            Autodesk.AutoCAD.DatabaseServices.TypedValue val = new Autodesk.AutoCAD.DatabaseServices.TypedValue();
            Autodesk.AutoCAD.DatabaseServices.Database db = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
            Autodesk.AutoCAD.DatabaseServices.Transaction trans = db.TransactionManager.StartTransaction();
           try
            {
                // 获取NOD
                Autodesk.AutoCAD.DatabaseServices.DBDictionary NOD = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead, false);
                // 获取dictionary词典
                Autodesk.AutoCAD.DatabaseServices.DBDictionary dictionary = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(NOD.GetAt(dictionaryname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                // 获取 扩展记录Xrecord
                Autodesk.AutoCAD.DatabaseServices.Xrecord authorXRec = (Autodesk.AutoCAD.DatabaseServices.Xrecord)trans.GetObject(dictionary.GetAt(xrecordname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                Autodesk.AutoCAD.DatabaseServices.ResultBuffer resBuf = authorXRec.Data;
                val =  resBuf.AsArray()[0];
                return val.Value;
            }
           catch (Autodesk.AutoCAD.Runtime.Exception e)
           {
               trans.Abort();
               return val.Value;
           }
           finally
           {
               trans.Dispose();
              
           }
        }
        /// <summary>
        /// 获取字典上的扩展记录
        /// </summary>
        /// <param name="dictionaryname">数据字典A名称</param>
        /// <param name="sondictionaryname">在数据字典A里的数据字典B</param>
        /// <param name="xrecordname">扩展记录名称</param>
        /// <returns>返回对象</returns>
        public System.Object GetXRecordInDBDictionary(string dictionaryname,string sondictionaryname,string xrecordname)
        {

            Autodesk.AutoCAD.DatabaseServices.Database db = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
            Autodesk.AutoCAD.DatabaseServices.TypedValue val = new Autodesk.AutoCAD.DatabaseServices.TypedValue();
            Autodesk.AutoCAD.DatabaseServices.Transaction trans = db.TransactionManager.StartTransaction();
            try
            {
                // 获取NOD
                Autodesk.AutoCAD.DatabaseServices.DBDictionary NOD = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead, false);
                // 获取dictionary词典
                Autodesk.AutoCAD.DatabaseServices.DBDictionary dictionary = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(NOD.GetAt(dictionaryname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                // 获取sondictionary词典
                Autodesk.AutoCAD.DatabaseServices.DBDictionary sondictionary = (Autodesk.AutoCAD.DatabaseServices.DBDictionary)trans.GetObject(dictionary.GetAt(sondictionaryname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                // 获取 扩展记录Xrecord
                Autodesk.AutoCAD.DatabaseServices.Xrecord authorXRec = (Autodesk.AutoCAD.DatabaseServices.Xrecord)trans.GetObject(sondictionary.GetAt(xrecordname), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead);
                Autodesk.AutoCAD.DatabaseServices.ResultBuffer resBuf = authorXRec.Data;
                val = resBuf.AsArray()[0];
                return val.Value;
            }
           catch (Autodesk.AutoCAD.Runtime.Exception e)
           {
               trans.Abort();
               return val.Value;
           }
           finally
           {
               trans.Dispose();
              
           }
        }
        #endregion
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值