- corretta la gestione della creazione delle paretine in base al tipo di giunzione.

This commit is contained in:
Daniele Bariletti
2025-02-17 17:38:24 +01:00
parent e6ed9a2ec6
commit 883c5a2dbd
+29 -15
View File
@@ -27,6 +27,7 @@ TOOL.nPrev = nil -- numero ordinale della paretina precedente alla cor
TOOL.nNext = nil -- numero ordinale della paretina successiva alla corrente
TOOL.dPairAng = nil -- angolo di accoppiamento
TOOL.nJunctionType = nil -- tipo di giunzione tra paretine: 1 trim start, 2 trim end, 3 giunzione angolata
TOOL.nPairMode = nil
TOOL.bOnLoop = nil -- flag che indica se la faccia buona è adiacente al lato del parent generatore della paretina corrente
TOOL.dAngBR = nil -- angolo BottomRight della faccia buona della paretina corrente
TOOL.dSideAngR = nil -- SideAng del lato Right(A2) (il primo lato è il bottom e si procede CCW)
@@ -69,6 +70,7 @@ function TOOL.ClearVariables()
TOOL.nNext = nil
TOOL.dPairAng = nil
TOOL.nJunctionType = nil
TOOL.nPairMode = nil
TOOL.bOnLoop = nil
TOOL.dAngBR = nil
TOOL.dSideAngR = nil
@@ -141,6 +143,7 @@ function TOOL.FillInfoTableFromPart(nPartId)
TOOL.tbInfo.nNextId = EgtGetFirstNameInGroup(GDB_ID.ROOT, EgtGetInfo(nPartId,"Next") or "") or GDB_ID.NULL
TOOL.tbInfo.nJunctionType = EgtGetInfo(nPartId,"JunctionType", "i")
TOOL.tbInfo.dPairAng = EgtGetInfo(nPartId, "PairAng", "d")
TOOL.tbInfo.nPairMode = EgtGetInfo(nPartId, "PairMode", "i")
TOOL.tbInfo.bOnLoop = EgtGetInfo(nPartId,"OnLoop", "b")
TOOL.tbInfo.bInsideLoop = EgtGetInfo(nPartId,"InsideLoop", "b")
TOOL.tbInfo.dAngBR = EgtGetInfo(nPartId,"AngBR", "d")
@@ -727,7 +730,8 @@ function TJunction(dAngBetween, dTh1, dTh2, nType, dLen1, dLen2, bOnLoop)
dLen1 = dLen1 + dDelta
dXOffset1 = dDelta
-- accorcio lo start
local dDeltaStart = - dTh2 * tan(90- math.abs(dAngBetween))
local dDeltaStart = 0
if not bOnLoop then dDeltaStart = - dTh2 * tan(90- math.abs(dAngBetween)) end
dLen2 = dLen2 + dDeltaStart
dXOffset2 = dDeltaStart
elseif nType == 2 then
@@ -737,7 +741,8 @@ function TJunction(dAngBetween, dTh1, dTh2, nType, dLen1, dLen2, bOnLoop)
dLen2 = dLen2 - dDeltaStart
dXOffset2 = dDeltaStart
-- accorcio l'end
local dDeltaEnd = - dTh1 * tan(90- math.abs(dAngBetween))
local dDeltaEnd = 0
if not bOnLoop then dDeltaEnd = - dTh1 * tan(90- math.abs(dAngBetween)) end
dLen1 = dLen1 + dDeltaEnd
dXOffset1 = dDeltaEnd
end
@@ -747,19 +752,24 @@ end
function AngleJunction(dAngBetween, dTh1, dTh2, dLen1, dLen2, bOnLoop)
-- modifico la lughezza dei lati solo se ho un angolo convesso
local dXOffset = 0
local dXOffest1 = 0
local dXOffest2 = 0
if not bOnLoop then
local dDelta1 = dTh2 / sin( dAngBetween)
local dDelta2 = dTh1 / sin( dAngBetween)
local dDelta1 = dTh1 * tan( abs(dAngBetween)/2)
local dDelta2 = dTh2 * tan( abs(dAngBetween)/2)
dXOffest1 = dDelta1
dXOffest2 = dDelta2
if dAngBetween > 0 then
dLen1 = dLen1 - dDelta1
dLen2 = dLen2 - dDelta2
dXOffest1 = dXOffest1 * (-1)
dXOffest2 = dXOffest2 * (-1)
else
dLen1 = dLen1 + dDelta1
dLen2 = dLen2 + dDelta2
end
end
return dLen1, dLen2, dXOffset, dXOffset
return dLen1, dLen2, dXOffest1, dXOffest2
end
function ManageJunction(dAngBetween, dTh1, dTh2, nType, dLen1, dLen2, bOnLoop)
@@ -897,14 +907,15 @@ function TOOL.CreateParetina(nEdgeId, tbInfo, dPairAngCorr)
if PrevAng < 0 then dSideAngDx = dSideAngDx * (-1) end
tbInfo.dSideAngR = dSideAngDx
if not tbInfo.bOnLoop then
dLenPrev, dLen, _, dOffset = ManageJunction(PrevAng,dThPrev, dTh,tbInfo.nJunctionType, dLenPrev, dLen)
dLenPrev, dLen, _, dOffset = ManageJunction(PrevAng,dThPrev, dTh,tbInfo.nJunctionType, dLenPrev, dLen, tbInfo.bOnLoop)
--if tbInfo.nIn then dOffset = - dOffset end
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,tbInfo.nJunctionType, dLenPrev, dLen)
dLenPrev, dLen, _, dOffset = ManageJunction(PrevAng,dThPrev, dTh,tbInfo.nJunctionType, dLenPrev, dLen, tbInfo.bOnLoop)
-- se sono su un inloop allora cambio il verso dell'offset
if tbInfo.nIn then dOffset = - dOffset end
--if tbInfo.nIn then dOffset = - dOffset end
-- setto il sideang da giunzione a T
local dSideAngDx = 90 - math.abs(PrevAng)
if tbInfo.bOnLoop then dSideAngDx = dSideAngDx * (-1) end
@@ -923,7 +934,7 @@ function TOOL.CreateParetina(nEdgeId, tbInfo, dPairAngCorr)
local dOffset = dTh * tan( 90 - PrevAng)
dLen = dLen + dOffset
-- se sono su un inloop allora cambio il verso dell'offset
if tbInfo.nIn then dOffset = - dOffset end
--if tbInfo.nIn then dOffset = - dOffset end
if tbInfo.nPairMode == 2 then dXOffset = dXOffset + dOffset end
end
end
@@ -941,14 +952,15 @@ function TOOL.CreateParetina(nEdgeId, tbInfo, dPairAngCorr)
if NextAng < 0 then dSideAngSx = dSideAngSx * (-1) end
tbInfo.dSideAngL = dSideAngSx
if not tbInfo.bOnLoop then
dLen, dLenNext, dXOffset, _ = ManageJunction(NextAng, dTh, dThNext, tbInfo.nJunctionType, dLen, dLenNext)
dLen, dLenNext, dOffset, _ = ManageJunction(NextAng, dTh, dThNext, tbInfo.nJunctionType, dLen, dLenNext, tbInfo.bOnLoop)
--if tbInfo.nIn then dOffset = - dOffset end
if tbInfo.nPairMode == 1 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
dLen, dLenNext, dXOffset, _ = ManageJunction(NextAng, dTh, dThNext, tbInfo.nJunctionType, dLen, dLenNext)
dLen, dLenNext, dOffset, _ = ManageJunction(NextAng, dTh, dThNext, tbInfo.nJunctionType, dLen, dLenNext, tbInfo.bOnLoop)
-- se sono su un inloop allora cambio il verso dell'offset
if tbInfo.nIn then dOffset = - dOffset end
--if tbInfo.nIn then dOffset = - dOffset end
-- setto il sideang da giunzione a T
local dSideAngSx = 90 - math.abs(NextAng)
if tbInfo.bOnLoop then dSideAngSx = dSideAngSx * (-1) end
@@ -967,7 +979,7 @@ function TOOL.CreateParetina(nEdgeId, tbInfo, dPairAngCorr)
local dOffset = dTh * tan( 90 - NextAng)
dLen = dLen + dOffset
-- se sono su un inloop allora cambio il verso dell'offset
if tbInfo.nIn then dOffset = - dOffset end
--if tbInfo.nIn then dOffset = - dOffset end
if tbInfo.nPairMode == 1 then dXOffset = dXOffset + dOffset end
end
end
@@ -1277,6 +1289,8 @@ function TOOL.CreateParetinaFull(bPrev, bNext, bRecurs)
nPairMode = 1
elseif TOOL.tbInfo.nJunctionType == 2 then
nPairMode = 2
elseif TOOL.tbInfo.nJunctionType == 3 then
nPairMode = 1
end
TOOL.tbInfo.nPairMode = nPairMode
end
@@ -1353,7 +1367,7 @@ function TOOL.CreateParetinaFull(bPrev, bNext, bRecurs)
TOOL.tbInfo.dSideAngT = TOOL.tbInfo.dPairAng + 90
TOOL.tbInfo.dYOffset = TOOL.tbInfo.dTh * tan(TOOL.tbInfo.dSideAngT)
TOOL.tbInfo.sDestRefOff = '0,0,-x'
TOOL.tbInfo.sRefOff = '0,'..EgtNumToString(TOOL.tbInfo.dYOffset)..',0'
TOOL.tbInfo.sRefOff = EgtNumToString(TOOL.tbInfo.dXOffset)..','..EgtNumToString(TOOL.tbInfo.dYOffset)..',0'
else
-- splashtop
TOOL.tbInfo.dSideAngT = TOOL.tbInfo.dPairAng - 90