diff --git a/CreateSOLID_FromPartsInPark.lua b/CreateSOLID_FromPartsInPark.lua index 2e19df6..0132366 100644 --- a/CreateSOLID_FromPartsInPark.lua +++ b/CreateSOLID_FromPartsInPark.lua @@ -760,22 +760,28 @@ local function CorrectReference() local nLayRef = EgtGetFirstNameInGroup( IdFP, "Ref") local nRef = EgtGetFirstInGroup(nLayRef) while nRef do - local var = EgtGetInfo(nRef, "Var") - if var == "Th" then - var = RTh - else - var = EgtGetInfo(nRef, "Var", "i") - end - local dir = EgtGetInfo(nRef, "Dir") - if dir then - local tbDir = EgtSplitString(dir,",") - local vtDir = {} - for _,sDir in pairs(tbDir) do - sDir = sDir:gsub("x", EgtNumToString(var)) - table.insert(vtDir, EgtEvalNumExpr(sDir)) + -- controllo se l'offset ai riferimenti è già stato eseguito + local bDone = EgtGetInfo(nRef, 'OffsetDone') + if not bDone then + local var = EgtGetInfo(nRef, "Var") + if var == "Th" then + var = RTh + else + var = EgtGetInfo(nRef, "Var", "i") end - vtDir = Vector3d(vtDir) - EgtMove(nRef,vtDir, GDB_RT.GLOB) + local dir = EgtGetInfo(nRef, "Dir") + if dir then + local tbDir = EgtSplitString(dir,",") + local vtDir = {} + for _,sDir in pairs(tbDir) do + sDir = sDir:gsub("x", EgtNumToString(var)) + table.insert(vtDir, EgtEvalNumExpr(sDir)) + end + vtDir = Vector3d(vtDir) + EgtMove(nRef,vtDir, GDB_RT.GLOB) + end + -- setto l'info che certifica che l'offset è stato eseguito + EgtSetInfo(nRef, 'OffsetDone', true) end nRef = EgtGetNext(nRef) end diff --git a/TemplateTool.lua b/TemplateTool.lua index 5b7b715..f15d1e9 100644 --- a/TemplateTool.lua +++ b/TemplateTool.lua @@ -578,7 +578,7 @@ function TOOL.CreateParetina(i, tbIdLoopTC, tbInfo, dPairAngCorr) local dLen = EgtCurveLength(tbIdLoopTC[i]) local dLenPrev = EgtCurveLength(tbIdLoopTC[#tbIdLoopTC]) local dLenNext = EgtCurveLength(tbIdLoopTC[nNext]) - local PAng, NAng = GetPrevNextAng(tbIdLoopTC[i]) + local PrevAng, NextAng = GetPrevNextAng(tbIdLoopTC[i]) local dTh = EgtGetInfo(tbInfo.nId, 'dTh','d') -- calcolo l'angolo di sformo con il pezzo precedente @@ -587,32 +587,32 @@ function TOOL.CreateParetina(i, tbIdLoopTC, tbInfo, dPairAngCorr) local bSameSide = dPairAng * dPairAngPrev > 0 if bSameSide then if tbInfo.nJunctionType == 3 then - local dSideAng_4, _, dBeta_DX = CalcDraftAngle( vtDirPrev, vtDirCurr, dPairAngPrev, dPairAng, PAng) + local dSideAng_4, _, dBeta_DX = CalcDraftAngle( vtDirPrev, vtDirCurr, dPairAngPrev, dPairAng, PrevAng) --tbInfo.dAngBR = 180 - dBeta_DX tbInfo.dAngBR = dBeta_DX if tbInfo.bOnLoop then dSideAng_4 = dSideAng_4 * (-1) end - if PAng < 0 then dSideAng_4 = dSideAng_4 * (-1) end + if PrevAng < 0 then dSideAng_4 = dSideAng_4 * (-1) end tbInfo.dSideAngR = dSideAng_4 if not tbInfo.bOnLoop then - dLenPrev, dLen, dXOffset = ManageJunction(PAng,dTh, dTh,tbInfo.nJunctionType, dLenPrev, dLen) + dLenPrev, dLen, dXOffset = ManageJunction(PrevAng,dTh, dTh,tbInfo.nJunctionType, dLenPrev, dLen) 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, dXOffset = ManageJunction(PAng,dTh, dTh,tbInfo.nJunctionType, dLenPrev, dLen) + dLenPrev, dLen, dXOffset = ManageJunction(PrevAng,dTh, dTh,tbInfo.nJunctionType, dLenPrev, dLen) -- setto il sideang da giunzione a T -- setto il sideang da giunzione a T - local dSideAng_4 = 90 - math.abs(PAng) + local dSideAng_4 = 90 - math.abs(PrevAng) if tbInfo.bOnLoop then dSideAng_4 = dSideAng_4 * (-1) end tbInfo.dSideAngR = dSideAng_4 end else -- setto il sideAng da giunzione a T (che va bene anche se la giunzione è angolata ma senza pezzo precedente) - local dSideAng = PAng < 0 and (90 + PAng) or 90-PAng + local dSideAng = PrevAng < 0 and (90 + PrevAng) or 90-PrevAng if tbInfo.bOnLoop then dSideAng = dSideAng * (-1) end tbInfo.dSideAngR = dSideAng -- visto che il pezzo precedente non è dallo stesso lato allora corrego l'estensione del pezzo corrente (in funzione del suo spessore) if not tbInfo.bOnLoop then - local dOffset = dTh * tan( 90 - PAng) + local dOffset = dTh * tan( 90 - PrevAng) dLen = dLen + dOffset if tbInfo.nJunctionType == 1 then dXOffset = dXOffset + dOffset end end @@ -621,31 +621,31 @@ function TOOL.CreateParetina(i, tbIdLoopTC, tbInfo, dPairAngCorr) bSameSide = dPairAng * dPairAngNext > 0 if bSameSide then if tbInfo.nJunctionType == 3 then - local dSideAng_2, dBeta_SX, __ = CalcDraftAngle( vtDirCurr, vtDirNext, dPairAng, dPairAngNext, NAng) + local dSideAng_2, dBeta_SX, __ = CalcDraftAngle( vtDirCurr, vtDirNext, dPairAng, dPairAngNext, NextAng) -- tbInfo.dAngBL = 180 - dBeta_SX tbInfo.dAngBL = dBeta_SX if tbInfo.bOnLoop then dSideAng_2 = dSideAng_2 * (-1) end - if NAng < 0 then dSideAng_2 = dSideAng_2 * (-1) end + if NextAng < 0 then dSideAng_2 = dSideAng_2 * (-1) end tbInfo.dSideAngL = dSideAng_2 if not tbInfo.bOnLoop then - dLen, dLenNext = ManageJunction(NAng, dTh, dTh, tbInfo.nJunctionType, dLen, dLenNext) + dLen, dLenNext = ManageJunction(NextAng, dTh, dTh, tbInfo.nJunctionType, dLen, dLenNext) 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 = ManageJunction(NAng, dTh, dTh, tbInfo.nJunctionType, dLen, dLenNext) + dLen, dLenNext = ManageJunction(NextAng, dTh, dTh, tbInfo.nJunctionType, dLen, dLenNext) -- setto il sideang da giunzione a T - local dSideAng_2 = 90 - math.abs(NAng) + local dSideAng_2 = 90 - math.abs(NextAng) if tbInfo.bOnLoop then dSideAng_2 = dSideAng_2 * (-1) end tbInfo.dSideAngL = dSideAng_2 end else -- setto il sideAng da giunzione a T (che va bene anche se la giunzione è angolata ma senza pezzo successivo) - local dSideAng = NAng < 0 and (90 + NAng) or 90-NAng + local dSideAng = NextAng < 0 and (90 + NextAng) or 90-NextAng if tbInfo.bOnLoop then dSideAng = dSideAng * (-1) end tbInfo.dSideAngL = dSideAng -- visto che il pezzo successivo non è dallo stesso lato allora correggo l'estensione del pezzo corrente (in funzione del suo spessore) if not tbInfo.bOnLoop then - local dOffset = dTh * tan( 90 - NAng) + local dOffset = dTh * tan( 90 - NextAng) dLen = dLen + dOffset if tbInfo.nJunctionType == 2 then dXOffset = dXOffset + dOffset end end diff --git a/TopChicken.lua b/TopChicken.lua index fd25652..cfc83c4 100644 --- a/TopChicken.lua +++ b/TopChicken.lua @@ -225,7 +225,7 @@ local function CreateSplitBottomPart( tbIdLoop, nParent, dOffset) EgtSetInfo(Pz_Bottom, 'PairAng', tbPart.dPairAng) tbPart.nJunctionType = 3 tbPart.bOnLoop = true - tbPart.dH = EgtPointCurveDist( ptCenter, tbLoopOff[i], GDB_RT.GLOB) - 15 + tbPart.dH = (EgtPointCurveDist( ptCenter, tbLoopOff[i], GDB_RT.GLOB) - CMP.DiamBore) / cos(CMP.dSlopeAng) tbPart.nPrev = nPrev if i > 1 then tbSplitBottom[nPrev].nNext = Pz_Bottom end tbSplitBottom[Pz_Bottom] = tbPart @@ -459,7 +459,7 @@ function CMP_Draw(bPreview) --CreateBottomPart( tbIdInLoopTC, 'InPartA4') CreateSplitBottomPart( tbIdInLoopTC, Pz_Top, CMP.SWater) - TOOL.SaveMePlease() + --TOOL.SaveMePlease() TOOL.CreateDimensionLayer()