EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 680|回复: 0
打印 上一主题 下一主题

[资料] delphi.net二次开发AutoCAD(四)GetPoint 方法

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:23:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 GetPoint 方法提示用户在 AutoCAD 命令提示下给出点的定义。PromptPointOptions 对象允许用户控制输入和如何显示提示信息。PromptPointOptions 对象的 UseBasePoint 和 BasePoint 属性控制是否从基点绘制一条橡皮线。PromptPointOptions 对象的 Keywords 属性允许用户定义用户可以在命令提示中输入除指定点外的关键字。

  下面的样例提示用户输入两个点,然后以这两个点为起点和端点绘制一条直线(该例子根据用户点击鼠标,获取用户选定的点)  
  1. namespace ClassLibrary3;

  2. interface
  3. uses
  4.   Autodesk.AutoCAD.Runtime, Autodesk.AutoCAD.ApplicationServices,Autodesk.AutoCAD.EditorInput,
  5.   Autodesk.AutoCAD.DatabaseServices,Autodesk.AutoCAD.Geometry;

  6. type
  7.   Class1 =public  class
  8.   private
  9.   public
  10.     [CommandMethod('GetPointsFromUser')]
  11.     class method GetPointsFromUser;
  12.   end;

  13. implementation
  14. class method Class1.GetPointsFromUser;
  15. var
  16.   acDococument;
  17.   acCurDbatabase;  
  18.   pPtResromptPointResult;
  19.   pPtOptsromptPointOptions;
  20.   ptStartoint3d;
  21.   ptEndoint3d;
  22.   acTrans:Transaction;
  23.   acBlkTbl:BlockTable;
  24.   acBlkTblRec:BlockTableRecord;
  25.   acLineine;
  26. begin  
  27.   //获得当前数据库并启动事务管理器    Get the current database and start the Transaction Manager
  28.   acDoc:= Application.DocumentManager.MdiActiveDocument;
  29.   acCurDb:= acDoc.Database;
  30.   pPtOpts:= New PromptPointOptions('');  
  31.   //提示开始点   Prompt for the start point
  32.   pPtOpts.Message := #13+ 'Enter the start point of the line: ';
  33.   pPtRes := acDoc.Editor.GetPoint(pPtOpts);
  34.   ptStart:= pPtRes.Value;  
  35.   //如果用户按了 ESC 键或取消了命令就退出   Exit if the user presses ESC or cancels the command
  36.   If pPtRes.Status = PromptStatus.Cancel Then Exit;

  37.   //提示结束点
  38.   pPtOpts.Message :=#13+'Enter the end point of the line:';
  39.   pPtOpts.UseBasePoint:=True;
  40.   pPtOpts.BasePoint:=ptStart;
  41.   pPtRes := acDoc.Editor.GetPoint(pPtOpts);
  42.   ptEnd:= pPtRes.Value;

  43.   If pPtRes.Status = PromptStatus.Cancel Then Exit;  
  44.   //启动一个事务
  45.   try
  46.     acTrans:= acCurDb.TransactionManager.StartTransaction;  
  47.     //以写的方式打开模型空间
  48.   acBlkTbl := acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;
  49.     acBlkTblRec := acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  50.     //定义新的直线
  51.     acLine:= New Line(ptStart, ptEnd);
  52.     acLine.SetDatabaseDefaults;
  53.     //添加直线到图形中去
  54.     acBlkTblRec.AppendEntity(acLine);
  55.     acTrans.AddNewlyCreatedDBObject(acLine, True);
  56.     //缩放到图形的范围或界限
  57.     acDoc.SendStringToExecute('._zoom _all ', True, False, False);
  58.   finally     
  59.     //提交修改并销毁事务
  60.     acTrans.Commit;
  61.   end;
  62. end;

  63. end.
复制代码
后记:在翻译这一段代码的过程中,出现了一个非委托的错误,原因是我在翻译的时候将下两行代码
  1.   acBlkTbl := acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable;
  2.   acBlkTblRec := acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;
  3. 中的as BlockTable和as BlockTableRecord两个运算去掉,加上这两个以后就正常了。
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-16 12:49

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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