明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2366|回复: 7

求高手编写LISP代码

[复制链接]
发表于 2013-1-1 22:30:53 | 显示全部楼层 |阅读模式
1明经币
请高手编写LISP代码,实现如下功能:在“”中,当点选图中多线段后,通过代码首先选择插入点在多线段顶点上的图元(名为拐点的块参照),然后再选择与这些图元相隔最近的一串文字,或者是以每个图元为中心框选一定范围内的文字,每个图元仅对应一串文字,最终结果就是,只选择“1、2、3、4、5”这几个文字,而不要把”6、7、8、9、10“这几个文字选进来。谢谢各位高手指教!!!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

试了一下,不知道能不能用,使用上有点限制:每个图块必须对应一个编号 如果有的图块没有对应的编号,会得不到想要的结果
发表于 2013-1-1 22:30:54 | 显示全部楼层
本帖最后由 阿然 于 2013-1-2 10:27 编辑

  1. (vl-load-com)
  2. (defun c:tt (/ ent ss sstemp el elst txtlst inptlst distlst i)
  3.   (if (and (setq ent (car (entsel "\n选择多义线:")))
  4.      (setq elst (entget ent))
  5.      (equal (cdr (assoc 0 elst)) "LWPOLYLINE")
  6.       )
  7.     (progn
  8.       (setq ss (ssadd ent))
  9.       (foreach el elst
  10.   (if (equal (car el) 10)
  11.     (progn
  12.       (setq
  13.         sstemp (ssget "C" (cdr el) (cdr el) '((0 . "INSERT")))
  14.       )
  15.       (setq ss (xr:appendss ss sstemp))
  16.       (setq sstemp nil)
  17.     )
  18.   )
  19.       )
  20.       (setq i (1- (sslength ss)))
  21.       (setq sstemp (ssget "X" '((0 . "TEXT"))))
  22.       (setq txtlst (Xr:ss->lst sstemp))
  23.       (setq inptlst (mapcar '(lambda (x) (Xr:getobjdxf x 10)) txtlst))
  24.       (setq
  25.   distlst  (mapcar
  26.       '(lambda (x)
  27.          (distance x (vlax-curve-getClosestPointTo ent x))
  28.        )
  29.       inptlst
  30.     )
  31.       )
  32.       (setq txtlst (mapcar 'cons distlst txtlst))
  33.       (setq txtlst
  34.        (vl-sort txtlst '(lambda (e1 e2) (< (car e1) (car e2))))
  35.       )
  36.       (repeat i
  37.   (ssadd (cdr (nth (setq i (1- i)) txtlst)) ss)
  38.       )
  39.       (command "_.copybase" '(0 0 0) ss "")
  40.       (command "_.erase" "all" "")
  41.       (command "_.Pasteclip" '(0 0 0))
  42.       (setq ss nil
  43.       sstemp nil)
  44.     )
  45.   )
  46.   (princ)
  47. )

  48. (defun Xr:getobjdxf (obj code / result elist)
  49.   (setq elist (entget obj))
  50.   (setq result (cdr (assoc code elist)))
  51. )

  52. (defun Xr:ss->lst (ss / i l)
  53.   (if ss
  54.     (repeat (setq i (sslength ss))
  55.       (setq
  56.   l (cons  (ssname ss (setq i (1- i)))
  57.     l
  58.     )
  59.       )
  60.     )
  61.   )
  62. )
  63. (defun Xr:appendss (ss1 ss2 / i)
  64.   (if (and ss1
  65.     ss2
  66.       )
  67.     (progn
  68.       (setq i -1)
  69.       (repeat (sslength ss2)
  70. (ssadd (ssname ss2 (setq i (1+ i))) ss1)
  71.       )
  72.     )
  73.     ss1
  74.   )
  75. )

试了一下,不知道能不能用,使用上有点限制:每个图块必须对应一个编号
如果有的图块没有对应的编号,会得不到想要的结果




本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-1-1 23:56:44 | 显示全部楼层
本帖最后由 xyp1964 于 2013-1-1 23:57 编辑



本帖子中包含更多资源

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

x

点评

院长换制作GIF工具了?  发表于 2013-1-2 17:21
回复

使用道具 举报

 楼主| 发表于 2013-1-2 05:05:11 | 显示全部楼层
附件中,每个图块只是有个编号与之靠得比较近,你所说的图块与编号对应是指的什么?
回复

使用道具 举报

 楼主| 发表于 2013-1-2 05:14:13 | 显示全部楼层
在我这运行出错,不知为什么?
回复

使用道具 举报

发表于 2013-1-2 07:36:39 | 显示全部楼层
出错是指什么呢?程序运行不了还是结果不正确?
选择块还是比较容易,主要是选择几个文字的处理,我是选择了离多义线最近的n个(n=块个数)文本,假如6离的比5近,那会选择6留下而删除5。

评分

参与人数 1明经币 +1 金钱 +15 收起 理由
【KAIXIN】 + 1 + 15 赞一个!进步的很快!

查看全部评分

回复

使用道具 举报

发表于 2013-1-2 10:26:59 | 显示全部楼层
找到出错的地方了,修改了3楼的代码,请重新测试
回复

使用道具 举报

发表于 2014-3-16 22:41:53 | 显示全部楼层
需要e派工具箱(XCAD)的支持
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 05:45 , Processed in 0.171008 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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