;;################################################################## ;; ;;====== 第9回「宿題」====== ;;作成者  yasu ;;作成日  '02/05/07 ;;ファイル名 yasu_9.lsp ;;コマンド  yasu_9 ;;作成環境 ;; AutoCAD LT2000i+LTtoolKIT2000i ;; EmEditor ver3.27 ;; ;;宿題内容 ;;「任意の画層、線種、色で線分を一本引き、方向と移動距離を入力して平行線を引く」コマンド ;; <上級者さん> ;; 1.好きな画層、線種、色で一本、線を引く。 ;; 2.方向を指示。 ;; 3.距離を入力。 ;; 4.エンターでオフセットされる。 ;; 5.3〜4を繰り返す。(終了の仕方は考えてちょ) ;; ;;コマンド使用方法 ;; 1.好きな画層、線種、色で一本、線を引く。 ;; 2.方向を指示。 ;; 3.距離を入力。 ;; 4.エンターでオフセットされる。 ;; 5.3〜4を繰り返す。 ;; 6.終了方法は、オフセット間隔に"0"を入力→エンターで終了! ;; ;;################################################################## (defun C:yasu_9 ( / ofdist ;オフセット間隔記憶変数 pt1      ;基線の1点目 pt2 ;基線の終点 ofpt ;オフセットする方向の点 dist ;基線からのオフセット間隔 next_dist ;オフセットした線からのオフセット間隔 end_dist ;終了するための変数 ) (setvar "cmdecho" 0) (setq ofdist (getvar "offsetdist")) (setq app_oer *error*) (setq *error* #app_err) ;;---------- error ---------- ;エラー処理 (defun #app_err ( msg ) (if (/= msg "関数は取り消されました") (progn (princ (strcat "\nお知らせ : " msg)) ) ) (setq *error* app_oer) (setvar "cmdecho" 1) (setvar "offsetdist" ofdist) (princ) ) ;;---------- linedraw ---------- ;基線作図 (initget 1) (setq pt1 (getpoint "\n1 点目を指定: ")) (initget 33) (setq pt2 (getpoint pt1 "\n終点を指定: ")) (yasu_ent_line pt1 pt2) ;;---------- offset ---------- ;オフセット (initget 1) (setq ofpt (getpoint "\nオフセット方向を指定 : ")) (initget 6) (setq dist (getdist (strcat "\nオフセット間隔を指定 <" (rtos ofdist) ">: "))) (if (not dist) (setq dist ofdist) ) (setq ofdist dist) (yasu_houko pt1 pt2 ofpt dist) (setq end_dist 1) (while (/= end_dist 0) (initget 4) (setq next_dist (getdist (strcat "\n次のオフセット間隔を指定 (0=終了) <" (rtos ofdist) ">: "))) (if (/= next_dist 0) (progn (if (not next_dist)  (setq next_dist ofdist) ) (setq ofdist next_dist) (setq dist (+ dist next_dist)) (yasu_houko pt1 pt2 ofpt dist) ) (progn (setq end_dist 0) ) ) ) (setq *error* app_oer) (setvar "cmdecho" 1) (setvar "offsetdist" ofdist) (princ) ) (princ "\n 「任意の画層、線種、色で線分を一本引き、方向と移動距離を入力して平行線を引く」コマンド 《コマンド:yasu_9》") ;;#######以下サブルーチン################# ;;---------- entmake版オフセットコマンド(直線用) ---------- (defun yasu_houko (pt1 pt2 ofpt dist / k_pt1 k_pt2 ang1 dst1 p1 p2) (setq ang1 (angle pt1 pt2)) (setq k_pt1 (polar pt1 (+ ang1 (/ pi 2)) 10)) (setq k_pt2 (polar pt1 (- ang1 (/ pi 2)) 10)) (setq dst1 (distance k_pt1 ofpt)) (setq dst2 (distance k_pt2 ofpt)) (cond ((> dst1 dst2) (setq p1 (polar pt1 (- ang1 (/ pi 2)) dist)) (setq p2 (polar pt2 (- ang1 (/ pi 2)) dist)) ) ((< dst1 dst2) (setq p1 (polar pt1 (+ ang1 (/ pi 2)) dist)) (setq p2 (polar pt2 (+ ang1 (/ pi 2)) dist)) ) ) (yasu_ent_line p1 p2) (princ) ) ;;---------- entmake_line ---------- (defun yasu_ent_line (pt1 pt2 / ent_list) (setq ent_list (list '(0 . "line") '(100 . "AcDbEntity") '(100 . "AcDbLine") (cons 10 pt1) (cons 11 pt2) '(210 0.0 0.0 1.0) ) ) (entmake ent_list) ) (princ) ;;---------- 以上 ----------