明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18737|回复: 43

[LISP资料] 图层快捷工具

    [复制链接]
发表于 2013-3-10 00:15:22 | 显示全部楼层 |阅读模式
本帖最后由 黑洞—杜明智 于 2013-3-13 13:38 编辑

经过一段时间的学习,终于弄出个小东西来,来明经回馈一下,很多知识都是明经学来的。
一个图层内复制,移动,删除的小工具
听从楼下建议附上源码,作为一个新手来供大家批评指导。(英文水平限制,用了大量的拼音
  1. //dcl.dcl
  2. dcl_settings:default_dcl_settings {audit_level = 3;}
  3. chlayer : dialog {
  4.   label = "图层对象操作";
  5.     : row {
  6.     : boxed_radio_column {
  7.       label = "执行操作";
  8.        key="Guolv";
  9.         : radio_button {
  10.                 label = "转层(&1)";
  11.                 key = "Change";
  12.                 value = "1";
  13.             }            
  14.             : radio_button {
  15.                 label = "复制(&2)";
  16.                 key = "Copy";
  17.                 value = "0";
  18.             }
  19.             : radio_button {
  20.                 label = "移动(&3)";
  21.                 key = "Move";
  22.                 value = "0";
  23.             }
  24.             : radio_button {
  25.                label = "删除(&4)";
  26.                key = "Delete";
  27.                value = "0";
  28.             }
  29.             
  30.           }
  31.     ////////////////////////
  32.     : column {
  33.      : boxed_column {
  34.         label = "图层设置";
  35.     :row{
  36.       :button{
  37.         label="源图层<";
  38.         key="YuanTuCeng";
  39.         width=8;
  40.         fixed_width=true;
  41.       }
  42.       :popup_list {
  43.         key="YTC";
  44.         edit_width =14;
  45.         fixed_width=true;
  46.         list="0" ;
  47.       }
  48.       
  49.     }
  50.     :row{
  51.       :button{
  52.         label="目标层<";
  53.         key="MuBiaoCeng";
  54.         width=8;
  55.         fixed_width=true;
  56.       }
  57.       :popup_list {
  58.         key="MBTC";
  59.         edit_width =14;
  60.         fixed_width=true;
  61.         list="0" ;
  62.       }
  63.     }
  64.     }
  65.     : boxed_column {
  66.       label="操作范围";
  67.       : toggle {
  68.                 label = " 对源图层<全部对象>操作";
  69.                 key = "All";
  70.                 value = "0";
  71.                
  72.       }  
  73.     }
  74.     }
  75.     ///////////////////////
  76.   }
  77.   : boxed_column {
  78.     : concatenation {
  79.     : text_part {
  80.                         label = "使用帮助:";
  81.                         width=9;
  82.                         fixed_width=true;
  83.                 }
  84.                 : text_part {
  85.                         label = "QQ:307170606!";
  86.                         key = "DuiXiang";
  87.                         width=22;
  88.                         fixed_width=true;
  89.                 }
  90.                 : text_part {
  91.                         label = "";
  92.                         key = "CaoZuo";
  93.                         width=12;
  94.                         fixed_width=true;
  95.                 }
  96.         }
  97.         }
  98.   ok_cancel;
  99. }


  1. ;;utils.lsp
  2. (vl-load-com)
  3. (setq *AObject* (vlax-get-Acad-Object))
  4. (setq *ADocument* (vla-get-ActiveDocument *AObject*))
  5. (setq *ModelSpace* (vla-get-ModelSpace *ADocument*))


  1. ;;io.lsp
  2. (defun c:vc (/ Dlg_POS dcl_id std dialogLoaded dialogShow ss )
  3.   (setq  dialogLoaded T
  4.   dialogShow   T
  5.   )
  6.   (setq dcl_id (load_dialog "E:/2013/dcl.DCL"));;注意链接位置替换
  7.   (if (= -1 dcl_id)
  8.     (progn
  9.       (alert
  10.   "         无法加载对话框 !"
  11.       )
  12.       (setq dialogLoaded nil)
  13.     )
  14.   )
  15.   (if (= nil guolv_str)
  16.     (setq guolv_str "Change")
  17.   )
  18.   (if (= nil YTC_str)
  19.     (setq YTC_str
  20.      (vla-get-name (vla-get-ActiveLayer *ADocument*))
  21.     YTC_i  "0"
  22.     )
  23.   )
  24.   (if (= nil MBTC_str)
  25.     (setq MBTC_str
  26.      (vla-get-name (vla-get-ActiveLayer *ADocument*))
  27.     MBTC_i "0"
  28.     )
  29.   )
  30.   (if (= nil All_i)
  31.     (setq All_i 0)
  32.   )
  33.   (if (= nil Dlg_POS)
  34.     (setq Dlg_POS '(50 100))
  35.   )
  36. ;;;--------------------------------------------------------------------
  37.   (setq std 3)
  38.   (while (> std 2)
  39.     ;; 初始化对话框
  40.     (dlg)
  41.   )
  42. ;;;  ---------------------------------------------------
  43.   (unload_dialog dcl_id)
  44. ;;;  ------------------------------------------------
  45.   (if (= 1 std)
  46.     (CHlayer_draw)
  47.   )
  48. )
  49. ;;;_ 结束 defun---------

  50. (defun dlg ()
  51.   ;; 对话框放置屏幕左上角
  52.   (if (and dialogLoaded
  53.      (not (new_dialog "chlayer" dcl_id "" Dlg_POS))
  54.       )
  55.     (progn
  56.       (alert
  57.   "         无法显示对话框 !"      )
  58.       (setq dialogShow nil)
  59.     )
  60.   )
  61.   ;;
  62.   (if (and dialogLoaded dialogShow)
  63.     (progn
  64.       (Set_tile "Guolv" guolv_str)
  65.       (setq TC_ls nil)
  66.       (vlax-for  X1
  67.        (vlax-get
  68.          (vlax-get (vlax-get-acad-object) 'ActiveDocument)
  69.          'Layers
  70.        )
  71.   (setq TC_ls (cons (vlax-get X1 'Name) TC_ls))
  72.       )
  73.       (start_list "YTC" 3 0)
  74.       (mapcar 'add_list (reverse TC_ls))
  75.       (end_list)
  76.       ;;
  77.       (start_list "MBTC" 3 0)
  78.       (mapcar 'add_list (reverse TC_ls))
  79.       (end_list)
  80.       ;;
  81.       (Set_tile "YTC" YTC_i)
  82.       (Set_tile "MBTC" MBTC_i)
  83.       (Set_tile "All" (rtos All_i))
  84.       ;;
  85.       (action_tile "Guolv" "(SETQ guolv_str $value)(text)")
  86.       (action_tile "All" "(SETQ All_i (atoi $value))(text)")
  87.      (action_tile "YuanTuCeng" "(getData)(setq Dlg_POS (done_dialog 3))")      
  88.      (action_tile "MuBiaoCeng"  "(getData)(setq Dlg_POS (done_dialog 4))")
  89.      (action_tile "accept" "(getData)(setq Dlg_POS (done_dialog 1))" )
  90.       (action_tile "cancel" "(setq Dlg_POS (done_dialog 0))")
  91.       ;;
  92.       (setq std (start_dialog))
  93.       (cond
  94.   ((= std 3) (get_YTC))
  95.   ((= std 4) (get_MBTC))
  96.       )
  97.     )
  98.   )
  99. )


  100. ;;;==================================;;;
  101. ;;;------定义从对话框中获取数据
  102. ;;;==================================;;;
  103. (defun getData ()
  104.   ;;
  105.   (setq guolv_str (get_tile "Guolv"))
  106.   (setq All_i (atoI (get_tile "All")))
  107.   ;;
  108.   (setq  YTC_i  (get_tile "YTC")
  109.   MBTC_i (get_tile "MBTC")
  110.   )
  111.   ;;
  112.   (setq  YTC_str  (nth (atoi YTC_i) (reverse TC_ls))
  113.   MBTC_str (nth (atoi MBTC_i) (reverse TC_ls))
  114.   )
  115. )
  116. ;;;_ 结束

  117. ;;;==================================;;;
  118. ;;;-----定义图层列表要显示的图层
  119. ;;;==================================;;;

  120. (defun get_YTC (/ ytc1 ytc2 ytc3)
  121.   (setq ytc1 nil)
  122.   (while (= ytc1 nil)
  123.     (SETQ ytc1 (car (entsel "\n请选择源图层对象:")))
  124.   )
  125.   (setq ytc2 (entget ytc1))
  126.   (setq  ytc3 (cdr (assoc 8 ytc2)))
  127.   (setq YTC_i (rtos (vl-position ytc3 (reverse TC_ls))))
  128.   (princ "\n")
  129. )
  130. (defun get_MBTC (/ mbtc1 mbtc2 mbtc3)
  131.   (setq mbtc1 nil)
  132.   (while (= mbtc1 nil)
  133.     (SETQ mbtc1 (car (entsel "\n请选择目标图层对象:")))
  134.   )
  135.   (setq mbtc2 (entget mbtc1))
  136.   (setq  mbtc3 (cdr (assoc 8 mbtc2)))
  137.   (setq MBTC_i (rtos (vl-position mbtc3 (reverse TC_ls))))
  138.   (princ "\n")
  139. )
  140. ;;;_ 结束定义

  141. (defun text ()
  142.   (set_tile "XinXi" "")
  143.   (if (= 1 All_i)(set_tile "DuiXiang" "将源图层上的<全部对象>")(set_tile "DuiXiang" "将源图层上的<被选对象>"))
  144.   (cond
  145.     ((= guolv_str "Change") (set_tile "CaoZuo" "转层到目标层"))
  146.     ((= guolv_str "Copy") (set_tile "CaoZuo" "复制到目标层"))
  147.     ((= guolv_str "Move") (set_tile "CaoZuo" "在源图层移动"))
  148.     ((= guolv_str "Delete") (set_tile "CaoZuo" "在源图层删除"))
  149.   )
  150. )


  1. ;;draw.LSP
  2. (defun CHlayer_draw ()
  3.   (WHILE (= SS NIL)
  4.     (if  (= 1 All_i)
  5.       (setq ss (ssget "X" (list (cons 8 YTC_str))))
  6.       (setq ss (ssget (list (cons 8 YTC_str))))
  7.     )
  8.   )
  9.   (cond
  10.     ((= guolv_str "Change")
  11.      (vl-cmdf "_.change" ss "" "p" "la" MBTC_str "")
  12.     )
  13.     ((= guolv_str "Copy")
  14.      (vl-cmdf "_.copy" ss "" "@" "@" "_.change"  ss "" "p" "la" MBTC_str
  15.         "")
  16.     )
  17.     ((= guolv_str "Move") (vl-cmdf "_.MOVE" ss ""))
  18.     ((= guolv_str "Delete") (vl-cmdf "_.ERASE" ss ""))
  19.   )
  20.   (PRINC)
  21. )


本帖子中包含更多资源

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

x

评分

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

查看全部评分

发表于 2013-5-7 15:13:32 | 显示全部楼层
为什么下载不了呢
回复 支持 0 反对 1

使用道具 举报

发表于 2021-5-25 23:08:40 | 显示全部楼层
想法不错,界面也挺靓,可惜是一个编译过的文件!楼主可否放出源码,便于大家交流。
发表于 2013-3-11 18:14:09 | 显示全部楼层
想法不错,界面也挺靓,可惜是一个编译过的文件!楼主可否放出源码,便于大家交流。
 楼主| 发表于 2013-3-13 13:40:10 | 显示全部楼层
USER2128 发表于 2013-3-11 18:14
想法不错,界面也挺靓,可惜是一个编译过的文件!楼主可否放出源码,便于大家交流。

源码附上,多多指导哈

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
USER2128 + 1 + 5 好样的,这才是论坛的精神!

查看全部评分

发表于 2013-4-28 00:30:49 | 显示全部楼层
这个应该不错
发表于 2013-4-29 22:27:09 | 显示全部楼层
下载的人多 顶的人少啊
发表于 2013-4-30 08:49:56 | 显示全部楼层
太实用了,这个图层工具.
 楼主| 发表于 2013-5-7 20:11:41 | 显示全部楼层
xuesfh007 发表于 2013-5-7 15:13
为什么下载不了呢

测试正常,检查一下网络。
发表于 2013-5-8 18:24:48 | 显示全部楼层
显示

抱歉,只有特定用户可以下载本站附件
发表于 2013-7-27 16:50:48 | 显示全部楼层
没有下载权限啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 19:23 , Processed in 0.213218 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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