EgtGeomKernel :
- aggiunte le chiamate per la creazione di una rigata come superficie di Bezier - aggiunta la funzione per la creazione del cono come Bezier ( ancora da implementare).
This commit is contained in:
+71
-52
@@ -1082,55 +1082,74 @@ GetSurfBezierByScrewing( const ICurve* pCurve, const Point3d& ptAx, const Vector
|
||||
// // restituisco la superficie
|
||||
// return Release( pSTM) ;
|
||||
//}
|
||||
//
|
||||
////-------------------------------------------------------------------------------
|
||||
//ISurfBezier*
|
||||
//GetSurfBezierRuled( const Point3d& ptP, const ICurve* pCurve, double dLinTol) // DA SISTEMARE - ancora copia della versione stm, cambia solo il nome della funzione//////////////////////
|
||||
//{
|
||||
// // verifica parametri
|
||||
// if ( &ptP == nullptr || pCurve == nullptr)
|
||||
// return nullptr ;
|
||||
// // calcolo la polilinea che approssima la curva
|
||||
// PolyLine PL ;
|
||||
// if ( ! pCurve->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL))
|
||||
// return nullptr ;
|
||||
// // creo e setto la superficie trimesh
|
||||
// PtrOwner<SurfTriMesh> pSTM( CreateBasicSurfTriMesh()) ;
|
||||
// if ( IsNull( pSTM) || ! pSTM->CreateByPointCurve( ptP, PL))
|
||||
// return nullptr ;
|
||||
// // salvo tolleranza lineare usata
|
||||
// pSTM->SetLinearTolerance( dLinTol) ;
|
||||
// // restituisco la superficie
|
||||
// return Release( pSTM) ;
|
||||
//}
|
||||
//
|
||||
////-------------------------------------------------------------------------------
|
||||
//ISurfBezier*
|
||||
//GetSurfBezierRuled( const ICurve* pCurve1, const ICurve* pCurve2, int nType, double dLinTol) // DA SISTEMARE - ancora copia della versione stm, cambia solo il nome della funzione//////////////////////
|
||||
//{
|
||||
// // verifica parametri
|
||||
// if ( pCurve1 == nullptr || pCurve2 == nullptr)
|
||||
// return nullptr ;
|
||||
//
|
||||
// // qui anziché fare le polyline converto le curve in bezier!
|
||||
// // SE NON HO LO STESSO NUMERO DI CURVE COME LO GESTISCO??
|
||||
//
|
||||
// // calcolo la polilinea che approssima la prima curva
|
||||
// PolyLine PL1 ;
|
||||
// if ( ! pCurve1->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL1))
|
||||
// return nullptr ;
|
||||
// // calcolo la polilinea che approssima la seconda curva
|
||||
// PolyLine PL2 ;
|
||||
// if ( ! pCurve2->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL2))
|
||||
// return nullptr ;
|
||||
//
|
||||
//
|
||||
// // creo e setto la superficie trimesh
|
||||
// PtrOwner<SurfBezier> pSbz( CreateBasicSurfBezier()) ;
|
||||
// if ( IsNull( pSbz) || ! pSbz->CreateByTwoCurves( PL1, PL2, nType))
|
||||
// return nullptr ;
|
||||
// //// salvo tolleranza lineare usata
|
||||
// //pSbz->SetLinearTolerance( dLinTol) ;
|
||||
// // restituisco la superficie
|
||||
// return Release( pSbz) ;
|
||||
//}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
ISurfBezier*
|
||||
GetSurfBezierRuled( const Point3d& ptP, const ICurve* pCurve, double dLinTol)
|
||||
{
|
||||
// verifica parametri
|
||||
if ( &ptP == nullptr || pCurve == nullptr)
|
||||
return nullptr ;
|
||||
//// calcolo la polilinea che approssima la curva
|
||||
//PolyLine PL ;
|
||||
//if ( ! pCurve->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL))
|
||||
// return nullptr ;
|
||||
// creo e setto la superficie trimesh
|
||||
PtrOwner<SurfBezier> pSbz( CreateBasicSurfBezier()) ;
|
||||
if ( IsNull( pSbz) || ! pSbz->CreateByPointCurve( ptP, pCurve))
|
||||
return nullptr ;
|
||||
//// salvo tolleranza lineare usata
|
||||
//pSbz->SetLinearTolerance( dLinTol) ;
|
||||
// restituisco la superficie
|
||||
return Release( pSbz) ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
ISurfBezier*
|
||||
GetSurfBezierRuled( const ICurve* pCurve1, const ICurve* pCurve2, int nType, double dLinTol)
|
||||
{
|
||||
// verifica parametri
|
||||
if ( pCurve1 == nullptr || pCurve2 == nullptr)
|
||||
return nullptr ;
|
||||
|
||||
// qui anziché fare le polyline converto le curve in bezier!
|
||||
// SE NON HO LO STESSO NUMERO DI CURVE COME LO GESTISCO??
|
||||
|
||||
//// calcolo la polilinea che approssima la prima curva
|
||||
//PolyLine PL1 ;
|
||||
//if ( ! pCurve1->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL1))
|
||||
// return nullptr ;
|
||||
//// calcolo la polilinea che approssima la seconda curva
|
||||
//PolyLine PL2 ;
|
||||
//if ( ! pCurve2->ApproxWithLines( dLinTol, ANG_TOL_STD_DEG, ICurve::APL_SPECIAL, PL2))
|
||||
// return nullptr ;
|
||||
|
||||
|
||||
// dLinTol servirà quando ci sarà la funzione ApproxWithCurveBezier
|
||||
// se la curva è già una bezier singola la tengo, sennò la converto // e la compo di bezier???
|
||||
PtrOwner<ICurveComposite> pCC1( CreateCurveComposite()) ;
|
||||
if ( pCurve1->GetType() != CRV_BEZIER)
|
||||
pCC1->AddCurve( CurveToBezierCurve( pCurve1)) ;
|
||||
else
|
||||
pCC1->AddCurve( pCurve1->Clone()) ;
|
||||
if ( IsNull( pCC1) || ! pCC1->IsValid())
|
||||
return false ;
|
||||
|
||||
// se la curva è già una bezier singola la tengo, sennò la converto
|
||||
PtrOwner<ICurveComposite> pCC2( CreateCurveComposite()) ;
|
||||
if ( pCurve2->GetType() != CRV_BEZIER)
|
||||
pCC2->AddCurve( CurveToBezierCurve( pCurve2)) ;
|
||||
else
|
||||
pCC2->AddCurve( pCurve2->Clone()) ;
|
||||
if ( IsNull( pCC2) || ! pCC2->IsValid())
|
||||
return false ;
|
||||
|
||||
// creo e setto la superficie trimesh
|
||||
PtrOwner<SurfBezier> pSbz( CreateBasicSurfBezier()) ;
|
||||
if ( IsNull( pSbz) || ! pSbz->CreateByTwoCurves( pCC1, pCC2, nType))
|
||||
return nullptr ;
|
||||
//// salvo tolleranza lineare usata
|
||||
//pSbz->SetLinearTolerance( dLinTol) ;
|
||||
// restituisco la superficie
|
||||
return Release( pSbz) ;
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "SurfTriMesh.h"
|
||||
#include "SurfBezier.h"
|
||||
#include "/EgtDev/Include/EGkSbzStandard.h"
|
||||
#include "/EgtDev/Include/EGkSbzFromCurves.h"
|
||||
|
||||
using namespace std ;
|
||||
|
||||
@@ -78,3 +79,35 @@ GetSurfBezierSphere( const Point3d& ptCenter, double dR)
|
||||
|
||||
return Release( pSrfBez) ;
|
||||
}
|
||||
|
||||
////-------------------------------------------------------------------------------
|
||||
//ISurfBezier*
|
||||
//GetSurfBezierCone( const Point3d& ptCenter, double dRadius, const Vector3d& dHeight)
|
||||
//{
|
||||
// // le dimensioni devono essere significative
|
||||
// if ( dRadius < EPS_SMALL || abs( dHeight) < EPS_SMALL)
|
||||
// return nullptr ;
|
||||
// // creo la circonferenza di base
|
||||
// CurveArc cArc ;
|
||||
// cArc.Set( ORIG, Z_AX, dRadius) ;
|
||||
// if ( dHeight < 0)
|
||||
// cArc.Invert() ;
|
||||
// // punto di vertice
|
||||
// Point3d ptTip( 0, 0, dHeight) ;
|
||||
// // creo la superficie laterale del cono
|
||||
// PtrOwner<ISurfBezier> pSbz( GetSurfBezierRuled( ptTip, &cArc)) ;
|
||||
// if ( IsNull( pSbz))
|
||||
// return nullptr ;
|
||||
//
|
||||
// //// creo la superficie di base e la inverto
|
||||
// //PtrOwner<ISurfTriMesh> pSTM1( GetSurfTriMeshByFlatContour( &cArc, dLinTol)) ;
|
||||
// //if ( IsNull( pSTM1))
|
||||
// // return nullptr ;
|
||||
// //pSTM1->Invert() ;
|
||||
// //// la unisco alla superficie del fianco
|
||||
// //if ( ! pSTM->DoSewing( *pSTM1))
|
||||
// // return nullptr ;
|
||||
//
|
||||
// // restituisco la superficie
|
||||
// return Release( pSbz) ;
|
||||
//}
|
||||
|
||||
Reference in New Issue
Block a user