- corretta la gestione della creazione delle paretine in base al tipo di giunzione.
This commit is contained in:
+29
-15
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user