幾何関数

テキストを囲む矩形

AutoLISP関数
(textbox elist)
elist:連想リスト
テキスト図形を囲む対角頂点の座標を返します。
戻り値:リスト

textbox 関数を使用すると、テキスト図形を囲む矩形の大きさが得られます。マルチテキストは除きます。基準となる原点は、テキストの左下になります。また、縦書きや g や p といった下に突き出た文字を考慮した値となります。

elist 引数は、DXF グループコードで修飾された連想リストの形をとります。もっとも簡単な使用例は、テキストを指している【図形名】から entget 関数で得られた図形情報の連想リストを textbox 関数に与える方法です。

_$ (textbox (entget (car (entsel)))) ⏎   ; テキストを選択
((0.0 0.0 0.0) (126.667 9.33333 0.0))

実際には elist 引数で渡すのは【図形名】を DXF グループコード-1とあわせたものだけでテキストを囲む矩形が得られます。【図形名】がテキスト図形を表さなければ nil を返します。

_$ (textbox (list (cons -1 (car (entsel))))) ⏎  ; テキストを選択
((0.0 0.0 0.0) (126.667 9.33333 0.0))

elist 引数は実体があるテキスト図形以外の限られた情報からも使用することができます。文字列の内容を表す DXF グループコード 1 を使用すると、その文字列を作成した場合の矩形が得られます。この際の大きさの算出には、現在の文字スタイルと文字サイズが使用されます。これらは、システム変数 TEXTSTYLE、TEXTSIZE によって管理されています。

_$ (textbox '( (1 . "Super Man") ))⏎
((0.152284 -0.502538 0.0) (17.3147 2.96954 0.0))
_$ (textbox '( (1 . "super man") )) ⏎
((0.228426 -0.502538 0.0) (17.3147 2.16244 0.0))

システム変数 TEXTSTYLE

タイプ: 文字列型 保存先: 図面 初期値: STANDARD

現在の文字スタイル名を設定します。

システム変数 TEXTSIZE

タイプ: 実数型 保存先: 図面 初期値: 0.2000 (ft/inch)または 2.5000 (m)

新しい文字オブジェクトを作成するときの既定の文字の高さを設定します。

戻り値の矩形の座標は、テキストの基点と方向を基準とした ObjectCS 座標系による値です。よって、テキストの具体的な座標や回転角度などは関係しません。

textbox 関数の応用例として、テキストを囲む矩形を描く関数は、以下のようになります。ename 引数にテキストの【図形名】を指定します。UCS コマンドで ename 引数のオブジェクトを指定してその ObjectCS を UCS に設定してから AutoCAD のコマンドで矩形を描くのがポイントです。関数の戻り値は描いたライトウェイトポリラインの矩形の【図形名】になります。

(defun encloseText (ename / tbox OSMODE)
  (if (setq tbox (textbox (entget ename)))
    (progn (command "._UCS" "_OBJECT" ename)
           (setq OSMODE (getvar "OSMODE"))
           (setvar "OSMODE" 0)
           (command "._RECTANGLE" (car tbox) (cadr tbox))
           (setvar "OSMODE" OSMODE)
           (command "._UCS" "_P")
           (entlast)
    )
  )
)

この関数を使った簡単な AutoCAD コマンドを作ってみます。コマンドは、選択したテキストを角丸の矩形で囲むものです。

(defun c:encloseText (/ ename rec OFFSETGAPTYPE)
  (if (setq ename (car (entsel "\nテキストを選択 : ")))
    (progn (command "._UNDO" "_BEGIN")
           (if (setq rec (encloseText ename))
             (progn (setq OFFSETGAPTYPE (getvar "OFFSETGAPTYPE"))
                    (setvar "OFFSETGAPTYPE" 1)
                    (vla-Offset
                      (vlax-ename->VLA-object rec)
                      (* 0.35 (cdr (assoc 40 (entget ename))))
                    )
                    (setvar "OFFSETGAPTYPE" OFFSETGAPTYPE)
                    (entdel rec)
             )
           )
           (command "._UNDO" "_END")
    )
  )
  (princ)
)
autoisp textbox

角丸の図形を描くのは、テキストを囲む矩形をシステム変数 OFFSETGAPTYPE を 1 の状態にして offset メソッドで作成しています。

システム変数 OFFSETGAPTYPE

タイプ: 整数型 保存先: レジストリ 初期値: 0

ポリラインをオフセットしたときの角の形状をコントロールします。

説明
0 線分を延長します。
1 オフセット距離の半径の円弧でフィレットします。
2 オフセット距離で面取りします。