EgtMachKernel :
- in svuotature gestione SpiralIn e SpiralOut ottimizzate per cerchi - in svuotatura aggiunti attacchi zigzag e elica e uscita Glide - in contornatura miglioramenti vari.
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "/EgtDev/Include/EGkGeoPoint3d.h"
|
||||
#include "/EgtDev/Include/EGkCurveLine.h"
|
||||
#include "/EgtDev/Include/EGkCurveArc.h"
|
||||
#include "/EgtDev/Include/EGkCurveComposite.h"
|
||||
#include "/EgtDev/Include/EGkGeomDB.h"
|
||||
#include "/EgtDev/Include/EgtPointerOwner.h"
|
||||
|
||||
@@ -300,6 +301,84 @@ Operation::AddArcMove( const Point3d& ptP, const Point3d& ptCen, double dAngCen,
|
||||
return nId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Operation::AddCurveMove( const ICurve* pCrv)
|
||||
{
|
||||
// verifico che la curva esista
|
||||
if ( pCrv == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// se linea
|
||||
if ( pCrv->GetType() == CRV_LINE) {
|
||||
const ICurveLine* pLine = GetCurveLine( pCrv) ;
|
||||
Point3d ptP3 = pLine->GetEnd() ;
|
||||
return AddLinearMove( ptP3) ;
|
||||
}
|
||||
// se arco semplice
|
||||
else if ( pCrv->GetType() == CRV_ARC && abs( GetCurveArc( pCrv)->GetAngCenter()) < MAX_ANG_CEN) {
|
||||
const ICurveArc* pArc = GetCurveArc( pCrv) ;
|
||||
Point3d ptCen = pArc->GetCenter() ;
|
||||
double dAngCen = pArc->GetAngCenter() ;
|
||||
Vector3d vtN = pArc->GetNormVersor() ;
|
||||
Point3d ptP3 ;
|
||||
pArc->GetEndPoint( ptP3) ;
|
||||
return AddArcMove( ptP3, ptCen, dAngCen, vtN) ;
|
||||
}
|
||||
// altrimenti
|
||||
else {
|
||||
// in ogni caso, converto in archi e rette
|
||||
PtrOwner<ICurveComposite> pCompo( CreateCurveComposite()) ;
|
||||
if ( ! pCompo->AddCurve( *pCrv))
|
||||
return GDB_ID_NULL ;
|
||||
// verifico archi
|
||||
VerifyArcs( pCompo) ;
|
||||
// emetto curve componenti
|
||||
int nFirstId = GDB_ID_NULL ;
|
||||
const ICurve* pCrv = pCompo->GetFirstCurve() ;
|
||||
while ( pCrv != nullptr) {
|
||||
if ( pCrv->GetType() == CRV_LINE) {
|
||||
const ICurveLine* pLine = GetCurveLine( pCrv) ;
|
||||
Point3d ptP3 = pLine->GetEnd() ;
|
||||
int nId = AddLinearMove( ptP3) ;
|
||||
if ( nId == GDB_ID_NULL)
|
||||
return GDB_ID_NULL ;
|
||||
if ( nFirstId == GDB_ID_NULL)
|
||||
nFirstId = nId ;
|
||||
}
|
||||
else if ( pCrv->GetType() == CRV_ARC) {
|
||||
const ICurveArc* pArc = GetCurveArc( pCrv) ;
|
||||
Point3d ptCen = pArc->GetCenter() ;
|
||||
double dAngCen = pArc->GetAngCenter() ;
|
||||
Vector3d vtN = pArc->GetNormVersor() ;
|
||||
Point3d ptP3 ;
|
||||
pArc->GetEndPoint( ptP3) ;
|
||||
int nId = AddArcMove( ptP3, ptCen, dAngCen, vtN) ;
|
||||
if ( nId == GDB_ID_NULL)
|
||||
return GDB_ID_NULL ;
|
||||
if ( nFirstId == GDB_ID_NULL)
|
||||
nFirstId = nId ;
|
||||
}
|
||||
else
|
||||
return GDB_ID_NULL ;
|
||||
pCrv = pCompo->GetNextCurve() ;
|
||||
}
|
||||
return nFirstId ;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int
|
||||
Operation::AddCurveMove( const ICurve* pCrv, const string& sName)
|
||||
{
|
||||
int nFirstId = AddCurveMove( pCrv) ;
|
||||
int nId = nFirstId ;
|
||||
while ( nId != GDB_ID_NULL) {
|
||||
m_pGeomDB->SetName( nId, sName) ;
|
||||
nId = m_pGeomDB->GetNext( nId) ;
|
||||
}
|
||||
return nFirstId ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::ResetMoveData( void)
|
||||
|
||||
Reference in New Issue
Block a user