void Export(ExportGroup group) { if (listBoxFormats.SelectedIndex == 0) { string filename = textBox3.Text; if (!checkBox3.Checked) { if (group.geomsoriginpath.Count > 0) { filename = group.geomsoriginpath[0]; } else if (group.modelsoriginpath.Count > 0) { filename = group.modelsoriginpath[0]; } else if (group.bonesoriginpath.Count > 0) { filename = group.bonesoriginpath[0]; } else { return; } } ExportObjInfo info = new ExportObjInfo(System.IO.Path.GetDirectoryName(textBox1.Text) + "\\" + System.IO.Path.GetFileName(filename)); group.targetfilename = System.IO.Path.GetFileName(filename); ExportToObj(group, info); info.stream.Close(); info.mtlstream.Close(); } }
public ExportService(IWindsorContainer investigationWindsorContainer, IFrameworkController frameworkController, IInvestigationInfo investigationInfo, ISnooperFactory snooperFactory, VirtualizingObservableDBSetPagedCollection <ExportGroup> exportGroups) : base() { this.InvestigationWindsorContainer = investigationWindsorContainer; this.FrameworkController = frameworkController; this.InvestigationInfo = investigationInfo; this.SnooperFactory = snooperFactory; var snooperToExportGroupDictionary = new Dictionary <Type, ExportGroup>(); foreach (var snooper in this.SnooperFactory.AvailableSnoopers) { try { var exportGroup = exportGroups.FirstOrDefault(g => g.Name == snooper.Name && g.Parent == null); if (exportGroup == null) { var snooperExportObjectType = snooper.PrototypExportObject.GetType(); exportGroup = new ExportGroup(snooperExportObjectType, this.InvestigationWindsorContainer) { Name = snooper.Name }; exportGroups.Add(exportGroup); } snooperToExportGroupDictionary.Add(snooper.PrototypExportObject.GetType(), exportGroup); } catch (Exception ex) { this.Logger?.Error("Cannot create export groups", ex); Debugger.Break(); } } this.SnooperToExportGroupDictionary = snooperToExportGroupDictionary; }
public ExportGroupVm(WindsorContainer applicationWindsorContainer, ExportGroup model) : base(applicationWindsorContainer, model) { this.ExportGroup = model; this.Exports = new ViewModelVirtualizingIoCObservableCollection <ExportVm, SnooperExportBase>(this.ExportGroup.Exports, applicationWindsorContainer); this.ExportGroups = new ViewModelVirtualizingIoCObservableCollection <ExportGroupVm, ExportGroup>(this.ExportGroup.ExportGroups, applicationWindsorContainer); this.Exports.CollectionChanged += this.ExportsOnCollectionChanged; this.ExportGroups.CollectionChanged += this.ExportGroupsOnCollectionChanged; model.PropertyChanged += this.Data_PropertyChanged; this.Exports.CollectionChanged += this.ExportResults_CollectionChanged; this.ExportGroups.CollectionChanged += this.ExportGroups_CollectionChanged; }
void ExportToObj(ExportGroup group, ExportObjInfo info) { System.IO.StreamWriter objwriter = info.objwriter; System.IO.StreamWriter mtlwriter = info.mtlwriter; lock (threadLock) { objwriter.WriteLine("mtllib {0}.mtl\n", group.targetfilename); objwriter.WriteLine("o {0}\n", System.IO.Path.GetFileNameWithoutExtension(group.targetfilename)); } int objId = 0; foreach (lwGeomObjInfo geom in group.geoms) { ExportToObj(geom, System.IO.Path.GetFileNameWithoutExtension(group.geomsoriginpath[objId]) + "_" + objId, group.geomsoriginpath[objId], group, info); objId++; } int mdlId = 0; foreach (lwModelObjInfo model in group.models) { for (int i = 0; i < model.geom_obj_num; i++) { ExportToObj(model.geom_obj_seq[i], System.IO.Path.GetFileNameWithoutExtension(group.modelsoriginpath[mdlId]) + "-" + i + "_" + objId, group.modelsoriginpath[mdlId], group, info); objId++; } mdlId++; } mtlwriter.Close(); objwriter.Close(); }
void ExportToObj(lwGeomObjInfo geom, string obj_name, string pathtomodel, ExportGroup group, ExportObjInfo info) { System.IO.StreamWriter objwriter = info.objwriter; System.IO.StreamWriter mtlwriter = info.mtlwriter; int startvertex = info.totalvertexes; int startnormal = info.totalnormals; int starttexcoord = info.totaltexcoord; int startindex = info.totalindexes; bool texcoordexist = false; bool normalexist = false; lock (threadLock) { for (int i = 0; i < geom.mesh.header.vertex_num; i++) { D3DXVECTOR3 pos = geom.mesh.vertex_seq[i]; pos = pos * geom.header.mat_local; if (checkBox5.Checked) { float z = -pos.y; pos.y = pos.z; pos.z = z; } objwriter.WriteLine("v {0:0.0000} {1:0.0000} {2:0.0000}", pos.x, pos.y, pos.z); info.totalvertexes++; } if ((geom.mesh.header.fvf & 0x10) != 0) { normalexist = true; for (int i = 0; i < geom.mesh.header.vertex_num; i++) { objwriter.WriteLine("vn {0:0.0000} {1:0.0000} {2:0.0000}", geom.mesh.normal_seq[i].x, geom.mesh.normal_seq[i].y, geom.mesh.normal_seq[i].z); info.totalnormals++; } } if ((geom.mesh.header.fvf & 0x100) != 0 || (geom.mesh.header.fvf & 0x200) != 0 || (geom.mesh.header.fvf & 0x300) != 0 || (geom.mesh.header.fvf & 0x400) != 0) { texcoordexist = true; for (int i = 0; i < geom.mesh.header.vertex_num; i++) { if (checkBox4.Checked) { objwriter.WriteLine("vt {0:0.0000} {1:0.0000}", geom.mesh.texcoord0_seq[i].x, 1 - geom.mesh.texcoord0_seq[i].y); } else { objwriter.WriteLine("vt {0:0.0000} {1:0.0000}", geom.mesh.texcoord0_seq[i].x, geom.mesh.texcoord0_seq[i].y); } info.totaltexcoord++; } } } for (int i = 0; i < geom.mesh.header.subset_num; i++) { string mtlname = obj_name; lock (threadLock) { objwriter.WriteLine("\ng {0}_{1}", mtlname, i); objwriter.WriteLine("usemtl {0}-{1}\n", mtlname, i); objwriter.WriteLine("s off"); for (int j = 0; j < geom.mesh.subset_seq[i].primitive_num * 3; j += 3) { objwriter.Write("f "); for (int k = 0; k < 3; k++) { uint facevertex = (uint)(geom.mesh.index_seq[j + k + geom.mesh.subset_seq[i].start_index] + startvertex) + 1; uint facenormal = (uint)(geom.mesh.index_seq[j + k + geom.mesh.subset_seq[i].start_index] + startnormal) + 1; uint facetexcoord = (uint)(geom.mesh.index_seq[j + k + geom.mesh.subset_seq[i].start_index] + starttexcoord) + 1; if (normalexist && texcoordexist) { objwriter.Write("{0}/{1}/{2} ", facevertex, facetexcoord, facenormal); } else if (normalexist && !texcoordexist) { objwriter.Write("{0}//{2} ", facevertex, facenormal); } else if (!normalexist && texcoordexist) { objwriter.Write("{0}/{1} ", facevertex, facetexcoord); } else { objwriter.Write("{0} ", facevertex); } } objwriter.Write("\n"); } mtlwriter.WriteLine("newmtl {0}-{1}", mtlname, i); mtlwriter.WriteLine("Ka {0} {1} {2}", geom.mtl_seq[i].mtl.amb.r, geom.mtl_seq[i].mtl.amb.g, geom.mtl_seq[i].mtl.amb.b); mtlwriter.WriteLine("Kd {0} {1} {2}", geom.mtl_seq[i].mtl.dif.r, geom.mtl_seq[i].mtl.dif.g, geom.mtl_seq[i].mtl.dif.b); mtlwriter.WriteLine("Ks {0} {1} {2}", geom.mtl_seq[i].mtl.spe.r, geom.mtl_seq[i].mtl.spe.g, geom.mtl_seq[i].mtl.spe.b); string newtexturepath = RelativePath(System.IO.Path.GetDirectoryName(textBox1.Text) + "\\", System.IO.Path.GetDirectoryName(textBox2.Text) + "\\"); mtlwriter.WriteLine("map_Kd {0}", newtexturepath + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); } if (checkBox2.Checked) { string path = System.IO.Path.GetDirectoryName(pathtomodel).Replace("\\model\\", "\\texture\\"); System.Drawing.Bitmap bmp = parentForm.LoadBitmaByTextureName(path + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); bmp.Save(System.IO.Path.GetDirectoryName(textBox2.Text) + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); } else { string path = System.IO.Path.GetDirectoryName(pathtomodel).Replace("\\model\\", "\\texture\\"); string filename = parentForm.GetRightTextureName(path + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); if (filename != null) { System.IO.File.Copy(filename, System.IO.Path.GetDirectoryName(textBox2.Text) + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name), true); } } } }
private void button5_Click(object sender, EventArgs e) { foreach (object obj in listBoxExport.SelectedItems) { ExportGroup group = new ExportGroup(); string listItem = (string)obj; int indexstart = listItem.LastIndexOf('['); int indexend = listItem.LastIndexOf(']'); string indexstring = listItem.Substring(indexstart + 1, indexend - indexstart - 1); int index = int.Parse(indexstring); if (listItem.StartsWith("[lgo]")) { string filename = parentForm.lgofiles[index]; lwGeomObjInfo geom = new lwGeomObjInfo(); if (geom.Load(filename) == 0) { group.Add(geom, filename); } } if (listItem.StartsWith("[lmo]")) { string filename = parentForm.lmofiles[index]; lwModelObjInfo model = new lwModelObjInfo(); if (model.Load(filename) == 0) { group.Add(model, filename); } } if (listItem.StartsWith("[char]")) { CChaRecord character = parentForm.chainfo[index]; for (int i = 0; i < 5; i++) { if (character.sSkinInfo[i] != 0) { if (character.chModalType == 1) { CItemRecord rec = parentForm.iteminfo[parentForm.iteminfokeys[character.sSkinInfo[i]]]; char[] mdl = new char[19]; Array.Copy(rec.chModule, (character.sModel + 1) * 19, mdl, 0, 19); lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\character\\" + CutString(mdl) + ".lgo"; if (geom.Load(filenameModel) == 0) { group.Add(geom, filenameModel); } } if (character.chModalType == 2) { CItemRecord rec = parentForm.iteminfo[parentForm.iteminfokeys[character.sSkinInfo[i]]]; char[] mdl = new char[19]; Array.Copy(rec.chModule, 0, mdl, 0, 19); lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\character\\" + CutString(mdl) + ".lgo"; if (geom.Load(filenameModel) == 0) { group.Add(geom, filenameModel); } } if (character.chModalType == 4) { lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\character\\" + (i + 10000 * (character.sSuitID + 100 * character.sModel)).ToString("0000000000") + ".lgo"; if (geom.Load(filenameModel) == 0) { group.Add(geom, filenameModel); } } } } } if (listItem.StartsWith("[item]")) { CItemRecord item = parentForm.iteminfo[index]; for (int i = 0; i < 5; i++) { char[] mdl = new char[19]; Array.Copy(item.chModule, i * 19, mdl, 0, 19); lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\item\\" + CutString(mdl) + ".lgo"; if (item.sType >= 19 && item.sType <= 25) { filenameModel = parentForm.textBox1.Text + "model\\character\\" + CutString(mdl) + ".lgo"; } if (geom.Load(filenameModel) == 0) { group.Add(geom, filenameModel); } } } Export(group); } button4_Click(sender, e); }
private void button5_Click(object sender, EventArgs e) { foreach (object obj in listBoxExport.SelectedItems) { ExportGroup group = new ExportGroup(); string listItem = (string)obj; int indexstart = listItem.LastIndexOf('['); int indexend = listItem.LastIndexOf(']'); string indexstring = listItem.Substring(indexstart + 1, indexend - indexstart - 1); int index = int.Parse(indexstring); if (listItem.StartsWith("[lgo]")) { string filename = parentForm.lgofiles[index]; lwGeomObjInfo geom = new lwGeomObjInfo(); if (geom.Load(filename) == 0) group.Add(geom, filename); } if (listItem.StartsWith("[lmo]")) { string filename = parentForm.lmofiles[index]; lwModelObjInfo model = new lwModelObjInfo(); if (model.Load(filename) == 0) group.Add(model, filename); } if (listItem.StartsWith("[char]")) { CChaRecord character = parentForm.chainfo[index]; for (int i = 0; i < 5; i++) { if (character.sSkinInfo[i] != 0) { if (character.chModalType == 1) { CItemRecord rec = parentForm.iteminfo[parentForm.iteminfokeys[character.sSkinInfo[i]]]; char[] mdl = new char[19]; Array.Copy(rec.chModule, (character.sModel + 1) * 19, mdl, 0, 19); lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\character\\" + CutString(mdl) + ".lgo"; if (geom.Load(filenameModel) == 0) group.Add(geom, filenameModel); } if (character.chModalType == 2) { CItemRecord rec = parentForm.iteminfo[parentForm.iteminfokeys[character.sSkinInfo[i]]]; char[] mdl = new char[19]; Array.Copy(rec.chModule, 0, mdl, 0, 19); lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\character\\" + CutString(mdl) + ".lgo"; if (geom.Load(filenameModel) == 0) group.Add(geom, filenameModel); } if (character.chModalType == 4) { lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\character\\" + (i + 10000 * (character.sSuitID + 100 * character.sModel)).ToString("0000000000") + ".lgo"; if (geom.Load(filenameModel) == 0) group.Add(geom, filenameModel); } } } } if (listItem.StartsWith("[item]")) { CItemRecord item = parentForm.iteminfo[index]; for (int i = 0; i < 5; i++) { char[] mdl = new char[19]; Array.Copy(item.chModule, i * 19, mdl, 0, 19); lwGeomObjInfo geom = new lwGeomObjInfo(); string filenameModel = parentForm.textBox1.Text + "model\\item\\" + CutString(mdl) + ".lgo"; if (item.sType >= 19 && item.sType <= 25) filenameModel = parentForm.textBox1.Text + "model\\character\\" + CutString(mdl) + ".lgo"; if (geom.Load(filenameModel) == 0) group.Add(geom, filenameModel); } } Export(group); } button4_Click(sender, e); }
void ExportToObj(ExportGroup group,ExportObjInfo info) { System.IO.StreamWriter objwriter = info.objwriter; System.IO.StreamWriter mtlwriter = info.mtlwriter; lock (threadLock) { objwriter.WriteLine("mtllib {0}.mtl\n", group.targetfilename); objwriter.WriteLine("o {0}\n", System.IO.Path.GetFileNameWithoutExtension(group.targetfilename)); } int objId=0; foreach (lwGeomObjInfo geom in group.geoms) { ExportToObj(geom, System.IO.Path.GetFileNameWithoutExtension(group.geomsoriginpath[objId]) + "_" + objId, group.geomsoriginpath[objId], group, info); objId++; } int mdlId=0; foreach (lwModelObjInfo model in group.models) { for (int i = 0; i < model.geom_obj_num; i++) { ExportToObj(model.geom_obj_seq[i], System.IO.Path.GetFileNameWithoutExtension(group.modelsoriginpath[mdlId]) + "-" + i + "_" + objId, group.modelsoriginpath[mdlId], group, info); objId++; } mdlId++; } mtlwriter.Close(); objwriter.Close(); }
void ExportToObj(lwGeomObjInfo geom, string obj_name, string pathtomodel, ExportGroup group, ExportObjInfo info) { System.IO.StreamWriter objwriter = info.objwriter; System.IO.StreamWriter mtlwriter = info.mtlwriter; int startvertex = info.totalvertexes; int startnormal = info.totalnormals; int starttexcoord = info.totaltexcoord; int startindex = info.totalindexes; bool texcoordexist = false; bool normalexist = false; lock (threadLock) { for (int i = 0; i < geom.mesh.header.vertex_num; i++) { D3DXVECTOR3 pos = geom.mesh.vertex_seq[i]; pos = pos * geom.header.mat_local; if (checkBox5.Checked) { float z = -pos.y; pos.y = pos.z; pos.z = z; } objwriter.WriteLine("v {0:0.0000} {1:0.0000} {2:0.0000}", pos.x, pos.y, pos.z); info.totalvertexes++; } if ((geom.mesh.header.fvf & 0x10) != 0) { normalexist = true; for (int i = 0; i < geom.mesh.header.vertex_num; i++) { objwriter.WriteLine("vn {0:0.0000} {1:0.0000} {2:0.0000}", geom.mesh.normal_seq[i].x, geom.mesh.normal_seq[i].y, geom.mesh.normal_seq[i].z); info.totalnormals++; } } if ((geom.mesh.header.fvf & 0x100) != 0 || (geom.mesh.header.fvf & 0x200) != 0 || (geom.mesh.header.fvf & 0x300) != 0 || (geom.mesh.header.fvf & 0x400) != 0) { texcoordexist = true; for (int i = 0; i < geom.mesh.header.vertex_num; i++) { if (checkBox4.Checked) objwriter.WriteLine("vt {0:0.0000} {1:0.0000}", geom.mesh.texcoord0_seq[i].x, 1 - geom.mesh.texcoord0_seq[i].y); else objwriter.WriteLine("vt {0:0.0000} {1:0.0000}", geom.mesh.texcoord0_seq[i].x, geom.mesh.texcoord0_seq[i].y); info.totaltexcoord++; } } } for (int i = 0; i < geom.mesh.header.subset_num; i++) { string mtlname = obj_name; lock (threadLock) { objwriter.WriteLine("\ng {0}_{1}", mtlname, i); objwriter.WriteLine("usemtl {0}-{1}\n", mtlname,i); objwriter.WriteLine("s off"); for (int j = 0; j < geom.mesh.subset_seq[i].primitive_num * 3; j += 3) { objwriter.Write("f "); for (int k = 0; k < 3; k++) { uint facevertex = (uint)(geom.mesh.index_seq[j + k + geom.mesh.subset_seq[i].start_index] + startvertex) + 1; uint facenormal = (uint)(geom.mesh.index_seq[j + k + geom.mesh.subset_seq[i].start_index] + startnormal) + 1; uint facetexcoord = (uint)(geom.mesh.index_seq[j + k + geom.mesh.subset_seq[i].start_index] + starttexcoord) + 1; if (normalexist && texcoordexist) objwriter.Write("{0}/{1}/{2} ", facevertex, facetexcoord, facenormal); else if (normalexist && !texcoordexist) objwriter.Write("{0}//{2} ", facevertex, facenormal); else if (!normalexist && texcoordexist) objwriter.Write("{0}/{1} ", facevertex, facetexcoord); else objwriter.Write("{0} ", facevertex); } objwriter.Write("\n"); } mtlwriter.WriteLine("newmtl {0}-{1}", mtlname,i); mtlwriter.WriteLine("Ka {0} {1} {2}", geom.mtl_seq[i].mtl.amb.r, geom.mtl_seq[i].mtl.amb.g, geom.mtl_seq[i].mtl.amb.b); mtlwriter.WriteLine("Kd {0} {1} {2}", geom.mtl_seq[i].mtl.dif.r, geom.mtl_seq[i].mtl.dif.g, geom.mtl_seq[i].mtl.dif.b); mtlwriter.WriteLine("Ks {0} {1} {2}", geom.mtl_seq[i].mtl.spe.r, geom.mtl_seq[i].mtl.spe.g, geom.mtl_seq[i].mtl.spe.b); string newtexturepath = RelativePath(System.IO.Path.GetDirectoryName(textBox1.Text) + "\\", System.IO.Path.GetDirectoryName(textBox2.Text) + "\\"); mtlwriter.WriteLine("map_Kd {0}", newtexturepath + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); } if (checkBox2.Checked) { string path = System.IO.Path.GetDirectoryName(pathtomodel).Replace("\\model\\", "\\texture\\"); System.Drawing.Bitmap bmp = parentForm.LoadBitmaByTextureName(path + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); bmp.Save(System.IO.Path.GetDirectoryName(textBox2.Text) + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); } else { string path = System.IO.Path.GetDirectoryName(pathtomodel).Replace("\\model\\", "\\texture\\"); string filename = parentForm.GetRightTextureName(path + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name)); if (filename != null) System.IO.File.Copy(filename, System.IO.Path.GetDirectoryName(textBox2.Text) + "\\" + CutString(geom.mtl_seq[i].tex_seq[0].file_name), true); } } }
void Export(ExportGroup group) { if (listBoxFormats.SelectedIndex == 0) { string filename=textBox3.Text; if (!checkBox3.Checked) { if (group.geomsoriginpath.Count > 0) filename = group.geomsoriginpath[0]; else if (group.modelsoriginpath.Count > 0) filename = group.modelsoriginpath[0]; else if (group.bonesoriginpath.Count > 0) filename = group.bonesoriginpath[0]; else return; } ExportObjInfo info = new ExportObjInfo(System.IO.Path.GetDirectoryName(textBox1.Text) + "\\" + System.IO.Path.GetFileName(filename)); group.targetfilename = System.IO.Path.GetFileName(filename); ExportToObj(group, info); info.stream.Close(); info.mtlstream.Close(); } }