Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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;
        }