;; | ---------------------------------------------------------------------------- ;; | GE_AngleBetn2L ;; | ---------------------------------------------------------------------------- ;; | Function : Calculate the Horizontal angle between two lines ;; | Arguments: pt11 pt12 pt21 pt22 are the four points forminng the start and ;; | end of the two lines respectively. ;; | Returns : A list containing the two angles, acute and obtuse between the ;; | lines ;; | Update : July 3, 1999 ;; | e-mail : rakesh.rao@4d-technologies.com ;; | Web : www.4d-technologies.com ;; | ---------------------------------------------------------------------------- (defun GE_AngleBetn2L (pt11 pt12 pt21 pt22 / IPt AngBet RefPt len dX dY ang1 ang2 2ndPt OS ) (setq AngBet nil pt11 (list (car pt11) (cadr pt11) 0.0) pt12 (list (car pt12) (cadr pt12) 0.0) pt21 (list (car pt21) (cadr pt21) 0.0) pt22 (list (car pt22) (cadr pt22) 0.0) OS (getvar "OSMODE") ) (setvar "OSMODE" 0) (if (and (>= (distance pt11 pt12) 0.01) (>= (distance pt21 pt22) 0.01) ) (progn (setq IPt (inters pt11 pt12 pt21 pt22 nil)) (if IPt (progn (setq len (distance IPt pt21)) (if (> len 0.01) (setq RefPt pt21) (setq RefPt pt22) ) (setq len (distance IPt pt12)) (if (> len 0.01) (setq 2ndPt pt12) (setq 2ndPt pt11) ) (command "._Ucs" "_3Point" IPt 2ndPt (polar IPt (+ (angle IPt 2ndPt) #pb2) 10.0)) (setq RefPt (trans RefPt 0 1)) (command "._Ucs" "_World") (setq dY (abs (cadr Refpt)) dX (abs (car RefPt)) ) (if (zerop dX) (setq ang1 90.0) (setq ang1 (MI_r2d (atan (/ dY dX)))) ) (setq ang2 (- 180.0 ang1) AngBet (list ang1 ang2) ) ) (setq AngBet (list 0.0 0.0)) ) ) ) (setvar "OSMODE" OS) AngBet )