毎週火曜日サーバーがダウンしてる。なんなんだよブリザードめ!
てことでまたSIをいじってました。
それで、何日前に頼まれたスクリプトを見つけて、少しを整理して公開しちゃおうかな。
こいつは誰か使えるかもしれない。
自分はこんなエラーは見たことないけど、知人はSIからMudbox にオブジェクトを持っていくと
「Boundary vertex has too many edges」が出てしまうエラーが出ていたらしいです。
なんのことか良く分からなかったけど、ググって見たら
どうやら境界頂点に境界エッジ2本以上があると出るエラーのようです。

↑ はダメってことです。
こういうエラーはSIで見つけてくれるツールとかがないですか・・・と聞いてきたんですね。
作れって事か、ちゃんと酒をおごれよ。
こういうツールは見たことない。ていうか、この問題の存在も知らなかったし。
でもすぐに作れそうだったので、書いてみました。
以前書いたスクリプトを流用してすぐに出来ました。
DOWNLOAD
使い方:
普通のスクリプトです。
スクリプトエディターで実行するか、ツールバーにボタンを作ってから実行してください。
実行すると、Mudboxが嫌いな頂点を選択してくれます。
ん~これ使う人がいるんですかね。
こんな汚いTopologyでオブジェクトをMudboxに持っていかないですよね、普通。
でも、もう書いちゃったんだから今度mCleanerに入れておこう。
/*
Too Many Edges
----------------------------------------------------
2012/06/20
myara
Finds Boundary Vertex with more than 2 Boundary Edges
2012/06/20 Added Multiple Objects Support and comments
2012/06/14 First Version
*/
// Turn Log Off
var prefs = Application.Preferences;
prefs.SetPreferenceValue( "scripting.cmdlog", false );
ActivateObjectSelTool(null);
var oSel = SIFilter(selection, siPolyMeshFilter);
if (oSel != null){
// Create an empty Array to gather all objs results
var aTotal =[]
for ( var k=0, c = oSel.Count; k < c; k++ ) {
var oObj = oSel(k);
var oPoints = oObj.ActivePrimitive.Geometry.Points;
// Create Coll Vertex Cluster
var oTooManyEdges = oObj.ActivePrimitive.Geometry.CreateSubComponent(siVertexCluster)
for ( var i=0, a = oPoints.Count; i < a; i++ ) {
// Filter Boundary Points
if (oPoints(i).IsBoundary){
var edgeboundary = 0
// Collect all Adjacent Boundary Edges
for ( var j=0, b=oPoints(i).NeighborEdges().Count; j < b ; j++ ) {
if (oPoints(i).NeighborEdges()(j).IsBoundary) edgeboundary += 1
}
// If they are more than 2 Boundary Edges, add the Vertex to Coll
if (edgeboundary > 2) oTooManyEdges.Addelement(oPoints(i).index)
}
}
// Add the result to the aTotal Array
if (oTooManyEdges.ComponentCollection.Count > 0){
aTotal.push(String(oTooManyEdges))
logmessage ("["+ oObj + "] : Found "+ oTooManyEdges.ComponentCollection.Count + " Boundary Vertex with more than 2 boundary edges")
}
}
if (aTotal.length !=0){
SelectObj(aTotal)
SelectFilter("Vertex");
}
else {
logmessage ("No Boundary Vertex with more than 2 boundary edges found")
}
}
else{
logmessage ("You need to select at least 1 Polymesh object")
}