Compare commits

..

34 Commits

Author SHA1 Message Date
luca.mazzoleni dc02047db8 - aggiunti i messaggi da accodare ai messaggi generali 2026-06-23 13:03:35 +02:00
luca.mazzoleni 168c72af9e - in tutti i Json strategia aggiunti i campi "idDescriptionShortMsg" e "idDescriptionLongMsg" per la traduzione dei messaggi interni dell'automatismo 2026-06-23 11:46:07 +02:00
luca.mazzoleni a0ba2fb535 - correzione in BeamExec 2026-06-23 10:45:03 +02:00
luca.mazzoleni 43e2c61820 - in FaceData si usa la funzione GetAdjacentIndices dove possibile
- in FaceData si accettano, solo per le groove-3, i MainEdges per LongFaces a 5 lati
- in FACEBYCHAINSAW modifiche per rispecchiare la direzione utensile calcolata dal Cam5 e MaxElev impostata di conseguenza; invece di usare formule si provano sempre entrambe le soluzioni BlockedAxis, per contemplare tutti i casi
2026-06-22 18:29:59 +02:00
luca.mazzoleni fca53e5c4c - gestita feature Chamfer (stesse strategie di Longitudinal Cut)
- aggiunta topologia PseudoPocket 4 facce (faccia di fondo con numero indefinito di lati e facce laterali attaccate), es Birdsmouth di forme strane
- in STR0015 si gestisce SCC per minimizzare problemi di pinzaggio
- in BLADEKEEPWASTE piccola correzione
- in MachiningLib.GetSpliMachinings il sormonto tra le lavorazioni ora è corretto (MILL_OVERLAP); valutare parametro generale invece di costante macchina
2026-06-19 16:05:18 +02:00
luca.mazzoleni 987ffd30d6 - in PreSimulationLib aggiunto controllo collisione con flangia lama 2026-06-19 09:41:55 +02:00
luca.mazzoleni 30d29add83 - varie correzioni per il caso FIRST_IN_LIST
- in STR0008 se la mortasa è aperta su almeno un lato si forza lo SPIRALIN
2026-06-18 10:02:58 +02:00
luca.mazzoleni b73adc5092 Merge branch 'ObliqueNesting' into develop 2026-06-15 12:23:19 +02:00
luca.mazzoleni ab6380c1c5 - in STR0011 e 13 aggiunto SCC
- in BeamExec il clamp del MaxReprocess è portato a 5
2026-06-15 12:23:10 +02:00
luca.mazzoleni 38f834c421 Merge branch 'develop' into ObliqueNesting 2026-06-15 10:21:19 +02:00
luca.mazzoleni b0827ad72d - in BALDEKEEPWASTE piccola correzione 2026-06-15 10:21:11 +02:00
luca.mazzoleni d2669b0af9 Merge branch 'develop' into ObliqueNesting 2026-06-12 18:18:53 +02:00
luca.mazzoleni cc9a2314eb - in FACEBYCHAINSAW corretti punti di attacco per verifica finecorsa; corretto calcolo safeZ
- in MachiningLib piccola correzione alla stima lunghezza percorso sega a catena
- in STR0003 si gestisce il cambio di orientamento sega a catena in caso di lavorazione fallita (es: finecorsa); se raggio lama non finito si abbassa la qualità (SEMI)
2026-06-12 18:18:44 +02:00
luca.mazzoleni 08856faba2 - in BeamExec.GetAvailableCombinations se FlipRot e Nesting2D si disattivano le combinazioni con rotazioni; i tagli di testa ottimizzati (inclinati) si usano solo se FlipRot e Nesing2D 2026-06-12 14:23:35 +02:00
luca.mazzoleni cc949b5dd1 Merge branch 'develop' into ObliqueNesting 2026-06-11 17:41:28 +02:00
luca.mazzoleni 2cee0831d0 Merge branch 'DicingPresimDynamicRaw' into develop 2026-06-11 17:40:53 +02:00
luca.mazzoleni 4ff1405c8e - ora i tagli di testa obliqui e le informazioni per nesting obliquo sono scritte solo se il parametro GEN_bGetAlternativesNesting2D è attivo 2026-06-11 17:22:16 +02:00
luca.mazzoleni b90ef91edb Merge branch 'DicingPreSimDynamicRaw' into ObliqueNesting 2026-06-11 14:48:13 +02:00
luca.mazzoleni b8d3cd461b Merge branch 'develop' into DicingPreSimDynamicRaw 2026-06-11 14:39:52 +02:00
luca.mazzoleni c506486585 - in BLADETOWASTE.UpdateDiceRaw correzione 2026-06-11 13:08:02 +02:00
luca.mazzoleni a73c0c85ac - in PreSimulationLib si usa il grezzo dinamico per i cubetti. Modificate funzioni correlate
- in BLADETOWASTE.UpdateDiceRaw alcune correzioni
2026-06-11 13:05:06 +02:00
luca.mazzoleni fb3a5ec0be - in Process e BatchProcessNew piccola correzione 2026-06-10 18:21:08 +02:00
luca.mazzoleni e3e7537f8f Merge branch 'develop' of https://gitlab.steamware.net/egalware-cadcam/lua/databeamnew into develop 2026-06-10 18:15:24 +02:00
luca.mazzoleni eec6b50985 - in BLADETOWASTE.CalculateDiceMachinings si calcola il grezzo dinamico per la presimulazione. Da completare e gestire in presimulazione 2026-06-10 18:15:17 +02:00
andrea.villa b5cb706ad5 Aggiunto controllo su massima lunghezza pezzo processabile 2026-06-10 15:02:29 +02:00
andrea.villa 053755e583 Merge remote-tracking branch 'origin/main' into develop 2026-06-10 14:54:41 +02:00
luca.mazzoleni beedbc71f1 - in BLADETOWASTE.CalculateDiceMachinings grezzo dinamico per evitare collisioni in presimulazione, da completare 2026-06-10 09:20:37 +02:00
luca.mazzoleni 8da693817d - in BeamExec.GetFeatureInfoAndDependency correzione importante 2026-06-08 13:27:40 +02:00
luca.mazzoleni 19f35ccd61 - in BeamExec.ProcessBeams modifiche minori 2026-06-08 11:58:15 +02:00
luca.mazzoleni 0806e1bab8 Merge branch 'main' into ObliqueNesting 2026-06-08 11:17:04 +02:00
luca.mazzoleni 387eda8b4a - in BeamExec corretta ProcessBeams per i casi in cui dPosX non è definito 2026-06-08 11:16:50 +02:00
andrea.villa c7045499f4 Merge remote-tracking branch 'origin/develop' 2026-05-29 11:15:28 +02:00
andrea.villa 44478b91f0 Aggiornato log e versione 2026-05-29 11:15:09 +02:00
andrea.villa 1f4aa15af4 Aggiunto tipo fresa da cercare 2026-05-29 11:10:41 +02:00
46 changed files with 1722 additions and 221 deletions
+19 -2
View File
@@ -388,10 +388,18 @@ if bToProcess then
else else
PARTS[i].b3PartOriginal = b3Solid PARTS[i].b3PartOriginal = b3Solid
end end
if BeamData.MAX_LENGTH and BeamData.MAX_LENGTH > 10 and b3Solid:getDimX() > BeamData.MAX_LENGTH then
local sOut = 'Piece-Length (' .. EgtNumToString( b3Solid:getDimX(), 2) .. ') ' ..
'out of machine limits (' .. EgtNumToString( BeamData.MAX_LENGTH, 2) .. ') '
BEAM.ERR = 17
BEAM.MSG = sOut
WriteErrToLogFile( BEAM.ERR, BEAM.MSG)
PostErrView( BEAM.ERR, BEAM.MSG)
return
end
end end
-- Assegno lunghezza della barra -- Assegno lunghezza della barra
-- TODO nella ProcessBeams andava in errore con 10mm!!! CONTROLLARE dBarLen = PARTS[1].b3PartOriginal:getDimX() + 10
dBarLen = PARTS[1].b3PartOriginal:getDimX() + 20
if dBarLen < 2200 then if dBarLen < 2200 then
dBarLen = dBarLen + 1800 dBarLen = dBarLen + 1800
end end
@@ -448,6 +456,15 @@ if bToProcess then
else else
PARTS[i].b3PartOriginal = b3Solid PARTS[i].b3PartOriginal = b3Solid
end end
if BeamData.MAX_LENGTH and BeamData.MAX_LENGTH > 10 and b3Solid:getDimX() > BeamData.MAX_LENGTH then
local sOut = 'Piece-Length (' .. EgtNumToString( b3Solid:getDimX(), 2) .. ') ' ..
'out of machine limits (' .. EgtNumToString( BeamData.MAX_LENGTH, 2) .. ') '
BEAM.ERR = 17
BEAM.MSG = sOut
WriteErrToLogFile( BEAM.ERR, BEAM.MSG)
PostErrView( BEAM.ERR, BEAM.MSG)
return
end
end end
end end
+1
View File
@@ -252,6 +252,7 @@ local function GetStrategies_Essetre( Proc)
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- Feature : Chamfer (0-36) -- Feature : Chamfer (0-36)
elseif ID.IsChamfer( Proc) then elseif ID.IsChamfer( Proc) then
Strategies = { { sStrategyId = 'STR0002'}, { sStrategyId = 'STR0005'}, { sStrategyId = 'STR0010'}}
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- Feature : Block Haus Half Lap (0-37) -- Feature : Block Haus Half Lap (0-37)
elseif ID.IsHalfBlockHaus( Proc) then elseif ID.IsHalfBlockHaus( Proc) then
+63 -26
View File
@@ -341,6 +341,11 @@ function BeamExec.GetAvailableCombinations( PartInfo, bIsFlipRot)
nCycles = 2 nCycles = 2
end end
if bIsFlipRot and PartInfo.GeneralParameters.GEN_bGetAlternativesNesting2D then
BeamData.ROT90 = false
BeamData.ROT180 = false
end
-- verifico tutte le combinazioni che possono essere considerate -- verifico tutte le combinazioni che possono essere considerate
for nInvertIndex = 1, nCycles do for nInvertIndex = 1, nCycles do
for nUnloadPos = 1, 4 do for nUnloadPos = 1, 4 do
@@ -358,22 +363,31 @@ function BeamExec.GetAvailableCombinations( PartInfo, bIsFlipRot)
Combination.bPartInCombiIsInverted = true Combination.bPartInCombiIsInverted = true
end end
-- counter numero totale di rotazioni della combinazione
Combination.nRotationCounter = 0
-- se posizionamento iniziale attivo -- se posizionamento iniziale attivo
if string.sub( sBitIndexCombination, 1, 1) == '1' then if string.sub( sBitIndexCombination, 1, 1) == '1' then
CombinationList.Rotations[1] = 1 CombinationList.Rotations[1] = 1
Combination.nRotationCounter = Combination.nRotationCounter + 1
end end
-- se attiva rotazione 90 -- se attiva rotazione 90
if string.sub( sBitIndexCombination, 2, 2) == '1' then if string.sub( sBitIndexCombination, 2, 2) == '1' then
CombinationList.Rotations[2] = 1 CombinationList.Rotations[2] = 1
Combination.nRotationCounter = Combination.nRotationCounter + 1
end end
-- se attiva rotazione 180 -- se attiva rotazione 180
if string.sub( sBitIndexCombination, 3, 3) == '1' then if string.sub( sBitIndexCombination, 3, 3) == '1' then
CombinationList.Rotations[3] = 1 CombinationList.Rotations[3] = 1
Combination.nRotationCounter = Combination.nRotationCounter + 1
end end
-- se attiva rotazione 270 -- se attiva rotazione 270
if string.sub( sBitIndexCombination, 4, 4) == '1' then if string.sub( sBitIndexCombination, 4, 4) == '1' then
CombinationList.Rotations[4] = 1 CombinationList.Rotations[4] = 1
Combination.nRotationCounter = Combination.nRotationCounter + 1
end end
Combination.nRotationCounter = Combination.nRotationCounter - 1
end end
end end
end end
@@ -436,36 +450,47 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b
local dPartWidth = CurrentPart.b3PartOriginal:getDimY( ) local dPartWidth = CurrentPart.b3PartOriginal:getDimY( )
local dPartHeight = CurrentPart.b3PartOriginal:getDimZ( ) local dPartHeight = CurrentPart.b3PartOriginal:getDimZ( )
local dStartOffset = dNextStartOffset -- Se il pezzo corrente non ha coordinata, si calcola da OvmMid
local dEndOffset = dOvmMid if ( not CurrentPart.dPosX) then
if ( i == 1) then
CurrentPart.dPosX = dOvmHead
else
CurrentPart.dPosX = PARTS[i - 1].dPosX + PARTS[i - 1].b3PartOriginal:getDimX( ) + dOvmMid
end
end
-- LOGICA LOOK-AHEAD: Analisi del gap reale per la ripartizione specchiata -- Se il pezzo SUCCESSIVO non ha coordinata, si calcola da OvmMid
if ( i < #PARTS and not PARTS[i + 1].dPosX) then
PARTS[i + 1].dPosX = CurrentPart.dPosX + dPartLen + dOvmMid
end
local dStartOffset = dNextStartOffset
local dEndOffset = ( i == #PARTS ) and 0 or dOvmMid
-- Gap reale tra i pezzi (può essere negativo in caso di compenetrazione nesting obliqui)
if ( i < #PARTS ) then if ( i < #PARTS ) then
local dTotalGap = PARTS[i + 1].dPosX - CurrentPart.dPosX - dPartLen local dTotalGap = PARTS[i + 1].dPosX - CurrentPart.dPosX - dPartLen
if ( dTotalGap > dOvmMid ) then if ( dTotalGap > dOvmMid ) then
dEndOffset = dOvmMid -- Max 5.4mm sulla coda (lato sinistro del grezzo) dEndOffset = dOvmMid
dNextStartOffset = dTotalGap - dOvmMid -- Il residuo sulla testa del prossimo (lato destro) dNextStartOffset = dTotalGap - dOvmMid
else else
-- Gestione automatica sotto-soglia o compenetrazione geometrica (Nesting Obliquo) -- Gap minore dello spessore lama (compenetrazione per nesting obliqui)
dEndOffset = dTotalGap dEndOffset = dTotalGap
dNextStartOffset = 0 dNextStartOffset = 0
end end
end end
-- MATEMATICA CORRETTA PER X CAD INVERTITA: local dCurrentRawLen = dPartLen + dStartOffset + dEndOffset
-- Il grezzo idRaw si estende verso destra. Spostando il pezzo internamente di dEndOffset (dDelta),
-- lasciamo dEndOffset a sinistra (coda) e matematicamente dStartOffset a destra (testa).
local dCrawLen = dPartLen + dStartOffset + dEndOffset
local dDelta = dEndOffset local dDelta = dEndOffset
local dStartPos = (CurrentPart.dPosX or 0) - dStartOffset local dStartPos = CurrentPart.dPosX - dStartOffset
local bIsSectionOk = ( ( abs( dPartWidth - dRawW ) < 100 * GEO.EPS_SMALL and abs( dPartHeight - dRawH ) < 100 * GEO.EPS_SMALL ) or local bIsSectionOk = ( ( abs( dPartWidth - dRawW ) < 100 * GEO.EPS_SMALL and abs( dPartHeight - dRawH ) < 100 * GEO.EPS_SMALL ) or
( abs( dPartHeight - dRawW ) < 100 * GEO.EPS_SMALL and abs( dPartWidth - dRawH ) < 100 * GEO.EPS_SMALL ) ) ( abs( dPartHeight - dRawW ) < 100 * GEO.EPS_SMALL and abs( dPartWidth - dRawH ) < 100 * GEO.EPS_SMALL ) )
if ( bIsSectionOk and ( dStartPos + dCrawLen <= dRawL + GEO.EPS_SMALL ) ) then if ( bIsSectionOk and ( dStartPos + dCurrentRawLen <= dRawL + GEO.EPS_SMALL ) ) then
-- 5. Creazione e Posizionamento del Contenitore RawPart -- 5. Creazione e Posizionamento del Contenitore RawPart
CurrentPart.idRaw = EgtAddRawPart( Point3d( 0, 0, 0 ), dCrawLen, dRawW, dRawH, BeamData.RAWCOL ) CurrentPart.idRaw = EgtAddRawPart( Point3d( 0, 0, 0 ), dCurrentRawLen, dRawW, dRawH, BeamData.RAWCOL )
EgtMoveToCornerRawPart( CurrentPart.idRaw, BeamData.ptOriXR, BeamData.dPosXR ) EgtMoveToCornerRawPart( CurrentPart.idRaw, BeamData.ptOriXR, BeamData.dPosXR )
EgtMoveRawPart( CurrentPart.idRaw, Vector3d( -dStartPos, 0, 0 ) ) EgtMoveRawPart( CurrentPart.idRaw, Vector3d( -dStartPos, 0, 0 ) )
@@ -530,7 +555,7 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, dOvmMid, PARTS, b
CurrentPart.CombinationList = BeamExec.GetAvailableCombinations( CurrentPart, bIsFlipRot ) CurrentPart.CombinationList = BeamExec.GetAvailableCombinations( CurrentPart, bIsFlipRot )
-- Avanzamento calcolato sulla coordinata reale di fine RawPart (estremità sinistra sulla barra) -- Avanzamento calcolato sulla coordinata reale di fine RawPart (estremità sinistra sulla barra)
dMaxX = max( dMaxX, dStartPos + dCrawLen ) dMaxX = max( dMaxX, dStartPos + dCurrentRawLen )
CurrentPart.dRestLength = dRawL - dMaxX CurrentPart.dRestLength = dRawL - dMaxX
idPrevRaw = CurrentPart.idRaw idPrevRaw = CurrentPart.idRaw
else else
@@ -797,7 +822,7 @@ local function AreDrillingsMirrored( Proc, ProcMirror, Part)
end end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
local function GetFeatureInfoAndDependency( vProcSingleRot, Part) local function GetFeatureInfoAndDependency( vProcSingleRot, Part, bIsFlipRot)
-- gruppo per geometrie temporanee -- gruppo per geometrie temporanee
local idTempGroup = BeamLib.GetTempGroup() local idTempGroup = BeamLib.GetTempGroup()
@@ -809,12 +834,10 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
-- ciclo tutte le feature -- ciclo tutte le feature
for i = 1, #vProcSingleRot do for i = 1, #vProcSingleRot do
local Proc = vProcSingleRot[i] local Proc = vProcSingleRot[i]
if Proc.Topology.sName == 'HeadCut' then if not HeadProcOriginal and Proc.Topology.sName == 'HeadCut' then
HeadProcOriginal = Proc HeadProcOriginal = Proc
HeadProcOriginal.bIsOriginalHeadcut = true elseif not TailProcOriginal and Proc.Topology.sName == 'TailCut' then
elseif Proc.Topology.sName == 'TailCut' then
TailProcOriginal = Proc TailProcOriginal = Proc
TailProcOriginal.bIsOriginalTailcut = true
end end
-- se feature abilitata alla lavorazione -- se feature abilitata alla lavorazione
if Proc.nFlg ~= 0 then if Proc.nFlg ~= 0 then
@@ -829,7 +852,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
and ( FeatureLib.IsFeatureCuttingEntireSection( Proc.b3Box, Part) and FeatureLib.IsFeatureCuttingEntireSection( ProcB.b3Box, Part)) and ( FeatureLib.IsFeatureCuttingEntireSection( Proc.b3Box, Part) and FeatureLib.IsFeatureCuttingEntireSection( ProcB.b3Box, Part))
-- si trovano i veri tagli di testa e coda e si disattivano gli altri, se necessario -- si trovano i veri tagli di testa e coda e si disattivano gli altri, se necessario
if bAreBothTruncatingCuts then if Part.GeneralParameters.GEN_bGetAlternativesNesting2D and bAreBothTruncatingCuts then
-- testa -- testa
if Proc.Faces[1].vtN:getX() > GEO.EPS_SMALL and ProcB.Faces[1].vtN:getX() > GEO.EPS_SMALL then if Proc.Faces[1].vtN:getX() > GEO.EPS_SMALL and ProcB.Faces[1].vtN:getX() > GEO.EPS_SMALL then
-- il primo taglio è più verso il centro della trave -- il primo taglio è più verso il centro della trave
@@ -849,7 +872,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
ProcB.nFlg = 0 ProcB.nFlg = 0
end end
-- il secondo taglio è più verso il centro della trave -- il secondo taglio è più verso il centro della trave
elseif Proc.b3Box:getMin():getX() >= ProcB.b3Box:getMin():getX() - 10 * GEO.EPS_SMALL then else
HeadProc = ProcB HeadProc = ProcB
local idProcCopy = EgtCopyGlob( Proc.id, idTempGroup) local idProcCopy = EgtCopyGlob( Proc.id, idTempGroup)
local idProcBCopy = EgtCopyGlob( ProcB.id, idTempGroup) local idProcBCopy = EgtCopyGlob( ProcB.id, idTempGroup)
@@ -884,7 +907,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
ProcB.nFlg = 0 ProcB.nFlg = 0
end end
-- il secondo taglio è più verso il centro della trave -- il secondo taglio è più verso il centro della trave
elseif Proc.b3Box:getMax():getX() >= ProcB.b3Box:getMax():getX() - 10 * GEO.EPS_SMALL then else
TailProc = ProcB TailProc = ProcB
local idProcCopy = EgtCopyGlob( Proc.id, idTempGroup) local idProcCopy = EgtCopyGlob( Proc.id, idTempGroup)
local idProcBCopy = EgtCopyGlob( ProcB.id, idTempGroup) local idProcBCopy = EgtCopyGlob( ProcB.id, idTempGroup)
@@ -911,6 +934,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
table.insert( Proc.SlaveProcIndexes, j) table.insert( Proc.SlaveProcIndexes, j)
ProcB.nIndexMasterProc = i ProcB.nIndexMasterProc = i
ProcB.nFlg = 0 ProcB.nFlg = 0
HeadProcOriginal = Proc
end end
-- se entrambi tagli di coda, si tiene sempre il primo ( ma non quello aggiunto dall'automatismo) -- se entrambi tagli di coda, si tiene sempre il primo ( ma non quello aggiunto dall'automatismo)
if ( ID.IsTailCut( Proc) and not EgtGetInfo( Proc.id, 'HEAD_ADD_CUT', 'i')) and ID.IsTailCut( ProcB) then if ( ID.IsTailCut( Proc) and not EgtGetInfo( Proc.id, 'HEAD_ADD_CUT', 'i')) and ID.IsTailCut( ProcB) then
@@ -920,6 +944,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
table.insert( Proc.SlaveProcIndexes, j) table.insert( Proc.SlaveProcIndexes, j)
ProcB.nIndexMasterProc = i ProcB.nIndexMasterProc = i
ProcB.nFlg = 0 ProcB.nFlg = 0
TailProcOriginal = Proc
end end
-- verifico se feature tipo LapJoint è attraversata da almeno un foro -- verifico se feature tipo LapJoint è attraversata da almeno un foro
if ( Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Groove' or ID.IsMortise( Proc)) and if ( Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Groove' or ID.IsMortise( Proc)) and
@@ -941,12 +966,24 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
end end
end end
if not Part.GeneralParameters.GEN_bGetAlternativesNesting2D then
return vProcSingleRot
end
-- si tiene via il riferimento alla Proc Head/Tail originale in caso si dovesse rimpiazzare
HeadProcOriginal.bIsOriginalHeadcut = true
TailProcOriginal.bIsOriginalTailcut = true
if not HeadProc then if not HeadProc then
HeadProc = HeadProcOriginal HeadProc = HeadProcOriginal
else
HeadProc.HeadProcOriginal = HeadProcOriginal
end end
if not TailProc then if not TailProc then
TailProc = TailProcOriginal TailProc = TailProcOriginal
else
TailProc.TailProcOriginal = TailProcOriginal
end end
HeadProc.Topology = {} HeadProc.Topology = {}
TailProc.Topology = {} TailProc.Topology = {}
HeadProc.Topology.sFamily = 'HeadCut' HeadProc.Topology.sFamily = 'HeadCut'
@@ -968,7 +1005,7 @@ local function GetFeatureInfoAndDependency( vProcSingleRot, Part)
local PtSortedTail = BeamLib.GetSortedVertices( TailProc) local PtSortedTail = BeamLib.GetSortedVertices( TailProc)
if PtSortedTail then if PtSortedTail then
TailcutInfo.OffsetX = {} TailcutInfo.OffsetX = {}
for i = 1, #PtSortedHead do for i = 1, #PtSortedTail do
table.insert( TailcutInfo.OffsetX, Part.b3Part:getMin():getX() - PtSortedTail[i]:getX()) table.insert( TailcutInfo.OffsetX, Part.b3Part:getMin():getX() - PtSortedTail[i]:getX())
end end
end end
@@ -1136,7 +1173,7 @@ local function CalculateStrategies( vProcSingleRot, Part)
end end
Proc.AvailableStrategies.dAllStrategiesTotalTime = Proc.AvailableStrategies.dAllStrategiesTotalTime + Proc.AvailableStrategies[nIndexCurrentStrategy].Result.dTimeToMachine Proc.AvailableStrategies.dAllStrategiesTotalTime = Proc.AvailableStrategies.dAllStrategiesTotalTime + Proc.AvailableStrategies[nIndexCurrentStrategy].Result.dTimeToMachine
-- se scelta strategia in modalità base o standard, esco subito alla prima che trovo completa -- se scelta strategia in modalità base o standard, esco subito alla prima che trovo completa
if Part.GeneralParameters.GEN_sMachiningStrategy == 'FIRST_IN_LIST' and Proc.AvailableStrategies[nIndexCurrentStrategy].Result.sStatus == 'Complete' then if Part.GeneralParameters.GEN_sMachiningStrategy == 'FIRST_IN_LIST' and Proc.AvailableStrategies[nIndexCurrentStrategy].Result.sStatus == 'Completed' then
break break
end end
@@ -1416,7 +1453,7 @@ function BeamExec.GetProcessings( PARTS, bIsFlipRot)
-- recupero informazioni ausiliarie feature e dipendenze tra feature stesse -- recupero informazioni ausiliarie feature e dipendenze tra feature stesse
-- TODO le dipendenze cambiano in base alla rotazione del pezzo? probabilmente no -- TODO le dipendenze cambiano in base alla rotazione del pezzo? probabilmente no
vProcRot[nIndex], HeadcutInfo, TailcutInfo = GetFeatureInfoAndDependency( vProcRot[nIndex], PARTS[nPart]) vProcRot[nIndex], HeadcutInfo, TailcutInfo = GetFeatureInfoAndDependency( vProcRot[nIndex], PARTS[nPart], bIsFlipRot)
else else
-- inserisco una tabella vuota -- inserisco una tabella vuota
table.insert( vProcRot, {}) table.insert( vProcRot, {})
@@ -1803,7 +1840,7 @@ function BeamExec.ProcessMachinings( PARTS, bIsFlipRot)
-- ricerca strategia di lavorazione per ogni pezzo e applicazione lavorazioni -- ricerca strategia di lavorazione per ogni pezzo e applicazione lavorazioni
for nPart = 1, #PARTS do for nPart = 1, #PARTS do
local nCycles = 1 local nCycles = 1
local nMaxReProcessCycles = EgtClamp( PARTS[nPart].GeneralParameters.GEN_nMaxReProcessCycles, 1, 3) local nMaxReProcessCycles = EgtClamp( PARTS[nPart].GeneralParameters.GEN_nMaxReProcessCycles, 1, 5)
-- la parte di applicazione lavorazioni può essere lanciata più volte in caso della presenza di errori -- la parte di applicazione lavorazioni può essere lanciata più volte in caso della presenza di errori
local bProcess = true local bProcess = true
+2 -2
View File
@@ -615,8 +615,8 @@ function BeamLib.GetAdjacentIndices( nCurrentIndex, nMaxIndex)
end end
-- circular indexing 1-based -- circular indexing 1-based
nPreviousIndex = ((nCurrentIndex - 2 + nMaxIndex) % nMaxIndex) + 1 nPreviousIndex = ( ( nCurrentIndex - 2 + nMaxIndex) % nMaxIndex) + 1
nNextIndex = (nCurrentIndex % nMaxIndex) + 1 nNextIndex = ( nCurrentIndex % nMaxIndex) + 1
return nPreviousIndex, nNextIndex return nPreviousIndex, nNextIndex
end end
+24 -36
View File
@@ -116,14 +116,8 @@ function FaceData.GetEdgesInfo( ProcOrId, idFace )
local nFaceType, EdgesEgt = EgtSurfTmGetFacetOutlineInfo( Proc.id, idFace, GDB_ID.ROOT) local nFaceType, EdgesEgt = EgtSurfTmGetFacetOutlineInfo( Proc.id, idFace, GDB_ID.ROOT)
for i = 1, #EdgesEgt do for i = 1, #EdgesEgt do
local nPreviousEdgeIndex = i - 1
if i == 1 then local nPreviousEdgeIndex, nNextEdgeIndex = BeamLib.GetAdjacentIndices( i, #EdgesEgt)
nPreviousEdgeIndex = #EdgesEgt
end
local nNextEdgeIndex = i + 1
if i == #EdgesEgt then
nNextEdgeIndex = 1
end
-- l'elevazione si tiene sempre positiva e la normale sempre diretta verso l'interno della faccia -- l'elevazione si tiene sempre positiva e la normale sempre diretta verso l'interno della faccia
-- per sapere se il lato è aperto c'è la proprietà apposita bIsOpen -- per sapere se il lato è aperto c'è la proprietà apposita bIsOpen
@@ -143,6 +137,8 @@ function FaceData.GetEdgesInfo( ProcOrId, idFace )
CurrentEdge.vtEdge = CurrentEdge.ptEnd - CurrentEdge.ptStart ; CurrentEdge.vtEdge:normalize() CurrentEdge.vtEdge = CurrentEdge.ptEnd - CurrentEdge.ptStart ; CurrentEdge.vtEdge:normalize()
CurrentEdge.sType = 'Standard' CurrentEdge.sType = 'Standard'
CurrentEdge.id = i - 1 CurrentEdge.id = i - 1
CurrentEdge.nPreviousEdgeIndex = nPreviousEdgeIndex
CurrentEdge.nNextEdgeIndex = nNextEdgeIndex
-- se nella Proc ci sono le adiacenze e il lato ha adiacenza, si salva l'angolo con la faccia adiacente -- se nella Proc ci sono le adiacenze e il lato ha adiacenza, si salva l'angolo con la faccia adiacente
if Proc.AdjacencyMatrix then if Proc.AdjacencyMatrix then
@@ -369,7 +365,8 @@ local function GetBottomFaces( Proc)
if Proc.Topology.sFamily == 'Tunnel' then if Proc.Topology.sFamily == 'Tunnel' then
return nil return nil
elseif not ( Proc.Topology.sFamily == 'Rabbet' elseif not ( Proc.Topology.sFamily == 'PseudoPocket'
or Proc.Topology.sFamily == 'Rabbet'
or Proc.Topology.sFamily == 'VGroove' or Proc.Topology.sFamily == 'VGroove'
or Proc.Topology.sFamily == 'Groove' or Proc.Topology.sFamily == 'Groove'
or Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Pocket'
@@ -450,14 +447,7 @@ local function GetBottomFaces( Proc)
end end
for i = 1, #BottomFaces[1].Edges do for i = 1, #BottomFaces[1].Edges do
local nPreviousEdgeIndex = i - 1 local nPreviousEdgeIndex, nNextEdgeIndex = BeamLib.GetAdjacentIndices( i, #BottomFaces[1].Edges)
if i == 1 then
nPreviousEdgeIndex = #BottomFaces[1].Edges
end
local nNextEdgeIndex = i + 1
if i == #BottomFaces[1].Edges then
nNextEdgeIndex = 1
end
local CurrentEdge = {} local CurrentEdge = {}
CurrentEdge.idAdjacentFace = BottomFaces[1].Edges[i].idAdjacentFace CurrentEdge.idAdjacentFace = BottomFaces[1].Edges[i].idAdjacentFace
@@ -471,6 +461,8 @@ local function GetBottomFaces( Proc)
CurrentEdge.ptEnd = BottomFaces[1].Edges[i].ptEnd CurrentEdge.ptEnd = BottomFaces[1].Edges[i].ptEnd
CurrentEdge.vtEdge = BottomFaces[1].Edges[i].vtEdge CurrentEdge.vtEdge = BottomFaces[1].Edges[i].vtEdge
CurrentEdge.id = BottomFaces[1].Edges[i].id CurrentEdge.id = BottomFaces[1].Edges[i].id
CurrentEdge.nPreviousEdgeIndex = BottomFaces[1].Edges[i].nPreviousEdgeIndex
CurrentEdge.nNextEdgeIndex = BottomFaces[1].Edges[i].nNextEdgeIndex
if nFirstLongEdgeIndex then if nFirstLongEdgeIndex then
if i == nFirstLongEdgeIndex then if i == nFirstLongEdgeIndex then
@@ -539,8 +531,8 @@ local function GetLongFaces( Proc, MainFaces)
for i = 1, #LongFaces do for i = 1, #LongFaces do
LongFaces[i].sType = 'Long' LongFaces[i].sType = 'Long'
-- calcolo MainEdges possibile solo se 4 lati esatti -- calcolo MainEdges possibile solo se 4 lati esatti e caso speciale lato opposto groove tagliato
if #LongFaces[i].Edges ~= 4 then if #LongFaces[i].Edges ~= 4 and not ( #LongFaces[i].Edges == 5 and Proc.Topology.sName == 'Groove-3-Through') then
break break
end end
@@ -549,14 +541,7 @@ local function GetLongFaces( Proc, MainFaces)
LongFaces[i].MainEdges.OppositeEdges = {} LongFaces[i].MainEdges.OppositeEdges = {}
for j = 1, #LongFaces[i].Edges do for j = 1, #LongFaces[i].Edges do
local nPreviousEdgeIndex = j - 1 local nPreviousEdgeIndex, nNextEdgeIndex = BeamLib.GetAdjacentIndices( j, #LongFaces[i].Edges)
if j == 1 then
nPreviousEdgeIndex = #LongFaces[1].Edges
end
local nNextEdgeIndex = j + 1
if j == #LongFaces[i].Edges then
nNextEdgeIndex = 1
end
local CurrentEdge = {} local CurrentEdge = {}
CurrentEdge.idAdjacentFace = LongFaces[i].Edges[j].idAdjacentFace CurrentEdge.idAdjacentFace = LongFaces[i].Edges[j].idAdjacentFace
@@ -570,6 +555,8 @@ local function GetLongFaces( Proc, MainFaces)
CurrentEdge.ptEnd = LongFaces[i].Edges[j].ptEnd CurrentEdge.ptEnd = LongFaces[i].Edges[j].ptEnd
CurrentEdge.vtEdge = LongFaces[i].Edges[j].vtEdge CurrentEdge.vtEdge = LongFaces[i].Edges[j].vtEdge
CurrentEdge.id = LongFaces[i].Edges[j].id CurrentEdge.id = LongFaces[i].Edges[j].id
CurrentEdge.nPreviousEdgeIndex = LongFaces[i].Edges[j].nPreviousEdgeIndex
CurrentEdge.nNextEdgeIndex = LongFaces[i].Edges[j].nNextEdgeIndex
if Proc.Topology.sFamily == 'Tunnel' then if Proc.Topology.sFamily == 'Tunnel' then
if CurrentEdge.idAdjacentFace > -1 then if CurrentEdge.idAdjacentFace > -1 then
@@ -595,6 +582,12 @@ local function GetLongFaces( Proc, MainFaces)
end end
end end
end end
-- il primo OppositeEdge deve essere sempre il più lungo, se più di uno
if #LongFaces[i].MainEdges.OppositeEdges > 1 then
if LongFaces[i].MainEdges.OppositeEdges[1].dLength < LongFaces[i].MainEdges.OppositeEdges[2].dLength - 10 * GEO.EPS_SMALL then
LongFaces[i].MainEdges.OppositeEdges[1], LongFaces[i].MainEdges.OppositeEdges[2] = LongFaces[i].MainEdges.OppositeEdges[2], LongFaces[i].MainEdges.OppositeEdges[1]
end
end
end end
return LongFaces return LongFaces
@@ -649,14 +642,7 @@ local function GetSideFaces( Proc, MainFaces)
SideFaces[i].MainEdges.OppositeEdges = {} SideFaces[i].MainEdges.OppositeEdges = {}
for j = 1, #SideFaces[i].Edges do for j = 1, #SideFaces[i].Edges do
local nPreviousEdgeIndex = j - 1 local nPreviousEdgeIndex, nNextEdgeIndex = BeamLib.GetAdjacentIndices( j, #SideFaces[i].Edges)
if j == 1 then
nPreviousEdgeIndex = #SideFaces[1].Edges
end
local nNextEdgeIndex = j + 1
if j == #SideFaces[i].Edges then
nNextEdgeIndex = 1
end
local CurrentEdge = {} local CurrentEdge = {}
CurrentEdge.idAdjacentFace = SideFaces[i].Edges[j].idAdjacentFace CurrentEdge.idAdjacentFace = SideFaces[i].Edges[j].idAdjacentFace
@@ -670,6 +656,8 @@ local function GetSideFaces( Proc, MainFaces)
CurrentEdge.ptEnd = SideFaces[i].Edges[j].ptEnd CurrentEdge.ptEnd = SideFaces[i].Edges[j].ptEnd
CurrentEdge.vtEdge = SideFaces[i].Edges[j].vtEdge CurrentEdge.vtEdge = SideFaces[i].Edges[j].vtEdge
CurrentEdge.id = SideFaces[i].Edges[j].id CurrentEdge.id = SideFaces[i].Edges[j].id
CurrentEdge.nPreviousEdgeIndex = SideFaces[i].Edges[j].nPreviousEdgeIndex
CurrentEdge.nNextEdgeIndex = SideFaces[i].Edges[j].nNextEdgeIndex
if Proc.Topology.sFamily == 'Tunnel' then if Proc.Topology.sFamily == 'Tunnel' then
if CurrentEdge.idAdjacentFace > -1 then if CurrentEdge.idAdjacentFace > -1 then
@@ -706,7 +694,7 @@ function FaceData.GetMainFaces( Proc, Part)
local MainFaces = {} local MainFaces = {}
-- CASO 1 : Feature tipo LapJoint -- CASO 1 : Feature tipo LapJoint
if Proc.Topology.sFamily == 'Rabbet' or Proc.Topology.sFamily == 'VGroove' or Proc.Topology.sFamily == 'Groove' or if Proc.Topology.sFamily == 'PseudoPocket' or Proc.Topology.sFamily == 'Rabbet' or Proc.Topology.sFamily == 'VGroove' or Proc.Topology.sFamily == 'Groove' or
Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Bevel' or Proc.Topology.sFamily == 'Pocket' or Proc.Topology.sFamily == 'Tunnel' or Proc.Topology.sFamily == 'Bevel' or
Proc.Topology.sFamily == 'DoubleBevel' or Proc.Topology.sFamily == 'Cut' or Proc.Topology.sFamily == 'HeadCut' or Proc.Topology.sFamily == 'TailCut' then Proc.Topology.sFamily == 'DoubleBevel' or Proc.Topology.sFamily == 'Cut' or Proc.Topology.sFamily == 'HeadCut' or Proc.Topology.sFamily == 'TailCut' then
+7 -1
View File
@@ -255,6 +255,9 @@ function FeatureLib.ClassifyTopology( Proc, Part)
elseif Proc.nFct == 4 and bAllAnglesConcave and #vFacesByAdjNumber[2] == 4 and bIsAnyDimensionLongAsPart then elseif Proc.nFct == 4 and bAllAnglesConcave and #vFacesByAdjNumber[2] == 4 and bIsAnyDimensionLongAsPart then
sFamily = 'Tunnel' sFamily = 'Tunnel'
bIsThrough = true bIsThrough = true
elseif Proc.nFct == 4 and bAllAnglesConcave and #vFacesByAdjNumber[3] == 1 then
sFamily = 'PseudoPocket'
bIsThrough = false
elseif Proc.nFct >= 4 and #vFacesByAdjNumber[1] == 2 and bIsAnyDimensionLongAsPart then elseif Proc.nFct >= 4 and #vFacesByAdjNumber[1] == 2 and bIsAnyDimensionLongAsPart then
sFamily = 'Strip' sFamily = 'Strip'
bIsThrough = true bIsThrough = true
@@ -764,6 +767,9 @@ function FeatureLib.CalculateStrategiesCompositeRating( AvailableStrategies, sMa
AvailableStrategies[n].Result.dCompositeRating = dQuality + dCompletion + dTime -- TODO da verificare se meglio sommare o moltiplicare gli indici AvailableStrategies[n].Result.dCompositeRating = dQuality + dCompletion + dTime -- TODO da verificare se meglio sommare o moltiplicare gli indici
else else
if not AvailableStrategies[n].Result then
AvailableStrategies[n].Result = {}
end
AvailableStrategies[n].Result.dCompositeRating = 0 AvailableStrategies[n].Result.dCompositeRating = 0
end end
end end
@@ -857,7 +863,7 @@ function FeatureLib.GetFeatureSplittingPoints( Proc, Part, OptionalParameters)
if Part.dRestLength + Part.b3Part:getDimX() < BeamData.dMinRaw * 1.5 then if Part.dRestLength + Part.b3Part:getDimX() < BeamData.dMinRaw * 1.5 then
dSplitXLeft = Part.b3Part:getMax():getX() - ( ( Part.dRestLength + Part.b3Part:getDimX()) / 2) dSplitXLeft = Part.b3Part:getMax():getX() - ( ( Part.dRestLength + Part.b3Part:getDimX()) / 2)
else else
dSplitXLeft = max( Proc.b3Box:getMin():getX() + ( BeamData.dMinRaw)/2 + 150, Part.b3Part:getMax():getX() - dMaxSegmentLengthOnEdges) dSplitXLeft = max( Proc.b3Box:getMin():getX() + ( BeamData.dMinRaw) / 2 + 150, Part.b3Part:getMax():getX() - dMaxSegmentLengthOnEdges)
end end
end end
dFeatureCentralLength = abs( dSplitXRight - dSplitXLeft) dFeatureCentralLength = abs( dSplitXRight - dSplitXLeft)
+11 -11
View File
@@ -169,20 +169,20 @@ function MachiningLib.GetSplitMachinings( Machinings, SplittingPoints, Part)
dStartAddLength, dEndAddLength = dEndAddLength, dStartAddLength dStartAddLength, dEndAddLength = dEndAddLength, dStartAddLength
end end
if j == 1 then if j == 1 then
dEndAddLength = - ( SplittingPoints[j]:getX() - dEdgeMinX) + BeamData.MILL_OVERLAP dEndAddLength = - ( SplittingPoints[j]:getX() - dEdgeMinX) + BeamData.MILL_OVERLAP / 2
if LeadOutForSplit then if LeadOutForSplit then
Machinings[nCurrentMachiningIndex].LeadOut = BeamLib.TableCopyDeep( LeadOutForSplit) Machinings[nCurrentMachiningIndex].LeadOut = BeamLib.TableCopyDeep( LeadOutForSplit)
end end
Machinings[nCurrentMachiningIndex].ptCenter = Point3d( SplittingPoints[j]:getX() + ( dEdgeMaxX - SplittingPoints[j]:getX()) / 2, 0, 0) Machinings[nCurrentMachiningIndex].ptCenter = Point3d( SplittingPoints[j]:getX() + ( dEdgeMaxX - SplittingPoints[j]:getX()) / 2, 0, 0)
elseif j == nParts then elseif j == nParts then
dStartAddLength = - ( dEdgeMaxX - SplittingPoints[j - 1]:getX()) + BeamData.MILL_OVERLAP dStartAddLength = - ( dEdgeMaxX - SplittingPoints[j - 1]:getX()) + BeamData.MILL_OVERLAP / 2
if LeadInForSplit then if LeadInForSplit then
Machinings[nCurrentMachiningIndex].LeadIn = BeamLib.TableCopyDeep( LeadInForSplit) Machinings[nCurrentMachiningIndex].LeadIn = BeamLib.TableCopyDeep( LeadInForSplit)
end end
Machinings[nCurrentMachiningIndex].ptCenter = Point3d( dEdgeMinX + ( SplittingPoints[j - 1]:getX() - dEdgeMinX) / 2, 0, 0) Machinings[nCurrentMachiningIndex].ptCenter = Point3d( dEdgeMinX + ( SplittingPoints[j - 1]:getX() - dEdgeMinX) / 2, 0, 0)
else else
dStartAddLength = - ( dEdgeMaxX - SplittingPoints[j - 1]:getX()) + BeamData.MILL_OVERLAP dStartAddLength = - ( dEdgeMaxX - SplittingPoints[j - 1]:getX()) + BeamData.MILL_OVERLAP / 2
dEndAddLength = - ( SplittingPoints[j]:getX() - dEdgeMinX) + BeamData.MILL_OVERLAP dEndAddLength = - ( SplittingPoints[j]:getX() - dEdgeMinX) + BeamData.MILL_OVERLAP / 2
if LeadInForSplit then if LeadInForSplit then
Machinings[nCurrentMachiningIndex].LeadIn = BeamLib.TableCopyDeep( LeadInForSplit) Machinings[nCurrentMachiningIndex].LeadIn = BeamLib.TableCopyDeep( LeadInForSplit)
end end
@@ -347,7 +347,7 @@ local function TestEngagement( sBladeEngagement, Parameters, OptionalParameters)
return false return false
end end
-- lavorazione in collisione con il pezzo: non fattibile -- lavorazione in collisione con il pezzo: non fattibile
local bCollisionFound, bMoveAfterSplit = PreSimulationLib.CheckCollision( sBladeEngagement, CheckCollisionParameters, CheckCollisionOptionalParameters) local bCollisionFound, bMoveAfterSplit = PreSimulationLib.CheckCollision( CheckCollisionParameters, CheckCollisionOptionalParameters)
if bCollisionFound then if bCollisionFound then
return false return false
end end
@@ -373,7 +373,7 @@ local function TestEngagement( sBladeEngagement, Parameters, OptionalParameters)
CheckCollisionOptionalParameters.PointsToCheck = {} CheckCollisionOptionalParameters.PointsToCheck = {}
table.insert( CheckCollisionOptionalParameters.PointsToCheck, PerpendicularLeadInOut.LeadIn.ptPoint) table.insert( CheckCollisionOptionalParameters.PointsToCheck, PerpendicularLeadInOut.LeadIn.ptPoint)
table.insert( CheckCollisionOptionalParameters.PointsToCheck, PerpendicularLeadInOut.LeadOut.ptPoint) table.insert( CheckCollisionOptionalParameters.PointsToCheck, PerpendicularLeadInOut.LeadOut.ptPoint)
local bCollisionFoundPerpendicular, bMoveAfterSplitPerpendicular = PreSimulationLib.CheckCollision( sBladeEngagement, CheckCollisionParameters, CheckCollisionOptionalParameters) local bCollisionFoundPerpendicular, bMoveAfterSplitPerpendicular = PreSimulationLib.CheckCollision( CheckCollisionParameters, CheckCollisionOptionalParameters)
-- attacco perpendicolare possibile -- attacco perpendicolare possibile
if not bCollisionFoundPerpendicular then if not bCollisionFoundPerpendicular then
LeadInOut.Perpendicular = PerpendicularLeadInOut LeadInOut.Perpendicular = PerpendicularLeadInOut
@@ -403,7 +403,7 @@ local function TestEngagement( sBladeEngagement, Parameters, OptionalParameters)
CheckCollisionOptionalParameters.PointsToCheck = {} CheckCollisionOptionalParameters.PointsToCheck = {}
table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadIn.ptPoint) table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadIn.ptPoint)
table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadOut.ptPoint) table.insert( CheckCollisionOptionalParameters.PointsToCheck, TangentLeadInOut.LeadOut.ptPoint)
local bCollisionFoundTangent, bMoveAfterSplitTangent = PreSimulationLib.CheckCollision( sBladeEngagement, CheckCollisionParameters, CheckCollisionOptionalParameters) local bCollisionFoundTangent, bMoveAfterSplitTangent = PreSimulationLib.CheckCollision( CheckCollisionParameters, CheckCollisionOptionalParameters)
-- attacco tangenziale possibile -- attacco tangenziale possibile
if not bCollisionFoundTangent then if not bCollisionFoundTangent then
LeadInOut.Tangent = TangentLeadInOut LeadInOut.Tangent = TangentLeadInOut
@@ -625,7 +625,7 @@ function MachiningLib.FindBlade( Proc, ToolSearchParameters)
local bForceLongcutBlade = ToolSearchParameters.bForceLongcutBlade or false local bForceLongcutBlade = ToolSearchParameters.bForceLongcutBlade or false
local EdgeToMachine = ToolSearchParameters.EdgeToMachine local EdgeToMachine = ToolSearchParameters.EdgeToMachine
local Part = ToolSearchParameters.Part local Part = ToolSearchParameters.Part
local bIsDicing = ToolSearchParameters.bIsDicing or false local idCheckCollisionTm = ToolSearchParameters.idCheckCollisionTm
local sRestLengthSideForPreSimulation = ToolSearchParameters.sRestLengthSideForPreSimulation or 'Tail' local sRestLengthSideForPreSimulation = ToolSearchParameters.sRestLengthSideForPreSimulation or 'Tail'
local bCannotSplitRestLength = ToolSearchParameters.bCannotSplitRestLength or false local bCannotSplitRestLength = ToolSearchParameters.bCannotSplitRestLength or false
local bDisableRealElevationCheck = ToolSearchParameters.bDisableRealElevationCheck or false local bDisableRealElevationCheck = ToolSearchParameters.bDisableRealElevationCheck or false
@@ -660,7 +660,7 @@ function MachiningLib.FindBlade( Proc, ToolSearchParameters)
dDepthToMachine = min( dElevation, TOOLS[i].dMaxDepth) dDepthToMachine = min( dElevation, TOOLS[i].dMaxDepth)
} }
local BladeEngagementOptionalParameters = { local BladeEngagementOptionalParameters = {
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength, bCannotSplitRestLength = bCannotSplitRestLength,
bDisableRealElevationCheck = bDisableRealElevationCheck bDisableRealElevationCheck = bDisableRealElevationCheck
@@ -1584,8 +1584,8 @@ function MachiningLib.GetTimeToMachineAllStepsWithLeadInOut( Machining, Part)
Machining.CloneStepsLongitudinal.nCount = 1 Machining.CloneStepsLongitudinal.nCount = 1
end end
-- stima tempi di lavorazione per i diversi tratti -- stima tempi di lavorazione per i diversi tratti
local dTimeToMachineLeadIn = ( Machining.dDepthToMachine + ( TOOLS[Machining.nToolIndex].SetupInfo.dZSafeDelta or 60) + EgtMdbGetGeneralParam( MCH_GP.SAFEZ)) / dToolStartFeed local dTimeToMachineLeadIn = ( Machining.dDepthToMachine + ( TOOLS[Machining.nToolIndex].SetupInfo.dZSafeDelta or 0) + EgtMdbGetGeneralParam( MCH_GP.SAFEZ)) / dToolStartFeed
local dTimeToMachineLeadOut = ( Machining.dDepthToMachine + ( TOOLS[Machining.nToolIndex].SetupInfo.dZSafeDelta or 60) + EgtMdbGetGeneralParam( MCH_GP.SAFEZ)) / dToolEndFeed local dTimeToMachineLeadOut = ( Machining.dDepthToMachine + ( TOOLS[Machining.nToolIndex].SetupInfo.dZSafeDelta or 0) + EgtMdbGetGeneralParam( MCH_GP.SAFEZ)) / dToolEndFeed
local dTimeToMachineEdge = Machining.dLengthToMachine / dToolFeed local dTimeToMachineEdge = Machining.dLengthToMachine / dToolFeed
-- calcolo lunghezze e tempi -- calcolo lunghezze e tempi
if Machining.Steps.nStepType == MCH_MILL_ST.ZIGZAG then if Machining.Steps.nStepType == MCH_MILL_ST.ZIGZAG then
+43 -35
View File
@@ -209,12 +209,6 @@ local function CheckOutOfStrokePoint( ptOnToolTipCenter, vtHead, nSCC, Tool, vtA
return true return true
end end
-- EgtSetAxisPos( 'T', dT)
-- EgtSetAxisPos( 'Y', dY)
-- EgtSetAxisPos( 'Z', dZ)
-- EgtSetAxisPos( 'C', dC1)
-- EgtSetAxisPos( 'A', dA1)
-- se si arriva qui, il punto non è in finecorsa -- se si arriva qui, il punto non è in finecorsa
return false return false
end end
@@ -292,7 +286,7 @@ local function MoveMachineAxesToPosition( ptOnToolTipCenter, vtHead, vtAux)
local AxesNames = EgtGetAllCurrAxesNames() local AxesNames = EgtGetAllCurrAxesNames()
local dTHome = EgtGetAxisHomePos( AxesNames[1]) local dTHome = EgtGetAxisHomePos( AxesNames[1])
-- spostamento assi in posizione (la T non si sposta perchè si sposta il pezzo) -- spostamento assi in posizione (la T non si sposta perchè si sposta direttamente la testa)
EgtSetAxisPos( AxesNames[2], dLinear2) EgtSetAxisPos( AxesNames[2], dLinear2)
EgtSetAxisPos( AxesNames[3], dLinear3) EgtSetAxisPos( AxesNames[3], dLinear3)
EgtSetAxisPos( AxesNames[4], dRotative1) EgtSetAxisPos( AxesNames[4], dRotative1)
@@ -305,7 +299,7 @@ local function MoveMachineAxesToPosition( ptOnToolTipCenter, vtHead, vtAux)
end end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
local function CheckCollisionPoint( sAxis, ptOnToolTipCenter, vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, bCheckOnlyRestlength) local function CheckCollisionPoint( sAxis, ptOnToolTipCenter, vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, idCheckCollisionTm, idAddedCollisionSurfTm)
-- spostamento assi macchina in posizione -- spostamento assi macchina in posizione
local dDeltaXHeadOffset = MoveMachineAxesToPosition( ptOnToolTipCenter, vtHead, vtAux) local dDeltaXHeadOffset = MoveMachineAxesToPosition( ptOnToolTipCenter, vtHead, vtAux)
@@ -334,35 +328,39 @@ local function CheckCollisionPoint( sAxis, ptOnToolTipCenter, vtHead, vtAux, Par
end end
end end
end end
-- se presente si aggiunge la geometria opzionale (es: flangia lama)
if idAddedCollisionSurfTm then
table.insert( CollisionSurfTmId, idAddedCollisionSurfTm)
end
-- check collisione con pezzo -- check collisione con pezzo
local bCollisionFoundPiece = false local bCollisionFoundPiece = false
if not bCheckOnlyRestlength then if not idCheckCollisionTm then
local idCheckCollisionTm = Part.idBoxTm idCheckCollisionTm = Part.idBoxTm
-- se testa o coda attaccate, si considerano nella superficie di collisione -- se testa o coda attaccate, si considerano nella superficie di collisione
if bCannotSplitRestLength then if bCannotSplitRestLength then
local b3CheckCollision = BeamLib.GetPartBoxWithHeadTail( Part, sRestLengthSideForPreSimulation) local b3CheckCollision = BeamLib.GetPartBoxWithHeadTail( Part, sRestLengthSideForPreSimulation)
idCheckCollisionTm = EgtSurfTmBBox( Part.idTempGroup, b3CheckCollision, false, GDB_RT.GLOB) idCheckCollisionTm = EgtSurfTmBBox( Part.idTempGroup, b3CheckCollision, false, GDB_RT.GLOB)
end end
for i = 1, #CollisionSurfTmId do end
bCollisionFoundPiece = EgtCDeSolidSolid( idCheckCollisionTm, CollisionSurfTmId[i], BeamData.COLL_SIC) for i = 1, #CollisionSurfTmId do
if not type( bCollisionFoundPiece) == "boolean" then bCollisionFoundPiece = EgtCDeSolidSolid( idCheckCollisionTm, CollisionSurfTmId[i], BeamData.COLL_SIC)
error( 'Presimulation fail') if not type( bCollisionFoundPiece) == "boolean" then
end error( 'Presimulation fail')
if EgtGetDebugLevel() >= 3 and bCollisionFoundPiece then
EgtSetColor( CollisionSurfTmId[i], RED())
end
if bCollisionFoundPiece then
break
end
end end
if EgtGetDebugLevel() >= 3 and bCollisionFoundPiece then
EgtSetColor( CollisionSurfTmId[i], RED())
end
if bCollisionFoundPiece then
break
end
end
-- se trovata collisione con pezzo è inutile procedere con il grezzo -- se trovata collisione con pezzo è inutile procedere con il grezzo
if bCollisionFoundPiece then if bCollisionFoundPiece then
return true return true
end end
end
-- check collisione con grezzo restante, se con il pezzo non c'è collisione e non è un taglio di testa o coda -- check collisione con grezzo restante, se con il pezzo non c'è collisione e non è un taglio di testa o coda
local bCollisionFoundRestLength = false local bCollisionFoundRestLength = false
@@ -401,7 +399,7 @@ local function CheckCollisionWithAxis( sAxis, MachiningParameters, OptionalParam
-- parametri opzionali -- parametri opzionali
OptionalParameters = OptionalParameters or {} OptionalParameters = OptionalParameters or {}
local bCheckOnlyRestlength = OptionalParameters.bCheckOnlyRestlength or false local idCheckCollisionTm = OptionalParameters.idCheckCollisionTm
local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail' local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail'
local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false
local vtAux = OptionalParameters.vtAux local vtAux = OptionalParameters.vtAux
@@ -426,7 +424,25 @@ local function CheckCollisionWithAxis( sAxis, MachiningParameters, OptionalParam
-- se non si trova collisione si ritorna se è necessario separare prima di effettuare la lavorazione (ossia non c'è collisione con il pezzo ma c'è con il grezzo restante) -- se non si trova collisione si ritorna se è necessario separare prima di effettuare la lavorazione (ossia non c'è collisione con il pezzo ma c'è con il grezzo restante)
for i = 1, #PointsOnToolTipCenter do for i = 1, #PointsOnToolTipCenter do
local bCollisionFoundPiece, bCollisionFoundRestLength = CheckCollisionPoint( sAxis, PointsOnToolTipCenter[i], vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, bCheckOnlyRestlength) -- se lama con flangia si aggiunge quest'ultima ai solidi di collisione, ipotizzandola grande fino al dMaxDepth + sicurezza
local idAddedCollisionSurfTm
if Tool.sType == 'SAW_FLAT' then
local ptCenterFlange = PointsOnToolTipCenter[i] + vtHead * Tool.dThickness
local frHead = Frame3d( ptCenterFlange, vtHead)
local dExtraSafety = 2 -- valore empirico che serve nei casi molto inclinati, ci potrebbero essere casi in cui va aumentato
local idFlangeCurve = EgtCircle( Part.idTempGroup, ORIG(), dExtraSafety + Tool.dDiameter / 2 - Tool.dMaxDepth, GDB_RT.GLOB)
EgtTransform( idFlangeCurve, frHead, GDB_RT.GLOB)
-- TODO verificare se questo controllo serve
if AreOppositeVectorApprox( vtHead, EgtCurveExtrusion( idFlangeCurve)) then
EgtInvertCurve( idFlangeCurve)
end
local vtExtrusion = 15 * vtHead
idAddedCollisionSurfTm = EgtSurfTmByRegionExtrusion( Part.idTempGroup, idFlangeCurve, vtExtrusion, 0.05, GDB_RT.GLOB)
end
local bCollisionFoundPiece, bCollisionFoundRestLength = CheckCollisionPoint( sAxis, PointsOnToolTipCenter[i], vtHead, vtAux, Part, bCannotSplitRestLength, sRestLengthSideForPreSimulation, idCheckCollisionTm, idAddedCollisionSurfTm)
-- se trovata collisione con pezzo è inutile controllare gli altri punti -- se trovata collisione con pezzo è inutile controllare gli altri punti
if bCollisionFoundPiece then if bCollisionFoundPiece then
@@ -445,7 +461,7 @@ local function CheckCollisionWithAxis( sAxis, MachiningParameters, OptionalParam
end end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
function PreSimulationLib.CheckCollision( sBladeEngagement, Parameters, OptionalParameters) function PreSimulationLib.CheckCollision( Parameters, OptionalParameters)
local bCollisionFound local bCollisionFound
local bMoveAfterSplitL3, bMoveAfterSplitR3, bMoveAfterSplitR2, bMoveAfterSplitR1 local bMoveAfterSplitL3, bMoveAfterSplitR3, bMoveAfterSplitR2, bMoveAfterSplitR1
@@ -459,24 +475,19 @@ function PreSimulationLib.CheckCollision( sBladeEngagement, Parameters, Optional
OptionalParameters = OptionalParameters or {} OptionalParameters = OptionalParameters or {}
local OptionalParametersCheckCollisionWithAxis = {} local OptionalParametersCheckCollisionWithAxis = {}
OptionalParametersCheckCollisionWithAxis.bCheckOnlyRestlength = false
OptionalParametersCheckCollisionWithAxis.PointsToCheck = OptionalParameters.PointsToCheck or nil OptionalParametersCheckCollisionWithAxis.PointsToCheck = OptionalParameters.PointsToCheck or nil
OptionalParametersCheckCollisionWithAxis.sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail' OptionalParametersCheckCollisionWithAxis.sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail'
OptionalParametersCheckCollisionWithAxis.bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false OptionalParametersCheckCollisionWithAxis.bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false
OptionalParametersCheckCollisionWithAxis.sBlockedAxis = OptionalParameters.sBlockedAxis OptionalParametersCheckCollisionWithAxis.sBlockedAxis = OptionalParameters.sBlockedAxis
OptionalParametersCheckCollisionWithAxis.vtAux = OptionalParameters.vtAux OptionalParametersCheckCollisionWithAxis.vtAux = OptionalParameters.vtAux
OptionalParametersCheckCollisionWithAxis.idCheckCollisionTm = OptionalParameters.idCheckCollisionTm
local sBlockedAxis = OptionalParameters.sBlockedAxis local sBlockedAxis = OptionalParameters.sBlockedAxis
local bIsDicing = OptionalParameters.bIsDicing or false
local bDisableRealElevationCheck = OptionalParameters.bDisableRealElevationCheck or false local bDisableRealElevationCheck = OptionalParameters.bDisableRealElevationCheck or false
local bCheckOnlyRestlengthForAxisABC = false
-- se cubetti in modalità standard (no DownUp) gli assi AB e C si controllano solo con grezzo (ci sarebbe collisione con il materiale già rimosso controllando AB e C con pezzo)
if bIsDicing and ( sBladeEngagement == 'Standard') then
bCheckOnlyRestlengthForAxisABC = true
-- se l'elevazione reale (rispetto al pezzo + eventuale materiale in testa/coda) è maggiore del massimo materiale è sempre collisione -- se l'elevazione reale (rispetto al pezzo + eventuale materiale in testa/coda) è maggiore del massimo materiale è sempre collisione
-- TODO rifare con funzione -- TODO rifare con funzione
elseif not bDisableRealElevationCheck then if not bDisableRealElevationCheck then
local Edge = Parameters.Edge local Edge = Parameters.Edge
local vtNFace = Parameters.vtNFace local vtNFace = Parameters.vtNFace
local dDepthToMachine = Parameters.dDepthToMachine local dDepthToMachine = Parameters.dDepthToMachine
@@ -523,9 +534,6 @@ function PreSimulationLib.CheckCollision( sBladeEngagement, Parameters, Optional
-- ultimo asse lineare prima dei rotativi (solitamente Z) si controlla sempre -- ultimo asse lineare prima dei rotativi (solitamente Z) si controlla sempre
bCollisionFound, bMoveAfterSplitL3 = CheckCollisionWithAxis( sL3, Parameters, OptionalParametersCheckCollisionWithAxis) bCollisionFound, bMoveAfterSplitL3 = CheckCollisionWithAxis( sL3, Parameters, OptionalParametersCheckCollisionWithAxis)
-- assi rotativi: se richiesto si controlla la collisione solo col grezzo
OptionalParametersCheckCollisionWithAxis.bCheckOnlyRestlength = bCheckOnlyRestlengthForAxisABC
if sR3 and not bCollisionFound then if sR3 and not bCollisionFound then
bCollisionFound, bMoveAfterSplitR3 = CheckCollisionWithAxis( sR3, Parameters, OptionalParametersCheckCollisionWithAxis) bCollisionFound, bMoveAfterSplitR3 = CheckCollisionWithAxis( sR3, Parameters, OptionalParametersCheckCollisionWithAxis)
end end
+322
View File
@@ -0,0 +1,322 @@
// Message File EgalTech English 2026/06/23
0=ENG
// ----- BeamNew -----
1000001=Part loading position
1000002=Part loading position
1000003=Loading position from BTL, no pre-rotation
1000004=Loading position from BTL, no pre-rotation
1000005=Get Best loading position from 0° and 180°
1000006=Get Best loading position from 0° and 180°
1000007=Get Best loading position in each piece rotation
1000008=Get Best loading position in each piece rotation
1000009=Allow piece inversion
1000010=Allow piece inversion
1000011=Enable material optimization function in nesting (part rotation disabled)
1000012=Enable material optimization function in nesting (part rotation disabled)
1000013=Part rotating acceptability
1000014=Acceptability of rotating the part between machining steps
1000015=Rotation not allowed
1000016=Rotation not allowed
1000017=Rotation allowed only if strictly necessary
1000018=Rotation allowed only if strictly necessary
1000019=Rotation easily acceptable / no constraint
1000020=Rotation easily acceptable / no constraint
1000021=Machining Strategy
1000022=Machining Strategy
1000023=Quality and time equally prioritized
1000024=Quality and time equally prioritized
1000025=Fastest
1000026=Prefer fastest strategies
1000027=High quality
1000028=Prefer high-quality strategies
1000029=Ordering rules
1000030=The first complete strategy in list is the one chosen; no intelligent choosing
1000031=Max number of reprocessing cycles
1000032=Max number of reprocessing cycles
1000033=Use entire blade diameter to shorten path
1000034=Use entire blade diameter to shorten path
1000035=Maximum length for dropped waste
1000036=Maximum length for dropped waste
1000037=Maximum volume for dropped waste
1000038=Maximum volume for dropped waste
1000039=Maximum dice dimension
1000040=Maximum dice dimension
1000041=Overmaterial on tenon length
1000042=Overmaterial on tenon length
1000043=Overmaterial on tenon width
1000044=Overmaterial on tenon width
1000045=Maximum number of milling passes
1000046=Maximum number of milling passes. If more passes are required, pocketing is performed
1000047=Use DoveTail tool to pocket
1000048=Use DoveTail tool to pocket
1000049=Cutting Strategy
1000050=Cutting Strategy
1000051=Automatic
1000052=Automatic
1000053=Blade only
1000054=Blade only
1000055=Mill only
1000056=Mill only
1000057=ChainSaw only
1000058=ChainSaw only
1000059=Available mill to machine the tenon cut surface
1000060=Available mill to machine the tenon cut surface
1000061=Available mill to machine the dovetail tenon
1000062=Available mill to machine the dovetail tenon
1000063=Max radius left on corners
1000064=Radius-limit left by the tool at each corner of the feature
1000065=Use Anti-Splint strategy
1000066=The strategy will apply blade cuts on corner to avoid wood splint
1000067=Extend after tail
1000068=The automatism considers this length as machinable. This means you accept to damage the next piece in the bar
1000069=Minimum approach distance on open sides
1000070=Minimum approach distance on open sides
1000071=Available mill to pocket the feature
1000072=Available mill to pocket the feature
1000073=Finish with chainsaw if needed
1000074=Finish with chainsaw if needed
1000075=Extend after tail
1000076=The automatism considers this length as machinable. This means you accept to damage the next piece in the bar
1000077=Force ripping blade
1000078=Force the use of ripping blade, designed for cuts parallel to the grain
1000079=Not complete with Blade radius imprint left
1000080=If the parameter is active, the automatism considers the feature as - not complete - if the blade radius imprint is left
1000081=Use Zig-Zag ChainSaw
1000082=Enable the parameter to set the Zig-Zag movement on the ChainSaw machining. Deactivate it to use One-Way movement.
1000083=Sort by segment
1000084=Sort the machinings according to the piece-segment where the machining has inserted
1000085=Damage next piece
1000086=This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time
1000087=Never damage
1000088=Never damage
1000089=Damage only if raw
1000090=Damage only if raw
1000091=Can damage
1000092=Can damage
1000093=Use Zig-Zag ChainSaw
1000094=Enable the parameter to set the Zig-Zag movement on the ChainSaw machining. Deactivate it to use One-Way movement.
1000095=Extend after tail
1000096=The automatism considers this length as machinable. This means you accept to damage the next piece in the bar
1000097=Damage next piece
1000098=This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time
1000099=Never damage
1000100=Never damage
1000101=Damage only if raw
1000102=Damage only if raw
1000103=Can damage
1000104=Can damage
1000105=Force ripping blade
1000106=Force the use of ripping blade, designed for cuts parallel to the grain
1000107=Extend after tail
1000108=The automatism considers this length as machinable. This means you accept to damage the next piece in the bar
1000109=Damage next piece
1000110=This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time
1000111=Never damage
1000112=Never damage
1000113=Damage only if raw
1000114=Damage only if raw
1000115=Can damage
1000116=Can damage
1000117=Cutting strategy
1000118=Cutting strategy
1000119=Automatic
1000120=Automatic
1000121=Drop waste
1000122=Drop waste
1000123=Keep waste attached
1000124=Keep waste attached
1000125=Disable dicing
1000126=Disable dicing
1000127=Prioritize machining speed over quality
1000128=Prioritize machining speed over quality
1000129=Strip width
1000130=In case the waste is still kept attached, this is the wigth dimension of the strip
1000131=Clean blade radius with mill
1000132=Clean blade radius with mill
1000133=Milling offset from side
1000134=Milling offset from side
1000135=Overmaterial on tenon length
1000136=Overmaterial on tenon length
1000137=Overmaterial on tenon width
1000138=Overmaterial on tenon width
1000139=Maximum number of milling passes
1000140=Maximum number of milling passes. If more passes are required, pocketing is performed
1000141=Cutting Strategy
1000142=Cutting Strategy
1000143=Automatic
1000144=Automatic
1000145=Blade only
1000146=Blade only
1000147=Mill only
1000148=Mill only
1000149=ChainSaw only
1000150=ChainSaw only
1000151=Available mill to machine the tenon
1000152=Available mill to machine the tenon
1000153=Overmaterial on Mortise length
1000154=Overmaterial on Mortise length
1000155=Overmaterial on Mortise width
1000156=Overmaterial on Mortise width
1000157=Maximum number of milling passes
1000158=Maximum number of milling passes. If more passes are required, pocketing is performed
1000159=Use DoveTail tool in case of pocketing
1000160=Use DoveTail tool in case of pocketing
1000161=Add Anti-Splint
1000162=Add Anti-Splint
1000163=Cutting Strategy
1000164=Cutting Strategy
1000165=Automatic
1000166=Automatic
1000167=Blade only
1000168=Blade only
1000169=Mill only
1000170=Mill only
1000171=ChainSaw only
1000172=ChainSaw only
1000173=Available mill to machine the mortise cut surface
1000174=Available mill to machine the mortise cut surface
1000175=Available mill to machine the dovetail mortise
1000176=Available mill to machine the dovetail mortise
1000177=Overmaterial on mortise length
1000178=Overmaterial on mortise length
1000179=Overmaterial on mortise width
1000180=Overmaterial on mortise width
1000181=Cutting Strategy
1000182=Cutting Strategy
1000183=Automatic
1000184=Automatic
1000185=Blade only
1000186=Blade only
1000187=Mill only
1000188=Mill only
1000189=ChainSaw only
1000190=ChainSaw only
1000191=Available mill to machine the mortise cut surface
1000192=Available mill to machine the mortise cut surface
1000193=Available mill to machine the mortise
1000194=Available mill to machine the mortise
1000195=Depth Chamfer
1000196=Depth of the V-Mill to execute chamfers on cut-edges
1000197=Use Anti-Splint strategy
1000198=The strategy will apply blade cuts on corner to avoid wood splint
1000199=Available mill to machine the profile
1000200=Available mill to machine the profile
1000201=Antisplint with blade
1000202=Use the blade as antisplint in case the geometry is not through
1000203=Extend after tail
1000204=The automatism considers this length as machinable. This means you accept to damage the next piece in the bar
1000205=Clean radius with mill
1000206=Clean radius with mill
1000207=Milling offset from side
1000208=Milling offset from side
1000209=Damage next piece
1000210=This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time
1000211=Never damage
1000212=Never damage
1000213=Damage only if raw
1000214=Damage only if raw
1000215=Can damage
1000216=Can damage
1000217=Tolerance on Diameter
1000218=Tolerance on Diameter
1000219=Depth PreHole
1000220=Depth PreHole
1000221=Drilling Mode
1000222=Drilling Mode
1000223=Automatic
1000224=Automatic
1000225=Preferred machining from one side only
1000226=Preferred machining from one side only
1000227=Force machining from two sides
1000228=Force machining from two sides
1000229=Available Drillbit list
1000230=Available Drillbit list
1000231=Extend after tail
1000232=The automatism considers this length as machinable. This means you accept to damage the next piece in the bar
1000233=Damage next piece
1000234=This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time
1000235=Never damage
1000236=Never damage
1000237=Damage only if raw
1000238=Damage only if raw
1000239=Can damage
1000240=Can damage
1000241=Ridge Lap strategy
1000242=Ridge Lap strategy
1000243=Automatic
1000244=Automatic
1000245=Use blade
1000246=Use blade
1000247=Use mill
1000248=Use mill
1000249=Tolerance on Diameter
1000250=Tolerance on Diameter
1000251=Use mill as a drillbit
1000252=Admit to use the mill as a drillbit
1000253=Execute contour only
1000254=Execute the contour anyway, even the hole is bigger than the tool diameter
1000255=Drilling mode
1000256=Drilling mode
1000257=Automatic
1000258=Automatic
1000259=Preferred machining from one side only
1000260=Preferred machining from one side only
1000261=Force machining from two sides
1000262=Force machining from two sides
1000263=Available mill to machine drills
1000264=Available mill to machine drills
1000265=Machining Depth
1000266=Machining Depth
1000267=Available mill to machine mark and text
1000268=Available mill to machine mark and text
1000269=Marking Strategy
1000270=Marking Strategy
1000271=Automatic
1000272=Automatic
1000273=Pen only
1000274=Pen only
1000275=V-Mill only
1000276=V-Mill only
1000277=Depth Chamfer
1000278=Depth of the V-Mill to execute chamfers on cut-edges
1000279=Only Chamfer
1000280=Execute the chamfer only, no other machining
1000281=Overmaterial
1000282=Overmaterial
1000283=Max radius left on corners
1000284=Radius-limit left by the tool at each corner of the feature
1000285=Execute cut to remove material
1000286=Execute cut to remove material
1000287=Force strip
1000288=Enable the parameter to force the software to leave a strip to sustain the piece
1000289=Strip width
1000290=Width of the strip in case if foreseen from the machining
1000291=Cutting Strategy
1000292=Cutting Strategy
1000293=Automatic
1000294=Automatic
1000295=No machining
1000296=No machining
1000297=Blade forced
1000298=Blade forced
1000299=Mill forced
1000300=Mill forced
1000301=Available mill to machine the profile
1000302=Available mill to machine the profile
1000303=Depth Chamfer
1000304=Depth of the V-Mill to execute chamfers on cut-edges
1000305=Force to use chain saw
1000306=Force to use chain saw
1000307=Force to add PreCuts
1000308=Autocam will apply a machining on the theoretical zero, to avoid collision if the theoretical piece length doesn't correspond to the real length
1000309=Finish with mill
1000310=Use a mill to finish the surface if split with chain saw
1000311=Depth Chamfer
1000312=Depth of the V-Mill to execute chamfers on cut-edges
1000313=Force to use chain saw
1000314=Force to use chain saw
1000315=Force to add PreCuts
1000316=Autocam will apply a machining on the theoretical zero, to avoid collision if the theoretical piece length doesn't correspond to the real length
1000317=Finish with mill
1000318=Use a mill to finish the surface if split with chain saw
// ----- End -----
+322
View File
@@ -0,0 +1,322 @@
// File dei messaggi EgalTech Italiano 2026/06/23
0=ITA
// ----- BeamNew -----
1000001=Posizione di caricamento pezzo
1000002=Posizione di caricamento pezzo
1000003=Posizione di caricamento da BTL, senza pre-rotazione
1000004=Posizione di caricamento da BTL, senza pre-rotazione
1000005=Ottieni la migliore posizione di caricamento tra 0° e 180°
1000006=Ottieni la migliore posizione di caricamento tra 0° e 180°
1000007=Ottieni la migliore posizione di caricamento per ogni rotazione del pezzo
1000008=Ottieni la migliore posizione di caricamento per ogni rotazione del pezzo
1000009=Consenti inversione pezzo
1000010=Consenti inversione pezzo
1000011=Abilita funzione di ottimizzazione materiale nel nesting (rotazione pezzo disabilitata)
1000012=Abilita funzione di ottimizzazione materiale nel nesting (rotazione pezzo disabilitata)
1000013=Accettabilità rotazione pezzo
1000014=Accettabilità della rotazione del pezzo tra le fasi di lavorazione
1000015=Rotazione non consentita
1000016=Rotazione non consentita
1000017=Rotazione consentita solo se strettamente necessaria
1000018=Rotazione consentita solo se strettamente necessaria
1000019=Rotazione facilmente accettabile / nessun vincolo
1000020=Rotazione facilmente accettabile / nessun vincolo
1000021=Strategia di lavorazione
1000022=Strategia di lavorazione
1000023=Qualità e tempo considerati con la stessa priorità
1000024=Qualità e tempo considerati con la stessa priorità
1000025=Più veloce
1000026=Preferisci le strategie più veloci
1000027=Alta qualità
1000028=Preferisci le strategie ad alta qualità
1000029=Regole di ordinamento
1000030=La prima strategia completa in lista è quella scelta; nessuna scelta intelligente
1000031=Numero massimo di cicli di rilavorazione
1000032=Numero massimo di cicli di rilavorazione
1000033=Usa l'intero diametro della lama per accorciare il percorso
1000034=Usa l'intero diametro della lama per accorciare il percorso
1000035=Massima lunghezza per lo scarto caduto
1000036=Massima lunghezza per lo scarto caduto
1000037=Massimo volume per lo scarto caduto
1000038=Massimo volume per lo scarto caduto
1000039=Dimensione massima dei cubetti
1000040=Dimensione massima dei cubetti
1000041=Sovramateriale sulla lunghezza del tenone
1000042=Sovramateriale sulla lunghezza del tenone
1000043=Sovramateriale sulla larghezza del tenone
1000044=Sovramateriale sulla larghezza del tenone
1000045=Numero massimo di passate di fresatura
1000046=Numero massimo di passate di fresatura. Se sono necessarie più passate, viene eseguita la svuotatura
1000047=Utilizza l'utensile a coda di rondine per svuotare
1000048=Utilizza l'utensile a coda di rondine per svuotare
1000049=Strategia di taglio
1000050=Strategia di taglio
1000051=Automatico
1000052=Automatico
1000053=Solo lama
1000054=Solo lama
1000055=Solo fresa
1000056=Solo fresa
1000057=Solo sega a catena
1000058=Solo sega a catena
1000059=Fresa disponibile per lavorare la superficie di taglio del tenone
1000060=Fresa disponibile per lavorare la superficie di taglio del tenone
1000061=Fresa disponibile per lavorare il tenone a coda di rondine
1000062=Fresa disponibile per lavorare il tenone a coda di rondine
1000063=Raggio massimo rimasto sugli spigoli
1000064=Limite del raggio lasciato dall'utensile ad ogni spigolo della feature
1000065=Utilizza la strategia antischeggia
1000066=La strategia applicherà tagli di lama sullo spigolo per evitare scheggiature del legno
1000067=Estendi dopo la coda
1000068=L'automatismo considera questa lunghezza come lavorabile. Questo significa che si accetta di danneggiare il pezzo successivo nella barra
1000069=Distanza minima di approccio sui lati aperti
1000070=Distanza minima di approccio sui lati aperti
1000071=Fresa disponibile per svuotare la feature
1000072=Fresa disponibile per svuotare la feature
1000073=Finisci con sega a catena se necessario
1000074=Finisci con sega a catena se necessario
1000075=Estendi dopo la coda
1000076=L'automatismo considera questa lunghezza come lavorabile. Questo significa che si accetta di danneggiare il pezzo successivo nella barra
1000077=Forza lama da scasso
1000078=Forza l'uso della lama da scasso, progettata per tagli paralleli alla venatura
1000079=Non completare se rimane l'impronta del raggio della lama
1000080=Se il parametro è attivo, l'automatismo considera la feature come - non completa - se rimane l'impronta del raggio della lama
1000081=Utilizza sega a catena in Zig-Zag
1000082=Abilita il parametro per impostare il movimento Zig-Zag sulla lavorazione della sega a catena. Disattivarlo per utilizzare il movimento One-Way.
1000083=Ordina per segmento
1000084=Ordina le lavorazioni in base al segmento del pezzo in cui la lavorazione è inserita
1000085=Danneggia il pezzo successivo
1000086=Questa opzione consente di decidere come considerare il pezzo successivo nella barra. Il software calcola specifici ingressi/uscite per rispettare il parametro. Questo parametro può variare il tempo di lavorazione
1000087=Non danneggiare mai
1000088=Non danneggiare mai
1000089=Danneggia solo se grezzo
1000090=Danneggia solo se grezzo
1000091=Può danneggiare
1000092=Può danneggiare
1000093=Utilizza sega a catena in Zig-Zag
1000094=Abilita il parametro per impostare il movimento Zig-Zag sulla lavorazione della sega a catena. Disattivarlo per utilizzare il movimento One-Way.
1000095=Estendi dopo la coda
1000096=L'automatismo considera questa lunghezza come lavorabile. Questo significa che si accetta di danneggiare il pezzo successivo nella barra
1000097=Danneggia il pezzo successivo
1000098=Questa opzione consente di decidere come considerare il pezzo successivo nella barra. Il software calcola specifici ingressi/uscite per rispettare il parametro. Questo parametro può variare il tempo di lavorazione
1000099=Non danneggiare mai
1000100=Non danneggiare mai
1000101=Danneggia solo se grezzo
1000102=Danneggia solo se grezzo
1000103=Può danneggiare
1000104=Può danneggiare
1000105=Forza lama da scasso
1000106=Forza l'uso della lama da scasso, progettata per tagli paralleli alla venatura
1000107=Estendi dopo la coda
1000108=L'automatismo considera questa lunghezza come lavorabile. Questo significa che si accetta di danneggiare il pezzo successivo nella barra
1000109=Danneggia il pezzo successivo
1000110=Questa opzione consente di decidere come considerare il pezzo successivo nella barra. Il software calcola specifici ingressi/uscite per rispettare il parametro. Questo parametro può variare il tempo di lavorazione
1000111=Non danneggiare mai
1000112=Non danneggiare mai
1000113=Danneggia solo se grezzo
1000114=Danneggia solo se grezzo
1000115=Può danneggiare
1000116=Può danneggiare
1000117=Strategia di taglio
1000118=Strategia di taglio
1000119=Automatico
1000120=Automatico
1000121=Scarica lo scarto
1000122=Scarica lo scarto
1000123=Mantieni lo scarto attaccato
1000124=Mantieni lo scarto attaccato
1000125=Disabilita la tassellatura
1000126=Disabilita la tassellatura
1000127=Dai priorità alla velocità di lavorazione rispetto alla qualità
1000128=Dai priorità alla velocità di lavorazione rispetto alla qualità
1000129=Larghezza del testimone
1000130=Nel caso in cui lo scarto venga mantenuto attaccato, questa è la dimensione della larghezza del testimone
1000131=Pulisci il raggio della lama con la fresa
1000132=Pulisci il raggio della lama con la fresa
1000133=Offset di fresatura dal lato
1000134=Offset di fresatura dal lato
1000135=Sovramateriale sulla lunghezza del tenone
1000136=Sovramateriale sulla lunghezza del tenone
1000137=Sovramateriale sulla larghezza del tenone
1000138=Sovramateriale sulla larghezza del tenone
1000139=Numero massimo di passate di fresatura
1000140=Numero massimo di passate di fresatura. Se sono necessarie più passate, viene eseguita la svuotatura
1000141=Strategia di taglio
1000142=Strategia di taglio
1000143=Automatico
1000144=Automatico
1000145=Solo lama
1000146=Solo lama
1000147=Solo fresa
1000148=Solo fresa
1000149=Solo sega a catena
1000150=Solo sega a catena
1000151=Fresa disponibile per lavorare il tenone
1000152=Fresa disponibile per lavorare il tenone
1000153=Sovramateriale sulla lunghezza della mortasa
1000154=Sovramateriale sulla lunghezza della mortasa
1000155=Sovramateriale sulla larghezza della mortasa
1000156=Sovramateriale sulla larghezza della mortasa
1000157=Numero massimo di passate di fresatura
1000158=Numero massimo di passate di fresatura. Se sono necessarie più passate, viene eseguita la svuotatura
1000159=Utilizza l'utensile a coda di rondine in caso di svuotatura
1000160=Utilizza l'utensile a coda di rondine in caso di svuotatura
1000161=Aggiungi antischeggia
1000162=Aggiungi antischeggia
1000163=Strategia di taglio
1000164=Strategia di taglio
1000165=Automatico
1000166=Automatico
1000167=Solo lama
1000168=Solo lama
1000169=Solo fresa
1000170=Solo fresa
1000171=Solo sega a catena
1000172=Solo sega a catena
1000173=Fresa disponibile per lavorare la superficie di taglio della mortasa
1000174=Fresa disponibile per lavorare la superficie di taglio della mortasa
1000175=Fresa disponibile per lavorare la mortasa a coda di rondine
1000176=Fresa disponibile per lavorare la mortasa a coda di rondine
1000177=Sovramateriale sulla lunghezza della mortasa
1000178=Sovramateriale sulla lunghezza della mortasa
1000179=Sovramateriale sulla larghezza della mortasa
1000180=Sovramateriale sulla larghezza della mortasa
1000181=Strategia di taglio
1000182=Strategia di taglio
1000183=Automatico
1000184=Automatico
1000185=Solo lama
1000186=Solo lama
1000187=Solo fresa
1000188=Solo fresa
1000189=Solo sega a catena
1000190=Solo sega a catena
1000191=Fresa disponibile per lavorare la superficie di taglio della mortasa
1000192=Fresa disponibile per lavorare la superficie di taglio della mortasa
1000193=Fresa disponibile per lavorare la mortasa
1000194=Fresa disponibile per lavorare la mortasa
1000195=Profondità dello smusso
1000196=Profondità della fresa a V per eseguire smussi sugli spigoli di taglio
1000197=Utilizza la strategia antischeggia
1000198=La strategia applicherà tagli di lama sullo spigolo per evitare scheggiature del legno
1000199=Fresa disponibile per lavorare il profilo
1000200=Fresa disponibile per lavorare il profilo
1000201=Antischeggia con lama
1000202=Utilizza la lama come antischeggia nel caso in cui la geometria non sia passante
1000203=Estendi dopo la coda
1000204=L'automatismo considera questa lunghezza come lavorabile. Questo significa che si accetta di danneggiare il pezzo successivo nella barra
1000205=Pulisci il raggio con la fresa
1000206=Pulisci il raggio con la fresa
1000207=Offset di fresatura dal lato
1000208=Offset di fresatura dal lato
1000209=Danneggia il pezzo successivo
1000210=Questa opzione consente di decidere come considerare il pezzo successivo nella barra. Il software calcola specifici ingressi/uscite per rispettare il parametro. Questo parametro può variare il tempo di lavorazione
1000211=Non danneggiare mai
1000212=Non danneggiare mai
1000213=Danneggia solo se grezzo
1000214=Danneggia solo se grezzo
1000215=Può danneggiare
1000216=Può danneggiare
1000217=Tolleranza sul diametro
1000218=Tolleranza sul diametro
1000219=Profondità del preforo
1000220=Profondità del preforo
1000221=Modalità di foratura
1000222=Modalità di foratura
1000223=Automatico
1000224=Automatico
1000225=Lavorazione preferita da un solo lato
1000226=Lavorazione preferita da un solo lato
1000227=Forza la lavorazione da due lati
1000228=Forza la lavorazione da due lati
1000229=Lista delle punte disponibili
1000230=Lista delle punte disponibili
1000231=Estendi dopo la coda
1000232=L'automatismo considera questa lunghezza come lavorabile. Questo significa che si accetta di danneggiare il pezzo successivo nella barra
1000233=Danneggia il pezzo successivo
1000234=Questa opzione consente di decidere come considerare il pezzo successivo nella barra. Il software calcola specifici ingressi/uscite per rispettare il parametro. Questo parametro può variare il tempo di lavorazione
1000235=Non danneggiare mai
1000236=Non danneggiare mai
1000237=Danneggia solo se grezzo
1000238=Danneggia solo se grezzo
1000239=Può danneggiare
1000240=Può danneggiare
1000241=Strategia del mezzolegno di colmo
1000242=Strategia del mezzolegno di colmo
1000243=Automatico
1000244=Automatico
1000245=Utilizza la lama
1000246=Utilizza la lama
1000247=Utilizza la fresa
1000248=Utilizza la fresa
1000249=Tolleranza sul diametro
1000250=Tolleranza sul diametro
1000251=Utilizza la fresa come una punta
1000252=Ammetti l'uso della fresa come una punta da foratura
1000253=Esegui solo il contorno
1000254=Esegui comunque il contorno, anche se il foro è più grande del diametro dell'utensile
1000255=Modalità di foratura
1000256=Modalità di foratura
1000257=Automatico
1000258=Automatico
1000259=Lavorazione preferita da un solo lato
1000260=Lavorazione preferita da un solo lato
1000261=Forza la lavorazione da due lati
1000262=Forza la lavorazione da due lati
1000263=Fresa disponibile per lavorare i fori
1000264=Fresa disponibile per lavorare i fori
1000265=Profondità di lavorazione
1000266=Profondità di lavorazione
1000267=Fresa disponibile per lavorare marcature e testi
1000268=Fresa disponibile per lavorare marcature e testi
1000269=Strategia di marcatura
1000270=Strategia di marcatura
1000271=Automatico
1000272=Automatico
1000273=Solo penna
1000274=Solo penna
1000275=Solo fresa a V
1000276=Solo fresa a V
1000277=Profondità dello smusso
1000278=Profondità della fresa a V per eseguire smussi sugli spigoli di taglio
1000279=Solo smusso
1000280=Esegui solo lo smusso, nessuna altra lavorazione
1000281=Sovramateriale
1000282=Sovramateriale
1000283=Raggio massimo rimasto sugli spigoli
1000284=Limite del raggio lasciato dall'utensile ad ogni spigolo della feature
1000285=Esegui il taglio per rimuovere materiale
1000286=Esegui il taglio per rimuovere materiale
1000287=Forza il testimone
1000288=Abilita il parametro per forzare il software a lasciare un testimone per sostenere il pezzo
1000289=Larghezza del testimone
1000290=Larghezza del testimone nel caso in cui sia previsto dalla lavorazione
1000291=Strategia di taglio
1000292=Strategia di taglio
1000293=Automatico
1000294=Automatico
1000295=Nessuna lavorazione
1000296=Nessuna lavorazione
1000297=Forza lama
1000298=Forza lama
1000299=Forza fresa
1000300=Forza fresa
1000301=Fresa disponibile per lavorare il profilo
1000302=Fresa disponibile per lavorare il profilo
1000303=Profondità dello smusso
1000304=Profondità della fresa a V per eseguire smussi sugli spigoli di taglio
1000305=Forza l'uso della sega a catena
1000306=Forza l'uso della sega a catena
1000307=Forza l'aggiunta di pretagli
1000308=Autocam applicherà una lavorazione sullo zero teorico per evitare collisioni se la lunghezza teorica del pezzo non corrisponde alla lunghezza reale
1000309=Finisci con la fresa
1000310=Utilizza una fresa per rifinire la superficie se tagliata con la sega a catena
1000311=Profondità dello smusso
1000312=Profondità della fresa a V per eseguire smussi sugli spigoli di taglio
1000313=Forza l'uso della sega a catena
1000314=Forza l'uso della sega a catena
1000315=Forza l'aggiunta di pretagli
1000316=Autocam applicherà una lavorazione sullo zero teorico per evitare collisioni se la lunghezza teorica del pezzo non corrisponde alla lunghezza reale
1000317=Finisci con la fresa
1000318=Utilizza una fresa per rifinire la superficie se tagliata con la sega a catena
// ----- End -----
+322
View File
@@ -0,0 +1,322 @@
// Message File EgalTech Dutch 2026/06/23
0=NLD
// ----- BeamNew -----
1000001=Ladevolgorde van het onderdeel
1000002=Ladevolgorde van het onderdeel
1000003=Laadpositie vanaf BTL, geen voorrotatie
1000004=Laadpositie vanaf BTL, geen voorrotatie
1000005=Bepaal de beste laadpositie uit 0° en 180°
1000006=Bepaal de beste laadpositie uit 0° en 180°
1000007=Bepaal de beste laadpositie bij elke rotatie van het onderdeel
1000008=Bepaal de beste laadpositie bij elke rotatie van het onderdeel
1000009=Omkeren van het onderdeel toestaan
1000010=Omkeren van het onderdeel toestaan
1000011=Materiaaloptimalisatie in nesting inschakelen (rotatie van onderdeel uitgeschakeld)
1000012=Materiaaloptimalisatie in nesting inschakelen (rotatie van onderdeel uitgeschakeld)
1000013=Acceptatie van rotatie van het onderdeel
1000014=Acceptatie van het roteren van het onderdeel tussen bewerkingsstappen
1000015=Rotatie niet toegestaan
1000016=Rotatie niet toegestaan
1000017=Rotatie alleen toegestaan indien strikt noodzakelijk
1000018=Rotatie alleen toegestaan indien strikt noodzakelijk
1000019=Rotatie eenvoudig acceptabel / geen beperking
1000020=Rotatie eenvoudig acceptabel / geen beperking
1000021=Bewerkingsstrategie
1000022=Bewerkingsstrategie
1000023=Kwaliteit en tijd hebben gelijke prioriteit
1000024=Kwaliteit en tijd hebben gelijke prioriteit
1000025=Snelste
1000026=Voorkeur geven aan de snelste strategieën
1000027=Hoge kwaliteit
1000028=Voorkeur geven aan hoogwaardige strategieën
1000029=Ordeningsregels
1000030=De eerste complete strategie in de lijst wordt gekozen; geen intelligente selectie
1000031=Max. aantal herbewerkingscycli
1000032=Max. aantal herbewerkingscycli
1000033=Gebruik de volledige bladdiameter om het pad te verkorten
1000034=Gebruik de volledige bladdiameter om het pad te verkorten
1000035=Maximale lengte voor vallend afval
1000036=Maximale lengte voor vallend afval
1000037=Maximaal volume voor vallend afval
1000038=Maximaal volume voor vallend afval
1000039=Maximale afmeting van de blokjes
1000040=Maximale afmeting van de blokjes
1000041=Overmaat op de penlengte
1000042=Overmaat op de penlengte
1000043=Overmaat op de penbreedte
1000044=Overmaat op de penbreedte
1000045=Maximaal aantal freesgangen
1000046=Maximaal aantal freesgangen. Als er meer gangen vereist zijn, wordt er uitkameren/uitfrezen uitgevoerd
1000047=Zwaluwstaartgereedschap gebruiken voor uitfrezen
1000048=Zwaluwstaartgereedschap gebruiken voor uitfrezen
1000049=Snijstrategie
1000050=Snijstrategie
1000051=Automatisch
1000052=Automatisch
1000053=Alleen zaagblad
1000054=Alleen zaagblad
1000055=Alleen frees
1000056=Alleen frees
1000057=Alleen kettingzaag
1000058=Alleen kettingzaag
1000059=Beschikbare frees om het snijvlak van de pen te bewerken
1000060=Beschikbare frees om het snijvlak van the pen te bewerken
1000061=Beschikbare frees om de zwaluwstaartpen te bewerken
1000062=Beschikbare frees om de zwaluwstaartpen te bewerken
1000063=Maximale hoekradius achtergelaten op hoeken
1000064=Radiuslimiet achtergelaten door het gereedschap bij elke binnenhoek van de feature
1000065=Anti-splinterstrategie gebruiken
1000066=De strategie past zaagsneden toe op de hoek om houtsplinters te voorkomen
1000067=Verlengen na de staart
1000068=Het automatisme beschouwt deze lengte als bewerkbaar. Dit betekent dat u accepteert dat het volgende onderdeel in de balk beschadigd kan raken
1000069=Minimale benaderingsafstand op open zijden
1000070=Minimale benaderingsafstand op open zijden
1000071=Beschikbare frees voor het uitdiepen/uitfrezen van de feature
1000072=Beschikbare frees voor het uitdiepen/uitfrezen van de feature
1000073=Afwerken met kettingzaag indien nodig
1000074=Afwerken met kettingzaag indien nodig
1000075=Verlengen na de staart
1000076=Het automatisme beschouwt deze lengte als bewerkbaar. Dit betekent dat u accepteert dat het volgende onderdeel in de balk beschadigd kan raken
1000077=Schulpzaagblad forceren
1000078=Forceer het gebruik van een schulpzaagblad, ontworpen voor zaagsneden parallel aan de houtnerf
1000079=Niet voltooien als de uitloopradius van het zaagblad achterblijft
1000080=Als de parameter actief is, beschouwt het automatisme de feature als - niet voltooid - als de uitloopradius van het zaagblad achterblijft
1000081=Kettingzaag in zig-zag-modus gebruiken
1000082=Schakel deze parameter in om de zig-zag-beweging voor de kettingzaagbewerking in te stellen. Deactiveer deze om de one-way-beweging te gebruiken.
1000083=Sorteren per segment
1000084=Sorteer de bewerkingen op basis van het onderdeelsegment waarin de bewerking is ingevoegd
1000085=Volgend onderdeel beschadigen
1000086=Met deze optie kunt u beslissen hoe u het volgende onderdeel in de balk beschouwt. De software berekent specifieke in- en uitlopen om de parameter te respecteren. Deze parameter kan de bewerkingstijd beïnvloeden
1000087=Nooit beschadigen
1000088=Nooit beschadigen
1000089=Alleen beschadigen als het onbewerkt hout betreft
1000090=Alleen beschadigen als het onbewerkt hout betreft
1000091=Mag beschadigen
1000092=Mag beschadigen
1000093=Kettingzaag in zig-zag-modus gebruiken
1000094=Schakel deze parameter in om de zig-zag-beweging voor de kettingzaagbewerking in te stellen. Deactiveer deze om de one-way-beweging te gebruiken.
1000095=Verlengen na de staart
1000096=Het automatisme beschouwt deze lengte als bewerkbaar. Dit betekent dat u accepteert dat het volgende onderdeel in de balk beschadigd kan raken
1000097=Volgend onderdeel beschadigen
1000098=Met deze optie kunt u beslissen hoe u het volgende onderdeel in de balk beschouwt. De software berekent specifieke in- en uitlopen om de parameter te respecteren. Deze parameter kan de bewerkingstijd beïnvloeden
1000099=Nooit beschadigen
1000100=Nooit beschadigen
1000101=Alleen beschadigen als het onbewerkt hout betreft
1000102=Alleen beschadigen als het onbewerkt hout betreft
1000103=Mag beschadigen
1000104=Mag beschadigen
1000105=Schulpzaagblad forceren
1000106=Forceer het gebruik van een schulpzaagblad, ontworpen voor zaagsneden parallel aan de houtnerf
1000107=Verlengen na de staart
1000108=Het automatisme beschouwt deze lengte als bewerkbaar. Dit betekent dat u accepteert dat het volgende onderdeel in de balk beschadigd kan raken
1000109=Volgend onderdeel beschadigen
1000110=Met deze optie kunt u beslissen hoe u het volgende onderdeel in de balk beschouwt. De software berekent specifieke in- en uitlopen om de parameter te respecteren. Deze parameter kan de bewerkingstijd beïnvloeden
1000111=Nooit beschadigen
1000112=Nooit beschadigen
1000113=Alleen beschadigen als het onbewerkt hout betreft
1000114=Alleen beschadigen als het onbewerkt hout betreft
1000115=Mag beschadigen
1000116=Mag beschadigen
1000117=Zaagstrategie
1000118=Zaagstrategie
1000119=Automatisch
1000120=Automatisch
1000121=Kortafval afvoeren
1000122=Kortafval afvoeren
1000123=Kortafval verbonden houden
1000124=Kortafval verbonden houden
1000125=Opdelen in blokjes uitschakelen
1000126=Opdelen in blokjes uitschakelen
1000127=Prioriteit geven aan bewerkingssnelheid boven kwaliteit
1000128=Prioriteit geven aan bewerkingssnelheid boven kwaliteit
1000129=Breedte van de verbindingsstrip
1000130=In het geval dat het afval vastgehecht blijft, is dit de breedteafmeting van de verbindingsstrip
1000131=Uitloopradius van zaagblad reinigen met frees
1000132=Uitloopradius van zaagblad reinigen met frees
1000133=Freesoffset vanaf de zijde
1000134=Freesoffset vanaf de zijde
1000135=Overmaat op de penlengte
1000136=Overmaat op de penlengte
1000137=Overmaat op de penbreedte
1000138=Overmaat op de penbreedte
1000139=Maximum aantal freesgangen
1000140=Maximum aantal freesgangen. Als er meer gangen vereist zijn, wordt er uitfrezen/uitkameren uitgevoerd
1000141=Snijstrategie
1000142=Snijstrategie
1000143=Automatisch
1000144=Automatisch
1000145=Alleen zaagblad
1000146=Alleen zaagblad
1000147=Alleen frees
1000148=Alleen frees
1000149=Alleen kettingzaag
1000150=Alleen kettingzaag
1000151=Beschikbare frees om de pen te bewerken
1000152=Beschikbare frees om de pen te bewerken
1000153=Overmaat op de gatlengte
1000154=Overmaat op de gatlengte
1000155=Overmaat op de gatbreedte
1000156=Overmaat op de gatbreedte
1000157=Maximum aantal freesgangen
1000158=Maximum aantal freesgangen. Als er meer gangen vereist zijn, wordt er uitfrezen/uitkameren uitgevoerd
1000159=Zwaluwstaartgereedschap gebruiken bij uitfrezen
1000160=Zwaluwstaartgereedschap gebruiken bij uitfrezen
1000161=Anti-splintertoevoeging toepassen
1000162=Anti-splintertoevoeging toepassen
1000163=Snijstrategie
1000164=Snijstrategie
1000165=Automatisch
1000166=Automatisch
1000167=Alleen zaagblad
1000168=Alleen zaagblad
1000169=Alleen frees
1000170=Alleen frees
1000171=Alleen kettingzaag
1000172=Alleen kettingzaag
1000173=Beschikbare frees om het snijvlak van het gat te bewerken
1000174=Beschikbare frees om het snijvlak van het gat te bewerken
1000175=Beschikbare frees om het zwaluwstaartgat te frezen
1000176=Beschikbare frees om het zwaluwstaartgat te frezen
1000177=Overmaat op de gatlengte
1000178=Overmaat op de gatlengte
1000179=Overmaat op de gatbreedte
1000180=Overmaat op de gatbreedte
1000181=Snijstrategie
1000182=Snijstrategie
1000183=Automatisch
1000184=Automatisch
1000185=Alleen zaagblad
1000186=Alleen zaagblad
1000187=Alleen frees
1000188=Alleen frees
1000189=Alleen kettingzaag
1000190=Alleen kettingzaag
1000191=Beschikbare frees om het snijvlak van het gat te bewerken
1000192=Beschikbare frees om het snijvlak van het gat te bewerken
1000193=Beschikbare frees om het gat te frezen
1000194=Beschikbare frees om het gat te frezen
1000195=Diepte van de afschuining
1000196=Diepte van de V-frees om afschuiningen op snijkanten uit te voeren
1000197=Anti-splinterstrategie gebruiken
1000198=De strategie past zaagsneden toe op de hoek om houtsplinters te voorkomen
1000199=Beschikbare frees om het profiel te bewerken
1000200=Beschikbare frees om het profiel te bewerken
1000201=Anti-splinterfunctie via zaagblad
1000202=Gebruik het zaagblad als anti-splintervoorziening indien de geometrie niet doorgaand is
1000203=Verlengen na de staart
1000204=Het automatisme beschouwt deze lengte als bewerkbaar. Dit betekent dat u accepteert dat het volgende onderdeel in de balk beschadigd kan raken
1000205=Uitloopradius reinigen met frees
1000206=Uitloopradius reinigen met frees
1000207=Freesoffset vanaf de zijde
1000208=Freesoffset vanaf de zijde
1000209=Volgend onderdeel beschadigen
1000210=Met deze optie kunt u beslissen hoe u het volgende onderdeel in de balk beschouwt. De software berekent specifieke in- en uitlopen om de parameter te respecteren. Deze parameter kan de bewerkingstijd beïnvloeden
1000211=Nooit beschadigen
1000212=Nooit beschadigen
1000213=Alleen beschadigen als het onbewerkt hout betreft
1000214=Alleen beschadigen als het onbewerkt hout betreft
1000215=Mag beschadigen
1000216=Mag beschadigen
1000217=Tolerantie op diameter
1000218=Tolerantie op diameter
1000219=Diepte van het voorgat
1000220=Diepte van het voorgat
1000221=Boormodus
1000222=Boormodus
1000223=Automatisch
1000224=Automatisch
1000225=Voorkeursbewerking vanaf slechts één zijde
1000226=Voorkeursbewerking vanaf slechts één zijde
1000227=Bewerking vanaf beide zijden forceren
1000228=Bewerking vanaf beide zijden forceren
1000229=Lijst met beschikbare boren
1000230=Lijst met beschikbare boren
1000231=Verlengen na de staart
1000232=Het automatisme beschouwt deze lengte als bewerkbaar. Dit betekent dat u accepteert dat het volgende onderdeel in de balk beschadigd kan raken
1000233=Volgend onderdeel beschadigen
1000234=Met deze optie kunt u beslissen hoe u het volgende onderdeel in de balk beschouwt. De software berekent specifieke in- en uitlopen om de parameter te respecteren. Deze parameter kan de bewerkingstijd beïnvloeden
1000235=Nooit beschadigen
1000236=Nooit beschadigen
1000237=Alleen beschadigen als het onbewerkt hout betreft
1000238=Alleen beschadigen als het onbewerkt hout betreft
1000239=Mag beschadigen
1000240=Mag beschadigen
1000241=Borstverjonging zaag- en freesstrategie
1000242=Borstverjonging zaag- en freesstrategie
1000243=Automatisch
1000244=Automatisch
1000245=Zaagblad gebruiken
1000246=Zaagblad gebruiken
1000247=Frees gebruiken
1000248=Frees gebruiken
1000249=Tolerantie op diameter
1000250=Tolerantie op diameter
1000251=Frees gebruiken als boor
1000252=Toestaan dat de frees axiaal als boor wordt ingezet
1000253=Alleen contour frezen
1000254=Contour sowieso frezen, zelfs wanneer het gat groter is dan de gereedschapsdiameter
1000255=Boormodus via frezen
1000256=Boormodus via frezen
1000257=Automatisch
1000258=Automatisch
1000259=Voorkeursbewerking vanaf slechts één zijde
1000260=Voorkeursbewerking vanaf slechts één zijde
1000261=Bewerking vanaf beide zijden forceren
1000262=Bewerking vanaf beide zijden forceren
1000263=Beschikbare frezen om gaten te bewerken
1000264=Beschikbare frezen om gaten te bewerken
1000265=Bewerkingsdiepte
1000266=Bewerkingsdiepte
1000267=Beschikbare frees voor markeringen en tekst
1000268=Beschikbare frees voor markeringen en tekst
1000269=Markeerstrategie
1000270=Markeerstrategie
1000271=Automatisch
1000272=Automatisch
1000273=Alleen markeerpen
1000274=Alleen markeerpen
1000275=Alleen V-frees
1000276=Alleen V-frees
1000277=Diepte van de afschuining
1000278=Diepte van de V-frees om afschuiningen op snijkanten uit te voeren
1000279=Alleen afschuining frezen
1000280=Alleen de afschuining uitvoeren, geen andere bewerkingen
1000281=Overmaat
1000282=Overmaat
1000283=Maximale hoekradius achtergelaten op hoeken
1000284=Radiuslimiet achtergelaten door het gereedschap bij elke binnenhoek van de feature
1000285=Zaagsnede uitvoeren om materiaal te verwijderen
1000286=Zaagsnede uitvoeren om materiaal te verwijderen
1000287=Snoei- / steunstrip forceren
1000288=Activeer deze parameter om de software te verplichten een reststrip te laten staan om het onderdeel te ondersteunen
1000289=Breedte van de steunstrip
1000290=Breedte van de strip in het geval dat deze door de bewerking is voorzien
1000291=Kopsnijstrategie
1000292=Kopsnijstrategie
1000293=Automatisch
1000294=Automatisch
1000295=Geen bewerking
1000296=Geen bewerking
1000297=Zaagblad geforceerd
1000298=Zaagblad geforceerd
1000299=Frees geforceerd
1000300=Frees geforceerd
1000301=Beschikbare frees om het kops profiel te bewerken
1000302=Beschikbare frees om het kops profiel te bewerken
1000303=Diepte van de afschuining
1000304=Diepte van de V-frees om afschuiningen op snijkanten uit te voeren
1000305=Gebruik van kettingzaag forceren
1000306=Gebruik van kettingzaag forceren
1000307=PreCuts (Voorsneden) forceren
1000308=Autocam past een bewerking toe op het theoretische nulpunt om botsingen te voorkomen als de theoretische lengte niet overeenkomt met de werkelijke lengte
1000309=Afwerken met frees
1000310=Gebruik een frees om het oppervlak na te bewerken als dit met de kettingzaag is gespleten
1000311=Diepte van de afschuining
1000312=Diepte van de V-frees om afschuiningen op snijkanten uit te voeren
1000313=Gebruik van kettingzaag forceren
1000314=Gebruik van kettingzaag forceren
1000315=PreCuts (Voorsneden) forceren
1000316=Autocam past een bewerking toe op het theoretische nulpunt om botsingen te voorkomen als de theoretische lengte niet overeenkomt met de werkelijke lengte
1000317=Afwerken met frees
1000318=Gebruik een frees om het oppervlak na te bewerken als dit met de kettingzaag is gespleten
// ----- End -----
+8
View File
@@ -131,6 +131,14 @@ local function MyProcessInputData()
else else
PARTS[i].b3PartOriginal = b3Solid PARTS[i].b3PartOriginal = b3Solid
end end
if BeamData.MAX_LENGTH and BeamData.MAX_LENGTH > 10 and b3Solid:getDimX() > BeamData.MAX_LENGTH then
local sOut = 'Lunghezza (' .. EgtNumToString( b3Solid:getDimX(), 2) .. ') ' ..
'oltre i limiti della macchina (' .. EgtNumToString( BeamData.MAX_LENGTH, 2) .. ') '
EgtOutLog( sOut)
EgtOutBox( sOut, 'Lavora Travi', 'WARNING')
EgtDraw()
return false
end
end end
dRawW = PARTS[1].b3PartOriginal:getDimY() dRawW = PARTS[1].b3PartOriginal:getDimY()
dRawH = PARTS[1].b3PartOriginal:getDimZ() dRawH = PARTS[1].b3PartOriginal:getDimZ()
+1 -1
View File
@@ -392,7 +392,7 @@
"TopologyList" : [ "TopologyList" : [
{ "sName": "Feature", { "sName": "Feature",
"sImage": "ConfigStrategy\\Chamfer.png", "sImage": "ConfigStrategy\\Chamfer.png",
"StrategyList" : [ ] "StrategyList" : [ { "sStrategyId": "STR0002" }, { "sStrategyId": "STR0005" }, { "sStrategyId": "STR0010" } ]
} }
] ]
}, },
+47 -2
View File
@@ -1,4 +1,3 @@
[ [
{ {
"nGroup": "PIECE LOADING", "nGroup": "PIECE LOADING",
@@ -7,6 +6,8 @@
"sValue": "BTL_POSITION", "sValue": "BTL_POSITION",
"sDescriptionShort": "Part loading position", "sDescriptionShort": "Part loading position",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000001,
"idDescriptionLongMsg": 1000002,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -14,18 +15,24 @@
"sValue": "BTL_POSITION", "sValue": "BTL_POSITION",
"sDescriptionShort": "Loading position from BTL, no pre-rotation", "sDescriptionShort": "Loading position from BTL, no pre-rotation",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000003,
"idDescriptionLongMsg": 1000004,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "STD_PRE_ROTATION", "sValue": "STD_PRE_ROTATION",
"sDescriptionShort": "Get Best loading position from 0° and 180°", "sDescriptionShort": "Get Best loading position from 0° and 180°",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000005,
"idDescriptionLongMsg": 1000006,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "FULL_PRE_ROTATION", "sValue": "FULL_PRE_ROTATION",
"sDescriptionShort": "Get Best loading position in each piece rotation", "sDescriptionShort": "Get Best loading position in each piece rotation",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000007,
"idDescriptionLongMsg": 1000008,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -37,6 +44,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Allow piece inversion", "sDescriptionShort": "Allow piece inversion",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000009,
"idDescriptionLongMsg": 1000010,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -46,8 +55,10 @@
"sName": "GEN_bGetAlternativesNesting2D", "sName": "GEN_bGetAlternativesNesting2D",
"sNameNge": "GET_ALTERNATIVES_NEST2D", "sNameNge": "GET_ALTERNATIVES_NEST2D",
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Enable material optimization function in nesting", "sDescriptionShort": "Enable material optimization function in nesting (part rotation disabled)",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000011,
"idDescriptionLongMsg": 1000012,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -59,6 +70,8 @@
"sValue": "IF_NECESSARY", "sValue": "IF_NECESSARY",
"sDescriptionShort": "Part rotating acceptability", "sDescriptionShort": "Part rotating acceptability",
"sDescriptionLong": "Acceptability of rotating the part between machining steps", "sDescriptionLong": "Acceptability of rotating the part between machining steps",
"idDescriptionShortMsg": 1000013,
"idDescriptionLongMsg": 1000014,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -66,18 +79,24 @@
"sValue": "NOT_ALLOWED", "sValue": "NOT_ALLOWED",
"sDescriptionShort": "Rotation not allowed", "sDescriptionShort": "Rotation not allowed",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000015,
"idDescriptionLongMsg": 1000016,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "IF_NECESSARY", "sValue": "IF_NECESSARY",
"sDescriptionShort": "Rotation allowed only if strictly necessary", "sDescriptionShort": "Rotation allowed only if strictly necessary",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000017,
"idDescriptionLongMsg": 1000018,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "NO_CONSTRAINT", "sValue": "NO_CONSTRAINT",
"sDescriptionShort": "Rotation easily acceptable / no constraint", "sDescriptionShort": "Rotation easily acceptable / no constraint",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000019,
"idDescriptionLongMsg": 1000020,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -89,6 +108,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Machining Strategy", "sDescriptionShort": "Machining Strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000021,
"idDescriptionLongMsg": 1000022,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -96,18 +117,32 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Quality and time equally prioritized", "sDescriptionShort": "Quality and time equally prioritized",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000023,
"idDescriptionLongMsg": 1000024,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "FASTEST", "sValue": "FASTEST",
"sDescriptionShort": "Fastest", "sDescriptionShort": "Fastest",
"sDescriptionLong": "Prefer fastest strategies", "sDescriptionLong": "Prefer fastest strategies",
"idDescriptionShortMsg": 1000025,
"idDescriptionLongMsg": 1000026,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "HIGH_QUALITY", "sValue": "HIGH_QUALITY",
"sDescriptionShort": "High quality", "sDescriptionShort": "High quality",
"sDescriptionLong": "Prefer high-quality strategies", "sDescriptionLong": "Prefer high-quality strategies",
"idDescriptionShortMsg": 1000027,
"idDescriptionLongMsg": 1000028,
"sMessageId": ""
},
{
"sValue": "FIRST_IN_LIST",
"sDescriptionShort": "Ordering rules",
"sDescriptionLong": "The first complete strategy in list is the one chosen; no intelligent choosing",
"idDescriptionShortMsg": 1000029,
"idDescriptionLongMsg": 1000030,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -119,6 +154,8 @@
"sValue": "1", "sValue": "1",
"sDescriptionShort": "Max number of reprocessing cycles", "sDescriptionShort": "Max number of reprocessing cycles",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000031,
"idDescriptionLongMsg": 1000032,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "10" "sMinUserLevel": "10"
@@ -130,6 +167,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Use entire blade diameter to shorten path", "sDescriptionShort": "Use entire blade diameter to shorten path",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000033,
"idDescriptionLongMsg": 1000034,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "5" "sMinUserLevel": "5"
@@ -141,6 +180,8 @@
"sValue": "300", "sValue": "300",
"sDescriptionShort": "Maximum length for dropped waste", "sDescriptionShort": "Maximum length for dropped waste",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000035,
"idDescriptionLongMsg": 1000036,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "5" "sMinUserLevel": "5"
@@ -152,6 +193,8 @@
"sValue": "6000000", "sValue": "6000000",
"sDescriptionShort": "Maximum volume for dropped waste", "sDescriptionShort": "Maximum volume for dropped waste",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000037,
"idDescriptionLongMsg": 1000038,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "5" "sMinUserLevel": "5"
@@ -163,6 +206,8 @@
"sValue": "150", "sValue": "150",
"sDescriptionShort": "Maximum dice dimension", "sDescriptionShort": "Maximum dice dimension",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000039,
"idDescriptionLongMsg": 1000040,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "5" "sMinUserLevel": "5"
+8 -1
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Depth Chamfer", "sDescriptionShort": "Depth Chamfer",
"sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges", "sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges",
"idDescriptionShortMsg": 1000301,
"idDescriptionLongMsg": 1000302,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Force to use chain saw", "sDescriptionShort": "Force to use chain saw",
"sDescriptionLong": "Force to use chain saw", "sDescriptionLong": "Force to use chain saw",
"idDescriptionShortMsg": 1000303,
"idDescriptionLongMsg": 1000304,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Force to add PreCuts", "sDescriptionShort": "Force to add PreCuts",
"sDescriptionLong": "Autocam will apply a machining on the theoretical zero, to avoid collision if the theoretical piece length doesn't correspond to the real length", "sDescriptionLong": "Autocam will apply a machining on the theoretical zero, to avoid collision if the theoretical piece length doesn't correspond to the real length",
"idDescriptionShortMsg": 1000305,
"idDescriptionLongMsg": 1000306,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Finish with mill", "sDescriptionShort": "Finish with mill",
"sDescriptionLong": "Use a mill to finish the surface if split with chain saw", "sDescriptionLong": "Use a mill to finish the surface if split with chain saw",
"idDescriptionShortMsg": 1000307,
"idDescriptionLongMsg": 1000308,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -59,4 +67,3 @@
} }
] ]
} }
+22
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on tenon length", "sDescriptionShort": "Overmaterial on tenon length",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000041,
"idDescriptionLongMsg": 1000042,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on tenon width", "sDescriptionShort": "Overmaterial on tenon width",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000043,
"idDescriptionLongMsg": 1000044,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "3", "sValue": "3",
"sDescriptionShort": "Maximum number of milling passes", "sDescriptionShort": "Maximum number of milling passes",
"sDescriptionLong": "Maximum number of milling passes. If more passes are required, pocketing is performed", "sDescriptionLong": "Maximum number of milling passes. If more passes are required, pocketing is performed",
"idDescriptionShortMsg": 1000045,
"idDescriptionLongMsg": 1000046,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Use DoveTail tool to pocket", "sDescriptionShort": "Use DoveTail tool to pocket",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000047,
"idDescriptionLongMsg": 1000048,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -48,6 +56,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Cutting Strategy", "sDescriptionShort": "Cutting Strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000049,
"idDescriptionLongMsg": 1000050,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -55,24 +65,32 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000051,
"idDescriptionLongMsg": 1000052,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "BLADE_FORCED", "sValue": "BLADE_FORCED",
"sDescriptionShort": "Blade only", "sDescriptionShort": "Blade only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000053,
"idDescriptionLongMsg": 1000054,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "MILL_FORCED", "sValue": "MILL_FORCED",
"sDescriptionShort": "Mill only", "sDescriptionShort": "Mill only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000055,
"idDescriptionLongMsg": 1000056,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "CHAINSAW_FORCED", "sValue": "CHAINSAW_FORCED",
"sDescriptionShort": "ChainSaw only", "sDescriptionShort": "ChainSaw only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000057,
"idDescriptionLongMsg": 1000058,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -83,6 +101,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the tenon cut surface", "sDescriptionShort": "Available mill to machine the tenon cut surface",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000059,
"idDescriptionLongMsg": 1000060,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
@@ -94,6 +114,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the dovetail tenon", "sDescriptionShort": "Available mill to machine the dovetail tenon",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000061,
"idDescriptionLongMsg": 1000062,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
+1
View File
@@ -87,6 +87,7 @@ local function GetTenonStrategy( Proc, Part)
ToolSearchParameters.dElevation = EgtSurfTmFacetElevationInBBox( Strategy.idTenonCutPlane, 0, Part.b3Part, true, GDB_ID.ROOT) ToolSearchParameters.dElevation = EgtSurfTmFacetElevationInBBox( Strategy.idTenonCutPlane, 0, Part.b3Part, true, GDB_ID.ROOT)
ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtTenonN ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtTenonN
ToolSearchParameters.sMillShape = 'STANDARD'
ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sPocketingList, 'Pocketing') ToolSearchParameters.AvailableToolList = MachiningLib.GetAvailableToolList( Proc, Strategy.Parameters.sPocketingList, 'Pocketing')
Machining.Cutting.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters) Machining.Cutting.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters)
+10
View File
@@ -8,6 +8,8 @@
"sValue": "15", "sValue": "15",
"sDescriptionShort": "Max radius left on corners", "sDescriptionShort": "Max radius left on corners",
"sDescriptionLong": "Radius-limit left by the tool at each corner of the feature", "sDescriptionLong": "Radius-limit left by the tool at each corner of the feature",
"idDescriptionShortMsg": 1000063,
"idDescriptionLongMsg": 1000064,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Use Anti-Splint strategy", "sDescriptionShort": "Use Anti-Splint strategy",
"sDescriptionLong": "The strategy will apply blade cuts on corner to avoid wood splint", "sDescriptionLong": "The strategy will apply blade cuts on corner to avoid wood splint",
"idDescriptionShortMsg": 1000065,
"idDescriptionLongMsg": 1000066,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Extend after tail", "sDescriptionShort": "Extend after tail",
"sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar", "sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar",
"idDescriptionShortMsg": 1000067,
"idDescriptionLongMsg": 1000068,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "10", "sValue": "10",
"sDescriptionShort": "Minimum approach distance on open sides", "sDescriptionShort": "Minimum approach distance on open sides",
"sDescriptionLong": "Minimum approach distance on open sides", "sDescriptionLong": "Minimum approach distance on open sides",
"idDescriptionShortMsg": 1000069,
"idDescriptionLongMsg": 1000070,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -48,6 +56,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to pocket the feature", "sDescriptionShort": "Available mill to pocket the feature",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000071,
"idDescriptionLongMsg": 1000072,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
+5 -3
View File
@@ -27,7 +27,8 @@ local Strategy = {}
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
local function IsTopologyOk( Proc) local function IsTopologyOk( Proc)
if Proc.Topology.sName == 'Pocket-5-Blind' or if Proc.Topology.sFamily == 'PseudoPocket' or
Proc.Topology.sName == 'Pocket-5-Blind' or
Proc.Topology.sName == 'RafterNotch-5-Through' or Proc.Topology.sName == 'RafterNotch-5-Through' or
Proc.Topology.sName == 'Tunnel-4-Through' or Proc.Topology.sName == 'Tunnel-4-Through' or
Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Groove-4-Blind' or
@@ -121,7 +122,7 @@ local function GetBestPocketingStrategy( Proc, Part)
ToolSearchParameters.sType = 'MILL_STD' ToolSearchParameters.sType = 'MILL_STD'
ToolSearchParameters.dMaxToolDiameter = min( Strategy.Parameters.dMaxCornerRadius * 2, Proc.FeatureInfo.dFaceLength / 2) ToolSearchParameters.dMaxToolDiameter = min( Strategy.Parameters.dMaxCornerRadius * 2, Proc.FeatureInfo.dFaceLength / 2)
-- imposto dati per cercare la fresa migliore -- imposto dati per cercare la fresa migliore
elseif Proc.Topology.sName == 'Pocket-5-Blind' then elseif Proc.Topology.sName == 'Pocket-5-Blind' or Proc.Topology.sFamily == 'PseudoPocket' then
local dFaceWidth, dFaceLength local dFaceWidth, dFaceLength
if Proc.MainFaces.BottomFaces[1].MainEdges then if Proc.MainFaces.BottomFaces[1].MainEdges then
dFaceWidth = Proc.MainFaces.BottomFaces[1].MainEdges.LongEdges[1].dLength dFaceWidth = Proc.MainFaces.BottomFaces[1].MainEdges.LongEdges[1].dLength
@@ -233,7 +234,7 @@ local function GetBestPocketingStrategy( Proc, Part)
-- cerco utensile per lavorare di fianco 1 -- cerco utensile per lavorare di fianco 1
Milling = {} Milling = {}
Milling.bIsApplicable = false Milling.bIsApplicable = false
if Proc.Topology.sName ~= 'DoubleBevel-2-Through' if Proc.Topology.sName ~= 'DoubleBevel-2-Through' and Proc.Topology.sFamily ~= 'PseudoPocket'
and Proc.Topology.sName ~= 'Pocket-5-Blind' and Proc.Topology.sName ~= 'RafterNotch-5-Through' then and Proc.Topology.sName ~= 'Pocket-5-Blind' and Proc.Topology.sName ~= 'RafterNotch-5-Through' then
if Proc.Topology.sName == 'Groove-4-Blind' then if Proc.Topology.sName == 'Groove-4-Blind' then
@@ -302,6 +303,7 @@ local function GetBestPocketingStrategy( Proc, Part)
Milling.bIsApplicable = false Milling.bIsApplicable = false
if Proc.Topology.sName ~= 'DoubleBevel-2-Through' if Proc.Topology.sName ~= 'DoubleBevel-2-Through'
and Proc.Topology.sName ~= 'Pocket-5-Blind' and Proc.Topology.sName ~= 'Pocket-5-Blind'
and Proc.Topology.sFamily ~= 'PseudoPocket'
and Proc.Topology.sName ~= 'RafterNotch-5-Through' and Proc.Topology.sName ~= 'RafterNotch-5-Through'
and Proc.Topology.sName ~= 'Groove-4-Blind' and Proc.Topology.sName ~= 'Groove-4-Blind'
and Proc.Topology.sName ~= 'Bevel-3-Blind' then and Proc.Topology.sName ~= 'Bevel-3-Blind' then
+20
View File
@@ -8,6 +8,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Finish with chainsaw if needed", "sDescriptionShort": "Finish with chainsaw if needed",
"sDescriptionLong": "Finish with chainsaw if needed", "sDescriptionLong": "Finish with chainsaw if needed",
"idDescriptionShortMsg": 1000073,
"idDescriptionLongMsg": 1000074,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Extend after tail", "sDescriptionShort": "Extend after tail",
"sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar", "sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar",
"idDescriptionShortMsg": 1000075,
"idDescriptionLongMsg": 1000076,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Force ripping blade", "sDescriptionShort": "Force ripping blade",
"sDescriptionLong": "Force the use of ripping blade, designed for cuts parallel to the grain", "sDescriptionLong": "Force the use of ripping blade, designed for cuts parallel to the grain",
"idDescriptionShortMsg": 1000077,
"idDescriptionLongMsg": 1000078,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Not complete with Blade radius imprint left", "sDescriptionShort": "Not complete with Blade radius imprint left",
"sDescriptionLong": "If the parameter is active, the automatism considers the feature as - not complete - if the blade radius imprint is left", "sDescriptionLong": "If the parameter is active, the automatism considers the feature as - not complete - if the blade radius imprint is left",
"idDescriptionShortMsg": 1000079,
"idDescriptionLongMsg": 1000080,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -48,6 +56,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Use Zig-Zag ChainSaw", "sDescriptionShort": "Use Zig-Zag ChainSaw",
"sDescriptionLong": "Enable the parameter to set the Zig-Zag movement on the ChainSaw machining. Deactivate it to use One-Way movement.", "sDescriptionLong": "Enable the parameter to set the Zig-Zag movement on the ChainSaw machining. Deactivate it to use One-Way movement.",
"idDescriptionShortMsg": 1000081,
"idDescriptionLongMsg": 1000082,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -58,6 +68,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Sort by segment", "sDescriptionShort": "Sort by segment",
"sDescriptionLong": "Sort the machinings according to the piece-segment where the machining has inserted", "sDescriptionLong": "Sort the machinings according to the piece-segment where the machining has inserted",
"idDescriptionShortMsg": 1000083,
"idDescriptionLongMsg": 1000084,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -68,6 +80,8 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Damage next piece", "sDescriptionShort": "Damage next piece",
"sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time", "sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time",
"idDescriptionShortMsg": 1000085,
"idDescriptionLongMsg": 1000086,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -75,18 +89,24 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Never damage", "sDescriptionShort": "Never damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000087,
"idDescriptionLongMsg": 1000088,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ONLY_IF_RAWPART", "sValue": "ONLY_IF_RAWPART",
"sDescriptionShort": "Damage only if raw", "sDescriptionShort": "Damage only if raw",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000089,
"idDescriptionLongMsg": 1000090,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ALWAYS", "sValue": "ALWAYS",
"sDescriptionShort": "Can damage", "sDescriptionShort": "Can damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000091,
"idDescriptionLongMsg": 1000092,
"sMessageId": "" "sMessageId": ""
} }
] ]
+9 -2
View File
@@ -415,7 +415,8 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
end end
-- ancora materiale residuo - se possibile si lavora dal lato -- ancora materiale residuo - se possibile si lavora dal lato
if Chainsaw.Result.Bottom[#Chainsaw.Result.Bottom].dResidualDepth > 10 * GEO.EPS_SMALL if ( Chainsaw.Result.Bottom[#Chainsaw.Result.Bottom].dResidualDepth > 10 * GEO.EPS_SMALL
or not Chainsaw.Result.Bottom[#Chainsaw.Result.Bottom].bIsApplicable)
and #Proc.MainFaces.SideFaces == 1 then and #Proc.MainFaces.SideFaces == 1 then
-- si lavora solamente l'impronta lama sul fondo -- si lavora solamente l'impronta lama sul fondo
@@ -698,7 +699,13 @@ function STR0003.Make( bAddMachining, Proc, Part, CustomParameters)
else else
Strategy.Result.sStatus = 'Not-Completed' Strategy.Result.sStatus = 'Not-Completed'
end end
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( Result)
if Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Pocket-5-Blind' then
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( 'SEMI')
else
Strategy.Result.dQuality = FeatureLib.GetStrategyQuality( Result)
end
Strategy.Result.dTimeToMachine = FeatureLib.GetStrategyTimeToMachine( Result) Strategy.Result.dTimeToMachine = FeatureLib.GetStrategyTimeToMachine( Result)
Strategy.Result.dMRR = ( dFeatureVolume / Strategy.Result.dTimeToMachine) / pow( 10, 6) Strategy.Result.dMRR = ( dFeatureVolume / Strategy.Result.dTimeToMachine) / pow( 10, 6)
else else
+12
View File
@@ -8,6 +8,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Use Zig-Zag ChainSaw", "sDescriptionShort": "Use Zig-Zag ChainSaw",
"sDescriptionLong": "Enable the parameter to set the Zig-Zag movement on the ChainSaw machining. Deactivate it to use One-Way movement.", "sDescriptionLong": "Enable the parameter to set the Zig-Zag movement on the ChainSaw machining. Deactivate it to use One-Way movement.",
"idDescriptionShortMsg": 1000093,
"idDescriptionLongMsg": 1000094,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Extend after tail", "sDescriptionShort": "Extend after tail",
"sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar", "sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar",
"idDescriptionShortMsg": 1000095,
"idDescriptionLongMsg": 1000096,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Damage next piece", "sDescriptionShort": "Damage next piece",
"sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time", "sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time",
"idDescriptionShortMsg": 1000097,
"idDescriptionLongMsg": 1000098,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -35,18 +41,24 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Never damage", "sDescriptionShort": "Never damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000099,
"idDescriptionLongMsg": 1000100,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ONLY_IF_RAWPART", "sValue": "ONLY_IF_RAWPART",
"sDescriptionShort": "Damage only if raw", "sDescriptionShort": "Damage only if raw",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000101,
"idDescriptionLongMsg": 1000102,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ALWAYS", "sValue": "ALWAYS",
"sDescriptionShort": "Can damage", "sDescriptionShort": "Can damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000103,
"idDescriptionLongMsg": 1000104,
"sMessageId": "" "sMessageId": ""
} }
] ]
+30
View File
@@ -8,6 +8,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Force ripping blade", "sDescriptionShort": "Force ripping blade",
"sDescriptionLong": "Force the use of ripping blade, designed for cuts parallel to the grain", "sDescriptionLong": "Force the use of ripping blade, designed for cuts parallel to the grain",
"idDescriptionShortMsg": 1000105,
"idDescriptionLongMsg": 1000106,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Extend after tail", "sDescriptionShort": "Extend after tail",
"sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar", "sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar",
"idDescriptionShortMsg": 1000107,
"idDescriptionLongMsg": 1000108,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Damage next piece", "sDescriptionShort": "Damage next piece",
"sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time", "sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time",
"idDescriptionShortMsg": 1000109,
"idDescriptionLongMsg": 1000110,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -35,18 +41,24 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Never damage", "sDescriptionShort": "Never damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000111,
"idDescriptionLongMsg": 1000112,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ONLY_IF_RAWPART", "sValue": "ONLY_IF_RAWPART",
"sDescriptionShort": "Damage only if raw", "sDescriptionShort": "Damage only if raw",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000113,
"idDescriptionLongMsg": 1000114,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ALWAYS", "sValue": "ALWAYS",
"sDescriptionShort": "Can damage", "sDescriptionShort": "Can damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000115,
"idDescriptionLongMsg": 1000116,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -57,6 +69,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Cutting strategy", "sDescriptionShort": "Cutting strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000117,
"idDescriptionLongMsg": 1000118,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -64,18 +78,24 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000119,
"idDescriptionLongMsg": 1000120,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "DROP_WASTE", "sValue": "DROP_WASTE",
"sDescriptionShort": "Drop waste", "sDescriptionShort": "Drop waste",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000121,
"idDescriptionLongMsg": 1000122,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "KEEP_WASTE_ATTACHED", "sValue": "KEEP_WASTE_ATTACHED",
"sDescriptionShort": "Keep waste attached", "sDescriptionShort": "Keep waste attached",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000123,
"idDescriptionLongMsg": 1000124,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -86,6 +106,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Disable dicing", "sDescriptionShort": "Disable dicing",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000125,
"idDescriptionLongMsg": 1000126,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -96,6 +118,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Prioritize machining speed over quality", "sDescriptionShort": "Prioritize machining speed over quality",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000127,
"idDescriptionLongMsg": 1000128,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -106,6 +130,8 @@
"sValue": "5", "sValue": "5",
"sDescriptionShort": "Strip width", "sDescriptionShort": "Strip width",
"sDescriptionLong": "In case the waste is still kept attached, this is the wigth dimension of the strip", "sDescriptionLong": "In case the waste is still kept attached, this is the wigth dimension of the strip",
"idDescriptionShortMsg": 1000129,
"idDescriptionLongMsg": 1000130,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -116,6 +142,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Clean blade radius with mill", "sDescriptionShort": "Clean blade radius with mill",
"sDescriptionLong": "Clean blade radius with mill", "sDescriptionLong": "Clean blade radius with mill",
"idDescriptionShortMsg": 1000131,
"idDescriptionLongMsg": 1000132,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -126,6 +154,8 @@
"sValue": "1", "sValue": "1",
"sDescriptionShort": "Milling offset from side", "sDescriptionShort": "Milling offset from side",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000133,
"idDescriptionLongMsg": 1000134,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
+18
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on tenon length", "sDescriptionShort": "Overmaterial on tenon length",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000135,
"idDescriptionLongMsg": 1000136,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on tenon width", "sDescriptionShort": "Overmaterial on tenon width",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000137,
"idDescriptionLongMsg": 1000138,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "3", "sValue": "3",
"sDescriptionShort": "Maximum number of milling passes", "sDescriptionShort": "Maximum number of milling passes",
"sDescriptionLong": "Maximum number of milling passes. If more passes are required, pocketing is performed", "sDescriptionLong": "Maximum number of milling passes. If more passes are required, pocketing is performed",
"idDescriptionShortMsg": 1000139,
"idDescriptionLongMsg": 1000140,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Cutting Strategy", "sDescriptionShort": "Cutting Strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000141,
"idDescriptionLongMsg": 1000142,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -45,24 +53,32 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000143,
"idDescriptionLongMsg": 1000144,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "BLADE_FORCED", "sValue": "BLADE_FORCED",
"sDescriptionShort": "Blade only", "sDescriptionShort": "Blade only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000145,
"idDescriptionLongMsg": 1000146,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "MILL_FORCED", "sValue": "MILL_FORCED",
"sDescriptionShort": "Mill only", "sDescriptionShort": "Mill only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000147,
"idDescriptionLongMsg": 1000148,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "CHAINSAW_FORCED", "sValue": "CHAINSAW_FORCED",
"sDescriptionShort": "ChainSaw only", "sDescriptionShort": "ChainSaw only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000149,
"idDescriptionLongMsg": 1000150,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -73,6 +89,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the tenon", "sDescriptionShort": "Available mill to machine the tenon",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000151,
"idDescriptionLongMsg": 1000152,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
+24
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on Mortise length", "sDescriptionShort": "Overmaterial on Mortise length",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000153,
"idDescriptionLongMsg": 1000154,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on Mortise width", "sDescriptionShort": "Overmaterial on Mortise width",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000155,
"idDescriptionLongMsg": 1000156,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "3", "sValue": "3",
"sDescriptionShort": "Maximum number of milling passes", "sDescriptionShort": "Maximum number of milling passes",
"sDescriptionLong": "Maximum number of milling passes. If more passes are required, pocketing is performed", "sDescriptionLong": "Maximum number of milling passes. If more passes are required, pocketing is performed",
"idDescriptionShortMsg": 1000157,
"idDescriptionLongMsg": 1000158,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Use DoveTail tool in case of pocketing", "sDescriptionShort": "Use DoveTail tool in case of pocketing",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000159,
"idDescriptionLongMsg": 1000160,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -48,6 +56,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Add Anti-Splint", "sDescriptionShort": "Add Anti-Splint",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000161,
"idDescriptionLongMsg": 1000162,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -58,6 +68,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Cutting Strategy", "sDescriptionShort": "Cutting Strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000163,
"idDescriptionLongMsg": 1000164,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -65,24 +77,32 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000165,
"idDescriptionLongMsg": 1000166,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "BLADE_FORCED", "sValue": "BLADE_FORCED",
"sDescriptionShort": "Blade only", "sDescriptionShort": "Blade only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000167,
"idDescriptionLongMsg": 1000168,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "MILL_FORCED", "sValue": "MILL_FORCED",
"sDescriptionShort": "Mill only", "sDescriptionShort": "Mill only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000169,
"idDescriptionLongMsg": 1000170,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "CHAINSAW_FORCED", "sValue": "CHAINSAW_FORCED",
"sDescriptionShort": "ChainSaw only", "sDescriptionShort": "ChainSaw only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000171,
"idDescriptionLongMsg": 1000172,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -93,6 +113,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the mortise cut surface", "sDescriptionShort": "Available mill to machine the mortise cut surface",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000173,
"idDescriptionLongMsg": 1000174,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
@@ -104,6 +126,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the dovetail mortise", "sDescriptionShort": "Available mill to machine the dovetail mortise",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000175,
"idDescriptionLongMsg": 1000176,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
+18
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on mortise length", "sDescriptionShort": "Overmaterial on mortise length",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000177,
"idDescriptionLongMsg": 1000178,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial on mortise width", "sDescriptionShort": "Overmaterial on mortise width",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000179,
"idDescriptionLongMsg": 1000180,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Cutting Strategy", "sDescriptionShort": "Cutting Strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000181,
"idDescriptionLongMsg": 1000182,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -35,24 +41,32 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000183,
"idDescriptionLongMsg": 1000184,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "BLADE_FORCED", "sValue": "BLADE_FORCED",
"sDescriptionShort": "Blade only", "sDescriptionShort": "Blade only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000185,
"idDescriptionLongMsg": 1000186,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "MILL_FORCED", "sValue": "MILL_FORCED",
"sDescriptionShort": "Mill only", "sDescriptionShort": "Mill only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000187,
"idDescriptionLongMsg": 1000188,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "CHAINSAW_FORCED", "sValue": "CHAINSAW_FORCED",
"sDescriptionShort": "ChainSaw only", "sDescriptionShort": "ChainSaw only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000189,
"idDescriptionLongMsg": 1000190,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -63,6 +77,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the mortise cut surface", "sDescriptionShort": "Available mill to machine the mortise cut surface",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000191,
"idDescriptionLongMsg": 1000192,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
@@ -74,6 +90,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the mortise", "sDescriptionShort": "Available mill to machine the mortise",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000193,
"idDescriptionLongMsg": 1000194,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
+6 -1
View File
@@ -312,7 +312,12 @@ function STR0008.Make( bAddMachining, Proc, Part, CustomParameters)
for i = 1, #Strategy.Machining.Pocketing do for i = 1, #Strategy.Machining.Pocketing do
if Strategy.Machining.Pocketing[i].bIsApplicable then if Strategy.Machining.Pocketing[i].bIsApplicable then
Pocketing = MachiningLib.InitMachiningParameters( MCH_MY.POCKETING) Pocketing = MachiningLib.InitMachiningParameters( MCH_MY.POCKETING)
Pocketing.nSubType = MCH_POCK_SUB.SPIRALOUT -- se mortasa aperta su un lato si usa SpiralIn
if ( Proc.AffectedFaces.bFront or Proc.AffectedFaces.bBack) and ( Proc.AffectedFaces.bTop or Proc.AffectedFaces.bBottom) then
Pocketing.nSubType = MCH_POCK_SUB.SPIRALIN
else
Pocketing.nSubType = MCH_POCK_SUB.SPIRALOUT
end
Pocketing.LeadIn.nType = MCH_POCK_LI.ZIGZAG Pocketing.LeadIn.nType = MCH_POCK_LI.ZIGZAG
Pocketing.Steps.dStep = TOOLS[Strategy.Machining.Pocketing[i].ToolInfo.nToolIndex].dStep Pocketing.Steps.dStep = TOOLS[Strategy.Machining.Pocketing[i].ToolInfo.nToolIndex].dStep
Pocketing.Steps.dSideStep = TOOLS[Strategy.Machining.Pocketing[i].ToolInfo.nToolIndex].dSideStep Pocketing.Steps.dSideStep = TOOLS[Strategy.Machining.Pocketing[i].ToolInfo.nToolIndex].dSideStep
+6
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Depth Chamfer", "sDescriptionShort": "Depth Chamfer",
"sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges", "sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges",
"idDescriptionShortMsg": 1000195,
"idDescriptionLongMsg": 1000196,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Use Anti-Splint strategy", "sDescriptionShort": "Use Anti-Splint strategy",
"sDescriptionLong": "The strategy will apply blade cuts on corner to avoid wood splint", "sDescriptionLong": "The strategy will apply blade cuts on corner to avoid wood splint",
"idDescriptionShortMsg": 1000197,
"idDescriptionLongMsg": 1000198,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the profile", "sDescriptionShort": "Available mill to machine the profile",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000199,
"idDescriptionLongMsg": 1000200,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
+16
View File
@@ -8,6 +8,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Antisplint with blade", "sDescriptionShort": "Antisplint with blade",
"sDescriptionLong": "Use the blade as antisplint in case the geometry is not through", "sDescriptionLong": "Use the blade as antisplint in case the geometry is not through",
"idDescriptionShortMsg": 1000201,
"idDescriptionLongMsg": 1000202,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Extend after tail", "sDescriptionShort": "Extend after tail",
"sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar", "sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar",
"idDescriptionShortMsg": 1000203,
"idDescriptionLongMsg": 1000204,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Clean radius with mill", "sDescriptionShort": "Clean radius with mill",
"sDescriptionLong": "Clean radius with mill", "sDescriptionLong": "Clean radius with mill",
"idDescriptionShortMsg": 1000205,
"idDescriptionLongMsg": 1000206,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "1", "sValue": "1",
"sDescriptionShort": "Milling offset from side", "sDescriptionShort": "Milling offset from side",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000207,
"idDescriptionLongMsg": 1000208,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -48,6 +56,8 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Damage next piece", "sDescriptionShort": "Damage next piece",
"sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time", "sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time",
"idDescriptionShortMsg": 1000209,
"idDescriptionLongMsg": 1000210,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -55,18 +65,24 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Never damage", "sDescriptionShort": "Never damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000211,
"idDescriptionLongMsg": 1000212,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ONLY_IF_RAWPART", "sValue": "ONLY_IF_RAWPART",
"sDescriptionShort": "Damage only if raw", "sDescriptionShort": "Damage only if raw",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000213,
"idDescriptionLongMsg": 1000214,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ALWAYS", "sValue": "ALWAYS",
"sDescriptionShort": "Can damage", "sDescriptionShort": "Can damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000215,
"idDescriptionLongMsg": 1000216,
"sMessageId": "" "sMessageId": ""
} }
] ]
-1
View File
@@ -215,7 +215,6 @@ function STR0010.Make( bAddMachining, Proc, Part, CustomParameters)
end end
-- se la lavorazione ostacola il pinzaggio, non posso farla, serve una lavorazioen che lasci il testimone -- se la lavorazione ostacola il pinzaggio, non posso farla, serve una lavorazioen che lasci il testimone
-- TODO Girando il pezzo trova sempre che limitano il pinzaggio se pezzo piccolo!! Il controllo non va bene. Da rifare
if MachiningLib.IsFeatureHinderingClamping( Proc, Part) then if MachiningLib.IsFeatureHinderingClamping( Proc, Part) then
local sErr = 'Feature '.. Proc.idFeature .. ' : strategy ' .. StrategyLib.Config.sStrategyId .. ' not applicable ( Feature hinders clamping)' local sErr = 'Feature '.. Proc.idFeature .. ' : strategy ' .. StrategyLib.Config.sStrategyId .. ' not applicable ( Feature hinders clamping)'
EgtOutLog( sErr) EgtOutLog( sErr)
+14
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Tolerance on Diameter", "sDescriptionShort": "Tolerance on Diameter",
"sDescriptionLong": "Tolerance on Diameter", "sDescriptionLong": "Tolerance on Diameter",
"idDescriptionShortMsg": 1000217,
"idDescriptionLongMsg": 1000218,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Depth PreHole", "sDescriptionShort": "Depth PreHole",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000219,
"idDescriptionLongMsg": 1000220,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Drilling Mode", "sDescriptionShort": "Drilling Mode",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000221,
"idDescriptionLongMsg": 1000222,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -35,18 +41,24 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000223,
"idDescriptionLongMsg": 1000224,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "PREFER_ONE", "sValue": "PREFER_ONE",
"sDescriptionShort": "Preferred machining from one side only", "sDescriptionShort": "Preferred machining from one side only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000225,
"idDescriptionLongMsg": 1000226,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "FORCE_TWO", "sValue": "FORCE_TWO",
"sDescriptionShort": "Force machining from two sides", "sDescriptionShort": "Force machining from two sides",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000227,
"idDescriptionLongMsg": 1000228,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -57,6 +69,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available Drillbit list", "sDescriptionShort": "Available Drillbit list",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000229,
"idDescriptionLongMsg": 1000230,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.DRILLBIT", "sSubType": "MCH_TF.DRILLBIT",
"sMessageId": " ", "sMessageId": " ",
+23
View File
@@ -16,6 +16,27 @@ local Strategy = {}
-- TODO Da fare completamente gestione foratura doppia con 2 teste -- TODO Da fare completamente gestione foratura doppia con 2 teste
-------------------------------------------------------------------------------------------------------------
local function GetSCC( vtMachiningDirection)
-- TODO implementare SCC come per FacesBySaw
local nSCC = MCH_SCC.NONE
if vtMachiningDirection:getZ() < -0.9 then
nSCC = MCH_SCC.ADIR_ZM
elseif vtMachiningDirection:getZ() > 0.9 then
nSCC = MCH_SCC.ADIR_ZP
elseif vtMachiningDirection:getY() < -0.707 then
nSCC = MCH_SCC.ADIR_YM
elseif vtMachiningDirection:getY() > 0.707 then
nSCC = MCH_SCC.ADIR_YP
elseif vtMachiningDirection:getX() < -0.707 then
nSCC = MCH_SCC.ADIR_XM
elseif vtMachiningDirection:getX() > 0.707 then
nSCC = MCH_SCC.ADIR_XP
end
return nSCC
end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
local function GetDrillingStrategy( Proc, Part) local function GetDrillingStrategy( Proc, Part)
local ToolSearchParameters = {} local ToolSearchParameters = {}
@@ -39,6 +60,7 @@ local function GetDrillingStrategy( Proc, Part)
Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex Drilling.nToolIndex = Drilling.ToolInfo.nToolIndex
Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion Drilling.vtToolDirection = Proc.FeatureInfo.vtDrillExtrusion
Drilling.dStep = TOOLS[Drilling.nToolIndex].dStep Drilling.dStep = TOOLS[Drilling.nToolIndex].dStep
Drilling.nSCC = GetSCC( -Drilling.vtToolDirection)
end end
-- TODO se utensile 2 che si torverà è il gemello da usare nelle lavorazioni in doppio, allora gestire di conseguenza l'applicazione delle lavorazioni in doppio -- TODO se utensile 2 che si torverà è il gemello da usare nelle lavorazioni in doppio, allora gestire di conseguenza l'applicazione delle lavorazioni in doppio
@@ -61,6 +83,7 @@ local function GetDrillingStrategy( Proc, Part)
Drilling2.bInvert = true Drilling2.bInvert = true
Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion Drilling2.vtToolDirection = -Proc.FeatureInfo.vtDrillExtrusion
Drilling2.dStep = TOOLS[Drilling2.nToolIndex].dStep Drilling2.dStep = TOOLS[Drilling2.nToolIndex].dStep
Drilling2.nSCC = GetSCC( -Drilling2.vtToolDirection)
end end
end end
+18
View File
@@ -8,6 +8,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Extend after tail", "sDescriptionShort": "Extend after tail",
"sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar", "sDescriptionLong": "The automatism considers this length as machinable. This means you accept to damage the next piece in the bar",
"idDescriptionShortMsg": 1000231,
"idDescriptionLongMsg": 1000232,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Damage next piece", "sDescriptionShort": "Damage next piece",
"sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time", "sDescriptionLong": "This option allows you to decide how to consider the next piece in the bar. The software calculates specifics LeadIn/out to respect the parameter. This parameter may change the machining time",
"idDescriptionShortMsg": 1000233,
"idDescriptionLongMsg": 1000234,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -25,18 +29,24 @@
"sValue": "NEVER", "sValue": "NEVER",
"sDescriptionShort": "Never damage", "sDescriptionShort": "Never damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000235,
"idDescriptionLongMsg": 1000236,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ONLY_IF_RAWPART", "sValue": "ONLY_IF_RAWPART",
"sDescriptionShort": "Damage only if raw", "sDescriptionShort": "Damage only if raw",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000237,
"idDescriptionLongMsg": 1000238,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "ALWAYS", "sValue": "ALWAYS",
"sDescriptionShort": "Can damage", "sDescriptionShort": "Can damage",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000239,
"idDescriptionLongMsg": 1000240,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -47,6 +57,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Ridge Lap strategy", "sDescriptionShort": "Ridge Lap strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000241,
"idDescriptionLongMsg": 1000242,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -54,18 +66,24 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000243,
"idDescriptionLongMsg": 1000244,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "BLADE", "sValue": "BLADE",
"sDescriptionShort": "Use blade", "sDescriptionShort": "Use blade",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000245,
"idDescriptionLongMsg": 1000246,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "MILL", "sValue": "MILL",
"sDescriptionShort": "Use mill", "sDescriptionShort": "Use mill",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000247,
"idDescriptionLongMsg": 1000248,
"sMessageId": "" "sMessageId": ""
} }
] ]
+16
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Tolerance on Diameter", "sDescriptionShort": "Tolerance on Diameter",
"sDescriptionLong": "Tolerance on Diameter", "sDescriptionLong": "Tolerance on Diameter",
"idDescriptionShortMsg": 1000249,
"idDescriptionLongMsg": 1000250,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Use mill as a drillbit", "sDescriptionShort": "Use mill as a drillbit",
"sDescriptionLong": "Admit to use the mill as a drillbit", "sDescriptionLong": "Admit to use the mill as a drillbit",
"idDescriptionShortMsg": 1000251,
"idDescriptionLongMsg": 1000252,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Execute contour only", "sDescriptionShort": "Execute contour only",
"sDescriptionLong": "Execute the contour anyway, even the hole is bigger than the tool diameter", "sDescriptionLong": "Execute the contour anyway, even the hole is bigger than the tool diameter",
"idDescriptionShortMsg": 1000253,
"idDescriptionLongMsg": 1000254,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Drilling mode", "sDescriptionShort": "Drilling mode",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000255,
"idDescriptionLongMsg": 1000256,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -45,18 +53,24 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000257,
"idDescriptionLongMsg": 1000258,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "PREFER_ONE", "sValue": "PREFER_ONE",
"sDescriptionShort": "Preferred machining from one side only", "sDescriptionShort": "Preferred machining from one side only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000259,
"idDescriptionLongMsg": 1000260,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "FORCE_TWO", "sValue": "FORCE_TWO",
"sDescriptionShort": "Force machining from two sides", "sDescriptionShort": "Force machining from two sides",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000261,
"idDescriptionLongMsg": 1000262,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -67,6 +81,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine drills", "sDescriptionShort": "Available mill to machine drills",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000263,
"idDescriptionLongMsg": 1000264,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
+24
View File
@@ -14,6 +14,27 @@ local FeatureLib = require( 'FeatureLib')
local STR0013 = {} local STR0013 = {}
local Strategy = {} local Strategy = {}
-------------------------------------------------------------------------------------------------------------
local function GetSCC( vtMachiningDirection)
-- TODO implementare SCC come per FacesBySaw
local nSCC = MCH_SCC.NONE
if vtMachiningDirection:getZ() < -0.9 then
nSCC = MCH_SCC.ADIR_ZM
elseif vtMachiningDirection:getZ() > 0.9 then
nSCC = MCH_SCC.ADIR_ZP
elseif vtMachiningDirection:getY() < -0.707 then
nSCC = MCH_SCC.ADIR_YM
elseif vtMachiningDirection:getY() > 0.707 then
nSCC = MCH_SCC.ADIR_YP
elseif vtMachiningDirection:getX() < -0.707 then
nSCC = MCH_SCC.ADIR_XM
elseif vtMachiningDirection:getX() > 0.707 then
nSCC = MCH_SCC.ADIR_XP
end
return nSCC
end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
local function GetDrillingWithMillStrategy( Proc, Part) local function GetDrillingWithMillStrategy( Proc, Part)
local ToolSearchParameters = {} local ToolSearchParameters = {}
@@ -172,6 +193,7 @@ function STR0013.Make( bAddMachining, Proc, Part, CustomParameters)
MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING) MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.DRILLING)
MachiningToAdd = BeamLib.MergeTables( MachiningToAdd, Strategy.Machinings[j]) MachiningToAdd = BeamLib.MergeTables( MachiningToAdd, Strategy.Machinings[j])
MachiningToAdd.Steps.dStep = TOOLS[nIndexTool].dStep / 3 MachiningToAdd.Steps.dStep = TOOLS[nIndexTool].dStep / 3
MachiningToAdd.nSCC = GetSCC( -MachiningToAdd.vtToolDirection)
-- se diametro foro più grande della fresa, ma non oltre il doppio del diametro, si fa contornatura a spirale -- se diametro foro più grande della fresa, ma non oltre il doppio del diametro, si fa contornatura a spirale
elseif Proc.FeatureInfo.dDrillDiam < ( TOOLS[nIndexTool].dDiameter * 0.75) * 2 or Strategy.Parameters.bOnlyContouring then elseif Proc.FeatureInfo.dDrillDiam < ( TOOLS[nIndexTool].dDiameter * 0.75) * 2 or Strategy.Parameters.bOnlyContouring then
MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.MILLING) MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.MILLING)
@@ -184,6 +206,7 @@ function STR0013.Make( bAddMachining, Proc, Part, CustomParameters)
MachiningToAdd.LeadOut.dTangentDistance = 0.5 MachiningToAdd.LeadOut.dTangentDistance = 0.5
MachiningToAdd.LeadOut.dPerpDistance = 0.5 MachiningToAdd.LeadOut.dPerpDistance = 0.5
MachiningToAdd.LeadOut.dElevation = Proc.FeatureInfo.dDrillLen MachiningToAdd.LeadOut.dElevation = Proc.FeatureInfo.dDrillLen
MachiningToAdd.nSCC = GetSCC( -MachiningToAdd.vtToolDirection)
-- se diametro foro più grande del doppio del diametro fresa, si fa svuotatura -- se diametro foro più grande del doppio del diametro fresa, si fa svuotatura
else else
MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.POCKETING) MachiningToAdd = MachiningLib.InitMachiningParameters( MCH_MY.POCKETING)
@@ -194,6 +217,7 @@ function STR0013.Make( bAddMachining, Proc, Part, CustomParameters)
MachiningToAdd.LeadIn.nType = MCH_POCK_LI.HELIX MachiningToAdd.LeadIn.nType = MCH_POCK_LI.HELIX
MachiningToAdd.LeadIn.dTangentDistance = TOOLS[nIndexTool].dDiameter / 2 MachiningToAdd.LeadIn.dTangentDistance = TOOLS[nIndexTool].dDiameter / 2
MachiningToAdd.LeadIn.dElevation = MachiningToAdd.Steps.dStep / 2 MachiningToAdd.LeadIn.dElevation = MachiningToAdd.Steps.dStep / 2
MachiningToAdd.nSCC = GetSCC( -MachiningToAdd.vtToolDirection)
end end
MachiningToAdd.nToolIndex = nIndexTool MachiningToAdd.nToolIndex = nIndexTool
+12
View File
@@ -8,6 +8,8 @@
"sValue": "1", "sValue": "1",
"sDescriptionShort": "Machining Depth", "sDescriptionShort": "Machining Depth",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000265,
"idDescriptionLongMsg": 1000266,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine mark and text", "sDescriptionShort": "Available mill to machine mark and text",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000267,
"idDescriptionLongMsg": 1000268,
"sType": "tool", "sType": "tool",
"sSubType": "MCH_TF.MILL", "sSubType": "MCH_TF.MILL",
"sMessageId": " ", "sMessageId": " ",
@@ -29,6 +33,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Marking Strategy", "sDescriptionShort": "Marking Strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000269,
"idDescriptionLongMsg": 1000270,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -36,18 +42,24 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000271,
"idDescriptionLongMsg": 1000272,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "PEN_FORCED", "sValue": "PEN_FORCED",
"sDescriptionShort": "Pen only", "sDescriptionShort": "Pen only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000273,
"idDescriptionLongMsg": 1000274,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "VMILL_FORCED", "sValue": "VMILL_FORCED",
"sDescriptionShort": "V-Mill only", "sDescriptionShort": "V-Mill only",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000275,
"idDescriptionLongMsg": 1000276,
"sMessageId": "" "sMessageId": ""
} }
] ]
+26
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Depth Chamfer", "sDescriptionShort": "Depth Chamfer",
"sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges", "sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges",
"idDescriptionShortMsg": 1000277,
"idDescriptionLongMsg": 1000278,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Only Chamfer", "sDescriptionShort": "Only Chamfer",
"sDescriptionLong": "Execute the chamfer only, no other machining", "sDescriptionLong": "Execute the chamfer only, no other machining",
"idDescriptionShortMsg": 1000279,
"idDescriptionLongMsg": 1000280,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Overmaterial", "sDescriptionShort": "Overmaterial",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000281,
"idDescriptionLongMsg": 1000282,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "15", "sValue": "15",
"sDescriptionShort": "Max radius left on corners", "sDescriptionShort": "Max radius left on corners",
"sDescriptionLong": "Radius-limit left by the tool at each corner of the feature", "sDescriptionLong": "Radius-limit left by the tool at each corner of the feature",
"idDescriptionShortMsg": 1000283,
"idDescriptionLongMsg": 1000284,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -48,6 +56,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Execute cut to remove material", "sDescriptionShort": "Execute cut to remove material",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000285,
"idDescriptionLongMsg": 1000286,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -58,6 +68,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Force strip", "sDescriptionShort": "Force strip",
"sDescriptionLong": "Enable the parameter to force the software to leave a strip to sustain the piece", "sDescriptionLong": "Enable the parameter to force the software to leave a strip to sustain the piece",
"idDescriptionShortMsg": 1000287,
"idDescriptionLongMsg": 1000288,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -68,6 +80,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Strip width", "sDescriptionShort": "Strip width",
"sDescriptionLong": "Width of the strip in case if foreseen from the machining", "sDescriptionLong": "Width of the strip in case if foreseen from the machining",
"idDescriptionShortMsg": 1000289,
"idDescriptionLongMsg": 1000290,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -78,6 +92,8 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Cutting Strategy", "sDescriptionShort": "Cutting Strategy",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000291,
"idDescriptionLongMsg": 1000292,
"sType": "combo", "sType": "combo",
"sMinUserLevel": "1", "sMinUserLevel": "1",
"Choices": [ "Choices": [
@@ -85,24 +101,32 @@
"sValue": "AUTO", "sValue": "AUTO",
"sDescriptionShort": "Automatic", "sDescriptionShort": "Automatic",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000293,
"idDescriptionLongMsg": 1000294,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "NONE", "sValue": "NONE",
"sDescriptionShort": "No machining", "sDescriptionShort": "No machining",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000295,
"idDescriptionLongMsg": 1000296,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "BLADE_FORCED", "sValue": "BLADE_FORCED",
"sDescriptionShort": "Blade forced", "sDescriptionShort": "Blade forced",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000297,
"idDescriptionLongMsg": 1000298,
"sMessageId": "" "sMessageId": ""
}, },
{ {
"sValue": "MILL_FORCED", "sValue": "MILL_FORCED",
"sDescriptionShort": "Mill forced", "sDescriptionShort": "Mill forced",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000299,
"idDescriptionLongMsg": 1000300,
"sMessageId": "" "sMessageId": ""
} }
] ]
@@ -113,6 +137,8 @@
"sValue": "", "sValue": "",
"sDescriptionShort": "Available mill to machine the profile", "sDescriptionShort": "Available mill to machine the profile",
"sDescriptionLong": "", "sDescriptionLong": "",
"idDescriptionShortMsg": 1000301,
"idDescriptionLongMsg": 1000302,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
+52 -34
View File
@@ -704,6 +704,21 @@ local function GetFeatureResult( Proc)
return Result return Result
end end
-------------------------------------------------------------------------------------------------------------
local function GetSCC( Proc, vtToolDirection)
local nSCC = MCH_SCC.NONE
if Proc.AffectedFaces.bRight and not Proc.AffectedFaces.bLeft then
nSCC = MCH_SCC.ADIR_XP
elseif Proc.AffectedFaces.bLeft and not Proc.AffectedFaces.bRight then
nSCC = MCH_SCC.ADIR_XM
elseif vtToolDirection and AreSameOrOppositeVectorApprox( vtToolDirection, Z_AX()) then
nSCC = MCH_SCC.ADIR_YP
end
return nSCC
end
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
function STR0015.Make( bAddMachining, Proc, Part, CustomParameters) function STR0015.Make( bAddMachining, Proc, Part, CustomParameters)
-- carico parametri de default e li aggiorno con quelli passati dal chiamante (potrebbero non essere congruenti) -- carico parametri de default e li aggiorno con quelli passati dal chiamante (potrebbero non essere congruenti)
@@ -814,53 +829,56 @@ function STR0015.Make( bAddMachining, Proc, Part, CustomParameters)
if Strategy.Profile.Machinings then if Strategy.Profile.Machinings then
for i = 1, #Strategy.Profile.Machinings do for i = 1, #Strategy.Profile.Machinings do
Strategy.Profile.Machinings[i].Geometry = {{ Proc.idAddAuxGeom, -1}} local CurrentMachining = Strategy.Profile.Machinings[i]
Strategy.Profile.Machinings[i].nToolIndex = Strategy.Profile.Machinings[i].ToolInfo.nToolIndex
Strategy.Profile.Machinings[i].nType = MCH_MY.MILLING CurrentMachining.Geometry = {{ Proc.idAddAuxGeom, -1}}
Strategy.Profile.Machinings[i].Steps = MachiningLib.GetMachiningSteps( false, tonumber( Strategy.Profile.Machinings[i].sDepth), TOOLS[Strategy.Profile.Machinings[i].nToolIndex].dStep) CurrentMachining.nToolIndex = CurrentMachining.ToolInfo.nToolIndex
Strategy.Profile.Machinings[i].Steps.nStepType = MCH_MILL_ST.ONEWAY CurrentMachining.nType = MCH_MY.MILLING
CurrentMachining.Steps = MachiningLib.GetMachiningSteps( false, tonumber( CurrentMachining.sDepth), TOOLS[CurrentMachining.nToolIndex].dStep)
CurrentMachining.Steps.nStepType = MCH_MILL_ST.ONEWAY
CurrentMachining.nSCC = GetSCC( Proc, CurrentMachining.vtToolDirection)
-- LeadIn / LeadOut -- LeadIn / LeadOut
Strategy.Profile.Machinings[i].LeadIn.nType = MCH_MILL_LI.TANGENT CurrentMachining.LeadIn.nType = MCH_MILL_LI.TANGENT
Strategy.Profile.Machinings[i].LeadOut.nType = MCH_MILL_LI.TANGENT CurrentMachining.LeadOut.nType = MCH_MILL_LI.TANGENT
Strategy.Profile.Machinings[i].LeadIn.dTangentDistance = TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC CurrentMachining.LeadIn.dTangentDistance = TOOLS[CurrentMachining.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC
Strategy.Profile.Machinings[i].LeadIn.dPerpDistance = 0 CurrentMachining.LeadIn.dPerpDistance = 0
Strategy.Profile.Machinings[i].LeadIn.dStartAddLength = 0 CurrentMachining.LeadIn.dStartAddLength = 0
Strategy.Profile.Machinings[i].LeadOut.dTangentDistance = TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC CurrentMachining.LeadOut.dTangentDistance = TOOLS[CurrentMachining.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC
Strategy.Profile.Machinings[i].LeadOut.dPerpDistance = 0 CurrentMachining.LeadOut.dPerpDistance = 0
Strategy.Profile.Machinings[i].LeadOut.dEndAddLength = 0 CurrentMachining.LeadOut.dEndAddLength = 0
if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then if Proc.AffectedFaces.bLeft and Strategy.bCanMoveAfterSplit then
Strategy.Profile.Machinings[i].sStage = 'AfterTail' CurrentMachining.sStage = 'AfterTail'
end end
-- preparo attacco/uscita in caso di spezzatura arco -- preparo attacco/uscita in caso di spezzatura arco
Strategy.Profile.Machinings[i].LeadInForSplit = BeamLib.TableCopyDeep( Strategy.Profile.Machinings[i].LeadIn) CurrentMachining.LeadInForSplit = BeamLib.TableCopyDeep( CurrentMachining.LeadIn)
Strategy.Profile.Machinings[i].LeadOutForSplit = BeamLib.TableCopyDeep( Strategy.Profile.Machinings[i].LeadOut) CurrentMachining.LeadOutForSplit = BeamLib.TableCopyDeep( CurrentMachining.LeadOut)
Strategy.Profile.Machinings[i].LeadInForSplit.nType = MCH_MILL_LI.LINEAR CurrentMachining.LeadInForSplit.nType = MCH_MILL_LI.LINEAR
Strategy.Profile.Machinings[i].LeadOutForSplit.nType = MCH_MILL_LI.LINEAR CurrentMachining.LeadOutForSplit.nType = MCH_MILL_LI.LINEAR
Strategy.Profile.Machinings[i].LeadInForSplit.dTangentDistance = 0 CurrentMachining.LeadInForSplit.dTangentDistance = 0
Strategy.Profile.Machinings[i].LeadInForSplit.dPerpDistance = TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC CurrentMachining.LeadInForSplit.dPerpDistance = TOOLS[CurrentMachining.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC
Strategy.Profile.Machinings[i].LeadOutForSplit.dTangentDistance = 0 CurrentMachining.LeadOutForSplit.dTangentDistance = 0
Strategy.Profile.Machinings[i].LeadOutForSplit.dPerpDistance = TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC CurrentMachining.LeadOutForSplit.dPerpDistance = TOOLS[CurrentMachining.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC
-- sistemo il lato e la direzione di lavoro -- sistemo il lato e la direzione di lavoro
if Strategy.Profile.Machinings[i].bOtherDirection then if CurrentMachining.bOtherDirection then
Strategy.Profile.Machinings[i].bToolInvert = true CurrentMachining.bToolInvert = true
Strategy.Profile.Machinings[i].bInvert = EgtIf( TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].bIsCCW, true, false) CurrentMachining.bInvert = EgtIf( TOOLS[CurrentMachining.ToolInfo.nToolIndex].bIsCCW, true, false)
Strategy.Profile.Machinings[i].nWorkside = EgtIf( TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT) CurrentMachining.nWorkside = EgtIf( TOOLS[CurrentMachining.ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT)
else else
Strategy.Profile.Machinings[i].bInvert = EgtIf( TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].bIsCCW, false, true) CurrentMachining.bInvert = EgtIf( TOOLS[CurrentMachining.ToolInfo.nToolIndex].bIsCCW, false, true)
Strategy.Profile.Machinings[i].nWorkside = EgtIf( TOOLS[Strategy.Profile.Machinings[i].ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT) CurrentMachining.nWorkside = EgtIf( TOOLS[CurrentMachining.ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT)
end end
Strategy.Profile.Machinings[i].ptEdge1 = EgtSP( Proc.idAddAuxGeom, GDB_ID.ROOT) CurrentMachining.ptEdge1 = EgtSP( Proc.idAddAuxGeom, GDB_ID.ROOT)
Strategy.Profile.Machinings[i].ptEdge2 = EgtEP( Proc.idAddAuxGeom, GDB_ID.ROOT) CurrentMachining.ptEdge2 = EgtEP( Proc.idAddAuxGeom, GDB_ID.ROOT)
Strategy.Profile.Machinings[i].dEdgeLength = EgtCurveLength( Proc.idAddAuxGeom) CurrentMachining.dEdgeLength = EgtCurveLength( Proc.idAddAuxGeom)
Strategy.Profile.Machinings[i].vtEdgeDirection = EgtSV( Proc.idAddAuxGeom, GDB_ID.ROOT) + EgtMV( Proc.idAddAuxGeom, GDB_ID.ROOT) + EgtEV( Proc.idAddAuxGeom, GDB_ID.ROOT) CurrentMachining.vtEdgeDirection = EgtSV( Proc.idAddAuxGeom, GDB_ID.ROOT) + EgtMV( Proc.idAddAuxGeom, GDB_ID.ROOT) + EgtEV( Proc.idAddAuxGeom, GDB_ID.ROOT)
Strategy.Profile.Machinings[i].dLengthOnX = Proc.b3Box:getDimX() CurrentMachining.dLengthOnX = Proc.b3Box:getDimX()
local MachiningToSplit = {} local MachiningToSplit = {}
table.insert( MachiningToSplit, Strategy.Profile.Machinings[i]) table.insert( MachiningToSplit, CurrentMachining)
local MachiningResult = MachiningLib.GetSplitMachinings( MachiningToSplit, FeatureSplittingPoints, Part) local MachiningResult = MachiningLib.GetSplitMachinings( MachiningToSplit, FeatureSplittingPoints, Part)
-- aggiunge lavorazione -- aggiunge lavorazione
for j = 1, #MachiningResult do for j = 1, #MachiningResult do
+8
View File
@@ -8,6 +8,8 @@
"sValue": "0", "sValue": "0",
"sDescriptionShort": "Depth Chamfer", "sDescriptionShort": "Depth Chamfer",
"sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges", "sDescriptionLong": "Depth of the V-Mill to execute chamfers on cut-edges",
"idDescriptionShortMsg": 1000309,
"idDescriptionLongMsg": 1000310,
"sType": "d", "sType": "d",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -18,6 +20,8 @@
"sValue": "false", "sValue": "false",
"sDescriptionShort": "Force to use chain saw", "sDescriptionShort": "Force to use chain saw",
"sDescriptionLong": "Force to use chain saw", "sDescriptionLong": "Force to use chain saw",
"idDescriptionShortMsg": 1000311,
"idDescriptionLongMsg": 1000312,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -28,6 +32,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Force to add PreCuts", "sDescriptionShort": "Force to add PreCuts",
"sDescriptionLong": "Autocam will apply a machining on the theoretical zero, to avoid collision if the theoretical piece length doesn't correspond to the real length", "sDescriptionLong": "Autocam will apply a machining on the theoretical zero, to avoid collision if the theoretical piece length doesn't correspond to the real length",
"idDescriptionShortMsg": 1000313,
"idDescriptionLongMsg": 1000314,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
@@ -38,6 +44,8 @@
"sValue": "true", "sValue": "true",
"sDescriptionShort": "Finish with mill", "sDescriptionShort": "Finish with mill",
"sDescriptionLong": "Use a mill to finish the surface if split with chain saw", "sDescriptionLong": "Use a mill to finish the surface if split with chain saw",
"idDescriptionShortMsg": 1000315,
"idDescriptionLongMsg": 1000316,
"sType": "b", "sType": "b",
"sMessageId": " ", "sMessageId": " ",
"sMinUserLevel": "1" "sMinUserLevel": "1"
+1 -1
View File
@@ -79,7 +79,7 @@ STR0015 = Profilo arcuato (Head Cambered Profile)
; Feature : French Ridge Lap ; Feature : French Ridge Lap
35,1,Feature, 35,1,Feature,
; Feature : Chamfer ; Feature : Chamfer
36,0,Feature, 36,0,Feature,STR0002,STR0005,STR0010
; Feature : Block Haus Half Lap ; Feature : Block Haus Half Lap
37,0,Feature, 37,0,Feature,
; Feature : Block Haus Front ; Feature : Block Haus Front
+5 -5
View File
@@ -216,27 +216,27 @@ function BLADEKEEPWASTE.Make( Proc, Part, OptionalParameters)
local CalculatedMachinings = {} local CalculatedMachinings = {}
-- controlli preventivi -- controlli preventivi
if Proc.nFct > 3 and ( not Proc.Topology.sFamily == 'DoubleBevel') then if Proc.nFct > 3 and Proc.Topology.sFamily ~= 'DoubleBevel' then
Result = FeatureLib.GetStrategyResultNotApplicable( 'BladeKeepWaste : max 3 faces supported') Result = FeatureLib.GetStrategyResultNotApplicable( 'BladeKeepWaste : max 3 faces supported')
return Machinings, Result return Machinings, Result
elseif Proc.nFct == 2 then elseif Proc.nFct == 2 then
-- per angolo tra le facce >= 90deg (feature convessa) non applicabile -- per angolo tra le facce >= 90deg (feature convessa) non applicabile
if Proc.AdjacencyMatrix[1][2] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[1][2] < -91 then if Proc.AdjacencyMatrix[1][2] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[1][2] < -91 then
Result = FeatureLib.GetStrategyResultNotApplicable( 'BladeKeepWaste : angle between faces must be concave and >= 90deg') Result = FeatureLib.GetStrategyResultNotApplicable()
return Machinings, Result return Machinings, Result
end end
elseif Proc.nFct == 3 then elseif Proc.nFct == 3 then
-- caso speciale RidgeLap - per angolo tra le facce >= 90deg (feature convessa) non applicabile -- caso speciale RidgeLap - per angolo tra le facce >= 90deg (feature convessa) non applicabile
if Proc.AdjacencyMatrix[1][2] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[1][2] < -91 then if Proc.AdjacencyMatrix[1][2] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[1][2] < -91 then
Result = FeatureLib.GetStrategyResultNotApplicable( 'BladeKeepWaste : angle between faces must be concave and >= 90deg') Result = FeatureLib.GetStrategyResultNotApplicable()
return Machinings, Result return Machinings, Result
end end
if Proc.AdjacencyMatrix[1][3] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[1][3] < -91 then if Proc.AdjacencyMatrix[1][3] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[1][3] < -91 then
Result = FeatureLib.GetStrategyResultNotApplicable( 'BladeKeepWaste : angle between faces must be concave and >= 90deg') Result = FeatureLib.GetStrategyResultNotApplicable()
return Machinings, Result return Machinings, Result
end end
if Proc.AdjacencyMatrix[2][3] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[2][3] < -91 then if Proc.AdjacencyMatrix[2][3] > 10 * GEO.EPS_SMALL or Proc.AdjacencyMatrix[2][3] < -91 then
Result = FeatureLib.GetStrategyResultNotApplicable( 'BladeKeepWaste : angle between faces must be concave and >= 90deg') Result = FeatureLib.GetStrategyResultNotApplicable()
return Machinings, Result return Machinings, Result
end end
end end
+78 -29
View File
@@ -260,7 +260,7 @@ local function GetBestBlade( Proc, Part, Face, OptionalParameters)
local dShortPartLength = OptionalParameters.dShortPartLength or BeamData.LEN_SHORT_PART local dShortPartLength = OptionalParameters.dShortPartLength or BeamData.LEN_SHORT_PART
local EdgeToMachineTop = OptionalParameters.EdgeToMachineTop local EdgeToMachineTop = OptionalParameters.EdgeToMachineTop
local EdgeToMachineBottom = OptionalParameters.EdgeToMachineBottom local EdgeToMachineBottom = OptionalParameters.EdgeToMachineBottom
local bIsDicing = OptionalParameters.bIsDicing local idCheckCollisionTm = OptionalParameters.idCheckCollisionTm
local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation
local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength
-- TODO qui sarebbe meglio avere dExtra come OptionalParameter??? -- TODO qui sarebbe meglio avere dExtra come OptionalParameter???
@@ -289,7 +289,7 @@ local function GetBestBlade( Proc, Part, Face, OptionalParameters)
FaceToMachine = Face, FaceToMachine = Face,
EdgeToMachine = EdgeToMachineTop, EdgeToMachine = EdgeToMachineTop,
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -304,7 +304,7 @@ local function GetBestBlade( Proc, Part, Face, OptionalParameters)
FaceToMachine = Face, FaceToMachine = Face,
EdgeToMachine = EdgeToMachineBottom, EdgeToMachine = EdgeToMachineBottom,
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -371,7 +371,7 @@ local function GetSingleCutStrategy( Proc, Part, OptionalParameters)
local bReduceBladePath = OptionalParameters.bReduceBladePath or false local bReduceBladePath = OptionalParameters.bReduceBladePath or false
local bAllowFastCuts = OptionalParameters.bAllowFastCuts or false local bAllowFastCuts = OptionalParameters.bAllowFastCuts or false
local FaceToMachine = Proc.Faces[OptionalParameters.nFaceToMachineIndex or 1] local FaceToMachine = Proc.Faces[OptionalParameters.nFaceToMachineIndex or 1]
local bIsDicing = OptionalParameters.bIsDicing or false local idCheckCollisionTm = OptionalParameters.idCheckCollisionTm
local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail' local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail'
local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false
-- lati da lavorare in base al tipo di lama -- lati da lavorare in base al tipo di lama
@@ -390,7 +390,7 @@ local function GetSingleCutStrategy( Proc, Part, OptionalParameters)
EdgeToMachineTop = EdgeToMachineList.Top, EdgeToMachineTop = EdgeToMachineList.Top,
EdgeToMachineBottom = EdgeToMachineList.Bottom, EdgeToMachineBottom = EdgeToMachineList.Bottom,
nToolIndex = nToolIndex, nToolIndex = nToolIndex,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
} }
@@ -442,7 +442,7 @@ local function GetSingleCutStrategy( Proc, Part, OptionalParameters)
FaceToMachine = FaceToMachine, FaceToMachine = FaceToMachine,
EdgeToMachine = EdgeToMachineList.TopGuillotine, EdgeToMachine = EdgeToMachineList.TopGuillotine,
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -475,7 +475,7 @@ local function GetDualSideCutStrategy( Proc, Part, OptionalParameters)
OptionalParameters = OptionalParameters or {} OptionalParameters = OptionalParameters or {}
local nToolIndex = OptionalParameters.nToolIndex local nToolIndex = OptionalParameters.nToolIndex
local FaceToMachine = Proc.Faces[OptionalParameters.nFaceToMachineIndex or 1] local FaceToMachine = Proc.Faces[OptionalParameters.nFaceToMachineIndex or 1]
local bIsDicing = OptionalParameters.bIsDicing or false local idCheckCollisionTm = OptionalParameters.idCheckCollisionTm
local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail' local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail'
local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false
@@ -499,7 +499,7 @@ local function GetDualSideCutStrategy( Proc, Part, OptionalParameters)
FaceToMachine = FaceToMachine, FaceToMachine = FaceToMachine,
EdgeToMachine = EdgeToMachine, EdgeToMachine = EdgeToMachine,
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -512,7 +512,7 @@ local function GetDualSideCutStrategy( Proc, Part, OptionalParameters)
FaceToMachine = FaceToMachine, FaceToMachine = FaceToMachine,
EdgeToMachine = BeamLib.FindEdgeBestOrientedAsDirection( FaceToMachine.Edges, -EdgeToMachine.vtN), EdgeToMachine = BeamLib.FindEdgeBestOrientedAsDirection( FaceToMachine.Edges, -EdgeToMachine.vtN),
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -534,7 +534,7 @@ local function GetDualSideCutStrategy( Proc, Part, OptionalParameters)
FaceToMachine = FaceToMachine, FaceToMachine = FaceToMachine,
EdgeToMachine = BeamLib.FindEdgeBestOrientedAsDirection( FaceToMachine.Edges, -EdgeToMachine.vtN), EdgeToMachine = BeamLib.FindEdgeBestOrientedAsDirection( FaceToMachine.Edges, -EdgeToMachine.vtN),
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -553,7 +553,7 @@ local function GetDualSideCutStrategy( Proc, Part, OptionalParameters)
FaceToMachine = FaceToMachine, FaceToMachine = FaceToMachine,
EdgeToMachine = EdgeToMachine, EdgeToMachine = EdgeToMachine,
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -589,7 +589,7 @@ local function GetDualSideCutStrategy( Proc, Part, OptionalParameters)
FaceToMachine = FaceToMachine, FaceToMachine = FaceToMachine,
EdgeToMachine = EdgeToMachine, EdgeToMachine = EdgeToMachine,
Part = Part, Part = Part,
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
}) })
@@ -607,7 +607,7 @@ local function GetDualSideCutStrategy( Proc, Part, OptionalParameters)
dDepthToMachine = dDepthToMachine dDepthToMachine = dDepthToMachine
} }
local BladeEngagementOptionalParameters = { local BladeEngagementOptionalParameters = {
bIsDicing = bIsDicing, idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
} }
@@ -782,6 +782,52 @@ local function CutWholeWaste( Proc, Part, OptionalParameters)
end end
local function UpdateDiceRaw( idRaw, idParallelTm, idPerpendicularTm, Part, MainFace, OtherFace)
-- frame solidale alla feature
local vtZ = MainFace.vtN
local vtX = OtherFace and OtherFace.vtN or nil
local frMainFace = Frame3d( MainFace.ptCenter, vtZ, vtX)
-- box del cubetto in riferimento feature
local b3Surf = EgtGetBBoxRef( idParallelTm, GDB_BB.STANDARD, frMainFace)
if idPerpendicularTm then
local b3SurfPerpendicular = EgtGetBBoxRef( idPerpendicularTm, GDB_BB.STANDARD, frMainFace)
b3Surf:Add( b3SurfPerpendicular)
else
-- se non arriva la superficie perpendicolare è un solo taglio parallelo: si estende il box in Z in modo da uscire dal pezzo
local ptDeltaZ = b3Surf:getMax() + vtZ * ( MainFace.dElevation + 5)
b3Surf:Add( ptDeltaZ)
end
-- estensione box per non avere problemi nella sottrazione booleana
if OtherFace and idPerpendicularTm then
local vtY = vtZ ^ vtX
local ptDeltaX = b3Surf:getMax() + vtX * 1
local ptDeltaZ = b3Surf:getMax() + vtZ * 1
local ptDeltaYplus = b3Surf:getMax() + vtY * 1
local ptDeltaYminus = b3Surf:getMin() - vtY * 1
b3Surf:Add( ptDeltaX)
b3Surf:Add( ptDeltaZ)
b3Surf:Add( ptDeltaYplus)
b3Surf:Add( ptDeltaYminus)
else
b3Surf:expand( 1)
end
-- si porta il box in riferimento globale
b3Surf:toGlob( frMainFace)
-- conversione box cubetto in superficie
local idSurfTmToSubtract = EgtSurfTmBBox( Part.idTempGroup, b3Surf, false, GDB_RT.GLOB)
-- sottrazione del cubetto dal grezzo
EgtSurfTmSubtract( idRaw, idSurfTmToSubtract)
return idRaw
end
local function CalculateDiceMachinings( vCuts, Parameters) local function CalculateDiceMachinings( vCuts, Parameters)
local Machinings = {} local Machinings = {}
local bMoveAfterSplit = false local bMoveAfterSplit = false
@@ -789,6 +835,7 @@ local function CalculateDiceMachinings( vCuts, Parameters)
local Proc = Parameters.Proc local Proc = Parameters.Proc
local Part = Parameters.Part local Part = Parameters.Part
local MainFace = Parameters.MainFace local MainFace = Parameters.MainFace
local OtherFace = next( Parameters.OtherFace) and Parameters.OtherFace or nil
local Tool = Parameters.Tool local Tool = Parameters.Tool
local sChosenBladeType = Parameters.sChosenBladeType local sChosenBladeType = Parameters.sChosenBladeType
local dExtendAfterTail = Parameters.dExtendAfterTail local dExtendAfterTail = Parameters.dExtendAfterTail
@@ -797,21 +844,15 @@ local function CalculateDiceMachinings( vCuts, Parameters)
local bCannotSplitRestLength = Parameters.bCannotSplitRestLength local bCannotSplitRestLength = Parameters.bCannotSplitRestLength
local bReduceDiceDepth = Parameters.bReduceDiceDepth local bReduceDiceDepth = Parameters.bReduceDiceDepth
-- trimesh con RestLength
local b3CheckCollision = BeamLib.GetPartBoxWithHeadTail( Part, sRestLengthSideForPreSimulation)
local idCheckCollisionTm = EgtSurfTmBBox( Part.idTempGroup, b3CheckCollision, false, GDB_RT.GLOB)
-- eventuale inversione tagli ortogonali e aggiunta informazioni alla geometria -- eventuale inversione tagli ortogonali e aggiunta informazioni alla geometria
local bAreOrthogonalCutsInverted = false local bAreOrthogonalCutsInverted = false
for i = 1, #vCuts do for i = 1, #vCuts do
for j = 1, #vCuts[i] do for j = 1, #vCuts[i] do
SetDiceFaceInfo( Proc, vCuts[i][j]) SetDiceFaceInfo( Proc, vCuts[i][j])
-- TODO vedere se questa parte serve ancora; in teoria no perchè il taglio è girato automaticamente nella FaceByBlade
-- if ( i % 2) == 1 then
-- local vtO = EgtSurfTmFacetNormVersor( vCuts[i][j], 0, GDB_ID.ROOT)
-- if MachiningLib.IsFaceZOutOfRange( vtO, Tool) then
-- EgtInvertSurf( vCuts[i][j])
-- local vtCurrentFaceNormal = EgtSurfTmFacetNormVersor( vCuts[i][j], 0, GDB_ID.ROOT)
-- EgtMove( vCuts[i][j], -vtCurrentFaceNormal * Tool.dThickness, GDB_RT.GLOB)
-- bAreOrthogonalCutsInverted = true
-- end
-- end
end end
end end
-- calcolo lavorazioni -- calcolo lavorazioni
@@ -852,19 +893,17 @@ local function CalculateDiceMachinings( vCuts, Parameters)
end end
-- calcolo lavorazione della singola faccia -- calcolo lavorazione della singola faccia
-- per tagli paralleli e faccia aperta si prova a tagliare come se fosse una faccia singola, accorpando i tagli -- per tagli paralleli e faccia aperta si prova a tagliare come se fosse una faccia singola, accorpando i tagli
-- TODO bIsDicing è da mettere a true?
local bCanMergeParallelCuts = ( ( i % 2) == 0) and ( Proc.nFct == 1) local bCanMergeParallelCuts = ( ( i % 2) == 0) and ( Proc.nFct == 1)
local bIsDicingOk = true local bIsDicingOk = true
if bCanMergeParallelCuts then if bCanMergeParallelCuts then
local nAddGrpId = BeamLib.GetAddGroup( Part.id) local nAddGrpId = BeamLib.GetAddGroup( Part.id)
local nSurfToCut = EgtSurfTmBySewing( nAddGrpId, vCuts[i], false) local idSurfToCut = EgtSurfTmBySewing( nAddGrpId, vCuts[i], false)
local ProcTrimesh = FeatureLib.GetProcFromTrimesh( nSurfToCut, Part) local ProcTrimesh = FeatureLib.GetProcFromTrimesh( idSurfToCut, Part)
local OptionalParametersCutWholeWaste = { local OptionalParametersCutWholeWaste = {
nToolIndex = Tool.nIndex, nToolIndex = Tool.nIndex,
dExtendAfterTail = dExtendAfterTail, dExtendAfterTail = dExtendAfterTail,
bReduceBladePath = bReduceBladePath, bReduceBladePath = bReduceBladePath,
bIsDicing = false,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength bCannotSplitRestLength = bCannotSplitRestLength
} }
@@ -877,8 +916,12 @@ local function CalculateDiceMachinings( vCuts, Parameters)
bMoveAfterSplit = true bMoveAfterSplit = true
end end
end end
-- aggiornamento grezzo dinamico
if i % 2 == 0 then
UpdateDiceRaw( idCheckCollisionTm, idSurfToCut, vCuts[i-1][#vCuts[i-1]], Part, MainFace, OtherFace)
end
else else
EgtErase( nSurfToCut) EgtErase( idSurfToCut)
bIsDicingOk = false bIsDicingOk = false
end end
end end
@@ -919,9 +962,10 @@ local function CalculateDiceMachinings( vCuts, Parameters)
dRadialStepSpan = 0, dRadialStepSpan = 0,
dExtendAfterTail = dExtendAfterTail, dExtendAfterTail = dExtendAfterTail,
bIsDicing = true, bIsDicing = true,
idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength, bCannotSplitRestLength = bCannotSplitRestLength,
bDisableRealElevationCheck = ( i % 2) > 0 -- se taglio perpendicolare non si deve mai considerare il materiale precedente bDisableRealElevationCheck = true
} }
Cutting = FaceByBlade.Make( ProcTrimesh, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade) Cutting = FaceByBlade.Make( ProcTrimesh, Part, FaceToMachine, EdgeToMachine, OptionalParametersFaceByBlade)
Cutting.ptCenter = Point3d( ProcTrimesh.Faces[1].ptCenter:getX(), 0, 0) Cutting.ptCenter = Point3d( ProcTrimesh.Faces[1].ptCenter:getX(), 0, 0)
@@ -936,6 +980,10 @@ local function CalculateDiceMachinings( vCuts, Parameters)
if Cutting.sStage == 'AfterTail' then if Cutting.sStage == 'AfterTail' then
bMoveAfterSplit = true bMoveAfterSplit = true
end end
-- aggiornamento grezzo dinamico
if i % 2 == 0 then
UpdateDiceRaw( idCheckCollisionTm, vCuts[i][j], vCuts[i-1][j], Part, MainFace, OtherFace)
end
end end
end end
end end
@@ -1013,6 +1061,7 @@ local function CutWithDicing( Proc, Part, OptionalParameters)
Proc = Proc, Proc = Proc,
Part = Part, Part = Part,
MainFace = Face1, MainFace = Face1,
OtherFace = Face2,
Tool = TOOLS[nToolIndex], Tool = TOOLS[nToolIndex],
sChosenBladeType = sChosenBladeType, sChosenBladeType = sChosenBladeType,
dExtendAfterTail = dExtendAfterTail, dExtendAfterTail = dExtendAfterTail,
+4
View File
@@ -209,6 +209,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
local dRadialStepSpan = OptionalParameters.dRadialStepSpan local dRadialStepSpan = OptionalParameters.dRadialStepSpan
local sUserNotes = OptionalParameters.sUserNotes or '' local sUserNotes = OptionalParameters.sUserNotes or ''
local bIsDicing = OptionalParameters.bIsDicing or false local bIsDicing = OptionalParameters.bIsDicing or false
local idCheckCollisionTm = OptionalParameters.idCheckCollisionTm
local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail' local sRestLengthSideForPreSimulation = OptionalParameters.sRestLengthSideForPreSimulation or 'Tail'
local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false local bCannotSplitRestLength = OptionalParameters.bCannotSplitRestLength or false
local bDisableRealElevationCheck = OptionalParameters.bDisableRealElevationCheck or false local bDisableRealElevationCheck = OptionalParameters.bDisableRealElevationCheck or false
@@ -237,6 +238,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
end end
local BladeEngagementOptionalParameters = { local BladeEngagementOptionalParameters = {
bIsDicing = bIsDicing, bIsDicing = bIsDicing,
idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength, bCannotSplitRestLength = bCannotSplitRestLength,
bDisableRealElevationCheck = bDisableRealElevationCheck bDisableRealElevationCheck = bDisableRealElevationCheck
@@ -360,6 +362,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
} }
local BladeEngagementOptionalParameters = { local BladeEngagementOptionalParameters = {
bIsDicing = bIsDicing, bIsDicing = bIsDicing,
idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength, bCannotSplitRestLength = bCannotSplitRestLength,
bDisableRealElevationCheck = bDisableRealElevationCheck bDisableRealElevationCheck = bDisableRealElevationCheck
@@ -478,6 +481,7 @@ function FACEBYBLADE.Make( Proc, Part, FaceToMachine, EdgeToMachine, OptionalPar
} }
local BladeEngagementOptionalParameters = { local BladeEngagementOptionalParameters = {
bIsDicing = bIsDicing, bIsDicing = bIsDicing,
idCheckCollisionTm = idCheckCollisionTm,
sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation, sRestLengthSideForPreSimulation = sRestLengthSideForPreSimulation,
bCannotSplitRestLength = bCannotSplitRestLength, bCannotSplitRestLength = bCannotSplitRestLength,
bDisableRealElevationCheck = bDisableRealElevationCheck bDisableRealElevationCheck = bDisableRealElevationCheck
+38 -22
View File
@@ -44,8 +44,9 @@ local function CalculateLeadInOut( Machining, EdgeToMachine, sSideToMachine, dLe
end end
-- punti dell'attacco -- punti dell'attacco
LeadIn.ptPoint = EdgeToMachine.ptStart - EdgeToMachine.vtEdge * LeadIn.dStartAddLength + EdgeToMachine.vtN * ( EdgeToMachine.dElevation - Machining.dDepthToMachine) local dLengthToAdd = EgtIf( Machining.bToolInvert, -Machining.dStartSafetyLength, EdgeToMachine.dElevation - ( Machining.dMaxElev or 0) + Machining.dStartSafetyLength)
LeadOut.ptPoint = EdgeToMachine.ptEnd + EdgeToMachine.vtEdge * LeadOut.dEndAddLength + EdgeToMachine.vtN * ( EdgeToMachine.dElevation - Machining.dDepthToMachine) LeadIn.ptPoint = EdgeToMachine.ptStart - EdgeToMachine.vtEdge * LeadIn.dStartAddLength + EdgeToMachine.vtN * dLengthToAdd
LeadOut.ptPoint = EdgeToMachine.ptEnd + EdgeToMachine.vtEdge * LeadOut.dEndAddLength + EdgeToMachine.vtN * dLengthToAdd
return LeadIn, LeadOut return LeadIn, LeadOut
end end
@@ -80,12 +81,29 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional
local sDepth = OptionalParameters.sDepth or 'TH' local sDepth = OptionalParameters.sDepth or 'TH'
local dLongitudinalStepSpan = OptionalParameters.dLongitudinalStepSpan local dLongitudinalStepSpan = OptionalParameters.dLongitudinalStepSpan
-- lunghezze e punti caratteristici della lavorazione e del lato lavorato -- lunghezze, direzioni e punti caratteristici della lavorazione e del lato lavorato
Mortising.dEdgeLength = EdgeToMachine.dLength Mortising.dEdgeLength = EdgeToMachine.dLength
if OppositeToolDirectionMode == 'Enabled' then local dCalculatedMaxElev = FaceToMachine.Edges[EdgeToMachine.nPreviousEdgeIndex].dLength
Mortising.vtToolDirection = -EdgeToMachine.vtN if FaceToMachine.Edges[EdgeToMachine.nNextEdgeIndex].dLength > FaceToMachine.Edges[EdgeToMachine.nPreviousEdgeIndex].dLength + 10 * GEO.EPS_SMALL then
dCalculatedMaxElev = FaceToMachine.Edges[EdgeToMachine.nNextEdgeIndex].dLength
end
-- la direzione di lavoro è calcolata in accordo con la direzione calcolata dal Cam5
-- fine chiusa
if EdgeToMachine.bIsStartOpen and not EdgeToMachine.bIsEndOpen then
Mortising.vtToolDirection = FaceToMachine.Edges[EdgeToMachine.nNextEdgeIndex].vtEdge
-- inizio chiuso
elseif EdgeToMachine.bIsEndOpen and not EdgeToMachine.bIsStartOpen then
Mortising.vtToolDirection = -FaceToMachine.Edges[EdgeToMachine.nPreviousEdgeIndex].vtEdge
-- entrambi aperti o entrambi chiusi
else else
Mortising.vtToolDirection = EdgeToMachine.vtN local vtTemp = ( FaceToMachine.Edges[EdgeToMachine.nNextEdgeIndex].vtEdge - FaceToMachine.Edges[EdgeToMachine.nPreviousEdgeIndex].vtEdge) * 0.5
vtTemp:normalize()
Mortising.vtToolDirection = vtTemp
end
if OppositeToolDirectionMode == 'Enabled' then
Mortising.vtToolDirection = -Mortising.vtToolDirection
else
Mortising.vtToolDirection = Mortising.vtToolDirection
end end
Mortising.vtEdgeDirection = Vector3d( EdgeToMachine.vtEdge) Mortising.vtEdgeDirection = Vector3d( EdgeToMachine.vtEdge)
Mortising.ptEdge1, Mortising.ptEdge2 = EdgeToMachine.ptStart, EdgeToMachine.ptEnd Mortising.ptEdge1, Mortising.ptEdge2 = EdgeToMachine.ptStart, EdgeToMachine.ptEnd
@@ -169,11 +187,13 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional
-- massima elevazione -- massima elevazione
if dCustomMaxElev < Mortising.dDepthToMachine - 10 * GEO.EPS_SMALL then if dCustomMaxElev < Mortising.dDepthToMachine - 10 * GEO.EPS_SMALL then
Mortising.dMaxElev = max( dCustomMaxElev, dCustomMaxElev - Mortising.dLongitudinalOffset) Mortising.dMaxElev = max( dCustomMaxElev, dCustomMaxElev - Mortising.dLongitudinalOffset)
else
Mortising.dMaxElev = dCalculatedMaxElev
end end
-- offset radiale -- offset radiale
Mortising.dRadialOffset = 0 Mortising.dRadialOffset = 0
-- distanza di sicurezza -- distanza di sicurezza
Mortising.dStartSafetyLength = max( EdgeToMachine.dElevation, ( TOOLS[Mortising.nToolIndex].SetupInfo.dZSafeDelta or 60) + EgtMdbGetGeneralParam( MCH_GP.SAFEZ)) Mortising.dStartSafetyLength = ( TOOLS[Mortising.nToolIndex].SetupInfo.dZSafeDelta or 0) + EgtMdbGetGeneralParam( MCH_GP.SAFEZ)
-- overlap -- overlap
Mortising.dOverlap = 0 Mortising.dOverlap = 0
-- step -- step
@@ -194,18 +214,8 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional
-- SCC -- SCC
Mortising.SCC = MCH_SCC.NONE Mortising.SCC = MCH_SCC.NONE
-- asse bloccato e angoli suggeriti -- asse bloccato e angoli suggeriti
local vtRes = FaceToMachine.vtN ^ EdgeToMachine.vtN Mortising.sBlockedAxis = BeamLib.GetBlockedAxis( Mortising.nToolIndex, 'perpendicular', Part.b3Raw, FaceToMachine.vtN)
if abs( vtRes:getZ()) < 10 * GEO.EPS_SMALL then Mortising.sInitialAngles = BeamLib.GetChainSawInitAngs( FaceToMachine.vtN, Mortising.vtToolDirection, 1)
Mortising.sBlockedAxis = BeamLib.GetBlockedAxis( Mortising.nToolIndex, 'perpendicular', Part.b3Raw, FaceToMachine.vtN)
Mortising.sSuggestedAngles = BeamLib.GetChainSawInitAngs( FaceToMachine.vtN, EdgeToMachine.vtN, 1)
elseif EdgeToMachine.vtN:getZ() < 10 * GEO.EPS_SMALL then
Mortising.sBlockedAxis = BeamLib.GetBlockedAxis( Mortising.nToolIndex, 'parallel', Part.b3Raw, FaceToMachine.vtN)
Mortising.sSuggestedAngles = BeamLib.GetChainSawInitAngs( FaceToMachine.vtN, EdgeToMachine.vtN, 2)
-- TODO al momento si contempla solo sega a catena con asse bloccato
else
Mortising.bIsApplicable = false
return Mortising
end
-- approccio e retrazione -- approccio e retrazione
Mortising.LeadIn, Mortising.LeadOut = CalculateLeadInOut( Mortising, EdgeToMachine, sSideToMachine, dLengthToMachine) Mortising.LeadIn, Mortising.LeadOut = CalculateLeadInOut( Mortising, EdgeToMachine, sSideToMachine, dLengthToMachine)
-- check finecorsa nei punti di attacco -- check finecorsa nei punti di attacco
@@ -218,10 +228,16 @@ function FACEBYCHAINSAW.Make( Proc, Part, FaceToMachine, EdgeToMachine, Optional
vtAux = -FaceToMachine.vtN vtAux = -FaceToMachine.vtN
end end
local bOutOfStroke = PreSimulationLib.CheckOutOfStrokeFromPoints( PointsOnToolTipCenter, Mortising.vtToolDirection, Mortising.nSCC, TOOLS[Mortising.nToolIndex], vtAux, Mortising.sBlockedAxis) local bOutOfStroke = PreSimulationLib.CheckOutOfStrokeFromPoints( PointsOnToolTipCenter, Mortising.vtToolDirection, Mortising.nSCC, TOOLS[Mortising.nToolIndex], vtAux, Mortising.sBlockedAxis)
-- se finecorsa si prova a bloccare l'altro asse
if bOutOfStroke then if bOutOfStroke then
Mortising.sMessage = 'Out of stroke' Mortising.sBlockedAxis = BeamLib.GetBlockedAxis( Mortising.nToolIndex, 'parallel', Part.b3Raw, FaceToMachine.vtN)
Mortising.bIsApplicable = false Mortising.sInitialAngles = BeamLib.GetChainSawInitAngs( FaceToMachine.vtN, Mortising.vtToolDirection, 2)
return Mortising bOutOfStroke = PreSimulationLib.CheckOutOfStrokeFromPoints( PointsOnToolTipCenter, Mortising.vtToolDirection, Mortising.nSCC, TOOLS[Mortising.nToolIndex], vtAux, Mortising.sBlockedAxis)
if bOutOfStroke then
Mortising.sMessage = 'Out of stroke'
Mortising.bIsApplicable = false
return Mortising
end
end end
-- eventuale step verticale -- eventuale step verticale
Mortising.CloneStepsLongitudinal = {} Mortising.CloneStepsLongitudinal = {}
+2 -2
View File
@@ -1,4 +1,4 @@
==== Beam Update Log ==== ==== Beam Update Log ====
Versione 2.6-- (--/--/2024) Versione 3.1e1 (29/05/2026)
- Primo commit creazione nuovo automatismo BEAM con strategie - Primo commit nuovo automatismo a strategie
+2 -2
View File
@@ -2,5 +2,5 @@
-- Gestione della versione di Beam -- Gestione della versione di Beam
NAME = 'Beam' NAME = 'Beam'
VERSION = '2.8a1' VERSION = '3.1e1'
MIN_EXE = '2.7j2' MIN_EXE = '3.1e1'