- UID
- 675164
- 积分
- 224
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2013-4-19
- 最后登录
- 1970-1-1
|
发表于 2014-8-31 13:23:10
|
显示全部楼层
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Collections;
- using Autodesk.AutoCAD.EditorInput;
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Geometry;
- namespace CH05
- {
- public class Class1
- {
- //--------------------------------------------------------------
- // 功能:添加扩展数据XDATA
- // 作者:
- // 日期:2007-7-20
- // 说明:
- //
- //----------------------------------------------------------------
- [CommandMethod("AddXData")]
- public void AddXData()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- ed.WriteMessage("添加扩充数据XDATA\n");
- PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象\n");
- PromptEntityResult entRes;
- entRes = ed.GetEntity(entOps);
- if (entRes.Status != PromptStatus.OK)
- {
- ed.WriteMessage("选择对象失败,退出");
- return;
- }
- ObjectId objId = entRes.ObjectId;
- Database db = HostApplicationServices.WorkingDatabase;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity ;
- ent.ColorIndex = 1;
- RegAppTable appTbl = trans.GetObject(db.RegAppTableId, OpenMode.ForWrite) as RegAppTable ;
- if (!appTbl.Has("MyAppName"))
- {
- RegAppTableRecord appTblRcd = new RegAppTableRecord();
- appTblRcd.Name = "MyAppName";
- appTbl.Add(appTblRcd);
- trans.AddNewlyCreatedDBObject(appTblRcd, true);
- }
- ResultBuffer resBuf = new ResultBuffer();//new TypedValue(1001, "MyAppName"), new TypedValue(1000, "开发部门"));
- resBuf.Add(new TypedValue(1001, "MyAppName"));//注册程序名称
- resBuf.Add(new TypedValue(1000 , " 张三"));//姓名
- resBuf.Add(new TypedValue(1000 , " 工程部"));//部门
- resBuf.Add(new TypedValue(1040, 2000.0));//薪水
- ent.XData = resBuf;
- trans.Commit();
- }
- }
- //--------------------------------------------------------------
- // 功能:获取扩展数据XDATA
- // 作者:
- // 日期:2007-7-20
- // 说明:
- //
- //------------------------------------------------------------
- [CommandMethod("GETXDATA")]
- public void GETXDATA()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- ed.WriteMessage("获取扩充数据XDATA\n");
- PromptEntityOptions entOps = new PromptEntityOptions("选择带扩展数据的对象");
- PromptEntityResult entRes = ed.GetEntity(entOps);
- if (entRes.Status != PromptStatus.OK)
- {
- ed.WriteMessage("选择对象失败,退出");
- return;
- }
- Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- Entity ent = (Entity)trans.GetObject(entRes.ObjectId, OpenMode.ForRead);
- ResultBuffer resBuf = ent.XData;
- if (resBuf != null)
- {
- //
- IEnumerator iter = resBuf.GetEnumerator();
- while (iter.MoveNext())
- {
- TypedValue tmpVal = (TypedValue)iter.Current;
- ed.WriteMessage(tmpVal.TypeCode.ToString() + ":");
- ed.WriteMessage(tmpVal.Value.ToString() + "\n");
- }
- }
- }
- }
- //--------------------------------------------------------------
- // 功能:在命名对象词典中添加数据
- // 作者:
- // 日期:2007-7-20
- // 说明:
- //
- //------------------------------------------------------------
- [CommandMethod("AddInNOD")]
- public void AddInNOD()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- ed.WriteMessage("在命名对象词典中添加数据\n");
- Database db = HostApplicationServices.WorkingDatabase;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- //获取命名对象词典(NOD)
- DBDictionary NOD =trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite) as DBDictionary ;
- // 声明一个新的词典
- DBDictionary copyrightDict;
- // 判断是否存在COPYRIGHT词典,没有则创建
- try
- {
- // 获取COPYRIGHT词典
- copyrightDict = (DBDictionary)trans.GetObject(NOD.GetAt("COPYRIGHT"), OpenMode.ForRead);
- }
- catch
- {
- //在NOD下创建COPYRIGHT词典
- copyrightDict = new DBDictionary();
- NOD.SetAt("COPYRIGHT", copyrightDict);
- trans.AddNewlyCreatedDBObject(copyrightDict, true);
- }
- // 在copyrightDict中,获取或创建 "author" 词典
- DBDictionary authorDict;
- try
- {
- authorDict = (DBDictionary)trans.GetObject(copyrightDict.GetAt("Author"), OpenMode.ForWrite);
- }
- catch
- {
- authorDict = new DBDictionary();
- //"author" doesn't exist, create one
- copyrightDict.UpgradeOpen();
- copyrightDict.SetAt("Author", authorDict);
- trans.AddNewlyCreatedDBObject(authorDict, true);
- }
- // 通过Xrecord和ResultBuffer添加扩展数据
- Xrecord authorRec;
- try
- {
- authorRec = (Xrecord)trans.GetObject(authorDict.GetAt("AuthorInfo"), OpenMode.ForWrite);
- }
- catch
- {
- authorRec = new Xrecord();
- authorRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, "张三"));
- authorDict.SetAt("AuthorInfo", authorRec);
- trans.AddNewlyCreatedDBObject(authorRec, true);
- }
- trans.Commit();
- }
- }
- //--------------------------------------------------------------
- // 功能:获取命名对象词典中的数据
- // 作者:
- // 日期:2007-7-20
- // 说明:
- //
- //------------------------------------------------------------
- [CommandMethod("GetInNOD")]
- public void GetInNod()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- ed.WriteMessage("获取命名对象词典中数据\n");
- Database db = HostApplicationServices.WorkingDatabase;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- // 获取NOD
- DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead, false);
- // 获取COPYRIGHT词典
- DBDictionary copyrightDict = (DBDictionary)trans.GetObject(NOD.GetAt("COPYRIGHT"), OpenMode.ForRead);
- // 获取Author词典
- DBDictionary AuthorDict = (DBDictionary)trans.GetObject(copyrightDict.GetAt("Author"), OpenMode.ForRead);
- // 获取AuthorInfo扩展记录Xrecord
- Xrecord authorXRec = (Xrecord)trans.GetObject(AuthorDict.GetAt("AuthorInfo"), OpenMode.ForRead);
- ResultBuffer resBuf = authorXRec.Data;
- TypedValue val = resBuf.AsArray()[0];
- ed.WriteMessage("该图纸由{0}设计\n", val.Value);
- }
- }
- //--------------------------------------------------------------
- // 功能:添加数据到数据库对象的扩展词典中
- // 作者:
- // 日期:2007-7-20
- // 说明:
- //
- //------------------------------------------------------------
- [CommandMethod("AddExtDict")]
- public void AddExtDict()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- ed.WriteMessage("创建对象扩展词典\n");
- PromptEntityOptions entOps = new PromptEntityOptions("选择要添加扩展数据的块\n");
- PromptEntityResult entRes = ed.GetEntity(entOps);
- if (entRes.Status != PromptStatus.OK)
- {
- ed.WriteMessage("选择对象失败,退出");
- return;
- }
- Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- DBObject obj = trans.GetObject(entRes.ObjectId, OpenMode.ForWrite) as DBObject;
- BlockReference blkRef;
- if (obj is BlockReference)
- {
- blkRef = obj as BlockReference;
- }
- else
- {
- return;
- }
- // 创建对象的扩展词典
- blkRef.CreateExtensionDictionary();
- DBDictionary extensionDict = (DBDictionary)trans.GetObject(blkRef.ExtensionDictionary, OpenMode.ForWrite, false);
- // 通过Xrecord准备附加属性数据
- Xrecord xRec = new Xrecord();
- xRec.Data = new ResultBuffer(
- new TypedValue((int)DxfCode.Text, "张三"),// 姓名
- new TypedValue((int)DxfCode.Real, 1200.0),//薪水
- new TypedValue((int)DxfCode.Text, "技术部"));// 部门
- // 在扩展词典中添加扩展记录
- extensionDict.SetAt("EmployeeInfomation", xRec);
- trans.AddNewlyCreatedDBObject(xRec, true);
- trans.Commit();
- }
- }
- //--------------------------------------------------------------
- // 功能:获取数据库对象的扩展词典中的数据
- // 作者:
- // 日期:2007-7-20
- // 说明:
- //
- //------------------------------------------------------------
- [CommandMethod("GetExtDict")]
- public void GetExtDict()
- {
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- ed.WriteMessage("获取对象扩展词典信息\n");
- PromptEntityOptions entOps = new PromptEntityOptions("选择添加了扩展数据的块\n");
- PromptEntityResult entRes = ed.GetEntity(entOps);
- if (entRes.Status != PromptStatus.OK)
- {
- ed.WriteMessage("选择对象失败,退出");
- return;
- }
- Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
- using (Transaction trans = db.TransactionManager.StartTransaction())
- {
- DBObject obj = trans.GetObject(entRes.ObjectId, OpenMode.ForWrite) as DBObject;
- BlockReference blkRef;
- if (obj is BlockReference)
- {
- blkRef = obj as BlockReference;
- }
- else
- {
- ed.WriteMessage("选择对象不是块,退出\n");
- return;
- }
- // 创建对象的扩展词典
- DBDictionary extensionDict = (DBDictionary)trans.GetObject(blkRef.ExtensionDictionary, OpenMode.ForWrite, false);
- // 获取AuthorInfo扩展记录Xrecord
- Xrecord EmpXRec = (Xrecord)trans.GetObject(extensionDict.GetAt("EmployeeInfomation"), OpenMode.ForRead);
- ResultBuffer resBuf = EmpXRec.Data;
- TypedValue val = resBuf.AsArray()[0];
- ed.WriteMessage("是员工姓名:{0}\n", val.Value);
- val = resBuf.AsArray()[1];
- ed.WriteMessage("该员工的薪水:{0}\n", val.Value);
- val = resBuf.AsArray()[2];
- ed.WriteMessage("该员工属于:{0}\n", val.Value);
- trans.Commit();
- }
- }
- }
- }
|
|