/*
 * zGo2PartTypes.h
 * 
 * Gocator system communication library
 * Copyright (C) 2010 by LMI Technologies Inc.
 * 
 * Licensed under The MIT License.
 * Redistributions of files must retain the above copyright notice.
 */
#ifndef LMITECH_GO2_Z_PART_TYPES_H_INCLUDED
#define LMITECH_GO2_Z_PART_TYPES_H_INCLUDED

#include <Go2PartTypes.h>
#include <Go2System.h>
#include <z/zGo2Object.h>
#include <zXml.h>
#include <Go2ApiBegin.h>

/*
 * Go2PartCircleRegion Class 
 */

typedef struct Go2PartCircleRegionClass
{
    GO2_OBJECT_FIELDS(); 

    Go2Object system; 

    Go2Double x; 
    Go2Double y; 
    Go2Double radius; 
} Go2PartCircleRegionClass; 


GO2_EXPORT(Go2Status) Go2PartCircleRegion_Construct(Go2PartCircleRegion* region, Go2System system); 
GO2_EXPORT(Go2Status) Go2PartCircleRegion_Init(Go2PartCircleRegion region, Go2System system); 

GO2_EXPORT(Go2Status) Go2PartCircleRegion_Read(Go2PartCircleRegion region, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2PartCircleRegion_Write(Go2PartCircleRegion region, zXml xml, zXmlItem item); 


/*
 * Go2PartRegion2d Class 
 */

typedef struct Go2PartRegion2dClass
{
    GO2_OBJECT_FIELDS(); 

    Go2Object system; 

    Go2Double x; 
    Go2Double y; 
    Go2Double width; 
    Go2Double length; 
} Go2PartRegion2dClass; 


GO2_EXPORT(Go2Status) Go2PartRegion2d_Construct(Go2PartRegion2d* area, Go2System system); 
GO2_EXPORT(Go2Status) Go2PartRegion2d_Init(Go2PartRegion2d area, Go2System system); 

GO2_EXPORT(Go2Status) Go2PartRegion2d_Read(Go2PartRegion2d area, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2PartRegion2d_Write(Go2PartRegion2d area, zXml xml, zXmlItem item); 


/*
 * Go2PartRegion3d Class 
 */

typedef struct Go2PartRegion3dClass
{
    GO2_OBJECT_FIELDS(); 

    Go2Object system; 

    Go2Double x; 
    Go2Double y; 
    Go2Double z;
    Go2Double width; 
    Go2Double length; 
    Go2Double height;
} Go2PartRegion3dClass; 

GO2_EXPORT(Go2Status) Go2PartRegion3d_Construct(Go2PartRegion3d* volume, Go2System system); 
GO2_EXPORT(Go2Status) Go2PartRegion3d_Init(Go2PartRegion3d volume, Go2System system); 

GO2_EXPORT(Go2Status) Go2PartRegion3d_Read(Go2PartRegion3d volume, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2PartRegion3d_Write(Go2PartRegion3d volume, zXml xml, zXmlItem item); 


/*
 * Go2PartFeature3dClass
 */

typedef struct Go2PartFeature3dClass
{
    GO2_OBJECT_FIELDS();

    Go2Object system;

    Go2Bool regionEnabled;
    Go2PartFeature3dType featureType;   //named as such due to existence of type member in Go2Object
    Go2PartRegion3d region;
} Go2PartFeature3dClass;

GO2_EXPORT(Go2Status) Go2PartFeature3d_Construct(Go2PartFeature3d* volume, Go2System system); 
GO2_EXPORT(Go2Status) Go2PartFeature3d_Init(Go2PartFeature3d volume, Go2System system); 
GO2_EXPORT(Go2Status) Go2PartFeature3d_VRelease(Go2PartFeature3d volume);

GO2_EXPORT(Go2Status) Go2PartFeature3d_Read(Go2PartFeature3d volume, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2PartFeature3d_Write(Go2PartFeature3d volume, zXml xml, zXmlItem item); 

#include <Go2ApiEnd.h>

#endif      /* #ifndef LMITECH_GO2_Z_PART_TYPES_H_INCLUDED */
