找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1361|回复: 6

[求助] 怎么把DCL合并到LISP中

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2015-2-3 14:39:16 | 显示全部楼层 |阅读模式

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

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

×
;;dcl对话框
cmm:dialog {
    height = 20 ;
    label = "选择物体改变其图层" ;
    :list_box {
        fixed_width_font = true ;
        height = 20 ;
        key = "lism" ;
        label = "图层名称选单:" ;
    }
    ok_cancel;
}

;;;LISP程序

(DEFUN C:test (/ os ce bm ss se la )
(setvar "cmdecho" 0)
(setq ss (ssget))
(if (not (null ss))
  (mpcm)
)
       (princ)
)
;;;;;;
(defun mpcm (/ w lay sslay dcl_id do_what value tbl lism selm
  lenth layer clayer num a b no tem_list cood)
(SETQ W (TBLNEXT "LAYER" T))
(WHILE (/= NIL W)
  (SETQ LAY (CDR (ASSOC 2 W)))
  (if (/= (STRCASE lay) "DEFPOINTS")
  (SETQ SSLAY (append SSLAY (list LAY)))
  )
  (SETQ W (TBLNEXT "LAYER"))
)

      (setq dcl_id (load_dialog "cmm.dcl"))
(setq do_what 3)
    (while (> do_what 1)
(if (not (new_dialog "cmm" dcl_id)) (exit))
(mode_tile "lism" 2)
(start_list "lism" 2)
(mapcar 'add_list SSLAY)
(end_list)
(action_tile "selm" "(done_dialog 2)")
(action_tile "lism" "(setq value $value)")
(action_tile "accept" "(setq value (get_tile \"lism\"))(done_dialog 1)")
(setq do_what (start_dialog))
(if (= 2 do_what)
     (setq ss (ssget))
)
    )

(unload_dialog dcl_id)
(if (= 1 do_what)
  (progn
   (setq lenth (read value)
    clayer (nth lenth sslay)
   )
   (setq tbl (tblsearch "layer" clayer))
   (if (not (null tbl))
                  (command "_chprop" ss "" "la" clayer "")
   )
  )
)
(princ))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2015-2-3 16:46:56 | 显示全部楼层
论坛有类似例子,不知道放进去啥用,编译成VLX即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2015-2-3 23:59:27 | 显示全部楼层
  1. (defun c:test (/ os ce bm ss se la)
  2.   (setvar "cmdecho" 0)
  3.   (setq ss (ssget))
  4.   (if (not (null ss))
  5.     (mpcm)
  6.   )
  7.   (princ)
  8. )
  9. (defun mpcm (/             w             lay     sslay   dcl_id  do_what value
  10.              tbl     lism    selm    lenth   layer   clayer  num
  11.              a             b             no             tem_list             cood
  12.             )
  13.   (SETQ W (TBLNEXT "LAYER" T))
  14.   (WHILE (/= NIL W)
  15.     (SETQ LAY (CDR (ASSOC 2 W)))
  16.     (if        (/= (STRCASE lay) "DEFPOINTS")
  17.       (SETQ SSLAY (append SSLAY (list LAY)))
  18.     )
  19.     (SETQ W (TBLNEXT "LAYER"))
  20.   )
  21.   (setq dcl_id (load_dialog (test_make_dcl)))
  22.   (setq do_what 3)
  23.   (while (> do_what 1)
  24.     (if        (not (new_dialog "cmm" dcl_id))
  25.       (exit)
  26.     )
  27.     (mode_tile "lism" 2)
  28.     (start_list "lism" 2)
  29.     (mapcar 'add_list SSLAY)
  30.     (end_list)
  31.     (action_tile "selm" "(done_dialog 2)")
  32.     (action_tile "lism" "(setq value $value)")
  33.     (action_tile
  34.       "accept"
  35.       "(setq value (get_tile \"lism\"))(done_dialog 1)"
  36.     )
  37.     (setq do_what (start_dialog))
  38.     (if        (= 2 do_what)
  39.       (setq ss (ssget))
  40.     )
  41.   )
  42.   (unload_dialog dcl_id)
  43.   (if (= 1 do_what)
  44.     (progn
  45.       (setq lenth  (read value)
  46.             clayer (nth lenth sslay)
  47.       )
  48.       (setq tbl (tblsearch "layer" clayer))
  49.       (if (not (null tbl))
  50.         (command "_chprop" ss "" "la" clayer "")
  51.       )
  52.     )
  53.   )
  54.   (princ)
  55. )
  56. (defun test_make_dcl (/ lst_str str file f)
  57.   (setq        lst_str
  58.          (list
  59.            "cmm:dialog {"
  60.            "     height = 20 ;"
  61.            "     label = \"选择物体改变其图层\" ;"
  62.            "     :list_box {"
  63.            "         fixed_width_font = true ;"
  64.            "         height = 20 ;"
  65.            "         key = \"lism\" ;"
  66.            "         label = \"图层名称选单:\" ;"
  67.            "     }"
  68.            "     ok_cancel;"
  69.            "}"
  70.           )
  71.   )
  72.   (setq file (vl-filename-mktemp "DclTemp.dcl"))
  73.   (setq f (open file "w"))
  74.   (foreach str lst_str
  75.     (princ "\n" f)
  76.     (princ str f)
  77.   )
  78.   (close f)
  79.   file
  80. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2018-11-14 14:10:03 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 07:18 , Processed in 0.346143 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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