やっとネット復帰しました。
背面のポリゴンを作成
旗を作るんですが、ポリゴンが両面必要な仕様でした
違いを作るために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さんのこの記事を参考にしてます、ありがたいこってす。
コマンダーは必見デス