Table of contents
Transformations
Download API definition:
POST https://api.bentley.com/transformations/configurations/filterbyviewdefinition

This endpoint is used to create a configuration for filtering iModel data based on a view definition or a saved view.

A View renders geometry from one or more Models of an iModel in a web browser. A View is an element of the ViewDefinition class. For more information, see Using Views in iTwin.js.

This transformation is usually leveraged to filter out unnecessary data and align an iModel to the view within a browser window.

Limitations: Saved views are capable of displaying elements while hiding their parent elements. This cannot be achieved by filtering logic because child elements cannot exist without their parent elements within an iModel. To workaround this misalignment between display and filtering logic, the transformations service does not filter out:

  • elements that are ancestors of visible child elements
  • elements that are scoping ancestors of visible elements

Such elements will remain in iModel with cleared properties, meaning that their geometries and other non mandatory properties will be deleted.

Configuration specific properties explained:

models - ids of enabled/visible models contained within a view definition.
hiddenModels - ids of disabled/hidden models contained within a view definition.
categories - ids of visible enabled/categories contained within a view definition.
hiddenCategories - ids of disabled/hidden categories contained within a view definition.
neverDrawn - element ids which should be left out of the target iModel.
alwaysDrawn - element ids which should be included in to the target iModel.
isAlwaysDrawnExclusive - boolean flag that determines whether all elements, except those defined in "alwaysDrawn", should be filtered out. The default value is false if not specified.
subCategoryOvr
    - subCategory - id of sub category 
    - invisible - geometry belonging to an invisible subCategory will be left out of target iModel
clip - data needed to create clipping. This cannot be an empty object.
    - shapes - array of shape clippings
        - points - array of number arrays describing the polygon. Each low level array contains numbers corresponding to coordinates [x, y, z]
        - trans - array of number arrays describing the transform applied to the polygon. Each low level array contains four numbers of a transform row [qx, qy, qz, ax].
        - zlow - lower bound on Z.
        - zhigh - upper bound on Z.
        - mask - `true` if this shape is a mask.
        - invisible -`true` if this shape is invisible.
    - planes - array of plane line clippings
        - invisible - `true` if this union of plane clip intersections is invisible.
        - clips - a union of plane clip set intersections
            - normal - the plane's inward normal as a number array corresponding to coordinates [x, y ,z].
            - dist - the plane's distance from the origin.
            - invisible - `true` if this plane is invisible.
            - interior - `true` if this plane is interior.
perModelCategoryVisibility - array of objects containing perModelCategoryVisibility data
    - modelId - id of model for which category override will apply.
    - categoryId - id of category for which the override will apply.
    - visible - boolean flag indicating if category is visible for the given model.
viewMode - enumerator that specifies the transformation saved view mode. It can have two values: IncludeNewContent and FilterContent.
    - IncludeNewContent includes all new content that was introduced into the iModel after the view was created.
    - FilterContent filters out all new content that was introduced into the iModel after the view was created.

All ids must be well-formed valid hexadecimal ids conforming with iTwin.js specification.

PerModelCategoryVisibility override affects geometry on all subcategories belonging to the overridden category. That is, if the category is overridden to be visible, then geometry on all subcategories of the category will be visible, regardless of any subCategory overrides.

In addition to exported data, the transformer will also push some additional metadata. This metadata contains:

  1. BisCore:RepositoryLink and BisCore:ExternalSource elements that mark the source where the data was imported from.
  2. A "Scope" BisCore:ExternalSourceAspect that contains Synchronization changeset metadata that is needed by the transformation service to process any later changes correctly.
  3. Element provenance information (BisCore:ExternalSourceAspects) for elements that do not have federation guids.

Note: Creating a configuration does not run the transformation. To run the transformation, please see transformations reference.

Authentication

Requires Authorization header with valid Bearer token for scope itwin-platform.

For more documentation on authorization and how to get access token visit OAUTH2 Authorization page.

Authorization

You must have imodels_write assigned at the target project level and imodels_read assigned at the source project level within related configuration. If permissions at the project level are not configured, then you must have same assigned at the iModel level.

Alternatively, you must be an Organization Administrator for the Organization that owns a given project the iModel belongs to.

An Organization Administrator must have at least one of the following roles assigned in User Management: Account Administrator, Co-Administrator, or CONNECT Services Administrator. For more information about User Management see Bentley Communities Licensing, Cloud, and Web Services wiki page.

Rate limits

All iTwin Platform API operations have a rate limit. For more documentation on that visit Rate limits and quotas page.

Request headers

Name
Required?
Description
Authorization
Yes

OAuth access token with itwin-platform scope

Accept
Yes

Setting to application/vnd.bentley.itwin-platform.v1+json is recommended.

Configuration data

Request body

Create filter by view definition transformation

Name
Type
Required?
Description
transformName
String
Yes

User friendly name of the transformation.

sourceProjectId
String
Yes

ProjectId of the source iModel.

sourceIModelId
String
Yes

ID of the source iModel.

targetProjectId
String
Yes

ProjectId of the target iModel.

targetIModelId
String
Yes

ID of the target iModel.

comment
String
Yes

Comment for the changeset created after transformation.

transformParameters
Yes

Filter by view definition configuration transform parameters.

Example

json
{
    "transformName": "Example name",
    "sourceProjectId": "00000000-0000-0000-0000-000000000000",
    "sourceIModelId": "00000000-0000-0000-0000-000000000000",
    "targetProjectId": "00000000-0000-0000-0000-000000000000",
    "targetIModelId": "00000000-0000-0000-0000-000000000000",
    "comment": "Example comment",
    "transformParameters": {
        "models": ["0x20000001201"],
        "categories": ["0x20000001201"],
        "neverDrawn": ["0x20000001201"],
        "alwaysDrawn": ["0x20000001201"],
        "isAlwaysDrawnExclusive": true,
        "subCategoryOvr": [{
            "invisible": true,
            "subCategory": "0x20000001201"
        }],
        "clip": {
            "shapes": [{
                "points": [
                    [0, 1, 2],
                    [2, 3, 4],
                    [3, 4, 5],
                    [4, 5, 6]
                ],
                "trans": [
                    [5, 6, 7, 8],
                    [6, 7, 8, 9],
                    [7, 8, 9, 0]
                ],
                "zlow": 1,
                "zhigh": 2,
                "mask": true,
                "invisible": false
            }],
            "planes": [{
                "invisible": false,
                "clips": [
                    [{
                        "normal": [0, 1, 2],
                        "dist": 9,
                        "invisible": false,
                        "interior": true
                    }]
                ]
            }]
        },
        "perModelCategoryVisibility": [{
            "modelId": "0x20000001202",
            "categoryId": "0x20000001203",
            "visible": true
        }]
    }
}

Response 201 Created

Returns the created configuration for filtering by a view definition transformation.

json
{
    "configuration": {
        "id": "00000000-0000-0000-0000-000000000000",
        "transformName": "Transformation name",
        "comment": "comment",
        "createdDateTime": "2021-08-02T14:51:33.6133333Z",
        "modifiedDateTime": "2021-08-02T14:52:33.6133333Z",
        "transformType": "FilterByViewDefinition",
        "transformParameters": {
            "models": ["0x20000001201"],
            "categories": ["0x20000001201"],
            "neverDrawn": ["0x20000001201"],
            "alwaysDrawn": ["0x20000001201"],
            "isAlwaysDrawnExclusive": true,
            "subCategoryOvr": [{
                "invisible": true,
                "subCategory": "0x20000001201"
            }],
            "clip": {
                "shapes": [{
                    "points": [
                        [0, 1, 2],
                        [2, 3, 4],
                        [3, 4, 5],
                        [4, 5, 6]
                    ],
                    "trans": [
                        [5, 6, 7, 8],
                        [6, 7, 8, 9],
                        [7, 8, 9, 0]
                    ],
                    "zlow": 1,
                    "zhigh": 2,
                    "mask": true,
                    "invisible": false
                }],
                "planes": [{
                    "invisible": false,
                    "clips": [
                        [{
                            "normal": [0, 1, 2],
                            "dist": 9,
                            "invisible": false,
                            "interior": true
                        }]
                    ]
                }]
            },
            "perModelCategoryVisibility": [{
                "modelId": "0x20000001202",
                "categoryId": "0x20000001203",
                "visible": true
            }]
        },
        "_links": {
            "sourceIModel": {
                "href": "https://api.bentley.com/imodels/00000000-0000-0000-0000-000000000000"
            },
            "targetIModel": {
                "href": "https://api.bentley.com/imodels/00000000-0000-0000-0000-000000000000"
            },
            "sourceProject": {
                "href": "https://api.bentley.com/itwins/00000000-0000-0000-0000-000000000000"
            },
            "targetProject": {
                "href": "https://api.bentley.com/itwins/00000000-0000-0000-0000-000000000000"
            }
        }
    }
}

Response 401 Unauthorized

This response indicates that request lacks valid authentication credentials. Access token might not been provided, issued by the wrong issuer, does not have required scopes or request headers were malformed.

json
{
    "error": {
        "code": "HeaderNotFound",
        "message": "Header Authorization was not found in the request. Access denied."
    }
}

Response 403 Forbidden

User has insufficient permissions.

json
{
    "error": {
        "code": "InsufficientPermissions",
        "message": "The user has insufficient permissions for the requested operation."
    }
}

Response 404 Not Found

This response indicates that the provided Project or iModel could not be found.

json
{
    "error": {
        "code": "IModelNotFound",
        "message": "Requested IModel is not available."
    }
}

Response 422 Unprocessable Entity

If the given data is invalid.

json
{
    "error": {
        "code": "MissingRequestBody",
        "message": "Request body was not provided."
    }
}

Response 429 Too many requests

This response indicates that the user has sent too many requests in a given amount of time.

json
{
    "error": {
        "code": "TooManyRequests",
        "message": "More requests were received than the subscription rate-limit allows."
    }
}

Response headers

Name
Description
retry-after

The number of requests exceeds the rate-limit for the client subscription.

View mode

Name
Type
Description
IncludeNewContent
String
FilterContent
String

Configuration filter by view definition

Name
Type
Description

Create filter by view definition transformation

Data needed to create a FilterByViewDefinition transformation configuration.

Name
Type
Description
transformName
String

User friendly name of the transformation.

sourceProjectId
String

ProjectId of the source iModel.

sourceIModelId
String

ID of the source iModel.

targetProjectId
String

ProjectId of the target iModel.

targetIModelId
String

ID of the target iModel.

comment
String

Comment for the changeset created after transformation.

transformParameters

Filter by view definition configuration transform parameters.

Filter by view definition configuration properties

Configuration data.

Name
Type
Description
id
String

ID of the configuration.

transformName
String

User friendly name of the transformation.

comment
String

Comment for the changeset created after transformation.

createdDateTime
Date-time

Time the configuration was created at.

modifiedDateTime
Date-time

Time the configuration was last modified at.

transformType
String

Type of the transformation.

transformParameters

Filter by view definition configuration transform parameters.

TParams_FilterByViewDefinition_ClipData

Filter by view definition properties

Name
Type
Description
models
String[]
hiddenModels
String[]
categories
String[]
hiddenCategories
String[]
neverDrawn
String[]
alwaysDrawn
String[]
isAlwaysDrawnExclusive
Boolean
viewMode

Filter by view definition per model category visibility properties

Name
Type
Description
modelId
String
categoryId
String
visible
Boolean

Filter by view definition sub category override properties

Name
Type
Description
invisible
Boolean
subCategory
String

TParams_FilterByViewDefinition_ClipData_ShapeData

Name
Type
Description
points
Array[]
trans
Array[]
zlow
Integer
zhigh
Integer
mask
Boolean
invisible
Boolean

TParams_FilterByViewDefinition_ClipData_PlaneData

Name
Type
Description
invisible
Boolean
clips
Array[]

Links

Name
Type
Description
sourceIModel

Link to a source iModel.

targetIModel

Link to a target iModel.

sourceProject

Link to a source project.

targetProject

Link to a target project.

Link

Name
Type
Description
href
String

Link to a resource.

DetailedError

Contains error information and an array of more specific errors.

Name
Type
Description
code
String

One of a server-defined set of error codes.

message
String

A human-readable representation of the error.

target
String, null

The target of the error.

details

Optional array of more specific errors.

Detailed Error Response

Gives details for an error that occurred while handling the request. Note that clients MUST NOT assume that every failed request will produce an object of this schema, or that all of the properties in the response will be non-null, as the error may have prevented this response from being constructed.

Name
Type
Description
error

Error Detailed information.

Error

Contains error information.

Name
Type
Description
code
String

One of a server-defined set of error codes.

message
String

A human-readable representation of the error.

target
String, null

The target of the error.

Error Response

Gives details for an error that occurred while handling the request. Note that clients MUST NOT assume that every failed request will produce an object of this schema, or that all of the properties in the response will be non-null, as the error may have prevented this response from being constructed.

Name
Type
Description
error

Error information.