AutoCAD外部参照の話。
AとB、2つの図面があったとする。
Aを配置しているBを、Aに配置する。
循環参照の出来上がり。
EXCELでは聞いたことがあるが、AutoCADにもあることを知った。
そんな循環参照を、AutoCADで作ることができることに驚いた。
一応警告メッセージが出る。
「循環参照が見つかりました。継続しますか?」
「はい」とすると、循環参照状態の図面ができる。
「いいえ」とすると、外部参照が配置されない。
「はい」としたからといって、無限に図形が描かれた図面ができるわけではない。
AとBの例で言えば、Aの中にAの図形は現れない。
自分の中に自分は現れないということ。
プログラムの世界では循環参照は当たり前。
再帰呼び出し、リカーシブと言う。
DWGを読み込む際、外部参照やブロックを展開する。
ブロック参照があったら、対応するブロック定義を探して
さらにブロック定義中にブロック参照があったら、
ブロック参照からブロック定義へ...。
ブロック参照処理関数内から、自分を呼び出すことになる。
いつか収束することを前提にしている。
循環参照しているDWGを某CADで読み込んだら、永久ループになってしまった。
数分後にバッファーオーバーフローで、アプリケーションエラー発生。
再帰呼び出ししているプログラム内で、循環参照しているDWGを
チェックしなければならなくなった。ややこしい。
自分あるいは現在呼び出し中の外部参照は、呼び出さないようにした。
けっこう苦労した。