;;;Construct a line at an angle from selected line. ;;; ;;;> Author: Henry C. Francis ;;;> 425 N. Ashe St. ;;;> Southern Pines, NC 28387 ;;;> http://paracadd.com ;;;> All rights reserved. ;;; ;;;> COPYRIGHT: 5-14-93 ;;;> EDITED: 07-19-1999 ;;; (defun C:FMLAY ( / old_fmlaypt we_continued);e0ang e1ang e2ang pt2 andr vdis osmode celtype cecolor snapang) (setq aperture (getvar "APERTURE") osmode (getvar "OSMODE") celtype (getvar "CELTYPE") cecolor (getvar "CECOLOR") old_snapang (getvar "SNAPANG")) (setvar "CMDECHO" 0) (setvar "OSMODE" 0)(setvar "APERTURE" 5) (setq max_defl_deg (ureal 1 "" "Maximum deflection angle" (if max_defl_ang(*(/ max_defl_ang pi)180)))) (setq max_defl_ang (*(/ max_defl_deg 180)pi)) (setq vdis (ureal 1 "" "Nominal laying length" (if vdis vdis 20.0))) (setq pt1 (upoint 1 "Continue" "\nBeginning Point or ontinue" nil nil)) (if (eq pt1 "Continue") (progn (while (not (setq old_line (entsel "\nSelect line to continue from")))) (setq line_data (entget(car old_line))) (setq pt1 (cdr(assoc 10 line_data))) (setq pt2 (cdr(assoc 11 line_data))) (setq prev_vang (angle pt1 pt2)) (setq we_continued T) ) (setq pt2 nil prev_vang nil we_continued nil old_fmlaypt nil ) ) (while (if we_continued T (setq pt2 (upoint 0 "" "Next point" nil pt1)) ) (setq trydefl nil) (setvar "OSMODE" 0) (if old_fmlaypt (progn ;;; (if init_fmlay ;;; (progn ;;; (grdraw pt2 (polar pt2 (+ new_ang(* pi 0.125)) vdis)256) ;;; (grdraw pt2 (polar pt2 (- new_ang(* pi 0.125)) vdis)256) ;;; (setq init_fmlay nil) ;;; ) ;;; (progn ;;; (grdraw (polar pt1 new_ang vdis)(polar(polar pt1 new_ang vdis)(+ new_ang(* pi 0.125)) vdis)256) ;;; (grdraw (polar pt1 new_ang vdis)(polar(polar pt1 new_ang vdis)(- new_ang(* pi 0.125)) vdis)256) ;;; ) ;;; ) (setq act_ang (angle pt1 pt2)) (setq prev_vang (angle old_fmlaypt pt1)) (setq pos_ang (+ prev_vang max_defl_ang)) (setq neg_ang (- prev_vang max_defl_ang)) (setq pos_ang_dis (distance(polar pt1 pos_ang vdis)pt2)) (setq neg_ang_dis (distance(polar pt1 neg_ang vdis)pt2)) (if (and(<(abs(sin(- prev_vang act_ang)))(abs(sin(- prev_vang pos_ang)))) (<(abs(sin(+ prev_vang act_ang)))(abs(sin(+ prev_vang pos_ang)))) ) (setq new_ang act_ang) (progn (cond ((<(abs(sin(- prev_vang act_ang)))(sin (-(/ pi 8)max_defl_ang))) (if (> neg_ang_dis pos_ang_dis) (setq new_ang pos_ang) (setq new_ang neg_ang) ) ) ;;; ((and (>=(abs(sin(- prev_vang act_ang max_defl_ang)))(sin (-(/ pi 16)max_defl_ang))) ;;; (<(abs(sin(- prev_vang act_ang max_defl_ang)))(sin (+(/ pi 16)max_defl_ang)))) ;;; (setq new_ang act_ang) ;;; ) ((and (>=(abs(sin(- prev_vang act_ang max_defl_ang)))(abs(sin (-(/ pi 8)max_defl_ang)))) (<=(abs(sin(+(- prev_vang act_ang)max_defl_ang)))(abs(sin (+(/ pi 8)max_defl_ang))))) (setq new_ang act_ang) ) ((and (>=(abs(sin(- prev_vang act_ang max_defl_ang)))(abs(sin (-(/ pi 4)max_defl_ang)))) (<=(abs(sin(+(- prev_vang act_ang)max_defl_ang)))(abs(sin (+(/ pi 4)max_defl_ang))))) (setq new_ang act_ang) ) ((or (>=(abs(sin(- prev_vang act_ang max_defl_ang)))(abs(sin (-(/ pi 2)max_defl_ang)))) (>=(abs(sin(+(- prev_vang act_ang)max_defl_ang)))(abs(sin (+(/ pi 2)max_defl_ang))))) (princ "\n") (princ (abs(sin(- prev_vang act_ang max_defl_ang)))) (princ " ") (princ (abs(sin (-(/ pi 2)max_defl_ang)))) (princ "\n") (princ (abs(sin(+(- prev_vang act_ang)max_defl_ang)))) (princ " ") (princ (abs(sin (+(/ pi 2)max_defl_ang)))) (princ "\n") (setq new_ang act_ang) ) (T (Princ "\nThat point requires a non-standard bend. Please try again. ") (setq trydefl T) ) ) ) ) (if trydefl nil (progn (entmake (list (cons 0 "LINE") (cons 10 pt1) (cons 11 (polar pt1 new_ang vdis)) ) ) (setvar "snapang" (angle pt1 (polar pt1 new_ang vdis))) (grdraw (polar pt1 new_ang vdis)(polar(polar pt1 new_ang vdis)(+ new_ang(* pi 0.125)) (/ vdis 4))256) (grdraw (polar pt1 new_ang vdis)(polar(polar pt1 new_ang vdis)(- new_ang(* pi 0.125)) (/ vdis 4))256) (grdraw (polar pt1 new_ang vdis)(polar(polar pt1 new_ang vdis)(+ new_ang(* pi 0.25)) (/ vdis 4))256) (grdraw (polar pt1 new_ang vdis)(polar(polar pt1 new_ang vdis)(- new_ang(* pi 0.25)) (/ vdis 4))256) (setq old_fmlaypt pt1 pt1 (polar pt1 new_ang vdis)) ) ) ) (progn (if we_continued (progn (setq we_continued nil new_ang prev_vang) (setvar "snapang" prev_vang) ) (progn (setq pt2 (polar pt1 (angle pt1 pt2) vdis) new_ang (angle pt1 pt2)) (entmake (list (cons 0 "LINE") (cons 10 pt1) (cons 11 pt2) ) ) (setvar "snapang" (angle pt1 pt2)) ) ) (grdraw pt2 (polar pt2 (+ new_ang(* pi 0.125)) (/ vdis 4))256) (grdraw pt2 (polar pt2 (- new_ang(* pi 0.125)) (/ vdis 4))256) (grdraw pt2 (polar pt2 (+ new_ang(* pi 0.25)) (/ vdis 4))256) (grdraw pt2 (polar pt2 (- new_ang(* pi 0.25)) (/ vdis 4))256) (setq old_fmlaypt pt1 pt1 pt2 init_fmlay T) ) ) ) (if (eq "(" (substr cecolor 3 1)) (setq cecolor (substr cecolor 1 1))) (setvar "APERTURE" aperture) (setvar "OSMODE" osmode) (setvar "SNAPANG" old_snapang) (command ".linetype" "s" celtype "" ".color" cecolor) (princ) );defun C:ANGL