diff --git a/LuaLibs/EgtGunstockBase.lua b/LuaLibs/EgtGunstockBase.lua index f2d97fe..d0c1ae9 100644 --- a/LuaLibs/EgtGunstockBase.lua +++ b/LuaLibs/EgtGunstockBase.lua @@ -426,6 +426,16 @@ local function InsertInLayer( sNgeFile, nLayId) if sTcPos then EgtSetInfo( nLayId, 'TCPOS', sTcPos) end + -- Copia eventuale info con posizione utensile + local sTPos = EgtGetInfo( nLay or GDB_ID.NULL, 'TPOS') + if sTPos then + EgtSetInfo( nLayId, 'TPOS', sTPos) + end + -- Copia eventuale info con speed + local sSpeed = EgtGetInfo( nLay or GDB_ID.NULL, 'SPEED') + if sSpeed then + EgtSetInfo( nLayId, 'SPEED', sSpeed) + end -- Copia eventuale info con nome di utensile local sToolName = EgtGetInfo( nLay or GDB_ID.NULL, 'TNAME') if sToolName then diff --git a/Main.lua b/Main.lua index 43b009c..40a5e9d 100644 --- a/Main.lua +++ b/Main.lua @@ -1,4 +1,4 @@ --- Main.lua by Egaltech s.r.l. 2020/09/28 +-- Main.lua by Egaltech s.r.l. 2020/09/30 -- Main gestione lavorazioni Gunstock -- Intestazioni @@ -644,6 +644,7 @@ function GGD.CreateGunstock() local sTmpDir = sBaseDir .. 'TMP\\' local sErrFile = sPezDir .. sPezName .. '.txt' local sCncFile = sBaseDir .. 'CNC\\' .. sPezName + local sCncMazFile = sCncFile..'.EIA' local sNgeFile = sPezDir .. sPezName .. '.nge' -- Messaggi di inizio @@ -652,6 +653,7 @@ function GGD.CreateGunstock() -- Cancello tutti i file di output EgtEraseFile( sErrFile) EgtEraseFile( sCncFile) + EgtEraseFile( sCncMazFile) EgtEraseFile( sNgeFile) -- Pulisco il direttorio temporaneo @@ -1052,155 +1054,333 @@ function GGD.CreateGunstock() end -- Generazione programma principale - if not EGB.OpenOutFile( sCncFile) then - EGB.WriteErrLine( 'ERR=203\nErrore nell\'apertura del file cnc ' .. sCncFile) + if not EGB.OpenOutFile( EgtIf( bMazak, sCncMazFile, sCncFile)) then + EGB.WriteErrLine( 'ERR=203\nErrore nell\'apertura del file cnc ' .. EgtIf( bMazak, sCncMazFile, sCncFile)) GGD.ERR = 203 return end - -- emissione intestazione - EGB.WriteOutLine( '(DIS,"CODICE=PRG1")') - EGB.WriteOutLine( '; ' .. EgtGetCurrMachineName():upper()) - EGB.WriteOutLine( '; ' .. sPezName:upper() .. sPezExt:upper() .. '-' .. sModName:upper() .. sModExt:upper()) - EGB.WriteOutLine( '; ' .. GGD.DESCR:upper()) - EGB.WriteOutLine( '; ' .. m_sAttr:upper()) - local sStart1Def = 'M70
"CICLI"' - if m_vRaw.dLen < LEN_MIN_RIFLE then - WriteOutLineFromIni( 'Gunstock', 'Start1', sStart1Def, sMachIni) - else - WriteOutLineFromIni( 'Gunstock', 'Start1_R', sStart1Def, sMachIni) - end - for i = 1, #m_vParams do - EGB.WriteOutLine( m_vParams[i].sVar .. '=' .. EgtNumToString( m_vParams[i].dVal, 3)) - end - if ( bTwoHeads and #m_vMachs > 0) then - local sTcPos = EgtGetInfo( m_vMachs[1].nLay, 'TCPOS') - if not sTcPos then - EGB.WriteErrLine( 'ERR=208\nErrore non trovata posizione utensile in CU') - GGD.ERR = 208 + + -- se macchina Mazak + if bMazak then + -- emissione intestazione + EGB.WriteOutLine( '(' .. EgtGetCurrMachineName():upper() .. ')') + EGB.WriteOutLine( '(' .. sPezName:upper() .. sPezExt:upper() .. '-' .. sModName:upper() .. sModExt:upper() .. ')') + EGB.WriteOutLine( '(' .. GGD.DESCR:upper() .. ')') + EGB.WriteOutLine( '(' .. m_sAttr:upper() .. ')') + -- emissioni iniziali opzionali + local sStart1Def = '' + if m_vRaw.dLen < LEN_MIN_RIFLE then + WriteOutLineFromIni( 'Gunstock', 'Start1', sStart1Def, sMachIni) + else + WriteOutLineFromIni( 'Gunstock', 'Start1_R', sStart1Def, sMachIni) + end + -- emissione inizializzazioni + EGB.WriteOutLine( '') + EGB.WriteOutLine( '(INIZIO)') + EGB.WriteOutLine( '#5241=0') + EGB.WriteOutLine( '#5242=0') + EGB.WriteOutLine( '#5243=0') + EGB.WriteOutLine( '#5244=0') + EGB.WriteOutLine( '#5245=0') + EGB.WriteOutLine( 'G0 G17 G40 G49 G80 G90 G94') + EGB.WriteOutLine( 'G0 G53 Z0') + EGB.WriteOutLine( 'G0 G53 X0') + EGB.WriteOutLine( 'G0 G53 Y0') + EGB.WriteOutLine( 'G0 G53 A0 C0') + EGB.WriteOutLine( 'G61.1') + -- seconde emissioni iniziali opzionali + local sStart2Def = '' + if m_vRaw.dLen < LEN_MIN_RIFLE then + WriteOutLineFromIni( 'Gunstock', 'Start2', sStart2Def, sMachIni) + else + WriteOutLineFromIni( 'Gunstock', 'Start2_R', sStart2Def, sMachIni) + end + -- emissione dei posizionamenti e dei richiami delle lavorazioni + if not EgtSetCalcTool( 'Calc', 'H1', 1) then + EGB.WriteErrLine( 'ERR=204\nErrore nell\'impostazione dell\'utensile di calcolo') + GGD.ERR = 204 return end - local nTcPos = tonumber( sTcPos:sub( 2)) - EGB.WriteOutLine( EgtIf( nTcPos <= 18, 'M41M52', 'M42M51')) - EGB.WriteOutLine( sTcPos .. ' M6') - end - local sStart2Def = 'G79G0Z0
G79X-1500Y-1600C0B0' - if m_vRaw.dLen < LEN_MIN_RIFLE then - WriteOutLineFromIni( 'Gunstock', 'Start2', sStart2Def, sMachIni) - else - WriteOutLineFromIni( 'Gunstock', 'Start2_R', sStart2Def, sMachIni) - end - EGB.WriteOutLine( '(UAO,0)') - EGB.WriteOutLine( EgtIf( bTwoHeads, '(UOT,0,X0,U0,Y0,Z0,W0)', '(UOT,0,X0,Y0,Z0)')) - -- emissione dei posizionamenti e dei richiami delle lavorazioni - if not EgtSetCalcTool( 'Calc', 'H1', 1) then - EGB.WriteErrLine( 'ERR=204\nErrore nell\'impostazione dell\'utensile di calcolo') - GGD.ERR = 204 - return - end - local dCalcLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) - local nNum = 0 - local dPrevR1, dPrevR2 = 9999, 9999 - for i = 1, #m_vMachs do - -- lavorazione i-esima - local vMach = m_vMachs[i] - local frMach = EgtFR( vMach.nLay, GDB_ID.ROOT) - -- emissione info di lavorazione - nNum = nNum + 10 - if vMach.sInfo then - EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ' .. vMach.sInfo:upper()) + local nNum = 0 + local sTcPosPrev + local dPrevR1, dPrevR2 = 9999, 9999 + for i = 1, #m_vMachs do + -- lavorazione i-esima + local vMach = m_vMachs[i] + local frMach = EgtFR( vMach.nLay, GDB_ID.ROOT) + -- emissione info di lavorazione + EGB.WriteOutLine( '') + nNum = nNum + 10 + if vMach.sInfo then + EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' (' .. vMach.sInfo:upper() .. ')') + else + EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ( *** )') + end + -- recupero dati utensile + local sTname = EgtGetInfo( vMach.nLay, 'TNAME') + local sTcPos = EgtGetInfo( vMach.nLay, 'TPOS') + if not sTcPos then + EGB.WriteOutLine( '(ERRORE MANCA TPOS IN ' .. vMach.sName .. ')') + EGB.WriteErrLine( 'ERR=211\nErrore manca TPOS in ' .. vMach.sName) + GGD.ERR = 211 + return + end + -- se utensile cambiato + local bTdiff = ( sTcPos ~= sTcPosPrev) + if bTdiff then + -- posizionamento prima di cambio utensile + if i > 1 then + EGB.WriteOutLine( 'G0 G53 Z0') + EGB.WriteOutLine( 'G0 G53 Y-1000') + EGB.WriteOutLine( 'G0 G53 X0') + EGB.WriteOutLine( 'G0 G53 Y0') + end + -- emissione richiamo utensile + EGB.WriteOutLine( sTcPos .. ' M6' .. EgtIf( sTname, ' ('..EgtTrim( sTname)..')', '')) + end + -- preselezione prossimo utensile + if i < #m_vMachs then + local sTcPosNext = EgtGetInfo( m_vMachs[i+1].nLay, 'TPOS') + EGB.WriteOutLine( sTcPosNext or 'T0') + else + EGB.WriteOutLine( 'T0') + end + -- emissione speed + local sSpeed = EgtGetInfo( vMach.nLay, 'SPEED') + if not sSpeed then + EGB.WriteOutLine( '(ERRORE MANCA SPEED IN ' .. vMach.sName .. ')') + EGB.WriteErrLine( 'ERR=212\nErrore manca SPEED in ' .. vMach.sName) + GGD.ERR = 212 + return + end + EGB.WriteOutLine( sSpeed) + -- se utensile cambiato, posizionamento dopo cambio utensile + if bTdiff then + EGB.WriteOutLine( 'G0 G53 Z0') + EGB.WriteOutLine( 'G0 G53 X0') + EGB.WriteOutLine( 'G0 G53 Y-1000') + end + -- calcolo angoli + local dNearR1, dNearR2 = 0, 0 + if vMach.Ang then + dNearR1 = vMach.Ang.dR1 + dNearR2 = vMach.Ang.dR2 + end + local bRaOk, dR1, dR2 = EGB.GetAngMach( frMach:getVersZ(), dNearR1, dNearR2) + if not bRaOk then + EGB.WriteOutLine( '( ERRORE CALC ROTAX DI ' .. vMach.sName .. ')') + EGB.WriteErrLine( 'ERR=205\nErrore nel calcolo assi rotanti di ' .. vMach.sName) + GGD.ERR = 205 + return + else + vMach.Ang.dR1N = dR1 + vMach.Ang.dR2N = dR2 + dPrevR1 = dR1 + dPrevR2 = dR2 + EGB.WriteOutLine( 'G55') + -- la posizione rimane inalterata + local dX = frMach:getOrigin():getX() + local dY = frMach:getOrigin():getY() + local dZ = frMach:getOrigin():getZ() + -- calcolo degli angoli di rotazione attorno agli assi fissi + local dA, dB, dC = GetFixedAxesRotABCFromFrame( frMach) + if not dA then + EGB.WriteOutLine( '; ERRORE CALC ANG DI ' .. vMach.sName) + EGB.WriteErrLine( 'ERR=207\nErrore nel calcolo ANG di ' .. vMach.sName) + GGD.Err = 207 + return + end + -- emissione + EGB.WriteOutLine( '(ANGOLI ATTESI: A' .. EgtNumToString( dR2, 3) .. + ' C' .. EgtNumToString( dR1, 3) ..')') + EGB.WriteOutLine( 'G68.2 P1 Q123 X' .. EgtNumToString( dX, 3) .. + ' Y' .. EgtNumToString( dY, 3) .. + ' Z' .. EgtNumToString( dZ, 3) .. + ' I' .. EgtNumToString( dA, 3) .. + ' J' .. EgtNumToString( dB, 3) .. + ' K' .. EgtNumToString( dC, 3)) + EGB.WriteOutLine( 'G53.1') + EGB.WriteOutLine( 'M98P' .. vMach.sName) + EGB.WriteOutLine( 'G69') + EGB.WriteOutLine( 'G49') + end + -- salvo utensile corrente come prossimo precedente + sTcPosPrev = sTcPos + end + -- emissione terminazione + EGB.WriteOutLine( '') + EGB.WriteOutLine( 'N9999 (FINE)') + EGB.WriteOutLine( 'G0 G53 Z0') + EGB.WriteOutLine( 'G0 G53 Y-1000') + EGB.WriteOutLine( 'G0 G53 X0') + EGB.WriteOutLine( 'G0 G53 Y0') + EGB.WriteOutLine( 'G0 G53 A0 C0') + EGB.WriteOutLine( 'M9') + EGB.WriteOutLine( 'M5') + EGB.WriteOutLine( 'T0 M6') + if #m_vMachs > 0 then + local sTcPosFirst = EgtGetInfo( m_vMachs[1].nLay, 'TPOS') + EGB.WriteOutLine( sTcPosFirst) + end + EGB.WriteOutLine( 'G64') + -- emissioni finali opzionali + -- emissione terminazione + local sEndDef = '' + if m_vRaw.dLen < LEN_MIN_RIFLE then + WriteOutLineFromIni( 'Gunstock', 'End', sEndDef, sMachIni) else - EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ***') + WriteOutLineFromIni( 'Gunstock', 'End_R', sEndDef, sMachIni) end - -- emissione info utensile - local sToolInfo = '' - local sTcPos = EgtGetInfo( vMach.nLay, 'TCPOS') - if sTcPos == 'T00' then - sToolInfo = sToolInfo .. 'T=PRECEDENTE' - elseif sTcPos then - sToolInfo = sToolInfo .. sTcPos:upper() + -- terminazione file + EGB.WriteOutLine( 'M30') + + -- altrimenti macchine CMS + else + -- emissione intestazione + EGB.WriteOutLine( '(DIS,"CODICE=PRG1")') + EGB.WriteOutLine( '; ' .. EgtGetCurrMachineName():upper()) + EGB.WriteOutLine( '; ' .. sPezName:upper() .. sPezExt:upper() .. '-' .. sModName:upper() .. sModExt:upper()) + EGB.WriteOutLine( '; ' .. GGD.DESCR:upper()) + EGB.WriteOutLine( '; ' .. m_sAttr:upper()) + local sStart1Def = 'M70
"CICLI"' + if m_vRaw.dLen < LEN_MIN_RIFLE then + WriteOutLineFromIni( 'Gunstock', 'Start1', sStart1Def, sMachIni) + else + WriteOutLineFromIni( 'Gunstock', 'Start1_R', sStart1Def, sMachIni) end - local sTcomp = EgtGetInfo( vMach.nLay, 'TCOMP') - if sTcomp then sToolInfo = sToolInfo .. ' H' .. sTcomp:upper() end - local sTname = EgtGetInfo( vMach.nLay, 'TNAME') - if sTname then sToolInfo = sToolInfo .. ' ' .. sTname:upper() end - EGB.WriteOutLine( '; ' .. sToolInfo) - -- calcolo angoli - local dNearR1, dNearR2 = 0, 0 - if vMach.Ang then - dNearR1 = vMach.Ang.dR1 - dNearR2 = vMach.Ang.dR2 + for i = 1, #m_vParams do + EGB.WriteOutLine( m_vParams[i].sVar .. '=' .. EgtNumToString( m_vParams[i].dVal, 3)) end - local bRaOk, dR1, dR2 = EGB.GetAngMach( frMach:getVersZ(), dNearR1, dNearR2) - if not bRaOk then - EGB.WriteOutLine( '; ERRORE CALC ROTAX DI ' .. vMach.sName:upper()) - EGB.WriteErrLine( 'ERR=205\nErrore nel calcolo assi rotanti di ' .. vMach.sName) - GGD.ERR = 205 + if ( bTwoHeads and #m_vMachs > 0) then + local sTcPos = EgtGetInfo( m_vMachs[1].nLay, 'TCPOS') + if not sTcPos then + EGB.WriteErrLine( 'ERR=208\nErrore non trovata posizione utensile in CU') + GGD.ERR = 208 + return + end + local nTcPos = tonumber( sTcPos:sub( 2)) + EGB.WriteOutLine( EgtIf( nTcPos <= 18, 'M41M52', 'M42M51')) + EGB.WriteOutLine( sTcPos .. ' M6') + end + local sStart2Def = 'G79G0Z0
G79X-1500Y-1600C0B0' + if m_vRaw.dLen < LEN_MIN_RIFLE then + WriteOutLineFromIni( 'Gunstock', 'Start2', sStart2Def, sMachIni) + else + WriteOutLineFromIni( 'Gunstock', 'Start2_R', sStart2Def, sMachIni) + end + EGB.WriteOutLine( '(UAO,0)') + EGB.WriteOutLine( EgtIf( bTwoHeads, '(UOT,0,X0,U0,Y0,Z0,W0)', '(UOT,0,X0,Y0,Z0)')) + -- emissione dei posizionamenti e dei richiami delle lavorazioni + if not EgtSetCalcTool( 'Calc', 'H1', 1) then + EGB.WriteErrLine( 'ERR=204\nErrore nell\'impostazione dell\'utensile di calcolo') + GGD.ERR = 204 return - else - vMach.Ang.dR1N = dR1 - vMach.Ang.dR2N = dR2 - if vMach.PrepRot and - ( abs( dR1 - dPrevR1) > GEO.EPS_ANG_SMALL or abs( dR2 - dPrevR2) > GEO.EPS_ANG_SMALL) then - local sOut = 'G90G0'..'B'..EgtNumToString( dR1 - vMach.PrepRot.dR1, 3).. - 'C'..EgtNumToString( dR2 - vMach.PrepRot.dR2, 3) - EGB.WriteOutLine( sOut) - sOut = 'G90G1'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3).. - 'F'..EgtNumToString( vMach.PrepRot.dFeed, 0) - EGB.WriteOutLine( sOut) - else - local sOut = 'G90G0'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3) - EGB.WriteOutLine( sOut) - end - dPrevR1 = dR1 - dPrevR2 = dR2 - if bTwoHeads then EGB.WriteOutLine( 'G400') end - EGB.WriteOutLine( '(UAO,0)') - -- calcolo posizione - local bLa1Ok, _, dX1, dY1, dZ1 = EgtGetCalcPositions( frMach:getOrigin(), dR1, dR2) - if not bLa1Ok then - EGB.WriteOutLine( '; ERRORE CALC UOT DI ' .. vMach.sName:upper()) - EGB.WriteErrLine( 'ERR=206\nErrore nel calcolo UOT di ' .. vMach.sName) - GGD.Err = 206 - return - end - local dX = dX1 - local dY = dY1 - local dZ = dZ1 - dCalcLen - if bTwoHeads then - EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) .. ',U' .. EgtNumToString( dX, 3) .. - ',Y' .. EgtNumToString( dY, 3) .. - ',Z' .. EgtNumToString( dZ, 3) .. ',W' .. EgtNumToString( dZ, 3) .. ')') - else - EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) .. - ',Y' .. EgtNumToString( dY, 3) .. - ',Z' .. EgtNumToString( dZ, 3) .. ')') - end - -- calcolo rotazione - local bLa2Ok, _, dX2, dY2, dZ2 = EgtGetCalcPositions( frMach:getOrigin() + 100*frMach:getVersX(), dR1, dR2) - if not bLa2Ok then - EGB.WriteOutLine( '; ERRORE CALC URT DI ' .. vMach.sName:upper()) - EGB.WriteErrLine( 'ERR=207\nErrore nel calcolo URT di ' .. vMach.sName) - GGD.Err = 207 - return - end - local dAng = atan2( dY2 - dY1, dX2 - dX1) - if abs( dZ2 - dZ1) > GEO.EPS_SMALL then - EgtOutLog( 'Differenza sensibile in Z per URT :'..EgtNumToString( dZ1, 6)..'/'..EgtNumToString( dZ2, 6)) - end - EGB.WriteOutLine( '(URT,' .. EgtNumToString( dAng, 3) .. ')') - EGB.WriteOutLine( '(CLS,SUB' .. vMach.sName .. ')') - EGB.WriteOutLine( '(UAO,0)') - EGB.WriteOutLine( '(URT,0)') end + local dCalcLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) + local nNum = 0 + local dPrevR1, dPrevR2 = 9999, 9999 + for i = 1, #m_vMachs do + -- lavorazione i-esima + local vMach = m_vMachs[i] + local frMach = EgtFR( vMach.nLay, GDB_ID.ROOT) + -- emissione info di lavorazione + nNum = nNum + 10 + if vMach.sInfo then + EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ' .. vMach.sInfo:upper()) + else + EGB.WriteOutLine( 'N'..EgtNumToString(nNum,0)..' ; ***') + end + -- emissione info utensile + local sToolInfo = '' + local sTcPos = EgtGetInfo( vMach.nLay, 'TCPOS') + if sTcPos == 'T00' then + sToolInfo = sToolInfo .. 'T=PRECEDENTE' + elseif sTcPos then + sToolInfo = sToolInfo .. sTcPos:upper() + end + local sTcomp = EgtGetInfo( vMach.nLay, 'TCOMP') + if sTcomp then sToolInfo = sToolInfo .. ' H' .. sTcomp:upper() end + local sTname = EgtGetInfo( vMach.nLay, 'TNAME') + if sTname then sToolInfo = sToolInfo .. ' ' .. sTname:upper() end + EGB.WriteOutLine( '; ' .. sToolInfo) + -- calcolo angoli + local dNearR1, dNearR2 = 0, 0 + if vMach.Ang then + dNearR1 = vMach.Ang.dR1 + dNearR2 = vMach.Ang.dR2 + end + local bRaOk, dR1, dR2 = EGB.GetAngMach( frMach:getVersZ(), dNearR1, dNearR2) + if not bRaOk then + EGB.WriteOutLine( '; ERRORE CALC ROTAX DI ' .. vMach.sName:upper()) + EGB.WriteErrLine( 'ERR=205\nErrore nel calcolo assi rotanti di ' .. vMach.sName) + GGD.ERR = 205 + return + else + vMach.Ang.dR1N = dR1 + vMach.Ang.dR2N = dR2 + if vMach.PrepRot and + ( abs( dR1 - dPrevR1) > GEO.EPS_ANG_SMALL or abs( dR2 - dPrevR2) > GEO.EPS_ANG_SMALL) then + local sOut = 'G90G0'..'B'..EgtNumToString( dR1 - vMach.PrepRot.dR1, 3).. + 'C'..EgtNumToString( dR2 - vMach.PrepRot.dR2, 3) + EGB.WriteOutLine( sOut) + sOut = 'G90G1'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3).. + 'F'..EgtNumToString( vMach.PrepRot.dFeed, 0) + EGB.WriteOutLine( sOut) + else + local sOut = 'G90G0'..'B'..EgtNumToString( dR1, 3)..'C'..EgtNumToString( dR2, 3) + EGB.WriteOutLine( sOut) + end + dPrevR1 = dR1 + dPrevR2 = dR2 + if bTwoHeads then EGB.WriteOutLine( 'G400') end + EGB.WriteOutLine( '(UAO,0)') + -- calcolo posizione + local bLa1Ok, _, dX1, dY1, dZ1 = EgtGetCalcPositions( frMach:getOrigin(), dR1, dR2) + if not bLa1Ok then + EGB.WriteOutLine( '; ERRORE CALC UOT DI ' .. vMach.sName:upper()) + EGB.WriteErrLine( 'ERR=206\nErrore nel calcolo UOT di ' .. vMach.sName) + GGD.Err = 206 + return + end + local dX = dX1 + local dY = dY1 + local dZ = dZ1 - dCalcLen + if bTwoHeads then + EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) .. ',U' .. EgtNumToString( dX, 3) .. + ',Y' .. EgtNumToString( dY, 3) .. + ',Z' .. EgtNumToString( dZ, 3) .. ',W' .. EgtNumToString( dZ, 3) .. ')') + else + EGB.WriteOutLine( '(UOT,0,X' .. EgtNumToString( dX, 3) .. + ',Y' .. EgtNumToString( dY, 3) .. + ',Z' .. EgtNumToString( dZ, 3) .. ')') + end + -- calcolo rotazione + local bLa2Ok, _, dX2, dY2, dZ2 = EgtGetCalcPositions( frMach:getOrigin() + 100*frMach:getVersX(), dR1, dR2) + if not bLa2Ok then + EGB.WriteOutLine( '; ERRORE CALC URT DI ' .. vMach.sName:upper()) + EGB.WriteErrLine( 'ERR=207\nErrore nel calcolo URT di ' .. vMach.sName) + GGD.Err = 207 + return + end + local dAng = atan2( dY2 - dY1, dX2 - dX1) + if abs( dZ2 - dZ1) > GEO.EPS_SMALL then + EgtOutLog( 'Differenza sensibile in Z per URT :'..EgtNumToString( dZ1, 6)..'/'..EgtNumToString( dZ2, 6)) + end + EGB.WriteOutLine( '(URT,' .. EgtNumToString( dAng, 3) .. ')') + EGB.WriteOutLine( '(CLS,SUB' .. vMach.sName .. ')') + EGB.WriteOutLine( '(UAO,0)') + EGB.WriteOutLine( '(URT,0)') + end + end + -- emissione terminazione + local sEndDef = 'G79G0Z0
G79X-500Y-600C0B0
M63
M70
(GTO,CICLI,@SINGOLO=0)' + if m_vRaw.dLen < LEN_MIN_RIFLE then + WriteOutLineFromIni( 'Gunstock', 'End', sEndDef, sMachIni) + else + WriteOutLineFromIni( 'Gunstock', 'End_R', sEndDef, sMachIni) + end + EGB.WriteOutLine( 'M30') end - -- emissione terminazione - local sEndDef = 'G79G0Z0
G79X-500Y-600C0B0
M63
M70
(GTO,CICLI,@SINGOLO=0)' - if m_vRaw.dLen < LEN_MIN_RIFLE then - WriteOutLineFromIni( 'Gunstock', 'End', sEndDef, sMachIni) - else - WriteOutLineFromIni( 'Gunstock', 'End_R', sEndDef, sMachIni) - end - EGB.WriteOutLine( 'M30') -- chiusura file CNC EGB.CloseOutFile()