// list of points List<MapPoint> points = new List<MapPoint> { MapPointBuilderEx.CreateMapPoint(0, 0, 2, 3, 1), MapPointBuilderEx.CreateMapPoint(1, 1, 5, 6), MapPointBuilderEx.CreateMapPoint(2, 1, 6), MapPointBuilderEx.CreateMapPoint(0, 0) }; // will have attributes because it is created with convenience method Polyline polylineWithAttrs = PolylineBuilderEx.CreatePolyline(points); bool hasZ = polylineWithAttrs.HasZ; // hasZ = true bool hasM = polylineWithAttrs.HasM; // hasM = true bool hasID = polylineWithAttrs.HasID; // hasID = true // will not have attributes because it is specified as a parameter Polyline polylineWithoutAttrs = PolylineBuilderEx.CreatePolyline(points, AttributeFlags.None); hasZ = polylineWithoutAttrs.HasZ; // hasZ = false hasM = polylineWithoutAttrs.HasM; // hasM = false hasID = polylineWithoutAttrs.HasID; // hasID = false // will have attributes because it is created with convenience method Polygon polygonWithAttrs = PolygonBuilderEx.CreatePolygon(points); hasZ = polygonWithAttrs.HasZ; // hasZ = true hasM = polygonWithAttrs.HasM; // hasM = true hasID = polygonWithAttrs.HasID; // hasID = true // will not have attributes because it is specified as a parameter Polygon polygonWithoutAttrs = PolygonBuilderEx.CreatePolygon(points, AttributeFlags.None); hasZ = polygonWithoutAttrs.HasZ; // hasZ = false hasM = polygonWithoutAttrs.HasM; // hasM = false hasID = polygonWithoutAttrs.HasID; // hasID = false // will not have attributes because it is specified as a parameter PolylineBuilderEx polylineB = new PolylineBuilderEx(points, AttributeFlags.None); hasZ = polylineB.HasZ; // hasZ = false hasM = polylineB.HasM; // hasM = false hasID = polylineB.HasID; // hasID = false // will have attributes because it is passed an attributed polyline polylineB = new PolylineBuilderEx(polylineWithAttrs); hasZ = polylineB.HasZ; // hasZ = true hasM = polylineB.HasM; // hasM = true hasID = polylineB.HasID; // hasID = true // will not have attributes because it is passed a non-attributed polyline polylineB = new PolylineBuilderEx(polylineWithoutAttrs); hasZ = polylineB.HasZ; // hasZ = false hasM = polylineB.HasM; // hasM = false hasID = polylineB.HasID; // hasID = false // will not have attributes because it is specified as a parameter PolygonBuilderEx polygonB = new PolygonBuilderEx(points, AttributeFlags.None); hasZ = polygonB.HasZ; // hasZ = false hasM = polygonB.HasM; // hasM = false hasID = polygonB.HasID; // hasID = false // will have attributes because it is passed an attributed polygon polygonB = new PolygonBuilderEx(polygonWithAttrs); hasZ = polygonB.HasZ; // hasZ = true hasM = polygonB.HasM; // hasM = true hasID = polygonB.HasID; // hasID = true // will not have attributes because it is passed a non-attributed polygon polygonB = new PolygonBuilderEx(polygonWithoutAttrs); hasZ = polygonB.HasZ; // hasZ = true hasM = polygonB.HasM; // hasM = true hasID = polygonB.HasID; // hasID = true
PolylineBuilderEx polylineBuilder = new PolylineBuilderEx(polyline); polylineBuilder.HasZ = true; // The HasZ property is set to true for all the points in // polyline3D when you call ToGeometry(). Polyline polyline3D = polylineBuilder.ToGeometry(); // For this example, create Z-values. // You may want to pass them in as a parameter. int numPoints = polyline3D.PointCount; double[] zValues = new double[numPoints]; for (int i = 0; i < numPoints; i++) { zValues[i] = i % 2 == 0 ? 2 : 1; } // We need to know at which point index each part starts int partPointIndex = 0; int numParts = polyline3D.PartCount; for (int i = 0; i < numParts; i++) { var part = polyline3D.Parts[i]; int numSegments = part.Count; for (int j = 0; j < numSegments; j++) { Segment segment = part[j]; MapPointBuilderEx pointBuilder = new MapPointBuilderEx(segment.StartPoint); pointBuilder.Z = zValues[partPointIndex++]; MapPoint startPoint = pointBuilder.ToGeometry(); // Make sure that the end point of this segment is the same as the start point of the next segment pointBuilder = new MapPointBuilderEx(segment.EndPoint); pointBuilder.Z = zValues[partPointIndex]; MapPoint endPoint = pointBuilder.ToGeometry(); SegmentType segmentType = segment.SegmentType; SegmentBuilderEx segmentBuilder = null; switch (segmentType) { case SegmentType.Line: segmentBuilder = new LineBuilderEx((LineSegment)segment); break; case SegmentType.Bezier: segmentBuilder = new CubicBezierBuilderEx((CubicBezierSegment)segment); break; case SegmentType.EllipticArc: segmentBuilder = new EllipticArcBuilderEx((EllipticArcSegment)segment); break; } // Only change the start and end point which now have Z-values set. // This will preserve the curve if the segment is an EllipticArcSegment or CubicBezierSegment. segmentBuilder.StartPoint = startPoint; segmentBuilder.EndPoint = endPoint; segment = segmentBuilder.ToSegment(); polylineBuilder.ReplaceSegment(i, j, segment); } // Move point index for the next part partPointIndex++; } polyline3D = polylineBuilder.ToGeometry(); return polyline3D;
Target Platforms: Windows 11, Windows 10