(prompt "\nAngle Trisection by AutoCAD - KEMPE_4_RODS.LSP") (prompt "\nCommands: 4_RODS ANIMATION_4_RODS ") (prompt "\nFunctions: (INIT_DISPLAY) (LOCATE) (SETUP) (SHOW_RESULT) (DISPLAY_NODES) ") (prompt "\n (SHOW_STATUS) (PL_DISPLAY) ") ;---------------------------------------------------------- ;link test #6 6/28/99 Takaya Iwamoto ;link_6.lsp renamed kempe_4_rods.lsp 4/29/2006 t.iwamoto ;;; ;;; ; (defun C:4_rods() ;Main routine (setup) ;set up (init_display) (alert "Place the cursor near the point \"D\", then click left mouse to start.") (setq answer (getpoint "\nPress left mouse to start.Click mouse to stop."))(terpri) (entdel new_pnt_ent) (entdel new_txt_ent) (while (and (setq key (grread T)) (= (car key) 5) ) (setq pnt_tmp (cadr key)) (entdel last_pline) (locate pnt_tmp) (pl_display) (setq last_pline (entlast)) ) (show_result) (reset_sysvar) ) ; (defun init_display() (setq init_pos (list sqrt_5 0)) (locate init_pos) (pl_display) (setq last_pline (entlast)) (regapp "my_point") (make_point "0" 0 pnt_d "D" 1 pnt_size) (command "_.zoom" "_EXTENT") (command "_.zoom" "_sc" "3.5") (command "_.regen") ) ;locate the point to satisfy the condition (defun locate(pnt_tmp) (setq pnt_d pnt_tmp el (distance pnt_a pnt_d) two_el (* 2.0 el) el_sqr (* el el) two_el_sqr (* 2.0 el_sqr) a (/ (- el_sqr 3.0) two_el) b (/ (+ el_sqr 3.0) two_el) ratio_a (/ a el) ratio_b (/ b el) val_1 (- 9.0 el_sqr) val_2 (- el_sqr 1.0) val (* val_1 val_2) ) (if (>= val 0.0) (setq c (/ (sqrt val) (* 2.0 el)) ) (setq c 0.0) ) (setq pnt_b (point_off_line pnt_a pnt_d ratio_a half_pi c) pnt_c (point_off_line pnt_a pnt_d ratio_b half_pi c) ) ) (defun pl_display() (command "_.pline" pnt_a pnt_b pnt_d pnt_a pnt_c pnt_d "") ) ;setup (defun setup() (setup_sysvar) (setq half_pi (* 0.5 pi) quart_pi (* 0.25 pi) sqrt_5 (sqrt 5.0) pnt_size 0.10 mark_size 0.08 pnt_a '(0 0) ) (make_pt "0" 0 pnt_a) ;(set_layer) (setvar "PDMODE" 32) (setvar "PDSIZE" -3) ) ;; (defun show_result() (c:display_nodes) (mark_angle pnt_b pnt_a pnt_c 0.5 "f" mark_size 2) (mark_angle pnt_b pnt_d pnt_c 0.5 "f" mark_size 2) ) ;; ;; (defun c:display_nodes() (set_txstyle "arial") (regapp "my_point") (make_point "0" 0 pnt_a "A" 3 pnt_size) (make_point "0" 0 pnt_b "B" 1 pnt_size) (make_point "0" 0 pnt_c "C" 1 pnt_size) (make_point "0" 0 pnt_d "D" 1 pnt_size) ) ;;; ;;;ANIMATION_4_rods ;;;call jpg_setup(output_filename) before running this executable. ;;;Do not forget to set jpg_yes on (=1) ;;; (defun C:animation_4_rods() ;Main routine (setup) ;set up (init_display) ;(command "_.zoom" "_E") ;(command "_.regen") (setq end_pos '(2.08733317 1.49308012) dist (distance init_pos end_pos) nstep 5 del_step (/ 1. (float nstep)) ;;5 steps animation n_cur 1 ) (make_jpg) (alert "\nNext step?") (entdel new_pnt_ent) (entdel new_txt_ent) (repeat nstep (setq pnt_tmp (plt init_pos end_pos (* n_cur del_step))) (entdel last_pline) (locate pnt_tmp) (pl_display) (setq last_pline (entlast)) ;(show_status) (make_jpg) ;;make jpg file (alert "\nNext step?") (command "_.delay" 500) (setq n_cur (1+ n_cur)) );;;repeat loop (c:display_nodes) (make_jpg) (show_result) (make_jpg) (make_jpg) (reset_sysvar) );;;ANIMATION_4_rods ;;; ;;-------------------------------------------------------------------------- (princ)