e4d952bf32
- aggiunte numerose funzionalità in API.
443 lines
15 KiB
C++
443 lines
15 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2014-2014
|
|
//----------------------------------------------------------------------------
|
|
// File : API_GdbObjects.cpp Data : 17.10.14 Versione : 1.5i5
|
|
// Contenuto : Funzioni geometriche di base per API.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 17.10.14 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "API.h"
|
|
#include "API_Macro.h"
|
|
#include "/EgtDev/Include/EInAPI.h"
|
|
#include "/EgtDev/Include/EGkFrame3d.h"
|
|
|
|
using namespace std ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Vector3d
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorNormalize( double* pdX, double* pdY, double* pdZ,
|
|
double dEps)
|
|
{
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.Normalize( dEps))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorRotate( double* pdX, double* pdY, double* pdZ,
|
|
const double vtAx[3], double dAngRotDeg)
|
|
{
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.Rotate( vtAx, dAngRotDeg))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorScale( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOrig[3], const double vtX[3], const double vtY[3], const double vtZ[3],
|
|
double dCoeffX, double dCoeffY, double dCoeffZ)
|
|
{
|
|
// costruisco il frame
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptOrig, vtX, vtY, vtZ))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorMirror( double* pdX, double* pdY, double* pdZ,
|
|
const double vtNorm[3])
|
|
{
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.Mirror( vtNorm))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorShear( double* pdX, double* pdY, double* pdZ,
|
|
const double vtNorm[3], const double vtDir[3], double dCoeff)
|
|
{
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.Shear( vtNorm, vtDir, dCoeff))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorToGlob( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOrig[3], const double vtX[3], const double vtY[3], const double vtZ[3])
|
|
{
|
|
// costruisco il frame
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptOrig, vtX, vtY, vtZ))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.ToGlob( frRef))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorToLoc( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOrig[3], const double vtX[3], const double vtY[3], const double vtZ[3])
|
|
{
|
|
// costruisco il frame
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptOrig, vtX, vtY, vtZ))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.ToLoc( frRef))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtVectorLocToLoc( double* pdX, double* pdY, double* pdZ,
|
|
const double ptO1[3], const double vtX1[3], const double vtY1[3], const double vtZ1[3],
|
|
const double ptO2[3], const double vtX2[3], const double vtY2[3], const double vtZ2[3])
|
|
{
|
|
// costruisco il frame sorgente
|
|
Frame3d frSou ;
|
|
if ( ! frSou.Set( ptO1, vtX1, vtY1, vtZ1))
|
|
return FALSE ;
|
|
// costruisco il frame destinazione
|
|
Frame3d frDest ;
|
|
if ( ! frDest.Set( ptO2, vtX2, vtY2, vtZ2))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Vector3d vtTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! vtTemp.LocToLoc( frSou, frDest))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = vtTemp.x ;
|
|
*pdY = vtTemp.y ;
|
|
*pdZ = vtTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtGetVectorRotation( const double vtS[3], const double vtE[3], const double vtAx[3],
|
|
double* pdAngRotDeg, BOOL* pbDet)
|
|
{
|
|
Vector3d vtSou( vtS) ;
|
|
bool bDet ;
|
|
bool bOk = vtSou.GetRotation( vtE, vtAx, *pdAngRotDeg, bDet) ;
|
|
*pbDet = ( bDet ? TRUE : FALSE) ;
|
|
return ( bOk ? TRUE : FALSE) ;
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Point3d
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointTranslate( double* pdX, double* pdY, double* pdZ,
|
|
const double vtMove[3])
|
|
{
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
ptTemp.Translate( vtMove) ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointRotate( double* pdX, double* pdY, double* pdZ,
|
|
const double ptAx[3], const double vtAx[3], double dAngRotDeg)
|
|
{
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! ptTemp.Rotate( ptAx, vtAx, dAngRotDeg))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointScale( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOrig[3], const double vtX[3], const double vtY[3], const double vtZ[3],
|
|
double dCoeffX, double dCoeffY, double dCoeffZ)
|
|
{
|
|
// costruisco il frame
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptOrig, vtX, vtY, vtZ))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! ptTemp.Scale( frRef, dCoeffX, dCoeffY, dCoeffZ))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointMirror( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOn[3], const double vtNorm[3])
|
|
{
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! ptTemp.Mirror( ptOn, vtNorm))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointShear( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOn[3], const double vtNorm[3], const double vtDir[3], double dCoeff)
|
|
{
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! ptTemp.Shear( ptOn, vtNorm, vtDir, dCoeff))
|
|
return FALSE ;
|
|
// aggiorno il parametro vettore
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointToGlob( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOrig[3], const double vtX[3], const double vtY[3], const double vtZ[3])
|
|
{
|
|
// costruisco il frame
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptOrig, vtX, vtY, vtZ))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! ptTemp.ToGlob( frRef))
|
|
return FALSE ;
|
|
// aggiorno il parametro punto
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointToLoc( double* pdX, double* pdY, double* pdZ,
|
|
const double ptOrig[3], const double vtX[3], const double vtY[3], const double vtZ[3])
|
|
{
|
|
// costruisco il frame
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptOrig, vtX, vtY, vtZ))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! ptTemp.ToLoc( frRef))
|
|
return FALSE ;
|
|
// aggiorno il parametro punto
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtPointLocToLoc( double* pdX, double* pdY, double* pdZ,
|
|
const double ptO1[3], const double vtX1[3], const double vtY1[3], const double vtZ1[3],
|
|
const double ptO2[3], const double vtX2[3], const double vtY2[3], const double vtZ2[3])
|
|
{
|
|
// costruisco il frame sorgente
|
|
Frame3d frSou ;
|
|
if ( ! frSou.Set( ptO1, vtX1, vtY1, vtZ1))
|
|
return FALSE ;
|
|
// costruisco il frame destinazione
|
|
Frame3d frDest ;
|
|
if ( ! frDest.Set( ptO2, vtX2, vtY2, vtZ2))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Point3d ptTemp( *pdX, *pdY, *pdZ) ;
|
|
if ( ! ptTemp.LocToLoc( frSou, frDest))
|
|
return FALSE ;
|
|
// aggiorno il parametro punto
|
|
*pdX = ptTemp.x ;
|
|
*pdY = ptTemp.y ;
|
|
*pdZ = ptTemp.z ;
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Frame3d
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtFrameTranslate( double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3],
|
|
const double vtMove[3])
|
|
{
|
|
// eseguo la trasformazione
|
|
Frame3d frTemp ;
|
|
frTemp.Set( ptOrig, vtX, vtY, vtZ) ;
|
|
frTemp.Translate( vtMove) ;
|
|
// aggiorno i parametri del frame
|
|
VEC_FROM_3D( ptOrig, frTemp.Orig())
|
|
VEC_FROM_3D( vtX, frTemp.VersX())
|
|
VEC_FROM_3D( vtY, frTemp.VersY())
|
|
VEC_FROM_3D( vtZ, frTemp.VersZ())
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtFrameRotate( double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3],
|
|
const double ptAx[3], const double vtAx[3], double dAngRotDeg)
|
|
{
|
|
// eseguo la trasformazione
|
|
Frame3d frTemp ;
|
|
frTemp.Set( ptOrig, vtX, vtY, vtZ) ;
|
|
frTemp.Rotate( ptAx, vtAx, dAngRotDeg) ;
|
|
// aggiorno i parametri del frame
|
|
VEC_FROM_3D( ptOrig, frTemp.Orig())
|
|
VEC_FROM_3D( vtX, frTemp.VersX())
|
|
VEC_FROM_3D( vtY, frTemp.VersY())
|
|
VEC_FROM_3D( vtZ, frTemp.VersZ())
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtFrameToGlob( double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3],
|
|
const double ptO1[3], const double vtX1[3], const double vtY1[3], const double vtZ1[3])
|
|
{
|
|
// costruisco il frame di trasformazione
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptO1, vtX1, vtY1, vtZ1))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Frame3d frTemp ;
|
|
frTemp.Set( ptOrig, vtX, vtY, vtZ) ;
|
|
if ( ! frTemp.ToGlob( frRef))
|
|
return FALSE ;
|
|
// aggiorno i parametri del frame
|
|
VEC_FROM_3D( ptOrig, frTemp.Orig())
|
|
VEC_FROM_3D( vtX, frTemp.VersX())
|
|
VEC_FROM_3D( vtY, frTemp.VersY())
|
|
VEC_FROM_3D( vtZ, frTemp.VersZ())
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtFrameToLoc( double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3],
|
|
const double ptO1[3], const double vtX1[3], const double vtY1[3], const double vtZ1[3])
|
|
{
|
|
// costruisco il frame di trasformazione
|
|
Frame3d frRef ;
|
|
if ( ! frRef.Set( ptO1, vtX1, vtY1, vtZ1))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Frame3d frTemp ;
|
|
frTemp.Set( ptOrig, vtX, vtY, vtZ) ;
|
|
if ( ! frTemp.ToLoc( frRef))
|
|
return FALSE ;
|
|
// aggiorno i parametri del frame
|
|
VEC_FROM_3D( ptOrig, frTemp.Orig())
|
|
VEC_FROM_3D( vtX, frTemp.VersX())
|
|
VEC_FROM_3D( vtY, frTemp.VersY())
|
|
VEC_FROM_3D( vtZ, frTemp.VersZ())
|
|
return TRUE ;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
BOOL
|
|
__stdcall EgtFrameLocToLoc( double ptOrig[3], double vtX[3], double vtY[3], double vtZ[3],
|
|
const double ptO1[3], const double vtX1[3], const double vtY1[3], const double vtZ1[3],
|
|
const double ptO2[3], const double vtX2[3], const double vtY2[3], const double vtZ2[3])
|
|
{
|
|
// costruisco il frame sorgente
|
|
Frame3d frSou ;
|
|
if ( ! frSou.Set( ptO1, vtX1, vtY1, vtZ1))
|
|
return FALSE ;
|
|
// costruisco il frame destinazione
|
|
Frame3d frDest ;
|
|
if ( ! frDest.Set( ptO2, vtX2, vtY2, vtZ2))
|
|
return FALSE ;
|
|
// eseguo la trasformazione
|
|
Frame3d frTemp ;
|
|
if ( ! frTemp.LocToLoc( frSou, frDest))
|
|
return FALSE ;
|
|
// aggiorno i parametri del frame
|
|
VEC_FROM_3D( ptOrig, frTemp.Orig())
|
|
VEC_FROM_3D( vtX, frTemp.VersX())
|
|
VEC_FROM_3D( vtY, frTemp.VersY())
|
|
VEC_FROM_3D( vtZ, frTemp.VersZ())
|
|
return TRUE ;
|
|
} |