3dPrinting :
- possibilità di assegnare parametri diversi a costolature diverse.
This commit is contained in:
+63
-53
@@ -38,17 +38,8 @@ local function GetLayerParamsForToolPathCalc()
|
||||
LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v')
|
||||
LayerParams.dTDiam = EgtGetInfo( s_nPartId, KEY_TOOL_DIAM, 'd')
|
||||
-- Parametri costolature
|
||||
LayerParams.nRibsShellsNbr = EgtGetInfo( s_nPartId, KEY_RIBS_SHELLS_NBR, 'i')
|
||||
LayerParams.bRibsLink = EgtGetInfo( s_nPartId, KEY_RIBS_LINK, 'b')
|
||||
LayerParams.bRibsInvert = EgtGetInfo( s_nPartId, KEY_RIBS_INVERT_DIR, 'b')
|
||||
LayerParams.bRibsLIInvert = EgtGetInfo( s_nPartId, KEY_RIBS_LEAD_IN_INVERT, 'b')
|
||||
LayerParams.dRibsLILen = EgtGetInfo( s_nPartId, KEY_RIBS_LEAD_IN_LEN, 'd')
|
||||
LayerParams.bRibsLOInvert = EgtGetInfo( s_nPartId, KEY_RIBS_LEAD_OUT_INVERT, 'b')
|
||||
LayerParams.dRibsLOLen = EgtGetInfo( s_nPartId, KEY_RIBS_LEAD_OUT_LEN, 'd')
|
||||
LayerParams.dRibsLOCoasting = EgtGetInfo( s_nPartId, KEY_RIBS_LEAD_OUT_COASTING, 'd')
|
||||
LayerParams.dRibsLOWipe = EgtGetInfo( s_nPartId, KEY_RIBS_LEAD_OUT_WIPE, 'd')
|
||||
LayerParams.dRibsLOWipeAng = EgtGetInfo( s_nPartId, KEY_RIBS_LEAD_OUT_WIPE_DIR, 'd')
|
||||
|
||||
|
||||
return LayerParams
|
||||
end
|
||||
|
||||
@@ -153,7 +144,7 @@ local function AddRetraction( nCrvId, dCoastingLen, dWipeLen)
|
||||
|
||||
if dWipeLen > GEO.EPS_SMALL then
|
||||
local nWipeId = EgtCopyGlob( nCopyId, nCoastingId or nCrvId, GDB_IN.AFTER)
|
||||
EgtTrimCurveEndAtLen( nWipeId, dWipeLen)
|
||||
EgtTrimCurveEndAtLen( nWipeId, dWipeLen)
|
||||
EgtSetName( nWipeId, WIPE_CRV)
|
||||
EgtSetInfo( nWipeId, KEY_TYPE, TYPE.WIPE)
|
||||
EgtSetColor( nWipeId, EgtStdColor('TEAL'))
|
||||
@@ -276,9 +267,12 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, bForceLink)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function AddRibsLeadIn( nCrv, nLoopsGrp, LayerParams)
|
||||
local function AddRibsLeadIn( nCrv, nLoopsGrp)
|
||||
|
||||
if LayerParams.dRibsLILen < GEO.EPS_SMALL then return end
|
||||
local dLILen = EgtGetInfo( nCrv, KEY_RIBS_LEAD_IN_LEN, 'd')
|
||||
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)
|
||||
@@ -304,10 +298,10 @@ local function AddRibsLeadIn( nCrv, nLoopsGrp, LayerParams)
|
||||
local dLen1 = EgtCurveLength( nCrvId)
|
||||
local dLen2 = EgtCurveLength( nNewId)
|
||||
|
||||
local bKeepFirst = LayerParams.bRibsLIInvert
|
||||
if dLen1 > LayerParams.dRibsLILen - GEO.EPS_SMALL and dLen2 < LayerParams.dRibsLILen - GEO.EPS_SMALL then
|
||||
local bKeepFirst = bLIInvert
|
||||
if dLen1 > dLILen - GEO.EPS_SMALL and dLen2 < dLILen - GEO.EPS_SMALL then
|
||||
bKeepFirst = true
|
||||
elseif dLen1 < LayerParams.dRibsLILen - GEO.EPS_SMALL and dLen2 > LayerParams.dRibsLILen - GEO.EPS_SMALL then
|
||||
elseif dLen1 < dLILen - GEO.EPS_SMALL and dLen2 > dLILen - GEO.EPS_SMALL then
|
||||
bKeepFirst = false
|
||||
end
|
||||
|
||||
@@ -320,7 +314,7 @@ local function AddRibsLeadIn( nCrv, nLoopsGrp, LayerParams)
|
||||
end
|
||||
end
|
||||
|
||||
EgtTrimCurveEndAtLen( nCrvId, LayerParams.dRibsLILen)
|
||||
EgtTrimCurveEndAtLen( nCrvId, dLILen)
|
||||
EgtInvertCurve( nCrvId)
|
||||
EgtSetInfo( nCrvId, KEY_TYPE, TYPE.RIB)
|
||||
EgtSetName( nCrvId, LEAD_IN_CRV)
|
||||
@@ -332,11 +326,17 @@ local function AddRibsLeadIn( nCrv, nLoopsGrp, LayerParams)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams)
|
||||
local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, vtSlicing)
|
||||
|
||||
if abs( LayerParams.dRibsLOLen) < GEO.EPS_SMALL and
|
||||
abs( LayerParams.dRibsLOCoasting) < GEO.EPS_SMALL and
|
||||
abs( LayerParams.dRibsLOWipe) < GEO.EPS_SMALL then return end
|
||||
local dRibsLOLen = EgtGetInfo( nCrv, KEY_RIBS_LEAD_OUT_LEN, 'd')
|
||||
local dRibsLOCoasting = EgtGetInfo( nCrv, KEY_RIBS_LEAD_OUT_COASTING, 'd')
|
||||
local dRibsLOWipe = EgtGetInfo( nCrv, KEY_RIBS_LEAD_OUT_WIPE, 'd')
|
||||
local dRibsLOWipeAng = EgtGetInfo( nCrv, KEY_RIBS_LEAD_OUT_WIPE_DIR, 'd')
|
||||
local bRibsLOInvert = EgtGetInfo( nCrv, KEY_RIBS_LEAD_OUT_INVERT, 'b')
|
||||
|
||||
if abs( dRibsLOLen) < GEO.EPS_SMALL and
|
||||
abs( dRibsLOCoasting) < GEO.EPS_SMALL and
|
||||
abs( dRibsLOWipe) < GEO.EPS_SMALL then return end
|
||||
|
||||
local ptE = EgtEP( nCrv)
|
||||
-- recupero la curva di offset su cui calcolare lead out
|
||||
@@ -368,10 +368,10 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams)
|
||||
local nNewId = EgtSplitCurveAtParam( nCrvRef, dParE) or EgtCopyGlob( nCrvRef, nCrv, GDB_IN.AFTER)
|
||||
local dLen1 = EgtCurveLength( nCrvRef)
|
||||
local dLen2 = EgtCurveLength( nNewId)
|
||||
bInvert = LayerParams.bRibsLOInvert
|
||||
if dLen1 > LayerParams.dRibsLOLen + LayerParams.dRibsLOCoasting - GEO.EPS_SMALL and dLen2 < LayerParams.dRibsLOLen + LayerParams.dRibsLOCoasting - GEO.EPS_SMALL then
|
||||
bInvert = bRibsLOInvert
|
||||
if dLen1 > dRibsLOLen + dRibsLOCoasting - GEO.EPS_SMALL and dLen2 < dRibsLOLen + dRibsLOCoasting - GEO.EPS_SMALL then
|
||||
bInvert = true
|
||||
elseif dLen1 < LayerParams.dRibsLOLen + LayerParams.dRibsLOCoasting - GEO.EPS_SMALL and dLen2 > LayerParams.dRibsLOLen + LayerParams.dRibsLOCoasting - GEO.EPS_SMALL then
|
||||
elseif dLen1 < dRibsLOLen + dRibsLOCoasting - GEO.EPS_SMALL and dLen2 > dRibsLOLen + dRibsLOCoasting - GEO.EPS_SMALL then
|
||||
bInvert = false
|
||||
end
|
||||
|
||||
@@ -386,13 +386,13 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams)
|
||||
|
||||
-- verifico se la curva ha lunghezza sufficiente
|
||||
local dLen = EgtCurveLength( nCrvRef)
|
||||
local bSkip = ( dLen - LayerParams.dRibsLOLen - LayerParams.dRibsLOCoasting < - GEO.EPS_SMALL)
|
||||
local bSkip = ( dLen - dRibsLOLen - dRibsLOCoasting < - GEO.EPS_SMALL)
|
||||
local vtE = EgtSV( nCrvRef)
|
||||
|
||||
-- primo tratto ( segue offset con flusso aperto)
|
||||
if LayerParams.dRibsLOLen > GEO.EPS_SMALL and not bSkip then
|
||||
if dRibsLOLen > GEO.EPS_SMALL and not bSkip then
|
||||
nCrvLO = EgtCopyGlob( nCrvRef, nCrv, GDB_IN.AFTER)
|
||||
EgtTrimCurveEndAtLen( nCrvLO, LayerParams.dRibsLOLen)
|
||||
EgtTrimCurveEndAtLen( nCrvLO, dRibsLOLen)
|
||||
EgtSetInfo( nCrvLO, KEY_TYPE, TYPE.RIB)
|
||||
EgtSetName( nCrvLO, LEAD_OUT_CRV)
|
||||
-- aggiorno ptE e vtE
|
||||
@@ -401,10 +401,10 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams)
|
||||
end
|
||||
|
||||
-- secondo tratto ( segue offset con flusso chiuso)
|
||||
if LayerParams.dRibsLOCoasting > GEO.EPS_SMALL and not bSkip then
|
||||
if dRibsLOCoasting > GEO.EPS_SMALL and not bSkip then
|
||||
nCoasting = EgtCopyGlob( nCrvRef, nCrvLO or nCrv, GDB_IN.AFTER)
|
||||
EgtTrimCurveStartAtLen( nCoasting, LayerParams.dRibsLOLen)
|
||||
EgtTrimCurveEndAtLen( nCoasting, LayerParams.dRibsLOCoasting)
|
||||
EgtTrimCurveStartAtLen( nCoasting, dRibsLOLen)
|
||||
EgtTrimCurveEndAtLen( nCoasting, dRibsLOCoasting)
|
||||
|
||||
EgtSetName( nCoasting, COASTING_CRV)
|
||||
EgtSetInfo( nCoasting, KEY_TYPE, TYPE.COASTING)
|
||||
@@ -417,10 +417,10 @@ local function AddRibsLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams)
|
||||
EgtErase( nCrvRef)
|
||||
|
||||
-- terzo tratto ( diretto verso esterno con ugello chiuso)
|
||||
if LayerParams.dRibsLOWipe > GEO.EPS_SMALL then
|
||||
local dAng = EgtIf( bInvert, 90, - 90) + LayerParams.dRibsLOWipeAng
|
||||
vtE:rotate( LayerParams.vtSlicing, dAng)
|
||||
local ptFinal = ptE + vtE * LayerParams.dRibsLOWipe
|
||||
if dRibsLOWipe > GEO.EPS_SMALL then
|
||||
local dAng = EgtIf( bInvert, 90, - 90) + dRibsLOWipeAng
|
||||
vtE:rotate( vtSlicing, dAng)
|
||||
local ptFinal = ptE + vtE * dRibsLOWipe
|
||||
nWipe = EgtCurveCompoFromPoints( nTPathGrp, { ptE, ptFinal})
|
||||
EgtRelocateGlob( nWipe, nCoasting or nCrvLO or nCrv, GDB_IN.AFTER)
|
||||
EgtSetName( nWipe, WIPE_CRV)
|
||||
@@ -453,19 +453,22 @@ local function CalcRibsToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ)
|
||||
EgtSetColor( nNewEntId, EgtStdColor('GRAY'))
|
||||
end
|
||||
|
||||
-- estraggo i contorni della superficie di offset
|
||||
-- estraggo i contorni di tutte le superfici di offset
|
||||
local nLoopGrp = EgtGroup( nRibsGrp)
|
||||
local nSrfId = EgtGetFirstNameInGroup( nRibsGrp, LAYER_SRF)
|
||||
local nChunksNbr = EgtSurfFrChunkCount( nSrfId)
|
||||
for i = 0, nChunksNbr do
|
||||
local nRes, nCnt = EgtExtractSurfFrChunkLoops( nSrfId, i, nLoopGrp)
|
||||
if nRes then
|
||||
for j = nRes, nRes + nCnt - 1 do
|
||||
EgtMove( j, dCorrZ * Z_AX(), GDB_RT.GLOB)
|
||||
-- mi sposto dell'altezza layer
|
||||
EgtMove( j, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
while nSrfId do
|
||||
local nChunksNbr = EgtSurfFrChunkCount( nSrfId)
|
||||
for i = 0, nChunksNbr do
|
||||
local nRes, nCnt = EgtExtractSurfFrChunkLoops( nSrfId, i, nLoopGrp)
|
||||
if nRes then
|
||||
for j = nRes, nRes + nCnt - 1 do
|
||||
EgtMove( j, dCorrZ * Z_AX(), GDB_RT.GLOB)
|
||||
-- mi sposto dell'altezza layer
|
||||
EgtMove( j, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
end
|
||||
end
|
||||
end
|
||||
nSrfId = EgtGetNextName( nSrfId, LAYER_SRF)
|
||||
end
|
||||
|
||||
-- recupero i gruppi delle costolature
|
||||
@@ -479,21 +482,28 @@ local function CalcRibsToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ)
|
||||
end
|
||||
|
||||
local bInters = EgtGetInfo( nRibsGrp, KEY_RIBS_INTERS, 'b') or false
|
||||
local bSpecialCase = bInters and LayerParams.nRibsShellsNbr == 2
|
||||
local bAllTwoStrands = EgtGetInfo( nRibsGrp, KEY_RIBS_TWO_STRANDS, 'b') or false
|
||||
local bSpecialCase = bInters and bAllTwoStrands
|
||||
local bSwap = false
|
||||
-- orientamento delle curve
|
||||
local bInvert = LayerParams.bRibsInvert
|
||||
-- orientamento del primo gruppo di curve
|
||||
local bInvert = EgtGetInfo( tabRibs[1][1], KEY_RIBS_INVERT_DIR, 'b')
|
||||
if not bSpecialCase then
|
||||
for i = 1, #tabRibs do
|
||||
for i = 1, #tabRibs do
|
||||
local nInfo = EgtGetInfo( tabRibs[i][1], KEY_SPLIT_RIB, 'i')
|
||||
local nShellsNbr = EgtGetInfo( tabRibs[i][1], KEY_RIBS_SHELLS_NBR, 'i')
|
||||
-- aggiorno bInvert per il gruppo di costolature analizzato
|
||||
if i > 1 and not nInfo then
|
||||
if LayerParams.bRibsLink and LayerParams.nRibsShellsNbr % 2 == 1 then
|
||||
bInvert = not bInvert
|
||||
if not LayerParams.bRibsLink then
|
||||
bInvert = EgtGetInfo( tabRibs[i][1], KEY_RIBS_INVERT_DIR, 'b')
|
||||
else
|
||||
if i > 1 and not nInfo then
|
||||
local nPrevShellsNbr = EgtGetInfo( tabRibs[i-1][1], KEY_RIBS_SHELLS_NBR, 'i')
|
||||
if nPrevShellsNbr % 2 == 1 then
|
||||
bInvert = not bInvert
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if LayerParams.nRibsShellsNbr == 1 and nInfo and bInvert then
|
||||
if nShellsNbr == 1 and nInfo and bInvert then
|
||||
-- se inverto direzione di costolature divise allora devo invertirne anche l'ordine di realizzazione
|
||||
bSwap = true
|
||||
EgtRelocateGlob( tabRibs[i][1], tabRibs[i-1][1], GDB_IN.BEFORE)
|
||||
@@ -550,12 +560,12 @@ local function CalcRibsToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ)
|
||||
-- verifico se necessario lead in
|
||||
local nPrev = EgtGetPrev( nCrvRib)
|
||||
if not nPrev or EgtGetName( nPrev) then
|
||||
AddRibsLeadIn( nCrvRib, nLoopGrp, LayerParams)
|
||||
AddRibsLeadIn( nCrvRib, nLoopGrp)
|
||||
end
|
||||
-- verifico se necessario lead out
|
||||
local nNext = EgtGetNext( nCrvRib)
|
||||
if not nNext or EgtGetName( nNext) then
|
||||
AddRibsLeadOut( nCrvRib, nTpathGrpId, nLoopGrp, LayerParams)
|
||||
AddRibsLeadOut( nCrvRib, nTpathGrpId, nLoopGrp, LayerParams.vtSlicing)
|
||||
end
|
||||
nCrvRib = EgtGetNextName( nCrvRib, RIBS_CRV .. '*')
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user