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

Interface class for handling interactive face extrude operations, such as the shift-drag face extrude implemented in Editable Poly and Edit Poly. More...

#include <mnmesh.h>

+ Inheritance diagram for IMNFaceExtrude:

Public Types

enum  IMNFaceExtrudeVersionType { IMN_FACE_EXTRUDE_VER_2021 = 0 , IMN_FACE_EXTRUDE_VER_2022 = 1 , IMN_FACE_EXTRUDE_VER_2023 = 2 , IMN_FACE_EXTRUDE_VER_2024 = 3 }
 Enumeration defining versions of the face extrude operation. More...
 
- Public Types inherited from BaseInterface
enum  LifetimeType { noRelease , immediateRelease , wantsRelease , serverControlled }
 

Public Member Functions

virtual Interface_ID GetID () override
 
virtual void SetVersion (IMNFaceExtrudeVersionType version)=0
 Sets the version of the face extrude postprocessing that the interface should employ.
 
virtual IMNFaceExtrudeVersionType GetVersion () const =0
 
virtual void BeginFaceExtrude (DWORD faceFlag=MN_SEL)=0
 Performs the topology changes for the face extrude operation, following the approach of MNMesh::ExtrudeFaceClusters, for the faces flagged with faceFlag, and sets up the data structures required to perform further processing in UpdateFaceExtrude and EndFaceExtrude.
 
virtual bool UpdateFaceExtrude ()=0
 Performs intermediate postprocessing after extruded faces have been moved or scaled.
 
virtual bool EndFaceExtrude ()=0
 Finalizes postprocessing of the extrude operation.
 
- Public Member Functions inherited from BaseInterface
virtual UtilExport ~BaseInterface ()
 Destructor.
 
UtilExport BaseInterfaceGetInterface (Interface_ID id) override
 
virtual UtilExport Interface_ID GetID ()
 
virtual LifetimeType LifetimeControl ()
 
virtual bool RegisterNotifyCallback (InterfaceNotifyCallback *incb)
 
virtual void UnRegisterNotifyCallback (InterfaceNotifyCallback *incb)
 
virtual BaseInterfaceAcquireInterface ()
 
virtual void ReleaseInterface ()
 
virtual void DeleteInterface ()
 
virtual BaseInterfaceCloneInterface (void *remapDir=nullptr)
 
- Public Member Functions inherited from InterfaceServer
virtual UtilExport ~InterfaceServer ()
 Destructor.
 
virtual UtilExport BaseInterfaceGetInterface (Interface_ID id)
 
template<class InterfaceType >
InterfaceType * GetTypedInterface ()
 

Static Public Attributes

static constexpr Interface_ID ID = IMNFACEEXTRUDE_INTERFACE_ID
 

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

Interface class for handling interactive face extrude operations, such as the shift-drag face extrude implemented in Editable Poly and Edit Poly.

Usage:

IMNFaceExtrude* faceExtrude = static_cast<IMNFaceExtrude*>(mesh.GetInterface(IMNFACEEXTRUDE_INTERFACE_ID));
// Perform initial topological changes to split selected faces, flagged with faceFlag, and set up data structures
faceExtrude->BeginFaceExtrude(faceFlag);
// Perform intermediate processing as the positions of the extruded face verticess are adjusted
bool isDone = false;
while (!isDone)
{
// Here, UpdateExtrudedFaceVertexPositions() is a function defined by the user of this class, which updates the
// positions of the vertices of the faces flagged with faceFlag, according to user input, and returns a flag which is
// true when the user is done modifying the vertex positions
isDone = UpdateExtrudedFaceVertexPositions();
// Redo the intermediate processing for the present vertex positions
faceExtrude->UpdateFaceExtrude();
}
// Finalize processing, and reset data structures to be ready for the next use
faceExtrude->EndFaceExtrude();
Interface class for handling interactive face extrude operations, such as the shift-drag face extrude...
Definition: mnmesh.h:7439
virtual bool UpdateFaceExtrude()=0
Performs intermediate postprocessing after extruded faces have been moved or scaled.
virtual void BeginFaceExtrude(DWORD faceFlag=MN_SEL)=0
Performs the topology changes for the face extrude operation, following the approach of MNMesh::Extru...
virtual bool EndFaceExtrude()=0
Finalizes postprocessing of the extrude operation.
#define IMNFACEEXTRUDE_INTERFACE_ID
Definition: mnmesh.h:7408

Member Enumeration Documentation

◆ IMNFaceExtrudeVersionType

Enumeration defining versions of the face extrude operation.

Enumerator
IMN_FACE_EXTRUDE_VER_2021 
IMN_FACE_EXTRUDE_VER_2022 

Initial implementation, exposed in Editable Poly in 3ds Max 2021.2 and in Edit Poly in 3ds Max 2022.

IMN_FACE_EXTRUDE_VER_2023 

Includes support for partial cut-through, exposed in Editable Poly in 3ds Max 2022.2 and in Edit Poly in 3ds Max 2023.

IMN_FACE_EXTRUDE_VER_2024 

Improved handling of geometric and topological edge cases, exposed in Editable Poly in 3ds Max 2023.1 and in Edit Poly in 3ds Max 2024.

7446 {
7451 };
@ IMN_FACE_EXTRUDE_VER_2022
Initial implementation, exposed in Editable Poly in 3ds Max 2021.2 and in Edit Poly in 3ds Max 2022.
Definition: mnmesh.h:7448
@ IMN_FACE_EXTRUDE_VER_2023
Includes support for partial cut-through, exposed in Editable Poly in 3ds Max 2022....
Definition: mnmesh.h:7449
@ IMN_FACE_EXTRUDE_VER_2024
Improved handling of geometric and topological edge cases, exposed in Editable Poly in 3ds Max 2023....
Definition: mnmesh.h:7450
@ IMN_FACE_EXTRUDE_VER_2021
Definition: mnmesh.h:7447

Member Function Documentation

◆ GetID()

virtual Interface_ID GetID ( )
inlineoverridevirtual
Remarks
This method returns the unique interface ID.

Reimplemented from BaseInterface.

◆ SetVersion()

virtual void SetVersion ( IMNFaceExtrudeVersionType  version)
pure virtual

Sets the version of the face extrude postprocessing that the interface should employ.

Note that the interface is set at construction for the most recent version. Note that if an extrude operation is presently being processed, and version is different from the value returned by GetVersion() on entry, the the postprocessing operation is terminated, and this object is reset to an uninitialized state.

Parameters
[in]version– the IMNFaceExtrudeVersionType value indicating the version of the postprocessing to employ

◆ GetVersion()

virtual IMNFaceExtrudeVersionType GetVersion ( ) const
pure virtual

◆ BeginFaceExtrude()

virtual void BeginFaceExtrude ( DWORD  faceFlag = MN_SEL)
pure virtual

Performs the topology changes for the face extrude operation, following the approach of MNMesh::ExtrudeFaceClusters, for the faces flagged with faceFlag, and sets up the data structures required to perform further processing in UpdateFaceExtrude and EndFaceExtrude.

Parameters
[in]faceFlag– the MN_XXX selection flag used to faces to be extrude

◆ UpdateFaceExtrude()

virtual bool UpdateFaceExtrude ( )
pure virtual

Performs intermediate postprocessing after extruded faces have been moved or scaled.

Guaranteed not to alter geometry or topology of entities existing in the mesh prior to the first call to this function for a particular extrude operation, but may alter flags.

Returns
flag indicating whether topology was altered

◆ EndFaceExtrude()

virtual bool EndFaceExtrude ( )
pure virtual

Finalizes postprocessing of the extrude operation.

May alter vertex MN_WHATEVER flags.

Returns
flag indicating whether topology was altered

Member Data Documentation

◆ ID

constexpr Interface_ID ID = IMNFACEEXTRUDE_INTERFACE_ID
staticconstexpr