-- -- EEEEEEEEEE GGGGGG wwww wwww -- EEEEEEEEEE GGGGGGGGGG wwww wwww -- EEEE GGGG GGGG wwww wwww wwww -- EEEE GGGG wwww wwww wwww -- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww -- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww -- EEEE GGGG GGGG wwww wwwwwwww wwww -- EEEE GGGG GGGG wwww wwww wwww wwww -- EEEEEEEEEE GGGGGGGGGG wwwwwwww wwwwwwww -- EEEEEEEEEE GGGGGG wwwwwww wwwwwww -- -- Strike.lua by EgalWare s.r.l. 2016.06.14 -- Autore: Filippo Monchi -- edge pull tipo mortise o cilindrica -- 2016.09.21 V1.011 FM add warning messages -- 2017.08.30 V1.012 FM Add flag for not rotate Face on bevel profile -- 2018.04.05 V1.013 FM Manage info (KeepBackSet) for adjust probe on Z -- 2018.10.17 V1.014 FM Add parameter to show into message 402 -- 2018.10.22 V1.015 FM Manage better the big radius fillet parameter -- 2018.10.22 V1.015 FM Add new parameter D_XE to move all geometries -- 2018.10.22 V1.019 FM Manage new parameter reference (backset or door side) for keyway and secure extra geometries -- 2019.05.23 V1.01a FM Manage anti-splint path on strike extra rectangle geometry -- 2019.09.30 V1.01b FM Manage anti-splint path on anti-splint path -- 2019.10.10 V1.01c FM Manage steel option (disable to generate pocket paths, mortise, make closed and extend face path) -- 2019.10.18 V2.000 FM Manage use Materials -- 2019.10.29 V2.001 FM Add clean corner geometries -- 2019.12.16 V2.002 FM Fix error on 2nd mortise (not assign tool diameter in case join is false) -- 2019.12.18 V2.003 FM Use new parameter DGC.Eah that allow insert template also on bullnose ans convex profiles -- 2019.12.20 V2.004 FM fix a bug on clean corner direction path in case main path turn reverse -- 2020.04.29 V2.005 FM Update for aluminum material -- 2020.05.25 V2.006 FM Manage geometries for calculate region when frame(jamb) is disposed on wide side -- 2020.05.29 V2.007 FM Manage geometries for calculate region when frame(jamb) is disposed on narrow side -- 2020.06.24 V2.008 FM Add new line of mounting screw bores -- 2020.07.01 V2.009 FM Disable Warning message on frames if parameter DGD.Spd is <= 0 -- 2021.01.22 V3.000 FM Manage better checking error on tools and dimension when produce flag is false -- 2021.02.22 V3.001 FM fix error on check DGD.SIDE (not yet used on strike) -- 2021.03.12 V3.002 FM Check and adjust the angle parameter on extra rectangle and extra lines -- 2021.05.11 V3.003 FM fix error on assign name to join paths -- 2021.11.24 V3.004 FM Manage side probe option if variable DGC.Pms > 2 -- 2022.07.20 V3.005 FM Use parameter .ITP (Internal Path) from template lua file instead of function EgtGetSourceDir(1) -- 2022.07.27 V3.006 FM Modification to use compiled code -- 2024.07.19 V3.007 FM Set note 'NotCheckDir' to pocketing and antisplint paths -- 2024.10.04 V3.008 FM Manage probe geometry and their offset position when template is disposed on lock side -- 2024.10.29 V3.009 FM Manage new DGC.Fpd CurrDoorCustomData variable to force shuttle probe geometry to stay horizontal -- Tavola per definizione modulo (serve ma non usata) local Strike = {} -- Intestazioni require( 'EgtBase') EgtEnableDebug( false) -- per messaggi --EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua') EgtAddToPackagePath( DGD.BASEDIR .. '?.lua') -- Valori limite local DgMin = 4. -- valore minimo diametro utensile local PtMin = 0.1 local PtMax = 1.0 local dExtraH = 0.25 local function DrawAddLineDrawCircle( pInitial, pFinal, nGroup, idTable, bPrev, nGroupCirc, nRad, bDrawFirst, bDrawLast, cColor1, cColor2, sMVar, sReference) local nReference = GDB_RT.LOC if sReference and sReference == 'grid' then nReference = GDB_RT.GRID end local nLine = EgtLine(nGroup, pInitial, pFinal, nReference) local nNumLine if idTable then table.insert( idTable, nLine) -- se devo inserire una variazione nell'entità if sMVar then nNumLine = #idTable end end if bPrev then if bDrawFirst then local nCircle1 = EgtCircle( nGroupCirc, pInitial, nRad , nReference) EgtSetColor( nCircle1, cColor1) end if bDrawLast then local nCircle2 = EgtCircle( nGroupCirc, pFinal, nRad , nReference) EgtSetColor( nCircle2, cColor2) end end return nLine, nNumLine, sMVar end local function MakeRectWithFillet( Lg, P1, P2, Rf, Ang) local hint_3 = EgtRectangle2P( Lg, P1, P2, GDB_RT.LOC) if hint_3 then local nNewId, nNumEnt = EgtExplodeCurveCompo( hint_3) if nNewId and nNumEnt and nNumEnt > 0 then local pStartIni -- se devo inserire i raccordi if Rf > 0 then local tIdFil = {} local nLine for p = 1, (nNumEnt-1) do nLine = EgtCurveFillet( Lg, ( nNewId + p - 1), EgtEP( nNewId + p - 1), ( nNewId + p), EgtSP( nNewId + p), Rf, true) table.insert( tIdFil, nLine) end nLine = EgtCurveFillet( Lg, ( nNewId + nNumEnt - 1), EgtEP( nNewId + nNumEnt - 1), nNewId, EgtSP(nNewId), Rf, true) table.insert( tIdFil, nLine) -- creo curvecompo pStartIni = EgtMP( nNewId) hint_3 = EgtCurveCompo( Lg, { nNewId, tIdFil[1], (nNewId+1), tIdFil[2], (nNewId+2), tIdFil[3], (nNewId+3), tIdFil[4]}, true) else -- creo curvecompo pStartIni = EgtMP( nNewId) hint_3 = EgtCurveCompo( Lg, { nNewId, (nNewId+1), (nNewId+2), (nNewId+3)}, true) end if hint_3 then EgtChangeClosedCurveStartPoint( hint_3, pStartIni, GDB_RT.LOC) -- cambio punto di inizio if Ang ~= 0 then EgtRotate( hint_3, EgtGP( hint_3), Z_AX(), Ang, GDB_RT.LOC) -- ruoto end end end end return hint_3 end local function MakeAspOnStrikeRect( Lg, nHint, dX, dY, dThick, dDoorTh, dShiftX, dShiftY, bRefSide, dBack_set, dDiam, bOpposite, dZedPos, dDiam2, sSideLock, Fc) local nLine local ptIni, ptEnd, pInt1, pInt1, ptIni2, ptEnd2 local tPath = {} local nPath1, nPath2, nPath3, nPath4 local nInv = 1 if not dBack_set then dBack_set = 0 end -- creo la linea ptIni = Point3d( (dShiftX - max(dX, dY)), EgtIf( bRefSide, 0, -dBack_set), 0) ptEnd = Point3d( (dShiftX + max(dX, dY)), EgtIf( bRefSide, 0, -dBack_set), 0) nLine = DrawAddLineDrawCircle( ptIni, ptEnd, Lg, nil, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE()) if nLine then -- verifico se ci sono intersezioni pInt1 = EgtIP( nLine, nHint, ptIni) pInt2 = EgtIP( nLine, nHint, ptEnd) -- se ci sono entrambe i punti e la loro distanza è maggiore del diametro fresa if pInt1 and pInt2 then local dDist = dist( pInt1, pInt2) if dDist>= dDiam then -- se larghezza maggiore dell'utensile -- imposto la griglia if bOpposite then EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.BACK)) nInv = -1 else EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT)) end ptIni = Point3d( (pInt1:getX() + (dDiam/2) - dExtraH)*nInv, dDiam*3/4, -pInt1:getY()) if dDiam2 then ptIni2 = Point3d( (pInt1:getX() + (dDiam2/2) - dExtraH)*nInv, dDiam2*3/4, -pInt1:getY()) end if dDoorTh - dThick > GEO.EPS_SMALL then -- se spessore non passante -- creo percorso con 3 linee ptEnd = Point3d( ptIni:getX(), -dThick + (dDiam/2) - dExtraH, ptIni:getZ()) DrawAddLineDrawCircle( ptIni, ptEnd, Lg, tPath, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni = ptEnd ptEnd = Point3d( (pInt2:getX() - (dDiam/2) + dExtraH)*nInv, ptIni:getY(), -pInt2:getY()) DrawAddLineDrawCircle( ptIni, ptEnd, Lg, tPath, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni = ptEnd ptEnd = Point3d( ptIni:getX(), dDiam*3/4, ptIni:getZ()) DrawAddLineDrawCircle( ptIni, ptEnd, Lg, tPath, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') -- se il percorso esiste if tPath then nPath2 = EgtCurveCompo( Lg, tPath, true) end if dDiam2 then -- creo il secondo percorso con 3 linee tPath = {} ptEnd2 = Point3d( ptIni2:getX(), -dThick + (dDiam2/2) - dExtraH, ptIni2:getZ()) DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, tPath, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni2 = ptEnd2 ptEnd2 = Point3d( (pInt2:getX() - (dDiam2/2) + dExtraH)*nInv, ptIni2:getY(), -pInt2:getY()) DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, tPath, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni2 = ptEnd2 ptEnd2 = Point3d( ptIni2:getX(), dDiam2*3/4, ptIni2:getZ()) DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, tPath, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') -- se il percorso esiste if tPath then nPath4 = EgtCurveCompo( Lg, tPath, true) end end else -- se spessore passante if (dDist - dDiam) < 2*dDiam then -- se larghezza minore del doppio diametro utensile -- creo percorso con 3 linee ptEnd = Point3d( ptIni:getX(), -dThick - (dDiam*3/4), ptIni:getZ()) DrawAddLineDrawCircle( ptIni, ptEnd, Lg, tPath, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni = ptEnd ptEnd = Point3d( (pInt2:getX() - (dDiam/2) + dExtraH)*nInv, ptIni:getY(), -pInt2:getY()) DrawAddLineDrawCircle( ptIni, ptEnd, Lg, tPath, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni = ptEnd ptEnd = Point3d( ptIni:getX(), dDiam*3/4, ptIni:getZ()) DrawAddLineDrawCircle( ptIni, ptEnd, Lg, tPath, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') -- se il percorso esiste if tPath then nPath2 = EgtCurveCompo( Lg, tPath, true) end if dDiam2 then -- creo il secondo percorso con 3 linee tPath = {} ptEnd2 = Point3d( ptIni2:getX(), -dThick - (dDiam2*3/4), ptIni2:getZ()) DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, tPath, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni2 = ptEnd2 ptEnd2 = Point3d( (pInt2:getX() - (dDiam2/2) + dExtraH)*nInv, ptIni2:getY(), -pInt2:getY()) DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, tPath, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni2 = ptEnd2 ptEnd2 = Point3d( ptIni2:getX(), dDiam2*3/4, ptIni2:getZ()) DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, tPath, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') -- se il percorso esiste if tPath then nPath4 = EgtCurveCompo( Lg, tPath, true) end end else -- larghezza maggiore del doppio diametro, creao due linee distinte -- creo 2 persorsi composti da una linea ciascuno ptEnd = Point3d( ptIni:getX(), -dThick - (dDiam*3/4), ptIni:getZ()) nPath1 = DrawAddLineDrawCircle( ptIni, ptEnd, Lg, nil, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni = Point3d( (pInt2:getX() - (dDiam/2) + dExtraH)*nInv, ptEnd:getY(), -pInt2:getY()) ptEnd = Point3d( ptIni:getX(), (dDiam*3/4), ptIni:getZ()) nPath2 = DrawAddLineDrawCircle( ptIni, ptEnd, Lg, nil, false, nil, (dDiam/2), true, true, ORANGE(), ORANGE(), nil, 'grid') if dDiam2 then -- creo 2 persorsi composti da una linea ciascuno ptEnd2 = Point3d( ptIni2:getX(), -dThick - (dDiam2*3/4), ptIni2:getZ()) nPath3 = DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, nil, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') ptIni2 = Point3d( (pInt2:getX() - (dDiam2/2) + dExtraH)*nInv, ptEnd2:getY(), -pInt2:getY()) ptEnd2 = Point3d( ptIni2:getX(), (dDiam2*3/4), ptIni2:getZ()) nPath4 = DrawAddLineDrawCircle( ptIni2, ptEnd2, Lg, nil, false, nil, (dDiam2/2), true, true, ORANGE(), ORANGE(), nil, 'grid') end end end end --debug -- EgtSaveFile( sNgeFile) -- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG()) -- se esistono gli eventuali percorso setto spessore 0 if nPath1 then EgtModifyCurveThickness(nPath1, 0) if sSideLock == 'L' then -- inverto il percorso EgtInvertCurve(nPath1) end if string.lower(Fc) == 'keyway' then -- inverto il percorso EgtInvertCurve(nPath1) end end if nPath2 then EgtModifyCurveThickness(nPath2, 0) if sSideLock == 'L' then -- inverto il percorso EgtInvertCurve(nPath2) end if string.lower(Fc) == 'keyway' then -- inverto il percorso EgtInvertCurve(nPath2) end end if nPath3 then EgtModifyCurveThickness(nPath3, 0) if sSideLock == 'R' then -- inverto il percorso EgtInvertCurve(nPath3) end if string.lower(Fc) == 'keyway' then -- inverto il percorso EgtInvertCurve(nPath3) end end if nPath4 then EgtModifyCurveThickness(nPath4, 0) if sSideLock == 'R' then -- inverto il percorso EgtInvertCurve(nPath4) end if string.lower(Fc) == 'keyway' then -- inverto il percorso EgtInvertCurve(nPath4) end end -- re-imposto la griglia da sopra EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP)) end -- elimino la linea EgtErase(nLine) end return nPath1, nPath2, nPath3, nPath4 end local function SetProbeProperty( kbs, nValKbsPbs, pbs, sValKbs, nIdGeom, bOtherCondition, nVal1, nVal2) if not bOtherCondition then if kbs and kbs > nValKbsPbs then EgtSetInfo( nIdGeom, 'KeepBackSet', sValKbs) end if pbs and pbs > nValKbsPbs and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( nIdGeom, 'ProbeSide', '1') end else if kbs and kbs > nValKbsPbs and nVal1 < nVal2 then EgtSetInfo( nIdGeom, 'KeepBackSet', sValKbs) end if pbs and pbs > nValKbsPbs and nVal1 < nVal2 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( nIdGeom, 'ProbeSide', '1') end end end local function SetPropertyAndMoveGeom( sSide, kbs, pbs, sValKbs, nPosMove, nIdGeom) if nIdGeom then EgtSetInfo(nIdGeom,'SideDoor',sSide) -- se mantiene centro spessore anche su face if kbs and kbs > 0 then EgtSetInfo( nIdGeom, 'KeepBackSet', sValKbs) end if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( nIdGeom, 'ProbeSide', '1') end if abs(nPosMove) > GEO.EPS_SMALL then EgtMove( nIdGeom, Point3d(nPosMove,0,0) - ORIG()) end end end local function GetMachToolErrorMessage( nErrorId, sGeomName, dIdMach, dOriDiamTool, nIdLogErr, sMchngName) local EgtDoorsMsg = require( 'EgtDoorsMsg') local sMessage = '' if dOriDiamTool then if nErrorId == -1 then -- lavorazione non presente in tabella sMessage = string.format(EgtDoorsMsg[466], nIdLogErr, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool)) elseif nErrorId == -2 then -- errore nel settare la lavorazione, lavorazione non presente in libreria sMessage = string.format(EgtDoorsMsg[467], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool)) elseif nErrorId == -3 then -- errore nell'acquisire parametri lavorazione sMessage = string.format(EgtDoorsMsg[468], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool)) elseif nErrorId == -4 then -- errore nell'acquisire parametri lavorazione sMessage = string.format(EgtDoorsMsg[469], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool)) elseif nErrorId == -5 then -- diametro utensile non trovato sMessage = string.format(EgtDoorsMsg[470], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool)) elseif nErrorId == -6 then -- nome geometria non presente in tabella sMessage = string.format(EgtDoorsMsg[471], nIdLogErr, sGeomName, EgtToUiUnits( dOriDiamTool)) elseif nErrorId == -7 then -- altezza massima utensile non trovata sMessage = string.format(EgtDoorsMsg[472], nIdLogErr, sMchngName, dIdMach, sGeomName, EgtToUiUnits( dOriDiamTool)) elseif nErrorId == -8 then -- tabella non presente nelle note sMessage = string.format(EgtDoorsMsg[509], nIdLogErr) end elseif nErrorId == -1 then -- lavorazione non presente in tabella sMessage = string.format(EgtDoorsMsg[504], nIdLogErr, dIdMach, sGeomName) elseif nErrorId == -2 then -- errore nel settare la lavorazione sMessage = string.format(EgtDoorsMsg[505], nIdLogErr, sMchngName, dIdMach, sGeomName) elseif nErrorId == -3 then -- errore nell'acquisire parametri lavorazione sMessage = string.format(EgtDoorsMsg[506], nIdLogErr, sMchngName, dIdMach, sGeomName) elseif nErrorId == -4 then -- errore nell'acquisire parametri lavorazione sMessage = string.format(EgtDoorsMsg[507], nIdLogErr, sMchngName, dIdMach, sGeomName) elseif nErrorId == -5 then -- diametro utensile non trovato sMessage = string.format(EgtDoorsMsg[508], nIdLogErr, sMchngName, dIdMach, sGeomName) elseif nErrorId == -6 then -- nome geometria non presente in tabella sMessage = string.format(EgtDoorsMsg[503], nIdLogErr, sGeomName) elseif nErrorId == -7 then -- altezza massima utensile non trovata sMessage = string.format(EgtDoorsMsg[473], nIdLogErr, sMchngName, dIdMach, sGeomName) elseif nErrorId == -8 then -- tabella non presente nelle note sMessage = string.format(EgtDoorsMsg[509], nIdLogErr) end return sMessage end -- Funzione di sistemazione parametri function Strike.AdjustParams( tMhPar) tMhPar.invG = 1 local EgtDoorsMsg = require( 'EgtDoorsMsg') local dMaxMat0 -- per face chisel local dMaxMat1 -- per face machining local dMaxMata -- per anti splint machining local dMaxMat2 -- per 1st mortise machining o foro profondo local dMaxMat3 -- per 2nd mortise machining local dMaxMat4 -- per mounting screw local dMaxMat7 -- per mounting screw local dMaxMat5 -- per preforo local dMaxMat8 -- per antisplint su extra-rettangolo local dMaxMat9 -- per antisplint su antisplint local dNumMessage local dNumLog = 0 local sMessToOut = '' local nTempT0 local nTempT1 local nTempTa local nTempT2 local nTempT3 local nTempT4 local nTempT5 local nTempT6 local nTempT7 local nTempT8 local nTempT9 local sMchngName0 local sMchngName1 local sMchngNamea local sMchngName2 local sMchngName3 local sMchngName4 local sMchngName5 local sMchngName6 local sMchngName7 local sMchngName8 local sMchngName9 local dOffset = DGD.OFFSET or 0 tMhPar.mkrev = false tMhPar.ls = false tMhPar.fht = 0 -- setto il face h top a 0 tMhPar.fhb = 0 -- setto il face h bottom a 0 -- parametro disposizione frame su lato wide (se = nil è sulla porta, se true dispsizione frame sul lato wide, se false dispsozione su lato narrow) tMhPar.Dws = DGD.Dws if tMhPar.Dws then -- se disposto sul lato wide, calcolo lo spessore relativo if DGD.nTypePz == 3 or DGD.nTypePz == 4 then tMhPar.dThD = DGD.dW elseif DGD.nTypePz == 5 or DGD.nTypePz == 6 then tMhPar.dThD = DGD.dH end end -- setto parametro riferimento profondità roller tMhPar.drf = DGD.dT/6 if DGD.sFrame then -- se è un assemblato tMhPar.drf = 0.1 -- in questo modo crea semre la regione da togliere relativa al materiale asportato end -- do errore se il tipo strike non è adatto per il tipo di porta ( inactive) if not( DGD.sSwing == 'LHI' or DGD.sSwing == 'RHI' or DGD.sSwing == 'RHRI' or DGD.sSwing == 'LHRI') and not DGC.Eif then return tMhPar, 2698, string.format(EgtDoorsMsg[458], tMhPar.Nome, DGD.sSwing) end -- do errore se profilo tipo bullnose e convesso e non è ammesso if not DGC.Eah and ( DGD.tProfs.lockedge.trimming == 'CV' or DGD.tProfs.lockedge.trimming == '1B' or DGD.tProfs.lockedge.trimming == '2B' or DGD.tProfs.lockedge.trimming == '3B' or DGD.tProfs.lockedge.trimming == '4B' or DGD.tProfs.lockedge.trimming == '5B' or DGD.tProfs.lockedge.trimming == '6B' or DGD.tProfs.lockedge.trimming == '7B' or DGD.tProfs.lockedge.trimming == '8B') then return tMhPar, 2699, string.format(EgtDoorsMsg[431], tMhPar.Nome, DGD.tProfs.lockedge.trimming) end -- se profilo bevel disabilito la giunzione tra face e mortise if DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then tMhPar.jnb = false -- setto il flag che indica profilo bevel tMhPar.bev = true else tMhPar.jnb = true end -- se serratura su lato destro setto il flag per invertire i percorsi if DGD.Lock == 'R' then tMhPar.invG = -tMhPar.invG end tMhPar.SL = DGD.Lock if DGD.Push then tMhPar.invG = -tMhPar.invG end if tMhPar.dl and tMhPar.H and tMhPar.T and tMhPar.T > 0 and not tMhPar.jnb then -- se non ruoto face risetto il flag che impedisce il chain tra face e mortise tMhPar.jnb = true -- ricalcolo la profondità (se non devo riferirmi al wide della porta) per avere spessore minimo = al valore di .T tMhPar.T = tMhPar.T + EgtIf( DGC.Bwd and DGC.Bwd == 2, 0, (( tMhPar.H/2) * TAN3)) else tMhPar.dl = false end -- se non ho il parametro lo setto disattivato if not tMhPar.ech then tMhPar.ech = false end -- se non c'è la variabile suffisso if not tMhPar.CH then tMhPar.CH = '_Chisel' end -- se non ho il parametro di arrotondamento lati lo setto disabilitato if not tMhPar.CL then tMhPar.cl = 0 else tMhPar.cl = 3 end -- se arrotondo entrambe le estremità disabilito il chisel e il clean corner if tMhPar.cl == 3 then tMhPar.ech = false tMhPar.clc = nil tMhPar.CLC = nil end if not tMhPar.rf then tMhPar.rf = 0 if tMhPar.cl > 0 and tMhPar.H then tMhPar.rf = tMhPar.H/2 end end -- se non arrotondo entrambe le estremità disabilito il radius face if tMhPar.cl == 0 then tMhPar.rf = 0 end if not tMhPar.rs then tMhPar.rs = 0 end -- se non c'è il parametro angolo foro lo setto a 0 if not tMhPar.AB then tMhPar.AB = 0 elseif abs(tMhPar.AB) >= 80 then tMhPar.AB = 0 end -- se non c'è il parametro di profondità preforo lo setto a -1 if not tMhPar.FBP then tMhPar.FBP = -1 end -- se non c'è il parametro di diametro preforo lo setto a 0 if not tMhPar.FBD then tMhPar.FBD = 0 end if tMhPar.FBP >= 0 then -- se ha un valore lo ricalcolo perche' il valore indica la profondità minima -- se ho il diametro e l'angolo è maggiore di zero if tMhPar.FBD > 0 and abs(tMhPar.AB) >= 0 then tMhPar.FBP = tMhPar.FBP + ( ( tMhPar.FBD / tan( 90 - abs(tMhPar.AB))) / 2) -- se il diametro è valido e di coseguenza l'angolo è a zero, annullo in diametro per non fare il foro. elseif tMhPar.FBD > 0 then tMhPar.FBD = 0 tMhPar.FBP = -1 end end -- se c'è il parametro delta Y delle mounting screw e la porta è a tirare, inverto il valore dell'offset if tMhPar.PY8 then if not DGD.Push or DGD.sFrame then tMhPar.PY8 = - tMhPar.PY8 end end if tMhPar.PY9 then if not DGD.Push or DGD.sFrame then tMhPar.PY9 = - tMhPar.PY9 end end -- se non c'è il parametro angolo strike face lo setto a 0 if not tMhPar.AS then tMhPar.AS = 0 elseif abs(tMhPar.AS) > 45 then -- se supera max angolo consentito tMhPar.AS = 45 end -- se non c'è il parametro interasse strike face lo setto a 0 if not tMhPar.IS then tMhPar.IS = 0 end -- se non c'è il parametro intersaase 1st mortise lo setto a 0 if not tMhPar.I2 then tMhPar.I2 = 0 end -- se non c'è il parametro intersaase 2nd mortise lo setto a 0 if not tMhPar.I3 then tMhPar.I3 = 0 end -- se la larghezza del dente è uguale o maggiore della lunghezza del face lo ricalcolo if tMhPar.L and tMhPar.LS and tMhPar.LS >= tMhPar.L then if tMhPar.LS > tMhPar.L then tMhPar.LS = tMhPar.L end tMhPar.rf = 0 tMhPar.rs = 0 tMhPar.cl = 0 tMhPar.D_SS = 0 end -- se ci sono tutti i parametri del face e non c'è la distanza di partenza if tMhPar.L and tMhPar.H and tMhPar.LS and tMhPar.LS > 0 and not tMhPar.D_SS then tMhPar.D_SS = (tMhPar.L - tMhPar.IS - tMhPar.LS) / 2 end -- se ci sono tutti i parametri del face e c'è la larghezza e l'altezza dello strike face lo ricalcolo in base allo spessore porta if tMhPar.L and tMhPar.H and tMhPar.LS and tMhPar.LS > 0 and tMhPar.HS and tMhPar.HS > 0 then if DGD.OFFSET and DGD.OFFSET > 0 then -- se c'è l'offset wide_side -- si considera che lo strike esce sempre dal lato wide tMhPar.HS = DGD.OFFSET-(tMhPar.H/2) tMhPar.ls = true if tMhPar.HS < 0 then -- se esce negativo è perchè il wide side è troppo poco tMhPar.HS = 0 tMhPar.ls = false end else -- se non c'è l'offset lo calcolo dal centro spessore tMhPar.HS = (DGD.dT-tMhPar.H)/2 tMhPar.ls = true if tMhPar.HS < 0 then -- se esce negativo è perchè il wide side è troppo poco tMhPar.HS = 0 tMhPar.ls = false end end else tMhPar.HS = 0 tMhPar.ls = false end -- se c'è face strike ed ha bordi bevel if tMhPar.ls then if DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB' then tMhPar.mkrev = true -- assegno flag per creare percorso inverso end end -- se c'è la variabile CurrCamInfo che indica che la porta è disposta con il lato lock sul lato navetta -- e il template non è sui lati top e bottom if DGD.SDF and DGD.SDF > 1 then -- calcolo la posizione del centro foro sullo spessore porta if dOffset > 0 then tMhPar.posh = -(DGD.dT/2) + dOffset else tMhPar.posh = 0 end if tMhPar.bev and not tMhPar.dl and not DGC.Fpd then tMhPar.posh = tMhPar.posh / cos( 3) end end -- Assegno parametri da dati utensili in macchina local MB = require( 'MachiningBase') local sLM -- face machining local nLMi = 1 local sLA -- antisplint machining local nLAi = 1 local sLA2 -- 1st mortise machining local nLA2i = 1 local sLA3 -- 2nd mortise machining local nLA3i = 1 local sLGH -- bore machining local nLGHi = 1 local sLG -- face chiseling or face with other material local nLGi = 1 local sLMS1 -- mounting screws machining local sLMS2 -- mounting screws machining local nLMSi = 1 local sLMP -- prebore machining local nLMPi = 1 local sASG -- anti-splint on extra rectangle local nASGi = 1 local sASGR -- anti-splint on antisplint local nASGRi = 1 -- se porta steel o aluminum disabilito l'antischeggia, la svuotatura, il chisel e modifico il nome geometria if FindMaterial( DGD.Material, 'steel') or FindMaterial( DGD.Material, 'aluminum') then tMhPar.LM = nil tMhPar.LA = nil tMhPar.LA2 = nil tMhPar.LA3 = nil tMhPar.ech = false tMhPar.CH = nil tMhPar.est = true tMhPar.da = nil tMhPar.d2 = nil tMhPar.ASG = 0 tMhPar.EAR = nil tMhPar.das = nil else tMhPar.est = nil end -- devo considerare il profilo serratura e se eventualmente è opposto a quello cerniere if DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BUEB' then -- profilo serrratura bevel up -- se lato cerniere opposto mi troverò il bevel al contrario perchè comanda il lato cerniere if DGD.bBothOppoBevel then nLMi = 3 nLGi = 3 nLAi = 3 else nLMi = 2 nLGi = 2 nLAi = 2 end elseif DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BDEB' then -- profilo serrratura bevel dn -- se lato cerniere opposto mi troverò il bevel al contrario perchè comanda il lato cerniere if DGD.bBothOppoBevel then nLMi = 2 nLGi = 2 nLAi = 2 else nLMi = 3 nLGi = 3 nLAi = 3 end end if tMhPar.est and tMhPar.LG then -- se altro materiale sLG = tMhPar.LG if DGD.MachEn > 0 and tMhPar.d then nTempT0, dMaxMat0, sMchngName0 = MB.GetToolDataFromAttrib( sLG, nLGi) end end if tMhPar.LM then sLM = tMhPar.LM if DGD.MachEn > 0 and tMhPar.d then nTempT1, dMaxMat1, sMchngName1 = MB.GetToolDataFromAttrib( sLM, nLMi) end end if tMhPar.ech and tMhPar.LG then -- se chisel abilitato sLG = tMhPar.LG .. tMhPar.CH tMhPar.d0 = 0 if DGD.MachEn > 0 and tMhPar.d0 then nTempT0, dMaxMat0, sMchngName0 = MB.GetToolDataFromAttrib( sLG, nLGi) end end if tMhPar.LA then -- antischeggia sLA = tMhPar.LA if DGD.MachEn > 0 and tMhPar.da then nTempTa, dMaxMata, sMchngNamea = MB.GetToolDataFromAttrib( sLA, nLAi) end end if tMhPar.LA2 then -- prima mortasa sLA2 = tMhPar.LA2 if DGD.MachEn > 0 and tMhPar.d2 then nTempT2, dMaxMat2, sMchngName2 = MB.GetToolDataFromAttrib( sLA2, nLA2i) end end if tMhPar.LA3 then -- seconda mortasa sLA3 = tMhPar.LA3 if DGD.MachEn > 0 and tMhPar.d3 then nTempT3, dMaxMat3, sMchngName3 = MB.GetToolDataFromAttrib( sLA3, nLA3i) end end if tMhPar.mh and tMhPar.LGH then -- foro o foro profondo sLGH = tMhPar.LGH if DGD.MachEn > 0 then nTempT6, dMaxMat2, sMchngName6 = MB.GetToolDataFromAttrib( sLGH, nLGHi) end end -- mounting screws if tMhPar.LMS8 then sLMS1 = tMhPar.LMS8 if DGD.MachEn > 0 then nTempT4, dMaxMat4, sMchngName4 = MB.GetToolDataFromAttrib( sLMS1, nLMSi) end end if tMhPar.LMS9 then sLMS2 = tMhPar.LMS9 if DGD.MachEn > 0 then nTempT7, dMaxMat7, sMchngName7 = MB.GetToolDataFromAttrib( sLMS2, nLMSi) end end -- preforo if tMhPar.mh and tMhPar.LMP then sLMP = tMhPar.LMP if DGD.MachEn > 0 then nTempT5, dMaxMat5, sMchngName5 = MB.GetToolDataFromAttrib( sLMP, nLMPi) end end -- extra bores if tMhPar.T10 then if tMhPar.T10 == -0.5 then tMhPar.T10 = DGD.dT / 2 elseif tMhPar.T10 == -1 or tMhPar.T10 > DGD.dT then tMhPar.T10 = DGD.dT end end if tMhPar.T11 then if tMhPar.T11 == -0.5 then tMhPar.T11 = DGD.dT / 2 elseif tMhPar.T11 == -1 or tMhPar.T11 > DGD.dT then tMhPar.T11 = DGD.dT end end if tMhPar.T12 then if tMhPar.T12 == -0.5 then tMhPar.T12 = DGD.dT / 2 elseif tMhPar.T12 == -1 or tMhPar.T12 > DGD.dT then tMhPar.T12 = DGD.dT end end if tMhPar.T13 then if tMhPar.T13 == -0.5 then tMhPar.T13 = DGD.dT / 2 elseif tMhPar.T13 == -1 or tMhPar.T13 > DGD.dT then tMhPar.T13 = DGD.dT end end if tMhPar.T14 then if tMhPar.T14 == -0.5 then tMhPar.T14 = DGD.dT / 2 elseif tMhPar.T14 == -1 or tMhPar.T14 > DGD.dT then tMhPar.T14 = DGD.dT end end if tMhPar.T15 then if tMhPar.T15 == -0.5 then tMhPar.T15 = DGD.dT / 2 elseif tMhPar.T15 == -1 or tMhPar.T15 > DGD.dT then tMhPar.T15 = DGD.dT end end if tMhPar.T16 then if tMhPar.T16 == -0.5 then tMhPar.T16 = DGD.dT / 2 elseif tMhPar.T16 == -1 or tMhPar.T16 > DGD.dT then tMhPar.T16 = DGD.dT end end if tMhPar.T17 then if tMhPar.T17 == -0.5 then tMhPar.T17 = DGD.dT / 2 elseif tMhPar.T17 == -1 or tMhPar.T17 > DGD.dT then tMhPar.T17 = DGD.dT end end if tMhPar.T18 then if tMhPar.T18 == -0.5 then tMhPar.T18 = DGD.dT / 2 elseif tMhPar.T18 == -1 or tMhPar.T18 > DGD.dT then tMhPar.T18 = DGD.dT end end if tMhPar.T19 then if tMhPar.T19 == -0.5 then tMhPar.T19 = DGD.dT / 2 elseif tMhPar.T19 == -1 or tMhPar.T19 > DGD.dT then tMhPar.T19 = DGD.dT end end if tMhPar.T20 then if tMhPar.T20 == -0.5 then tMhPar.T20 = DGD.dT / 2 elseif tMhPar.T20 == -1 or tMhPar.T20 > DGD.dT then tMhPar.T20 = DGD.dT end end if tMhPar.T21 then if tMhPar.T21 == -0.5 then tMhPar.T21 = DGD.dT / 2 elseif tMhPar.T21 == -1 or tMhPar.T21 > DGD.dT then tMhPar.T21 = DGD.dT end end if tMhPar.T22 then if tMhPar.T22 == -0.5 then tMhPar.T22 = DGD.dT / 2 elseif tMhPar.T22 == -1 or tMhPar.T22 > DGD.dT then tMhPar.T22 = DGD.dT end end if tMhPar.T23 then if tMhPar.T23 == -0.5 then tMhPar.T23 = DGD.dT / 2 elseif tMhPar.T23 == -1 or tMhPar.T23 > DGD.dT then tMhPar.T23 = DGD.dT end end if tMhPar.T24 then if tMhPar.T24 == -0.5 then tMhPar.T24 = DGD.dT / 2 elseif tMhPar.T24 == -1 or tMhPar.T24 > DGD.dT then tMhPar.T24 = DGD.dT end end if tMhPar.T25 then if tMhPar.T25 == -0.5 then tMhPar.T25 = DGD.dT / 2 elseif tMhPar.T25 == -1 or tMhPar.T25 > DGD.dT then tMhPar.T25 = DGD.dT end end if tMhPar.T26 then if tMhPar.T26 == -0.5 then tMhPar.T26 = DGD.dT / 2 elseif tMhPar.T26 == -1 or tMhPar.T26 > DGD.dT then tMhPar.T26 = DGD.dT end end if tMhPar.T27 then if tMhPar.T27 == -0.5 then tMhPar.T27 = DGD.dT / 2 elseif tMhPar.T27 == -1 or tMhPar.T27 > DGD.dT then tMhPar.T27 = DGD.dT end end if tMhPar.T28 then if tMhPar.T28 == -0.5 then tMhPar.T28 = DGD.dT / 2 elseif tMhPar.T28 == -1 or tMhPar.T28 > DGD.dT then tMhPar.T28 = DGD.dT end end if tMhPar.T29 then if tMhPar.T29 == -0.5 then tMhPar.T29 = DGD.dT / 2 elseif tMhPar.T29 == -1 or tMhPar.T29 > DGD.dT then tMhPar.T29 = DGD.dT end end -- extra rectangles if tMhPar.TR10 then if tMhPar.TR10 == -0.5 then tMhPar.TR10 = DGD.dT / 2 elseif tMhPar.TR10 == -1 or tMhPar.TR10 > DGD.dT then tMhPar.TR10 = DGD.dT end end if tMhPar.TR11 then if tMhPar.TR11 == -0.5 then tMhPar.TR11 = DGD.dT / 2 elseif tMhPar.TR11 == -1 or tMhPar.TR11 > DGD.dT then tMhPar.TR11 = DGD.dT end end if tMhPar.TR12 then if tMhPar.TR12 == -0.5 then tMhPar.TR12 = DGD.dT / 2 elseif tMhPar.TR12 == -1 or tMhPar.TR12 > DGD.dT then tMhPar.TR12 = DGD.dT end end if tMhPar.TR13 then if tMhPar.TR13 == -0.5 then tMhPar.TR13 = DGD.dT / 2 elseif tMhPar.TR13 == -1 or tMhPar.TR13 > DGD.dT then tMhPar.TR13 = DGD.dT end end if tMhPar.TR14 then if tMhPar.TR14 == -0.5 then tMhPar.TR14 = DGD.dT / 2 elseif tMhPar.TR14 == -1 or tMhPar.TR14 > DGD.dT then tMhPar.TR14 = DGD.dT end end if tMhPar.TR20 then if tMhPar.TR20 == -0.5 then tMhPar.TR20 = DGD.dT / 2 elseif tMhPar.TR20 == -1 or tMhPar.TR20 > DGD.dT then tMhPar.TR20 = DGD.dT end end if tMhPar.TR21 then if tMhPar.TR21 == -0.5 then tMhPar.TR21 = DGD.dT / 2 elseif tMhPar.TR21 == -1 or tMhPar.TR21 > DGD.dT then tMhPar.TR21 = DGD.dT end end if tMhPar.TR22 then if tMhPar.TR22 == -0.5 then tMhPar.TR22 = DGD.dT / 2 elseif tMhPar.TR22 == -1 or tMhPar.TR22 > DGD.dT then tMhPar.TR22 = DGD.dT end end if tMhPar.TR23 then if tMhPar.TR23 == -0.5 then tMhPar.TR23 = DGD.dT / 2 elseif tMhPar.TR23 == -1 or tMhPar.TR23 > DGD.dT then tMhPar.TR23 = DGD.dT end end if tMhPar.TR24 then if tMhPar.TR24 == -0.5 then tMhPar.TR24 = DGD.dT / 2 elseif tMhPar.TR24 == -1 or tMhPar.TR24 > DGD.dT then tMhPar.TR24 = DGD.dT end end -- Anti-splint su rettangoli if DGD.MachEn > 0 and tMhPar.ASG and tMhPar.EAR and ( ( tMhPar.TR10 and tMhPar.TR10 > GEO.EPS_SMALL) or ( tMhPar.TR11 and tMhPar.TR11 > GEO.EPS_SMALL) or ( tMhPar.TR12 and tMhPar.TR12 > GEO.EPS_SMALL) or ( tMhPar.TR13 and tMhPar.TR13 > GEO.EPS_SMALL) or ( tMhPar.TR14 and tMhPar.TR14 > GEO.EPS_SMALL) or ( tMhPar.TR20 and tMhPar.TR20 > GEO.EPS_SMALL) or ( tMhPar.TR21 and tMhPar.TR21 > GEO.EPS_SMALL) or ( tMhPar.TR22 and tMhPar.TR22 > GEO.EPS_SMALL) or ( tMhPar.TR23 and tMhPar.TR23 > GEO.EPS_SMALL) or ( tMhPar.TR24 and tMhPar.TR24 > GEO.EPS_SMALL)) then sASG = tMhPar.ASG nTempT8, dMaxMat8, sMchngName8 = MB.GetToolDataFromAttrib( sASG, nASGi) end -- Anti-splint su Anti-splint if DGD.MachEn > 0 and tMhPar.EAR and tMhPar.EAR == 2 and sASG then sASGR = tMhPar.ASG..'_R' tMhPar.ASGR = sASGR tMhPar.das2 = tMhPar.das nTempT9, dMaxMat9, sMchngName9 = MB.GetToolDataFromAttrib( sASGR, nASGRi) end -- extra lines if tMhPar.TL10 then if tMhPar.TL10 == -0.5 then tMhPar.TL10 = DGD.dT / 2 elseif tMhPar.TL10 == -1 or tMhPar.TL10 > DGD.dT then tMhPar.TL10 = DGD.dT end end if tMhPar.TL11 then if tMhPar.TL11 == -0.5 then tMhPar.TL11 = DGD.dT / 2 elseif tMhPar.TL11 == -1 or tMhPar.TL11 > DGD.dT then tMhPar.TL11 = DGD.dT end end if tMhPar.TL12 then if tMhPar.TL12 == -0.5 then tMhPar.TL12 = DGD.dT / 2 elseif tMhPar.TL12 == -1 or tMhPar.TL12 > DGD.dT then tMhPar.TL12 = DGD.dT end end if tMhPar.TL13 then if tMhPar.TL13 == -0.5 then tMhPar.TL13 = DGD.dT / 2 elseif tMhPar.TL13 == -1 or tMhPar.TL13 > DGD.dT then tMhPar.TL13 = DGD.dT end end if tMhPar.TL14 then if tMhPar.TL14 == -0.5 then tMhPar.TL14 = DGD.dT / 2 elseif tMhPar.TL14 == -1 or tMhPar.TL14 > DGD.dT then tMhPar.TL14 = DGD.dT end end if tMhPar.TL20 then if tMhPar.TL20 == -0.5 then tMhPar.TL20 = DGD.dT / 2 elseif tMhPar.TL20 == -1 or tMhPar.TL20 > DGD.dT then tMhPar.TL20 = DGD.dT end end if tMhPar.TL21 then if tMhPar.TL21 == -0.5 then tMhPar.TL21 = DGD.dT / 2 elseif tMhPar.TL21 == -1 or tMhPar.TL21 > DGD.dT then tMhPar.TL21 = DGD.dT end end if tMhPar.TL22 then if tMhPar.TL22 == -0.5 then tMhPar.TL22 = DGD.dT / 2 elseif tMhPar.TL22 == -1 or tMhPar.TL22 > DGD.dT then tMhPar.TL22 = DGD.dT end end if tMhPar.TL23 then if tMhPar.TL23 == -0.5 then tMhPar.TL23 = DGD.dT / 2 elseif tMhPar.TL23 == -1 or tMhPar.TL23 > DGD.dT then tMhPar.TL23 = DGD.dT end end if tMhPar.TL24 then if tMhPar.TL24 == -0.5 then tMhPar.TL24 = DGD.dT / 2 elseif tMhPar.TL24 == -1 or tMhPar.TL24 > DGD.dT then tMhPar.TL24 = DGD.dT end end -- percorso custom nge if tMhPar.CGF and tMhPar.CGP then if string.len(tMhPar.CGF) > 0 and string.len(tMhPar.CGP) == 0 then tMhPar.CGP = tMhPar.ITP end end -- se devo disegnare le geometrie di lavorazione if DGD.MachEn > 0 then -- gestisco il risultato della lettura utensili if DGD.bProoduce and tMhPar.est and tMhPar.d and nTempT0 <= 0 then dNumLog = -2697 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT0, sLG, nLGi, tMhPar.d, dNumLog, sMchngName0) elseif tMhPar.est and nTempT0 then tMhPar.d = nTempT0 end -------------------------------------------------------------------------------- -- se c'è materiale steel faccio in modo che non assegni il diametro utensile -------------------------------------------------------------------------------- -- gestisco il risultato della lettura utensili per face machining if DGD.bProoduce and not tMhPar.est and tMhPar.d and nTempT1 and nTempT1 <= 0 then dNumLog = -2690 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT1, sLM, nLMi, tMhPar.d, dNumLog, sMchngName1) elseif not tMhPar.est and nTempT1 then tMhPar.d = nTempT1 end -- gestisco il risultato della lettura utensili per anti-splint machining if DGD.bProoduce and not tMhPar.est and tMhPar.da and nTempTa and nTempTa <= 0 then dNumLog = -2690 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempTa, sLA, nLAi, tMhPar.da, dNumLog, sMchngNamea) elseif not tMhPar.est and nTempTa then tMhPar.da = nTempTa end -- gestisco il risultato della lettura utensili per 1st mortise machining if not tMhPar.est and tMhPar.d2 and nTempT2 and nTempT2 <= 0 then if DGD.bProoduce and not tMhPar.jn then -- se non si concatenano i due percorsi dNumLog = -2690 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT2, sLA2, nLA2i, tMhPar.d2, dNumLog, sMchngName2) end elseif not tMhPar.est and nTempT2 then tMhPar.d2 = nTempT2 end -- gestisco il risultato della lettura utensili per 2nd mortise machining if not tMhPar.est and tMhPar.d3 and nTempT3 and nTempT3 <= 0 then if DGD.bProoduce and not tMhPar.jn2 then -- se non si concatenano i due percorsi dNumLog = -2690 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT3, sLA3, nLA3i, tMhPar.d3, dNumLog, sMchngName3) end elseif not tMhPar.est and nTempT3 then tMhPar.d3 = nTempT3 end -- gestisco il risultato della lettura utensili per antischeggia su extra rettangoli if DGD.bProoduce and not tMhPar.est and tMhPar.das and nTempT8 and nTempT8 <= 0 then dNumLog = -2690 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT8, sASG, nASGi, tMhPar.das, dNumLog, sMchngName8) elseif not tMhPar.est and nTempT8 then tMhPar.das = nTempT8 end -- gestisco il risultato della lettura utensili per antischeggia su antischeggia if DGD.bProoduce and not tMhPar.est and tMhPar.das2 and nTempT9 and nTempT9 <= 0 then dNumLog = -2690 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT9, sASGR, nASGRi, tMhPar.das2, dNumLog, sMchngName9) elseif not tMhPar.est and nTempT9 then tMhPar.das2 = nTempT9 end -- se non ho parametro di lunghezza massima utensile preparo messaggio di warning per foro profondo if DGD.bProoduce and tMhPar.mh and tMhPar.LGH and not dMaxMat2 then dNumLog = -2689 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT6, sLGH, nLGHi, nil, dNumLog, sMchngName6) end -- se non ho parametro di lunghezza massima utensile preparo messaggio di warning per preforo if DGD.bProoduce and tMhPar.mh and tMhPar.LMP and not dMaxMat5 then dNumLog = -2689 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT5, sLMP, nLMPi, nil, dNumLog, sMchngName5) end -- se non ho parametro di lunghezza massima utensile preparo messaggio di warning per mounting screw if DGD.bProoduce and sLMS1 and not dMaxMat4 then dNumLog = -2688 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT4, sLMS1, nLMSi, nil, dNumLog, sMchngName4) end if DGD.bProoduce and sLMS2 and not dMaxMat7 then dNumLog = -2688 sMessToOut = sMessToOut .. '\n'.. GetMachToolErrorMessage( nTempT7, sLMS2, nLMSi, nil, dNumLog, sMchngName7) end -- chiseling if tMhPar.ech and tMhPar.d0 and nTempT0 > 0 then tMhPar.d0 = nTempT0 end -- se la profondità della face per steel è maggiore della capacità utensile limito la profondità ed emetto un warning if tMhPar.est and tMhPar.T and dMaxMat0 and tMhPar.T > dMaxMat0 then dNumLog = -2687 dNumMessage = 460 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat0)) tMhPar.T = dMaxMat0 end -- se la profondità della face è maggiore della capacità utensile limito la profondità ed emetto un warning if tMhPar.T and dMaxMat1 and tMhPar.T > dMaxMat1 then dNumLog = -2698 dNumMessage = 460 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T), EgtToUiUnits(dMaxMat1)) tMhPar.T = dMaxMat1 - 0.02 -- tolgo 0.05 per permettere la lavorazione end -- se mortise concatenata a face e la profondità della mortise è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if tMhPar.jn and ( not tMhPar.mh or ( tMhPar.mh and tMhPar.TB2)) and tMhPar.jnb and tMhPar.T2 and dMaxMat1 and tMhPar.T2 > dMaxMat1 then dNumLog = -2696 dNumMessage = 461 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T2), EgtToUiUnits(dMaxMat1)) tMhPar.T2 = dMaxMat1 - 0.02 end -- se mortise non concatenata a face e la profondità della mortise è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if ( not tMhPar.jn or not tMhPar.jnb) and not tMhPar.mh and tMhPar.T2 and dMaxMat2 and tMhPar.T2 > dMaxMat2 then dNumLog = -2695 dNumMessage = 461 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T2), EgtToUiUnits(dMaxMat2)) tMhPar.T2 = dMaxMat2 - 0.02 end -- se foro e la sua profondità è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if tMhPar.mh and dMaxMat2 then if tMhPar.TB2 and tMhPar.TB2 > dMaxMat2 then dNumLog = -2695 dNumMessage = 463 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.TB2), EgtToUiUnits(dMaxMat2)) tMhPar.TB2 = dMaxMat2 elseif tMhPar.T2 and not tMhPar.L2 and tMhPar.T2 > dMaxMat2 then dNumLog = -2695 dNumMessage = 463 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T2), EgtToUiUnits(dMaxMat2)) tMhPar.T2 = dMaxMat2 end end -- se preforo e la sua profondità è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if tMhPar.mh and dMaxMat5 and tMhPar.FBP and tMhPar.FBP > dMaxMat5 then dNumLog = -2695 dNumMessage = 463 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.FBP), EgtToUiUnits(dMaxMat5)) tMhPar.FBP = dMaxMat5 end -- se la profondità dei mounting screws è maggiore della capacità utensile limito la profondità ed emetto un warning if tMhPar.T8 and dMaxMat4 and tMhPar.T8 > dMaxMat4 then dNumLog = -2691 dNumMessage = 463 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T8), EgtToUiUnits(dMaxMat4)) tMhPar.T8 = dMaxMat4 - 0.02 -- tolgo 0.02 per permettere la lavorazione end -- se la profondità dei mounting screws è maggiore della capacità utensile limito la profondità ed emetto un warning if tMhPar.T9 and dMaxMat7 and tMhPar.T9 > dMaxMat7 then dNumLog = -2691 dNumMessage = 463 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T9), EgtToUiUnits(dMaxMat7)) tMhPar.T9 = dMaxMat7 - 0.02 -- tolgo 0.02 per permettere la lavorazione end -- se tutte le mortise concatenate a face e la profondità della mortise è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if tMhPar.jn and tMhPar.jn2 and not tMhPar.mh and tMhPar.jnb and tMhPar.T2 and dMaxMat1 and tMhPar.T2 > dMaxMat1 then dNumLog = -2694 dNumMessage = 461 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T2), EgtToUiUnits(dMaxMat1)) tMhPar.T2 = dMaxMat1 - 0.02 end -- se tutte le mortise concatenate a face e la profondità della mortise è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if tMhPar.jn and tMhPar.jn2 and not tMhPar.mh and tMhPar.jnb and tMhPar.T3 and dMaxMat1 and tMhPar.T3 > dMaxMat1 then dNumLog = -2693 dNumMessage = 461 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T3), EgtToUiUnits(dMaxMat1)) tMhPar.T3 = dMaxMat1 end -- se solo le mortise concatenate a face e la profondità della seconda mortise è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if not tMhPar.jn and tMhPar.jn2 and not tMhPar.mh and tMhPar.T3 and dMaxMat2 and tMhPar.T3 > dMaxMat2 then dNumLog = -2692 dNumMessage = 461 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T3), EgtToUiUnits(dMaxMat2)) tMhPar.T3 = dMaxMat2 end -- se nessuna mortise è concatenate a face e la profondità della mortise è maggiore della capacità utensile, -- limito la profondità ed emetto un warning if not tMhPar.jn and not tMhPar.jn2 and tMhPar.T3 and dMaxMat2 and tMhPar.T3 > dMaxMat2 then dNumLog = -2691 dNumMessage = 461 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, EgtToUiUnits(tMhPar.T3), EgtToUiUnits(dMaxMat2)) tMhPar.T3 = dMaxMat2 end -- Raggio: se altro materiale e raggio presente e raggio minore del diametro utensile + delta, lo annullo if tMhPar.est and tMhPar.rf and tMhPar.rf > 0 and tMhPar.cl > 0 and tMhPar.d and tMhPar.rf < ((tMhPar.d/2)+0.02) then tMhPar.rf = 0 end if tMhPar.CLC and tMhPar.clc and tMhPar.clc > 0 and ( tMhPar.clc >= tMhPar.H or tMhPar.clc >= tMhPar.L) then tMhPar.clc = nil elseif not tMhPar.CLC then tMhPar.clc = nil end -- setto un valore di poco inferiore allo spessore per non fresare le ventose local sPieceName if tMhPar.Dws then tMhPar.TTP = tMhPar.dThD - DGD.Spd if DGD.nTypePz == 3 then sPieceName = 'left Jamb' elseif DGD.nTypePz == 4 then sPieceName = 'right Jamb' elseif DGD.nTypePz == 5 then sPieceName = 'Frame header' else sPieceName = 'Threshold' end end -- controllo se le profondità delle geometrie non superano lo spessore frame if tMhPar.Dws and DGD.Spd > 0 and tMhPar.T and ( abs(tMhPar.T) > tMhPar.dThD or abs( abs(tMhPar.T) - tMhPar.dThD) < DGD.Spd) then dNumLog = -2686 dNumMessage = 681 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'T', EgtToUiUnits(tMhPar.T), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD)) tMhPar.T = tMhPar.TTP end if tMhPar.Dws and DGD.Spd > 0 and tMhPar.T2 and ( abs(tMhPar.T2) > tMhPar.dThD or abs( abs(tMhPar.T2) - tMhPar.dThD) < DGD.Spd) then dNumLog = -2686 dNumMessage = 681 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'T2', EgtToUiUnits(tMhPar.T2), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD)) tMhPar.T2 = tMhPar.TTP end if tMhPar.Dws and DGD.Spd > 0 and tMhPar.T3 and ( abs(tMhPar.T3) > tMhPar.dThD or abs( abs(tMhPar.T3) - tMhPar.dThD) < DGD.Spd) then dNumLog = -2686 dNumMessage = 681 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'T3', EgtToUiUnits(tMhPar.T3), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD)) tMhPar.T3 = tMhPar.TTP end if tMhPar.Dws and DGD.Spd > 0 and tMhPar.T8 and ( abs(tMhPar.T8) > tMhPar.dThD or abs( abs(tMhPar.T8) - tMhPar.dThD) < DGD.Spd) then dNumLog = -2686 dNumMessage = 681 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'T8', EgtToUiUnits(tMhPar.T8), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD)) tMhPar.T8 = tMhPar.TTP end if tMhPar.Dws and DGD.Spd > 0 and tMhPar.T9 and ( abs(tMhPar.T9) > tMhPar.dThD or abs( abs(tMhPar.T9) - tMhPar.dThD) < DGD.Spd) then dNumLog = -2686 dNumMessage = 681 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'T9', EgtToUiUnits(tMhPar.T9), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD)) tMhPar.T9 = tMhPar.TTP end if tMhPar.Dws and DGD.Spd > 0 and tMhPar.FBP and ( abs(tMhPar.FBP) > tMhPar.dThD or abs( abs(tMhPar.FBP) - tMhPar.dThD) < DGD.Spd) then dNumLog = -2686 dNumMessage = 681 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'FBP', EgtToUiUnits(tMhPar.FBP), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD)) tMhPar.FBP = tMhPar.TTP end if tMhPar.Dws and DGD.Spd > 0 and tMhPar.TB2 and ( abs(tMhPar.TB2) > tMhPar.dThD or abs( abs(tMhPar.TB2) - tMhPar.dThD) < DGD.Spd) then dNumLog = -2686 dNumMessage = 681 sMessToOut = sMessToOut .. '\n'.. string.format(EgtDoorsMsg[dNumMessage], dNumLog, tMhPar.Nome, sPieceName, 'TB2', EgtToUiUnits(tMhPar.TB2), EgtToUiUnits(tMhPar.TTP), EgtToUiUnits(tMhPar.dThD)) tMhPar.TB2 = tMhPar.TTP end if tMhPar.T and tMhPar.T > 0 and tMhPar.ls then -- Se c'è il profilo bevel e la geometria è applicata al lato lock if ( DGD.tProfs.lockedge.trimming == 'BD' or DGD.tProfs.lockedge.trimming == 'BU' or DGD.tProfs.lockedge.trimming == 'BDEB' or DGD.tProfs.lockedge.trimming == 'BUEB') and ( not DGD.SIDE or string.lower(DGD.SIDE) == 'lock') then -- Se il parametro per impedire la rotazione sul lato bevel non è attivo if not tMhPar.dl then tMhPar.fht = tMhPar.T / cos(3) else tMhPar.fht = tMhPar.T end -- considerando l'angolo calcolo l'ingombro totale riferito al lato wide tMhPar.fhb = tMhPar.fht + ( DGD.dT * TAN3) else tMhPar.fht = tMhPar.T tMhPar.fhb = tMhPar.fht end end end -- se non ho parametro step o è 0 lo assegno uguale allo spessore cava if tMhPar.T and ( not tMhPar.sf or abs(tMhPar.sf) < GEO.EPS_SMALL) then tMhPar.sf = tMhPar.T end if dNumLog ~= 0 then return tMhPar, dNumLog, sMessToOut end return tMhPar, 0, '' end -- Funzione di disegno function Strike.Draw( tLckP, bPreview, bRunByCompo, nDrawMach, dThickDoor) -- Assegno le dimensioni geometria local L = tLckP.L -- lunghezza face local H = tLckP.H -- larghezza face local T = tLckP.T -- spessore face local LS = tLckP.LS -- lunghezza strike face local HS = tLckP.HS -- altezza strike face local AS = tLckP.AS -- angolo strike face local IS = tLckP.IS -- interasse strike face local D_SS = tLckP.D_SS -- distanza partenza srike local rs = tLckP.rs -- raggio arrotondamento strike local ls = tLckP.ls -- latch strike local cl = tLckP.cl -- arrotonda estremità face, 0: nessun arrotondamento, 1: arrotonda a sinistra, -- 2: arrotonda a destra, 3: arrotonda entrambe i lati local rf = tLckP.rf -- raggio arrotondamento face local clc = tLckP.clc local ccr = tLckP.ccr local d = tLckP.d -- diametro utensile face local p = tLckP.p -- percentuale uso utensile face local sf = tLckP.sf -- passo affondamento face local dl = tLckP.dl -- disponi face come lock, cioè non ruotata su bevel local da = tLckP.da -- diametro utensile anti-splint local ech = tLckP.ech -- abilitazione chisel local est = tLckP.est -- altro materiale trovato local mh = tLckP.mh -- crea foro: true o mortasa: false local L2 = tLckP.L2 -- lunghezza mortasa (seconda cava) local H2 = tLckP.H2 -- larghezza mortasa o diametro foro local T2 = tLckP.T2 -- profondità mortasa o foro local I2 = tLckP.I2 -- intersasse mortasa local HB2 = tLckP.HB2 -- diametro foro orizzontale local TB2 = tLckP.TB2 -- profondità foro orizzontale local d2 = tLckP.d2 -- diametro utensile svuotatura mortasa ( non per foro) local p2 = tLckP.p2 -- percentuale uso utensile mortasa local s = tLckP.s -- passo affondamento mortasa local FBD = tLckP.FBD -- diametro preforo local FBP = tLckP.FBP -- profondità preforo local AB = tLckP.AB -- angolo fori local L3 = tLckP.L3 -- lunghezza seconda mortasa ( terza cava) local H3 = tLckP.H3 -- larghezza seconda mortasa ( terza cava) local T3 = tLckP.T3 -- profondità seconda mortasa ( terza cava) local I3 = tLckP.I3 -- intersasse seconda mortasa local d3 = tLckP.d3 -- diametro utensile svuotatura seconda mortasa local p3 = tLckP.p3 -- percentuale uso utensile seconda mortasa local s3 = tLckP.s3 -- passo affondamento seconda mortasa -- tabelle per i viti fissaggio (mounting screw) local tMountingScrew = {} -- inserimento dati nella tabella fori table.insert( tMountingScrew, { tLckP.D8, tLckP.T8, tLckP.I8, tLckP.IY8, tLckP.mcs8, tLckP.mss8, tLckP.PX8C, tLckP.PX8, tLckP.PY8, tLckP.LMS8}) table.insert( tMountingScrew, { tLckP.D9, tLckP.T9, tLckP.I9, tLckP.IY9, tLckP.mcs9, tLckP.mss9, tLckP.PX9C, tLckP.PX9, tLckP.PY9, tLckP.LMS9}) local kbs = tLckP.kbs -- keep backset/thickness (0: none, 1: only face, 2: all) local pbs = tLckP.pbs -- Probe on side, 0 = none, 1 = only face geometries, 2 = all local mkrev = tLckP.mkrev -- flag creazione inversione percorsi local SL = tLckP.SL local fht = tLckP.fht local fhb = tLckP.fhb local drf = tLckP.drf local dws = tLckP.Dws local dthd = tLckP.dThD -- gestione inversione percorsi local invG = tLckP.invG -- flag per invertire il senso dei percorsi di lavorazione -- Assegno i flag local jn = tLckP.jn -- flag per giunzione prima cava face con seconda cava (mortasa) local jn2 = tLckP.jn2 -- flag per giunzione seconda cava (mortasa) con terza cava ( seconda mortasa) local jnb = tLckP.jnb -- flag che indica se profilo tipo bevel o meno -- Inserimento geometrie probe local posh = tLckP.posh -- posizione in Y del foro di tastatura local posp = tLckP.posp -- posizione in X del foro di tastatura -- Disassamento delle 2 cave rispetto alla face local D_X = tLckP.D_X -- disassamento seconda cava (mortasa o foro) da centro lunghezza face local D_X3 = tLckP.D_X3 -- disassamento terza cava (seconda mortasa) da centro lunghezza face -- Disassamento dei fori rispetto al face local DH_X = tLckP.DH_X -- disassamento fori da centro lunghezza face -- Disassamento globale local D_XE = tLckP.D_XE -- Extra delta on X pos for all geometries -- Nome file custom geometry e percorso file da caricare local CustGeomFile = tLckP.CGF or '' local CustGeomPath = tLckP.CGP or '' -- Anti-splint su extra rectangle geometry local EAR = tLckP.EAR local das = tLckP.das local ASG = tLckP.ASG -- Second anti-splint on extra rectangle geometry local das2 = tLckP.das2 local ASGR = tLckP.ASGR -- tabelle per i fori, rettangoli e linee opzionali local tExtraBore = {} local tExtraRect = {} local tExtraLine = {} -- inserimento dati nella tabella fori table.insert( tExtraBore, { tLckP.D10, tLckP.T10, tLckP.PX10, tLckP.PY10, tLckP.EB10, tLckP.RBS10}) table.insert( tExtraBore, { tLckP.D11, tLckP.T11, tLckP.PX11, tLckP.PY11, tLckP.EB11, tLckP.RBS11}) table.insert( tExtraBore, { tLckP.D12, tLckP.T12, tLckP.PX12, tLckP.PY12, tLckP.EB12, tLckP.RBS12}) table.insert( tExtraBore, { tLckP.D13, tLckP.T13, tLckP.PX13, tLckP.PY13, tLckP.EB13, tLckP.RBS13}) table.insert( tExtraBore, { tLckP.D14, tLckP.T14, tLckP.PX14, tLckP.PY14, tLckP.EB14, tLckP.RBS14}) table.insert( tExtraBore, { tLckP.D15, tLckP.T15, tLckP.PX15, tLckP.PY15, tLckP.EB15, tLckP.RBS15}) table.insert( tExtraBore, { tLckP.D16, tLckP.T16, tLckP.PX16, tLckP.PY16, tLckP.EB16, tLckP.RBS16}) table.insert( tExtraBore, { tLckP.D17, tLckP.T17, tLckP.PX17, tLckP.PY17, tLckP.EB17, tLckP.RBS17}) table.insert( tExtraBore, { tLckP.D18, tLckP.T18, tLckP.PX18, tLckP.PY18, tLckP.EB18, tLckP.RBS18}) table.insert( tExtraBore, { tLckP.D19, tLckP.T19, tLckP.PX19, tLckP.PY19, tLckP.EB19, tLckP.RBS19}) -- inserimento dati nella tabella rettangoli table.insert( tExtraRect, { tLckP.LR10, tLckP.WR10, tLckP.RR10, tLckP.TR10, tLckP.PRX10, tLckP.PRY10, tLckP.AR10, tLckP.ER10, tLckP.RRS10}) table.insert( tExtraRect, { tLckP.LR11, tLckP.WR11, tLckP.RR11, tLckP.TR11, tLckP.PRX11, tLckP.PRY11, tLckP.AR11, tLckP.ER11, tLckP.RRS11}) table.insert( tExtraRect, { tLckP.LR12, tLckP.WR12, tLckP.RR12, tLckP.TR12, tLckP.PRX12, tLckP.PRY12, tLckP.AR12, tLckP.ER12, tLckP.RRS12}) table.insert( tExtraRect, { tLckP.LR13, tLckP.WR13, tLckP.RR13, tLckP.TR13, tLckP.PRX13, tLckP.PRY13, tLckP.AR13, tLckP.ER13, tLckP.RRS13}) table.insert( tExtraRect, { tLckP.LR14, tLckP.WR14, tLckP.RR14, tLckP.TR14, tLckP.PRX14, tLckP.PRY14, tLckP.AR14, tLckP.ER14, tLckP.RRS14}) -- inserimento dati nella tabella linee table.insert( tExtraLine, { tLckP.LL10, tLckP.TL10, tLckP.PLX10, tLckP.PLY10, tLckP.AL10, tLckP.EL10, tLckP.RLS10}) table.insert( tExtraLine, { tLckP.LL11, tLckP.TL11, tLckP.PLX11, tLckP.PLY11, tLckP.AL11, tLckP.EL11, tLckP.RLS11}) table.insert( tExtraLine, { tLckP.LL12, tLckP.TL12, tLckP.PLX12, tLckP.PLY12, tLckP.AL12, tLckP.EL12, tLckP.RLS12}) table.insert( tExtraLine, { tLckP.LL13, tLckP.TL13, tLckP.PLX13, tLckP.PLY13, tLckP.AL13, tLckP.EL13, tLckP.RLS13}) table.insert( tExtraLine, { tLckP.LL14, tLckP.TL14, tLckP.PLX14, tLckP.PLY14, tLckP.AL14, tLckP.EL14, tLckP.RLS14}) -- inserimento dati nella tabella fori table.insert( tExtraBore, { tLckP.D20, tLckP.T20, tLckP.PX20, tLckP.PY20, tLckP.EB20, tLckP.RBS20}) table.insert( tExtraBore, { tLckP.D21, tLckP.T21, tLckP.PX21, tLckP.PY21, tLckP.EB21, tLckP.RBS21}) table.insert( tExtraBore, { tLckP.D22, tLckP.T22, tLckP.PX22, tLckP.PY22, tLckP.EB22, tLckP.RBS22}) table.insert( tExtraBore, { tLckP.D23, tLckP.T23, tLckP.PX23, tLckP.PY23, tLckP.EB23, tLckP.RBS23}) table.insert( tExtraBore, { tLckP.D24, tLckP.T24, tLckP.PX24, tLckP.PY24, tLckP.EB24, tLckP.RBS24}) table.insert( tExtraBore, { tLckP.D25, tLckP.T25, tLckP.PX25, tLckP.PY25, tLckP.EB25, tLckP.RBS25}) table.insert( tExtraBore, { tLckP.D26, tLckP.T26, tLckP.PX26, tLckP.PY26, tLckP.EB26, tLckP.RBS26}) table.insert( tExtraBore, { tLckP.D27, tLckP.T27, tLckP.PX27, tLckP.PY27, tLckP.EB27, tLckP.RBS27}) table.insert( tExtraBore, { tLckP.D28, tLckP.T28, tLckP.PX28, tLckP.PY28, tLckP.EB28, tLckP.RBS28}) table.insert( tExtraBore, { tLckP.D29, tLckP.T29, tLckP.PX29, tLckP.PY29, tLckP.EB29, tLckP.RBS29}) -- inserimento dati nella tabella rettangoli table.insert( tExtraRect, { tLckP.LR20, tLckP.WR20, tLckP.RR20, tLckP.TR20, tLckP.PRX20, tLckP.PRY20, tLckP.AR20, tLckP.ER20, tLckP.RRS20}) table.insert( tExtraRect, { tLckP.LR21, tLckP.WR21, tLckP.RR21, tLckP.TR21, tLckP.PRX21, tLckP.PRY21, tLckP.AR21, tLckP.ER21, tLckP.RRS21}) table.insert( tExtraRect, { tLckP.LR22, tLckP.WR22, tLckP.RR22, tLckP.TR22, tLckP.PRX22, tLckP.PRY22, tLckP.AR22, tLckP.ER22, tLckP.RRS22}) table.insert( tExtraRect, { tLckP.LR23, tLckP.WR23, tLckP.RR23, tLckP.TR23, tLckP.PRX23, tLckP.PRY23, tLckP.AR23, tLckP.ER23, tLckP.RRS23}) table.insert( tExtraRect, { tLckP.LR24, tLckP.WR24, tLckP.RR24, tLckP.TR24, tLckP.PRX24, tLckP.PRY24, tLckP.AR24, tLckP.ER24, tLckP.RRS24}) -- inserimento dati nella tabella linee table.insert( tExtraLine, { tLckP.LL20, tLckP.TL20, tLckP.PLX20, tLckP.PLY20, tLckP.AL20, tLckP.EL20, tLckP.RLS20}) table.insert( tExtraLine, { tLckP.LL21, tLckP.TL21, tLckP.PLX21, tLckP.PLY21, tLckP.AL21, tLckP.EL21, tLckP.RLS21}) table.insert( tExtraLine, { tLckP.LL22, tLckP.TL22, tLckP.PLX22, tLckP.PLY22, tLckP.AL22, tLckP.EL22, tLckP.RLS22}) table.insert( tExtraLine, { tLckP.LL23, tLckP.TL23, tLckP.PLX23, tLckP.PLY23, tLckP.AL23, tLckP.EL23, tLckP.RLS23}) table.insert( tExtraLine, { tLckP.LL24, tLckP.TL24, tLckP.PLX24, tLckP.PLY24, tLckP.AL24, tLckP.EL24, tLckP.RLS24}) -- Assegno le label degli attributi fianco porta local LG = tLckP.LG -- nome geometria face: per la doppia face, la prima geometria è LG..'1st' local LG2 = tLckP.LG2 -- nome geometria seconda cava (mortasa) local LG3 = tLckP.LG3 -- nome geometria terza cava (seconda mortasa) local LM = tLckP.LM -- nome geometria lavorazione face: per la doppia face, la prima geometria è LM..'1st' local LA = tLckP.LA -- nome geometria lavorazione antischeggia local LA2 = tLckP.LA2 -- nome geometria lavorazione seconda cava (mortasa) local LA3 = tLckP.LA3 -- nome geometria lavorazione terza cava (seconda mortasa) local CH = tLckP.CH -- nome suffisso lavorazione chisel local CLC = tLckP.CLC -- nome geometria clean corner -- Assegno le label alla geometria foro profondo di lato local LGH = tLckP.LGH -- nome geometria seconda cava (foro) local LMP = tLckP.LMP -- nome geometrie precut bore -- variabile nome geometrie probe local LH = 'Shuttle_Probe' -- variabili per messaggi e settaggi vari local sCompoName = tLckP.Nome local nCompoNpar = tLckP.Npar local sCompoPath = tLckP.Path -- eventuale messaggio errore rilevato nell'adjust local nCodAdj = tLckP.nCod local sCodAdj = tLckP.sCod -- variabili per messaggi di errore local tsNamePar = {} table.insert( tsNamePar, tLckP.NPL or 'L') table.insert( tsNamePar, tLckP.NPH or 'H') table.insert( tsNamePar, tLckP.NPT or 'T') table.insert( tsNamePar, tLckP.NPd or 'd') table.insert( tsNamePar, tLckP.NPp or 'p') -- 5 table.insert( tsNamePar, tLckP.NPLS or 'LS') table.insert( tsNamePar, tLckP.NL2 or 'L2') table.insert( tsNamePar, tLckP.NT2 or 'T2') table.insert( tsNamePar, tLckP.NPd2 or 'd2') table.insert( tsNamePar, tLckP.NPp2 or 'p2') -- 10 table.insert( tsNamePar, tLckP.NPS or 's') table.insert( tsNamePar, tLckP.NPH2 or 'H2') table.insert( tsNamePar, tLckP.NPHS or 'HS') table.insert( tsNamePar, tLckP.NL3 or 'L3') table.insert( tsNamePar, tLckP.NL3 or 'H3') -- 15 table.insert( tsNamePar, tLckP.NT3 or 'T3') table.insert( tsNamePar, tLckP.NPd3 or 'd3') table.insert( tsNamePar, tLckP.NPp3 or 'p3') table.insert( tsNamePar, tLckP.NPS3 or 's3') table.insert( tsNamePar, tLckP.NPD_X or 'D_X') -- 20 table.insert( tsNamePar, tLckP.NPD_X3 or 'D_X3') table.insert( tsNamePar, tLckP.NPAS or 'AS') table.insert( tsNamePar, tLckP.NPIS or 'IS') table.insert( tsNamePar, tLckP.NPDS or 'D_SS') table.insert( tsNamePar, tLckP.NPRS or 'rs') -- 25 table.insert( tsNamePar, tLckP.NPDL or 'dl') table.insert( tsNamePar, tLckP.NPDA or 'da') table.insert( tsNamePar, tLckP.NPI2 or 'I2') table.insert( tsNamePar, tLckP.NPHB2 or 'HB2') table.insert( tsNamePar, tLckP.NPTB2 or 'TB2') -- 30 table.insert( tsNamePar, tLckP.NPFBD or 'FBD') table.insert( tsNamePar, tLckP.NPFBP or 'FBP') table.insert( tsNamePar, tLckP.NPI2 or 'I3') table.insert( tsNamePar, tLckP.NPSF or 'sf') table.insert( tsNamePar, tLckP.NPRF or 'rf') -- 35 table.insert( tsNamePar, tLckP.N50 or 'clc') table.insert( tsNamePar, tLckP.N51 or 'ccr') -- RunByComponetInterface local RC = true -- Messaggi codice errori local EM = ' ' local EC = 0 local ErrorBase = 2600 -- variabili che abilitano la creazione della geometria local bMakeFaceGeom = true local bMakeMortGeom = true local bMakeBoreGeom = true local bMakeMortGeom2nd = true if not bRunByCompo then RC = false end -- verifico se dei parametri sono nulli e in qual caso assegno dei valori sostitutivi if not L or not H then bMakeFaceGeom = false jn = false -- disattivo il join tra face e mortasa clc = nil CLC = nil end -- se le dimensioni del raccordo sono eccessive le riconduco a valori accettabili if bMakeFaceGeom and cl and cl > 0 then if L >= H then if rf > (H/2) then rf = (H/2) end else if rf > (L/2) then rf = (L/2) end end end -- se rilevato profilo bevel disattivo il join tra face e mortasa if not jnb then jn = false end if not T then T = 0 end if not D_X then D_X = 0 end if not DH_X then DH_X = 0 end if not D_XE then D_XE = 0 end if est or ( not L2 or not H2) or ( mh and not HB2) then bMakeMortGeom = false -- disattivo il join jn = false jn2 = false end if not mh or not LGH or (( not HB2 or not TB2) and ( not H2 or not T2)) then bMakeBoreGeom = false end if not T2 then T2 = 0 end if est or not L3 or not H3 then bMakeMortGeom2nd = false jn2 = false end if not T3 then T3 = 0 end -- se prima e seconda cava giuntate assegno il diametro della seconda cava uguale alla prima if jn and bMakeFaceGeom and bMakeMortGeom then d2 = d p2 = p end -- se seconda e terza cava giuntate assegno il diametro della terza cava uguale alla seconda if jn2 and bMakeMortGeom and bMakeMortGeom2nd then d3 = d2 p3 = p2 s3 = s end -- determino se c'è strike local dLSc = 0 local dR1 = rs if ls then -- c'è strike dLSc = HS * tan(AS) dR1 = rs * tan((90-AS)/2) end if ls and IS > 0 and IS <= LS+(2*dR1) then -- se strike e interasse troppo corto per creare due denti IS = 0 -- annullo interasse, singolo dente end if not ASGR then das2 = nil end -- se non definita o parametri relativi alla definizione dei percorsi sono mancanti, la setto per non creare geometria di lavorazione if not nDrawMach then nDrawMach = 0 end local EgtDoorsMsg = require( 'EgtDoorsMsg') -- Verifica delle dimensioni, alcune condizioni vengono verificate solo se è abilitata la creazione dei percorsi di lavorazione if bMakeFaceGeom and L <= 0 then EC = 1 EM = string.format(EgtDoorsMsg[401],tsNamePar[1],EgtToUiUnits(L), sCompoPath) -- il parametro 'L' deve essere > 0 L = d*2 elseif bMakeMortGeom and not mh and L2 < 0 then EC = 2 EM = string.format(EgtDoorsMsg[404],tsNamePar[7],EgtToUiUnits(L2), sCompoPath) -- il parametro 'L2' deve essere >= 0 L2 = d2*2 elseif bMakeMortGeom2nd and L3 < 0 then EC = 3 EM = string.format(EgtDoorsMsg[404],tsNamePar[14],EgtToUiUnits(L3), sCompoPath) -- il parametro 'L3' deve essere >= 0 L3 = d3*2 elseif bMakeFaceGeom and H <= 0 then EC = 4 EM = string.format(EgtDoorsMsg[401],tsNamePar[2],EgtToUiUnits(H), sCompoPath) -- il parametro 'H' deve essere > 0 H = d elseif bMakeMortGeom and H2 <= 0 then EC = 5 EM = string.format(EgtDoorsMsg[401],tsNamePar[12],EgtToUiUnits(H2), sCompoPath) -- il parametro 'H2' deve essere > 0 H2 = d2 elseif bMakeMortGeom2nd and H3 <= 0 then EC = 6 EM = string.format(EgtDoorsMsg[401],tsNamePar[15],EgtToUiUnits(H3), sCompoPath) -- il parametro 'H3' deve essere > 0 H3 = d3 elseif bMakeFaceGeom and T < 0 then EC = 7 EM = string.format(EgtDoorsMsg[404],tsNamePar[3],EgtToUiUnits(T), sCompoPath) -- il parametro 'T' deve essere >= 0 T = 0 elseif bMakeMortGeom and T2 <= 0 then EC = 8 EM = string.format(EgtDoorsMsg[401],tsNamePar[8],EgtToUiUnits(T2), sCompoPath) -- il parametro 'T2' deve essere > 0 T2 = 0.1 elseif bMakeMortGeom2nd and T3 <= 0 then EC = 9 EM = string.format(EgtDoorsMsg[401],tsNamePar[16],EgtToUiUnits(T3), sCompoPath) -- il parametro 'T3' deve essere > 0 T3 = 0.1 elseif bMakeFaceGeom and nDrawMach > 0 and L <= d then if DGD.bProoduce then EC = 11 EM = string.format(EgtDoorsMsg[402],tsNamePar[1],EgtToUiUnits(L),tsNamePar[4],EgtToUiUnits(d), sCompoPath) -- il parametro 'L' deve essere maggiore al diametro utensile L = d + 0.002 else d = L - 0.002 end elseif bMakeMortGeom and nDrawMach > 0 and not mh and L2 <= d2 then if DGD.bProoduce then EC = 12 EM = string.format(EgtDoorsMsg[402],tsNamePar[7],EgtToUiUnits(L2),tsNamePar[9],EgtToUiUnits(d2), sCompoPath) -- il parametro 'L2' deve essere maggiore al diametro utensile L2 = d2 + 0.002 else d2 = L2 - 0.002 end elseif bMakeMortGeom2nd and nDrawMach > 0 and L3 <= d3 then if DGD.bProoduce then EC = 13 EM = string.format(EgtDoorsMsg[402],tsNamePar[7],EgtToUiUnits(L2),tsNamePar[9],EgtToUiUnits(d2), sCompoPath) -- il parametro 'L2' deve essere maggiore al diametro utensile L3 = d3 + 0.002 else d3 = L3 - 0.002 end elseif bMakeFaceGeom and nDrawMach > 0 and H < d then if DGD.bProoduce then EC = 14 EM = string.format(EgtDoorsMsg[405],tsNamePar[2],EgtToUiUnits(H),EgtToUiUnits(d), sCompoPath) -- il parametro 'H' deve essere >= del diametro utensile H = d else d = H - 0.002 end elseif bMakeMortGeom and nDrawMach > 0 and not mh and H2 < d2 then if DGD.bProoduce then EC = 15 EM = string.format(EgtDoorsMsg[405],tsNamePar[12],EgtToUiUnits(H2),EgtToUiUnits(d2), sCompoPath) -- il parametro 'H2' deve essere >= del diametro utensile H2 = d2 else d2 = H2 - 0.002 end elseif bMakeMortGeom2nd and nDrawMach > 0 and H3 < d3 then if DGD.bProoduce then EC = 16 EM = string.format(EgtDoorsMsg[405],tsNamePar[15],EgtToUiUnits(H3),EgtToUiUnits(d2), sCompoPath) -- il parametro 'H3' deve essere >= del diametro utensile H3 = d3 else d3 = H3 - 0.002 end elseif bMakeFaceGeom and nDrawMach > 0 and d < DgMin then EC = 17 EM = string.format(EgtDoorsMsg[400],tsNamePar[4], EgtToUiUnits(d),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di d = DgMin elseif bMakeMortGeom and nDrawMach > 0 and not mh and d2 < DgMin then EC = 18 EM = string.format(EgtDoorsMsg[400],tsNamePar[9], EgtToUiUnits(d),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di d2 = DgMin elseif bMakeMortGeom2nd and nDrawMach > 0 and d3 < DgMin then EC = 19 EM = string.format(EgtDoorsMsg[400],tsNamePar[17], EgtToUiUnits(d3),EgtToUiUnits(DgMin)) -- il diametro utensile deve essere >= di d3 = DgMin elseif bMakeFaceGeom and nDrawMach > 0 and ( p < PtMin or p > PtMax) then EC = 20 EM = string.format(EgtDoorsMsg[403],tsNamePar[5],p,PtMin,PtMax, sCompoPath) -- il parametro 'p' deve essere compreso tra p = 0.8 elseif bMakeMortGeom and nDrawMach > 0 and not mh and ( p2 < PtMin or p2 > PtMax) then EC = 21 EM = string.format(EgtDoorsMsg[403],tsNamePar[10],p2,PtMin,PtMax, sCompoPath) -- il parametro 'p2' deve essere compreso tra p2 = 0.8 elseif bMakeMortGeom2nd and nDrawMach > 0 and ( p3 < PtMin or p3 > PtMax) then EC = 22 EM = string.format(EgtDoorsMsg[403],tsNamePar[18],p3,PtMin,PtMax, sCompoPath) -- il parametro 'p3' deve essere compreso tra p3 = 0.8 elseif bMakeFaceGeom and bMakeMortGeom and not mh and L2 >= L then EC = 23 EM = string.format(EgtDoorsMsg[406],tsNamePar[7],EgtToUiUnits(L2),tsNamePar[1],EgtToUiUnits(L), sCompoPath) -- il parametro 'L2' deve essere < 'L' L2 = L - 0.1 -- elseif bMakeMortGeom and bMakeMortGeom2nd and not mh and L3 >= L2 then -- EC = 24 -- EM = string.format(EgtDoorsMsg[406],tsNamePar[14],EgtToUiUnits(L3),tsNamePar[7],EgtToUiUnits(L2), sCompoPath) -- il parametro 'L3' deve essere < 'L2' -- L3 = L2 - 0.1 elseif bMakeFaceGeom and bMakeMortGeom and H2 > H then EC = 25 EM = string.format(EgtDoorsMsg[456],tsNamePar[12],EgtToUiUnits(H2),tsNamePar[2],EgtToUiUnits(H), sCompoPath) -- il parametro 'H2' deve essere <= 'H' H2 = H elseif bMakeMortGeom and bMakeMortGeom2nd and H3 > H2 then EC = 26 EM = string.format(EgtDoorsMsg[456],tsNamePar[15],EgtToUiUnits(H3),tsNamePar[12],EgtToUiUnits(H2), sCompoPath) -- il parametro 'H3' deve essere <= 'H2' H3 = H2 elseif bMakeFaceGeom and bMakeMortGeom and not dws and T2 <= T then EC = 27 EM = string.format(EgtDoorsMsg[407],tsNamePar[8],EgtToUiUnits(T2),tsNamePar[3],EgtToUiUnits(T), sCompoPath) -- il parametro 'T2' deve essere > 'T' T2 = T + 0.1 -- elseif bMakeMortGeom and bMakeMortGeom2nd and not dws and T3 <= T2 then -- EC = 29 -- EM = string.format(EgtDoorsMsg[407],tsNamePar[16],EgtToUiUnits(T3),tsNamePar[8],EgtToUiUnits(T2), sCompoPath) -- il parametro 'T3' deve essere > 'T2' -- T3 = T2 + 0.1 elseif bMakeMortGeom and nDrawMach > 0 and not mh and s and s <= 0 then EC = 30 EM = string.format(EgtDoorsMsg[401],tsNamePar[11],EgtToUiUnits(s), sCompoPath) -- il parametro 's' deve essere > 0 s = d2 elseif bMakeMortGeom2nd and nDrawMach > 0 and s3 and s3 <= 0 then EC = 31 EM = string.format(EgtDoorsMsg[401],tsNamePar[19],EgtToUiUnits(s3), sCompoPath) -- il parametro 's3' deve essere > 0 s3 = d3 elseif bMakeFaceGeom and bMakeMortGeom and jn and abs(I2)<=0 and D_X and L and L2 and abs(D_X) > ((L-L2)/2) then -- se il decentramento è troppo alto e fa sbordare la cava2 dalla 1 EC = 32 local dDelta = abs(((L-L2)/2)-abs(D_X)) EM = string.format(EgtDoorsMsg[423],tsNamePar[20],EgtToUiUnits(D_X),EgtToUiUnits(D_X + EgtIf( D_X >= 0, -dDelta, dDelta)), sCompoPath) -- il parametro 'D_X' é troppo grande, max valore: D_X = 0 elseif bMakeFaceGeom and bMakeMortGeom and jn and abs(I2)>0 and D_X and L and L2 and abs(D_X) > ((L-(L2+abs(I2)))/2) then -- se il decentramento è troppo alto e fa sbordare la cava2 dalla 1 EC = 33 local dDelta = abs(((L-(L2+abs(I2)))/2)-abs(D_X)) EM = string.format(EgtDoorsMsg[423],tsNamePar[20],EgtToUiUnits(D_X),EgtToUiUnits(D_X + EgtIf( D_X >= 0, -dDelta, dDelta)), sCompoPath) -- il parametro 'D_X' é troppo grande, max valore: D_X = 0 elseif bMakeMortGeom and bMakeMortGeom2nd and jn2 and abs(I2)<=0 and abs(I3)<=0 and D_X and D_X3 and L2 and L3 and abs(D_X-D_X3) < ((L2+L3)/2) and abs(D_X-D_X3) > ((L2-L3)/2) then -- se il decentramento è troppo alto e fa sbordare la cava3 dalla cava2 EC = 34 local dDelta = abs(((L2-(L3+abs(I3)))/2)-abs(D_X-D_X3)) EM = string.format(EgtDoorsMsg[624],tsNamePar[21],EgtToUiUnits(D_X3),EgtToUiUnits(D_X3 + EgtIf( D_X3 >= 0, -dDelta, dDelta)), sCompoPath) -- il parametro 'D_X3' é troppo grande, max valore: D_X3 = 0 elseif bMakeMortGeom and bMakeMortGeom2nd and jn2 and abs(I2)<=0 and abs(I3)>0 and D_X and D_X3 and L2 and L3 and (L2-(L3+abs(I3))) >= 0 and ((L2-(L3+abs(I3)))/2) <= abs(D_X3-D_X) then -- se il decentramento è troppo alto e fa sbordare la cava3 dalla 2 EC = 35 local dDelta = abs(((L2-L3)/2)-abs(D_X-D_X3)) EM = string.format(EgtDoorsMsg[624],tsNamePar[21],EgtToUiUnits(D_X3),EgtToUiUnits(D_X3 + EgtIf( D_X3 >= 0, -dDelta, dDelta)), sCompoPath) -- il parametro 'D_X3' é troppo grande, max valore: D_X3 = 0 elseif bMakeMortGeom and bMakeMortGeom2nd and D_X and D_X3 and abs(abs(D_X)-abs(D_X3)) < GEO.EPS_SMALL and abs(I2)>0 and abs(I3)>0 and abs(abs(I2)-abs(I3)) > GEO.EPS_SMALL and (abs(I2)-L2) > (abs(I3)-L3) then -- se le seconde mortase doppie sbordano delle prime mortase doppie EC = 36 EM = string.format(EgtDoorsMsg[625],tsNamePar[33],EgtToUiUnits(I3),EgtToUiUnits(abs(I2)-L2+L3), sCompoPath) -- il parametro 'I3' é troppo piccolo, min valore: I3 = abs(I2)-L2+L3 elseif bMakeMortGeom and bMakeMortGeom2nd and D_X and D_X3 and abs(abs(D_X)-abs(D_X3)) < GEO.EPS_SMALL and abs(I2)>0 and abs(I3)>0 and abs(I2-abs(I3)) > GEO.EPS_SMALL and (I2+L2) < (abs(I3)+L3) then -- se le seconde mortase doppie sbordano delle prime mortase doppie EC = 37 EM = string.format(EgtDoorsMsg[624],tsNamePar[33],EgtToUiUnits(I3),EgtToUiUnits(abs(I2)+L2-L3), sCompoPath) -- il parametro 'I3' é troppo grande, max valore: I3 = abs(I2)+L2-L3 elseif bMakeFaceGeom and nDrawMach > 0 and sf and sf <= 0 then EC = 38 EM = string.format(EgtDoorsMsg[401],tsNamePar[34],EgtToUiUnits(sf), sCompoPath) -- il parametro 'sf' deve essere > 0 sf = d elseif bMakeFaceGeom and cl and cl > 0 and rf < 0 then EC = 39 EM = string.format(EgtDoorsMsg[404],tsNamePar[35],EgtToUiUnits(rf), sCompoPath) -- il parametro 'rf' deve essere >= 0 rf = H/2 elseif bMakeFaceGeom and CLC and clc and ccr and clc > 0 and ccr > 0 and (2*(ccr*sin(45))) >= clc then EC = 40 EM = string.format(EgtDoorsMsg[407],tsNamePar[36],EgtToUiUnits(clc),'',EgtToUiUnits(2*(ccr*sin(45))), sCompoPath) -- il parametro 'clc' deve essere > 'crc' clc = (2*(ccr*sin(45)))+0.2 elseif bMakeBoreGeom and not dws and FBP and ( ( TB2 and FBP >= TB2) or ( not TB2 and T2 and FBP >= T2)) then if TB2 and FBP >= TB2 then EC = 41 EM = string.format(EgtDoorsMsg[407],tsNamePar[30],EgtToUiUnits(TB2),tsNamePar[32],EgtToUiUnits(FBP), sCompoPath) -- il parametro 'TB2' deve essere > 'FBP' TB2 = FBP + 0.1 elseif T2 and FBP >= T2 then EC = 42 EM = string.format(EgtDoorsMsg[407],tsNamePar[8],EgtToUiUnits(T2),tsNamePar[32],EgtToUiUnits(FBP), sCompoPath) -- il parametro 'T2' deve essere > 'FBP' T2 = FBP + 0.1 end elseif bMakeFaceGeom and ls then if (L-(2*rf)) < (LS+IS+(2*dR1)) then -- se lunghezza face troppo corta per parte latch EC = 43 EM = string.format(EgtDoorsMsg[627],tsNamePar[1],EgtToUiUnits(L),EgtToUiUnits((2*rf)+LS+IS+(2*dR1)), sCompoPath) -- il parametro 'L' é troppo piccolo, min valore: L = (2*rf)+LS+IS+(2*dR1) elseif LS <= (d+(dLSc*2)) then -- se larghezza dello strike è inferiore della componente inclinata EC = 44 EM = string.format(EgtDoorsMsg[627],tsNamePar[6],EgtToUiUnits(LS),EgtToUiUnits(d+(2*dLSc)), sCompoPath) -- il parametro 'LS' é troppo piccolo, min valore: LS = d+(2*dLSc)+ 0.1 elseif D_SS < (dR1+rf) then EC = 45 EM = string.format(EgtDoorsMsg[627],tsNamePar[24],EgtToUiUnits(D_SS),EgtToUiUnits(dR1+rf), sCompoPath) -- il parametro 'LS' é troppo piccolo, min valore: D_SS = dR1+rf + 0.1 end end if not bPreview and EC ~= 0 then return (ErrorBase+EC), EM end -- Se Preview cancello tutto if bPreview then EgtNewFile() EgtSetDefaultMaterial( BLACK()) end -- Pezzo e Layer local Pz if bPreview then Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- nuovo pezzo else if not RC then Pz = EgtGetCurrPart() -- pezzo corrente end if not Pz then Pz = EgtGroup(GDB_ID.ROOT,GDB_RT.LOC) -- nuovo pezzo end end local Lg -- variabili dei percorsi geometrici local nGeom1st, nGeom2st, nGeom1, nGeom2, nGeom3, nGeom4 local nAS1, nAS2, nAS3, nAS4 local hint_1, hint_2, hint_3, hint_4, hint_5, hint_6, hint_7, hint_8 -- variabili percorsi su fianco local hint_10, hint_11, hint_13, hint_14, hint_15 -- variabili percorsi su secure o keyway local nPkToJoin1st, nPkToJoin1, nPkToJoin2, nPkToJoin3, nPkToJoin4 local nPkToJoin1st_r, nPkToJoin1_r, nPkToJoin2_r, nPkToJoin3_r, nPkToJoin4_r local nPkJoin, nPkJoin1, nPkJoin2, nPkJoin3 local nPkJoin_rev, nPkJoin1_rev, nPkJoin2_rev, nPkJoin3_rev local nPos1st = 0 local nDirMort1 = 1 local nDirMort2 = 1 local bMatchMort = false local dFirstface = {} local nForceMakeFace = nDrawMach Lg = EgtGroup(Pz,GDB_RT.LOC) -- layer principale EgtSetName(Lg,sCompoName) if bMakeFaceGeom then -- in base agli arrotondamenti calcolo lo spostamento per posizionare la cava in centro if cl == 1 then -- se arrotondamento a sinistra nPos1st = rf/2 elseif cl == 2 then -- se arrotondamento a destra nPos1st = -(rf/2) else nPos1st = 0 end -- prima cava face completa -- assegno i valori coerenti con la tabella del componente dFirstface.L = L dFirstface.H = H dFirstface.T = T dFirstface.rf = rf dFirstface.cl = cl dFirstface.d = d dFirstface.p = p dFirstface.sf = sf dFirstface.jn = jn dFirstface.L2 = L2 dFirstface.H2 = H2 dFirstface.invG = invG dFirstface.est = est dFirstface.smr = 0 -- così il latch non crea i raccordini per evitare il chiseling dFirstface.mkrev = mkrev -- se ho abilitato il chiseling modifico il nome geometria if ech then dFirstface.LG = LG .. CH -- se ho abilitato solo le geometrie di lavorazione, abilito la generazione di entrambe per il contorno chisel if nDrawMach == 1 then nForceMakeFace = 2 end else dFirstface.LG = LG end dFirstface.LM = LM dFirstface.Nome = sCompoName dFirstface.D_X = D_X + (abs(I2/2)*nDirMort1) - nPos1st dFirstface.Dws = nil -- disabilito per non creare geometrie (doppie) inerenti il calcolo regioni nei componenti chiamati local sRequireCompoName = '_Latch' if ls then dFirstface.LS = LS dFirstface.HS = HS dFirstface.AS = AS dFirstface.IS = IS dFirstface.D_SS = D_SS dFirstface.rs = rs dFirstface.da = da dFirstface.LA = LA if IS > 0 then -- se doppio strike setto la posizione della prossima mortise nDirMort1 = -1 -- setto per invertire il senso di inserimento delle prime mortase dFirstface.D_X = D_X + (abs(I2/2)*nDirMort1) - nPos1st end sRequireCompoName = '_Strike' end -- lancio il primo componente base per disegnare la face completa MHgen = require( sRequireCompoName) if ls then nGeom1st, nPkToJoin1st, nGeom2st, nAS1, nAS2, nAS3, nAS4, nPkToJoin1st_r = MHgen.Draw( EC, EM, dFirstface, bPreview, bRunByCompo, nForceMakeFace, Pz, Lg, dThickDoor) else nGeom1st, nPkToJoin1st, nGeom2st, nAS1, nAS2, nPkToJoin1st_r = MHgen.Draw( EC, EM, dFirstface, bPreview, bRunByCompo, nForceMakeFace, Pz, Lg, dThickDoor) end -- setto le note che indicano su che lato della porta devono essere messe le geometrie local sSide = EgtIf( dl, 'Lock', 'Side') -- assegno le note e muovo nella posizione definitiva SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nGeom1st) SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nPkToJoin1st) SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nGeom2st) SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nAS1) SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nAS2) SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nAS3) SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nAS4) SetPropertyAndMoveGeom( sSide, kbs, pbs, 'c', nPos1st, nPkToJoin1st_r) -- Clean corner if nDrawMach >= 0 then -- se abilitata geometria if cl ~= 3 or ( cl == 3 and rf > 0) then -- se c'è almeno un lato senza raccordo if CLC and clc and clc > 0 and clc < H and clc < L then local CLC1 = MakeClcPath( clc, ccr, CLC, Lg, -T, (invG == -1)) if CLC1 then local nLS = 0 local nD_SS = 0 if LS then nLS = LS end if D_SS then nD_SS = D_SS end -- se mantiene backset SetProbeProperty( kbs, 0, pbs, 'c', CLC1) -- setto 'c' perché viene mantenuto il centro spessore if pbs and pbs > 0 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( CLC1, 'ProbeSide', '1') end EgtSetInfo( CLC1,'SideDoor',sSide) if cl <= 1 or cl == 3 then if LS ~= L and D_SS ~= 0 then -- angolo x+y+ local CLC2 = EgtCopyGlob( CLC1, Lg) EgtRotate( CLC2, Point3d(0,0,0), Z_AX(), -90) EgtMove( CLC2, Point3d((L/2),(H/2),0) - ORIG()) end -- angolo x+y- local CLC3 = EgtCopyGlob( CLC1, Lg) EgtRotate( CLC3, Point3d(0,0,0), Z_AX(), 180) EgtMove( CLC3, Point3d((L/2),-(H/2),0) - ORIG()) if cl == 1 then EgtErase(CLC1) end end if cl == 0 or cl >= 2 then -- angolo x-y- local CLC4 = EgtCopyGlob( CLC1, Lg) EgtRotate( CLC4, Point3d(0,0,0), Z_AX(), 90) EgtMove( CLC4, Point3d(-(L/2),-(H/2),0) - ORIG()) if LS ~= L and abs(L-nD_SS-nLS) >= GEO.EPS_SMALL then -- angolo x-y+ EgtMove( CLC1, Point3d(-(L/2),(H/2),0) - ORIG()) else EgtErase(CLC1) end end end end end end end if bMakeBoreGeom then -- se foro orizzontale abilitato -- se parametri foro/preforo if LMP and FBD and FBD > 0 and FBP and FBP > 0 then hint_7 = EgtCircle( Lg, Point3d(0,0,0), FBD/2 , GDB_RT.LOC) EgtModifyCurveThickness(hint_7, -FBP) EgtSetName(hint_7,LMP) if AB and abs(AB) > 0 then -- setto la griglia di fronte EgtSetGridFrame( Frame3d( 0, 0, 0, GDB_FR.FRONT)) EgtRotate( hint_7, Point3d(0,0,0), Z_AX(), AB, GDB_RT.GRID) -- ruoto su faccia frontale -- setto la griglia di top EgtSetGridFrame( Frame3d( 0, 0, 0, GDB_FR.TOP)) end end -- se parametri secondo foro if HB2 and TB2 then hint_8 = EgtCircle( Lg, Point3d(0,0,0), HB2/2 , GDB_RT.LOC) EgtModifyCurveThickness(hint_8, -TB2) elseif H2 and T2 then hint_8 = EgtCircle( Lg, Point3d(0,0,0), H2/2 , GDB_RT.LOC) EgtModifyCurveThickness(hint_8, -T2) end EgtSetName(hint_8,LGH) if AB and abs(AB) > 0 then -- setto la griglia di fronte EgtSetGridFrame( Frame3d( 0, 0, 0, GDB_FR.FRONT)) EgtRotate( hint_8, Point3d(0,0,0), Z_AX(), AB, GDB_RT.GRID) -- ruoto su faccia frontale -- setto la griglia di top EgtSetGridFrame( Frame3d( 0, 0, 0, GDB_FR.TOP)) end if hint_8 then -- se esiste secondo foro EgtSetInfo(hint_8,'SideDoor','Lock') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', hint_8) -- setto 'c' perché viene mantenuto il centro spessore end if hint_7 then -- se esiste foro/preforo EgtSetInfo(hint_7,'SideDoor','Lock') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', hint_7) -- setto 'c' perchè viene mantenuto il centro spessore end end -- determino se ho due coppie di mortase compatibili al concatenamento in Z if bMakeMortGeom and bMakeMortGeom2nd and jn2 and abs(I2)> 0 and abs(I3)>0 and (D_X+(abs(I2)-L2)/2) <= (D_X3+(abs(I3)-L3)/2) and (D_X+(abs(I2)+L2)/2) >= (D_X3+(abs(I3)+L3)/2) then bMatchMort = true -- setto flag per indicare che le coppie di mortase sono centrate end if bMakeMortGeom then -- se seconda cava abilitata -- eseguo la prima delle prime mortase local dMortise = {} -- assegno i valori coerenti con la tabella del componente dMortise.T = T dMortise.L2 = L2 dMortise.H2 = H2 dMortise.T2 = T2 dMortise.s = s dMortise.d = d2 dMortise.p = p2 dMortise.jn = jn dMortise.invG = invG dMortise.mkrev = mkrev dMortise.LGM = LG2 dMortise.LMM = LA2 dMortise.L3 = L2 dMortise.H3 = H2 dMortise.d3 = d2 dMortise.p3 = p2 dMortise.Nome = sCompoName dMortise.jne = jn2 dMortise.D_X = 0 -- se c'è il match tra le 4 mortase if bMatchMort then dMortise.L3 = L3 dMortise.H3 = H3 dMortise.d3 = d3 dMortise.p3 = p3 dMortise.D_X = -(((abs(I2)-abs(I3))/2)-(D_X-D_X3))*nDirMort1 dMortise.jne = jn2 dMortise.jnt = false nDirMort2 = nDirMort1 else -- se non c'è il match vedo se c'è intersasse con la mortsa dello stesso livello -- calcolo la posizione dal centro seconda cava (mortasa) al centro della cava successiva if abs(I2) > 0 then -- se ho seconda cava dMortise.L3 = L2 dMortise.H3 = H2 dMortise.D_X = -abs(I2)*nDirMort1 dMortise.jne = true dMortise.jnt = true nDirMort2 = -nDirMort1 else -- se ho solo una cava if jn2 then -- se si concatena alle seguenti nDirMort1 = 1 dMortise.L3 = L3 dMortise.H3 = H3 dMortise.D_X = D_X3 + ((abs(I3)/2)*nDirMort1) - D_X nDirMort2 = nDirMort1 dMortise.jnt = true if ((L2 - (L3+abs(I3)))/2) > abs(D_X3-D_X) then -- se prima mortasa contiene la/e seconda/e mortasa/e rimango a z della prima mortasa dMortise.jnt = false end end end end -- lancio il componente base MHgen = require('_Mortise') nGeom1, nPkToJoin1, nPkToJoin1_r = MHgen.Draw( EC, EM, dMortise, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor) -- assegno le note e muovo nella posizione definitiva SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X+(abs(I2/2)*nDirMort1)), nGeom1) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X+(abs(I2/2)*nDirMort1)), nPkToJoin1) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X+(abs(I2/2)*nDirMort1)), nPkToJoin1_r) end if bMatchMort then -- se le mortase sono centrate -- eseguo la prima delle seconde mortase local dMortise = {} -- assegno i valori coerenti con la tabella del componente dMortise.T = T2 dMortise.L2 = L3 dMortise.H2 = H3 dMortise.T2 = T3 dMortise.s = s3 dMortise.d = d3 dMortise.p = p3 dMortise.jn = jn2 dMortise.invG = invG dMortise.mkrev = mkrev dMortise.LGM = LG3 dMortise.LMM = LA3 dMortise.Nome = sCompoName -- assegno i seguenti valori cava con le dimensioni della prima mortasa dMortise.L3 = L2 dMortise.H3 = H2 dMortise.d3 = d2 dMortise.p3 = p2 dMortise.D_X = -(((abs(I2)+abs(I3))/2)+D_X-D_X3)*nDirMort1 dMortise.jne = jn2 dMortise.jnt = true dMortise.TE = T -- lancio il componente base MHgen = require('_Mortise') nGeom3, nPkToJoin3, nPkToJoin3_r = MHgen.Draw( EC, EM, dMortise, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor) -- assegno le note e muovo nella posizione definitiva SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3+(abs(I3/2)*nDirMort2)), nGeom3) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3+(abs(I3/2)*nDirMort2)), nPkToJoin3) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3+(abs(I3/2)*nDirMort2)), nPkToJoin3_r) else -- altrimenti verifico se ho doppia prima mortasa if bMakeMortGeom and abs(I2) > 0 then -- se ho seconda cava doppia -- eseguo la doppia delle prime mortase local dMortise = {} -- assegno i valori coerenti con la tabella del componente dMortise.T = T dMortise.L2 = L2 dMortise.H2 = H2 dMortise.T2 = T2 dMortise.s = s dMortise.d = d2 dMortise.p = p2 dMortise.jn = jn dMortise.invG = invG dMortise.mkrev = mkrev dMortise.L3 = L2 dMortise.H3 = H2 dMortise.d3 = d2 dMortise.p3 = p2 dMortise.LGM = LG2 dMortise.LMM = LA2 dMortise.Nome = sCompoName dMortise.jne = jn2 dMortise.jnt = false if bMakeMortGeom2nd then -- se ho seconda mortasa dMortise.jnt = true end if jn2 then dMortise.L3 = L3 dMortise.H3 = H3 dMortise.d3 = d3 dMortise.p3 = p3 dMortise.D_X = ((D_X3+abs(I3/2))-(D_X-(abs(I2/2)*nDirMort1))) end -- lancio il componente base MHgen = require('_Mortise') nGeom2, nPkToJoin2, nPkToJoin2_r = MHgen.Draw( EC, EM, dMortise, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor) -- assegno le note e muovo nella posizione definitiva SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X-(abs(I2/2)*nDirMort1)), nGeom2) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X-(abs(I2/2)*nDirMort1)), nPkToJoin2) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X-(abs(I2/2)*nDirMort1)), nPkToJoin2_r) end end if bMatchMort then -- se le mortase sono centrate -- eseguo la doppia delle prime mortase local dMortise = {} -- assegno i valori coerenti con la tabella del componente dMortise.T = T dMortise.L2 = L2 dMortise.H2 = H2 dMortise.T2 = T2 dMortise.s = s dMortise.d = d2 dMortise.p = p2 dMortise.jn = jn2 dMortise.invG = invG dMortise.mkrev = mkrev dMortise.LGM = LG2 dMortise.LMM = LA2 dMortise.L3 = L3 dMortise.H3 = H3 dMortise.d3 = d3 dMortise.p3 = p3 dMortise.Nome = sCompoName dMortise.jne = jn2 dMortise.jnt = false dMortise.D_X = (((abs(I2)-abs(I3))/2)+D_X-D_X3)*nDirMort2 -- lancio il secondo componente base MHgen = require('_Mortise') nGeom2, nPkToJoin2, nPkToJoin2_r = MHgen.Draw( EC, EM, dMortise, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor) -- assegno le note e muovo nella posizione definitiva SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X-(abs(I2/2)*nDirMort1)), nGeom2) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X-(abs(I2/2)*nDirMort1)), nPkToJoin2) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X-(abs(I2/2)*nDirMort1)), nPkToJoin2_r) else if bMakeMortGeom2nd then -- se seconde mortase abilitate -- eseguo la prima delle seconde mortase local dMortise = {} -- assegno i valori coerenti con la tabella del componente dMortise.T = T dMortise.L2 = L3 dMortise.H2 = H3 dMortise.T2 = T3 dMortise.s = s3 dMortise.d = d3 dMortise.p = p3 dMortise.jn = jn2 dMortise.invG = invG dMortise.mkrev = mkrev dMortise.LGM = LG3 dMortise.LMM = LA3 dMortise.Nome = sCompoName dMortise.D_X = 0 dMortise.jne = false dMortise.jnt = true if I3 and abs(I3) > 0 then -- se ho doppia seconda mortasa dMortise.L3 = L3 dMortise.H3 = H3 dMortise.d3 = d3 dMortise.p3 = p3 dMortise.D_X = -abs(I3)*nDirMort2 dMortise.jne = true else dMortise.TE = 0 if not jn2 then dMortise.d3 = d3 dMortise.p3 = p3 dMortise.s3 = s3 end end if abs(I2) < GEO.EPS_SMALL and ((L2 - (L3+abs(I3)))/2) > abs(D_X3-D_X) then -- se prima mortasa non doppia contiene la/e seconda/e martasa/e rimango a z della prima mortasa dMortise.T = T2 if abs(I3) > 0 then dMortise.TE = T2 else dMortise.TE = 0 end elseif abs(I2) < GEO.EPS_SMALL then -- altrimenti se prima mortasa non doppia e non contiene le seconde mortase if not jn then -- se non collegate a svuotatura face dMortise.T = 0 end end -- lancio il secondo componente base MHgen = require('_Mortise') nGeom3, nPkToJoin3, nPkToJoin3_r = MHgen.Draw( EC, EM, dMortise, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor) -- assegno le note e muovo nella posizione definitiva SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3+(abs(I3/2)*nDirMort2)), nGeom3) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3+(abs(I3/2)*nDirMort2)), nPkToJoin3) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3+(abs(I3/2)*nDirMort2)), nPkToJoin3_r) end end if bMakeMortGeom2nd then -- se seconde mortase abilitate if bMatchMort or abs(I3) > 0 then -- se ho terza cava doppia -- eseguo la doppia delle seconde mortase local dMortise = {} -- assegno i valori coerenti con la tabella del componente dMortise.T = T2 dMortise.TE = 0 -- se le mortase non sono centrate e le seconde non sono contenute nella prima if not bMatchMort and (((L2 - (L3+abs(I3)))/2) <= abs(D_X3-D_X)) then if not jn then -- se non collegate a svuotatura face dMortise.T = 0 -- quota di partezza alla profondità face else dMortise.T = T -- quota di partezza alla profondità face end end dMortise.L2 = L3 dMortise.H2 = H3 dMortise.T2 = T3 dMortise.s = s3 dMortise.d = d3 dMortise.p = p3 dMortise.jn = jn2 dMortise.invG = invG dMortise.mkrev = mkrev dMortise.LGM = LG3 dMortise.LMM = LA3 dMortise.Nome = sCompoName dMortise.D_X = 0 dMortise.jne = false dMortise.jnt = true dMortise.L3 = L3 dMortise.H3 = H3 dMortise.d3 = d3 dMortise.p3 = p3 -- lancio il secondo componente base MHgen = require('_Mortise') nGeom4, nPkToJoin4, nPkToJoin4_r = MHgen.Draw( EC, EM, dMortise, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor) -- assegno le note e muovo nella posizione definitiva SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3-(abs(I3/2)*nDirMort2)), nGeom4) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3-(abs(I3/2)*nDirMort2)), nPkToJoin4) SetPropertyAndMoveGeom( 'Lock', kbs, pbs, 'c', (D_X3-(abs(I3/2)*nDirMort2)), nPkToJoin4_r) end end -- disegno le geometrie mounting screw if EC == 0 then for k = 1, 2 do local D9 = tMountingScrew[k][1] local T9 = tMountingScrew[k][2] local I9 = tMountingScrew[k][3] or 0 local IY9 = tMountingScrew[k][4] or 0 local mcs = tMountingScrew[k][5] local mss = tMountingScrew[k][6] local PX9C = tMountingScrew[k][7] or 0 local PX9 = tMountingScrew[k][8] or 0 local PY9 = tMountingScrew[k][9] or 0 local LMS = tMountingScrew[k][10] -- se dimensioni foro viti idonee if D9 and T9 and LMS then if D9 > 0 and T9 ~= 0 and LMS ~= '' then if not Lg then Lg = EgtGroup( Pz, GDB_RT.LOC) EgtSetName( Lg, sCompoName) end hint_3 = EgtCircle( Lg, Point3d(PX9+(I9/2),PY9+(IY9/2),0), D9/2 , GDB_RT.LOC) EgtModifyCurveThickness( hint_3, -T9) EgtSetName( hint_3, LMS) EgtSetInfo( hint_3, 'SideDoor', 'Lock') -- setto una nota per indicare su che lato della porta deve essere spostato -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', hint_3) -- setto 'c' perchè viene mantenuto il centro spessore if IY9 ~= 0 then hint_5 = EgtCircle( Lg, Point3d(PX9+(I9/2),PY9-(IY9/2),0), D9/2 , GDB_RT.LOC) EgtModifyCurveThickness( hint_5, -T9) EgtSetName( hint_5, LMS) EgtSetInfo( hint_5, 'SideDoor', 'Lock') -- setto una nota per indicare su che lato della porta deve essere spostato -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', hint_5) -- setto 'c' perchè viene mantenuto il centro spessore end if mcs then if mss then hint_1 = EgtCircle( Lg, Point3d(PX9+PX9C,PY9,0), D9/2 , GDB_RT.LOC) EgtModifyCurveThickness( hint_1, -T9) EgtSetName( hint_1, LMS) EgtSetInfo( hint_1, 'SideDoor', 'Lock') -- setto una nota per indicare su che lato della porta deve essere spostato -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', hint_1) -- setto 'c' perchè viene mantenuto il centro spessore else hint_1 = EgtCircle( Lg, Point3d(PX9+PX9C,PY9+(IY9/2),0), D9/2 , GDB_RT.LOC) EgtModifyCurveThickness( hint_1, -T9) EgtSetName( hint_1, LMS) EgtSetInfo( hint_1, 'SideDoor', 'Lock') -- setto una nota per indicare su che lato della porta deve essere spostato -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', hint_1) -- setto 'c' perchè viene mantenuto il centro spessore hint_2 = EgtCircle( Lg, Point3d(PX9+PX9C,PY9-(IY9/2),0), D9/2 , GDB_RT.LOC) EgtModifyCurveThickness( hint_2, -T9) EgtSetName( hint_2, LMS) EgtSetInfo( hint_2,'SideDoor','Lock') -- setto una nota per indicare su che lato della porta deve essere spostato -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', hint_2) -- setto 'c' perchè viene mantenuto il centro spessore end end if I9 ~= 0 then hint_4 = EgtCircle( Lg, Point3d(PX9-(I9/2),PY9+(IY9/2),0), D9/2 , GDB_RT.LOC) EgtModifyCurveThickness( hint_4, -T9) EgtSetName( hint_4, LMS) EgtSetInfo( hint_4, 'SideDoor', 'Lock') -- setto una nota per indicare su che lato della porta deve essere spostato -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', hint_4) -- setto 'c' perchè viene mantenuto il centro spessore if IY9 ~= 0 then hint_6 = EgtCircle( Lg, Point3d(PX9-(I9/2),PY9-(IY9/2),0), D9/2 , GDB_RT.LOC) EgtModifyCurveThickness( hint_6, -T9) EgtSetName( hint_6, LMS) EgtSetInfo( hint_6, 'SideDoor', 'Lock') -- setto una nota per indicare su che lato della porta deve essere spostato -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', hint_6) -- setto 'c' perchè viene mantenuto il centro spessore end end end end end end if EC == 0 and bMakeBoreGeom and hint_8 then -- se esiste il secondo foro if DH_X and abs(DH_X) > GEO.EPS_SMALL then EgtMove( hint_8, Point3d(DH_X,0,0) - ORIG()) elseif not HB2 and abs(D_X) > GEO.EPS_SMALL then EgtMove( hint_8, Point3d(D_X,0,0) - ORIG()) end end if EC == 0 and bMakeBoreGeom and hint_7 then -- se esiste il foro/preforo if DH_X and abs(DH_X) > GEO.EPS_SMALL then EgtMove( hint_7, Point3d(DH_X,0,0) - ORIG()) elseif not HB2 and abs(D_X) > GEO.EPS_SMALL then EgtMove( hint_7, Point3d(D_X,0,0) - ORIG()) end end -- se percorsi fatti con lo stesso utensile, li concateno if jn and EC == 0 and nPkToJoin1st and nPkToJoin1 then -- recupero la nota delle variazioni dalla geometria del face local sVarNote = EgtGetInfo( nPkToJoin1st, 'MVar') nPkJoin = EgtCurveCompo( Lg, {nPkToJoin1st,nPkToJoin1}, true) if nPkJoin then EgtSetName( nPkJoin, LM) if sVarNote then EgtSetInfo( nPkJoin, 'MVar', sVarNote) end -- se concatenata con la seconda cava (mortasa), forzo la posizione a Lock ( non segue angolo del profilo bevel) EgtSetInfo( nPkJoin, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin, 'NotCheckDir', '1') -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom1) -- setto 'c' perchè viene mantenuto il centro spessore else EC = ErrorBase + 52 EM = string.format( EgtDoorsMsg[426], sCompoPath) end end -- se percorsi inversi fatti con lo stesso utensile, li concateno if jn and EC == 0 and nPkToJoin1st_r and nPkToJoin1_r then -- recupero la nota delle variazioni dalla geometria del face local sVarNote = EgtGetInfo( nPkToJoin1st_r, 'MVar') nPkJoin_rev = EgtCurveCompo( Lg, {nPkToJoin1st_r,nPkToJoin1_r}, true) if nPkJoin_rev then EgtSetName( nPkJoin_rev, LM..'R') if sVarNote then EgtSetInfo( nPkJoin_rev, 'MVar', sVarNote) end -- se concatenata con la seconda cava (mortasa), forzo la posizione a Lock ( non segue angolo del profilo bevel) EgtSetInfo( nPkJoin_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin_rev, 'NotCheckDir', '1') -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin_rev) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom1) -- setto 'c' perchè viene mantenuto il centro spessore else EC = ErrorBase + 53 EM = string.format( EgtDoorsMsg[425], sCompoPath) end end if not bMatchMort then -- se le cave non si combinano -- se ho doppia cava e non matchano con le 4 cave if EC == 0 and nPkToJoin1 and nPkToJoin2 then local sVarNote if nPkJoin then -- se fatto concatenamento con face sVarNote = EgtGetInfo( nPkJoin, 'MVar') nPkJoin1 = EgtCurveCompo( Lg, {nPkJoin,nPkToJoin2}, true) else nPkJoin1 = EgtCurveCompo( Lg, {nPkToJoin1,nPkToJoin2}, true) end if nPkJoin1 then if nPkJoin then if sVarNote then EgtSetInfo( nPkJoin1, 'MVar', sVarNote) end EgtSetName( nPkJoin1, LM) -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin1) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom2) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin1, LA2) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 1, pbs, 'c', nPkJoin1) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin1, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin1, 'NotCheckDir', '1') else EC = ErrorBase + 54 EM = string.format( EgtDoorsMsg[426], sCompoPath) end end -- se ho doppia cava inversa senza match tra le mortase if EC == 0 and nPkToJoin1_r and nPkToJoin2_r then local sVarNote if nPkJoin_rev then -- se fatto concatenamento con face sVarNote = EgtGetInfo( nPkJoin_rev, 'MVar') nPkJoin1_rev = EgtCurveCompo( Lg, {nPkJoin_rev,nPkToJoin2_r}, true) else nPkJoin1_rev = EgtCurveCompo( Lg, {nPkToJoin1_r,nPkToJoin2_r}, true) end if nPkJoin1_rev then if nPkJoin_rev then if sVarNote then EgtSetInfo( nPkJoin1_rev, 'MVar', sVarNote) end EgtSetName( nPkJoin1_rev, LM..'R') -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin1_rev) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom2) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin1_rev, LA2..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin1_rev) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin1_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin1_rev, 'NotCheckDir', '1') else EC = ErrorBase + 55 EM = string.format(EgtDoorsMsg[425], sCompoPath) end end -- se ho terza cava senza match if jn2 and EC == 0 and nPkToJoin3 then if nPkJoin1 then -- se riuscito precedente concatenamento -- recupero la nota delle variazioni dalla geometria del face local sVarNote = EgtGetInfo( nPkJoin1, 'MVar') nPkJoin2 = EgtCurveCompo( Lg, {nPkJoin1,nPkToJoin3}, true) if nPkJoin2 then if nPkJoin then -- se riuscito primo concatenamento if sVarNote then EgtSetInfo( nPkJoin2, 'MVar', sVarNote) end EgtSetName( nPkJoin2, LM) -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom3) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin2, LA2) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin2, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2, 'NotCheckDir', '1') else EC = ErrorBase + 56 EM = string.format(EgtDoorsMsg[426], sCompoPath) end else local sVarNote if nPkJoin then -- se riuscito primo concatenamento -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin, 'MVar') nPkJoin2 = EgtCurveCompo( Lg, {nPkJoin,nPkToJoin3}, true) elseif nPkToJoin1 then nPkJoin2 = EgtCurveCompo( Lg, {nPkToJoin1,nPkToJoin3}, true) end if nPkJoin2 then if sVarNote then EgtSetInfo( nPkJoin2, 'MVar', sVarNote) end EgtSetName( nPkJoin2, LA2) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2) -- setto 'c' perchè viene mantenuto il centro spessore EgtSetInfo( nPkJoin2, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2, 'NotCheckDir', '1') else EC = ErrorBase + 57 EM = string.format(EgtDoorsMsg[426], sCompoPath) end end end -- se ho terza cava inversa senza match if jn2 and EC == 0 and nPkToJoin3_r then if nPkJoin1_rev then -- se riuscito precedente concatenamento -- recupero la nota delle variazioni dalla geometria del face local sVarNote = EgtGetInfo( nPkJoin1_rev, 'MVar') nPkJoin2_rev = EgtCurveCompo( Lg, {nPkJoin1_rev,nPkToJoin3_r}, true) if nPkJoin2_rev then if nPkJoin_rev then -- se riuscito primo concatenamento if sVarNote then EgtSetInfo( nPkJoin2_rev, 'MVar', sVarNote) end EgtSetName( nPkJoin2_rev, LM..'R') -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2_rev) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom3) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin2_rev, LA2..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2_rev) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin2_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2_rev, 'NotCheckDir', '1') else EC = ErrorBase + 58 EM = string.format( EgtDoorsMsg[425], sCompoPath) end else local sVarNote if nPkJoin_rev then -- se riuscito primo concatenamento -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin_rev, 'MVar') nPkJoin2_rev = EgtCurveCompo( Lg, {nPkJoin_rev,nPkToJoin3_r}, true) elseif nPkToJoin1_r then nPkJoin2_rev = EgtCurveCompo( Lg, {nPkToJoin1_r,nPkToJoin3_r}, true) end if nPkJoin2_rev then if sVarNote then EgtSetInfo( nPkJoin2_rev, 'MVar', sVarNote) end EgtSetName( nPkJoin2_rev, LA2..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2_rev) -- setto 'c' perchè viene mantenuto il centro spessore EgtSetInfo( nPkJoin2_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2_rev, 'NotCheckDir', '1') else EC = ErrorBase + 59 EM = string.format( EgtDoorsMsg[425], sCompoPath) end end end -- se ho doppia terza cava senza match if EC == 0 and nPkToJoin3 and nPkToJoin4 then local sVarNote if nPkJoin2 then -- se fatto concatenamento con face -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin2, 'MVar') nPkJoin3 = EgtCurveCompo( Lg, {nPkJoin2,nPkToJoin4}, true) else nPkJoin3 = EgtCurveCompo( Lg, {nPkToJoin3,nPkToJoin4}, true) end if nPkJoin3 then if nPkJoin2 then if sVarNote then EgtSetInfo( nPkJoin3, 'MVar', sVarNote) end if nPkJoin then EgtSetName( nPkJoin3, LM) else EgtSetName( nPkJoin3, LA2) end -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom4) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin3, LA3) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin3, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin3, 'NotCheckDir', '1') else EC = ErrorBase + 60 EM = string.format(EgtDoorsMsg[426], sCompoPath) end end -- se ho doppia terza cava inversa senza match if EC == 0 and nPkToJoin3_r and nPkToJoin4_r then local sVarNote if nPkJoin2_rev then -- se fatto concatenamento con face -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin2_rev, 'MVar') nPkJoin3_rev = EgtCurveCompo( Lg, {nPkJoin2_rev,nPkToJoin4_r}, true) else nPkJoin3_rev = EgtCurveCompo( Lg, {nPkToJoin3_r,nPkToJoin4_r}, true) end if nPkJoin3_rev then if nPkJoin2_rev then if sVarNote then EgtSetInfo( nPkJoin3_rev, 'MVar', sVarNote) end if nPkJoin_rev then EgtSetName( nPkJoin3_rev, LM..'R') else EgtSetName( nPkJoin3_rev, LA2..'R') end -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3_rev) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom4) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin3_rev, LA3..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3_rev) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin3_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin3_rev, 'NotCheckDir', '1') else EC = ErrorBase + 61 EM = string.format(EgtDoorsMsg[425], sCompoPath) end end else -- se ho il match con tra le mortase -- se ho doppia cava e matchano con le 4 cave concateno con la seconda mortasa if EC == 0 and nPkToJoin1 and nPkToJoin3 then local sVarNote if nPkJoin then -- se fatto concatenamento con face -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin, 'MVar') nPkJoin1 = EgtCurveCompo( Lg, {nPkJoin,nPkToJoin3}, true) else nPkJoin1 = EgtCurveCompo( Lg, {nPkToJoin1,nPkToJoin3}, true) end if nPkJoin1 then if nPkJoin then if sVarNote then EgtSetInfo( nPkJoin1, 'MVar', sVarNote) end EgtSetName( nPkJoin1, LM) -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin1) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom3) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin1, LA2) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin1) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin1, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin1, 'NotCheckDir', '1') else EC = ErrorBase + 62 EM = string.format(EgtDoorsMsg[426], sCompoPath) end end -- se ho doppia cava inversa con match tra le mortase if EC == 0 and nPkToJoin1_r and nPkToJoin3_r then local sVarNote if nPkJoin_rev then -- se fatto concatenamento con face -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin_rev, 'MVar') nPkJoin1_rev = EgtCurveCompo( Lg, {nPkJoin_rev,nPkToJoin3_r}, true) else nPkJoin1_rev = EgtCurveCompo( Lg, {nPkToJoin1_r,nPkToJoin3_r}, true) end if nPkJoin1_rev then if nPkJoin_rev then if sVarNote then EgtSetInfo( nPkJoin1_rev, 'MVar', sVarNote) end EgtSetName( nPkJoin1_rev, LM..'R') -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin1_rev) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom3) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin1_rev, LA2..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin1_rev) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin1_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin1_rev, 'NotCheckDir', '1') else EC = ErrorBase + 63 EM = string.format(EgtDoorsMsg[425], sCompoPath) end end -- se ho seconda cava con match if jn2 and EC == 0 and nPkToJoin2 then if nPkJoin1 then -- se riuscito precedente concatenamento -- recupero la nota delle variazioni dalla geometria del face local sVarNote = EgtGetInfo( nPkJoin1, 'MVar') nPkJoin2 = EgtCurveCompo( Lg, {nPkJoin1,nPkToJoin2}, true) if nPkJoin2 then if nPkJoin then -- se riuscito primo concatenamento if sVarNote then EgtSetInfo( nPkJoin2, 'MVar', sVarNote) end EgtSetName( nPkJoin2, LM) -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom2) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin2, LA2) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin2, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2, 'NotCheckDir', '1') else EC = ErrorBase + 64 EM = string.format(EgtDoorsMsg[426], sCompoPath) end else local sVarNote if nPkJoin then -- se riuscito primo concatenamento -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin, 'MVar') nPkJoin2 = EgtCurveCompo( Lg, {nPkJoin,nPkToJoin2}, true) elseif nPkToJoin3 then nPkJoin2 = EgtCurveCompo( Lg, {nPkToJoin3,nPkToJoin2}, true) end if nPkJoin2 then if sVarNote then EgtSetInfo( nPkJoin2, 'MVar', sVarNote) end EgtSetName( nPkJoin2, LA2) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2) -- setto 'c' perchè viene mantenuto il centro spessore EgtSetInfo( nPkJoin2, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2, 'NotCheckDir', '1') else EC = ErrorBase + 65 EM = string.format(EgtDoorsMsg[426], sCompoPath) end end end -- se ho seconda cava inversa con match if jn2 and EC == 0 and nPkToJoin2_r then if nPkJoin1_rev then -- se riuscito precedente concatenamento -- recupero la nota delle variazioni dalla geometria del face local sVarNote = EgtGetInfo( nPkJoin1_rev, 'MVar') nPkJoin2_rev = EgtCurveCompo( Lg, {nPkJoin1_rev,nPkToJoin2_r}, true) if nPkJoin2_rev then if nPkJoin_rev then -- se riuscito primo concatenamento if sVarNote then EgtSetInfo( nPkJoin2_rev, 'MVar', sVarNote) end EgtSetName( nPkJoin2_rev, LM..'R') -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2_rev) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom2) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin2_rev, LA2..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2_rev) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin2_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2_rev, 'NotCheckDir', '1') else EC = ErrorBase + 66 EM = string.format(EgtDoorsMsg[425], sCompoPath) end else local sVarNote if nPkJoin_rev then -- se riuscito primo concatenamento -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin_rev, 'MVar') nPkJoin2_rev = EgtCurveCompo( Lg, {nPkJoin_rev,nPkToJoin2_r}, true) elseif nPkToJoin3_r then nPkJoin2_rev = EgtCurveCompo( Lg, {nPkToJoin3_r,nPkToJoin2_r}, true) end if nPkJoin2_rev then if sVarNote then EgtSetInfo( nPkJoin2_rev, 'MVar', sVarNote) end EgtSetName( nPkJoin2_rev, LA2..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin2_rev) -- setto 'c' perchè viene mantenuto il centro spessore EgtSetInfo( nPkJoin2_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin2_rev, 'NotCheckDir', '1') else EC = ErrorBase + 67 EM = string.format(EgtDoorsMsg[425], sCompoPath) end end end -- se ho doppia terza cava con match if EC == 0 and nPkToJoin2 and nPkToJoin4 then local sVarNote if nPkJoin2 then -- se fatto concatenamento con face -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin2, 'MVar') nPkJoin3 = EgtCurveCompo( Lg, {nPkJoin2,nPkToJoin4}, true) else nPkJoin3 = EgtCurveCompo( Lg, {nPkToJoin2,nPkToJoin4}, true) end if nPkJoin3 then if nPkJoin2 then if sVarNote then EgtSetInfo( nPkJoin3, 'MVar', sVarNote) end if nPkJoin then EgtSetName( nPkJoin3, LM) else EgtSetName( nPkJoin3, LA2) end -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom4) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin3, LA3) -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin3, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin3, 'NotCheckDir', '1') else EC = ErrorBase + 68 EM = string.format(EgtDoorsMsg[426], sCompoPath) end end -- se ho doppia terza cava inversa con match if EC == 0 and nPkToJoin2_r and nPkToJoin4_r then local sVarNote if nPkJoin2_rev then -- se fatto concatenamento con face -- recupero la nota delle variazioni dalla geometria del face sVarNote = EgtGetInfo( nPkJoin2_rev, 'MVar') nPkJoin3_rev = EgtCurveCompo( Lg, {nPkJoin2_rev,nPkToJoin4_r}, true) else nPkJoin3_rev = EgtCurveCompo( Lg, {nPkToJoin2_r,nPkToJoin4_r}, true) end if nPkJoin3_rev then if nPkJoin2_rev then if sVarNote then EgtSetInfo( nPkJoin3_rev, 'MVar', sVarNote) end if nPkJoin_rev then EgtSetName( nPkJoin3_rev, LM..'R') else EgtSetName( nPkJoin3_rev, LA2..'R') end -- se mantiene centro spessore anche su face SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3_rev) -- setto 'c' perchè viene mantenuto il centro spessore SetProbeProperty( kbs, 0, pbs, 'c', nGeom4) -- setto 'c' perchè viene mantenuto il centro spessore else EgtSetName( nPkJoin3_rev, LA3..'R') -- se mantiene centro spessore su mortise SetProbeProperty( kbs, 0, pbs, 'c', nPkJoin3_rev) -- setto 'c' perchè viene mantenuto il centro spessore end EgtSetInfo( nPkJoin3_rev, 'SideDoor', 'Lock') EgtSetInfo( nPkJoin3_rev, 'NotCheckDir', '1') else EC = ErrorBase + 69 EM = string.format(EgtDoorsMsg[425], sCompoPath) end end end if EC == 0 then -- se nessun errore -- Gestione file custom local MakeFaceGeom = true -- caricamento del file custom if string.len(CustGeomFile) > 0 and string.find( string.lower(CustGeomFile), '.nge') > 0 then -- sostituisco il carattere '\' con '_' nel nome file CustGeomFile = string.gsub(CustGeomFile, '\\', '_') CustGeomFile = string.gsub(CustGeomFile, '/', '_') -- concateno il file alla path local sCustomPathFile = CustGeomPath..CustGeomFile local nNewPart local nNewLayer local nNewEnt local nTypeEnt local sTypeInfo local cColor -- provo ad inserire MakeFaceGeom = not EgtInsertFile( sCustomPathFile) -- se fallito inserimento file dò un messaggio di errore if MakeFaceGeom then EC = ErrorBase + 51 EM = string.format( EgtDoorsMsg[457], sCustomPathFile) else nNewPart = EgtGetNext(Pz) -- nome nuovo pezzo nNewLayer = EgtGetFirstInGroup( nNewPart) -- ottengo nuovo layer -- riloco tutti i nuovi layer dal nuovo pezzo al pezzo corrente while nNewLayer do nNewEnt = EgtGetFirstInGroup( nNewLayer) -- ottengo nuova entità while nNewEnt do -- controllo se ha dei colori e le note giuste per cambiare lo spessore nTypeEnt = EgtGetType( nNewEnt) sTypeInfo = EgtGetInfo( nNewEnt, 'SideDoor') cColor = EgtGetCalcColor( nNewEnt) if sTypeInfo and cColor and DGD.dT then if string.lower(sTypeInfo) == 'keyway' or string.lower(sTypeInfo) == 'secure' then if AreSameColor(cColor,RED(),30) then -- se colore rosso allora spessore completo EgtModifyCurveThickness(nNewEnt, -DGD.dT) elseif AreSameColor(cColor,LIME(),30) then -- se colore verde allora metà spessore EgtModifyCurveThickness(nNewEnt, -(DGD.dT/2)) -- se mantiene profondità e non è a spessore passante SetProbeProperty( kbs, 1, pbs, 'x', nNewEnt) -- setto 'x' perchè viene mantenuto il centro spessore else -- altrimenti controllo che lo spessore non supera quello della porta, se lo supera lo setto = spessore porta local dTh = EgtCurveThickness( nNewEnt) if abs(dTh) > DGD.dT then EgtModifyCurveThickness( nNewEnt, EgtIf( dTh > 0, DGD.dT, -DGD.dT)) elseif abs(dTh) < DGD.dT then -- se mantiene profondità e non è a spessore passante SetProbeProperty( kbs, 1, pbs, 'x', nNewEnt) -- setto 'x' provvisoriamente end end end elseif sTypeInfo and string.lower(sTypeInfo) == 'keyway' or string.lower(sTypeInfo) == 'secure' then -- controllo che lo spessore non supera quello della porta, se lo supera lo setto = spessore porta local dTh = EgtCurveThickness( nNewEnt) if abs(dTh) > DGD.dT then EgtModifyCurveThickness( nNewEnt, EgtIf( dTh > 0, DGD.dT, -DGD.dT)) elseif abs(dTh) < DGD.dT then -- se mantiene profondità e non è a spessore passante SetProbeProperty( kbs, 1, pbs, 'x', nNewEnt) -- setto 'x' provvisoriamente end end EgtRelocateGlob( nNewEnt, Lg) -- riloco nel layer della serratura nNewEnt = EgtGetFirstInGroup(nNewLayer) end nNewLayer = EgtGetNext(nNewLayer) end -- cancello il nuovo pezzo EgtErase(nNewPart) end end -- Extra bores Keyway for k = 1, 10 do local D10 = tExtraBore[k][1] local T10 = tExtraBore[k][2] local PX10 = tExtraBore[k][3] or 0 local PY10 = tExtraBore[k][4] or 0 local EB10 = tExtraBore[k][5] local RBS10 = tExtraBore[k][6] -- se dimensioni foro serratura idonee if D10 and T10 and EB10 then if D10 > 0 and T10 ~= 0 and EB10 ~= '' then if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) EgtSetName(Lg,sCompoName) end hint_13 = EgtCircle( Lg, Point3d(PX10,PY10,0), D10/2, GDB_RT.LOC) EgtModifyCurveThickness(hint_13, -T10) EgtSetName(hint_13,EB10) EgtSetInfo(hint_13,'SideDoor','Keyway') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo(hint_13,'ReferHw',RBS10) -- setto la nota che indicaa cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_13, 'ProbeSide', '1') end end end end -- Extra rectangles Keyway for k = 1, 5 do local LR10 = tExtraRect[k][1] local WR10 = tExtraRect[k][2] local RR10 = tExtraRect[k][3] local TR10 = tExtraRect[k][4] local PRX10 = tExtraRect[k][5] or 0 local PRY10 = tExtraRect[k][6] or 0 local AR10 = tExtraRect[k][7] local ER10 = tExtraRect[k][8] local RRS10 = tExtraRect[k][9] -- se parametri esistenti e dimensioni rettangolo idonee if LR10 and WR10 and TR10 and ER10 then if LR10 > 0 and WR10 > 0 and TR10 ~= 0 and ER10 ~= '' and (2*RR10) < LR10 and (2*RR10) < WR10 then if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) EgtSetName(Lg,sCompoName) end if AR10 and abs(AR10) >= 360 then while abs(AR10) >= 360 do AR10 = AR10 + EgtIf( AR10 > 0, -360, 360) end end hint_13 = MakeRectWithFillet( Lg, Point3d((PRX10-(LR10/2)),(PRY10-(WR10/2)),0), Point3d((PRX10+(LR10/2)),(PRY10+(WR10/2)),0), RR10, AR10) EgtModifyCurveThickness(hint_13, -TR10) EgtSetName(hint_13,ER10) EgtSetInfo(hint_13,'SideDoor','Keyway') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo(hint_13,'ReferHw',RRS10) -- setto la nota che indicaa cosa è riferita, false: per backset true: per door side -- se rettangolo sborda faccio antischeggia if nDrawMach > 0 and EAR and (( das and das > 0) or ( das2 and das2 > 0)) then -- creo percorso anti-scheggia se rettangolo sborda hint_14, hint_15, hint_10, hint_11 = MakeAspOnStrikeRect( Lg, hint_13, LR10, WR10, TR10, DGD.dT, PRX10, PRY10, RRS10, DGD.BACK_SET, das, nil, nil, das2, SL, 'keyway') if hint_14 then EgtSetName( hint_14, ASG) EgtSetInfo( hint_14, 'NotCheckDir', '1') EgtSetInfo( hint_14, 'SideDoor', 'Keyway') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_14, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_14, 'ProbeSide', '1') end end if hint_15 then EgtSetName( hint_15, ASG) EgtSetInfo( hint_15, 'NotCheckDir', '1') EgtSetInfo( hint_15, 'SideDoor', 'Keyway') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_15, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_15, 'ProbeSide', '1') end end if hint_10 then EgtSetName( hint_10, ASGR) EgtSetInfo( hint_10, 'NotCheckDir', '1') EgtSetInfo( hint_10, 'SideDoor', 'Keyway') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_10, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_10, 'ProbeSide', '1') end end if hint_11 then EgtSetName( hint_11, ASGR) EgtSetInfo( hint_11, 'NotCheckDir', '1') EgtSetInfo( hint_11, 'SideDoor', 'Keyway') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_11, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_11, 'ProbeSide', '1') end end end -- setto nota per correzione profondità con probe -- se mantiene profondità e non è a spessore passante SetProbeProperty( kbs, 1, pbs, 'x', hint_13, true, TR10, DGD.dT) -- setto 'x' perchè non si sa ancora da quale parte viene applicato end end end -- Extra lines Keyway for k = 1, 5 do local LL10 = tExtraLine[k][1] local TL10 = tExtraLine[k][2] local PLX10 = tExtraLine[k][3] or 0 local PLY10 = tExtraLine[k][4] or 0 local AL10 = tExtraLine[k][5] local EL10 = tExtraLine[k][6] local RLS10 = tExtraLine[k][7] -- se parametri esistenti e dimensioni linea idonee if LL10 and TL10 and EL10 then if LL10 > 0 and TL10 ~= 0 and EL10 ~= '' and AL10 < 360 and AL10 > -360 then if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) EgtSetName(Lg,sCompoName) end if AL10 and abs(AL10) >= 360 then while abs(AL10) >= 360 do AL10 = AL10 + EgtIf( AL10 > 0, -360, 360) end end hint_13 = EgtLinePDL( Lg, Point3d( PLX10,PLY10,0), AL10, LL10, GDB_RT.LOC) EgtModifyCurveThickness(hint_13, -TL10) EgtSetName(hint_13,EL10) EgtSetInfo(hint_13,'SideDoor','Keyway') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo(hint_13,'ReferHw',RLS10) -- setto la nota che indicaa cosa è riferita, false: per backset true: per door side -- setto nota per correzione profondità con probe -- se mantiene profondità e non è a spessore passante SetProbeProperty( kbs, 1, pbs, 'x', hint_13, true, TL10, DGD.dT) -- setto 'x' perchè non si sa ancora da quale parte viene applicato end end end -- Extra bores Secure for k = 11, 20 do local D10 = tExtraBore[k][1] local T10 = tExtraBore[k][2] local PX10 = tExtraBore[k][3] or 0 local PY10 = tExtraBore[k][4] or 0 local EB10 = tExtraBore[k][5] local RBS10 = tExtraBore[k][6] -- se dimensioni foro serratura idonee if D10 and T10 and EB10 then if D10 > 0 and T10 ~= 0 and EB10 ~= '' then if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) EgtSetName(Lg,sCompoName) end hint_13 = EgtCircle( Lg, Point3d(PX10,-PY10,0), D10/2 , GDB_RT.LOC) EgtModifyCurveThickness(hint_13, -T10) EgtSetName(hint_13,EB10) EgtSetInfo(hint_13,'SideDoor','Secure') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo(hint_13,'ReferHw',RBS10) -- setto la nota che indicaa cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_13, 'ProbeSide', '1') end end end end -- Extra rectangles Secure for k = 6, 10 do local LR10 = tExtraRect[k][1] local WR10 = tExtraRect[k][2] local RR10 = tExtraRect[k][3] local TR10 = tExtraRect[k][4] local PRX10 = tExtraRect[k][5] or 0 local PRY10 = tExtraRect[k][6] or 0 local AR10 = tExtraRect[k][7] local ER10 = tExtraRect[k][8] local RRS10 = tExtraRect[k][9] -- se dimensioni rettangolo idonee if LR10 and WR10 and TR10 and ER10 then if LR10 > 0 and WR10 > 0 and TR10 ~= 0 and ER10 ~= '' and (2*RR10) < LR10 and (2*RR10) < WR10 then if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) EgtSetName(Lg,sCompoName) end if AR10 and abs(AR10) >= 360 then while abs(AR10) >= 360 do AR10 = AR10 + EgtIf( AR10 > 0, -360, 360) end end hint_13 = MakeRectWithFillet( Lg, Point3d((PRX10-(LR10/2)),(-PRY10-(WR10/2)),0), Point3d((PRX10+(LR10/2)),(-PRY10+(WR10/2)),0), RR10, AR10) EgtModifyCurveThickness(hint_13, -TR10) EgtSetName(hint_13,ER10) EgtSetInfo(hint_13,'SideDoor','Secure') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo(hint_13,'ReferHw',RRS10) -- setto la nota che indicaa cosa è riferita, false: per backset true: per door side -- se rettangolo sborda faccio antischeggia if nDrawMach > 0 and EAR and (( das and das > 0) or ( das2 and das2 > 0)) then -- creo percorso anti-scheggia se rettangolo sborda hint_14, hint_15, hint_10, hint_11 = MakeAspOnStrikeRect( Lg, hint_13, LR10, WR10, TR10, DGD.dT, PRX10, PRY10, RRS10, DGD.BACK_SET, das, true, nil, das2, SL, 'secure') if hint_14 then EgtSetName( hint_14, ASG) EgtSetInfo( hint_14, 'NotCheckDir', '1') EgtSetInfo( hint_14, 'SideDoor', 'Secure') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_14, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_14, 'ProbeSide', '1') end end if hint_15 then EgtSetName( hint_15, ASG) EgtSetInfo( hint_15, 'NotCheckDir', '1') EgtSetInfo( hint_15, 'SideDoor', 'Secure') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_15, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_15, 'ProbeSide', '1') end end if hint_10 then EgtSetName( hint_10, ASGR) EgtSetInfo( hint_10, 'NotCheckDir', '1') EgtSetInfo( hint_10, 'SideDoor', 'Secure') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_10, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_10, 'ProbeSide', '1') end end if hint_11 then EgtSetName( hint_11, ASGR) EgtSetInfo( hint_11, 'NotCheckDir', '1') EgtSetInfo( hint_11, 'SideDoor', 'Secure') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo( hint_11, 'ReferHw', RRS10) -- setto la nota che indica a cosa è riferita, false: per backset true: per door side if pbs and pbs > 1 and DGC.Pms and DGC.Pms > 2 then EgtSetInfo( hint_11, 'ProbeSide', '1') end end end -- setto nota per correzione profondità con probe -- se mantiene profondità e non è a spessore passante SetProbeProperty( kbs, 1, pbs, 'x', hint_13, true, TR10, DGD.dT) -- setto 'x' perchè non si sa ancora da quale parte viene applicato end end end -- Extra lines Secure for k = 6, 10 do local LL10 = tExtraLine[k][1] local TL10 = tExtraLine[k][2] local PLX10 = tExtraLine[k][3] or 0 local PLY10 = tExtraLine[k][4] or 0 local AL10 = tExtraLine[k][5] local EL10 = tExtraLine[k][6] local RLS10 = tExtraLine[k][7] -- se parametri esistenti e dimensioni linea idonee if LL10 and TL10 and EL10 then if LL10 > 0 and TL10 ~= 0 and EL10 ~= '' and AL10 < 360 and AL10 > -360 then if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) EgtSetName(Lg,sCompoName) end if AL10 and abs(AL10) >= 360 then while abs(AL10) >= 360 do AL10 = AL10 + EgtIf( AL10 > 0, -360, 360) end end hint_13 = EgtLinePDL( Lg, Point3d( PLX10,-PLY10,0), AL10, LL10, GDB_RT.LOC) EgtModifyCurveThickness(hint_13, -TL10) EgtSetName(hint_13,EL10) EgtSetInfo(hint_13,'SideDoor','Secure') -- setto una nota per indicare su che lato della porta deve essere spostato EgtSetInfo(hint_13,'ReferHw',RLS10) -- setto la nota che indicaa cosa è riferita, false: per backset true: per door side -- setto nota per correzione profondità con probe -- se mantiene profondità e non è a spessore passante SetProbeProperty( kbs, 1, pbs, 'x', hint_13, true, TL10, DGD.dT) -- setto 'x' perchè non si sa ancora da quale parte viene applicato end end end -- aggiungo foro probe if nDrawMach > 0 and posh and L then local dPosProbe = 0 local sPositiveSuffixProbe = '' local sNegativeSuffixProbe = '' if posp and posp > 0 then dPosProbe = (L/2) + posp if ( SL == 'R' and DGD.Push) or ( SL == 'L' and not DGD.Push) then sPositiveSuffixProbe = '_NEG' sNegativeSuffixProbe = '_POS' else sPositiveSuffixProbe = '_POS' sNegativeSuffixProbe = '_NEG' end end local pCentr = Point3d( dPosProbe, posh, 0) local hintPr = EgtArc( Lg, pCentr, 1, 0, -360, 0, GDB_RT.LOC) -- verifico se devo forzare direzione orizzontale o seguire il profilo local sSideDoorInfo if DGC.Fpd then sSideDoorInfo = 'Lock' else sSideDoorInfo = EgtIf( dl, 'Lock', 'Side') end if hintPr then EgtModifyCurveThickness( hintPr, -10) EgtSetName( hintPr, LH..sPositiveSuffixProbe) EgtSetInfo( hintPr, 'SideDoor', sSideDoorInfo) end if dPosProbe > 0 then pCentr = Point3d( -dPosProbe, posh, 0) hintPr = EgtArc( Lg, pCentr, 1, 0, -360, 0, GDB_RT.LOC) if hintPr then EgtModifyCurveThickness( hintPr, -10) EgtSetName( hintPr, LH..sNegativeSuffixProbe) EgtSetInfo( hintPr, 'SideDoor', sSideDoorInfo) end end end end if EC == 0 and nDrawMach > 0 then -- se abilitata geometria lavorazione if not dws then -- se frame viene disposto sul lato narrow o è sulla porta(disposto sul lato stretto) -- se la sezione strike supera 1/6 dello spessore porta (se è un frame drf vale 0.1 e crea sempre regione) -- disegno sezione ribasso su faccia superiore/inferiore porta if fhb > drf then -- setto griglia dietro per l'ingombro sicuramente esistente EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.BACK)) local nIdSideBoxUp local nIdSideBoxUp2 if LS > 0 then nIdSideBoxUp = EgtRectangle2P( Lg, Point3d(-(L/2)+D_SS,0,((H/2)+HS)), Point3d(-(L/2)+D_SS+LS,-fhb,((H/2)+HS)), GDB_RT.GRID) if IS > 0 then nIdSideBoxUp2 = EgtRectangle2P( Lg, Point3d(-(L/2)+D_SS+IS,0,((H/2)+HS)), Point3d(-(L/2)+D_SS+IS+LS,-fhb,((H/2)+HS)), GDB_RT.GRID) end end if nIdSideBoxUp then EgtModifyCurveThickness(nIdSideBoxUp, -(HS+H)) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if nIdSideBoxUp2 then EgtModifyCurveThickness(nIdSideBoxUp2, -(HS+H)) EgtSetName( nIdSideBoxUp2, 'upper') EgtSetInfo( nIdSideBoxUp2, 'SideDoor', 'upper') end EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP)) end --debug -- EgtSaveFile() -- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG()) else -- altrimenti frame viene disposto sul lato wide local nIdSideBoxUp if nGeom1st then nIdSideBoxUp = EgtCopyGlob( nGeom1st, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if nGeom2st then nIdSideBoxUp = EgtCopyGlob( nGeom2st, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if nGeom1 then nIdSideBoxUp = EgtCopyGlob( nGeom1, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if nGeom2 then nIdSideBoxUp = EgtCopyGlob( nGeom2, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if nGeom3 then nIdSideBoxUp = EgtCopyGlob( nGeom3, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if nGeom4 then nIdSideBoxUp = EgtCopyGlob( nGeom4, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_1 then nIdSideBoxUp = EgtCopyGlob( hint_1, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_2 then nIdSideBoxUp = EgtCopyGlob( hint_2, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_3 then nIdSideBoxUp = EgtCopyGlob( hint_3, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_4 then nIdSideBoxUp = EgtCopyGlob( hint_4, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_5 then nIdSideBoxUp = EgtCopyGlob( hint_5, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_6 then nIdSideBoxUp = EgtCopyGlob( hint_6, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_7 then nIdSideBoxUp = EgtCopyGlob( hint_7, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end if hint_8 then nIdSideBoxUp = EgtCopyGlob( hint_8, Lg) EgtSetName( nIdSideBoxUp, 'upper') EgtSetInfo( nIdSideBoxUp, 'SideDoor', 'upper') end end end if EC == 0 and D_XE and D_XE ~= 0 then EgtMove( Lg, Point3d(0,D_XE,0) - ORIG()) end -- Se non Preview if not bPreview and EC == 0 then if bRunByCompo then -- scrivo i parametri nelle info del pezzo WriteCompoDataToPart(Pz,sCompoName,nCompoNpar) end -- scrivo note nel layer della cerniera EgtSetInfo( Lg, 'Type' ,'Strike') EgtSetInfo( Lg, 'Nome' ,sCompoName) EgtSetInfo( Lg, 'L' ,L) EgtSetInfo( Lg, 'H' ,H) EgtSetInfo( Lg, 'T' ,T) EgtSetInfo( Lg, 'LS' ,LS) EgtSetInfo( Lg, 'HS' ,HS) EgtSetInfo( Lg, 'AS' ,AS) EgtSetInfo( Lg, 'IS' ,IS) EgtSetInfo( Lg, 'D_SS' ,D_SS) EgtSetInfo( Lg, 'rs' ,rs) EgtSetInfo( Lg, 'ls' ,ls) EgtSetInfo( Lg, 'cl' ,cl) EgtSetInfo( Lg, 'rf' ,rf) EgtSetInfo( Lg, 'd' ,d) EgtSetInfo( Lg, 'p' ,p) EgtSetInfo( Lg, 'sf' ,sf) EgtSetInfo( Lg, 'dl' ,dl) EgtSetInfo( Lg, 'da' ,da) EgtSetInfo( Lg, 'ech' ,ech) EgtSetInfo( Lg, 'clc' ,clc) EgtSetInfo( Lg, 'ccr' ,ccr) EgtSetInfo( Lg, 'mh' ,mh) EgtSetInfo( Lg, 'L2' ,L2) EgtSetInfo( Lg, 'H2' ,H2) EgtSetInfo( Lg, 'T2' ,T2) EgtSetInfo( Lg, 'I2' ,I2) EgtSetInfo( Lg, 'HB2' ,HB2) EgtSetInfo( Lg, 'TB2' ,TB2) EgtSetInfo( Lg, 'd2' ,d2) EgtSetInfo( Lg, 'p2' ,p2) EgtSetInfo( Lg, 's' ,s) EgtSetInfo( Lg, 'FBD' ,FBD) EgtSetInfo( Lg, 'FBP' ,FBP) EgtSetInfo( Lg, 'AB' ,AB) EgtSetInfo( Lg, 'L3' ,L3) EgtSetInfo( Lg, 'H3' ,H3) EgtSetInfo( Lg, 'T3' ,T3) EgtSetInfo( Lg, 'I3' ,I3) EgtSetInfo( Lg, 'd3' ,d3) EgtSetInfo( Lg, 'p3' ,p3) EgtSetInfo( Lg, 's3' ,s3) EgtSetInfo( Lg, 'est' ,est) EgtSetInfo( Lg, 'kbs' ,kbs) EgtSetInfo( Lg, 'pbs' ,pbs) EgtSetInfo( Lg, 'invG' ,invG) EgtSetInfo( Lg, 'posh' ,posh) EgtSetInfo( Lg, 'posp' ,posp) EgtSetInfo( Lg, 'mkrev' ,mkrev) EgtSetInfo( Lg, 'jn' ,jn) EgtSetInfo( Lg, 'jn2' ,jn2) EgtSetInfo( Lg, 'jnb' ,jnb) EgtSetInfo( Lg, 'fht' ,fht) EgtSetInfo( Lg, 'fhb' ,fhb) EgtSetInfo( Lg, 'drf' ,drf) EgtSetInfo( Lg, 'dws' ,dws) EgtSetInfo( Lg, 'dthd' ,dthd) EgtSetInfo( Lg, 'SL' ,SL) EgtSetInfo( Lg, 'D_X' ,D_X) EgtSetInfo( Lg, 'D_X3' ,D_X3) EgtSetInfo( Lg, 'DH_X' ,DH_X) EgtSetInfo( Lg, 'D_XE' ,D_XE) EgtSetInfo( Lg, 'CustGeomFile' ,CustGeomFile) EgtSetInfo( Lg, 'CustGeomPath' ,CustGeomPath) EgtSetInfo( Lg, 'LG' ,LG) EgtSetInfo( Lg, 'LG2' ,LG2) EgtSetInfo( Lg, 'LG3' ,LG3) EgtSetInfo( Lg, 'LM' ,LM) EgtSetInfo( Lg, 'LA' ,LA) EgtSetInfo( Lg, 'LA2' ,LA2) EgtSetInfo( Lg, 'LA3' ,LA3) EgtSetInfo( Lg, 'CH' ,CH) EgtSetInfo( Lg, 'CLC' ,CLC) EgtSetInfo( Lg, 'LGH' ,LGH) EgtSetInfo( Lg, 'LMP' ,LMP) EgtSetInfo( Lg, 'EAR' ,EAR) EgtSetInfo( Lg, 'das' ,das) EgtSetInfo( Lg, 'ASG' ,ASG) EgtSetInfo( Lg, 'das2' ,das2) EgtSetInfo( Lg, 'ASGR' ,ASGR) EgtSetInfo( Lg, 'Path' ,sCompoPath) end if EC == 0 and nCodAdj and nCodAdj < 0 then EC = nCodAdj EM = sCodAdj end return EC, EM, Lg end return Strike