我正在使用下面的代码来测量和跟踪一条路径,它是有效的。
我通常使用它沿着具有相同起点的路径测量点。
当我测量连续路径时,起点和大多数初始点是相同的。路径仅在最后几段不同。
所以我需要修改它来做到这一点:
1.当我重新启动lisp(C:res)时,它应该从(先前测量的)最后一个点开始沿着相同的路径开始测量。
2、按下左箭头键,我可以沿着上一条路径后退。
3.按下向右箭头,我可以沿着路径一直前进到最后一个点,并允许继续测量。
4、返回总距离。
我被困在如何“通信”和等待左/右箭头键盘用户输入。
感谢所有帮助。
(以下大部分代码来自李)
- (defun c:mes (/ DLST PT PTLST) ;
- (if (car
- (setq ptLst (list (getpoint "\nSpecify First Point: ")))
- )
- (progn
- (setq q1 (car ptlst))
- (while (setq pt (getpoint "\nSpecify Next Point: " (car ptLst)))
- (mapcar
- (function
- (lambda (from to)
- (grdraw from to 3 1)
- )
- )
- (reverse (setq ptLst (cons pt ptLst)))
- (cdr (reverse ptLst))
- )
- (setq dLst
- (cons (distance (car ptlst) (cadr ptlst)) dLst)
- ) ; change the value
- (princ
- (strcat "\n<< Distance: "
- (rtos (car dLst) 2 2)
- " -- "
- "Cumulative: "
- (setq d1 (rtos (apply (function +) dLst) 2 2))
- " >>"
- )
-
- )
- );while
- (LWPoly ptlst)
-
- );progn ; // added now
- (setq pt (getpoint "\nSpecify Next Point 2 : ")); else
-
- );if
- (defun LWPoly (lst)
- (entmakex (append (list (cons 0 "LWPOLYLINE")
- (cons 100 "AcDbEntity")
- (cons 100 "AcDbPolyline")
- (cons 90 (length lst))
- (cons 70 0)) ;cur fit vertices
- (mapcar (function (lambda (p) (cons 10 p))) lst))))
- );defun
|