diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index eec40b4..f18576f 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -2210,17 +2210,27 @@ local function SpiralVaseFullMultiPlanar( vLayIds, LayerParams) -- mi sposto dell'altezza layer EgtMove( nNewEntId, LayerParams.dLayHeight * vtSlicing, GDB_RT.GLOB) - -- eventuale lead in + -- offset lead point + if LayerParams.dOffsetLP > GEO.EPS_SMALL then + EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) + elseif LayerParams.dOffsetLP < - GEO.EPS_SMALL then + local _, dE = EgtCurveDomain( nNewEntId) + local dS = EgtCurveParamAtLength( nNewEntId, EgtCurveLength( nNewEntId) + LayerParams.dOffsetLP) + local nNewPart = EgtCopyParamRange( nNewEntId, dS, dE, nTpathGrpId) + if not EgtAddCurveCompoCurve( nNewEntId, nNewPart, true, false) then + EgtErase( nNewPart) + end + end + + -- lead in if LayerParams.nLeadInType ~= LEAD_TYPE.NONE then if not LayerParams.bSingleLeadIn or LayerParams.nFloorNbr == 0 then - EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) local nLeadInCrv = AddLeadIn( nNewEntId, LayerParams, nTpathGrpId) if nLeadInCrv and LayerParams.bLinearApprox then EgtApproxCurve( nLeadInCrv, GDB_CA.LINES, LayerParams.dLinearApproxTol) end end end - else -- recupero il piano precedente local vtSlicingPrev = EgtGetInfo( vLayIds[nIdx-1], KEY_SLICE_DIR, 'v') @@ -2489,6 +2499,29 @@ local function SpiralVaseFull( vLayIds, LayerParams) if nRealLayer == 1 then -- mi sposto dell'altezza layer EgtMove( nNewEntId, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB) + + -- offset lead point + if LayerParams.dOffsetLP > GEO.EPS_SMALL then + EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) + elseif LayerParams.dOffsetLP < - GEO.EPS_SMALL then + local _, dE = EgtCurveDomain( nNewEntId) + local dS = EgtCurveParamAtLength( nNewEntId, EgtCurveLength( nNewEntId) + LayerParams.dOffsetLP) + local nNewPart = EgtCopyParamRange( nNewEntId, dS, dE, nTpathGrpId) + if not EgtAddCurveCompoCurve( nNewEntId, nNewPart, true, false) then + EgtErase( nNewPart) + end + end + + -- lead in + if LayerParams.nLeadInType ~= LEAD_TYPE.NONE then + if not LayerParams.bSingleLeadIn or LayerParams.nFloorNbr == 0 then + local nLeadInCrv = AddLeadIn( nNewEntId, LayerParams, nTpathGrpId) + if nLeadInCrv and LayerParams.bLinearApprox then + EgtApproxCurve( nLeadInCrv, GDB_CA.LINES, LayerParams.dLinearApproxTol) + end + end + end + -- modifico altezza ultimo tratto local dTrimPar = EgtCurveParamAtLength( nNewEntId, EgtCurveLength( nNewEntId) - s_dSpralVaseFirstDelta) local nNewPart = EgtSplitCurveAtParam( nNewEntId, dTrimPar) @@ -2498,17 +2531,7 @@ local function SpiralVaseFull( vLayIds, LayerParams) EgtApproxCurve( nNewEntId, GDB_CA.LINES, LayerParams.dLinearApproxTol) EgtApproxCurve( nNewPart, GDB_CA.LINES, LayerParams.dLinearApproxTol) end - - -- eventuale lead in - if LayerParams.nLeadInType ~= LEAD_TYPE.NONE then - if not LayerParams.bSingleLeadIn or LayerParams.nFloorNbr == 0 then - EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) - local nLeadInCrv = AddLeadIn( nNewEntId, LayerParams, nTpathGrpId) - if nLeadInCrv and LayerParams.bLinearApprox then - EgtApproxCurve( nLeadInCrv, GDB_CA.LINES, LayerParams.dLinearApproxTol) - end - end - end + else -- a) garantisco continuità con layer precedente local ptOld = EgtEP( nOldId, GDB_ID.ROOT) @@ -2788,12 +2811,23 @@ local function SpiralVasePartialMultiPlanar( vLayIds, LayerParams) end end - -- eventuale lead in + -- eventuale offset lead point e lead in if bFirst then bFirst = false + + if LayerParams.dOffsetLP > GEO.EPS_SMALL then + EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) + elseif LayerParams.dOffsetLP < - GEO.EPS_SMALL then + local _, dE = EgtCurveDomain( nNewEntId) + local dS = EgtCurveParamAtLength( nNewEntId, EgtCurveLength( nNewEntId) + LayerParams.dOffsetLP) + local nNewPart = EgtCopyParamRange( nNewEntId, dS, dE, nTpathGrpId) + if not EgtAddCurveCompoCurve( nNewEntId, nNewPart, true, false) then + EgtErase( nNewPart) + end + end + if LayerParams.nLeadInType ~= LEAD_TYPE.NONE then if not LayerParams.bSingleLeadIn or LayerParams.nFloorNbr == 0 then - EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) local nLeadInCrv = AddLeadIn( nNewEntId, LayerParams, nTpathGrpId) if nLeadInCrv and LayerParams.bLinearApprox then EgtApproxCurve( nLeadInCrv, GDB_CA.LINES, LayerParams.dLinearApproxTol) @@ -2952,12 +2986,23 @@ local function SpiralVasePartial( vLayIds, LayerParams) end end - -- eventuale lead in + -- eventuale offset lead point e lead in if bFirst then bFirst = false + + if LayerParams.dOffsetLP > GEO.EPS_SMALL then + EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) + elseif LayerParams.dOffsetLP < - GEO.EPS_SMALL then + local _, dE = EgtCurveDomain( nNewEntId) + local dS = EgtCurveParamAtLength( nNewEntId, EgtCurveLength( nNewEntId) + LayerParams.dOffsetLP) + local nNewPart = EgtCopyParamRange( nNewEntId, dS, dE, nTpathGrpId) + if not EgtAddCurveCompoCurve( nNewEntId, nNewPart, true, false) then + EgtErase( nNewPart) + end + end + if LayerParams.nLeadInType ~= LEAD_TYPE.NONE then if not LayerParams.bSingleLeadIn or LayerParams.nFloorNbr == 0 then - EgtTrimCurveStartAtLen( nNewEntId, LayerParams.dOffsetLP) local nLeadInCrv = AddLeadIn( nNewEntId, LayerParams, nTpathGrpId) if nLeadInCrv and LayerParams.bLinearApprox then EgtApproxCurve( nLeadInCrv, GDB_CA.LINES, LayerParams.dLinearApproxTol)