From 6a0a872b0bd7ea66a48b258799cdcdf2d2040f24 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Thu, 20 Feb 2025 16:47:43 +0100 Subject: [PATCH] - ultimata la gestione delle giunzioni tra paretine. --- TemplateTool.lua | 54 +++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/TemplateTool.lua b/TemplateTool.lua index 81daf1d..917ab27 100644 --- a/TemplateTool.lua +++ b/TemplateTool.lua @@ -704,47 +704,49 @@ function TJunction(dAngBetween, dTh1, dTh2, nType, dLen1, dLen2, bOnLoop) if dAngBetween > 0 then if nType == JUNC.TrimStart then -- trim start - local dDeltaStart = - dTh1 / sin(dAngBetween) - dLen2 = dLen2 + dDeltaStart + local dDeltaStart = dTh1 / sin(dAngBetween) + if not bOnLoop then dDeltaStart = dDeltaStart - dTh2 * tan(90 - dAngBetween) end + dLen2 = dLen2 - dDeltaStart dXOffset2 = - dDeltaStart -- extend end - local dDeltaEnd = dTh1 * tan(90- math.abs(dAngBetween)) + local dDeltaEnd = dTh1 * tan(90- dAngBetween) dLen1 = dLen1 + dDeltaEnd dXOffset1 = dDeltaEnd elseif nType == JUNC.TrimEnd then -- trim end - local dDeltaEnd = - dTh2 / sin(dAngBetween) - dLen1 = dLen1 + dDeltaEnd - dXOffset1 = dDeltaEnd + local dDeltaEnd = dTh2 / sin(dAngBetween) + if not bOnLoop then dDeltaEnd = dDeltaEnd - dTh1 * tan(90 - dAngBetween) end + dLen1 = dLen1 - dDeltaEnd + dXOffset1 = - dDeltaEnd -- extend start - local dDeltaStart = dTh2 * tan(90- math.abs(dAngBetween)) + local dDeltaStart = dTh2 * tan(90- dAngBetween) dLen2 = dLen2 + dDeltaStart - dXOffset2 = - dDeltaStart + dXOffset2 = dDeltaStart end else - -- qui sto estendendo le lunghezze, infatti gli angoli sono nergativi e quindi anche il loro seno + -- qui sto estendendo le lunghezze, infatti gli angoli sono negativi e quindi anche il loro seno if nType == JUNC.TrimStart then -- il trim start diventa un extend end - local dDeltaEnd = - dTh2 / sin(dAngBetween) + local dDeltaEnd = dTh2 / sin(math.abs(dAngBetween)) if not bOnLoop then dDeltaEnd = dDeltaEnd - dTh1 * tan(90 - math.abs(dAngBetween)) end dLen1 = dLen1 + dDeltaEnd dXOffset1 = dDeltaEnd -- accorcio lo start local dDeltaStart = 0 - if not bOnLoop then dDeltaStart = - dTh2 * tan(90- math.abs(dAngBetween)) end - dLen2 = dLen2 + dDeltaStart + if not bOnLoop then dDeltaStart = dTh2 * tan(90- math.abs(dAngBetween)) end + dLen2 = dLen2 - dDeltaStart dXOffset2 = - dDeltaStart elseif nType == JUNC.TrimEnd then -- il trim end diventa un extend start - local dDeltaStart = dTh1 / sin(dAngBetween) - if not bOnLoop then dDeltaStart = dDeltaStart + dTh2 * tan(90 - math.abs(dAngBetween)) end - dLen2 = dLen2 - dDeltaStart + local dDeltaStart = dTh1 / sin(math.abs(dAngBetween)) + if not bOnLoop then dDeltaStart = dDeltaStart - dTh2 * tan(90 - math.abs(dAngBetween)) end + dLen2 = dLen2 + dDeltaStart dXOffset2 = dDeltaStart -- accorcio l'end local dDeltaEnd = 0 - if not bOnLoop then dDeltaEnd = - dTh1 * tan(90- math.abs(dAngBetween)) end - dLen1 = dLen1 + dDeltaEnd - dXOffset1 = dDeltaEnd + if not bOnLoop then dDeltaEnd = dTh1 * tan(90- math.abs(dAngBetween)) end + dLen1 = dLen1 - dDeltaEnd + dXOffset1 = - dDeltaEnd end end return dLen1, dLen2, dXOffset1, dXOffset2 @@ -773,7 +775,11 @@ function AngleJunction(dAngBetween, dTh1, dTh2, dLen1, dLen2, bOnLoop) end function ManageJunction(dAngBetween, dTh1, dTh2, nType, dLen1, dLen2, bOnLoop) - --nJunctionType -- 1 TrimStart, 2 TrimEnd, 3Ang + -- l'offset restituito è del segno della variazione di lunghezza del segmento + -- se la modifica è stata fatta allo start del pezzo allora bisognerà applicare uno spostamento + -- di segno opposto alla variazione di lunghezza + + --nJunctionType -- 1 TrimStart, 2 TrimEnd, 3 Angled, 4 TrimBoth, 5 TrimNone if nType == 1 or nType == 2 then return TJunction(dAngBetween, dTh1, dTh2, nType, dLen1, dLen2, bOnLoop) elseif nType == 3 then @@ -995,17 +1001,19 @@ function TOOL.CreateParetina(nEdgeId, tbInfo, dPairAngCorr) tbInfo.dSideAngR = dSideAngDx if not tbInfo.bOnLoop then dLenPrev, dLen, _, dOffset = ManageJunction(PrevAng,dThPrev, dTh,nJunctionWithPrev, dLenPrev, dLen, tbInfo.bOnLoop) - if tbInfo.nPairMode == 2 then dXOffset = dXOffset + dOffset end + -- modifiche alla lunghezza allo start si traducono in offset di segno opposto + if tbInfo.nPairMode == 2 then dXOffset = dXOffset - dOffset end end else -- se ho una giunzione a T allora devo aggiustare la lunghezza dei pezzi sia che la faccia sia On, sia che sia Off dLenPrev, dLen, _, dOffset = ManageJunction(PrevAng,dThPrev, dTh,nJunctionWithPrev, dLenPrev, dLen, tbInfo.bOnLoop) -- setto il sideang da giunzione a T - local dSideAngDx = 90 - math.abs(PrevAng) + local dSideAngDx = PrevAng > 0 and (PrevAng - 90) or (90 + PrevAng) if tbInfo.bOnLoop then dSideAngDx = dSideAngDx * (-1) end tbInfo.dSideAngR = dSideAngDx tbInfo.dAngBR = 90 - if tbInfo.nPairMode == 2 then dXOffset = dXOffset + dOffset end + -- modifiche alla lunghezza allo start si traducono in offset di segno opposto + if tbInfo.nPairMode == 2 then dXOffset = dXOffset - dOffset end end else -- setto il sideAng da giunzione a T (che va bene anche se la giunzione è angolata ma senza pezzo precedente) @@ -1041,7 +1049,7 @@ function TOOL.CreateParetina(nEdgeId, tbInfo, dPairAngCorr) -- se ho una giunzione a T allora devo aggiustare la lunghezza dei pezzi sia che la faccia sia On, sia che sia Off dLen, dLenNext, dOffset, _ = ManageJunction(NextAng, dTh, dThNext, nJunctionWithNext, dLen, dLenNext, tbInfo.bOnLoop) -- setto il sideang da giunzione a T - local dSideAngSx = 90 - math.abs(NextAng) + local dSideAngSx = NextAng > 0 and (NextAng - 90) or (90 + NextAng) if tbInfo.bOnLoop then dSideAngSx = dSideAngSx * (-1) end tbInfo.dSideAngL = dSideAngSx tbInfo.dAngBL = 90