リンクをクリップボードにコピー
コピー完了
illustrator CC2017を使用しております。
javascriptでは「pageItem」という、グループ、パス、複合パス等どれでも受けれるインターフェースがあると思うのですが
C#のAPIではpageItemが無いようなのですが、代わりになるインターフェースはあるんでしょうか?
pageItems(リストの方)のはjavascript側もC#側も存在するので存在自体はあるのではないかと思いますが…
C#のAPI側では提供されていないんでしょうか?
C#でpageItemsをforeachでループする場合に、pageItemが無いのでobject扱いになってしまい
pageItemが持っているプロパティにアクセスできず困っています。
宜しくお願い致します。
dynamicで受け取って、PageItemTypeでswitchするならこんな感じ?
var app = new Illustrator.Application();
var doc = app.ActiveDocument;
foreach (Illustrator.Layer layer in doc.Layers)
{
foreach (dynamic pageItem in layer.PageItems)
{
switch ((Illustrator.AiPageItemType)pageItem.PageItemType)
{
case Illustrator.AiPageItemType.aiPathItem:
var pathItem = pageItem as Illustrator.PathItem;
break;
}
}
}
リンクをクリップボードにコピー
コピー完了
確かにCOMコンポーネントを使用した時に、PageItemsコレクションオブジェクトはあっても
PageItemオブジェクトはないですね。ただ、それぞれのTypeNameは取得できますので、
それに応じた処理を行うのではないでしょうか(当然それぞれのオブジェクトに共通で
使えるものもあると思います)。
以下の図はExcel VBAの画面ですが、C#でも同じものがあるはずです。
リンクをクリップボードにコピー
コピー完了
dynamicで受け取って、PageItemTypeでswitchするならこんな感じ?
var app = new Illustrator.Application();
var doc = app.ActiveDocument;
foreach (Illustrator.Layer layer in doc.Layers)
{
foreach (dynamic pageItem in layer.PageItems)
{
switch ((Illustrator.AiPageItemType)pageItem.PageItemType)
{
case Illustrator.AiPageItemType.aiPathItem:
var pathItem = pageItem as Illustrator.PathItem;
break;
}
}
}
リンクをクリップボードにコピー
コピー完了
noellaboさん
回答ありがとうございます。
dynamicで実行時の内容を見ると中身的にはpageItemの様な感じで取得できるんですね。
position等のどのタイプでもあるプロパティを参照するのに、わざわざタイプをみないとダメなのかと思っていたのですが
この方法なら思ってたように上手く参照できそうです。
ありがとうございます。
リンクをクリップボードにコピー
コピー完了
回答ありがとうございます。
やっぱり無いですよね…
使い方間違ってるとかではないのが分かっただけでも助かりました。
それぞれのタイプごとにキャストして使用するということですね。
ありがとうございます。