#ifndef HS_GP_DIR_H
#define HS_GP_DIR_H
#include "hs_types.h"
#ifdef __cplusplus
extern "C" {
#endif
gp_Dir * hs_new_gp_Dir(double x, double y, double z, HSExceptionType* exType, void ** exPtr);
void hs_delete_gp_Dir(gp_Dir* dir);
double hs_gp_Dir_X(gp_Dir * pnt);
double hs_gp_Dir_Y(gp_Dir * pnt);
double hs_gp_Dir_Z(gp_Dir * pnt);
void hs_gp_Dir_SetX(gp_Dir * pnt, double x);
void hs_gp_Dir_SetY(gp_Dir * pnt, double y);
void hs_gp_Dir_SetZ(gp_Dir * pnt, double z);
bool hs_gp_Dir_IsEqual(gp_Dir * a, gp_Dir * b, double angularTolerance);
bool hs_gp_Dir_IsNormal(gp_Dir * a, gp_Dir * b, double angularTolerance);
bool hs_gp_Dir_IsOpposite(gp_Dir * a, gp_Dir * b, double angularTolerance);
bool hs_gp_Dir_IsParallel(gp_Dir * a, gp_Dir * b, double angularTolerance);
double hs_gp_Dir_Angle(gp_Dir * a, gp_Dir * b);
double hs_gp_Dir_AngleWithRef(gp_Dir * a, gp_Dir * b, gp_Dir* theVRef, HSExceptionType* exType, void ** exPtr);
void hs_gp_Dir_Cross(gp_Dir * a, gp_Dir * b, HSExceptionType* exType, void ** exPtr);
gp_Dir * hs_gp_Dir_Crossed(gp_Dir * a, gp_Dir * b, HSExceptionType* exType, void ** exPtr);
void hs_gp_Dir_CrossCross(gp_Dir * a, gp_Dir * b, gp_Dir * c, HSExceptionType* exType, void ** exPtr);
gp_Dir * hs_gp_Dir_CrossCrossed(gp_Dir * a, gp_Dir * b, gp_Dir * c, HSExceptionType* exType, void ** exPtr);
double hs_gp_Dir_Dot(gp_Dir * a, gp_Dir * b);
double hs_gp_Dir_DotCross(gp_Dir * a, gp_Dir * b, gp_Dir * c);
void hs_gp_Dir_Reverse(gp_Dir* ax1);
gp_Dir * hs_gp_Dir_Reversed(gp_Dir* ax1);
void hs_gp_Dir_Mirror(gp_Dir * theDir, gp_Dir * theAxis);
gp_Dir * hs_gp_Dir_Mirrored(gp_Dir * theDir, gp_Dir * theAxis);
void hs_gp_Dir_MirrorAboutAx1(gp_Dir * theDir, gp_Ax1 * theAxis);
gp_Dir * hs_gp_Dir_MirroredAboutAx1(gp_Dir * theDir, gp_Ax1 * theAxis);
void hs_gp_Dir_MirrorAboutAx2(gp_Dir * theDir, gp_Ax2 * theAxis);
gp_Dir * hs_gp_Dir_MirroredAboutAx2(gp_Dir * theDir, gp_Ax2 * theAxis);
void hs_gp_Dir_Rotate(gp_Dir * theDir, gp_Ax1 * theAxis, double amount);
gp_Dir * hs_gp_Dir_Rotated(gp_Dir * theDir, gp_Ax1 * theAxis, double amount);
void hs_gp_Dir_Transform(gp_Dir * theDir, gp_Trsf * trsf);
gp_Dir * hs_gp_Dir_Transformed(gp_Dir * theDir, gp_Trsf * trsf);
#ifdef __cplusplus
}
#endif
#endif // HS_GP_DIR_H