fwdll 发表于 2008-12-26 23:54:00

如何获得一个实体最近另外一个实体

比如获得指定的文字最近line线或者pline,用autolisp如何实行?谢谢。<br/>还有,autocad2004在提示输入的时候,能不能用autolisp在鼠标旁边输出一行提示文字,就像2007一样的半透明提示框。<br/>

fwdll 发表于 2008-12-27 19:19:00

自己解决了,获得实体的坐标,然后构造一个选择区域,用ssget获得区域内的实体,可逐步增加区域,获得实体后停止。挺简单。呵呵。

userzhl 发表于 2008-12-27 19:43:00

本帖最后由 作者 于 2008-12-27 19:44:24 编辑

我现在也正需要这方面的,可不可以贴出来学习一下?

fwdll 发表于 2008-12-28 23:02:00

(defun Fun_SSGet(sdPt sdDelObj sdLayNM / My_tot My_objss My_LD My_RU My_x My_y );//(点坐标,ssname,图层)<br/>  (setq My_x (car sdpt)<br/>    My_y (cadr sdpt)<br/>    My_objss nil<br/>    My_prcsn 5.0<br/>    My_addstep 0.5<br/>    My_tot 0<br/>  )<br/>  (while(&lt; My_tot 2)<br/>    (setq My_prcsn (+ My_prcsn My_addstep)<br/>          My_RU (list (+ My_x My_prcsn) (+ My_y My_prcsn))<br/>      My_LD (list (- My_x My_prcsn) (- My_y My_prcsn))<br/>          My_objss (ssget "_c" My_LD My_RU sdLayNM)<br/>    )<br/>    (if ( null My_objss)<br/>      (setq My_objss nil)<br/>      (setq My_tot (sslength My_objss ))<br/>    )<br/>    (if (&gt; My_prcsn 100.0)<br/>       (setq My_tot 10000)<br/>    )<br/>  )<br/>  (if ( null My_objss)<br/>     (alert "None object")<br/>      (progn<br/>         (setq My_obj(ssdel sdDelObj My_objss));;删除自身<br/>      )<br/>  )<br/> (setq ObjNm(ssname My_objss 0))<br/>)

liujing95 发表于 2013-11-9 11:30:41

对于一个初学者来说是一个很大的帮助

fwdll 发表于 2013-11-12 09:33:28

fwdll 发表于 2008-12-28 23:02 static/image/common/back.gif
(defun Fun_SSGet(sdPt sdDelObj sdLayNM / My_tot My_objss My_LD My_RU My_x My_y );//(点坐标,ssname,图 ...

这个子函数只是针对我自己的目的写的,可能不一定通用,比如选取不同类型的物体,我的图纸一般是分层处理,所以有一个图层的参数,不过大家可以在上面修改,增加类型判断还是很容易的。
至于第二点,其实还有一个子函数,求距离最近的物体,只是增加一个函数,感觉运算慢了很多,所以还是删除了,大家有兴趣也可以增加进去,distance函数就ok了。
页: [1]
查看完整版本: 如何获得一个实体最近另外一个实体