static List<STGraphic> LinkSimpleBoreholeGeology( List<BoreholeGeology> bhGeos1, List<BoreholeGeology> bhGeos2, double x1, double x2, double zScale) { int count = bhGeos1.Count; if (count > bhGeos2.Count) count = bhGeos2.Count; List<STGraphic> stGraphics = new List<STGraphic>(); IMapPoint p1 = NewMapPoint(x1, bhGeos1[0].Top * zScale); IMapPoint p2 = NewMapPoint(x2, bhGeos2[0].Top * zScale); IMapPoint MidOfp1p2 = NewMapPoint((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2); IMapPoint p3, p4; bool useMidPnt = false; IGraphic g; for (int i = 0; i < count; ++i) { BoreholeGeology bhGeo1 = bhGeos1[i]; BoreholeGeology bhGeo2 = bhGeos2[i]; if (bhGeo1.Top == bhGeo1.Base && bhGeo2.Top == bhGeo2.Base) continue; if (bhGeo1.Top == bhGeo1.Base) { p3 = p1; p4 = NewMapPoint(x2, bhGeo2.Base * zScale); g = NewTriangle(MidOfp1p2, p2, p4); useMidPnt = true; } else if (bhGeo2.Top == bhGeo2.Base) { p3 = NewMapPoint(x1, bhGeo1.Base * zScale); p4 = p2; g = NewTriangle(p1, MidOfp1p2, p3); useMidPnt = true; } else { p3 = NewMapPoint(x1, bhGeo1.Base * zScale); p4 = NewMapPoint(x2, bhGeo2.Base * zScale); if (useMidPnt) g = NewPentagon(p1, MidOfp1p2, p2, p4, p3); else g = NewQuadrilateral(p1, p2, p4, p3); MidOfp1p2 = NewMapPoint((p3.X + p4.X) / 2, (p3.Y + p4.Y) / 2); useMidPnt = false; } p1 = p3; p2 = p4; g.Symbol = GetDefaultFillSymbols(bhGeo1.StratumID); STGraphic stGraphic = new STGraphic(); stGraphic.StratumID = bhGeo1.StratumID; stGraphic.Graphic = g; stGraphics.Add(stGraphic); } return stGraphics; }
static List<STGraphic> LinkBoreholeGeologyWithLens( List<BoreholeGeology> bhGeos1, List<BoreholeGeology> bhGeos2, double x1, double x2, List<int> containers, bool rightBorehole, double zScale) { int count = bhGeos1.Count; if (count > bhGeos2.Count) count = bhGeos2.Count; List<STGraphic> stGraphics = new List<STGraphic>(); STGraphic stGraphic = null; IMapPoint p1 = NewMapPoint(x1, bhGeos1[0].Top * zScale); IMapPoint p2 = NewMapPoint(x2, bhGeos2[0].Top * zScale); IMapPoint MidOfp1p2 = NewMapPoint((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2); IMapPoint p3, p4; bool useMidPnt = false; IGraphic g; int index1 = 0, index2 = 0; for (int i = 0; i < count; ++i) { if (index1 == bhGeos1.Count || index2 == bhGeos2.Count) break; BoreholeGeology bhGeo1 = bhGeos1[index1++]; BoreholeGeology bhGeo2 = bhGeos2[index2++]; if (bhGeo1.Top == bhGeo1.Base && bhGeo2.Top == bhGeo2.Base) continue; BoreholeGeology bhGeo; if (rightBorehole) bhGeo = bhGeo2; else bhGeo = bhGeo1; if (containers.Contains(bhGeo.StratumID)) { BoreholeGeology lens; BoreholeGeology bhGeo_part2; IMapPoint plens_top, plens_base, plens_mid; if (rightBorehole) { lens = bhGeos2[index2++]; bhGeo_part2 = bhGeos2[index2++]; p3 = NewMapPoint(x1, bhGeo1.Base * zScale); p4 = NewMapPoint(x2, bhGeo_part2.Base * zScale); plens_top = NewMapPoint(x2, lens.Top * zScale); plens_base = NewMapPoint(x2, lens.Base * zScale); } else { lens = bhGeos1[index1++]; bhGeo_part2 = bhGeos1[index1++]; p3 = NewMapPoint(x1, bhGeo_part2.Base * zScale); p4 = NewMapPoint(x2, bhGeo2.Base * zScale); plens_top = NewMapPoint(x1, lens.Top * zScale); plens_base = NewMapPoint(x1, lens.Base * zScale); } if (bhGeo.Top == bhGeo.Base) plens_mid = MidOfp1p2; else plens_mid = NewMapPoint((x1 + x2) / 2, (lens.Top + lens.Base) * zScale / 2); IPointCollection pc = NewPointCollection(); if (rightBorehole) { pc.Add(p1); if (useMidPnt) pc.Add(MidOfp1p2); if (bhGeo.Top != bhGeo.Base) { pc.Add(p2); pc.Add(plens_top); } pc.Add(plens_mid); pc.Add(plens_base); pc.Add(p4); pc.Add(p3); pc.Add(p1); } else { pc.Add(p2); pc.Add(p4); pc.Add(p3); pc.Add(plens_base); pc.Add(plens_mid); if (bhGeo.Top != bhGeo.Base) { pc.Add(plens_top); pc.Add(p1); } if (useMidPnt) pc.Add(MidOfp1p2); pc.Add(p2); } g = NewPolygon(pc); g.Symbol = GetDefaultFillSymbols(bhGeo.StratumID); stGraphic = new STGraphic(); stGraphic.StratumID = bhGeo.StratumID; stGraphic.Graphic = g; stGraphics.Add(stGraphic); g = NewTriangle(plens_mid, plens_top, plens_base); g.Symbol = GetDefaultFillSymbols(lens.StratumID); stGraphic = new STGraphic(); stGraphic.StratumID = lens.StratumID; stGraphic.Graphic = g; stGraphics.Add(stGraphic); p1 = p3; p2 = p4; MidOfp1p2 = NewMapPoint((p3.X + p4.X) / 2, (p3.Y + p4.Y) / 2); useMidPnt = false; continue; } if (bhGeo1.Top == bhGeo1.Base) { p3 = p1; p4 = NewMapPoint(x2, bhGeo2.Base * zScale); g = NewTriangle(MidOfp1p2, p2, p4); useMidPnt = true; } else if (bhGeo2.Top == bhGeo2.Base) { p3 = NewMapPoint(x1, bhGeo1.Base * zScale); p4 = p2; g = NewTriangle(p1, MidOfp1p2, p3); useMidPnt = true; } else { p3 = NewMapPoint(x1, bhGeo1.Base * zScale); p4 = NewMapPoint(x2, bhGeo2.Base * zScale); if (useMidPnt) g = NewPentagon(p1, MidOfp1p2, p2, p4, p3); else g = NewQuadrilateral(p1, p2, p4, p3); MidOfp1p2 = NewMapPoint((p3.X + p4.X) / 2, (p3.Y + p4.Y) / 2); useMidPnt = false; } p1 = p3; p2 = p4; g.Symbol = GetDefaultFillSymbols(bhGeo1.StratumID); stGraphic = new STGraphic(); stGraphic.StratumID = bhGeo1.StratumID; stGraphic.Graphic = g; stGraphics.Add(stGraphic); } return stGraphics; }