Include :

- aggiornamento interfacce.
This commit is contained in:
Dario Sassi
2014-07-05 07:19:44 +00:00
parent f553fc3466
commit be2d2c6f8b
14 changed files with 105 additions and 49 deletions
+1 -1
View File
@@ -20,7 +20,7 @@
class __declspec( novtable) IExtText : public IGeoObj
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Set( const std::string& sText, const Point3d& ptP, double dAngDeg, double dH) = 0 ;
virtual bool Set( const std::string& sText, const Point3d& ptP, double dAngDeg,
const std::string& sFont, int nW, bool bItl, double dH, double dRat, double dAddAdv,
+1 -1
View File
@@ -23,7 +23,7 @@ const double ONEINCH = 25.4 ;
const double EPS_SMALL = 1e-3 ;
const double EPS_ZERO = 1e-7 ;
const double EPS_PARAM = 1e-7 ;
const double HSPAN_PARAM = 0.5 ; // metà intervallo di curva o superficie semplici
const double SPAN_PARAM = 1.0 ; // intervallo di curva o superficie semplici
// infinito per lunghezze
const double INFINITO = 1e10 ;
+1 -1
View File
@@ -21,7 +21,7 @@ class PolyLine ;
class __declspec( novtable) IGeoFrame3d : public IGeoObj
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Set( const Point3d& ptOrig, const Vector3d& vtDirX,
const Vector3d& vtDirY, const Vector3d& vtDirZ) = 0 ;
virtual bool Set( const Point3d& ptOrig, const Point3d& ptOnX, const Point3d& ptNearY) = 0 ;
+1 -1
View File
@@ -19,7 +19,7 @@
class __declspec( novtable) IGeoPoint3d : public IGeoObj
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Set( const Point3d& ptP) = 0 ;
virtual const Point3d& GetPoint( void) const = 0 ;
} ;
+1 -1
View File
@@ -21,7 +21,7 @@ class PolyLine ;
class __declspec( novtable) IGeoVector3d : public IGeoObj
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Set( const Vector3d& vtV) = 0 ;
virtual bool Set( const Vector3d& vtV, const Point3d& ptBase) = 0 ;
virtual const Vector3d& GetVector( void) const = 0 ;
+44 -11
View File
@@ -26,8 +26,8 @@
//-----------------------------------------------------------------------------
//! dati di intersezione relativi ad una curva
struct IntCrvInfo {
// dati di intersezione relativi ad una curva
double dU ; //!< parametro
Point3d ptI ; //!< punto sulla curva (Z della curva, intersezione a Z=0)
int nPrevTy ; //!< tipo di approccio (precedente l'intersezione)
@@ -36,8 +36,8 @@ struct IntCrvInfo {
IntCrvInfo( void)
: dU( 0), ptI(), nPrevTy( 0), nNextTy(0) {}
} ;
//! dati di intersezione delle due curve A e B
struct IntCrvCrvInfo {
// dati di intersezione delle due curve A e B
bool bOverlap ; //!< intersezione con overlap
bool bCBOverEq ; //!< overlap su curva B equiverso o controverso con curva A
IntCrvInfo IciA[2] ; //!< IciA[0] intersez. isolata o inizio overlap, IciA[1] fine overlap
@@ -46,7 +46,8 @@ struct IntCrvCrvInfo {
IntCrvCrvInfo( void)
: bOverlap( false) {}
} ;
typedef std::vector<IntCrvCrvInfo> ICCIVECTOR ; // vettore di IntCrvCrvInfo
//! vettore di IntCrvCrvInfo
typedef std::vector<IntCrvCrvInfo> ICCIVECTOR ;
//-----------------------------------------------------------------------------
// Tipo di intersezione
@@ -54,11 +55,11 @@ typedef std::vector<IntCrvCrvInfo> ICCIVECTOR ; // vettore di IntCrvCrvInfo
// sovrapposta equiversa bOverlap = true bCBOverEq = true
// sovrapposta controversa bOverlap = true bCBOverEq = false
// Costanti per tipo di approccio/allontanamento dall'intersezione
const int ICCT_NULL = 0 ;
const int ICCT_IN = 1 ;
const int ICCT_ON = 2 ;
const int ICCT_OUT = 3 ;
// Calcolo del tipo duale
const int ICCT_NULL = 0 ; //!< Approccio/allontanamento non definito
const int ICCT_IN = 1 ; //!< Approccio/allontanamento interno
const int ICCT_OUT = 2 ; //!< Approccio/allontanamento esterno
const int ICCT_ON = 3 ; //!< Approccio/allontanamento sovrapposto
//! Calcolo del tipo duale
inline int GetDualIcct( int nType)
{ switch ( nType) {
case ICCT_IN : return ICCT_OUT ;
@@ -67,22 +68,54 @@ inline int GetDualIcct( int nType)
}}
//-----------------------------------------------------------------------------
//! Classificazione di parti di curva rispetto ad altra curva chiusa
struct CrvClass {
double dParS ;
double dParE ;
int nClass ;
// costruttore
CrvClass( void)
: dParS( 0), dParE( 0), nClass( 0) {}
} ;
//! Vettore di CrvClass
typedef std::vector<CrvClass> CRVCVECTOR ;
//-----------------------------------------------------------------------------
// Costanti per classe parti di curva rispetto a curva chiusa
const int CRVC_NULL = 0 ; //!< Parte di curva non classificabile
const int CRVC_IN = 1 ; //!< Parte di curva interna
const int CRVC_OUT = 2 ; //!< Parte di curva esterna
const int CRVC_ON_P = 3 ; //!< Parte di curva sovrapposta equiversa
const int CRVC_ON_M = 4 ; //!< Parte di curva sovrapposta controversa
//-----------------------------------------------------------------------------
//! Classe per calcolo intersezione tra due curve nel piano XY locale
class IntersCurveCurve
{
public :
//! Le intersezioni sono calcolate nel piano XY locale.<br/>
//! Il flag bIsSegment vale solo per le linee.
EGK_EXPORT IntersCurveCurve( const ICurve& CurveA, const ICurve& CurveB, bool bIsSegment = true) ;
//! Il flag bAreSegments vale solo per intersezione tra due linee e riguarda entrambe.
EGK_EXPORT IntersCurveCurve( const ICurve& CurveA, const ICurve& CurveB, bool bAreSegments = true) ;
public :
//! Indica la presenza di intersezioni con sovrapposizioni
EGK_EXPORT bool GetOverlaps( void) ;
//! Restituisce il numero di intersezioni (intersezioni doppie coincidenti e sovrapposte contano uno)
EGK_EXPORT int GetNumInters( void) ;
//! Restituisce informazioni sull'intersezione di indice nInd ( 0 based)
EGK_EXPORT bool GetIntCrvCrvInfo( int nInd, IntCrvCrvInfo& aInfo) ;
//! Restituisce il punto di intersezione più vicino al punto passato
EGK_EXPORT bool GetIntersPointNearTo( int nCrv, const Point3d& ptNear, Point3d& ptI) ;
//! Restituisce la classificazione di una curva rispetto all'altra ( nCrv=0 -> CurvaA, nCrv=1 -> CurvaB)
EGK_EXPORT bool GetCurveClassification( int nCrv, CRVCVECTOR& ccClass) ;
private :
void LineLineCalculate( const ICurve& CurveA, const ICurve& CurveB, bool bIsSegment) ;
void LineLineCalculate( const ICurve& CurveA, const ICurve& CurveB, bool bAreSegments) ;
void LineCrvCompoCalculate( const ICurve& CurveA, const ICurve& CurveB) ;
void CrvCompoLineCalculate( const ICurve& CurveA, const ICurve& CurveB) ;
void CrvCompoCrvCompoCalculate( const ICurve& CurveA, const ICurve& CurveB) ;
bool CalcCurveClassification( const ICurve* pCurve, const ICCIVECTOR& Info, CRVCVECTOR& ccClass) ;
bool CalcCurveInOrOut( const ICurve* pCurveA, const ICurve* pCurveB, CRVCVECTOR& ccClass) ;
private :
bool m_bOverlaps ;
+43 -21
View File
@@ -30,60 +30,80 @@ class Frame3d ;
class EGK_EXPORT Point3d
{
public :
//! Costruttore del punto con tre componenti X, Y e Z
Point3d( double dX, double dY, double dZ) : x( dX), y( dY), z( dZ) {}
//! Costruttore del punto con due componenti X e Y, Z = 0
Point3d( double dX, double dY) : x( dX), y( dY), z( 0) {}
//! Costruttore del punto origine X = Y = Z = 0
Point3d( void) : x( 0), y( 0), z( 0) {}
//! Assegnazione delle componenti X, Y e Z al punto
void Set( double dX, double dY, double dZ) { x = dX ; y = dY ; z = dZ ;}
//! Copia
const Point3d& operator =( const Point3d& ptSrc)
{ if ( &ptSrc != this) {
x = ptSrc.x , y = ptSrc.y , z = ptSrc.z ; }
return *this ; }
public :
//! Verifica se il punto è quasi l'origine
bool IsSmall( void) const
{ return ( ( x * x + y * y + z * z) < ( EPS_SMALL * EPS_SMALL)) ; }
//! Verifica se il punto è esattamente l'origine
bool IsZero( void) const
{ return ( ( x * x + y * y + z * z) < ( EPS_ZERO * EPS_ZERO)) ; }
//! Somma sul posto con un vettore
const Point3d& operator +=( const Vector3d& vtV)
{ this->x += vtV.x ; this->y += vtV.y ; this->z += vtV.z ; return *this ; }
//! Sottrazione sul posto con un vettore
const Point3d& operator -=( const Vector3d& vtV)
{ this->x -= vtV.x ; this->y -= vtV.y ; this->z -= vtV.z ; return *this ; }
// questa somma è valida solo se equivalente ad una combinazione baricentrica
//! Somma sul posto con un altro punto (valida solo se equivalente ad una combinazione baricentrica)
const Point3d& operator +=( const Point3d& ptP)
{ this->x += ptP.x ; this->y += ptP.y ; this->z += ptP.z ; return *this ; }
//! Moltiplicazione sul posto con un numero
const Point3d& operator *=( double dMul)
{ this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; }
//! Divisione sul posto con un numero
const Point3d& operator /=( double dDiv)
{ double dMul = 1 / dDiv ; this->x *= dMul ; this->y *= dMul ; this->z *= dMul ; return *this ; }
//! Traslazione dato il vettore di movimento
void Translate( const Vector3d& vtMove) ;
//! Rotazione attorno ad un asse per un punto, dato l'angolo in gradi
bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dAngDeg) ;
//! Rotazione attorno ad un asse per un punto, dati coseno e seno dell'angolo di rotazione
bool Rotate( const Point3d& ptAx, const Vector3d& vtAx, double dCosAng, double dSinAng) ;
//! Scalatura non uniforme
bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) ;
//! Specchiatura
bool Mirror( const Point3d& ptOn, const Vector3d& vtNorm) ;
//! Scorrimento
bool Shear( const Point3d& ptOn, const Vector3d& vtNorm, const Vector3d& vtDir, double dCoeff) ;
//! Cambio di riferimento : dal riferimento al globale
bool ToGlob( const Frame3d& frRef) ;
//! Cambio di riferimento : dal globale al riferimento
bool ToLoc( const Frame3d& frRef) ;
//! Cambio di riferimento : dal primo riferimento al secondo
bool LocToLoc( const Frame3d& frOri, const Frame3d& frDest) ;
public :
union {
struct {
double x ;
double y ;
double z ;
double x ; //!< coordinata sull'asse X
double y ; //!< coordinata sull'asse Y
double z ; //!< coordinata sull'asse Z
} ;
double v[3] ;
double v[3] ; //!< equivalente vettoriale delle tre coordinate
} ;
} ;
//----------------------------------------------------------------------------
// Punti notevoli
//----------------------------------------------------------------------------
//! Punto origine
const Point3d ORIG( 0, 0, 0) ;
//----------------------------------------------------------------------------
// Somma di due punti
// (valida solo se equivalente ad una combinazione baricentrica).
//! Somma di due punti (valida solo se equivalente ad una combinazione baricentrica)
//----------------------------------------------------------------------------
inline Point3d
operator+( const Point3d& ptP1, const Point3d& ptP2)
@@ -92,7 +112,7 @@ operator+( const Point3d& ptP1, const Point3d& ptP2)
}
//----------------------------------------------------------------------------
// Somma di un punto e un vettore
//! Somma di un punto e un vettore
//----------------------------------------------------------------------------
inline Point3d
operator+( const Point3d& ptP1, const Vector3d& vtV2)
@@ -101,7 +121,7 @@ operator+( const Point3d& ptP1, const Vector3d& vtV2)
}
//----------------------------------------------------------------------------
// Opposto di un punto
//! Opposto di un punto
//----------------------------------------------------------------------------
inline Vector3d
operator-( const Point3d& ptP)
@@ -110,7 +130,7 @@ operator-( const Point3d& ptP)
}
//----------------------------------------------------------------------------
// Differenza di due punti, genera un vettore
//! Differenza di due punti, genera un vettore
//----------------------------------------------------------------------------
inline Vector3d
operator-( const Point3d& ptP1, const Point3d& ptP2)
@@ -119,7 +139,7 @@ operator-( const Point3d& ptP1, const Point3d& ptP2)
}
//----------------------------------------------------------------------------
// Sottrazione di un punto e un vettore
//! Sottrazione di un punto e un vettore
//----------------------------------------------------------------------------
inline Point3d
operator-( const Point3d& ptP1, const Vector3d& vtV2)
@@ -128,7 +148,7 @@ operator-( const Point3d& ptP1, const Vector3d& vtV2)
}
//----------------------------------------------------------------------------
// Prodotto con uno scalare
//! Prodotto con uno scalare
//----------------------------------------------------------------------------
inline Point3d
operator*( const Point3d& ptP, double dMul)
@@ -136,6 +156,8 @@ operator*( const Point3d& ptP, double dMul)
return Point3d( ptP.x * dMul, ptP.y * dMul, ptP.z * dMul) ;
}
//----------------------------------------------------------------------------
//! Prodotto di uno scalare con un punto
//----------------------------------------------------------------------------
inline Point3d
operator*( double dMul, const Point3d& ptP)
@@ -144,7 +166,7 @@ operator*( double dMul, const Point3d& ptP)
}
//----------------------------------------------------------------------------
// Divisione per uno scalare
//! Divisione per uno scalare
//----------------------------------------------------------------------------
inline Point3d
operator/( const Point3d& ptP, double dDiv)
@@ -156,7 +178,7 @@ operator/( const Point3d& ptP, double dDiv)
}
//----------------------------------------------------------------------------
// Somma mediata di due punti (baricentrica)
//! Somma mediata di due punti (baricentrica)
//----------------------------------------------------------------------------
inline Point3d
Media( const Point3d& ptP1, const Point3d& ptP2, double dCoeff)
@@ -167,7 +189,7 @@ Media( const Point3d& ptP1, const Point3d& ptP2, double dCoeff)
}
//----------------------------------------------------------------------------
// Quadrato della distanza tra due punti
//! Quadrato della distanza tra due punti
//----------------------------------------------------------------------------
inline double
SqDist( const Point3d& ptP1, const Point3d& ptP2)
@@ -180,7 +202,7 @@ SqDist( const Point3d& ptP1, const Point3d& ptP2)
}
//----------------------------------------------------------------------------
// Quadrato della distanza tra due punti nel piano XY
//! Quadrato della distanza tra due punti nel piano XY
//----------------------------------------------------------------------------
inline double
SqDistXY( const Point3d& ptP1, const Point3d& ptP2)
@@ -192,7 +214,7 @@ SqDistXY( const Point3d& ptP1, const Point3d& ptP2)
}
//----------------------------------------------------------------------------
// Distanza tra due punti
//! Distanza tra due punti
//----------------------------------------------------------------------------
inline double
Dist( const Point3d& ptP1, const Point3d& ptP2)
@@ -212,7 +234,7 @@ Dist( const Point3d& ptP1, const Point3d& ptP2)
}
//----------------------------------------------------------------------------
// Distanza tra due punti nel piano XY
//! Distanza tra due punti nel piano XY
//----------------------------------------------------------------------------
inline double
DistXY( const Point3d& ptP1, const Point3d& ptP2)
@@ -229,7 +251,7 @@ DistXY( const Point3d& ptP1, const Point3d& ptP2)
}
//----------------------------------------------------------------------------
// Direzione e distanza tra due punti ( P1 -> P2)
//! Direzione e distanza tra due punti ( P1 -> P2)
//----------------------------------------------------------------------------
inline bool
DirDist( const Point3d& ptP1, const Point3d& ptP2, Vector3d& vtDir, double& dDist)
@@ -248,7 +270,7 @@ DirDist( const Point3d& ptP1, const Point3d& ptP2, Vector3d& vtDir, double& dDis
}
//----------------------------------------------------------------------------
// Verifica che due punti sono quasi coincidenti (Small error -> Approx)
//! Verifica se due punti sono quasi coincidenti (Small error -> Approx)
//----------------------------------------------------------------------------
inline bool
AreSamePointApprox( const Point3d& ptP1, const Point3d& ptP2)
@@ -257,7 +279,7 @@ AreSamePointApprox( const Point3d& ptP1, const Point3d& ptP2)
}
//----------------------------------------------------------------------------
// Verifica che due punti sono esattamente coincidenti (Zero error -> Exact)
//! Verifica se due punti sono esattamente coincidenti (Zero error -> Exact)
//----------------------------------------------------------------------------
inline bool
AreSamePointExact( const Point3d& ptP1, const Point3d& ptP2)
+7 -7
View File
@@ -35,7 +35,7 @@ class EGK_EXPORT Vector3d
Vector3d( double dX, double dY, double dZ) : x( dX), y( dY), z( dZ) {}
//! Costruttore del vettore con due componenti X e Y, Z = 0
Vector3d( double dX, double dY) : x( dX), y( dY), z( 0) {}
//! Costruttore del vettore nullo X= Y = Z = 0
//! Costruttore del vettore nullo X = Y = Z = 0
Vector3d( void) : x( 0), y( 0), z( 0) {}
//! Assegnazione delle componenti X, Y e Z al vettore
void Set( double dX, double dY, double dZ) { x = dX ; y = dY ; z = dZ ;}
@@ -103,9 +103,9 @@ class EGK_EXPORT Vector3d
void ToSpherical( double* pdLen, double* pdAngVertDeg, double* pdAngOrizzDeg) const ;
//! Normalizzazione di un vettore (trasformazione in versore)
bool Normalize( double dEps = EPS_SMALL) ;
//! Rotazione
//! Rotazione attorno ad un asse, dato l'angolo in gradi
bool Rotate( const Vector3d& vtAx, double dAngDeg) ;
//! Rotazione da coseno e seno dell'angolo di rotazione
//! Rotazione attorno ad un asse, dati coseno e seno dell'angolo di rotazione
bool Rotate( const Vector3d& vtAx, double dCosAng, double dSinAng) ;
//! Scalatura non uniforme
bool Scale( const Frame3d& frRef, double dCoeffX, double dCoeffY, double dCoeffZ) ;
@@ -130,11 +130,11 @@ class EGK_EXPORT Vector3d
public :
union {
struct {
double x ;
double y ;
double z ;
double x ; //!< componente sull'asse X
double y ; //!< componente sull'asse Y
double z ; //!< componente sull'asse Z
} ;
double v[3] ;
double v[3] ; //!< equivalente vettoriale delle tre componenti
} ;
} ;
+1
View File
@@ -52,6 +52,7 @@ class __declspec( novtable) ICurve : public IGeoObj
virtual bool GetPointDiffGeom( double dU, Side nS, CrvPointDiffGeom& oDiffG) const = 0 ;
virtual bool IsPointOn( const Point3d& ptP, double dTol = EPS_SMALL) const = 0 ;
virtual bool ApproxWithLines( double dLinTol, double dAngTolDeg, PolyLine& PL) const = 0 ;
virtual ICurve* CopyParamRange( double dUStart, double dUEnd) const = 0 ;
virtual bool Invert( void) = 0 ;
virtual bool Offset( double dDist, int nSide, int nType = OFF_FILLET) = 0 ;
virtual bool TrimStartAtParam( double dUTrim) = 0 ;
+1 -1
View File
@@ -19,7 +19,7 @@
class __declspec( novtable) ICurveArc : public ICurve
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Set( const Point3d& ptCen, const Vector3d& vtN, double dRad,
const Vector3d& vtS, double dAngCenDeg, double dDeltaN) = 0 ;
virtual bool Set( const Point3d& ptCen, const Vector3d& vtN, double dRad) = 0 ;
+1 -1
View File
@@ -21,7 +21,7 @@ class ICurveArc ;
class __declspec( novtable) ICurveBezier : public ICurve
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Init( int nDeg, bool bIsRational) = 0 ;
virtual bool SetControlPoint( int nInd, const Point3d& ptCtrl) = 0 ;
virtual bool SetControlPoint( int nInd, const Point3d& ptCtrl, double dW) = 0 ;
+1 -1
View File
@@ -19,7 +19,7 @@
class __declspec( novtable) ICurveComposite : public ICurve
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Clear( void) = 0 ;
virtual bool AddCurve( const ICurve& cCrv, bool bEndOrStart = true) = 0 ;
virtual bool AddCurve( ICurve* pCrv, bool bEndOrStart = true) = 0 ;
+1 -1
View File
@@ -19,7 +19,7 @@
class __declspec( novtable) ICurveLine : public ICurve
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Set( const Point3d& ptStart, const Point3d& ptEnd) = 0 ;
virtual bool SetPVL( const Point3d& ptStart, const Vector3d& vtDir, double dLen) = 0 ;
virtual bool SetPDL( const Point3d& ptStart, double dDirAngDeg, double dLen) = 0 ;
+1 -1
View File
@@ -26,7 +26,7 @@ const int SVT_DEL = - 2 ; // vertice o triangolo cancellato
class __declspec( novtable) ISurfTriMesh : public ISurf
{
public :
virtual bool Copy( const IGeoObj* pGObjSrc) = 0 ;
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
virtual bool Init( int nNumVert, int nNumTria) = 0 ;
virtual void SetLinearTolerance( double dLinTol) = 0 ;
virtual void SetSmoothAngle( double dSmoothAngDeg) = 0 ;