//IOpsCommand public void Run(OpsContext context, OpsStatement statement) { FlattenArguments arguments = statement.Arguments as FlattenArguments; ArrayList models = statement.GetContent(context); OpsConsole.WriteLine("Flattening models into '{0}'", arguments.NewModel); Mesh[] meshes; Matrix[] localToWorlds; int[][] adjacencies; ExtendedMaterial[] materials; EffectInstance[] effectInstances; GetLists(models, out meshes, out localToWorlds, out adjacencies, out materials, out effectInstances); Mesh newMesh = PrtEngine.ConcatenateMeshes( meshes, MeshFlags.SystemMemory | MeshFlags.Use32Bit, localToWorlds, null, null, context.Device); int[] newAdj = ConcatenateAdjacency(newMesh, meshes, adjacencies); OpsMeshContainer newMC = new OpsMeshContainer(); newMC.Name = arguments.NewModel; newMC.ReplaceMesh(newMesh); newMC.SetMaterials(materials); newMC.SetEffectInstances(effectInstances); newMC.SetAdjacency(newAdj); OpsFrame newFrame = new OpsFrame(); newFrame.Name = arguments.NewModel; newFrame.MeshContainer = newMC; OpsModel newModel = new OpsModel(); newModel.Name = arguments.NewModel; newModel.HierarchyRoot = newFrame; context.AddModel(newModel); }
//IOpsCommand public void Run(OpsContext context, OpsStatement statement) { FlattenArguments arguments = statement.Arguments as FlattenArguments; ArrayList models = statement.GetContent(context); OpsConsole.WriteLine( "Flattening models into '{0}'", arguments.NewModel); Mesh[] meshes; Matrix[] localToWorlds; int[][] adjacencies; ExtendedMaterial[] materials; EffectInstance[] effectInstances; GetLists( models, out meshes, out localToWorlds, out adjacencies, out materials, out effectInstances); Mesh newMesh = PrtEngine.ConcatenateMeshes( meshes, MeshFlags.SystemMemory|MeshFlags.Use32Bit, localToWorlds, null, null, context.Device); int[] newAdj = ConcatenateAdjacency( newMesh, meshes, adjacencies); OpsMeshContainer newMC = new OpsMeshContainer(); newMC.Name = arguments.NewModel; newMC.ReplaceMesh( newMesh ); newMC.SetMaterials( materials ); newMC.SetEffectInstances( effectInstances ); newMC.SetAdjacency( newAdj ); OpsFrame newFrame = new OpsFrame(); newFrame.Name = arguments.NewModel; newFrame.MeshContainer = newMC; OpsModel newModel = new OpsModel(); newModel.Name = arguments.NewModel; newModel.HierarchyRoot = newFrame; context.AddModel(newModel); }