diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index d812767..e4cfb3d 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -353,6 +353,7 @@ local function AddLeadIn( nCrvId, LayerParams, nGrpId) EgtModifyCurveExtrusion( nLeadInCrv, LayerParams.vtSlicing, GDB_RT.GLOB) EgtSetInfo( nLeadInCrv, KEY_TYPE, TYPE.LINK) EgtSetName( nLeadInCrv, LEAD_IN_CRV) + EgtSetColor( nLeadInCrv, EgtStdColor('GRAY')) local dStrand = EgtGetInfo( nCrvId, KEY_CRV_STRAND, 'd') EgtSetInfo( nLeadInCrv, KEY_CRV_STRAND, dStrand) end @@ -387,6 +388,7 @@ local function AddLeadOut( nCrvId, LayerParams, nGrpId) EgtModifyCurveExtrusion( nLeadOutCrv, LayerParams.vtSlicing, GDB_RT.GLOB) EgtSetInfo( nLeadOutCrv, KEY_TYPE, TYPE.LINK) EgtSetName( nLeadOutCrv, LEAD_OUT_CRV) + EgtSetColor( nLeadOutCrv, EgtStdColor('GRAY')) local dStrand = EgtGetInfo( nCrvId, KEY_CRV_STRAND, 'd') EgtSetInfo( nLeadOutCrv, KEY_CRV_STRAND, dStrand) end diff --git a/LuaLibs/RunCalcSolids.lua b/LuaLibs/RunCalcSolids.lua index 5488fca..15b87d6 100644 --- a/LuaLibs/RunCalcSolids.lua +++ b/LuaLibs/RunCalcSolids.lua @@ -436,41 +436,52 @@ function RunCalcSolids.Exec() nSolidGrpId = EgtGroup( nCrvGrpId) EgtSetName( nSolidGrpId, SOLID_GRP) EgtSetLevel( nSolidGrpId, GDB_LV.TEMP) - -- scorro le curve del percorso utensile per creare i solidi local vIds = EgtGetAllInGroup( nTPathGrpId) - if LayerParams.bSpiralVase and #vIds > 2 and EgtGetName( vIds[#vIds]) ~= WIPE_CRV then - -- nel caso a spirale gestione speciale per unire i tratti dei primi layers che sono stati spezzati per feed variabile - local bHasDelta = EgtExistsInfo( vIds[#vIds], KEY_FEED_COEFF) - if bHasDelta then - -- prima curva รจ a quota costante - CreateSolidFromCurve( vIds[1], nSolidGrpId, LayerParams, nLayer) - -- le rimanenti curve possono essere unite - local vNewIds = EgtTableFill( vIds[2], #vIds-1) - local nNewCrv = EgtCurveCompo( nSolidGrpId, vNewIds, false) - local dStrand = EgtGetInfo( vIds[2], KEY_CRV_STRAND, 'd') or LayerParams.dStrand - EgtSetInfo( nNewCrv, KEY_CRV_STRAND, dStrand) - EgtSetInfo( nNewCrv, KEY_TYPE, TYPE.OUTER_SHELL) - CreateSolidFromCurve( nNewCrv, nSolidGrpId, LayerParams, nLayer) - EgtErase( nNewCrv) - else - local vNewIds = EgtTableFill( vIds[1], #vIds-1) - local nNewCrv = EgtCurveCompo( nSolidGrpId, vNewIds, false) - local dStrand = EgtGetInfo( vIds[2], KEY_CRV_STRAND, 'd') or LayerParams.dStrand - EgtSetInfo( nNewCrv, KEY_CRV_STRAND, dStrand) - EgtSetInfo( nNewCrv, KEY_TYPE, TYPE.OUTER_SHELL) - CreateSolidFromCurve( nNewCrv, nSolidGrpId, LayerParams, nLayer) - EgtErase( nNewCrv) - CreateSolidFromCurve( vIds[#vIds], nSolidGrpId, LayerParams, nLayer) + -- spiral vase + if LayerParams.bSpiralVase then + -- i tratti di ingresso, uscita e quelli a quota costante vanno gestiti singolarmente, quelli a quota variabile vanno concatenati + local vChainedIds = {} + local vTmpIds = {} + for i = 1, #vIds do + local sName = EgtGetName( vIds[i]) + local dDelta = ( EgtEP( vIds[i], GDB_ID.ROOT) - EgtSP( vIds[i], GDB_ID.ROOT)) * LayerParams.vtSlicing + if abs( dDelta) < GEO.EPS_SMALL or sName == LEAD_IN_CRV or sName == LEAD_OUT_CRV or sName == COASTING_CRV or sName == WIPE_CRV then + -- inserisco il gruppo di tratti da concatenare e lo resetto + if #vTmpIds > 0 then + table.insert( vChainedIds, vTmpIds) + vTmpIds = {} + end + -- inserisco la curva singola corrente + table.insert( vChainedIds, { vIds[i]}) + else + table.insert( vTmpIds, vIds[i]) + end + end + -- inserisco ultimo gruppo + if #vTmpIds > 0 then + table.insert( vChainedIds, vTmpIds) end + for i = 1, #vChainedIds do + if #vChainedIds[i] == 1 then + CreateSolidFromCurve( vChainedIds[i][1], nSolidGrpId, LayerParams, nLayer) + else + local nNewCrv = EgtCurveCompo( nSolidGrpId, vChainedIds[i], false) + local dStrand = EgtGetInfo( vChainedIds[i][1], KEY_CRV_STRAND, 'd') or LayerParams.dStrand + EgtSetInfo( nNewCrv, KEY_CRV_STRAND, dStrand) + EgtSetInfo( nNewCrv, KEY_TYPE, TYPE.OUTER_SHELL) + CreateSolidFromCurve( nNewCrv, nSolidGrpId, LayerParams, nLayer) + EgtErase( nNewCrv) + end + end + + -- caso standard else - -- caso standard for i = 1, #vIds do CreateSolidFromCurve( vIds[i], nSolidGrpId, LayerParams, nLayer) end end - else bSolidsOk = true break