2
10
8
初来乍到
使用道具 举报
54
3755
3583
后起之秀
(defun c:Bearings (/ *error* _draw _angle _fix _dist cmd dzn ucs first lst pt finalList tablePoint row tsize table) ;; Point connections to Table with bearings and distances ;; Alan J. Thompson, 2013.05.29 (vl-load-com) (defun *error* (msg) (redraw) (and ucs (vl-cmdf "_.UCS" "_P")) (and cmd (setvar 'CMDECHO cmd)) (and dzn (setvar 'DIMZIN dzn)) (and *AcadDoc* (vla-endundomark *AcadDoc*)) (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,"))) (progn (vl-bt) (princ (strcat "\nError: " msg))) ) ) (defun _draw (lst) (redraw) (mapcar (function (lambda (a b) (grdraw a b 3 1))) (cons (last lst) lst) lst) ) (defun _angle (p1 p2 / a) (setq a (angtos (angle p1 p2) 4 4)) (cond ((cdr (assoc a '(("N" . "NORTH") ("S" . "SOUTH") ("E" . "EAST") ("W" . "WEST"))))) ((_fix a)) ) ) (defun _fix (s / i l a) (setq s (vl-string-subst "°" "d" s)) (foreach v '(" " "°" "'" """ " ") (setq a (substr s 1 (setq i (vl-string-search v s)))) (if (and (member v '("°" "'" """)) (eq (strlen a) 1)) (setq a (strcat "0" a)) ) (setq l (cons a l) s (substr s (+ i 2)) ) ) (apply 'strcat (apply 'append (mapcar (function (lambda (a b) (list a b))) (reverse (cons s l)) '(" " "°" "'" "" " "" "") ) ) ) ) (defun _dist (p1 p2) (strcat (rtos (distance p1 p2) 2 2) "'")) (vla-startundomark (cond (*AcadDoc*) ((setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object)))) ) ) (setq dzn (getvar 'DIMZIN)) (setvar 'DIMZIN 0) (if (zerop (getvar 'WORLDUCS)) (progn (setq cmd (getvar 'CMDECHO)) (setvar 'CMDECHO 0) (vl-cmdf "_.UCS" "") ) ) (redraw) (initget 4) (setq *Bearings:Count* (cond ((getint (strcat "\nSpecify starting number <" (itoa (cond (*Bearings:Count*) ((setq *Bearings:Count* 1)) ) ) ">: " ) ) ) (*Bearings:Count*) ) ) (setq first (itoa *Bearings:Count*)) (if (car (setq lst (list (getpoint (strcat "\nSpecify point for number " (itoa *Bearings:Count*) ": ") ) ) ) ) (progn (while (setq pt (getpoint (car lst) (strcat "\nSpecify point for number " (itoa (1+ *Bearings:Count*)) ": " ) ) ) (_draw (setq lst (cons pt lst))) (setq finalList (cons (list (strcat (itoa *Bearings:Count*) " - " (itoa (setq *Bearings:Count* (1+ *Bearings:Count*))) ) (_angle (cadr lst) (car lst)) (_dist (cadr lst) (car lst)) ) finalList ) )