IMeshEx(64) Interface
- GetVertex
- GetSimplex
- GetVertexPosition
- GetSimplexPosition
- Upgrade
- IsUpgraded
- Downgrade
- IsClosedSurface
- Extract
- Extract2
- Merge
- SplitLinkedComponents
- Refine
- SmoothLaplacian
This interface gives access to interfaces implemented by individual elements of
the mesh, which give full control of the element parameters and structure.
IMeshEx can be queried from IMesh interface.
See also Morph sample, IMesh,
IVertex, ISimplex
Interface List
HRESULT GetVertex(POSN vertex, IVertex** iVertex )
Parameters
vertex - [in]
position of the vertex in vertex
list of the mesh.
iVertex - [out, retval] - Returned reference to IVertex
interface, implemented by the vertex.
Returns
- S_OK in case of
success.
- Remarks:
Retrieves reference to IVertex interface,
implemented by the vertex identified by its position
in vertex
list of the mesh.
HRESULT GetSimplex(POSN simplex, ISimplex** iSimplex )
Parameters
simplex - [in]
position of the simplex in the simplex
list of the mesh.
iSimplex - [out, retval] - Returned reference to ISimplex
interface, implemented by the simplex.
Return Values
- S_OK in case of
success.
-
- Remarks:
Retrieves reference to ISimplex
interface,
implemented by the vertex identified by its position
in simplex list of the mesh.
HRESULT GetVertexPosition(IVertex* iVertex, POSN* position)
Parameters
iVertex - [in] - Reference to IVertex
interface, implemented by the vertex.
position - [out, retval] - Returned
position of the vertex in the vertex
list of the mesh.
-
- Remarks:
Retrieves position of a vertex in vertex list of the mesh.
HRESULT GetSimplexPosition(ISimplex* simplex, POSN* position)
Parameters
simplex - [in] - Reference to ISimplex
interface, implemented by the simplex.
position - [out, retval] - Returned
position of the simplex in the simplex
list of the mesh.
-
- Remarks:
Retrieves position of a simplex in simplex list of the mesh.
HRESULT Upgrade()
-
- Remarks:
Generates incidence information which allows traversing from a simplex or vertex
to its adjacent simplex, vertex or edge elements. This operation is relatively
expensive computationally and consumers significant amount of additional memory
for large meshes. A mesh must be in upgraded state to be able to obtain
ISimplexEx_KC,
IVertexEx_KC and
IEdge_KC interfaces. It is recommended to call
the Dongrade() method below once the incidence information is no longer needed.
It is not an error to call this method in already upgraded state, in which case
the method exits without repeating the operation.
HRESULT IsUpgraded(VARIANT_BOOL* upgraded)
ParaParameters
upgraded - [out, retval] - Returns the current upgrade
state of the mesh. See remarks for the Upgrade methog above.
HRESULT Downgrade()
-
- Remarks:
Cleares all incidence information and releases all related resources. See remarks
for the Upgrade methog above.
It is not an error to call this method in already downgraded state, in which case
the method exits without any action.
HRESULT IsClosedSurface(VARIANT_BOOL* closed)
Parameters
closed - [out, retval] - True if the mesh forms a
closed surface and represents a solid object.
HRESULT Extract(IObjectOriented* proximity, int elements, VARIANT_BOOL move, VARIANT_BOOL replicate, IMesh* iMeshExtracted,
IRefMap_KC** map)
Parameters
proximity - [in] - Sphere or box which defines the area
to be extracted from this mesh
elements - [in] - Flags. Must be 4 in this
version. Extracts flagged elements 1<<dim, where dim is 0 for verticies, 1 for
segment and 2 for simplexes
move - [in] - If true the elemets inside proximity
are removed from this mesh
replicate - [in] - If false the extracted elements will
be shared by both meshes. True is the recommended value if move
is false
iMeshExtracted - [in] - The mesh, which will contain the
extracted elements. Must be supplied by the caller. See remarks
map - [in] - Ignored in this release. Has to be null
-
- Remarks:
Extracts elements of this mesh (The mesh which implements this interface) which
are located inside proximity into iMeshExtracted
This method is indended for reducing large meshes for analysis of some problems.
For performance only simplexes which have at least one vertex inside the
proximity is extracted. This mean that some simplexes near the surface of
proximity may not be included even if its internal part intersects with the
proximilty. An extracted simplex is added whole to iMeshExtracted
without clipping. Contact us to request a different
algorithm
iMeshExtracted must be supplied by the caller. It can be
either created new (with a IDIObjGenerator.Create*(EObjectType.eObjTypeMesh)) or
obtained in other way (queried from ISection of a mesh entity, etc)
The extracted elements are added to iMeshExtracted
without clearing its previous content. So iMeshExtracted
can be used to collect elements form several meshes
The map parameter is supposed to contain a map of list of simplexes
of this and of iMeshExtracted. For a position of a
simplex in this mesh the map will be able to return its position (or position of
its replica) in the extracted mesh. This feature is not implemented in this
release. map is assumed to be null. Contact us to request this
functionality
This mesh is assumed to be constructed in global axes
See also Mesh Ops sample
HRESULT Extract2(IFrame* frameOfThis, IObjectOriented* proximity, int elements, VARIANT_BOOL move, VARIANT_BOOL replicate, IMeshT* iMeshExtracted, IRefMap_KC** map)
Parameters
frameOfThis - [in] - Frame, where this mesh is relative to
proximity - [in] - Sphere or box which defines the area
to be extracted from this mesh
elements - [in] - Flags. Must be 4 in this
version. Extracts flagged elements 1<<dim, where dim is 0 for verticies, 1 for
segment and 2 for simplexes
move - [in] - If true the elemets inside proximity
are removed from this mesh
replicate - [in] - If false the extracted elements will
be shared by both meshes. True is the recommended value if move
is false
iMeshExtracted - [in] - The mesh, which will contain the
extracted elements. Must be supplied by the caller. See remarks
map - [in] - Ignored in this release. Has to be null
-
- Remarks:
frameOfThis defines the axes coordinates of all elements are relative to.
When this mesh is mesh of a entity (queried form ISection), frame of the
entity is the recommended value for the parameter. All other parameters and behaviour
are
analogous to the Extract() method above
See also Mesh Ops sample
HRESULT Merge(IMesh* iMesh, int elements, VARIANT_BOOL move, VARIANT_BOOL replicate, IRefMap_KC** map)
Parameters
iMesh - [in] - The mesh to be merged into this
elements - [in] - Flags. Bit 0 - verticies, bit 1
- segments, bit 2 - simplexes. Value of 4 is the most common case
move - [in] - If true the elemets inside proximity
are removed from iMesh
replicate - [in] - If false the extracted elements will
be shared by both meshes. True is the recommended value if move
is false
map - [in] - Ignored in this release. Has to be null
- Remarks:
Adds all elements of the specified type from iMesh into this mesh (The mesh which
implements this interface)
The map parameter is supposed to contain a map of list of simplexes
of this and of iMesh. For a position of a
simplex in this mesh the map will be able to return its position (or position of
its replica) in iMesh. This feature is not implemented in this
release. map is assumed to be null. Contact us to request this
functionality
This method requires a call to IModel.Update() or DG Kernel.UpdateSurface() for changes to appear in 3D view
HRESULT SplitLinkedComponents(IArray2** components,
IRefMap_KC** map,
VARIANT_BOOL* found)
Parameters
components - [out] - If not null before the call, the
variable will contain returned components of the mesh. Elements have type IMesh*
map - [out] - null or a reference to variable which will contain map of new component to the original mesh
found - [out, retval] - The returned value. False is the mesh
consists of a single linked piece or is empty
- Remarks:
If there any disjoined pieces in the mesh where this interface was queried form
the method will create a new set of meshes which are clones of each linked
piece. The components array will contain at least one
element of type IMesh* even if this mesh (from which this interface was queried
from) is empty
If map is not null after the call it will contain a map of simplexes
of this and all of the components: If pos is a position of a
simplex in a component from the components array,
map.Lookup(pos, value) will return position of the correspondent
simplex in the original (this) mesh (simplex which was cloned to create the
simplex at pos)
Notice that the map, if requested, allocates significant amount of memory
See the Tools menu handler in Data Flow sample (C++ and C#) for an example
HRESULT Refine(EMeshRefineType type)
Makes the mesh more smooth and dense. See MeshOps sample
HRESULT SmoothLaplacian(int steps)
Applies Laplacian Smoothing steps times to the mesh.
See MeshOps sample
|