/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public virtual ModelFiles Save( ScaffoldedModel scaffoldedModel, string outputDir, bool overwriteFiles) { CheckOutputFiles(scaffoldedModel, outputDir, overwriteFiles); var files = new ModelFiles(); Directory.CreateDirectory(outputDir); var contextPath = Path.GetFullPath(Path.Combine(outputDir, scaffoldedModel.ContextFile.Path)); Directory.CreateDirectory(Path.GetDirectoryName(contextPath)); File.WriteAllText(contextPath, scaffoldedModel.ContextFile.Code, Encoding.UTF8); files.ContextFile = contextPath; foreach (var entityTypeFile in scaffoldedModel.AdditionalFiles) { var additionalFilePath = Path.Combine(outputDir, entityTypeFile.Path); File.WriteAllText(additionalFilePath, entityTypeFile.Code, Encoding.UTF8); files.AdditionalFiles.Add(additionalFilePath); } return(files); }
/// <summary> /// Clears all file systems. /// </summary> public void Clear() { ModelFiles.Clear(); TextureFiles.Clear(); EffectFiles.Clear(); Objects.Clear(); }
private void PopulateFromProcessorInfo(ProcessorInfo info) { ModelFiles.files.Clear(); foreach (string m in info.models) { ModelFiles.Add(m, false); } ModelFiles.RefreshList(); TextureFiles.files.Clear(); foreach (string t in info.textures) { TextureFiles.Add(t, false); } TextureFiles.RefreshList(); DoMergeModels.IsChecked = info.mergeModels; Padding.Value = info.padding; DoKeepTransparency.IsChecked = info.keepTransparency; string[] exportIds = (string[])ExportModelFormats.Tag; ExportModelFormats.SelectedIndex = Array.IndexOf(exportIds, info.modelExportFormatId); ExportTextureFormats.SelectedIndex = (int)info.textureOutputType; FilesPrefix.Text = info.outputFilesPrefix; ExportDirectory.FullPath = info.outputDir; }
private void Form1_Shown(object sender, EventArgs e) { Stopwatch sw = new Stopwatch(); sw.Start(); var model = ModelFiles.GetAfricanHeadModel(); //var model = ModelFiles.GetDiabloModel(); sw.Stop(); var renderer = new ModelRenderer(new ShadowShaderRenderer(model, pictureBox1)); //var renderer = new ModelRenderer(new NoToneShaderRenderer(model, pictureBox1)); //var renderer = new ModelRenderer(new ToonShaderRenderer(model, pictureBox1)); //var renderer = new ModelRenderer(new NormalMapShaderRenderer(model, pictureBox1)); renderer.Render(); InfoViewer.ShowDiagnosticInfo ($"Loading Time: {sw.Elapsed.TotalMilliseconds:f2} ms", new PointF(10, 10), Graphics.FromImage(pictureBox1.Image)); InfoViewer.ShowDiagnosticInfo ($"Triangles Count: {model.FacesV.Count}", new PointF(10, 50), Graphics.FromImage(pictureBox1.Image)); InfoViewer.ShowDiagnosticInfo ($"Resolution: {pictureBox1.Width} X {pictureBox1.Height}", new PointF(10, 70), Graphics.FromImage(pictureBox1.Image)); }
private IntPtr HandleDropFiles(IntPtr hDrop) { const int MAX_PATH = 260; uint count = DragQueryFile(hDrop, 0xFFFFFFFF, null, 0); for (uint i = 0; i < count; i++) { int size = (int)DragQueryFile(hDrop, i, null, 0); StringBuilder filename = new StringBuilder(size + 1); DragQueryFile(hDrop, i, filename, MAX_PATH); string droppedFile = filename.ToString(); if (Path.GetExtension(droppedFile) == ".xml") { LoadSettingsFile(droppedFile); break; } if (Utils.IsModelExtensionSupported(Path.GetExtension(droppedFile))) { ModelFiles.Add(droppedFile, false); } else { if (Utils.IsImageSupported(droppedFile)) { TextureFiles.Add(droppedFile, false); } else { Log.Line(LogType.Warning, "Dropped file '{0}' is not supported", droppedFile); } } } DragFinish(hDrop); ModelFiles.RefreshList(); TextureFiles.RefreshList(); return(IntPtr.Zero); }
public void Refresh() { Log.Debug("Refresh models."); var files = Directory.GetFiles(dir, ModelFilePattern); ModelFiles.Clear(); SelectedModel = null; for (var i = files.Length - 1; i >= 0; i--) { var f = files[i]; ModelFiles.Add(f); var fileName = Path.GetFileName(f); if (SelectedModel == null && Regex.IsMatch(fileName, TimeRegex)) { SelectedModel = f; } } }
/// <summary> /// Loads the file from the specified stream. /// </summary> /// <param name="stream">The stream to read from.</param> public override void Load(Stream stream) { BinaryReader reader = new BinaryReader(stream, Encoding.GetEncoding("us-ascii")); short modelFileCount = reader.ReadInt16(); for (int i = 0; i < modelFileCount; i++) { string modelFile = reader.ReadNullTerminatedString(); ModelFiles.Add(modelFile); } short textureFileCount = reader.ReadInt16(); for (int i = 0; i < textureFileCount; i++) { TextureFile texture = new TextureFile(); texture.FilePath = reader.ReadNullTerminatedString(); texture.UseSkinShader = reader.ReadInt16() != 0; texture.AlphaEnabled = reader.ReadInt16() != 0; texture.TwoSided = reader.ReadInt16() != 0; texture.AlphaTestEnabled = reader.ReadInt16() != 0; texture.AlphaReference = reader.ReadInt16(); texture.DepthTestEnabled = reader.ReadInt16() != 0; texture.DepthWriteEnabled = reader.ReadInt16() != 0; texture.BlendType = (BlendType)reader.ReadInt16(); texture.UseSpecularShader = reader.ReadInt16() != 0; texture.Alpha = reader.ReadSingle(); texture.GlowType = (GlowType)reader.ReadInt16(); texture.GlowColour = reader.ReadColour3(); TextureFiles.Add(texture); } short effectFileCount = reader.ReadInt16(); for (int i = 0; i < effectFileCount; i++) { string effectFile = reader.ReadNullTerminatedString(); EffectFiles.Add(effectFile); } short objectCount = reader.ReadInt16(); for (int i = 0; i < objectCount; i++) { ModelListObject @object = new ModelListObject(); int cylinderRadius = reader.ReadInt32(); @object.BoundingCylinder = new BoundingCylinder(new Vector2(reader.ReadInt32(), reader.ReadInt32()), cylinderRadius); int partCount = reader.ReadInt16(); if (partCount > 0) { for (int j = 0; j < partCount; j++) { ModelListPart part = new ModelListPart(); part.Model = reader.ReadInt16(); part.Texture = reader.ReadInt16(); byte propertyType = 0; while ((propertyType = reader.ReadByte()) != 0) { byte size = reader.ReadByte(); switch ((ModelListPropertyType)propertyType) { case ModelListPropertyType.Position: part.Position = reader.ReadVector3(); break; case ModelListPropertyType.Rotation: part.Rotation = reader.ReadQuaternion(true); break; case ModelListPropertyType.Scale: part.Scale = reader.ReadVector3(); break; case ModelListPropertyType.AxisRotation: part.AxisRotation = reader.ReadQuaternion(true); break; case ModelListPropertyType.Parent: part.Parent = reader.ReadInt16(); break; case ModelListPropertyType.Collision: part.Collision = (CollisionType)reader.ReadInt16(); break; case ModelListPropertyType.ConstantAnimation: part.AnimationFilePath = reader.ReadString(size); break; case ModelListPropertyType.VisibleRangeSet: part.VisibleRangeSet = reader.ReadInt16(); break; case ModelListPropertyType.UseLightmap: part.UseLightmap = reader.ReadInt16() != 0; break; case ModelListPropertyType.BoneIndex: part.BoneIndex = reader.ReadInt16(); break; case ModelListPropertyType.DummyIndex: part.DummyIndex = reader.ReadInt16(); break; default: if (propertyType >= (int)ModelListPropertyType.Animation && propertyType < (int)ModelListPropertyType.Animation + ModelListPart.ANIMATION_COUNT) { propertyType -= (int)ModelListPropertyType.Animation; if (propertyType < ModelListPart.MONSTER_ANIMATION_COUNT) { part.MonsterAnimations[propertyType] = reader.ReadString(size); } else { propertyType -= ModelListPart.MONSTER_ANIMATION_COUNT; part.AvatarAnimations[propertyType] = reader.ReadString(size); } } else { stream.Seek(size, SeekOrigin.Current); } break; } } @object.Parts.Add(part); } int effectCount = reader.ReadInt16(); for (int j = 0; j < effectCount; j++) { ModelListEffect effect = new ModelListEffect(); effect.EffectType = (EffectType)reader.ReadInt16(); effect.Effect = reader.ReadInt16(); byte propertyType = 0; while ((propertyType = reader.ReadByte()) != 0) { byte size = reader.ReadByte(); switch ((ModelListPropertyType)propertyType) { case ModelListPropertyType.Position: effect.Position = reader.ReadVector3(); break; case ModelListPropertyType.Rotation: effect.Rotation = reader.ReadQuaternion(true); break; case ModelListPropertyType.Scale: effect.Scale = reader.ReadVector3(); break; case ModelListPropertyType.Parent: effect.Parent = reader.ReadInt16(); break; default: stream.Seek(size, SeekOrigin.Current); break; } } @object.Effects.Add(effect); } @object.BoundingBox = new BoundingBox(reader.ReadVector3(), reader.ReadVector3()); } Objects.Add(@object); } }
/// <summary> /// Saves the file to the specified stream. /// </summary> /// <param name="stream">The stream to save to.</param> public override void Save(Stream stream) { BinaryWriter writer = new BinaryWriter(stream, Encoding.GetEncoding("us-ascii")); writer.Write((short)ModelFiles.Count); ModelFiles.ForEach(modelFile => { writer.WriteString(modelFile); writer.Write((byte)0); }); writer.Write((short)TextureFiles.Count); TextureFiles.ForEach(texture => { writer.WriteString(texture.FilePath); writer.Write((byte)0); writer.Write((short)(texture.UseSkinShader ? 1 : 0)); writer.Write((short)(texture.AlphaEnabled ? 1 : 0)); writer.Write((short)(texture.TwoSided ? 1 : 0)); writer.Write((short)(texture.AlphaTestEnabled ? 1 : 0)); writer.Write(texture.AlphaReference); writer.Write((short)(texture.DepthTestEnabled ? 1 : 0)); writer.Write((short)(texture.DepthWriteEnabled ? 1 : 0)); writer.Write((short)texture.BlendType); writer.Write((short)(texture.UseSpecularShader ? 1 : 0)); writer.Write(texture.Alpha); writer.Write((short)texture.GlowType); writer.Write(texture.GlowColour.ToVector3()); }); writer.Write((short)EffectFiles.Count); EffectFiles.ForEach(effectFile => { writer.WriteString(effectFile); writer.Write((byte)0); }); writer.Write((short)Objects.Count); Objects.ForEach(@object => { writer.Write((int)@object.BoundingCylinder.Radius); writer.Write((int)@object.BoundingCylinder.Center.X); writer.Write((int)@object.BoundingCylinder.Center.Y); writer.Write((short)@object.Parts.Count); if (@object.Parts.Count > 0) { @object.Parts.ForEach(part => { writer.Write(part.Model); writer.Write(part.Texture); if (part.Position != Vector3.Zero) { writer.Write((byte)ModelListPropertyType.Position); writer.Write((byte)(sizeof(float) * 3)); writer.Write(part.Position); } if (part.Rotation != Revise.Types.Utils.QuaternionZero) { writer.Write((byte)ModelListPropertyType.Rotation); writer.Write((byte)(sizeof(float) * 4)); writer.Write(part.Rotation, true); } if (part.Scale != Vector3.Zero) { writer.Write((byte)ModelListPropertyType.Scale); writer.Write((byte)(sizeof(float) * 3)); writer.Write(part.Scale); } if (part.AxisRotation != Revise.Types.Utils.QuaternionZero) { writer.Write((byte)ModelListPropertyType.AxisRotation); writer.Write((byte)(sizeof(float) * 4)); writer.Write(part.AxisRotation, true); } if (part.Parent != 0) { writer.Write((byte)ModelListPropertyType.Parent); writer.Write((byte)sizeof(short)); writer.Write(part.Parent); } if (part.Collision != 0) { writer.Write((byte)ModelListPropertyType.Collision); writer.Write((byte)sizeof(short)); writer.Write((short)part.Collision); } if (string.Compare(part.AnimationFilePath, string.Empty) != 0) { writer.Write((byte)ModelListPropertyType.ConstantAnimation); writer.WriteByteString(part.AnimationFilePath); } if (part.VisibleRangeSet != 0) { writer.Write((byte)ModelListPropertyType.VisibleRangeSet); writer.Write((byte)sizeof(short)); writer.Write(part.VisibleRangeSet); } if (!part.UseLightmap) { writer.Write((byte)ModelListPropertyType.UseLightmap); writer.Write((byte)sizeof(short)); writer.Write((short)0); } if (part.BoneIndex != 0) { writer.Write((byte)ModelListPropertyType.BoneIndex); writer.Write((byte)sizeof(short)); writer.Write(part.BoneIndex); } if (part.DummyIndex != 0) { writer.Write((byte)ModelListPropertyType.DummyIndex); writer.Write((byte)sizeof(short)); writer.Write(part.DummyIndex); } for (int i = 0; i < part.MonsterAnimations.Length; i++) { string animationFile = part.MonsterAnimations[i]; if (string.Compare(animationFile, string.Empty) != 0) { writer.Write((byte)((byte)ModelListPropertyType.Animation + i)); writer.WriteByteString(animationFile); } } for (int i = 0; i < part.AvatarAnimations.Length; i++) { string animationFile = part.AvatarAnimations[i]; if (string.Compare(animationFile, string.Empty) != 0) { writer.Write((byte)((byte)ModelListPropertyType.Animation + ModelListPart.MONSTER_ANIMATION_COUNT + i)); writer.WriteByteString(animationFile); } } writer.Write((byte)0); }); writer.Write((short)@object.Effects.Count); @object.Effects.ForEach(effect => { writer.Write((short)effect.EffectType); writer.Write(effect.Effect); if (effect.Position != Vector3.Zero) { writer.Write((byte)ModelListPropertyType.Position); writer.Write((byte)(sizeof(float) * 3)); writer.Write(effect.Position); } if (effect.Rotation != Revise.Types.Utils.QuaternionZero) { writer.Write((byte)ModelListPropertyType.Rotation); writer.Write((byte)(sizeof(float) * 4)); writer.Write(effect.Rotation, true); } if (effect.Scale != Vector3.Zero) { writer.Write((byte)ModelListPropertyType.Scale); writer.Write((byte)(sizeof(float) * 3)); writer.Write(effect.Scale); } if (effect.Parent != 0) { writer.Write((byte)ModelListPropertyType.Parent); writer.Write((byte)sizeof(short)); writer.Write(effect.Parent); } writer.Write((byte)0); }); writer.Write(@object.BoundingBox.Minimum); writer.Write(@object.BoundingBox.Maximum); } }); }
private ModelFiles CheckModelFile(string asOfDate, List <string> fileNames) { var knownCsvFiles = new List <string> { asOfDate + @"/AnalyzerResults.csv", asOfDate + @"/CurrentVariables.csv", asOfDate + @"/FutureVariables.csv", asOfDate + @"/PastVariables.csv", asOfDate + @"/AssetCashflowTable.csv", asOfDate + @"/CashflowTable.csv", asOfDate + @"/AmortizationSchedule.csv", asOfDate + @"/Reinvestment.csv", }; //文件名称/路径完全匹配 Func <string, string, bool> cmpFileName = (left, right) => left.Equals(right, StringComparison.CurrentCultureIgnoreCase); //检查文件扩展名 Func <string, string, bool> checkExtension = (fileName, ExtensionName) => { return(fileName.Length - ExtensionName.Length - 1 == fileName.LastIndexOf("." + ExtensionName, StringComparison.CurrentCultureIgnoreCase)); }; //检查collateral.csv文件 Func <string, string, bool> checkCollateral = (fileName, ExtensionName) => { return(checkExtension(fileName, ExtensionName) && !knownCsvFiles.Contains(fileName)); }; //查找文件 Func <ModelFile, Func <string, string, bool>, string, string> findFile = (modelFile, cmpFunc, param) => { var fileCount = fileNames.Count(x => cmpFunc(x, param)); CommUtils.Assert(fileCount < 2, "Search file [" + modelFile.PathName + "] failed!"); if (modelFile.MustExist) { CommUtils.Assert(fileCount > 0, "Can't find file [" + modelFile.PathName + "] !"); } return(fileNames.SingleOrDefault(x => cmpFunc(x, param))); }; var modelFiles = new ModelFiles(asOfDate); modelFiles.YmlFile.ZipPathName = findFile(modelFiles.YmlFile, checkExtension, "yml"); modelFiles.Amortization.ZipPathName = findFile(modelFiles.Amortization, cmpFileName, modelFiles.Amortization.PathName); modelFiles.Reinvestment.ZipPathName = findFile(modelFiles.Reinvestment, cmpFileName, modelFiles.Reinvestment.PathName); modelFiles.CashflowTable.ZipPathName = findFile(modelFiles.CashflowTable, cmpFileName, modelFiles.CashflowTable.PathName); modelFiles.CurrentVariables.ZipPathName = findFile(modelFiles.CurrentVariables, cmpFileName, modelFiles.CurrentVariables.PathName); modelFiles.FutureVariables.ZipPathName = findFile(modelFiles.FutureVariables, cmpFileName, modelFiles.FutureVariables.PathName); modelFiles.PastVariables.ZipPathName = findFile(modelFiles.PastVariables, cmpFileName, modelFiles.PastVariables.PathName); modelFiles.AnalyzerResults.ZipPathName = findFile(modelFiles.AnalyzerResults, cmpFileName, modelFiles.AnalyzerResults.PathName); modelFiles.AssetCashflowTable.ZipPathName = findFile(modelFiles.AssetCashflowTable, cmpFileName, modelFiles.AssetCashflowTable.PathName); //查找collateral.csv modelFiles.collateral.ZipPathName = findFile(modelFiles.collateral, cmpFileName, modelFiles.collateral.PathName); if (string.IsNullOrEmpty(modelFiles.collateral.ZipPathName)) { //查找其它csv来替代collateral.csv modelFiles.collateral.ZipPathName = findFile(modelFiles.collateral, checkCollateral, "csv"); } return(modelFiles); }
public AdmFilesController() { _modelFiles = new ModelFiles(); }