private void attachpointListBox_MouseDoubleClick(object sender, MouseEventArgs e) { int index = attachpointListBox.IndexFromPoint(e.Location); if (index != System.Windows.Forms.ListBox.NoMatches) { BrgAttachpoint att = new BrgAttachpoint(); att.NameId = BrgAttachpoint.GetIdByName((string)attachpointListBox.Items[index]); Maxscript.NewDummy("newDummy", att.GetMaxName(), att.GetMaxTransform(), att.GetMaxPosition(), att.GetMaxBoxSize(), att.GetMaxScale()); } }
void attachpointListBox_MouseDoubleClick(object sender, MouseEventArgs e) { if (!isExportedToMax) { return; } int index = attachpointListBox.IndexFromPoint(e.Location); if (index != System.Windows.Forms.ListBox.NoMatches && file != null) { if (file.Mesh.Count == 0) { file.Mesh.Add(new BrgMesh(file)); } BrgAttachpoint att = new BrgAttachpoint(); att.NameId = BrgAttachpoint.GetIdByName((string)attachpointListBox.Items[index]); file.Mesh[0].Attachpoint.Add(att); //MessageBox.Show(file.Mesh[0].attachpoints.Count.ToString()); Maxscript.NewDummy("newDummy", att.GetMaxName(), att.GetMaxTransform(), att.GetMaxPosition(), att.GetMaxBoxSize(), att.GetMaxScale()); loadUIAttachpoint(); attachpointComboBox.SelectedIndex = attachpointComboBox.Items.Count - 1; } }
private void ExportAttachpoints(string attachDummy, BrgMesh mesh, float time) { time += Maxscript.QueryFloat("animationRange.start.ticks / 4800.0"); //System.Windows.Forms.MessageBox.Show("4"); int numAttachpoints = Maxscript.QueryInteger("{0}.count", attachDummy); //System.Windows.Forms.MessageBox.Show("5 " + numAttachpoints); if (mesh.Header.Flags.HasFlag(BrgMeshFlag.ATTACHPOINTS)) { mesh.Attachpoints = new List <BrgAttachpoint>(); for (int i = 0; i < numAttachpoints; i++) { string aName = Maxscript.QueryString("{0}[{1}].name", attachDummy, i + 1); int nameId; if (!BrgAttachpoint.TryGetIdByName(aName.Substring(6), out nameId)) { continue; } BrgAttachpoint att = new BrgAttachpoint(); //System.Windows.Forms.MessageBox.Show(aName); //System.Windows.Forms.MessageBox.Show("5.1"); //System.Windows.Forms.MessageBox.Show(mesh.Attachpoints.Count + " " + i); att.NameId = nameId; Maxscript.Command("{0}[{1}].name = \"{2}\"", attachDummy, i + 1, att.GetMaxName()); //System.Windows.Forms.MessageBox.Show("5.2"); Maxscript.SetVarAtTime(time, "{0}Transform", "{0}[{1}].rotation as matrix3", attachDummy, i + 1); Maxscript.SetVarAtTime(time, "{0}Position", "{0}[{1}].position", attachDummy, i + 1); Maxscript.SetVarAtTime(time, "{0}Scale", "{0}[{1}].scale * {0}[{1}].boxsize", attachDummy, i + 1); //System.Windows.Forms.MessageBox.Show("5.3"); Vector3 scale = new Vector3(Maxscript.QueryFloat("{0}Scale.X", attachDummy), Maxscript.QueryFloat("{0}Scale.Y", attachDummy), Maxscript.QueryFloat("{0}Scale.Z", attachDummy)); Vector3 bBox = scale / 2; //System.Windows.Forms.MessageBox.Show("5.4"); att.XVector.X = -Maxscript.QueryFloat("{0}Transform[1].z", attachDummy); att.XVector.Y = Maxscript.QueryFloat("{0}Transform[3].z", attachDummy); att.XVector.Z = -Maxscript.QueryFloat("{0}Transform[2].z", attachDummy); att.YVector.X = -Maxscript.QueryFloat("{0}Transform[1].y", attachDummy); att.YVector.Y = Maxscript.QueryFloat("{0}Transform[3].y", attachDummy); att.YVector.Z = -Maxscript.QueryFloat("{0}Transform[2].y", attachDummy); att.ZVector.X = -Maxscript.QueryFloat("{0}Transform[1].x", attachDummy); att.ZVector.Y = Maxscript.QueryFloat("{0}Transform[3].x", attachDummy); att.ZVector.Z = -Maxscript.QueryFloat("{0}Transform[2].x", attachDummy); att.Position.X = -Maxscript.QueryFloat("{0}Position.x", attachDummy); att.Position.Z = -Maxscript.QueryFloat("{0}Position.y", attachDummy); att.Position.Y = Maxscript.QueryFloat("{0}Position.z", attachDummy); //System.Windows.Forms.MessageBox.Show("5.5"); att.BoundingBoxMin.X = -bBox.X; att.BoundingBoxMin.Z = -bBox.Y; att.BoundingBoxMin.Y = -bBox.Z; att.BoundingBoxMax.X = bBox.X; att.BoundingBoxMax.Z = bBox.Y; att.BoundingBoxMax.Y = bBox.Z; mesh.Attachpoints.Add(att); } //System.Windows.Forms.MessageBox.Show("# Atpts: " + Attachpoint.Count); } }
private void ImportBrgMesh(string mainObject, BrgMesh mesh, float time) { string vertArray = ""; string normArray = ""; string texVerts = ""; string faceMats = ""; string faceArray = ""; if (!mesh.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH)) { vertArray = Maxscript.NewArray("vertArray"); normArray = Maxscript.NewArray("normArray"); texVerts = Maxscript.NewArray("texVerts"); faceMats = Maxscript.NewArray("faceMats"); faceArray = Maxscript.NewArray("faceArray"); } Maxscript.CommentTitle("Load Vertices/Normals/UVWs"); Maxscript.Command("uvwSetVertPosFunc = {0}.Unwrap_UVW.SetVertexPosition", mainObject); for (int i = 0; i < mesh.Vertices.Count; i++) { if (mesh.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH)) { Maxscript.AnimateAtTime(time, "meshSetVertFunc {0} {1} {2}", mainObject, i + 1, Maxscript.Point3Literal(-mesh.Vertices[i].X, -mesh.Vertices[i].Z, mesh.Vertices[i].Y)); if (mesh.Header.Flags.HasFlag(BrgMeshFlag.ANIMTEXCOORDS) && mesh.Header.Flags.HasFlag(BrgMeshFlag.TEXCOORDSA)) { Maxscript.Animate("uvwSetVertPosFunc {0}s {1} {2}", time, i + 1, Maxscript.Point3Literal(mesh.TextureCoordinates[i].X, mesh.TextureCoordinates[i].Y, 0)); } if (mesh.Header.Flags.HasFlag(BrgMeshFlag.ANIMVERTCOLORALPHA)) { if (mesh.Header.Flags.HasFlag(BrgMeshFlag.COLORALPHACHANNEL)) { Maxscript.AnimateAtTime(time, "meshop.setVertAlpha {0} -2 {1} {2}", mainObject, i + 1, mesh.Colors[i].A); } else if (mesh.Header.Flags.HasFlag(BrgMeshFlag.COLORCHANNEL)) { Maxscript.AnimateAtTime(time, "meshop.setVertColor {0} 0 {1} (color {2} {3} {4})", mainObject, i + 1, mesh.Colors[i].R, mesh.Colors[i].G, mesh.Colors[i].B); } } } else { Maxscript.Append(vertArray, Maxscript.Point3Literal(-mesh.Vertices[i].X, -mesh.Vertices[i].Z, mesh.Vertices[i].Y)); if (mesh.Header.Flags.HasFlag(BrgMeshFlag.TEXCOORDSA)) { Maxscript.Append(texVerts, Maxscript.Point3Literal(mesh.TextureCoordinates[i].X, mesh.TextureCoordinates[i].Y, 0)); } if (mesh.Header.Flags.HasFlag(BrgMeshFlag.COLORALPHACHANNEL)) { //Maxscript.Command("meshop.supportVAlphas {0}", mainObject); Maxscript.Command("meshop.setVertAlpha {0} -2 {1} {2}", mainObject, i + 1, mesh.Colors[i].A); } else if (mesh.Header.Flags.HasFlag(BrgMeshFlag.COLORCHANNEL)) { Maxscript.Command("meshop.setVertColor {0} 0 {1} (color {2} {3} {4})", mainObject, i + 1, mesh.Colors[i].R, mesh.Colors[i].G, mesh.Colors[i].B); } } } if (!mesh.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH)) { if (mesh.Header.Flags.HasFlag(BrgMeshFlag.MATERIAL)) { Maxscript.CommentTitle("Load Face Materials"); foreach (var fMat in mesh.Faces) { Maxscript.Append(faceMats, fMat.MaterialIndex); } } Maxscript.CommentTitle("Load Faces"); foreach (var face in mesh.Faces) { Maxscript.Append(faceArray, Maxscript.Point3Literal(face.Indices[0] + 1, face.Indices[2] + 1, face.Indices[1] + 1)); } int mObjNum = 0; while (Maxscript.QueryInteger("($objects/{0}* as array).count", mainObject + mObjNum) > 0) { ++mObjNum; } Maxscript.Command("{0} = {1}", mainObject, Maxscript.NewMeshLiteral(mainObject + mObjNum, vertArray, faceArray, faceMats, texVerts)); //Maxscript.Command("{0} = getNodeByName \"{0}\"", mainObject); Maxscript.Command("dummy name:\"Dummy_hotspot\" pos:{0} boxsize:[10,10,0]", Maxscript.Point3Literal(-mesh.Header.HotspotPosition.X, -mesh.Header.HotspotPosition.Z, mesh.Header.HotspotPosition.Y)); Maxscript.CommentTitle("TVert Hack"); // Needed <= 3ds Max 2014; idk about 2015+ Maxscript.Command("buildTVFaces {0}", mainObject); for (int i = 1; i <= mesh.Faces.Count; i++) { Maxscript.Command("setTVFace {0} {1} {2}[{1}]", mainObject, i, faceArray); } Maxscript.CommentTitle("Load Normals for first Frame"); Maxscript.Command("max modify mode"); Maxscript.Command("select {0}", mainObject); Maxscript.Command("addModifier {0} (Edit_Normals()) ui:off", mainObject); Maxscript.Command("modPanel.setCurrentObject {0}.modifiers[#edit_normals]", mainObject); Maxscript.Command("{0}.modifiers[#edit_normals].Break selection:#{{1..{1}}}", mainObject, mesh.Normals.Count); Maxscript.Command("meshSetNormalIdFunc = {0}.modifiers[#edit_normals].SetNormalID", mainObject); for (int i = 0; i < mesh.Faces.Count; ++i) { Maxscript.Command("meshSetNormalIdFunc {0} {1} {2}", i + 1, 1, mesh.Faces[i].Indices[0] + 1); Maxscript.Command("meshSetNormalIdFunc {0} {1} {2}", i + 1, 2, mesh.Faces[i].Indices[2] + 1); Maxscript.Command("meshSetNormalIdFunc {0} {1} {2}", i + 1, 3, mesh.Faces[i].Indices[1] + 1); } Maxscript.Command("{0}.modifiers[#edit_normals].MakeExplicit selection:#{{1..{1}}}", mainObject, mesh.Normals.Count); Maxscript.Command("meshSetNormalFunc = {0}.modifiers[#edit_normals].SetNormal", mainObject); for (int i = 0; i < mesh.Normals.Count; i++) { Maxscript.Command("meshSetNormalFunc {0} {1}", i + 1, Maxscript.Point3Literal(-mesh.Normals[i].X, -mesh.Normals[i].Z, mesh.Normals[i].Y)); } Maxscript.Command("collapseStack {0}", mainObject); if (mesh.Header.Flags.HasFlag(BrgMeshFlag.ANIMTEXCOORDS)) { Maxscript.Command("select {0}", mainObject); Maxscript.Command("addModifier {0} (Unwrap_UVW()) ui:off", mainObject); Maxscript.Command("select {0}.verts", mainObject); Maxscript.Animate("{0}.Unwrap_UVW.moveSelected [0,0,0]", mainObject); } } Maxscript.CommentTitle("Load Attachpoints"); string attachDummyArray = "attachDummyArray"; if (!mesh.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH)) { Maxscript.NewArray(attachDummyArray); } for (int i = 0; i < mesh.Attachpoints.Count; ++i) { BrgAttachpoint att = mesh.Attachpoints[i]; if (mesh.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH)) { Maxscript.Command("attachpoint = {0}[{1}]", attachDummyArray, i + 1); Maxscript.AnimateAtTime(time, "attachpoint.rotation = {0}", att.GetMaxTransform()); Maxscript.AnimateAtTime(time, "attachpoint.position = {0}", att.GetMaxPosition()); if (this.uniformAttachpointScale) { Maxscript.AnimateAtTime(time, "attachpoint.scale = [1,1,1]"); } else { Maxscript.AnimateAtTime(time, "attachpoint.scale = {0}", att.GetMaxScale()); } } else { string attachDummy; if (this.uniformAttachpointScale) { attachDummy = Maxscript.NewDummy("attachDummy", att.GetMaxName(), att.GetMaxTransform(), att.GetMaxPosition(), "[0.25,0.25,0.25]", "[1,1,1]"); } else { attachDummy = Maxscript.NewDummy("attachDummy", att.GetMaxName(), att.GetMaxTransform(), att.GetMaxPosition(), att.GetMaxBoxSize(), att.GetMaxScale()); } Maxscript.Command("append {0} {1}", attachDummyArray, attachDummy); } } }