用.Net开发Cad

Cad二次开发

 

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

文章地址:http://blog.csdn.net/yuandingmao/article/details/5563461

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

posted on 2011-09-16 13:09  xuguangren  阅读(539)  评论(0编辑  收藏  举报

导航