public Pillar AddPillarBetween(List <int> ids, FaultSettings fsettings) { if (ids.Count < 2) { return(null); } ids.Sort(); if (ids[1] != ids[0] + 1) { return(null); } PrecisedVertex top = (Items[ids[0]][0] + Items[ids[1]][0]) / 2.0; PrecisedVertex bot = (Items[ids[0]][Items[ids[0]].Count - 1] + Items[ids[1]][Items[ids[1]].Count - 1]) / 2.0; double len = top.DistanceTo(bot); double step = len / 5; double vx = (bot.X - top.X) / 4; double vy = (bot.Y - top.Y) / 4; double vz = (bot.Z - top.Z) / 4; PrecisedVertex vec = new PrecisedVertex(vx, vy, vz); PrecisedVertex nv = top; List <PrecisedVertex> nlist = new List <PrecisedVertex>(5); nlist.Add(top); for (int i = 0; i < 3; i++) { nv = nv + vec; nlist.Add(nv); } nlist.Add(bot); Pillar pillar = new Pillar(Project, "Adding", nlist, fsettings.Impl); if (pillar != null) { Insert(ids[1], pillar); } return(pillar); //return null; }
public Pillar AddPillarToEnd(List <int> ids, FaultSettings fsettings, double distance) { if (ids.Count == 0) { return(null); } bool isFirst = false; ids.Sort(); if (ids[0] == 0) { isFirst = true; } else { if (ids[ids.Count - 1] != Count - 1) { return(null); } } List <PrecisedVertex> v = new List <PrecisedVertex>(); foreach (var item in Items) { v.Add(item[0]); } //foreach (var id in ids) //{ // v.Add(Items[id][0]); //} PrecisedVertex[] data; PrecisedVertex[] P1 = new PrecisedVertex[v.Count]; PrecisedVertex[] P2 = new PrecisedVertex[v.Count]; data = v.ToArray(); try { MathFunctions.GetControlPoints(v.ToArray(), out P1, out P2); PrecisedVertex top = AddNewPillarToEnd(distance, isFirst, ref data, ref P1, ref P2); v.Clear(); //foreach (var id in ids) //{ // v.Add(Items[id][Items[id].Count - 1]); //} foreach (var item in Items) { v.Add(item[item.Count - 1]); } data = v.ToArray(); MathFunctions.GetControlPoints(v.ToArray(), out P1, out P2); PrecisedVertex bot = AddNewPillarToEnd(distance, isFirst, ref data, ref P1, ref P2); double len = top.DistanceTo(bot); double step = len / 5; double vx = (bot.X - top.X) / 4; double vy = (bot.Y - top.Y) / 4; double vz = (bot.Z - top.Z) / 4; PrecisedVertex vec = new PrecisedVertex(vx, vy, vz); PrecisedVertex nv = top; List <PrecisedVertex> nlist = new List <PrecisedVertex>(5); nlist.Add(top); for (int i = 0; i < 3; i++) { nv = nv + vec; nlist.Add(nv); } nlist.Add(bot); Pillar pillar = new Pillar(Project, "Adding", nlist, fsettings.Impl); if (isFirst) { Insert(0, pillar); } else { Add(pillar); } //Insert(isFirst ? 0 : Count - 1, pillar); return(pillar); } catch { return(null); } }