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); }