EgtGeomKernel :
- modifiche a Zmap per virtual-additive - modifiche a Frame3d per Set con i tre assi che ora aggiusta errori molto piccoli.
This commit is contained in:
@@ -583,34 +583,78 @@ Tool::SetChiselTool( const string& sToolName, double dH, double dW, double dTh,
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Tool::SetAdditiveTool( const std::string& sToolName, double dH, double dR, double dRC, int nToolNum)
|
||||
Tool::SetAdditiveTool( const std::string& sToolName, double dH, double dR, double dRc, int nToolNum)
|
||||
{
|
||||
// Impostazioni generali
|
||||
// Impostazioni generali
|
||||
m_sName = sToolName ;
|
||||
m_nCurrentNum = nToolNum ;
|
||||
m_nType = UNDEF ;
|
||||
m_Outline.Clear() ;
|
||||
m_ArcLineApprox.Clear() ;
|
||||
|
||||
// verifica sulle minime dimensioni globali
|
||||
if ( dH < EPS_SMALL || dR < EPS_SMALL || dRC < - EPS_SMALL)
|
||||
// Verifica sulle dimensioni
|
||||
if ( dH < 10 * EPS_SMALL || dR < 10 * EPS_SMALL || dRc < - EPS_SMALL || dR < dRc - EPS_SMALL)
|
||||
return false ;
|
||||
|
||||
// Assegnazione dati geometrici principali
|
||||
m_dHeight = dH ;
|
||||
m_dRadius = dR ;
|
||||
m_dRCorner = dRC ;
|
||||
m_dRCorner = min( dRc, dR) ;
|
||||
if ( m_dRCorner < 10 * EPS_SMALL)
|
||||
m_dRCorner = 0 ;
|
||||
m_dTipHeight = 0 ;
|
||||
m_dTipRadius = 0 ;
|
||||
m_dRefRadius = 0 ;
|
||||
m_dCutterHeight = dH ;
|
||||
|
||||
bool bToolDefined = true ;
|
||||
|
||||
double dSquareCornerRadProj = m_dRCorner * m_dRCorner - 0.25 * m_dHeight * m_dHeight ;
|
||||
// Utensile sfiancato
|
||||
if ( dSquareCornerRadProj > 0) {
|
||||
// Utensile cilindrico con eventuale raggio corner (al limite sferico)
|
||||
if ( m_dRCorner <= m_dHeight / 2) {
|
||||
// Se Cilindrico
|
||||
if ( m_dRCorner < EPS_SMALL) {
|
||||
// inizio
|
||||
m_Outline.AddPoint( Point3d( 0, 0, 0)) ;
|
||||
// segmento orizzontale in alto
|
||||
m_Outline.AddLine( Point3d( m_dRadius, 0, 0)) ;
|
||||
m_Outline.SetCurveTempProp( 0, 1, 1) ;
|
||||
// segmento verticale
|
||||
m_Outline.AddLine( Point3d( m_dRadius, -m_dHeight, 0)) ;
|
||||
m_Outline.SetCurveTempProp( 1, 1, 1) ;
|
||||
// segmento orizzontale in basso
|
||||
m_Outline.AddLine( Point3d( 0, -m_dHeight, 0)) ;
|
||||
m_Outline.SetCurveTempProp( 2, 1, 1) ;
|
||||
}
|
||||
// Generico
|
||||
else {
|
||||
// inizio
|
||||
m_Outline.AddPoint( Point3d( 0, 0, 0)) ;
|
||||
int nInd = -1 ;
|
||||
// eventuale segmento orizzontale in alto
|
||||
if ( m_Outline.AddLine( Point3d( m_dRadius - m_dRCorner, 0, 0)))
|
||||
m_Outline.SetCurveTempProp( ++ nInd, 1, 1) ;
|
||||
// raggio corner in alto
|
||||
CurveArc cvArc ;
|
||||
cvArc.SetC2P( Point3d( m_dRadius - m_dRCorner, -m_dRCorner, 0), Point3d( m_dRadius - m_dRCorner, 0, 0), Point3d( m_dRadius, -m_dRCorner, 0)) ;
|
||||
m_Outline.AddCurve( cvArc, true, 2 * EPS_SMALL) ;
|
||||
m_Outline.SetCurveTempProp( ++ nInd, 1, 1) ;
|
||||
// eventuale segmento verticale
|
||||
if ( m_Outline.AddLine( Point3d( m_dRadius, -m_dHeight + m_dRCorner, 0)))
|
||||
m_Outline.SetCurveTempProp( ++ nInd, 1, 1) ;
|
||||
// raggio corner in basso
|
||||
cvArc.SetC2P( Point3d( m_dRadius - m_dRCorner, -m_dHeight + m_dRCorner, 0), Point3d( m_dRadius, -m_dHeight + m_dRCorner, 0), Point3d( m_dRadius - m_dRCorner, -m_dHeight, 0)) ;
|
||||
m_Outline.AddCurve( cvArc, true, 2 * EPS_SMALL) ;
|
||||
m_Outline.SetCurveTempProp( ++ nInd, 1, 1) ;
|
||||
// eventuale segmento orizzontale in basso
|
||||
if ( m_Outline.AddLine( Point3d( 0, -m_dHeight, 0)))
|
||||
m_Outline.SetCurveTempProp( ++ nInd, 1, 1) ;
|
||||
}
|
||||
m_Outline.SetTempProp( 1, 1) ;
|
||||
if ( ! SetGenTool( sToolName, &m_Outline, nToolNum))
|
||||
return false ;
|
||||
}
|
||||
// Utensile sfiancato
|
||||
else {
|
||||
double dCenX = m_dRadius - m_dRCorner ;
|
||||
double dCylRad = dCenX + sqrt( dSquareCornerRadProj) ;
|
||||
double dCylRad = dCenX + sqrt( m_dRCorner * m_dRCorner - m_dHeight * m_dHeight / 4) ;
|
||||
// Utensile mal definito
|
||||
if ( dCylRad < EPS_SMALL)
|
||||
return false ;
|
||||
@@ -625,41 +669,10 @@ Tool::SetAdditiveTool( const std::string& sToolName, double dH, double dR, doubl
|
||||
m_Outline.AddLine( Point3d( 0, - m_dHeight, 0)) ;
|
||||
m_Outline.SetCurveTempProp( 2, 1, 1) ;
|
||||
m_Outline.SetTempProp( 1, 1) ;
|
||||
bToolDefined = SetGenTool( sToolName, &m_Outline, nToolNum) ;
|
||||
}
|
||||
// Utensile cilindrico con eventuale raggio corner
|
||||
else {
|
||||
// Utensile mal definito
|
||||
if ( m_dRadius - m_dRCorner < 0)
|
||||
if ( ! SetGenTool( sToolName, &m_Outline, nToolNum))
|
||||
return false ;
|
||||
// Utensile sferico
|
||||
else if ( m_dRadius - m_dRCorner < EPS_SMALL)
|
||||
;
|
||||
// Raggio corner nullo: cilindro
|
||||
else if ( m_dRCorner < EPS_SMALL) {
|
||||
;
|
||||
}
|
||||
else {
|
||||
// Profilo
|
||||
m_Outline.AddPoint( Point3d( 0, 0, 0)) ;
|
||||
m_Outline.AddLine( Point3d( m_dRadius - m_dRCorner, 0, 0)) ;
|
||||
m_Outline.SetCurveTempProp( 0, 1, 1) ;
|
||||
CurveArc cvArc ;
|
||||
cvArc.SetC2P( Point3d( m_dRadius - m_dRCorner, - m_dRCorner, 0), Point3d( m_dRadius - m_dRCorner, 0, 0), Point3d( m_dRadius, - m_dRCorner, 0)) ;
|
||||
m_Outline.AddCurve( cvArc) ;
|
||||
m_Outline.SetCurveTempProp( 1, 1, 1) ;
|
||||
m_Outline.AddLine( Point3d( m_dRadius, - m_dHeight + m_dRCorner, 0)) ;
|
||||
m_Outline.SetCurveTempProp( 2, 1, 1) ;
|
||||
cvArc.SetC2P( Point3d( m_dRadius - m_dRCorner, - m_dHeight + m_dRCorner, 0), Point3d( m_dRadius, - m_dHeight + m_dRCorner, 0), Point3d( m_dRadius - m_dRCorner, - m_dHeight, 0)) ;
|
||||
m_Outline.AddCurve( cvArc) ;
|
||||
m_Outline.SetCurveTempProp( 3, 1, 1) ;
|
||||
m_Outline.AddLine( Point3d( 0, - m_dHeight, 0)) ;
|
||||
m_Outline.SetCurveTempProp( 4, 1, 1) ;
|
||||
m_Outline.SetTempProp( 1, 1) ;
|
||||
bToolDefined = SetGenTool( sToolName, &m_Outline, nToolNum) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_nType = ADDITIVE ;
|
||||
return bToolDefined ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user