;| TRI.LSP -- constructs a triangle with user-defined sides on an existing base line. (c) 1998 Tee Square Graphics |; (defun C:TRI (/ cme srt ent p p1 p2 m n a b x y) (setq cme (getvar "cmdecho") srt (getvar "sortents") ent (entsel "\nPick Base line near End 1: ") p (osnap (cadr ent) "endp") ent (entget (car ent))) (if (equal (setq p1 (cdr (assoc 10 ent))) p) (setq p2 (cdr (assoc 11 ent))) (setq p2 p1 p1 (cdr (assoc 11 ent)))) (setq m (getdist p1 "\nEnter length of Side 1: ") n (getdist p2 "\nEnter length of Side 2: ") a (angle p1 p2) b (distance p1 p2)) (if (> (+ m n) b) (progn (setvar "cmdecho" 0) (setvar "sortents" 17) (setq x (/ (- (+ (* m m)(* b b))(* n n)) 2.0 b) y (sqrt (- (* m m)(* x x)))) (command "_.line" p1 (polar (polar p1 a x)(+ a (/ pi 2.0)) y) p2 "") (initget "Accept Mirror") (setq mir (getkword "\nDo you wish to Accept or Mirror this solution ? ")) (if (= mir "Mirror") (command "_.mirror" p1 p2 "" p1 p2 "_y")) (setvar "sortents" srt) (setvar "cmdecho" cme)) (alert (strcat "** Sorry...no possible solution! **\n\n" "Combined length of Side 1 and Side 2\n" "must be greater than length of Base."))) (princ) ) (alert (strcat "TRI.LSP - (c) 1998 Tee Square Graphics\n\n" " Type TRI to begin.")) (princ)