找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: x99

[求助] [求助]:如何改变ssget的提示词?

[复制链接]
 楼主| 发表于 2007-3-7 10:18:14 | 显示全部楼层
把my-ssget修改如下就可以了:

(DEFUN my-ssget (str lst / ss)
  (IF (OR (= str nil) (= str ""))
    (PRINC "\n选择对象:")
    (PRINC (STRCAT "\n" str))
  )
  (SETVAR "nomutt" 1)
  (SETQ ss (VL-CATCH-ALL-APPLY 'SSGET (list lst)))
  (SETVAR "nomutt" 0)
  (IF (VL-CATCH-ALL-ERROR-P ss)
    nil
    ss
  )
)

另外后面主程序的(setvar "nomutt" )语句可以全部删除。否则有点画蛇添足。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-3-8 12:08:05 | 显示全部楼层
2007-03-07:[/COLOR]
对eobser同学在15楼的代码,根据我的理解改动后如下:
[PHP]
;;;主程序
;;;=================================
(defun c:gjcd ()
    (setvar "nomutt" 0)
    (setvar "cmdecho" 0)
    (setq odim (getvar "dimzin"))
    (setvar "dimzin" 1)
    (setq ortho (getvar "orthomode"))
    (setvar "orthomode" 1)
    (if        (setq ss1 (my-ssget "请选择第一列乘数(单长):" '((0 . "*TEXT"))))
        (if (setq ss2 (my-ssget "请选择第二列乘数(根数):" '((0 . "*TEXT"))))
            (if        (= (setq ss1n (sslength ss1)) (setq ss2n (sslength ss2)))
                (progn
                    (princ (strcat ">>>>>>选择了 " (itoa ss1n) " 对数据。"))
                    (if        (setq ent_f (getreal "\n输入小数点位数<2>:"))
                        ()
                        (setq ent_f 2)
                    )
                    (setq pt1 (getpoint "\n选择基点:"))
                    (setq ent1 (entlast))
                    (command "copy" ss2 "" pt1 pause)
                    (setq ss3 (ssadd))
                    (while (setq ent1 (entnext ent1))
                        (ssadd ent1 ss3)
                    )
                    (setq htxt (cdr (assoc 40 (entget (ssname ss1 0)))))
                    (setq i 0)
                    (repeat (min ss1n ss2n)
                        (setq ent3 (entget (ssname ss3 i)))
                        (setq y3 (caddr (assoc 10 ent3)))
                        (setq ii 0)
                        (repeat        ss1n
                            (if        (< (abs        (- y3
                                           (caddr
                                               (assoc
                                                   10
                                                   (entget (ssname ss1 ii))
                                               )
                                           )
                                        )
                                   )
                                   htxt
                                )
                                (setq text1
                                         (atof
                                             (cdr
                                                 (assoc        1
                                                        (entget (ssname ss1 ii))
                                                 )
                                             )
                                         )
                                )
                            )
                            (if        (< (abs        (- y3
                                           (caddr
                                               (assoc
                                                   10
                                                   (entget (ssname ss2 ii))
                                               )
                                           )
                                        )
                                   )
                                   htxt
                                )
                                (setq text2
                                         (atof
                                             (cdr
                                                 (assoc        1
                                                        (entget (ssname ss2 ii))
                                                 )
                                             )
                                         )
                                )
                            )
                            (setq ii (1+ ii))
                        )
                        (setq text3
                                 (rtos (/ (* text1 text2) 1000) 2 (fix ent_f))
                        )
                        (setq ent3
                                 (subst (cons 1 text3) (assoc 1 ent3) ent3)
                        )
                        (entmod ent3)
                        (setq i (1+ i))
                    )
                )
                (alert (princ "\n\"单长\"与\"根数\"不一样多。"))
            )
        )
    )
    (setvar "dimzin" odim)
    (setvar "orthomode" ortho)
    (princ)
)
;;;=================================
[/PHP]

2007-04-06添加:[/COLOR]
下面这个函数是仿SSGET函数的,在选择过程中可以显示当前选择状态。
希望大家完善之。

  1. ;;;功能:通用函数 my-ssget
  2. ;;;简介:仿SSGET函数(自定义SSGET函数的提示内容,选择过程中显示当前状态。)
  3. ;;;日期:zml84 于 2007-04-06
  4. ;;;=====================================================
  5. (DEFUN my-ssget        (str lst / old-nomutt ss)
  6.     (IF        (OR (= str nil) (= str ""))
  7.         (PRINC "\n选择对象:")
  8.         (PRINC (STRCAT "\n" str))
  9.     )
  10.     (SETQ old-nomutt (GETVAR "nomutt"))
  11.     (SETVAR "nomutt" 1)
  12.     (SETQ ss (VL-CATCH-ALL-APPLY 'SSGET (list lst)))
  13.     (SETVAR "nomutt" old-nomutt)
  14.     (IF        (VL-CATCH-ALL-ERROR-P ss)
  15.         nil
  16.         ss
  17.     )
  18. )
  19. ;;;=====================================================
  20. ;;;函数定义
  21. (DEFUN my-ssget        (str lst / old-nomutt ss)
  22.     (IF        (OR (= str nil) (= str ""))
  23.         (SETQ str "\n选择对象:")
  24.         (SETQ str (STRCAT "\n" str))
  25.     )
  26.     (SETQ old-nomutt (GETVAR "nomutt"))
  27. ;;;    (SETVAR "nomutt" 1)
  28.     (SETQ ss   (ssadd)
  29.           test T
  30.     )
  31.     (WHILE test
  32.         (PRINC str)
  33.         (setq temp-ss nil)
  34.         (INITGET "W L C ALL F P")
  35.         (IF (SETQ temp (VL-CATCH-ALL-APPLY 'GETPOINT))
  36.             (progn
  37.                 (cond
  38.                     ((listp temp)
  39.                      (setq pt1 temp)
  40.                      (if (ssget pt1)
  41.                          (setq temp-ss (ssget pt1 lst))
  42.                          (if (setq pt2 (getcorner pt1 "指定对角点:"))
  43.                              (if (> (car pt2) (car pt1))
  44.                                  (setq temp-ss (ssget "W" pt1 pt2 lst))
  45.                                  (setq temp-ss (ssget "C" pt1 pt2 lst))
  46.                              )
  47.                          )
  48.                      )
  49.                     )


  50.                     ;;窗口(W)
  51.                     ((= temp "W")
  52.                      (if (setq pt1 (getpoint "\n指定第一个角点: "))
  53.                          (if (setq pt2 (getcorner pt1 "指定对角点:"))
  54.                              (setq temp-ss (ssget "W" pt1 pt2 lst))
  55.                          )
  56.                      )
  57.                     )

  58. ;;;                    ;;上一个(L)
  59. ;;;                    ;;★★未完成
  60. ;;;                    ((= temp "L")
  61. ;;;                     (if (entlast)
  62. ;;;                         (setq temp-ss (ssget "l" lst))
  63. ;;;                         (princ "没有上一个选择集。")
  64. ;;;                     )
  65. ;;;                    )

  66.                     ;;窗交(C)
  67.                     ((= temp "C")
  68.                      (if (setq pt1 (getpoint "\n指定第一个角点: "))
  69.                          (if (setq pt2 (getcorner pt1 "指定对角点:"))
  70.                              (setq temp-ss (ssget "C" pt1 pt2 lst))
  71.                          )
  72.                      )
  73.                     )

  74.                     ;;全部(ALL)
  75.                     ((= temp "ALL")
  76.                      (setq temp-ss (ssget "all" lst))
  77.                     )

  78.                     ;;栏选(F)
  79.                     ((= temp "F")
  80.                      (setq l '())
  81.                      (while (if        (= (length l) 0)
  82.                                 (setq pt (getpoint "\n指定第一个栏选点:")
  83.                                 )
  84.                                 (progn
  85.                                     (initget "U")
  86.                                     (setq pt (getpoint
  87.                                                  (car l)
  88.                                                  "\n指定下一个栏选点或 [放弃(U)]:"
  89.                                              )
  90.                                     )
  91.                                 )
  92.                             )

  93.                          ;;对用户输入进行响应
  94.                          (cond
  95.                              ((= pt "U")
  96.                               (setq l (cdr l))
  97.                              )
  98.                              ((listp pt)
  99.                               (setq
  100.                                   l (cons (list (car pt) (cadr pt)) l)
  101.                               )
  102.                              )
  103.                          )
  104.                          ;;绘出迹线
  105.                          (if (>= (length l) 2)
  106.                              (grdraw (cadr l) (car l) 2 1)
  107.                          )
  108.                      )
  109.                      ;;将点位表进行倒置(也可以不作)
  110.                      (setq l (reverse l))
  111.                      (if (> (length l) 1)
  112.                          (setq temp-ss (ssget "F" l lst))
  113.                      )
  114.                     )

  115. ;;;                    ;;前一个(P)
  116. ;;;                    ;;★★未完成
  117. ;;;                    ((= temp "P")
  118. ;;;                     (if (ssget "P")
  119. ;;;                         (setq temp-ss (ssget "P"))
  120. ;;;                         (princ "没有前一个选择集。")
  121. ;;;                     )
  122. ;;;                    )

  123.                     ;;拦截处理
  124.                     (T
  125.                      (princ
  126.                          (strcat
  127.                              "\n*无效选择*"
  128.                              "\n需要点或窗口(W)/上一个(L)/窗交(C)/框(BOX)"
  129.                              "/全部(ALL)/栏选(F)/圈围(WP)/圈交(CP)/编组(G)"
  130.                              "/添加(A)/删除(R)/多个(M)/前一个(P)/放弃(U)"
  131.                              "/自动(AU)/单个(SI)")
  132.                      )
  133.                     )
  134.                 )                        ; 结束cond

  135.                 (setq n-old (sslength ss))
  136.                 (if temp-ss
  137.                     (progn
  138.                         ;;计算找到数量
  139.                         (setq n-temp (sslength temp-ss)
  140.                               i             0
  141.                         )
  142.                         ;;将temp-ss添加到SS中并高亮显示
  143.                         (repeat        n-temp
  144.                             (setq ei (ssname temp-ss i)
  145.                                   ss (ssadd ei ss)
  146.                             )
  147.                             (redraw ei 3)
  148.                             (setq i (1+ i))
  149.                         )
  150.                         ;;计算总计数量和重复数量
  151.                         (setq n-ss   (sslength ss)
  152.                               n-重复 (- (+ n-old n-temp) n-ss)
  153.                         )
  154.                     )
  155.                     (setq n-temp 0
  156.                           n-重复 0
  157.                           n-ss n-old
  158.                     )
  159.                 )
  160.                 ;;输出找到数量
  161.                 (princ (strcat " 找到 "
  162.                                (itoa n-temp)
  163.                                " 个"
  164.                        )
  165.                 )
  166.                 ;;输出重复数量
  167.                 (if (> n-重复 0)
  168.                     (princ (strcat " ("
  169.                                    (itoa n-重复)
  170.                                    " 个重复)"
  171.                            )
  172.                     )
  173.                 )
  174.                 ;;输出总计数量
  175.                 (if (= n-old 0)
  176.                     ()
  177.                     (princ (strcat
  178.                                ",总计 "
  179.                                (itoa n-ss)
  180.                                " 个"
  181.                            )
  182.                     )
  183.                 )
  184.             )                                ; 结束progn
  185.             (setq test nil)
  186.         )                                ; 结束if
  187.         (if (VL-CATCH-ALL-ERROR-P temp)
  188.             (setq test nil)
  189.         )
  190.     )                                        ; 结束while

  191.     ;;恢复设置
  192.     (SETVAR "nomutt" old-nomutt)
  193.     ss
  194. )
  195. ;;;=====================================================

  1. ;;;测试
  2. (defun c:tt ()
  3.     ;;(setq s1 (my-ssget ">>>>>文字:" '((0 . "*TEXT"))))
  4.     (setq s1 (my-ssget ">>>>>请选择直线:" '((0 . "*LINE"))))
  5.     ;;(setq s1 (my-ssget ">>>>>请任意选择:" nil))
  6.     (command "_regenall")
  7.     (princ "\n正常结束。")
  8.     (princ)
  9. )
  10. ;;;=====================================================
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 17:30 , Processed in 0.361408 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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