(defun c:midpoint ( / pt1 pt2 pt3 cd os x1 x2 y1 y2 z1 z2) (setq CD (getvar "CMDECHO") OS (getvar "OSMODE") ) ;end setq (setvar "CMDECHO" 0) (setq PT1 (getpoint "\nFind Midpoint>> Pick first reference point: ") PT2 (getpoint PT1 "\nFind Midpoint>> Pick second reference point: ") ) ;end setq (princ "\n ... finding midpoint ...") (if (and PT1 PT2) (progn (if (< (car PT1) (car PT2)) (setq X1 (car PT1) X2 (car PT2) ) ;end setq (setq X1 (car PT2) X2 (car PT1) ) ;end setq ) ;end if (if (< (cadr PT1) (cadr PT2)) (setq Y1 (cadr PT1) Y2 (cadr PT2) ) ;end setq (setq Y1 (cadr PT2) Y2 (cadr PT1) ) ;end setq ) ;end if (if (< (caddr PT1) (caddr PT2)) (setq Z1 (caddr PT1) Z2 (caddr PT2) ) ;end setq (setq Z1 (caddr PT2) Z2 (caddr PT1) ) ;end setq ) ;end if (setvar "OSMODE" 0) (setq PT3 (list (+ X1 (/ (- X2 X1) 2)) (+ Y1 (/ (- Y2 Y1) 2)) (+ Z1 (/ (- Z2 Z1) 2)))) (princ (strcat "\r ... midpoint found at " (rtos (car PT3)) "," (rtos (cadr PT3)) "," (rtos (caddr PT3)) "\n")) (command PT3) ) ;end progn (princ "\r ... function cancelled. No midpoint found.") ) ;end if (setvar "CMDECHO" CD) (setvar "OSMODE" OS) (princ) ) ;end midpoint