神秘Lisp例程
我正在学习我们公司的旧LISP例程。虽然大多数lisp都是通过单个lisp load命令作为单独的文件加载的,但这段代码只是被塞进了lisp load命令中,没有任何注释。有人能告诉我这个代码是做什么的,以及如何使用它,这样我就可以决定它是否值得保留?非常感谢。(defun C:WC(/ INGET FPT GETD GETDTEMP ENAME ENAME1 ENT1 ENT2 SS1 SS2 SS3 SS4)
(setq V1 (getvar "osmode"))
(setq V2 (getvar "cmdecho"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(initget "Horizontal Vertical")
(setq INGET (getkword "\nType of break : "))
(if (= GETDTEMP1 nil)
(setq GETDTEMP1 (getreal "\nBreak Length: "))
(setq GETDTEMP1 (getreal (strcat "\nBreak Length <" (rtos GETDTEMP2) ">: ")))
)
(if (or (= GETDTEMP1 "")(= GETDTEMP1 nil))(setq GETDTEMP1 GETDTEMP2))
(setq GETDTEMP2 GETDTEMP1)
(setq GETD GETDTEMP1)
(prompt "\nNow move Crosshairs near each intersection to break <press Enter to stop> :")
(setq ENAME "LINE")
(setq ENAME1 "LINE")
(while GETD
(setq FPT (osnap (cadr (grread 1)) "int"))
(if (/= FPT NIL)
(progn
(setq SS1 (nentselp (polar FPT 0.00 GETD)))
(setq SS2 (nentselp (polar FPT 3.14 GETD)))
(setq SS3 (nentselp (polar FPT 1.57 GETD)))
(setq SS4 (nentselp (polar FPT 4.71 GETD)))
(setq ENT1 (ssget (polar FPT 0.00 GETD)))
(setq ENT2 (ssget (polar FPT 1.57 GETD)))
)
)
(if (and (/= ENT1 NIL)(/= ENT2 NIL))
(progn
(setq ENAME (cdr (assoc 0 (entget (ssname ENT1 0)))))
(setq ENAME1 (cdr (assoc 0 (entget (ssname ENT2 0)))))
)
)
(if (and (/= ENAME "LINE")(/= ENAME "LWPOLYLINE")(or (= INGET "Horizontal")(= INGET NIL)))
(progn
(print "Entity is not a Line or Polyline")
(setq FPT NIL)
)
)
(if (and (/= ENAME1 "LINE")(/= ENAME1 "LWPOLYLINE")(= INGET "Vertical"))
(progn
(print "Entity is not a Line or Polyline")
(setq FPT NIL)
)
)
(if (and (/= FPT NIL)(/= SS1 NIL)(/= SS2 NIL)(/= SS3 NIL)(/= SS4 NIL)(or (= INGET "Horizontal")(= INGET NIL)))
(command ".BREAK" (cadr SS1)(cadr SS2))
)
(if (and (/= FPT NIL)(= INGET "Vertical")(/= SS1 NIL)(/= SS2 NIL)(/= SS3 NIL)(/= SS4 NIL))
(command ".BREAK" (cadr SS3)(cadr SS4))
)
)
(setvar "osmode" V1)
(setvar "cmdecho" V2)
(princ)
) ;wc 有时,当线条交叉时,我们不希望它们接触,通常我们使用跳跃或间隙来表示这一点。
该程序生成间隙,用户选择水平或垂直线间隙和间隙长度。
输入选择后,用户将被指示“在每个十字路口附近移动十字光标以打断”,并自动生成间距。
我发现命令行提示非常合适。
整洁的程序。谢谢你发布。
史蒂夫 如果文件名不明显,最好在代码开头添加几行。许多旧的Lisp仅限于8个字符的名称。
; This program makes gaps
; The user chooses either horizontal or vertical line gap and gap length.
; After the choices are input move Crosshairs near each intersection to break
; Gap is made automatically.
谢谢你们俩!我昨天试着运行它,假设它沿着这些线做了一些事情,但它不起作用,因为我设置了一个任意的换行长度,恰好比我要打断的行长。doh!
页:
[1]