diff --git a/BatchProcess.lua b/BatchProcess.lua index 9948bb7..f666518 100644 --- a/BatchProcess.lua +++ b/BatchProcess.lua @@ -1,4 +1,4 @@ --- BatchProcess.lua by Egaltech s.r.l. 2022/04/28 +-- BatchProcess.lua by Egaltech s.r.l. 2022/05/10 -- Gestione calcolo batch disposizione e lavorazioni per Travi -- 2019/07/11 Aggiunta gestione stato rotazione di feature per TS3. -- 2019/07/16 Aggiunta gestione modalità oltre 10 per impostazione macchina e uscita. @@ -24,6 +24,7 @@ -- 2021/08/04 Direzione vista simulazione da BD.SIMUL_VIEW_DIR se esiste. -- 2022/04/28 In info generazione aggiunta indicazione se 64bit. -- 2023/05/03 Tolleranza su sezione portata a 0.1 mm (100 * GEO.EPS_SMALL). +-- 2022/05/10 Dopo aver fatto rotazioni e inversioni dei pezzi cambio chiave Info relative. -- Intestazioni require( 'EgtBase') @@ -267,22 +268,26 @@ if bToProcess then vBeam[i].PosX = PosX end - -- Eseguo eventuali rotazioni e inversioni testa-coda + -- Se non già eseguite, applico eventuali rotazioni e inversioni testa-coda for i = 1, #vBeam do local b3Solid = vBeam[i].Box -- rotazione - local dRotAng = EgtGetInfo( vBeam[i].Id, 'ROTATED', 'd') - if dRotAng and abs( dRotAng) > GEO.EPS_ANG_SMALL then + local dRotAng = EgtGetInfo( vBeam[i].Id, 'ROTATED', 'd') or 0 + if abs( dRotAng) > GEO.EPS_ANG_SMALL then local ptRotCen = b3Solid:getCenter() EgtRotate( vBeam[i].Id, ptRotCen, X_AX(), dRotAng, GDB_RT.GLOB) b3Solid:rotate( ptRotCen, X_AX(), dRotAng) end + EgtRemoveInfo( vBeam[i].Id, 'ROTATED') + EgtSetInfo( vBeam[i].Id, 'ROTATED_OK', dRotAng) -- inversione local dInvAng = 180 - ( EgtGetInfo( vBeam[i].Id, 'INVERTED', 'd') or 0) if abs( dInvAng) > GEO.EPS_ANG_SMALL then local ptInvCen = b3Solid:getCenter() EgtRotate( vBeam[i].Id, ptInvCen, Z_AX(), dInvAng, GDB_RT.GLOB) end + EgtRemoveInfo( vBeam[i].Id, 'INVERTED') + EgtSetInfo( vBeam[i].Id, 'INVERTED_OK', 180 - dInvAng) end -- Ne verifico le dimensioni diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index c741973..728fdd3 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -1395,16 +1395,14 @@ end ------------------------------------------------------------------------------------------------------------- -- Controlla se la feature ProcMirror è la specchiata di Proc, per feature di tipo tasca o simile local function CheckMirrorPocket( Proc, ProcMirror, b3Raw, AuxId) - + -- recupero i dati geometrici della curva Proc local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB) local ptBC = EgtGP( AuxId, GDB_RT.GLOB) local rfDtMrt = EgtSurfTmFacetMinAreaRectangle( Proc.Id, 0, GDB_RT.GLOB) local b3DtMrt = EgtGetBBoxRef( Proc.Id, GDB_BB.STANDARD, rfDtMrt) local b3Proc = EgtGetBBoxGlob( Proc.Id, GDB_BB.STANDARD) - -- determino l'asse della curva Proc - local vtAx = EgtEV( AuxId, GDB_RT.GLOB) - EgtSV( AuxId, GDB_RT.GLOB) - + -- recupero e verifico l'entità curva ProcMirror local AuxIdMirror = EgtGetInfo( ProcMirror.Id, 'AUXID', 'i') if AuxIdMirror then AuxIdMirror = AuxIdMirror + ProcMirror.Id end @@ -1420,35 +1418,49 @@ local function CheckMirrorPocket( Proc, ProcMirror, b3Raw, AuxId) local ptBCMirror = EgtGP( AuxIdMirror, GDB_RT.GLOB) local b3DtMrtMirror = EgtGetBBoxRef( ProcMirror.Id, GDB_BB.STANDARD, rfDtMrt) local b3ProcMirror = EgtGetBBoxGlob( ProcMirror.Id, GDB_BB.STANDARD) - -- determino l'asse della curva ProcMirror - local vtAxMirror = EgtEV( AuxIdMirror, GDB_RT.GLOB) - EgtSV( AuxIdMirror, GDB_RT.GLOB) - - -- verifico se le mortase sono specchiate - local bIsMirror = true + + -- verifico se le mortase sono specchiate : + -- devono avere estrusioni opposte + if not AreOppositeVectorApprox( vtExtr, vtExtrMirror) then + return false + end + -- se di tipo Dt, devono avere l'asse allineato + if DtMortise.SideIdentify( Proc) or DtMortise.SideIdentify( ProcMirror) then + local vtAx = EgtEV( AuxId, GDB_RT.GLOB) - EgtSV( AuxId, GDB_RT.GLOB) + local vtAxMirror = EgtEV( AuxIdMirror, GDB_RT.GLOB) - EgtSV( AuxIdMirror, GDB_RT.GLOB) + if not AreSameVectorApprox( vtAx, vtAxMirror) then + return false + end + end + -- devono avere il centro allineato, essere equidistanti dalla mezzaria trave e non essere troppo vicine local vtDisplacement = ptBC - ptBCMirror local ptCenRaw = b3Raw:getCenter() - local dYMinDistance = EgtIf( ptBC:getY() > ptBCMirror:getY(), abs( b3ProcMirror:getMax():getY() - b3Proc:getMin():getY()), abs( b3Proc:getMax():getY() - b3ProcMirror:getMin():getY())) - local dZMinDistance = EgtIf( ptBC:getZ() > ptBCMirror:getZ(), abs( b3ProcMirror:getMax():getZ() - b3Proc:getMin():getZ()), abs( b3Proc:getMax():getZ() - b3ProcMirror:getMin():getZ())) local dMinimumDistanceMirroredFeatures = 50 - -- controllo che il centro delle due mortase sia allineato, che queste siano equidistanti dalla mezzeria della trave - -- e che queste non siano troppo vicine if AreSameOrOppositeVectorApprox( vtExtr, Y_AX()) then - bIsMirror = abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getZ()) < 500 * GEO.EPS_SMALL and - ( abs( ptBC:getY() - ptCenRaw:getY()) - abs( ptBCMirror:getY() - ptCenRaw:getY())) < 500 * GEO.EPS_SMALL and - dYMinDistance - dMinimumDistanceMirroredFeatures > 10 * GEO.EPS_SMALL + local dYMinDistance = max( b3Proc:getMin():getY(), b3ProcMirror:getMin():getY()) - min( b3Proc:getMax():getY(), b3ProcMirror:getMax():getY()) + if not ( abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getZ()) < 500 * GEO.EPS_SMALL and + ( abs( ptBC:getY() - ptCenRaw:getY()) - abs( ptBCMirror:getY() - ptCenRaw:getY())) < 500 * GEO.EPS_SMALL and + dYMinDistance > dMinimumDistanceMirroredFeatures + 10 * GEO.EPS_SMALL) then + return false + end elseif AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then - bIsMirror = abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getY()) < 500 * GEO.EPS_SMALL and - ( abs( ptBC:getZ() - ptCenRaw:getZ()) - abs( ptBCMirror:getZ() - ptCenRaw:getZ())) < 500 * GEO.EPS_SMALL and - dZMinDistance - dMinimumDistanceMirroredFeatures > 10 * GEO.EPS_SMALL + local dZMinDistance = max( b3Proc:getMin():getZ(), b3ProcMirror:getMin():getZ()) - min( b3Proc:getMax():getZ(), b3ProcMirror:getMax():getZ()) + if not ( abs( vtDisplacement:getX()) < 500 * GEO.EPS_SMALL and abs( vtDisplacement:getY()) < 500 * GEO.EPS_SMALL and + ( abs( ptBC:getZ() - ptCenRaw:getZ()) - abs( ptBCMirror:getZ() - ptCenRaw:getZ())) < 500 * GEO.EPS_SMALL and + dZMinDistance > dMinimumDistanceMirroredFeatures + 10 * GEO.EPS_SMALL) then + return false + end + else + return false + end + -- devono avere box con le stesse dimensioni + if not ( abs( b3DtMrt:getDimX() - b3DtMrtMirror:getDimX()) < 500 * GEO.EPS_SMALL and + abs( b3DtMrt:getDimY() - b3DtMrtMirror:getDimY()) < 500 * GEO.EPS_SMALL and + abs( b3DtMrt:getDimZ() - b3DtMrtMirror:getDimZ()) < 500 * GEO.EPS_SMALL) then + return false end - -- controllo che le dimensioni dei due box siano le stesse - bIsMirror = bIsMirror and abs( b3DtMrt:getDimX() - b3DtMrtMirror:getDimX()) < 500 * GEO.EPS_SMALL and - abs( b3DtMrt:getDimY() - b3DtMrtMirror:getDimY()) < 500 * GEO.EPS_SMALL and - abs( b3DtMrt:getDimZ() - b3DtMrtMirror:getDimZ()) < 500 * GEO.EPS_SMALL - -- controllo che l'asse delle due mortase sia allineato - bIsMirror = bIsMirror and AreSameVectorApprox( vtAx, vtAxMirror) - return bIsMirror + return true end ------------------------------------------------------------------------------------------------------------- diff --git a/LuaLibs/ProcessMortise.lua b/LuaLibs/ProcessMortise.lua index 5309722..584561e 100644 --- a/LuaLibs/ProcessMortise.lua +++ b/LuaLibs/ProcessMortise.lua @@ -506,6 +506,7 @@ function ProcessMortise.Make( Proc, nPhase, nRawId, nPartId, dCurrOvmH) -- se lavorazione in doppio if Proc.Double and Proc.Double > 0 then sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double) + --sUserNotes = EgtSetValInNotes( sUserNotes, 'StartZmax', 2) end EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes) -- eseguo diff --git a/LuaLibs/ProcessSplit.lua b/LuaLibs/ProcessSplit.lua index b7527f1..8b7432c 100644 --- a/LuaLibs/ProcessSplit.lua +++ b/LuaLibs/ProcessSplit.lua @@ -1,4 +1,4 @@ --- ProcessSplit.lua by Egaltech s.r.l. 2023/04/04 +-- ProcessSplit.lua by Egaltech s.r.l. 2023/05/09 -- Gestione calcolo tagli di separazione per Travi -- 2022/05/31 Aggiunta gestione sezioni alte e larghe con taglio con sega a catena seguito da rifinitura con lama (aggiunta funzione MakeSplitByChainSaw); gestione eventuale creazione nuova fase dall'interno della Make. -- 2022/06/10 Per sezioni alte e larghe aggiunta gestione finitura in base a sovramateriale e a parametro Q05 dell' eventuale lavorazione sostituita. @@ -9,7 +9,8 @@ -- 2022/11/16 Correzioni per travi larghe -- 2022/11/30 Correzione per tagli su grandi sezioni (dopo taglio con sega a catena senza finitura aggiungeva uno split con lama). -- 2023/04/04 Modifiche per travi con sezioni molto grandi e materiale inferiore allo spessore lama. --- 2023/04/20 Per travi alte aggiunti tagli orizzontali per ridurre le dimensioni degli scarti +-- 2023/04/20 Per travi alte aggiunti tagli orizzontali per ridurre le dimensioni degli scarti. +-- 2023/05/09 Aggiunta richiesta risalita preliminare a Zmax per tagli da sopra su macchine PF e ONE. -- Tabella per definizione modulo local ProcessSplit = {} @@ -526,6 +527,10 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt else sNotes = EgtIf( i == 1, 'Cut;', 'Precut;') end + -- se primo taglio da sopra e PF o ONE richiedo risalita preliminare a Zmax + if i == nCuts and bHorizCut and BD.C_SIMM and not BD.DOWN_HEAD then + sNotes = EgtSetValInNotes( sNotes, 'StartZmax', 2) + end local bOk, sErr = Fbs.MakeOne( Proc.Id, 0, sCutting, dSawDiam, nOrthoOpposite, nil, dCutExtra, BD.CUT_SIC, dCutOffset, dAccStart, dAccEnd, sNotes, b3Raw) if not bOk then return false, sErr end end diff --git a/Version.lua b/Version.lua index 29ad806..4a6c7cd 100644 --- a/Version.lua +++ b/Version.lua @@ -1,6 +1,6 @@ --- Version.lua by Egaltech s.r.l. 2023/04/05 +-- Version.lua by Egaltech s.r.l. 2023/05/11 -- Gestione della versione di Beam NAME = 'Beam' -VERSION = '2.5e2' +VERSION = '2.5e3' MIN_EXE = '2.5c1'