Merge commit '0c3ad1ebe5a0fec28823a7a0608055f631ec93cc' into feature/SvuotatureConIsole

This commit is contained in:
SaraP
2021-09-08 10:23:48 +02:00
4 changed files with 72 additions and 33 deletions
BIN
View File
Binary file not shown.
+13 -3
View File
@@ -1840,7 +1840,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
dSafeZ = dUnsafeZ ;
}
else {
for ( int i = 1 ; i <= 4 ; ++ i) {
for ( int i = 1 ; i <= 3 ; ++ i) {
double dTestSafeZ = ( dUnsafeZ + dSafeZ) / 2 ;
vAxVal2[2] = dTestSafeZ ;
vAxIni2[2] = dTestSafeZ ;
@@ -1853,6 +1853,16 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
}
}
}
// se necessario, riprovo appena prima di Zmax
if ( ! bPartRise) {
double dOffsZ = 5 * ( bZHomeDown ? 1 : -1) ;
vAxVal2[2] = dHomeZ + dOffsZ ;
vAxIni2[2] = dHomeZ + dOffsZ ;
if ( TestCollisionAvoid( vAxVal2, vAxIni2)) {
bPartRise = true ;
dSafeZ = dHomeZ + dOffsZ ;
}
}
if ( ! bPartRise) {
// cancello eventuale risalita parziale della lavorazione precedente
pPrevOp->RemoveRise() ;
@@ -2035,7 +2045,7 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation*
// riprovo con una Z intermedia
double dSafeZ = dHomeZ ;
double dUnsafeZ = dTopZ ;
for ( int i = 1 ; i <= 4 ; ++ i) {
for ( int i = 1 ; i <= 3 ; ++ i) {
double dTestSafeZ = ( dUnsafeZ + dSafeZ) / 2 ;
vAxPrevTmp[2] = dTestSafeZ ;
vAxCurrTmp[2] = dTestSafeZ ;
@@ -2656,7 +2666,7 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
INTVECTOR vCollId ;
pMch->GetCurrHeadCollGroups( vCollId) ;
// distanza di sicurezza
const double TOL_SAFEDIST = 10.0 ;
const double TOL_SAFEDIST = 5.0 ;
const double MIN_SAFEDIST = 10.0 ;
double dSafeDist = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() ;
dSafeDist = max( dSafeDist - TOL_SAFEDIST, MIN_SAFEDIST) ;
+16 -11
View File
@@ -2090,8 +2090,9 @@ Pocketing::AddZigZag( const ISurfFlatRegion* pSrf, const Vector3d& vtTool, const
double dStElev ;
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev))
dStElev = j * dStep ;
bool bUnderRaw = GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw == m_bAboveHead)
bool bUnderRaw = m_bAboveHead && ! m_bAggrBottom &&
GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw)
dStElev = max( dStElev, j * dStep) ;
dStElev -= ( ptP1 - ptStart) * vtExtr ;
// se inizio, approccio globale al punto iniziale
@@ -2246,7 +2247,7 @@ Pocketing::AddZigZag( const ISurfFlatRegion* pSrf, const Vector3d& vtTool, const
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev))
dStElev = dElev ;
bool bUnderStart = m_bAboveHead && GetPointUnderRaw( ptP1, vtTool, 0,
GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderStart)
dStElev = max( dStElev, dElev) ;
dStElev -= ( ptP1 - ptStart) * vtExtr ;
@@ -2672,8 +2673,9 @@ Pocketing::AddOneWay( const ISurfFlatRegion* pSrf, const Vector3d& vtTool, const
double dStElev ;
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev))
dStElev = dStep ;
bool bUnderRaw = GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw == m_bAboveHead)
bool bUnderRaw = m_bAboveHead && ! m_bAggrBottom &&
GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw)
dStElev = max( dStElev, dStep) ;
dStElev -= ( ptP1 - ptStart) * vtExtr ;
// se attacco a zigzag o a spirale o a scivolo, l'elevazione va nell'attacco
@@ -2828,8 +2830,9 @@ Pocketing::AddOneWay( const ISurfFlatRegion* pSrf, const Vector3d& vtTool, const
double dStElev ;
if ( ! GetElevation( m_nPhase, ptS - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev))
dStElev = j * dStep ;
bool bUnderRaw = GetPointUnderRaw( ptP, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw == m_bAboveHead)
bool bUnderRaw = m_bAboveHead && ! m_bAggrBottom &&
GetPointUnderRaw( ptP, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw)
dStElev = max( dStElev, j * dStep) ;
dStElev -= ( ptP - ptS) * vtExtr ;
// sempre approccio di collegamento
@@ -2977,8 +2980,9 @@ Pocketing::AddSpiralIn( const ISurfFlatRegion* pSrf, const Vector3d& vtTool, con
double dStElev ;
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev))
dStElev = dStep ;
bool bUnderRaw = GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw == m_bAboveHead)
bool bUnderRaw = m_bAboveHead && ! m_bAggrBottom &&
GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw)
dStElev = max( dStElev, dStep) ;
dStElev -= ( ptP1 - ptStart) * vtExtr ;
@@ -3160,8 +3164,9 @@ Pocketing::AddSpiralOut( const ISurfFlatRegion* pSrf, const Vector3d& vtTool, co
double dStElev ;
if ( ! GetElevation( m_nPhase, ptStart - 10 * EPS_SMALL * vtTool, vtTool, GetRadiusForStartEndElevation(), vtTool, dStElev))
dStElev = dStep ;
bool bUnderRaw = GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw == m_bAboveHead)
bool bUnderRaw = m_bAboveHead && ! m_bAggrBottom &&
GetPointUnderRaw( ptP1, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, dStElev) ;
if ( bUnderRaw)
dStElev = max( dStElev, dStep) ;
dStElev -= ( ptP1 - ptStart) * vtExtr ;
// se attacco a zigzag o a spirale o a scivolo, l'elevazione va nell'attacco
+43 -19
View File
@@ -840,28 +840,39 @@ bool
SurfFinishing::VerifyGeometry( SelData Id, int& nSubs)
{
// ammessi : curve o superfici
// per ora accetto solo curve
const ICurve* pCurve = nullptr ;
const IGeoObj* pGObj = m_pGeomDB->GetGeoObj( Id.nId) ;
// se direttamente la curva
if ( Id.nSub == SEL_SUB_ALL) {
pCurve = ::GetCurve( pGObj) ;
if ( pCurve != nullptr) {
if ( pCurve->GetType() == CRV_COMPO)
nSubs = ::GetCurveComposite( pCurve)->GetCurveCount() ;
else
nSubs = 0 ;
if ( pGObj == nullptr)
return false ;
// se curva
if ( ( pGObj->GetType() & GEO_CURVE) != 0) {
const ICurve* pCurve = nullptr ;
// se direttamente la curva
if ( Id.nSub == SEL_SUB_ALL) {
pCurve = ::GetCurve( pGObj) ;
if ( pCurve != nullptr) {
if ( pCurve->GetType() == CRV_COMPO)
nSubs = ::GetCurveComposite( pCurve)->GetCurveCount() ;
else
nSubs = 0 ;
}
}
// altrimenti sottocurva di composita
else {
const ICurveComposite* pCompo = GetCurveComposite( pGObj) ;
if ( pCompo != nullptr)
pCurve = pCompo->GetCurve( Id.nSub) ;
nSubs = 0 ;
}
return ( pCurve != nullptr) ;
}
// altrimenti sottocurva di composita
else {
const ICurveComposite* pCompo = GetCurveComposite( pGObj) ;
if ( pCompo != nullptr)
pCurve = pCompo->GetCurve( Id.nSub) ;
nSubs = 0 ;
// se altrimenti è superficie trimesh
else if ( pGObj->GetType() == SRF_TRIMESH) {
const ISurfTriMesh* pSurf = ::GetSurfTriMesh( pGObj) ;
return ( pSurf != nullptr && pSurf->GetFacetCount() >= 1) ;
}
return ( pCurve != nullptr) ;
// altrimenti errore
else
return false ;
}
//----------------------------------------------------------------------------
@@ -921,6 +932,10 @@ SurfFinishing::GetCurves( SelData Id, ICURVEPLIST& lstPC)
lstPC.emplace_back( Release( pCurve)) ;
return true ;
}
// se altrimenti superficie
else if ( pGObj->GetType() == SRF_TRIMESH)
return true ;
// altrimenti errore
else
return false ;
}
@@ -1222,7 +1237,16 @@ SurfFinishing::GetActiveSurfaces( INTVECTOR& vSurfId) const
// verifiche
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// ciclo sui grezzi attivi nella fase
// cerco tra gli oggetti selezionati
for ( const auto& Id : m_vId) {
int nEntId = Id.nId ;
if ( m_pGeomDB->GetGeoType( nEntId) == SRF_TRIMESH)
vSurfId.emplace_back( nEntId) ;
}
// se trovate superfici, considero solo queste ed esco
if ( ! vSurfId.empty())
return true ;
// altrimenti considero tutte le superfici dei pezzi nei grezzi attivi della fase
int nRawId = m_pMchMgr->GetFirstRawPart() ;
while ( nRawId != GDB_ID_NULL) {
if ( m_pMchMgr->VerifyRawPartPhase(nRawId, m_nPhase)) {