/***************************************************************************
 *                          Zanoza Modeler v2.x                            *
 *      This is unpublished propietary source code of Zanoza Software.     *
 *      The copyright notice does not evidence any actual or intended      *
 *                    publication of such source code.                     *
 *                                                                         *
 *                   Copyright (c) 2002 Zanoza Software.                   *
 *                                                                         *
 *                        All rights reserved.                             *
 ***************************************************************************
 *--------------------------------------------------------------------------
 * @author:   Oleg Melashenko
 *--------------------------------------------------------------------------
 * @purpose:
   *   core package required types
 *--------------------------------------------------------------------------
 * @created: Friday, September 27, 2002 09:56:35
 */

#if !defined(coreTypes_h_included)
#define coreTypes_h_included

#include <zmodeler.h>

namespace core
{
  typedef enum eBooleanOperation
  {
    BO_REPLACE,     //area = A
    BO_SET_NULL,    //area = NULL
    BO_UNITE,       //area+=A
    BO_INTERSECT,   //area&=A
    BO_SUBTRACT,    //area-=A
    BO_INVSUBTRACT, //area = A-area
    BO_INVERT,      //area = -area
    BO_SET_WORLD    //area = <infinity>
  }eBooleanOperation;

  typedef enum ePriority
  {
    EP_MINIMUM  = 0,
    EP_LOW      = 1,
    EP_DEFAULT  = 2,
    EP_HIGH     = 3,
    EP_MAXIMUM  = 4
  }ePriority;

  //error-reporting message type
  typedef enum eMessageType
  {
    MT_ERROR    = 0,
    MT_WARNING  = 1,
    MT_MESSAGE  = 2,
    MT_DEBUG    = 3,  //ignored in release build
    MT_INSTANT  = 4,  //displays via status bar
    MT_DIALOG   = 5   //a dialog will popup with an error info
  }eMessageType;

// Status constants for IStatus interface
#define STATUS_ENABLED           0x00000001
#define STATUS_ACTIVE            0x00000002
#define STATUS_HIDDEN            0x00000004
#define STATUS_SELECTED          0x00000008
#define STATUS_WATING            0x00000010
#define STATUS_DEFFERED          0x00000020

  typedef enum eState
  {
    ES_INITIAL        = 0,
    ES_PICK_ARG0      = ES_INITIAL,
    ES_PICK_SOURCE    = ES_INITIAL,
    ES_PICK_ARG1      = 1,
    ES_PICK_TARGET    = ES_PICK_ARG1,
    ES_PICK_ARG2      = 2,
    ES_PICK_ARG3      = 3,
    ES_PICK_ARG4      = 4,
    ES_PICK_ARG5      = 5,
    ES_PICK_ARG6      = 6,
    ES_PICK_ARG7      = 7,
    ES_PICK_ARG8      = 8,
    ES_PICK_ARG9      = 9,
    ES_FINAL          = 0x7FFFFFFFL
  }eState;


  //
  // level of edit for IProcParams interface
  //
  typedef enum eLevel
  {
    // 0x8000 is a 'sub-level' indicator
    LEV_VERTEX      = 0x8001,
    LEV_EDGE        = 0x8002,
    LEV_POLY        = 0x8004,
    LEV_MANIPULATOR = 0x8008,

    LEV_NODE        = 0x1000,
  }eLevel;
#define SUBLEVEL(level) (0!=((level) & 0x8000))

  //
  // axes mode for IProcParams
  //
  typedef enum eAxesMode
  {
    AXES_WORLD,
    AXES_LOCAL,
    AXES_SCREEN
  };

  //
  // enumeration of axes
  //
  enum eAxis
  {
    AXIS_X = 0,
    AXIS_Y = 1,
    AXIS_Z = 2,
    AXIS_XY= 3 //edit mode capability
  };

#define Z3D_COMPATIBILITY_RESOLVATION   _T("ZModeler::Compatibility")

}

#endif