IllustratorCSをC#から使っていて、選択中のオブジェクトを取得するだけのコードを書こうとして、はまった。
選択中のオブジェクトを取得するために、ActiveDocumentのSelectionプロパティから拾ってきます。
Selectionで取得できるのがobjectの配列になっていて、GetTypeで型を見るとSystem.__ComObjectが返ってくるのです。System.__ComObjectはprivateなクラスらしいので、キャストすることもできません。
Comオブジェクトの型が特定できればよいので、Microsoft.VisualBasic.Information.TypeNameを使うことで解決できました。Microsoft.VisualBasicを参照に追加すれば使うことができます。
// Microsoft.VisualBasicを参照に追加しておく
// _docはActiveDocument
object[] items = (object[])_doc.Selection;
if(items != null){ // 空のときはnull
foreach (object item in items) {
Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(item));
}
}
// ------------console-----------
// PathItem
JavaScriptでIllustratorを操作するときは、PathItemというクラスがあるらしく、PathItemのtypenameプロパティを見て、テキストオブジェクトだったりパスオブジェクトだったりを判別できるようです。PathItemsはあるけれど、なぜPathItemクラスがないのか解りません。ちなみにPathItemsもobjectを返しますが、本題と同じやり方でクラスを判別できます。
0 件のコメント :
コメントを投稿