;;;collections of fractal exercises from ;;;Mandelbrot's "The Fractal Geometry of Nature" ;;;page implies the page number of the book ;;;List of executables ;;; page50 ;;; page52 ;;; page55 ;;; page68 ;;; page70 ;;; page54 ;;; page64 ;;; ;;; ;;; mandelbrot__main (defun c:mandelbrot_main() (setq dcl_id (load_dialog "fractal_mandelb.dcl")) (if (not (new_dialog "fractal_mandelb" dcl_id)) (exit) ) (setq proof_list '("page50" "page52" "page54" "page55" "page64" "page68" "page70" "" "" "" "" "" "" "" "") ) (foreach sld_name proof_list (start_image sld_name) (slide_image 0 0 (- (dimx_tile sld_name) 1) (- (dimy_tile sld_name) 1) (strcat "mandelbrot" "(" sld_name ")") ) (end_image) );;;end of foreach loop (setq pr_mode "page50") (mode_tile pr_mode 4) (foreach pd0 proof_list (action_tile pd0 "(mode_tile pr_mode 4) (setq pr_mode $key)(mode_tile pr_mode 4)" ) ) (action_tile "help" "(help \"\" \"ddptype\")") (start_dialog) ;;;execute the selected program (cond ((= pr_mode "page50") (c:page50) ) ((= pr_mode "page52") (c:page52) ) ((= pr_mode "page54") (c:page54) ) ((= pr_mode "page55") (c:page55) ) ((= pr_mode "page64") (c:page64) ) ((= pr_mode "page68") (c:page68) ) ((= pr_mode "page70") (c:page70) ) (t nil) );;;end of cond );;;FRACTAL_MANDELB_MAIN ;;; ;fractal function page50 ;;;originally created 10/01/98 Takaya Iwamoto ;;;updated May 05,2003 ;;;draw a generator for slide file creation purpose ;;; ;;; ;;;make all slides ;;; step 1: run makeall_slide ;;; This will create slide files page50, page52, ,page70 ;;; step 2: make the following script ;;; slidelib fractal_mandelb < mandelb_list.txt ;;; ;;; where mandelb_list looks like this. ;;; page50 ;;; page52 ;;; page54 ;;; page55 ;;; page64 ;;; page68 ;;; page70 ;;; ;;; step 3: run the script to create a slide library named fractal_mandelb.slb ;;; ;;; ;;; (defun c:MAKEALL_SLIDES() (c:refresh_all) (setvar "PDMODE" 32) (setvar "PDSIZE" -8) (c:page50_mode) (c:page52_mode) (c:page54_mode) (c:page55_mode) (c:page64_mode) (c:page68_mode) (c:page70_mode) );;;MAKEALL_SLIDES ;;; ;;; (defun c:page50_mode() (c:refresh_all) (setvar "PDMODE" 32) (setvar "PDSIZE" -8) (setup_page50) (make_line_1 "0" 1 '(0 0) '(1 0)) (base_len) (fractal_page50) (make_pt "0" 1 '(0 0)) (make_pt "0" 1 '(1 0)) (command "_.zoom" "_E") (command "_.regen") (command "mslide" "page50") );;;C:page50_mode ;;; (defun c:page52_mode() (c:refresh_all) (setup_page52) (make_line_1 "0" 1 '(0 0) '(1 0)) (base_len) (fractal_page52) (make_pt "0" 1 '(0 0)) (make_pt "0" 1 '(1 0)) (command "_.zoom" "_E") (command "_.regen") (command "mslide" "page52") );;;C:page52_mode ;;; (defun c:page54_mode() (c:refresh_all) (setup_page54) (make_line_1 "0" 1 '(0 0) '(1 0)) (base_len) (fractal_page54) (make_pt "0" 1 '(0 0)) (make_pt "0" 1 '(1 0)) (command "_.zoom" "_E") (command "_.regen") (command "mslide" "page54") );;;C:page54_mode ;;; (defun c:page55_mode() (c:refresh_all) (setup_page55) (make_line_1 "0" 1 '(0 0) '(1 0)) (base_len) (fractal_page55) (make_pt "0" 1 '(0 0)) (make_pt "0" 1 '(1 0)) (command "_.zoom" "_E") (command "_.regen") (command "mslide" "page55") );;;C:page55_mode ;;; (defun c:page64_mode() (c:refresh_all) (setup_page64) (initiator_page64) (make_pt "0" 1 '(0 0)) (make_pt "0" 1 '(1 0)) (command "_.zoom" "_E") (command "_.regen") (command "mslide" "page64") );;;C:page64_mode ;;; (defun c:page68_mode() (c:refresh_all) (setup_page68) (initiator_page68) (make_pt "0" 1 '(0 0)) (make_pt "0" 1 '(1 0)) (command "_.zoom" "_E") (command "_.regen") (command "mslide" "page68") );;;C:page68_mode ;;; (defun c:page70_mode() (c:refresh_all) (setup_page70) (initiator_page70) (make_pt "0" 1 '(0 0)) (make_pt "0" 1 '(1 0)) (command "_.zoom" "_E") (command "_.regen") (command "mslide" "page70") );;;C:page70_mode ;;; ;;; ;;; ;;main routine for page50 Fractals (defun c:page50() (setup_page50) (initiator_page50) ;draw the initiator drawing (base_len) ;set initial parameters (while (= (Yes_or_No "Go to next step ?") "_Y") (fractal_page50) ) (reset_sysvar) (princ) );;;page50----main ;;; ;;; (defun setup_page50() (setup_sysvar) (setvar "osmode" 0) ;;no snap mode (setq lower_left '(-0.5 -0.5) upper_right '(1.5 1.5)) (command "_.zoom" "_W" lower_left upper_right) ) ;;; ;;; (defun initiator_page50() (command "_.line" '(0 0) '(0 1) '(1 1) '(1 0) '(0 0) "") ;(command "_.zoom" "_EXTENT") ) ;drawing the next level of figures (defun fractal_page50( / x1 y1 x2 y2 line_set n index ent_list) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq n (sslength line_set)) ;;;repeat for all line elements (setq index 0) (repeat n ; loop for all line entities (setq ent_list (entget (ssname line_set index))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) ;basic geometric components (setq x1 (car pnt_1) y1 (cadr pnt_1) x2 (car pnt_2) y2 (cadr pnt_2) line_angle (angle pnt_1 pnt_2) ) (draw_lines_page50) ;delete old line used as reference (entdel (ssname line_set index)) (setq index (1+ index)) ) (setq base_length unit_len) ) ; (defun draw_lines_page50( / half_len q3_len right_angle left_angle pnt_10 pnt_12 pnt_20 pnt_21 pnt_22 pnt_30 pnt_31 ) (setq unit_len (/ base_length 4.0) half_len (* unit_len 2.0) q3_len (* unit_len 3.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) ) ;define new set of points (setq pnt_10 (polar pnt_1 line_angle unit_len) pnt_12 (polar pnt_10 left_angle unit_len) pnt_22 (polar pnt_12 line_angle unit_len) pnt_20 (polar pnt_1 line_angle half_len) pnt_21 (polar pnt_20 right_angle unit_len) Pnt_31 (polar pnt_21 line_angle unit_len) pnt_30 (polar pnt_1 line_angle q3_len) ) ;draw a new set of line elements (command "_.line" pnt_1 pnt_10 pnt_12 pnt_22 pnt_20 pnt_21 pnt_31 pnt_30 pnt_2 "") ) ; ;get the basic length of the line element ; (defun base_len( / ent_list line_set) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq ent_list (entget (ssname line_set 0))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) (setq base_length (distance pnt_1 pnt_2))(terpri) ) ; end of fr_002.lsp 10/01/98 Takaya Iwamoto ;;; ;;; FR_003.LSP ;;;updated May 05,2003 Takaya Iwamoto ;;; ;;; Command name : page52 ;fractal function page52 on Mandelbrot ; ;main routine for page52 Fractals ;;; (defun c:page52() (setup_page52) (initiator_page52) ;draw the initiator drawing (base_len) ;set initail parameters (while (= (Yes_or_No "Go to next step ?") "_Y") (fractal_page52) ) (reset_sysvar) (princ) );; PAGE52----main ;;; ;;; (defun setup_page52() (setup_sysvar) (setvar "OSMODE" 0) (setq lower_left '(-0.5 -0.5) upper_right '(1.5 1.5)) (command "_.zoom" "W" lower_left upper_right) (command "_.regen") ;(command "undo" "Control" "None") );; ;;; ;;; (defun initiator_page52() (command "_.line" '(0 0) '(0 1) '(1 1) '(1 0) '(0 0) "") ) ;;; ;drawing the next level of figures (defun fractal_Page52( / x1 x2 y1 y2 index n line_set ent_list) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq n (sslength line_set)) ;repeat for all line elements (setq index 0) (repeat n ; loop for all line entities (setq ent_list (entget (ssname line_set index))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) ;basic geometric components (setq x1 (car pnt_1) y1 (cadr pnt_1) x2 (car pnt_2) y2 (cadr pnt_2) line_angle (angle pnt_1 pnt_2) ) (draw_lines_Page52) ;delete old line used as reference (entdel (ssname line_set index)) (setq index (1+ index)) ) (setq base_length unit_len) ) ; (defun draw_lines_page52( / len_2 len_3 len_4 len_5 right_angle left_angle pnt_10 pnt_11 pnt_12 pnt_20 pnt_21 pnt_22 pnt_30 pnt_31 pnt_32 pnt_33 pnt_34 pnt_40 pnt_43 pnt_44 pnt_50 pnt_53 pnt_54 ) (setq unit_len (/ base_length 6.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) len_2 (* unit_len 2.0) len_3 (* unit_len 3.0) len_4 (* unit_len 4.0) len_5 (* unit_len 5.0) ) ;define new set of points (setq pnt_10 (polar pnt_1 line_angle unit_len) pnt_20 (polar pnt_1 line_angle len_2) pnt_30 (polar pnt_1 line_angle len_3) pnt_40 (polar pnt_1 line_angle len_4) pnt_50 (polar pnt_1 line_angle len_5) pnt_11 (polar pnt_10 left_angle len_2) pnt_12 (polar pnt_10 left_angle unit_len) pnt_21 (polar pnt_20 left_angle len_2) pnt_22 (polar pnt_20 left_angle unit_len) pnt_31 (polar pnt_30 left_angle len_2) pnt_32 (polar pnt_30 left_angle unit_len) pnt_34 (polar pnt_30 right_angle len_2) pnt_33 (polar pnt_30 right_angle unit_len) pnt_44 (polar pnt_40 right_angle len_2) pnt_43 (polar pnt_40 right_angle unit_len) pnt_54 (polar pnt_50 right_angle len_2) pnt_53 (polar pnt_50 right_angle unit_len) ) ;draw a new set of line elements (command "_.line" pnt_1 pnt_10 pnt_12 pnt_11 pnt_21 pnt_31 pnt_32 pnt_22 pnt_20 pnt_30 pnt_40 pnt_43 pnt_33 pnt_34 pnt_44 pnt_54 pnt_53 pnt_50 pnt_2 "") ) ; ;get the basic length of the line element ; (defun base_len( / ent_list line_set) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq ent_list (entget (ssname line_set 0))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) (setq base_length (distance pnt_1 pnt_2)) ) ; end of fr_003.lsp 10/01/98 Takaya Iwamoto ;fractal function page55 update using pline ; ;main routine for page55 Fractals ;;;update May 06, 2003 Takaya Iwamoto ;;; ;;; 1 for line ;;; 2 for pline Can be used only once before quiting. ;;; 0 for stop ;;; (defun c:page55() (setup_page55) (initiator_page55) ;draw the initiator drawing (base_len) ;set initail parameters (SETQ KEEP_GOING 1) (while (= (Yes_or_No "Go to next step ?") "_Y") (fractal_page55) ) (if (= (Yes_or_No "Use plines to finish ?") "_Y") (progn (setq keep_going 2) (fractal_page55) ) );;;enf of if loop (reset_sysvar) (princ) );;;page55---main ;;; ;;; (defun setup_page55() (setup_sysvar) (setvar "OSMODE" 0) (setq lower_left '(-0.5 -0.5) upper_right '(1.5 1.5)) (command "_.zoom" "_W" lower_left upper_right) ;(command "undo" "C" "N") ) ;;; ;;; (defun initiator_page55() (command "_.line" '(0 0) '(0 1) '(1 1) '(1 0) '(0 0) "") ;(command "_.zoom" "_EXTENT") ;(command "_.zoom" "_s" "5.0") ) ;;; ;drawing the next level of figures (defun fractal_page55( ) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq n (sslength line_set)) ;repeat for all line elements (setq index 0) (repeat n ; loop for all line entities (setq ent_list (entget (ssname line_set index))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) ;basic geometric components (setq x1 (car pnt_1) y1 (cadr pnt_1) x2 (car pnt_2) y2 (cadr pnt_2) line_angle (angle pnt_1 pnt_2) ) (if (= keep_going 1) (draw_lines_page55) (draw_plines_page55)) ;delete old line used as reference (entdel (ssname line_set index)) (setq index (1+ index)) ) (setq base_length unit_len) ) ;;; ; (defun draw_lines_page55( / len_2 len_3 len_4 len_5 len_6 len_7 len_8 right_angle left_angle pnt_11 pnt_12 pnt_13 pnt_20 pnt_21 pnt_22 pnt_23 pnt_30 pnt_31 pnt_32 pnt_33 pnt_34 pnt_40 pnt_41 pnt_42 pnt_43 pnt_44 pnt_50 pnt_51 pnt_52 pnt_60 pnt_61 pnt_62 pnt_63 pnt_64 pnt_70 pnt_71 pnt_72 pnt_73 pnt_74 pnt_80 pnt_81 pnt_82 pnt_83 pnt_91 pnt_92 pnt_93 ) (setq unit_len (/ base_length 8.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) len_2 (* unit_len 2.0) len_3 (* unit_len 3.0) len_4 (* unit_len 4.0) len_5 (* unit_len 5.0) len_6 (* unit_len 6.0) len_7 (* unit_len 7.0) ) ;define new set of points (setq pnt_20 (polar pnt_1 line_angle unit_len) pnt_30 (polar pnt_1 line_angle len_2) pnt_40 (polar pnt_1 line_angle len_3) pnt_50 (polar pnt_1 line_angle len_4) pnt_60 (polar pnt_1 line_angle len_5) pnt_70 (polar pnt_1 line_angle len_6) pnt_80 (polar pnt_1 line_angle len_7) pnt_11 (polar pnt_1 left_angle unit_len) pnt_12 (polar pnt_1 left_angle len_2) pnt_13 (polar pnt_1 left_angle len_3) pnt_21 (polar pnt_20 left_angle unit_len) pnt_22 (polar pnt_20 left_angle len_2) pnt_23 (polar pnt_20 left_angle len_3) pnt_31 (polar pnt_30 left_angle unit_len) pnt_32 (polar pnt_30 left_angle len_2) pnt_33 (polar pnt_30 left_angle len_3) pnt_34 (polar pnt_30 left_angle len_4) pnt_41 (polar pnt_40 left_angle unit_len) pnt_42 (polar pnt_40 left_angle len_2) pnt_43 (polar pnt_40 left_angle len_3) pnt_44 (polar pnt_40 left_angle len_4) pnt_51 (polar pnt_50 left_angle unit_len) pnt_52 (polar pnt_50 right_angle unit_len) pnt_61 (polar pnt_60 right_angle unit_len) pnt_62 (polar pnt_60 right_angle len_2) pnt_63 (polar pnt_60 right_angle len_3) pnt_64 (polar pnt_60 right_angle len_4) pnt_71 (polar pnt_70 right_angle unit_len) pnt_72 (polar pnt_70 right_angle len_2) pnt_73 (polar pnt_70 right_angle len_3) pnt_74 (polar pnt_70 right_angle len_4) pnt_81 (polar pnt_80 right_angle unit_len) pnt_82 (polar pnt_80 right_angle len_2) pnt_83 (polar pnt_80 right_angle len_3) pnt_91 (polar pnt_2 right_angle unit_len) pnt_92 (polar pnt_2 right_angle len_2) pnt_93 (polar pnt_2 right_angle len_3) ) ;draw a new set of line elements (command "_.line" pnt_1 pnt_11 pnt_21 pnt_22 pnt_12 pnt_13 pnt_23 pnt_33 pnt_34 pnt_44 pnt_43 pnt_42 pnt_32 pnt_31 pnt_41 pnt_51 pnt_50 pnt_52 pnt_61 pnt_71 pnt_72 pnt_62 pnt_63 pnt_64 pnt_74 pnt_73 pnt_83 pnt_93 pnt_92 pnt_82 pnt_81 pnt_91 pnt_2 "") ) ; ; (defun draw_plines_page55( / len_2 len_3 len_4 len_5 len_6 len_7 len_8 right_angle left_angle pnt_11 pnt_12 pnt_13 pnt_20 pnt_21 pnt_22 pnt_23 pnt_30 pnt_31 pnt_32 pnt_33 pnt_34 pnt_40 pnt_41 pnt_42 pnt_43 pnt_44 pnt_50 pnt_51 pnt_52 pnt_60 pnt_61 pnt_62 pnt_63 pnt_64 pnt_70 pnt_71 pnt_72 pnt_73 pnt_74 pnt_80 pnt_81 pnt_82 pnt_83 pnt_91 pnt_92 pnt_93 ) (setq unit_len (/ base_length 8.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) len_2 (* unit_len 2.0) len_3 (* unit_len 3.0) len_4 (* unit_len 4.0) len_5 (* unit_len 5.0) len_6 (* unit_len 6.0) len_7 (* unit_len 7.0) ) ;define new set of points (setq pnt_20 (polar pnt_1 line_angle unit_len) pnt_30 (polar pnt_1 line_angle len_2) pnt_40 (polar pnt_1 line_angle len_3) pnt_50 (polar pnt_1 line_angle len_4) pnt_60 (polar pnt_1 line_angle len_5) pnt_70 (polar pnt_1 line_angle len_6) pnt_80 (polar pnt_1 line_angle len_7) pnt_11 (polar pnt_1 left_angle unit_len) pnt_12 (polar pnt_1 left_angle len_2) pnt_13 (polar pnt_1 left_angle len_3) pnt_21 (polar pnt_20 left_angle unit_len) pnt_22 (polar pnt_20 left_angle len_2) pnt_23 (polar pnt_20 left_angle len_3) pnt_31 (polar pnt_30 left_angle unit_len) pnt_32 (polar pnt_30 left_angle len_2) pnt_33 (polar pnt_30 left_angle len_3) pnt_34 (polar pnt_30 left_angle len_4) pnt_41 (polar pnt_40 left_angle unit_len) pnt_42 (polar pnt_40 left_angle len_2) pnt_43 (polar pnt_40 left_angle len_3) pnt_44 (polar pnt_40 left_angle len_4) pnt_51 (polar pnt_50 left_angle unit_len) pnt_52 (polar pnt_50 right_angle unit_len) pnt_61 (polar pnt_60 right_angle unit_len) pnt_62 (polar pnt_60 right_angle len_2) pnt_63 (polar pnt_60 right_angle len_3) pnt_64 (polar pnt_60 right_angle len_4) pnt_71 (polar pnt_70 right_angle unit_len) pnt_72 (polar pnt_70 right_angle len_2) pnt_73 (polar pnt_70 right_angle len_3) pnt_74 (polar pnt_70 right_angle len_4) pnt_81 (polar pnt_80 right_angle unit_len) pnt_82 (polar pnt_80 right_angle len_2) pnt_83 (polar pnt_80 right_angle len_3) pnt_91 (polar pnt_2 right_angle unit_len) pnt_92 (polar pnt_2 right_angle len_2) pnt_93 (polar pnt_2 right_angle len_3) ) ;draw a new set of line elements (command "_.pline" pnt_1 pnt_11 pnt_21 pnt_22 pnt_12 pnt_13 pnt_23 pnt_33 pnt_34 pnt_44 pnt_43 pnt_42 pnt_32 pnt_31 pnt_41 pnt_51 pnt_50 pnt_52 pnt_61 pnt_71 pnt_72 pnt_62 pnt_63 pnt_64 pnt_74 pnt_73 pnt_83 pnt_93 pnt_92 pnt_82 pnt_81 pnt_91 pnt_2 "") ) ;;; ;get the basic length of the line element ; (defun base_len( / ent_list line_set) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq ent_list (entget (ssname line_set 0))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) (setq base_length (distance pnt_1 pnt_2)) ) ; end of fr_005.lsp 10/01/98 Takaya Iwamoto ;fractal function page54 update using pline ; ;main routine for page54 Fractals (defun c:page54() (setup_page54) (initiator) ;draw the initiator drawing (base_len) ;set initail parameters (SETQ KEEP_GOING 1) (while (= (Yes_or_No "Go to next step ?") "_Y") (fractal_Page54) ) (if (= (Yes_or_No "Use plines to finish ?") "_Y") (progn (setq keep_going 2) (fractal_page54) ) );;;enf of if loop (reset_sysvar) (princ) ) ;;; ;;; (defun setup_page54() (setup_sysvar) (setvar "OSMODE" 0) (setq lower_left '(-1.5 -1.5) upper_right '(1.5 1.5)) (command "_.zoom" "_W" lower_left upper_right) ;(command "undo" "C" "N") ) ;;; (defun initiator() (command "_.line" '(0 0) '(0 1) '(1 1) '(1 0) '(0 0) "") ;(command "_.zoom" "_EXTENT") ;(command "_.zoom" "_s" "5.0") ) ;drawing the next level of figures (defun fractal_page54( ) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq n (sslength line_set)) ;repeat for all line elements (setq index 0) (repeat n ; loop for all line entities (setq ent_list (entget (ssname line_set index))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) ;basic geometric components (setq x1 (car pnt_1) y1 (cadr pnt_1) x2 (car pnt_2) y2 (cadr pnt_2) line_angle (angle pnt_1 pnt_2) ) (if (= keep_going 1) (draw_lines_page54) (draw_plines_page54)) ;delete old line used as reference (entdel (ssname line_set index)) (setq index (1+ index)) ) (setq base_length unit_len) ) ; (defun draw_lines_page54( / len_2 len_3 len_4 len_5 len_6 len_7 len_8 len_8 len_9 len_10 len_11 len_12 len_13 right_angle left_angle pnt_20 pnt_21 pnt_30 pnt_31 pnt_37 pnt_38 pnt_40 pnt_41 pnt_42 pnt_43 pnt_47 pnt_48 pnt_50 pnt_51 pnt_52 pnt_53 pnt_57 pnt_58 pnt_59 pnt_510 pnt_60 pnt_61 pnt_62 pnt_63 pnt_64 pnt_67 pnt_68 pnt_69 pnt_610 pnt_611 pnt_70 pnt_71 pnt_72 pnt_73 pnt_74 pnt_75 pnt_76 pnt_77 pnt_78 pnt_79 pnt_710 pnt_711 pnt_80 pnt_81 pnt_82 pnt_83 pnt_84 pnt_85 pnt_86 pnt_87 pnt_88 pnt_89 pnt_810 pnt_811 pnt_812 pnt_90 pnt_91 pnt_92 pnt_93 pnt_94 pnt_95 pnt_87 pnt_88 pnt_89 pnt_810 pnt_811 pnt_812 pnt_100 pnt_101 pnt_102 pnt_103 pnt_104 pnt_105 pnt_107 pnt_108 pnt_109 pnt_1010 pnt_110 pnt_111 pnt_112 pnt_113 pnt_114 pnt_117 pnt_118 pnt_119 pnt_120 pnt_121 pnt_122 pnt_127 pnt_128 pnt_129 pnt_130 pnt_131 pnt_132 pnt_107 pnt_140 pnt_147 ) (setq unit_len (/ base_length 14.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) len_2 (* unit_len 2.0) len_3 (* unit_len 3.0) len_4 (* unit_len 4.0) len_5 (* unit_len 5.0) len_6 (* unit_len 6.0) len_7 (* unit_len 7.0) len_8 (* unit_len 8.0) len_9 (* unit_len 9.0) len_10 (* unit_len 10.0) len_11 (* unit_len 11.0) len_12 (* unit_len 12.0) len_13 (* unit_len 13.0) ) ;define new set of points (setq pnt_20 (polar pnt_1 line_angle unit_len) pnt_30 (polar pnt_1 line_angle len_2) pnt_40 (polar pnt_1 line_angle len_3) pnt_50 (polar pnt_1 line_angle len_4) pnt_60 (polar pnt_1 line_angle len_5) pnt_70 (polar pnt_1 line_angle len_6) pnt_80 (polar pnt_1 line_angle len_7) pnt_90 (polar pnt_1 line_angle len_8) pnt_100 (polar pnt_1 line_angle len_9) pnt_110 (polar pnt_1 line_angle len_10) pnt_120 (polar pnt_1 line_angle len_11) pnt_130 (polar pnt_1 line_angle len_12) pnt_140 (polar pnt_1 line_angle len_13) ;pnt_2 pnt_21 (polar pnt_20 left_angle unit_len) ;pnt_3 pnt_31 (polar pnt_30 left_angle unit_len) pnt_37 (polar pnt_30 right_angle unit_len) pnt_38 (polar pnt_30 right_angle len_2) ;pnt_4 pnt_41 (polar pnt_40 left_angle unit_len) pnt_42 (polar pnt_40 left_angle len_2) pnt_43 (polar pnt_40 left_angle len_3) pnt_47 (polar pnt_40 right_angle unit_len) pnt_48 (polar pnt_40 right_angle len_2) ;pnt_5 pnt_51 (polar pnt_50 left_angle unit_len) pnt_52 (polar pnt_50 left_angle len_2) pnt_53 (polar pnt_50 left_angle len_3) pnt_57 (polar pnt_50 right_angle unit_len) pnt_58 (polar pnt_50 right_angle len_2) pnt_59 (polar pnt_50 right_angle len_3) pnt_510 (polar pnt_50 right_angle len_4) ;pnt_60 pnt_61 (polar pnt_60 left_angle unit_len) pnt_62 (polar pnt_60 left_angle len_2) pnt_63 (polar pnt_60 left_angle len_3) pnt_64 (polar pnt_60 left_angle len_4) pnt_67 (polar pnt_60 right_angle unit_len) pnt_68 (polar pnt_60 right_angle len_2) pnt_69 (polar pnt_60 right_angle len_3) pnt_610 (polar pnt_60 right_angle len_4) pnt_611 (polar pnt_60 right_angle len_5) ;pnt_70 pnt_71 (polar pnt_70 left_angle unit_len) pnt_72 (polar pnt_70 left_angle len_2) pnt_73 (polar pnt_70 left_angle len_3) pnt_74 (polar pnt_70 left_angle len_4) pnt_75 (polar pnt_70 left_angle len_5) pnt_76 (polar pnt_70 left_angle len_6) pnt_77 (polar pnt_70 right_angle unit_len) pnt_78 (polar pnt_70 right_angle len_2) pnt_79 (polar pnt_70 right_angle len_3) pnt_710 (polar pnt_70 right_angle len_4) pnt_711 (polar pnt_70 right_angle len_5) ;pnt_80 pnt_81 (polar pnt_80 left_angle unit_len) pnt_82 (polar pnt_80 left_angle len_2) pnt_83 (polar pnt_80 left_angle len_3) pnt_84 (polar pnt_80 left_angle len_4) pnt_85 (polar pnt_80 left_angle len_5) pnt_86 (polar pnt_80 left_angle len_6) pnt_87 (polar pnt_80 right_angle unit_len) pnt_88 (polar pnt_80 right_angle len_2) pnt_89 (polar pnt_80 right_angle len_3) pnt_810 (polar pnt_80 right_angle len_4) pnt_811 (polar pnt_80 right_angle len_5) pnt_812 (polar pnt_80 right_angle len_6) ;pnt_90 pnt_91 (polar pnt_90 left_angle unit_len) pnt_92 (polar pnt_90 left_angle len_2) pnt_93 (polar pnt_90 left_angle len_3) pnt_94 (polar pnt_90 left_angle len_4) pnt_95 (polar pnt_90 left_angle len_5) pnt_97 (polar pnt_90 right_angle unit_len) pnt_98 (polar pnt_90 right_angle len_2) pnt_99 (polar pnt_90 right_angle len_3) pnt_910 (polar pnt_90 right_angle len_4) pnt_911 (polar pnt_90 right_angle len_5) pnt_912 (polar pnt_90 right_angle len_6) ;pnt_10 pnt_101 (polar pnt_100 left_angle unit_len) pnt_102 (polar pnt_100 left_angle len_2) pnt_103 (polar pnt_100 left_angle len_3) pnt_104 (polar pnt_100 left_angle len_4) pnt_105 (polar pnt_100 left_angle len_5) pnt_107 (polar pnt_100 right_angle unit_len) pnt_108 (polar pnt_100 right_angle len_2) pnt_109 (polar pnt_100 right_angle len_3) pnt_1010 (polar pnt_100 right_angle len_4) ;pnt_11 pnt_111 (polar pnt_110 left_angle unit_len) pnt_112 (polar pnt_110 left_angle len_2) pnt_113 (polar pnt_110 left_angle len_3) pnt_114 (polar pnt_110 left_angle len_4) pnt_117 (polar pnt_110 right_angle unit_len) pnt_118 (polar pnt_110 right_angle len_2) pnt_119 (polar pnt_110 right_angle len_3) pnt_1110 (polar pnt_110 right_angle len_4) ;pnt_12 pnt_121 (polar pnt_120 left_angle unit_len) pnt_122 (polar pnt_120 left_angle len_2) pnt_127 (polar pnt_120 right_angle unit_len) pnt_128 (polar pnt_120 right_angle len_2) pnt_129 (polar pnt_120 right_angle len_3) ;pnt_13 pnt_131 (polar pnt_130 left_angle unit_len) pnt_132 (polar pnt_130 left_angle len_2) pnt_137 (polar pnt_130 right_angle unit_len) ;pnt_14 pnt_147 (polar pnt_140 right_angle unit_len) ) ;draw a new set of line elements (command "_.line" pnt_1 pnt_20 pnt_21 pnt_31 pnt_30 pnt_37 pnt_38 pnt_48 pnt_47 pnt_40 pnt_41 pnt_51 pnt_61 pnt_62 pnt_52 pnt_42 pnt_43 pnt_53 pnt_63 pnt_64 pnt_74 pnt_75 pnt_76 pnt_86 pnt_85 pnt_95 pnt_105 pnt_104 pnt_114 pnt_113 pnt_103 pnt_93 pnt_94 pnt_84 pnt_83 pnt_73 pnt_72 pnt_82 pnt_92 pnt_102 pnt_112 pnt_111 pnt_110 pnt_100 pnt_101 pnt_91 pnt_81 pnt_71 pnt_70 pnt_80 pnt_90 pnt_97 pnt_87 pnt_77 pnt_67 pnt_60 pnt_50 pnt_57 pnt_58 pnt_68 pnt_78 pnt_88 pnt_98 pnt_99 pnt_89 pnt_810 pnt_710 pnt_79 pnt_69 pnt_59 pnt_510 pnt_610 pnt_611 pnt_711 pnt_811 pnt_812 pnt_912 pnt_911 pnt_910 pnt_1010 pnt_109 pnt_119 pnt_129 pnt_128 pnt_118 pnt_108 pnt_107 pnt_117 pnt_127 pnt_120 pnt_121 pnt_122 pnt_132 pnt_131 pnt_130 pnt_137 pnt_147 pnt_140 pnt_2 "") ) ; ; (defun draw_plines_page54( / len_2 len_3 len_4 len_5 len_6 len_7 len_8 right_angle left_angle pnt_11 pnt_12 pnt_13 pnt_20 pnt_21 pnt_22 pnt_23 pnt_30 pnt_31 pnt_32 pnt_33 pnt_34 pnt_40 pnt_41 pnt_42 pnt_43 pnt_44 pnt_50 pnt_51 pnt_52 pnt_60 pnt_61 pnt_62 pnt_63 pnt_64 pnt_70 pnt_71 pnt_72 pnt_73 pnt_74 pnt_80 pnt_81 pnt_82 pnt_83 pnt_91 pnt_92 pnt_93 ) (setq unit_len (/ base_length 8.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) len_2 (* unit_len 2.0) len_3 (* unit_len 3.0) len_4 (* unit_len 4.0) len_5 (* unit_len 5.0) len_6 (* unit_len 6.0) len_7 (* unit_len 7.0) ) ;define new set of points (setq pnt_20 (polar pnt_1 line_angle unit_len) pnt_30 (polar pnt_1 line_angle len_2) pnt_40 (polar pnt_1 line_angle len_3) pnt_50 (polar pnt_1 line_angle len_4) pnt_60 (polar pnt_1 line_angle len_5) pnt_70 (polar pnt_1 line_angle len_6) pnt_80 (polar pnt_1 line_angle len_7) pnt_11 (polar pnt_1 left_angle unit_len) pnt_12 (polar pnt_1 left_angle len_2) pnt_13 (polar pnt_1 left_angle len_3) pnt_21 (polar pnt_20 left_angle unit_len) pnt_22 (polar pnt_20 left_angle len_2) pnt_23 (polar pnt_20 left_angle len_3) pnt_31 (polar pnt_30 left_angle unit_len) pnt_32 (polar pnt_30 left_angle len_2) pnt_33 (polar pnt_30 left_angle len_3) pnt_34 (polar pnt_30 left_angle len_4) pnt_41 (polar pnt_40 left_angle unit_len) pnt_42 (polar pnt_40 left_angle len_2) pnt_43 (polar pnt_40 left_angle len_3) pnt_44 (polar pnt_40 left_angle len_4) pnt_51 (polar pnt_50 left_angle unit_len) pnt_52 (polar pnt_50 right_angle unit_len) pnt_61 (polar pnt_60 right_angle unit_len) pnt_62 (polar pnt_60 right_angle len_2) pnt_63 (polar pnt_60 right_angle len_3) pnt_64 (polar pnt_60 right_angle len_4) pnt_71 (polar pnt_70 right_angle unit_len) pnt_72 (polar pnt_70 right_angle len_2) pnt_73 (polar pnt_70 right_angle len_3) pnt_74 (polar pnt_70 right_angle len_4) pnt_81 (polar pnt_80 right_angle unit_len) pnt_82 (polar pnt_80 right_angle len_2) pnt_83 (polar pnt_80 right_angle len_3) pnt_91 (polar pnt_2 right_angle unit_len) pnt_92 (polar pnt_2 right_angle len_2) pnt_93 (polar pnt_2 right_angle len_3) ) ;draw a new set of line elements (command "_.pline" pnt_1 pnt_11 pnt_21 pnt_22 pnt_12 pnt_13 pnt_23 pnt_33 pnt_34 pnt_44 pnt_43 pnt_42 pnt_32 pnt_31 pnt_41 pnt_51 pnt_50 pnt_52 pnt_61 pnt_71 pnt_72 pnt_62 pnt_63 pnt_64 pnt_74 pnt_73 pnt_83 pnt_93 pnt_92 pnt_82 pnt_81 pnt_91 pnt_2 "") ) ;get the basic length of the line element ; (defun base_len( / ent_list line_set) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq ent_list (entget (ssname line_set 0))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) (setq base_length (distance pnt_1 pnt_2)) ) ; end of fr_006.lsp 10/01/98 Takaya Iwamoto ;fractal function page68 update using pline ; ;main routine for page68 Fractals (defun c:page68() (setup_Page68) (initiator_page68) ;draw the initiator drawing ;(base_len) ;set initial parameters (SETQ KEEP_GOING 1) (while (= (Yes_or_No "Go to next step ?") "_Y") (fractal_page68) ) ; (setq keep_going 2) ; (fractal_page68) (if (= (Yes_or_No "Round-off sharp corners ?") "_Y") (fractal_2) ) (reset_sysvar) (princ) ) ;;; ;;; (defun setup_page68() (setup_sysvar) (setvar "OSMODE" 0) (setq lower_left '(-0.5 -0.5) upper_right '(1.5 1.5)) (command "_.zoom" "W" lower_left upper_right) ;(command "undo" "C" "N") ) ;;; (defun initiator_page68( / base_length unit_len len_2 line_angle left_angle rigth_angle left_60 rigth_60 pnt_2l pnt_2r pnt_30 pnt_3l pnt_3r pnt_40 pnt_4r pnt_4l pnt_50 pnt_5r pnt_5l ) ;basic geometric components (setq base_length 1.0 line_angle 0.0 ) (setq unit_len (/ base_length 3.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) left_60 (+ line_angle (dtr 60.)) right_60 (- line_angle (dtr 60.)) len_2 (* unit_len 2.0) pnt_0 '(0 0) ) ;define new set of points (setq pnt_30 (polar pnt_0 line_angle unit_len) pnt_40 (polar pnt_0 line_angle len_2) pnt_2l (polar pnt_0 left_60 unit_len) pnt_2r (polar pnt_0 left_60 unit_len) pnt_3l (polar pnt_0 left_60 len_2) pnt_3r (polar pnt_0 right_60 len_2) pnt_4l (polar pnt_30 left_60 len_2) pnt_4r (polar pnt_30 right_60 len_2) pnt_5l (polar pnt_40 left_60 unit_len) pnt_5r (polar pnt_40 right_60 unit_len) ) (command "_.pline" '(0 0) pnt_2l pnt_3l pnt_4l pnt_5l pnt_30 pnt_40 '(1 0) "") ;(command "_.zoom" "_EXTENT") ;(command "_.zoom" "_s" "5.0") ) ;drawing the next level of figures (defun fractal_page68( ) (setq line_set (ssget "_X" (list (cons 0 "lwpolyline")))) (setq n (sslength line_set)) ;repeat for all line elements (setq index 0) (repeat n ; loop for all line entities (setq this_entity (ssname line_set index) ) (setq this_list (pl_vertices this_entity) pnt_1 (nth 0 this_list) pnt_2 (nth 1 this_list) pnt_3 (nth 2 this_list) pnt_4 (nth 3 this_list) pnt_5 (nth 4 this_list) pnt_6 (nth 5 this_list) pnt_7 (nth 6 this_list) pnt_8 (nth 7 this_list) ) (setq direction 0) (setq direction (right_or_left pnt_1 pnt_8 pnt_3) left 1 right -1 ) (if (= direction left) (progn (pline_page68 1 pnt_1 pnt_2) (pline_page68 1 pnt_3 pnt_2) (pline_page68 1 pnt_4 pnt_3) (pline_page68 1 pnt_5 pnt_4) (pline_page68 2 pnt_6 pnt_5) (pline_page68 1 pnt_6 pnt_7) (pline_page68 1 pnt_8 pnt_7) ) ) (if (= direction right) (progn (pline_page68 2 pnt_1 pnt_2) (pline_page68 2 pnt_3 pnt_2) (pline_page68 2 pnt_4 pnt_3) (pline_page68 2 pnt_5 pnt_4) (pline_page68 1 pnt_6 pnt_5) (pline_page68 2 pnt_6 pnt_7) (pline_page68 2 pnt_8 pnt_7) ) ) ;(if (= keep_going 1) (draw_lines_page68) (draw_plines_page68)) ;delete old line used as reference (entdel this_entity) (setq index (1+ index)) ) ) ;utility function to decide which side the input point lies w.r.t. ref.line ;defined by pnt_base_0 and pnt_base_1 (defun right_or_left(pnt_base_s pnt_base_e pnt_ref / vec_ab vec_ac result direct ) (setq vec_ab (makevec pnt_base_s pnt_base_e) vec_ac (makevec pnt_base_s pnt_ref)) (setq result (vec_prod vec_ab vec_ac)) (if (>= result 0.0) (setq direct 1) (setq direct -1)) ) ; ;utility function to make a vector given two points (defun makevec(pnt_a pnt_b / x1 y1 x2 y2 del_x pnt_new ) (setq x1 (car pnt_a) y1 (cadr pnt_a) x2 (car pnt_b) y2 (cadr pnt_b) del_x (- x2 x1) del_y (- y2 y1) pnt_new (list del_x del_y) ) ) ; ;utiltiy function to compute vector product ;given two vector data (defun vec_prod(vec_1 vec_2 / a1 a2 b1 b2 prod ) (setq a1 (car vec_1) b1 (cadr vec_1) a2 (car vec_2) b2 (cadr vec_2) prod (- (* a1 b2) (* a2 b1)) ) ) ; (defun pline_page68(pattern pnt_s pnt_e / base_length unit_length len2 line_angle right_angle left_angle left_60 right_60 pnt_2l pnt_2r pnt_30 pnt_3l pnt_3r pnt_40 pnt_4l pnt_4r pnt_5l pnt_5r ) ;basic geometric components (setq base_length (distance pnt_s pnt_e) line_angle (angle pnt_s pnt_e) ) (setq unit_len (/ base_length 3.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) left_60 (+ line_angle (dtr 60.)) right_60 (- line_angle (dtr 60.)) len_2 (* unit_len 2.0) ) ;define new set of points (setq pnt_30 (polar pnt_s line_angle unit_len) pnt_40 (polar pnt_s line_angle len_2) pnt_2l (polar pnt_s left_60 unit_len) pnt_2r (polar pnt_s right_60 unit_len) pnt_3l (polar pnt_s left_60 len_2) pnt_3r (polar pnt_s right_60 len_2) pnt_4l (polar pnt_30 left_60 len_2) pnt_4r (polar pnt_30 right_60 len_2) pnt_5l (polar pnt_40 left_60 unit_len) pnt_5r (polar pnt_40 right_60 unit_len) ) (if (= pattern 1) (command "_.pline" pnt_s pnt_2r pnt_3r pnt_4r pnt_5r pnt_30 pnt_40 pnt_e "")) (if (= pattern 2) (command "_.pline" pnt_s pnt_2l pnt_3l pnt_4l pnt_5l pnt_30 pnt_40 pnt_e "")) ) ;The final step ;rounding-off sharp vertices ;replace line segments by 1/6-th arc segments. (defun fractal_2( ) (setq line_set (ssget "_X" (list (cons 0 "lwpolyline")))) (setq n (sslength line_set)) ;repeat for all line elements (setq index 0) (repeat n ; loop for all line entities (setq this_entity (ssname line_set index) ) (setq this_list (pl_vertices this_entity) pnt_1 (nth 0 this_list) pnt_2 (nth 1 this_list) pnt_3 (nth 2 this_list) pnt_4 (nth 3 this_list) pnt_5 (nth 4 this_list) pnt_6 (nth 5 this_list) pnt_7 (nth 6 this_list) pnt_8 (nth 7 this_list) ) (setq direction 0) (setq direction (right_or_left pnt_1 pnt_8 pnt_3) left 1 right -1 ) (if (= direction left) (progn (round_off right pnt_1 pnt_2) (round_off right pnt_3 pnt_2) (round_off right pnt_4 pnt_3) (round_off right pnt_5 pnt_4) (round_off left pnt_6 pnt_5) (round_off right pnt_6 pnt_7) (round_off right pnt_8 pnt_7) ) ) (if (= direction right) (progn (round_off left pnt_1 pnt_2) (round_off left pnt_3 pnt_2) (round_off left pnt_4 pnt_3) (round_off left pnt_5 pnt_4) (round_off right pnt_6 pnt_5) (round_off left pnt_6 pnt_7) (round_off left pnt_8 pnt_7) ) ) (entdel this_entity) (setq index (1+ index)) ) ) ;final step ;instead of pline, draw an arc (defun round_off(line_dir pnt_s pnt_e / base_length unit_length len2 line_angle right_angle left_angle left_60 right_60 ) ;basic geometric components (setq base_length (distance pnt_s pnt_e) line_angle (angle pnt_s pnt_e) unit_len (/ base_length 3.0) left_angle (+ line_angle (dtr 90.)) right_angle(- line_angle (dtr 90.)) left_60 (+ line_angle (dtr 60.)) right_60 (- line_angle (dtr 60.)) len_2 (* unit_len 2.0) ) ;define a center of an arc (setq center_left (polar pnt_s left_60 base_length) center_right (polar pnt_s right_60 base_length) ) (if (= line_dir left) (command "_.arc" "_CE" center_right pnt_e pnt_s)) (if (= line_dir right) (command "_.arc" "_CE" center_left pnt_s pnt_e)) ) ; This routine accepts a polyline and returns a list of the polyline's vertices. (defun pl_vertices (pl_entity / pline ;entity list for pl_entity nodes ;number of nodes the_rest ;list starting with the first node cnt ;counter index ;index for node location cur_list ;node list pline_list ;the node list ) (setq pline (entget pl_entity)) ;entity list for the pline (setq nodes (cdr (assoc 90 pline)) the_rest (member (assoc 10 pline) pline) cnt 0 pline_list nil ) (repeat nodes (setq index (* 4 cnt) ;every 4th location cur_list (list (cdr (nth index the_rest))) pline_list (append pline_list cur_list) cnt (1+ cnt) ) ) pline_list ;return list ) ; ; end of fr_007.lsp 10/22/98 Takaya Iwamoto ;;; ;fr_009.lsp ;fractal function page64 update using pline ; ;main routine for page70 Fractals (defun c:page70() (setup_page70) (initiator_page70) ;draw the initiator drawing (SETQ KEEP_GOING 1) (while (= (Yes_or_No "Go to next step ?") "_Y") (fractal_page70) ) (if (= (Yes_or_No "Use plines to finish ?") "_Y") (progn (setq keep_going 2) (fractal_page70) ) );;;enf of if loop (reset_sysvar) (princ) );;; ;;; (defun setup_page70() (setup_sysvar) (setvar "osmode" 0) ;;no snap mode (setq lower_left '(-0.5 -0.5) upper_right '(1.5 1.5)) (command "_.zoom" "W" lower_left upper_right) ) ;;; (defun initiator_page70( / pt_1 pt_2 pt_3 pt_4 pt_5 pt_6 pt_7 pt_8) (setq ref_factor (sqrt 7.0) ref_tilt (atan (/ (sqrt 3.0) 5.0)) ref_len (/ 1.0 ref_factor) ref_height (* ref_len (sqrt 0.75)) dtr_30_s (- (dtr 30.) ref_tilt) dtr_60_s (- (dtr 60.) ref_tilt) dtr_90_s (- (dtr 90.) ref_tilt) ) (setq pt_1 '(0 0) pt_2 (polar pt_1 (- ref_tilt) ref_len) pt_3 (polar pt_2 dtr_60_s ref_len ) pt_4 (polar pt_1 dtr_60_s ref_len) pt_5 (polar pt_1 dtr_90_s (* 2.0 ref_height)) pt_6 (polar pt_2 dtr_90_s (* 2.0 ref_height)) pt_7 (polar pt_2 dtr_60_s (* 2.0 ref_len)) pt_8 (polar pt_2 dtr_30_s (* 2.0 ref_height)) ) (command "_.pline" pt_1 pt_2 pt_3 pt_4 pt_5 pt_6 pt_7 pt_8 "") ;(command "_.zoom" "_EXTENT") ;(command "_.zoom" "_s" "5.0") ) ;drawing the next level of figures (defun fractal_page70( ) (setq line_set (ssget "_X" (list (cons 0 "lwpolyline")))) (setq n (sslength line_set)) ;repeat for all line elements (setq index 0) (repeat n ; loop for all polyline entities (setq this_entity (ssname line_set index) ) (setq this_list (pl_vertices this_entity) point_1 (nth 0 this_list) point_2 (nth 1 this_list) point_3 (nth 2 this_list) point_4 (nth 3 this_list) point_5 (nth 4 this_list) point_6 (nth 5 this_list) point_7 (nth 6 this_list) point_8 (nth 7 this_list) ) ;basic geometric components (pattern_1 point_1 point_2) (pattern_1 point_3 point_2) (pattern_1 point_4 point_3) (pattern_1 point_4 point_5) (pattern_1 point_5 point_6) (pattern_1 point_6 point_7) (pattern_1 point_8 point_7) ;delete old line used as reference (entdel this_entity) (setq index (1+ index)) ) ) ; (defun pattern_1(pnt_s pnt_e / line_angle base_length unit_len unit_height dtr_60 dtr_90 pnt_2 pnt_3 pnt_4 pnt_5 pnt_6 pnt_7 tilt ) (setq line_angle (angle pnt_s pnt_e) base_length (distance pnt_s pnt_e) unit_len (/ base_length (sqrt 7.0)) unit_height (* unit_len (sqrt 0.75)) dtr_60 (+ line_angle dtr_60_s) dtr_90 (+ line_angle dtr_90_s) tilt (- line_angle ref_tilt) ) ;define new set of points (setq pnt_2 (polar pnt_s tilt unit_len) pnt_3 (polar pnt_2 dtr_60 unit_len ) pnt_4 (polar pnt_s dtr_60 unit_len) pnt_5 (polar pnt_s dtr_90 (* 2.0 unit_height)) pnt_6 (polar pnt_2 dtr_90 (* 2.0 unit_height)) pnt_7 (polar pnt_2 dtr_60 (* 2.0 unit_len)) ) (command "_.pline" pnt_s pnt_2 pnt_3 pnt_4 pnt_5 pnt_6 pnt_7 pnt_e "") ) ; ; ; This routine accepts a polyline and returns a list of the polyline's vertices. (defun pl_vertices (pl_entity / pline ;entity list for pl_entity nodes ;number of nodes the_rest ;list starting with the first node cnt ;counter n_index ;index for node location cur_list ;node list pline_list ;the node list ) (setq pline (entget pl_entity)) ;entity list for the pline (setq nodes (cdr (assoc 90 pline)) the_rest (member (assoc 10 pline) pline) cnt 0 pline_list nil ) (repeat nodes (setq n_index (* 4 cnt) ;every 4th location cur_list (list (cdr (nth n_index the_rest))) pline_list (append pline_list cur_list) cnt (1+ cnt) ) ) pline_list ;return list ) ; ; end of fr_009.lsp 10/11/98 Takaya Iwamoto ;;; ;;;FR_008.LSP ;;; ;fractal function page64 update using pline ;Polya's Triangle Sweep ;main routine for page64 Fractals ;;;updated May,06,2003 Takaya Iwamoto ;;; ;;; ;;; (defun c:page64() (setup_page64) (initiator_page64) ;draw the initiator drawing ;(base_len) ;set initail parameters ;(setq dummy (getint "\nStart Now ?")) (SETQ KEEP_GOING 1) (while (= (Yes_or_No "Go to next step ?") "_Y") (fractal_page64) ) (if (= (Yes_or_No "Use plines to finish ?") "_Y") (progn (setq keep_going 2) (fractal_page64) ) );;;enf of if loop ;(setq keep_going 2) ;(fractal_page64) (reset_sysvar) (princ) ) ;;; ;;; (defun setup_page64() (setup_sysvar) (setvar "OSMODE" 0) (setq lower_left '(-0.5 -0.5) upper_right '(1.5 1.5)) (command "_.zoom" "W" lower_left upper_right) ;(command "undo" "C" "N") ) ;;; (defun initiator_page64() (command "_.pline" '(0 0) '(0.5 0) '(0.5 0.5) '(1.0 0.5) '(1.0 0) "") ) ;;; ;drawing the next level of figures (defun fractal_page64( ) (setq line_set (ssget "_X" (list (cons 0 "lwpolyline")))) (setq n (sslength line_set)) ;repeat for all line elements (setq index 0) (repeat n ; loop for all polyline entities (setq this_entity (ssname line_set index) ) (setq this_list (pl_vertices this_entity) pnt_1 (nth 0 this_list) pnt_3 (nth 2 this_list) pnt_5 (nth 4 this_list) ) ;basic geometric components (pattern_1_page64 pnt_1 pnt_3) (pattern_2_page64 pnt_3 pnt_5) ;delete old line used as reference (entdel this_entity) (setq index (1+ index)) ) ) ; (defun pattern_1_page64(pnt_s pnt_e / line_angle base_length unit_len left_angle pnt_10 pnt_11 pnt_e1 ) (setq line_angle (angle pnt_s pnt_e) base_length (distance pnt_s pnt_e) unit_len (/ base_length 2.0) left_angle (+ line_angle (dtr 90.)) ) ;define new set of points (setq pnt_10 (polar pnt_s line_angle unit_len) pnt_11 (polar pnt_10 left_angle unit_len) pnt_e1 (polar pnt_e left_angle unit_len) ) (command "_.pline" pnt_s pnt_10 pnt_11 pnt_e1 pnt_e "") ) ; ; (defun pattern_2_page64(pnt_s pnt_e / line_angle base_length unit_len right_angle pnt_10 pnt_11 pnt_s1 ) (setq line_angle (angle pnt_s pnt_e) base_length (distance pnt_s pnt_e) unit_len (/ base_length 2.0) right_angle(- line_angle (dtr 90.)) ) ;define new set of points (setq pnt_10 (polar pnt_s line_angle unit_len) pnt_11 (polar pnt_10 right_angle unit_len) pnt_s1 (polar pnt_s right_angle unit_len) ) (command "_.pline" pnt_s pnt_s1 pnt_11 pnt_10 pnt_e "") ) ; ; ;get the basic length of the line element ; (defun base_len( / ent_list line_set) (setq line_set (ssget "_X" (list (cons 0 "line")))) (setq ent_list (entget (ssname line_set 0))) (setq pnt_1 (cdr (assoc 10 ent_list)) pnt_2 (cdr (assoc 11 ent_list))) (setq base_length (distance pnt_1 pnt_2)) ) ; This routine accepts a polyline and returns a list of the polyline's vertices. (defun pl_vertices (pl_entity / pline ;entity list for pl_entity nodes ;number of nodes the_rest ;list starting with the first node cnt ;counter n_index ;index for node location cur_list ;node list pline_list ;the node list ) (setq pline (entget pl_entity)) ;entity list for the pline (setq nodes (cdr (assoc 90 pline)) the_rest (member (assoc 10 pline) pline) cnt 0 pline_list nil ) (repeat nodes (setq n_index (* 4 cnt) ;every 4th location cur_list (list (cdr (nth n_index the_rest))) pline_list (append pline_list cur_list) cnt (1+ cnt) ) ) pline_list ;return list ) ; ; end of fr_008.lsp 10/11/98 Takaya Iwamoto ;;; ;;; ;;main routine for Cantor set (defun c:cantor() (setup_cantor) (initiator_cantor) ;draw the initiator drawing (make_jpg) (command "_delay" 1000) ;(alert "\nStart Cantor set?") ;(while (= (Yes_or_No "Go to next step ?") "_Y") (repeat 15 (fractal_cantor) (make_jpg) (command "_.delay" 500) (setq counter (1+ counter)) ) (make_jpg) (make_jpg) (reset_sysvar) (princ) );;;cantor----main ;;; ;;; ;;main routine for Cantor_comb (defun c:cantor_comb() (setup_cantor) (initiator_cantor) ;draw the initiator drawing (make_jpg) (command "_delay" 1000) ;(alert "\nStart Cantor set?") ;(while (= (Yes_or_No "Go to next step ?") "_Y") (repeat 15 (fractal_cantor_comb) (make_jpg) (command "_.delay" 500) (setq counter (1+ counter)) ) (make_jpg) (make_jpg) (reset_sysvar) (princ) );;;cantor_comb----main ;;; (prompt "loading setup_cantor")(terpri) ;;; (defun setup_cantor() (setup_sysvar) (setvar "osmode" 0) ;;no snap mode (setq dxdy (list 0 -0.02) x_left -0.1 x_right 1.1 y_up 0.01 y_down -0.01 nstep 0 one_third (/ 1. 3.) w_left (list x_left y_down) w_right (list x_right y_up) counter 1 ) (setq lower_left '(-0.01 -0.335) upper_right '(1.01 0.02)) (command "_.zoom" "_W" lower_left upper_right) ) ;;; ;;; (defun initiator_cantor() (setq pnt_0 '(0 0) pnt_3 '(1 0) pnt_0d (shift_pnt pnt_0 dxdy) pnt_3d (shift_pnt pnt_3 dxdy) ) (make_line_1 "0" 0 pnt_0 pnt_3) (command "_.pline" pnt_0 pnt_0d pnt_3d pnt_3 "cl") ;(command "_.zoom" "_EXTENT") ) ;;; (prompt "loading fractal_cantor")(terpri) ;drawing the next level of figures (defun fractal_cantor( / pnt_0 pnt_1 pnt_2 pnt_3 line_set n index ent_list) (setq line_set (ssget "W" w_left w_right) ) (setq n (sslength line_set)) ;;;repeat for all line elements (princ "n= ")(princ n)(terpri) (setq index 0) (repeat n ; loop for all line entities (setq ent_list (entget (ssname line_set index)) ) (setq pnt_0 (shift_pnt (cdr (assoc 10 ent_list)) dxdy) pnt_3 (shift_pnt (cdr (assoc 11 ent_list)) dxdy) pnt_1 (plt pnt_0 pnt_3 one_third) pnt_2 (plt pnt_3 pnt_0 one_third) base_length (distance pnt_0 pnt_3) ) (make_line_1 "0" counter pnt_0 pnt_1) (make_line_1 "0" counter pnt_2 pnt_3) (setq index (1+ index)) ) (setq w_left (shift_pnt w_left dxdy) w_right (shift_pnt w_right dxdy) ) (princ "counter= ")(princ counter )(princ " nlines= ")(princ n)(Princ " base_length =")(princ base_length)(terpri) ) ; (prompt "loading fractal_cantor_comb")(terpri) ;drawing the next level of figures (defun fractal_cantor_comb( / pnt_0 pnt_1 pnt_2 pnt_3 line_set n index ent_list) (setq line_set (ssget "W" w_left w_right) ) (setq n (sslength line_set)) ;;;repeat for all line elements (princ "n= ")(princ n)(terpri) (setq index 0) (repeat n ; loop for all line entities (setq ent_list (entget (ssname line_set index)) ) (setq pnt_0 (shift_pnt (cdr (assoc 10 ent_list)) dxdy) pnt_3 (shift_pnt (cdr (assoc 11 ent_list)) dxdy) pnt_1 (plt pnt_0 pnt_3 one_third) pnt_2 (plt pnt_3 pnt_0 one_third) base_length (distance pnt_0 pnt_3) pnt_0d (shift_pnt pnt_0 dxdy) pnt_1d (shift_pnt pnt_1 dxdy) pnt_2d (shift_pnt pnt_2 dxdy) pnt_3d (shift_pnt pnt_3 dxdy) ) (make_line_1 "0" 0 pnt_0 pnt_1) (make_line_1 "0" 0 pnt_2 pnt_3) (setq color_id (rem counter 7)) (if (= color_id 0) (setq color_id "BYLAYER")) (command "_.color" color_id) (command "_.3dface" pnt_0 pnt_0d pnt_1d pnt_1 "") (command "_.3dface" pnt_2 pnt_2d pnt_3d pnt_3 "") ;(command "_.pline" pnt_0 pnt_0d pnt_1d pnt_1 "cl") ;(command "_.pline" pnt_2 pnt_2d pnt_3d pnt_3 "cl") (command "_.color" "BYLAYER") (setq index (1+ index)) ) (setq w_left (shift_pnt w_left dxdy) w_right (shift_pnt w_right dxdy) ) (princ "counter= ")(princ counter )(princ " nlines= ")(princ n)(Princ " base_length =")(princ base_length)(terpri) ) ; ; end of fr_002.lsp 10/01/98 Takaya Iwamoto ;;;