乐筑天下

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

[编程交流] 记住上次使用的LISP行

[复制链接]

14

主题

59

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 15:23:22 | 显示全部楼层 |阅读模式
我正在寻找一个简单的例程,可以记住你最后的输入。
 
我现在的例行程序是“输入下降距离以增加总长度”,所以每次我都必须输入数字。我希望它能够记住最后一个输入是什么,并在“enter drop distance”语句之后说出来,然后右键单击应用它以继续执行例程。我想这样说:
 
输入要添加到总长度的下降距离:
 
当10为时,它需要是最后一个输入的任何值,无论是10或15或任何值。有办法吗?谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:35:46 | 显示全部楼层
确实有——看看这个:
 
http://www.cadtutor.net/forum/showthread.php?t=30948
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:40:52 | 显示全部楼层
ASMI的例子很好,但我喜欢使用setenv,这样LISP即使在完成后也能记住值。
回复

使用道具 举报

14

主题

59

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 15:46:27 | 显示全部楼层
李·麦克,
 
以下是我一直在编写的代码,您曾多次帮助我:
 
  1. (defun c:dis ()
  2.    (setvar "CMDECHO" 0)
  3.    (setq num 1)
  4.    (setq drop (getint "\nEnter drop distance to add to total length <**[i]*[/i][b][i]this is where I want the last distance[/i] [i]displayed[/i][/b][i]***[/i]>: "))
  5.    (setq drop (* 12 drop))
  6.    (setq pt (getpoint "\nSelect path to next device:"))
  7.    (setq x1 (car pt))
  8.    (setq y1 (cadr pt))
  9.    (setq lensum (+ drop))
  10.    (while
  11.      (setq pt (getpoint pt))
  12.      (setq x2 (car pt))
  13.      (setq y2 (cadr pt))
  14.      (setq xdiff (abs (- x1 x2)))
  15.      (setq ydiff (abs (- y1 y2)))
  16.      (setq len (+ xdiff ydiff))
  17.      (setq lensum (+ len lensum))
  18.      (setq segsum (strcat "---> TOTAL LENGTH: " (rtos (/ lensum 12) 2 0)))
  19.      (setq x1 x2)(setq y1 y2)
  20.    )
  21. (princ "\n")(princ segsum)
  22. (princ)
  23. )

 
大多数情况下,我用10作为我10英尺的下降距离。然而,有时一个项目必须与每个设备有15英尺或20英尺的下降距离。我只想拥有它,这样当我第一次打开一个图形并使用这个lisp时,我第一次键入10(或任何标准),以获得我的距离,然后,我只需右键单击(或输入),它就会自动应用该数字,而无需每次键入。
 
我仍在努力阅读和理解lisp,所以我不能挑出我需要使这项工作的小部分。谢谢你,李!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:54:51 | 显示全部楼层
试试这个:
 
  1. (defun c:dis (/ num drop pt x1 y1 lensum x2 y2 xdiff ydiff len segsum)
  2.    (setvar "CMDECHO" 0)
  3.    (setq num 1)
  4.    (or (getenv "DROP:DIST") (setenv "DROP:DIST" "0"))
  5.    (if
  6.    (setq drop (getint (strcat "\nEnter drop distance to add to total length <"
  7.                   (getenv "DROP:DIST")
  8.                   "> :"
  9.               ) ;_  end strcat
  10.           ) ;_  end getint
  11.    ) ;_  end setq
  12.       (setenv "DROP:DIST" (rtos drop))
  13.    ) ;_  end if
  14.    (setq drop (* 12 (atof (getenv "DROP:DIST"))))
  15.    (setq pt (getpoint "\nSelect path to next device:"))
  16.    (setq x1 (car pt))
  17.    (setq y1 (cadr pt))
  18.    (setq lensum (+ drop))
  19.    (while
  20.    (setq pt (getpoint pt))
  21.       (setq x2 (car pt))
  22.       (setq y2 (cadr pt))
  23.       (setq xdiff (abs (- x1 x2)))
  24.       (setq ydiff (abs (- y1 y2)))
  25.       (setq len (+ xdiff ydiff))
  26.       (setq lensum (+ len lensum))
  27.       (setq segsum (strcat "---> TOTAL LENGTH: " (rtos (/ lensum 12) 2 0)))
  28.       (setq x1 x2)
  29.       (setq y1 y2)
  30.    ) ;_  end while
  31.    (princ "\n")
  32.    (princ segsum)
  33.    (princ)
  34. ) ;_  end defun
回复

使用道具 举报

14

主题

59

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 15:59:18 | 显示全部楼层
 
没有按我需要的方式工作。我最初设置它,这样我就可以输入“10”,然后将其转换为10英尺。你刚才给我的那个只允许我输入英寸,我不能输入10’,因为它需要一个整数。可以设置成我只需要输入10,然后转换成10英尺吗?谢谢
回复

使用道具 举报

14

主题

59

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 16:04:51 | 显示全部楼层
好的,这是最终产品!我对它进行了测试,然后重新测试,以确保尺寸相加。
 
  1. ;This function will calculate the distance a length of wire travels, at right angles, from one device to the next.
  2. (defun c:dis ()
  3.    (setvar "CMDECHO" 0)
  4.    (setq num 1)
  5.    (or (getenv "DROP:DIST") (setenv "DROP:DIST" "10"))
  6.       (if
  7.       (setq drop (getint (strcat "\nEnter drop distance to add to total length <"(getenv "DROP:DIST")">: ")))
  8.       (setenv "DROP:DIST" (rtos (* 12 drop)))
  9.       )
  10.    (setq drop (* 12 (atof (getenv "DROP:DIST"))))
  11.    (setq pt (getpoint "\nSelect path to next device:"))
  12.    (setq x1 (car pt))
  13.    (setq y1 (cadr pt))
  14.    (setq lensum (+ drop))
  15.    (while
  16.    (setq pt (getpoint pt))
  17.       (setq x2 (car pt))
  18.       (setq y2 (cadr pt))
  19.       (setq xdiff (abs (- x1 x2)))
  20.       (setq ydiff (abs (- y1 y2)))
  21.       (setq len (+ xdiff ydiff))
  22.       (setq lensum (+ len lensum))
  23.       (setq segsum (strcat "---> TOTAL LENGTH: " (rtos (/ lensum 12) 2 0)))
  24.       (setq x1 x2)
  25.       (setq y1 y2)
  26.    )
  27.    (princ "\n")(princ segsum)
  28.    (princ)
  29. )

 
这个LISP例程对于任何需要计算导线移动距离并包括下降距离的人来说都非常有用(对于我们来说,我们的导线在天花板上运行,然后下降5英尺到设备,然后备份5英尺到导管,因此我一直在说10英尺)。我们的布线布局始终在正交或XY坐标中运行,本例程仅计算正交或XY坐标,因此您可以单击以“L”形隔开的两个设备,它得到的是该距离,而不是从一个到另一个的直线。
 
这是李·麦克的道具,他帮了我的忙,并且达到了我想要的程度。谢谢我希望这个例行公事也能帮助其他人。
 
哦,如果有人感兴趣的话,我创建了一个LISP,它只在X和Y坐标中绘制导管线,并将边缘圆角到你想要的任何位置,你只需要在使用它之前设置圆角。它还可以绘制“N”形的导管。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:13:11 | 显示全部楼层
好样的斗士,很高兴你能成功
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 16:21:49 | 显示全部楼层
为什么不直接检查一个值是否存在,而不是setenv?
 
(if(=dropdist nil)(setq dropdist 10.0))在代码顶部,甚至可能在defun之外
 
一旦您更改dropdist,它将在整个会话中保持不变。
 
然后,您每次选中“drop”,如果其为零或0.0,您按下“回车键”dropdist是您设置的值,例如10,则它不会更改dropdist值,否则使用新值。
 

(setq insul\U ht(getint“\n输入绝缘ht mm:))
(如果(=insul\U ht nil)
(setq insul\U ht 90)
)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:29:52 | 显示全部楼层
嗨,比格尔,谢谢你的建议
 
我使用了setenv,因为它将保留其值。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 18:13 , Processed in 0.872193 second(s), 72 queries .

© 2020-2025 乐筑天下

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