// Simple Split 0.221
// 面選択を省けるだけのSplit
@name "SimpleSplit"
@version 2.5
@warnings
@script modeler
@define MAX_POINT 20
main
{
selmode(DIRECT);
var SelPts = pointcount();
// 1行内で2つのdefineは効かない?↓
if((SelPts <= 1) || (SelPts >= MAX_POINT)){
error("
Lower than 2 or Higher than ",MAX_POINT,". now [",SelPts,"] Pts");
return;
}
editbegin();
// 頂点を含むポリのリスト作成
var TempBuf, StockPol, StorePol;
var StockSize = 1;
for(i = 1; i <= SelPts; i++){
TempBuf = points[i].polygon();
if(TempBuf == nil){
error("
Found 0 pt Poly");
return;
}
// 可変数配列のTempBufは使い回し。nilを含みうる為size()でなくcount()を使う
x = TempBuf.count();
for(c = 1; c <= x; c++){
StockPol[StockSize] = TempBuf[c];
StockSize++;
}
}
editend();
StockPol.sortA();
// (*1)で最後に重複判定を失敗させる為の終端
StockPol[StockSize] = 0;
var Flag = false;
// 比較の基点用
i = 1;
// 格納配列用
c = 1;
// 重複する(構成頂点の2点以上が選択されてる)ポリだけを抽出(*1)
while(i < StockSize){
for(x = i + 1; x <= StockSize; x++){
// 基点と重複していたらフラグ
if(StockPol[i] == StockPol[x]){
Flag = true;
}else{
// してなければ、過去に重複していたか判定。重複ありなら格納
if(Flag){
StorePol[c] = StockPol[i];
c++;
Flag = false;
}
// IDでソートされている為、直下に重複が無ければ基点をずらして次の重複チェックへ
i = x;
break;
}
}
}
selmode(USER);
selpolygon(SET, POLYID, StorePol);
splitpols();
selpolygon(CLEAR);
selpoint(CLEAR);
}