AutoCAD ノーコード ソリューション:ダイナミック ブロック

ダイナミック ブロックの例として、コイルばねの形状と関連するスクリプトが表示されている画像

AutoCAD の長い歴史の中で API が果たす役割は決して小さくはありません。実際、AutoLISP、ObjectARX(C#)ActiveX オートメーション(VBA)、.NET API(VB、C#)が古くから多く利用されています。

これら AutoCAD API を使ったカスタマイズで最初の切り口になっているのが、自動作図、あるは、作図補助をおこなうカスタム コマンドの作成です。カスタム コマンドを用意することで、標準コマンドによる対面操作の手数を減らして、より業務に特化させたり、利便性を高めたりすることが可能になります。

例えば、引張コイルばねを作図するために、次のような TCBANE コマンドを作成することが出来ます。

(defun C:TCBANE (/)
(setq num nil)
(while (< num 3)
(progn
(initget 6)
(setq num (getint "nコイル巻き数<3> :"))
(if (= num nil)
(setq num 3)
)
(if (< num 3)
(princ "n3以上の値を入力してください ...")
)
)
)
(entmake
'((0 . "ARC")
(10 -5.32907e-15 -3.55271e-15 0.0)
(40 . 10.7226)
(50 . 6.28319)
(51 . 5.32325)
)
)
(setq sset (ssadd (entlast)))
(entmake
'((0 . "ARC")
(10 -5.32907e-15 -3.55271e-15 0.0)
(40 . 12.2226)
(50 . 0.60179)
(51 . 5.32325)
)
)
(setq sset (ssadd (entlast) sset))
(entmake '((0 . "LINE") (10 7.0106 -10.0122 0.0) (11 6.15024 -8.78345 0.0)))
(setq sset (ssadd (entlast) sset))
(entmake '((0 . "LINE") (10 9.84818 9.93789 0.0) (11 11.6924 -9.9769 0.0)))
(setq sset2 (ssadd (entlast)))
(entmake '((0 . "LINE") (10 11.3546 9.93848 0.0) (11 13.1988 -9.97631 0.0)))
(setq sset2 (ssadd (entlast) sset2))
(entmake
'((0 . "ARC")
(10 10.6014 9.93818 0.0)
(40 . 0.75001)
(50 . 2.36844e-15)
(51 . 3.14159)
)
)
(setq sset2 (ssadd (entlast) sset2))
(entmake
'((0 . "ARC")
(10 12.4456 -9.9766 0.0)
(40 . 0.75001)
(50 . 3.14159)
(51 . 0.0)
)
)
(setq sset2 (ssadd (entlast) sset2))
(initcommandversion)
(command "ARRAY"
sset2
""
"R"
"AS"
"Y"
"COU"
num
1
"B"
(list 12.4456 -9.9766 0.0)
"S"
1.95082461
1
""
)
(setq sset (ssadd (entlast) sset))
(setq num (- num 3))
(entmake
(list (cons 0 "ARC")
(cons 10 (list (+ (* num 1.95082461) 26.9435) -5.32907e-15 0.0))
(cons 40 10.7226)
(cons 50 3.14159)
(cons 51 2.18166)
)
)
(setq sset (ssadd (entlast) sset))
(entmake
(list (cons 0 "ARC")
(cons 10 (list (+ (* num 1.95082461) 26.9435) -5.32907e-15 0.0))
(cons 40 12.2226)
(cons 50 3.74338)
(cons 51 2.18166)
)
)
(setq sset (ssadd (entlast) sset))
(entmake
(list (cons 0 "LINE")
(cons 10 (list (+ (* num 1.95082461) 19.9329) 10.0122 0.0))
(cons 11 (list (+ (* num 1.95082461) 20.7933) 8.78345 0.0))
)
)
(setq sset (ssadd (entlast) sset))
(initget 1)
(setq pt (getpoint "n伸張コイルばねの配置位置を指示 :"))
(command "MOVE" sset "" '(0.0 0.0 0.0) pt)
(command "ROTATE" sset "" pt PAUSE)
(princ)
)

このコマンドでは、コイルばねの巻き数と配置座標を入力・指示させることで、より汎用性を持たせた作図を実現しています。

AutoCADのユーザーインターフェースのアニメーション、コマンド入力が示されている。

一方、ダイナミック ブロックを利用すると、こういった作図系のカスタム コマンドを代替出来る可能性があります。

もともと AutoCAD が持っていたブロックの機能は、よく利用する形状をブロック定義(BLOCK コマンド)であらかじめ登録しておき、作図空間のモデル空間やペーパー空間(レイアウト)にブロック参照を挿入(INSERT コマンド)するものです。挿入時には、挿入位置や角度、尺度を変更出来るものの、形状そのものを可変にするようなことは出来ませんでした。このようなブロックをスタティック ブロック(静的なブロック)と呼ぶことがあります。

そこで用意されたのが AutoCAD 2006 で登場したダイナミック ブロック(動的なブロック)です。ダイナミック ブロックは、ブロック エディタでパラメータと呼ばれる可変要素と作図したオブジェクトを関連図付け、パラメータ値が変化した際の振る舞いをアクションとして定義します。このブロック定義をブロック参照として作図空間に挿入すると、挿入後のブロック参照の形状を変化させることが出来るようになります。

例えば、伸張コイルばねの形状に直線状パラメータと回転パラメータを関連付け、ストレッチ アクションと回転アクションを振る舞いとして定義したとします。

AutoCADのダイナミックブロックのデザインインターフェースを示す画像で、コイルばねの形状とパラメータを表示している。

このブロック参照をモデル空間などの挿入後に選択すると、ブロック エディタで定義したパラメータによってグリップが表示されます。グリップをマウスで操作すると、コイルばねの回転角度やコイルの巻き数を動的に変化させることが出来ます。もちろん、基点グリップで挿入位置を変えることも可能です。

AutoCADのダイナミックブロックでコイルばねの形状を定義し、パラメータを変化させる様子のGIFアニメーション

AutoCAD 2010 では、拘束機能導入にともない、ブロック エディタで幾何拘束・寸法拘束を使用してダイナミック ブロックを定義出来るようにもなっています。

お気づきと思いますが、ダイナミック ブロックは、今話題のノーコード ソリューションと考えることも出来るのです。古くから作図系のカスタム コマンドを AutoCAD API で開発・保守されていて、まだダイナミック ブロックを未評価である場合には、一度ダイナミック ブロックの可能性を探ってみることをお勧めします。

既製のダイナミック ブロックは、業種別にツールパレットから挿入、ブロック エディタで内容を確認することが出来ます。

もちろん、ダイナミック ブロックでブロック属性を使用することも出来ます。

By Toshiaki Isezaki