From 5b0a274f00fdfb126c5fca8d01bfe97ad9ba4958 Mon Sep 17 00:00:00 2001 From: DarioS Date: Mon, 17 Apr 2023 09:38:38 +0200 Subject: [PATCH] DataWall 2.5d2 : - in gestione batch TS3v7 aggiunta gestione flag per taglio feature con outline (da parametro macchina WD.CUT_WITH_OUTLINE) - in FreeContour e assimilati aggiunta pulitura spigoli Q05=1 anche su sole fresature - in LapJoint e assimilati corretta scelta tipo lavorazione 'SideGroove' aggiungendo massimo spessore - in LapJoint con lavorazione di lato se MCH_SCC.ADIR_NEAR fa fallire Apply si riprova con MCH_SCC.ADIR_FAR. --- BatchProcess.lua | 7 +++-- LuaLibs/WProcessFreeContour.lua | 54 +++++++++++++++++++++++++-------- LuaLibs/WProcessLapJoint.lua | 24 ++++++++------- Version.lua | 4 +-- 4 files changed, 61 insertions(+), 28 deletions(-) diff --git a/BatchProcess.lua b/BatchProcess.lua index 43594eb..b7a0bfe 100644 --- a/BatchProcess.lua +++ b/BatchProcess.lua @@ -1,4 +1,4 @@ --- BatchProcess.lua by Egaltech s.r.l. 2022/05/09 +-- BatchProcess.lua by Egaltech s.r.l. 2023/04/09 -- Gestione calcolo batch disposizione e lavorazioni per Pareti -- 2020/07/24 Nuvola di punti riferita allo Zero Tavola. -- 2020/10/28 Corretto spostamento pezzi per rotazioni (0 o 180) e inversioni( 0, 90, 180, o 270). @@ -12,6 +12,7 @@ -- 2022/02/24 Se ricalcolo si aggiorna il setup. In ogni caso si verifica prima di simulazione. -- 2022/04/28 In info generazione aggiunta indicazione se 64bit. -- 2022/05/02 Consentito allargamento area disponibile per grezzi su tavola da WallData. +-- 2023/04/09 Aggiunta gestione flag per taglio feature con outline (da WD.CUT_WITH_OUTLINE). -- Intestazioni require( 'EgtBase') @@ -179,9 +180,11 @@ if bToProcess then if bBtl then -- cancello eventuale vecchio progetto omonimo EgtEraseFile( sNgeFile) + -- flag di importazione + local nFlag = EIB_FL.TS3_POS + EIB_FL.USEUATTR + EgtIf( WD.CUT_WITH_OUTLINE, EIB_FL.TRIM_WITH_OUTLINE or 128, EIB_FL.NONE) -- eseguo import EgtNewFile() - if not EgtImportBtl( WALL.FILE, EIB_FL.TS3_POS + EIB_FL.USEUATTR) then + if not EgtImportBtl( WALL.FILE, nFlag) then WALL.ERR = 13 WALL.MSG = 'Error importing BTL file : ' .. WALL.FILE WriteErrToLogFile( WALL.ERR, WALL.MSG) diff --git a/LuaLibs/WProcessFreeContour.lua b/LuaLibs/WProcessFreeContour.lua index 6187078..f57cec3 100644 --- a/LuaLibs/WProcessFreeContour.lua +++ b/LuaLibs/WProcessFreeContour.lua @@ -1,4 +1,4 @@ --- ProcessFreeContour.lua by Egaltech s.r.l. 2023/03/08 +-- ProcessFreeContour.lua by Egaltech s.r.l. 2023/04/14 -- Gestione calcolo profilo libero per Pareti -- 2021/11/15 Penna e chiodature sono sempre riportate sulla faccia sopra anche se nel progetto sono sotto. -- 2021/12/10 In taglio con lama aggiunta gestione SCC per testa Gearbox. @@ -16,6 +16,7 @@ -- 2022/12/14 Aggiunto l'accorciamento della lama in caso di facce vicine orientate verso il basso -- 2023/02/28 In lavorazioni con sega a catena per invertire lato mandrino ora Invert + Left invece di MCH_SCC.OPPOSITE. -- 2023/03/08 In lavorazione con fresa, se imposto Tool_ID non si controlla più possa lavorare di testa. +-- 2023/04/14 Aggiunta pulitura spigoli Q05=1 anche su sole fresature. -- Tabella per definizione modulo local WPF = {} @@ -2013,8 +2014,7 @@ local function MakeByCut( Proc, nRawId, b3Raw) if ( nConeCut == 1 and nMlOk == 1 and dThick <= ( WD.MAX_CLEAN_CRN60 + 20 * GEO.EPS_SMALL)) or ( nConeCut == 2 and dThick <= ( WD.MAX_CLEAN_CRN30 + 20 * GEO.EPS_SMALL)) then local bMcok, sMcErr = AddMillCorner( nConeCut, vFace, Proc, nRawId, b3Raw, - sMlErr, nAddGrpId, dThick, nNewProc, 0, - true) + sMlErr, nAddGrpId, dThick, nNewProc, 0, true) if not bMcok then return bMcok, sMcErr end else -- messaggi nel log @@ -2044,8 +2044,7 @@ local function MakeByCut( Proc, nRawId, b3Raw) -- se abilitata la lavorazione corner con stop macchina e lavorazione precedente passante e spessore sotto il limite if nConeCut == 1 and nCsOk == 1 and dThick <= ( WD.MAX_CLEAN_CRN60 + 20 * GEO.EPS_SMALL) then local bMcok, sMcErr = AddMillCorner( nConeCut, vFace, Proc, nRawId, b3Raw, - sCSErr, nAddGrpId, nil, nNewProc, 0, - true) + sCSErr, nAddGrpId, nil, nNewProc, 0, true) if not bMcok then return bMcok, sMcErr end else if nConeCut == 1 then @@ -2075,8 +2074,7 @@ local function MakeByCut( Proc, nRawId, b3Raw) if ( nConeCut == 1 and nMlOk == 1 and dThick <= ( WD.MAX_CLEAN_CRN60 + 20 * GEO.EPS_SMALL)) or ( nConeCut == 2 and dThick <= ( WD.MAX_CLEAN_CRN30 + 20 * GEO.EPS_SMALL)) then local bMcok, sMcErr = AddMillCorner( nConeCut, vFace, Proc, nRawId, b3Raw, - sMlErr, nAddGrpId, dThick, nNewProc, 0, - true) + sMlErr, nAddGrpId, dThick, nNewProc, 0, true) if not bMcok then return bMcok, sMcErr end else -- messaggi nel log @@ -2125,6 +2123,8 @@ local function MakeByMill( Proc, nRawId, b3Raw) local b3Aux = EgtGetBBoxGlob( AuxId, GDB_BB.STANDARD) local bToolInv = ( vtExtr:getZ() < -0.1) local nTool_ID = EgtGetInfo( Proc.Id, 'CNT_DATA', 'i') + -- lettura parametri (probabile/i parametro/i Q) + local nConeCut = VerifyCornerType( Proc) -- recupero la lavorazione local bTipFeed = EgtIf( nTool_ID, false, true) local sMilling = WM.FindMilling( 'FreeContour', nil, nil, nTool_ID, nil, nil, bTipFeed) @@ -2135,23 +2135,23 @@ local function MakeByMill( Proc, nRawId, b3Raw) return false, sErr end -- recupero i dati dell'utensile + local dMillDiam = 20 local dMaxDepth = 0 if EgtMdbSetCurrMachining( sMilling) then local sTuuid = EgtMdbGetCurrMachiningParam( MCH_MP.TUUID) if EgtTdbSetCurrTool( EgtTdbGetToolFromUUID( sTuuid) or '') then + dMillDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM) or dMillDiam dMaxDepth = EgtIf( WD.MILL_MAX_DEPTH_AS_MAT, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), EgtTdbGetCurrToolMaxDepth()) or dMaxDepth end end - -- eventuale spezzatura sul tratto più lungo se curva chiusa - --BL.PutStartOnLonger( AuxId) -- verifiche per affondamento if b3Aux:getDimZ() > b3Raw:getDimZ() - 1.0 then - dDepth = min( dDepth, b3Raw:getDimZ()) + WD.CUT_EXTRA + dDepth = min( dDepth, b3Raw:getDimZ()) end - if dDepth > dMaxDepth then - -- lo limito e tolgo eventuali Tabs + dDepth = dDepth + WD.CUT_EXTRA + local bReducedDepth = ( dDepth > dMaxDepth) + if bReducedDepth then dDepth = dMaxDepth - EgtSetMachiningParam( MCH_MP.LEAVETAB, false) end -- inserisco la lavorazione local sName = 'Free_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) @@ -2170,6 +2170,8 @@ local function MakeByMill( Proc, nRawId, b3Raw) if bToolInv then EgtSetMachiningParam( MCH_MP.TOOLINVERT, true) end + -- tolgo i Tabs se non passante o devo rimuovere lo sfrido + if bReducedDepth or nConeCut == 1 then EgtSetMachiningParam( MCH_MP.LEAVETAB, false) end -- assegno affondamento EgtSetMachiningParam( MCH_MP.DEPTH, dDepth) -- assegno lato di lavoro @@ -2192,6 +2194,32 @@ local function MakeByMill( Proc, nRawId, b3Raw) EgtSetOperationMode( nMchId, false) return false, sErr end + -- se abilitata la lavorazione corner con stop macchina, ci sono almeno due facce e fresata passante per consentire eliminazione sfrido + if nConeCut == 1 and Proc.Fct >= 2 and not bReducedDepth then + -- gruppo ausiliario + local nAddGrpId = WL.GetAddGroup( Proc.PartId) + -- recupero i dati di tutte le facce + local vFace, dMaxWidth, nNewProc = GetFacesData( Proc, bOpposite, false, dMillDiam, dMaxDepth, (dMillDiam/2), nAddGrpId, b3Raw) + -- se affondamento non superiore al limite + if dDepth <= ( WD.MAX_CLEAN_CRN60 + 20 * GEO.EPS_SMALL) then + local bMcok, sMcErr = AddMillCorner( nConeCut, vFace, Proc, nRawId, b3Raw, + dMillDiam, nAddGrpId, nil, nNewProc, 0, true) + if not bMcok then return bMcok, sMcErr end + else + EgtErase( nNewProc) + if nConeCut == 1 then + local sErr = 'Clean corner 60° not applid because thickness: ' .. EgtNumToString( dThick, 2) .. + ' is bigger than parameter MAX_CLEAN_CRN60: ' .. EgtNumToString( WD.MAX_CLEAN_CRN60 , 2) + EgtOutLog( sErr) + end + end + elseif nConeCut == 2 then + local sErr = 'Clean corner 30° is not applied on milling' + EgtOutLog( sErr) + elseif nConeCut == 3 then + local sErr = 'Clean corner with undercut is not applied on milling' + EgtOutLog( sErr) + end return true end diff --git a/LuaLibs/WProcessLapJoint.lua b/LuaLibs/WProcessLapJoint.lua index 5a96379..3f3ece2 100644 --- a/LuaLibs/WProcessLapJoint.lua +++ b/LuaLibs/WProcessLapJoint.lua @@ -1,4 +1,4 @@ --- WProcessLapJoint.lua by Egaltech s.r.l. 2022/12/22 +-- WProcessLapJoint.lua by Egaltech s.r.l. 2023/04/15 -- Gestione calcolo mezzo-legno per Pareti -- 2021/08/27 DS Se tre o più facce con flag PCKT=1 forzo svuotatura con fresa (per Variant). -- 2021/08/29 DS Se svuotatura di fianco setto flag per farla dopo i tagli. @@ -14,9 +14,10 @@ -- 2022/11/15 DS Con lama massima inclinazione 60deg. -- 2022/12/01 Per 2 facce con angolo > 90° implementata lavorazione principale verticale. Se da sopra, aggiunta ripresa del lato inclinato. -- 2022/12/14 Nel caso di 2 facce piccola correzione al modo di ordinare le facce. --- 2023/03/09 Gestito caso riconoscimento errato Stype 3 --- 2023/03/09 In MakeMoreFaces aggiunta la possibilità di lavorare le fessure con la lama +-- 2023/03/09 Gestito caso riconoscimento errato Stype 3. +-- 2023/03/09 In MakeMoreFaces aggiunta la possibilità di lavorare le fessure con la lama. -- 2023/03/17 In MakeByMill gestito correttamente il caso di Workside destro. +-- 2023/04/15 Corretta scelta tipo lavorazione 'SideGroove' aggiungendo massimo spessore. -- Tabella per definizione modulo local WPL = {} @@ -1431,7 +1432,7 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d sMilling = sCustomMach -- altrimenti la cerco else - sMilling = WM.FindMilling( 'SideGroove') + sMilling = WM.FindMilling( 'SideGroove', nil, nil, nil, nil, min( dH, dV)) end if not sMilling then local sErr = 'Error : SideGroove not found in library' @@ -1859,10 +1860,6 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d -- aggiungo geometria EgtSetMachiningGeometry( {{ Proc.Id, nFacet}}) -- imposto posizione braccio porta testa - --local nSCC = MCH_SCC.ADIR_ZP - --if abs( vtN:getZ()) < GEO.EPS_SMALL then - -- nSCC = EgtIf( Proc.Box:getDimX() >= Proc.Box:getDimY(), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_XP) - --end local nSCC = MCH_SCC.ADIR_NEAR EgtSetMachiningParam( MCH_MP.SCC, nSCC) -- imposto modo di lavorare la faccia @@ -1955,9 +1952,14 @@ local function MakeSideGrooveByMill( Proc, nFacet, nRawId, b3Raw, sCustomMach, d end -- eseguo if not EgtApplyMachining( true, false) then - local _, sErr = EgtGetLastMachMgrError() - EgtSetOperationMode( nMchFId, false) - return false, sErr + -- provo a invertire posizione braccio porta testa + nSCC = MCH_SCC.ADIR_FAR + EgtSetMachiningParam( MCH_MP.SCC, nSCC) + if not EgtApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMchFId, false) + return false, sErr + end end else sWarn = 'Warning in LapJoint : upside down groove with obtuse angle not completed' diff --git a/Version.lua b/Version.lua index ca7ea10..9d28bff 100644 --- a/Version.lua +++ b/Version.lua @@ -1,6 +1,6 @@ --- Version.lua by Egalware s.r.l. 2023/03/27 +-- Version.lua by Egalware s.r.l. 2023/04/14 -- Gestione della versione di Wall NAME = 'Wall' -VERSION = '2.5d1' +VERSION = '2.5d2' MIN_EXE = '2.5b3'