乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 13|回复: 12

[编程交流] 需要帮助吗

[复制链接]
gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-5 16:39:41 | 显示全部楼层 |阅读模式
大家好,
我需要帮助再次在DCL时,我点击创建按钮,它不工作,需要很长时间
请帮忙
 
DCL
  1. pickpoint:dialog
  2. {
  3. label="Pickpoint";
  4. :row
  5. {
  6.      :popup_list
  7.      {
  8.         label="Create :";
  9.         key="crt";
  10.         edit_width=15;
  11.      }
  12.      :button
  13.      {
  14.         label="Pick Point";
  15.         key="pick";
  16.         width=5;
  17.         height=1.5;
  18.      }
  19. }
  20. :column
  21. {
  22.     :edit_box
  23.     {
  24.         label="Easting";
  25.         key="e";
  26.         edit_width=15;
  27.     }
  28.     :edit_box
  29.     {
  30.         label="Northing";
  31.         key="n";
  32.         edit_width=15;
  33.     }
  34. }
  35. :button
  36. {
  37.     label="Create";
  38.     key="ok";
  39.     is_default=true;
  40.     is_cancel=false;
  41. }
  42. }
  43.      

 
Autolisp
  1. (defun c:test()
  2. (setq e "")
  3. (setq n "")
  4. (setq crt "0")
  5. (setq flag 4)
  6. (setq lst (list "Circle" "Point"))
  7. (setq dcl (load_dialog "pickpoint.dcl"))
  8. (defun check(bb x y)
  9.    (if (= bb "Circle")
  10.      (command "circle" (list x y) 2.0)
  11.      (command "point" (list x y))
  12.    )
  13. )
  14. (while (> flag 2)
  15.    (if (not (new_dialog "pickpoint" dcl))
  16.      (exit)
  17.    )
  18.    (set_tile "e" e)
  19.    (set_tile "n" n)
  20.    (set_tile "crt" crt)
  21.    (start_list "crt")
  22.    (mapcar 'add_list lst)
  23.    (end_list)
  24.    (action_tile "crt" "(setq ob $value)(setq crt (get_tile "crt"))")
  25.    (action_tile "pick" "(done_dialog 4)")
  26.    (action_tile "ok" "(check ob (atof e) (atof n)) (done_dialog 1)")
  27.    (setq flag (start_dialog))
  28.    (if (= flag 4)
  29.      (progn
  30. (setq pos (getpoint))
  31.         (setq e (rtos (car pos))
  32.        n (rtos (cadr pos))
  33. )
  34.      )
  35.    )
  36. )
  37. (done_dialog dcl)
  38. (princ))
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 16:49:40 | 显示全部楼层
检查一次:
  1.   (defun check(bb x y)
  2.    (if [color="red"](= bb "0")[/color]
  3.      (command "circle" (list x y) 2.0)
  4.      (command "point" (list x y))
  5.    )
  6. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:52:43 | 显示全部楼层
 
命令调用在action\u tile中不起作用,因此您必须在卸载对话框后调用该子函数。
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 16:58:42 | 显示全部楼层
谢谢Tharwat,我从未在那里使用过任何命令功能,所以我没有这个想法
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:02:22 | 显示全部楼层
以下是我的练习代码,在向Lee Mac学习后,关于编写这样的DCL:
  1. (defun C:test ( / *error* dcl des dch dcf e n ob p )
  2. (defun *error* ( msg )
  3.    (and (< 0 dch) (unload_dialog dch))
  4.    (and (eq 'FILE (type des)) (close des))
  5.    (and (eq 'STR (type dcl)) (findfile dcl) (vl-file-delete dcl))
  6.    (and msg (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")) (princ (strcat "\nError: " msg)) )
  7.    (princ)
  8. ); defun *error*
  9. (cond
  10.    (
  11.      (not
  12.        (and (setq dcl (vl-filename-mktemp nil nil ".dcl")) (setq des (open dcl "w"))
  13.          (princ
  14.            (strcat
  15.              "pickpoint : dialog"
  16.              "{ label = "Pickpoint";"
  17.              "  : row"
  18.              "  { : popup_list { label = "Create :"; key = "crt"; edit_width = 15; }"
  19.              "    : button { label = "Pick Point"; key = "pick"; width = 5; height = 1.5; }"
  20.              "  }"
  21.              "  : column"
  22.              "  { : edit_box { label = "Easting"; key = "e"; edit_width = 15; }"
  23.              "    : edit_box { label = "Northing"; key = "n"; edit_width = 15; }"
  24.              "  }"
  25.              "  : button { label = "Create"; key = "ok"; is_default = true; is_cancel = false; }"
  26.              "}"         
  27.            ); strcat
  28.            des
  29.          ); princ / write-line
  30.          (not (setq des (close des))) (< 0 (setq dch (load_dialog dcl)))
  31.        ); and
  32.      ); not
  33.      (princ "\nUnable to write or load the DCL file.")
  34.    )
  35.    (
  36.      (progn
  37.        (mapcar 'set '(e n ob) '("" "" "0"))
  38.        (while (/= 1 dcf)
  39.          (cond
  40.            ( (not (new_dialog "pickpoint" dch)) (princ "\nUnable to display the dialog") (setq dcf 1) )
  41.            (T
  42.              (set_tile "crt" ob)
  43.              (mapcar 'set_tile '("e" "n") (list e n))
  44.              (start_list "crt") (mapcar 'add_list '("Circle" "Point")) (end_list)
  45.              (mapcar
  46.                '(lambda (x) (apply 'action_tile x))
  47.                '(("e" "(setq e $value)") ("n" "(setq n $value)") ("crt" "(setq ob $value)") ("pick" "(done_dialog 2)"))
  48.              )
  49.              (action_tile "ok"
  50.                (vl-prin1-to-string
  51.                  '(cond
  52.                    ( (= "" e) (alert "\nSpecify Easting value!") )
  53.                    ( (= "" n) (alert "\nSpecify Northing value!") )
  54.                    ( (not (numberp (read e))) (alert "\nInvalid Easting value!") )
  55.                    ( (not (numberp (read n))) (alert "\nInvalid Northing value!") )
  56.                    ( (done_dialog 1) )
  57.                  )
  58.                )
  59.              )
  60.              (setq dcf (start_dialog))
  61.            )
  62.          ); cond
  63.          (if (and (= 2 dcf) (setq p (getpoint "\nSpecify point: ")))
  64.            (mapcar 'set '(e n) (mapcar 'rtos (list (car p) (cadr p))))
  65.          ); if
  66.        ); while   
  67.        (if (setq p (list (read e) (read n) 0.))
  68.          (entmakex
  69.            (cadr
  70.              (assoc ob
  71.                (list
  72.                  (list "0" (list (cons 0 "CIRCLE") (cons 10 p) (cons 40 2.0)))
  73.                  (list "1" (list (cons 0 "POINT") (cons 10 p)))
  74.                )
  75.              )
  76.            )
  77.          )
  78.        )
  79.        (*error* nil)
  80.      ); progn
  81.    )
  82. ); cond
  83. (princ)
  84. ); defun
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-5 17:07:35 | 显示全部楼层
哇!Grrr可能需要很多天才能为我学习。。但是请指导我如何使用tharwat所说的这些子函数
 
使用Tapatalk从我的SM-E700H发送
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-5 17:12:10 | 显示全部楼层
我想从下层社会学习
 
使用Tapatalk从我的SM-E700H发送
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:14:44 | 显示全部楼层
 
为了避免命令调用,您必须使用entmake/x(检查此线程)或调用vla add方法(需要activex)。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:22:51 | 显示全部楼层
与Tharwat一样,dcl内的“拾取点”选项在此处已多次提出,您确实需要关闭dcl拾取点并再次弹出dcl。您可以在dcl内执行“Pick”操作,或在“Pick”选项旁边的框中输入X和Y,如果执行“Pick”,则可以在返回dcl并继续时显示点xy值。
回复

使用道具 举报

gS7

35

主题

244

帖子

212

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
180
发表于 2022-7-5 17:26:47 | 显示全部楼层
@bigal哦!这就是为什么autocad需要这么长时间才能自动关闭的原因
我想按照你的指示修改我的代码
 
谢谢你,比格尔
 
使用Tapatalk从我的SM-E700H发送
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 13:49 , Processed in 0.633259 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表