関数 getstring は、文字列をユーザー入力で得る機能があります。
ブロックの名前を変更するコマンドを例にお話します。
関数 getstring
AutoLISP 関数 getstring は、ユーザーが入力した文字列を得る機能があります。
引数はプロンプトメッセージです。省略もできます。
戻り値は、ユーザーが入力した文字列です。
例:
(setq tx (getstring))
コマンドラインに入力してみてください。
文字列を入力するようにプロンプトが出て、そこで入力した文字列が変数Txに入ります。
使用例 ブロック名を変更する
AutoLISPプログラム
(defun c:test ( / Obj CuNm NwNm)
(vl-load-com)
(setq Obj (car (entsel "ブロックを選択:")))
(setq CuNm (vla-get-Effectivename (vlax-ename->vla-object Obj)))
(setq NwNm (getstring "新しいブロック名を入力:"))
(command-s "._RENAME" "_B" CuNm NwNm )
(princ))
AutoLISPの説明
(vl-load-com)
VLISP関数を使うので最初に(vl-load-com)を入れます。
(setq Obj (car (entsel “ブロックを選択:”)))
(setq CuNm (vla-get-Effectivename (vlax-ename->vla-object Obj)))
まず、Objにオブジェクト名を入れて、そこからVLISP関数でブロック名を取得します。
今回は特定の図形、ブロック、を選んでもらいたいので、プロンプト “ブロックを選択:” で、ユーザーに何を選択して欲しいのか明記しています。
ブロック名を得る関数については下の参考記事があります。
(setq NwNm (getstring “新しいブロック名を入力:”))
getstring を使って新しいブロック名をユーザーに入力してもらいます。
ここでも、ユーザーが何を入力したらいいのか明記した方がわかりやすいので 引数に”新しいブロック名を入力:” を入れています。
(command-s “._RENAME” “_B” CuNm NwNm )
AutoCADコマンド RENAME[名前変更] を使って名前の変更をします。
このコマンドでは、ブロック、詳細ビュー スタイル、寸法スタイル、画層、線種、マテリアル、マルチ引出線スタイル、断面ビュー スタイル、印刷スタイル、文字スタイル、表スタイル、UCS、ビュー、ビューポートの名前を変更できます。
今回はブロックなので、B をオプションにいれます。
現在のブロック名(変数 CuNm)からユーザー入力の新しいブロック名(変数 NwNm)にブロック名が変更されます。
カスタマイズ例
今回は、getstring の例なので、シンプルなコマンドを作りました。
しかし、選択するときにブロックだけ選択するようにしたり、空振り対策を入れたり、同じブロック名があれば、ユーザー入力し直してもらう。などの対策があった方がエラーが出にくく便利なコマンドになります。
さらに、getstring で新しい名前を入力するとき、引数にTを入れると、空白キーで空白を入れることができるようになります。(エンターキーで確定)
それらを組み入れたコマンドサンプルがこちらです。
まとめ
- getstringは、文字列をユーザー入力で得るための関数。
- プロンプトメッセージを引数で設定できる。
- 戻り値はユーザー入力の文字列。
参考記事
getstring に空白を含む文字列を入力する場合について。
引数にTを入れると空白キー(スペースキー)で確定にならず、空白文字を入力できます。
ブロック名を取得したVLISP関数について。
AutoCAD 既存のコマンドをAutoLISPで使うには。