初心者向けのLISP解説、今回は作成したコードを1つずつ実行して、変数がどう使われているか確認します。
コードをステップごとに実行してみよう
前回作成したLISP(以下、plusone.lspと表記)の中で、それぞれの変数にどんな値が入るのか、ステップごとに実行しながら、確認してみましょう。
VLISPエディタには以下のコードが表示されています。
(defun c:plusone ( / ename elist dpair txtval num Newnum Newelist Newtxtval Newpair)
(setq ename (car (entsel)))
(setq elist (entget ename))
(setq dpair (assoc 1 elist))
(setq txtval (cdr dpair))
(setq num (atoi txtval))
(setq Newnum (+ 1 num))
(setq Newtxtval (itoa Newnum))
(setq Newpair (cons 1 Newtxtval))
(setq Newelist (subst Newpair (assoc 1 elist) elist))
(entmod Newelist)
(princ)
)
まず、2行目の(の前にカーソルを置き、デバッグ→ブレークポイントを切り替えを選びます。そうすると、(の背景色が赤になります。
ブレークポイントを設定すると、その位置でコードの進行を一時停止することができます。
次に、enameの文字列の中にカーソルを移動しダブルクリックします。そうするとename全体が選択されるので、デバッグ→ウォッチを追加を選びます。ウォッチが開き、ENAME = nilと表示されます。
残りの変数も同じようにしてウォッチに追加してください。
コードの画面と、ウォッチが図のようになったら、エディタ内のテキストをロードします。
コマンドラインにplusoneと入力すると、VLISPエディタの2行目の表示が反転し、コマンドが止まります。ここからステップごとに実行します。デバッグ→ステップ インをクリックするかF8キーを押してください。3回続けるとコマンドラインに「オブジェクトを選択:」と表示されるので、数字を選択します。そうすると再度VLISPエディタがアクティブになるので、またステップ インしていきます。もう1度2行目全体が反転表示になると、ウォッチのENAMEに値が入っています。このままステップ インを進め、(princ)が反転表示されたところで一旦ストップします。ウォッチがこんな風になっているでしょうか。
ウォッチに表示された内容を見てみましょう。enameには図形名が入り、elistにはオブジェクトのプロパティを示すリストが入っています。dpairはelistから文字内容を示す1を持つリストを取得し、txtvalでそのセットの後ろだけを抜き出しています。ここで、数字が” ”で囲まれているのは、文字扱いされているということです。そして、numで数字に変換しているので、” ”がなくなっています。Newnumで1足された数字となり、Newtxtvalで今度は文字扱いに変換、そして、1とのリストを作成してNewpairに入れて、Newelistでは、elistの1を持つリストが置き換えられています。
elistとNewelistはウォッチでは見づらいとので、違う表示をしてみましょう。ウォッチのELISTとNEWELISTそれぞれを選択してダブルクリックしてください。検査という別のウインドウが表示されます。文字内容を示す1を持つリストが、elistでは(1 . “6”)、Newelistでは(1 . “7”)になっていることを確認できます。
このようにして、コードの中で変数にどのような値が入っているかを、確認することができます。ただし、これらはローカル変数として定義されているため、コマンドが終了するとすべての値がnilに戻ります。なので、確認するためにはブレークポイントを設定して、処理を止める必要があります。
変数でなくても、ウォッチに追加は可能です。関数式そのものを追加することもできるので、例えば(atoi txtval)を選んで追加すると、numと同じ値が表示されます。
それぞれの変数の値が確認できたので、ステップ インをあと少し繰り返して、コマンドを終了しましょう。コード全体が反転表示され、選んだ数字が+1されたらコマンド終了です。ウォッチの各変数がnilになっています。
ブレークポイントを設定した位置にカーソルを移動し、デバッグ→ブレークポイントを切り替えでブレークポイントを解除して保存します。ブレークポイントの解除を忘れると、使うときにその位置で止まってしまうので、注意してください。また、ウォッチもウインドウをクリアできれいにしておきましょう。
DXFグループコードを知ろう
「文字内容を示すのは、1とセットなったリスト」、これはどうしたら分かるのかというと、ヘルプのDXFリファレンスで調べることができます。DXFリファレンスは、ヘルプ→開発者用ドキュメント→一般的なリソースの中にあります。
DXFリファレンスを開いたら、概要 - DXF の ENTITIES セクションを開きます。AutoCADのデータで作図される文字や線分、寸法などはエンティティと呼びます。まずは図形に共通のグループ コード(DXF)を見てみましょう。
0:図形タイプ
6:線種名
8:画層名
62:色番号
などがあります。
次に概要 - DXF の ENTITIES セクションに戻り、TEXT[文字記入] (DXF)のところを見てみましょう。1のところは、既定値(文字列自体)となっています。
このように、変更したいプロパティのグループコードを調べ、そのグループコードを持つリストを置き換えることで、オブジェクトを操作することができます。
共通のグループコードでない場合は、同じ番号でも違う意味を持つので、注意が必要です。
著者について
Twitterでフォローする ウェブサイトを見る このライターによる他のコンテンツ