public Race() { Actions = ActionFlag.None; Affects = AffectedByFlag.None; Offenses = OffensiveFlag.None; Immunities = ImmunityFlag.None; Resistances = ResistanceFlag.None; Vulnerabilities = VulnerabilityFlag.None; Form = FormFlag.None; Parts = PartFlag.None; }
public void Command(string[] arg) { Grid grid = sparta.grid; Surf surf = sparta.surf; Domain domain = sparta.domain; Particle particle = sparta.particle; int narg = arg.Length; filename = arg[0]; double[] origion = new double[3]; if (!grid.exist) { sparta.DumpError("Cannot read_surf before grid is defined"); } surf.exist = true; dim = domain.dimension; if (narg < 1) { sparta.DumpError("Illegal read_surf command"); } Console.WriteLine("Reading surf file ...\n"); try { fp = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); } catch (Exception e) { throw e; } double time1 = Timer.getTime(); Header(); pts = new List<Point>(npoint); lines = new List<Line>(nline); ParseKeyword(true); ParseKeyword(false); PartFlag pf = PartFlag.NONE; bool grouparg = false; int iarg = 1; while (iarg < narg) { switch (arg[iarg]) { default: sparta.DumpError(string.Format("ReadSurf->Command: complete args {0}", arg[iarg])); break; } } if (particle.exist && pf == PartFlag.NONE) { sparta.DumpError("Using read_surf particle none when particles exist"); } //if (grouparg) //{ // int igroup=surf.FindGroup //} // extent of surfs after geometric transformations // compute sizes of smallest surface elements double[,] extent = new double[3, 2]; extent[0, 0] = extent[1, 0] = extent[2, 0] = double.MaxValue; extent[0, 1] = extent[1, 1] = extent[2, 1] = -double.MaxValue; foreach (Point p in pts) { extent[0, 0] = Math.Min(extent[0, 0], p.x[0]); extent[0, 1] = Math.Max(extent[0, 1], p.x[0]); extent[1, 0] = Math.Min(extent[1, 0], p.x[1]); extent[1, 1] = Math.Max(extent[1, 1], p.x[1]); extent[2, 0] = Math.Min(extent[2, 0], p.x[2]); extent[2, 1] = Math.Max(extent[2, 1], p.x[2]); } double minlen=0, minarea=0; if (dim == 2) { minlen = ShortestLine(); } if (dim == 3) { sparta.DumpError("Readsurf->Command: complete dimension3"); } StringBuilder sb = new StringBuilder(); sb.AppendFormat(" {0:G6} {1:G6} xlo xhi\n", extent[0, 0], extent[0, 1]); sb.AppendFormat(" {0:G6} {1:G6} ylo yhi\n", extent[1, 0], extent[1, 1]); sb.AppendFormat(" {0:G6} {1:G6} zlo zhi\n", extent[2, 0], extent[2, 1]); if (dim==2) { sb.AppendFormat(" {0:G6} min line length\n", minlen); } else { sparta.DumpError("Readsurf->Command: complete dimension3"); } sparta.DumpMessage(sb.ToString()); if (dim == 2) { surf.nline = nline; surf.Grow(); List<Surf.Line> newlines = surf.lines; int m = 0; foreach (Line line in lines) { Surf.Line l = new Surf.Line(); l.id = m + 1; // check for overflow when allow distributed surfs l.type = line.type; l.mask = line.mask; l.isc = l.isr = -1; Array.Copy(pts[line.p1].x, l.p1, 3); Array.Copy(pts[line.p2].x, l.p2, 3); newlines.Add(l); m++; } } else if (dim==3) { sparta.DumpError("Readsurf->Command: complete dimension3"); } if (dim==2) { surf.ComputeLineNormal(); } else { sparta.DumpError("Readsurf->Command: complete dimension3"); } if (dim == 2) { surf.CheckPointInside(); } else { sparta.DumpError("Readsurf->Command: complete dimension3"); } double time2 = Timer.getTime(); if (particle.exist) { particle.Sort(); } surf.SetupSurf(); //todo:not necessary grid.UnsetNeighbors(); grid.RemoveGhosts(); if (particle.exist&&grid.nsplitlocal!=0) { throw new NotImplementedException(); } grid.ClearSurf(); double time3 = Timer.getTime(); if (dim==2) { surf.CheckWatertight2d(nline); CheckNeighborNorm2d(); } double time4 = Timer.getTime(); //todo:continue grid.SurftoGrid(true); throw new NotImplementedException(); }