小数点以下の桁数は入力、2行のマルチテキストで書き込みます。
コマンド名はfht
サブルーチンは前と同じです。
2025/6/16 13:30 編集しました。
㎡(坪)表記と㎡表記のみを選択できるようにしました。
---------------------------------------------
(defun c:fht (/ ename vlobj obid pt mt fstr fstr1 dsc c_unt1 pref1 suff1 pr pref2 suff2 c_unt2 fstr2 flg)
(setq pref1 "") ;接頭辞1を指定
(setq suff1 "㎡") ;接尾辞1を指定
(setq pref2 "") ;接頭辞2を指定
(setq suff2 "坪") ;接尾辞2を指定
(setq c_unt1 "1e-06") ;変換単位1を指定 ただし、浮動小数点表示
(setq c_unt2 "3025e-10") ;変換単位2を指定 ただし、浮動小数点表示
(setq keta (getint "\n小数点以下の桁数を入力(0-8):"))
(while (or (< keta 0)(> keta 8))
(prompt "\n桁数は0から8の間で指定してください")
(setq keta (getint "\n小数点以下の桁数を入力(0-8):"))
)
(initget "B S")
(or (setq flg (getkword "\n[㎡(坪)(B) / ㎡ のみ(S)] <㎡(坪)(B)> : ")) (setq flg "B"))
(setq pr (strcat "\%" "pr" (itoa keta))) ;精度を指定 小数点以下の桁数をpr0~pr8で表示 現在の精度の場合は空白
(vl-load-com)
(setq ename (car (entsel)))
(setq vlobj (vlax-ename->vla-object ename))
(setq obid (itoa (vla-get-objectid vlobj)))
;図形IDを10進法に変換 itoa必要(rtosだと64bitで不具合)
(setq fstr1 (strcat
"\%\<\\AcObjProp.16.2 Object(\%\<\\_ObjId "
obid "\>\%).Area \\f \"%lu2"
pr "\%ps["
pref1 ","
suff1 "]%ct8["
c_unt1 "]\" \>\%"
)
) ;フィールド文字列1を作成(㎡)
(setq fstr2 (strcat
"\%\<\\AcObjProp.16.2 Object(\%\<\\_ObjId "
obid "\>\%).Area \\f \"%lu2"
pr "\%ps["
pref2 ","
suff2 "]%ct8["
c_unt2 "]\" \>\%"
)
) ;フィールド文字列2を作成(坪)
(if (= flg "S")
(setq fstr fstr1)
(setq fstr (strcat fstr1 "\\P(" fstr2 ")"))
)
(setq dsc (getvar "DIMSCALE")) ;DIMSCALEの値を取得
(setq mt (* dsc 2.8)) ;DIMSCALEのを2.8倍を文字高さとする
(setq pt (getpoint "\n文字挿入位置を指定: "))
;異尺度対応の文字スタイル・文字高さを設定した文字スタイルを分岐
(if (or (LM:isAnnotative) (textHeight))
(command "-mtext" pt "@" fstr "")
(command "-mtext" pt "h" mt "@" fstr "")
)
(princ)
)
'異尺度対応の文字スタイルかどうかを判定
(defun LM:isAnnotative ( / object annotx )
(and
(setq object (tblobjname "STYLE" (getvar "TEXTSTYLE")))
(setq annotx (cadr (assoc -3 (entget object '("AcadAnnotative")))))
(= 1 (cdr (assoc 1070 (reverse annotx))))
)
)
'文字高さ設定した文字スタイルかどうかを判定
(defun textHeight ( / object txtH )
(and
(setq object (tblobjname "STYLE" (getvar "TEXTSTYLE")))
(setq txtH (cdr (assoc 40 (entget object))))
(/= 0 txtH)
)
)
- LUNE
- 2025/06/16 (Mon) 11:03:59 New