明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1505|回复: 3

[提问] LIST_BOX复选出现问题,请各位大神指点迷津

[复制链接]
发表于 2015-4-16 09:41:13 | 显示全部楼层 |阅读模式
本帖最后由 海盗曹 于 2015-4-16 09:44 编辑

复制代码
1.程序来源
      代码均来源于论坛,主要使用了自贡黄明儒大师的随图选择集程序,还有一些论坛里的其他代码。在此对无私奉献的大婶们表示婶婶的感谢。


2.程序意图
      希望按关键字提取当前图中所有单行文字,然后每组相同文字自动形成一个选择集,选择集名称即为此组文字内容。以便后续对每组的对象进行相应的调用、删除。


3.程序问题
      (1)在自己改装成复选模式之后,调用和删除功能就无法使用了。创建选择集功能则可正常运行。
      (2)选择集保存于当前激活的图形中,关闭cad后,再重新打开,原图中的选择集消失。即选择集未随图纸保存。


4.求助申请
      希望各位大神不吝赐教,指点优化,在此先感谢大婶们了!
5.程序源码及DCL文件如下。
  1. (defun c:W_AHFG ()
  2.   (setq SSLists (Sub-SS-SSLists))
  3.   (dcl_contents SSLists)
  4. )
  5. (defun dcl_contents (SSLists / dcl_id S_D)
  6.   (sssetfirst)
  7.   (if (> (setq dcl_id (load_dialog "随图选择集")) 0)
  8.     (if (new_dialog "SuiTuSS" dcl_id) (progn
  9.         (start_list "SSList") ;_已有选择集列表
  10.         (mapcar 'add_list SSLists)
  11.         (end_list)
  12.         (action_tile "AddSS" "(done_dialog 2)")
  13.         (action_tile "ChsSS" "(done_dialog 3)")
  14.         (action_tile "DelSS" "(done_dialog 4)")
  15.         (action_tile "SSName" "(setq SSNam $value)")
  16.         (action_tile "accept" "(readata)(done_dailog 1)")
  17.         (action_tile "cancel" "(done_dialog 0)")
  18.         (setq S_D (start_dialog))
  19.         (cond
  20.           ((= S_D 2) (Sub-SS-CreateSS SSNam))
  21.           ((= S_D 3) (choosess))
  22.           ((= S_D 4) (deletess))
  23.         )
  24.         (start_dialog)
  25.         (unload_dialog dcl_id)
  26.       )
  27.       (princ "\n无法显示对话框!")
  28.     )
  29.     (princ "\n无法加载对话框!")
  30.   )
  31.   (princ)
  32. )
  33. (defun readata ()
  34.   (setq nlst (get_tile "SSList"))
  35.   (setq slst (mapcar '(lambda (n) (nth (itoa n) SSLISTS)) nlst))
  36. )
  37. (defun strles (s1 s2 / a1 a2)
  38.   (setq a1 (ascii s1) a2 (ascii s2))
  39.   (cond
  40.     ((and (<= 48 a1 57) (<= 48 a2 57)) (< (atoi s1) (atoi s2)))
  41.     ((= a1 a2) (strles (substr s1 2) (substr s2 2)))
  42.     ((< a1 a2) t)
  43.     (t nil)
  44.   )
  45. )
  46. (defun choosess (/ n ss ss1)
  47.   (setq ss1 (ssadd))
  48.   (setq n 0)
  49.   (repeat (length (read (strcat "(" (get_tile "SSList") ")")))
  50.     (setq ss (Sub-SS-ChooseSS (nth (nth n (read (strcat "(" (get_tile "SSList") ")"))) SSLists)))
  51.     (steq n (1+ n))
  52.     (ssadd ss ss1)
  53.   )
  54. )
  55. (defun deletess (/ n)
  56.   (setq n 0)
  57.   (repeat (length (read (strcat "(" (get_tile "SSList") ")")))
  58.     (Sub-SS-DelSS (nth (nth n (read (strcat "(" (get_tile "SSList") ")"))) SSLists))
  59.     (steq n (1+ n))
  60.   )
  61. )
  62. ;;;================================================================================
  63. (defun Sub-SS-CreateSS (SSNam / dcllist e el en index listxz lst n1 newlst s ss ss1 sslists sstemp txt x1)
  64.   (if SSNam (progn
  65.       (setq SS (ssget (list '(0 . "TEXT")(cons 1 (strcat "*" SSNam "*")))))
  66.       (setq sstemp ss)
  67.       (setq lst nil  newlst nil x1 0)
  68.       (setq n (sslength ss))
  69.       (setq index 0)
  70.       (repeat n
  71.         (setq el (entget ( ssname ss index)))
  72.         (setq index ( + index 1))
  73.         (setq e (assoc 0 el))
  74.         (if (= "TEXT" (cdr e)) (progn
  75.             (setq txt (cdr (assoc 1 el)))
  76.             (setq lst(cons (append  (list 1) (list txt))lst))
  77.         ))
  78.       )
  79.       (while lst
  80.         (setq n 0)
  81.         (foreach i lst (if (= (cadar lst) (cadr i))(setq n (+ n (car i)))))
  82.         (setq newlst (append newlst (list (list n (cadar lst)))))
  83.         (setq newlst (vl-sort newlst (function (lambda (e1 e2) (strles (cadr e1) (cadr e2))))))
  84.         (setq lst(vl-remove-if '(lambda (x) (= (cadar lst) (cadr x))) lst))
  85.       )
  86.       (setq dcllist (mapcar 'cadr newlst))
  87.       (setq s 0)
  88.       (repeat (length dcllist)
  89.         (setq ss1 sstemp)
  90.         (command "._select" ss1 "")
  91.         (setq ss1 (ssget "P" (list '(0 . "TEXT")(cons 1 (nth s dcllist)))))
  92.         (setq n1 (sslength SS1))
  93.         (repeat n1
  94.           (setq en (ssname SS1 (setq n1 (1- n1))))
  95.           (setq listxz (append listxz (list (cdr (assoc 5 (entget en))))))
  96.           (VL-CATCH-ALL-APPLY 'vlax-ldata-put (list "SS-Data-SSXZJ" (nth s dcllist) listxz))
  97.         )
  98.         (setq listxz '())
  99.         (setq s (1+ s))
  100.       )
  101.       (setq SSLists (Sub-SS-SSLists))
  102.       ;(dcl_contents SSLists)
  103.   ))
  104. )
  105. ;;调出选集
  106. (defun Sub-SS-ChooseSS (SSNam / N1 RESULT SS1)
  107.   (setq result (VL-CATCH-ALL-APPLY 'vlax-ldata-get (list "SS-Data-SSXZJ" SSNam)))
  108.   (if (VL-CATCH-ALL-ERROR-P result)
  109.     nil
  110.     (progn
  111.       (setq ss1 (ssadd))
  112.       (repeat (length result)
  113.         (setq n1 (car result))
  114.         (setq result (cdr result))
  115.         (ssadd (handent n1) ss1)
  116.       )
  117.   ))
  118.   (sssetfirst nil ss1)
  119. )
  120. (defun Sub-SS-DelSS (SSNAM / SSLists)
  121.   (VL-CATCH-ALL-APPLY 'vlax-ldata-delete (list "SS-Data-SSXZJ" SSNam)) ;_删除单个选择集
  122.   (setq SSLists (Sub-SS-SSLists))
  123.   (dcl_contents SSLists)
  124. )
  125. (defun Sub-SS-DelSSAll (/ SSLists)
  126.   (YX:Put-Dict-DelDict "SS-Data-SSXZJ") ;_删除词典,清空选择集
  127.   (setq SSLists (Sub-SS-SSLists))
  128.   (dcl_contents SSLists)
  129. )
  130. (defun Sub-SS-SSLists (/ LIS SSNAMS X)
  131.   (if (setq lis (vlax-ldata-list "SS-Data-SSXZJ"))
  132.     (setq SSNAMlst (mapcar '(lambda (x) (car x)) lis))
  133.     (setq SSNAMlst nil)
  134.   )
  135. )
  136. (princ "\n***>>>>>海盗曹按编号自动构造选择集=W_AHFG<<<<<***")
  137. (princ "\nO(∩_∩)O用处自己想吧O(∩_∩)O")
  138. (princ)





  139. SuiTuSS:dialog {
  140.     label = "随图选择集" ;
  141.     :boxed_column {
  142.         :row {
  143.             :button {
  144.                 label = "添加" ;
  145.                 key = "AddSS" ;
  146.             }
  147.             :edit_box {
  148.                 key = "SSName" ;
  149.                 value = "Z" ;
  150.             }
  151.         }
  152.         :list_box {
  153.             key = "SSList" ;
  154.             label = "已有选择集" ;
  155.             multiple_select = true ;
  156.         }
  157.         :row {
  158.             :button {
  159.                 label = "调用" ;
  160.                 key = "ChsSS" ;
  161.                 is_default = true ;
  162.                 is_cancel = true ;
  163.             }
  164.             :button {
  165.                 label = "删除" ;
  166.                 key = "DelSS" ;
  167.             }
  168.         }
  169.     }
  170.     spacer_1;
  171.     cancel_button;
  172. }

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2015-4-16 13:03:15 | 显示全部楼层
看来大神们很忙。。。
 楼主| 发表于 2015-4-17 10:44:42 | 显示全部楼层
复选问题已解决,随图问题待解
 楼主| 发表于 2015-4-24 10:28:28 | 显示全部楼层
(VL-CATCH-ALL-APPLY 'vlax-ldata-put (list "SS-Data-SSXZJ" "1.图中未标注剪力墙均为Q1,其平面位置均为轴线居中布置." "data"))
                                        (vlax-ldata-list "SS-Data-SSXZJ")
请问各位,vlax-ldata-list为何读不出呢?
是因为"1.图中未标注剪力墙均为Q1,其平面位置均为轴线居中布置."格式问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-27 02:57 , Processed in 0.176390 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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