LISP カスタマイズにチャレンジ #4:数字のカウントアップLISPを徹底解説!その2

February 3, 2020 AUG-JP (ユーザー会)

初心者向けの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のところは、既定値(文字列自体)となっています。

このように、変更したいプロパティのグループコードを調べ、そのグループコードを持つリストを置き換えることで、オブジェクトを操作することができます。

共通のグループコードでない場合は、同じ番号でも違う意味を持つので、注意が必要です。

著者について

AUG-JP (ユーザー会)

AUG-JPはAutodesk製品のユーザーで構成された独立したコミュニティです。 ユーザ同士の助け合いの場として、ウェブサイト、コミュニティ(SNS)などを運営しています。 多くの企業様にご協力を頂きながら全国各地でユーザ参加型の「学びと交流」を目的としたイベント 「AUG-JP WorkShop」を開催したり勉強会をサポートしています。

Twitterでフォローする ウェブサイトを見る このライターによる他のコンテンツ
前の記事
カスタマイズの基本 7:ツールパレット
カスタマイズの基本 7:ツールパレット

AutoCAD LTでも出来るカスタマイズの基本として、今回は「ツールパレット」のカスタマイズをご説明します。私個人としては、UI(ユーザインタフェース)のカスタマイズの中で一番お勧めです。以下にツールパレットの主...

次の記事
AutoCAD ビギナーの「あるある」:印刷について その2
AutoCAD ビギナーの「あるある」:印刷について その2

AutoCAD ビギナーにとって分かりにくい基本的なことについて説明していきます。 第3回は印刷についてその2です。