diff --git a/CAMAuto/LuaLibs/WinExec.lua b/CAMAuto/LuaLibs/WinExec.lua index 5c7bb2f..e07a6e0 100644 --- a/CAMAuto/LuaLibs/WinExec.lua +++ b/CAMAuto/LuaLibs/WinExec.lua @@ -399,7 +399,7 @@ local function OrderMachining( MACHININGS) table.sort( vProcToSort, CompareFeatures) -- ordino per ottimizzare cambio utensile - MACHININGS = SortByChangeToolOpt( MACHININGS) + -- MACHININGS = SortByChangeToolOpt( MACHININGS) return true end @@ -451,8 +451,8 @@ end ------------------------------------------------------------------------------------------------------------- local function UpdateRawPosition( PARTS) for i = 1, #PARTS do - PARTS[i].b3FinishedPart = EgtGetBBoxGlob( PARTS[i].id or GDB_ID.NULL, GDB_BB.STANDARD) - PARTS[i].b3RawPart = EgtGetBBoxGlob( PARTS[i].idRaw or GDB_ID.NULL, GDB_BB.STANDARD) + PARTS[i].b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo') or GDB_ID.NULL, GDB_BB.STANDARD) + PARTS[i].b3RawPart = EgtGetRawPartBBox( PARTS[i].idRaw) end end @@ -501,7 +501,7 @@ function WinExec.ProcessFeatures( PARTS) local bIsApplyOk, sErr, b3MachEncumbrance = MachiningLib.AddOperation( MACHININGS[i]) -- TODO ingombro lavorazione mi restituisce dati sbagliati. C'è un riferimento? -- se feature di testa, sposto testa in base a ingombro lavorazione if MACHININGS[i].Proc.bHeadProfile and b3MachEncumbrance then - PARTS[MACHININGS[i].Proc.nIndexPart].DispOffsets.Phase1.dOffsetX = b3MachEncumbrance:getMax():getX() - PARTS[MACHININGS[i].Proc.nIndexPart].b3FinishedPart:getMin():getX() + 5 + PARTS[MACHININGS[i].Proc.nIndexPart].DispOffsets.Phase1.dOffsetX = b3MachEncumbrance:getMax():getX() - PARTS[MACHININGS[i].Proc.nIndexPart].b3Part:getMin():getX() + 5 end end end @@ -527,7 +527,7 @@ function WinExec.ProcessFeatures( PARTS) local bIsApplyOk, sErr, b3MachEncumbrance = MachiningLib.AddOperation( MACHININGS[i]) -- TODO ingombro lavorazione mi restituisce dati sbagliati. C'è un riferimento? -- se feature di testa, sposto testa in base a ingombro lavorazione if MACHININGS[i].Proc.bHeadProfile and b3MachEncumbrance then - PARTS[MACHININGS[i].Proc.nIndexPart].DispOffsets.Phase2.dOffsetX = PARTS[MACHININGS[i].Proc.nIndexPart].b3FinishedPart:getMax():getX() - b3MachEncumbrance:getMin():getX() + 5 + PARTS[MACHININGS[i].Proc.nIndexPart].DispOffsets.Phase2.dOffsetX = PARTS[MACHININGS[i].Proc.nIndexPart].b3Part:getMax():getX() - b3MachEncumbrance:getMin():getX() + 5 end end end diff --git a/CAMAuto/LuaLibs/WinLib.lua b/CAMAuto/LuaLibs/WinLib.lua index 6b86abb..64fc393 100644 --- a/CAMAuto/LuaLibs/WinLib.lua +++ b/CAMAuto/LuaLibs/WinLib.lua @@ -38,43 +38,43 @@ function WinLib.GetAffectedFaces( Proc, Part) vtFacesAffected.bBack = true end -- caso speciale profili - elseif Proc.sType == 'Profiling' and not Proc.sProfileInfo then + elseif Proc.sType == 'Profiling' then if not Part.SideNames then Part.SideNames = {} end -- quando si settano i lati interessati, mi salvo anche il nome. -- se c'è una rotazione di 180°, potrebbe essere che il lato LEFT del pezzo corrisponda al lato RIGHT della lavorazione. Stesso per IN/OUT - if Proc.b3Box:getMax():getX() < Part.b3FinishedPart:getCenter():getX() then + if Proc.b3Box:getMax():getX() < Part.b3Part:getCenter():getX() then vtFacesAffected.bLeft = true Part.SideNames.sLeft = Proc.sEntityName - elseif Proc.b3Box:getMin():getX() > Part.b3FinishedPart:getCenter():getX() then + elseif Proc.b3Box:getMin():getX() > Part.b3Part:getCenter():getX() then vtFacesAffected.bRight = true Part.SideNames.sRight = Proc.sEntityName - elseif Proc.b3Box:getMax():getY() < Part.b3FinishedPart:getCenter():getY() then + elseif Proc.b3Box:getMax():getY() < Part.b3Part:getCenter():getY() then vtFacesAffected.bFront = true Part.SideNames.sFront = Proc.sEntityName - elseif Proc.b3Box:getMin():getY() > Part.b3FinishedPart:getCenter():getY() then + elseif Proc.b3Box:getMin():getY() > Part.b3Part:getCenter():getY() then vtFacesAffected.bBack = true Part.SideNames.sBack = Proc.sEntityName end -- caso standard else - if Proc.b3Box:getMax():getZ() > Part.b3FinishedPart:getMax():getZ() - 500 * GEO.EPS_SMALL then + if Proc.b3Box:getMax():getZ() > Part.b3Part:getMax():getZ() - 500 * GEO.EPS_SMALL then vtFacesAffected.bTop = true end - if Proc.b3Box:getMin():getZ() < Part.b3FinishedPart:getMin():getZ() + 500 * GEO.EPS_SMALL then + if Proc.b3Box:getMin():getZ() < Part.b3Part:getMin():getZ() + 500 * GEO.EPS_SMALL then vtFacesAffected.bBottom = true end - if Proc.b3Box:getMin():getY() < Part.b3FinishedPart:getMin():getY() + 500 * GEO.EPS_SMALL then + if Proc.b3Box:getMin():getY() < Part.b3Part:getMin():getY() + 500 * GEO.EPS_SMALL then vtFacesAffected.bFront = true end - if Proc.b3Box:getMax():getY() > Part.b3FinishedPart:getMax():getY() - 500 * GEO.EPS_SMALL then + if Proc.b3Box:getMax():getY() > Part.b3Part:getMax():getY() - 500 * GEO.EPS_SMALL then vtFacesAffected.bBack = true end - if Proc.b3Box:getMin():getX() < Part.b3FinishedPart:getMin():getX() + 500 * GEO.EPS_SMALL then + if Proc.b3Box:getMin():getX() < Part.b3Part:getMin():getX() + 500 * GEO.EPS_SMALL then vtFacesAffected.bLeft = true end - if Proc.b3Box:getMax():getX() > Part.b3FinishedPart:getMax():getX() - 500 * GEO.EPS_SMALL then + if Proc.b3Box:getMax():getX() > Part.b3Part:getMax():getX() - 500 * GEO.EPS_SMALL then vtFacesAffected.bRight = true end end diff --git a/CAMAuto/ProcessWin.lua b/CAMAuto/ProcessWin.lua index dfe566a..541cd19 100644 --- a/CAMAuto/ProcessWin.lua +++ b/CAMAuto/ProcessWin.lua @@ -11,7 +11,7 @@ EgtEnableDebug( false) -- TODO da cancellare quando verrà passato automaticamente da programma local WIN = {} -WIN.BASEDIR = 'C:\\EgtData\\EgwWindowLua\\CAMAuto' +WIN.BASEDIR = 'C:\\EgtData\\Window\\CAMAuto' -- Imposto direttorio libreria specializzata per serramenti EgtAddToPackagePath( WIN.BASEDIR .. '\\LuaLibs\\?.lua') @@ -83,9 +83,9 @@ local function MyProcessInputData() -- recupero tutte le dimensioni necessarie local sOut = '' for i = 1, #PARTS do - PARTS[i].b3Solid = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Solid') or GDB_ID.NULL, GDB_BB.STANDARD) - PARTS[i].b3FinishedPart = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo') or GDB_ID.NULL, GDB_BB.STANDARD) - local idFrame = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo'), 'AuxFrame') or EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo'), 'Frame') + PARTS[i].b3Raw = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'GeoRaw') or GDB_ID.NULL, GDB_BB.STANDARD) + PARTS[i].b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo') or GDB_ID.NULL, GDB_BB.STANDARD) + local idFrame = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( PARTS[i].id, 'GeoRaw'), 'AuxFrame') PARTS[i].frame = EgtFR( idFrame) sOut = sOut .. PARTS[i].sName .. ', ' end @@ -158,13 +158,13 @@ local function AddOverMaterialToRaw( PARTS) for i = 1, #PARTS do -- prima di aggiungere sovramateriale al grezzo, calcolo dimensioni del finito - local b3FinishedPart = EgtGetBBoxGlob( PARTS[i].id or GDB_ID.NULL, GDB_BB.STANDARD) - PARTS[i].b3FinishedPart = b3FinishedPart - PARTS[i].dPartLength = PARTS[i].b3FinishedPart:getDimX() - PARTS[i].dPartWidth = PARTS[i].b3FinishedPart:getDimY() - PARTS[i].dPartHeight = PARTS[i].b3FinishedPart:getDimZ() + local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( PARTS[i].id, 'Geo') or GDB_ID.NULL, GDB_BB.STANDARD) + PARTS[i].b3Part = b3Part + PARTS[i].dPartLength = PARTS[i].b3Part:getDimX() + PARTS[i].dPartWidth = PARTS[i].b3Part:getDimY() + PARTS[i].dPartHeight = PARTS[i].b3Part:getDimZ() - -- recupero e aggiungo offset + -- recupero sovramateriale PARTS[i].RawOffset = {} -- recupero info sovramateriale PARTS[i].RawOffset.dOverMatIn = EgtGetInfo( PARTS[i].id, 'OVERMAT_IN', 'd') or 5 @@ -210,13 +210,15 @@ local function AlignRawsToTable( PARTS) local dRotX, dRotY, dRotZ = GetFixedAxesRotABCFromFrame( PARTS[i].frame) -- se devo ruotare - if dRotZ ~= 0 then + if abs( dRotZ) > GEO.EPS_ANG_SMALL then EgtRotatePartInRawPart( PARTS[i].id, Z_AX(), -dRotZ) -- sposto punto in basso a sinistra del pezzo sul punto in basso a sinistra del grezzo - local dPartPosX = EgtGetBBoxGlob( PARTS[i].id, GDB_BB.STANDARD):getMin():getX() - local dPartPosY = EgtGetBBoxGlob( PARTS[i].id, GDB_BB.STANDARD):getMin():getY() - local dRawPosX = EgtGetRawPartBBox( PARTS[i].idRaw):getMin():getX() - local dRawPosY = EgtGetRawPartBBox( PARTS[i].idRaw):getMin():getY() + local b3Part = EgtGetBBoxGlob( PARTS[i].id, GDB_BB.ONLY_VISIBLE) + local dPartPosX = b3Part:getMin():getX() + local dPartPosY = b3Part:getMin():getY() + local b3Raw = EgtGetRawPartBBox( PARTS[i].idRaw) + local dRawPosX = b3Raw:getMin():getX() + local dRawPosY = b3Raw:getMin():getY() local vtMove = Vector3d( dRawPosX - dPartPosX, dRawPosY - dPartPosY, 0) EgtMovePartInRawPart( PARTS[i].id, vtMove) end @@ -230,17 +232,17 @@ end ------------------------------------------------------------------------------------------------------------- local function NewMachGroupName() local nMachGroupId = EgtGetFirstMachGroup() - if not nMachGroupId then return 1 end + if not nMachGroupId then return '1' end local nMaxMachGroup = 0 while nMachGroupId do - local sMachGroupName = EgtGetMachGroupName(nMachGroupId) - local nMachGroupName = tonumber(sMachGroupName) + local sMachGroupName = EgtGetMachGroupName( nMachGroupId) + local nMachGroupName = tonumber( sMachGroupName) if nMachGroupName > nMaxMachGroup then nMaxMachGroup = nMachGroupName end - nMachGroupId = EgtGetNextMachGroup(nMachGroupId) + nMachGroupId = EgtGetNextMachGroup( nMachGroupId) end - return nMaxMachGroup + 1 + return tostring( nMaxMachGroup + 1) end ------------------------------------------------------------------------------------------------------------- @@ -279,10 +281,16 @@ local function MyProcessPieces() end -- si dispongono i pezzi sulla tavola - WinData.ExecDisposition( PARTS) + local bDispOk, sErr = WinData.ExecDisposition( PARTS) + if not bDispOk then + if not sErr then + sErr = 'Errore non gestito in WinData.ExecDisposition' + end + EgtOutBox( sErr, 'ProcessWin', 'ERROR', 'OK') + return false + end -- Impostazione dell'attrezzaggio di default - -- TODO se lascio il campo vuoto non mi carica il default!!!!!!! local bOk = EgtImportSetup() if not bOk then EgtImportSetup( 'Default') @@ -303,6 +311,11 @@ end ------------------------------------------------------------------------------------------------------------- -- *** Esecuzione *** ------------------------------------------------------------------------------------------------------------- + +-- nascondo geometrie varie +local vAuxId = { EgtGetFirstNameInGroup( GDB_ID.ROOT, 'Profile'), EgtGetFirstNameInGroup( GDB_ID.ROOT, 'Area*')} +EgtSetStatus( vAuxId, GDB_ST.OFF) + if not MyProcessInputData() then return end if not MyProcessPieces() then return end