;;;PTを下中心にANGの角度でSCL倍して家を書く. (DEFUN C9_MH (PT ANG SCL / P1 P2 P3 P4 P5) (SETQ P1 (POLAR PT (+ ANG PI) (* 0.5 SCL))) (SETQ P2 (POLAR P1 (+ ANG (* 0.5 PI)) SCL)) (SETQ P3 (POLAR P2 ANG SCL)) (SETQ P4 (POLAR PT ANG (* 0.5 SCL))) (SETQ P5 (POLAR PT (+ ANG (* 0.5 PI)) (* 1.5 SCL))) (CL_MOFF);;システム変数一時退避. (COMMAND ".PLINE" P1 P2 P4 P3 P5 P2 P3 P1 P4 "") (CL_MON);;システム変数復帰. ) ;;;若葉. (defun C:C9_HW (/ PT) (setvar "CMDECHO" 0) (setq PT (getpoint "\n 基点を指示 または<終了>:")) (if PT;;点が指示されていたら実行. (C9_MH PT 0.0 100) ) ;_ <:")) (if (AND ENT (eq "LINE" (CL_DXF 0 (car ENT))));;ENTが選択されて、LINEだったら実行. (progn (setq PT (CL_MIDPT (CL_DXF 10 (car ENT)) (CL_DXF 11 (car ENT))));;中点を取得. (C9_MH PT 0.0 100) ) ;_ <:")) (if (and ENT (eq "LINE" (CL_DXF 0 (car ENT))));;ENTが選択されて、LINEだったら実行. (progn (setq SP (CL_DXF 10 (car ENT)));;始点. (setq EP (CL_DXF 11 (car ENT)));;終点. (setq CP (CL_MIDPT SP EP));;中点. (setq ANG (angle SP EP));;とりあえず始点-終点の角度. (if (and (< (* 0.5 pi) ANG) (<= ANG (* 1.5 pi)));;ANGが90〜270度の間だったら. (setq ANG (+ ANG pi));;ANGを反転. ) ;_ <:")) (if (and ENT (eq "LINE" (CL_DXF 0 (car ENT)))) (progn (setq SP (CL_DXF 10 (car ENT))) (setq EP (CL_DXF 11 (car ENT))) (setq CP (CL_MIDPT SP EP)) (setq ANG (angle SP EP)) (setq PT (getpoint CP "\n 家を建てる方向を指示 または<終了>:")) (if PT (if (not (equal (angle PT EP) ANG 0.01)) (progn (setq XPT (inters SP EP PT (polar PT (+ (angle SP EP) (* 0.5 pi)) 1.0) NIL)) (setq ANG (- (angle XPT PT) (* 0.5 pi))) (setq D1 (/ (distance SP EP) 100)) (setq D D1) (repeat 99 (C9_MH CP ANG D) (command "ERASE" "L" "") (setq D (+ D D1))) (C9_MH CP ANG (distance SP EP)) ) ;_ <