From d775e0fe499138e89f8290ae230fc8cae033e7fc Mon Sep 17 00:00:00 2001 From: SaraP Date: Fri, 16 Sep 2022 11:55:15 +0200 Subject: [PATCH] 3dPrinting : - aggiunto overlap tra passate. --- LuaLibs/AddManData.lua | 1 + LuaLibs/CalcPaths.lua | 35 +++++++++++++++++++++++------------ LuaLibs/CalcToolPath.lua | 4 ++-- LuaLibs/RunSlicing.lua | 1 + 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index 1d1454c..9530770 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -40,6 +40,7 @@ KEY_SLICING_DIR="SlicingDir" KEY_SLICE_STEP = "StrandH" KEY_SHELLS_NBR = "StrandCount" KEY_STRAND = "StrandW" +KEY_STRAND_OVERLAP = "StrandOverlap" KEY_OFFSET_SLICE ="Offset" KEY_SP_OFFSET_ON_SLICE = "StartPointOffsetOnSlice" KEY_PRINT_ORDER = "StrandOrder" diff --git a/LuaLibs/CalcPaths.lua b/LuaLibs/CalcPaths.lua index 8a2394e..6f0102c 100644 --- a/LuaLibs/CalcPaths.lua +++ b/LuaLibs/CalcPaths.lua @@ -19,8 +19,9 @@ local s_dOffsCorr = 10 * GEO.EPS_SMALL --------------------------------------------------------------------- local function GetLayerParamsForPathCalc() local LayerParams = {} - LayerParams.nShellsNbr = EgtGetInfo( s_nPartId, KEY_SHELLS_NBR, 'i') - LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') + LayerParams.nShellsNbr = EgtGetInfo( s_nPartId, KEY_SHELLS_NBR, 'i') + LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') + LayerParams.nStrandOverlap = EgtGetInfo( s_nPartId, KEY_STRAND_OVERLAP, 'i') or 0 LayerParams.dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd') LayerParams.nFloorNbr = EgtGetInfo( s_nPartId, KEY_FLOOR_NBR, 'i') or 0 LayerParams.nFloorType = EgtGetInfo( s_nPartId, KEY_FLOOR_TYPE, 'i') or INFILL_TYPE.ZIGZAG @@ -30,7 +31,7 @@ local function GetLayerParamsForPathCalc() LayerParams.bPrintInvert = ( EgtGetInfo( s_nPartId, KEY_PRINT_DIRECTION, 'i') == PRINT_DIRECTION.CW) -- parametri costolature LayerParams.bRibsInvertOrder = EgtGetInfo( s_nPartId, KEY_RIBS_INVERT_ORDER, 'b') - return LayerParams + return LayerParams end ---------------------------------------------------------------------- @@ -157,7 +158,7 @@ local function VerifyPath( nCrvId, dStrand, vtSlicing, nGrp) -- verifico se fattibile con una sola passata -- TODO da sistemare con medial axis per curva generica local bSingleStrand = false - if EgtCurveIsClosed( nCrvId) then + if EgtCurveIsClosed( nCrvId) then local nGrpTmp = EgtGroup( nGrp, Frame3d( ORIG(), vtSlicing)) EgtRelocateGlob( nCrvId, nGrpTmp) local frLoc, dDimX, dDimY = EgtCurveMinAreaRectangleXY( nCrvId) @@ -1104,7 +1105,7 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d end for nInd = nMaxShellNbrDiff, 1, -1 do - dOffs = dOffs + LayerParams.dStrand + dOffs = dOffs + LayerParams.dStrand * ( 1 - LayerParams.nStrandOverlap / 100) local nSrfDiff = EgtGetFirstNameInGroup( nShellNbrGrp, SHELL_NBR_SURF .. tostring( nInd)) local nOuterCrv = EgtGetFirstNameInGroup( nCrvGrpId, OUTER_CRV) @@ -1121,12 +1122,12 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d EgtChangeId( nNewId, nTrimCrv) nTrimCnt = nTrimCnt - 1 end - + for nCrvT = nTrimCrv, nTrimCrv + nTrimCnt - 1 do -- calcolo offset della curva ( è il percorso della shell) EgtModifyCurveExtrusion( nCrvT, LayerParams.vtSlicing) local nOffs, nOffsCnt = EgtOffsetCurveAdv( nCrvT, - dOffs) - EgtErase( nCrvT) + EgtErase( nCrvT) for nCrvOffs = nOffs, nOffs + nOffsCnt - 1 do -- trim con la regione già occupata dal altre shell local nCrv, nCnt = EgtTrimCurveWithRegion( nCrvOffs, nSrfTrim, true, true) @@ -1147,8 +1148,8 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d EgtSetInfo( nId, KEY_TYPE, TYPE.EXTRA_SHELL) end - -- aggiorno la superficie occupata dalle shell con quella appena calcolata - UpdateTotalShellSurf( nSrfTrim, nId, LayerParams.dStrand, nGrpId) + -- aggiorno la superficie occupata dalle shell con quella appena calcolata (tenendo conto dell'overlap) + UpdateTotalShellSurf( nSrfTrim, nId, ( 1 - LayerParams.nStrandOverlap / 100) * LayerParams.dStrand, nGrpId) -- se la superficie si annulla non è possibile realizzare altro, quindi cancello tutte le curve rimaste if EgtSurfFrChunkCount( nSrfTrim) == 0 then for j = nId + 1, nCrv + nCnt - 1 do @@ -1157,6 +1158,9 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d for j = nCrvT + 1, nTrimCrv + nTrimCnt - 1 do EgtErase( j) end + -- aggiorno superficie + EgtSurfFrOffset( nSrfTrim, - LayerParams.nStrandOverlap / 100 * LayerParams.dStrand) + -- riordino le curve appena create e se possibile creo percorsi chiusi ReorderExtraShells( nGrpId, LayerParams.dStrand, vPtStart, LayerParams.bPrintInvert) return end @@ -1172,6 +1176,8 @@ local function CalcExtraShellsPath( nMaxShellNbrDiff, nShellNbrGrp, nCrvGrpId, d end end + -- aggiorno superificie + EgtSurfFrOffset( nSrfTrim, - LayerParams.nStrandOverlap / 100 * LayerParams.dStrand) -- riordino le curve appena create e se possibile creo percorsi chiusi ReorderExtraShells( nGrpId, LayerParams.dStrand, vPtStart, LayerParams.bPrintInvert) @@ -1414,7 +1420,7 @@ function CalcPaths.Exec( nPartId) -- parete esterna local dOffs = - LayerParams.dOffs - 0.5 * LayerParams.dStrand if nMaxShellNbrDiff < LayerParams.nShellsNbr then - dOffs = dOffs + LayerParams.dStrand + dOffs = dOffs + LayerParams.dStrand * ( 1 - LayerParams.nStrandOverlap / 100) local bOk, bExists, nSrfId = ComputeSurfOffset( nSrf, nCrvGrpId, - dOffs) if not bOk then EgtOutLog( 'Error on ExtOffset (layer '..tostring( nIdx)..') - CalcPaths') @@ -1437,7 +1443,7 @@ function CalcPaths.Exec( nPartId) -- pareti interne complete for nInd = 1, LayerParams.nShellsNbr - 1 - nMaxShellNbrDiff do -- offset della superficie originale - dOffs = dOffs + LayerParams.dStrand + dOffs = dOffs + LayerParams.dStrand * ( 1 - LayerParams.nStrandOverlap / 100) local bOk, bExists, nSrfId = ComputeSurfOffset( nSrf, nCrvGrpId, - dOffs) if not bOk then EgtOutLog( 'Error on IntOffset (layer '..tostring( nIdx)..') - CalcPaths') @@ -1451,7 +1457,12 @@ function CalcPaths.Exec( nPartId) end -- preparo superficie occupata dalle shell da usare per trim - local bOkTrim, bExistsTrim, nSrfTrim = ComputeSurfOffset( nSrf, nCrvGrpId, - dOffs - LayerParams.dStrand + s_dOffsCorr) + local dSurfTrimOffs = dOffs + LayerParams.dStrand + if nMaxShellNbrDiff > 0 then + -- se hai extra shell tieni conto anche dell'overlap ammesso + dSurfTrimOffs = dOffs + ( 1 - LayerParams.nStrandOverlap / 100) * LayerParams.dStrand - s_dOffsCorr + end + local bOkTrim, bExistsTrim, nSrfTrim = ComputeSurfOffset( nSrf, nCrvGrpId, - dSurfTrimOffs) if not bOkTrim then EgtOutLog( 'Error on IntOffset (layer '..tostring( nIdx)..') - CalcPaths') elseif bExistsTrim then diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index b4389df..5293ba3 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -248,7 +248,7 @@ local function AddRetraction( nCrvId, LayerParams, dCoastingLen, dWipeLen, dWipe EgtSetName( nWipeId, WIPE_CRV) EgtSetInfo( nWipeId, KEY_TYPE, TYPE.WIPE) - EgtSetColor( nWipeId, EgtStdColor('TEAL')) + EgtSetColor( nWipeId, EgtStdColor('AQUA')) end EgtErase( nCopyId) @@ -658,7 +658,7 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, vtSlicing, dStrand) EgtRelocateGlob( nWipe, nCoasting or nCrvLO or nCrv, GDB_IN.AFTER) EgtSetName( nWipe, WIPE_CRV) EgtSetInfo( nWipe, KEY_TYPE, TYPE.WIPE) - EgtSetColor( nWipe, EgtStdColor('TEAL')) + EgtSetColor( nWipe, EgtStdColor('AQUA')) end return diff --git a/LuaLibs/RunSlicing.lua b/LuaLibs/RunSlicing.lua index 02d10f1..8051f91 100644 --- a/LuaLibs/RunSlicing.lua +++ b/LuaLibs/RunSlicing.lua @@ -40,6 +40,7 @@ local function LoadParams( sFile, nPartId) SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SLICE_STEP, '1.0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_STRAND, '6.0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SHELLS_NBR, '3') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_STRAND_OVERLAP, '0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_OFFSET_SLICE, '0.0') local sStrandOrder = EgtGetStringFromIni( SEC_DEFAULT, KEY_PRINT_ORDER, 'InToOut', sFile)