二本のエッジを選択して 実行
エラー処理しておりません
#CreateStaps #階段状のポリゴンを作成 app = Application; log = app.LogMessage nbStep = 50 #エッジを2本選択する def getQuadPosition(oSub): quadPos = [] oObj = oSub.Parent3DObject m = XSIMath.CreateMatrix4() oObj.Kinematics.Global.TransForm.GetMatrix4(m) oCol = oSub.ComponentCollection aEdge = oCol(0) bEdge = oCol(1) a1Pos = aEdge.Points(0).Position a1Pos.MulByMatrix4InPlace(m) a2Pos = aEdge.Points(1).Position a2Pos.MulByMatrix4InPlace(m) b1Pos = bEdge.Points(0).Position b1Pos.MulByMatrix4InPlace(m) b2Pos = bEdge.Points(1).Position b2Pos.MulByMatrix4InPlace(m) v1 = XSIMath.CreateVector3() v2 = XSIMath.CreateVector3() v1.Sub(a2Pos,a1Pos) v2.Sub(b2Pos,b1Pos) quadPos.append(a1Pos) quadPos.append(a2Pos) if v1.Dot(v2) > 0: quadPos.append(b1Pos) quadPos.append(b2Pos) elif v1.Dot(v2) < 0: quadPos.append(b2Pos) quadPos.append(b1Pos) else : return -1 return quadPos def vLog(i,v): log(str( i ) + " : " + str(v.X) + ", " + str(v.Y) + ", " + str(v.Z)) def createIndexPosArray(nbStep,qp): aPos = [] s0 = qp[0] s1 = qp[1] s2 = qp[2] s3 = qp[3] aH = s2.Y - s0.Y bH = s3.Y - s1.Y aS = aH * 1.0 / nbStep bS = bH * 1.0 / nbStep #p1 = XSIMath.CreateVector3() #p2 = XSIMath.CreateVector3() v1 = XSIMath.CreateVector3() v2 = XSIMath.CreateVector3() v1.Sub(s2,s0) v2.Sub(s3,s1) aPos.append(s0) aPos.append(s1) for i in range(nbStep): p1 = XSIMath.CreateVector3() p2 = XSIMath.CreateVector3() p3 = XSIMath.CreateVector3() p4 = XSIMath.CreateVector3() temp = ( i + 1.0) / nbStep #log( temp ) p1.ScaleAdd( temp ,v1 , s0 ) p2.ScaleAdd( temp ,v2 , s1 ) p3.Set(p1.X,p1.Y - aS ,p1.Z) aPos.append(p3) p4.Set(p2.X,p2.Y - bS ,p2.Z) aPos.append(p4) aPos.append(p1) aPos.append(p2) return aPos def createMesh(aPos): oRoot = app.ActiveSceneRoot Name = "Step" vertex = [] for v in aPos: vertex.append(v.X) vertex.append(v.Y) vertex.append(v.Z) mesh = [] for i in range(len(aPos) / 2 - 1): mesh.append(4) mesh.append(i * 2) mesh.append(i * 2 +1) mesh.append(i * 2 +3) mesh.append(i * 2 +2) #log("mesh : " + str(mesh)) oMesh = oRoot.addPolygonMesh(vertex,mesh,Name) return oMesh def main (): log("----------------------------") oSel = app.Selection oSub = oSel(0).SubComponent qp = getQuadPosition(oSub) if qp == -1: return aPos = createIndexPosArray(nbStep,qp) #log("aPos") #for i,v in enumerate(aPos): # vLog(i,v) oMesh = createMesh(aPos) main()
0 件のコメント:
コメントを投稿