diff --git a/Config.lua b/Config.lua index f894508..c7f8549 100644 --- a/Config.lua +++ b/Config.lua @@ -19,7 +19,9 @@ local Config = {} -------------------------- Main ------------------------- -- path chiamate REST -Config.sRESTPath = "http://seriate.steamware.net:8082/NKC/api/" +--Config.sRESTPath = "http://iis01/NKC/api/" +--Config.sRESTPath = "http://seriate.steamware.net:8082/NKC/api/" +Config.sRESTPath = "http://iis01.egalware.com/NKC/api/" Config.sPathMat = Config.sRESTPath .. "Material" Config.sPathBatch = Config.sRESTPath .. "BatchProc" -- Nesting cycle waiting time @@ -43,6 +45,9 @@ Config.OutlineMachining = {{".375 ROUGHER", "ROUGHER"}, Config.HoleMachining = {"HOLE", {'3/16 DRILLING', '1/4 DRILLING', '1/2 DRILLING', '1/8 DRILLING', '11/32 DRILLING', '13/32 DRILLING', '3/8 DRILLING', '5/16 DRILLING', '7/16 DRILLING', '17/32 DRILLING', '37/64 DRILLING'}} Config.RampMachining = {"RAMP", '3/8 MILLING'} +Config.CountersinkMachining = {"COUNTERSINK", '45 DEG'} +Config.OutsideChamferMachining = {"OUTSIDE CHAMFER", '45 DEG'} +Config.InsideChamferMachining = {"INSIDECHAMFER", '45 DEG'} -- list of pocketing machinings Config.Pocketing = {'3/8 POCKETING', '1/4 POCKETING'} @@ -57,6 +62,15 @@ Config.NWHoleMachTools = {'1/2 DRILLING', '1/8 DRILLING', '3/8 DRILLING', '5/16 Config.RampMachName = {"RAMP"} Config.MXRampMachTools = {'3/8 MILLING'} Config.NWRampMachTools = {'3/8 MILLING'} +Config.CountersinkMachName = {"COUNTERSINK"} +Config.MXCountersinkMachTools = {'45 DEG'} +Config.NWCountersinkMachTools = {'45 DEG'} +Config.InsideChamferMachName = {"INSIDE CHAMFER"} +Config.MXInsideChamferMachTools = {'45 DEG'} +Config.NWInsideChamferMachTools = {'45 DEG'} +Config.OutsideChamferMachName = {"OUTSIDE CHAMFER"} +Config.MXOutsideChamferMachTools = {'45 DEG'} +Config.NWOutsideChamferMachTools = {'45 DEG'} Config.MXPocketingTools = {'3/8 POCKETING', '1/4 POCKETING'} Config.NWPocketingTools = {'3/8 POCKETING', '1/4 POCKETING'} @@ -94,6 +108,8 @@ Config.dSkeletonCut = 0.5 -- spessore scheletro pezzi piccoli Config.dSkeletonWidth = 1 * 25.4 +-- riduzione feed su pezzi con tab +Config.dTabFeed = 15000 -- riduzione feed su pezzi piccoli Config.bSmallFeedReduce = true Config.dSmallFeed = 8000 @@ -125,6 +141,10 @@ Config.TabParams = {{MatId = 1, MatExtCode = 6120, Length = 10.0, Height = {MatId = 21, MatExtCode = 6115, Length = 10.0, Height = 2.0, Angle = 30, Distance = 60, MinCount = 3, MaxCount = 4}, {MatId = 24, MatExtCode = 108360, Length = 10.0, Height = 2.0, Angle = 30, Distance = 60, MinCount = 3, MaxCount = 4}, {MatId = 25, MatExtCode = 124880, Length = 10.0, Height = 2.0, Angle = 30, Distance = 60, MinCount = 3, MaxCount = 4}, + {MatId = 26, MatExtCode = 127662, Length = 10.0, Height = 2.0, Angle = 30, Distance = 60, MinCount = 3, MaxCount = 4}, + {MatId = 27, MatExtCode = 127663, Length = 10.0, Height = 2.0, Angle = 30, Distance = 60, MinCount = 3, MaxCount = 4}, + {MatId = 28, MatExtCode = 127664, Length = 10.0, Height = 2.0, Angle = 30, Distance = 60, MinCount = 3, MaxCount = 4}, + {MatId = 29, MatExtCode = 127665, Length = 10.0, Height = 2.0, Angle = 30, Distance = 60, MinCount = 3, MaxCount = 4}, } -- parts minimum distance from raw part outline for each material @@ -149,8 +169,12 @@ Config.Kerf = {{MatId = 1, MatExtCode = 6120, Kerf = 8}, {MatId = 19, MatExtCode = 6117, Kerf = 20}, {MatId = 20, MatExtCode = 6119, Kerf = 20}, {MatId = 21, MatExtCode = 6115, Kerf = 20}, - {MatId = 24, MatExtCode = 108360, Kerf = 20}, + {MatId = 24, MatExtCode = 108360, Kerf = 8}, {MatId = 25, MatExtCode = 124880, Kerf = 20}, + {MatId = 26, MatExtCode = 127662, Kerf = 20}, + {MatId = 27, MatExtCode = 127663, Kerf = 20}, + {MatId = 28, MatExtCode = 127664, Kerf = 20}, + {MatId = 29, MatExtCode = 127665, Kerf = 20}, } Config.KitXModel = {{Model = '65w981', KitQty = 6}, diff --git a/Main.lua b/Main.lua index 7ed421d..c7e4d4c 100644 --- a/Main.lua +++ b/Main.lua @@ -19,7 +19,7 @@ package.cpath = package.cpath .. ";/EgtDevTest/LUAREST/32/?.lua" require( 'EgtBase') _ENV = EgtProtectGlobal() -EgtEnableDebug( true) +EgtEnableDebug( false) -- Imposto direttorio libreria specializzata per Nesting local sBaseDir = EgtGetSourceDir() @@ -34,7 +34,7 @@ local socket = require( 'socket') ------------------------------------------- PARAMETERS ------------------------------------------- local DebugCode = false -local ProblematicItem = 67328 +local ProblematicItem = 138284 ------------------------------------------- ************** ------------------------------------------- @@ -856,7 +856,7 @@ function Estimate(readBatch) PartCount = PartCount + 1 local TempPart = readBatch.OrderList[Order].KitList[Kit].PartList[Part] -- leggo le proprietà dal dxf e le imposto - local MatExtCode, PdfLink, Paint, OptParameters, ErrorType = UtilityLib.readDXF(TempPart.CadFilePath, TempPart.PartExtCode, true) + local MatExtCode, PdfLink, Paint, OptParameters, ErrorType = UtilityLib.readDXF(TempPart.CadFilePath, TempPart.PartExtCode, true, readBatch.CreatePng) -- solo se trovo il materiale vado avanti per questo pezzo if ErrorType == 0 and MatExtCode then TempPart.MatExtCode = MatExtCode diff --git a/NestingLib.lua b/NestingLib.lua index e5758b0..b53697a 100644 --- a/NestingLib.lua +++ b/NestingLib.lua @@ -23,7 +23,7 @@ local UtilityLib = require( 'UtilityLib') ------------------------------------------- PARAMETERS ------------------------------------------- local DebugCode = false -local ProblematicItem = 67328 +local ProblematicItem = 138284 local OrderXCart = 1 -- ordini che si possono mettere su un carrello local KitXCart = 6 -- kit che si possono mettere su un carrello @@ -52,6 +52,9 @@ local OutlineMachining = {} --{{".375 ROUGHER", "ROUGHER"}, {'3/8 MILLING', '1/4 local HoleMachining = {} --{"HOLE", {'3/16 DRILLING', '1/4 DRILLING', '1/2 DRILLING', '1/8 DRILLING', '11/32 DRILLING', '13/32 DRILLING', -- '3/8 DRILLING', '5/16 DRILLING', '7/16 DRILLING', '17/32 DRILLING', '37/64 DRILLING'}} local RampMachining = {} -- {"RAMP", '3/8 MILLING'} --, '1/4 MILLING'}} +local OutsideChamferMachining = {} -- {"COUNTERSINK", '45 DEG'} --, '1/4 MILLING'}} +local InsideChamferMachining = {} -- {"COUNTERSINK", '45 DEG'} --, '1/4 MILLING'}} +local CountersinkMachining = {} -- {"COUNTERSINK", '45 DEG'} --, '1/4 MILLING'}} local Pocketing = {} -- {'3/8 POCKETING', '1/4 POCKETING'} local sCurrMachName = "" local IsOffline = false @@ -65,6 +68,7 @@ local IntExtOutlineList = {} local InternalOutlineList = {} local PocketingList = {} local RampList = {} +local ChamferList = {} local HoleList = {} -- funzione che legge i dxf con le proprieta' dei pezzi @@ -519,6 +523,9 @@ end local AREA = "Area" local OUTLINE = "Outline" local HOLE = "HOLE" +local INSIDECHAMFER = "INSIDE CHAMFER" +local OUTSIDECHAMFER = "OUTSIDE CHAMFER" +local COUNTERSINK = "COUNTERSINK" local PARTID = "PartId" local PRIORITY = "Priority" local DTMXPOS = "DATA MATRIX CODE POSITION" @@ -535,7 +542,7 @@ local function AddPartListToNesting(PartList, ErrorList, Material) -- 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 - local PartId1 = EgtGetFirstNameInGroup(GDB_ID.ROOT, PartList[Part].PartId) + local PartId1 = EgtGetFirstNameInGroup(GDB_ID.ROOT, PartList[Part].PartDtmx) if not PartId1 then -- importo il dxf del pezzo DXFpath = string.gsub(PartList[Part].CadFilePath, "\\", '/') @@ -823,7 +830,24 @@ local function AddPartListToNesting(PartList, ErrorList, Material) nPointId = EgtGetNext(nPointId) end EgtSetStatus(LayerId, GDB_ST.ON) - elseif layerName == OUTLINE or layerName == HOLE or layerName == CARTBININFO or layerName == RAMP then + elseif layerName == OUTSIDECHAMFER then + if PartList[Part].OptParameters.OutsideChamferWidth then + local nChamferId = EgtGetFirstInGroup( LayerId) + while nChamferId do + EgtSetInfo( nChamferId, 'ChamferWidth', PartList[Part].OptParameters.OutsideChamferWidth) + nChamferId = EgtGetNext(nChamferId) + end + end + elseif layerName == INSIDECHAMFER then + if PartList[Part].OptParameters.InsideChamferWidth then + local nChamferId = EgtGetFirstInGroup( LayerId) + while nChamferId do + EgtSetInfo( nChamferId, 'ChamferWidth', PartList[Part].OptParameters.InsideChamferWidth) + nChamferId = EgtGetNext(nChamferId) + end + end + EgtSetStatus(LayerId, GDB_ST.ON) + elseif layerName == OUTLINE or layerName == HOLE or layerName == CARTBININFO or layerName == RAMP or layerName == COUNTERSINK then EgtSetStatus(LayerId, GDB_ST.ON) else EgtSetStatus(LayerId, GDB_ST.OFF) @@ -977,6 +1001,7 @@ local function CreateMachSheets(LastMachGroupId, SheetPartId, Material, PartList table.insert(Sheet.PartList, {PartId = EgtGetInfo(PartId, PARTID)}) if tonumber(EgtGetInfo(PartId, PARTID)) == ProblematicItem then local x = 2 + --EgtSaveFile("c:/Temp/ProvaNesting2.nge") end -- lo elimino dalla lista pezzi local PartIndex = 0 @@ -997,6 +1022,7 @@ end -- local SHEETLABEL = "SheetLabel" +local REMNANTLABEL = "RemnantLabel" -- funzione che nesta i pezzi passatigli dato un grezzo di partenza e/o un materiale -- LastRaw: grezzo incompleto da riempire -- PartList: lista dei pezzi da nestare @@ -1005,6 +1031,15 @@ function NestingLib.NestPartInRawPart(LastRaw, PartList, Material, ErrorList, Is -- inizio nesting automatico EgtAutoNestStart() + local nOldMachGroup = EgtGetCurrMachGroup() + EgtResetCurrMachGroup() + + -- aggiungo tutti i pezzi al nesting + AddPartListToNesting(PartList, ErrorList, Material) + + -- ripristino MachGroup + EgtSetCurrMachGroup(nOldMachGroup) + -- creo pannello del materiale local SheetPartId = EgtGroup(GDB_ID.ROOT) EgtSetName(SheetPartId, "Sheet") @@ -1066,12 +1101,9 @@ function NestingLib.NestPartInRawPart(LastRaw, PartList, Material, ErrorList, Is EgtAutoNestAddDefectToSheet(SheetPartId, nSheetLabel) -- EgtAutoNestAddDefectToSheet( SheetId, DefectId) end - -- aggiungo tutti i pezzi al nesting - AddPartListToNesting(PartList, ErrorList, Material) if #ErrorList > 0 then return end -- recupero diametro utensile usato per outline local ToolDiam = 0 - local x = EgtGetCurrMachineName() if EgtMdbSetCurrMachining(OutlineMachining[2][1]) then local ToolName = EgtMdbGetCurrMachiningParam(MCH_MP.TOOL) EgtTdbSetCurrTool(ToolName) @@ -1237,7 +1269,7 @@ local function SortParts(PartList, bZigZagSorting) end -- -local function ProcessMachinings(HoleList, RampList, PocketingList, IntIntOutlineList, SkinOutlineList, IntExtOutlineList, InternalOutlineList, SmallOutlineList, OutlineList, LastMch) +local function ProcessMachinings(HoleList, RampList, ChamferList, PocketingList, IntIntOutlineList, SkinOutlineList, IntExtOutlineList, InternalOutlineList, SmallOutlineList, OutlineList, LastMch) if not LastMch then local nPhase = EgtGetCurrPhase() LastMch = EgtGetPhaseDisposition( nPhase) @@ -1247,6 +1279,7 @@ local function ProcessMachinings(HoleList, RampList, PocketingList, IntIntOutlin LastMch = SortCuts(HoleList[HoleMach], LastMch) end LastMch = SortCuts(RampList, LastMch) + LastMch = SortCuts(ChamferList, LastMch) LastMch = SortCuts(PocketingList, LastMch) LastMch = SortCuts(IntIntOutlineList, LastMch) LastMch = SortCuts(SkinOutlineList, LastMch) @@ -1392,6 +1425,20 @@ function NestingLib.PostNestOp(Material, ErrorList, IsEstimate, BatchId, MachId) local RemnantCutLayer = EgtGroup(RemnantCutPart) local RemnantCutLine = EgtLine(RemnantCutLayer, Point3d(0, 0, 0), Point3d(0, SheetBBox:getDimY(), 0)) + -- aggiungo etichetta remnant + local dLabelW = 50 + local dLabelH = 25 + local dYPos = Material.W_mm + if Material.W_mm > 1465 then + dYPos = 1465 + (dLabelH) + end + local nRemnantLabel = EgtRectangle2P(RemnantCutLayer, Point3d(20, dYPos - dLabelH, 0), Point3d(20 + dLabelW, dYPos, 0), GDB_RT.GLOB) + EgtSetName(nRemnantLabel, REMNANTLABEL) + local sMaterial = string.format('%08d', Material.MatExtCode) + local sRemnantDim = string.format('%08d', tointeger(floor(RemnantMultiple * Config.RemnantMinDimension * 1000))) + EgtSetInfo(RemnantCutLayer, "DTMX", "MT" .. sMaterial .. "-" .. sRemnantDim) + local sRemnantDimText = string.format('%.1f', RemnantMultiple * Config.RemnantMinDimension / 25.4) + EgtSetInfo(RemnantCutLayer, "TEXT", sRemnantDimText) -- lo aggiungo come pezzo al grezzo EgtAddPartToRawPart(RemnantCutPart, Point3d(RemnantCutXPos, 0, 0), CurrRawPart) -- lo lavoro @@ -1486,6 +1533,8 @@ function NestingLib.PostNestOp(Material, ErrorList, IsEstimate, BatchId, MachId) EgtSetMachiningParam(MCH_MP.STARTADDLEN , (- dSkeletonCutLength + 1) / 2) EgtSetMachiningParam(MCH_MP.ENDADDLEN , (- dSkeletonCutLength + 1) / 2) end + -- aggiungo ingresso a zig zag + EgtSetMachiningParam(MCH_MP.LEADINTYPE , MCH_MILL_LI.ZIGZAG) -- applico la lavorazione if not EgtApplyMachining() then table.insert(ErrorList, {ErrType = "E.7", Uid = "Skeleton separation cut", Description = "Error in horizontal skeleton machining!"}) @@ -1533,6 +1582,8 @@ function NestingLib.PostNestOp(Material, ErrorList, IsEstimate, BatchId, MachId) EgtSetMachiningParam(MCH_MP.STARTADDLEN , (- dSkeletonCutLength + 1) / 2) EgtSetMachiningParam(MCH_MP.ENDADDLEN , (- dSkeletonCutLength + 1) / 2) end + -- aggiungo ingresso a zig zag + EgtSetMachiningParam(MCH_MP.LEADINTYPE , MCH_MILL_LI.ZIGZAG) -- applico la lavorazione if not EgtApplyMachining() then table.insert(ErrorList, {ErrType = "E.7", Uid = "Skeleton separation cut", Description = "Error in vertical skeleton machining!"}) @@ -1835,7 +1886,7 @@ function CreateMachByType(Material, CurrRawPart, PartsBBox, nSkeletonLayerId, Pa CurrPart = EgtGetNextPartInRawPart(CurrPart) end -- ordino lavorzioni con algoritmo ts - ProcessMachinings(HoleList, RampList, PocketingList, IntIntOutlineList, SkinOutlineList, IntExtOutlineList, InternalOutlineList, SmallOutlineList, OutlineList) + ProcessMachinings(HoleList, RampList, ChamferList, PocketingList, IntIntOutlineList, SkinOutlineList, IntExtOutlineList, InternalOutlineList, SmallOutlineList, OutlineList) return PartsArea end @@ -2014,6 +2065,7 @@ function ResetSPMachList() InternalOutlineList = {} PocketingList = {} RampList = {} + ChamferList = {} HoleList = {} for HoleMach = 1, (#HoleMachining[2] + #Pocketing) do table.insert(HoleList, {}) @@ -2082,7 +2134,7 @@ function CalcPartMachinings(Material, CurrPart, bInternalPart, LastMch, nMachTyp elseif nCurrMode == 2 or nCurrMode == 4 then -- abilito tab EgtSetMachiningParam(MCH_MP.LEAVETAB, true) - EgtSetMachiningParam(MCH_MP.FEED, 8000) + EgtSetMachiningParam(MCH_MP.FEED, Config.dTabFeed) for CurrMat = 1, #Config.TabParams do if Config.TabParams[CurrMat].MatExtCode == Material.MatExtCode then EgtSetMachiningParam(MCH_MP.TABLEN, Config.TabParams[CurrMat].Length) @@ -2118,6 +2170,8 @@ function CalcPartMachinings(Material, CurrPart, bInternalPart, LastMch, nMachTyp if Config.bSmallFeedReduce and dGeomArea < 11612 then -- 3225 then EgtSetMachiningParam(MCH_MP.FEED, Config.dSmallFeed) end + -- imposto elevazione a spessore + 2 +-- EgtSetMachiningParam(MCH_MP.LIELEV, Material.T_mm + 2) -- applico la lavorazione if EgtApplyMachining() then bValidOutlineMach = true @@ -2166,6 +2220,8 @@ function CalcPartMachinings(Material, CurrPart, bInternalPart, LastMch, nMachTyp EgtSetMachiningParam(MCH_MP.TABMAX, 16) EgtSetMachiningParam(MCH_MP.TABDIST, 30000) -- end + -- imposto elevazione a spessore + 2 +-- EgtSetMachiningParam(MCH_MP.LIELEV, Material.T_mm + 2) -- applico la lavorazione if EgtApplyMachining() then bValidOutlineMach = true @@ -2348,10 +2404,147 @@ function CalcPartMachinings(Material, CurrPart, bInternalPart, LastMch, nMachTyp CurrGeom = EgtGetNext(CurrGeom) end end + -- cerco layer Countersink + local CountersinkLayer = EgtGetFirstNameInGroup(CurrPart, CountersinkMachining[1]) + -- se lo trovo + if CountersinkLayer then + -- verifico le geometrie presenti + local CurrGeom = EgtGetFirstInGroup(CountersinkLayer) + while CurrGeom do + -- se non e' gia' percorso di lavorazione + if not EgtGetInfo(CurrGeom, MACHPATH) then + -- se e' arco + if EgtGetType(CurrGeom) == GDB_TY.CRV_ARC then + local NewMachId = EgtAddMachining(CountersinkMachining[1], CountersinkMachining[2]) + EgtSetMachiningGeometry(CurrGeom) + local dRadius = EgtArcRadius( CurrGeom) + local dMaxWidth = ( dRadius * 2) - 1 + local ToolDiam = 0 + local ToolHeight = 0 + if EgtMdbSetCurrMachining(OutsideChamferMachining[2]) then + local ToolName = EgtMdbGetCurrMachiningParam(MCH_MP.TOOL) + EgtTdbSetCurrTool(ToolName) + ToolDiam = EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM) + ToolHeight = EgtTdbGetCurrToolParam(MCH_TP.MAXMAT) + end + local dDepth = min( dMaxWidth / 2, Material.T_mm, ToolDiam / 2, ToolHeight) + local dRadial = dDepth + EgtSetMachiningParam(MCH_MP.DEPTH, dDepth) + EgtSetMachiningParam(MCH_MP.OFFSR, dRadial) + EgtSetMachiningParam(MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + -- applico la lavorazione + if EgtApplyMachining() then + bValidOutlineMach = true + InitInTSP(NewMachId, InternalOutlineList, 0) + end + if not bValidOutlineMach then + local PartId = EgtGetInfo(CurrPart, PARTID) + if not PartId then PartId = "" end + table.insert(ErrorList, {ErrType = "E.7", Uid = "PartId = " .. PartId, Description = "Error in Countersink machining!"}) + end + end + end + CurrGeom = EgtGetNext(CurrGeom) + end + end + -- cerco layer Outside Chamfer + local OutsideChamferLayer = EgtGetFirstNameInGroup(CurrPart, OutsideChamferMachining[1]) + -- se lo trovo + if OutsideChamferLayer then + -- verifico le geometrie presenti + local CurrGeom = EgtGetFirstInGroup(OutsideChamferLayer) + while CurrGeom do + -- se non e' gia' percorso di lavorazione + if not EgtGetInfo(CurrGeom, MACHPATH) then + -- se e' curva composita + if EgtGetType(CurrGeom) == GDB_TY.CRV_COMPO then + local dChamferWidth = EgtGetInfo( CurrGeom, 'ChamferWidth', 'd') + -- se trovo info spessore del chamfer + if dChamferWidth then + -- creo lavorazione + local NewMachId = EgtAddMachining(OutsideChamferMachining[1], OutsideChamferMachining[2]) + EgtSetMachiningGeometry(CurrGeom) + -- calcolo affondamento ed offset radiale + dChamferWidth = dChamferWidth + local dMaxWidth = dChamferWidth + 8 + local ToolDiam = 0 + if EgtMdbSetCurrMachining(OutsideChamferMachining[2]) then + local ToolName = EgtMdbGetCurrMachiningParam(MCH_MP.TOOL) + EgtTdbSetCurrTool(ToolName) + ToolDiam = EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM) + end + local dDepth = min( dMaxWidth / 2, Material.T_mm, ToolDiam / 2) + local dRadial = dDepth - dChamferWidth + EgtSetMachiningParam(MCH_MP.DEPTH, dDepth) + EgtSetMachiningParam(MCH_MP.OFFSR, dRadial) + EgtSetMachiningParam(MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + -- applico la lavorazione + if EgtApplyMachining() then + bValidOutlineMach = true + InitInTSP(NewMachId, InternalOutlineList, 0) + end + if not bValidOutlineMach then + local PartId = EgtGetInfo(CurrPart, PARTID) + if not PartId then PartId = "" end + table.insert(ErrorList, {ErrType = "E.7", Uid = "PartId = " .. PartId, Description = "Error in OutsideChamfer machining!"}) + end + end + end + end + CurrGeom = EgtGetNext(CurrGeom) + end + end + -- cerco layer Inside Chamfer + local InsideChamferLayer = EgtGetFirstNameInGroup(CurrPart, InsideChamferMachining[1]) + -- se lo trovo + if InsideChamferLayer then + -- verifico le geometrie presenti + local CurrGeom = EgtGetFirstInGroup(InsideChamferLayer) + while CurrGeom do + -- se non e' gia' percorso di lavorazione + if not EgtGetInfo(CurrGeom, MACHPATH) then + -- se e' curva composita + if EgtGetType(CurrGeom) == GDB_TY.CRV_COMPO then + local dChamferWidth = EgtGetInfo( CurrGeom, 'ChamferWidth', 'd') + -- se trovo info spessore del chamfer + if dChamferWidth then + -- creo lavorazione + local NewMachId = EgtAddMachining(InsideChamferMachining[1], InsideChamferMachining[2]) + EgtSetMachiningGeometry(CurrGeom) + -- calcolo affondamento ed offset radiale + dChamferWidth = dChamferWidth + local dMaxWidth = dChamferWidth + 8 + local ToolDiam = 0 + if EgtMdbSetCurrMachining(InsideChamferMachining[2]) then + local ToolName = EgtMdbGetCurrMachiningParam(MCH_MP.TOOL) + EgtTdbSetCurrTool(ToolName) + ToolDiam = EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM) + end + local dDepth = min( dMaxWidth / 2, Material.T_mm, ToolDiam / 2) + local dRadial = dDepth - dChamferWidth + EgtSetMachiningParam(MCH_MP.DEPTH, dDepth) + EgtSetMachiningParam(MCH_MP.OFFSR, dRadial) + EgtSetMachiningParam(MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT) + -- applico la lavorazione + if EgtApplyMachining() then + bValidOutlineMach = true + InitInTSP(NewMachId, InternalOutlineList, 0) + end + if not bValidOutlineMach then + local PartId = EgtGetInfo(CurrPart, PARTID) + if not PartId then PartId = "" end + table.insert(ErrorList, {ErrType = "E.7", Uid = "PartId = " .. PartId, Description = "Error in InsideChamfer machining!"}) + end + end + end + end + CurrGeom = EgtGetNext(CurrGeom) + end + end end if bDoCalc then -- ordino lavorzioni con algoritmo ts - return ProcessMachinings(HoleList, RampList, PocketingList, IntIntOutlineList, SkinOutlineList, IntExtOutlineList, InternalOutlineList, SmallOutlineList, OutlineList, LastMch) + return ProcessMachinings(HoleList, RampList, ChamferList, PocketingList, IntIntOutlineList, SkinOutlineList, IntExtOutlineList, InternalOutlineList, SmallOutlineList, OutlineList, LastMch) end end @@ -2465,6 +2658,9 @@ function NestingLib.ManageMachine(CurrIsOffline) OutlineMachining = {} HoleMachining = {} RampMachining = {} + CountersinkMachining = {} + OutsideChamferMachining = {} + InsideChamferMachining = {} Pocketing = {} IsOffline = false -- aggiungo liste nomi layer in prima posizione @@ -2473,6 +2669,9 @@ function NestingLib.ManageMachine(CurrIsOffline) -- table.insert(RampMachining, 1, Config.RampMachName) HoleMachining[1] = Config.HoleMachName[1] RampMachining[1] = Config.RampMachName[1] + CountersinkMachining[1] = Config.CountersinkMachName[1] + OutsideChamferMachining[1] = Config.OutsideChamferMachName[1] + InsideChamferMachining[1] = Config.InsideChamferMachName[1] -- se offline imposto lavorazioni macchina NorthWood if CurrIsOffline then sCurrMachName = "Northwood-RHD" @@ -2480,6 +2679,9 @@ 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) + table.insert(OutsideChamferMachining, 2, Config.MXOutsideChamferMachTools) + table.insert(InsideChamferMachining, 2, Config.NWInsideChamferMachTools[1]) Pocketing = Config.NWPocketingTools IsOffline = true else @@ -2488,6 +2690,9 @@ function NestingLib.ManageMachine(CurrIsOffline) table.insert(OutlineMachining, 2, Config.MXOutlineMachTools) table.insert(HoleMachining, 2, Config.MXHoleMachTools) table.insert(RampMachining, 2, Config.MXRampMachTools[1]) + table.insert(CountersinkMachining, 2, Config.MXCountersinkMachTools[1]) + table.insert(OutsideChamferMachining, 2, Config.MXOutsideChamferMachTools[1]) + table.insert(InsideChamferMachining, 2, Config.MXInsideChamferMachTools[1]) Pocketing = Config.MXPocketingTools IsOffline = false end diff --git a/UtilityLib.lua b/UtilityLib.lua index 7529435..ddaf5cc 100644 --- a/UtilityLib.lua +++ b/UtilityLib.lua @@ -124,14 +124,16 @@ local PDF = {"PDF LINK"} local CUTOPT = {"CUT OPT", "CutOpt"} local LABEL = {"LABEL", "Label"} local NAME = {"NAME", "Name"} +local INCHAMFER = {"INSIDE CHAMFER WIDTH", "InsideChamferWidth"} +local OUTCHAMFER = {"OUTSIDE CHAMFER WIDTH", "OutsideChamferWidth"} -local DXFFlags = {MATERIAL, PAINT, ASSEMBLY, TNUT, ROUND, TAB, PDF, CUTOPT, LABEL, NAME} +local DXFFlags = {MATERIAL, PAINT, ASSEMBLY, TNUT, ROUND, TAB, PDF, CUTOPT, LABEL, NAME, INCHAMFER, OUTCHAMFER} -- funzione che legge i dxf -- valore di ritorno numero 5 e' ErrorType: -- 1) File not found -- 2) Material layer not found -function UtilityLib.readDXF(DXFpath, PartExtCode, IsEstimation) +function UtilityLib.readDXF(DXFpath, PartExtCode, IsEstimation, CreatePng) -- elimino doppie barre dalla path DXFpath = string.gsub(DXFpath, "\\", '/') local errorType = 0 @@ -191,7 +193,7 @@ function UtilityLib.readDXF(DXFpath, PartExtCode, IsEstimation) end end end - if IsEstimation and paint then + if ( IsEstimation and paint) or CreatePng then -- verifico se gia' processato local Index = 1 local bFound = false @@ -242,6 +244,7 @@ function SavePartImage(PartExtCode) -- EgtMove(nPartId, Vector3d(- (b3PartId:getDimX() / 2), - (b3PartId:getDimY() / 2), 0)) EgtZoom(SCE_ZM.ALL) EgtGetImage( SCE_SM.SH, WHITE(), WHITE(), 1600, 1000, PNGPath .. "/" .. PartExtCode .. ".png") + EgtGetImage( SCE_SM.SH, WHITE(), WHITE(), 2000, 800, PNGPath .. "/" .. PartExtCode .. "_SP.png") -- EgtSaveFile(PNGPath .. "/" .. PartExtCode .. ".nge") end --