EgtInterface 1.5j5 :
- aggiunte funzioni di trasformazione elementi geometrici base (Point, Vector, Frame).
This commit is contained in:
+433
@@ -0,0 +1,433 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// 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 ;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
#define VEC_FROM_3D( D, S) { (D)[0] = (S).x ; (D)[1] = (S).y ; (D)[2] = (S).z ; }
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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 ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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 ;
|
||||
}
|
||||
Reference in New Issue
Block a user