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); }
private void AddPolygon(SdoGeometry sdoGeometry, IPolygon polygon, int dimention, int lrsPos) { int numInteriorRings = polygon.NumInteriorRings; int[] elements = new int[(numInteriorRings + 1) * ElementTupleSize]; int ordinatesOffset = 1; ICoordinate[] coords; if (sdoGeometry.OrdinatesArray != null && sdoGeometry.OrdinatesArray.Length > 0) { ordinatesOffset = sdoGeometry.OrdinatesArray.Length + 1; } double[] ordinates = new double[] { }; //addExterior elements[0] = ordinatesOffset; elements[1] = (int)SdoGeometryTypes.ETYPE_SIMPLE.POLYGON_EXTERIOR; elements[2] = 1; coords = polygon.ExteriorRing.Coordinates; if (!CGAlgorithms.IsCCW(coords)) { coords = ReverseRing(coords); } ordinates = AppendCoordinates(ordinates, ConvertCoordinates(coords, dimention, HasLRS(lrsPos))); ordinatesOffset += ordinates.Length; //add holes for (int i = 0; i < numInteriorRings; i++) { coords = polygon.InteriorRings[i].Coordinates; if (CGAlgorithms.IsCCW(coords)) { coords = ReverseRing(coords); } elements[(i + 1) * ElementTupleSize + 0] = ordinatesOffset; elements[(i + 1) * ElementTupleSize + 1] = (int)SdoGeometryTypes.ETYPE_SIMPLE.POLYGON_INTERIOR; elements[(i + 1) * ElementTupleSize + 2] = 1; ordinates = AppendCoordinates(ordinates, ConvertCoordinates(coords, dimention, HasLRS(lrsPos))); ordinatesOffset = ordinates.Length + 1; } sdoGeometry.AddElement(elements); sdoGeometry.AddOrdinates(ordinates); }