找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 678|回复: 3

[LISP函数]:DCL问题请高手指点

[复制链接]
发表于 2004-6-26 12:32:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
;执行第二个按钮"清除未使用层"无效

;请帮忙看看!
;以下是LSP程式

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;以下为快速创建图层LISP;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:cjtc ()
  (setq dcl_file "cjtc"   ; 指定DCL档案的名称
dcl_name "cjtc"
  )     ; 指定对话框的名称

  (setq dcl_flag (load_dialog dcl_file)) ; 载入DCL档案
  (if (< dcl_flag 0)
    (exit)
  )     ; 判断DCL档案是否已载入?

  (if (not (new_dialog dcl_name dcl_flag))
    (exit)
  )     ; 显现对话框画面
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  
(action_tile
    "addlay_j"
    "(setq dnum (get_tile \"dnum_c\"))
  (setq numy (get_tile \"num_c\"))(DONE_DIALOG 1)"
  )



(action_tile "pglay" "(DONE_DIALOG 10)");;新加部分





  (IF (= (start_dialog) 1)  ; 令对话框开始接受使用者输入资料
    (cjtc-1 dnum numy)
  )

(IF (= (start_dialog) 10)  ;              新加部分
    (pglqy_1)
  )





  (unload_dialog dcl_flag)
  (princ)
)     ; 释放DCL档案




(defun pglqy_1 ()
(unload_dialog dcl_flag)
  (princ)
(command "purge" "la" "*" "n"))       ;新加部分





     ; 函式DCL_CONC至此结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cjtc-1 (dnum numy)
  (setq index1 0)
  (setvar "cmdecho" 0)
  (setq num (atoi numy))
  (setq index 1.0)   ;付值index=1
  (repeat 9
    (if (> num (- index 1))  ;此函数可判别每一个 expr 并重复执行 number 所叙述的次数, 然后返回最后一个表达式的值。                                         ;其中 int 将代表任何的正整型数。
     ;如果拆图量大于0则继续执行
      (progn (setq lay (strcat dnum "-00" (rtos index 2 0)))
     ;strcat连接后面的字符串,(rtos index 2 0)返回10进制,连接为图名
      (setq index (1+ index)) ;图名每次加1
      (autop)
      )
    )
  )     ;以上为将输入的值转化为图号
  (if (> num 9)
    (repeat 90
      (if (> num (- index 1))
(progn (setq lay (strcat dnum "-0" (rtos index 2 0)))

        (setq index (1+ index))
        (autop)
)
      )
    )
  )
  (if (> num 99)
    (repeat 900
      (if (> num (- index 1))
(progn (setq lay (strcat dnum "-" (rtos index 2 0)))
        (setq index (1+ index))
        (autop)
)
      )
    )
  )
  (redraw)
  (princ)
)
     ;-----------------------------------------
(defun autop (/ pt sera ch ly ents)
  (setq index1 (+ 1 index1))
  (setq layecol '(191 50 90 130 170 210 30 82 150 10 161))
  (setq layec (nth index1 layecol))
  (if (= layec nil)
    (progn
      (setq index1 1)
      (setq layec 7)
    )
  )
  (command "-layer" "Make" lay "Color" layec "" "")

)

     ;---------------------------------------
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


cjtc: dialog {
   label = "图层创建快捷框        
   


        :boxed_column{
          label="批量创建图层";
        :row{
    :edit32_box{label="专案代号";key="dnum_c";edit_width=15;}    //dnum专案代号
         }
        :row{
        :edit32_box{label="输入创建层数量";key="num_c";edit_width=15;}   //num创建层数量
         }
        :row{
: button {label = "开始批量创建图层";key = "addlay_j";width = 10;}  //ALLPART创建图层指令
        }
        }

: button {label = "◎清除未使用层◎";key = "pglay";width = 10;}



: button { label = "&Cancel"; key = "cancel"; is_default = true; fixed_width = true; alignment = right;}
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-26 16:08:34 | 显示全部楼层
[php]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;以下为快速创建图层LISP;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:cjtc (/ dcl_id what_next)
  (if (< (setq dcl_id (load_dialog "cjtc")) 0) ; 载入DCL档案
    (exit)
  )                                        ; 判断DCL档案是否已载入?
  (setq what_next 3)
  (while (> what_next 2)
    (if        (not (new_dialog "cjtc" dcl_id))
      (exit)
    )                                        ; 显现对话框画面
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (action_tile
      "addlay_j"
      "(setq dnum (get_tile \"dnum_c\"))(setq numy (get_tile \"num_c\"))(DONE_DIALOG 1)"
    )
    (action_tile "pglay" "(done_dialog 2)")
    (setq what_next (start_dialog))
    (cond ((= what_next 1)                ; 令对话框开始接受使用者输入资料
           (cjtc-1 dnum numy)
          )
          ((= what_next 2)
           (setvar "CLAYER" "0")
           (vl-cmdf "purge" "la" "*" "n")
          )
    )
  )
  (unload_dialog dcl_id)
  (princ)
)                                        ; 释放DCL档案

                                        ; 函式DCL_CONC至此结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun cjtc-1 (dnum numy / index1 index num dnum lay)
  (setq index1 0)
  (setvar "cmdecho" 0)
  (setq num (atoi numy))
  (setq index 1.0)                        ;付值index=1
  (repeat 9
    (if        (> num (- index 1))                ;此函数可判别每一个 expr 并重复执行 number 所叙述的次数, 然后返回最后一个表达式的值。 ;其中 int 将代表任何的正整型数。
                                        ;如果拆图量大于0则继续执行
      (progn (setq lay (strcat dnum "-00" (rtos index 2 0)))
                                        ;strcat连接后面的字符串,(rtos index 2 0)返回10进制,连接为图名
             (setq index (1+ index))        ;图名每次加1
             (autop)
      )
    )
  )                                        ;以上为将输入的值转化为图号
  (if (> num 9)
    (repeat 90
      (if (> num (- index 1))
        (progn (setq lay (strcat dnum "-0" (rtos index 2 0)))

               (setq index (1+ index))
               (autop)
        )
      )
    )
  )
  (if (> num 99)
    (repeat 900
      (if (> num (- index 1))
        (progn (setq lay (strcat dnum "-" (rtos index 2 0)))
               (setq index (1+ index))
               (autop)
        )
      )
    )
  )
  (redraw)
  (princ)
)
                                        ;-----------------------------------------
(defun autop (/ pt sera ch ly ents layecol layec)
  (setq index1 (+ 1 index1))
  (setq layecol '(191 50 90 130 170 210 30 82 150 10 161))
  (setq layec (nth index1 layecol))
  (if (= layec nil)
    (progn
      (setq index1 1)
      (setq layec 7)
    )
  )
  (command "-layer" "Make" lay "Color" layec "" "")
)
[/php]
[php]
cjtc : dialog { label = "图层创建快捷框 ";
   :boxed_column { label="批量创建图层";
      :edit_box {label="专案代号";key="dnum_c";edit_width=15;} //dnum专案代号
      :edit_box {label="输入创建层数量";key="num_c";edit_width=15;} //num创建层数量
      spacer;
      :button {label = "开始批量创建图层";key = "addlay_j";width = 10;} //ALLPART创建图层指令
        }
      spacer_0;
   spacer_0;
   :row {
     spacer;
     : button {label = "    ◎清除未使用层◎    "; key = "pglay"; width = 10;}
     : button { label = "&Cancel"; key = "cancel"; is_default = true;}
     spacer;
   }
}
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-26 16:11:23 | 显示全部楼层
(start_dialog)只能出现一次。可以这样写:
(setq rst (start_dialog))
(cond
((= rst 1) ...)
((= rst 10) ...)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-6-26 16:21:58 | 显示全部楼层
非常感谢2楼和3楼的大侠,已试用成功!
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 06:56 , Processed in 0.170341 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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