階段断面を作図するLISPですが
「*push-error-using-command*) が事前に呼び出されていないため、エラーにより (command) を実行できません。
(command) 呼び出しを (command-s) に変換することをお勧めします。」
のメッセージが出て、それ以上進めません。
LISPの中身もみてみましたが、チンプンカンプンです。
どなたか、このLISPを修正いただけないでしょうか?
Autocadのバージョンは2020です。
よろしくお願いします。
(defun c:sat_kaidan2
(/ BLIP OTMD OSMD LST_OB START_P END_P FLOR_H KAIDAN_W STEP_PITCH STEP_W MP0 MP1 MP2 MP3 SSR_P1 SSR_P2 DRAW_ANG OFST_P1 OFST_P2 DEL_OB PL_LIST CON_P1 CON_P2 TESURI_U TESURI_D Pt0 Pt01 Pt02 Pt03 Pt04 Pt05 Pt06 Pt07 oj_getint oj_getdist oj_getkword oj_chlayer oj_chcolor oj_unde oj_undbe oj_start oj_end oj_off oj_on oj_err
)
;******初期設定****************************************************************
;[RC造]
(setq HABAKI_LAYER "HABAKI") ;巾木のレイヤ-
(setq HABAKI_H 60) ;RC部分の巾木高さ
(setq SIAGE1_LAYER "SIAGE1") ;モルタル部分のレイヤ-
(setq SIAGE2_LAYER "SIAGE2") ;モルタル2部分のレイヤ-
(setq RCSEC_LAYER "RCSEC") ;RC部分のレイヤ-
(setq HOJO_LAYER "HOJO") ;RC2部分のレイヤ-
(setq RCSEE_LAYER "RCSEE") ;RcSee部分のレイヤ-
(setq RcFks_LAYER "RcFks") ;RCフカシ部分のレイヤ-
(setq RcFks2_LAYER "RcFks2") ;RC2フカシ部分のレイヤ-
(setq MO_ATU 30) ;モルタルの厚さ
(setq MO2_ATU 30) ;モルタル2の厚さ
(setq CO1_ATU 10) ;スラブのフカシ厚
(setq CO_ATU 20) ;段裏のフカシ厚
(setq CO2_ATU 20) ;段裏2のフカシ厚
;[S造]
(setq SASARA2_H 30) ;ササラの部分の巾木高さ
(setq SASARA2_W 300) ;ササラの幅
(setq SASARA2_LAYER "SASARA2") ;ササラのレイヤ-
;[共通]
(setq TESURI_H 850) ;手摺の高さ
(setq TESURI_P 42.7) ;手摺の径
(setq TESURI_LAYER "TESURI") ;手摺のレイヤ-
(setq TESURI2_H 850) ;手摺2の高さ
(setq TESURI2_P 25) ;笠木の見付け寸法
(setq TESURI2_LAYER "TESURI2") ;手摺2のレイヤ-
;******************************************************************************
;サブルーチン
;SETENVコマンドの定義
(if (eq (getvar "program") "acad")
(defun c:setenv ( / NAM VAL)
(setq NAM (getstring "\n変数名を入力: "))
(if (/= NAM "")
(progn
(if (= nil (getenv NAM))
(setq VAL (getstring "\n値 : "))
(setq VAL (getstring (strcat "\n値 <" (getenv NAM) ">: ")))
)
(if (/= VAL "")
(setenv NAM VAL)
)
)
)
)
)
;デフォルト値を持ったgetint
(defun oj_getint ( str def / rval )
(if def
(progn
(setq rval (getint (strcat str " <" (rtos def) ">:")))
(if (not rval) (setq rval def)))
(setq rval (getint (strcat str " :")))
)
rval
)
;デフォルト値を持ったgetdist
(defun oj_getdist ( str def / rval )
(if def
(progn
(setq rval (getdist (strcat str " <" (rtos def) ">:")))
(if (not rval) (setq rval def)))
(setq rval (getdist (strcat str " :")))
)
rval
)
;デフォルト値を持ったgetkword
(defun oj_getkword ( str def / rval )
(if def
(progn
(setq rval (getkword (strcat str " <" def ">:")))
(if (or (eq "" rval) (not rval)) (setq rval def)))
(setq rval (getkword (strcat str " :")))
)
rval
)
;画層変更コマンド
(defun oj_chlayer ( laname / LOB LOB1)
(setq LOB (entlast))
(setq LOB1 (entget LOB))
(if (/= laname "BYLAYER")
(progn
(setq LOB1 (subst (cons 8 laname)
(assoc 8 LOB1)
LOB1
)
)
(entmod LOB1)
)
)
)
;線種変更コマンド
(defun oj_chltype (ltypename / LOB1)
(setq LOB1 (entget (entlast)))
(if (not (assoc 6 LOB1))
(setq LOB1 (append LOB1 (list (cons 6 bylayer))))
)
(entmod (subst (cons 6 ltypename)
(assoc 6 LOB1)
LOB1
)
)
)
;色変更コマンド
(defun oj_chcolor ( colorname / COB1)
(setq COB1 (entget (entlast)))
(if (not (assoc 62 COB1))
(setq COB1 (append COB1 (list (cons 62 256))))
)
(if (/= colorname "BYLAYER")
(entmod (subst (cons 62 colorname)
(assoc 62 COB1)
COB1
)
)
(entmod (subst (cons 62 256)
(assoc 62 COB1)
COB1
)
)
)
)
;ポリラインの頂点をリストにする
(defun oj_polilist ( ent_data / 10_LIST ALL_10_LIST
)
(while ent_data
(setq 10_LIST (car ent_data))
(if (= (car 10_LIST) 10)
(if ALL_10_LIST
(setq ALL_10_LIST (append ALL_10_LIST (list (cdr 10_LIST))))
(setq ALL_10_LIST (list (cdr 10_LIST)))
)
)
(setq ent_data (cdr ent_data))
)
ALL_10_LIST
)
;UNDOセットの後処理
(defun oj_unde () (command ".UNDO" "E") (setq oj_undo nil))
;UNDOセットの前処理
(defun oj_undbe () (setq oj_undo t) (command ".UNDO" "BE"))
;スタート設定
(defun oj_start ()
(setq oj_error *error*
*error* oj_err
)
(setvar "cmdecho" 0)
(oj_undbe)
)
;エンド設定
(defun oj_end ()
(oj_unde)
(setvar "cmdecho" 1)
(setq *error* oj_error)
)
;システム変数の格納
(defun oj_off ()
(setq OSMD (getvar "osmode"))
(setq OTMD (getvar "orthomode"))
(setq BLIP (getvar "blipmode"))
(setvar "osmode" 0)
(setvar "orthomode" 0)
(setvar "blipmode" 0)
)
;システム変数の設定
(defun oj_on ()
(setvar "osmode" OSMD)
(setvar "orthomode" OTMD)
(setvar "blipmode" BLIP)
)
;エラー処理
(defun oj_err (MSG)
(if (/= oj_undo nil)
(progn
(oj_unde)
;(command "._U")
)
)
(if
(or
(/= MSG "関数がキャンセルされました.")
(= MSG "quit / exitによる中止")
)
(princ)
(princ (strcat "\nエラー: " MSG))
)
(if oj_error
(setq *error* oj_error)
)
(if BLIP
(setvar "blipmode" BLIP)
)
(setvar "cmdecho" 1)
(if OSMD
(setvar "osmode" OSMD)
)
(if OTMD
(setvar "orthomode" OTMD)
)
(princ)
)
(princ)
;******************************************************************************
(oj_start)
(setq OTMD (getvar "orthomode"))
(setvar "orthomode" 0)
(if (setq START_P (getpoint "\nP1点を指示:"))
(if (setq END_P (getpoint START_P "\nP2点を指示:"))
(progn
(setq Pt0 START_P)
(setq FLOR_H (- (cadr END_P) (cadr START_P)))
(setq KAIDAN_W (- (car END_P) (car START_P)))
(setvar "orthomode" OTMD)
(setq STEP_T
(if (>= (- (/ FLOR_H 180) (fix (/ FLOR_H 180))) 0.5)
(+ (fix (/ FLOR_H 180)) 1)
(fix (/ FLOR_H 180))
)
)
(if (eq (getenv "KEKOMI") nil) (setenv "KEKOMI" "0"))
(setq KEKOMI (atof (getenv "KEKOMI")))
(setq KEKOMI (oj_getdist "\n蹴込寸法を入力" KEKOMI))
(setenv "KEKOMI" (rtos KEKOMI))
(if (minusp KAIDAN_W) (setq KEKOMI (* -1 KEKOMI)))
(if (minusp STEP_T)
(progn
(setq START_P (polar START_P (* 1.0 pi) KEKOMI))
(setq STEP_T (* -1 STEP_T))
)
)
(setq STEP_PITCH (/ FLOR_H STEP_T))
(setvar "modemacro" (strcat "" (rtos STEP_T) "段:" (rtos STEP_PITCH)))
(setq STEP_T (oj_getint "\n段数を入力" STEP_T))
(setvar "modemacro" "")
(setq STEP_PITCH (/ FLOR_H STEP_T))
(setq STEP_W (/ KAIDAN_W (- STEP_T 1)))
(if (minusp STEP_W) (setq STEP_W (* -1 STEP_W)))
(if (not OK_SIGN) (setq OK_SIGN "Yes"))
(initget "Yes No")
(setq OK_SIGN (oj_getkword (strcat "\n踏面は「" (rtos STEP_W) "」、蹴上は「" (rtos STEP_PITCH) "」です。宜しいですか?〔Yes / No〕") OK_SIGN))
(while (eq OK_SIGN "No")
(progn
(setq STEP_PITCH (/ FLOR_H STEP_T))
(setvar "modemacro" (strcat "" (rtos STEP_T) "段:" (rtos STEP_PITCH)))
(setq STEP_T (oj_getint "\n段数を入力" STEP_T))
(setvar "modemacro" "")
(setq STEP_PITCH (/ FLOR_H STEP_T))
(setq STEP_W (/ KAIDAN_W (- STEP_T 1)))
(if (minusp STEP_W) (setq STEP_W (* -1 STEP_W)))
(if (not OK_SIGN) (setq OK_SIGN "Yes"))
(initget "Yes No")
(setq OK_SIGN (oj_getkword (strcat "\n踏面は「" (rtos STEP_W) "」、蹴上は「" (rtos STEP_PITCH) "」です。宜しいですか?〔Yes / No〕") OK_SIGN))
)
;(princ "もう一度、始めからやり直してください。")
)
(if (not DRAW_TYPE) (setq DRAW_TYPE "P"))
(initget "P S C")
(setq DRAW_TYPE (oj_getkword "\n作図タイプを指定[補助線のみ(P)/鉄骨造(S)/RC造(C)]" DRAW_TYPE))
(cond
(
(eq DRAW_TYPE "P")
(repeat STEP_T
(setq MP1 (polar START_P (* 0.0 pi) KEKOMI))
(setq MP2 (polar START_P (* 0.5 pi) STEP_PITCH))
(setq MP0 (polar MP2 (* 0.0 pi) (/ KAIDAN_W (- STEP_T 1))))
(setq MP3 (polar MP0 (* 0.0 pi) KEKOMI))
(oj_off)
(command "pline" MP1 MP2 MP3 "")
(oj_on)
(oj_chlayer "HOJO")
(oj_chcolor 2)
(if LST_OB (command "pedit" LST_OB "j" (entlast) "" ""))
(setq START_P MP0)
(setq LST_OB (entlast))
)
(if (minusp KEKOMI) (setq KEKOMI (* -1 KEKOMI)))
)
(
(eq DRAW_TYPE "S")
(if (setq DIST_A (oj_getdist "\n段鼻と手摺の先端までの寸法?:" DIST_A))
(if (setq DIST_B (oj_getdist "\n踊り場有効寸法?:" DIST_B))
(progn
(setq SSR_P1 (polar START_P (* 0.5 pi) STEP_PITCH))
(setq SSR_P2 END_P)
(setq DRAW_ANG (angle SSR_P1 SSR_P2))
(if (< DRAW_ANG (* 0.5 pi))
(progn
(setq OFST_P1 (polar SSR_P1 (+ (* 0.5 pi) DRAW_ANG) 50))
(setq OFST_P2 (polar SSR_P1 (+ (* 1.5 pi) DRAW_ANG) 50))
)
(progn
(setq OFST_P1 (polar SSR_P1 (+ (* 1.5 pi) DRAW_ANG) 50))
(setq OFST_P2 (polar SSR_P1 (+ (* 0.5 pi) DRAW_ANG) 50))
)
)
(repeat STEP_T
(setq MP1 (polar START_P (* 0.0 pi) KEKOMI))
(setq MP2 (polar START_P (* 0.5 pi) STEP_PITCH))
(setq MP0 (polar MP2 (* 0.0 pi) (/ KAIDAN_W (- STEP_T 1))))
(setq MP3 (polar MP0 (* 0.0 pi) KEKOMI))
(oj_off)
(command "pline" MP1 MP2 MP3 "")
(oj_on)
(oj_chlayer "SIAGE2")
(if LST_OB (command "pedit" LST_OB "j" (entlast) "" ""))
(setq START_P MP0)
(setq LST_OB (entlast))
)
(if (minusp KEKOMI) (setq KEKOMI (* -1 KEKOMI)))
(oj_off)
(command "line" SSR_P1 SSR_P2 "")
(oj_chlayer TESURI2_LAYER)
(setq TESURI2_U (entlast))
(command "offset" SASARA2_H (entlast) OFST_P1 "")
(oj_chlayer SASARA2_LAYER)
(command "offset" SASARA2_W (entlast) OFST_P2 "")
(oj_chlayer SASARA2_LAYER)
(command "_move" TESURI2_U "" "0,0" (strcat "0," (rtos TESURI2_H)))
(command "offset" TESURI_P TESURI2_U OFST_P2 "")
(setq TESURI2_D (entlast))
(setq Pt01 (polar Pt0 (* 1.0 pi) DIST_A))
(setq Pt02 (polar Pt01 (* 0.5 pi) TESURI2_H))
(setq Pt03 (polar END_P (* 0.0 pi) DIST_B))
(setq Pt04 (polar Pt03 (* 0.5 pi) TESURI2_H))
(setq Pt05 (polar Pt03 (* 0.5 pi) (- TESURI_H TESURI_P)))
(setq Pt06 (polar END_P (* 0.5 pi) TESURI2_H))
(setq Pt07 (polar Pt05 (* 1.0 pi) (* TESURI_P 0.5)))
(command "line" Pt01 Pt02 "")
(oj_chlayer TESURI2_LAYER)
(command "_fillet" (entlast) TESURI2_D)
(command "_fillet" (entlast) TESURI2_U)
(command "line" Pt04 Pt05 "")
(oj_chlayer TESURI2_LAYER)
(command "line" Pt04 Pt06 "")
(oj_chlayer TESURI2_LAYER)
(command "_fillet" (entlast) TESURI_U)
(command "line" Pt05 Pt07 "")
(oj_chlayer TESURI2_LAYER)
(command "_fillet" (entlast) TESURI2_D)
(oj_on)
)
)
)
)
(
(eq DRAW_TYPE "C")
(if (setq DIST_A (oj_getdist "\n段鼻と手摺の先端までの寸法?:" DIST_A))
(if (setq DIST_B (oj_getdist "\n踊り場有効寸法?:" DIST_B))
(progn
(setq SSR_P1 (polar START_P (* 0.5 pi) STEP_PITCH))
(setq SSR_P2 END_P)
(setq ANG_P1 START_P)
(setq ANG_P2 (polar END_P (* 0.0 pi) STEP_W))
(setq DRAW_ANG (angle ANG_P1 ANG_P2))
(if (< DRAW_ANG (* 0.5 pi))
(setq OFST_P1 (polar ANG_P1 (+ (* 1.5 pi) DRAW_ANG) 300))
(setq OFST_P1 (polar ANG_P1 (+ (* 0.5 pi) DRAW_ANG) 300))
)
(repeat STEP_T
(setq MP1 (polar START_P (* 0.0 pi) KEKOMI))
(setq MP2 (polar START_P (* 0.5 pi) STEP_PITCH))
(setq MP0 (polar MP2 (* 0.0 pi) (/ KAIDAN_W (- STEP_T 1))))
(setq MP3 (polar MP0 (* 0.0 pi) KEKOMI))
(oj_off)
(command "pline" MP1 MP2 MP3 "")
(oj_on)
(oj_chlayer SIAGE2_LAYER)
(if LST_OB (command "pedit" LST_OB "j" (entlast) "" ""))
(setq START_P MP0)
(setq LST_OB (entlast))
)
(if (minusp KEKOMI) (setq KEKOMI (* -1 KEKOMI)))
(oj_off)
(command "offset" MO2_ATU (entlast) OFST_P1 "")
(oj_chlayer HOJO_LAYER)
(setq PL_LIST (oj_polilist (entget (entlast))))
(setq CON_P1 (nth 2 PL_LIST))
(setq CON_P2 (nth (- (length PL_LIST) 3) PL_LIST))
(command "line" SSR_P1 SSR_P2 "")
(oj_chlayer TESURI2_LAYER)
(setq TESURI2_U (entlast))
(command "line" CON_P1 CON_P2 "")
(oj_chlayer HOJO_LAYER)
(setq DEL_OB (entlast))
(command "offset" 150 (entlast) OFST_P1 "")
(entdel DEL_OB)
(command "offset" CO2_ATU (entlast) OFST_P1 "")
(oj_chlayer RCSEE_LAYER)
(command "_move" TESURI2_U "" "0,0" (strcat "0," (rtos TESURI2_H)))
(command "offset" TESURI2_P TESURI2_U OFST_P1 "")
(setq TESURI2_D (entlast))
(setq Pt01 (polar Pt0 (* 1.0 pi) DIST_A))
(setq Pt02 (polar Pt01 (* 0.5 pi) TESURI2_H))
(setq Pt03 (polar END_P (* 0.0 pi) DIST_B))
(setq Pt04 (polar Pt03 (* 0.5 pi) TESURI2_H))
(setq Pt05 (polar Pt03 (* 0.5 pi) (- TESURI2_H TESURI2_P)))
(setq Pt06 (polar END_P (* 0.5 pi) TESURI2_H))
(setq Pt07 (polar Pt05 (* 1.0 pi) (* TESURI2_P 0.5)))
(command "line" Pt01 Pt02 "")
(oj_chlayer TESURI2_LAYER)
(command "_fillet" (entlast) TESURI2_D)
(command "_fillet" (entlast) TESURI2_U)
(command "line" Pt04 Pt05 "")
(oj_chlayer TESURI2_LAYER)
(command "line" Pt04 Pt06 "")
(oj_chlayer TESURI2_LAYER)
(command "_fillet" (entlast) TESURI2_U)
(command "line" Pt05 Pt07 "")
(oj_chlayer TESURI2_LAYER)
(command "_fillet" (entlast) TESURI2_D)
(oj_on)
)
)
)
)
)
)
)
)
(oj_end)
(princ)
)
階段作図LISPがうまく機能しません。
- 釜萢恵子
- 2021/05/17 (Mon) 16:53:44