閉じる
閉じる
「理論は分かった。よし、後は自分で組めるぞ~」
という方はおめでとうございます。生い立ち6までショートカットです。
「そうやって口で説明するのは簡単だけど、具体的にどう書けばいいんだよ」
という方のために、この先の実際のコード書きまくりの記事があります。
まずはシェイプレイヤーのパスの頂点座標取得するところです。
面積を求めるためにもこれが必要です。
AdobeExtendScriptのソフトのパラメータにアクセスする時にはルールがあります。
恐らくプログラムのこんなマイナーなアルゴリズムの記事を読みに来ている方なら、最初の方はご存知の方が多いでしょうが、「階層」という考え方に従って、ソフトのパラメータにアクセスします。
最も上は「app」、アプリケーションへのアクセスです。
その中に入っていくにつれ文が長くなって行きます。
「app.project」で、現在のプロジェクトにアクセス
「app.project.item」で、プロジェクトに存在するアイテム、このプロジェクトというのはAEのプロジェクトパネルの事だと思うと分かりやすいと思います。(厳密には違います)
アイテムというのは、プロジェクトパネルに並んでいるコンポジションとか、フォルダーとか、平面とか、フッテージとかを言います。
こんな具合で潜っていくわけです。そしてこの辺の基礎やらなんやらは解説記事とか本とかの方がよほど詳しく解説されているので、そっちを見て勉強してください。
じゃ、テキストをシェイプにした直後でのテキストシェイプのパスの頂点の座標はどこにあるかと言うと、
app.project.activeItem.selectedLayers[0].property("ADBE Root Vectors Group").property(N文字目).property(2).property(N番目のパス).property(2).value.vertices[N番目の頂点][0ならX座標、1ならY座標]
という、マントル超えたような場所に居るわけです。
一応ざっくり説明しておきましょう。
app.project.activeItemで、今編集しているコンポジションを取得しています。ここは今後compと略しましょう。
comp.selectedLayers[0]で、選択しているレイヤーの0番目を取得しています。プログラムでは1番目は0番目ですよね、分からない方は配列の要素番号についてググってくだしあ。
テキストをシェイプレイヤーにするコマンドを叩いた直後は必ずテキストシェイプのレイヤーを選択した状態に、AEの仕様的になるので、ここを参照しているわけです。
そして
comp.selectedLayers[0].property("ADBE Root Vectors Group")
でシェイプのコンテンツの中へ、property(N文字目)というのは、テキストシェイプのコンテンツのすぐ下には必ず1文字ずつに分けられたグループがあるためです。で、この後。property(2)です。グループのすぐ下にはもうパスがあると思ってしまって私も躓いたのですが、グループのすぐ下にあるプロパティは(1)がマテリアル、(2)がコンテンツ、(3)がトランスフォームなのです。
シェイプのグループのマテリアルとかいつのためにあるの?スクリプト操作以外で出てこないよね???とか思いますが、あるもんはあるのです。
この(2)のコンテンツの中に入って初めて、その中にあるパスや塗りなどの次のコンテンツにアクセスできるのです。
で、
comp.selectedLayers[0].property("ADBE Root Vectors Group").property(N文字目).property(2).property(N番目のパス)
でどのパスかを選んで、更にその下のproperty(2)でパスプロパティにアクセスできるわけです。コンテンツからパスを追加して、パスプロパティグループを「▽」こうして開いたときプロパティがパスプロパティしかないのに、パスプロパティグループ内のpropertyの2番目がパスプロパティなのは納得いきませんが、1番目になんかあるらしくこうやって取るしかないわけです。
comp.selectedLayers[0].property("ADBE Root Vectors Group").property(N文字目).property(2).property(N番目のパス).property(2).value
で実際のパスオブジェクトにやっとアクセス出来ます。ここが分かれてるのは、例えば.valueの所を.keyとすれば、パスプロパティに打たれたキーフレームにアクセスできたりして、そこの区別のためにあるのです。
で、もう流石に描くのがめんどくさいですね!
path.value.verticesが頂点へのアクセス。
path.value.vertices[N]でN番目のインデックスに格納されている頂点へのアクセス
path.value.vertices[N][0]でN番目の頂点のX座標、1ならY座標というわけです。
いつの間にやら11階層。何処だよここ。
これで面積取ったりは出来そうです。
では実際のグループ分けはどうやっているのでしょうか。
長くなってるので次の記事へ行きますよ。
という方はおめでとうございます。生い立ち6までショートカットです。
「そうやって口で説明するのは簡単だけど、具体的にどう書けばいいんだよ」
という方のために、この先の実際のコード書きまくりの記事があります。
まずはシェイプレイヤーのパスの頂点座標取得するところです。
面積を求めるためにもこれが必要です。
AdobeExtendScriptのソフトのパラメータにアクセスする時にはルールがあります。
恐らくプログラムのこんなマイナーなアルゴリズムの記事を読みに来ている方なら、最初の方はご存知の方が多いでしょうが、「階層」という考え方に従って、ソフトのパラメータにアクセスします。
最も上は「app」、アプリケーションへのアクセスです。
その中に入っていくにつれ文が長くなって行きます。
「app.project」で、現在のプロジェクトにアクセス
「app.project.item」で、プロジェクトに存在するアイテム、このプロジェクトというのはAEのプロジェクトパネルの事だと思うと分かりやすいと思います。(厳密には違います)
アイテムというのは、プロジェクトパネルに並んでいるコンポジションとか、フォルダーとか、平面とか、フッテージとかを言います。
こんな具合で潜っていくわけです。そしてこの辺の基礎やらなんやらは解説記事とか本とかの方がよほど詳しく解説されているので、そっちを見て勉強してください。
じゃ、テキストをシェイプにした直後でのテキストシェイプのパスの頂点の座標はどこにあるかと言うと、
app.project.activeItem.selectedLayers[0].property("ADBE Root Vectors Group").property(N文字目).property(2).property(N番目のパス).property(2).value.vertices[N番目の頂点][0ならX座標、1ならY座標]
という、マントル超えたような場所に居るわけです。
一応ざっくり説明しておきましょう。
app.project.activeItemで、今編集しているコンポジションを取得しています。ここは今後compと略しましょう。
comp.selectedLayers[0]で、選択しているレイヤーの0番目を取得しています。プログラムでは1番目は0番目ですよね、分からない方は配列の要素番号についてググってくだしあ。
テキストをシェイプレイヤーにするコマンドを叩いた直後は必ずテキストシェイプのレイヤーを選択した状態に、AEの仕様的になるので、ここを参照しているわけです。
そして
comp.selectedLayers[0].property("ADBE Root Vectors Group")
でシェイプのコンテンツの中へ、property(N文字目)というのは、テキストシェイプのコンテンツのすぐ下には必ず1文字ずつに分けられたグループがあるためです。で、この後。property(2)です。グループのすぐ下にはもうパスがあると思ってしまって私も躓いたのですが、グループのすぐ下にあるプロパティは(1)がマテリアル、(2)がコンテンツ、(3)がトランスフォームなのです。
シェイプのグループのマテリアルとかいつのためにあるの?スクリプト操作以外で出てこないよね???とか思いますが、あるもんはあるのです。
この(2)のコンテンツの中に入って初めて、その中にあるパスや塗りなどの次のコンテンツにアクセスできるのです。
で、
comp.selectedLayers[0].property("ADBE Root Vectors Group").property(N文字目).property(2).property(N番目のパス)
でどのパスかを選んで、更にその下のproperty(2)でパスプロパティにアクセスできるわけです。コンテンツからパスを追加して、パスプロパティグループを「▽」こうして開いたときプロパティがパスプロパティしかないのに、パスプロパティグループ内のpropertyの2番目がパスプロパティなのは納得いきませんが、1番目になんかあるらしくこうやって取るしかないわけです。
comp.selectedLayers[0].property("ADBE Root Vectors Group").property(N文字目).property(2).property(N番目のパス).property(2).value
で実際のパスオブジェクトにやっとアクセス出来ます。ここが分かれてるのは、例えば.valueの所を.keyとすれば、パスプロパティに打たれたキーフレームにアクセスできたりして、そこの区別のためにあるのです。
で、もう流石に描くのがめんどくさいですね!
path.value.verticesが頂点へのアクセス。
path.value.vertices[N]でN番目のインデックスに格納されている頂点へのアクセス
path.value.vertices[N][0]でN番目の頂点のX座標、1ならY座標というわけです。
いつの間にやら11階層。何処だよここ。
これで面積取ったりは出来そうです。
では実際のグループ分けはどうやっているのでしょうか。
長くなってるので次の記事へ行きますよ。
広告