在命名对象词典中添加数据获取数据
文章地址: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) 编辑 收藏 举报