找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2087|回复: 7

[LISP程序]:选择对象直接生成一个采用EntMake方式生成对象的LISP程序.

[复制链接]

已领礼包: 444个

财富等级: 日进斗金

发表于 2004-12-20 22:21:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
有时采用采用EntMake生成对象的速度很快的。自写了一个根据选择的对象生成一个采用EntMake方法生成对象的另外一个LISP程序的LISP程序。

  1.   [FONT=courier new]
  2. (Defun YFCAD_Remove(LST O / K X RST)
  3.    (SetQ K 0)
  4.    (ForEach X LST
  5.       (If (/= X O)
  6.          (SetQ RST (Cons X RST))
  7.          (Progn
  8.             (If (= K 0)
  9.                (SetQ K (1+ K))
  10.                (SetQ RST (Cons X RST))
  11.             )
  12.          )   
  13.       )
  14.    )
  15.    (Reverse RST)
  16. )


  17. (Defun C:YF_OutPutLSP(/ Sel L N FLN FLO Data DaNe)
  18.    (Prompt "\n请选择要采用LISP程序,ENTMAKE方法建立的对象:")
  19.    (SetQ Sel (SsGet)
  20.          L   (SsLength Sel)
  21.          N   0
  22.          FLN (GetFileD "输出的LISP文件:" "" "LSP" 1)
  23.          FLO (Open FLN "a")
  24.    )
  25.    (Write-Line "(Defun YF_Write()" FLO)
  26.    (Repeat L
  27.       (SetQ Data (EntGet (SsName Sel N))
  28.             DaNe (YFCAD_Remove Data (Assoc -1 Data))
  29.             DaNe (YFCAD_Remove DaNe (Assoc 330 Data))
  30.                          DaNe (YFCAD_Remove DaNe (Assoc 360 Data))
  31.             DaNe (YFCAD_Remove DaNe (Assoc 5 Data))
  32.             N    (1+ N)
  33.       )
  34.       (Write-Line (StrCat "   (EntMake '" (Vl-Prin1-To-String DaNe) ")") FLO)
  35.       ;(Write-Line "   (EntLast)" FLO)
  36.       
  37.    )
  38.    (Write-Line ")" FLO)
  39.    (Close FLO)
  40. )   
  41.   [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-21 13:23:52 | 显示全部楼层

  1. ;;ENTMAKE對某些物件(PLINE,INSERT....)不能生成!!
  2. ;;程序主要用在那方面?
  3. (defun C:YF_OUTPUTLSP_LAI (/ SEL L N FLN FLO DATA)
  4.   (prompt "\n請選擇要採用LISP程序,ENTMAKE方法建立的對象:")
  5.   (setq        SEL (ssget)
  6.         L   (sslength SEL)
  7.         N   0
  8.         FLN (getfiled "輸出的LISP文件:" "" "LSP" 1)
  9.         FLO (open FLN "a")
  10.   )
  11.   (write-line "(Defun YF_Write()" FLO)
  12.   (repeat L
  13.     (setq DATA (entget (ssname SEL N))
  14.           DATA (vl-remove-if
  15.                  '(lambda (X)
  16.                     (if        (vl-position (car X) '(-1 330 360 5))
  17.                       X
  18.                     )
  19.                   )
  20.                  DATA
  21.                )
  22.           N    (1+ N)
  23.     )
  24.     (write-line
  25.       (strcat "   (EntMake '" (vl-prin1-to-string DATA) ")")
  26.       FLO
  27.     )
  28.     ;;(Write-Line "   (EntLast)" FLO)
  29.   )
  30.   (write-line ")" FLO)
  31.   (close FLO)
  32.   (princ)
  33. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

 楼主| 发表于 2004-12-22 10:17:52 | 显示全部楼层
对旧多段线与图块是不合适的。
如果对TEXT等含有字形定义的话,就要考虑新建文件有没有这个字形了。
程序,原先设计是用在一个程序内部自动生一个图标。
谢谢,楼上的修改!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-4-7 17:47:28 | 显示全部楼层
本帖最后由 拉契 于 2014-4-7 17:59 编辑


会多出
(330 . <图元名: 7ffffb03ec0>)
(340 . <图元名: 7ffffb03e00>)

要手动删除才可以!版主再优化一下呗{:soso_e100:}

点评

版主忙,我改写了一下,看看行不行? ;;http://bbs.xdcad.net/thread-316651-1-1.html (defun C:EntmakeLsp (/ DATA FLN FLO LST N SS Y) (cond ((and (princ "\n 选择对象,产生ENTMAKE方法:") (set  详情 回复 发表于 2014-4-19 13:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-4-19 13:06:11 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2014-4-19 13:07 编辑
拉契 发表于 2014-4-7 17:47
会多出
(330 . )
(340 . )

版主忙,我改写了一下,看看行不行?
;;http://bbs.xdcad.net/thread-316651-1-1.html

  1. (defun C:EntmakeLsp (/ DATA FLN FLO LST N SS Y)
  2.   (cond
  3.     ((and (princ "\n 选择对象,产生ENTMAKE方法:")
  4.    (setq ss (ssget))
  5.    (setq FLN (getfiled "輸出的LISP文件:" "" "LSP" 1))
  6.    (setq FLO (open FLN "w"))
  7.      )
  8.      (write-line "(Defun ENTMAKE_Write()" FLO)
  9.      (setq lst '(-1 330 360 5 410 8 7 340))
  10.      (repeat (setq n (sslength ss))
  11.        (setq DATA (entget (ssname ss (setq n (1- n)))))
  12.        (foreach X lst
  13.   (while (setq y (assoc X DATA))
  14.     (setq DATA (vl-remove y DATA))
  15.   )
  16.        )
  17.        (write-line (strcat "   (EntMake '" (vl-prin1-to-string DATA) ")") FLO)
  18.      )
  19.      (write-line ")" FLO)
  20.      (close FLO)
  21.     )
  22.   )
  23.   (princ)
  24. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-23 02:56:33 | 显示全部楼层
谢谢,学习下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-2-3 11:18:37 | 显示全部楼层
谢谢,学习下;P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6202个

财富等级: 富甲天下

发表于 2017-6-25 08:21:58 | 显示全部楼层
三位大师写的程序都可以运行,谢谢了,方便不少
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-2 23:22 , Processed in 0.385729 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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