IModel
Description
- Extended by
-
Model sealed
Base interface for classes that represent 3D models.
The coordinate space for untransformed top-level 3D models is defined as follows:
-
X+ : points westwards resp. sidewards.
-
Y+ : points upwards.
-
Z+ : points northwards resp. forwards.
The ground level is expected to be at Y-coordinate zero. The coordinate system for top-level IModel objects maps to standard North-East-Down (NED) coordinates as follows:
IModel | NED --------+-------- X+ axis | Y- axis / \ / \ X- axis | Y+ axis | 0 -1 0 | | 0 0 +1 | Y+ axis | Z- axis M1 = | 0 0 -1 | M2 = | -1 0 0 | Y- axis | Z+ axis | +1 0 0 | | 0 -1 0 | Z+ axis | X+ axis \ / \ / Z- axis | X- axis
The matrix M1
transforms from NED, the matrix M2
transforms to NED.
- See also
Public / Methods
BoundsWithPose
Returns the non-shared ISpatialBounds for this IModel that uses the given model pose in.
This method returns the same object as ColliderWithPose. For details on the semantic differences, please refer to Bounds and Collider.
- See also
ChildAt
Returns the index in-th child model.
The same IModel object may be a child of multiple parent IModel objects. The resulting graph of parent-child relations must not contain any cycles.
- See also
ChildTransformAt
Returns the child-to-parent transformation matrix of the index in-th child model.
The transformation matrix uses the unit of measure of the parent model (see Unit).
- See also
ColliderLoad
Initializes the Collider object from the given precomputed spatial data structures.
As an alternative to this method, the ModelFlags.ComplexGeometry flag may be used.
If the given data in is unsuitable, this method will return silently and a new IModelCollider will be computed.
- See also
ColliderWithPose
Returns the non-shared IModelCollider for this IModel that uses the given model pose in.
The returned collider will take the following into account:
-
If ModelPoseFlags.Hide is present in ModelPose.Flags1, the model collider will behave as if ModelFlags.NoSpatialQuery had been specified for the IModel.
-
The custom transformation defined via ModelPose.Transform1 is applied for children along the model hierarchy and the spatial bounds of the parent models are updated accordingly.
- See also
Copy
Creates a mutable deep copy of this model.
Modifying the returned Model will not affect this model.
PartAt
Returns the index in-th model part.
The same IModelPart object may be used by zero or more IModel objects.
PrepareLazy
Prepares lazy-loaded data for this model.
After calling this method, doing any of the following is guaranteed to not trigger any more lazy computations for this IModel and all of its descendants:
This method does not pre-load vertex / index data (see IModelGeometry) or textures (see IModelTexture) for rendering.
- IOException
-
If an I/O error has occurred while lazy-loading model data.
Simplify
Simplifies this model by applying the given actions.
Simplification is performed in-place and only modifies the model hierarchy, without loading or computing any additional model data, such as:
-
Collider, which would trigger computation of spatial acceleration data structures.
-
IModelGeometry.ReadVertices, which would read vertex data, usually involving file I/O.
-
IModelGeometry.ReadIndices, which would read index data, usually involving file I/O.
-
IModelTexture.ReadTexels, IModelTexture.ReadPixels or IModelTexture.ReadElevation, which would read texel data, usually involving file I/O.
- See also
Public / Attributes
Bounds
Returns the spatial bounds of this model, which may be shared with other model objects.
This property returns the same object as Collider. However, by using this property, the calling code indicates that it will not use the methods and properties of the ISpatialQuery and IModelCollider interfaces, which allows the implementation to defer pre-computations which would otherwise need to be performed. A ModelFormat may choose to store pre-computed spatial bounds in a model file, which will eliminate even the pre-computation for the spatial bounds.
Collider
Returns the collider object for this model, which may be shared with other model objects.
Requesting the IModelCollider object of a model by getting this property can trigger lazy computation, which in turn invokes the following methods, if necessary:
-
IModelGeometry.ReadIndices on the IModelGeometry objects referenced by IModelPart.Geometry.
-
IModelGeometry.ReadVertices on the IModelGeometry objects referenced by IModelPart.Geometry.
If only the ISpatialBounds of the model are of interest, the Bounds property should be used instead of this property. Doing so allows to return pre-computed bounds, without triggering any lazy compuation.
FadeIn
The fade-in range of this model.
When Fade.Compute returns 0
, the model will not be visible at all.
Defaults to Fade.AlwaysOne, i.e. always faded in.
FadeOut
The fade-out range of this model.
When Fade.Compute returns 1
, the model will not be visible at all.
Defaults to Fade.AlwaysZero, i.e. never faded out.
Unit
The unit of measure in which the vertex coordinates of the model parts are expressed.
Defaults to UnitOfMeasure.Metre.
Extensions
ChildFor
2 overloads
Returns the first child or descendant model of the given name (see IModel.Name).
Returns the first child or descendant model of the given name (see IModel.Name).
ChildTransformWithUnitScaleAt
Returns the child-to-parent transformation matrix of the index in-th child model.
The transformation matrix uses the unit of measure of the child model (see IModel.Unit).
- See also