明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2547|回复: 5

[提问] 关于带关键字的SSGET。怎么加了高飞鸟的代码后,程序运行不了?

  [复制链接]
发表于 2014-7-28 12:51:02 | 显示全部楼层 |阅读模式
本帖最后由 scream2658 于 2014-7-29 14:51 编辑

   看了高飞鸟的带关键字的SSGET,觉得很强大。把它加到我的小程序里面,竟然加载后运行不了。求高手帮我看看这段代码的问题出在哪。我用了猫老师的编辑器后,运行时提示,8进制字符不正确。

本帖子中包含更多资源

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

x
发表于 2014-7-28 15:57:10 | 显示全部楼层
例如:   提示 选择对象时  可以接受 ALL  选择全部一样吗?
 楼主| 发表于 2014-7-28 16:03:20 | 显示全部楼层
ysq101 发表于 2014-7-28 15:57
例如:   提示 选择对象时  可以接受 ALL  选择全部一样吗?

是的,就是带关键字的SSGET。在明经上看了飞诗的帖子,感觉好复杂啊。不知道有没有具体的源码学习下。
 楼主| 发表于 2014-7-28 22:47:21 | 显示全部楼层
;;;功能:标注引线长度修改  Ver 1.1
;;;日期:2014.07.25
;;;作者:CADMAN

(defun c:qd(/ new_dis ss i dim_en pt10_old pt10_new pt10_XYZ pt14_old pt14_XYZ pt10_XYZ_new pt11_new pt11_XYZ_new dis key_word)
        (vl-load-com)
        (setq acadobj (vlax-get-acad-object))
        (setq dwgobj (vla-get-ActiveDocument acadobj))
        (if (= new_dis nil) (setq new_dis 800))
    (princ "\n当前引线修改长度为")(princ (rtos new_dis 2 1))
        (setq msg (strcat "选择对象[设置<S>]:"))
    (setq SS (Fsxm-ssget msg "S" '( (-4 . "<AND") (0 . "DIMENSION") (-4 . "<OR") (-4 . "<OR")(70 . 32) (70 . 33)(-4 . "OR>")(-4 . "<OR")(70 . 160)(70 . 161)(-4 . "OR>")(-4 . "OR>")(-4 . "AND>"))))
    (cond ((= SS "S") (setq new_dis (getdist  ",请输入新的间距:")))
                     ((= (type SS) 'PICKSET) (setq new_dis (getdist  ",请输入新的间距:")))
                         (t nil)
                   );end_cond
    (if (/= ss nil)
              (setq i 0)
              (repeat (sslength ss)
              (setq dim_en (entget (ssname ss i)))
              (setq xobj (vlax-ename->vla-object (ssname ss i)))
              (setq dis (vlax-get-property xobj 'ExtensionLineOffset))
              (setq pt10_old (assoc 10 dim_en))
              (setq pt10_XYZ (cdr pt10_old))
              (setq pt14_old (assoc 14 dim_en))
              (setq pt14_XYZ (cdr pt14_old))
              (setq pt10_XYZ_new (polar pt14_XYZ (angle pt14_XYZ pt10_XYZ) (+ new_dis dis)))
              (setq pt10_new (append '(10) pt10_XYZ_new))
              (setq pt11_old (assoc 11 dim_en))
              (setq pt11_XYZ (cdr pt11_old))
              (setq pt11_XYZ_new (polar pt11_XYZ (angle pt14_XYZ pt10_XYZ) (+ new_dis dis)))
              (setq pt11_new (append '(11) pt11_XYZ_new))
              (setq dim_en (subst pt10_new pt10_old dim_en) )
              (setq dim_en (subst pt11_new pt11_old dim_en) )
              (entmod dim_en)
              (setq i (1+ i))
                      );结束repeat!
     )    ;结束IF循环
(princ)
)

;;**********************************************
;;带关键字的 ssget&#160;&#160;原创:飞诗,来自明经通道论坛
;;转载、引用请注明出处
;;**********************************************
(defun Fsxm-ssget (Msg Kwd Fil / Kwd0 pt var *acad* *doc* Fsxm-entsel Fsxm-Split Fsxm-Pt2Str)
  (defun Fsxm-entsel (msg filter)
    (setq enp (entsel msg))
    (if (or (= (type enp) 'str)
            (and enp (ssget (cadr enp) filter))
        )
     enp
    )
  );
  (defun Fsxm-Split (string strkey / po strlst xlen)
    (setq xlen (1+ (strlen strkey)))
    (while (setq po (vl-string-search strkey string))
      (setq strlst (cons (substr string 1 po) strlst))
      (setq string (substr string (+ po xlen)))
    )
    (reverse (cons string strlst))
  )
  (defun Fsxm-Pt2Str (pt)
    (strcat (rtos (car pt) 2 2)
            ","
            (rtos (cadr pt) 2 2)
            ","
            (rtos (caddr pt) 2 2)
            "\n"
    )
  )
  (cond
        ((cadr (ssgetfirst)))
        (T
         (setq Kwd0 "W L C BOX ALL F WP CP G A R M P U AU SI")
         (initget (strcat Kwd0 " " kwd))
         (cond ( (and (listp (setq var (Fsxm-entsel Msg Fil)))
                      (/= 52 (getvar "errno"))
                 );and
                 (vla-sendcommand *doc* (Fsxm-Pt2Str (cadr (grread t))))
                 (ssget Fil)
               )
               ((member var (Fsxm-Split Kwd0 " "))
                (vla-sendcommand *doc* (strcat var "\n"))
                (ssget Fil)
               )
               (t var)
         )
        )
  );cond
);defun
发表于 2014-7-29 07:59:17 | 显示全部楼层
  1. ;;;功能:标注引线长度修改  Ver 1.1
  2. ;;;日期:2014.07.25
  3. ;;;作者:CADMAN
  4. (defun c:qd(/ new_dis ss i dim_en pt10_old pt10_new pt10_XYZ pt14_old pt14_XYZ pt10_XYZ_new pt11_new pt11_XYZ_new dis key_word)
  5. (vl-load-com)
  6. (setq acadobj (vlax-get-acad-object))
  7. (setq dwgobj (vla-get-ActiveDocument acadobj))
  8. (if (= new_dis nil) (setq new_dis 800))
  9. (princ "\n当前引线修改长度为")(princ (rtos new_dis 2 1))
  10. (setq msg (strcat "选择对象[设置<S>]:"))
  11. (setq SS (Fsxm-ssget msg "S" '((0 . "DIMENSION")(-4 . "<OR")(70 . 32)(70 . 33)(70 . 160)(70 . 161)(-4 . "OR>"))))
  12. (cond
  13.   ((= SS "S") (setq new_dis (getdist  ",请输入新的间距:")))
  14.   ((= (type SS) 'PICKSET) (setq new_dis (getdist  ",请输入新的间距:")))
  15.   (t nil)
  16. );end_cond
  17. (if (/= ss nil) (progn
  18.   (setq i 0)
  19.   (repeat (sslength ss)
  20.    (setq dim_en (entget (ssname ss i)))
  21.    (setq xobj (vlax-ename->vla-object (ssname ss i)))
  22.    (setq dis (vlax-get-property xobj 'ExtensionLineOffset))
  23.    (setq pt10_old (assoc 10 dim_en))
  24.    (setq pt10_XYZ (cdr pt10_old))
  25.    (setq pt14_old (assoc 14 dim_en))
  26.    (setq pt14_XYZ (cdr pt14_old))
  27.    (setq pt10_XYZ_new (polar pt14_XYZ (angle pt14_XYZ pt10_XYZ) (+ new_dis dis)))
  28.    (setq pt10_new (append '(10) pt10_XYZ_new))
  29.    (setq pt11_old (assoc 11 dim_en))
  30.    (setq pt11_XYZ (cdr pt11_old))
  31.    (setq pt11_XYZ_new (polar pt11_XYZ (angle pt14_XYZ pt10_XYZ) (+ new_dis dis)))
  32.    (setq pt11_new (append '(11) pt11_XYZ_new))
  33.    (setq dim_en (subst pt10_new pt10_old dim_en) )
  34.    (setq dim_en (subst pt11_new pt11_old dim_en) )
  35.    (entmod dim_en)
  36.    (setq i (1+ i))
  37.   );结束repeat!
  38. ))    ;结束IF循环
  39. (princ)
  40. )
  41. ;;**********************************************
  42. ;;带关键字的 ssget  原创:飞诗,来自明经通道论坛
  43. ;;转载、引用请注明出处
  44. ;;**********************************************
  45. (defun Fsxm-ssget (Msg Kwd Fil / Kwd0 pt var *acad* *doc* Fsxm-entsel Fsxm-Split Fsxm-Pt2Str)
  46. (defun Fsxm-entsel (msg filter)
  47.   (setq enp (entsel msg))
  48.   (if (or (= (type enp) 'str)
  49.             (and enp (ssget (cadr enp) filter))
  50.       )
  51.    enp
  52.   )
  53. )
  54. (defun Fsxm-Split (string strkey / po strlst xlen)
  55.   (setq xlen (1+ (strlen strkey)))
  56.   (while (setq po (vl-string-search strkey string))
  57.    (setq strlst (cons (substr string 1 po) strlst))
  58.    (setq string (substr string (+ po xlen)))
  59.   )
  60.   (reverse (cons string strlst))
  61. )
  62. (defun Fsxm-Pt2Str (pt)
  63.   (strcat (rtos (car pt) 2 2) ","
  64.             (rtos (cadr pt) 2 2) ","
  65.             (rtos (caddr pt) 2 2) "\n"
  66.   )
  67. )
  68. (cond
  69.   ((cadr (ssgetfirst)))
  70.   (T
  71.    (setq Kwd0 "W L C BOX ALL F WP CP G A R M P U AU SI")
  72.    (initget (strcat Kwd0 " " kwd))
  73.    (cond ( (and (listp (setq var (Fsxm-entsel Msg Fil)))
  74.                       (/= 52 (getvar "errno"))
  75.                );and
  76.     (vla-sendcommand *doc* (Fsxm-Pt2Str (cadr (grread t))))
  77.     (ssget Fil)
  78.    )
  79.    ((member var (Fsxm-Split Kwd0 " "))
  80.     (vla-sendcommand *doc* (strcat var "\n"))
  81.     (ssget Fil)
  82.    )
  83.    (t var)
  84.   )
  85. )
  86. );cond
  87. );defun
发表于 2014-7-29 11:30:30 | 显示全部楼层
大神啊。。。只有想不到。。没有做不到啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 14:55 , Processed in 0.262386 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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