1 Commits

Author SHA1 Message Date
Emmanuele Sassi 07ea8c7ef3 - migliorati testy per capire se pezzo grande deve stampare l'etichetta o meno 2023-10-19 09:24:21 +02:00
4 changed files with 179 additions and 19 deletions
+5 -1
View File
@@ -150,6 +150,10 @@
"EgtExplodeCurveCompo",
"EgtCurveCompo",
"EgtAddCurveCompoCurve",
"AreSameColor"
"AreSameColor",
"EgtPointCurveDistSide",
"X_AX",
"max",
"EgtSurfFrRectangle"
]
}
+1 -1
View File
@@ -151,7 +151,7 @@ Config.TabParams = {{MatId = 1, MatExtCode = 6120, Length = 10.0, Height =
Config.Kerf = {{MatId = 1, MatExtCode = 6120, Kerf = 8},
{MatId = 2, MatExtCode = 6110, Kerf = 20},
{MatId = 3, MatExtCode = 6049, Kerf = 20},
{MatId = 4, MatExtCode = 6118, Kerf = 20},
{MatId = 4, MatExtCode = 6118, Kerf = 10},
{MatId = 5, MatExtCode = 6479, Kerf = 20},
{MatId = 6, MatExtCode = 6408, Kerf = 20},
{MatId = 7, MatExtCode = 6406, Kerf = 20},
+87 -10
View File
@@ -19,7 +19,7 @@ package.cpath = package.cpath .. ";/EgtDevTest/LUAREST/32/?.lua"
require( 'EgtBase')
_ENV = EgtProtectGlobal()
EgtEnableDebug( false)
EgtEnableDebug( true)
-- Imposto direttorio libreria specializzata per Nesting
local sBaseDir = EgtGetSourceDir()
@@ -400,7 +400,9 @@ function Nesting(readBatch)
EgtOutText("End sheets nest")
-- se debug
if DebugCode then
--if DebugCode then
-- verifico se ci sono tutti i pezzi dopo il nesting perche' i pezzi grandi quasi come il foglio potrebbero non essere nestati
if Config.bDoubleMach then
-- verifico di aver messo tutti i part su un grezzo
local PartList = {}
-- raccolgo tutti i part dai materiali in una lista
@@ -948,8 +950,48 @@ function Estimate(readBatch)
end
end
EgtOutText("End sheets estimate")
-- verifico se ci sono tutti i pezzi dopo il nesting perche' i pezzi grandi quasi come il foglio potrebbero non essere nestati
if Config.bDoubleMach then
-- verifico di aver messo tutti i part su un grezzo
local PartList = {}
-- raccolgo tutti i part dai materiali in una lista
for MaterialIndex = 1, #materials do
if materials[MaterialIndex].SheetList then
for SheetIndex = 1, #materials[MaterialIndex].SheetList do
for PartIndex = 1, #materials[MaterialIndex].SheetList[SheetIndex].PartList do
table.insert(PartList, tonumber(materials[MaterialIndex].SheetList[SheetIndex].PartList[PartIndex].PartId))
end
end
end
end
-- passo i part del readbatch
for OrderIndex = CurrOrderIndex, CurrOrderCount do
for KitIndex = 1, #readBatch.OrderList[OrderIndex].KitList do
for BPartIndex = 1, #readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList do
local bFound = false
for VPartIndex = #PartList, 1, -1 do
if readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList[BPartIndex].PartId == PartList[VPartIndex] then
if not bFound then
bFound = true
table.remove(PartList, VPartIndex)
else
table.insert(ErrorList, {ErrType = "E.12", Uid = "PartId = " .. readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList[BPartIndex].PartId, Description = "Part duplicated after nesting!"})
end
end
end
if not bFound then
table.insert(ErrorList, {ErrType = "E.12", Uid = "PartId = " .. readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList[BPartIndex].PartId, Description = "Part lost after nesting!"})
end
end
end
end
-- verifico se sono rimasti elementi nella tabella kit
if #PartList > 0 then
table.insert(ErrorList, {ErrType = "E.12", Uid = "PartId = " .. PartList[1], Description = #PartList .. " part more than in batch request after nesting!"})
end
end
EgtOutText("End sheets estimate")
-- creo batch di risposta
local answ = {}
@@ -1069,6 +1111,47 @@ function ExtendedEstimate(readBatch)
table.insert(answ.EstOrderList, readBatch.OrderList[Order])
end
-- -- verifico se ci sono tutti i pezzi dopo il nesting perche' i pezzi grandi quasi come il foglio potrebbero non essere nestati
-- if true then
-- -- verifico di aver messo tutti i part su un grezzo
-- local PartList = {}
-- -- raccolgo tutti i part dai materiali in una lista
-- for MaterialIndex = 1, #materials do
-- if materials[MaterialIndex].SheetList then
-- for SheetIndex = 1, #materials[MaterialIndex].SheetList do
-- for PartIndex = 1, #materials[MaterialIndex].SheetList[SheetIndex].PartList do
-- table.insert(PartList, tonumber(materials[MaterialIndex].SheetList[SheetIndex].PartList[PartIndex].PartId))
-- end
-- end
-- end
-- end
-- -- passo i part del readbatch
-- for OrderIndex = 1, #readBatch.OrderList do
-- for KitIndex = 1, #readBatch.OrderList[OrderIndex].KitList do
-- for BPartIndex = 1, #readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList do
-- local bFound = false
-- for VPartIndex = #PartList, 1, -1 do
-- if readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList[BPartIndex].PartId == PartList[VPartIndex] then
-- if not bFound then
-- bFound = true
-- table.remove(PartList, VPartIndex)
-- else
-- table.insert(ErrorList, {ErrType = "E.12", Uid = "PartId = " .. readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList[BPartIndex].PartId, Description = "Part duplicated after nesting!"})
-- end
-- end
-- end
-- if not bFound then
-- table.insert(ErrorList, {ErrType = "E.12", Uid = "PartId = " .. readBatch.OrderList[OrderIndex].KitList[KitIndex].PartList[BPartIndex].PartId, Description = "Part lost after nesting!"})
-- end
-- end
-- end
-- end
-- -- verifico se sono rimasti elementi nella tabella kit
-- if #PartList > 0 then
-- table.insert(ErrorList, {ErrType = "E.12", Uid = "PartId = " .. PartList[1], Description = #PartList .. " part more than in batch request after nesting!"})
-- end
-- end
-- correggo e riporto tempo totale di lavorazione
answ.EstimatedWorktime = TotTime
@@ -1090,12 +1173,6 @@ function ExtendedEstimate(readBatch)
end
--
-- verifico che non ci siano istanze gia' in corso
if not EgtCreateMutex('Global\\MainNKCLuaScript') then
EgtOutLog( 'Impossible starting script! Script already in execution!')
EgtOutBox( 'Script already running! Impossible running another instance at the same time!!', 'Error' , 'ERROR', 'OK')
EgtCloseExe()
end
-- ciclo principale
while true do
EgtNewFile()
@@ -1121,5 +1198,5 @@ while true do
end
end
end
end
EgtReleaseMutex()
+86 -7
View File
@@ -536,9 +536,13 @@ local SKELETONTRACK = "SKELETONTRACK"
local SKELETONPART = "SKELETON"
local CUTOPT = "CUTOPT"
-- funzione legge il dxf ed aggiunge il pezzo al nesting
local function AddPartListToNesting(PartList, ErrorList, Material)
local function AddPartListToNesting(PartList, ErrorList, Material, IsEstimate)
local BigPartsQty = 0
local LastId = GDB_ID.ROOT
for Part = 1, #PartList do
--if PartList[Part].PartExtCode == '14162182' or PartList[Part].PartExtCode == '14162184' then
-- x = 5
--end
-- tipo di rotazione del pezzo consentita : 0 -> rotazione libera, 1 -> rotazione solo di 180°, 2 -> nessuna rotazione
local RotationType = 0
-- verifico se gia' presente per importazione precedente
@@ -577,6 +581,7 @@ local function AddPartListToNesting(PartList, ErrorList, Material)
local LayerId = EgtGetFirstLayer(PartId1)
local nMaxId = GDB_ID.NULL
local bFound = false
local bBigPart = false
while LayerId do
local layerName = EgtGetName(LayerId)
local bOutline = false
@@ -710,6 +715,50 @@ local function AddPartListToNesting(PartList, ErrorList, Material)
RotationType = 1
end
EgtSetName(nMaxId, OUTLINE)
-- verifico se e' grande quasi come il foglio
local dTempX = OutlineBox:getDimX()
local dTempY = OutlineBox:getDimY()
local bRotated = false
if dTempY > dTempX then
bRotated = true
dTempX = OutlineBox:getDimY()
dTempY = OutlineBox:getDimX()
end
-- ricavo Kerf del materiale
local dKerf = 9
for Index = 1, #Config.Kerf do
if Config.Kerf[Index].MatId == Material.MatId then
dKerf = Config.Kerf[Index].Kerf
end
end
if dTempX > Material.L_mm - max( 51, dKerf) - dKerf and dTempY > Material.W_mm - max( 26, dKerf) - dKerf then
-- verifico se occupa l'angolo
local nInside1 = 0
local nInside2 = 0
if not bRotated then
local LabelRegId = EgtSurfFrRectangle( EgtGetParent( nMaxId), OutlineBox:getMin() + ( OutlineBox:getDimY() - 26) * Y_AX() - 10 * X_AX(), OutlineBox:getMin() + ( OutlineBox:getDimY() + 10) * Y_AX() + 51 * X_AX(), GDB_RT.GLOB)
nInside1 = EgtCurveWithRegionClassify( nMaxId, LabelRegId)
EgtErase( LabelRegId)
LabelRegId = EgtSurfFrRectangle( EgtGetParent( nMaxId), OutlineBox:getMax() - ( OutlineBox:getDimY() - 10) * Y_AX() - 51 * X_AX(), OutlineBox:getMax() + 10 * X_AX() - ( OutlineBox:getDimY() - 26) * Y_AX(), GDB_RT.GLOB)
nInside2 = EgtCurveWithRegionClassify( nMaxId, LabelRegId)
EgtErase( LabelRegId)
--_, _, nInside1 = EgtPointCurveDistSide( OutlineBox:getMin() + ( OutlineBox:getDimY() - 26) * Y_AX() + 51 * X_AX(), nMaxId, Z_AX())
--_, _, nInside2 = EgtPointCurveDistSide( OutlineBox:getMax() - ( OutlineBox:getDimY() - 26) * Y_AX() - 51 * X_AX(), nMaxId, Z_AX())
else
local LabelRegId = EgtSurfFrRectangle( EgtGetParent( nMaxId), OutlineBox:getMin() - 10 * X_AX() - 10 * Y_AX(), OutlineBox:getMin() + 51 * Y_AX() + 26 * X_AX(), GDB_RT.GLOB)
nInside1 = EgtCurveWithRegionClassify( nMaxId, LabelRegId)
EgtErase( LabelRegId)
LabelRegId = EgtSurfFrRectangle( EgtGetParent( nMaxId), OutlineBox:getMax() - 51 * Y_AX() - 26 * X_AX(), OutlineBox:getMax() + 10 * X_AX() + 10 * Y_AX(), GDB_RT.GLOB)
nInside2 = EgtCurveWithRegionClassify( nMaxId, LabelRegId)
EgtErase( LabelRegId)
--_, _, nInside1 = EgtPointCurveDistSide( OutlineBox:getMin() + 51 * Y_AX() + 26 * X_AX(), nMaxId, Z_AX())
--_, _, nInside2 = EgtPointCurveDistSide( OutlineBox:getMax() - 51 * Y_AX() - 26 * X_AX(), nMaxId, Z_AX())
end
if nInside1 ~= GDB_CRC.OUT and nInside2 ~= GDB_CRC.OUT then
bBigPart = true
BigPartsQty = BigPartsQty + 1
end
end
-- copio outline in un layer dedicato
local OutlineLayer = EgtGroup(PartId1)
EgtSetName(OutlineLayer, OUTLINE)
@@ -862,7 +911,9 @@ local function AddPartListToNesting(PartList, ErrorList, Material)
end
-- preparo pezzo per il nesting
local Priority = 0
if PartList[Part].Priority then
if bBigPart and not IsEstimate then
Priority = 1
elseif PartList[Part].Priority then
Priority = PartList[Part].Priority
end
local bCanRotate, dRotStep = true, 0
@@ -886,6 +937,8 @@ local function AddPartListToNesting(PartList, ErrorList, Material)
end
EgtAutoNestAddToolOutlineToPart( PartId1, nSkeletonRegionId)
end
--EgtSaveFile("c:\\Temp\\TestSauderBig.nge")
return BigPartsQty
end
--
@@ -1050,7 +1103,8 @@ function NestingLib.NestPartInRawPart(LastRaw, PartList, Material, ErrorList, Is
EgtResetCurrMachGroup()
-- aggiungo tutti i pezzi al nesting
AddPartListToNesting(PartList, ErrorList, Material)
local BigPartsQty = 0
BigPartsQty = AddPartListToNesting(PartList, ErrorList, Material, IsEstimate) or 0
-- ripristino MachGroup
EgtSetCurrMachGroup(nOldMachGroup)
@@ -1071,7 +1125,7 @@ function NestingLib.NestPartInRawPart(LastRaw, PartList, Material, ErrorList, Is
dKerf = Config.Kerf[Index].Kerf
end
end
-- verifico se ultimo grezzo non nullo
local LastMachGroupId = nil
if LastRaw and LastRaw ~= GDB_ID.NULL then
@@ -1101,6 +1155,30 @@ function NestingLib.NestPartInRawPart(LastRaw, PartList, Material, ErrorList, Is
-- la aggiungo come difetto
EgtAutoNestAddDefectToSheet(SheetPartId, nSheetLabel) -- EgtAutoNestAddDefectToSheet( SheetId, DefectId)
else
-- se ci sono pezzi grandi
if BigPartsQty > 0 then
-- creo un ugual numero di fogli senza etichetta
local BigSheetPartId = EgtGroup(GDB_ID.ROOT)
EgtSetName(BigSheetPartId, "Sheet")
local BigSheetLayerId = EgtGroup(BigSheetPartId)
EgtSetName(BigSheetLayerId, OUTLINE)
local BigSheetOutlineId = EgtRectangle2P(BigSheetLayerId, Point3d(0,0,0), Point3d(Material.L_mm, Material.W_mm, 0), GDB_RT.GLOB)
EgtModifyCurveThickness(BigSheetOutlineId, -Material.T_mm)
EgtSetName(BigSheetOutlineId, OUTLINE)
EgtAutoNestAddSheet( BigSheetPartId, BigSheetOutlineId, dKerf, 0, BigPartsQty) -- EgtAutoNestAddSheet( SheetId, OutlineId, dKerf, nPriority, nCount)
end
-- se ci sono pezzi grandi
-- if BigPartsQty > 0 then
-- -- creo un ugual numero di fogli senza etichetta
-- local BigSheetPartId = EgtGroup(GDB_ID.ROOT)
-- EgtSetName(BigSheetPartId, "Sheet")
-- local BigSheetLayerId = EgtGroup(BigSheetPartId)
-- EgtSetName(BigSheetLayerId, OUTLINE)
-- local BigSheetOutlineId = EgtRectangle2P(BigSheetLayerId, Point3d(0,0,0), Point3d(Material.L_mm, Material.W_mm, 0), GDB_RT.GLOB)
-- EgtModifyCurveThickness(BigSheetOutlineId, -Material.T_mm)
-- EgtSetName(BigSheetOutlineId, OUTLINE)
-- EgtAutoNestAddSheet( SheetPartId, SheetOutlineId, dKerf, 0, BigPartsQty) -- EgtAutoNestAddSheet( SheetId, OutlineId, dKerf, nPriority, nCount)
-- end
-- creo etichetta dello sheet
local dLabelW = 50
local dLabelH = 25
@@ -1111,7 +1189,7 @@ function NestingLib.NestPartInRawPart(LastRaw, PartList, Material, ErrorList, Is
local nSheetLabel = EgtRectangle2P(SheetLayerId, Point3d(0, dYPos - dLabelH,0), Point3d(dLabelW, dYPos, 0), GDB_RT.GLOB)
EgtSetName(nSheetLabel, SHEETLABEL)
-- creo foglio per nesting
EgtAutoNestAddSheet( SheetPartId, SheetOutlineId, dKerf, 0, 50) -- EgtAutoNestAddSheet( SheetId, OutlineId, dKerf, nPriority, nCount)
EgtAutoNestAddSheet( SheetPartId, SheetOutlineId, dKerf, 0, 1000) -- EgtAutoNestAddSheet( SheetId, OutlineId, dKerf, nPriority, nCount)
-- aggiungo etichetta come difetto
EgtAutoNestAddDefectToSheet(SheetPartId, nSheetLabel) -- EgtAutoNestAddDefectToSheet( SheetId, DefectId)
end
@@ -1181,6 +1259,7 @@ function NestingLib.NestPartInRawPart(LastRaw, PartList, Material, ErrorList, Is
else
table.insert(ErrorList, {ErrType = "E.10", Uid = "Generic", Description = "Error in nesting function!"})
end
--EgtSaveFile("c://Temp//TestSauderBigParts.nge")
-- ritorno l'ultimo grezzo utilizzato
return LastRaw
end
@@ -2703,8 +2782,8 @@ function NestingLib.ManageMachine(CurrIsOffline)
table.insert(OutlineMachining, 2, Config.NWOutlineMachTools)
table.insert(HoleMachining, 2, Config.NWHoleMachTools)
table.insert(RampMachining, 2, Config.NWRampMachTools[1])
table.insert(CountersinkMachining, 2, Config.NWCountersinkMachTools[1])
table.insert(OutsideChamferMachining, 2, Config.MXOutsideChamferMachTools[1])
table.insert(CountersinkMachining, 2, Config.NWCountersinkMachTools)
table.insert(OutsideChamferMachining, 2, Config.MXOutsideChamferMachTools)
table.insert(InsideChamferMachining, 2, Config.NWInsideChamferMachTools[1])
Pocketing = Config.NWPocketingTools
IsOffline = true