乐筑天下

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

[编程交流] 神秘Lisp例程

[复制链接]

17

主题

41

帖子

24

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-5 16:48:37 | 显示全部楼层 |阅读模式
我正在学习我们公司的旧LISP例程。虽然大多数lisp都是通过单个lisp load命令作为单独的文件加载的,但这段代码只是被塞进了lisp load命令中,没有任何注释。有人能告诉我这个代码是做什么的,以及如何使用它,这样我就可以决定它是否值得保留?非常感谢。
 
  1. (defun C:WC  (/ INGET FPT GETD GETDTEMP ENAME ENAME1 ENT1 ENT2 SS1 SS2 SS3 SS4)
  2. (setq V1 (getvar "osmode"))
  3. (setq V2 (getvar "cmdecho"))
  4. (setvar "osmode" 0)
  5. (setvar "cmdecho" 0)
  6. (initget "Horizontal Vertical")
  7. (setq INGET (getkword "\nType of break [Horizontal/Vertical]: "))
  8. (if (= GETDTEMP1 nil)
  9.    (setq GETDTEMP1 (getreal "\nBreak Length: "))
  10.    (setq GETDTEMP1 (getreal (strcat "\nBreak Length <" (rtos GETDTEMP2) ">: ")))
  11. )
  12. (if (or (= GETDTEMP1 "")(= GETDTEMP1 nil))(setq GETDTEMP1 GETDTEMP2))
  13. (setq GETDTEMP2 GETDTEMP1)
  14. (setq GETD GETDTEMP1)
  15. (prompt "\nNow move Crosshairs near each intersection to break <press Enter to stop> :")
  16. (setq ENAME "LINE")
  17. (setq ENAME1 "LINE")
  18. (while GETD
  19.    (setq FPT (osnap (cadr (grread 1)) "int"))
  20.    (if (/= FPT NIL)
  21.      (progn
  22.        (setq SS1 (nentselp (polar FPT 0.00 GETD)))
  23.        (setq SS2 (nentselp (polar FPT 3.14 GETD)))
  24.        (setq SS3 (nentselp (polar FPT 1.57 GETD)))
  25.        (setq SS4 (nentselp (polar FPT 4.71 GETD)))
  26.        (setq ENT1 (ssget (polar FPT 0.00 GETD)))
  27.        (setq ENT2 (ssget (polar FPT 1.57 GETD)))
  28.      )
  29.    )
  30.    (if (and (/= ENT1 NIL)(/= ENT2 NIL))
  31.      (progn
  32.        (setq ENAME (cdr (assoc 0 (entget (ssname ENT1 0)))))
  33.        (setq ENAME1 (cdr (assoc 0 (entget (ssname ENT2 0)))))
  34.      )
  35.    )
  36.    (if (and (/= ENAME "LINE")(/= ENAME "LWPOLYLINE")(or (= INGET "Horizontal")(= INGET NIL)))
  37.      (progn
  38.        (print "Entity is not a Line or Polyline")
  39.        (setq FPT NIL)
  40.      )
  41.    )
  42.    (if (and (/= ENAME1 "LINE")(/= ENAME1 "LWPOLYLINE")(= INGET "Vertical"))
  43.      (progn
  44.        (print "Entity is not a Line or Polyline")
  45.        (setq FPT NIL)
  46.      )
  47.    )
  48.    (if (and (/= FPT NIL)(/= SS1 NIL)(/= SS2 NIL)(/= SS3 NIL)(/= SS4 NIL)(or (= INGET "Horizontal")(= INGET NIL)))
  49.      (command ".BREAK" (cadr SS1)(cadr SS2))
  50.    )
  51.    (if (and (/= FPT NIL)(= INGET "Vertical")(/= SS1 NIL)(/= SS2 NIL)(/= SS3 NIL)(/= SS4 NIL))
  52.      (command ".BREAK" (cadr SS3)(cadr SS4))
  53.    )
  54. )
  55. (setvar "osmode" V1)
  56. (setvar "cmdecho" V2)
  57. (princ)
  58. ) ;wc
回复

使用道具 举报

13

主题

146

帖子

136

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
62
发表于 2022-7-5 17:27:53 | 显示全部楼层
有时,当线条交叉时,我们不希望它们接触,通常我们使用跳跃或间隙来表示这一点。
该程序生成间隙,用户选择水平或垂直线间隙和间隙长度。
输入选择后,用户将被指示“在每个十字路口附近移动十字光标以打断”,并自动生成间距。
我发现命令行提示非常合适。
整洁的程序。谢谢你发布。
 
史蒂夫
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:44:48 | 显示全部楼层
如果文件名不明显,最好在代码开头添加几行。许多旧的Lisp仅限于8个字符的名称。
 
  1. ; This program makes gaps
  2. ; The user chooses either horizontal or vertical line gap and gap length.
  3. ; After the choices are input move Crosshairs near each intersection to break
  4. ; Gap is made automatically.
回复

使用道具 举报

17

主题

41

帖子

24

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
85
发表于 2022-7-5 17:55:39 | 显示全部楼层
谢谢你们俩!我昨天试着运行它,假设它沿着这些线做了一些事情,但它不起作用,因为我设置了一个任意的换行长度,恰好比我要打断的行长。doh!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 13:51 , Processed in 0.514873 second(s), 60 queries .

© 2020-2025 乐筑天下

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