/*
 * zGo2ProfileTypes.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_PROFILE_TYPES_H_INCLUDED
#define LMITECH_GO2_Z_PROFILE_TYPES_H_INCLUDED

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

/*
 * Go2ProfileArea Class 
 */

typedef struct Go2ProfileAreaClass
{
    GO2_OBJECT_FIELDS(); 

    Go2Object system; 

    Go2Double x; 
    Go2Double z; 
    Go2Double width; 
    Go2Double height; 

} Go2ProfileAreaClass; 


GO2_EXPORT(Go2Status) Go2ProfileArea_Construct(Go2ProfileArea* area, Go2System system); 
GO2_EXPORT(Go2Status) Go2ProfileArea_Init(Go2ProfileArea area, Go2System system); 

GO2_EXPORT(Go2Status) Go2ProfileArea_Read(Go2ProfileArea area, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2ProfileArea_Write(Go2ProfileArea area, zXml xml, zXmlItem item); 


/*
 * Go2ProfileFeature Class 
 */

typedef struct Go2ProfileFeatureClass
{
    GO2_OBJECT_FIELDS(); 

    Go2Object system; 

    Go2ProfileFeatureType featureType; 
    Go2ProfileArea area; 

} Go2ProfileFeatureClass; 

GO2_EXPORT(Go2Status) Go2ProfileFeature_Construct(Go2ProfileFeature* feature, Go2System system); 
GO2_EXPORT(Go2Status) Go2ProfileFeature_Init(Go2ProfileFeature feature, Go2System system); 
GO2_EXPORT(Go2Status) Go2ProfileFeature_VRelease(Go2ProfileFeature feature); 

GO2_EXPORT(Go2Status) Go2ProfileFeature_Read(Go2ProfileFeature feature, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2ProfileFeature_Write(Go2ProfileFeature feature, zXml xml, zXmlItem item); 

/*
 * Go2ProfileLine Class 
 */

typedef struct Go2ProfileLineClass
{
    GO2_OBJECT_FIELDS(); 

    Go2Object system; 

    Go2ProfileArea areas[2]; 
    Go2UInt32 areaCount; 

} Go2ProfileLineClass; 

GO2_EXPORT(Go2Status) Go2ProfileLine_Construct(Go2ProfileLine* line, Go2System system); 
GO2_EXPORT(Go2Status) Go2ProfileLine_Init(Go2ProfileLine line, Go2System system); 
GO2_EXPORT(Go2Status) Go2ProfileLine_VRelease(Go2ProfileLine line); 

GO2_EXPORT(Go2Status) Go2ProfileLine_Read(Go2ProfileLine line, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2ProfileLine_Write(Go2ProfileLine line, zXml xml, zXmlItem item); 


/*
 * Go2ProfileEdge Class 
 */

typedef struct Go2ProfileEdgeClass
{
    GO2_OBJECT_FIELDS(); 

    Go2Object system; 

    Go2ProfileArea area; 
    Go2Double voidWidthMax;
    Go2Double depthMin;
    Go2Double surfaceWidth;
    Go2Double surfaceOffset;
    Go2Double nominalRadius;
    Go2Double edgeAngle;
    Go2ProfileEdgeType edgeType;

} Go2ProfileEdgeClass; 

GO2_EXPORT(Go2Status) Go2ProfileEdge_Construct(Go2ProfileEdge* edge, Go2System system); 
GO2_EXPORT(Go2Status) Go2ProfileEdge_Init(Go2ProfileEdge edge, Go2System system); 
GO2_EXPORT(Go2Status) Go2ProfileEdge_VRelease(Go2ProfileEdge edge); 

GO2_EXPORT(Go2Status) Go2ProfileEdge_Read(Go2ProfileEdge edge, zXml xml, zXmlItem item); 
GO2_EXPORT(Go2Status) Go2ProfileEdge_Write(Go2ProfileEdge edge, zXml xml, zXmlItem item); 


#include <Go2ApiEnd.h>

#endif      /* #ifndef LMITECH_GO2_Z_PROFILE_TYPES_H_INCLUDED */
