From 111496f5a7749b04e380a3c165ffc53abdf785f9 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 9 Apr 2020 08:05:41 +0000 Subject: [PATCH] DataWall : - primo commit. --- Images/Overturn.png | Bin 0 -> 492 bytes Images/Process.png | Bin 0 -> 915 bytes Images/Rotate.png | Bin 0 -> 407 bytes Images/WallMachinings.png | Bin 0 -> 219 bytes Overturn.lua | 32 +++++ Process.lua | 292 ++++++++++++++++++++++++++++++++++++++ Rotate.lua | 31 ++++ Wall.ini | 8 ++ 8 files changed, 363 insertions(+) create mode 100644 Images/Overturn.png create mode 100644 Images/Process.png create mode 100644 Images/Rotate.png create mode 100644 Images/WallMachinings.png create mode 100644 Overturn.lua create mode 100644 Process.lua create mode 100644 Rotate.lua create mode 100644 Wall.ini diff --git a/Images/Overturn.png b/Images/Overturn.png new file mode 100644 index 0000000000000000000000000000000000000000..9854743445053dd77a64161616cf99d16d82ad59 GIT binary patch literal 492 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0f9+GK~z{r?UkWU z1TheXyCi5N!JS0nP}t)YFytI4o&ba40SF37NC;1WxHkZWL}Gac5*GfW-IQr(+G%(1 zR_tfm&28K7W~Q@E+qPzGY}s*COj5a2)l~EFDK2hLcN;rZQ6!a;p=jk)Qd${Gu3VOs zB*Pt4vc{2=ifyh=hjI_`_VpnIVr!&Gs#-#ckVCVUO&|RyB|^)~lYe`BEN;#D%eQ^{ z1N-{#&99%DXryX|a0nFwv-=BkcbHC2@{JN9JB>ocVzs5JDG4q*F(BrHw1WBe+iDD? zq+7v}E5m_0b3#CjR4R3v=uo8EDo$T*bZ82Fill0VIF?@rtFh}-QZ2bO_9b(?e`9AM zIID{kS3i9V0j{3hSwTnlBZkFN?rWgk-49Bj?0y_l2-pAY@u-U!%@X_V8>*Q7euTot zx6VFx1X4rEID9E{^&SX;FjB8O!%02w*~u@A5Gd+X)d)gh{Za`bu$f3DU~k_h8D*p< isaz(hTqdbJjQIh&a>z=_+@3xF0000P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf11L#EK~z{rwU%E< zQ&Akpzh~1eZH~|!mHi7E5+R}o6Eb?q%E0%)=)s5nJcJJt z$sT&>aoIzENisHBlnO?QZmDd}ozA)Y>D_g+Ts!vzcUjB^f^Snf=4 z-b%?oU?aepr#ToJDqu9EVWF!MdV7N$wUlfEUJVRSE>WhVRO<711pELcn`EVhqo*fi zm@cJK0j#9`M1GoKaM)NarBc%@Mo}8%0AE}YO5!M$nrEU?DX5>GMyKD8qjPgKVuaUm z^!G2VO`%e$a5VXG?obFF`;mD3&S^6(ZsROLR<9#!mqM|&PVPGJveU%N~*rW7BZZ7tMpQ41gIyQ#d z*;%d8#S+EkiVFO)+2}6u1bA3bi1v0nQ(7sB?W5tq*BEfSF)F5UK}bC=DoPd-uo#!V z8p@@rBF4s+{1(lAySyB&)zx?*q*5}^(AH+xevxviMzQpIzJ!Jbo+ z4gp<7xs>GCgy@;nXY+>S{V-YTO4C*_4<(y``8ba3*PGuIDfYe$CBtGVrP#Pr@{*yU z!A^-uQj)%oZD0>5`5R)I*)yQK+p)Hnm?jk&DM8aWu@c|Xzy`2E;AE*@C5dTLl8f$2 z6yMDP8%^F&B`g4B^#LAFq2UXrN;z2#{Ef%4uT%WVdn5)DdW^jm=iLS1-gPI9=$IxY zg-&FD(Bi=PdNhB^fu&N&oD~CgVhgwg+`pNJt}bU%8I>Q%l0+c`x5iS><2saADpMhe za;YHqQuO~QladvZpL4cc8c86HDoK=9D${9OMTwM(K1w8GDb+#}#@{$I-x54KDIhWs pk|hE4zg002ovPDHLkV1jeAn?3*l literal 0 HcmV?d00001 diff --git a/Images/Rotate.png b/Images/Rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5b74923b1c2d3996e64b8c6ea77b7a5648ffd2 GIT binary patch literal 407 zcmV;I0cie-P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0W3*GK~z{r?bWdj z!Y~j((FBQ_60uNbpkWdk8YZD(0t!Z;qGSc8Fr1Z(jN^08_FZt1FQGsrl&7;Xtudyl ztyO=mss+VuL2;`Rm2@QBk9+m=qdQ+)_N25y-TG-?(B!1%!2EQ2#V4f+awp?QqO?FU z3>HLbf}(ww4lbiT^%qc&!3LD}{vq=~kVVxn9XGWTJr@LtPpSliiB2kc?_A!&VThmr zlM4#Licymo#)L+n?UC@e2_a6bhEi7X#J6dpw3uowm_Mol5yI3TD9#Q||4 zZYqwCAeGf78YThlJ{?LbsZnE_O@Q6!l*D?EUR;*>#6MNBp+fU%slm?1%OIzd@cE zUXHbP0l+XkK D`$S3( literal 0 HcmV?d00001 diff --git a/Overturn.lua b/Overturn.lua new file mode 100644 index 0000000..df6d804 --- /dev/null +++ b/Overturn.lua @@ -0,0 +1,32 @@ +-- Rotate.lua by Egaltech s.r.l. 2020/04/06 +-- Gestione ribaltamento di una Parete + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + + +-- recupero il pezzo del primo oggetto selezionato +local nId = EgtGetFirstSelectedObj() +local nPartId = EgtGetParent( EgtGetParent( nId or GDB_ID.NULL) or GDB_ID.NULL) +if not nPartId or not EgtIsPart( nPartId) then + EgtOutBox( 'Nessuna parete selezionata', 'Overturn Parete', 'ERROR') + return +end + +-- recupero il box del pezzo +local Ls = EgtGetFirstNameInGroup( nPartId, 'Box') +local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD) +if not b3Solid then + local sName = EgtGetName( nPartId) or ( 'Id=' .. tonumber( nPartId)) + EgtOutBox( 'Box non definito per la parete ' .. sName, 'Overturn Parete', 'ERROR') + return +end + +-- eseguo rotazione di 180 gradi attorno asse X +local ptRot = b3Solid:getMin() + Vector3d( 0, b3Solid:getDimY() / 2, b3Solid:getDimZ() / 2) +EgtRotate( nPartId, ptRot, X_AX(), 180, GDB_RT.GLOB) +EgtDraw() + +-- end \ No newline at end of file diff --git a/Process.lua b/Process.lua new file mode 100644 index 0000000..b0a0224 --- /dev/null +++ b/Process.lua @@ -0,0 +1,292 @@ +-- Process.lua by Egaltech s.r.l. 2020/04/06 +-- Gestione calcolo disposizione e lavorazioni per Pareti +-- Si opera sulla macchina corrente + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Imposto direttorio libreria specializzata per Travi +local sBaseDir = EgtGetSourceDir() +EgtAddToPackagePath( sBaseDir .. 'LuaLibs\\?.lua') + +-- Verifico che la macchina corrente sia abilitata per la lavorazione delle Pareti +local sMachDir = EgtGetCurrMachineDir() +if not sMachDir then + EgtOutBox( 'Errore nel caricamento della macchina corrente', 'Lavora Pareti', 'ERROR') + return +end +if not EgtExistsFile( sMachDir .. '\\Wall\\WallData.lua') then + EgtOutBox( 'La macchina corrente non è configurata per lavorare pareti', 'Lavora Pareti', 'ERROR') + return +end + +-- Elimino direttori altre macchine e imposto direttorio macchina corrente per ricerca librerie +EgtRemoveBaseMachineDirFromPackagePath() +EgtAddToPackagePath( sMachDir .. '\\Wall\\?.lua') + +-- Segnalazione avvio +EgtOutLog( '*** Wall Process Start ***', 1) + +-- Carico le librerie +--_G.package.loaded.BeamExec = nil +--local BE = require( 'BeamExec') +--local BL = require( 'BeamLib') + +-- Carico i dati globali +local WD = require( 'WallData') + +-- Variabili di modulo +local vWall = {} +local dRawH + +------------------------------------------------------------------------------------------------------------- +-- *** Recupero le pareti selezionate *** +------------------------------------------------------------------------------------------------------------- +local function MyProcessInputData() + + -- Recupero le travi selezionate + local nId = EgtGetFirstSelectedObj() + while nId do + local nPartId = EgtGetParent( EgtGetParent( nId or GDB_ID.NULL) or GDB_ID.NULL) + if nPartId then + local bFound = false + for i = 1, #vWall do + if vWall[i].Id == nPartId then + bFound = true + break + end + end + if not bFound then + table.insert( vWall, { Id = nPartId, Name = ( EgtGetName( nPartId) or ( 'Id=' .. tonumber( nPartId)))}) + end + end + nId = EgtGetNextSelectedObj() + end + if #vWall == 0 then + EgtOutBox( 'Non sono state selezionate pareti', 'Lavora Pareti', 'ERROR') + return false + else + local sOut = '' + for i = 1, #vWall do + sOut = sOut .. vWall[i].Name .. ', ' + end + sOut = sOut:sub( 1, -3) + EgtOutLog( 'Pareti selezionate : ' .. sOut, 1) + end + + -- Ne recupero e verifico le dimensioni + for i = 1, #vWall do + local Ls = EgtGetFirstNameInGroup( vWall[i].Id, 'Box') + local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD) + if not b3Solid then + EgtOutBox( 'Box non definito per la parete ' .. vWall[i].Name, 'Lavora Pareti', 'ERROR') + return false + else + vWall[i].Box = b3Solid + end + end + dRawH = vWall[1].Box:getDimZ() + local vWallErr = {} + for i = 2, #vWall do + local dDimH = vWall[i].Box:getDimZ() + if abs( dDimH - dRawH) > 10 * GEO.EPS_SMALL then + table.insert( vWallErr, i) + end + end + if #vWallErr > 0 then + local sOut = 'Rimosse pareti con spessore diverso dalla prima :\n' + for i = #vWallErr, 1, -1 do + sOut = sOut .. vWall[vWallErr[i]].Name .. '\n' + EgtDeselectPartObjs( vWall[vWallErr[i]].Id) + table.remove( vWall, vWallErr[i]) + end + EgtOutLog( sOut, 1) + EgtOutBox( sOut, 'Lavora Travi', 'INFO') + EgtDraw() + return false + end + EgtDeselectAll() + + return true +end + +------------------------------------------------------------------------------------------------------------- +-- *** Inserimento delle pareti nel grezzo *** +------------------------------------------------------------------------------------------------------------- +local function MyProcessWalls() + + -- Lunghezza totale delle pareti + local dTotLen = 0 + for i = 1, #vWall - 1 do + dTotLen = dTotLen + vWall[i].Box:getDimX() + end + dTotLen = dTotLen + max( vWall[#vWall].Box:getDimX(), WD.MIN_LENGTH) + local dAddLen = WD.OVM_HEAD + ( #vWall - 1) * WD.OVM_MID + EgtOutLog( 'Ltot : ' .. EgtNumToString( dTotLen, 1) .. ' Lagg : '.. EgtNumToString( dAddLen, 1), 1) + + -- Larghezza massima delle pareti + local dMaxWid = 0 + for i = 1, #vWall do + if vWall[i].Box:getDimY() > dMaxWid then + dMaxWid = dMaxWid + vWall[i].Box:getDimY() + end + end + + -- Richiedo lunghezza del grezzo e sovramateriale di testa + local vsVal = EgtDialogBox( 'Lavora Pareti' .. ' (Ltot='.. EgtNumToString( dTotLen + dAddLen + 0.5, 0) .. ', Wmax=' .. EgtNumToString( dMaxWid + 0.5, 0) .. ')', + {'Lunghezza grezzo', EgtNumToString( WD.STD_RAW_LENGTH, 0)}, + {'Larghezza grezzo', EgtNumToString( WD.STD_RAW_WIDTH, 0)}, + {'Sovramateriale', EgtNumToString( WD.OVM_HEAD, 0)}) + if not vsVal then + EgtDraw() + return + end + local dRawL = EgtEvalNumExpr( vsVal[1]) + if not dRawL then + local sOut = 'Lunghezza grezzo errata : ' .. vsVal[1] + EgtOutLog( sOut) + EgtOutBox( sOut, 'Lavora Pareti', 'WARNING') + EgtDraw() + return false + end + dRawL = min( dRawL, WD.MAX_LENGTH) + local dRawW = EgtEvalNumExpr( vsVal[2]) + if not dRawW then + local sOut = 'Larghezza grezzo errata : ' .. vsVal[2] + EgtOutLog( sOut) + EgtOutBox( sOut, 'Lavora Pareti', 'WARNING') + EgtDraw() + return false + end + dRawW = min( dRawW, WD.MAX_WIDTH ) + local dOvmHead = EgtEvalNumExpr( vsVal[3]) + if not dOvmHead then + local sOut = 'Sovramateriale di testa errato : ' .. vsVal[3] + EgtOutLog( sOut) + EgtOutBox( sOut, 'Lavora Pareti', 'WARNING') + EgtDraw() + return false + end + + -- Verifico dimensioni massime grezzo + if dRawL > WD.MAX_LENGTH + 10 * GEO.EPS_SMALL or dRawW > WD.MAX_WIDTH + 10 * GEO.EPS_SMALL or dRawH > WD.MAX_HEIGHT + 10 * GEO.EPS_SMALL then + local sOut = 'Grezzo (' .. EgtNumToString( dRawL, 2) .. ' x ' .. EgtNumToString( dRawW, 2) .. ' x ' .. EgtNumToString( dRawH, 2) .. ') ' .. + 'oltre il limite della macchina ('..EgtNumToString( WD.MAX_LENGTH, 2)..' x '..EgtNumToString( WD.MAX_WIDTH, 2)..' x '..EgtNumToString( WD.MAX_HEIGHT, 2)..') ' + EgtOutLog( sOut) + EgtOutBox( sOut, 'Lavora Pareti', 'WARNING') + EgtDraw() + return false + end + + -- Verifico dimensioni minime del grezzo + if dRawL < WD.MIN_LENGTH - 10 * GEO.EPS_SMALL or dRawW < WD.MIN_WIDTH - 10 * GEO.EPS_SMALL or dRawH < WD.MIN_HEIGHT - 10 * GEO.EPS_SMALL then + local sOut = 'Grezzo (' .. EgtNumToString( dRawL, 2) .. ' x ' .. EgtNumToString( dRawW, 2) .. ' x ' .. EgtNumToString( dRawH, 2) .. ') ' .. + 'sotto il limite della macchina ('..EgtNumToString( WD.MIN_LENGTH, 2)..' x '..EgtNumToString( WD.MIN_WIDTH, 2)..' x '..EgtNumToString( WD.MIN_HEIGHT, 2)..')' + EgtOutLog( sOut) + EgtOutBox( sOut, 'Lavora Pareti', 'WARNING') + EgtDraw() + return false + end + + -- Sistemo le pareti nel grezzo + -- Creazione nuovo gruppo di lavoro + local sMgName = EgtGetMachGroupNewName( 'Mach') + local NewMgId = EgtAddMachGroup( sMgName) + if not NewMgId then + local sOut = 'Errore nella creazione del gruppo di lavoro ' .. sMgName + return false, sOut + end + -- Impostazione della tavola + EgtSetTable( 'Tab') + -- Area tavola + local b3Tab = EgtGetTableArea() + -- Calcolo posizione estremo TR della tavola rispetto a sua origine in BL + WD.OriTR = Point3d( b3Tab:getDimX(), b3Tab:getDimY(), 0) + -- Impostazione dell'attrezzaggio di default + EgtImportSetup() + -- Creazione del grezzo e suo posizionamento in macchina + local nRaw = EgtAddRawPart( Point3d(0,0,0), dRawL, dRawW, dRawH, WD.RAWCOL) + EgtMoveToCornerRawPart( nRaw, WD.OriTR, MCH_CR.TR) + -- Inserimento dei pezzi nel grezzo + local Cnt = 0 + local Len = dRawL + local DeltaS = dOvmHead + local DeltaE = WD.OVM_MID + for i = 1, #vWall do + -- assegno identificativo pezzo + local Pz = vWall[i].Id + -- dati del pezzo + local b3Part = EgtGetBBoxGlob( Pz or GDB_ID.NULL, GDB_BB.EXACT) + local b3Solid = vWall[i].Box + if b3Part:isEmpty() or b3Solid:isEmpty() then break end + -- se spessore compatibile e lunghezza disponibile sufficiente + local PartLen = b3Solid:getDimX() + local PartWidth = b3Solid:getDimY() + local PartHeight = b3Solid:getDimZ() + local NextLen = Len - DeltaS - PartLen - DeltaE + if ( dRawW > PartWidth - 10 * GEO.EPS_SMALL and abs( PartHeight - dRawH) < 10 * GEO.EPS_SMALL) and NextLen + DeltaE >= 0 then + -- eventuale sovramateriale di testa + if vWall[i].PosX then + DeltaS = max( vWall[i].PosX - ( dRawL - Len), 0) + end + -- dimensioni del grezzo + local CrawLen = min( PartLen + DeltaS + DeltaE, Len) + local Delta = Len - PartLen - DeltaS + -- inserisco il pezzo nel grezzo + EgtDeselectPartObjs( Pz) + local ptPos = b3Part:getMin() - b3Solid:getMin() + Vector3d( Delta, dRawW - PartWidth - dOvmHead, ( dRawH - PartHeight) / 2) + EgtAddPartToRawPart( Pz, ptPos, nRaw) + -- aggiorno la lunghezza residua della barra + Len = Len - CrawLen + end + DeltaS = 0 + end + + return true +end + +------------------------------------------------------------------------------------------------------------- +-- *** Inserimento delle lavorazioni nelle travi *** +------------------------------------------------------------------------------------------------------------- +local function MyProcessFeatures() + + local bOk, Stats = BE.ProcessFeatures() + local nErrCnt = 0 + local nWarnCnt = 0 + local sOutput = '' + for i = 1, #Stats do + if Stats[i].Err > 0 then + nErrCnt = nErrCnt + 1 + sOutput = sOutput .. string.format( '[%d,%d] %s\n', Stats[i].CutId, Stats[i].TaskId, Stats[i].Msg) + elseif Stats[i].Err < 0 then + nWarnCnt = nWarnCnt + 1 + sOutput = sOutput .. string.format( '[%d,%d] %s\n', Stats[i].CutId, Stats[i].TaskId, Stats[i].Msg) + end + end + if #sOutput > 0 then EgtOutLog( sOutput) end + if nErrCnt > 0 then + EgtOutBox( sOutput, 'Lavora Travi', 'ERRORS') + EgtDraw() + return false + elseif nWarnCnt > 0 then + EgtOutBox( sOutput, 'Lavora Travi', 'WARNINGS') + EgtDraw() + return true + end + + return true +end + +------------------------------------------------------------------------------------------------------------- +-- *** Esecuzione *** +------------------------------------------------------------------------------------------------------------- +if not MyProcessInputData() then return end + +if not MyProcessWalls() then return end + +-- Abilito Vmill +EgtSetInfo( EgtGetCurrMachGroup(), 'Vm', '1') + +--if not MyProcessFeatures() then return end diff --git a/Rotate.lua b/Rotate.lua new file mode 100644 index 0000000..e675ba9 --- /dev/null +++ b/Rotate.lua @@ -0,0 +1,31 @@ +-- Swap.lua by Egaltech s.r.l. 2020/04/06 +-- Gestione rotazione nel piano di una Parete + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + + +-- recupero il pezzo del primo oggetto selezionato +local nId = EgtGetFirstSelectedObj() +local nPartId = EgtGetParent( EgtGetParent( nId or GDB_ID.NULL) or GDB_ID.NULL) +if not nPartId or not EgtIsPart( nPartId) then + EgtOutBox( 'Nessuna parete selezionata', 'Rotate Parete', 'ERROR') + return +end + +-- recupero il box del pezzo +local Ls = EgtGetFirstNameInGroup( nPartId, 'Box') +local b3Solid = EgtGetBBoxGlob( Ls or GDB_ID.NULL, GDB_BB.STANDARD) +if not b3Solid then + local sName = EgtGetName( nPartId) or ( 'Id=' .. tonumber( nPartId)) + EgtOutBox( 'Box non definito per la parete ' .. sName, 'Rotate Parete', 'ERROR') + return +end + +-- eseguo rotazione di 90 gradi attorno asse Z +EgtRotate( nPartId, b3Solid:getCenter(), Z_AX(), 90, GDB_RT.GLOB) +EgtDraw() + +-- end \ No newline at end of file diff --git a/Wall.ini b/Wall.ini new file mode 100644 index 0000000..6172b74 --- /dev/null +++ b/Wall.ini @@ -0,0 +1,8 @@ +[Wall] +BtlEnable=1 +BaseDir=C:\EgtData\Wall +BtlExec=BatchProcess.lua +Button1=Process.lua,Images\Process.png,Lavora Pareti +Button2=Rotate.lua,Images\Rotate.png,Ruota Parete +Button3=Overturn.lua,Images\Overturn.png,Ribalta Parete +Button4=WallMachinings,Images\WallMachinings.png,Lista lavorazioni