3dPrinting :
- aggiunto overlap tra passate.
This commit is contained in:
+23
-12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user