明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6584|回复: 32

记忆选择集,关闭DWG有效加入DCL

  [复制链接]
发表于 2013-2-7 17:45 | 显示全部楼层 |阅读模式
本帖最后由 weiqi 于 2013-2-8 14:18 编辑

命令:xzj 调出选择集

命令:delxzj删除选择集

同个DWG文件,关闭后再打开有效。
记得在 --op---选项 ----文件---文件支持搜索路径---加入DCL所在文件夹
代码实在是丑~~~莫见怪~







本帖子中包含更多资源

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

x

评分

参与人数 1金钱 +50 收起 理由
elitefish + 50 可以用CAD的Group命令,将选择集定义为组,.

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-2-7 20:58 | 显示全部楼层
这是利用词典原理吗?对词典不太了解研究研究

点评

这个是用到 vlax-ldata 系列,词典保存。由于选择集保存不了,选择集直接写入vlax-ldata会出现不可串行保存不了,所以转成句柄 保存。然后再转成选择对象 而已,《LISP函数参考2008中文版.chm》里有相关ldata介绍  发表于 2013-2-7 21:02
发表于 2013-2-7 21:14 | 显示全部楼层
词典保存,由于选择集保存不了,选择集直接写入vlax-ldata会出现不可串行保存不了,所以转成句柄 保存。然后再转成选择对象


竟然要转换这么多次先记录起来,说不定以后有用

点评

我是菜鸟嘛,菜鸟方法,大神的方法我不知道。。。  发表于 2013-2-7 21:35
 楼主| 发表于 2013-2-7 22:33 | 显示全部楼层
增加 多个选择集 记忆~
可删除已保存的选择集。
命令改为:dcxz 调出选择集
删除选择集命令为:delxz



  1. ;;调出选择集
  2. (defun c:dcxz()
  3. (print (vlax-ldata-list "tykm" ));;字段第一位为 选择集名称
  4. (print )
  5. (setq jyname (getstring "选择集名称: "))
  6. (xzss (vlax-ldata-get "tykm" jyname))
  7. (command "move" ss1 nil)
  8. (sssetfirst nil ss1)
  9. )
  10. ;;删除选择
  11. (defun c:delxz()
  12. (print (vlax-ldata-list "tykm" ))
  13. (print )
  14. (setq jyname (getstring "请输入要删除的选择集名称: "))
  15. (vlax-ldata-delete "tykm" jyname)

  16. )



  17. ;;选择写入 选择集 句柄写入词典
  18. (defun c:xzxr()
  19. (setq jyname (getstring "选择集名称: "))
  20. (setq listxz nil)

  21. (setq xzj (ssget))

  22. (setq namen 0)
  23. (repeat  (sslength xzj)
  24. (setq xname (ssname xzj namen))
  25. (setq listxz (append listxz (list (cdr (assoc 5 (entget xname))))))
  26. ;;(setq listxz (append listxz (list xname)))

  27. (setq namen (+ namen 1))


  28. )
  29. (print listxz)

  30. (vlax-ldata-put "tykm" jyname listxz)

  31. )




  32. ;;句柄转 图元名  并 组成选择集SS1
  33. ;;(xzss (vlax-ldata-get "tykm" "kym"))
  34. (defun xzss(n)
  35. (print n)
  36. (setq xzzb n)
  37. (setq xzbb 0 )
  38. ;;(setq xzzb (vlax-ldata-get "tykm" "kym"))
  39. (setq xzzbn nil)
  40. (setq xz1 nil)

  41. (setq ss1 (ssadd))
  42. (repeat (length xzzb)
  43. (setq xzzbn (append xzzbn (list (handent (car xzzb)))))

  44. (ssadd (handent (car xzzb)) ss1)
  45. (setq xzzb (cdr xzzb))

  46. (setq xzbb (+ xzbb 1))

  47. )


  48. (print xzzbn)
  49. (print)

  50. )









貌似有的CAD 词典KEY显示不全。本人试过2007就显示不全,
改用CAD 2008就全了。隔壁有个帖子正说这问题,暂时没啥办法。

如果vlax-ldata-list 不全的话 输出出来是看不到全称的,
但是你之前写了什么,写全称的话 还是有用的。

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +2 收起 理由
xyp1964 + 2 赞一个!

查看全部评分

发表于 2013-2-7 23:07 | 显示全部楼层
基本属于鸡肋!

评分

参与人数 1明经币 +1 收起 理由
weiqi + 1 个人电气回路检查用。

查看全部评分

发表于 2013-2-8 15:00 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-2-8 15:03 编辑

同X版想法不同,要多鼓励年轻人。
想法还是不错的,也很有办法,努力加油!!!
发表于 2013-2-8 19:58 | 显示全部楼层
全部功能集成在一个命令里面。感觉在一个DCL操作要好得多

点评

水平有限~~~勉强写出来而已。后续补强。。高手出手的话应该可以简洁得多。  发表于 2013-2-8 23:51
发表于 2013-2-8 21:16 | 显示全部楼层
感觉还是有用处的。支持一下。
发表于 2013-2-26 09:18 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-2-26 09:18 编辑

我还没有发现它的用处,不过觉得很意思,所以改写了一下
  1. ;;自贡黄明儒
  2. ;;调出选择集
  3. (defun c:ChooseSS (/ LIS SSNAM X)

  4.   ;;(xzss 选择集名称),返回选择集
  5.   (defun xzss (SSNam / N1 RESULT SS1)
  6.     (setq result (VL-CATCH-ALL-APPLY 'vlax-ldata-get (list "tykm" SSNam)))
  7.     (if        (VL-CATCH-ALL-ERROR-P result)
  8.       nil
  9.       (progn
  10.         (setq ss1 (ssadd))
  11.         (repeat        (length result)
  12.           (setq n1 (car result))
  13.           (setq result (cdr result))
  14.           (ssadd (handent n1) ss1)
  15.         )
  16.       )
  17.     )
  18.     (sssetfirst nil ss1)
  19.   )

  20.   (if (setq lis (vlax-ldata-list "tykm"))
  21.     (progn (princ (strcat "\n 已经存在选择集 "
  22.                           (apply 'strcat (mapcar '(lambda (x) (strcat (car x) ",")) lis))
  23.                   )
  24.            )
  25.            ;;(initget 7)
  26.            (setq SSNam (getstring "\n 选择集名称: "))
  27.            (VL-CATCH-ALL-APPLY 'xzss (list SSNam))
  28.     )
  29.   )
  30.   (princ)
  31. )

  32. ;;删除选择
  33. (defun c:DelSS (/ LIS SSNAM X)
  34.   ;;(initget 7)
  35.   (if (setq lis (vlax-ldata-list "tykm"))
  36.     (progn (princ (strcat "\n 已经存在选择集 "
  37.                           (apply 'strcat (mapcar '(lambda (x) (strcat (car x) ",")) lis))
  38.                   )
  39.            )
  40.            (setq SSNam (getstring "\n 选择集名称: "))
  41.            (VL-CATCH-ALL-APPLY 'vlax-ldata-delete (list "tykm" SSNam))
  42.     )
  43.   )
  44.   (princ)
  45. )

  46. ;;选择集成员句柄写入词典,随图一起保存
  47. (defun c:CreateSS (/ LIS LISTXZ N SSNAM X en SS)
  48.   (if (setq lis (vlax-ldata-list "tykm"))
  49.     (princ (strcat "\n 已经存在选择集 "
  50.                    (BAtte:lst->str (mapcar '(lambda (x) (car x)) lis) ",")
  51.            )
  52.     )
  53.   )
  54.   ;;(initget 7)
  55.   (if (and (setq SSNam (getstring "\n 选择集名称: "))
  56.            (setq SS (ssget))
  57.       )
  58.     (progn
  59.       (repeat (setq n (sslength SS))
  60.         (setq en (ssname SS (setq n (1- n))))
  61.         (setq listxz (append listxz (list (cdr (assoc 5 (entget en))))))
  62.       )
  63.       (VL-CATCH-ALL-APPLY 'vlax-ldata-put (list "tykm" SSNam listxz))
  64.     )
  65.   )
  66.   (princ)
  67. )

  68. ;;(BAtte:lst->str (list "A" "B") ","),返回"A,B"
  69. (defun BAtte:lst->str (lst del)
  70.   (if (cdr lst)
  71.     (strcat (car lst) del (BAtte:lst->str (cdr lst) del))
  72.     (car lst)
  73.   )
  74. )

  75. ;;(BAtte:str->lst "A,B" ",")返回("A" "B")
  76. (defun BAtte:str->lst (str del / pos)
  77.   (if (setq pos (vl-string-search del str))
  78.     (cons (substr str 1 pos)
  79.           (BAtte:str->lst (substr str (+ pos 1 (strlen del))) del)
  80.     )
  81.     (list str)
  82.   )
  83. )







点评

自贡兄,出手写个DCL吧  发表于 2013-3-14 21:12
 楼主| 发表于 2013-3-30 16:27 | 显示全部楼层
久时不来,什么都忘光了,突然想写个程序,连选择集,一个一个输出都想不起来了。
CAR。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-17 05:33 , Processed in 0.170044 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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