Public Member Functions

MeshNormalSpec Class Reference

Search for all occurrences

Detailed Description

This class is an interface used to store user-specified normals (such as those created in the Edit Normals modifier).

These normals have very limited pipeline support. They are used for viewport display, but not for rendering.

The MeshNormalSpec contains three types of normals:

Remarks:
This class is available in release 6.0 and later only.

#include <MeshNormalSpec.h>

Inheritance diagram for MeshNormalSpec:
Inheritance graph
[legend]

List of all members.

Public Member Functions

  MeshNormalSpec ()
  ~MeshNormalSpec ()
void  SetFlag (DWORD fl, bool val=true)
  Sets flags in the MeshNormalSpec.
void  ClearFlag (DWORD fl)
  Clears the flags given. See GetFlag for more details on MeshNormalSpec flags.
bool  GetFlag (DWORD fl) const
  Gets flags in the MeshNormalSpec.
DllExport void  Initialize ()
  Initializes all data members - do not use if already allocated!
DllExport bool  NAlloc (int num, bool keep=TRUE)
DllExport void  NShrink ()
  shrinks allocation down to actual number of normals.
DllExport bool  FAlloc (int num, bool keep=TRUE)
DllExport void  FShrink ()
DllExport void  Clear ()
  Deletes everything.
DllExport void  ClearAndFree ()
  Deletes everything, frees all memory.
int  GetNumFaces () const
DllExport bool  SetNumFaces (int numFaces)
int  GetNumNormals () const
DllExport bool  SetNumNormals (int numNormals)
Point3 Normal (int normID) const
Point3 GetNormalArray () const
bool  GetNormalExplicit (int normID) const
void  SetNormalExplicit (int normID, bool value)
void  SetAllExplicit (bool value=true)
  Set all normals to be explicit.
MeshNormalFace Face (int faceID) const
MeshNormalFace GetFaceArray () const
void  SetParent (Mesh *pMesh)
DllExport Point3 GetNormal (int face, int corner)
DllExport void  SetNormal (int face, int corner, Point3 &normal)
DllExport int  GetNormalIndex (int face, int corner)
DllExport void  SetNormalIndex (int face, int corner, int normalIndex)
DllExport int  NewNormal (Point3 normal, bool explic=true)
DllExport void  SetSelection (BitArray &newSelection)
BitArray GetSelection ()
void  SetDisplayLength (float displayLength)
float  GetDisplayLength ()
DllExport void  Display (GraphicsWindow *gw, bool showSel)
DllExport bool  HitTest (GraphicsWindow *gw, HitRegion *hr, DWORD flags, SubObjHitList &hitList)
DllExport Box3  GetBoundingBox (Matrix3 *tm=NULL, bool selectedOnly=false)
DllExport void  ClearNormals ()
  This method dumps all unspecified normals. Best to use only from within CheckNormals.
DllExport void  BuildNormals ()
  Fills in the mpSpecNormal data by building all the unspecified normals, and computing non-explicit ones.
DllExport void  ComputeNormals ()
  This method just recomputes the directions of non-explicit normals, without rebuilding the normal list.
DllExport void  CheckNormals ()
  This checks our flags and calls BuildNormals, ComputeNormals as needed.
DllExport MeshNormalSpec operator= (const MeshNormalSpec &from)
DllExport void  CopySpecified (const MeshNormalSpec &from)
DllExport MeshNormalSpec operator+= (const MeshNormalSpec &from)
DllExport void  MyDebugPrint (bool printAll=false)
DllExport bool  CheckAllData (int numParentFaces)
DllExport IOResult  Save (ISave *isave)
DllExport IOResult  Load (ILoad *iload)
Interface_ID  GetID ()
DllExport void  DeleteInterface ()
DllExport BaseInterface GetInterface (Interface_ID id)
DllExport BaseInterface CloneInterface (void *remapDir=NULL)
DllExport void  ShallowCopy (IPipelineClient *from, ChannelMask channels)
DllExport void  DeepCopy (IPipelineClient *from, ChannelMask channels)
DllExport void  NewAndCopyChannels (ChannelMask channels)
DllExport void  FreeChannels (ChannelMask channels, int zeroOthers=1)
DllExport void  ZeroChannels (ChannelMask channels)
DllExport void  AppendAllChannels (IPipelineClient *from)
DllExport bool  Transform (Matrix3 &xfm, BOOL useSel=false, BitArray *normalSelection=NULL)
DllExport bool  Translate (Point3 &translate, BOOL useSel=true, BitArray *normalSelection=NULL)
DllExport bool  BreakNormals (BOOL useSel=true, BitArray *normalSelection=NULL, BOOL toAverage=false)
DllExport bool  UnifyNormals (BOOL useSel=true, BitArray *normalSelection=NULL, BOOL toAverage=false)
DllExport bool  AverageNormals (BOOL useThresh=false, float threshold=0.0f, BOOL useSel=true, BitArray *normalSelection=NULL)
DllExport bool  SpecifyNormals (BOOL useSel=true, BitArray *normalSelection=NULL)
DllExport bool  MakeNormalsExplicit (BOOL useSel=true, BitArray *normalSelection=NULL, bool value=true)
DllExport bool  ResetNormals (BOOL useSel=true, BitArray *normalSelection=NULL)

Constructor & Destructor Documentation

MeshNormalSpec ( ) [inline]
                      : mpFace(NULL), mpNormal(NULL), mNumNormalAlloc(0),
        mNumFaceAlloc(0), mNumNormals(0), mNumFaces(0), mpParent(NULL), mFlags(0),
        mDisplayLength(MESH_NORMAL_LENGTH_DEFAULT) { }
~MeshNormalSpec ( ) [inline]
{ ClearAndFree (); }

Member Function Documentation

void SetFlag ( DWORD  fl,
bool  val = true 
) [inline]

Sets flags in the MeshNormalSpec.

Generally, the only flag that clients should set is the MESH_NORMAL_MODIFIER_SUPPORT flag. See GetFlag for more details.

{ if (val) mFlags |= fl; else mFlags &= ~fl; }
void ClearFlag ( DWORD  fl ) [inline]

Clears the flags given. See GetFlag for more details on MeshNormalSpec flags.

{ mFlags &= ~fl; }
bool GetFlag ( DWORD  fl ) const [inline]

Gets flags in the MeshNormalSpec.

Remarks:
MeshNormalSpec supports the following flags: MESH_NORMAL_NORMALS_BUILT Indicates that non-specified normals have been constructed using smoothing groups. If not set, non-specified normals may be invalid. MESH_NORMAL_NORMALS_COMPUTED Indicates that non-explicit normals have been computed using geometrically computed face normals. (If not set, only explicit normals may be assumed to be pointing the right direction.) MESH_NORMAL_MODIFIER_SUPPORT This flag should be set by modifiers that want to support the edited normals. See class TriObjectNormalModifier for more details. If this flag is not specifically set in a modifier that alters PART_GEOM or PART_TOPO of a TriObject, any specified normals will be cleared after the modifier is evaluated.
{ return (mFlags & fl) ? true : false; }
DllExport void Initialize ( )

Initializes all data members - do not use if already allocated!

DllExport bool NAlloc ( int  num,
bool  keep = TRUE 
)
DllExport void NShrink ( )

shrinks allocation down to actual number of normals.

DllExport bool FAlloc ( int  num,
bool  keep = TRUE 
)
DllExport void FShrink ( )
DllExport void Clear ( )

Deletes everything.

DllExport void ClearAndFree ( )

Deletes everything, frees all memory.

int GetNumFaces ( ) const [inline]
{ return mNumFaces; }
DllExport bool SetNumFaces ( int  numFaces )
int GetNumNormals ( ) const [inline]
{ return mNumNormals; }
DllExport bool SetNumNormals ( int  numNormals )
Point3& Normal ( int  normID ) const [inline]
{ return mpNormal[normID]; }
Point3* GetNormalArray ( ) const [inline]
{ return mpNormal; }
bool GetNormalExplicit ( int  normID ) const [inline]
{ return mNormalExplicit[normID] ? true : false; }
void SetNormalExplicit ( int  normID,
bool  value 
) [inline]
{ mNormalExplicit.Set (normID, value); }
void SetAllExplicit ( bool  value = true ) [inline]

Set all normals to be explicit.

Parameters:
value - If true, all normals will be set to explicit. If false, all normals will be set to non-explicit
{ if (value) mNormalExplicit.SetAll(); else mNormalExplicit.ClearAll (); }
MeshNormalFace& Face ( int  faceID ) const [inline]
{ return mpFace[faceID]; }
MeshNormalFace* GetFaceArray ( ) const [inline]
{ return mpFace; }
void SetParent ( Mesh pMesh ) [inline]
{ mpParent = pMesh; }
DllExport Point3& GetNormal ( int  face,
int  corner 
)
DllExport void SetNormal ( int  face,
int  corner,
Point3 normal 
)
DllExport int GetNormalIndex ( int  face,
int  corner 
)
DllExport void SetNormalIndex ( int  face,
int  corner,
int  normalIndex 
)
DllExport int NewNormal ( Point3  normal,
bool  explic = true 
)
DllExport void SetSelection ( BitArray newSelection )
BitArray& GetSelection ( ) [inline]
{ return mNormalSel; }
void SetDisplayLength ( float  displayLength ) [inline]
{ mDisplayLength = displayLength; }
float GetDisplayLength ( ) [inline]
{ return mDisplayLength; }
DllExport void Display ( GraphicsWindow gw,
bool  showSel 
)
DllExport bool HitTest ( GraphicsWindow gw,
HitRegion hr,
DWORD  flags,
SubObjHitList hitList 
)
DllExport Box3 GetBoundingBox ( Matrix3 tm = NULL,
bool  selectedOnly = false 
)
DllExport void ClearNormals ( )

This method dumps all unspecified normals. Best to use only from within CheckNormals.

DllExport void BuildNormals ( )

Fills in the mpSpecNormal data by building all the unspecified normals, and computing non-explicit ones.

Remarks:
Does nothing if normal faces not allocated yet!

Requires an accurate mpParent pointer.
DllExport void ComputeNormals ( )

This method just recomputes the directions of non-explicit normals, without rebuilding the normal list.

Remarks:
Requires an accurate mpParent pointer.
DllExport void CheckNormals ( )

This checks our flags and calls BuildNormals, ComputeNormals as needed.

Remarks:
Requires an accurate mpParent pointer.
DllExport MeshNormalSpec& operator= ( const MeshNormalSpec from )
DllExport void CopySpecified ( const MeshNormalSpec from )
DllExport MeshNormalSpec& operator+= ( const MeshNormalSpec from )
DllExport void MyDebugPrint ( bool  printAll = false )
DllExport bool CheckAllData ( int  numParentFaces )
DllExport IOResult Save ( ISave isave )
DllExport IOResult Load ( ILoad iload )
Interface_ID GetID ( ) [inline, virtual]
Remarks:
This method returns the unique interface ID.

Reimplemented from IPipelineClient.

{return MESH_NORMAL_SPEC_INTERFACE;}
DllExport void DeleteInterface ( ) [virtual]
Remarks:
This method can be used as a direct interface delete request.
Default Implementation:
{ }

Reimplemented from BaseInterface.

DllExport BaseInterface* GetInterface ( Interface_ID  id ) [virtual]
Remarks:
Returns a pointer to the interface whose ID is specified.
Parameters:
Interface_ID id

The ID of the interface to return.
Default Implementation:
{ return NULL; }

Reimplemented from BaseInterface.

DllExport BaseInterface* CloneInterface ( void *  remapDir = NULL ) [virtual]
Remarks:
This method allows you to clone the base interface.
Parameters:
void* remapDir

The RemapDir passed to the clone method.
Default Implementation:
{ return NULL; }

Reimplemented from BaseInterface.

DllExport void ShallowCopy ( IPipelineClient from,
ChannelMask  channels 
) [virtual]
DllExport void DeepCopy ( IPipelineClient from,
ChannelMask  channels 
) [virtual]
DllExport void NewAndCopyChannels ( ChannelMask  channels ) [virtual]
DllExport void FreeChannels ( ChannelMask  channels,
int  zeroOthers = 1 
) [virtual]
DllExport void ZeroChannels ( ChannelMask  channels ) [virtual]
DllExport void AppendAllChannels ( IPipelineClient from ) [virtual]
DllExport bool Transform ( Matrix3 xfm,
BOOL  useSel = false,
BitArray normalSelection = NULL 
)
DllExport bool Translate ( Point3 translate,
BOOL  useSel = true,
BitArray normalSelection = NULL 
)
DllExport bool BreakNormals ( BOOL  useSel = true,
BitArray normalSelection = NULL,
BOOL  toAverage = false 
)
DllExport bool UnifyNormals ( BOOL  useSel = true,
BitArray normalSelection = NULL,
BOOL  toAverage = false 
)
DllExport bool AverageNormals ( BOOL  useThresh = false,
float  threshold = 0.0f,
BOOL  useSel = true,
BitArray normalSelection = NULL 
)
DllExport bool SpecifyNormals ( BOOL  useSel = true,
BitArray normalSelection = NULL 
)
DllExport bool MakeNormalsExplicit ( BOOL  useSel = true,
BitArray normalSelection = NULL,
bool  value = true 
)
DllExport bool ResetNormals ( BOOL  useSel = true,
BitArray normalSelection = NULL 
)

MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec
MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec MeshNormalSpec