EgtGeomKernel 1.5k5 :
- sviluppo linee tangenti e perpendicolari a curve.
This commit is contained in:
+27
-28
@@ -26,7 +26,7 @@
|
||||
#include "/EgtDev/Include/EgkCurveLine.h"
|
||||
#include "/EgtDev/Include/EgkCurveAux.h"
|
||||
#include "/EgtDev/Include/EgkLinePntTgCurve.h"
|
||||
#include "/EgtDev/Include/EgkLineTgTwoArcs.h"
|
||||
#include "/EgtDev/Include/EgkLineTgTwoCurves.h"
|
||||
#include "/EgtDev/Include/EgkCurveArc.h"
|
||||
#include "/EgtDev/Include/EgkArcXxTgArc.h"
|
||||
#include "/EgtDev/Include/EgkCurveBezier.h"
|
||||
@@ -761,61 +761,60 @@ GdbExecutor::CurveLinePointTgCurve( const STRVECTOR& vsParams)
|
||||
bool
|
||||
GdbExecutor::CurveLineTgTwoArcs( const STRVECTOR& vsParams)
|
||||
{
|
||||
// 6 parametri : Id, IdParent, IdArc1, ptNear1, IdArc2, ptNear2
|
||||
// 6 parametri : Id, IdParent, IdCrv1, ptNear1, IdCrv2, ptNear2
|
||||
if ( vsParams.size() != 6)
|
||||
return false ;
|
||||
// recupero il riferimento del gruppo destinazione
|
||||
Frame3d frDest ;
|
||||
if ( ! m_pGDB->GetGroupGlobFrame( GetIdParam( vsParams[1]), frDest))
|
||||
return false ;
|
||||
// recupero l'identificativo del primo arco
|
||||
// recupero l'identificativo della prima curva
|
||||
int nId1 ;
|
||||
if ( ( nId1 = GetIdParam( vsParams[2])) == CMD_ID_ERROR)
|
||||
return false ;
|
||||
// recupero il riferimento del primo arco
|
||||
Frame3d frArc1 ;
|
||||
if ( ! m_pGDB->GetGlobFrame( nId1, frArc1))
|
||||
// recupero il riferimento della prima curva
|
||||
Frame3d frCrv1 ;
|
||||
if ( ! m_pGDB->GetGlobFrame( nId1, frCrv1))
|
||||
return false ;
|
||||
// recupero il primo arco
|
||||
const ICurveArc* pArc1 = GetCurveArc( m_pGDB->GetGeoObj( nId1)) ;
|
||||
if ( pArc1 == nullptr)
|
||||
// recupero la prima curva
|
||||
const ICurve* pCrv1 = GetCurve( m_pGDB->GetGeoObj( nId1)) ;
|
||||
if ( pCrv1 == nullptr)
|
||||
return false ;
|
||||
// recupero il primo punto vicino e lo porto nel riferimento del primo arco
|
||||
// recupero il primo punto vicino e lo porto nel riferimento della prima curva
|
||||
Point3d ptNear1 ;
|
||||
if ( ! GetPointParam( vsParams[3], frDest, ptNear1))
|
||||
return false ;
|
||||
Point3d ptN1loc = ptNear1 ;
|
||||
ptN1loc.LocToLoc( frDest, frArc1) ;
|
||||
// recupero l'identificativo del secondo arco
|
||||
ptN1loc.LocToLoc( frDest, frCrv1) ;
|
||||
// recupero l'identificativo della seconda curva
|
||||
int nId2 ;
|
||||
if ( ( nId2 = GetIdParam( vsParams[4])) == CMD_ID_ERROR)
|
||||
return false ;
|
||||
// recupero il riferimento del secondo arco
|
||||
Frame3d frArc2 ;
|
||||
if ( ! m_pGDB->GetGlobFrame( nId2, frArc2))
|
||||
// recupero il riferimento della seconda curva
|
||||
Frame3d frCrv2 ;
|
||||
if ( ! m_pGDB->GetGlobFrame( nId2, frCrv2))
|
||||
return false ;
|
||||
// recupero il secondo arco
|
||||
const ICurveArc* pArc2 = GetCurveArc( m_pGDB->GetGeoObj( nId2)) ;
|
||||
if ( pArc2 == nullptr)
|
||||
// recupero la seconda curva
|
||||
const ICurve* pCrv2 = GetCurve( m_pGDB->GetGeoObj( nId2)) ;
|
||||
if ( pCrv2 == nullptr)
|
||||
return false ;
|
||||
// porto il secondo arco nel riferimento del primo
|
||||
PtrOwner<ICurveArc> pArc2Loc( CreateCurveArc()) ;
|
||||
if ( IsNull( pArc2Loc))
|
||||
// porto la seconda curva nel riferimento della prima
|
||||
PtrOwner<ICurve> pCrv2Loc( pCrv2->Clone()) ;
|
||||
if ( IsNull( pCrv2Loc))
|
||||
return false ;
|
||||
pArc2Loc->CopyFrom( pArc2) ;
|
||||
pArc2Loc->LocToLoc( frArc2, frArc1) ;
|
||||
// recupero il secondo punto vicino e lo porto nel riferimento del primo arco
|
||||
pCrv2Loc->LocToLoc( frCrv2, frCrv1) ;
|
||||
// recupero il secondo punto vicino e lo porto nel riferimento della prima curva
|
||||
Point3d ptNear2 ;
|
||||
if ( ! GetPointParam( vsParams[5], frDest, ptNear2))
|
||||
return false ;
|
||||
Point3d ptN2loc = ptNear2 ;
|
||||
ptN2loc.LocToLoc( frDest, frArc1) ;
|
||||
// calcolo la retta tangente ai due archi
|
||||
ICurveLine* pCrvLine = GetLineTgTwoArcs( *pArc1, ptN1loc, *pArc2, ptN2loc) ;
|
||||
ptN2loc.LocToLoc( frDest, frCrv1) ;
|
||||
// calcolo la retta tangente alle due curve
|
||||
ICurveLine* pCrvLine = GetLineTgTwoCurves( *pCrv1, ptN1loc, *pCrv2, ptN2loc) ;
|
||||
if ( pCrvLine == nullptr)
|
||||
return false ;
|
||||
// porto la linea nel riferimento del gruppo destinazione
|
||||
pCrvLine->LocToLoc( frArc1, frDest) ;
|
||||
pCrvLine->LocToLoc( frCrv1, frDest) ;
|
||||
// inserisco la linea nel DB
|
||||
return AddGeoObj( vsParams[0], vsParams[1], pCrvLine) ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user