背面のポリゴンを作成
旗を作るんですが、ポリゴンが両面必要な仕様でした違いを作るためにUVでパターンを作ります
最初から両面で作るとUVが面倒ですので
片面ですすめてあとで両面化します
10パターン以上を1000個以上
作業中・・・1000本以上を配置完了
両面化、忘れてた orz < イマココ
そんな時のスクリプトです
Script
#Python #1128 2012 #選択したオブジェクトの BACKPolyを作成 app = Application; log = app.Logmessage from win32com.client import constants as c #ログの表示を消す cmdLog = app.Dictionary.GetObject( "preferences.scripting" ) cmdLog.cmdlog.value = False #クラスターを削除するか選択 deleteCluster = Flase #Trueにした場合クラスターは削除されるが、距離が無効になる #背面ポリゴンの距離 backPolyDistance = -0.02 #裏面ポリゴンの作成ルーチン def createBackPoly(outCluster): oObj = app.Selection(0) if oObj.Type != "polymsh": return oGeo = oObj.ActivePrimitive.Geometry oSub = oGeo.Polygons.SubComponent op = app.DuplicateMeshComponent(oSub, "siPersistentOperation", "", "", "", "", "", "", "", "", "", "", "", "", True) op = app.ApplyOp("Push", oSub, 3, "siPersistentOperation", "", 0) op(0).ampl = backPolyDistance nSub = oGeo.Clusters("Polygon_Auto").CreateSubComponent() oGeo.Clusters("Polygon_Auto").Name = "BackFace" app.ApplyTopoOp(u"InvertPolygon", nSub, "siUnspecified", "siPersistentOperation", "") outCluster.Add(oGeo.Clusters("BackFace")) def getMeshs(): oColl = XSIFactory.CreateObject("XSI.Collection") oColl.Unique = True oColl.Items = app.Selection return app.SIFilter(oColl.Expand(),c.siPolyMeshFilter) def main(): oMeshs = getMeshs() oClusterColl = XSIFactory.CreateObject("XSI.Collection") #オブジェクトの数繰り返す for oMesh in oMeshs: app.SelectObj(oMesh) createBackPoly(oClusterColl) #選択しなおし app.SelectObj(oMeshs) #BackFaceクラスターをを削除 if(deleteCluster): app.DeleteObj(oClusterColl) main()
高速化にあたって
コマンドモデルを多用してるため、ログの非表示など高速化とかしてます
VBS - JScript の For Loop Performance について
myaraさんのこの記事を参考にしてます、ありがたいこってす。
コマンダーは必見デス
試してみたらエラーが出ました。
返信削除原因はdeleteCluster = Flase
の False のスペルミスだったので報告します。
ブログへのリンクありがとうございます。
全く更新してないブログですけど・・・。
おふう、ほんとですね!
削除ありがとうございます!
修正します!