Sponsored links

【AutoLISP 変換関数】 関数 itoa 整数を文字列に変換

Sponsored links
AutoLISP
Sponsored links

整数を文字列にする関数 itoa の紹介です。

Sponsored links

予備知識

AutoLISPでは、文字列と数字を区別します。”” がついた ”1″  は文字列で、1 は数字です。数字が引数として欲しい関数に文字列を渡しても、文字列が欲しい関数に数字を渡してもエラーが起きます。
詳しくはコチラの記事を

変換関数 itoa

AutoLISP itoa は、整数を文字列にする関数です。
引数として、整数を渡せば、文字列にしてくれます。

例えば、(itoa 1) と、数字の1を引数として渡すと、”1″ と文字列に変換された1が戻り値になります。

使用例

コマンドの内容

コチラの記事で使った、図形の色を変更、図形の色番号はグローバル変数に保存するコマンドを使います。

(defun c:test (/ Obj)
  
  (if (null g00ChCol)
    (setq g00ChCol (acad_colordlg 1)) ; 色選択ダイアログボックスを出して色をユーザ選択
  );if
  
   (setq Obj (car(entsel))) ; 色を変える図形をユーザ選択
   (command-s "._CHANGE" Obj "" "_P" "_C" g00ChCol "") ; コマンドで選択された図形を選択された色にする 
(princ))

内容は、

  • 変数g00ChColに色番号が入っていなければ、色選択ダイアログボックスを開いて、色番号をユーザ選択し、その色番号をg00ChColに入れる。
  • 図形をユーザー選択。
  • 選択された図形をg00ChColに入っている色番号の色に変更。

です。

g00ChColに値が入れば、これはグローバル変数なので、2回目以降は色はユーザー選択なしで同じ色になります。

が、何色を選択したのか覚えていないことも考えて、色選択ダイアログボックスは出さないけれど、現在何色に設定しているのか表示した方が親切です。

“プロンプト” は、ユーザーに何をして欲しいか伝えるメッセージのことです。
entsel で図形選択をするとき何も引数を入れなければ、”オブジェクトを選択”とプロンプトがでますが、ここに色番号を追加したいと思います。

プロンプトを変更したAutoLISPプログラム

(defun c:test (/ Obj)
  
  (if (null g00Col)
    (setq g00Col (acad_colordlg 1)) ; 色選択ダイアログボックスを出して色をユーザ選択
  );if
  
   (setq msg (strcat "色を変える図形を選択 <" (itoa g00Col) ">:"))
   (setq Obj (car(entsel msg))) ; 色を変える図形をユーザ選択
   (command-s "._CHANGE" Obj "" "_P" "_C" g00Col "") ; コマンドで選択された図形を選択された色にする 
(princ))

プロンプトを変えたコマンドプログラムです。
機能は変わりませんが、図形選択の時のプロンプトが

色を変える図形を選択 <1> :

になりました。

関数 entsel の引数はプロンプト(文字列)

g00ChColに入る情報(色選択ダイアログボックスの戻り値)は数値です。しかし、entsel に引数として渡せるのは文字列のみです。

そこで、itoa で色番号を文字列にする必要があります。
(itoa g00ChCol) で、色番号の文字列バージョンが戻り値になります。

Jagaimo
Jagaimo

ちなみに、(command-s…… ) の部分で渡す色番号は文字でも数字でもいいです。

引数として渡すと、初期値の”オブジェクトを選択”は使われずに引数の文字列だけになります。
図形選択の部分を、(setq Obj (car(entsel (itoa g00ChCol ))))) とすると、色番号だけがプロンプトになってしまうので、他の文字も入れましょう。

関数 strcat

関数strcat は、文字列をつなげる関数です。
現在のg00ChColが1の場合、

  • “色を変える図形を選択 <“
  •  (itoa g00Col)
  •  “>:”

の3つの文字列を合わせて、

色を変える図形を選択 <1> :

という文字列を作るには

 (strcat “色を変える図形を選択 <“ (itoa g00Col) “>:”)

で出来ます。

これを変数msg に入れて図形選択時のプロンプトにすると

(setq msg (strcat "色を変える図形を選択 <" (itoa g00Col) ">:"))
(setq Obj (car(entsel msg))) 

となります。
変数msgを介さずに、

(setq Obj (car(entsel (strcat "色を変える図形を選択 <" (itoa g00Col) ">:")))) 

とひとまとめにしても同じです。

まとめ

  • AutoLISP では、”” がついた ”1” は文字列。1 は数字。
  • 関数 entsel に引数(文字列)と付けるとその引数がプロンプトになる。
  • 関数 itoa は、整数を文字列に変換する機能がある。
  • 関数 strcat は、複数の文字列をつなげる機能がある。  

Comments