明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1701|回复: 5

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

[复制链接]
发表于 2008-12-26 23:54:00 | 显示全部楼层 |阅读模式
比如获得指定的文字最近line线或者pline,用autolisp如何实行?谢谢。
还有,AutoCAD2004在提示输入的时候,能不能用autolisp在鼠标旁边输出一行提示文字,就像2007一样的半透明提示框。
 楼主| 发表于 2008-12-27 19:19:00 | 显示全部楼层
自己解决了,获得实体的坐标,然后构造一个选择区域,用ssget获得区域内的实体,可逐步增加区域,获得实体后停止。挺简单。呵呵。
发表于 2008-12-27 19:43:00 | 显示全部楼层
本帖最后由 作者 于 2008-12-27 19:44:24 编辑

我现在也正需要这方面的,可不可以贴出来学习一下?
 楼主| 发表于 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,图层)
  (setq My_x (car sdpt)
    My_y (cadr sdpt)
    My_objss nil
    My_prcsn 5.0
    My_addstep 0.5
    My_tot 0
  )
  (while(< My_tot 2)
    (setq My_prcsn (+ My_prcsn My_addstep)
          My_RU (list (+ My_x My_prcsn) (+ My_y My_prcsn))
      My_LD (list (- My_x My_prcsn) (- My_y My_prcsn))
          My_objss (ssget "_c" My_LD My_RU sdLayNM)
    )
    (if ( null My_objss)
      (setq My_objss nil)
      (setq My_tot (sslength My_objss ))
    )
    (if (> My_prcsn 100.0)
       (setq My_tot 10000)
    )
  )
  (if ( null My_objss)
     (alert "None object")
      (progn
         (setq My_obj(ssdel sdDelObj My_objss));;删除自身
      )
  )
 (setq ObjNm(ssname My_objss 0))
)

点评

1.入口参数最好加个实体类别 2.每次以固定的My_prcsn增加选择区域,最后可能会返回几个实体,你还得进不步处理才能确定 针对第2点考虑直接把要找的实体全选出来计算它们到给定点的距离找到最近的那个  发表于 2013-11-9 16:45
发表于 2013-11-9 11:30:41 | 显示全部楼层
对于一个初学者来说是一个很大的帮助
 楼主| 发表于 2013-11-12 09:33:28 | 显示全部楼层
fwdll 发表于 2008-12-28 23:02
(defun Fun_SSGet(sdPt sdDelObj sdLayNM / My_tot My_objss My_LD My_RU My_x My_y );//(点坐标,ssname,图 ...

这个子函数只是针对我自己的目的写的,可能不一定通用,比如选取不同类型的物体,我的图纸一般是分层处理,所以有一个图层的参数,不过大家可以在上面修改,增加类型判断还是很容易的。
至于第二点,其实还有一个子函数,求距离最近的物体,只是增加一个函数,感觉运算慢了很多,所以还是删除了,大家有兴趣也可以增加进去,distance函数就ok了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-26 02:22 , Processed in 0.200368 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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