EgtGeomKernel 2.1c1 :
- correzioni a Zmap per posizioni tappi su estremi cilindri e coni.
This commit is contained in:
+45
-54
@@ -1,7 +1,7 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2015-2016
|
||||
// EgalTech 2015-2019
|
||||
//----------------------------------------------------------------------------
|
||||
// File : VolZmap.cpp Data : 22.01.15 Versione : 1.6a4
|
||||
// File : VolZmap.cpp Data : 01.03.19 Versione : 2.1c1
|
||||
// Contenuto : Implementazione della classe Volume Zmap (tre griglie)
|
||||
//
|
||||
//
|
||||
@@ -2983,13 +2983,13 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con
|
||||
dHeight = abs( ptStart.y - ptEnd.y) ;
|
||||
if ( dHeight > EPS_SMALL) {
|
||||
// verifiche curva precedente per eventuale tappo sopra
|
||||
bool bTapT = false ;
|
||||
bool bTapT = true ;
|
||||
if ( pPrevCurve != nullptr && pPrevCurve->GetType() == CRV_LINE) {
|
||||
const ICurveLine* pOthLine = GetCurveLine( pPrevCurve) ;
|
||||
Point3d ptOthStart = pOthLine->GetStart() ;
|
||||
Point3d ptOthEnd = pOthLine->GetEnd() ;
|
||||
if ( abs( ptOthStart.y - ptOthEnd.y) < EPS_SMALL && ptOthStart.x < ptOthEnd.x)
|
||||
bTapT = true ;
|
||||
bTapT = false ;
|
||||
}
|
||||
// verifiche curva successiva per eventuale tappo sotto
|
||||
bool bTapB = false ;
|
||||
@@ -2999,7 +2999,7 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con
|
||||
Point3d ptOthStart = pOthLine->GetStart() ;
|
||||
Point3d ptOthEnd = pOthLine->GetEnd() ;
|
||||
if ( abs( ptOthStart.y - ptOthEnd.y) < EPS_SMALL && ptOthStart.x > ptOthEnd.x)
|
||||
bTapB = true ;
|
||||
bTapB = false ;
|
||||
}
|
||||
// Se X costante, è un cilindro
|
||||
if ( abs( ptStart.x - ptEnd.x) < EPS_SMALL) {
|
||||
@@ -3775,8 +3775,6 @@ VolZmap::CompConus_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
double dConeMaxH = ( ( dMaxRad * dHei) / dDeltaR) ;
|
||||
double dConeMinH = dConeMaxH - dHei ;
|
||||
|
||||
bool bTapCylEn = bTapB ;
|
||||
|
||||
Point3d ptVertex = ( vtToolDir * ( ptE - ptS) > 0 ? ptS : ptE) - vtToolDir * dConeMaxH ;
|
||||
|
||||
// Sistemi di riferimento del cono e del cilindro
|
||||
@@ -3798,13 +3796,13 @@ VolZmap::CompConus_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
Vector3d vtN1, vtN2 ;
|
||||
|
||||
// Cilindro
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dH, dMaxRad, true, bTapCylEn,
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dH, dMaxRad, true, bTapT,
|
||||
ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Cono
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dConeMinH, dConeMaxH, bTapT, true,
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dConeMinH, dConeMaxH, bTapB, true,
|
||||
ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
@@ -3892,13 +3890,6 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
double dLongLen = vtMoveLong.Len() ;
|
||||
double dOrtLen = vtMoveOrt.Len() ;
|
||||
|
||||
// Variabili booleane per i tappi
|
||||
Vector3d vtUmv = vtMove ; vtUmv.Normalize() ;
|
||||
bool bCylSt = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ;
|
||||
bool bCylEn = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ;
|
||||
bool bElpsB = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ;
|
||||
bool bElpsT = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ;
|
||||
|
||||
for ( int i = nStartI ; i <= nEndI ; ++ i) {
|
||||
for ( int j = nStartJ ; j <= nEndJ ; ++ j) {
|
||||
|
||||
@@ -3909,7 +3900,7 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
|
||||
// Cilindro iniziale
|
||||
CylFrame.ChangeOrig( ptITip) ;
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bCylSt, bCylEn, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
@@ -3917,7 +3908,7 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
// del sistema di riferimento, quindi usiamo lo stesso sistema sommando a ptC
|
||||
// il vettore che congiunge le due origini.
|
||||
CylFrame.ChangeOrig( ptITip + vtMove) ;
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bCylSt, bCylEn, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
@@ -3928,21 +3919,23 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Cilindro ellittico di punta
|
||||
CylFrame.ChangeOrig( ptITip) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen,
|
||||
bElpsT, bElpsT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
// Se movimento non ortogonale all'asse cilindro ellittico di punta
|
||||
if ( dOrtLen > EPS_SMALL) {
|
||||
CylFrame.ChangeOrig( ptITip) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen,
|
||||
bTapB, true, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Cilindro ellittico di base: L'unica differenza rispetto a prima è l'origine
|
||||
// del sistema di riferimento, quindi usiamo lo stesso sistema sommando a ptC
|
||||
// il vettore che congiunge le due origini.
|
||||
CylFrame.ChangeOrig( ptITip + dHei * vtV1) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen,
|
||||
true, bTapT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Cilindro ellittico di base: L'unica differenza rispetto a prima è l'origine
|
||||
// del sistema di riferimento, quindi usiamo lo stesso sistema sommando a ptC
|
||||
// il vettore che congiunge le due origini.
|
||||
CylFrame.ChangeOrig( ptITip + dHei * vtV1) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen,
|
||||
bElpsB, bElpsB, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
@@ -4030,12 +4023,6 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
|
||||
Vector3d vtUmv = vtMove ; vtUmv.Normalize() ;
|
||||
|
||||
// Variabili booleane per i tappi
|
||||
bool bConeT = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ;
|
||||
bool bConeB = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ;
|
||||
bool bElpsB = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ;
|
||||
bool bElpsT = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ;
|
||||
|
||||
if ( dRatio * dTan <= 1) {
|
||||
|
||||
for ( int i = nStartI ; i <= nEndI ; ++ i) {
|
||||
@@ -4048,13 +4035,13 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
|
||||
// Cono iniziale
|
||||
ConusFrame.ChangeOrig( ptV) ;
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bConeT, bConeB, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Cono finale
|
||||
ConusFrame.ChangeOrig( ptV + vtMove) ;
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bConeT, bConeB, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
@@ -4191,18 +4178,22 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Traslazione ellisse di punta
|
||||
ConusFrame.ChangeOrig( ptV + vtV1 * dl) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMinRad, dLongLen, dOrtLen,
|
||||
bElpsT, bElpsT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Traslazione ellisse di base
|
||||
ConusFrame.ChangeOrig( ptV + vtV1 * dL) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMaxRad, dLongLen, dOrtLen,
|
||||
bElpsB, bElpsB, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
// Se movimento non ortogonale all'asse sottraggo i cilindri ellittici
|
||||
if ( dOrtLen > EPS_SMALL) {
|
||||
|
||||
// Traslazione ellisse di punta
|
||||
ConusFrame.ChangeOrig( ptV + vtV1 * dl) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMinRad, dLongLen, dOrtLen,
|
||||
bTapB, true, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Traslazione ellisse di base
|
||||
ConusFrame.ChangeOrig( ptV + vtV1 * dL) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMaxRad, dLongLen, dOrtLen,
|
||||
true, bTapT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4220,14 +4211,14 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
|
||||
// Cono
|
||||
ConusFrame.ChangeOrig( ptV) ;
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bConeT, bConeB, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bTapB, true, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Traslazione ellisse
|
||||
ConusFrame.ChangeOrig( ptV + vtV1 * dL) ;
|
||||
if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMaxRad, dLongLen, dOrtLen,
|
||||
bConeB, bConeB, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
true, bTapT, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user