明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 709|回复: 1

[讨论] 高手看看,怎么优化一下,感觉写得太复杂了。

[复制链接]
发表于 2015-12-8 22:57:39 | 显示全部楼层 |阅读模式
  1. (defun Form1_load( / dcl_id Dialog_Return key keys Dcl_File)
  2.   (vl-load-com)
  3.   (setq dcl_id (load_dialog (setq Dcl_File (Write_Dcl_Form1))));对话框加载
  4.   (vl-file-delete Dcl_File);加载后删除DCL文件
  5.   (setq Dialog_Return 2)
  6.   (while (> Dialog_Return 1) ;循环控制对话框是否结束
  7.     (new_dialog "Form1" dcl_id);建立窗体
  8. ;-->-->-对话框初始化->-->--
  9.     (setq keys '("List1" "accept" "cancel"));列表全部控件名称
  10.     (setq 图层列表 (当前图纸所有图层))
  11.     (start_list "List1");直列表 {"List1"} 初始化
  12.     (mapcar 'add_list 图层列表);添加列表项
  13.     (end_list)
  14.     (foreach key keys;全部控件的初始化
  15.       (if (eval (read (strcat key "_bak"))) (set_tile key (eval (read (strcat key "_bak")))));控件内容
  16.       (action_tile key "(Action_Form1_Keys $key $value)");点击动作
  17.     )
  18. ;--<--<-对话框初始化完成-<--<--
  19.     (setq Dialog_Return (start_dialog));开启对话框(用户可见)
  20.   )
  21.   (unload_dialog dcl_id);退出时卸载对话框
  22.   (princ);防止函数回显
  23. )
  24. (defun Action_Form1_Keys (key value) ;全部控件的点击动作触发
  25.   (cond
  26.     ((= key "accept") ;{确认按钮}
  27.       (setq 所选择的项 (get_tile "List1") )
  28.       (Get_Form1_Data)
  29.       (done_dialog 1);对话框退出返回主函数 传递给Dialog_Return值为1
  30.     )
  31.     ((= key "cancel") ;{取消按钮}
  32.       (exit)
  33.       (done_dialog 0);对话框退出返回主函数 传递给Dialog_Return值为0
  34.     )
  35.     ((= key "List1") ; {} (普通列表)
  36.       ()
  37.     )
  38.   )
  39. )
  40. (defun Get_Form1_Data( / key);临时生成Dcl文件 返回文件名
  41.   (foreach key keys
  42.     (set (read (strcat key "_bak")) (get_tile key));每个控件都赋给一个变量 用于下次开启初始化
  43.   )
  44. )
  45. (defun Write_Dcl_Form1( / Dcl_File file str)
  46.   (setq Dcl_File (vl-filename-mktemp nil nil ".Dcl"))
  47.   (setq file (open Dcl_File "w"))
  48.   (foreach str '(
  49.     "Form1:dialog"
  50.     "{"
  51.     " label = \"选择删除所在图层的图元\";"
  52.     "    :list_box"
  53.     "    {"
  54.     "        key = \"List1\" ;"
  55.     "        width = 5 ;"
  56.     "        height = 20 ;"
  57.     "  multiple_select = true  ;"
  58.     "    }"
  59.     "ok_cancel ;"
  60.     "}"
  61.     )
  62.     (write-line str file)
  63.   )
  64.   (close file)
  65.   Dcl_File
  66. )
  67. (defun 当前图纸所有图层 ( / D R)
  68.   (while
  69.     (setq D (tblnext "layer" (null D)))
  70.     (setq R (cons (cdr (assoc 2 D)) R))
  71.   )
  72.   (reverse r)
  73. )
  74. (defun 去掉重复项 (lst / a lst2);去掉表中相同元素
  75.   (while
  76.     (setq a (car lst))
  77.     (setq  lst2 (cons a lst2))
  78.     (setq lst (vl-remove a lst))
  79.   )
  80.   (reverse lst2)
  81. )
  82. (defun SSGET项目 (图层列表 所选择的项 / i d c b e f);此部分是测试代码用
  83.   (setq i 0)
  84.   (setq d nil)
  85.   (repeat (strlen 所选择的项)
  86.     (setq i (1+ i))
  87.     (setq c (substr 所选择的项 i 1))
  88.     (if (/= c " ")
  89.       (setq b (strcat (nth (atoi c) 图层列表) ","))
  90.     )
  91.     (setq d (append d (list b)))
  92.     (setq e (apply 'strcat (去掉重复项 d)))
  93.   )
  94.   (setq f (cons 8 (substr e 1 (-(strlen e)1))))
  95.   ;(setq ss (ssget 组码))
  96. )
  97. (defun c:tt( / ss 图层列表 所选择的项);此部分是测试代码用
  98.   (Form1_load)
  99.   (setq ss (ssget (list (SSGET项目 图层列表 所选择的项))))
  100.   (command "ERASE" ss "")
  101.   (princ)
  102. )



该贴已经同步到 取个长点勒名字的微博
发表于 2015-12-8 23:53:55 | 显示全部楼层


本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 01:08 , Processed in 0.178490 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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