Virtual milling additivo
This commit is contained in:
+153
-83
@@ -263,18 +263,22 @@ VolZmap::AddIntervals( int nGrid, int nI, int nJ,
|
||||
if ( nGrid < 0 || nGrid > 2)
|
||||
return false ;
|
||||
|
||||
// Controllo che dMin < dMax
|
||||
if ( dMin > dMax)
|
||||
swap( dMin, dMax) ;
|
||||
|
||||
// Controllo che indici nI, nJ siano entro i limiti
|
||||
if ( nI < 0 && nI >= m_nNx[nGrid] &&
|
||||
nJ < 0 && nJ >= m_nNy[nGrid])
|
||||
return false ;
|
||||
|
||||
// Riporto le coordinate cicliche nell'ordine di partenza
|
||||
// Controllo che dMin < dMax
|
||||
Vector3d vtNmi = vtNMin ;
|
||||
Vector3d vtNma = vtNMax ;
|
||||
if ( dMin > dMax) {
|
||||
swap( dMin, dMax) ;
|
||||
swap( vtNmi, vtNma) ;
|
||||
}
|
||||
|
||||
// Riporto le coordinate cicliche nell'ordine di partenza
|
||||
/*Vector3d vtNmi = vtNMin ;
|
||||
Vector3d vtNma = vtNMax ;*/
|
||||
if ( nGrid == 1) {
|
||||
swap( vtNmi.x, vtNmi.z) ;
|
||||
swap( vtNmi.y, vtNmi.z) ;
|
||||
@@ -5478,13 +5482,13 @@ VolZmap::IntersLineCircSweptSurfCuttedByPlanes( const Point3d& ptLineP, const Ve
|
||||
// Escludo le soluzioni che non stanno dalla parte ammissibile rispetto al piano.
|
||||
bool bSecIntToTest = nRoot > 1 ;
|
||||
for ( int n = 0 ; n < int( vPlanesVec.size()) && nRoot > 0 ; ++ n) {
|
||||
double dDist1 = DistPointPlane(ptInt1, vPlanesVec[n]);
|
||||
//double dDist1 = DistPointPlane(ptInt1, vPlanesVec[n]);
|
||||
if ( DistPointPlane( ptInt1, vPlanesVec[n]) > 0 + EPS_SMALL/*DistPointPlane( ptInt1, vPlanesVec[n]) >= 0*/) {
|
||||
ptInt1 = ptInt2 ;
|
||||
vtN1 = vtN2 ;
|
||||
-- nRoot ;
|
||||
}
|
||||
double dDist2 = DistPointPlane(ptInt2, vPlanesVec[n]);
|
||||
//double dDist2 = DistPointPlane(ptInt2, vPlanesVec[n]);
|
||||
if ( bSecIntToTest && nRoot > 0 && DistPointPlane( ptInt2, vPlanesVec[n]) > 0 + EPS_SMALL/*bSecIntToTest && nRoot > 0 && DistPointPlane( ptInt2, vPlanesVec[n]) >= 0*/) {
|
||||
bSecIntToTest = false ;
|
||||
-- nRoot ;
|
||||
@@ -6384,8 +6388,8 @@ VolZmap::SurfCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
vParAndNormIntersVec.back().second = vtN2 ;
|
||||
if ( vCutEllipCylPlaneVecUp.size() == 1) {
|
||||
if ( SqDist( ptInt1, ptInt2) < EPS_SMALL) {
|
||||
double dLL1 = (ptInt1 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
double dLL2 = (ptInt2 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
//double dLL1 = (ptInt1 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
//double dLL2 = (ptInt2 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
if ( ( ptInt1 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN() > 0.)
|
||||
vParAndNormIntersVec.erase( vParAndNormIntersVec.begin() + int( vParAndNormIntersVec.size()) - 2) ;
|
||||
else if ( ( ptInt2 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN() > 0.)
|
||||
@@ -6408,9 +6412,8 @@ VolZmap::SurfCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE,
|
||||
vParAndNormIntersVec.back().second = vtN2 ;
|
||||
if ( vCutEllipCylPlaneVecDw.size() == 1) {
|
||||
if ( SqDist( ptInt1, ptInt2) < EPS_SMALL) {
|
||||
int bazinga2 = 0 ;
|
||||
double dLL1 = (ptInt1 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
double dLL2 = (ptInt2 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
//double dLL1 = (ptInt1 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
//double dLL2 = (ptInt2 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
if ( ( ptInt1 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN() > 0.)
|
||||
vParAndNormIntersVec.erase( vParAndNormIntersVec.begin() + int( vParAndNormIntersVec.size()) - 2) ;
|
||||
else if ( ( ptInt2 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN() > 0.)
|
||||
@@ -7002,9 +7005,8 @@ VolZmap::SurfConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
vParAndNormIntersVec.back().second = vtN2 ;
|
||||
if ( vCutEllipCylPlaneVecUp.size() == 1) {
|
||||
if ( SqDist( ptInt1, ptInt2) < EPS_SMALL) {
|
||||
int bazinga1 = 0 ;
|
||||
double dLL1 = (ptInt1 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
double dLL2 = (ptInt2 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
//double dLL1 = (ptInt1 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
//double dLL2 = (ptInt2 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN();
|
||||
if ( ( ptInt1 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN() > 0.)
|
||||
vParAndNormIntersVec.erase( vParAndNormIntersVec.begin() + int( vParAndNormIntersVec.size()) - 2) ;
|
||||
else if ( ( ptInt2 - vCutEllipCylPlaneVecUp[0].GetPoint()) * vCutEllipCylPlaneVecUp[0].GetVersN() > 0.)
|
||||
@@ -7027,9 +7029,8 @@ VolZmap::SurfConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c
|
||||
vParAndNormIntersVec.back().second = vtN2 ;
|
||||
if ( vCutEllipCylPlaneVecDw.size() == 1) {
|
||||
if ( SqDist( ptInt1, ptInt2) < EPS_SMALL) {
|
||||
int bazinga2 = 0 ;
|
||||
double dLL1 = (ptInt1 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
double dLL2 = (ptInt2 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
//double dLL1 = (ptInt1 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
//double dLL2 = (ptInt2 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN();
|
||||
if ( ( ptInt1 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN() > 0.)
|
||||
vParAndNormIntersVec.erase( vParAndNormIntersVec.begin() + int( vParAndNormIntersVec.size()) - 2) ;
|
||||
else if ( ( ptInt2 - vCutEllipCylPlaneVecDw[0].GetPoint()) * vCutEllipCylPlaneVecDw[0].GetVersN() > 0.)
|
||||
@@ -7680,7 +7681,6 @@ VolZmap::SurfSphericalShell_Milling( int nGrid, const Point3d& ptS, const Point3
|
||||
vtPlaneN *= - 1 ;
|
||||
double dC = vtDispVers * vtAx ;
|
||||
double dS = sqrt( max( 1 - dC * dC, 0.)) ;
|
||||
double dTempTest = (dC * dHei / dS);
|
||||
Point3d ptPlaneP = ptS - dHei * vtAx + ( dC * dHei / dS) * vtOrtDispVers ;
|
||||
vector<Plane3d> vEllipCylCutPlanesVec ;
|
||||
vEllipCylCutPlanesVec.emplace_back() ;
|
||||
@@ -7792,101 +7792,171 @@ VolZmap::SurfSphericalShell_Milling( int nGrid, const Point3d& ptS, const Point3
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
VolZmap::AddingMotion( int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtAx, double dHei, double dRad, double dCornerRad)
|
||||
VolZmap::AddingMotion( int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtAx/*, double dHei, double dRad, double dCornerRad*/)
|
||||
{
|
||||
// Dimensioni lineari dell'utensile
|
||||
double dHei = m_vTool[m_nCurrTool].GetHeigth() ;
|
||||
double dRad = m_vTool[m_nCurrTool].GetRadius() ;
|
||||
double dCornerRad = m_vTool[m_nCurrTool].GetCornRadius() ;
|
||||
|
||||
// Verifica sull'interferenza utensile Zmap
|
||||
int nStartI, nStartJ, nEndI, nEndJ ;
|
||||
if ( ! TestCompoBBox( nGrid, ptS, ptE, vtAx, dRad, dRad, dHei, nStartI, nStartJ, nEndI, nEndJ))
|
||||
return true ;
|
||||
|
||||
Vector3d vtV1 = ptE - ptS ;
|
||||
double dLen1 = vtV1.Len() ;
|
||||
vtV1 / dLen1 ;
|
||||
Vector3d vtV2 = Z_AX ^ vtV1 ;
|
||||
|
||||
if ( dCornerRad < EPS_SMALL) {
|
||||
// Mappa con asse Z ortogonale al moto
|
||||
|
||||
if ( nGrid == 0) {
|
||||
|
||||
Vector3d vtV1 = ptE - ptS ;
|
||||
double dLen1 = vtV1.Len() ;
|
||||
vtV1 / dLen1 ;
|
||||
Vector3d vtV2 = Z_AX ^ vtV1 ;
|
||||
|
||||
// Ciclo sui punti
|
||||
for ( int i = nStartI ; i <= nEndI ; ++ i) {
|
||||
for ( int j = nStartJ ; j <= nEndJ ; ++ j) {
|
||||
|
||||
//Point3d ptC( ( i + 0.5) * m_dStep, ( j + 0.5) * m_dStep, 0) ;
|
||||
Vector3d vtStC( ( i + 0.5) * m_dStep - ptS.x, ( j + 0.5) * m_dStep - ptS.y, 0) ;
|
||||
Vector3d vtEnC = vtStC - dLen1 * vtV1 ;
|
||||
|
||||
Vector3d vtC( ( i + 0.5) * m_dStep - ptS.x, ( j + 0.5) * m_dStep - ptS.y, 0) ;
|
||||
double dX1 = vtStC * vtV1 ;
|
||||
double dX2 = vtStC * vtV2 ;
|
||||
|
||||
double dX1 = vtC * vtV1 ;
|
||||
double dX2 = vtC * vtV2 ;
|
||||
|
||||
if ( dX1 > 0 && dX1 < dLen1 && abs( dX2) < dRad + EPS_SMALL) {
|
||||
AddIntervals(nGrid, i, j, min( ptS.z, ptS.z - vtAx.z * dHei), max( ptS.z, ptS.z - vtAx.z * dHei), -Z_AX, Z_AX) ;
|
||||
}
|
||||
else if ( sqrt( dX1 * dX1 + dX2 * dX2) < dRad + EPS_SMALL) {
|
||||
AddIntervals(nGrid, i, j, min( ptS.z, ptS.z - vtAx.z * dHei), max( ptS.z, ptS.z - vtAx.z * dHei), -Z_AX, Z_AX) ;
|
||||
}
|
||||
else if ( sqrt( ( dX1 - dLen1) * ( dX1 - dLen1) + dX2 * dX2) < dRad + EPS_SMALL) {
|
||||
AddIntervals(nGrid, i, j, min( ptS.z, ptS.z - vtAx.z * dHei), max( ptS.z, ptS.z - vtAx.z * dHei), -Z_AX, Z_AX) ;
|
||||
}
|
||||
if ( ( dX1 > 0 && dX1 < dLen1 && abs( dX2) < dRad) ||
|
||||
vtStC.SqLen() < dRad * dRad ||
|
||||
vtEnC.SqLen() < dRad * dRad) {
|
||||
AddIntervals( nGrid, i, j, ptS.z - dHei, ptS.z, - Z_AX, Z_AX) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Altre mappe
|
||||
else {
|
||||
|
||||
Point3d ptITip = ptS - vtAx * dHei ;
|
||||
|
||||
// Definizione terne vettoriali e sistemi di riferimento intrinseci al movimento
|
||||
Vector3d vtMove = ptE - ptS ;
|
||||
Vector3d vtMoveLong = ( vtMove * vtAx) * vtAx ;
|
||||
Vector3d vtMoveOrt = vtMove - vtMoveLong ;
|
||||
|
||||
Vector3d vtV1 = vtAx ;
|
||||
Vector3d vtV2 = vtMoveOrt ; vtV2.Normalize() ;
|
||||
Vector3d vtV3 = vtV1 ^ vtV2 ;
|
||||
Frame3d CylFrame ; CylFrame.Set( ptITip, vtV2, vtV3, vtV1) ;
|
||||
|
||||
// Parametri geometrici di moto e cilindro
|
||||
double dLongLen = vtMoveLong.Len() ;
|
||||
double dOrtLen = vtMoveOrt.Len() ;
|
||||
|
||||
Frame3d CylFrame, PolyFrame ;
|
||||
CylFrame.Set( ptS - dHei * vtAx, vtAx) ;
|
||||
PolyFrame.Set( ptS - dHei * vtAx, vtV1, vtAx ^ vtV1, vtAx) ;
|
||||
for ( int i = nStartI ; i <= nEndI ; ++ i) {
|
||||
for ( int j = nStartJ ; j <= nEndJ ; ++ j) {
|
||||
|
||||
Point3d ptC( ( i + 0.5) * m_dStep, ( j + 0.5) * m_dStep, 0) ;
|
||||
|
||||
|
||||
Point3d ptC( ( i + 0.5) * m_dStep - ptS.x, ( j + 0.5) * m_dStep - ptS.y, 0) ;
|
||||
|
||||
Point3d ptInt1, ptInt2 ;
|
||||
Vector3d vtN1, vtN2 ;
|
||||
|
||||
// Cilindro iniziale
|
||||
CylFrame.ChangeOrig( ptITip) ;
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, true, true, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, true, true,
|
||||
ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
AddIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, - vtN1, - vtN2) ;
|
||||
}
|
||||
|
||||
// Cilindro finale: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 + vtMove) ;
|
||||
if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, true, true, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
}
|
||||
|
||||
// Poliedro interno
|
||||
CylFrame.ChangeOrig( ptITip) ;
|
||||
if ( IntersLineMyPolyhedron( ptC, Z_AX, CylFrame, dOrtLen, 2 * dRad, dHei,
|
||||
dLongLen, ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ;
|
||||
|
||||
if ( IntersLineMyPolyhedron( ptC - dLen1 * vtV1, Z_AX, PolyFrame, dLen1, dRad, dHei, 0,
|
||||
ptInt1, vtN1, ptInt2, vtN2)) {
|
||||
AddIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, - vtN1, - vtN2) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
return true ;
|
||||
;
|
||||
}
|
||||
|
||||
return true ;
|
||||
|
||||
/*
|
||||
if ( nGrid == 0) {
|
||||
|
||||
Vector3d vtV1 = ptE - ptS ;
|
||||
double dLen1 = vtV1.Len() ;
|
||||
vtV1 / dLen1 ;
|
||||
Vector3d vtV2 = Z_AX ^ vtV1 ;
|
||||
|
||||
double dSqareCornerRadProj = dCornerRad * dCornerRad - 0.25 * dHei * dHei ;
|
||||
|
||||
if ( dSqareCornerRadProj > 0) {
|
||||
double dCylRad = dRad - dCornerRad + sqrt( dSquareCornerRadProj) ;
|
||||
// Ciclo sui punti
|
||||
for ( int i = nStartI ; i <= nEndI ; ++ i) {
|
||||
for ( int j = nStartJ ; j <= nEndJ ; ++ j) {
|
||||
|
||||
Vector3d vtStC( ( i + 0.5) * m_dStep - ptS.x, ( j + 0.5) * m_dStep - ptS.y, 0) ;
|
||||
Vector3d vtEnC = vtStC - dLen1 * vtV1 ;
|
||||
|
||||
double dX1 = vtC * vtV1 ;
|
||||
double dX2 = vtC * vtV2 ;
|
||||
|
||||
if ( ( dX1 > 0 && dX1 < dLen1 && abs( dX2) < dCylRad) ||
|
||||
vtStC.SqLen() < dCylRad * dCylRad ||
|
||||
vtEnC.SqLen() < dCylRad * dCylRad) {
|
||||
AddIntervals( nGrid, i, j, ptS.z - dHei, ptS.z, Z_AX, - Z_AX) ;
|
||||
}
|
||||
else if ( dX1 > 0 && dX1 < dLen1 && abs( dX2) < dRad) {
|
||||
double dr = dCornerRad - ( dRad - abs( dX2)) ;
|
||||
double dDeltaH = sqrt( max( dCornerRad * dCornerRad - dr * dr, 0)) ;
|
||||
Vector3d vtMinN = ( dX2 > 0 ? - dr : dr) * vtV2 + Vector3d( 0, 0, dDeltaH) ;
|
||||
Vector3d vtMaxN = ( dX2 > 0 ? - dr : dr) * vtV2 - Vector3d( 0, 0, dDeltaH) ;
|
||||
vtMinN.Normalize() ;
|
||||
vtMaxN.Normalize() ;
|
||||
AddIntervals( nGrid, i, j, ptS.z - 0.5 * dHei - dDeltaH, ptS.z - 0.5 * dHei + dDeltaH, vtMinN, vtMaxN) ;
|
||||
}
|
||||
else if ( vtStC.SqLen() < dRad * dRad || vtEnC.SqLen() < dRad * dRad) {
|
||||
Vector3d vtR = dX1 > 0 ? vtEnC : vtStC ;
|
||||
double dLenR = vtR.Len() ;
|
||||
vtR /= dLenR ;
|
||||
double dr = dCornerRad - ( dRad - dLenR) ;
|
||||
double dDeltaH = sqrt( max( dCornerRad * dCornerRad - dr * dr, 0)) ;
|
||||
Vector3d vtMinN = - dr * vtR + Vector3d( 0, 0, dDeltaH) ;
|
||||
Vector3d vtMaxN = - dr * vtR - Vector3d( 0, 0, dDeltaH) ;
|
||||
vtMinN.Normalize() ;
|
||||
vtMaxN.Normalize() ;
|
||||
AddIntervals( nGrid, i, j, ptS.z - 0.5 * dHei - dDeltaH, ptS.z - 0.5 * dHei + dDeltaH, vtMinN, vtMaxN) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
double dCylRad = dRad - dCornerRad ;
|
||||
// Ciclo sui punti
|
||||
for ( int i = nStartI ; i <= nEndI ; ++ i) {
|
||||
for ( int j = nStartJ ; j <= nEndJ ; ++ j) {
|
||||
|
||||
Vector3d vtStC( ( i + 0.5) * m_dStep - ptS.x, ( j + 0.5) * m_dStep - ptS.y, 0) ;
|
||||
Vector3d vtEnC = vtStC - dLen1 * vtV1 ;
|
||||
|
||||
double dX1 = vtC * vtV1 ;
|
||||
double dX2 = vtC * vtV2 ;
|
||||
|
||||
if ( ( dX1 > 0 && dX1 < dLen1 && abs( dX2) < dCylRad) ||
|
||||
vtStC.SqLen() < dCylRad * dCylRad ||
|
||||
vtEnC.SqLen() < dCylRad * dCylRad) {
|
||||
AddIntervals( nGrid, i, j, ptS.z - dHei, ptS.z, Z_AX, - Z_AX) ;
|
||||
}
|
||||
else if ( dX1 > 0 && dX1 < dLen1 && abs( dX2) < dRad) {
|
||||
double dr = abs( dX2) - dCylRad ;
|
||||
double dDeltaH = sqrt( max( dCornerRad * dCornerRad - dr * dr, 0)) ;
|
||||
Vector3d vtMinN = ( dX2 > 0 ? - dr : dr) * vtV2 + Vector3d( 0, 0, dDeltaH) ;
|
||||
Vector3d vtMaxN = ( dX2 > 0 ? - dr : dr) * vtV2 - Vector3d( 0, 0, dDeltaH) ;
|
||||
vtMinN.Normalize() ;
|
||||
vtMaxN.Normalize() ;
|
||||
AddIntervals( nGrid, i, j, ptS.z - dHei + dCornerRad - dDeltaH, ptS.z - dCornerRad + dDeltaH, vtMinN, vtMaxN) ;
|
||||
}
|
||||
else if ( vtStC.SqLen() < dRad * dRad || vtEnC.SqLen() < dRad * dRad) {
|
||||
Vector3d vtR = dX1 > 0 ? vtEnC : vtStC ;
|
||||
double dLenR = vtR.Len() ;
|
||||
vtR /= dLenR ;
|
||||
double dr = dLenR - dCylRad) ;
|
||||
double dDeltaH = sqrt( max( dCornerRad * dCornerRad - dr * dr, 0)) ;
|
||||
Vector3d vtMinN = - dr * vtR + Vector3d( 0, 0, dDeltaH) ;
|
||||
Vector3d vtMaxN = - dr * vtR - Vector3d( 0, 0, dDeltaH) ;
|
||||
vtMinN.Normalize() ;
|
||||
vtMaxN.Normalize() ;
|
||||
AddIntervals( nGrid, i, j, ptS.z - dHei + dCornerRad - dDeltaH, ptS.z - dCornerRad + dDeltaH, vtMinN, vtMaxN) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// ------------------------- BOUNDING BOX --------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user