子育てプログラマーの日常

とあるプログラマーの日常をだらだらとつづってます。
息子:2007年8月生まれ 娘:2011年12月生まれ

また騙された...

はい、日本に何人居るかわからないIllustratorSDK使用者のためのブログです。
その他、大多数の皆様、おやすみなさい

Illustrator内部には、ユニーク(一意)なID(AIUIDRef)があり、
それをArtに設定して使用することができます。

で、ですね、そのIDの参照(AIUIDREFRef)なんかも持つことが出来て、
例えば、
「プラグインで、2つのArtを関連付け、1つのArtが変更された、場合に他方のArtも変更する」
なんて事をしたい場合に、それぞれのArtにIDを設定します。
で、さらに、お互いのIDの参照をそれぞれに持たしておくわけですね。

あとは、kAIArtSelectionChangedNotifierが飛んできたときに、
選択Art内に、対象のArtがあった場合、自身に設定した参照から、
他方のArtを探して、そちらも変更するように実装すればよいと。

ちなみに、ちゃんとIDの参照からArtを探してくれるAPI
(AIUIDUtilsSuite::GetReferencedArt)も用意されてるわけですよ。
うわーーーー、なんて便利なんでしょう!!!





と、思ってはいけません...

このIDの参照ですが、対象のArtを移動、Undo、移動とやってると、
内部で、おかしくなるようで、AIUIDUtilsSuite::GetReferencedArtが正しく動かなくなります。

で、さらにですね。
AIUIDUtilsSuite::GetReferencedArtが使えないなら、
ツリー構造を辿って、自力でArtを探せばよいかと思ってたんですけど、
使って確認してると、IDの参照(AIUIDREFRef)が存在しないIDをさしてたりするんですね...

で、AIUIDRef、AIUIDREFRefを使って、Undoする動作を含め、
Illustratorを動作させ続けると、どうやっても、落ちます...



結論:
「AIUIDRef、AIUIDREFRefは使うな」

Comments

Comment Form