明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2661|回复: 8

初学DCL,遇到的问题,请教下

[复制链接]
发表于 2014-5-5 21:06:01 | 显示全部楼层 |阅读模式
本帖最后由 feng83 于 2014-5-5 21:09 编辑

初学DCL,按教程写了如下代码,老是报错,把(action_tile "accept" "(S_RECT)(done_dialog)")改成(action_tile "accept" "(S_RECT)")就可以了,不太明白,看了论坛的很多源代码,都有带(done_dialog)终止对话框,请教高手解答下
环境AUTO CAD 2007,win 7  系统

(DEFUN C:RECT4 ()
  (SETQ DCL_ID (LOAD_DIALOG "c:/RECT4.DCL"))
  (NEW_DIALOG "RECT4" DCL_ID)
  (SET_TILE "rect_w" "50")
  (SET_TILE "rect_h" "20")
  (action_tile "accept" "(S_RECT)(done_dialog)")
  (START_DIALOG)(UNLOAD_DIALOG)
  (SETQ PT_0 (GETPOINT "\n 选择一个点 : "))
  (SETQ PT_1 (POLAR PT_0 0 TMP_W))
  (SETQ PT_2 (POLAR PT_1 (/ PI 2 ) TMP_H))
  (SETQ PT_3 (POLAR PT_2  PI TMP_W))
  (COMMAND "PLINE" PT_0 PT_1 PT_2 PT_3 "C")
  (PRINC)
)
(DEFUN S_RECT ()
   (SETQ TMP_W (ABS (ATOF (GET_TILE "rect_w"))))
   (SETQ TMP_H (ABS (ATOF (GET_TILE "rect_h"))))
)

本帖子中包含更多资源

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

x
 楼主| 发表于 2014-5-5 21:15:32 | 显示全部楼层
另外也请帮忙看下下面的代码错在那了,想弹出一个对话框,点相应按钮执行相应命令(命令太多了),运行以下程序,弹出对话框,就不能动了
(DEFUN C:ssss ()
  (SETQ DCL_ID (LOAD_DIALOG "c:/ssss.DCL"))
  (NEW_DIALOG "ssss" DCL_ID)
  (action_tile "cancel""(done_dialog)")
  (action_tile "ml_01""(sq)(done_dialog)")
  (action_tile "ml_02""(sw)(done_dialog)")
  (START_DIALOG)(UNLOAD_DIALOG DCL_ID)
  (PRINC)
)
(defun sq ( / oce a1 a2 a3 i)
  (setq oce (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (graphscr)
  (prompt "\n 选择需要锁的对象:")
  (setq a1(ssget))
  (if a1
    (progn
      (setq i 0)
      (repeat (sslength a1)
        (setq a3 (ssname a1 i))
        (setq a2 (cdr (assoc 8 (entget a3))))
        (command "LAYER" "lo" a2"")
        (setq i (1+ i))
      )
      (princ a2)
    ))
  (setvar "cmdecho" oce)
  (princ)
)
(defun sw( / oce a1 a2 a3 i)
  (setq oce (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (graphscr)
  (prompt "\n 选择需要解锁的对象:")
  (setq a1(ssget))
  (if a1
    (progn
      (setq i 0)
      (repeat (sslength a1)
        (setq a3 (ssname a1 i))
        (setq a2 (cdr (assoc 8 (entget a3))))
        (command "LAYER" "u" a2"")
        (setq i (1+ i))
      )
      (princ a2)
    ))
  (setvar "cmdecho" oce)
  (princ)
)

本帖子中包含更多资源

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

x
发表于 2014-5-6 08:13:56 | 显示全部楼层
  1. (DEFUN C:RECT4 ()
  2. (if (> (SETQ DCL_ID (LOAD_DIALOG "c:/RECT4.DCL")) 0) (progn
  3.   (if (NEW_DIALOG "RECT4" DCL_ID) (progn
  4.    (SET_TILE "rect_w" "50")
  5.    (SET_TILE "rect_h" "20")
  6.    (action_tile "accept" "(S_RECT)(done_dialog 1)")
  7.    (action_tile "cancel" "(done_dialog 0)")
  8.    (setq re (start_dialog))
  9.   )
  10.    (princ "\n无法显示对话框!")
  11.   )
  12.   (UNLOAD_DIALOG DCL_ID)
  13. )
  14.   (princ "\n无法加载对话框!")
  15. )
  16. (if (= re 1) (progn
  17.   (SETQ PT_0 (GETPOINT "\n 选择一个点 : "))
  18.   (setq pt_2 (mapcar '+ (list tmp_w tmp_h)))
  19. ;  (SETQ PT_1 (POLAR PT_0 0 TMP_W))
  20. ;  (SETQ PT_2 (POLAR PT_1 (/ PI 2 ) TMP_H))
  21. ;  (SETQ PT_3 (POLAR PT_2  PI TMP_W))
  22. ;  (COMMAND "PLINE" PT_0 PT_1 PT_2 PT_3 "C")
  23.   (command "_.RECTANG" PT_0 pt_2)
  24. ))
  25. (PRINC)
  26. )
  27. (DEFUN S_RECT ()
  28.    (SETQ TMP_W (ABS (ATOF (GET_TILE "rect_w"))))
  29.    (SETQ TMP_H (ABS (ATOF (GET_TILE "rect_h"))))
  30. )
 楼主| 发表于 2014-5-6 21:49:31 | 显示全部楼层
ZZXXQQ 发表于 2014-5-6 08:13

非常感谢Z版主抽空帮忙改写了代码,CAD有点问题不能测试你的代码,不过有几点疑问请教下:
1   (done_dialog ) 改成 (done_dialog 1) 是不是解决参数太少的问题或是说让done_dialog 终止后返回1?为什么把(action_tile "accept" "(S_RECT)(done_dialog)")改成(action_tile "accept" "(S_RECT)")就可以,终止对话框不写入应该是对话框关不掉,现在,不写反而好了,写反而不行
2  加入IF和(UNLOAD_DIALOG DCL_ID)是不是解决对话框关不掉的问题
发表于 2014-5-7 07:49:15 | 显示全部楼层
feng83 发表于 2014-5-6 21:49
非常感谢Z版主抽空帮忙改写了代码,CAD有点问题不能测试你的代码,不过有几点疑问请教下:
1   (done_di ...

程序是按CAD自带的DCL改的,是标准格式,加入了错误处理。OpenDCL不会。
一般未退出DCL时CAD是不能使用COMMAND的。
 楼主| 发表于 2014-5-7 23:18:34 | 显示全部楼层
ZZXXQQ 发表于 2014-5-7 07:49
程序是按CAD自带的DCL改的,是标准格式,加入了错误处理。OpenDCL不会。
一般未退出DCL时CAD是不能使用C ...

还是不行,,还是提示参数太少,将(done_dialog 1) 去掉就可以
 楼主| 发表于 2014-5-7 23:53:27 | 显示全部楼层
feng83 发表于 2014-5-7 23:18
还是不行,,还是提示参数太少,将(done_dialog 1) 去掉就可以

CAD重装又可以了,不过在公司电脑上还是不行

点评

程序完全可以执行。注意:不需要OpenDCL。  发表于 2014-5-8 07:57
发表于 2014-5-8 08:00:08 | 显示全部楼层
  1. (DEFUN C:ssss ()
  2. (if (> (SETQ DCL_ID (LOAD_DIALOG "c:/ssss.DCL")) 0) (progn
  3.   (setq re 4)
  4.   (while (> re 1)
  5.    (if (NEW_DIALOG "ssss" DCL_ID) (progn
  6.     (action_tile "ml_01" "(done_dialog 2)")
  7.     (action_tile "ml_02" "(done_dialog 3)")
  8.     (action_tile "accept" "(done_dialog 1)")
  9.     (action_tile "cancel" "(done_dialog 0)")
  10.     (setq re (START_DIALOG))
  11.    )
  12.     (princ "\n无法显示对话框!")
  13.    )
  14.    (cond
  15.     ((= re 2) (sq))
  16.     ((= re 3) (sw))
  17.    )
  18.   )
  19.   (UNLOAD_DIALOG DCL_ID)
  20. )
  21.   (princ "\n无法加载对话框!")
  22. )
  23. (PRINC)
  24. )
  25. (defun sq (/ a1 a2 i)
  26.   (setq oce (getvar "cmdecho"))
  27.   (setvar "cmdecho" 0)
  28.   (graphscr)
  29.   (princ "\n选择需要锁的对象: ")
  30.   (if (setq a1(ssget)) (progn
  31.     (setq i -1)
  32.     (repeat (sslength a1)
  33.      (setq a2 (cdr (assoc 8 (entget (ssname a1 (setq i (1+ i)))))))
  34.      (command "LAYER" "lo" a2 "")
  35.     )
  36.     (princ a2)
  37.    ))
  38.   (setvar "cmdecho" oce)
  39.   (princ)
  40. )
  41. (defun sw(/ a1 a2 i)
  42. (setq oce (getvar "cmdecho"))
  43. (setvar "cmdecho" 0)
  44. (graphscr)
  45. (prompt "\n选择需要解锁的对象: ")
  46. (if (setq a1(ssget)) (progn
  47.   (setq i -1)
  48.   (repeat (sslength a1)
  49.    (setq a2 (cdr (assoc 8 (entget (ssname a1 (setq i (1+ i)))))))
  50.    (command "LAYER" "u" a2"")
  51.   )
  52.   (princ a2)
  53.   ))
  54. (setvar "cmdecho" oce)
  55. (princ)
  56. )
 楼主| 发表于 2014-5-10 06:15:14 | 显示全部楼层
谢谢ZZXXQQ的回复,已解决了问题,再次感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 08:19 , Processed in 0.171299 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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