From 883c5a2dbd0c5d680fed35291d806509d6e65039 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Mon, 17 Feb 2025 17:38:24 +0100 Subject: [PATCH] - corretta la gestione della creazione delle paretine in base al tipo di giunzione. --- TemplateTool.lua | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/TemplateTool.lua b/TemplateTool.lua index e49fb7c..e4887f7 100644 --- a/TemplateTool.lua +++ b/TemplateTool.lua @@ -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