找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 959|回复: 0

[分享] MyFirstProject

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-10 16:14:10 | 显示全部楼层 |阅读模式

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

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

×
[url]http://www.cnblogs.com/gisoracle/archive/2012/02/19/2357925.html[/url]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.EditorInput;
  8. using Autodesk.AutoCAD.DatabaseServices;
  9. using Autodesk.AutoCAD.Geometry;



  10. namespace MyFirstProject
  11. {
  12.     public class Class1
  13.     {
  14.         [CommandMethod("HelloNet")]
  15.         public void HelloNet()
  16.         {
  17.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  18.             ed.WriteMessage("使用NET开发AutoCAD 程序bygisoracle");
  19.         }
  20.         [CommandMethod("PickPoint")]
  21.         public void PickPoint()
  22.         {
  23.             //获取Editor 对象
  24.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  25.             PromptPointOptions promptPtOp = new PromptPointOptions("选择一个点:");
  26.             //指定的基点,如果指定了该点,则在选择的时候绘制一条橡皮线。
  27.             promptPtOp.BasePoint = new Autodesk.AutoCAD.Geometry.Point3d(0, 0, 0);
  28.             PromptPointResult resPt;
  29.             resPt = ed.GetPoint(promptPtOp);
  30.             if (resPt.Status == PromptStatus.OK)
  31.             {
  32.                 ed.WriteMessage(" 选择的点为: " + resPt.Value.ToString());
  33.             }

  34.         }
  35.         [CommandMethod("createCircle")]
  36.         public void createCircle()
  37.         {
  38.            
  39.             //首先声明我们要使用的对象
  40.             Circle circle; //这个是我们要加入到模型空间的圆
  41.             BlockTableRecord btr;//要加入圆,我们必须打开模型空间
  42.             BlockTable bt; //要打开模型空间,我们必须通过块表(BlockTable)来访问它

  43.             //我们使用一个名为‘Transaction’的对象,把函数中有关数据库的操作封装起来
  44.             Transaction trans;

  45.             //使用TransactionManager的StartTransaction()成员来开始事务处理
  46.             trans = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction();

  47.             //现在创建圆……请仔细看这些参数——注意创建Point3d对象的‘New’和Vector3d的静态成员ZAxis
  48.             circle = new Circle(new Point3d(10, 10, 0), Vector3d.ZAxis, 2);
  49.             bt = (BlockTable)trans.GetObject(HostApplicationServices.WorkingDatabase.BlockTableId, OpenMode.ForRead);

  50.             //使用当前的空间Id来获取块表记录——注意我们是打开它用来写入
  51.             btr = (BlockTableRecord)trans.GetObject(HostApplicationServices.WorkingDatabase.CurrentSpaceId, OpenMode.ForWrite);

  52.             //现在使用btr对象来加入圆
  53.             btr.AppendEntity(circle);
  54.             trans.AddNewlyCreatedDBObject(circle, true); //并确定事务处理知道要加入圆!

  55.             //一旦完成以上操作,我们就提交事务处理,这样以上所做的改变就被保存了……
  56.             trans.Commit();

  57.             //…然后销毁事务处理,因为我们已经完成了相关的操作(事务处理不是数据库驻留对象,可以销毁)
  58.             trans.Dispose();

  59.         }
  60.         [CommandMethod("SelectAPoint")]
  61.         public void SelectAPoint()
  62.         {
  63.             //实例化一个 PromptPointOptions类用来设置提示字符串和其他的一些控制提示
  64.             PromptPointOptions prPointOptions = new PromptPointOptions("Select a point");
  65.             PromptPointResult prPointRes;
  66.             // 实例化一个Editor类,使用GetPoint方法返回
  67.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  68.             prPointRes = ed.GetPoint(prPointOptions);
  69.             if (prPointRes.Status != PromptStatus.OK)
  70.             {
  71.                 ed.WriteMessage("Error");
  72.             }
  73.             else
  74.             {
  75.                 ed.WriteMessage("选择的点为:" + prPointRes.Value.ToString());
  76.             }
  77.         }
  78.         [CommandMethod("getDistance")]
  79.         public void GetDistance()
  80.         {
  81.             PromptDistanceOptions prDistOptions = new
  82.             PromptDistanceOptions("计算两点距离,请选择第一个点:");
  83.             PromptDoubleResult prDistRes;
  84.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  85.             prDistRes = ed.GetDistance(prDistOptions);
  86.             if (prDistRes.Status != PromptStatus.OK)
  87.             {
  88.                 ed.WriteMessage("选择错误!");
  89.             }
  90.             else
  91.             {
  92.                 ed.WriteMessage("两点的距离为:" + prDistRes.Value.ToString());
  93.             }
  94.         }
  95.         [CommandMethod("AddPointAndSetPointStyle")]

  96.         public static void AddPointAndSetPointStyle()
  97.         {
  98.             // 获得当前文档和数据库   Get the current document and database
  99.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  100.             Database acCurDb = acDoc.Database;

  101.             // 启动一个事务  Start a transaction
  102.             using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  103.             {
  104.                 // 以只读方式打开块表   Open the Block table for read
  105.                 BlockTable acBlkTbl;
  106.                 acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  107.                                              OpenMode.ForRead) as BlockTable;

  108.                 // 以写方式打开模型空间块表记录   Open the Block table record Model space for write
  109.                 BlockTableRecord acBlkTblRec;
  110.                 acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  111.                                                 OpenMode.ForWrite) as BlockTableRecord;

  112.                 // 在模型空间中创建一个坐标为(4,3,0)的点   Create a point at (4, 3, 0) in Model space
  113.                 for (int i = 0; i < 100; i++)
  114.                 {
  115.                     DBPoint acPoint = new DBPoint(new Point3d(4*i, 3, 0));

  116.                     acPoint.SetDatabaseDefaults();

  117.                     // 添加新对象到块表记录和事务中   Add the new object to the block table record and the transaction
  118.                     acBlkTblRec.AppendEntity(acPoint);
  119.                     acTrans.AddNewlyCreatedDBObject(acPoint, true);
  120.                 }
  121.                

  122.                 // 在图形中设置所有点对象的样式   Set the style for all point objects in the drawing
  123.                 acCurDb.Pdmode = 34;
  124.                 acCurDb.Pdsize = 1;

  125.                 // 保存新对象到数据库中   Save the new object to the database
  126.                 acTrans.Commit();
  127.             }
  128.         }
  129.         [CommandMethod("Add2DSolid")]
  130.         public static void Add2DSolid()
  131.         {
  132.             // 获得当前文档和数据库   Get the current document and database
  133.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  134.             Database acCurDb = acDoc.Database;

  135.             // 启动一个事务  Start a transaction
  136.             using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  137.             {
  138.                 // 以只读方式打开块表   Open the Block table for read
  139.                 BlockTable acBlkTbl;
  140.                 acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  141.                                              OpenMode.ForRead) as BlockTable;

  142.                 // 以写方式打开模型空间块表记录   Open the Block table record Model space for write
  143.                 BlockTableRecord acBlkTblRec;
  144.                 acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  145.                                                 OpenMode.ForWrite) as BlockTableRecord;

  146.                 // Create a quadrilateral (bow-tie) solid in Model space
  147.                
  148.                 Solid ac2DSolidBow = new Solid(new Point3d(0, 0, 0),
  149.                                                new Point3d(5, 0, 0),
  150.                                                new Point3d(5, 8, 0),
  151.                                                new Point3d(0, 8, 0));

  152.                 ac2DSolidBow.SetDatabaseDefaults();

  153.                 // 添加新对象到块表记录和事务中   Add the new object to the block table record and the transaction
  154.                 acBlkTblRec.AppendEntity(ac2DSolidBow);
  155.                 acTrans.AddNewlyCreatedDBObject(ac2DSolidBow, true);

  156.                 // Create a quadrilateral (square) solid in Model space
  157.                 Solid ac2DSolidSqr = new Solid(new Point3d(10, 0, 0),
  158.                                                new Point3d(15, 0, 0),
  159.                                                new Point3d(10, 8, 0),
  160.                                                new Point3d(15, 8, 0));

  161.                 ac2DSolidSqr.SetDatabaseDefaults();

  162.                 // 添加新对象到块表记录和事务中   Add the new object to the block table record and the transaction
  163.                 acBlkTblRec.AppendEntity(ac2DSolidSqr);
  164.                 acTrans.AddNewlyCreatedDBObject(ac2DSolidSqr, true);

  165.                 // 保存新对象到数据库中   Save the new object to the database
  166.                 acTrans.Commit();
  167.             }
  168.         }

  169.         [CommandMethod("AddLine")]
  170.         public static void AddLine()
  171.         {
  172.             // 获得当前文档和数据库   Get the current document and database
  173.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  174.             Database acCurDb = acDoc.Database;

  175.             // 启动一个事务  Start a transaction
  176.             using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  177.             {
  178.                 // 以只读方式打开块表   Open the Block table for read
  179.                 BlockTable acBlkTbl;
  180.                 acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  181.                                              OpenMode.ForRead) as BlockTable;

  182.                 // 以写方式打开模型空间块表记录   Open the Block table record Model space for write
  183.                 BlockTableRecord acBlkTblRec;
  184.                 acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  185.                                                 OpenMode.ForWrite) as BlockTableRecord;

  186.                 // 创建一条起点为(5,5,0),终点为(12,3,0)的直线  Create a line that starts at 5,5 and ends at 12,3
  187.                 Line acLine = new Line(new Point3d(5, 5, 0),
  188.                                        new Point3d(12, 3, 0));

  189.                 acLine.SetDatabaseDefaults();

  190.                 // 添加新对象到块表记录和事务中   Add the new object to the block table record and the transaction
  191.                 acBlkTblRec.AppendEntity(acLine);
  192.                 acTrans.AddNewlyCreatedDBObject(acLine, true);

  193.                 // 保存新对象到数据库中   Save the new object to the database
  194.                 acTrans.Commit();
  195.             }


  196.         }
  197.     }
  198. }

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

本版积分规则

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

GMT+8, 2024-11-17 22:41 , Processed in 0.248456 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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