EgtMachKernel 1.6o1 :
- modifiche per PreView tagli di lama inclinati.
This commit is contained in:
Binary file not shown.
+69
-24
@@ -1178,26 +1178,27 @@ Sawing::GenerateLinePv( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
m_pGeomDB->SetName( nPxId, sName) ;
|
||||
m_pGeomDB->SetMaterial( nPxId, BLUE) ;
|
||||
|
||||
// disabilito eventuale registrazione comandi EXE (riabilitazione automatica)
|
||||
CmdLogOff cmdLogOff ;
|
||||
|
||||
// rettangolo per parte di taglio completo
|
||||
// punti notevoli
|
||||
Point3d ptIni = pLine->GetStart() + dElev * vtCorr ;
|
||||
Point3d ptEnd = pLine->GetEnd() + dElev * vtCorr ;
|
||||
Vector3d vtToolH( vtTool.x, vtTool.y, 0) ;
|
||||
vtToolH *= m_TParams.m_dThick / vtToolH.SqLen() ;
|
||||
Point3d ptCross = ptEnd + vtToolH ;
|
||||
Vector3d vtDZ( 0, 0, 0.1) ;
|
||||
int nId = ExeCreateRectangle3P( nPxId, ptIni + vtDZ, ptCross + vtDZ, ptEnd + vtDZ, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nId, MCH_PV_CUT) ;
|
||||
m_pGeomDB->SetMaterial( nId, LIME) ;
|
||||
|
||||
// distanza XY tra centro e bordo taglio
|
||||
double dDeltaT = (( dElev < 0.5 * m_TParams.m_dDiam) ? sqrt( dElev * m_TParams.m_dDiam - dElev * dElev) : 0) ;
|
||||
// direzione del taglio
|
||||
Vector3d vtDir ;
|
||||
pLine->GetStartDir( vtDir) ;
|
||||
|
||||
// disabilito eventuale registrazione comandi EXE (riabilitazione automatica)
|
||||
CmdLogOff cmdLogOff ;
|
||||
|
||||
// rettangolo per parte di taglio completo
|
||||
int nId = ExeCreateRectangle3P( nPxId, ptIni + vtDZ, ptCross + vtDZ, ptEnd + vtDZ, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nId, MCH_PV_CUT) ;
|
||||
m_pGeomDB->SetMaterial( nId, LIME) ;
|
||||
|
||||
// rettangolo per parte parziale iniziale
|
||||
int nId2 = ExeCreateRectangle3P( nPxId, ptIni - vtDir * dDeltaT, ptIni + vtToolH, ptIni, RTY_LOC) ;
|
||||
// assegno nome e colore
|
||||
@@ -1213,37 +1214,81 @@ Sawing::GenerateLinePv( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
// valore di allungamento
|
||||
double dExtraL = m_pMchMgr->GetCurrMachiningsMgr()->GetExtraLOnCutRegion() ;
|
||||
|
||||
// punti notevoli per regioni
|
||||
Point3d ptRIni = ptIni ;
|
||||
Point3d ptRCross = ptCross ;
|
||||
Point3d ptREnd = ptEnd ;
|
||||
Vector3d vtRToolH = vtToolH ;
|
||||
// allargamento per taglio sottosquadra (WorkSide e HeadSide sempre opposti)
|
||||
Vector3d vtOrtho = vtToolH ;
|
||||
vtOrtho.Normalize() ;
|
||||
if ( m_Params.m_dSideAngle < - EPS_ANG_SMALL) {
|
||||
ptIni -= vtOrtho * dExtraL ;
|
||||
ptEnd -= vtOrtho * dExtraL ;
|
||||
vtToolH += vtOrtho * dExtraL ;
|
||||
Vector3d vtOrtho = vtToolH ;
|
||||
vtOrtho.Normalize() ;
|
||||
ptRIni -= vtOrtho * dExtraL ;
|
||||
ptREnd -= vtOrtho * dExtraL ;
|
||||
vtRToolH += vtOrtho * dExtraL ;
|
||||
}
|
||||
|
||||
// regione di taglio completo per nesting
|
||||
int nRId = ExeCreateSurfFrRectangle3P( nPxId, ptIni - vtDir * ( dDeltaT + dExtraL),
|
||||
ptCross + vtDir * ( dDeltaT + dExtraL), ptEnd, RTY_LOC) ;
|
||||
int nRId = ExeCreateSurfFrRectangle3P( nPxId, ptRIni - vtDir * ( dDeltaT + dExtraL),
|
||||
ptRCross + vtDir * ( dDeltaT + dExtraL), ptREnd, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nRId, MCH_PV_RCUT) ;
|
||||
m_pGeomDB->SetMaterial( nRId, INVISIBLE) ;
|
||||
// regione di taglio ridotto per nesting (sono escluse le parti iniziale e finale)
|
||||
const double EXTRALEN_R = 10 * EPS_SMALL ;
|
||||
int nRrId = ExeCreateSurfFrRectangle3P( nPxId, ptIni - vtDir * EXTRALEN_R,
|
||||
ptCross + vtDir * EXTRALEN_R, ptEnd, RTY_LOC) ;
|
||||
int nRrId = ExeCreateSurfFrRectangle3P( nPxId, ptRIni - vtDir * EXTRALEN_R,
|
||||
ptRCross + vtDir * EXTRALEN_R, ptREnd, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nRrId, MCH_PV_RRCUT) ;
|
||||
m_pGeomDB->SetMaterial( nRrId, INVISIBLE) ;
|
||||
// regione di ingresso al taglio (parte iniziale)
|
||||
int nRsId = ExeCreateSurfFrRectangle3P( nPxId, ptIni - vtDir * ( dDeltaT + dExtraL),
|
||||
ptIni + vtToolH, ptIni, RTY_LOC) ;
|
||||
int nRsId = ExeCreateSurfFrRectangle3P( nPxId, ptRIni - vtDir * ( dDeltaT + dExtraL),
|
||||
ptRIni + vtRToolH, ptRIni, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nRsId, MCH_PV_RLICUT) ;
|
||||
m_pGeomDB->SetMaterial( nRsId, INVISIBLE) ;
|
||||
// regione di uscita dal taglio (parte finale)
|
||||
int nReId = ExeCreateSurfFrRectangle3P( nPxId, ptEnd, ptCross + vtDir * ( dDeltaT + dExtraL),
|
||||
ptEnd + vtDir * ( dDeltaT + dExtraL) , RTY_LOC) ;
|
||||
int nReId = ExeCreateSurfFrRectangle3P( nPxId, ptREnd, ptRCross + vtDir * ( dDeltaT + dExtraL),
|
||||
ptREnd + vtDir * ( dDeltaT + dExtraL) , RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nReId, MCH_PV_RLOCUT) ;
|
||||
m_pGeomDB->SetMaterial( nReId, INVISIBLE) ;
|
||||
|
||||
// eventuali ripetizioni in basso per tagli inclinati
|
||||
if ( abs( m_Params.m_dSideAngle) > EPS_ANG_SMALL) {
|
||||
// lunghezza movimento
|
||||
double dMove = ( dElev - dExtraCut) ;
|
||||
// se sottosquadra (controllo il lato opposto della lama, quindi ...)
|
||||
if ( m_Params.m_dSideAngle < 0)
|
||||
dMove -= m_TParams.m_dThick * tan( abs( m_Params.m_dSideAngle) * DEGTORAD) ;
|
||||
// vettore movimento
|
||||
Vector3d vtMove = - dMove * vtCorr ; vtMove.z = 0 ;
|
||||
// rettangolo per parte di taglio completo
|
||||
int nDwnId = ExeCreateRectangle3P( nPxId, ptIni + vtDZ, ptCross + vtMove + vtDZ, ptEnd + vtDZ, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nDwnId, MCH_PV_DOWN_CUT) ;
|
||||
m_pGeomDB->SetMaterial( nDwnId, LIME) ;
|
||||
// rettangolo per parte parziale iniziale
|
||||
int nDwnId2 = ExeCreateRectangle3P( nPxId, ptIni - vtDir * dDeltaT, ptIni + vtToolH + vtMove, ptIni, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nDwnId2, MCH_PV_DOWN_PRE_CUT) ;
|
||||
m_pGeomDB->SetMaterial( nDwnId2, BLUE) ;
|
||||
// rettangolo per parte parziale finale
|
||||
int nDwnId3 = ExeCreateRectangle3P( nPxId, ptEnd, ptCross + vtDir * dDeltaT + vtMove, ptEnd + vtDir * dDeltaT, RTY_LOC) ;
|
||||
m_pGeomDB->SetName( nDwnId3, MCH_PV_DOWN_POST_CUT) ;
|
||||
m_pGeomDB->SetMaterial( nDwnId3, BLUE) ;
|
||||
// regione di taglio completo per nesting
|
||||
int nDwnRId = m_pGeomDB->Copy( nRId, GDB_ID_NULL, nPxId) ;
|
||||
m_pGeomDB->Translate( nDwnRId, vtMove) ;
|
||||
m_pGeomDB->SetName( nDwnRId, MCH_PV_DOWN_RCUT) ;
|
||||
// regione di taglio ridotto per nesting (sono escluse le parti iniziale e finale)
|
||||
int nDwnRrId = m_pGeomDB->Copy( nRrId, GDB_ID_NULL, nPxId) ;
|
||||
m_pGeomDB->Translate( nDwnRrId, vtMove) ;
|
||||
m_pGeomDB->SetName( nDwnRrId, MCH_PV_DOWN_RRCUT) ;
|
||||
// regione di ingresso al taglio (parte iniziale)
|
||||
int nDwnRsId = m_pGeomDB->Copy( nRsId, GDB_ID_NULL, nPxId) ;
|
||||
m_pGeomDB->Translate( nDwnRsId, vtMove) ;
|
||||
m_pGeomDB->SetName( nDwnRsId, MCH_PV_DOWN_RLICUT) ;
|
||||
// regione di uscita dal taglio (parte finale)
|
||||
int nDwnReId = m_pGeomDB->Copy( nReId, GDB_ID_NULL, nPxId) ;
|
||||
m_pGeomDB->Translate( nDwnReId, vtMove) ;
|
||||
m_pGeomDB->SetName( nDwnReId, MCH_PV_DOWN_RLOCUT) ;
|
||||
}
|
||||
|
||||
// salvo in info del gruppo la larghezza XY del taglio e la distanza XY tra centro e bordo taglio
|
||||
m_pGeomDB->SetInfo( nPxId, MCH_PV_KEY_WT, vtToolH.LenXY()) ;
|
||||
m_pGeomDB->SetInfo( nPxId, MCH_PV_KEY_DT, dDeltaT) ;
|
||||
@@ -1274,7 +1319,7 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V
|
||||
dAppr /= cos( m_Params.m_dSideAngle * DEGTORAD) ;
|
||||
|
||||
// Se una sola passata
|
||||
if ( m_Params.m_dStep < EPS_SMALL) {
|
||||
if ( m_Params.m_dStep < EPS_SMALL || ( dElev - dExtraCut) <= m_Params.m_dStep) {
|
||||
// 1 -> approccio
|
||||
if ( ! AddApproach( pLine->GetStart(), vtCorr, dSafeZ, dElev, dAppr))
|
||||
return false ;
|
||||
@@ -1788,7 +1833,7 @@ Sawing::GenerateExtArcCl( const ICurveArc* pArc, const Vector3d& vtStaTool, cons
|
||||
const double MAX_ANG_CEN = 150.0 ;
|
||||
|
||||
// Se una sola passata
|
||||
if ( m_Params.m_dStepExtArc < EPS_SMALL) {
|
||||
if ( m_Params.m_dStepExtArc < EPS_SMALL || ( dElev - dExtraCut) <= m_Params.m_dStepExtArc) {
|
||||
// 1 -> approccio
|
||||
SetToolDir( vtStaTool) ;
|
||||
Point3d ptP1 ;
|
||||
@@ -2415,7 +2460,7 @@ Sawing::GenerateIntArcCl( const ICurveArc* pArc,
|
||||
const double MAX_ANG_CEN = 150.0 ;
|
||||
|
||||
// Se una sola passata
|
||||
if ( m_Params.m_dStepIntArc < EPS_SMALL) {
|
||||
if ( m_Params.m_dStepIntArc < EPS_SMALL || ( dElev - dExtraCut) <= m_Params.m_dStepIntArc) {
|
||||
// 1 -> approccio
|
||||
SetToolDir( vtStaTool) ;
|
||||
SetCorrDir( vtStaCorr) ;
|
||||
|
||||
Reference in New Issue
Block a user