{
  "title": "PointCloud Bitfield Filter",
  "type": "object",
  "$schema": "http://json-schema.org/draft-04/schema",
  "description": "Filters points based on the value of the specified bitfield attribute.",
  "properties": {
    "field": {
      "type": "string",
      "description": "The name of the field that is used for the filter."
    },
    "requiredClearBits": {
      "type": "array",
      "description": "List ALL bit numbers that must cleared (=0) for the point to be kept. bit 0 is LSB.",
      "items": {
        "type": "number"
      }
    },
    "requiredSetBits": {
      "type": "array",
      "description": " List ALL bit numbers that must set (=1) for the point to be kept. bit 0 is LSB.",
      "items": {
        "type": "number"
      }
    },
    "type": {
      "type": "string",
      "enum": [
        "pointCloudBitfieldFilter"
      ]
    }
  },
  "anyOf": [
    {
      "required": [
        "requiredClearBits"
      ]
    },
    {
      "required": [
        "requiredSetBits"
      ]
    }
  ],
  "required": [
    "field",
    "type"
  ],
  "additionalProperties": false,
  "esriDocumentation": {
    "examples": [
      {
        "title": "PointCloud Bitfield Filter",
        "description": "",
        "code": {
          "filters": [
            {
              "type": "pointCloudBitfieldFilter",
              "field": "USAGE",
              "requiredClearBits": [
                0
              ],
              "requiredSetBits": [
                2,
                3
              ]
            }
          ]
        }
      }
    ]
  }
}
