乐筑天下

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

[编程交流] 调用DCL、LISP中的输入

[复制链接]

8

主题

28

帖子

20

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 13:11:09 | 显示全部楼层 |阅读模式
你好!我正在同时探索lisp和dcl。
我的DCL如下所示。每当完成命令并再次执行相同命令时,值都会重置(pic2)。
我希望在按“Ok”编辑特定输入而不是再次键入整个数据后,每当我再次使用dcl时,这些值都保持不变。我怎么可能这么做?
141116inngdy9zpk9y9iay.jpg 141118pbxtx0dob120b858.jpg
 
这是我使用的dcl代码。
 
  1. CHECKING : dialog {
  2.           label = "CHECKING";
  3.             : row {
  4.                 :boxed_row {
  5.                         label = "PARAMETERS";
  6.                         : edit_box { key = "a"; label = "Wind Pressure (kPa)"; edit_width = 8;}
  7.                         : edit_box {key = "b"; label = "Tributary Width (mm)"; edit_width = 8;}
  8.                         : edit_box {key = "c"; label = "Unsupported Length (mm)"; edit_width = 8;}
  9.                               }
  10.                 }
  11.             : row {
  12.                 :boxed_column {
  13.                         label = "SECTION PROPERTIES (ALUMINUM)";
  14.                         : edit_box { key = "d"; label = "Moment of Inertia (mm^4)"; edit_width = 8;}
  15.                         : edit_box {key = "e"; label = "Area (mm^2)"; edit_width = 8;}
  16.                         : edit_box {key = "f"; label = "Extreme Fiber (mm)"; edit_width = 8;}
  17.                         : edit_box {key = "g"; label = "Allowable Stress (MPa)"; edit_width = 8;}                       
  18.                               }
  19.                 :boxed_column {
  20.                         label = "SECTION PROPERTIES (STEEL)";
  21.                         : edit_box { key = "h"; label = "Moment of Inertia (mm^4)"; edit_width = 8;}
  22.                         : edit_box {key = "i"; label = "Area (mm^2)"; edit_width = 8;}
  23.                         : edit_box {key = "j"; label = "Extreme Fiber (mm)"; edit_width = 8;}
  24.                         : edit_box {key = "k"; label = "Allowable Stress (MPa)"; edit_width = 8;}                       
  25.                               }
  26.                 }
  27.                 : button {
  28.                 key = "accept";
  29.                 label = " &OK ";
  30.                 is_default = true;
  31.                 mnemonic = "S";
  32.               }
  33.               : button {
  34.                 key = "cancel";
  35.                 label = " Cancel ";
  36.                 is_default = false;
  37.                 is_cancel = true;
  38.               }
  39. }

这是lisp代码:
 
  1. (defun saveVars()
  2.         (setq wp(distof(get_tile "a")))
  3.         (setq tw(distof(get_tile "b")))
  4.         (setq L(distof(get_tile "c")))
  5.         (setq Im(distof(get_tile "d")))
  6.         (setq Am(distof(get_tile "e")))
  7.         (setq cm(distof(get_tile "f")))
  8.         (setq Fbm(distof(get_tile "g")))
  9.         (setq Is(distof(get_tile "h")))
  10.         (setq As(distof(get_tile "i")))
  11.         (setq cs(distof(get_tile "j")))
  12.         (setq Fbs(distof(get_tile "k")))
  13. )
  14. (defun C:CC()
  15.          
  16.           (if(not(setq dcl_id (load_dialog "CHECKING.dcl")))
  17.                     (progn
  18.                               (alert "The DCL file could not be loaded!")
  19.                               (exit)
  20.                     )
  21.                    (progn
  22.                               (if (not(new_dialog "CHECKING" dcl_id))
  23.                                 (progn
  24.                                                (alert "CHECKING.DCL file could not be loaded!")
  25.                                           (exit)
  26.                                        )
  27.                                        (progn                                                   
  28.                                          (action_tile "accept" "(saveVars)(done_dialog 2)")
  29.                                           (action_tile "cancel" "(done_dialog 1)")
  30.                                         (setq ddiag(start_dialog))
  31.                                         (unload_dialog dcl_id)
  32.                                         (if(= ddiag 1)
  33.                                             (princ "\n END")
  34.                                         )
  35.                                          (if(= ddiag 2)
  36.                                                     (progn
  37.                                                         (setq IT(+ Im (* 2.87 Is)))
  38.                                                         (setq moment(/ (* wp tw L L) 8000))
  39.                                                         (setq stress(/ (* moment cm) Im))
  40.                                                         (setq stressratio(/ stress Fbm))                                                       
  41.                                                         (setq deflection(/ (* 5 wp tw L L L L) (* 384000 69600 IT)))
  42.                                                         (setq allowdeflection(/ L 175))
  43.                                                         (setq defratio(/ deflection allowdeflection))
  44.                                                         (setq pt1 (getpoint))
  45.                                                         (setq pt2 (getpoint))
  46.                                                         (command "_mtext" pt1 pt2 "\n Actual Bending Stress =" (rtos stress 2 2)
  47.                                                                         "\n Allowable Bending Stress =" (rtos Fbm 2 2)
  48.                                                                         "\n Stress Ratio =" (rtos stressratio 2 2)
  49.                                                                         "\n Actual Deflection =" (rtos deflection 2 2)
  50.                                                                         "\n Allowable Deflection =" (rtos allowdeflection 2 2)
  51.                                                                         "\n Deflection Ratio =" (rtos defratio 2 2) ""
  52.                                                         )
  53.                                                 )       
  54.                                                 )
  55.                                 )
  56.                               )
  57.                 )
  58.         )
  59. )

 
还有一件事。关于多行文字输出。输出是这样的。数值结果总是出现在下一行。
141120j4947bb94tbz74by.jpg
 
 
我希望结果是这样的,单位是文本(兆帕,毫米,等等)
 
141121i42hbbc8l1aaa7ra.jpg
 
有人对此有意见吗?提前感谢。:)
 
回复

使用道具 举报

8

主题

28

帖子

20

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 13:15:53 | 显示全部楼层
另一个。dcl中带有mm^4和mm^2的标签,如何在没有“^”符号的情况下进行上标。我在网上找不到它。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 13:21:43 | 显示全部楼层
 
dcl非常有限,所以可能不可能,还没有研究过。
只是快速修复,现在没有太多时间
  1. (defun C:CC  () ; normally you would declare all your variables here
  2.   (if (not(setq dcl_id (load_dialog "CHECKING.dcl")))
  3.     (progn (alert "The DCL file could not be loaded!") (exit))
  4.     (progn (if (not (new_dialog "CHECKING" dcl_id))
  5.              (progn (alert "CHECKING.DCL file could not be loaded!") (exit))
  6.              (progn (cc_set_tiles);;; added this to set your variables
  7.                     (action_tile "accept" "(saveVars)(done_dialog 2)")
  8.                     (action_tile "cancel" "(done_dialog 1)")
  9.                     (setq ddiag (start_dialog))
  10.                     (unload_dialog dcl_id)
  11.                     (if (= ddiag 1)
  12.                       (princ "\n END"))
  13.                     (if (= ddiag 2)
  14.                       (progn (setq IT (+ Im (* 2.87 Is)))
  15.                              (setq moment (/ (* wp tw L L) 8000))
  16.                              (setq stress (/ (* moment cm) Im))
  17.                              (setq stressratio (/ stress Fbm))
  18.                              (setq deflection (/ (* 5 wp tw L L L L) (* 384000 69600 IT)))
  19.                              (setq allowdeflection (/ L 175))
  20.                              (setq defratio (/ deflection allowdeflection))
  21.                              (setq pt1 (getpoint "\nGet 1st point : "))
  22.                              (setq pt2 (getcorner pt1 "\nGet 2nd point : "))
  23.                              (setq msg (strcat "\nActual Bending Stress = "
  24.                                                (rtos stress 2 2)
  25.                                                "\nAllowable Bending Stress = "
  26.                                                (rtos Fbm 2 2)
  27.                                                "\nStress Ratio = "
  28.                                                (rtos stressratio 2 2)
  29.                                                "\nActual Deflection = "
  30.                                                (rtos deflection 2 2)
  31.                                                "\nAllowable Deflection = "
  32.                                                (rtos allowdeflection 2 2)
  33.                                                "\nDeflection Ratio = "
  34.                                                (rtos defratio 2 2)))
  35.                              (apply 'vl-cmdf (list "_mtext" pt1 pt2 msg "")))))))))
  36. ; tl = tile list / vl = variable list
  37. (defun cc_set_tiles ( / tl vl)
  38.   (mapcar '(lambda (x y)  (set_tile x (if (null (vl-symbol-value y)) "" (vl-princ-to-string (vl-symbol-value y)))))
  39.            (list "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k") (list 'wp 'tw 'L 'Im 'Am 'cm 'Fbm 'Is 'As 'cs 'Fbs))
  40. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 13:25:34 | 显示全部楼层
Rlx更快,无论如何,还有另一种方法:
 
[code](defun C:CC(/);正如Rlx所说,通常您会在这里声明所有变量;;此子函数将获取所有互动程序的值,并返回(
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 13:28:08 | 显示全部楼层
 
我为一些亚洲语言编写了utf-8函数,所以我很确定dcl支持unicode
 
mm^2=mm\U+00B2
mm^4=mm\U+2074
 
 
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 13:31:25 | 显示全部楼层
我同意Grrr的观点,我宁愿将一个值列表存储到一个变量(*MyList*),也不愿在我的绘图中有一组变量。但从lisp开始,这可能有点挑战性。尽管如此,为什么不在高速公路上用正确的方式学习呢
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 13:34:27 | 显示全部楼层
 
吉普,效果很好!很高兴知道!thanx!
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 13:41:07 | 显示全部楼层
顺便说一句,Op的代码没有数据(输入)检查什么,但让他(或她)休息一下(现在)
 
哦,忘记了Op第一篇文章中的最后一个问题:你创建了一个多行文字,所以你的getpoints的形状(我使用getpoint+getcorner)决定了你的行是否被剪短。只需选择一个更宽的矩形。。。如果它仍然太短,只需点击刚刚创建的多行文字并拖动它。。。明白吗?
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 13:42:27 | 显示全部楼层
 
是的,为变量编写太多的代码是一种痛苦,而这足以将它们存储在一个列表中。
也许每个人都达到了OP的水平,所以我尽量不把他搞糊涂,故意避免使用太多地图车和lambda。
 
 
 
我也注意到了这一点,但我建议OP尽量缩短和更好地理解他的代码,然后进行任何未来的改进/修复。 
所以我认为一个简单的列表操作和使用foreach函数对他来说是一个很好的开始 141122xabvkdn6tmy5mia5.png
 
 
 
我不知道一个人能写出四次unicode字符,很好!
 
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 13:45:00 | 显示全部楼层
 
啊,刚刚记得(我出错的地方),当我回来时,我尝试用CHR处理一些特殊字符,它确实有效(对于一些字符),但当我在家运行相同的代码时,结果完全不同。所以我确实应该使用UTF-8(如果我要使用它,很少使用特殊字符),但知道它总是很好的
哦,快到周末了,祝你们周末愉快
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 00:49 , Processed in 2.500593 second(s), 75 queries .

© 2020-2025 乐筑天下

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