3dPrinting 2.5c2 :
- aggiunto taglio dei ribs unbounded con solido se richiesto.
This commit is contained in:
+82
-75
@@ -42,7 +42,7 @@ local function GetLayerParamsForToolPathCalc()
|
||||
LayerParams.dWipeDir = EgtGetInfo( s_nPartId, KEY_WIPE_DIR, 'd') or 0.0
|
||||
LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v')
|
||||
LayerParams.dTDiam = EgtGetInfo( s_nPartId, KEY_TOOL_DIAM, 'd')
|
||||
|
||||
|
||||
return LayerParams
|
||||
end
|
||||
|
||||
@@ -866,7 +866,7 @@ local function AddRibsLeadIn( nCrv, nLoopsGrp, dStrand, vtSlicing, nGrpTmp)
|
||||
local bLIInvert = EgtGetInfo( nCrv, KEY_RIBS_LEAD_IN_INVERT, 'b')
|
||||
|
||||
if dLILen < GEO.EPS_SMALL then return end
|
||||
|
||||
|
||||
-- recupero la curva di offset su cui calcolare leadin
|
||||
local ptS = EgtSP( nCrv)
|
||||
local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp)
|
||||
@@ -889,7 +889,7 @@ local function AddRibsLeadIn( nCrv, nLoopsGrp, dStrand, vtSlicing, nGrpTmp)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, vtSlicing, dStrand, nGrpTmp)
|
||||
local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, vtSlicing, dStrand, nGrpTmp, bForceNoBorder)
|
||||
|
||||
local dRibsLOLen = EgtGetInfo( nCrv, KEY_RIBS_LEAD_OUT_LEN, 'd')
|
||||
local dRibsLOCoasting = EgtGetInfo( nCrv, KEY_RIBS_LEAD_OUT_COASTING, 'd')
|
||||
@@ -905,82 +905,84 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, vtSlicing, dStrand, n
|
||||
local vtE = EgtEV( nCrv, GDB_ID.ROOT)
|
||||
|
||||
-- recupero la curva di offset su cui calcolare lead out
|
||||
local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp)
|
||||
while nCrvOffs do
|
||||
local dParE = EgtCurveParamAtPoint( nCrvOffs, ptE, GEO.EPS_SMALL, GDB_RT.GLOB)
|
||||
if dParE then
|
||||
|
||||
local nCrvLO
|
||||
local nCoasting
|
||||
local nWipe
|
||||
|
||||
-- trovo curva opportuna per lead out
|
||||
local nCrvRef, bInvert = FindCorrectRibsLead( dParE, nCrv, nCrvOffs, bRibsLOInvert, dRibsLOLen + dRibsLOCoasting, dStrand, false, nGrpTmp)
|
||||
|
||||
if nCrvRef then
|
||||
-- verifico se la curva ha lunghezza sufficiente
|
||||
local dLen = EgtCurveLength( nCrvRef)
|
||||
local bSkip = ( dLen - dRibsLOLen - dRibsLOCoasting < - GEO.EPS_SMALL)
|
||||
|
||||
-- primo tratto ( segue offset con flusso aperto)
|
||||
if dRibsLOLen > GEO.EPS_SMALL and not bSkip then
|
||||
nCrvLO = EgtCopyGlob( nCrvRef, nCrv, GDB_IN.AFTER)
|
||||
EgtTrimCurveEndAtLen( nCrvLO, dRibsLOLen)
|
||||
EgtModifyCurveExtrusion( nCrvLO, vtSlicing, GDB_RT.GLOB)
|
||||
EgtSetInfo( nCrvLO, KEY_TYPE, TYPE.RIB)
|
||||
EgtSetName( nCrvLO, LEAD_OUT_CRV)
|
||||
-- aggiorno ptE e vtE
|
||||
ptE = EgtEP( nCrvLO, GDB_ID.ROOT)
|
||||
vtE = EgtEV( nCrvLO, GDB_ID.ROOT)
|
||||
end
|
||||
|
||||
-- secondo tratto ( segue offset con flusso chiuso)
|
||||
if dRibsLOCoasting > GEO.EPS_SMALL then
|
||||
nCoasting = EgtCopyGlob( nCrvRef, nCrvLO or nCrv, GDB_IN.AFTER)
|
||||
EgtTrimCurveStartAtLen( nCoasting, dRibsLOLen)
|
||||
EgtTrimCurveEndAtLen( nCoasting, dRibsLOCoasting)
|
||||
EgtModifyCurveExtrusion( nCoasting, vtSlicing, GDB_RT.GLOB)
|
||||
|
||||
EgtSetName( nCoasting, COASTING_CRV)
|
||||
EgtSetInfo( nCoasting, KEY_TYPE, TYPE.COASTING)
|
||||
EgtSetColor( nCoasting, EgtStdColor('ORANGE'))
|
||||
|
||||
-- aggiorno ptE e vtE
|
||||
ptE = EgtEP( nCoasting, GDB_ID.ROOT)
|
||||
vtE = EgtEV( nCoasting, GDB_ID.ROOT)
|
||||
end
|
||||
EgtErase( nCrvRef)
|
||||
if not bForceNoBorder then
|
||||
local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp)
|
||||
while nCrvOffs do
|
||||
local dParE = EgtCurveParamAtPoint( nCrvOffs, ptE, GEO.EPS_SMALL, GDB_RT.GLOB)
|
||||
if dParE then
|
||||
|
||||
-- terzo tratto ( diretto verso esterno con ugello chiuso)
|
||||
if dRibsLOWipe > GEO.EPS_SMALL then
|
||||
local dAng = dRibsLOWipeAng + s_nDefaultWipeAng
|
||||
local nType = EgtGetInfo( nCrv, KEY_RIBS_TYPE, 'i')
|
||||
if nType == RIB_TYPE.EXTERNAL then dAng = - dAng end
|
||||
vtE:rotate( vtSlicing, EgtIf( bInvert, - dAng, dAng))
|
||||
local ptFinal = ptE + vtE * dRibsLOWipe
|
||||
-- verifico soddisfi altezza minima per dimensioni utensile
|
||||
local k = 1
|
||||
while ptFinal:getZ() < s_dHMin + GEO.EPS_SMALL and k < 36 do
|
||||
vtE:rotate( vtSlicing, EgtIf( bInvert, - 10, 10))
|
||||
ptFinal = ptE + vtE * dRibsLOWipe
|
||||
k = k + 1
|
||||
local nCrvLO
|
||||
local nCoasting
|
||||
local nWipe
|
||||
|
||||
-- trovo curva opportuna per lead out
|
||||
local nCrvRef, bInvert = FindCorrectRibsLead( dParE, nCrv, nCrvOffs, bRibsLOInvert, dRibsLOLen + dRibsLOCoasting, dStrand, false, nGrpTmp)
|
||||
|
||||
if nCrvRef then
|
||||
-- verifico se la curva ha lunghezza sufficiente
|
||||
local dLen = EgtCurveLength( nCrvRef)
|
||||
local bSkip = ( dLen - dRibsLOLen - dRibsLOCoasting < - GEO.EPS_SMALL)
|
||||
|
||||
-- primo tratto ( segue offset con flusso aperto)
|
||||
if dRibsLOLen > GEO.EPS_SMALL and not bSkip then
|
||||
nCrvLO = EgtCopyGlob( nCrvRef, nCrv, GDB_IN.AFTER)
|
||||
EgtTrimCurveEndAtLen( nCrvLO, dRibsLOLen)
|
||||
EgtModifyCurveExtrusion( nCrvLO, vtSlicing, GDB_RT.GLOB)
|
||||
EgtSetInfo( nCrvLO, KEY_TYPE, TYPE.RIB)
|
||||
EgtSetName( nCrvLO, LEAD_OUT_CRV)
|
||||
-- aggiorno ptE e vtE
|
||||
ptE = EgtEP( nCrvLO, GDB_ID.ROOT)
|
||||
vtE = EgtEV( nCrvLO, GDB_ID.ROOT)
|
||||
end
|
||||
|
||||
-- secondo tratto ( segue offset con flusso chiuso)
|
||||
if dRibsLOCoasting > GEO.EPS_SMALL then
|
||||
nCoasting = EgtCopyGlob( nCrvRef, nCrvLO or nCrv, GDB_IN.AFTER)
|
||||
EgtTrimCurveStartAtLen( nCoasting, dRibsLOLen)
|
||||
EgtTrimCurveEndAtLen( nCoasting, dRibsLOCoasting)
|
||||
EgtModifyCurveExtrusion( nCoasting, vtSlicing, GDB_RT.GLOB)
|
||||
|
||||
EgtSetName( nCoasting, COASTING_CRV)
|
||||
EgtSetInfo( nCoasting, KEY_TYPE, TYPE.COASTING)
|
||||
EgtSetColor( nCoasting, EgtStdColor('ORANGE'))
|
||||
|
||||
-- aggiorno ptE e vtE
|
||||
ptE = EgtEP( nCoasting, GDB_ID.ROOT)
|
||||
vtE = EgtEV( nCoasting, GDB_ID.ROOT)
|
||||
end
|
||||
EgtErase( nCrvRef)
|
||||
|
||||
nWipe = EgtCurveCompoFromPoints( nTPathGrp, { ptE, ptFinal}, GDB_RT.GLOB)
|
||||
EgtModifyCurveExtrusion( nWipe, vtSlicing, GDB_RT.GLOB)
|
||||
EgtRelocateGlob( nWipe, nCoasting or nCrvLO or nCrv, GDB_IN.AFTER)
|
||||
EgtSetName( nWipe, WIPE_CRV)
|
||||
EgtSetInfo( nWipe, KEY_TYPE, TYPE.WIPE)
|
||||
EgtSetColor( nWipe, EgtStdColor('AQUA'))
|
||||
-- terzo tratto ( diretto verso esterno con ugello chiuso)
|
||||
if dRibsLOWipe > GEO.EPS_SMALL then
|
||||
local dAng = dRibsLOWipeAng + s_nDefaultWipeAng
|
||||
local nType = EgtGetInfo( nCrv, KEY_RIBS_TYPE, 'i')
|
||||
if nType == RIB_TYPE.EXTERNAL then dAng = - dAng end
|
||||
vtE:rotate( vtSlicing, EgtIf( bInvert, - dAng, dAng))
|
||||
local ptFinal = ptE + vtE * dRibsLOWipe
|
||||
-- verifico soddisfi altezza minima per dimensioni utensile
|
||||
local k = 1
|
||||
while ptFinal:getZ() < s_dHMin + GEO.EPS_SMALL and k < 36 do
|
||||
vtE:rotate( vtSlicing, EgtIf( bInvert, - 10, 10))
|
||||
ptFinal = ptE + vtE * dRibsLOWipe
|
||||
k = k + 1
|
||||
end
|
||||
|
||||
nWipe = EgtCurveCompoFromPoints( nTPathGrp, { ptE, ptFinal}, GDB_RT.GLOB)
|
||||
EgtModifyCurveExtrusion( nWipe, vtSlicing, GDB_RT.GLOB)
|
||||
EgtRelocateGlob( nWipe, nCoasting or nCrvLO or nCrv, GDB_IN.AFTER)
|
||||
EgtSetName( nWipe, WIPE_CRV)
|
||||
EgtSetInfo( nWipe, KEY_TYPE, TYPE.WIPE)
|
||||
EgtSetColor( nWipe, EgtStdColor('AQUA'))
|
||||
end
|
||||
else
|
||||
-- aggiungo coasting e wipe come sulle shell normali
|
||||
AddRetraction( nCrv, vtSlicing, dRibsLOCoasting, dRibsLOWipe, dRibsLOWipeAng)
|
||||
end
|
||||
else
|
||||
-- aggiungo coasting e wipe come sulle shell normali
|
||||
AddRetraction( nCrv, vtSlicing, dRibsLOCoasting, dRibsLOWipe, dRibsLOWipeAng)
|
||||
return
|
||||
end
|
||||
return
|
||||
|
||||
nCrvOffs = EgtGetNext( nCrvOffs)
|
||||
end
|
||||
|
||||
nCrvOffs = EgtGetNext( nCrvOffs)
|
||||
end
|
||||
|
||||
-- se non ho trovato curva sul bordo su cui fare il lead out aggiungo coasting e wipe come sulle shell normali
|
||||
@@ -1070,17 +1072,22 @@ local function CalcRibsToolPath( vEntIds, nRibsGrp, nTpathGrpId, LayerParams)
|
||||
end
|
||||
|
||||
-- leadin/leadout
|
||||
local bForceNoBorder = false
|
||||
local nType = EgtGetInfo( vEntIds[1], KEY_RIBS_TYPE, 'i')
|
||||
if nType == RIB_TYPE.UNBOUNDED then
|
||||
bForceNoBorder = true
|
||||
end
|
||||
local nCrvRib = nNewFirstEnt
|
||||
while nCrvRib do
|
||||
-- verifico se necessario lead in
|
||||
local nPrev = EgtGetPrev( nCrvRib)
|
||||
if not nPrev or EgtGetName( nPrev) ~= LINK_CRV then
|
||||
if ( not nPrev or EgtGetName( nPrev) ~= LINK_CRV) and not bForceNoBorder then
|
||||
AddRibsLeadIn( nCrvRib, nLoopGrp, LayerParams.dStrand, LayerParams.vtSlicing, nGrpTmp)
|
||||
end
|
||||
-- verifico se necessario lead out
|
||||
local nNext = EgtGetNext( nCrvRib)
|
||||
if not nNext or EgtGetName( nNext) ~= LINK_CRV then
|
||||
AddRibsLeadOut( nCrvRib, nTpathGrpId, nLoopGrp, LayerParams.vtSlicing, LayerParams.dStrand, nGrpTmp)
|
||||
AddRibsLeadOut( nCrvRib, nTpathGrpId, nLoopGrp, LayerParams.vtSlicing, LayerParams.dStrand, nGrpTmp, bForceNoBorder)
|
||||
end
|
||||
nCrvRib = EgtGetNextName( nCrvRib, RIBS_CRV .. '*')
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user