找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: eachy

[原创]:Eachy 工具集 Lisp源码 详解

  [复制链接]

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-4 15:43:55 | 显示全部楼层
两个 使用 vla 部分经常要用到的函数

  1. ;;清除前一选择集
  2. (defun ybvl-Clearcset (/ cset)
  3.   (if (not (vl-catch-all-error-p
  4.              (setq cset
  5.                     (vl-catch-all-apply
  6.                       'vla-item
  7.                       (list
  8.                         (vlax-get-property
  9.                           *AcDocumnet*
  10.                           'selectionsets
  11.                         )
  12.                         "CURRENT"
  13.                       )
  14.                     )
  15.              )
  16.            )
  17.       )
  18.     (vla-delete cset)
  19.   )
  20.   (princ)
  21. )
  22. ;|
  23. 功  能  由activex变体返回lisp值
  24. 语  法  (lisp-value v)
  25. 参  数  一个activex变体或安全数组
  26. 返回值  lisp值
  27. 样  例  (lisp-value myvariant)
  28. 说  明
  29. 该函数将递归深入一个安全数组并转换所有的值,包括嵌套的安全数组,将其转换为lisp值。
  30. |;
  31. (defun lisp-value (v)
  32.   (cond
  33.     ((= (type v) 'variant)
  34.      (lisp-value (variant-value v))
  35.     )
  36.     ((= (type v) 'safearray)
  37.      (mapcar 'lisp-value (safearray-value v))
  38.     )
  39.     (t v)
  40.   )
  41. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-4 15:50:29 | 显示全部楼层
这是 eatools.mnl ,带有一定的“免疫”能力

  1. (vl-load-com)
  2. (defun ai_ffile        (app)
  3.   (or (findfile (strcat app ".lsp"))
  4.       (findfile (strcat app ".exp"))
  5.       (findfile (strcat app ".exe"))
  6.       (findfile (strcat app ".arx"))
  7.       (findfile (strcat app ".fas"))
  8.       (findfile (strcat app ".vlx"))
  9.       (findfile app)
  10.   )
  11. )
  12. (defun ai_nofile (filename)
  13.   (princ
  14.     (strcat "\n在支持路径中未找到 "
  15.             filename
  16.             "(.lsp/.exe/.arx/.fas/.vlx) 文件."
  17.     )
  18.   )
  19.   (princ "\n检查你的 Support 路径并再次运行.")
  20.   (princ)
  21. )
  22. (defun ybl-str-parse (str delimiter / post strlst)
  23.   (if str
  24.     (progn
  25.       (setq strlst '())
  26.       (while (vl-string-search delimiter str)
  27.         (setq post (vl-string-search delimiter str))
  28.         (setq strlst (append strlst (list (substr str 1 post))))
  29.         (setq str (substr str (+ post 2)))
  30.       )
  31.       (vl-remove "" (append strlst (list str)))
  32.     )
  33.   )
  34. )
  35. ;;;AddSupportPath
  36. ;;;添加文件夹到AutoCAD支持搜索路径中的指定位置
  37. ;;;参数
  38. ;;;文件夹路径及插入的位置(0时插入前端)
  39. ;;;示例
  40. ;;;(addSupportPath "c:\\myFolder" 2)
  41. ;;;注意
  42. ;;;位置参数为空时将文件夹添加到路径最后。位置参数为0时将文件夹添加到路径最前端。
  43. (defun addSupportPath (dir pos / tmp c)
  44.   (setq        tmp ""
  45.         c   -1
  46.   )
  47.   (if (not pos)
  48.     (setq tmp (strcat (getenv "ACAD") ";" dir))
  49.     (mapcar '(lambda (x)
  50.                (setq tmp (if (= (setq c (1+ c)) pos)
  51.                            (strcat tmp ";" dir ";" x)
  52.                            (strcat tmp ";" x)
  53.                          )
  54.                )
  55.              )
  56.             (ea:string_parse (getenv "ACAD") ";")
  57.     )
  58.   )
  59.   (setenv "ACAD" tmp)
  60.   (princ)
  61. )
  62. ;;适合2002-2006的由加载的菜单自动添加菜单所在文件夹道支持路径的数
  63. ;;                           eachy [[url]www.xdcad.net[/url]] 2005.5.24
  64. (defun Ea:AddSupport (mnu / path acadpath)
  65.   (vlax-map-collection
  66.     (vla-get-menugroups (vlax-get-acad-object))
  67.     '(lambda (x /)
  68.        (if (= (strcase (vla-get-name x)) (strcase mnu))
  69.          (setq path
  70.                 (strcase
  71.                   (vl-filename-directory (vla-get-menufilename x))
  72.                 )
  73.          )
  74.        )
  75.      )
  76.   )
  77.   (if path
  78.     (progn
  79.       (setq acadpath (strcase (getenv "ACAD")))
  80.       (if (not (wcmatch (strcat path ";") acadpath))
  81.         (addSupportPath path nil)
  82.       )
  83.     )
  84.   )
  85.   (princ)
  86. )

  87. (if (not (menugroup "eatools"))
  88.   (vl-cmdf ".menuload" "eatools.mnu")
  89. )
  90. (menucmd "p25=+eatools.pop1")
  91. (Ea:Addsupport "eatools")
  92. (if (not (member 'EATOOLS (vl-list-loaded-vlx)))
  93.   (load "eatools.vlx")
  94. )
  95. (if (= (getenv "ScreenMenu") "1")
  96.   (ea:resscrmnu)
  97. )

  98. (defun ybl-readfile (fn / f l ll)
  99.   (setq f (open (findfile fn) "r"))
  100.   (while (setq l (read-line f))
  101.     (setq ll (cons l  ll))
  102.   )
  103.   (close f)
  104.   ll
  105. )
  106. (setvar "cmdecho" 0)
  107. (if (findfile "acad.lsp")
  108.   (progn
  109.     (setq stl (mapcar
  110.                 '(lambda (x) (vl-string-trim "\\"\t()" x))
  111.                 (mapcar 'strcase (ybl-readfile (findfile "acad.lsp")))
  112.               )
  113.     )
  114.     (if        (or (vl-position "ACADAPP" stl)
  115.             (vl-position "ACADAPP.LSP" stl)
  116.             (vl-position "WRITEAPP" stl)
  117.         )
  118.       (progn
  119.         (vl-file-delete (findfile "acad.lsp"))
  120.         (if (findfile "acadapp.lsp")
  121.           (vl-file-delete app)
  122.         )
  123.         (alert
  124.           "  您的CAD可能被ACAD.LSP病毒感染,\n\n失效命令已经恢复,退出CAD后请杀毒!"
  125.         )
  126.       )
  127.     )
  128.     (if        (= (type c:explode) 'USUBR)
  129.       (progn
  130.         (setq c:explode nil)
  131.         (command ".redefine" "explode" ".explode")
  132.       )
  133.     )
  134.     (if        (= (type c:burst) 'USUBR)
  135.       (progn
  136.         (setq c:burst nil)
  137.         (command ".redefine" "burst" ".burst")
  138.       )
  139.     )
  140.     (if        (= (type c:xref) 'USUBR)
  141.       (progn
  142.         (setq c:xref nil)
  143.         (command ".redefine" "xref" ".xref")
  144.       )
  145.     )
  146.     (if        (= (type c:xbind) 'USUBR)
  147.       (progn
  148.         (setq c:xbind nil)
  149.         (command ".redefine" "xbind" ".xbind")
  150.       )
  151.     )
  152.     (setq fl  nil
  153.           app nil
  154.           stl nil
  155.     )
  156.    
  157.   )
  158. )
  159. (vlr-remove-all)
  160. (princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-4 16:11:47 | 显示全部楼层
顶。。。。。。。。。。
  小弟在此代表大家感谢eachy的无私奉献
   也表达下大家的心声,能否每天来点,大家等的好心急。。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-4 16:29:03 | 显示全部楼层
再贴一个 Lib_blk.lsp ,这个文件的功能是对工具集中用到的 图块进行制作,这样就不必附带一堆 dwg 文件

  1. ;;室外标高 3 三角 1 十字 2 圆点
  2. (defun ea:MkSWBG (tf / pln blkdef oldlay oldcol)
  3.   (setq        oldlay (getvar "clayer")
  4.         oldcol (getvar "cecolor")
  5.   )
  6.   (setvar "clayer" "0")
  7.   (setvar "cecolor" "bylayer")
  8.   (setq        blkdef (cond ((= tf 3) (ybvl-addblk "EA_SBG3"))
  9.                      ((= tf 1) (ybvl-addblk "EA_SBG1"))
  10.                      ((= tf 2) (ybvl-addblk "EA_SBG2"))
  11.                )
  12.   )
  13.   (cond
  14.     ((= tf 3)
  15.      (ybvl-addsolid
  16.        blkdef
  17.        (list '(-1.3212 0.9909 0.)
  18.              '(1.3212 0.9909 0.)
  19.              '(0. 0. 0.)
  20.              '(0. 0. 0.)
  21.        )
  22.      )
  23.     )
  24.     ((= tf 1)
  25.      (setq pln (ybvl-addpline
  26.                  blkdef
  27.                  '(0. -1.25 0. 1.25)
  28.                )
  29.      )
  30.      (vla-setwidth pln 0 0.35 0.35)
  31.      (setq pln (ybvl-addpline
  32.                  blkdef
  33.                  '(-1.25 0. 1.25 0.)
  34.                )
  35.      )
  36.      (vla-setwidth pln 0 0.35 0.35)
  37.     )
  38.     ((= tf 2)
  39.      (setq pln (ybvl-addpline
  40.                  blkdef
  41.                  '(-0.25 0. 0.25 0.)
  42.                )
  43.      )
  44.      (vla-setBulge pln 0 1.0)
  45.      (vla-put-closed pln :vlax-true)
  46.      (vla-setbulge pln 1 1.0)
  47.      (vla-setwidth pln 0 0.5 0.5)
  48.      (vla-setwidth pln 1 0.5 0.5)
  49.     )
  50.   )
  51.   (ybl-addatt blkdef
  52.              (cond ((= tf 1) '(2.25 0. 0.))
  53.                    ((= tf 3) '(0. 2.23 0.))
  54.                    ((= tf 2) '(1.5 0. 0.))
  55.              )
  56.              1
  57.              "标高"
  58.              ""
  59.              ""
  60.              (apply '* (ea:init))
  61.              (if (= tf 3)
  62.                "C"
  63.                "ML"
  64.              )
  65.              0.75
  66.              nil
  67.   )
  68.   (setvar "clayer" oldlay)
  69.   (setvar "cecolor" oldcol)
  70. )
  71. ;;雨水井
  72. (defun Ea:MkYSJ        (/ blkdef oldlay oldcol)
  73.   (setq        oldlay (getvar "clayer")
  74.         oldcol (getvar "cecolor")
  75.   )
  76.   (setvar "clayer" "0")
  77.   (setvar "cecolor" "bylayer")
  78.   (setq blkdef (ybvl-addblk "EA_YSJ"))
  79.   (ybvl-addsolid
  80.     blkdef
  81.     '((-2.0 2.0 0.) (0. 2.0 0.) (-2.5 0. 0.) (0. 0. 0.))
  82.   )
  83.   (ybvl-addpline
  84.     blkdef
  85.     '(0. 0. 2.5 0. 2.0 2.0 0. 2.0)
  86.   )
  87.   (setvar "clayer" oldlay)
  88.   (setvar "cecolor" oldcol)
  89. )
  90. ;;建筑编号
  91. (defun Ea:MkBH (/ blkdef pln oldlay oldcol)
  92.   (setq        oldlay (getvar "clayer")
  93.         oldcol (getvar "cecolor")
  94.   )
  95.   (setvar "clayer" "0")
  96.   (setvar "cecolor" "bylayer")
  97.   (setq blkdef (ybvl-addblk "EA_JZBH"))
  98.   (setq        pln (ybvl-addpline
  99.               blkdef
  100.               '(-4. 0. 4. 0.)
  101.             )
  102.   )
  103.   (vla-setBulge pln 0 1.0)
  104.   (vla-put-closed pln :vlax-true)
  105.   (vla-setbulge pln 1 1.0)
  106.   (vla-setwidth pln 0 0.35 0.35)
  107.   (vla-setwidth pln 1 0.35 0.35)
  108.   (ybvl-addatt blkdef '(0. 0. 0.) 1 "BH" "" "BH" 3. "MC" 0.8 0.)
  109.   (setvar "clayer" oldlay)
  110.   (setvar "cecolor" oldcol)
  111. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-4 16:48:32 | 显示全部楼层
这个是 组操作 命令, Group.lsp ,Eatools 工具集基本是通用编辑,所以命名基本按 Autocad Object 类型组织

通用函数

  1. (defun ybl-obj-reactor (e / elst lst etlst)
  2.   (setq elst (entget e))
  3.   (if (and (assoc 102 elst)
  4.            (= (cdr (assoc 102 elst)) "{ACAD_REACTORS")
  5.       )
  6.     (progn
  7.       (setq lst (cdr (member '(102 . "{ACAD_REACTORS") elst)))
  8.       (while (= (caar lst) 330)
  9.         (setq etlst (cons (cdar lst) etlst))
  10.         (setq lst (cdr lst))
  11.       )
  12.     )
  13.   )
  14.   etlst
  15. )
  16. (defun ActiveSSet ()
  17.   (vla-get-activeselectionset *AcDocument*)
  18. )

程序部分 Group.lsp

  1. (defun ybl-ent-grpname (lst / g)
  2.   (if lst
  3.     (foreach item (mapcar 'vlax-ename->vla-object lst)
  4.       (if (= (vla-get-objectname item) "AcDbGroup")
  5.         (setq g        (cons (vla-get-name item) g)
  6.         )
  7.       )
  8.     )
  9.   )
  10.   g
  11. )
  12. (defun ybvl-addgroup (groupname)
  13.   (if (not
  14.         (vl-catch-all-error-p
  15.           (setq        tf (vl-catch-all-apply
  16.                      'vla-item
  17.                      (list (vla-get-groups *AcDocument*) groupname)
  18.                    )
  19.           )
  20.         )
  21.       )
  22.     tf
  23.     (vla-add
  24.       (vla-get-groups *AcDocument*)
  25.       groupname
  26.     )
  27.   )
  28. )
  29. (defun ea:group->pickset (groupname / ss)
  30.   (setq ss (ssadd))
  31.   (setq group (vla-item (vla-get-groups *AcDocument*) groupname))
  32.   (if (/= (vla-get-count group) 0)
  33.     (vlax-for i        (vla-item (vla-get-groups *AcDocument*) groupname)
  34.       (ssadd (vlax-vla-object->ename i) ss)
  35.     )
  36.   )
  37.   (cadr (sssetfirst nil ss))
  38.   (ssgetfirst)
  39.                                         ;(ssget "p")
  40. )
  41. ;|
  42.      组操作,透明命令,全局组选开关
  43. |;
  44. (defun c:EA:GroupOnOf ()
  45.   (if (= (getvar "pickstyle") 0)
  46.     (progn
  47.       (setvar "pickstyle" 1)
  48.       (prompt "\n组功能启用.")
  49.     )
  50.     (progn
  51.       (setvar "pickstyle" 0)
  52.       (prompt "\n组功能禁用.")
  53.     )
  54.   )
  55.   (princ)
  56. )
  57. ;|
  58.    功能:单组选开关,可以在系统变量PICKSTYLE=1的情况下,使单独的组变换是否整体和分散。
  59. |;
  60. (defun c:Ea:GroupSOnOf (/ e group)
  61.   (if (and
  62.         (setq e (car (entsel "\n请拾取一个组中的实体<退出>: ")))
  63.         (setq group (ybl-obj-reactor e))
  64.         (ybl-ent-grpname group)
  65.       )
  66.     (progn
  67.       (if (= 1 (cdr (assoc 71 (entget (car group)))))
  68.         (progn
  69.           (entmod (subst '(71 . 0)
  70.                          (assoc 71 (entget (car group)))
  71.                          (entget (car group))
  72.                   )
  73.           )
  74.           (prompt "\n该实体属于的组可以单选。")
  75.         )
  76.         (progn
  77.           (entmod (subst '(71 . 1)
  78.                          (assoc 71 (entget (car group)))
  79.                          (entget (car group))
  80.                   )
  81.           )
  82.           (prompt "\n该实体属于的组已经作为整体。")
  83.         )
  84.       )
  85.     )
  86.   )
  87.   (princ)
  88. )

  89. (defun ybvl-MkGroup (ss gname / group lst group_obj)
  90.   (setq group (ybvl-addgroup gname))
  91.   (if (/= (vla-get-count group) 0)
  92.     (progn
  93.       (vlax-for        i group
  94.         (setq group_obj (cons i group_obj))
  95.       )
  96.       (setq group_obj (reverse group_obj))
  97.     )
  98.   )
  99.   (vlax-for ent        (activesset)
  100.     (if        group_obj
  101.       (if (not (member ent group_obj))
  102.         (setq lst (cons ent lst))
  103.       )
  104.       (setq lst (cons ent lst))
  105.     )
  106.   )
  107.   (if lst
  108.     (progn
  109.       (vla-AppendItems
  110.         group
  111.         (vlax-safearray-fill
  112.           (vlax-make-safearray
  113.             vlax-vbObject
  114.             (cons 0 (1- (length lst)))
  115.           )
  116.           lst
  117.         )
  118.       )
  119.       (vla-get-name group)
  120.     )
  121.   )
  122. )
  123. (defun c:Ea:GroupMake (/ ss gname gn)
  124.   (ybvl-clearcset)
  125.   (prompt "\n请选取要组成组的实体<退出>:")
  126.   (if (setq ss (ssget))
  127.     (progn
  128.       (setq gName (getstring "\n请输入组名<制匿名组>:"))
  129.       (if (not (setq gn        (ybvl-MkGroup
  130.                           ss
  131.                           (if (or (= gname "")
  132.                                   (= gname "*")
  133.                               )
  134.                             "*"
  135.                             gname
  136.                           )
  137.                         )
  138.                )
  139.           )
  140.         (prompt        (strcat        "\n已经把选择的实体制成组,组名是 "
  141.                         gn
  142.                         "."
  143.                 )
  144.         )
  145.         (princ (strcat "\n所选实体已经属于 " gName " 组."))
  146.       )
  147.     )
  148.   )
  149.   (princ)
  150. )
  151. ;|
  152.   功能:去除组定义
  153. |;
  154. (defun c:Ea:GroupDel (/ e gName group)
  155.   (if (and
  156.         (setq e (car (entsel "\n请拾取一个组中的实体<退出>: ")))
  157.         (setq group (ybl-obj-reactor e))
  158.         (ybl-ent-grpname group)
  159.       )
  160.     (progn
  161.       (setq gName (vla-get-name (vlax-ename->vla-object (car group))))
  162.       (entdel (car group))
  163.       (prompt
  164.         (strcat        "\n组 "
  165.                 gName
  166.                 " 已经从数据库中删除。"
  167.         )
  168.       )
  169.     )
  170.   )
  171.   (princ)
  172. )
  173. ;|
  174.   功能:不用分解直接删除组内实体
  175. |;
  176. (defun c:Ea:GroupDelEnt        (/ e)
  177.   (while (setq e (car (entsel "\n请拾取一个组中要删除的实体<退出>: ")))
  178.     (entdel e)
  179.   )
  180.   (princ)
  181. )
  182. ;|
  183.   功能:往组内添加实体
  184. |;
  185. (defun c:Ea:GroupAddEnt        (/ e gNa ss group group_obj lst glst)
  186.   (ybvl-clearcset)
  187.   (if (and
  188.         (setq e (car (entsel "\n请拾取一个组中的实体确定组<退出>: ")))
  189.         (setq group (ybl-obj-reactor e))
  190.         (setq gNa (ybl-ent-grpname group))
  191.         (progn
  192.           (prompt
  193.             (strcat "\n请选取要添加到组 " (car gNa) " 中的实体<退出>:")
  194.           )
  195.           (setq ss (ssget))
  196.         )
  197.       )
  198.     (progn
  199.       (setq glst (reverse (entget (car group))))
  200.       (vlax-for        i (activesset)
  201.         (setq
  202.           glst (append (list (cons 340 (vlax-vla-object->ename i)))
  203.                        glst
  204.                )
  205.         )
  206.       )
  207.       (entmod (reverse glst))
  208.     )
  209.   )
  210.   (princ)
  211. )
  212. ;|
  213.   功能:不用分解直接移出组内实体
  214. |;
  215. (defun c:Ea:GroupRemoveEnt (/ e gName group)
  216.   (if (and
  217.         (setq e (car (entsel "\n请拾取一个组中要移出的实体<退出>: ")))
  218.         (setq group (ybl-obj-reactor e))
  219.       )
  220.     (progn
  221.       (setq gName (ybl-ent-grpname group))
  222.       (entmod (vl-remove (cons 340 e) (entget (car group))))
  223.       (prompt (strcat "\n实体已经从组 " (car gName) " 移出。"))
  224.     )
  225.   )
  226.   (princ)
  227. )
  228. ;|
  229.   功能:合并两个组
  230.   说明:合并后,第二个组定义将从数据库删除
  231. |;
  232. (defun c:Ea:GroupMerge (/ e1 e2 gNa1 gNa2 nNums ss group1 group2 glst)
  233.   (if (and (setq e1 (car (entsel "\n拾取第一个组内的一个实体<退出>:")))
  234.            (setq group1 (ybl-obj-reactor e1))
  235.            (setq gNa1 (ybl-ent-grpname group1))
  236.            (if gNa1
  237.              (progn
  238.                (vla-highlight
  239.                  (vlax-ename->vla-object (car group1))
  240.                  :vlax-false
  241.                )
  242.                t
  243.              )
  244.            )
  245.            (setq e2 (car (entsel "\n拾取第二个组内的一个实体<退出>:")))
  246.            (setq group2 (ybl-obj-reactor e2))
  247.            (setq gNa2 (ybl-ent-grpname group2))
  248.            (if gNa2
  249.              (progn
  250.                (vla-highlight
  251.                  (vlax-ename->vla-object (car group2))
  252.                  :vlax-false
  253.                )
  254.                t
  255.              )
  256.            )
  257.       )
  258.     (progn
  259.       (setq
  260.         nNums (vla-get-count (vlax-ename->vla-object (car group2)))
  261.       )
  262.       (if (> nNums 0)
  263.         (progn
  264.           (setq        glst (append (vl-member-if-not
  265.                                '(lambda (x) (/= (car x) 340))
  266.                                (entget (car group2))
  267.                              )
  268.                              (reverse (entget (car group1)))
  269.                      )
  270.           )
  271.           (entmod (reverse glst))
  272.           (entdel (car group2))
  273.           (vla-highlight
  274.             (vlax-ename->vla-object (car group1))
  275.             :vlax-true
  276.           )
  277.           (prompt (strcat "\n组 "
  278.                           (car gNa2)
  279.                           " 已经合并到组 "
  280.                           (car gNa1)
  281.                           " 中。"
  282.                   )
  283.           )
  284.         )
  285.       )
  286.     )
  287.   )
  288.   (princ)
  289. )
  290. (defun ea:DelGrp (mod / n s seconds)
  291.   (setq        n        0
  292.         s        (getvar "date")
  293.         seconds        (* 86400.0 (- s (fix s)))
  294.   )
  295.   (vla-startundomark *AcDocument*)
  296.   (if mod
  297.     (vlax-map-collection
  298.       (vlax-get-property *AcDocument* 'groups)
  299.       '(lambda (x)
  300.          (if (wcmatch (vlax-get-property x 'name) "`**")
  301.            (progn
  302.              (vla-delete x)
  303.              (setq n (1+ n))
  304.            )
  305.          )
  306.        )
  307.     )
  308.     (vlax-map-collection
  309.       (vlax-get-property *AcDocument* 'groups)
  310.       '(lambda (x)
  311.          (if (< (vlax-get-property x 'count) 2)
  312.            (progn
  313.              (vla-delete x)
  314.              (setq n (1+ n))
  315.            )
  316.          )
  317.        )
  318.     )
  319.   )
  320.   (if (/= n 0)
  321.     (progn (if mod
  322.              (princ (strcat "\n共删除 " (itoa n) "个匿名组! "))
  323.              (princ (strcat "\n共删除 " (itoa n) "个空组! "))
  324.            )
  325.            (princ "耗时 ")
  326.            (princ
  327.              (-        (* 86400.0 (- (getvar "date") (fix (getvar "date"))))
  328.                 seconds
  329.              )
  330.            )
  331.            (princ " s!")
  332.     )
  333.     (if        mod
  334.       (princ "\n未找到匿名组!")
  335.       (princ "\n未找到空组!")
  336.     )
  337.   )
  338.   (vla-endundomark *AcDocument*)
  339.   (princ)
  340. )
  341. (defun c:ea:Delungrp ()
  342.   (ea:delgrp t)
  343.   (princ)
  344. )
  345. (defun c:ea:Delnullgrp ()
  346.   (ea:delgrp nil)
  347.   (princ)
  348. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-4 17:01:02 | 显示全部楼层
Obj_lyr.lsp 部分代码

  1. (defun string_join (strlst div /)
  2.   (vl-string-trim
  3.     div
  4.     (apply 'strcat (mapcar '(lambda (x) (strcat x div)) strlst))
  5.   )
  6. )
  7. (defun ea:lockedlyr (/ r d)
  8.   (while (setq d (tblnext "layer" (null d)))
  9.     (if        (= (logand (cdr (assoc 70 d)) 4) 4)
  10.       (setq r (cons (cdr (assoc 2 d)) r))
  11.     )
  12.   )
  13.   ;;(string_join (reverse r) ";")
  14.   (reverse r)
  15. )
  16. (vl-doc-export 'ea:lyrone)
  17. (defun c:Ea:LyrLock (/ e obj lyr lyrl el ss sLyrl)
  18.   (vla-startundomark *AcDocument*)
  19.   (while (setq e (entsel "\n拾取要锁定图层上的实体<结束>:"))
  20.     (setq obj (vlax-ename->vla-object (car e))
  21.           lyr (vla-get-layer obj)
  22.     )
  23.     (if        (not (member lyr lyrl))
  24.       (progn
  25.         (setq lyrl (cons lyr lyrl))
  26.         (redraw (car e) 3)
  27.         (setq el (cons (car e) el))
  28.         (ybvl-clearcset)
  29.         (setq ss (ssget "X" (list (cons 8 lyr))))
  30.         (vla-highlight (activesset) :vlax-true)
  31.         (prompt        (strcat        "\n选中了""
  32.                         (setq sLyrl (String_Join
  33.                                       (reverse lyrl)
  34.                                       ","
  35.                                     )
  36.                         )
  37.                         ""层!"
  38.                 )
  39.         )
  40.       )
  41.     )
  42.   )
  43.   (if lyrl
  44.     (progn
  45.       (ybvl-clearcset)
  46.       (ssget "x" (list (cons 8 sLyrl)))
  47.       (vla-highlight (activesset) :vlax-false)
  48.       (vlax-map-collection
  49.         (vla-get-layers *AcDocument*)
  50.         '(lambda (item)
  51.            (if (wcmatch (vla-get-name item) slyrl)
  52.              (progn
  53.                (if (not (vlax-ldata-get item "EA_LYR_COLOR"))
  54.                  (progn
  55.                    (vlax-ldata-put
  56.                      item
  57.                      "EA_LYR_COLOR"
  58.                      (vla-get-color item)
  59.                    )
  60.                    (vlax-ldata-put
  61.                      item
  62.                      "EA_LYR_LOCK"
  63.                      (vla-get-lock item)
  64.                    )
  65.                    (vla-put-color item 251)
  66.                    (vla-put-lock item 4)
  67.                  )
  68.                  (if (vlax-ldata-get item "EA_LYR_COLOR")
  69.                    (progn
  70.                      (vla-put-color
  71.                        item
  72.                        (vlax-ldata-get item "EA_LYR_COLOR")
  73.                      )
  74.                      (vla-put-lock
  75.                        item
  76.                        (vlax-ldata-get item "EA_LYR_LOCK")
  77.                      )
  78.                      (vlax-ldata-delete item "EA_LYR_LOCK")
  79.                      (vlax-ldata-delete item "EA_LYR_COLOR")
  80.                    )
  81.                  )
  82.                )
  83.              )
  84.            )
  85.          )
  86.       )
  87.     )
  88.   )
  89.   (vla-endundomark *AcDocument*)
  90.   (princ)
  91. )
  92. ;|
  93.    功能:选层保留(孤立),其他层锁定变灰色,支持多选
  94. |;
  95. (defun c:EA:LyrIso (/ e obj lyr ss ss1 lyrl clr el sLyrl ss2)
  96.   (vla-startundomark *AcDocument*)
  97.   (while (setq e (entsel "\n拾取要保留图层上的实体<结束>:"))
  98.     (setq obj (vlax-ename->vla-object (car e))
  99.           lyr (vla-get-layer obj)
  100.     )
  101.     (if        (not (member lyr lyrl))
  102.       (progn
  103.         (setq lyrl (cons lyr lyrl))
  104.         (redraw (car e) 3)
  105.         (setq el (cons (car e) el))
  106.         (ybvl-clearcset)
  107.         (setq ss (ssget "x" (list (cons 8 lyr))))
  108.         (vla-highlight (activesset) :vlax-true)
  109.         (prompt        (strcat        "\n选中了""
  110.                         (setq sLyrl (String_Join
  111.                                       (reverse lyrl)
  112.                                       ","
  113.                                     )
  114.                         )
  115.                         ""层!"
  116.                 )
  117.         )
  118.       )
  119.     )
  120.   )
  121.   (if lyrl
  122.     (progn
  123.       (vlax-map-collection
  124.         (vla-get-layers *AcDocument*)
  125.         '(lambda (item)
  126.            (if (not (wcmatch (vla-get-name item) sLyrl))
  127.              (progn
  128.                (if (not (vlax-ldata-get item "EA_LYR_COLOR"))
  129.                  (progn
  130.                    (vlax-ldata-put
  131.                      item
  132.                      "EA_LYR_COLOR"
  133.                      (vla-get-color item)
  134.                    )
  135.                    (vlax-ldata-put
  136.                      item
  137.                      "EA_LYR_LOCK"
  138.                      (vla-get-lock item)
  139.                    )
  140.                    (vla-put-color item 251)
  141.                    (vla-put-lock item 4)
  142.                  )
  143.                )
  144.              )
  145.              (progn
  146.                (if (setq clr (vlax-ldata-get item "EA_LYR_COLOR"))
  147.                  (progn
  148.                    (vla-put-color
  149.                      item
  150.                      (vlax-ldata-get item "EA_LYR_COLOR")
  151.                    )
  152.                    (vla-put-lock
  153.                      item
  154.                      (vlax-ldata-get item "EA_LYR_LOCK")
  155.                    )
  156.                  )
  157.                )
  158.              )
  159.            )
  160.          )
  161.       )
  162.       (ybvl-clearcset)
  163.       (if (ssget "x" (list (cons 8 sLyrl)))
  164.         (vla-highlight (activesset) :vlax-false)
  165.       )
  166.     )
  167.   )
  168.   (vla-endundomark *AcDocument*)
  169.   (princ)
  170. )
  171. ;|
  172.    恢复选层保留到原来状态
  173. |;
  174. (defun c:Ea:LyrRes (/)
  175.   (vlax-map-collection
  176.     (vla-get-layers *AcDocument*)
  177.     '(lambda (item)
  178.        (if (vlax-ldata-get item "EA_LYR_COLOR")
  179.          (progn
  180.            (vla-put-color item (vlax-ldata-get item "EA_LYR_COLOR"))
  181.            (vla-put-lock item (vlax-ldata-get item "EA_LYR_LOCK"))
  182.            (vlax-ldata-delete item "EA_LYR_LOCK")
  183.            (vlax-ldata-delete item "EA_LYR_COLOR")
  184.          )
  185.        )
  186.      )
  187.   )
  188.   (princ)
  189. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 9个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2009-1-5 08:00:25 | 显示全部楼层
最初由 xyp1964 发布
[B]相当精彩,学习了! [/B]

也期待院长"脱裤子"!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-1-5 09:48:01 | 显示全部楼层
Eachy 工具集 Lisp源码 详解

强,想Eachy学习,xyp1964也该把你的放出来了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2009-1-5 09:56:01 | 显示全部楼层
ybvl-Str-Reverse  ybvl-Str-Replace速度相当慢!还是用纯lisp快。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-5 10:32:51 | 显示全部楼层
可能是第一次慢,再用就快了:)

一个简单的连续标注,用到了一楼的两个常量

  1. (defun c:DmCon (/ p1 p2 p3 p4 p5 an an1 tf)
  2.   (setq tf t)
  3.   (if (setq p1 (getpoint "\nFirst Dim point: "))
  4.     (progn
  5.       (setq p4 p1)
  6.       (while (setq p2 (getpoint p1 "\nSecond Dim Point: "))
  7.         (if an
  8.           (setq p2 (inters p4 p5 p2 (polar p2 an1 1.) nil))
  9.         )
  10.         (if (not p3)
  11.           (setq
  12.             p3 (getpoint (mapcar '* '(0.5 0.5 0.5) (mapcar '+ p1 p2))
  13.                          "\nPosition: "
  14.                )
  15.           )
  16.         )
  17.         (if tf
  18.           (setq        p5 p2
  19.                 tf nil
  20.           )
  21.         )
  22.         (vla-adddimaligned
  23.           *ModelSpace*
  24.           (vlax-3d-point p1)
  25.           (vlax-3d-point p2)
  26.           (vlax-3d-point p3)
  27.         )
  28.         (setq p1  p2
  29.               an  (angle p1 p2)
  30.               an1 (+ an _pi2)
  31.         )
  32.       )
  33.     )
  34.   )
  35.   (princ)
  36. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8727个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2009-1-8 12:52:20 | 显示全部楼层
控制视口线显示

  1. (if (not $Ea_vp_visible)
  2.   (setq $Ea_vp_visible 0)
  3. )
  4. (if (setq ss (ssget "X" '((0 . "viewport"))))
  5.   (progn
  6.     (setq ssl (sslength ss)
  7.           i   -1
  8.     )
  9.     (if        (zerop $Ea_vp_visible)
  10.       (progn
  11.         (repeat        ssl
  12.           (vla-put-visible
  13.             (vlax-ename->vla-object (ssname ss (setq i (1+ i))))
  14.             :vlax-true
  15.           )
  16.         )
  17.         (setq $Ea_vp_visible 1)
  18.       )
  19.       (progn
  20.         (repeat        ssl
  21.           (vla-put-visible
  22.             (vlax-ename->vla-object (ssname ss (setq i (1+ i))))
  23.             :vlax-false
  24.           )
  25.         )
  26.         (setq $Ea_vp_visible 0)
  27.       )
  28.     )
  29.     (setq ss nil
  30.           i  nil
  31.     )
  32.   )
  33. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:59 , Processed in 0.242870 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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