ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Core.Geometry Namespace / MultipartBuilderEx Class / HasZ Property
Example

In This Topic
    HasZ Property (MultipartBuilderEx)
    In This Topic
    Gets or sets the HasZ flag which indicates whether the geometry contains Zs.
    Syntax
    Public Overrides Property HasZ As Boolean
    public override bool HasZ {get; set;}
    Example
    Builder Properties
    {
      // list of points
      List<MapPoint> pointsForBuilder = 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(pointsForBuilder);
      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(pointsForBuilder, 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(pointsForBuilder);
      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(pointsForBuilder, 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(pointsForBuilder, 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(pointsForBuilder, 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
    }
    Create 3D Polyline and set Z-values while preserving curve segments
    {
      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 numSegmentsInPolyline3D = part.Count;
    
        for (int j = 0; j < numSegmentsInPolyline3D; 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();
    }
    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.0 or higher.
    See Also