3ds Max C++ API Reference
MNMesh Component Flags

General MNMesh Component Flags

For MNVerts, MNEdges, and MNFaces, bits 0-7 are used for common characteristics of all components.

Bits 8-15 are used for component-specific flags. Bits 16-23 are reserved for temporary use in MNMesh algorithms. Bits 24-31 are reserved for MNMath.lib users.

#define MN_SEL   (1<<0)
 Indicates that a component is selected. More...
 
#define MN_DEAD   (1<<1)
 Indicates that a component is not used and should be ignored. More...
 
#define MN_TARG   (1<<2)
 Indicates that a component is targeted. More...
 
#define MN_BACKFACING   (1<<3)
 Indicates that the vertex faces "backwards" in the current viewport. More...
 
#define MN_HIDDEN   (1<<4)
 Indicates that a component is selected. More...
 
#define MN_CACHEINVALID   (1<<5)
 Indicates that a component is selected. More...
 
#define MN_INFOREGROUND   (1<<7)
 Tags a face as not renderable but can be hit-test. More...
 
#define MN_WHATEVER   (1<<16)
 
#define MN_LOCAL_SEL   (1<<17)
 Alternate selections (not passed up the pipe). More...
 
#define MN_HITTEST_CULLED   (1<<18)
 Used to indicate culled components (neither selected nor not selected) in window-region hit testing. More...
 
#define MN_USER   (1<<24)
 Any value above this can be used by applications. More...
 

Vertex Flags

#define MN_VERT_DONE   (1<<8)
 Set in algorithms that may accidentally revisit the same vertex (MNVertext twice, to keep them from processing it the second time. More...
 
#define MN_VERT_WELDED   (1<<9)
 Used by MNMesh::WeldBorderVerts() More...
 
#define MN_VERT_SUBDIVISION_CORNER   (1<<10)
 Track which vertices are direct "descendants" of the original cage vertices in subdivision. More...
 

Edge flags


#define MN_EDGE_INVIS   (1<<8)
 Both faces using this edge consider it invisible. More...
 
#define MN_EDGE_NOCROSS   (1<<9)
 This edge should not be crossed in algorithms like MNMesh::SabinDoo that can mix faces across edges. More...
 
#define MN_EDGE_MAP_SEAM   (1<<10)
 Track which edges are direct descendants of the original cage edges in subdivision. More...
 
#define MN_EDGE_SUBDIVISION_BOUNDARY   (1<<11)
 Track unwanted edges created by Cut, so they might be removed later. More...
 
#define MN_EDGE_CUT_EXTRA   (1<<12)
 Used with MNMesh::CutPrepare() and MNMEsh::CutCleanUp() More...
 
#define MN_EDGE_WAS_PROCESSED   (1<<13)
 This flag is a general-purpose informational one that methods can set to indicate edges that were processed as part of their work, so that callers can act on them if desired. More...
 

Detailed Description

Macro Definition Documentation

◆ MN_SEL

#define MN_SEL   (1<<0)

Indicates that a component is selected.

◆ MN_DEAD

#define MN_DEAD   (1<<1)

Indicates that a component is not used and should be ignored.

Vertices with the MN_DEAD flag are deleted in the next call MNMesh::CollapseDeadVerts().

◆ MN_TARG

#define MN_TARG   (1<<2)

Indicates that a component is targeted.

(See the MNMesh methods starting with the words TargetBy.

◆ MN_BACKFACING

#define MN_BACKFACING   (1<<3)

Indicates that the vertex faces "backwards" in the current viewport.

This changes often.

◆ MN_HIDDEN

#define MN_HIDDEN   (1<<4)

Indicates that a component is selected.

◆ MN_CACHEINVALID

#define MN_CACHEINVALID   (1<<5)

Indicates that a component is selected.

◆ MN_INFOREGROUND

#define MN_INFOREGROUND   (1<<7)

Tags a face as not renderable but can be hit-test.

1<<6 is skipped because the tri strip uses that as face flag signifying a face to be stripped

◆ MN_WHATEVER

#define MN_WHATEVER   (1<<16)

SDK users should use MN_USER and higher flags.

◆ MN_LOCAL_SEL

#define MN_LOCAL_SEL   (1<<17)

Alternate selections (not passed up the pipe).

◆ MN_HITTEST_CULLED

#define MN_HITTEST_CULLED   (1<<18)

Used to indicate culled components (neither selected nor not selected) in window-region hit testing.

◆ MN_USER

#define MN_USER   (1<<24)

Any value above this can be used by applications.

◆ MN_VERT_DONE

#define MN_VERT_DONE   (1<<8)

Set in algorithms that may accidentally revisit the same vertex (MNVertext twice, to keep them from processing it the second time.

◆ MN_VERT_WELDED

#define MN_VERT_WELDED   (1<<9)

◆ MN_VERT_SUBDIVISION_CORNER

#define MN_VERT_SUBDIVISION_CORNER   (1<<10)

Track which vertices are direct "descendants" of the original cage vertices in subdivision.

◆ MN_EDGE_INVIS

#define MN_EDGE_INVIS   (1<<8)

Both faces using this edge consider it invisible.

◆ MN_EDGE_NOCROSS

#define MN_EDGE_NOCROSS   (1<<9)

This edge should not be crossed in algorithms like MNMesh::SabinDoo that can mix faces across edges.

◆ MN_EDGE_MAP_SEAM

#define MN_EDGE_MAP_SEAM   (1<<10)

Track which edges are direct descendants of the original cage edges in subdivision.

◆ MN_EDGE_SUBDIVISION_BOUNDARY

#define MN_EDGE_SUBDIVISION_BOUNDARY   (1<<11)

Track unwanted edges created by Cut, so they might be removed later.

◆ MN_EDGE_CUT_EXTRA

#define MN_EDGE_CUT_EXTRA   (1<<12)

Used with MNMesh::CutPrepare() and MNMEsh::CutCleanUp()

◆ MN_EDGE_WAS_PROCESSED

#define MN_EDGE_WAS_PROCESSED   (1<<13)

This flag is a general-purpose informational one that methods can set to indicate edges that were processed as part of their work, so that callers can act on them if desired.

For example, MNMesh::QuadChamfer will set this flag on any edges that it chamfered and split into two new edges as part of the chamfering process. Other methods may use this flag but the specific meaning is up to the individual method and should be documented along with that method's other usage information. This flag is set by the MNMesh::QuadChamfer() method on any edges that were split into two new edges by the chamfering operation. Used to indicate an edge that was processed by an operation