DXF図形情報を書き換えて、テキスト/マルチテキストの文字スタイルを変更します。
予備知識
entgetを使って図形のDXF情報を得ます。
得たDXF図形情報を書き換えるには、関数subst と entmod を使います。
マルチテキストのDXF図形情報
まずは、マルチテキストを用意して、マルチテキストのDXF図形情報の例を見てみましょう。
変数EntにDXF図形情報が入るコードです。
(setq Ent (entget (car (entsel "マルチテキストを選択:"))))
コマンドラインに入力して、マルチテキストを選択すると、内容により多少異なりますが、こんな感じの情報が、変数Entに入ります。
!Ent と入力すると、Entの中身が表示されます。
((-1 . <Entity name: 29a8694ab00>) (0 . "MTEXT") (330 . <Entity name: 29aef5c39f0>) (5 . "2F8") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbMText") (10 189.965 208.069 0.0) (40 . 2.5) (41 . 6.69167) (46 . 0.0) (71 . 1) (72 . 5) (1 . "ABC") (7 . "Standard") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0) (42 . 6.66667) (43 . 2.5) (50 . 0.0) (73 . 1) (44 . 1.0))
DXF図形情報は、一つ一つの値がグループコードとドットペアになったものが、さらにリストになったものでしたね。
文字スタイルのグループコード 7
テキスト、マルチテキスト、どちらも文字スタイルのグループコードは 7 です。
関数 assoc を使ってグループコード7の情報を探してみましょう。
(assoc 7 Ent)
先ほどEntに入れた情報の場合、(7 . “Standard”) が戻り値です。
このマルチテキストの文字スタイルは、”Standard” ですよ。ということです。
DXF図形情報の入れ替え
entmod subst を使って文字スタイルを “Jaga-Style-L”に変更します。
“Jaga-Style-L”という名前の文字スタイルを作成するか、既存の文字スタイル名に書き換えて試して下さい。
Entに入れたDXF図形情報のリストの中の、(7 . “Standard”) を (7 . “Jaga-Style-L”) に入れ代えてマルチテキストに反映させることで文字スタイルを変更できます。
ドットペアは、関数 cons で作ります。
(cons '7 "Jaga-Style-L")
これで、新しいドットペア (7 . “Jaga-Style-L”) ができます。
substで新しいドットペアと古いドットペアを入れ替え、入れ替えたDXF図形情報のリストをEntに入れ直します。
(setq Ent (subst (assoc 7 Ent) ; 新しい値 (cons '7 "Jaga-Style-L") ; 古い値 Ent)
そして、entmodを使って、図形に反映させます。
(entmod Ent)
AutoLISPプログラム
以上をまとめてコマンドにしました。コマンド名はtestです。
(defun c:test (/ Ent)
(setq Ent (entget (car (entsel "文字を選択:")))) ;OldEntにDXF図形情報のリストを代入
(setq Ent ;書き直したDXF図形情報のリストをEntに入れ直し
(subst ;入れ替える
(cons '7 "Jaga-Style-L") ; 新しい値
(assoc 7 Ent) ; 古い値
Ent) ;Entに入っているDXF図形情報のリストを
);setq
(entmod Ent) ;DXF図形情報を図形に反映
(princ))
カスタマイズ例
文字スタイルが無ければ作る。というルーティーンを加えると、文字スタイルが無かった場合のエラーが防げます。
選択方法をグループ選択でテキスト/マルチテキストだけ選択するようにフィルターをかけると、まとめて複数のテキスト/マルチテキストの文字スタイルを変更するときに便利だと思います。
文字の高さを変更するには、文字の高さ (グループコード40)のDXF図形情報を変更します。
文字を入れる画層が決まっているならば、ついでに文字用の画層にするというのも加えてもいいと思います。
いろいろカスタマイズしたサンプルコマンドがこちらです。
まとめ
- entget でDXF図形情報を得る
- assoc で現在の値を得る
- cons で新しいドットペアを作る
- subst で新しい値と現在の値を変更
- entmod で書き換えたDXF図形情報リストを図形に反映
- 文字スタイルのグループコードはテキスト、マルチテキスト共に 7
関連記事
DXF図形情報の書き換えの練習問題です。
Visual LISPではDXF図形情報では変更できないプロパティも対応しています。
文字スタイル変換のサンプルコマンドです。
Comments