myara CG blog

CG Design Blog. Thoughts, experiments and experiences.

SI | Boundary vertex has too many edges

Diablo3サーバーがまたメンテナンス。
毎週火曜日サーバーがダウンしてる。なんなんだよブリザードめ!

てことでまたSIをいじってました。


それで、何日前に頼まれたスクリプトを見つけて、少しを整理して公開しちゃおうかな。
こいつは誰か使えるかもしれない。


自分はこんなエラーは見たことないけど、知人はSIからMudbox にオブジェクトを持っていくと
「Boundary vertex has too many edges」が出てしまうエラーが出ていたらしいです。

なんのことか良く分からなかったけど、ググって見たら
どうやら境界頂点に境界エッジ2本以上があると出るエラーのようです。

toomany.jpg
↑ はダメってことです。


こういうエラーは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")
}

Comments

Only the administrator may view.

Only the administrator may read this comment.

  • 2012/06/24(日) 02:49:38 |
  • |
  • #
  • [ Edit ]

Post a comment


Only the blog author may view the comment.

Trackbacks

Trackbacks URL
http://myara.blog.fc2.com/tb.php/137-1e58fe07
Use trackback on this entry.

まとめtyaiました【SI | Boundary vertex has too many edges】

Diablo3サーバーがまたメンテナンス。毎週火曜日サーバーがダウンしてる。なんなんだよブリザードめ!てことでまたSIをいじってました。それで、何日前に頼まれたスクリプトを見つけて...

  • 2012/06/21(木) 14:42:43 |
  • まとめwoネタ速neo