mncommon.h

Go to the documentation of this file.
00001 // Common macros for all MNMath.
00002 #pragma once
00003 
00004 #include "maxheap.h"
00005 #include <WTypes.h>
00006 #include "maxtypes.h"
00007 #include "ioapi.h"
00008 
00009 // forward declarations
00010 
00011 
00012 
00013 #ifndef MNEPS
00014 #define MNEPS 1e-04f
00015 #endif
00016 
00017 // Selection levels for internal use:
00018 #define MN_SEL_DEFAULT 0    // Default = use whatever's in mesh.
00019 #define MN_SEL_OBJECT 1
00020 #define MN_SEL_VERTEX 2
00021 #define MN_SEL_EDGE 3
00022 #define MN_SEL_FACE 4
00023 
00024 // Got sick of redoing the following everywhere:
00036 class FlagUser: public MaxHeapOperators {
00037     DWORD FlagUserFlags;
00038 public:
00041     FlagUser () { FlagUserFlags=0; }
00044     void SetFlag (DWORD fl, bool val=TRUE) { if (val) FlagUserFlags |= fl; else FlagUserFlags -= (FlagUserFlags & fl); }
00046     void ClearFlag (DWORD fl) { FlagUserFlags -= (FlagUserFlags & fl); }
00050     bool GetFlag (DWORD fl) const { return (FlagUserFlags & fl) ? 1 : 0; }
00052     void ClearAllFlags () { FlagUserFlags = 0; }
00053 
00055     void CopyFlags (DWORD fl) { FlagUserFlags = fl; }
00057     void CopyFlags (const FlagUser & fu) { FlagUserFlags = fu.FlagUserFlags; }
00059     void CopyFlags (const FlagUser * fu) { FlagUserFlags = fu->FlagUserFlags; }
00060 
00062     void CopyFlags (DWORD fl, DWORD mask) { FlagUserFlags |= (fl & mask); }
00064     void CopyFlags (const FlagUser &fu, DWORD mask) { FlagUserFlags |= (fu.FlagUserFlags & mask); }
00066     void CopyFlags (const FlagUser *fu, DWORD mask) { FlagUserFlags |= (fu->FlagUserFlags & mask); }
00067 
00069     void OrFlags (const FlagUser & fu) { FlagUserFlags |= fu.FlagUserFlags; }
00071     void OrFlags (const FlagUser * fu) { FlagUserFlags |= fu->FlagUserFlags; }
00072 
00074     void AndFlags (const FlagUser & fu) { FlagUserFlags &= fu.FlagUserFlags; }
00076     void AndFlags (const FlagUser * fu) { FlagUserFlags &= fu->FlagUserFlags; }
00077 
00080     bool FlagMatch (DWORD fmask, DWORD fl) const {
00081         return ((FlagUserFlags & fmask) == (fl & fmask));
00082     }
00085     bool FlagMatch (DWORD fmask, const FlagUser & fu) const {
00086         return ((FlagUserFlags & fmask) == (fu.FlagUserFlags & fmask));
00087     }
00090     bool FlagMatch (DWORD fmask, const FlagUser * fu) const {
00091         return ((FlagUserFlags & fmask) == (fu->FlagUserFlags & fmask));
00092     }
00093 
00095     DWORD ExportFlags () const { return FlagUserFlags; }
00098     void ImportFlags (DWORD fl) { FlagUserFlags = fl; }
00099 
00100     IOResult WriteFlags (ISave* isave, ULONG* nb) const {
00101         return isave->Write(&FlagUserFlags, sizeof(DWORD), nb);
00102     }
00103     IOResult ReadFlags (ILoad* iload, ULONG* nb) {
00104         return iload->Read (&FlagUserFlags, sizeof(DWORD), nb);
00105     }
00106 };
00107