Sponsored links

【AutoLISP ユーザー入力】文字列 getstring

Sponsored links
AutoLISP
Sponsored links
Jagaimo
Jagaimo

関数 getstring は、文字列をユーザー入力で得る機能があります。

ブロックの名前を変更するコマンドを例にお話します。

Sponsored links

関数 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で使うには。