private void buttonSelectMeshes_Click(object sender, EventArgs e) { bool selectInvalidMeshes = Control.ModifierKeys == Keys.Control; List <DockContent> formXXList; if (!Gui.Docking.DockContents.TryGetValue(typeof(FormXX), out formXXList)) { return; } List <DockContent> formPPList; if (!Gui.Docking.DockContents.TryGetValue(typeof(FormPP), out formPPList)) { return; } try { List <string> srcParserVarList = new List <string>(); List <string> srcEditorVarList = new List <string>(); foreach (FormPP form in formPPList) { foreach (ListViewItem item in form.otherSubfilesList.SelectedItems) { if (item.Text.ToLower().EndsWith(".sviex")) { string srcParserVar = Gui.Scripting.GetNextVariable("sviexParser"); srcParserVarList.Add(srcParserVar); string parserCommand = srcParserVar + " = OpenSVIEX(parser=" + form.ParserVar + ", name=\"" + item.Text + "\")"; Gui.Scripting.RunScript(parserCommand); string srcEditorVar = Gui.Scripting.GetNextVariable("sviexEditor"); srcEditorVarList.Add(srcEditorVar); Gui.Scripting.RunScript(srcEditorVar + " = sviexEditor(parser=" + srcParserVar + ")"); } } } foreach (FormXX xxForm in formXXList) { while (xxForm.listViewMesh.SelectedItems.Count > 0) { xxForm.listViewMesh.SelectedItems[0].Selected = false; } } foreach (string srcEditorVar in srcEditorVarList) { sviexEditor editor = (sviexEditor)Gui.Scripting.Variables[srcEditorVar]; foreach (sviParser svi in editor.Parser.sections) { foreach (FormXX xxForm in formXXList) { if (selectInvalidMeshes) { xxFrame meshFrame = xx.FindFrame(svi.meshName, xxForm.Editor.Parser.Frame); if (meshFrame == null || meshFrame.Mesh == null) { Report.ReportLog("Mesh " + svi.meshName + "[" + svi.submeshIdx + "] is missing in " + xxForm.Editor.Parser.Name + "."); continue; } if (svi.submeshIdx >= meshFrame.Mesh.SubmeshList.Count || meshFrame.Mesh.SubmeshList[svi.submeshIdx].VertexList.Count != svi.indices.Length) { foreach (ListViewItem item in xxForm.listViewMesh.Items) { if (item.Text == svi.meshName) { item.Selected = true; break; } } } } else { foreach (ListViewItem item in xxForm.listViewMesh.Items) { if (!item.Selected) { xxFrame meshFrame = xxForm.Editor.Meshes[(int)item.Tag]; if (meshFrame.Name == svi.meshName) { item.Selected = true; break; } } } } } } } foreach (string parserVar in srcParserVarList) { Gui.Scripting.RunScript(parserVar + "=null"); } foreach (string editorVar in srcEditorVarList) { Gui.Scripting.RunScript(editorVar + "=null"); } } catch (Exception ex) { Utility.ReportException(ex); } }
private void buttonCopyToSVIEXes_Click(object sender, EventArgs e) { List <DockContent> formXXList; if (!Gui.Docking.DockContents.TryGetValue(typeof(FormXX), out formXXList)) { return; } List <DockContent> formPPList; if (!Gui.Docking.DockContents.TryGetValue(typeof(FormPP), out formPPList)) { return; } groupBoxAA2SVIEXJuggler.Enabled = false; try { List <string> srcParserVarList = new List <string>(); List <string> srcEditorVarList = new List <string>(); foreach (FormPP form in formPPList) { foreach (ListViewItem item in form.otherSubfilesList.SelectedItems) { if (item.Text.ToLower().EndsWith(".sviex")) { string srcParserVar = Gui.Scripting.GetNextVariable("sviexParser"); srcParserVarList.Add(srcParserVar); string parserCommand = srcParserVar + " = OpenSVIEX(parser=" + form.ParserVar + ", name=\"" + item.Text + "\")"; Gui.Scripting.RunScript(parserCommand); string srcEditorVar = Gui.Scripting.GetNextVariable("sviexEditor"); srcEditorVarList.Add(srcEditorVar); Gui.Scripting.RunScript(srcEditorVar + " = sviexEditor(parser=" + srcParserVar + ")"); } else if (item.Text.ToLower().EndsWith(".svi")) { string srcParserVar = Gui.Scripting.GetNextVariable("sviParser"); srcParserVarList.Add(srcParserVar); string parserCommand = srcParserVar + " = OpenSVI(parser=" + form.ParserVar + ", name=\"" + item.Text + "\")"; Gui.Scripting.RunScript(parserCommand); string srcEditorVar = Gui.Scripting.GetNextVariable("sviexEditor"); srcEditorVarList.Add(srcEditorVar); Gui.Scripting.RunScript(srcEditorVar + " = sviexEditor(parser=" + srcParserVar + ")"); } } } foreach (string srcEditorVar in srcEditorVarList) { sviexEditor editor = (sviexEditor)Gui.Scripting.Variables[srcEditorVar]; bool sviexChanged = false; for (ushort j = 0; j < editor.Parser.sections.Count; j++) { sviParser submeshSection = editor.Parser.sections[j]; foreach (FormXX xxForm in formXXList) { foreach (ListViewItem item in xxForm.listViewMesh.SelectedItems) { xxFrame meshFrame = xxForm.Editor.Meshes[(int)item.Tag]; if (submeshSection.meshName == meshFrame.Name) { for (ushort i = 0; i < meshFrame.Mesh.SubmeshList.Count; i++) { if (radioButtonSubmeshesAll.Checked || radioButtonSubmeshesSelected.Checked && xxForm.textBoxMeshName.Text == meshFrame.Name && i < xxForm.dataGridViewMesh.Rows.Count && xxForm.dataGridViewMesh.Rows[i].Selected) { if (submeshSection.submeshIdx == i) { bool copied = (bool)Gui.Scripting.RunScript(srcEditorVar + ".CopyIntoSVI(meshFrame=" + xxForm.EditorVar + ".Meshes[" + (int)item.Tag + "], submeshIdx=" + i + ", positions=" + checkBoxElementsPositions.Checked + ", bones=" + checkBoxElementsBonesWeights.Checked + ", normals=" + checkBoxElementsNormals.Checked + ", uvs=" + checkBoxElementsUVs.Checked + ", unrestricted=" + checkBoxUnrestricted.Checked + ", nearestBones=" + checkBoxNearestBones.Checked + ", nearestNormals=" + checkBoxNearestNormals.Checked + ", nearestUVs=" + checkBoxNearestUVs.Checked + ")"); if (copied) { sviexChanged = true; } break; } } } break; } } } } if (sviexChanged) { foreach (FormPP form in formPPList) { foreach (ListViewItem item in form.otherSubfilesList.SelectedItems) { if (item.Text == editor.Parser.Name) { int index = srcEditorVarList.IndexOf(srcEditorVar); string srcParserVar = srcParserVarList[index]; Gui.Scripting.RunScript(form.EditorVar + ".ReplaceSubfile(file=" + srcParserVar + ")"); form.Changed = true; item.Font = new Font(form.otherSubfilesList.Font, FontStyle.Bold); break; } } } } } foreach (string parserVar in srcParserVarList) { Gui.Scripting.RunScript(parserVar + "=null"); } foreach (string editorVar in srcEditorVarList) { Gui.Scripting.RunScript(editorVar + "=null"); } } catch (Exception ex) { Utility.ReportException(ex); } groupBoxAA2SVIEXJuggler.Enabled = true; }
private void buttonRemoveSVIs_Click(object sender, EventArgs e) { List <DockContent> formXXList; if (!Gui.Docking.DockContents.TryGetValue(typeof(FormXX), out formXXList)) { return; } List <DockContent> formPPList; if (!Gui.Docking.DockContents.TryGetValue(typeof(FormPP), out formPPList)) { return; } groupBoxAA2SVIEXJuggler.Enabled = false; try { List <string> srcParserVarList = new List <string>(); List <string> srcEditorVarList = new List <string>(); foreach (FormPP form in formPPList) { foreach (ListViewItem item in form.otherSubfilesList.SelectedItems) { if (item.Text.ToLower().EndsWith(".sviex")) { string srcParserVar = Gui.Scripting.GetNextVariable("sviexParser"); srcParserVarList.Add(srcParserVar); string parserCommand = srcParserVar + " = OpenSVIEX(parser=" + form.ParserVar + ", name=\"" + item.Text + "\")"; Gui.Scripting.RunScript(parserCommand); string srcEditorVar = Gui.Scripting.GetNextVariable("sviexEditor"); srcEditorVarList.Add(srcEditorVar); Gui.Scripting.RunScript(srcEditorVar + " = sviexEditor(parser=" + srcParserVar + ")"); } } } foreach (string srcEditorVar in srcEditorVarList) { sviexEditor editor = (sviexEditor)Gui.Scripting.Variables[srcEditorVar]; bool sviexChanged = false; foreach (FormXX xxForm in formXXList) { foreach (ListViewItem item in xxForm.listViewMesh.SelectedItems) { xxFrame meshFrame = xxForm.Editor.Meshes[(int)item.Tag]; if (xxForm.textBoxMeshName.Text == meshFrame.Name) { for (int i = 0; i < xxForm.dataGridViewMesh.SelectedRows.Count; i++) { int submeshIdx = xxForm.dataGridViewMesh.SelectedRows[i].Index; bool removed = (bool)Gui.Scripting.RunScript(srcEditorVar + ".RemoveSVI(meshFrame=" + xxForm.EditorVar + ".Meshes[" + (int)item.Tag + "], submeshIdx=" + submeshIdx + ")"); if (removed) { sviexChanged = true; } } break; } } if (sviexChanged) { break; } DragSource?frame = null; if (xxForm.treeViewObjectTree.SelectedNode != null) { frame = xxForm.treeViewObjectTree.SelectedNode.Tag as DragSource?; if (frame != null && frame.Value.Type == typeof(xxFrame)) { bool removed = (bool)Gui.Scripting.RunScript(srcEditorVar + ".RemoveSVI(meshFrame=" + xxForm.EditorVar + ".Frames[" + (int)frame.Value.Id + "])"); if (removed) { sviexChanged = true; break; } } } } if (sviexChanged) { foreach (FormPP form in formPPList) { foreach (ListViewItem item in form.otherSubfilesList.SelectedItems) { if (item.Text == editor.Parser.Name) { int index = srcEditorVarList.IndexOf(srcEditorVar); string srcParserVar = srcParserVarList[index]; Gui.Scripting.RunScript(form.EditorVar + ".ReplaceSubfile(file=" + srcParserVar + ")"); form.Changed = true; item.Font = new Font(form.otherSubfilesList.Font, FontStyle.Bold); break; } } } } } foreach (string parserVar in srcParserVarList) { Gui.Scripting.RunScript(parserVar + "=null"); } foreach (string editorVar in srcEditorVarList) { Gui.Scripting.RunScript(editorVar + "=null"); } } catch (Exception ex) { Utility.ReportException(ex); } groupBoxAA2SVIEXJuggler.Enabled = true; }
private void buttonApproximateNormals_Click(object sender, EventArgs e) { try { ComboBoxItemXX srcItem = (ComboBoxItemXX)comboBoxCorrectlyLitXX.SelectedItem; string srcMeshes = String.Empty; string srcSubmeshes = String.Empty; foreach (ComboBoxItemMesh meshItem in comboBoxCorrectlyLitMeshes.Items) { srcMeshes += srcItem.xxForm.EditorVar + ".Meshes[" + srcItem.xxForm.Editor.Meshes.IndexOf(meshItem.meshFrame) + "], "; srcSubmeshes += meshItem.submeshes.Split(',').Length + ", " + meshItem.submeshes + ", "; } srcMeshes = srcMeshes.Substring(0, srcMeshes.Length - 2); srcSubmeshes = srcSubmeshes.Substring(0, srcSubmeshes.Length - 2); ComboBoxItemXX dstItem = (ComboBoxItemXX)comboBoxTargetXX.SelectedItem; string dstMeshes = String.Empty; string dstSubmeshes = String.Empty; foreach (ComboBoxItemMesh meshItem in comboBoxTargetMeshes.Items) { dstMeshes += dstItem.xxForm.EditorVar + ".Meshes[" + dstItem.xxForm.Editor.Meshes.IndexOf(meshItem.meshFrame) + "], "; if (meshItem.submeshes.Contains("-1")) { dstSubmeshes += "-1, "; } else { dstSubmeshes += meshItem.submeshes.Split(',').Length + ", " + meshItem.submeshes + ", "; } } dstMeshes = dstMeshes.Substring(0, dstMeshes.Length - 2); dstSubmeshes = dstSubmeshes.Substring(0, dstSubmeshes.Length - 2); string srcParserVar = Gui.Scripting.GetNextVariable("sviexParser"); string dstParserVar = Gui.Scripting.GetNextVariable("sviexParser"); string srcEditorVar = Gui.Scripting.GetNextVariable("sviexEditor"); foreach (IWriteFile srcFile in comboBoxSourceSVIEXunits.Items) { comboBoxSourceSVIEXunits.SelectedItem = srcFile; string parserCommand = srcParserVar + " = OpenSVIEX(parser=" + srcItem.ppForm.ParserVar + ", name=\"" + srcFile.Name + "\")"; sviexParser srcParser = (sviexParser)Gui.Scripting.RunScript(parserCommand); IWriteFile dstFile = (IWriteFile)comboBoxTargetSVIEXunits.Items[comboBoxSourceSVIEXunits.Items.IndexOf(srcFile)]; parserCommand = dstParserVar + " = OpenSVIEX(parser=" + dstItem.ppForm.ParserVar + ", name=\"" + dstFile.Name + "\")"; Gui.Scripting.RunScript(parserCommand); sviexEditor srcEditor = (sviexEditor)Gui.Scripting.RunScript(srcEditorVar + " = sviexEditor(parser=" + srcParserVar + ")"); Gui.Scripting.RunScript(srcEditorVar + ".Reorder()"); srcEditor.progressBar = progressBarApproximation; Gui.Scripting.RunScript(srcEditorVar + ".CopyNearestNormals(srcMeshes={ " + srcMeshes + " }, srcSubmeshes={ " + srcSubmeshes + " }, dstMeshes={ " + dstMeshes + " }, dstSubmeshes={ " + dstSubmeshes + " }, dstParser=" + dstParserVar + ", nearVertexThreshold=" + ((float)numericUpDownNearVertexSqDist.Value).ToFloatString() + ", nearestNormal=" + checkBoxNearestNormal.Checked + ", automatic=" + checkBoxAutomatic.Checked + ")"); Gui.Scripting.RunScript(dstItem.ppForm.EditorVar + ".ReplaceSubfile(file=" + dstParserVar + ")"); comboBoxTargetSVIEXunits.SelectedItem = dstFile; } dstItem.ppForm.Changed = true; Gui.Scripting.Variables.Remove(srcParserVar); Gui.Scripting.Variables.Remove(dstParserVar); Gui.Scripting.Variables.Remove(srcEditorVar); progressBarApproximation.Value = 0; progressBarApproximation.Maximum = 1; } catch (Exception ex) { Utility.ReportException(ex); } }