- ultimata la gestione delle giunzioni tra paretine.

This commit is contained in:
Daniele Bariletti
2025-02-20 16:47:43 +01:00
parent 45aedbbbc7
commit 6a0a872b0b
+31 -23
View File
@@ -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