3ds Max C++ API Reference
Loading...
Searching...
No Matches
MNMeshUtilities Class Reference

Provides a number of utility functions for working with MNMesh. More...

#include <mnmesh.h>

+ Inheritance diagram for MNMeshUtilities:

Public Member Functions

 MNMeshUtilities (MNMesh *mesh)
 Constructor.
 
DllExport bool GetBorderFromEdge (int edge, Tab< int > &border)
 Given a one-sided edge in the MNMesh, retrieves the border loop which that edge forms with other one-sided edges.
 
DllExport bool AutoSmooth (float threshold, DWORD faceFlag)
 Applies new smoothing groups to the MNMesh, smoothing between any faces that share an edge with an edge angle less than "threshold".
 
DllExport bool AutoSmoothIsland (float threshold, DWORD faceFlag)
 Applies new smoothing groups to the MNMesh, smoothing between any faces that share an edge with an edge angle less than "threshold", but unsmooths any edges on the border of the flagged face group.
 
DllExport bool FlipHingeAngle (Point3 &origin, Point3 &axis, int hingeEdge, DWORD faceFlag)
 Indicates whether the hinge angle should be multiplied by -1, based on the local topology and geometry of the mesh.
 
DllExport bool HingeFromEdge (Point3 &origin, Point3 &axis, float angle, int segments, MNFaceClusters &fclust, int clusterID)
 New version of old "MNMesh::LiftFaceClusterFromEdge" method which doesn't require a hinge edge.
 
DllExport bool MakeFlaggedPlanar (int selLev, DWORD flag, float *softSel, Point3 *delta=NULL)
 Determines an average plane of the flagged subobjects, and moves vertices toward it according to their soft selection value.
 
DllExport bool MoveVertsToPlane (Point3 &norm, float offset, float *softSel, Point3 *delta=NULL)
 Moves soft-selected vertices toward the plane given according to their soft selection value, or produces an array of offsets which would do so.
 
DllExport bool CollapseEdges (DWORD edgeFlag)
 Edge-based collapse function - all edges with the given flag will be collapsed, which means their vertex endpoints will be joined into a single vertex.
 
DllExport bool CollapseEdges (DWORD edgeFlag, Tab< int > &pointDest)
 Edge-based collapse function - all edges with the given flag will be collapsed, which means their vertex endpoints will be joined into a single vertex.
 
DllExport void ConstrainDeltaToEdges (Tab< Point3 > *deltaIn, Tab< Point3 > *deltaOut)
 Constrains the vectors given for each vertex so that they are limited to travel along a neighboring edge.
 
DllExport void ConstrainDeltaToFaces (Tab< Point3 > *deltaIn, Tab< Point3 > *deltaOut)
 Constrains the vectors given for each vertex so that they are limited to travel along a neighboring face.
 
DllExport bool ExtrudeOpenEdges (DWORD edgeFlag, bool clearFlagOnOldEdges, bool useTracking)
 Extrude method which creates new faces along open edges.
 
DllExport bool BridgeBorders (int edge1, int twist1, int edge2, int twist2, float smoothThresh, int segments, float taper, float bias)
 Creates a bridge between two border loops.
 
DllExport bool BridgePolygons (int face1, int twist1, int face2, int twist2, float smoothThresh, int segments, float taper, float bias)
 Creates a bridge between two polygons.
 
DllExport bool BridgePolygonClusters (DWORD polyFlag, float smoothThresh, int segments, float taper, float bias, int twist1, int twist2)
 Creates bridges between polygon clusters.
 
DllExport bool BridgePolygonsClusters_2015 (DWORD polyFlag, float smoothThresh, int segments, float taper, float bias, int twist1, int twist2)
 Identical to BridgePolygonsClusters but should only be used to load parametric bridges from 2015 and lower.
 
DllExport bool BridgeSelectedBorders (DWORD edgeFlag, float smoothThresh, int segments, float taper, float bias, int twist1, int twist2)
 Creates bridges between flagged borders.
 
DllExport int FindDefaultBridgeTwist (int face1, int face2)
 Returns a good default twist for face2, when bridging between face1 and face2 with no twist for face1.
 
DllExport bool TurnDiagonal (int face, int diagonal)
 "Turns" the diagonal by removing it and creating a new one going across it.
 
DllExport bool Relax (DWORD vertexFlag, float *softSel, float relaxAmount, int relaxIters, bool holdBoundaryPts, bool holdOuterPts, Point3 *delta=NULL)
 This is a new version of the MNMesh::Relax method, which is designed to move all vertices a little closer to their neighbors.
 
DllExport int SelectPolygonsByAngle (int startPolygon, float angle, BitArray &polySel)
 Starting with the polygon given, this algorithm creates a BitArray selection of all polygons it can get to without crossing any edges whose angle is greater than the angle given.
 
DllExport void CutPrepare ()
 This method is used at the beginning of a series of cuts.
 
DllExport void CutCleanup ()
 This method is used after a series of cuts, to "clean up" any extra edges which are necessary to have while cutting, but which aren't what the user actually intended to create.
 

Additional Inherited Members

- Static Public Member Functions inherited from MaxHeapOperators
static UtilExport voidoperator new (size_t size)
 Standard new operator used to allocate objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e)
 Standard new operator used to allocate objects if there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new (size_t size, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate objects that takes the type of memory, filename and line number where the new was called If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new (size_t size, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new[] (size_t size)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new[] (size_t size, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new[] (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate arrays of objects.
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned.
 
static UtilExport voidoperator new[] (size_t size, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown.
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned.
 
static UtilExport void operator delete (void *ptr)
 Standard delete operator used to deallocate an object If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an object If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an object that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete (void *ptr, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete[] (void *ptr)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete[] (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen.
 
static UtilExport void operator delete[] (void *ptr, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown.
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown.
 
static UtilExport voidoperator new (size_t size, void *placement_ptr)
 Placement new operator.
 
static UtilExport void operator delete (void *ptr, void *placement_ptr)
 Placement delete operator.
 
static UtilExport voidaligned_malloc (size_t size, size_t alignment)
 Allocates memory on a specified alignment boundary.
 
static UtilExport voidaligned_realloc (void *ptr, size_t size, size_t alignment)
 Reallocates memory on a specified alignment boundary.
 
static UtilExport void aligned_free (void *ptr)
 Frees a block of memory that was allocated with aligned_malloc/aligned_realloc.
 

Detailed Description

Provides a number of utility functions for working with MNMesh.

Constructor & Destructor Documentation

◆ MNMeshUtilities()

MNMeshUtilities ( MNMesh mesh)
inline

Constructor.

Takes MNMesh pointer, which is the mesh that is operated upon n all MNMeshUtilities methods.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

6661{ mpMesh = mesh; }

Member Function Documentation

◆ GetBorderFromEdge()

DllExport bool GetBorderFromEdge ( int  edge,
Tab< int > &  border 
)

Given a one-sided edge in the MNMesh, retrieves the border loop which that edge forms with other one-sided edges.

The border loop produced will be in sequential order going CCW around the hole, starting with the edge given.

Parameters
edgeThe edge to start from. (If it is not a border edge, the "border" table will be left empty.
borderA reference to a table into which the border loop edge indices can be written.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ AutoSmooth()

DllExport bool AutoSmooth ( float  threshold,
DWORD  faceFlag 
)

Applies new smoothing groups to the MNMesh, smoothing between any faces that share an edge with an edge angle less than "threshold".

Parameters
thresholdThe threshold angle for smoothing across edges, in radians.
faceFlagIf nonzero, this indicates that only faces with this flag set should have their smoothing groups affected. (If faceFlag has multiple bits set, any flag matches are considered a match.)
Remarks
Similar to MNMesh::AutoSmooth, but allows the use of any flag or flags, not just MN_SEL


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ AutoSmoothIsland()

DllExport bool AutoSmoothIsland ( float  threshold,
DWORD  faceFlag 
)

Applies new smoothing groups to the MNMesh, smoothing between any faces that share an edge with an edge angle less than "threshold", but unsmooths any edges on the border of the flagged face group.

If faceFlag is zero, this works just like AutoSmooth – no border to leave unsmoothed.

Parameters
thresholdThe threshold angle for smoothing across edges, in radians.
faceFlagIf nonzero, this indicates that only faces with this flag set should have their smoothing groups affected. (If faceFlag has multiple bits set, any flag matches are considered a match.)
Remarks
Similar to MNMesh::AutoSmooth, but allows the use of any flag or flags, not just MN_SEL


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ FlipHingeAngle()

DllExport bool FlipHingeAngle ( Point3 origin,
Point3 axis,
int  hingeEdge,
DWORD  faceFlag 
)

Indicates whether the hinge angle should be multiplied by -1, based on the local topology and geometry of the mesh.

When users pick hinge edges, they may pick edges oriented in either direction, with the result that rotating around the edge by the hinge angle can produce inconsistent results. This method analyses the hinge orientation and indicates whether a correction should occur.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ HingeFromEdge()

DllExport bool HingeFromEdge ( Point3 origin,
Point3 axis,
float  angle,
int  segments,
MNFaceClusters fclust,
int  clusterID 
)

New version of old "MNMesh::LiftFaceClusterFromEdge" method which doesn't require a hinge edge.

Does a "hinged extrusion", where selected face clusters are rotated around a hinge axis, and new faces are created connecting the selected faces to the unselected ones.

Parameters
originThe origin point for the hinge
axisThe axis direction for the hinge
angleThe amount to rotate, in radians
segmentsThe number of segments for the sides of the extrusion
fclustThe current set of Face Clusters
clusterIDThe ID of the cluster to rotate
Remarks
This extrusion has a slightly different topology from a regular extrusion, in that no new faces are created for edges between selected and unselected faces that lie exactly along the hinge.

br>Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ MakeFlaggedPlanar()

DllExport bool MakeFlaggedPlanar ( int  selLev,
DWORD  flag,
float *  softSel,
Point3 delta = NULL 
)

Determines an average plane of the flagged subobjects, and moves vertices toward it according to their soft selection value.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ MoveVertsToPlane()

DllExport bool MoveVertsToPlane ( Point3 norm,
float  offset,
float *  softSel,
Point3 delta = NULL 
)

Moves soft-selected vertices toward the plane given according to their soft selection value, or produces an array of offsets which would do so.

(Similar to MNMesh::MoveVertsToPlane, but with soft selection support.)


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ CollapseEdges() [1/2]

DllExport bool CollapseEdges ( DWORD  edgeFlag)

Edge-based collapse function - all edges with the given flag will be collapsed, which means their vertex endpoints will be joined into a single vertex.

Parameters
edgeFlagThe edge flag that marks the edges to be collapsed.
Returns
True if any edges were actually collapsed, else false.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ CollapseEdges() [2/2]

DllExport bool CollapseEdges ( DWORD  edgeFlag,
Tab< int > &  pointDest 
)

Edge-based collapse function - all edges with the given flag will be collapsed, which means their vertex endpoints will be joined into a single vertex.

The pointDest Tab is populated with information about which vertices were collapsed and which vertices they were collapsed onto. If pointDest[i] >= 0, vertex i was collapsed onto vertex pointDest[i]. If pointDest[i] == -1, vertex i was not collapsed. If pointDest[i] < -1, (-pointDest[i]) vertices were collapsed onto vertex i (including itself).

Parameters
edgeFlagThe edge flag that marks the edges to be collapsed.
pointDestThe Tab in which to return the collapse information.
Returns
True if any edges were actually collapsed, else false.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ ConstrainDeltaToEdges()

DllExport void ConstrainDeltaToEdges ( Tab< Point3 > *  deltaIn,
Tab< Point3 > *  deltaOut 
)

Constrains the vectors given for each vertex so that they are limited to travel along a neighboring edge.

It's acceptable for deltaIn to be equal to deltaOut.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ ConstrainDeltaToFaces()

DllExport void ConstrainDeltaToFaces ( Tab< Point3 > *  deltaIn,
Tab< Point3 > *  deltaOut 
)

Constrains the vectors given for each vertex so that they are limited to travel along a neighboring face.

It's acceptable for deltaIn to be equal to deltaOut.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ ExtrudeOpenEdges()

DllExport bool ExtrudeOpenEdges ( DWORD  edgeFlag,
bool  clearFlagOnOldEdges,
bool  useTracking 
)

Extrude method which creates new faces along open edges.

Parameters
edgeFlagThe edges which should be extruded. (Non-open edges that have this flag set always have it cleared.)
clearFlagOnOldEdgesIf true, the "edgeFlag" is cleared on the edges used as the base of the extrusion.
useTrackingIf true, the new edges at the "top" of the extrusion have their "track" data member set to the edge at the base of their extrusion.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ BridgeBorders()

DllExport bool BridgeBorders ( int  edge1,
int  twist1,
int  edge2,
int  twist2,
float  smoothThresh,
int  segments,
float  taper,
float  bias 
)

Creates a bridge between two border loops.

Parameters
edge1An edge on the first border loop
twist1The twist for the first border loop. (The edge which is "twist1" edges around the loop from "edge1" will be bridged to the edge which is "twist2" edges around the loop from "edge2".
edge2An edge on the second border loop
twist2The twist for the second border loop. (The edge which is "twist1" edges around the loop from "edge1" will be bridged to the edge which is "twist2" edges around the loop from "edge2".
smoothThreshThe threshold angle, in radians, for smoothing between successive columns of the bridge.
segmentsThe number of segments for the bridge
taperThe amount that the bridge should taper in
biasThe bias for the location of the most tapered-in spot on the bridge. Range: -100 to 100, with 0 indicating that the taper should fall naturally in the middle of the bridge.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ BridgePolygons()

DllExport bool BridgePolygons ( int  face1,
int  twist1,
int  face2,
int  twist2,
float  smoothThresh,
int  segments,
float  taper,
float  bias 
)

Creates a bridge between two polygons.

Parameters
face1The first polygon
twist1The twist for the first polygon. (The twist1'th edge of polygon face1 will be bridged to the twist2'th edge on polygon face2.)
face2The second polygon
twist2The twist for the second polygon. (The twist1'th edge of polygon face1 will be bridged to the twist2'th edge on polygon face2.)
smoothThreshThe threshold angle, in radians, for smoothing between successive columns of the bridge.
segmentsThe number of segments for the bridge
taperThe amount that the bridge should taper in
biasThe bias for the location of the most tapered-in spot on the bridge. Range: -100 to 100, with 0 indicating that the taper should fall naturally in the middle of the bridge.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ BridgePolygonClusters()

DllExport bool BridgePolygonClusters ( DWORD  polyFlag,
float  smoothThresh,
int  segments,
float  taper,
float  bias,
int  twist1,
int  twist2 
)

Creates bridges between polygon clusters.

Parameters
polyFlagThe flag indicating faces in the clusters.
smoothThreshThe threshold angle, in radians, for smoothing between successive columns of the bridge.
segmentsThe number of segments for the bridge
taperThe amount that the bridge should taper in
biasThe bias for the location of the most tapered-in spot on the bridge. Range: -100 to 100, with 0 indicating that the taper should fall naturally in the middle of the bridge.
twist1The twist for each "start" cluster.
twist2The twist for each "end" cluster.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ BridgePolygonsClusters_2015()

DllExport bool BridgePolygonsClusters_2015 ( DWORD  polyFlag,
float  smoothThresh,
int  segments,
float  taper,
float  bias,
int  twist1,
int  twist2 
)

Identical to BridgePolygonsClusters but should only be used to load parametric bridges from 2015 and lower.

◆ BridgeSelectedBorders()

DllExport bool BridgeSelectedBorders ( DWORD  edgeFlag,
float  smoothThresh,
int  segments,
float  taper,
float  bias,
int  twist1,
int  twist2 
)

Creates bridges between flagged borders.

Parameters
edgeFlagAny borders with at least one edge that has this flag set will be considered for bridging. (Only borders that match up in pairs will be bridged, of course.)
smoothThreshThe threshold angle, in radians, for smoothing between successive columns of the bridge.
segmentsThe number of segments for the bridge
taperThe amount that the bridge should taper in
biasThe bias for the location of the most tapered-in spot on the bridge. Range: -100 to 100, with 0 indicating that the taper should fall naturally in the middle of the bridge.
twist1The twist for each "start" cluster.
twist2The twist for each "end" cluster.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ FindDefaultBridgeTwist()

DllExport int FindDefaultBridgeTwist ( int  face1,
int  face2 
)

Returns a good default twist for face2, when bridging between face1 and face2 with no twist for face1.

Default twist is based on an analysis of local geometry.

Parameters
face1The first polygon
face2The second polygon


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ TurnDiagonal()

DllExport bool TurnDiagonal ( int  face,
int  diagonal 
)

"Turns" the diagonal by removing it and creating a new one going across it.

This is like the traditional "Turn Edge" in Editable Mesh. (Any "diagonal" in a polygon separates two triangles. If you remove that diagonal, you're left with a quad; this algorithm replaces the original diagonal with the diagonal you'd get by connecting the other two vertices of that quad.)

Parameters
faceThe polygon face in which to turn the diagonal
diagonalThe index of the diagonal to turn. A polygon of degree "deg" has (deg-3) diagonals.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ Relax()

DllExport bool Relax ( DWORD  vertexFlag,
float *  softSel,
float  relaxAmount,
int  relaxIters,
bool  holdBoundaryPts,
bool  holdOuterPts,
Point3 delta = NULL 
)

This is a new version of the MNMesh::Relax method, which is designed to move all vertices a little closer to their neighbors.

Neighbors are defined as vertices that share an edge. This variation on the Relax method also accepts a soft selection.

Parameters
vertexFlagIf "softSel" is NULL, only vertices with this flag set are relaxed.
softSelThis is an optional soft selection. It may be NULL. If not, it should point to an array of MNMesh::numv floats representing the selection value for each vertex.
relaxAmountThis indicates the proportion of relaxing. If it's zero, nothing happens; if it's one, each vertex is moved to the average of its neighbors. Values of less than zero or more than one are accepted, but lead to unstable results. The default in Editable Poly is .5f.
relaxItersThis is the number of iterations of relax. This is the number of times the relaxation is applied. The more iterations, the more relaxed the result.
holdBoundaryPtsIf true, "boundary" points should be held in place, unaffected by the Relax. "boundary" points are defined as those that are used by more edges than faces, which basically means they're on some sort of border of the mesh. This is turned on by default in Editable Poly, because if it's off, boundary points recede into the mesh very quickly.
holdOuterPtsIf true, "outer" points should be held in place. "outer" points are defined as those where the sum of all the face angles is less than 2Pi (360 degrees). This basically means the point is some sort of outer corner. All the points on a 1-segment Box or on a Geosphere are "outer" points. On a multiple-segment plane, none of the interior points are "outer" points. This parameter is most important in models like the Geosphere, which could relax down into nothing if outer points are not fixed in place.
deltaIf non-NULL, this should point to an array into which the effect of this relax should be placed, in the form of a Point3 offset per vertex.
Returns
True if any relaxing occurred, false in cases where nothing happened, for instance because no vertices were selected.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ SelectPolygonsByAngle()

DllExport int SelectPolygonsByAngle ( int  startPolygon,
float  angle,
BitArray polySel 
)

Starting with the polygon given, this algorithm creates a BitArray selection of all polygons it can get to without crossing any edges whose angle is greater than the angle given.

Parameters
startPolygonThe polygon to start on. If this polygon is already set in "polySel", nothing will happen.
angleThe maximum crossable edge angle, in radians
polySelThe BitArray where polygons should be selected
Returns
The number of newly-selected polygons
Remarks
This method can be called multiple times with the same polySel parameter, for instance to turn a set of face hits from hit-testing into a select-by-angle region, and is designed to be used in Editable Poly and Edit Poly's "Select by angle" feature


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ CutPrepare()

DllExport void CutPrepare ( )

This method is used at the beginning of a series of cuts.

It sets things up so that "CutCleanup" will work.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly

◆ CutCleanup()

DllExport void CutCleanup ( )

This method is used after a series of cuts, to "clean up" any extra edges which are necessary to have while cutting, but which aren't what the user actually intended to create.

"CutPrepare" should be called at the beginning of the series of cuts.


Example: See example usage in the Editable Poly object, in maxsdk/samples/mesh/EditablePoly