From 37dd22aa3e7dbc1b638a72ae420546bc3101838e Mon Sep 17 00:00:00 2001 From: SaraP Date: Wed, 29 Jun 2022 11:34:46 +0200 Subject: [PATCH] 3dPrinting : - riorganizzazione - correzioni nel collegamento e nel riordino dei setti. --- LuaLibs/AddManData.lua | 51 ++++--- LuaLibs/CSVManager.lua | 7 +- LuaLibs/CalcPaths.lua | 100 ++++++-------- LuaLibs/CalcSlices.lua | 38 +++-- LuaLibs/CalcSolids.lua | 25 ++-- LuaLibs/CalcToolPath.lua | 222 +++++++++++++++++------------- LuaLibs/RunGcodeGenerate.lua | 8 +- LuaLibs/RunMachiningParamCalc.lua | 80 +++++------ LuaLibs/RunPartPositioning.lua | 118 +++++++++++----- LuaLibs/RunShowManager.lua | 14 +- LuaLibs/RunSliceAdvancement.lua | 28 ++-- LuaLibs/RunSlicePalette.lua | 25 ++-- LuaLibs/RunSlicing.lua | 170 +++++++++++------------ 13 files changed, 487 insertions(+), 399 deletions(-) diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index ea5492a..f153b25 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -10,7 +10,6 @@ require( 'EgtBase') EgtOutLog( ' AddManData started', 1) --------------------------------------------------------------------- -PARAMS_GRP = "PrintingParams" SLICE_LAYER = "Slice" CONTOUR_GRP = "Crv" OUTER_CRV = "OuterCrv" @@ -23,24 +22,19 @@ INFILL_CRV = "Infill" COASTING_CRV = "Coasting" WIPE_CRV = "Wipe" FRAME_PART = "FramePart" +START_POINT = "StartPoint" MIN_LEN = 1e-3 MIN_AREA = 1e-6 -INFO_PARTD_ID = "PartId" - -DEFAULT_SECTION = "Default" -LAYER_SECTION = "" +-- Parametri di lavorazione +SEC_DEFAULT = "Default" KEY_SLICING_45 = "Slicing45" KEY_SLICING_DIR="SlicingDir" -KEY_SLICE_Z = "SliceZ" -KEY_SLICE_DELTAZ = "DeltaZ" -KEY_SLICE_NBR = "SliceNbr" KEY_SLICE_STEP = "StrandH" KEY_SHELLS_NBR = "StrandCount" KEY_STRAND = "StrandW" KEY_OFFSET_SLICE ="Offset" -KEY_START_POINT = "StartPoint" KEY_SP_OFFSET_ON_SLICE = "StartPointOffsetOnSlice" KEY_PRINT_ORDER = "StrandOrder" KEY_PRINT_DIRECTION = "Direction" @@ -59,8 +53,6 @@ KEY_LEAD_OUT_FEED = "LeadOutFeed" KEY_SUPPORT_FEED = "SupportFeed" KEY_G0_FEED = "G0Feed" KEY_MATERIAL = "Material" -KEY_COEFF_X = "CoeffX" -KEY_COEFF_Y = "CoeffY" KEY_LEAD_IN_TYPE = "LeadIn" KEY_LEAD_IN_TANG_DIST = "LeadInTangDist" KEY_LEAD_IN_ORTHO_DIST = "LeadInOrthoDist" @@ -73,6 +65,29 @@ KEY_COASTING_FEED = "CoastingFeed" KEY_WIPE_LEN = "WipeLen" KEY_WIPE_FEEDPU = "WipeFeedPu" KEY_TOOL_DIAM = "ToolDiam" +KEY_SETTI_OVERLAP = "SettiOverlap" +KEY_SETTI_SHELLS_NBR = "SettiStrandCount" +KEY_SETTI_LINK = "SettiLink" +KEY_SETTI_INVERT = "SettiInvert" +KEY_SETTI_LEAD_IN_INVERT = "SettiLeadInInvert" +KEY_SETTI_LEAD_IN_LEN = "SettiLeadInLen" +KEY_SETTI_LEAD_OUT_INVERT = "SettiLeadOutInvert" +KEY_SETTI_LEAD_OUT_LEN = "SettiLeadOutLen" +KEY_SETTI_LEAD_OUT_WIPE1 = "SettiLeadOutWipeTang" +KEY_SETTI_LEAD_OUT_WIPE2 = "SettiLeadOutWipe" +KEY_SETTI_LEAD_OUT_WIPE_DIR = "SettiLeadOutWipeDir" + +-- Parametri di macchina +SEC_3DPRINTING = "3dPrinting" +KEY_COEFF_X = "CoeffX" +KEY_COEFF_Y = "CoeffY" + +-- Altre chiavi +KEY_SLICE_NBR = "SliceNbr" +KEY_SLICE_Z = "SliceZ" +KEY_SLICE_DELTAZ = "DeltaZ" +KEY_START_POINT = "StartPoint" + TYPE = { OUTER_SHELL = 1, @@ -114,10 +129,13 @@ TABLE_OUTLINE = "Outline" TABLE_SURFACE = "Surface" PART = "Part" ORIGINAL_SOLID = "OriginalSolid" +LAY_AUX = "Aux" +LAY_WALLS = "Walls" VIEWPARAMS = 'ViewParams' IMPORTED_SOLID = 'ImportedSolid' RESULT_READ_PROG = 'ResultReadProg' +KEY_PART_ON_TABLE = 'PartOnTable' KEY_RESULT = 'Result' KEY_PALETTE = 'Palette' KEY_LAYER_VIEW = 'LayerView' @@ -160,17 +178,6 @@ SLICE_ADV_TYPE = { SETTI_GRP="Setti" SETTI_CRV="Setto" -KEY_SETTI_OVERLAP = "SettiOverlap" -KEY_SETTI_SHELLS_NBR = "SettiStrandCount" -KEY_SETTI_LINK = "SettiLink" -KEY_SETTI_INVERT = "SettiInvert" -KEY_SETTI_LEAD_IN_INVERT = "SettiLeadInInvert" -KEY_SETTI_LEAD_IN_LEN = "SettiLeadInLen" -KEY_SETTI_LEAD_OUT_INVERT = "SettiLeadOutInvert" -KEY_SETTI_LEAD_OUT_LEN = "SettiLeadOutLen" -KEY_SETTI_LEAD_OUT_WIPE1 = "SettiLeadOutWipeTang" -KEY_SETTI_LEAD_OUT_WIPE2 = "SettiLeadOutWipe" -KEY_SETTI_LEAD_OUT_WIPE_DIR = "SettiLeadOutWipeDir" --------------------------------------------------------------------- return AddManData diff --git a/LuaLibs/CSVManager.lua b/LuaLibs/CSVManager.lua index e96efb8..3dc77ac 100644 --- a/LuaLibs/CSVManager.lua +++ b/LuaLibs/CSVManager.lua @@ -12,6 +12,7 @@ EgtOutLog( ' CSVManager started', 1) -- Dati local AMD = require( 'AddManData') +--------------------------------------------------------------------- function toCSV (t) local s = "" for _,p in pairs(t) do @@ -19,7 +20,8 @@ function toCSV (t) end return string.sub(s, 2) -- remove first comma end - + +--------------------------------------------------------------------- function escapeCSV (s) if string.find(s, '[,"]') then ns = '"' .. string.gsub(s, '"', '""') .. '"' @@ -27,6 +29,7 @@ function escapeCSV (s) return s end +--------------------------------------------------------------------- local function fromCSV(s) s = s .. ';' -- ending comma local t = {} -- table to collect fields @@ -53,6 +56,7 @@ local function fromCSV(s) return t end +--------------------------------------------------------------------- function read_file( path) local file = io.open( path, "r") -- r read mode and b binary mode if not file then return nil end @@ -67,4 +71,5 @@ function read_file( path) return CSVTable end +--------------------------------------------------------------------- return CSVManager diff --git a/LuaLibs/CalcPaths.lua b/LuaLibs/CalcPaths.lua index 78fa96f..a9e953d 100644 --- a/LuaLibs/CalcPaths.lua +++ b/LuaLibs/CalcPaths.lua @@ -1,4 +1,4 @@ --- CalcPaths.lua by Egaltech s.r.l. 2022/04/13 +-- CalcPaths.lua by Egaltech s.r.l. 2022/06/28 -- Calcolo percorsi di lavoro per Stampa 3d -- Tabella per definizione modulo @@ -12,18 +12,20 @@ EgtOutLog( ' CalcPaths started', 1) -- Dati local AMD = require( 'AddManData') +--------------------------------------------------------------------- +local s_nPartId + --------------------------------------------------------------------- local function GetLayerParamsForPathCalc() - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) local LayerParams = {} - LayerParams.nShellsNbr = EgtGetInfo( nParamsGrp, KEY_SHELLS_NBR, 'i') - LayerParams.dStrand = EgtGetInfo( nParamsGrp, KEY_STRAND, 'd') - LayerParams.dOffs = EgtGetInfo( nParamsGrp, KEY_OFFSET_SLICE, 'd') - LayerParams.nFloorNbr = EgtGetInfo( nParamsGrp, KEY_FLOOR_NBR, 'i') - LayerParams.vtSlicing = EgtGetInfo( nParamsGrp, KEY_SLICING_DIR, 'v') + LayerParams.nShellsNbr = EgtGetInfo( s_nPartId, KEY_SHELLS_NBR, 'i') + LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') + LayerParams.dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd') + LayerParams.nFloorNbr = EgtGetInfo( s_nPartId, KEY_FLOOR_NBR, 'i') + LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v') -- parametri setti - LayerParams.dSettiOverlap = EgtGetInfo( nParamsGrp, KEY_SETTI_OVERLAP, 'd') - LayerParams.nSettiShellsNbr = EgtGetInfo( nParamsGrp, KEY_SETTI_SHELLS_NBR, 'i') + LayerParams.dSettiOverlap = EgtGetInfo( s_nPartId, KEY_SETTI_OVERLAP, 'd') + LayerParams.nSettiShellsNbr = EgtGetInfo( s_nPartId, KEY_SETTI_SHELLS_NBR, 'i') return LayerParams end @@ -39,8 +41,7 @@ local function GetLayerStartPoint( nLayId) if nCrv then ptStart = EgtSP( nCrv, GDB_ID.ROOT) else - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) - ptStart = EgtGetInfo( nParamsGrp, KEY_START_POINT, 'p') + ptStart = EgtGetInfo( s_nPartId, KEY_START_POINT, 'p') end return ptStart end @@ -100,77 +101,62 @@ local function AddFloor( nSrfId, nGrpId, LayerParams, nFloorNbr) end --------------------------------------------------------------------- -local function MySortSetti( a, b) - - if abs( a.pt:getX() - b.pt:getX()) < GEO.EPS_SMALL then - -- confronto le y - if abs( a.pt:getY() - b.pt:getY()) < GEO.EPS_SMALL then - return false - elseif a.pt:getY() < b.pt:getY() + GEO.EPS_SMALL then - return true - else - return false - end - elseif a.pt:getX() < b.pt:getX() + GEO.EPS_SMALL then - return true - else - return false - end -end - -------------------------------------------------------------------- local function ReorderSetti( nGrp, vtSlicing, nStmId) -- box del pezzo + local nSlicePart = EgtGetParent( nGrp) local frLoc = Frame3d( ORIG(), vtSlicing) - local b3Box = EgtGetBBoxRef( nStmId, GDB_BB.STANDARD, frLoc) + local b3Box = EgtGetBBoxRef( nSlicePart, GDB_BB.STANDARD, frLoc) local ptMin = b3Box:getMin() + local ptMax = b3Box:getMax() ptMin:toGlob( frLoc) - local vtDiag = b3Box:getMax() - b3Box:getMin() - - local tab = {} - local vIds = EgtGetAllInGroup( nGrp) + ptMax:toGlob( frLoc) + + EgtSpInit() + local vIds = EgtGetNameInGroup( nGrp, SETTI_CRV .. '*') for i = 1, #vIds do - EgtExtendCurveStartByLen( vIds[i], 500) - EgtExtendCurveEndByLen( vIds[i], 500) - -- trim con il box del pezzo - local nNewId, nCnt = EgtTrimFlatCurveWithBox( vIds[i], Frame3d( ptMin, vtSlicing), vtDiag, true, true, GDB_RT.GLOB) - if nCnt > 0 then - table.insert( tab, { Id = nNewId, pt = EgtSP( nNewId)}) - end + local pt = EgtMP( vIds[i], GDB_RT.GLOB) + EgtSpAddPoint( pt:getX(), pt:getY()) + end + EgtSpSetOpenBound( true, SHP_OB.NEAR_PNT, min( ptMin:getX(), ptMax:getX()), min( ptMin:getY(), ptMax:getY())) + local vOrd, dLen = EgtSpCalculate( SHP_TY.OPEN) + EgtSpTerminate() + + local vOrderedSetti = {} + for i = 1, #vOrd do + table.insert( vOrderedSetti, vIds[vOrd[i]]) end - table.sort( tab, MySortSetti) - return tab + return vOrderedSetti end -------------------------------------------------------------------- local function CalcSettiPaths( nSliceGrp, nSettiGrp, LayerParams, nStmId) - -- calcolo gli offset + -- riordino i setti + local vOrderedSetti = ReorderSetti( nSettiGrp, LayerParams.vtSlicing, nStmId) + -- calcolo gli offset local dOffs = ( LayerParams.nSettiShellsNbr - 1) * LayerParams.dStrand / 2 local nOffsGrp = EgtGroup( nSettiGrp) - local vCrvIds = EgtGetNameInGroup( nSettiGrp, SETTI_CRV .. '*') - for i = 1, #vCrvIds do + for i = 1, #vOrderedSetti do for k = 0, LayerParams.nSettiShellsNbr - 1 do - local nNewId = EgtOffsetCurveAdv( vCrvIds[i], - dOffs + k * LayerParams.dStrand) - EgtSetName( nNewId, EgtGetName( vCrvIds[i])) + local nNewId = EgtOffsetCurveAdv( vOrderedSetti[i], - dOffs + k * LayerParams.dStrand) + EgtSetName( nNewId, EgtGetName( vOrderedSetti[i])) EgtSetInfo( nNewId, KEY_TYPE, TYPE.SETTO) EgtRelocateGlob( nNewId, nOffsGrp) end - end + end - -- calcolo l'ordine di realizzazione dei setti - local OrderedSetti = ReorderSetti( nOffsGrp, LayerParams.vtSlicing, nStmId) - -- scorro i gruppi di curve + -- scorro i gruppi di curve + local vSetti = EgtGetAllInGroup( nOffsGrp) local nCrvGrp = EgtGetFirstNameInGroup( nSliceGrp, CONTOUR_GRP .. '*') while nCrvGrp do local nSettiPathGrp = EgtGetFirstNameInGroup( nCrvGrp, SETTI_GRP) local nSrf = EgtGetFirstNameInGroup( nSettiPathGrp, LAYER_SRF) if nSrf then - for i = 1, #OrderedSetti do - local nNewId = EgtCopyGlob( OrderedSetti[i].Id, nSettiPathGrp) + for i = 1, #vSetti do + local nNewId = EgtCopyGlob( vSetti[i], nSettiPathGrp) -- trim dei setti con la regione offsettata local nCrv, nCnt = EgtTrimCurveWithRegion( nNewId, nSrf, true, false) -- elimino tratti troppo corti @@ -193,7 +179,9 @@ end --------------------------------------------------------------------- function CalcPaths.Exec( nPartId, nStmId) - local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*") + s_nPartId = nPartId + + local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*") if not vLayIds then EgtOutBox( 'Error no slice', 'PathCalc') return diff --git a/LuaLibs/CalcSlices.lua b/LuaLibs/CalcSlices.lua index 1eb7e36..376e502 100644 --- a/LuaLibs/CalcSlices.lua +++ b/LuaLibs/CalcSlices.lua @@ -1,4 +1,4 @@ --- CalcSlices.lua by Egaltech s.r.l. 2022/03/30 +-- CalcSlices.lua by Egaltech s.r.l. 2022/06/28 -- Calcolo percorsi di lavoro per Stampa 3d -- Tabella per definizione modulo @@ -13,15 +13,11 @@ EgtOutLog( ' CalcSlices started', 1) local AMD = require( 'AddManData') --------------------------------------------------------------------- -local function GetSliceStep() - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) - local dStep = EgtGetInfo( nParamsGrp, KEY_SLICE_STEP, 'd') - return dStep -end +local s_nPartId --------------------------------------------------------------------- local function ComputeZSlices( dZmin, dDeltaZ, dZmax) - local dSliceStep = GetSliceStep() + local dSliceStep = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd') or 10000 local ptSlices = { dZmin + dDeltaZ} local dPosZ = dZmin + dSliceStep while dPosZ < dZmax do @@ -58,13 +54,12 @@ local function ComputeMaxH( nStmId, frSlicing, HMax) end -------------------------------------------------------------------- -local function SlicingSetti( nPartId, vtSlicing, dZmin) +local function SlicingSetti( vtSlicing, dZmin) -- recupero le superfici che definiscono i setti - local nSettiPart = EgtGetFirstNameInGroup( GDB_ID.ROOT, SETTI_GRP) - if not nSettiPart then return end - EgtSetStatus( nSettiPart, GDB_ST.OFF) - local vSettiIds = EgtGetAllInGroup( EgtGetFirstLayer( nSettiPart)) + local nWallsLay = EgtGetFirstNameInGroup( s_nPartId, LAY_WALLS) + local vSettiIds = EgtGetAllInGroup( nWallsLay or GDB_ID.NULL) + if not vSettiIds or #vSettiIds == 0 then return end -- sistemo la direzione normale dei piani for i = 1, #vSettiIds do if EgtGetType( vSettiIds[i]) == GDB_TY.SRF_MESH then @@ -76,7 +71,7 @@ local function SlicingSetti( nPartId, vtSlicing, dZmin) end end - local nLayId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. '*') + local nLayId = EgtGetFirstNameInGroup( s_nPartId, SLICE_LAYER .. '*') while nLayId do -- recupero quota per slicing local dZ = EgtGetInfo( nLayId, KEY_SLICE_Z, 'd') @@ -128,14 +123,15 @@ function CalcSlices.Exec( nPartId, nStmId, HMax) local MIN_LEN = 20.0 local MIN_AREA = 25.0 + s_nPartId = nPartId + -- recupero la direzione dello slicing local vtSlicing = Z_AX() - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) - local bSlicing45 = EgtGetInfo( nParamsGrp, KEY_SLICING_45, 'b') + local bSlicing45 = EgtGetInfo( s_nPartId, KEY_SLICING_45, 'b') if bSlicing45 then - vtSlicing = Vector3d( sqrt(2)/2, 0, sqrt(2)/2) + vtSlicing = VectorFromSpherical( 1, 45, 0) end - EgtSetInfo( nParamsGrp, KEY_SLICING_DIR, vtSlicing) + EgtSetInfo( s_nPartId, KEY_SLICING_DIR, vtSlicing) local frSlicing = Frame3d( ORIG(), vtSlicing) -- recupero il box della superficie @@ -157,10 +153,10 @@ function CalcSlices.Exec( nPartId, nStmId, HMax) -- se slicing già presente lo cancello for i = 1, 2 do local sFind = EgtIf( i == 1, '', '__') .. SLICE_LAYER .. "*" - local nOldSliceId = EgtGetFirstNameInGroup( nPartId, sFind) + local nOldSliceId = EgtGetFirstNameInGroup( s_nPartId, sFind) while nOldSliceId do EgtErase( nOldSliceId) - nOldSliceId = EgtGetFirstNameInGroup( nPartId, sFind) + nOldSliceId = EgtGetFirstNameInGroup( s_nPartId, sFind) end end @@ -178,7 +174,7 @@ function CalcSlices.Exec( nPartId, nStmId, HMax) local dDeltaZ = EgtIf( nLayCnt == 1, dDeltaZStart, 0) local dPosZ = vZSlices[nLayCnt]- dDeltaZ EgtSetInfo( nLayId, KEY_SLICE_Z, dPosZ - dZmin) - EgtSetInfo( nLayId, KEY_SLICE_NBR, nLayCnt) + EgtSetInfo( nLayId, KEY_SLICE_NBR, nLayCnt) -- verifico se necessario ricalcolo local nId = EgtGetLastInGroup( nLayId) @@ -319,7 +315,7 @@ function CalcSlices.Exec( nPartId, nStmId, HMax) end -- setti - SlicingSetti( nPartId, vtSlicing, dZmin) + SlicingSetti( vtSlicing, dZmin) -- eventuale segnalazione errori if #vErr > 0 then diff --git a/LuaLibs/CalcSolids.lua b/LuaLibs/CalcSolids.lua index f8b5f34..8c83c5c 100644 --- a/LuaLibs/CalcSolids.lua +++ b/LuaLibs/CalcSolids.lua @@ -12,15 +12,17 @@ EgtOutLog( ' CalcSolids started', 1) -- Dati local AMD = require( 'AddManData') +--------------------------------------------------------------------- +local s_nPartId + --------------------------------------------------------------------- local function GetLayerParamsForSolidCalc() - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) local LayerParams = {} - LayerParams.bInvert = EgtGetInfo( nParamsGrp, KEY_PRINT_DIRECTION, 'b') - LayerParams.dLayHeight = EgtGetInfo( nParamsGrp, KEY_SLICE_STEP, 'd') - LayerParams.dStrand = EgtGetInfo( nParamsGrp, KEY_STRAND, 'd') - LayerParams.nOrder = EgtGetInfo( nParamsGrp, KEY_PRINT_ORDER, 'i') - LayerParams.vtSlicing = EgtGetInfo( nParamsGrp, KEY_SLICING_DIR, 'v') + LayerParams.bInvert = EgtGetInfo( s_nPartId, KEY_PRINT_DIRECTION, 'b') + LayerParams.dLayHeight = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd') + LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') + LayerParams.nOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'i') + LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v') return LayerParams end @@ -30,8 +32,7 @@ local function CalcSectionParams( dStrand, dH) local dLm = dStrand / 10 local dHm = dH / 6 -- recupero offset - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) - --local dOffs = EgtGetInfo( nParamsGrp, KEY_OFFSET_SLICE, 'd') + --local dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd') dOffs = 0 if dOffs and dOffs > 0 then -- calcolo area originale @@ -131,6 +132,10 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams) Color = EgtStdColor( 'YELLOW') elseif nType == TYPE.COASTING then Color = EgtStdColor( 'BLUE') + elseif nType == TYPE.WIPE then + Color = EgtStdColor( 'LIME') + elseif nType == TYPE.SETTO then + Color = EgtStdColor( 'OLIVE') end local nParts = EgtIf( nType == TYPE.LINK or nType == TYPE.COASTING, 1, 10) @@ -182,7 +187,9 @@ end --------------------------------------------------------------------- function CalcSolids.Exec( nPartId) - local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*") + s_nPartId = nPartId + + local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*") if not vLayIds then EgtOutBox( 'Error no slice', 'SolidCalc') return diff --git a/LuaLibs/CalcToolPath.lua b/LuaLibs/CalcToolPath.lua index 14d1865..5d75d80 100644 --- a/LuaLibs/CalcToolPath.lua +++ b/LuaLibs/CalcToolPath.lua @@ -12,40 +12,42 @@ EgtOutLog( ' CalcToolPath started', 1) -- Dati local AMD = require( 'AddManData') +--------------------------------------------------------------------- +local s_nPartId + --------------------------------------------------------------------- local function GetLayerParamsForToolPathCalc() - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) local LayerParams = {} - LayerParams.dStrand = EgtGetInfo( nParamsGrp, KEY_STRAND, 'd') - LayerParams.dLayHeight = EgtGetInfo( nParamsGrp, KEY_SLICE_STEP, 'd') - LayerParams.dOffs = EgtGetInfo( nParamsGrp, KEY_OFFSET_SLICE, 'd') - LayerParams.bInvert = ( EgtGetInfo( nParamsGrp, KEY_PRINT_DIRECTION, 'i') == PRINT_DIRECTION.CW) - LayerParams.nOrder = EgtGetInfo( nParamsGrp, KEY_PRINT_ORDER, 'i') - LayerParams.nLinkType = EgtGetInfo( nParamsGrp, KEY_LINK_TYPE, 'i') - LayerParams.dLinkParam = EgtGetInfo( nParamsGrp, KEY_LINK_PARAM, 'd') - LayerParams.nLeadInType = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, 'i') - LayerParams.dLeadInTangDist = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_TANG_DIST, 'd') - LayerParams.dLeadInOrthoDist = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_ORTHO_DIST, 'd') - LayerParams.nLeadOutType = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, 'i') - LayerParams.dLeadOutTangDist = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_TANG_DIST, 'd') - LayerParams.dLeadOutOrthoDist = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_ORTHO_DIST, 'd') - LayerParams.dOffsetLP = EgtGetInfo( nParamsGrp, KEY_OFFSET_LEAD_POINT, 'd') - LayerParams.dSPOffs = EgtGetInfo( nParamsGrp, KEY_SP_OFFSET_ON_SLICE, 'd') - LayerParams.dCoastingLen = EgtGetInfo( nParamsGrp, KEY_COASTING_LEN, 'd') - LayerParams.dWipeLen = EgtGetInfo( nParamsGrp, KEY_WIPE_LEN, 'd') - LayerParams.vtSlicing = EgtGetInfo( nParamsGrp, KEY_SLICING_DIR, 'v') - LayerParams.dTDiam = EgtGetInfo( nParamsGrp, KEY_TOOL_DIAM, 'd') + LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd') + LayerParams.dLayHeight = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd') + LayerParams.dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd') + LayerParams.bInvert = ( EgtGetInfo( s_nPartId, KEY_PRINT_DIRECTION, 'i') == PRINT_DIRECTION.CW) + LayerParams.nOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'i') + LayerParams.nLinkType = EgtGetInfo( s_nPartId, KEY_LINK_TYPE, 'i') + LayerParams.dLinkParam = EgtGetInfo( s_nPartId, KEY_LINK_PARAM, 'd') + LayerParams.nLeadInType = EgtGetInfo( s_nPartId, KEY_LEAD_IN_TYPE, 'i') + LayerParams.dLeadInTangDist = EgtGetInfo( s_nPartId, KEY_LEAD_IN_TANG_DIST, 'd') + LayerParams.dLeadInOrthoDist = EgtGetInfo( s_nPartId, KEY_LEAD_IN_ORTHO_DIST, 'd') + LayerParams.nLeadOutType = EgtGetInfo( s_nPartId, KEY_LEAD_OUT_TYPE, 'i') + LayerParams.dLeadOutTangDist = EgtGetInfo( s_nPartId, KEY_LEAD_OUT_TANG_DIST, 'd') + LayerParams.dLeadOutOrthoDist = EgtGetInfo( s_nPartId, KEY_LEAD_OUT_ORTHO_DIST, 'd') + LayerParams.dOffsetLP = EgtGetInfo( s_nPartId, KEY_OFFSET_LEAD_POINT, 'd') + LayerParams.dSPOffs = EgtGetInfo( s_nPartId, KEY_SP_OFFSET_ON_SLICE, 'd') + LayerParams.dCoastingLen = EgtGetInfo( s_nPartId, KEY_COASTING_LEN, 'd') + LayerParams.dWipeLen = EgtGetInfo( s_nPartId, KEY_WIPE_LEN, 'd') + LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v') + LayerParams.dTDiam = EgtGetInfo( s_nPartId, KEY_TOOL_DIAM, 'd') -- Parametri setti - LayerParams.nSettiShellsNbr = EgtGetInfo( nParamsGrp, KEY_SETTI_SHELLS_NBR, 'i') - LayerParams.bSettiLink = EgtGetInfo( nParamsGrp, KEY_SETTI_LINK, 'b') - LayerParams.bSettiInvert = EgtGetInfo( nParamsGrp, KEY_SETTI_INVERT, 'b') - LayerParams.bSettiLIInvert = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_IN_INVERT, 'b') - LayerParams.dSettiLILen = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_IN_LEN, 'd') - LayerParams.bSettiLOInvert = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_INVERT, 'b') - LayerParams.dSettiLOLen = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_LEN, 'd') - LayerParams.dSettiLOWipeTang = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_WIPE1, 'd') - LayerParams.dSettiLOWipe = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_WIPE2, 'd') - LayerParams.dSettiLOWipeAng = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_WIPE_DIR, 'd') + LayerParams.nSettiShellsNbr = EgtGetInfo( s_nPartId, KEY_SETTI_SHELLS_NBR, 'i') + LayerParams.bSettiLink = EgtGetInfo( s_nPartId, KEY_SETTI_LINK, 'b') + LayerParams.bSettiInvert = EgtGetInfo( s_nPartId, KEY_SETTI_INVERT, 'b') + LayerParams.bSettiLIInvert = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_IN_INVERT, 'b') + LayerParams.dSettiLILen = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_IN_LEN, 'd') + LayerParams.bSettiLOInvert = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_INVERT, 'b') + LayerParams.dSettiLOLen = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_LEN, 'd') + LayerParams.dSettiLOWipeTang = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_WIPE1, 'd') + LayerParams.dSettiLOWipe = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_WIPE2, 'd') + LayerParams.dSettiLOWipeAng = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_WIPE_DIR, 'd') return LayerParams end @@ -170,53 +172,46 @@ local function AddRetractionOnLastCrv( nTpathGrpId, LayerParams) end -------------------------------------------------------------------- -local function CalcSettiLink( nSettiGrp, nLoopGrp, LayerParams, nTpathGrpId) +local function CalcSettiLink( ptS, ptE, nCurr, nLoopGrp) local nCrvId = EgtGetFirstInGroup( nLoopGrp) - local nCurr = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*') - while nCurr do - local nNext = EgtGetNextName( nCurr, SETTI_CRV .. '*') - if nNext then - - local ptS = EgtEP( nCurr) - local ptE = EgtSP( nNext) - local dParS = EgtCurveParamAtPoint( nCrvId, ptS) - local dParE = EgtCurveParamAtPoint( nCrvId, ptE) + + local dParS = EgtCurveParamAtPoint( nCrvId, ptS) + local dParE = EgtCurveParamAtPoint( nCrvId, ptE) - if dParE then - -- verifico i due percorsi ( dParS->dParE e dParE->dParS) - local nCopyId1 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER) - local nCopyId2 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER) - EgtTrimCurveStartEndAtParam( nCopyId1, dParS, dParE) - EgtTrimCurveStartEndAtParam( nCopyId2, dParE, dParS) - EgtInvertCurve( nCopyId2) - - local dLen1 = EgtCurveLength( nCopyId1) - local dLen2 = EgtCurveLength( nCopyId2) - if dLen1 < dLen2 then - EgtErase( nCopyId2) - EgtSetInfo( nCopyId1, KEY_TYPE, TYPE.SETTO) - else - EgtErase( nCopyId1) - EgtSetInfo( nCopyId2, KEY_TYPE, TYPE.SETTO) - end - end + if dParS and dParE then + -- verifico i due percorsi ( dParS->dParE e dParE->dParS) + local nCopyId1 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER) + local nCopyId2 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER) + EgtTrimCurveStartEndAtParam( nCopyId1, dParS, dParE) + EgtTrimCurveStartEndAtParam( nCopyId2, dParE, dParS) + EgtInvertCurve( nCopyId2) + + local dLen1 = EgtCurveLength( nCopyId1) + local dLen2 = EgtCurveLength( nCopyId2) + if dLen1 < dLen2 then + EgtErase( nCopyId2) + EgtSetInfo( nCopyId1, KEY_TYPE, TYPE.SETTO) + else + EgtErase( nCopyId1) + EgtSetInfo( nCopyId2, KEY_TYPE, TYPE.SETTO) end - -- passo alla successiva - nCurr = nNext end + end -------------------------------------------------------------------- local function AddSettiLeadIn( nCrv, nLoopsGrp, dLeadInLen, bInvert) if dLeadInLen < GEO.EPS_SMALL then return end - -- recupero la curva di offset local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp) - local nCopyOffs = EgtCopyGlob( nCrvOffs, nCrv, GDB_IN.BEFORE) local ptS = EgtSP( nCrv) + local dParS = EgtCurveParamAtPoint( nCrvOffs, ptS) + if not dParS then return end + + local nCopyOffs = EgtCopyGlob( nCrvOffs, nCrv, GDB_IN.BEFORE) EgtChangeClosedCurveStartPoint( nCopyOffs, ptS) if bInvert then EgtInvertCurve( nCopyOffs) @@ -233,7 +228,9 @@ local function AddSettiLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams, bInvert -- recupero la curva di offset local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp) local ptE = EgtEP( nCrv) - local vtE = EgtUV( nCrvOffs, EgtCurveParamAtPoint( nCrvOffs, ptE), 1) + local dParE = EgtCurveParamAtPoint( nCrvOffs, ptE) + if not dParE then return end + local vtE = EgtUV( nCrvOffs, dParE, 1) if bInvert then vtE = - vtE end local nCrvLO local nWipe @@ -259,7 +256,7 @@ local function AddSettiLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams, bInvert if bInvert then EgtInvertCurve( nWipe) end - EgtTrimCurveEndAtLen( nWipe, LayerParams.dSettiLOWipeTang) + EgtTrimCurveEndAtLen( nWipe, LayerParams.dSettiLOWipeTang) -- aggiorno ptE e vtE ptE = EgtEP( nWipe) vtE = EgtEV( nWipe) @@ -289,7 +286,7 @@ end --------------------------------------------------------------------- local function CalcSettiToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ) - + local nSettiGrp = EgtGetFirstNameInGroup( nCrvGrp, SETTI_GRP) -- aggiungo i setti nel toolpath local vEntIds = EgtGetNameInGroup( nSettiGrp, SETTI_CRV .. '*') @@ -301,22 +298,9 @@ local function CalcSettiToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ) -- mi sposto dell'altezza layer EgtMove( nNewEntId, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB) EgtModifyCurveExtrusion( nNewEntId, LayerParams.vtSlicing, GDB_RT.GLOB) - EgtSetColor( nNewEntId, EgtStdColor('GRAY')) - - -- eventuale inversione delle curva - if LayerParams.bSettiLink then - -- se link le curve devono avere direzioni alternate - if ( LayerParams.bSettiInvert and i % 2 == 1) or - ( not LayerParams.bSettiInvert and i % 2 == 0) then - EgtInvertCurve( nNewEntId) - end - else - if LayerParams.bSettiInvert then - EgtInvertCurve( nNewEntId) - end - end - end - + EgtSetColor( nNewEntId, EgtStdColor('GRAY')) + end + -- estraggo i contorni delle superfici di offset local nLoopGrp = EgtGroup( nSettiGrp) local nSrfId = EgtGetFirstNameInGroup( nSettiGrp, LAYER_SRF) @@ -330,29 +314,71 @@ local function CalcSettiToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ) EgtMove( j, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB) end end - end + end - -- collegamenti e leadin/leadout + -- orientamento delle curve + local nInd = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*') + local bInvert = LayerParams.bSettiInvert + while nInd do + local sName = EgtGetName( nInd) + -- considero tutte le passate relative al setto corrente + local vIds = EgtGetNameInGroup( nTpathGrpId, sName) + for i = 1, #vIds do + if ( bInvert and i % 2 == 1) or ( not bInvert and i % 2 == 0) then + EgtInvertCurve( vIds[i]) + end + end + -- passo al gruppo di setti successivo + nInd = EgtGetNextName( vIds[#vIds], SETTI_CRV .. '*') + -- aggiorno bInvert per il gruppo successivo + if LayerParams.bSettiLink and LayerParams.nSettiShellsNbr % 2 == 1 then + bInvert = not bInvert + end + end + + -- collegamenti + local vSettiIds = EgtGetNameInGroup( nTpathGrpId, SETTI_CRV .. '*') + for i = 1, #vSettiIds - 1 do + local sNameCurr = EgtGetName( vSettiIds[i]) + local sNameNext = EgtGetName( vSettiIds[i + 1]) + + local ptS = EgtEP( vSettiIds[i]) + local ptE = EgtSP( vSettiIds[i + 1]) + if LayerParams.bSettiLink then + CalcSettiLink( ptS, ptE, vSettiIds[i], nLoopGrp) + else + -- collego solo le passate dello stesso setto + if sNameCurr == sNameNext then + CalcSettiLink( ptS, ptE, vSettiIds[i], nLoopGrp) + end + end + end + + -- leadin/leadout + local bInvertLI = EgtIf( LayerParams.nSettiShellsNbr == 1, LayerParams.bSettiLIInvert, not LayerParams.bSettiInvert) + local bInvertLO = LayerParams.bSettiLOInvert + if LayerParams.bSettiLink then - -- collego i setti - CalcSettiLink( nSettiGrp, nLoopGrp, LayerParams, nTpathGrpId) -- aggiungo ingresso e uscita solo sul primo e sull'ultimo setto - local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*') - local bInvertLI = EgtIf( LayerParams.nSettiShellsNbr == 1, LayerParams.bSettiLIInvert, not LayerParams.bSettiInvert) + local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*') if nFirst then AddSettiLeadIn( nFirst, nLoopGrp, LayerParams.dSettiLILen, bInvertLI) end local nLast = EgtGetLastNameInGroup( nTpathGrpId, SETTI_CRV .. '*') - local bInvertLO = LayerParams.bSettiLOInvert if LayerParams.nSettiShellsNbr > 1 then bInvertLO = EgtIf( #vEntIds % 2 == 0, not bInvertLI, bInvertLI) end if nLast then AddSettiLeadOut( nLast, nTpathGrpId, nLoopGrp, LayerParams, bInvertLO) end - - elseif LayerParams.nSettiShellsNbr == 1 then - local vNewEntIds = EgtGetNameInGroup( nTpathGrpId, SETTI_CRV .. '*') - for i = 1, #vNewEntIds do - AddSettiLeadIn( vNewEntIds[i], nLoopGrp, LayerParams.dSettiLILen, LayerParams.bSettiLIInvert) - AddSettiLeadOut( vNewEntIds[i], nTpathGrpId, nLoopGrp, LayerParams, LayerParams.bSettiLOInvert) - end + else + local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*') + while nFirst do + local sName = EgtGetName( nFirst) + local vEnt = EgtGetNameInGroup( nTpathGrpId, sName) + AddSettiLeadIn( nFirst, nLoopGrp, LayerParams.dSettiLILen, bInvertLI) + if LayerParams.nSettiShellsNbr > 1 then + bInvertLO = EgtIf( #vEnt % 2 == 0, not bInvertLI, bInvertLI) + end + AddSettiLeadOut( vEnt[#vEnt], nTpathGrpId, nLoopGrp, LayerParams, bInvertLO) + nFirst = EgtGetNextName( vEnt[#vEnt], SETTI_CRV .. '*') + end end end @@ -360,14 +386,16 @@ end --------------------------------------------------------------------- function CalcToolPath.Exec( nPartId) + s_nPartId = nPartId + -- Verifico il pezzo - if not nPartId then + if not s_nPartId then EgtOutBox( 'Error missing part', 'ToolPathCalc') return end -- Recupero i layer da processare - local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*") + local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*") if not vLayIds then EgtOutBox( 'Error missing slices', 'ToolPathCalc') return diff --git a/LuaLibs/RunGcodeGenerate.lua b/LuaLibs/RunGcodeGenerate.lua index e39af72..83ea01e 100644 --- a/LuaLibs/RunGcodeGenerate.lua +++ b/LuaLibs/RunGcodeGenerate.lua @@ -14,15 +14,15 @@ _G.package.loaded.AddManData = nil local AMD = require( 'AddManData') --------------------------------------------------------------------- -local function GetLayerParamsForGcodeGenerate() - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) +local function GetLayerParamsForGcodeGenerate( nPartId) local LayerParams = {} - LayerParams.LinkZup = EgtGetInfo( nParamsGrp, KEY_LINK_ZUP, 'd') + LayerParams.LinkZup = EgtGetInfo( nPartId, KEY_LINK_ZUP, 'd') return LayerParams end --------------------------------------------------------------------- function RunGcodeGenerate.Exec() + -- Recupero il pezzo (per ora primo e unico) local nPartIndex = 1 local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) @@ -39,7 +39,7 @@ function RunGcodeGenerate.Exec() end -- Recupero i parametri relativi al layer - local LayerParams = GetLayerParamsForGcodeGenerate() + local LayerParams = GetLayerParamsForGcodeGenerate( nPartId) -- Ciclo sui layer local vEntId = {} diff --git a/LuaLibs/RunMachiningParamCalc.lua b/LuaLibs/RunMachiningParamCalc.lua index a7dedb4..c0e0daa 100644 --- a/LuaLibs/RunMachiningParamCalc.lua +++ b/LuaLibs/RunMachiningParamCalc.lua @@ -13,52 +13,20 @@ EgtOutLog( ' RunMachiningParamCalc started', 1) local AMD = require( 'AddManData') local CSV = require( 'CSVManager') +--------------------------------------------------------------------- function RunMachiningParamCalc.Exec() - nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL - if nParamsGrp == GDB_ID.NULL then - EgtOutBox( 'Impossible calculating before applying a machining.', 'Error', 'ERROR') - return - end - - local dMachiningFeed = EgtGetInfo( nParamsGrp, KEY_FEED, 'd') - local dSliceStep = EgtGetInfo( nParamsGrp, KEY_SLICE_STEP, 'd') - local dStrand = EgtGetInfo( nParamsGrp, KEY_STRAND, 'd') - local sMaterial = EgtGetInfo( nParamsGrp, KEY_MATERIAL) - + -- Dati recuperati dalla macchina local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini' - local dCoeffX = tonumber( EgtGetStringFromIni( '3dPrinting', 'CoeffX', 0, sMachIni)) - local dCoeffY = tonumber( EgtGetStringFromIni( '3dPrinting', 'CoeffY', 0, sMachIni)) + local dCoeffX = tonumber( EgtGetStringFromIni( SEC_3DPRINTING, KEY_COEFF_X, 0, sMachIni)) + local dCoeffY = tonumber( EgtGetStringFromIni( SEC_3DPRINTING, KEY_COEFF_Y, 0, sMachIni)) + -- File dei risultati local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile()) local sCurrProjectPath = EgtGetCurrFilePath() local sResultFile = EgtChangePathExtension( sCurrProjectPath, '.csv') local bResultFile = EgtExistsFile( sResultFile) - -- calcolo intervallo tempi consentito - local sMaterialPath = sCalcBaseDir .. '\\Materials\\' .. sMaterial .. '.csv' - local MaterialCSV = read_file( sMaterialPath) - local dMinTime = 0 - local dMaxTime = 0 - if not MaterialCSV then - EgtOutBox( 'Material csv file not found.', 'Error', 'ERROR') - return - end - local bSectionFound = false - for nSectionIndex = 1, #MaterialCSV do - local Section = MaterialCSV[nSectionIndex] - if tonumber( Section[1]) == dStrand and tonumber( Section[2]) == dSliceStep then - dMinTime = tonumber(Section[3]) - dMaxTime = tonumber(Section[4]) - bSectionFound = true - break - end - end - if not bSectionFound then - EgtOutBox( 'Section not found in Material csv file.', 'Error', 'ERROR') - return - end - -- carico eventuale file dei risultati local CSVOldResult if bResultFile then @@ -72,6 +40,39 @@ function RunMachiningParamCalc.Exec() local nPartIndex = 1 local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) while nPartId do + -- recupero i parametri di lavorazione del pezzo + local dMachiningFeed = EgtGetInfo( nPartId, KEY_FEED, 'd') + local dSliceStep = EgtGetInfo( nPartId, KEY_SLICE_STEP, 'd') + local dStrand = EgtGetInfo( nPartId, KEY_STRAND, 'd') + local sMaterial = EgtGetInfo( nPartId, KEY_MATERIAL) + -- verifico la definizione dei parametri + if not dMachiningFeed then + EgtOutBox( 'Impossible calculating before applying a machining.', 'Error', 'ERROR') + return + end + -- calcolo intervallo tempi consentito + local sMaterialPath = sCalcBaseDir .. '\\Materials\\' .. sMaterial .. '.csv' + local MaterialCSV = read_file( sMaterialPath) + local dMinTime = 0 + local dMaxTime = 0 + if not MaterialCSV then + EgtOutBox( 'Material csv file not found.', 'Error', 'ERROR') + return + end + local bSectionFound = false + for nSectionIndex = 1, #MaterialCSV do + local Section = MaterialCSV[nSectionIndex] + if tonumber( Section[1]) == dStrand and tonumber( Section[2]) == dSliceStep then + dMinTime = tonumber(Section[3]) + dMaxTime = tonumber(Section[4]) + bSectionFound = true + break + end + end + if not bSectionFound then + EgtOutBox( 'Section not found in Material csv file.', 'Error', 'ERROR') + return + end -- ciclo sui layer local nLayerIndex = 1 local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) @@ -147,9 +148,10 @@ function RunMachiningParamCalc.Exec() nPartIndex = nPartIndex + 1 nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) end - + -- aggiorno palette - local nPaletteType = EgtGetInfo( nParamsGrp, KEY_PALETTE, 'i') + local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) + local nPaletteType = EgtGetInfo( nViewId, KEY_PALETTE, 'i') if nPaletteType == PALETTE_TYPE.RESULTS then local RSP = require( 'RunSlicePalette') RSP.UpdateColors( nPaletteType) diff --git a/LuaLibs/RunPartPositioning.lua b/LuaLibs/RunPartPositioning.lua index 6a73583..83e0236 100644 --- a/LuaLibs/RunPartPositioning.lua +++ b/LuaLibs/RunPartPositioning.lua @@ -1,4 +1,4 @@ --- RunPartPositioning.lua by Egaltech s.r.l. 2022/05/28 +-- RunPartPositioning.lua by Egaltech s.r.l. 2022/06/28 -- Gestione calcolo disposizione e lavorazioni per stampa 3d -- 2022/03/21 Creazione file @@ -22,20 +22,22 @@ function RunPartPositioning.Exec() return end -- Recupero ultimo oggetto selezionato - local nPartId = EgtGetParent(EgtGetParent( EgtGetLastSelectedObj())) - -- verifico sia un pezzo valido + local nSolidId = EgtGetLastSelectedObj() + local nLayerId = EgtGetParent( nSolidId) + local nPartId = EgtGetParent( nLayerId) + -- Verifico sia in un pezzo valido if nPartId then - local nParentId = EgtGetParent( nPartId) - while nParentId ~= GDB_ID.ROOT do - nPartId = nParentId - nParentId = EgtGetParent( nPartId) - end if EgtIsPart( nPartId) then local sName = EgtGetName( nPartId) if sName == TABLE then EgtOutBox( 'No selected part. Please select a part before moving it on the table.', 'Warning', 'WARNING') return end + local sLayer = EgtGetName( nLayerId) + if sLayer == LAY_WALLS then + EgtOutBox( 'No selected solid. Please select a solid before moving it on the table.', 'Warning', 'WARNING') + return + end else EgtOutBox( 'No selected part. Please select a part before moving it on the table.', 'Warning', 'WARNING') return @@ -45,25 +47,30 @@ function RunPartPositioning.Exec() return end - -- gli assegno nome pezzo e layer + -- Assegno nome pezzo e layer if not EgtGetName( nPartId) then local nPartIndex = 1 while EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) do nPartIndex = nPartIndex + 1 end EgtSetName( nPartId, PART .. nPartIndex) - local nLayerId = EgtGetFirstInGroup( nPartId) EgtSetName( nLayerId, ORIGINAL_SOLID) end + -- Recupero o creo layer ausiliario + local nAuxId = EgtGetFirstNameInGroup( nPartId, LAY_AUX) + if not nAuxId then + nAuxId = EgtGroup( nPartId) + EgtSetName( nAuxId, LAY_AUX) + end + -- Rimuovo eventuale gruppo di lavoro local nMchGrpId = EgtGetMachGroupId( '3dPrint') EgtRemoveMachGroup( nMchGrpId or GDB_ID.NULL) - -- Rimuovo eventuale frame - local nFrameId = EgtGetFirstNameInGroup( nPartId, FRAME_PART) + local nFrameId = EgtGetFirstNameInGroup( nAuxId, FRAME_PART) if nFrameId then EgtErase( nFrameId) end - -- rimuovo eventuale start point - local nPtStartId = EgtGetFirstNameInGroup( nPartId, KEY_START_POINT) + -- Rimuovo eventuale start point + local nPtStartId = EgtGetFirstNameInGroup( nAuxId, KEY_START_POINT) if nPtStartId then EgtErase( nPtStartId) end -- Recupero dati tavola (creando gruppo di lavoro temporaneo) @@ -74,14 +81,34 @@ function RunPartPositioning.Exec() dTabY = b3Tab:getDimY() EgtRemoveMachGroup( nQqqId or GDB_ID.NULL) - -- Richiedo coordinata posizionamento pezzo - local b3Part = EgtGetBBoxGlob( nPartId, GDB_BB.EXACT) - local dPosX = b3Tab:getDimX() / 2 - local dPosY = b3Tab:getDimY() / 2 - local Positions = EgtDialogBox( 'Part position on table:', { 'X', EgtNumToString( EgtToUiUnits(dPosX), 1)}, { 'Y', EgtNumToString( EgtToUiUnits(dPosY), 1)}) - if not Positions then return end - dPosX = EgtFromUiUnits( tonumber( Positions[1])) - b3Part:getDimX() / 2 - dPosY = EgtFromUiUnits( tonumber( Positions[2])) - b3Part:getDimY() / 2 + -- Richiedo posizione origine e offset pezzo + local b3Solid = EgtGetBBoxGlob( nSolidId, GDB_BB.EXACT) + local b3Part = EgtGetBBoxGlob( nPartId, GDB_BB.EXACT) + local nRefX = 1 + local nRefY = 1 + local dPosX = b3Tab:getDimX() / 2 - b3Solid:getDimX() / 2 + local dPosY = b3Tab:getDimY() / 2 - b3Solid:getDimY() / 2 + local Positions = EgtDialogBox( 'Part position on table:', { 'Reference', 'CB:Left,Center,Right'}, + { '', 'CB:Bottom,Middle,Top'}, + { 'X', EgtNumToString( EgtToUiUnits( dPosX), 1)}, + { 'Y', EgtNumToString( EgtToUiUnits( dPosY), 1)}) + if not Positions then return end + dPosX = EgtFromUiUnits( tonumber( Positions[3])) + dPosY = EgtFromUiUnits( tonumber( Positions[4])) + if Positions[1] == 'Center' then + nRefX = 2 + dPosX = dPosX - b3Solid:getDimX() / 2 + elseif Positions[1] == 'Right' then + nRefX = 3 + dPosX = dPosX - b3Solid:getDimX() + end + if Positions[2] == 'Middle' then + nRefY = 2 + dPosY = dPosY - b3Solid:getDimY() / 2 + elseif Positions[2] == 'Top' then + nRefY = 3 + dPosY = dPosY - b3Solid:getDimY() + end -- Creo disegno tavola local nTabPart = EgtGetFirstNameInGroup( GDB_ID.ROOT, TABLE) @@ -89,6 +116,7 @@ function RunPartPositioning.Exec() -- Disegno tavola nTabPart = EgtGroup( GDB_ID.ROOT) EgtSetMode( nTabPart, GDB_MD.LOCKED) + EgtSetLevel( nTabPart, GDB_LV.SYSTEM) EgtSetName( nTabPart, TABLE) local nTabLayer = EgtGroup( nTabPart) EgtSetName( nTabLayer, TABLE) @@ -100,41 +128,57 @@ function RunPartPositioning.Exec() EgtSetAlpha( nTabSurfId, 70) end + -- Aggiungo il box del solido + local nBoxId = EgtSurfTmBBox( nAuxId, b3Solid, false, GDB_RT.GLOB) + -- Posiziono il pezzo e aggiorno il suo box - local vtMove = Point3d( dPosX, dPosY, 0) - b3Part:getMin() + local vtMove = Point3d( dPosX, dPosY, 0) - b3Solid:getMin() EgtMove( nPartId, vtMove) + b3Solid:move( vtMove) b3Part:move( vtMove) - - -- Posiziono eventuali setti - local nSettiPart = EgtGetFirstNameInGroup( GDB_ID.ROOT, SETTI_GRP) - if nSettiPart then - EgtMove( nSettiPart, vtMove) + + -- Creo il frame del pezzo + local ptOrig = b3Solid:getMin() + if nRefX == 2 then + ptOrig = ptOrig + b3Solid:getDimX() / 2 * X_AX() + elseif nRefX == 3 then + ptOrig = ptOrig + b3Solid:getDimX() * X_AX() end - - -- Creo il frame del pezzo - local frPart = Frame3d( b3Part:getCenter() - 0.5 * b3Part:getDimZ() * Z_AX(), Z_AX()) - nFrameId = EgtFrame( nPartId, frPart, GDB_RT.GLOB) + if nRefY == 2 then + ptOrig = ptOrig + b3Solid:getDimY() / 2 * Y_AX() + elseif nRefY == 3 then + ptOrig = ptOrig + b3Solid:getDimY() * Y_AX() + end + local frPart = Frame3d( ptOrig, Z_AX()) + nFrameId = EgtFrame( nAuxId, frPart, GDB_RT.GLOB) if nFrameId then EgtSetName( nFrameId, FRAME_PART) EgtSetMode( nFrameId, GDB_MD.LOCKED) end + -- Definisco e posiziono il grezzo sulla tavola EgtAddMachGroup( '3dPrint') EgtSetTable( 'Tab') - local nRawId = EgtAddRawPartWithPart( nPartId, GDB_ID.NULL, 0, Color3d( 128, 128, 128, 30)) + local nRawId = EgtAddRawPartWithPart( nPartId, nBoxId, 0, Color3d( 128, 128, 128, 30)) EgtMoveToCornerRawPart( nRawId, Point3d( dPosX, dPosY, 0), MCH_CR.BL) EgtResetCurrMachGroup() - -- creo lo start point - local ptStart = b3Part:getCenter() - 0.6 * b3Part:getDimY() * Y_AX() - 0.5 * b3Part:getDimZ() * Z_AX() - nPtStartId = EgtPoint( nPartId, ptStart, GDB_RT.GLOB) + -- Creo lo start point + local ptStart = b3Solid:getCenter() - 0.6 * b3Solid:getDimY() * Y_AX() - 0.5 * b3Solid:getDimZ() * Z_AX() + nPtStartId = EgtPoint( nAuxId, ptStart, GDB_RT.GLOB) if nPtStartId then - EgtSetName( nPtStartId, KEY_START_POINT) + EgtSetName( nPtStartId, START_POINT) EgtSetColor( nPtStartId, EgtStdColor( "RED")) end + -- Dichiaro pezzo posizionato + EgtSetInfo( nPartId, KEY_PART_ON_TABLE, 1) + + -- Deseleziono tutto + EgtDeselectAll() + EgtSetView( SCE_VD.ISO_SW, false) EgtZoom( SCE_ZM.ALL) diff --git a/LuaLibs/RunShowManager.lua b/LuaLibs/RunShowManager.lua index 37e95ca..a743f89 100644 --- a/LuaLibs/RunShowManager.lua +++ b/LuaLibs/RunShowManager.lua @@ -1,4 +1,4 @@ --- RunShowManager.lua by Egaltech s.r.l. 2022/04/19 +-- RunShowManager.lua by Egaltech s.r.l. 2022/06/28 -- Gestione visualizzazione per Stampa 3d -- Tabella per definizione modulo @@ -13,14 +13,10 @@ EgtOutLog( ' RunShowManager started', 1) local AMD = require( 'AddManData') local function ShowImportedSolid( nPartId, bShow) - local nLayerId = EgtGetFirstNameInGroup( nPartId, ORIGINAL_SOLID) - local nItemId = EgtGetFirstInGroup( nLayerId) - while nItemId do - if EgtGetType( nItemId) == GDB_TY.SRF_MESH then - EgtSetStatus( nItemId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) - end - nItemId = EgtGetNext(nItemId) - end + local nSolidLayId = EgtGetFirstNameInGroup( nPartId, ORIGINAL_SOLID) + EgtSetStatus( nSolidLayId or GDB_ID.NULL, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) + local nWallsLayId = EgtGetFirstNameInGroup( nPartId, LAY_WALLS) + EgtSetStatus( nWallsLayId or GDB_ID.NULL, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) end function RunShowManager.Exec() diff --git a/LuaLibs/RunSliceAdvancement.lua b/LuaLibs/RunSliceAdvancement.lua index daceaf5..37e0ca5 100644 --- a/LuaLibs/RunSliceAdvancement.lua +++ b/LuaLibs/RunSliceAdvancement.lua @@ -1,4 +1,4 @@ --- RunSliceAdvancement.lua by Egaltech s.r.l. 2022/04/05 +-- RunSliceAdvancement.lua by Egaltech s.r.l. 2022/06/28 -- Gestione visualizzazione per Stampa 3d -- Tabella per definizione modulo @@ -12,6 +12,7 @@ EgtOutLog( ' RunSliceAdvancement started', 1) -- Costanti generali local AMD = require( 'AddManData') +--------------------------------------------------------------------- local function ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList) for Index = 1, #SegmentList do EgtSetStatus( SegmentList[Index], EgtIf( Index <= nLastActiveIndex, GDB_ST.ON, GDB_ST.OFF)) @@ -23,14 +24,15 @@ local function ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideLis end end +--------------------------------------------------------------------- function RunSliceAdvancement.Exec() -- verifico ci sia almeno uno slice - local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. 1) - if not nPartId then + local nFirstPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. 1) + if not nFirstPartId then EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR') return else - local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. 1) or EgtGetFirstNameInGroup( nPartId, "__" .. SLICE_LAYER .. 1) + local nLayerId = EgtGetFirstNameInGroup( nFirstPartId, SLICE_LAYER .. 1) or EgtGetFirstNameInGroup( nFirstPartId, "__" .. SLICE_LAYER .. 1) if not nLayerId then EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR') return @@ -68,13 +70,12 @@ function RunSliceAdvancement.Exec() nAdvancementType = SLICE_ADV_TYPE.INFILL end nPercentage = tonumber( ViewValues[2]) - - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL - local nPrintOrder = EgtGetInfo( nParamsGrp, KEY_PRINT_ORDER, 'i') + -- ciclo sui pezzi local nPartIndex = 1 local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) while nPartId do + local nPrintOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i') -- ciclo sui layer per dis/attivare il resto local nLayerIndex = 1 local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) or EgtGetFirstNameInGroup( nPartId, "__" .. SLICE_LAYER .. nLayerIndex) @@ -87,7 +88,8 @@ function RunSliceAdvancement.Exec() local nOldType = TYPE.OUTER_SHELL while nSurfId do local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i') - if not nType or ( nType ~= TYPE.OUTER_SHELL and nType ~= TYPE.INNER_SHELL and nType ~= TYPE.INFILL) then nType = nOldType end + if not nType or nType == TYPE.LINK or nType == TYPE.COASTING or nType == TYPE.WIPE then nType = nOldType end + if nType == TYPE.SETTO then nType = TYPE.INFILL end nOldType = nType table.insert( ShellList[nType], nSurfId) nSurfId = EgtGetNext( nSurfId) @@ -96,14 +98,20 @@ function RunSliceAdvancement.Exec() local SegmentList local ToHideList if nAdvancementType == SLICE_ADV_TYPE.ALL then - nSegmentQty = #ShellList[1] + #ShellList[2] + nSegmentQty = #ShellList[1] + #ShellList[2] + #ShellList[3] if nPrintOrder == PRINT_ORDER.EXT_INT_INF then SegmentList = ShellList[1] for i = 1, #ShellList[2] do SegmentList[#SegmentList + 1] = ShellList[2][i] end + for i = 1, #ShellList[3] do + SegmentList[#SegmentList + 1] = ShellList[3][i] + end else - SegmentList = ShellList[2] + SegmentList = ShellList[3] + for i = 1, #ShellList[2] do + SegmentList[#SegmentList + 1] = ShellList[2][i] + end for i = 1, #ShellList[1] do SegmentList[#SegmentList + 1] = ShellList[1][i] end diff --git a/LuaLibs/RunSlicePalette.lua b/LuaLibs/RunSlicePalette.lua index 9cedc93..a0f9be4 100644 --- a/LuaLibs/RunSlicePalette.lua +++ b/LuaLibs/RunSlicePalette.lua @@ -12,6 +12,7 @@ EgtOutLog( ' RunSlicePalette started', 1) -- Costanti generali local AMD = require( 'AddManData') +--------------------------------------------------------------------- function RunSlicePalette.UpdateColors( nPaletteType) -- ciclo sui pezzi local nPartIndex = 1 @@ -30,17 +31,23 @@ function RunSlicePalette.UpdateColors( nPaletteType) local Color = EgtStdColor( 'GRAY') if nPaletteType == PALETTE_TYPE.IN_OUT then local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i') - if not nType or ( nType ~= 1 and nType ~= 2 and nType ~= 3 and nType ~= 4) then nType = nOldType end + if not nType or nType < TYPE.OUTER_SHELL or nType > TYPE.SETTO then nType = nOldType end nOldType = nType -- scelta del colore if nType == TYPE.OUTER_SHELL then Color = EgtStdColor( 'TEAL') elseif nType == TYPE.INNER_SHELL then Color = EgtStdColor( 'ORANGE') - elseif nType == TYPE.LINK then - Color = EgtStdColor( 'GRAY') elseif nType == TYPE.INFILL then Color = EgtStdColor( 'YELLOW') + elseif nType == TYPE.LINK then + Color = EgtStdColor( 'GRAY') + elseif nType == TYPE.COASTING then + Color = EgtStdColor( 'BLUE') + elseif nType == TYPE.WIPE then + Color = EgtStdColor( 'LIME') + elseif nType == TYPE.SETTO then + Color = EgtStdColor( 'OLIVE') end else local nResult = EgtGetInfo( nLayerId, KEY_RESULT, 'i') @@ -68,10 +75,12 @@ function RunSlicePalette.UpdateColors( nPaletteType) end +--------------------------------------------------------------------- function RunSlicePalette.Exec() - - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL - local nOldPaletteType = EgtGetInfo( nParamsGrp, KEY_PALETTE, 'i') + + local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS) or GDB_ID.NULL + + local nOldPaletteType = EgtGetInfo( nViewId, KEY_PALETTE, 'i') local sCombo = EgtIf( not nOldPaletteType or nOldPaletteType == 1, 'CB:*In/Out,Results', 'CB:In/Out,*Results') ViewValues = EgtDialogBox( 'Slice Palette', { 'Type', sCombo}) if not ViewValues or #ViewValues < 1 then return end @@ -82,8 +91,8 @@ function RunSlicePalette.Exec() elseif ViewValues[1] == 'Results' then nPaletteType = PALETTE_TYPE.RESULTS end - EgtSetInfo( nParamsGrp, KEY_PALETTE, nPaletteType) - + EgtSetInfo( nViewId, KEY_PALETTE, nPaletteType) + RunSlicePalette.UpdateColors( nPaletteType) end diff --git a/LuaLibs/RunSlicing.lua b/LuaLibs/RunSlicing.lua index 7656a69..f340acd 100644 --- a/LuaLibs/RunSlicing.lua +++ b/LuaLibs/RunSlicing.lua @@ -31,135 +31,132 @@ end --------------------------------------------------------------------- local function LoadParams( sFile, nPartId) - -- creo gruppo dove salvare parametri - local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL - if nParamsGrp == GDB_ID.NULL then - nParamsGrp = EgtGroup( GDB_ID.ROOT) - EgtRelocate( nParamsGrp, GDB_ID.ROOT, GDB_IN.FIRST_SON) - EgtSetName( nParamsGrp, PARAMS_GRP) - EgtSetLevel( nParamsGrp, GDB_LV.SYSTEM) - end - EgtSetInfo( nParamsGrp, INFO_PARTD_ID, nPartId) - - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SLICING_45, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SLICE_STEP, '1.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_STRAND, '6.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SHELLS_NBR, '3') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_OFFSET_SLICE, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SLICING_45, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SLICE_STEP, '1.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_STRAND, '6.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SHELLS_NBR, '3') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_OFFSET_SLICE, '0.0') - local sStrandOrder = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_ORDER, 'InToOut', sFile) + local sStrandOrder = EgtGetStringFromIni( SEC_DEFAULT, KEY_PRINT_ORDER, 'InToOut', sFile) if sStrandOrder == 'OutToIn' then - EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.EXT_INT_INF) + EgtSetInfo( nPartId, KEY_PRINT_ORDER, PRINT_ORDER.EXT_INT_INF) else -- 'InToOut' - EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.INF_INT_EXT) + EgtSetInfo( nPartId, KEY_PRINT_ORDER, PRINT_ORDER.INF_INT_EXT) end - local sStrandDirection = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_DIRECTION, 'CCW', sFile) + local sStrandDirection = EgtGetStringFromIni( SEC_DEFAULT, KEY_PRINT_DIRECTION, 'CCW', sFile) if sStrandDirection == 'CW' then - EgtSetInfo( nParamsGrp, KEY_PRINT_DIRECTION, PRINT_DIRECTION.CW) + EgtSetInfo( nPartId, KEY_PRINT_DIRECTION, PRINT_DIRECTION.CW) else -- 'CCW' - EgtSetInfo( nParamsGrp, KEY_PRINT_DIRECTION, PRINT_DIRECTION.CCW) + EgtSetInfo( nPartId, KEY_PRINT_DIRECTION, PRINT_DIRECTION.CCW) end - local sLinkType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LINK_TYPE, 'None', sFile) + local sLinkType = EgtGetStringFromIni( SEC_DEFAULT, KEY_LINK_TYPE, 'None', sFile) if sLinkType == 'None' then - EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.NONE) + EgtSetInfo( nPartId, KEY_LINK_TYPE, LINK_TYPE.NONE) elseif sLinkType == 'BiArc' then - EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.BIARC) + EgtSetInfo( nPartId, KEY_LINK_TYPE, LINK_TYPE.BIARC) else -- 'Linear' - EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.LINEAR) + EgtSetInfo( nPartId, KEY_LINK_TYPE, LINK_TYPE.LINEAR) end - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SP_OFFSET_ON_SLICE, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_PARAM, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_ZUP, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_FLOOR_NBR, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SPEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_EXT_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_INT_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_INFILL_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_IN_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_OUT_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SUPPORT_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_G0_FEED, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_MATERIAL, '') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_TOOL_DIAM, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SP_OFFSET_ON_SLICE, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LINK_PARAM, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LINK_ZUP, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_FLOOR_NBR, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SPEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_EXT_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_INT_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_INFILL_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LEAD_IN_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LEAD_OUT_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SUPPORT_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_G0_FEED, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_MATERIAL, '') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_TOOL_DIAM, '0.0') - local sLeadInType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LEAD_IN_TYPE, 'None', sFile) + local sLeadInType = EgtGetStringFromIni( SEC_DEFAULT, KEY_LEAD_IN_TYPE, 'None', sFile) if sLeadInType == 'Linear' then - EgtSetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, LEAD_TYPE.LINEAR) + EgtSetInfo( nPartId, KEY_LEAD_IN_TYPE, LEAD_TYPE.LINEAR) elseif sLeadInType == 'Arc' then - EgtSetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, LEAD_TYPE.ARC) + EgtSetInfo( nPartId, KEY_LEAD_IN_TYPE, LEAD_TYPE.ARC) else -- 'None' - EgtSetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, LEAD_TYPE.NONE) + EgtSetInfo( nPartId, KEY_LEAD_IN_TYPE, LEAD_TYPE.NONE) end - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_IN_TANG_DIST, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_IN_ORTHO_DIST, '0.0') - local sLeadOutType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LEAD_OUT_TYPE, 'None', sFile) + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LEAD_IN_TANG_DIST, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LEAD_IN_ORTHO_DIST, '0.0') + local sLeadOutType = EgtGetStringFromIni( SEC_DEFAULT, KEY_LEAD_OUT_TYPE, 'None', sFile) if sLeadOutType == 'Linear' then - EgtSetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, LEAD_TYPE.LINEAR) + EgtSetInfo( nPartId, KEY_LEAD_OUT_TYPE, LEAD_TYPE.LINEAR) elseif sLeadOutType == 'Arc' then - EgtSetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, LEAD_TYPE.ARC) + EgtSetInfo( nPartId, KEY_LEAD_OUT_TYPE, LEAD_TYPE.ARC) else -- 'None' - EgtSetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, LEAD_TYPE.NONE) + EgtSetInfo( nPartId, KEY_LEAD_OUT_TYPE, LEAD_TYPE.NONE) end - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_OUT_TANG_DIST, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LEAD_OUT_ORTHO_DIST, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_OFFSET_LEAD_POINT, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LEAD_OUT_TANG_DIST, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_LEAD_OUT_ORTHO_DIST, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_OFFSET_LEAD_POINT, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_COASTING_LEN, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_COASTING_FEED, '20000.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_WIPE_LEN, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_WIPE_FEEDPU, '0.9') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_COASTING_LEN, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_COASTING_FEED, '20000.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_WIPE_LEN, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_WIPE_FEEDPU, '0.9') -- recupero il punto iniziale e lo salvo tra i parametri local ptStart = Point3d( 0, 0, 0) - local nPtStartId = EgtGetFirstNameInGroup( nPartId, KEY_START_POINT) + local nAuxId = EgtGetFirstNameInGroup( nPartId, LAY_AUX) + local nPtStartId = EgtGetFirstNameInGroup( nAuxId or GDB_ID.NULL, START_POINT) if nPtStartId then ptStart = EgtSP( nPtStartId, GDB_ID.ROOT) end - EgtSetInfo( nParamsGrp, KEY_START_POINT, ptStart) + EgtSetInfo( nPartId, KEY_START_POINT, ptStart) -- parametri per setti - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_OVERLAP, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_SHELLS_NBR, '1') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_INVERT, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LINK, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LEAD_IN_INVERT, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LEAD_IN_LEN, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LEAD_OUT_INVERT, '0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LEAD_OUT_LEN, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LEAD_OUT_WIPE1, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LEAD_OUT_WIPE2, '0.0') - SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SETTI_LEAD_OUT_WIPE_DIR, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_OVERLAP, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_SHELLS_NBR, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_INVERT, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LINK, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LEAD_IN_INVERT, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LEAD_IN_LEN, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LEAD_OUT_INVERT, '0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LEAD_OUT_LEN, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LEAD_OUT_WIPE1, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LEAD_OUT_WIPE2, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SETTI_LEAD_OUT_WIPE_DIR, '0.0') end - +--------------------------------------------------------------------- function RunSlicing.Exec() - -- Verifico che il progetto sia stato salvato + + -- Verifico che il progetto abbia un nome local sCurrProjectPath = EgtGetCurrFilePath() if not sCurrProjectPath or sCurrProjectPath == '' then - EgtOutBox( 'Save project before calculating slicing!', 'Warning', 'WARNING') + EgtOutBox( 'Save project before calculating slices!', 'Warning', 'WARNING') return end - -- Recupero ultimo oggetto selezionato - local nStmId = EgtGetLastSelectedObj() - -- Verifico sia una superficie - if not nStmId or EgtGetType( nStmId) ~= GDB_TY.SRF_MESH then - EgtOutText( "L'oggetto selezionato non è una superficie") - EgtPause( 1000) - return + + -- Recupero il primo pezzo già posizionato in macchina + local nPartId = EgtGetFirstPart() + while nPartId do + if EgtGetInfo( nPartId, KEY_PART_ON_TABLE, 'b') then + break + end + nPartId = EgtGetNextPart( nPartId) end - local nPartId = EgtGetParent( EgtGetParent( nStmId)) - - -- Verifico che il pezzo sia stato posizionato in macchina - local sPartName = EgtGetName( nPartId) - if not sPartName or sPartName == '' or sPartName:sub( 1, 4) ~= PART then + if not nPartId then EgtOutBox( 'Position part on the machine table before slicing it!', 'Error', 'ERROR') return end + local nSolidLayId = EgtGetFirstNameInGroup( nPartId, ORIGINAL_SOLID) + local nStmId = EgtGetFirstInGroup( nSolidLayId or GDB_ID.NULL) + if not nStmId or EgtGetType( nStmId) ~= GDB_TY.SRF_MESH then + EgtOutBox( "Part without surface!", 'Warning', 'WARNING') + return + end + local nWallsLayId = EgtGetFirstNameInGroup( nPartId, LAY_WALLS) + -- Scelta del file dei parametri local sLastParamFile = EgtGetStringFromIni( '3dPrinting', 'ParamFile', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting\\Machinings\\aaa.ini', EgtGetIniFile()) local sDir = EgtSplitPath( sLastParamFile) @@ -195,7 +192,8 @@ function RunSlicing.Exec() -- Calcolo dei solidi degli strand a partire dai percorsi di lavoro CSOLIDS.Exec( nPartId) - EgtSetStatus( nStmId, GDB_ST.OFF) + EgtSetStatus( nSolidLayId, GDB_ST.OFF) + EgtSetStatus( nWallsLayId or GDB_ID.NULL, GDB_ST.OFF) EgtDraw() -- Aggiorno impostazioni di visibilita' per ShowManager