找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3752|回复: 10

[分享] 推荐net开发cad入门阅读代码片段

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-31 10:14:25 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
http://www.cnblogs.com/cadlife/articles/2668158.html7xRBtKtlq8N8nyC-
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6个

财富等级: 恭喜发财

发表于 2014-8-31 13:23:10 | 显示全部楼层
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Collections;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using Autodesk.AutoCAD.Runtime;
  7. using Autodesk.AutoCAD.ApplicationServices;
  8. using Autodesk.AutoCAD.DatabaseServices;
  9. using Autodesk.AutoCAD.Geometry;
  10. namespace CH05
  11. {
  12.     public class Class1
  13.     {
  14.          //--------------------------------------------------------------
  15.         // 功能:添加扩展数据XDATA
  16.         // 作者:
  17.         // 日期:2007-7-20
  18.         // 说明:
  19.         //
  20.         //----------------------------------------------------------------
  21.         [CommandMethod("AddXData")]
  22.         public void AddXData()
  23.         {
  24.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  25.             ed.WriteMessage("添加扩充数据XDATA\n");
  26.             PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象\n");
  27.             PromptEntityResult entRes;
  28.             entRes = ed.GetEntity(entOps);
  29.             if (entRes.Status != PromptStatus.OK)
  30.             {
  31.                 ed.WriteMessage("选择对象失败,退出");
  32.                 return;
  33.             }
  34.             ObjectId objId = entRes.ObjectId;
  35.             Database db = HostApplicationServices.WorkingDatabase;
  36.             using (Transaction trans = db.TransactionManager.StartTransaction())
  37.             {
  38.                 Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity ;
  39.                 ent.ColorIndex = 1;
  40.                 RegAppTable appTbl = trans.GetObject(db.RegAppTableId, OpenMode.ForWrite) as RegAppTable ;
  41.                 if (!appTbl.Has("MyAppName"))
  42.                 {
  43.                     RegAppTableRecord appTblRcd = new RegAppTableRecord();
  44.                     appTblRcd.Name = "MyAppName";
  45.                     appTbl.Add(appTblRcd);
  46.                     trans.AddNewlyCreatedDBObject(appTblRcd, true);
  47.                 }
  48.                 ResultBuffer resBuf = new ResultBuffer();//new TypedValue(1001, "MyAppName"), new TypedValue(1000, "开发部门"));
  49.                 resBuf.Add(new TypedValue(1001, "MyAppName"));//注册程序名称
  50.                 resBuf.Add(new TypedValue(1000 , " 张三"));//姓名
  51.                 resBuf.Add(new TypedValue(1000 , " 工程部"));//部门
  52.                 resBuf.Add(new TypedValue(1040, 2000.0));//薪水
  53.                 ent.XData =  resBuf;
  54.                 trans.Commit();
  55.             }

  56.         }

  57.         //--------------------------------------------------------------
  58.         // 功能:获取扩展数据XDATA
  59.         // 作者:
  60.         // 日期:2007-7-20
  61.         // 说明:
  62.         //
  63.         //------------------------------------------------------------
  64.         [CommandMethod("GETXDATA")]
  65.         public void GETXDATA()
  66.         {
  67.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  68.             ed.WriteMessage("获取扩充数据XDATA\n");
  69.             PromptEntityOptions entOps = new PromptEntityOptions("选择带扩展数据的对象");
  70.             PromptEntityResult entRes = ed.GetEntity(entOps);
  71.             if (entRes.Status != PromptStatus.OK)
  72.             {
  73.                 ed.WriteMessage("选择对象失败,退出");
  74.                 return;
  75.             }
  76.             Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  77.             using (Transaction trans = db.TransactionManager.StartTransaction())
  78.             {
  79.                 Entity ent = (Entity)trans.GetObject(entRes.ObjectId, OpenMode.ForRead);
  80.                 ResultBuffer resBuf = ent.XData;
  81.                 if (resBuf != null)
  82.                 {
  83.                     //
  84.                     IEnumerator iter = resBuf.GetEnumerator();
  85.                     while (iter.MoveNext())
  86.                     {
  87.                         TypedValue tmpVal = (TypedValue)iter.Current;
  88.                         ed.WriteMessage(tmpVal.TypeCode.ToString() + ":");
  89.                         ed.WriteMessage(tmpVal.Value.ToString() + "\n");
  90.                     }
  91.                 }
  92.             }
  93.         }
  94.         //--------------------------------------------------------------
  95.         // 功能:在命名对象词典中添加数据
  96.         // 作者:
  97.         // 日期:2007-7-20
  98.         // 说明:
  99.         //
  100.         //------------------------------------------------------------
  101.         [CommandMethod("AddInNOD")]
  102.         public void AddInNOD()
  103.         {
  104.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  105.             ed.WriteMessage("在命名对象词典中添加数据\n");
  106.             Database db = HostApplicationServices.WorkingDatabase;
  107.             using (Transaction trans = db.TransactionManager.StartTransaction())
  108.             {
  109.                 //获取命名对象词典(NOD)
  110.                 DBDictionary NOD =trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite) as DBDictionary ;
  111.                 // 声明一个新的词典
  112.                 DBDictionary copyrightDict;
  113.                 // 判断是否存在COPYRIGHT词典,没有则创建
  114.                 try
  115.                 {
  116.                     // 获取COPYRIGHT词典
  117.                     copyrightDict = (DBDictionary)trans.GetObject(NOD.GetAt("COPYRIGHT"), OpenMode.ForRead);
  118.                 }
  119.                 catch
  120.                 {
  121.                     //在NOD下创建COPYRIGHT词典
  122.                     copyrightDict = new DBDictionary();
  123.                     NOD.SetAt("COPYRIGHT", copyrightDict);
  124.                     trans.AddNewlyCreatedDBObject(copyrightDict, true);
  125.                 }
  126.                 // 在copyrightDict中,获取或创建 "author" 词典
  127.                 DBDictionary authorDict;
  128.                 try
  129.                 {
  130.                     authorDict = (DBDictionary)trans.GetObject(copyrightDict.GetAt("Author"), OpenMode.ForWrite);
  131.                 }
  132.                 catch
  133.                 {
  134.                     authorDict = new DBDictionary();
  135.                     //"author" doesn't exist, create one
  136.                     copyrightDict.UpgradeOpen();
  137.                     copyrightDict.SetAt("Author", authorDict);
  138.                     trans.AddNewlyCreatedDBObject(authorDict, true);
  139.                 }
  140.                 // 通过Xrecord和ResultBuffer添加扩展数据
  141.                 Xrecord authorRec;
  142.                 try
  143.                 {
  144.                     authorRec = (Xrecord)trans.GetObject(authorDict.GetAt("AuthorInfo"), OpenMode.ForWrite);
  145.                 }
  146.                 catch
  147.                 {
  148.                     authorRec = new Xrecord();
  149.                     authorRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, "张三"));
  150.                     authorDict.SetAt("AuthorInfo", authorRec);
  151.                     trans.AddNewlyCreatedDBObject(authorRec, true);
  152.                 }
  153.                 trans.Commit();
  154.             }
  155.         }
  156.         //--------------------------------------------------------------
  157.         // 功能:获取命名对象词典中的数据
  158.         // 作者:
  159.         // 日期:2007-7-20
  160.         // 说明:
  161.         //
  162.         //------------------------------------------------------------
  163.         [CommandMethod("GetInNOD")]
  164.         public void GetInNod()
  165.         {
  166.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  167.             ed.WriteMessage("获取命名对象词典中数据\n");
  168.             Database db = HostApplicationServices.WorkingDatabase;
  169.             using (Transaction trans = db.TransactionManager.StartTransaction())
  170.             {
  171.                 // 获取NOD
  172.                 DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead, false);
  173.                 // 获取COPYRIGHT词典
  174.                 DBDictionary copyrightDict = (DBDictionary)trans.GetObject(NOD.GetAt("COPYRIGHT"), OpenMode.ForRead);
  175.                 // 获取Author词典
  176.                 DBDictionary AuthorDict = (DBDictionary)trans.GetObject(copyrightDict.GetAt("Author"), OpenMode.ForRead);
  177.                 // 获取AuthorInfo扩展记录Xrecord
  178.                 Xrecord authorXRec = (Xrecord)trans.GetObject(AuthorDict.GetAt("AuthorInfo"), OpenMode.ForRead);
  179.                 ResultBuffer resBuf = authorXRec.Data;
  180.                 TypedValue val = resBuf.AsArray()[0];
  181.                 ed.WriteMessage("该图纸由{0}设计\n", val.Value);
  182.             }
  183.         }
  184.         //--------------------------------------------------------------
  185.         // 功能:添加数据到数据库对象的扩展词典中
  186.         // 作者:
  187.         // 日期:2007-7-20
  188.         // 说明:
  189.         //
  190.         //------------------------------------------------------------
  191.         [CommandMethod("AddExtDict")]
  192.         public void AddExtDict()
  193.         {
  194.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  195.             ed.WriteMessage("创建对象扩展词典\n");
  196.             PromptEntityOptions entOps = new PromptEntityOptions("选择要添加扩展数据的块\n");
  197.             PromptEntityResult entRes = ed.GetEntity(entOps);
  198.             if (entRes.Status != PromptStatus.OK)
  199.             {
  200.                 ed.WriteMessage("选择对象失败,退出");
  201.                 return;
  202.             }
  203.             Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  204.             using (Transaction trans = db.TransactionManager.StartTransaction())
  205.             {
  206.                 DBObject obj = trans.GetObject(entRes.ObjectId, OpenMode.ForWrite) as DBObject;
  207.                 BlockReference blkRef;
  208.                 if (obj is BlockReference)
  209.                 {
  210.                     blkRef = obj as BlockReference;
  211.                 }
  212.                 else
  213.                 {
  214.                     return;
  215.                 }
  216.                 // 创建对象的扩展词典
  217.                 blkRef.CreateExtensionDictionary();
  218.                 DBDictionary extensionDict = (DBDictionary)trans.GetObject(blkRef.ExtensionDictionary, OpenMode.ForWrite, false);

  219.                 // 通过Xrecord准备附加属性数据
  220.                 Xrecord xRec = new Xrecord();
  221.                 xRec.Data = new ResultBuffer(
  222.                   new TypedValue((int)DxfCode.Text, "张三"),// 姓名
  223.                   new TypedValue((int)DxfCode.Real, 1200.0),//薪水
  224.                   new TypedValue((int)DxfCode.Text, "技术部"));// 部门         
  225.                // 在扩展词典中添加扩展记录
  226.                 extensionDict.SetAt("EmployeeInfomation", xRec);
  227.                 trans.AddNewlyCreatedDBObject(xRec, true);
  228.                 trans.Commit();
  229.             }
  230.         }

  231.         //--------------------------------------------------------------
  232.         // 功能:获取数据库对象的扩展词典中的数据
  233.         // 作者:
  234.         // 日期:2007-7-20
  235.         // 说明:
  236.         //
  237.         //------------------------------------------------------------
  238.         [CommandMethod("GetExtDict")]
  239.         public void GetExtDict()
  240.         {
  241.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  242.             ed.WriteMessage("获取对象扩展词典信息\n");
  243.             PromptEntityOptions entOps = new PromptEntityOptions("选择添加了扩展数据的块\n");
  244.             PromptEntityResult entRes = ed.GetEntity(entOps);
  245.             if (entRes.Status != PromptStatus.OK)
  246.             {
  247.                 ed.WriteMessage("选择对象失败,退出");
  248.                 return;
  249.             }
  250.             Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  251.             using (Transaction trans = db.TransactionManager.StartTransaction())
  252.             {
  253.                 DBObject obj = trans.GetObject(entRes.ObjectId, OpenMode.ForWrite) as DBObject;
  254.                 BlockReference blkRef;
  255.                 if (obj is BlockReference)
  256.                 {
  257.                     blkRef = obj as BlockReference;
  258.                 }
  259.                 else
  260.                 {
  261.                     ed.WriteMessage("选择对象不是块,退出\n");
  262.                     return;
  263.                 }
  264.                 // 创建对象的扩展词典
  265.                 DBDictionary extensionDict = (DBDictionary)trans.GetObject(blkRef.ExtensionDictionary, OpenMode.ForWrite, false);
  266.                 // 获取AuthorInfo扩展记录Xrecord
  267.                 Xrecord EmpXRec = (Xrecord)trans.GetObject(extensionDict.GetAt("EmployeeInfomation"), OpenMode.ForRead);
  268.                 ResultBuffer resBuf = EmpXRec.Data;
  269.                 TypedValue val = resBuf.AsArray()[0];
  270.                 ed.WriteMessage("是员工姓名:{0}\n", val.Value);
  271.                 val = resBuf.AsArray()[1];
  272.                 ed.WriteMessage("该员工的薪水:{0}\n", val.Value);
  273.                 val = resBuf.AsArray()[2];
  274.                 ed.WriteMessage("该员工属于:{0}\n", val.Value);

  275.                 trans.Commit();
  276.             }
  277.         }
  278.     }
  279. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2014-8-31 13:26:20 | 显示全部楼层
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Autodesk.AutoCAD.EditorInput ;
  5. using Autodesk.AutoCAD.Runtime ;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.DatabaseServices ;
  8. namespace CH02
  9. {
  10.     public class Class1
  11.     {
  12.         //--------------------------------------------------------------
  13.         // 功能:获取用户输入
  14.         // 作者:
  15.         // 日期:2007-7-20
  16.         // 说明:
  17.         //   
  18.         //----------------------------------------------------------------
  19.         [CommandMethod("GetData")]
  20.         public void GetData()
  21.         {
  22.             //获取Editor对象
  23.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  24.             //获取整型数据
  25.             PromptIntegerOptions intOp = new PromptIntegerOptions("请输入多边形的边数:");
  26.             PromptIntegerResult intRes;
  27.             intRes = ed.GetInteger(intOp);
  28.             //判断用户输入
  29.             if (intRes.Status == PromptStatus.OK)
  30.             {
  31.                 int nSides = intRes.Value;
  32.                 ed.WriteMessage("多边形的边数为:" + nSides);
  33.             } if (intRes.Status == PromptStatus.Cancel)
  34.             {
  35.                 ed.WriteMessage("用户按了取消ESC键/n" );
  36.             }
  37.         }
  38.         //--------------------------------------------------------------
  39.         // 功能:要求用户输入点
  40.         // 作者:
  41.         // 日期:2007-7-20
  42.         // 说明:
  43.         //   
  44.         //----------------------------------------------------------------
  45.    [CommandMethod("PickPoint")]
  46.         static public void PickPoint()
  47.    {
  48.                 //获取Editor对象
  49.                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  50.        PromptPointOptions promptPtOp = new PromptPointOptions("选择一个点:");
  51.                 //指定的基点,如果指定了该点,则在选择的时候绘制一条橡皮线。
  52.                 promptPtOp.BasePoint = new Autodesk.AutoCAD.Geometry.Point3d(0, 0, 0);
  53.        PromptPointResult resPt;
  54.        resPt = ed.GetPoint(promptPtOp);
  55.        if (resPt.Status == PromptStatus.OK)
  56.        {
  57.                     ed.WriteMessage("选择的点为:" + resPt.Value.ToString());
  58.        }
  59.             }

  60.             //--------------------------------------------------------------
  61.             // 功能:获取选择集
  62.             // 作者:
  63.             // 日期:2007-7-20
  64.             // 说明:
  65.             //   
  66.             //----------------------------------------------------------------
  67.    [CommandMethod("SelectEnt")]
  68.         static public void SelectEnt()
  69.    {
  70.                 //获取Editor对象
  71.                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  72.                PromptSelectionOptions selectionOp = new PromptSelectionOptions();
  73.                PromptSelectionResult ssRes = ed.GetSelection(selectionOp);
  74.                if (ssRes.Status == PromptStatus.OK)
  75.                {
  76.                    SelectionSet SS = ssRes.Value;
  77.                    int nCount = SS.Count;
  78.                    ed.WriteMessage("选择了{0}个实体"  , nCount);
  79.                }      
  80.             }
  81.             //--------------------------------------------------------------
  82.             // 功能:获取选择集(带过滤)
  83.             // 作者:
  84.             // 日期:2007-7-20
  85.             // 说明:
  86.             //   
  87.             //----------------------------------------------------------------
  88.           [CommandMethod("SelectEnt2")]
  89.         static public void SelectEnt2()
  90.    {
  91.                 //获取Editor对象
  92.                Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  93.                 // 定义选择集选项
  94.                PromptSelectionOptions selectionOp = new PromptSelectionOptions();
  95.                  //创建选择集过滤器,只选择块对象
  96.                 TypedValue[] filList = new TypedValue[1];
  97.                 filList[0] = new TypedValue((int)DxfCode.Start, "INSERT");
  98.                SelectionFilter filter = new SelectionFilter(filList);
  99.                PromptSelectionResult ssRes = ed.GetSelection(selectionOp, filter);
  100.                if (ssRes.Status == PromptStatus.OK)
  101.                {
  102.                    SelectionSet SS = ssRes.Value;
  103.                    int nCount = SS.Count;
  104.                    ed.WriteMessage("选择了{0}个块"  , nCount);
  105.                }     
  106.             }
  107.        }

  108.   }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2014-8-31 13:27:29 | 显示全部楼层
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.DatabaseServices;
  8. using Autodesk.AutoCAD.Geometry;
  9. namespace CH04
  10. {
  11.     public class Class1
  12.     {

  13.         //--------------------------------------------------------------
  14.         // 功能:通过ObjectId打开对象
  15.         // 作者:
  16.         // 日期:2007-7-20
  17.         // 说明:
  18.         //
  19.         //----------------------------------------------------------------
  20.         [CommandMethod("OpenEnt")]
  21.         public void OpenEnt()
  22.         {
  23.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  24.             ed.WriteMessage("通过ObjectId打开对象\n");
  25.             PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象\n");
  26.             PromptEntityResult entRes;
  27.             entRes = ed.GetEntity(entOps);
  28.             if (entRes.Status != PromptStatus.OK)
  29.             {
  30.                 ed.WriteMessage("选择对象失败,退出");
  31.                 return;
  32.             }
  33.             ObjectId objId = entRes.ObjectId;
  34.             Database db = HostApplicationServices.WorkingDatabase;
  35.             using (Transaction trans = db.TransactionManager.StartTransaction())
  36.             {
  37.                 Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity ;
  38.                 ent.ColorIndex = 1;
  39.                 trans.Commit();
  40.             }
  41.   
  42.         }
  43.         //--------------------------------------------------------------
  44.         // 功能:类型识别和转换
  45.         // 作者:
  46.         // 日期:2007-7-20
  47.         // 说明:
  48.         //
  49.         //----------------------------------------------------------------
  50.         [CommandMethod("GetType")]
  51.         public void GetType()
  52.         {
  53.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  54.             ed.WriteMessage("数据库对象的类型识别和转换\n");
  55.             PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象");
  56.             PromptEntityResult entRes;
  57.             entRes = ed.GetEntity(entOps);
  58.             if (entRes.Status != PromptStatus.OK)
  59.             {
  60.                 ed.WriteMessage("选择对象失败,退出");
  61.                 return;
  62.             }
  63.             ObjectId objId = entRes.ObjectId;
  64.             Database db = HostApplicationServices.WorkingDatabase;
  65.             using (Transaction trans = db.TransactionManager.StartTransaction())
  66.             {
  67.                 Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity;
  68.                 ed.WriteMessage("ent.GetRXClass().Name :" + ent.GetRXClass().Name + "\n");
  69.                 if (ent is Line)
  70.                 {
  71.                     Line aLine = ent as Line;
  72.                     aLine.ColorIndex = 1;
  73.                 }
  74.                 else if (ent.GetType() == typeof(Circle))
  75.                 {
  76.                     Circle cir = (Circle)ent;
  77.                     cir.ColorIndex = 2;
  78.                 }
  79.                 trans.Commit();
  80.             }
  81.         }
  82.         //--------------------------------------------------------------
  83.         // 功能:实体对象的属性
  84.         // 作者:
  85.         // 日期:2007-7-20
  86.         // 说明:
  87.         //
  88.         //----------------------------------------------------------------
  89.         [CommandMethod("EntPro")]
  90.         public void EntPro()
  91.         {
  92.             
  93.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  94.             ed.WriteMessage("实体对象的属性\n");
  95.             PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象\n");
  96.             PromptEntityResult entRes;
  97.             entRes = ed.GetEntity(entOps);
  98.             if (entRes.Status != PromptStatus.OK)
  99.             {
  100.                 ed.WriteMessage("选择对象失败,退出\n");
  101.                 return;
  102.             }
  103.             ObjectId objId = entRes.ObjectId;
  104.             Database db = HostApplicationServices.WorkingDatabase;
  105.             using (Transaction trans = db.TransactionManager.StartTransaction())
  106.             {
  107.                 Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity;
  108.                 ed.WriteMessage("获取或设置实体的线型\n");
  109.                 ed.WriteMessage("实体的原先的线型为 :" + ent.Linetype + "\n");
  110.                 // 获取线型表记录
  111.                 LinetypeTable lineTypeTbl = trans.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
  112.                 // 确保DOT线型名已经加载到当前数据库
  113.                 LinetypeTableRecord lineTypeTblRec = trans.GetObject(lineTypeTbl["DOT"], OpenMode.ForRead) as LinetypeTableRecord;
  114.                 // 设置实体的线型
  115.                 ent.LinetypeId = lineTypeTblRec.ObjectId;
  116.                 // 设置实体的线型比例
  117.                 ed.WriteMessage("设置实体的线型比例为2.0\n");
  118.                 ent.LinetypeScale = 2.0;
  119.                 //设置实体的可见性
  120.                 ent.Visible = true;
  121.                  //设置实体所在的层
  122.                 ed.WriteMessage("实体的原先所在的层为 :" + ent.Layer + "\n");
  123.                 ent.Layer = "layer0";
  124.                 trans.Commit();
  125.             }
  126.         }
  127.     }
  128. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2014-8-31 13:28:22 | 显示全部楼层
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using Autodesk.AutoCAD.EditorInput;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.DatabaseServices;
  8. using Autodesk.AutoCAD.Geometry;
  9. namespace CH03
  10. {
  11.     public class Class1
  12.     {
  13.         //--------------------------------------------------------------
  14.         // 功能:创建一个新层
  15.         // 作者:
  16.         // 日期:2007-7-20
  17.         // 说明:
  18.         //
  19.         //----------------------------------------------------------------
  20.         [CommandMethod("CreateLayer")]
  21.         public void CreateLayer()
  22.         {
  23.             ObjectId layerId;
  24.             Database db = HostApplicationServices.WorkingDatabase;
  25.             //开始一个事务
  26.             Transaction trans = db.TransactionManager.StartTransaction();
  27.             try
  28.             {
  29.                 //首先取得层表
  30.                 LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
  31.                 //检查MyLayer层是否存在
  32.                 if (lt.Has("MyLayer"))
  33.                 {
  34.                     layerId = lt["MyLayer"];
  35.                 }
  36.                 else
  37.                 {
  38.                     //如果MyLayer层不存在,就创建它
  39.                     LayerTableRecord ltr = new LayerTableRecord();
  40.                     ltr.Name = "MyLayer"; //设置层的名字
  41.                     layerId = lt.Add(ltr);
  42.                     trans.AddNewlyCreatedDBObject(ltr, true);
  43.                 }
  44.                 //提交事务
  45.                 trans.Commit();
  46.             }
  47.             catch (Autodesk.AutoCAD.Runtime.Exception e)
  48.             {
  49.                 //放弃事务
  50.                 trans.Abort();
  51.             }
  52.             finally
  53.             {
  54.                 // 显式地释放
  55.                 trans.Dispose();
  56.             }
  57.         }
  58.         //--------------------------------------------------------------
  59.         // 功能:创建一个圆
  60.         // 作者:
  61.         // 日期:2007-7-20
  62.         // 说明:
  63.         //
  64.         //----------------------------------------------------------------
  65.         [CommandMethod("CreateCircle")]
  66.         public void  CreateCircle()
  67.         {
  68.             Database db = HostApplicationServices.WorkingDatabase;
  69.             // 使用 "using" ,结束是自动调用事务的 "Dispose"
  70.             using (Transaction trans = db.TransactionManager.StartTransaction())
  71.             {
  72.                 //获取块表和模型空间
  73.                 BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForRead));
  74.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  75.                 //创建一个圆并添加到块表记录(模型空间)
  76.                 Point3d center = new Point3d(10, 10, 0);
  77.                 Circle circle = new Circle(center, Vector3d.ZAxis, 10.0);
  78.                 circle.ColorIndex = 1;
  79.                 btr.AppendEntity(circle);
  80.                 trans.AddNewlyCreatedDBObject(circle, true);
  81.                 trans.Commit();
  82.             }
  83.         }
  84.         //--------------------------------------------------------------
  85.         // 功能:创建一个块定义(块表记录)
  86.         // 作者:
  87.         // 日期:2007-7-20
  88.         // 说明:
  89.         //   
  90.         //----------------------------------------------------------------
  91.         public ObjectId CreateBlkDef()
  92.         {
  93.             //定义函数的返回值ObjectId
  94.             ObjectId blkObjId = new ObjectId();
  95.             Database db = HostApplicationServices.WorkingDatabase;
  96.             // 使用 "using"关键字指定事务的边界
  97.             using (Transaction trans = db.TransactionManager.StartTransaction())
  98.             {
  99.                 //获取块表
  100.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
  101.                 //通过块名myBlkName判断块表中是否包含块表记录
  102.                 if ((bt.Has("myBlkName")))
  103.                 {
  104.                     blkObjId = bt["myBlkName"];//如果已经存在,通过块名获取块对应的ObjectId
  105.                 }
  106.                 else
  107.                 {
  108.                     //创建一个圆
  109.                     Point3d center = new Point3d(10, 10, 0);
  110.                     Circle circle = new Circle(center, Vector3d.ZAxis, 2);
  111.                     circle.ColorIndex = 1;      
  112.                     //创建文本Text:
  113.                     MText text = new MText();
  114.                     text.Contents = " ";
  115.                     text.Location = center;
  116.                     text.ColorIndex = 2;
  117.                     //创建新的块表记录 myBlkName
  118.                     BlockTableRecord newBtr = new BlockTableRecord();
  119.                     newBtr.Name = "myBlkName";
  120.                     newBtr.Origin = center;
  121.                     //保存块表记录到块表
  122.                     blkObjId = bt.Add(newBtr); // 返回块对应的ObjectId
  123.                     trans.AddNewlyCreatedDBObject(newBtr, true); //Let the transaction know about any object/entity you add to the database!
  124.                   
  125.                     //保存新创建的实体到块表记录
  126.                     newBtr.AppendEntity(circle);
  127.                     newBtr.AppendEntity(text);
  128.                     // 通知事务新创建了对象
  129.                     trans.AddNewlyCreatedDBObject(circle, true);
  130.                     trans.AddNewlyCreatedDBObject(text, true);
  131.                 }
  132.                 trans.Commit(); //提交事务
  133.             }
  134.             return blkObjId;
  135.         }

  136.         //--------------------------------------------------------------
  137.         // 功能:创建一个块引用
  138.         // 作者:
  139.         // 日期:2007-7-20
  140.         // 说明:
  141.         //
  142.         //----------------------------------------------------------------
  143.         [CommandMethod("CreateBlk")]
  144.         public void CreateBlkRef()
  145.         {
  146.             
  147.             
  148.             //获取块的插入点
  149.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  150.             PromptPointOptions ptOps = new PromptPointOptions("选择块的插入点");
  151.             PromptPointResult ptRes;
  152.             ptRes = ed.GetPoint(ptOps);
  153.             Point3d ptInsert;
  154.             if (ptRes.Status == PromptStatus.OK)
  155.             {
  156.                 ptInsert = ptRes.Value ;
  157.             }
  158.             else
  159.             {
  160.                 ptInsert = new Point3d(0, 0, 0);
  161.             }
  162.             Database db = HostApplicationServices.WorkingDatabase;
  163.             // 使用 "using"关键字指定事务的边界
  164.             using (Transaction trans = db.TransactionManager.StartTransaction())
  165.             {
  166.                 //获取块表和模型空间
  167.                 BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
  168.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  169.                
  170.                 //创建块引用
  171.                 BlockReference blkRef = new BlockReference(ptInsert,CreateBlkDef());// 指定插入点和所引用的块表记录
  172.                 blkRef.Rotation = 1.57;//指定旋转角,按弧度
  173.                 //保存新创建的块引用到模型空间   
  174.                 btr.AppendEntity(blkRef);
  175.                 trans.AddNewlyCreatedDBObject(blkRef, true);    // 通知事务新创建了对象
  176.                 trans.Commit(); //提交事务
  177.             }
  178.   
  179.         }
  180.         //--------------------------------------------------------------
  181.         // 功能:读取对象的属性
  182.         // 作者:
  183.         // 日期:2007-7-20
  184.         // 说明:
  185.         //
  186.         //----------------------------------------------------------------
  187.         [CommandMethod("OpenEnt")]
  188.         public void OpenEnt()
  189.         {
  190.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  191.             PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象");
  192.             PromptEntityResult entRes;
  193.             entRes = ed.GetEntity(entOps);
  194.             if (entRes.Status != PromptStatus.OK)
  195.             {
  196.                 ed.WriteMessage("选择对象失败,退出");
  197.                 return;
  198.             }
  199.             ObjectId objId = entRes.ObjectId;
  200.             Database db = HostApplicationServices.WorkingDatabase;
  201.             using (Transaction trans = db.TransactionManager.StartTransaction())
  202.             {
  203.                 Entity ent = (Entity)trans.GetObject(objId, OpenMode.ForWrite);
  204.                 ent.ColorIndex = 1;
  205.                 trans.Commit();
  206.             }
  207.         }
  208.     }
  209. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3701个

财富等级: 富可敌国

发表于 2014-11-3 23:26:51 | 显示全部楼层
谢谢分享!还有吗?:lol
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-12-24 09:38:41 | 显示全部楼层

不错,挺好的,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-3-6 22:03:35 | 显示全部楼层
非常精悍!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 27个

财富等级: 恭喜发财

发表于 2016-9-24 16:07:43 | 显示全部楼层
非常精悍!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2017-12-20 10:47:00 | 显示全部楼层
C#的,有vb.net的不?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 82个

财富等级: 招财进宝

发表于 2020-6-13 17:18:59 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-29 07:05 , Processed in 0.453570 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表