明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1453|回复: 3

[提问] 大家帮忙看下这个程序的思路是什么,因为有些函数没有

[复制链接]
发表于 2014-1-12 22:35 | 显示全部楼层 |阅读模式
大家帮忙看下这个程序的思路是什么,因为有些函数没有
 楼主| 发表于 2014-1-12 22:36 | 显示全部楼层
  1. (defun EF:PickSet-ssget-key (lstKey        ;关键字列表
  2.                              sPrompt        ;提示
  3.                              lstFilter        ;过滤
  4.                              bLight        ;高亮
  5.                              b-                ;接受 -
  6.                              /
  7.                              bEnd return ss gr ename i n
  8.                              )
  9.   (setvar 'cmdecho 0)
  10.   (setq lstKey (mapcar 'ascii lstKey))
  11.   (if sPrompt
  12.     (prompt sPrompt)
  13.     (prompt "\n选择对象:")
  14.     )
  15.   (if b-
  16.     (prompt "\n[F.栏选 C.框选 W.窗选 P.上一次选择 -.撤销]:")
  17.     (prompt "\n[F.栏选 C.框选 W.窗选 P.上一次选择]:")
  18.     )
  19.   (setq return (ssadd))
  20.   (while (not bEnd)
  21.     (if bLight (EF:PickSet-Light return) (EF:PickSet-UnLight return))
  22.     (setq gr (grread T 15 2))
  23.     (cond ((or (equal gr '(2 32))        ;点击空格
  24.                (equal gr '(2 13))        ;点击回车
  25.                )
  26.            (setq bEnd T)
  27.            )
  28.           ((and b- (equal gr '(2 45)))        ; -
  29.            (if (setq ss (EF:PickSet-ssget-key nil "\n选择要取消的对象" lstFilter (not bLight) nil))
  30.              (progn
  31.                (prompt "\n[F.栏选 C.框选 W.窗选 P.上一次选择 -.撤销]取消撤销,继续添加:")
  32.                (setq i -1 n (sslength ss))
  33.                (while (< (setq i (1+ i)) n)
  34.                  (setq ename (ssname ss i))
  35.                  (setq return (ssdel ename (ssadd ename return)))
  36.                  )
  37.                )
  38.              )
  39.            )
  40.           ((or (equal gr '(2 80))        ;P
  41.                (equal gr '(2 112))        ;p
  42.                )
  43.            (if (setq ss (if lstFilter (ssget "P" lstFilter) (ssget "P")))
  44.              (setq return (EF:PickSet-Join ss return))
  45.              )
  46.            )
  47.           ((or (equal gr '(2 80))        ;F
  48.                (equal gr '(2 102))        ;f
  49.                )
  50.            (if (setq pt (getpoint "\n输入栏选第一点"))
  51.              (progn
  52.                (setq ptList (list pt))
  53.                (while (setq pt (getpoint (car ptList) "下一点" ))
  54.                  (setq ptList (cons pt ptlist))
  55.                  (redraw)
  56.                  (EF:Dwg-grdraw ptList -1)
  57.                  )
  58.                (if (setq ss (if lstFilter
  59.                               (ssget "F" ptList lstFilter)
  60.                               (ssget "F" ptList)
  61.                               )
  62.                          )
  63.                  (setq return (EF:PickSet-Join ss return))
  64.                  );end if
  65.                (redraw)
  66.                )
  67.              );end if
  68.            )
  69.           ((or (equal gr '(2 67))        ;C
  70.                (equal gr '(2 99))        ;c
  71.                )
  72.            (if (setq pt (getpoint "\n输入框选第一点"))
  73.              (progn
  74.                (setq ptList (list pt))
  75.                (while (setq pt (getpoint (car ptList) "下一点" ))
  76.                  (setq ptList (cons pt ptlist))
  77.                  (redraw)
  78.                  (EF:Dwg-grdraw ptList -1)
  79.                  )
  80.                (if (setq ss (if lstFilter
  81.                               (ssget "CP" ptList lstFilter)
  82.                               (ssget "CP" ptList)
  83.                               )
  84.                          )
  85.                  (setq return (EF:PickSet-Join ss return))
  86.                  );end if
  87.                (redraw)
  88.                )
  89.              );end if
  90.            )
  91.           ((or (equal gr '(2 87))        ;W
  92.                (equal gr '(2 119))        ;w
  93.                )
  94.            (if (setq pt (getpoint "\n输入窗选第一点"))
  95.              (progn
  96.                (setq ptList (list pt))
  97.                (while (setq pt (getpoint (car ptList) "下一点" ))
  98.                  (setq ptList (cons pt ptlist))
  99.                  (redraw)
  100.                  (EF:Dwg-grdraw ptList -1)
  101.                  )
  102.                (if (setq ss (if lstFilter
  103.                               (ssget "WP" ptList lstFilter)
  104.                               (ssget "WP" ptList)
  105.                               )
  106.                          )
  107.                  (setq return (EF:PickSet-Join ss return))
  108.                  );end if
  109.                (redraw)
  110.                )
  111.              );end if
  112.            )
  113.           ((= (car gr) 2)        ;点击字母
  114.            (setq gr (cadr gr))
  115.            (if (member gr lstKey)
  116.              (setq return (chr gr)
  117.                    bEnd T)
  118.              )
  119.            )
  120.           ((= (car gr) 3)                 ;鼠标点击
  121.            (setq gr (cadr gr))
  122.            (if (setq ss (ssget gr lstFilter))
  123.              (setq return (EF:PickSet-Join ss return))
  124.              (progn
  125.                (if (setq pt (getcorner gr "选择对角点:"))
  126.                  (progn
  127.                    (if (>= (car gr) (car pt))
  128.                      (setq ss (ssget "C" gr pt lstFilter))
  129.                      (setq ss (ssget "W" gr pt lstFilter))
  130.                      )
  131.                    (if ss
  132.                      (setq return (EF:PickSet-Join ss return))
  133.                      )
  134.                    )
  135.                  )
  136.                (prompt "选择对象:")
  137.                )
  138.              )
  139.            )
  140.           ((or (= (car gr) 25) (= (car gr) 11))        ;鼠标右击
  141.            (setq bEnd T)
  142.            )
  143.           );end cond
  144.     )
  145.   (if (and (equal (type return) 'PICKSET)
  146.            (/= (sslength return) 0)
  147.            )
  148.     (EF:PickSet-unLight return)
  149.     )
  150.   (cond ((= (type return) 'STR)
  151.          return
  152.          )
  153.         ((and (= (type return) 'PICKSET)
  154.               (> (sslength return) 0)
  155.               )
  156.          return
  157.          )
  158.     )
  159.   )
 楼主| 发表于 2014-1-12 22:38 | 显示全部楼层
或者在此基础上把没有的函数补全,把函数完善了
发表于 2014-1-13 00:28 | 显示全部楼层
〖信·CAD〗工具箱 全部源码公布 2012.03.20
http://bbs.mjtd.com/forum.php?mo ... &fromuid=338795
  1. ;ss高亮显示
  2. (defun EF:PickSet-Light (ss / i)
  3.   (setq i 0)
  4.   (while (< i (sslength ss))
  5.     (redraw (ssname ss i) 3)
  6.     (setq i (1+ i))
  7.     )
  8.   )
  9. ;ss低亮显示
  10. (defun EF:PickSet-unLight (ss / i)
  11.   (setq i 0)
  12.   (while (< i (sslength ss))
  13.     (redraw (ssname ss i) 4)
  14.     (setq i (1+ i))
  15.     )
  16.   )
  17. ;选择集并集
  18. (defun EF:PickSet-Join (ss1        ;第一选择集
  19.                         ss2        ;第二选择集
  20.                         / i n ename)
  21.   (setq i -1)
  22.   (setq n (sslength ss1))
  23.   (while (< (setq i (1+ i)) n)
  24.     (setq ss2 (ssadd (ssname ss1 i) ss2))
  25.     )
  26.   ss2
  27.   )
  28. ;在图形屏幕上绘制点表矢量
  29. ;lstPTList 点表
  30. ;color 矢量色彩  -1 表示 异或颜色
  31. (defun EF:Dwg-grdraw ( lstPTList color / )
  32.   (repeat (- (length lstPTList) 1)
  33.     (grdraw (car lstPTList) (cadr lstPTList) color )
  34.     (setq lstPTList (cdr lstPTList))
  35.   )
  36. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 10:50 , Processed in 2.200226 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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