明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1128|回复: 6

[提问] 自己水平有限,想把两个小程序合成1个,简单合成后程序显示语法错误,请大神修改.谢谢

[复制链接]
发表于 2020-5-1 12:03:40 | 显示全部楼层 |阅读模式
本帖最后由 friendship 于 2020-5-1 15:38 编辑

;想把注释里的tt11和tt12合并成一个程序。tt1直接选择全图中的单行文字,tt2选择框选范围内的单行文字
;合并后:直接回车,直接选择全图内的单行文字,输入Y,选取框选范围内的单行文字。
;水平有限,自己改了一下,显示语法错误,请大神修改一下。谢谢
;2个小程序均来源于明经通道



;想把注释里的tt11和tt12合并成一个程序,直接回车,选择全图内的单行文字,输入Y,框选选取范围内的单行文字
;水平有限,自己改了一下,显示语法错误,请大神修改一下。
(defun C:tt(/ SSFS_aMT A B)
(INITGET 128 "Y N")
    (setq key (getkword "\n请选择模式:<全屏选择 (N) 默认>/[鼠标框选 (Y)]"))
    (if (= key nil)(setq key "N")(setq key "Y"))

    (if (= key "Y")
  (progn
    (  (setq A "多行字" B '((0 . "TEXT"))) ;指定过滤类型
  (guolv-ssget))
  )
  
  (progn
((setq SSFS_aMT (ssget "X" '((0 . "TEXT"))))
(sssetfirst nil SSFS_aMT)
(if SSFS_aMT (progn
  (princ (strcat "\n共选中 " (itoa (sslength SSFS_aMT)) " 个文字!"))
       );;progn
       (princ "\n共选中 0 个文字"))
    SSFS_aMT
(princ))
))
)

(defun guolv-ssget (/ ss)
  (princ (strcat "过滤选择对象类型: <" A ">"))
  (if (setq ss (ssget B))
    (progn
      (sssetfirst nil ss)
      (princ (strcat "您共计选择" (itoa (sslength ss)) "个<" A ">。"))
    )
    (princ (strcat "未找到<" A ">对象。"))
  )
  (princ)
)


;以下为两个单独的程序,代码来源于明经通道
;1st-第一个小程序
;(defun C:tt11(/ SSFS_aDT)
;(setq SSFS_aDT (ssget "X" '((0 . "TEXT"))))
;(sssetfirst nil SSFS_aDT)
;(if SSFS_aDT (progn
;  (princ (strcat "\n共选中 " (itoa (sslength SSFS_aDT)) " 个单行文字!"))
;  ;(if (= 0 (getvar "cmdactive")) (vl-cmdf "select" SSFS_aDT "" "pselect" SSFS_aDT ""))
;       );;progn
;       (princ "\n共选中 0 个单行文字"))
;    SSFS_aDT
;(princ))
;2nd--第二个小程序
;(defun C:tt22 (/ A B)
;  (setq A "单行字" B '((0 . "TEXT"))) ;指定过滤类型
;  (guolv-ssget)
;)
;
;(defun guolv-ssget (/ ss)
;  (setvar "cmdecho" 0)
;  (princ (strcat "过滤选择对象类型: <" A ">"))
;  (if (setq ss (ssget B))
;    (progn
;      (sssetfirst nil ss)
;      (princ (strcat "您共计选择" (itoa (sslength ss)) "个<" A ">。"))
;    )
;    (princ (strcat "未找到<" A ">对象。"))
;  )
;  (princ)
;)

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-5-1 20:50:47 | 显示全部楼层
主要还是括号不匹配造成的
(defun C:tt(/ SSFS_aMT A B)
        (INITGET 128 "Y N")
        (setq key (getkword "\n请选择模式:<全屏选择 (N) 默认>/[鼠标框选 (Y)]"))
        (if (= key nil)(setq key "N")(setq key "Y"))
       
        (if (= key "Y")
                (progn
                        (setq A "多行字" B '((0 . "TEXT"))) ;指定过滤类型
                        (guolv-ssget)
                )
               
                (progn
                        (setq SSFS_aMT (ssget "X" '((0 . "TEXT"))))
                        (sssetfirst nil SSFS_aMT)
                        (if SSFS_aMT
                                (progn
                                        (princ (strcat "\n共选中 " (itoa (sslength SSFS_aMT)) " 个文字!"))
                                );;progn
                                (princ "\n共选中 0 个文字")                               
                        )
                        SSFS_aMT
                        (princ)                       
                )
        )       
)


(defun guolv-ssget (/ ss)
  (princ (strcat "过滤选择对象类型: <" A ">"))
  (if (setq ss (ssget B))
    (progn
      (sssetfirst nil ss)
      (princ (strcat "您共计选择" (itoa (sslength ss)) "个<" A ">。"))
    )
    (princ (strcat "未找到<" A ">对象。"))
  )
  (princ)
)
发表于 2020-5-1 21:08:00 | 显示全部楼层
(defun c:tt ( / ss key )
  (setq key (getstring "\n请选择模式:<全屏选择 (N) 默认>/[鼠标框选 (Y)]"))
  (if (or (= key "Y") (= key "y"))
    (while (null (setq ss (ssget '((0 . "TEXT"))))))
    (while (null (setq ss (ssget "X" '((0 . "TEXT"))))))
   )
  (princ (strcat "\n共选中 " (itoa (sslength ss)) " 个文字!"))
  (sssetfirst nil ss)
  (princ)
)
 楼主| 发表于 2020-5-1 21:10:29 | 显示全部楼层
烟盒迷唇 发表于 2020-5-1 20:50
主要还是括号不匹配造成的
(defun C:tt(/ SSFS_aMT A B)
        (INITGET 128 "Y N")

括号,看了好多次,也没发现不对。

谢谢,感谢
 楼主| 发表于 2020-5-3 23:10:49 | 显示全部楼层
本帖最后由 friendship 于 2020-5-3 23:17 编辑
wang_cn10 发表于 2020-5-1 21:08
(defun c:tt ( / ss key )
  (setq key (getstring "\n请选择模式:/[鼠标框选 (Y)]"))
  (if (or (= key  ...

谢谢,够精简,厉害
小建议    “没有合适的选择对象时,选择结果为0时,显示不是很直观。”
非常感谢
 楼主| 发表于 2020-5-3 23:14:16 | 显示全部楼层
烟盒迷唇 发表于 2020-5-1 20:50
主要还是括号不匹配造成的
(defun C:tt(/ SSFS_aMT A B)
        (INITGET 128 "Y N")
;;您好,程序顺利加载,不过有些问题
;;程序问题,输入“S”后,如果框选为空集,或者框选内没有单行文字,显示:“; 错误: 参数类型错误: stringp nil”
;;不能显示:“未找到<单行文字>对象,选中 0 个<单行文字>”
;;也不知道哪里出了问题。

(defun C:TT (/ SSFS_aMT A_TYPE B_SEL)
         (INITGET 128 "A S")
         (setq key (getkword "\n请选择模式:<全图选择 (A) 默认>/[鼠标框选 (S)]"))
                 
         (if (= key nil)(setq key "A")(setq key "S"));;end-if
         (if (= key "S")
                 (progn
                        (setq A_TYPE "单行文字" B_SEL '((0 . "TEXT"))) ;指定过滤类型
                        (guolv_ssget)
                 );;end-progn
                 (progn
                         (setq SSFS_aMT (ssget "X" '((0 . "TEXT"))))
                         (sssetfirst nil SSFS_aMT)
                         (if SSFS_aMT
                                 (progn
                                         (princ (strcat "\n您共计选择 " (itoa (sslength SSFS_aMT)) " 个<单行文字>!"))
                                 );;end-progn
                                 (princ "\n未找到<单行文字>对象,选中 0 个<单行文字>")                                
                         );;end-if
                         SSFS_aMT
                         (princ)
                 );;end-progn
         );;end-if
);;end-defun c:

(defun guolv_ssget (/ usr_ss_group)
    (princ (strcat "过滤选择对象类型: <" A_TYPE ">"))
   (if (setq usr_ss_group (ssget B_SEL))
     (progn
       (sssetfirst nil usr_ss_group)
       (princ (strcat "您共计选择 " (itoa (sslength usr_ss_group)) " 个<" A_TYPE ">!"))
     );;end-progn
     (princ (strcat "未找到<" A_TYPE ">对象," “选中 0 个<” A_TYPE “>”))
   );;end-if
   (princ)
);;end-defun(guolv_ssget)
  
发表于 2020-5-4 06:52:14 | 显示全部楼层
做个判断呀,空的继续提示选择对象。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 05:25 , Processed in 0.174254 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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