サンプルコード

【サンプルコード】AutoLISPで200個の円を一度に作成しよう!初心者向けに解説

samplecode0_eyecatch
  • AutoLISPを覚えてAutoCADを効率化したい
  • サンプルコードを参考にしたいけど検索しても見つからない
  • プログラミングは苦手なので解説付きだとうれしい

AutoLISPでAutoCADの作業を楽にしたいけど、プログラミングが苦手でコード(プログラム)を作れずにお困りではないでしょうか。マイナーなプログラム言語なのでサンプルコードを検索しても見つからずにお困りの方も多いはず。

私はAutoLISPを独学し、業務の自動化・効率化に役立つプログラムを5年以上作成しています。数行で書けるような簡単なプログラムから、1000行以上の少し複雑なプログラムまで様々なツールを作成してきました。

そもそもAutoLISPってなに?という方はこちらの記事をご覧ください。
>>AutoCADユーザー必見!【AutoLISPを覚えるべきメリット5選】デメリットも解説

当記事ではAutoLISPのサンプルコードとして、200個の円を一度に作成できるコードをご紹介します。初心者向けの解説付きなので、どんな方でも参考にしやすい内容になっています。

AutoLISPを覚えて今よりもAutoCADを効率化したい方はぜひ最後までお読みください。

サンプルコードの動作解説

samplecode0_1

今回ご紹介するAutoLISPのサンプルコードは以下のとおりです。

コードの使用は自己責任でお願いします。不具合を防ぐため、コピーしたdwgファイルで実行することをおすすめします。

(defun c:test0
       (
	    /
	    num column xpitch ypitch radius n
	    kx ky x y center ent
       )

  ;初期値
  (setq num 200)
  (setq column 20)
  (setq xpitch 2)
  (setq ypitch 2)
  (setq radius 0.5)

 ;ループ
  (setq n 0)
  (repeat num

  ;中心座標の算出
    (setq kx (rem n column))
    (setq ky (fix (/ n column)))
    (setq x (* kx xpitch))
    (setq y (* ky ypitch))
    (setq center (list x y))

  ;円と画層の作成
    (setq ent (list (cons 0 "circle") (cons 10 center) 
           (cons 40 radius) (cons 8 (itoa (1+ n))) (cons 62 n)))
    (entmake ent)

  ;ループカウントをカウントアップ
    (setq n (1+ n))
  )
)

上記のコードが書かれたlspファイルをロードして、コマンドラインに「test0」と入力すると動作が始まります。

lspファイルの使い方についてはこちらの記事を参考にしてください。
>>【入門】AutoLISP開発をはじめよう!Visual LISP エディタの使い方

動作の流れは以下のようになっています。

  1. 作図に必要な初期値を設定する
  2. 円の中心座標を算出する
  3. 円を作図する(画層名と色は変数nに従う)
  4. 円の作図を200回繰り返す
はこさん。
はこさん。

順番に解説していきます。

①作図に必要な初期値を設定する

まず最初に、円の作図に必要な初期値をそれぞれの変数に格納します。コードで示すと以下の5行(9行目~13行目)です。

;初期値
(setq num 10)
(setq column 20)
(setq xpitch 2)
(setq ypitch 2)
(setq radius 0.5)

各変数の内容は下表をご覧ください。

変数名内容
num 作成する円の数200
column 列方向(Y方向)に作図する円の数20
xpitch行方向(X方向)の中心間ピッチ2
ypitch列方向(Y方向)の中心間ピッチ2
radius円の半径0.5

今回はあらかじめ初期値を指定していますが、ユーザー入力関数を使うことでコードを実行するたびに任意の値を指定できます。

ユーザー入力関数についてはこちらの記事で解説しています。
>>AutoCADに情報を取り込もう!AutoLISPのユーザー入力関数8種を解説

はこさん。
はこさん。

ユーザー入力関数はよく使う関数なので、使い方をしっかり覚えておくことをおすすめします。

②円の中心座標を算出する

初期値に設定したX方向とY方向のピッチ、列数、円の番号から円の中心座標を算出します。コードで示すと次の5行(20行目~24行目)です。

;中心座標の算出
(setq kx (rem n column))
(setq ky (fix (/ n column)))
(setq x (* kx xpitch))
(setq y (* ky ypitch))
(setq center (list x y))

「rem」は割り算の余りを求めるAutoLISP関数で、「fix」は割り算の商を求めるAutoLISP関数です。中心のX座標とY座標の求め方は次のとおり。円の番号と列数から求めた座標の係数にピッチをかけて算出しています。

  • X座標の係数 = 円の番号(変数n)を列数で割った余り
  • Y座標の係数 = 円の番号(変数n)を列数で割ったときの商
  • 中心のX座標 = X座標の係数 x X方向のピッチ
  • 中心のY座標 = Y座標の係数 x Y方向のピッチ

たとえば円の数が12個(変数nは0~11)で列数が4の場合、座標の求め方を図で表すと以下のようになるので参考にしてください。

samplecode0_1-1

X座標とY座標を算出したら、中心座標のリスト(変数center)を作成して次の動作へ移ります。

はこさん。
はこさん。

格子状に円を配置するため、少しややこしい計算で中心座標を算出しています。

③円を作図する(画層名と色は変数nに従う)

円の中心座標を算出したら円の作図を行います。コードで示すと以下の3行(25行目~27行目)です。

;円と画層の作成
(setq ent (list (cons 0 "circle") (cons 10 center)
           (cons 40 radius) (cons 8 (itoa (1+ n))) (cons 62 n)))
(entmake ent)

円を作図する場合、通常は「circle」コマンドを使用しますが、今回は「entmake」で作図します。

「entmake」とは与えられた図形定義データから作図を行うAutoLISP関数のこと。詳細はこちらの記事をご覧ください。
>>図形編集を自動化しよう!AutoLISPの図形名関数を解説

図形定義データとは図形種や座標など図形に関する情報を1つにまとめたものです。図形の各情報は情報の種類を表す数値(グループコード)とセットになっています。

上記のコードで使用しているグループコードは次のとおり。

グループコード図形情報の種類
0図形種
10座標(円の中心)
40半径
8画層
62図形の色(色番号)

今回のコードでは作図する円ごとに画層を分け、画層名は円の番号(変数n)+1としています。通常であれば円を作図する前に「layer」コマンドでの画層作成が欠かせません。

「entmake」は図形定義データの画層が図面内に存在しない場合、作図のタイミングで画層も一緒に作成してくれます。画層作成の手間を省けるので、コードがシンプルになります。

はこさん。
はこさん。

ただし、「entmake」で作成される画層は単純な新規作成なので、設定などはデフォルトのままです。画層の色などを変更したい場合は「layer」コマンドを活用しましょう。

④円の作図を200回繰り返す

前述した②と③を指定した円の数(200個)だけ繰り返します。今回のコードでは動作の繰り返しに「repeat」というAutoLISP関数を使用しています。

「repeat」とは決められた回数だけ動作を繰り返すAutoLISP関数のこと。繰り返しの関数についてはこちらの記事をご覧ください。
>>AutoCADで楽をしたい人必見【繰り返しを自動化するAutoLISP関数3選】

「repeat」に変数numを与えているので、200回動作を繰り返すことができます。

(setq n 0)
(repeat num
  ・・・
  (setq n (1+ n))
)

また、動作を繰り返す直前で変数nをカウントアップするため、変数nに1を足しています。値が何も入っていない状態(変数nがnil)で1を足そうとするとエラーになるので、あらかじめ変数nに数値の0を格納しておく必要があります。

動作が完了すると下記のように、それぞれ色の異なる円が格子状に200個作成されます。

samplecode0_1-2
はこさん。
はこさん。

ぱっと見では分かりにくいですが、円の色は200個すべて違います。

サンプルコードを活用してAutoCADを楽にしよう

samplecode0_last

今回ご紹介したサンプルコードの動作内容を以下にまとめます。

  1. 円の作図に必要な初期値をそれぞれの変数に格納する
  2. X方向とY方向のピッチ、列数、円の番号から円の中心座標を算出する
  3. 円の図形定義データをもとに「entmake」で円と対象の画層を作成する
  4. 円の数だけ①~③を繰り返し、色と画層が異なる円を200個作成する

列数やピッチを変えたり、作成する図形を球体にしたり、コードを自由に書き換えてみることで動作をより理解しやすくなります。今回のサンプルコードを活かして、AutoCADの作業が楽になるツール作成に役立ててください。

あなたに代わってAutoLISPプログラムを作成します

AutoLISPで作業を自動化したいけど、プログラミングに詳しくないのでツールが作れずにお悩みの方へ。5年以上のAutoLISP経験を活かしてAutoCADを自動化するツールを作成します。既にお持ちのAutoLISPプログラム修正も対応可能です。

AutoCADの面倒くさい作業から解放されたい方は、下記リンク先の「ココナラ」からお気軽にご相談ください。
>>AutoCADが楽になるプログラムを作成します|ココナラ

AutoCADが楽になるプログラムを作成します AutoCADを効率化して面倒な作業から解放されましょう!

-サンプルコード