ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Geometry Namespace / Multipatch Class / GetMaterialTextureBytesPerPixel Method
The index of the material. Must be greater than or equal to zero and less than MaterialCount. Get the index for a patch by calling GetPatchMaterialIndex.
Example

In This Topic
    GetMaterialTextureBytesPerPixel Method
    In This Topic
    Gets the number of bytes per pixel of the texture contained in the specified material.
    Syntax
    public int GetMaterialTextureBytesPerPixel( 
       int materialIndex
    )
    Public Function GetMaterialTextureBytesPerPixel( _
       ByVal materialIndex As Integer _
    ) As Integer

    Parameters

    materialIndex
    The index of the material. Must be greater than or equal to zero and less than MaterialCount. Get the index for a patch by calling GetPatchMaterialIndex.

    Return Value

    The number of bytes per pixel of the texture contained in the material.
    Exceptions
    ExceptionDescription
    The material index must be >= 0.
    The material index must be less than the number of materials in the multipatch.
    Remarks
    The number of bytes per pixel signifies how many bands exist in the material. The minimum value of the property is 1 and the maximum is 4. The fourth channel is usually the alpha channel used for material pixel transparency, for instance, the 'A' in 'RGBA'.
    Example
    Multipatch Properties
    // standard geometry properties
    bool hasZ = multipatch.HasZ;
    bool hasM = multipatch.HasM;
    bool hasID = multipatch.HasID;
    bool isEmpty = multipatch.IsEmpty;
    var sr = multipatch.SpatialReference;
    
    // number of patches (parts)
    int patchCount = multiPatch.PartCount;
    // number of points
    int pointCount = multiPatch.PointCount;
    
    // retrieve the points as MapPoints
    ReadOnlyPointCollection points = multipatch.Points;
    // or as 3D Coordinates
    IReadOnlyList<Coordinate3D> coordinates = multipatch.Copy3DCoordinatesToList();
    
    
    // multipatch materials
    bool hasMaterials = multiPatch.HasMaterials;
    int materialCount = multiPatch.MaterialCount;
    
    
    // multipatch textures
    bool hasTextures = multiPatch.HasTextures;
    int textureVertexCount = multiPatch.TextureVertexCount;
    
    // normals
    bool hasNormals = multiPatch.HasNormals;
    
    
    // properties for an individual patch (if multipatch.PartCount > 0)
    int patchPriority = multiPatch.GetPatchPriority(patchIndex);
    PatchType patchType = multiPatch.GetPatchType(patchIndex);
    
    // patch points
    int patchPointCount = multiPatch.GetPatchPointCount(patchIndex);
    int pointStartIndex = multiPatch.GetPatchStartPointIndex(patchIndex);
    // the patch Points are then the points in multipatch.Points from pointStartIndex to pointStartIndex + patchPointCount 
    
    // if the multipatch has materials 
    if (hasMaterials)
    {
      // does the patch have a material?  
      //   materialIndex = -1 if the patch does not have a material; 
      //   0 <= materialIndex < materialCount if the patch does have materials
      int materialIndex = multipatch.GetPatchMaterialIndex(patchIndex);
    
    
      // properties for an individual material (if multipatch.MaterialCount > 0)
      var color = multipatch.GetMaterialColor(materialIndex);
      var edgeColor = multipatch.GetMaterialEdgeColor(materialIndex);
      var edgeWidth = multipatch.GetMaterialEdgeWidth(materialIndex);
      var shiness = multipatch.GetMaterialShininess(materialIndex);
      var percent = multipatch.GetMaterialTransparencyPercent(materialIndex);
      var cullBackFace = multipatch.IsMaterialCullBackFace(materialIndex);
    
      // texture properties
      bool isTextured = multipatch.IsMaterialTextured(materialIndex);
      if (isTextured)
      {
        int columnCount = multipatch.GetMaterialTextureColumnCount(materialIndex);
        int rowCount = multipatch.GetMaterialTextureRowCount(materialIndex);
        int bpp = multipatch.GetMaterialTextureBytesPerPixel(materialIndex);
        TextureCompressionType compressionType = multipatch.GetMaterialTextureCompressionType(materialIndex);
        var texture = multipatch.GetMaterialTexture(materialIndex);
      }
    }
    
    // texture coordinates (if multipatch.HasTextures = true)
    if (hasTextures)
    {
      int numPatchTexturePoints = multiPatch.GetPatchTextureVertexCount(patchIndex);
      var coordinate2D = multiPatch.GetPatchTextureCoordinate(patchIndex, 0);
    
      ICollection<Coordinate2D> textureCoordinates = new List<Coordinate2D>(numPatchTexturePoints);
      multiPatch.GetPatchTextureCoordinates(patchIndex, ref textureCoordinates);
    }
    
    
    // patch normals (if multipatch.HasNormals = true)
    if (hasNormals)
    {
      //  number of normal coordinates = multipatch.GetPatchPointCount(patchIndex)
      Coordinate3D patchNormal = multipatch.GetPatchNormal(patchIndex, 0);
      ICollection<Coordinate3D> normalCoordinates = new List<Coordinate3D>(patchPointCount);
      multipatch.GetPatchNormals(patchIndex, ref normalCoordinates);
    }
    
    
    Get the material properties of a multipatch
    /// <summary>
    /// This method gets several properties of a material in a multipatch.
    /// </summary>
    /// <param name="multipatch">The input multipatch.</param>
    /// <param name="patchIndex">The index of the patch (part) from which to get the material properties.</param>
    public void GetMaterialProperties(Multipatch multipatch, int patchIndex)
    {
      if (multipatch.HasMaterials)
      {
        // Get the material index for the specified patch.
        int materialIndex = multipatch.GetPatchMaterialIndex(patchIndex);
    
        System.Windows.Media.Color color = multipatch.GetMaterialColor(materialIndex);
        int tranparencyPercent = multipatch.GetMaterialTransparencyPercent(materialIndex);
        bool isBackCulled = multipatch.IsMaterialCullBackFace(materialIndex);
    
        if (multipatch.IsMaterialTextured(materialIndex))
        {
          int bpp = multipatch.GetMaterialTextureBytesPerPixel(materialIndex);
          int columnCount = multipatch.GetMaterialTextureColumnCount(materialIndex);
          int rowCount = multipatch.GetMaterialTextureRowCount(materialIndex);
        }
      }
    }
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also