--

--

コメント

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

06

20

コメント

スクリプトメモ02

XSIでツール作ってると、ツールのUIを構築することが結構あるかと思います。

スクリプトのレイアウト関係はjunkiさんのブログで友愛の記事を参考にすれば、すごく捗るかと思います。
もうjunkiさんのブログには足向けて眠れないくらい参考にさせてもらってます。まじリスペクト。

ただ、最近選択したオブジェクトのとあるN個あるプロパティ数パラメーターをUIにぶち込み、そのパラメーターからの値を実行する処理に反映させたいスプリクトを書く場面がありました。

レイアウトを宣言したカスタムプロパティのパラメーターは基本的にPPG.ScriptName.Valueでとってこれるんですが、パラメーターの数がN個の場合、ScriptNameを決めうちでとってこれない。

レイアウト構築用のカスタムプロパティを実体のある形式のカスタムプロパティにすれば、自分で決めたプロパティを取ってきて、中のパラメーターをループでアクセスすれば何の問題もないのですが、

無駄なものを極力残しておきたくないので、やっぱり XSIFactory.CreateObject ( "CustomProperty" ); こっちを主に使ってます。

そんでSDKと睨めっこした結果 PPG.Inspected; これに行き着きました。

PPG.Inspected;を使うとInspectされたプロパティのコレクションが帰ってきます。

XSIFactory.CreateObject ( "CustomProperty" );で作ったUIのパラメーターを弄るとSetValue("customparamset<ランダムな数値>.パラメーター名"以下略  ってログが記録されるかと思います。

その customparamset<ランダムな数値> を取得できるわけです。



これさえとってこれれば、とってきたUIのプロパティに.Parametersでプロパティ内のパラメーターコレクションを取得し、ループして、名前がわからないUI内のパラメーターにもアクセスして値をとってこれるわけです。

まあ、これより簡単なN個あるパラメーター取得の迂回方法ありそうだけど・・・・。

誰か知ってたら教えてください。
スポンサーサイト

06

03

コメント

自動生成されるクラスターの削除スクリプト

今まではjunkiさんの秒殺クラスタを使ってたんですが、個人的にじゃまで溜まりやすいクラスターのみ削除できるスプリクトを書いてみた

このスクリプトで削除されるのは
クラスターの名前に以下文字列が含まれるクラスター
Polygon_AUTO 
Point_AUTO 
Edge_AUTO
EnvelopWeightCls

EnvelopWeightClsはフリーズ後に残ってる空のエンンベロープクラスターのみ削除します。
エンベロープクラスターの中にエンベロープのプロパティが含まれている場合削除しません。

使用方法は実行したいオブジェクト(複数可)選んで実行
自己責任で使用してください


for ( var i = 0; i < Selection.count; i++ ){
var oObj = Selection(i)
var oPolyC = oObj.ActivePrimitive.Geometry.Clusters.Filter( "poly" );
var oPointC = oObj.ActivePrimitive.Geometry.Clusters.Filter( "pnt" );
var oEdgeC = oObj.ActivePrimitive.Geometry.Clusters.Filter( "edge" );

for ( var j = 0; j < oPolyC.count; j++ ){

var str=oPolyC(j).Name;
if ( rep = str.match("Polygon_AUTO")) {

Logmessage (oPolyC(j)+"を削除しました");
DeleteObj(oPolyC(j))


}
}

for ( var k = 0; k < oPointC.count; k++ ){

var str=oPointC(k).Name;
if ( rep = str.match("Point_AUTO")) {

Logmessage (oPointC(k)+"を削除しました");
DeleteObj(oPointC(k))


}
}

for ( var l = 0; l < oEdgeC.count; l++ ){

var str=oEdgeC(l).Name;
if ( rep = str.match("Edge_AUTO")) {

Logmessage (oEdgeC(l)+"を削除しました");
DeleteObj(oEdgeC(l))


}
}



for ( var m = 0; m < oPointC.count; m++ ){
var oEnv = oPointC(m);
var str = oEnv.Name;

if ( str.match("EnvelopWeightCls")) {
if(oEnv.Properties(0)){
}
else {
oEnvClusters_Col.Add(oEnv);
}
}
}
}



for ( var i = 0; i < oEnvClusters_Col.count; i++ ){
Logmessage (oEnvClusters_Col(i)+"を削除しました");
DeleteObj(oEnvClusters_Col(i));
}

06

01

コメント

スクリプトメモ01

ちょっとアクションソース関係でスクリプティグするかもしれないので、念のための備忘録。





//モデル選択
oModel = Selection(0)
//アクションソース取得
oActionSources = oModel.Sources

for ( var i = 0; i < oActionSources.count; i++ ){
oActionSource = oActionSources(i);
//アクションソースの項目を取得
oSourceItems = oActionSource.SourceItems

for ( var j = 0; j < oSourceItems.count; j++ ){
oSourceItem = oSourceItems(i);
//項目名をログにながす
Logmessage(oSourceItem.Target);
}
}



選択したモデルにぶら下がってるアクションソースすべての項目名を流します。
このスプリクト自体には特に意味は無いけど、応用として使う用としてのメモ

Designed by

Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。