EgtMachKernel 1.6o1 :

- modifiche per PreView tagli di lama inclinati.
This commit is contained in:
Dario Sassi
2016-03-12 18:20:37 +00:00
parent dd75d34ae6
commit 7bd0f4a9de
2 changed files with 69 additions and 24 deletions
BIN
View File
Binary file not shown.
+69 -24
View File
@@ -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) ;