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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

[资料] Delphi开发AutoCAD之选择并删除对象

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

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

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:22:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Delphi与AutoCAD进行连接(ActiveX),可以开发出很多程序。VB API手册中也详细了讲述了关于VBA开发CAD的方法。但是有些方法并没有实例,比如选择当前画布中所有对象。
  在我们开发一个小程序的时候,有时候会遇到实时进行修改的情况。如果不进行原对象的删除操作,将在不同参数下出现许多对象。比如我们要获得长度为5的线,但是第一次我们绘制的是长度为10的线,这样在刷新的过程中我们需要将长度为5的线删除。关于单对象的删除,比较简单,在VBA开发文档中有详细的描述。但是对象多的时候,关于选择就是一件繁琐的事情,可能会使你的代码量增加几倍。这样我们需要一次性删除所有对象。
  关于选择操作,首先我们要在文档中添加一个新的选择集(或者利用先前的选择集)
//样例代码:
  1. //样例代码:
  2. var
  3.   cad:AcadApplication;
  4.   ft,FilterData,pointsArray:Variant;
  5.   Set_Select:AcadSelectionSet;
  6. begin
  7.   cad:=GetActiveOleObject('AutoCAD.Application') as AcadApplication;//Createoleobject
  8.   cad.Visible:=true;

  9.   Set_Select_Count:=cad.ActiveDocument.selectionSets.count;
  10.   if Set_Select_Count=0 then Set_Select:=cad.ActiveDocument.SelectionSets.Add('Select_All')
  11.   else
  12.     begin
  13.       for Set_Select_Count:=0 to cad.ActiveDocument.selectionSets.count-1 do //遍历选择集,如果'Select_All'已经存在就不建了。
  14.     begin
  15.            if cad.ActiveDocument.selectionSets.Item(Set_Select_Count).Name='Select_All' then
  16.               Set_Select:=cad.ActiveDocument.SelectionSets.Item(Set_Select_Count)
  17.          else
  18.             Set_Select:=cad.ActiveDocument.SelectionSets.Add('Select_All');
  19.         end;
  20.     end;
  21.   ft:= VarArrayCreate([0,0],VT_I2);
  22.   ft[0]:=100;
  23.   //ft[1]:=0;

  24.   FilterData:=VarArrayCreate([0,0],VT_Variant);;
  25.   //FilterData[0] := '';
  26.   //FilterData[1] := '';

  27.   Set_Select.Select(acSelectionSetAll,'', '',ft,FilterData);
  28.   //Set_Select.Highlight(True);//该代码高亮显示选择的对象
  29.   //ShowMessage(IntToStr(Set_Select.Count));//该代码将显示选择的对象数
  30.   Set_Select.Erase; //Erase方法删除选择集中的所有项。选择集仍然存在,但不再包含任何项。原来包含在选择集中的项也不再存在。
  31. cad.ZoomExtents;
  32. end;
复制代码
关于全选所有对象,还有另一个办法就是利用SendCommand命令。效果是一样的,大家可以自己建立不同的项目,对比两者之间的差异和效率问题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

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

本版积分规则

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

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

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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