/// <summary> /// This list handles the different emitters of the scene and reuse any emitter if needed. /// </summary> //private List<MitsubaEmitter> _emittersUsed; #endregion /// <summary> /// Main ctor. /// </summary> /// <param name="basePath">The path of the scene folder.</param> /// <param name="fileName">The path of the scene XML file.</param> public MitsubaScene(string basePath, string fileName) { BasePath = basePath; FileName = fileName; _meshStore = new MeshStore(BasePath); _mitsubaXml = new MitsubaXml(); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // Allow to select one of these if (RhinoDoc.ActiveDoc.RenderMaterials.Count < 1) { MessageBox.Show(@"Please, apply at least one material.", @"Mitsuba Render", MessageBoxButtons.OK, MessageBoxIcon.Error); return(Result.Failure); } RenderMaterial renderMaterial = null; if (RhinoDoc.ActiveDoc.RenderMaterials.Count == 1) { renderMaterial = RhinoDoc.ActiveDoc.RenderMaterials.First(); } else { var materialName = RhinoDoc.ActiveDoc.RenderMaterials.Select(material => material.Name).ToList(); var userSelectedMaterial = Dialogs.ShowComboListBox("Materials", "Select one material", materialName); if (userSelectedMaterial != null) { foreach (var material in RhinoDoc.ActiveDoc.RenderMaterials.Where(material => material.Name == userSelectedMaterial.ToString())) { renderMaterial = material; } } } if (renderMaterial == null) { return(Result.Failure); } XmlElement materialXml; var mitsubaMaterial = renderMaterial as MitsubaMaterial; // Create the material XML if (mitsubaMaterial != null) { materialXml = MitsubaXml.CreateMaterialXml(mitsubaMaterial); } else { MessageBox.Show(@"Please, select a Mitsuba material", @"Mitsuba Render", MessageBoxButtons.OK, MessageBoxIcon.Error); return(Result.Failure); } // Create the files in a temp folder var tmpFolder = Path.Combine(Path.GetTempPath(), "Mitsuba"); if (!Directory.Exists(tmpFolder)) { Directory.CreateDirectory(tmpFolder); } // Copy model var modelFileName = Path.Combine(tmpFolder, "matpreview.serialized"); File.WriteAllBytes(modelFileName, Resources.matpreview); // Copy HDRI var envFileName = Path.Combine(tmpFolder, "envmap.exr"); File.WriteAllBytes(envFileName, Resources.envmap); // Copy the project var projectFileName = Path.Combine(tmpFolder, "mitsubaproject.xml"); var project = Resources.mitsubaproject; project = project.Replace("[MATERIAL]", materialXml.OuterXml); File.WriteAllText(projectFileName, project); MitsubaRenderPlugIn.ExecuteMitsuba(projectFileName, tmpFolder); return(Result.Success); }