public ConsoleModeController( ProgramCore core , string[] programargs ) { this.core = core; this.args = new List<string>( programargs ); this.processFiles = new List<String>(); foreach( string arg in this.args ) { //this is a file, add it to the list of files to process, and enable cli mode if( !arg.StartsWith( "-" ) && System.IO.File.Exists( arg ) && core.CanReadFile( arg ) ) { Console.WriteLine( arg ); this.processFiles.Add( arg ); cliMode = true; continue; } //check to see if the user wants to enable cli mode if( arg.Contains( "-c" ) ) { cliMode = true; continue; } } }
public override void MakePayment(string price, string description, PrintType printType) { if (ProgramCore.IsFreeVersion) { ProgramCore.MainForm.SuccessPay(printType); // бесплатная версия return; } var ctrl = new ctrlPaypalPayment(printType); if (!ctrl.CreatePayment(price, description)) { MessageBox.Show("Can't activate paypal service. Check your Internet connection or try later.."); return; } ProgramCore.ShowDialog(ProgramCore.MainForm, ctrl, "Please pay for export!", MessageBoxButtons.OK, 0, false, false); if (ctrl.IsSuccess) { ProgramCore.MainForm.SuccessPay(printType); } else { ProgramCore.MainForm.BadPay(); } }
public static void ProgressProc(object sender, ProgressProcEventArgs e) { Now = GetNowTicks(); if (Now - lastUpdateTime < 100) { return; } lastUpdateTime = Now; if (progressSettings == null) { progressSettings = new ProgressSettings(); frm = new ProgressForm(); var r = ProgramCore.MainForm.Bounds; frm.Location = new Point(r.Left + (r.Width - frm.Width) / 2, r.Top + (r.Height - frm.Height) / 2); frm.ProgressSettings = progressSettings; } progressSettings.Status = e.Status ?? progressSettings.Status; progressSettings.SubStatus = e.SubProgressStatus; progressSettings.PercentDone = progressSettings.PercentDone == -1 ? progressSettings.PercentDone : e.PercentDone; progressSettings.SubPercentDone = e.SubProgressPercentDone; if (!stackReleaseWaiting) { stackReleaseWaiting = true; frm.StartProgress(); ProgramCore.AddCallStackReleasedProc(CallStackReleased); } else { frm.WorkProgress(); } }
public NumberUtil(ProgramCore newPCoreInst) { if (PCoreInst == null) { PCoreInst = newPCoreInst; } }
private System.IO.FileSystemWatcher watcher; //but who watches the watchmen? #endregion Fields #region Constructors public DGHC_MainForm( ProgramCore mycore , string[] programargs ) { InitializeComponent(); this.core = mycore; foreach( string arg in programargs.ToList<string>() ) { if( !arg.StartsWith( "-" ) && System.IO.File.Exists( arg ) && core.CanReadFile( arg ) ) { this.processFiles.Add( arg ); } } imageSizeMultiplier = 4; //drag and drop support this.DragEnter += new DragEventHandler( FileDragEnter ); this.DragDrop += new DragEventHandler( FileDragDrop ); this.FormClosing += new FormClosingEventHandler( AboutToCloseMe ); //quack box this.hatsSmallPictureBox.MouseDown += new System.Windows.Forms.MouseEventHandler( this.hatsPictureBox_Click ); this.hatsSmallPictureBox.MouseUp += new System.Windows.Forms.MouseEventHandler( this.hatsPictureBox_ReleaseClick ); enableWatcher = Properties.Settings.Default.AutoRefresh; //doesn't work for now, gotta figure out why if( enableWatcher ) { watcher = new System.IO.FileSystemWatcher(); watcher.Changed += new FileSystemEventHandler( OnPNGFileChanged ); } }
static void Main(string[] args) { try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var currentDomain = AppDomain.CurrentDomain; currentDomain.AssemblyResolve += LoadSubLibs; ProgramCore.CurrentProgram = ProgramCore.ProgramMode.PrintAhead; ProgramCore.paypalHelper = new TruePaypalHelper(); ProgramCore.IsFreeVersion = File.Exists(Path.Combine(Application.StartupPath, "bin", "rh_Saqr.dlib")); // var objectCreator = new ObjCreator(); // objectCreator.CreateObj(2, "ph4ea4veilnuswyq2viwbm1m","","", "", "", "", "", "", "", "", "", "",0,0,0,0, "test"); ProgramCore.MainForm = new frmMain(args.Length == 0 ? string.Empty : args[0]); Application.Run(ProgramCore.MainForm); } catch (Exception e) { ProgramCore.EchoToLog(e); MessageBox.Show(e.Message + Environment.NewLine + e.StackTrace, e.Message); } }
private void renewScoreBoard() { System.Diagnostics.Debug.WriteLine("renew score board"); if (i >= gamesAssigned.Count) { curGameLabel.Text = "已无可评分项目1" + i + ">=" + gamesAssigned.Count; button1.Enabled = false; return; } string curGameId = gamesAssigned[i]; string compQuery = String.Format("SELECT gameType,gender,ageGroup" + " FROM competitions,games" + " WHERE competitions.compId=games.compId" + " AND games.gameId = '{0}'", gamesAssigned[i]); NpgsqlCommand cmd = new NpgsqlCommand(compQuery); cmd.Connection = npgSqlCon1; reader = cmd.ExecuteReader(); if (!reader.HasRows) { curGameLabel.Text = "已无可评分项目2 " + i + ">=" + gamesAssigned.Count; button1.Enabled = false; reader.Close(); return; } reader.Read(); curGameLabel.Text = "当前项目:" + reader.GetString(0) + " 性别:" + (reader.GetValue(1)?.ToString() == "True" ? "男" : "女") + " 年龄组:" + ProgramCore.ageRange(reader.GetValue(2)?.ToString()); reader.Close(); DataTable dt = new DataTable(); dt.Columns.Add("运动员号", typeof(string)); dt.Columns.Add("成绩", typeof(int)); curGameId = gamesAssigned[i]; string query = "SELECT athleteNo FROM participates WHERE tournamentId='" + curGameId + "'"; cmd = new NpgsqlCommand(query); cmd.Connection = npgSqlCon1; reader = cmd.ExecuteReader(); if (!reader.HasRows) { reader.Close(); i++; renewScoreBoard(); return; } while (reader.Read()) { DataRow row = dt.NewRow(); row["运动员号"] = reader.GetValue(0).ToString(); row["成绩"] = 0; dt.Rows.Add(row); } reader.Close(); scoreBoard.DataSource = dt; }
private void participates_Click(object sender, EventArgs e) { string lookUpAthlete = String.Format("SELECT age,gender FROM athlete" + " WHERE athleteNo={0}" + " AND teamAccNo='{1}'", participatesAthleteNo.Text, teamAccNo); NpgsqlCommand cmd = new NpgsqlCommand(lookUpAthlete); cmd.Connection = conn; NpgsqlDataReader r = cmd.ExecuteReader(); if (!r.HasRows) { noticeLabelParticipate.Text = "此运动员未登记"; r.Close(); return; } r.Read(); string ageG = ProgramCore.ageGroup(r.GetValue(0).ToString()); bool gender = (r.GetValue(1).ToString() == "True"); noticeLabelParticipate.Text = ageG + ":" + r.GetValue(0).ToString(); r.Close(); string validate = String.Format("SELECT * FROM competitions" + " WHERE gameType='{0}'" + " AND ageGroup={1}" + " AND gender={2}", gameTypeUpDown.SelectedItem.ToString(), ageG, gender); cmd = new NpgsqlCommand(validate); cmd.Connection = conn; r = cmd.ExecuteReader(); if (!r.HasRows) { r.Close(); noticeLabelParticipate.Text += " 该运动员不具有资格参加此项目"; return; } r.Close(); string insertParticipates = String.Format("INSERT INTO participates(athleteNo,tournamentId,finalScore)" + " SELECT {0},gameId,0" + " FROM competitions,games" + " WHERE games.compId=competitions.compId" + " AND gameType='{1}'" + " AND ageGroup={2}" + " AND gender={3}" + " ON CONFLICT DO NOTHING", participatesAthleteNo.Text, gameTypeUpDown.Text, ageG, gender); cmd = new NpgsqlCommand(insertParticipates); cmd.Connection = conn; cmd.ExecuteNonQuery(); refreshParticipateInfo(); }
public static void Main(string[] args) { //args = new string[] //{ // @ // \"{ dll_asp:'%project:Directory%\\bin\\Debug\\net452\\win7-x64\\WinCoreAppExample.exe', file_js_absolute: 'C:\\Users\\diphap\\Source\\Repos\\jsnet\\WinCoreAppExample\\Scripts\\Diphap.JsNetBridge\\Diphap.JsNetBridge.js', isAspNetCoreWindows: true }\" //}; ProgramCore.MainCore(args); }
public Dictionary <Guid, PartMorphInfo> LoadPartsMorphInfo(string path, RenderMesh renderMesh) { var vertexPositions = new List <float>(); List <float> tmp = null; List <uint> uitmp = null; var vertices = new List <Vector3>(); var objModel = ObjLoader.LoadObjFile(path); if (objModel == null) { ProgramCore.EchoToLog(string.Format("Can't load obj model '{0}'", path), EchoMessageType.Error); return(null); } var a = new Vector3(99999.0f, 99999.0f, 99999.0f); var b = new Vector3(-99999.0f, -99999.0f, -99999.0f); var result = new Dictionary <Guid, PartMorphInfo>(); foreach (var modelGroup in objModel.Groups) // one group - one mesh { vertexPositions.Clear(); foreach (var face in modelGroup.Value.Faces) // combine all meshes in group - to one mesh. { GetObjFace(face, objModel, ref vertexPositions, ref tmp, ref tmp, ref tmp, ref tmp, ref uitmp); } vertices.Clear(); for (int i = 0; i < vertexPositions.Count; i += 3) { vertices.Add(new Vector3(vertexPositions[i], vertexPositions[i + 1], vertexPositions[i + 2])); } PartMorphInfo morphInfo = null; float scale = ProgramCore.PluginMode && ProgramCore.MainForm.ctrlRenderControl.pickingController.ObjExport != null ? ProgramCore.MainForm.ctrlRenderControl.pickingController.ObjExport.Scale : 1.0f; var part = renderMesh.Parts.FirstOrDefault( p => (p.Name.ToLower().Contains(modelGroup.Value.Name.ToLower()) || modelGroup.Value.Name.ToLower().Contains(p.Name.ToLower())) && PartMorphInfo.CreatePartMorphInfo(vertices, p, scale, out morphInfo)); if (part != null) { result.Add(part.Guid, morphInfo); GetAABB(ref a, ref b, vertices); } } foreach (var r in result) { MoveToPosition(ref r.Value.PointsMorph, a, b, Vector3.Zero); } return(result); }
private void CheckError() { var error = GL.GetError(); if (error != ErrorCode.NoError) { ProgramCore.EchoToLog(error.ToString(), EchoMessageType.Error); throw new Exception(error.ToString()); } }
public static void FindCenter(List <Vector3> list, String text) { Vector3 min, max; var center = MeshUtils.Helpers.MeshUtils.FindCenter(list, out min, out max); ProgramCore.EchoToLog(String.Format("{0} Center: {1}; {2}; {3}; Min: {4}; {5}; {6}; Max: {7}; {8}; {9};", text, center.X, center.Y, center.Z, min.X, min.Y, min.Z, max.X, max.Y, max.Z), EchoMessageType.Information); }
static void Main(string[] args) { // get connection strings from command line arguments string sourceConnectionString = GetConnectionString(args); string destinationConnectionString = GetConnectionString(args); using (ProgramCore core = new ProgramCore(sourceConnectionString, destinationConnectionString)) { core.Execute(); } }
public bool SetUniformLocation(String name) { var location = GL.GetUniformLocation(shader, name); if (location == -1) // -1 = fail { ProgramCore.EchoToLog(String.Format("SetUniformLocation error: {0}", name), EchoMessageType.Error); } uniforms.Add(name, location); return(true); }
static void Main(string[] args) { ProgramCore core = new ProgramCore(args); Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { if (o.Languages) { Console.WriteLine(o.Token); core.Languages(); } }); }
public void SetObjectAABB(Vector3 A, Vector3 B) { ProgramCore.EchoToLog("_delta: " + _delta.ToString(), IO.EchoMessageType.Information); Scale = (DefaultB.Y - DefaultA.Y) / (B.Y - A.Y); // Vector3 DefaultCenter = (DefaultA + DefaultB) * 0.5f; //Vector3 Center = (A + B) * 0.5f; float MinY = A.Y * Scale; _delta.Y = DefaultA.Y - MinY; ProgramCore.EchoToLog("_delta: " + _delta.ToString(), IO.EchoMessageType.Information); }
public bool Create(List <float> vertexPositions, List <float> vertexNormals, List <float> vertexTextureCoordinates, List <float> vertexBoneIndices, List <float> vertexBoneWeights, List <uint> indices, string texturePath, string alphaTexturePath) { Material.DiffuseTextureMap = texturePath; Material.TransparentTextureMap = alphaTexturePath; NumIndices = indices.Count; #if WEB_APP #else GL.GenBuffers(1, out VertexBuffer); GL.GenBuffers(1, out IndexBuffer); GL.BindBuffer(BufferTarget.ElementArrayBuffer, IndexBuffer); GL.BufferData(BufferTarget.ElementArrayBuffer, new IntPtr(indices.Count * sizeof(uint)), indices.ToArray(), BufferUsageHint.DynamicDraw); ProgramCore.EchoToLog($"IndexBuffer Size: {indices.Count}", EchoMessageType.Information); var error = GL.GetError(); if (error != ErrorCode.NoError) { throw new Exception(error.ToString()); } #endif vertexArray = new Vertex[vertexPositions.Count / 3]; for (var i = 0; i < vertexPositions.Count / 3; i++) { var index = i * 3; vertexArray[i].Position = new Vector3(vertexPositions[index], vertexPositions[index + 1], vertexPositions[index + 2]); vertexArray[i].Normal = new Vector3(vertexNormals[index], vertexNormals[index + 1], vertexNormals[index + 2]); vertexArray[i].TexCoord = new Vector2(vertexTextureCoordinates[i * 2], 1.0f - vertexTextureCoordinates[i * 2 + 1]); vertexArray[i].Color = Vector4.One; } vertexBoneIndicsArray = vertexBoneIndices.ToArray(); vertexBoneWeightArray = vertexBoneWeights.ToArray(); #if WEB_APP #else UpdateBuffer(); #endif UpdatePointIndices(); return(true); }
/// <summary> Copy dir with all files in them </summary> /// <param name="sourceDirName">Source directory path</param> /// <param name="destDirName">Destination directory path</param> /// <param name="copySubDirs">Copy subfolders</param> public static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs) { var dir = new DirectoryInfo(sourceDirName); var dirs = dir.GetDirectories(); // If the source directory does not exist, throw an exception. if (!dir.Exists) { ProgramCore.EchoToLog("Source directory does not exist or could not be found: " + sourceDirName, EchoMessageType.Warning); return; } // If the destination directory does not exist, create it. if (!Directory.Exists(destDirName)) { Directory.CreateDirectory(destDirName); } // Get the file contents of the directory to copy. var files = dir.GetFiles(); foreach (var file in files) { // Create the path to the new copy of the file. var temppath = Path.Combine(destDirName, file.Name); // Copy the file. file.CopyTo(temppath, false); } // If copySubDirs is true, copy the subdirectories. if (copySubDirs) { foreach (var subdir in dirs) { // Create the subdirectory. var temppath = Path.Combine(destDirName, subdir.Name); // Copy the subdirectories. DirectoryCopy(subdir.FullName, temppath, copySubDirs); } } }
private void refreshSchedule_Click(object sender, EventArgs e) { string query = "SELECT gameType,gender,ageGroup,time,gameId" + " FROM games,competitions" + " WHERE games.compId = competitions.compId" + " AND stage=true" + " ORDER BY time ASC"; NpgsqlCommand cmd = new NpgsqlCommand(query); cmd.Connection = npgsqlcon; NpgsqlDataReader reader = cmd.ExecuteReader(); if (reader.HasRows) { DataTable dt = new DataTable(); dt.Columns.Add("场次编号", typeof(string)); dt.Columns.Add("场次", typeof(string)); dt.Columns.Add("项目", typeof(string)); dt.Columns.Add("性别", typeof(string)); dt.Columns.Add("年龄组", typeof(string)); for (int i = 0; i < 55; i++) { occupied[i] = 0; } while (reader.Read()) { DataRow row = dt.NewRow(); object[] objs = new object[5]; reader.GetValues(objs); row["场次编号"] = objs[4]?.ToString(); row["项目"] = objs[0]?.ToString(); row["性别"] = (objs[1]?.ToString() == "True" ? "男" : "女"); row["年龄组"] = ProgramCore.ageRange(objs[2]?.ToString()); row["场次"] = objs[3].ToString(); occupied[int.Parse(objs[3].ToString())] = 1; dt.Rows.Add(row); } scheduleGridView.DataSource = dt; } reader.Close(); }
static void Main(string[] args) { try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var currentDomain = AppDomain.CurrentDomain; currentDomain.AssemblyResolve += LoadSubLibs; ProgramCore.CurrentProgram = ProgramCore.ProgramMode.FaceAge2_Partial; ProgramCore.IsTutorialVisible = false; ProgramCore.MainForm = new frmMain(args.Length == 0 ? string.Empty : args[0]); Application.Run(ProgramCore.MainForm); } catch (Exception e) { ProgramCore.EchoToLog(e); MessageBox.Show(e.Message + Environment.NewLine + e.StackTrace, e.Message); } }
public static ObjItem LoadObjFile(string filePath, bool needExporter, bool isOpenSmile) { var result = new ObjItem(needExporter); #if WEB_APP var request = (FtpWebRequest)FtpWebRequest.Create(filePath); request.Credentials = new NetworkCredential(FTPHelper.Login, FTPHelper.Password); request.Method = WebRequestMethods.Ftp.DownloadFile; var ftpResponse = (FtpWebResponse)request.GetResponse(); byte[] buffer = new byte[16 * 1024]; using (var ftpStream = ftpResponse.GetResponseStream()) { using (MemoryStream ms = new MemoryStream()) { int read; while ((read = ftpStream.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } ms.Position = 0; ms.Flush(); using (var sr = new StreamReader(ms, Encoding.Default)) #else var fi = new FileInfo(filePath); if (!fi.Exists) return null; using (var sr = new StreamReader(fi.FullName, Encoding.Default)) #endif { var currentGroup = default(ObjGroup); CheckAndAttachDefaultGroup(ref currentGroup, ref result); var index = 0; var lastGroupName = String.Empty; if (ProgramCore.PluginMode) { var folderPath = Path.Combine(Application.StartupPath, "Models", "Model", ProgramCore.Project.GenesisType.GetGenesisPath(), ProgramCore.Project.ManType.GetObjDirPath(isOpenSmile)); switch (ProgramCore.Project.ManType) { case ManType.Male: LoadMtlib(Path.Combine(folderPath, "Male.mtl"), ref result); break; case ManType.Female: LoadMtlib(Path.Combine(folderPath, "Fem.mtl"), ref result); break; case ManType.Child: LoadMtlib(Path.Combine(folderPath, "Child.mtl"), ref result); break; } } while (!sr.EndOfStream) { var currentLine = sr.ReadLine(); if (String.IsNullOrWhiteSpace(currentLine) || currentLine[0] == '#') { if (currentLine == "#Accessories") result.accessoryByHeadShop = true; else if (currentLine == "#HeadShop Model") result.modelByHeadShop = true; continue; } var fields = currentLine.Trim().Split(null, 2); if (fields.Length < 2) { #if WEB_APP #else ProgramCore.EchoToLog(String.Format("Bad obj file format. File: '{0}'", fi.FullName), EchoMessageType.Warning); #endif continue; } var keyword = fields[0].Trim().ToLower(); var data = fields[1].Trim(); switch (keyword) { case "v": // verticles var vertex = ParseVector3(data); result.Vertices.Add(vertex); if (needExporter) result.ObjExport.Vertices.Add(vertex); break; case "vt": // texture coords var textureCoord = ParseTextureCoords(data); result.TextureCoords.Add(textureCoord); if (needExporter) result.ObjExport.TexCoords.Add(textureCoord); break; case "vn": // normals var normal = ParseVector3(data); result.Normals.Add(normal); if (needExporter) result.ObjExport.Normals.Add(normal); break; case "f": // faces var face = ParceFace(data); if (needExporter) { face.ObjExportIndex = result.ObjExport.Faces.Count; result.ObjExport.Faces.Add(new ObjExportFace(face.Count, face.Vertices)); } currentGroup.AddFace(face); index++; break; case "g": // start group if (needExporter) { lastGroupName = data; if (result.ObjExport.MaterialsGroups.Count > 0) { result.ObjExport.MaterialsGroups.Last().Groups.Last().EndFaceIndex = index - 1; result.ObjExport.MaterialsGroups.Last().Groups.Add(new ObjExportGroup { Group = data, StartFaceIndex = index }); } } break; case "mtllib": //parse mtl file #if WEB_APP if (ProgramCore.Project != null) { var path = ProgramCore.Project.HeadModelPath.Replace(".obj", ".mtl"); switch (ProgramCore.Project.ManType) { case ManType.Male: LoadMtlib(path, ref result); break; case ManType.Female: LoadMtlib(path, ref result); break; case ManType.Child: LoadMtlib(path, ref result); break; } } #else var path = Path.Combine(fi.DirectoryName, data); LoadMtlib(path, ref result); #endif break; case "usemtl": if (needExporter) { if (result.ObjExport.MaterialsGroups.Count > 0) result.ObjExport.MaterialsGroups.Last().Groups.Last().EndFaceIndex = index - 1; result.ObjExport.MaterialsGroups.Add(new ObjExportMaterial { Material = data, Groups = new List<ObjExportGroup> { new ObjExportGroup { Group = lastGroupName, StartFaceIndex = index } } }); } var lowerData = data.ToLower(); var materialKey = result.Materials.Keys.SingleOrDefault(x => x == lowerData); ObjMaterial material; if (materialKey == null) // if can't parse mtl, create default group { material = new ObjMaterial(lowerData); result.Materials.Add(lowerData, material); } else material = result.Materials[materialKey]; if (result.Groups.ContainsKey(material)) currentGroup = result.Groups[material]; else { currentGroup = new ObjGroup(material.Name); result.Groups.Add(material, currentGroup); } break; } } if (result.ObjExport != null && result.ObjExport.MaterialsGroups.Count > 0 && needExporter) result.ObjExport.MaterialsGroups.Last().Groups.Last().EndFaceIndex = index - 1; } #if WEB_APP } } #endif return result; }
private void refresh_Click(object sender, EventArgs e) { //赛程 string query = "SELECT gameType,gender,ageGroup,time,gameId" + " FROM games,competitions" + " WHERE games.compId = competitions.compId" + " AND games.stage =" + !showFinals.Checked; NpgsqlCommand cmd = new NpgsqlCommand(query); cmd.Connection = npgSqlCon; NpgsqlDataReader reader = cmd.ExecuteReader(); if (reader.HasRows) { DataTable dt = new DataTable(); dt.Columns.Add("项目", typeof(string)); dt.Columns.Add("性别", typeof(string)); dt.Columns.Add("年龄组", typeof(string)); dt.Columns.Add("场次", typeof(int)); dt.Columns.Add("x", typeof(string)); while (reader.Read()) { DataRow row = dt.NewRow(); object[] objs = new object[5]; reader.GetValues(objs); row["项目"] = objs[0]?.ToString(); row["性别"] = (objs[1]?.ToString() == "true" ? "男" : "女"); row["年龄组"] = ProgramCore.ageRange(objs[2]?.ToString()); row["场次"] = objs[3].ToString(); row["x"] = objs[4].ToString(); dt.Rows.Add(row); } reader.Close(); finalsSchedule.DataSource = dt; } reader.Close(); //得出决赛运动员参赛信息 query = "SELECT athlete.name,teams.teamName, gameType, competitions.gender,ageGroup,time,gameId" + " FROM athlete,teams,participates,games,competitions" + " WHERE athlete.athleteNo = participates.athleteNo" + " AND athlete.teamAccNo = teams.accNo" + " AND participates.tournamentId = games.gameId" + " AND games.compId = competitions.compId" + " AND games.stage =" + !showFinals.Checked + " ORDER BY time ASC," + " teamName DESC"; cmd = new NpgsqlCommand(query); cmd.Connection = npgSqlCon; reader = cmd.ExecuteReader(); if (reader.HasRows) { DataTable dt = new DataTable(); dt.Columns.Add("姓名", typeof(string)); dt.Columns.Add("队伍", typeof(string)); dt.Columns.Add("项目", typeof(string)); dt.Columns.Add("性别", typeof(string)); dt.Columns.Add("年龄组", typeof(string)); dt.Columns.Add("场次", typeof(string)); dt.Columns.Add("x", typeof(string)); while (reader.Read()) { DataRow row = dt.NewRow(); object[] objs = new object[7]; reader.GetValues(objs); row["姓名"] = objs[0]?.ToString(); row["队伍"] = objs[1]?.ToString(); row["项目"] = objs[2]?.ToString(); row["性别"] = (objs[3]?.ToString() == "true" ? "男" : "女"); row["年龄组"] = ProgramCore.ageRange(objs[4]?.ToString()); row["场次"] = objs[5]?.ToString(); row["x"] = objs[6]?.ToString(); dt.Rows.Add(row); } finalsParticipation.DataSource = dt; } else { noticeLab.Text = "比赛信息暂未公布"; } reader.Close(); }
public List <DynamicRenderMesh> AddMehes(string path, MeshType type, bool fromDragAndDrop, ManType manType, string animationPath, bool needExporter) { var result = new List <DynamicRenderMesh>(); var objModel = ObjLoader.LoadObjFile(path, needExporter); if (objModel == null) { ProgramCore.EchoToLog(string.Format("Can't load obj model '{0}'", path), EchoMessageType.Error); return(result); } switch (type) { case MeshType.Hair: { var fi = new FileInfo(path); var objModelNull = ObjLoader.LoadObjFile(Path.Combine(fi.DirectoryName, fi.Name.Replace(fi.Extension, string.Format("_null{0}", fi.Extension)))); if (objModelNull != null && (objModelNull.Groups.Count != objModel.Groups.Count || objModel.Vertices.Count != objModelNull.Vertices.Count)) { // objModel.TextureCoords.Count != objModelNull.TextureCoords.Count)) objModelNull = null; } result = LoadHairMeshes(objModel, objModelNull, fromDragAndDrop, manType, MeshType.Hair); foreach (var renderMesh in result) { HairMeshes.Add(renderMesh); } break; } case MeshType.Accessory: return(objModel.accessoryByHeadShop ? LoadSpecialAccessoryMesh(objModel) : new List <DynamicRenderMesh> { LoadAccessoryMesh(objModel) }); case MeshType.Head: { var tempPluginTexture = string.Empty; if (ProgramCore.PluginMode) { var folderPath = Path.Combine(Application.StartupPath, "Models\\Model", manType.GetObjDirPath()); switch (ProgramCore.Project.ManType) { case ManType.Male: tempPluginTexture = Path.Combine(folderPath, "Maps", "RyNevio_faceB.jpg"); break; case ManType.Female: tempPluginTexture = Path.Combine(folderPath, "Maps", "RyBelle_face.jpg"); break; case ManType.Child: tempPluginTexture = Path.Combine(folderPath, "Maps", "AC_KidsRRHBy.jpg"); break; default: tempPluginTexture = Path.Combine(Application.StartupPath, "Plugin", "fsRndColor.png"); break; } } foreach (var mesh in HeadMeshes) { mesh.Destroy(); } HeadMeshes.Clear(); var objModelFull = animationPath == string.Empty ? null : ObjLoader.LoadObjFile(animationPath); if (objModelFull != null && (objModelFull.Groups.Count != objModel.Groups.Count || objModel.Vertices.Count != objModelFull.Vertices.Count || objModel.TextureCoords.Count != objModelFull.TextureCoords.Count)) { objModelFull = null; } LastTriangleIndex = 0; result = LoadHairMeshes(objModel, objModelFull, fromDragAndDrop, manType, MeshType.Head); var meshPartInfos = new List <MeshPartInfo>(); var a = new Vector3(99999.0f, 99999.0f, 99999.0f); var b = new Vector3(-99999.0f, -99999.0f, -99999.0f); foreach (var renderMesh in result) { HeadMeshes.Add(renderMesh); if (ProgramCore.PluginMode && ProgramCore.MainForm.PluginUvGroups.Contains(renderMesh.Material.Name)) { if (string.IsNullOrEmpty(renderMesh.Material.DiffuseTextureMap)) { renderMesh.Material.DiffuseTextureMap = tempPluginTexture; } else if (!File.Exists(renderMesh.Material.DiffuseTextureMap)) { renderMesh.Material.DiffuseTextureMap = tempPluginTexture; } } var meshPartInfo = new MeshPartInfo { VertexPositions = renderMesh.GetVertices(), TextureCoords = renderMesh.GetTexCoords(), PartName = renderMesh.Title, Color = renderMesh.Material.DiffuseColor, Texture = renderMesh.Material.Texture, TransparentTexture = renderMesh.Material.TransparentTexture, TextureName = renderMesh.Material.DiffuseTextureMap, TransparentTextureName = renderMesh.Material.TransparentTextureMap }; // создаем инфу о голове. для работы с headshop GetAABB(ref a, ref b, meshPartInfo.VertexPositions); meshPartInfos.Add(meshPartInfo); } Vector3 dv = Vector3.Zero; foreach (var meshPartInfo in meshPartInfos) { dv = MoveToPosition(ref meshPartInfo.VertexPositions, a, b, Vector3.Zero); ProgramCore.MainForm.ctrlRenderControl.headMeshesController.CreateMeshPart(meshPartInfo); } ObjExport = objModel.ObjExport; if (ObjExport != null) { ObjExport.Delta = -dv; } ProgramCore.MainForm.ctrlRenderControl.headMeshesController.FinishCreating(); // ProgramCore.MainForm.ctrlRenderControl.headMeshesController.InitializeTexturing(HeadController.GetDots(ProgramCore.Project.ManType), HeadController.GetIndices(ProgramCore.Project.ManType)); break; } default: return(result); } return(result); }
public static ObjItem LoadObjFile(string filePath, bool needExporter) { var result = new ObjItem(needExporter); var fi = new FileInfo(filePath); if (!fi.Exists) { return(null); } using (var sr = new StreamReader(fi.FullName, Encoding.Default)) { var currentGroup = default(ObjGroup); CheckAndAttachDefaultGroup(ref currentGroup, ref result); var index = 0; var lastGroupName = String.Empty; if (ProgramCore.PluginMode) { var folderPath = Path.Combine(Application.StartupPath, "Models\\Model", ProgramCore.Project.ManType.GetObjDirPath()); switch (ProgramCore.Project.ManType) { case ManType.Male: LoadMtlib(Path.Combine(folderPath, "Male.mtl"), ref result); break; case ManType.Female: LoadMtlib(Path.Combine(folderPath, "Fem.mtl"), ref result); break; case ManType.Child: LoadMtlib(Path.Combine(folderPath, "Child.mtl"), ref result); break; } } while (!sr.EndOfStream) { var currentLine = sr.ReadLine(); if (String.IsNullOrWhiteSpace(currentLine) || currentLine[0] == '#') { if (currentLine == "#Accessories") { result.accessoryByHeadShop = true; } else if (currentLine == "#HeadShop Model") { result.modelByHeadShop = true; } continue; } var fields = currentLine.Trim().Split(null, 2); if (fields.Length < 2) { ProgramCore.EchoToLog(String.Format("Bad obj file format. File: '{0}'", fi.FullName), EchoMessageType.Warning); continue; } var keyword = fields[0].Trim().ToLower(); var data = fields[1].Trim(); switch (keyword) { case "v": // verticles var vertex = ParseVector3(data); result.Vertices.Add(vertex); if (needExporter) { result.ObjExport.Vertices.Add(vertex); } break; case "vt": // texture coords var textureCoord = ParseTextureCoords(data); result.TextureCoords.Add(textureCoord); if (needExporter) { result.ObjExport.TexCoords.Add(textureCoord); } break; case "vn": // normals var normal = ParseVector3(data); result.Normals.Add(normal); if (needExporter) { result.ObjExport.Normals.Add(normal); } break; case "f": // faces var face = ParceFace(data); if (needExporter) { face.ObjExportIndex = result.ObjExport.Faces.Count; result.ObjExport.Faces.Add(new ObjExportFace(face.Count, face.Vertices)); } currentGroup.AddFace(face); index++; break; case "g": // start group if (needExporter) { lastGroupName = data; if (result.ObjExport.MaterialsGroups.Count > 0) { result.ObjExport.MaterialsGroups.Last().Groups.Last().EndFaceIndex = index - 1; result.ObjExport.MaterialsGroups.Last().Groups.Add(new ObjExportGroup { Group = data, StartFaceIndex = index }); } } break; case "mtllib": //parse mtl file var path = Path.Combine(fi.DirectoryName, data); LoadMtlib(path, ref result); break; case "usemtl": if (needExporter) { if (result.ObjExport.MaterialsGroups.Count > 0) { result.ObjExport.MaterialsGroups.Last().Groups.Last().EndFaceIndex = index - 1; } result.ObjExport.MaterialsGroups.Add(new ObjExportMaterial { Material = data, Groups = new List <ObjExportGroup> { new ObjExportGroup { Group = lastGroupName, StartFaceIndex = index } } }); } var lowerData = data.ToLower(); var materialKey = result.Materials.Keys.SingleOrDefault(x => x == lowerData); ObjMaterial material; if (materialKey == null) // if can't parse mtl, create default group { material = new ObjMaterial(lowerData); result.Materials.Add(lowerData, material); } else { material = result.Materials[materialKey]; } if (result.Groups.ContainsKey(material)) { currentGroup = result.Groups[material]; } else { currentGroup = new ObjGroup(material.Name); result.Groups.Add(material, currentGroup); } break; } } if (result.ObjExport != null && result.ObjExport.MaterialsGroups.Count > 0 && needExporter) { result.ObjExport.MaterialsGroups.Last().Groups.Last().EndFaceIndex = index - 1; } } return(result); }
public List <DynamicRenderMesh> AddMehes(string path, MeshType type, bool fromDragAndDrop, GenesisType genesisType, ManType manType, string animationPath, bool needExporter, bool isOpenSmile) { var result = new List <DynamicRenderMesh>(); var objModel = ObjLoader.LoadObjFile(path, needExporter, isOpenSmile); if (objModel == null) { ProgramCore.EchoToLog($"Can't load obj model '{path}'", EchoMessageType.Error); return(result); } var lastTriangle = 0; switch (type) { case MeshType.Hair: { var fi = new FileInfo(path); var objModelNull = ObjLoader.LoadObjFile(Path.Combine(fi.DirectoryName, fi.Name.Replace(fi.Extension, string.Format("_null{0}", fi.Extension))), isOpenSmile); if (objModelNull != null && (objModelNull.Groups.Count != objModel.Groups.Count || objModel.Vertices.Count != objModelNull.Vertices.Count)) { // objModel.TextureCoords.Count != objModelNull.TextureCoords.Count)) objModelNull = null; } result = LoadHairMeshes(objModel, objModelNull, fromDragAndDrop, manType, MeshType.Hair, ref lastTriangle); foreach (var renderMesh in result) { HairMeshes.Add(renderMesh); } break; } case MeshType.Accessory: if (objModel.accessoryByHeadShop) { result.AddRange(LoadSpecialAccessoryMesh(objModel)); } else { var accessories = new List <DynamicRenderMesh> { LoadAccessoryMesh(objModel) }; foreach (var accessory in accessories) { AccesoryMeshes.Add(accessory); } result.AddRange(accessories); } break; case MeshType.Head: { var tempPluginTexture = string.Empty; var topPoint = 11.98351f; int tempPluginTextureIndex = 0; if (ProgramCore.PluginMode) { var folderPath = Path.Combine(Application.StartupPath, "Models", "Model", genesisType.GetGenesisPath(), manType.GetObjDirPath(isOpenSmile)); switch (ProgramCore.Project.ManType) { case ManType.Male: switch (ProgramCore.Project.GenesisType) { case GenesisType.Genesis2: tempPluginTexture = Path.Combine(folderPath, "Maps", "RyNevio_faceB.jpg"); break; case GenesisType.Genesis3: tempPluginTexture = Path.Combine(folderPath, "Maps", "RyEddie_face_1001.jpg"); break; case GenesisType.Genesis8: tempPluginTexture = Path.Combine(folderPath, "Maps", "G8MBaseFaceMapD01_1001.jpg"); break; } break; case ManType.Female: switch (ProgramCore.Project.GenesisType) { case GenesisType.Genesis2: tempPluginTexture = Path.Combine(folderPath, "Maps", "V5BreeHeadM.jpg"); break; case GenesisType.Genesis3: tempPluginTexture = Path.Combine(folderPath, "Maps", "RyJeane_face_1001.jpg"); break; case GenesisType.Genesis8: tempPluginTexture = Path.Combine(folderPath, "Maps", "G8FBaseFaceMapD_1001.jpg"); break; } break; case ManType.Child: tempPluginTexture = Path.Combine(folderPath, "Maps", "AC_KidsRRHBy.jpg"); break; default: tempPluginTexture = Path.Combine(Application.StartupPath, "Plugin", "fsRndColor.png"); break; } tempPluginTextureIndex = ProgramCore.MainForm.ctrlRenderControl.GetTexture(tempPluginTexture); } float scale = 1.0f; switch (ProgramCore.Project.ManType) { case ManType.Male: topPoint = 11.98351f; break; case ManType.Female: topPoint = 11.61f; break; case ManType.Child: //scale = 0.85f; topPoint = 9.759598f; break; } var objModelFull = animationPath == string.Empty ? null : ObjLoader.LoadObjFile(animationPath, isOpenSmile); if (objModelFull != null && (objModelFull.Groups.Count != objModel.Groups.Count || objModel.Vertices.Count != objModelFull.Vertices.Count || objModel.TextureCoords.Count != objModelFull.TextureCoords.Count)) { objModelFull = null; } var meshPartInfos = LoadHeadMeshes(objModel, fromDragAndDrop, manType, scale, ref lastTriangle); ObjExport = objModel.ObjExport; //if (ProgramCore.PluginMode) { ObjExport.DefaultA = new Vector3(99999.0f, 99999.0f, 99999.0f); ObjExport.DefaultB = new Vector3(-99999.0f, -99999.0f, -99999.0f); foreach (var meshPartInfo in meshPartInfos) { GetAABB(ref ObjExport.DefaultA, ref ObjExport.DefaultB, meshPartInfo.VertexPositions); } } if (ProgramCore.PluginMode && isOpenSmile) { PluginMorphToSmile(meshPartInfos, genesisType, manType, scale); } //result = LoadHairMeshes(objModel, objModelFull, fromDragAndDrop, manType, MeshType.Head); //var meshPartInfos = new List<MeshPartInfo>(); var a = new Vector3(99999.0f, 99999.0f, 99999.0f); var b = new Vector3(-99999.0f, -99999.0f, -99999.0f); foreach (var meshPartInfo in meshPartInfos) { if (ProgramCore.PluginMode && ProgramCore.MainForm.PluginUvGroups.Contains(meshPartInfo.MaterialName)) { if (string.IsNullOrEmpty(meshPartInfo.TextureName) || !File.Exists(meshPartInfo.TextureName)) { meshPartInfo.TextureName = tempPluginTexture; meshPartInfo.Texture = tempPluginTextureIndex; } } GetAABB(ref a, ref b, meshPartInfo.VertexPositions); } var dv = Vector3.Zero; foreach (var meshPartInfo in meshPartInfos) { // ПОТЕНЦИАЛЬНО ОПАСНОЕ МЕСТО! В случае улетания башки - AlignByTOp сделать для всех, кроме плагина. Для него оставить MoveToPosition #if (WEB_APP) dv = AlignByTop(ref meshPartInfo.VertexPositions, a, b, topPoint); #else dv = MoveToPosition(ref meshPartInfo.VertexPositions, a, b, Vector3.Zero); #endif ProgramCore.Project.RenderMainHelper.headMeshesController.CreateMeshPart(ProgramCore.Project.GenesisType, meshPartInfo); } if (ObjExport != null) { ObjExport.Delta = -dv; } ProgramCore.Project.RenderMainHelper.headMeshesController.FinishCreating(); return(null); // ProgramCore.Project.RenderMainHelper.headMeshesController.InitializeTexturing(HeadController.GetDots(ProgramCore.Project.ManType), HeadController.GetIndices(ProgramCore.Project.ManType)); } default: return(result); } foreach (var item in result) { item.Path = path; } return(result); }
public static List <DynamicRenderMesh> LoadHairMeshes(ObjItem objModel, ObjItem objModelNull, bool fromDragAndDrop, ManType manType, MeshType meshType, ref int lastTriangle) { var result = new List <DynamicRenderMesh>(); var vertexPositions = new List <float>(); var vertexNormals = new List <float>(); var vertexTextureCoordinates = new List <float>(); var vertexBoneIndices = new List <float>(); var vertexBoneWeights = new List <float>(); var indeces = new List <uint>(); var vertexPositionsNull = new List <float>(); var vertexNormalsNull = new List <float>(); var vertexTextureCoordinatesNull = new List <float>(); var vertexBoneIndicesNull = new List <float>(); var vertexBoneWeightsNull = new List <float>(); var indecesNull = new List <uint>(); var groupsNull = objModelNull == null ? new Dictionary <ObjMaterial, ObjGroup> .Enumerator() : objModelNull.Groups.GetEnumerator(); ObjGroup groupNull; foreach (var modelGroup in objModel.Groups) // one group - one mesh { vertexPositions.Clear(); vertexNormals.Clear(); vertexTextureCoordinates.Clear(); vertexBoneIndices.Clear(); vertexBoneWeights.Clear(); indeces.Clear(); foreach (var face in modelGroup.Value.Faces) // combine all meshes in group - to one mesh. { GetObjFace(face, objModel, ref vertexPositions, ref vertexNormals, ref vertexTextureCoordinates, ref vertexBoneWeights, ref vertexBoneIndices, ref indeces, ref lastTriangle); } var renderMesh = new DynamicRenderMesh(meshType); renderMesh.groupName = modelGroup.Value.Name; if (!objModel.modelByHeadShop) { for (var i = 0; i < vertexPositions.Count / 3; i++) { vertexPositions[i * 3 + 1] = vertexPositions[i * 3 + 1] - 0.0060975609f; } } ProgramCore.EchoToLog(String.Format("RenderMesh: {0}", modelGroup.Value.Name), EchoMessageType.Information); ProgramCore.EchoToLog( String.Format("renderMesh.Create: {0}, {1}, {2}, {3}, {4}", vertexPositions.Count, vertexTextureCoordinates.Count, vertexBoneIndices.Count, vertexBoneWeights.Count, indeces.Count), EchoMessageType.Information); if (renderMesh.Create(vertexPositions, vertexTextureCoordinates, vertexBoneIndices, vertexBoneWeights, indeces, string.Empty, string.Empty)) { if (objModelNull != null) { groupsNull.MoveNext(); groupNull = groupsNull.Current.Value; vertexPositionsNull.Clear(); vertexNormalsNull.Clear(); vertexTextureCoordinatesNull.Clear(); vertexBoneWeightsNull.Clear(); vertexBoneIndicesNull.Clear(); indecesNull.Clear(); foreach (var face in groupNull.Faces) { GetObjFace(face, objModelNull, ref vertexPositionsNull, ref vertexNormalsNull, ref vertexTextureCoordinatesNull, ref vertexBoneWeightsNull, ref vertexBoneIndicesNull, ref indecesNull, ref lastTriangle); } renderMesh.SetNullPoints(vertexPositionsNull, vertexNormalsNull, vertexTextureCoordinatesNull); } renderMesh.Title = modelGroup.Key.Name == "default" ? string.Empty : modelGroup.Key.Name; renderMesh.Material = modelGroup.Key; renderMesh.Material.DiffuseColor = new Vector4(modelGroup.Key.DiffuseColor.X, modelGroup.Key.DiffuseColor.Y, modelGroup.Key.DiffuseColor.Z, modelGroup.Key.Transparency); if (!string.IsNullOrEmpty(modelGroup.Key.DiffuseTextureMap)) { renderMesh.Material.DiffuseTextureMap = modelGroup.Key.DiffuseTextureMap; } if (!string.IsNullOrEmpty(modelGroup.Key.TransparentTextureMap)) { renderMesh.Material.TransparentTextureMap = modelGroup.Key.TransparentTextureMap; } var scale = meshType == MeshType.Head ? GetHeadScale(manType) : GetHairScale(manType); // перегруз сделан потому, что на этапе загрузки проекта самого проекта еще может не быть. поэтому лучше передавать #if WEB_APP scale *= ProgramCore.Project.RenderMainHelper.headMeshesController.RenderMesh.MorphScale; #endif renderMesh.Transform = Matrix4.CreateScale(scale); var center = Vector3.Zero; var count = vertexPositions.Count / 3; for (var i = 0; i < count; i++) { center.X += vertexPositions[i * 3] * scale; center.Y += vertexPositions[i * 3 + 1] * scale; center.Z += vertexPositions[i * 3 + 2] * scale; } if (fromDragAndDrop) { center /= count; renderMesh.Transform = Matrix4.CreateScale(scale); renderMesh.Transform[3, 0] = -center.X; renderMesh.Transform[3, 1] = -center.Y; renderMesh.Transform[3, 2] = -center.Z; renderMesh.Position = center; } if (vertexTextureCoordinates.Count > 0 && vertexTextureCoordinates.All(x => x == 0)) { renderMesh.UpdateTextureCoordinates(0, 1); } if (renderMesh.vertexArray.Length > 0) { result.Add(renderMesh); } } } return(result); }
//refresh results private void tempButton_Click(object sender, EventArgs e) { // get rank from participates //personal overall rank string query = " WITH t AS(SELECT athleteNo, avg(finalScore) as score" + " FROM participates,games" + " WHERE tournamentId=gameId" + " AND stage=" + !showsFinals.Checked + " GROUP BY athleteNo)" + " SELECT athlete.name,teamName,t.score" + " FROM t,athlete,teams,games" + " WHERE t.athleteNo = athlete.athleteNo" + " AND athlete.identityNo = teams.memberIdentityNo"; NpgsqlCommand cmd = new NpgsqlCommand(query); cmd.Connection = npgSqlCon; reader = cmd.ExecuteReader(); if (reader.HasRows) { DataTable dt = new DataTable(); dt.Columns.Add("排名", typeof(int)); dt.Columns.Add("名字", typeof(string)); dt.Columns.Add("队伍", typeof(string)); dt.Columns.Add("积分", typeof(string)); int rank = 1; DataRow row; while (reader.Read()) { row = dt.NewRow(); object[] objs = new object[3]; reader.GetValues(objs); row["排名"] = rank++; row["名字"] = objs[0]?.ToString(); row["积分"] = objs[2]?.ToString(); row["队伍"] = objs[1]?.ToString(); dt.Rows.Add(row); } personalRank.DataSource = dt; } reader.Close(); //team games rank query = "WITH t AS(SELECT teamAccNo, gameId, compId, sum(finalScore) teamTotalScore" + " FROM teams, athlete, participates, games" + " WHERE teams.memberIdentityNo= athlete.identityNo" + " AND athlete.athleteNo= participates.athleteNo" + " AND participates.tournamentId= games.gameId" + " AND games.stage=" + !showsFinals.Checked + " GROUP BY teamAccNo, gameId)," + " tName AS(SELECT accNo, teamName FROM teams GROUP BY accNo, teamName)" + " SELECT teamName, gameType, gender, ageGroup, teamTotalScore" + " FROM tName, t, competitions" + " WHERE tName.accNo = t.teamAccNo" + " AND t.compId = competitions.compId" + " ORDER BY teamTotalScore DESC"; cmd = new NpgsqlCommand(query); cmd.Connection = npgSqlCon; reader = cmd.ExecuteReader(); if (reader.HasRows) { DataTable dt = new DataTable(); dt.Columns.Add("队伍", typeof(string)); dt.Columns.Add("项目", typeof(string)); dt.Columns.Add("性别", typeof(string)); dt.Columns.Add("年龄组", typeof(string)); dt.Columns.Add("积分", typeof(string)); while (reader.Read()) { DataRow row = dt.NewRow(); object[] objs = new object[5]; reader.GetValues(objs); row["队伍"] = objs[0]?.ToString(); row["项目"] = objs[1]?.ToString(); row["性别"] = ((objs[2]?.ToString() == "True")?"男":"女"); row["年龄组"] = ProgramCore.ageRange(objs[3]?.ToString()); row["积分"] = objs[4]?.ToString(); dt.Rows.Add(row); } teamGamesRank.DataSource = dt; } reader.Close(); //team overall rank string query1 = " SELECT teamName,sum(finalScore) as s,teamAccNo" + " FROM teams, athlete, participates,games" + " WHERE teams.memberIdentityNo = athlete.identityNo" + " AND athlete.athleteNo = participates.athleteNo" + " AND tournamentId=gameId" + " AND games.stage=" + !showsFinals.Checked + " GROUP BY teamAccNo,teamName" + " ORDER BY s DESC"; NpgsqlCommand cmd1 = new NpgsqlCommand(query1); cmd1.Connection = npgSqlCon; reader = cmd1.ExecuteReader(); if (reader.HasRows) { DataTable dt = new DataTable(); dt.Columns.Add("排名", typeof(int)); dt.Columns.Add("队伍名字", typeof(string)); dt.Columns.Add("总积分", typeof(string)); int rank = 1; while (reader.Read()) { object[] objs = new object[2]; reader.GetValues(objs); DataRow row; row = dt.NewRow(); row["排名"] = rank++; row["队伍名字"] = objs[0]?.ToString(); row["总积分"] = objs[1]?.ToString(); dt.Rows.Add(row); } teamOverallRank.DataSource = dt; } reader.Close(); }