private void AddPolygon(SdoGeometry sdoGeometry, IPolygon polygon)
        {
            int numInteriorRings        = polygon.NumInteriorRings;
            var info                    = new decimal[(numInteriorRings + 1) * 3];
            int ordinatesPreviousOffset = 0;

            if (sdoGeometry.OrdinatesArray != null)
            {
                ordinatesPreviousOffset = sdoGeometry.OrdinatesArray.Length;
            }
            int ordinatesOffset = ordinatesPreviousOffset + 1;
            var ordinates       = new decimal[] { };

            for (int i = 0; i < info.Length; i = i + 3)
            {
                ElementType  et;
                Coordinate[] coords;
                if (i == 0)
                {
                    et     = ElementType.EXTERIOR_RING_STRAIGHT_SEGMENTS;
                    coords = polygon.ExteriorRing.Coordinates;

                    // 1003: exterior polygon ring (must be specified in counterclockwise order)
                    if (!CGAlgorithms.IsCCW(coords))
                    {
                        coords = this.ReverseRing(coords);
                    }
                }
                else
                {
                    et     = ElementType.INTERIOR_RING_STRAIGHT_SEGMENTS;
                    coords = polygon.InteriorRings[i - 1].Coordinates;

                    // 2003: interior polygon ring (must be specified in clockwise order)
                    if (CGAlgorithms.IsCCW(coords))
                    {
                        coords = this.ReverseRing(coords);
                    }
                }
                //info.setElement(i, ordinatesOffset, et, 0);
                info[i + 0]     = ordinatesOffset;
                info[i + 1]     = et.EType();
                info[i + 2]     = et.Interpretation();
                ordinates       = this.ConvertAddCoordinates(ordinates, coords, sdoGeometry.Dimensionality, sdoGeometry.LRS > 0);
                ordinatesOffset = ordinatesPreviousOffset + ordinates.Length + 1;
            }
            sdoGeometry.addElement(info);
            sdoGeometry.AddOrdinates(ordinates);
        }
        private void AddPolygon(SdoGeometry sdoGeometry, IPolygon polygon)
        {
            int numInteriorRings = polygon.NumInteriorRings;

            double[] info            = new double[(numInteriorRings + 1) * 3];
            int      ordinatesOffset = 1;

            if (sdoGeometry.OrdinatesArray != null)
            {
                ordinatesOffset = sdoGeometry.OrdinatesArray.Length + 1;
            }
            double?[] ordinates = new double?[] { };
            for (int i = 0; i < info.Length; i++)
            {
                ElementType  et;
                Coordinate[] coords;
                if (i == 0)
                {
                    et     = ElementType.EXTERIOR_RING_STRAIGHT_SEGMENTS;
                    coords = polygon.ExteriorRing.Coordinates;
                    if (!CGAlgorithms.IsCCW(coords))
                    {
                        coords = ReverseRing(coords);
                    }
                }
                else
                {
                    et     = ElementType.INTERIOR_RING_STRAIGHT_SEGMENTS;
                    coords = polygon.InteriorRings[i - 1].Coordinates;
                    if (CGAlgorithms.IsCCW(coords))
                    {
                        coords = ReverseRing(coords);
                    }
                }
                //info.setElement(i, ordinatesOffset, et, 0);
                info[i + 0]     = ordinatesOffset;
                info[i + 1]     = (double)et;
                info[i + 2]     = 0;
                ordinates       = ConvertAddCoordinates(ordinates, coords, sdoGeometry.Dimensionality, sdoGeometry.LRS > 0);
                ordinatesOffset = ordinates.Length + 1;
            }
            sdoGeometry.addElement(info);
            sdoGeometry.AddOrdinates(ordinates);
        }