- Correzioni e migliorie su pezzo di esempio

- Gestione avvio script solo quando eseguiti precedenti
- Correzioni varie
This commit is contained in:
Emmanuele Sassi
2022-04-13 15:35:05 +02:00
parent 4cdade69e4
commit 261aec363d
12 changed files with 417 additions and 239 deletions
+44 -20
View File
@@ -1,4 +1,4 @@
-- AddManData.lua by Egaltech s.r.l. 2022/03/28
-- AddManData.lua by Egaltech s.r.l. 2022/04/12
-- Raccolta costanti generali per Stampa 3d
-- Tabella per definizione modulo
@@ -34,13 +34,14 @@ KEY_SLICE_STEP = "StrandH"
KEY_SHELLS_NBR = "StrandCount"
KEY_STRAND = "StrandW"
KEY_OFFSET_SLICE ="Offset"
KEY_START_POINT = "StartingPoint"
KEY_START_POINT = "StartPoint"
KEY_PRINT_ORDER = "StrandOrder"
KEY_PRINT_DIRECTION = "Direction"
KEY_TYPE = "Type"
KEY_LINK_TYPE = "LinkType"
KEY_LINK_PARAM = "LinkParam"
KEY_LINK_DIST="LinkDist"
KEY_LINK_ZUP = "LinkZup"
KEY_FLOOR_NBR = "FloorCount"
KEY_SPEED = "Speed"
KEY_FEED = "Feed"
@@ -63,32 +64,30 @@ KEY_LEAD_OUT_ORTHO_DIST= "LeadOutOrthoDist"
KEY_OFFSET_LEAD_POINT = "OffsetLeadPoint"
TYPE = {
OUTER_SHELL = 0,
INNER_SHELL = 1,
INFILL = 2,
LINK = 3,
OUTER_SHELL = 1,
INNER_SHELL = 2,
INFILL = 3,
LINK = 4,
}
PRINT_ORDER = {
INT_EXT_INF = 0,
EXT_INT_INF = 1,
INF_EXT_INT = 2,
INF_INT_EXT = 3,
INF_INT_EXT = 2,
}
PRINT_DIRECTION = {
CCW = 0,
CW = 1,
CCW = 1,
CW = 2,
}
LINK_TYPE = {
LINEAR = 0,
BIARC = 1,
LINEAR = 1,
BIARC = 2,
}
LEAD_TYPE = {
LINEAR = 0,
ARC = 1,
LINEAR = 1,
ARC = 2,
}
@@ -105,16 +104,41 @@ RESULT_READ_PROG = 'ResultReadProg'
KEY_RESULT = 'Result'
KEY_PALETTE = 'Palette'
KEY_LAYER_VIEW = 'LayerView'
KEY_SHELL_VIEW = 'ShellView'
KEY_INNER_NUM = 'InnerNum'
KEY_SEL_LAYER = 'SelLayer'
KEY_SLICE_ADV_MODE = 'SliceAdvMode'
KEY_SLICE_ADV_PERC = 'SliceAdvPerc'
RESULT = {
OK = 0,
KO_MINUS = 1,
KO_PLUS = 2,
OK = 1,
KO_MINUS = 2,
KO_PLUS = 3,
}
PALETTE_TYPE = {
IN_OUT = 0,
RESULTS = 1,
IN_OUT = 1,
RESULTS = 2,
}
LAYER_VIEW_TYPE = {
ALL = 1,
TILL_SEL = 2,
ONLY_SEL = 3,
}
SHELL_VIEW_TYPE = {
ALL = 1,
OUTER = 2,
INNER = 3,
INFILL = 4,
}
SLICE_ADV_TYPE = {
ALL = 1,
OUTER = 2,
INNER = 3,
INFILL = 4,
}
---------------------------------------------------------------------
return AddManData
+26 -9
View File
@@ -1,4 +1,4 @@
-- CalcPaths.lua by Egaltech s.r.l. 2022/03/30
-- CalcPaths.lua by Egaltech s.r.l. 2022/04/13
-- Calcolo percorsi di lavoro per Stampa 3d
-- Tabella per definizione modulo
@@ -56,7 +56,7 @@ local function GetPathsFromSurf( nSrfId, sName, nType, nGrpId, nLayId, dStrand)
-- scelta start point
local ptStart = GetLayerStartPoint( nLayId)
EgtChangeClosedCurveStartPoint( nCrvId + nInd, ptStart)
EgtChangeClosedCurveStartPoint( nCrvId + nInd, ptStart, GDB_RT.GLOB)
end
end
end
@@ -123,19 +123,36 @@ function CalcPaths.Exec( nPartId)
if nSrf then
-- esterno
local nSrfId = EgtCopyGlob( nSrf, nCrvGrpId)
local dOffs = 0.5 * LayerParams.dStrand - LayerParams.dOffs
EgtSurfFrOffset( nSrfId, - dOffs)
-- estraggo i contorni (pareti esterne)
GetPathsFromSurf( nSrfId, SHELL_CRV..'0', TYPE.OUTER_SHELL, nGrpId, nLayId, LayerParams.dStrand)
local dOffs = 0.5 * LayerParams.dStrand - LayerParams.dOffs
local bOk = ( EgtSurfFrOffset( nSrfId, -dOffs) and EgtSurfFrChunkCount( nSrfId) > 0)
if not bOk then
EgtErase( nSrfId)
nSrfId = EgtCopyGlob( nSrf, nCrvGrpId)
bOk = ( EgtSurfFrOffset( nSrfId, -dOffs + 0.05) and EgtSurfFrChunkCount( nSrfId) > 0)
end
-- se offset riuscito, estraggo i contorni (pareti esterne)
if bOk then
GetPathsFromSurf( nSrfId, SHELL_CRV..'0', TYPE.OUTER_SHELL, nGrpId, nLayId, LayerParams.dStrand)
else
EgtOutLog( 'Error on ExtOffset (layer '..tostring( nIdx)..') - CalcPaths')
end
EgtErase( nSrfId)
-- calcolo pareti interne
for nInd2 = 1, LayerParams.nShellsNbr - 1 do
-- offset della superficie originale
local nSrfId = EgtCopy( nSrf, nGrpId)
if EgtSurfFrOffset( nSrfId, - dOffs - nInd2 * LayerParams.dStrand) then
-- estraggo i contorni ( pareti interne)
GetPathsFromSurf( nSrfId, SHELL_CRV..tostring( nInd2), TYPE.INNER_SHELL, nGrpId, nLayId, LayerParams.dStrand)
local bOk = ( EgtSurfFrOffset( nSrfId, - dOffs - nInd2 * LayerParams.dStrand) and EgtSurfFrChunkCount( nSrfId) > 0)
if not bOk then
EgtErase( nSrfId)
nSrfId = EgtCopyGlob( nSrf, nCrvGrpId)
bOk = ( EgtSurfFrOffset( nSrfId, -dOffs + 0.05 - nInd2 * LayerParams.dStrand) and EgtSurfFrChunkCount( nSrfId) > 0)
end
-- se offset riuscito, estraggo i contorni ( pareti interne)
if bOk then
GetPathsFromSurf( nSrfId, SHELL_CRV..tostring( nInd2), TYPE.INNER_SHELL, nGrpId, nLayId, LayerParams.dStrand)
else
EgtOutLog( 'Error on IntOffset (layer '..tostring( nIdx)..') - CalcPaths')
end
EgtErase( nSrfId)
end
+50 -20
View File
@@ -21,8 +21,9 @@ end
---------------------------------------------------------------------
function CalcSlices.Exec( nPartId, nStmId)
local dTol = 0.05
local dTol = 0.1
-- recuper il box della superficie
local b3Box = EgtGetBBoxRef( nStmId, GDB_BB.STANDARD, EgtGetGridFrame())
if not b3Box or b3Box:isEmpty() then
@@ -32,8 +33,10 @@ function CalcSlices.Exec( nPartId, nStmId)
end
-- Parametri di slicing
local dZmin = b3Box:getMin():getZ() + 0.1 --0.1 * dStep
local dZmax = b3Box:getMax():getZ() - 0.1 -- 0.1 * dStep
local dZmin = b3Box:getMin():getZ()
local dZmax = b3Box:getMax():getZ()
--dZmin = 1030
--dZmax = 1031
-- se slicing già presente lo cancello
local nOldSliceId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .."*") or GDB_ID.NULL
@@ -42,8 +45,6 @@ function CalcSlices.Exec( nPartId, nStmId)
nOldSliceId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .."*") or GDB_ID.NULL
end
EgtStartCounter()
-- Eseguo slicing
local dPosZ = dZmin
local nLayCnt = 1
@@ -54,7 +55,9 @@ function CalcSlices.Exec( nPartId, nStmId)
EgtSetInfo( nLayId, KEY_SLICE_NBR, nLayCnt)
-- calcolo intersezione
nNewId, nPntCnt, nCrvCnt, nSrfCnt = EgtPlaneSurfTmInters( Point3d( 0, 0, dPosZ), Z_AX(), nStmId, nLayId, GDB_RT.GRID)
local dDeltaZ = EgtIf( nLayCnt == 1, 0.2, 0)
--dDeltaZ = 0
nNewId, nPntCnt, nCrvCnt, nSrfCnt = EgtPlaneSurfTmInters( Point3d( 0, 0, dPosZ + dDeltaZ), Z_AX(), nStmId, nLayId, GDB_RT.GLOB)
-- verifico se ricalcolare con piccolo spostamento
local bRecalc = not nNewId or ( nSrfCnt ~= 0)
if not bRecalc then
@@ -68,24 +71,51 @@ function CalcSlices.Exec( nPartId, nStmId)
-- se richiesto, eseguo ricalcolo
if bRecalc then
local vtN = EgtSurfTmFacetNormVersor( nNewId or 0 + nPntCnt or 0 + nCrvCnt or 0, 0)
local dDeltaZ = EgtIf( vtN and vtN:getZ() < 0, 0.005, - 0.005)
dDeltaZ = dDeltaZ + EgtIf( vtN and vtN:getZ() < 0, 0.01, - 0.01)
EgtEmptyGroup( nLayId)
nNewId, nPntCnt, nCrvCnt, nSrfCnt = EgtPlaneSurfTmInters( Point3d( 0, 0, dPosZ + dDeltaZ), Z_AX(), nStmId, nLayId, GDB_RT.GRID)
nNewId, nPntCnt, nCrvCnt, nSrfCnt = EgtPlaneSurfTmInters( Point3d( 0, 0, dPosZ + dDeltaZ), Z_AX(), nStmId, nLayId, GDB_RT.GLOB)
end
-- salvo i risultati nel layer
if nNewId then
-- verifico presenza contorni aperti
local bAllClosed = true
for Id = nNewId + nPntCnt, nNewId + nPntCnt + nCrvCnt - 1 do
if not EgtCurveIsClosed( Id) then
bAllClosed = false
break
-- elimino eventuali punti e superfici
for i = 1, nPntCnt do
EgtErase( nNewId + i - 1)
end
nNewId = nNewId + nPntCnt
nPntCnt = 0
for i = 1, nSrfCnt do
EgtErase( nNewId + nPntCnt + nCrvCnt + i - 1)
end
nSrfCnt = 0
-- correggo eventuali spostamenti in Z
if abs( dDeltaZ) > GEO.EPS_SMALL then
for nId = nNewId, nNewId + nPntCnt + nCrvCnt + nSrfCnt - 1 do
EgtMove( nId, Vector3d( 0, 0, -dDeltaZ))
end
end
-- salvo
EgtSetName( nLayId, EgtIf( bAllClosed, '', '**') .. SLICE_LAYER .. EgtNumToString( nLayCnt))
-- verifico presenza contorni aperti
local vOpenId = {}
for Id = nNewId + nPntCnt, nNewId + nPntCnt + nCrvCnt - 1 do
if not EgtCurveIsClosed( Id) then
table.insert( vOpenId, Id)
end
end
-- provo a concatenare i contorni aperti
if #vOpenId > 1 then
local nFirstId, nCnt = EgtCurveCompoByReorder( nLayId, vOpenId, Point3d(0,0,0), true, GDB_RT.LOC, dTol)
if nFirstId and nCnt == 1 then
nCrvCnt = nCrvCnt - #vOpenId + 1
vOpenId = {}
end
end
-- imposto dati ausiliari
EgtSetName( nLayId, EgtIf( #vOpenId == 0, '', '**') .. SLICE_LAYER .. EgtNumToString( nLayCnt))
EgtSetInfo( nLayId, 'PntCnt', nPntCnt)
EgtSetInfo( nLayId, 'CrvCnt', nCrvCnt)
EgtSetInfo( nLayId, 'SrfCnt', nSrfCnt)
@@ -100,9 +130,9 @@ function CalcSlices.Exec( nPartId, nStmId)
EgtApproxCurve( nNewId + nPntCnt + nInd, GDB_CA.ARCS, dTol)
end
local nSurfFR = EgtSurfFlatRegion( nLayId, vCrvs)
for nInd = 1, #vCrvs do
EgtErase( vCrvs[nInd])
end
--for nInd = 1, #vCrvs do
-- EgtErase( vCrvs[nInd])
--end
if nSurfFR then
-- analizzo i singoli chunks
+94 -111
View File
@@ -1,4 +1,4 @@
-- CalcSolids.lua by Egaltech s.r.l. 2022/03/30
-- CalcSolids.lua by Egaltech s.r.l. 2022/04/13
-- Calcolo percorsi di lavoro per Stampa 3d
-- Tabella per definizione modulo
@@ -23,18 +23,41 @@ local function GetLayerParamsForSolidCalc()
return LayerParams
end
---------------------------------------------------------------------
local function CalcSectionParams( dStrand, dH)
local dL = dStrand
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')
dOffs = 0
if dOffs and dOffs > 0 then
-- calcolo area originale
local dArea = ( dL * dH) - ( dLm * dHm)
local dLM = ( dArea / dH) - ( dLm / 6)
if dOffs / 2 <= ( dL - dLM) then
dL = dL - dOffs / 2
dLm = dL / 10
dHm = (( dL * dH) - dArea) / dLm
else
EgtOutLog( 'Strand section not calculated on area. Too much overlap?')
end
end
local dD1 = 0.5 * dL - dLm
local dD2 = 0.5 * dL - dD1
local dD3 = dHm
local dD4 = dH - 2 * dD3
return dD1, dD2, dD3, dD4
end
---------------------------------------------------------------------
local function CreateSection( ptS, vtDir, dStrand, dH, nSolidGrp)
ptS = ptS - dH * Z_AX()
local dD1 = 0.5 * dStrand - dStrand / 10
local dD2 = 0.5 * dStrand - dD1
local dD3 = dH / 6
local dD4 = dH - 2 * dD3
vtDir:rotate( Z_AX(), 90)
local ptA = ptS + dD1 * vtDir
local dD1, dD2, dD3, dD4 = CalcSectionParams( dStrand, dH)
local ptA = ptS - dH * Z_AX() + dD1 * vtDir
local ptB = ptA + dD2 * vtDir + dD3 * Z_AX()
local ptC = ptB + dD4 * Z_AX()
local ptD = ptA + dH * Z_AX()
@@ -48,138 +71,90 @@ local function CreateSection( ptS, vtDir, dStrand, dH, nSolidGrp)
return nId
end
---------------------------------------------------------------------
local function CreateHalfSection( ptS, vtDir, dStrand, dH, nSolidGrp)
local dD1, dD2, dD3, dD4 = CalcSectionParams( dStrand, dH)
local ptA = ptS - dH * Z_AX() + dD1 * vtDir
local ptB = ptA + dD2 * vtDir + dD3 * Z_AX()
local ptC = ptB + dD4 * Z_AX()
local ptD = ptA + dH * Z_AX()
local nId = EgtCurveCompoFromPoints( nSolidGrp, { ptS - dH * Z_AX(), ptA, ptB, ptC, ptD, ptS})
return nId
end
--------------------------------------------------------------------
local function CloseSolid( nCrvId, nSrfId, nSolidGrp, LayerParams)
local ptS = EgtSP( nCrvId)
local vtS = EgtSV( nCrvId)
local nSectS = CreateSection( ptS, vtS, LayerParams.dStrand, LayerParams.dLayHeight, nSolidGrp)
local nSrfS = EgtSurfTmByRevolve( nSolidGrp, nSectS, ptS, Z_AX(), false, 0.1)
EgtCutSurfTmPlane( nSrfS, ptS, EgtSV( nCrvId), true)
vtS:rotate( Z_AX(), 90)
local nSectS = CreateHalfSection( ptS, vtS, LayerParams.dStrand, LayerParams.dLayHeight, nSolidGrp)
local nSrfS = EgtSurfTmByScrewing( nSolidGrp, nSectS, ptS, Z_AX(), 180, 0, false, 0.1)
EgtErase( nSectS)
local ptE = EgtEP( nCrvId)
local vtE = EgtEV( nCrvId)
local nSectE = CreateSection( ptE, vtE, LayerParams.dStrand, LayerParams.dLayHeight, nSolidGrp)
local nSrfE = EgtSurfTmByRevolve( nSolidGrp, nSectE, ptE, Z_AX(), false, 0.1)
EgtCutSurfTmPlane( nSrfE, ptE, - EgtEV( nCrvId), true)
EgtErase( nSectS)
vtE:rotate( Z_AX(), -90)
local nSectE = CreateHalfSection( ptE, vtE, LayerParams.dStrand, LayerParams.dLayHeight, nSolidGrp)
local nSrfE = EgtSurfTmByScrewing( nSolidGrp, nSectE, ptE, Z_AX(), 180, 0, false, 0.1)
EgtErase( nSectE)
return EgtSurfTmBySewing( nSolidGrp, { nSrfId, nSrfS, nSrfE})
end
---------------------------------------------------------------------
local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nParts)
local nCopyId = EgtCopyGlob( nCrvId, nSolidGrp)
local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams)
-- scelta del colore
local nType = EgtGetInfo( nCrvId, KEY_TYPE, 'i')
local Color = EgtStdColor( 'GRAY')
if nType == TYPE.OUTER_SHELL then
Color = EgtStdColor( 'ORANGE')
elseif nType == TYPE.INNER_SHELL or nType == TYPE.LINK 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')
end
local nDefaultParts = EgtIf( nType == TYPE.LINK, 1, 10)
if not nParts then
nParts = nDefaultParts
elseif nParts == nDefaultParts then
nParts = nDefaultParts + 1
end
local nParts = EgtIf( nType == TYPE.LINK, 1, 10)
local nCopyId = EgtCopyGlob( nCrvId, nSolidGrp)
local nId = EgtSplitCurve( nCopyId, nParts)
local vIdStm = {}
for nInd = 0, nParts - 1 do
if nType == TYPE.INFILL and nInd == 0 then
EgtInvertCurve( nId + nInd)
end
local ptS = EgtSP( nId + nInd)
local vtS = EgtSV( nId + nInd)
vtS:rotate( Z_AX(), 90)
local nSectId = CreateSection( ptS, vtS, LayerParams.dStrand, LayerParams.dLayHeight, nSolidGrp)
EgtInvertCurve( nSectId)
local nSrfId = EgtSurfTmSwept( nSolidGrp, nSectId, nId + nInd, false, 0.1)
EgtErase( nSectId)
if nSrfId then
table.insert( vIdStm, nSrfId)
nSrfId = CloseSolid( nId + nInd, nSrfId, nSolidGrp, LayerParams)
else
if nParts < 100 then
-- cancello quando appena fatto e provo a spezzare la curva in un diverso numero di parti
EgtErase( nSectId)
for nInd3 = 0, nParts - 1 do
EgtErase( nId + nInd3)
end
for nInd3 = 0, nInd - 1 do
local nId2 = EgtGetLastInGroup( nSolidGrp)
EgtErase( nId2)
end
local nNewParts = EgtIf( nParts == nDefaultParts, 5, nParts + 1)
CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nNewParts)
return
else
EgtOutBox( 'CalcSolid error', '')
EgtErase( nSectId)
for nInd3 = 0, nParts - 1 do
EgtErase( nId + nInd3)
end
for nInd3 = 0, nInd - 1 do
local nId2 = EgtGetLastInGroup( nSolidGrp)
EgtErase( nId2)
end
return
end
EgtErase( nSectId)
for nInd3 = 0, nParts - 1 do
EgtErase( nId + nInd3)
end
for nInd3 = 0, nInd - 1 do
local nId2 = EgtGetLastInGroup( nSolidGrp)
EgtErase( nId2)
end
EgtOutBox( 'CalcSolid error', '')
return
end
EgtErase( nSectId)
EgtSetColor( nSrfId, Color)
EgtSetInfo( nSrfId, KEY_TYPE, nType)
EgtErase( nId + nInd)
end
-- se ho creato troppe parts unisco le superfici per ridurne il numero
local vCrvIds = {}
if nParts > nDefaultParts then
local nGroups1 = nParts % nDefaultParts
local nGroups2 = nDefaultParts - nGroups1
local nElements1 = ceil( nParts / nDefaultParts)
local nElements2 = floor( nParts / nDefaultParts)
local nCnt = 0
local nInd = 1
while nInd <= #vIdStm do
local nElements = EgtIf( nCnt < nGroups1, nElements1, nElements2)
local vIds = { vIdStm[nInd]}
local nFirstId = nId + nInd - 1
for nId2 = 1, nElements - 1 do
nInd = nInd + 1
table.insert( vIds, vIdStm[nInd])
EgtAddCurveCompoCurve( nFirstId, nId + nInd - 1)
end
local nNewSrf = EgtSurfTmByTriangles( nSolidGrp, vIds)
nInd = nInd + 1
nCnt = nCnt + 1
table.insert( vCrvIds, nFirstId)
vIdStm[nCnt] = nNewSrf
end
nParts = nDefaultParts
else
for nInd = 0, nParts - 1 do
table.insert( vCrvIds, nId + nInd)
end
end
for nInd = 1, nParts do
vIdStm[nInd] = CloseSolid( vCrvIds[nInd], vIdStm[nInd], nSolidGrp, LayerParams)
EgtSetColor( vIdStm[nInd], Color)
EgtSetInfo( vIdStm[nInd], KEY_TYPE, nType)
EgtErase( vCrvIds[nInd])
end
end
---------------------------------------------------------------------
@@ -206,7 +181,7 @@ function CalcSolids.Exec( nPartId)
return
end
-- recupero il gruppo dei soldi
-- recupero il gruppo dei solidi
local nSolidGrpId = EgtGetFirstNameInGroup( nCrvGrpId, SOLID_GRP) or GDB_ID.NULL
if nSolidGrpId == GDB_ID.NULL then
nSolidGrpId = EgtGroup( nCrvGrpId)
@@ -215,7 +190,7 @@ function CalcSolids.Exec( nPartId)
EgtEmptyGroup( nSolidGrpId)
end
-- scorro le curve
-- scorro le curve del percorso utensile
local nId = EgtGetFirstInGroup( nTPathGrpId)
while nId do
CreateSolidFromCurve( nId, nSolidGrpId, LayerParams)
@@ -227,12 +202,20 @@ function CalcSolids.Exec( nPartId)
for nInd = 1, #vExtCrvs do
EgtSetStatus( vExtCrvs[nInd], GDB_ST.OFF)
end
-- processo gli eventi
if ( nIdx % 20) == 0 then
EgtDraw()
if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then
return
end
end
--passo al gruppo di contorni successivo
nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL
end
EgtDraw()
if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then
EgtDraw()
return
end
end
+14 -13
View File
@@ -1,4 +1,4 @@
-- CalcToolPath.lua by Egaltech s.r.l. 2022/03/29
-- CalcToolPath.lua by Egaltech s.r.l. 2022/04/13
-- Calcolo percorsi di lavoro per Stampa 3d
-- Tabella per definizione modulo
@@ -40,7 +40,7 @@ local function AddLeadIn( nCrvId, LayerParams, nGrpId)
local vtTang = EgtSV( nCrvId)
local vtOrtho = Vector3d( vtTang)
local dAng = 90
if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INT_EXT_INF) or
if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INF_INT_EXT) or
( not LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.EXT_INT_INF) then
dAng = - 90
end
@@ -65,31 +65,30 @@ end
--------------------------------------------------------------------
local function AddLeadOut( nCrvId, LayerParams, nGrpId)
local ptS = EgtEP( nCrvId)
local vtTang = EgtEV( nCrvId)
local vtOrtho = Vector3d( vtTang)
local dAng = - 90
if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INT_EXT_INF) or
if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INF_INT_EXT) or
( not LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.EXT_INT_INF) then
dAng = 90
end
vtOrtho:rotate( Z_AX(), dAng)
local ptE = ptS + LayerParams.LeadOutTangDist * vtTang + LayerParams.LeadOutOrthoDist * vtOrtho
local nLeadOutCrv = GDB_ID.NULL
if LayerParams.LeadOutType == LEAD_TYPE.LINEAR then
nLeadOutCrv = EgtLine( nGrpId, ptS, ptE)
elseif LayerParams.LeadOutType == LEAD_TYPE.ARC then
local _, _, dAngIni = SphericalFromVector( vtTang)
nLeadOutCrv = EgtArc2PD( nGrpId, ptS, ptE, dAngIni)
end
EgtRelocate( nLeadOutCrv, nGrpId, GDB_IN.LAST_SON)
EgtSetInfo( nLeadOutCrv, KEY_TYPE, TYPE.LINK)
end
@@ -136,14 +135,14 @@ function CalcToolPath.Exec( nPartId)
-- copio le curve, le ordino, le oriento e le muovo in Z
local nEntId = EgtGetFirstInGroup( nPathGrpId)
while nEntId do
local nNewEntId = EgtCopyGlob( nEntId, nTpathGrpId, EgtIf( LayerParams.nOrder == PRINT_ORDER.INT_EXT_INF, GDB_IN.FIRST_SON, GDB_IN.LAST_SON))
local nNewEntId = EgtCopyGlob( nEntId, nTpathGrpId, EgtIf( LayerParams.nOrder == PRINT_ORDER.INF_INT_EXT, GDB_IN.FIRST_SON, GDB_IN.LAST_SON))
EgtMove( nNewEntId, Vector3d( 0, 0, LayerParams.dLayHeight), GDB_RT.GLOB)
if LayerParams.bInvert then
EgtInvertCurve( nNewEntId)
end
nEntId = EgtGetNext( nEntId)
end
-- aggiungo gli opportuni raccordi
local nPrevId = EgtGetFirstInGroup( nTpathGrpId)
local nCurrId = EgtGetNext( nPrevId or GDB_ID.NULL)
@@ -153,10 +152,12 @@ function CalcToolPath.Exec( nPartId)
EgtTrimCurveEndAtLen( nPrevId, EgtCurveLength( nPrevId) - k * LayerParams.LinkDist)
k = k + 1
EgtChangeClosedCurveStartPoint( nCurrId, EgtEP( nPrevId))
if LayerParams.LinkType == LINK_TYPE.LINEAR then
nLinkId = EgtLine( nTpathGrpId, EgtEP( nPrevId), EgtEP( nCurrId))
else
EgtTrimCurveEndAtLen( nPrevId, EgtCurveLength( nPrevId) - LayerParams.LinkParam / 2)
EgtTrimCurveStartAtLen( nCurrId, LayerParams.LinkParam / 2)
nLinkId = EgtLine( nTpathGrpId, EgtEP( nPrevId), EgtSP( nCurrId))
else
EgtTrimCurveEndAtLen( nPrevId, EgtCurveLength( nPrevId) - LayerParams.LinkParam / 2)
EgtTrimCurveStartAtLen( nCurrId, LayerParams.LinkParam / 2)
local _, _, dAngIni = SphericalFromVector( EgtEV( nPrevId))
+30 -5
View File
@@ -13,6 +13,15 @@ EgtOutLog( ' RunGcodeGenerate started', 1)
_G.package.loaded.AddManData = nil
local AMD = require( 'AddManData')
---------------------------------------------------------------------
local function GetLayerParamsForGcodeGenerate()
local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP)
local LayerParams = {}
LayerParams.LinkZup = EgtGetInfo( nParamsGrp, KEY_LINK_ZUP, 'd')
return LayerParams
end
---------------------------------------------------------------------
function RunGcodeGenerate.Exec()
-- Recupero il pezzo (per ora primo e unico)
local nPartIndex = 1
@@ -25,10 +34,13 @@ function RunGcodeGenerate.Exec()
-- Recupero i layer da processare
local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*")
if not vLayIds then
EgtOutBox( 'Error missing slices', 'ToolPathCalc')
EgtOutBox( 'Error missing slices', 'GcodeGenerate')
return
end
-- Recupero i parametri relativi al layer
local LayerParams = GetLayerParamsForGcodeGenerate()
-- Ciclo sui layer
local vEntId = {}
for nIdx = 1, #vLayIds do
@@ -38,7 +50,7 @@ function RunGcodeGenerate.Exec()
-- recupero il gruppo dei percorsi utensile
local nTpathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP)
if not nTpathGrpId then
EgtOutBox( 'Error missing toolpaths', 'ToolPathCalc')
EgtOutBox( 'Error missing toolpaths', 'GcodeGenerate')
return
end
-- recupero le entità nel gruppo
@@ -52,15 +64,28 @@ function RunGcodeGenerate.Exec()
end
end
if #vEntId == 0 then
EgtOutBox( 'Error missing entities', 'ToolPathCalc')
EgtOutBox( 'Error missing entities', 'GcodeGenerate')
return
end
-- Aggiungo la lavorazione
EgtSetCurrMachGroup()
EgtAddMachining( 'Extrusion 1', 'ExtrusionA')
local nMchId = EgtAddMachining( 'Extrusion 1', 'ExtrusionA')
if not nMchId then
EgtOutBox( 'Error adding Extrusion', 'GcodeGenerate')
return
end
EgtSetMachiningGeometry( vEntId)
EgtApplyMachining()
local sNotes = EgtAdjustNotes( '', 'LinkZup', LayerParams.LinkZup)
EgtSetMachiningParam( MCH_MP.USERNOTES, sNotes)
if not EgtApplyMachining() then
EgtOutBox( 'Error applying Extrusion', 'GcodeGenerate')
return
end
end
---------------------------------------------------------------------
+2 -3
View File
@@ -1,4 +1,4 @@
-- RunMachiningParamCalc.lua by Egaltech s.r.l. 2022/04/05
-- RunMachiningParamCalc.lua by Egaltech s.r.l. 2022/04/13
-- Gestione visualizzazione per Stampa 3d
-- Tabella per definizione modulo
@@ -31,8 +31,7 @@ function RunMachiningParamCalc.Exec()
local dCoeffY = tonumber( EgtGetStringFromIni( DEFAULT_SECTION, KEY_COEFF_Y, 0, sMachiningPath))
local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile())
local sCurrProjectPath = EgtGetCurrFilePath()
local _, sCurrProjectName = EgtSplitPath( sCurrProjectPath)
local sResultFile = sCalcBaseDir .. '\\Results\\' .. sCurrProjectName .. '.csv'
local sResultFile = EgtChangePathExtension( sCurrProjectPath, '.csv')
local bResultFile = EgtExistsFile( sResultFile)
-- calcolo intervallo tempi consentito
+2 -2
View File
@@ -29,8 +29,8 @@ function RunShowManager.Exec()
local bImportedSolid = false
local bOuterCrv = false
local bPath = false
local bSolid = true
local bToolPath = true
local bSolid = false
local bToolPath = false
if not nViewId then
nViewId = EgtGroup( GDB_ID.ROOT)
+56 -17
View File
@@ -24,23 +24,51 @@ local function ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideLis
end
function RunSliceAdvancement.Exec()
ViewValues = EgtDialogBox( 'Slice advancement', { 'Type', 'CB:*All,Only Outer,Only Inner,Only Infill'},
{ 'Percentage (0-100)', '30'})
-- verifico ci sia almeno uno slice
local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. 1)
if not nPartId then
EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR')
return
else
local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. 1)
if not nLayerId then
EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR')
return
end
end
local nAdvancementType = 1 -- 1 = All, 2 = Only Outer, 3 = Only Inner, 4 = Only Infill
local nPercentage = 30
-- leggo ultimi valori
local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS)
if nViewId then
nAdvancementType = EgtGetInfo( nViewId, KEY_SLICE_ADV_MODE, 'i') or SLICE_ADV_TYPE.ALL
nPercentage = EgtGetInfo( nViewId, KEY_SLICE_ADV_PERC, 'i') or 30
end
local sAdvTypeCombo = ''
if nAdvancementType == SLICE_ADV_TYPE.ALL then
sAdvTypeCombo = 'CB:*All,Only Outer,Only Inner,Only Infill'
elseif nAdvancementType == SLICE_ADV_TYPE.OUTER then
sAdvTypeCombo = 'CB:All,*Only Outer,Only Inner,Only Infill'
elseif nAdvancementType == SLICE_ADV_TYPE.INNER then
sAdvTypeCombo = 'CB:All,Only Outer,*Only Inner,Only Infill'
elseif nAdvancementType == SLICE_ADV_TYPE.INFILL then
sAdvTypeCombo = 'CB:All,Only Outer,Only Inner,*Only Infill'
end
ViewValues = EgtDialogBox( 'Slice advancement', { 'Type', sAdvTypeCombo},
{ 'Percentage (0-100)', tostring( nPercentage)})
if not ViewValues or #ViewValues < 1 then return end
local nAdvancementType = 1 -- 1 = All, 2 = Only Outer, 3 = Only Inner, 4 = Only Infill
if ViewValues[1] == 'All' then
nAdvancementType = 1
nAdvancementType = SLICE_ADV_TYPE.ALL
elseif ViewValues[1] == 'Only Outer' then
nAdvancementType = 2
nAdvancementType = SLICE_ADV_TYPE.OUTER
elseif ViewValues[1] == 'Only Inner' then
nAdvancementType = 3
nAdvancementType = SLICE_ADV_TYPE.INNER
elseif ViewValues[1] == 'Only Infill' then
nAdvancementType = 4
nAdvancementType = SLICE_ADV_TYPE.INFILL
end
local nPercentage = tonumber( ViewValues[2])
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
@@ -54,20 +82,20 @@ function RunSliceAdvancement.Exec()
local nCrvId = EgtGetFirstGroupInGroup( nLayerId)
while nCrvId do
local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP)
local ShellList = { {}, {}}
local ShellList = { {}, {}, {}}
local nSurfId = EgtGetFirstInGroup( nSolidId)
local nOldType = 0
local nOldType = TYPE.OUTER_SHELL
while nSurfId do
local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i')
if not nType or ( nType ~= 0 and nType ~= 1) then nType = nOldType end
if not nType or ( nType ~= TYPE.OUTER_SHELL and nType ~= TYPE.INNER_SHELL and nType ~= TYPE.INFILL) then nType = nOldType end
nOldType = nType
table.insert( ShellList[nType + 1], nSurfId)
table.insert( ShellList[nType], nSurfId)
nSurfId = EgtGetNext( nSurfId)
end
local nSegmentQty = 1
local SegmentList
local ToHideList
if nAdvancementType == 1 then
if nAdvancementType == SLICE_ADV_TYPE.ALL then
nSegmentQty = #ShellList[1] + #ShellList[2]
if nPrintOrder == PRINT_ORDER.EXT_INT_INF then
SegmentList = ShellList[1]
@@ -80,14 +108,21 @@ function RunSliceAdvancement.Exec()
SegmentList[#SegmentList + 1] = ShellList[1][i]
end
end
elseif nAdvancementType == 2 then
elseif nAdvancementType == SLICE_ADV_TYPE.OUTER then
nSegmentQty = #ShellList[1]
SegmentList = ShellList[1]
ToHideList = ShellList[2]
elseif nAdvancementType == 3 then
elseif nAdvancementType == SLICE_ADV_TYPE.INNER then
nSegmentQty = #ShellList[2]
SegmentList = ShellList[2]
ToHideList = ShellList[1]
elseif nAdvancementType == SLICE_ADV_TYPE.INFILL then
nSegmentQty = 1
SegmentList = {}
ToHideList = ShellList[1]
for i = 1, #ShellList[2] do
ToHideList[#ToHideList + 1] = ShellList[2][i]
end
end
local nLastActiveIndex = ceil( nSegmentQty * nPercentage / 100)
ManageSegmentVisibility( SegmentList, nLastActiveIndex, ToHideList)
@@ -100,6 +135,10 @@ function RunSliceAdvancement.Exec()
nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
end
-- riporto impostazioni in gruppo apposito
EgtSetInfo( nViewId, KEY_SLICE_ADV_MODE, nAdvancementType)
EgtSetInfo( nViewId, KEY_SLICE_ADV_PERC, nPercentage)
EgtDraw()
end
+6 -4
View File
@@ -30,13 +30,15 @@ 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 ~= 0 and nType ~= 1) then nType = nOldType end
if not nType or ( nType ~= 1 and nType ~= 2 and nType ~= 3 and nType ~= 4) then nType = nOldType end
nOldType = nType
-- scelta del colore
if nType == TYPE.OUTER_SHELL then
Color = EgtStdColor( 'ORANGE')
elseif nType == TYPE.INNER_SHELL or nType == TYPE.LINK 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')
end
@@ -70,7 +72,7 @@ function RunSlicePalette.Exec()
local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP) or GDB_ID.NULL
local nOldPaletteType = EgtGetInfo( nParamsGrp, KEY_PALETTE, 'i')
local sCombo = EgtIf( not nOldPaletteType or nOldPaletteType == 0, 'CB:*In/Out,Results', 'CB:In/Out,*Results')
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
+34 -10
View File
@@ -1,4 +1,4 @@
-- RunSlicing.lua by Egaltech s.r.l. 2022/03/30
-- RunSlicing.lua by Egaltech s.r.l. 2022/04/12
-- Calcoli prima fase per Stampa 3d
-- Tabella per definizione modulo
@@ -51,11 +51,11 @@ local function LoadParams( sFile, nPartId)
local ptStart = EgtGetVal( 'P='..sStartPoint..',0', 'P', 'p')
EgtSetInfo( nParamsGrp, KEY_START_POINT, ptStart)
local sStrandOrder = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_ORDER, 'in', sFile)
if sStrandOrder == 'out' then
local sStrandOrder = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_ORDER, 'InToOut', sFile)
if sStrandOrder == 'OutToIn' then
EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.EXT_INT_INF)
else -- sStrandOrder == 'in'
EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.INT_EXT_INF)
else -- 'InToOut'
EgtSetInfo( nParamsGrp, KEY_PRINT_ORDER, PRINT_ORDER.INF_INT_EXT)
end
local sStrandDirection = EgtGetStringFromIni( DEFAULT_SECTION, KEY_PRINT_DIRECTION, 'CCW', sFile)
@@ -65,14 +65,15 @@ local function LoadParams( sFile, nPartId)
EgtSetInfo( nParamsGrp, KEY_PRINT_DIRECTION, PRINT_DIRECTION.CCW)
end
local sLinkType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LINK_TYPE, 'straight', sFile)
if sLinkType == 'sPath' then
local sLinkType = EgtGetStringFromIni( DEFAULT_SECTION, KEY_LINK_TYPE, 'BiArc', sFile)
if sLinkType == 'BiArc' then
EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.BIARC)
else -- sStrandOrder == 'sPath'
else -- 'Linear'
EgtSetInfo( nParamsGrp, KEY_LINK_TYPE, LINK_TYPE.LINEAR)
end
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_PARAM, '0')
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_ZUP, '0')
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_LINK_DIST, '0.0')
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_FLOOR_NBR, '0')
SetParamInfo( sFile, nParamsGrp, DEFAULT_SECTION, KEY_SPEED, '0.0')
@@ -107,6 +108,12 @@ end
function RunSlicing.Exec()
-- Verifico che il progetto sia stato salvato
local sCurrProjectPath = EgtGetCurrFilePath()
if not sCurrProjectPath or sCurrProjectPath == '' then
EgtOutBox( 'Save project before calculating slicing!', 'Warning', 'WARNING')
return
end
-- Recupero ultimo oggetto selezionato
local nStmId = EgtGetLastSelectedObj()
-- Verifico sia una superficie
@@ -116,7 +123,13 @@ function RunSlicing.Exec()
return
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
EgtOutBox( 'Position part on the machine table before slicing it!', 'Error', 'ERROR')
return
end
-- Scelta del file dei parametri
local sLastParamFile = EgtGetStringFromIni( '3dPrinting', 'ParamFile', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting\\Machinings\\aaa.ini', EgtGetIniFile())
local sDir = EgtSplitPath( sLastParamFile)
@@ -129,7 +142,6 @@ function RunSlicing.Exec()
-- Elimino eventuale precedente file dei risultati
local sCalcBaseDir = EgtGetStringFromIni( '3dPrinting', 'BaseDir', 'C:\\ProgramData\\Egaltech\\EgtCam5\\3dPrinting', EgtGetIniFile())
local sCurrProjectPath = EgtGetCurrFilePath()
local _, sCurrProjectName = EgtSplitPath( sCurrProjectPath)
local sResultFile = sCalcBaseDir .. '\\Results\\' .. sCurrProjectName .. '.csv'
EgtEraseFile( sResultFile)
@@ -154,6 +166,18 @@ function RunSlicing.Exec()
EgtSetStatus( nStmId, GDB_ST.OFF)
EgtDraw()
-- Aggiorno impostazioni di visibilita' per ShowManager
local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS)
if not nViewId then
nViewId = EgtGroup( GDB_ID.ROOT)
EgtSetName( nViewId, VIEWPARAMS)
end
EgtSetInfo( nViewId, IMPORTED_SOLID, false)
EgtSetInfo( nViewId, OUTER_CRV, false)
EgtSetInfo( nViewId, PATH_GRP, false)
EgtSetInfo( nViewId, SOLID_GRP, true)
EgtSetInfo( nViewId, TOOLPATH_GRP, true)
end
---------------------------------------------------------------------
+59 -25
View File
@@ -13,31 +13,56 @@ EgtOutLog( ' RunViewManager started', 1)
local AMD = require( 'AddManData')
function RunViewManager.Exec()
ViewValues = EgtDialogBox( 'Slicing visibility manager', { 'Visibility Mode', 'CB:*All,Till Selected,Only Selected'},
{ 'Shell type', 'CB:*All,Outer,Inner,Infill'},
{ 'Inner Number', '1'})
local nVisibilityMode = LAYER_VIEW_TYPE.ALL -- 1 = All, 2 = Till Selected, 3 = Only Selected
local nShellType = SHELL_VIEW_TYPE.ALL -- 1 = All, 2 = Outer, 3 = Inner, 4 = infill
local nOldSelLayerId = GDB_ID.NULL
-- leggo ultimi valori
local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS)
if nViewId then
nVisibilityMode = EgtGetInfo( nViewId, KEY_LAYER_VIEW, 'i')
nShellType = EgtGetInfo( nViewId, KEY_SHELL_VIEW, 'i')
nOldSelLayerId = EgtGetInfo( nViewId, KEY_SEL_LAYER, 'i') or GDB_ID.NULL
end
local sLayerViewCombo = ''
if nVisibilityMode == LAYER_VIEW_TYPE.TILL_SEL then
sLayerViewCombo = 'CB:All,*Till Selected,Only Selected'
elseif nVisibilityMode == LAYER_VIEW_TYPE.ONLY_SEL then
sLayerViewCombo = 'CB:All,Till Selected,*Only Selected'
else
sLayerViewCombo = 'CB:*All,Till Selected,Only Selected'
end
local sShellViewCombo = ''
if nShellType == SHELL_VIEW_TYPE.OUTER then
sShellViewCombo = 'CB:All,*Outer,Inner,Infill'
elseif nShellType == SHELL_VIEW_TYPE.INNER then
sShellViewCombo = 'CB:All,Outer,*Inner,Infill'
elseif nShellType == SHELL_VIEW_TYPE.INFILL then
sShellViewCombo = 'CB:All,Outer,Inner,*Infill'
else
sShellViewCombo = 'CB:*All,Outer,Inner,Infill'
end
ViewValues = EgtDialogBox( 'Slicing visibility manager', { 'Visibility Mode', sLayerViewCombo},
{ 'Shell type', sShellViewCombo})
if not ViewValues or #ViewValues < 2 then return end
local nVisibilityMode = 1 -- 1 = All, 2 = Till Selected, 3 = Only Selected
if ViewValues[1] == 'All' then
nVisibilityMode = 1
nVisibilityMode = LAYER_VIEW_TYPE.ALL
elseif ViewValues[1] == 'Till Selected' then
nVisibilityMode = 2
nVisibilityMode = LAYER_VIEW_TYPE.TILL_SEL
elseif ViewValues[1] == 'Only Selected' then
nVisibilityMode = 3
nVisibilityMode = LAYER_VIEW_TYPE.ONLY_SEL
end
local nShellType = 0 -- 1 = All, 2 = Outer, 3 = Inner, 4 = infill
if ViewValues[2] == 'All' then
nShellType = 1
nShellType = SHELL_VIEW_TYPE.ALL
elseif ViewValues[2] == 'Outer' then
nShellType = 2
nShellType = SHELL_VIEW_TYPE.OUTER
elseif ViewValues[2] == 'Inner' then
nShellType = 3
nShellType = SHELL_VIEW_TYPE.INNER
elseif ViewValues[2] == 'Infill' then
nShellType = 4
nShellType = SHELL_VIEW_TYPE.INFILL
end
local nInnerNumber = tonumber(ViewValues[3])
-- Recupero ultimo layer selezionato
-- verifico sia un pezzo valido
@@ -53,12 +78,16 @@ function RunViewManager.Exec()
nSelLayerId = EgtGetParent( nSelLayerId)
end
if not bFound then
if nVisibilityMode ~= 1 then
EgtOutBox( 'No selected element!', 'Warning', 'WARNING')
return
if nOldSelLayerId and nOldSelLayerId ~= GDB_ID.NULL then
nSelLayerId = nOldSelLayerId
else
nSelLayerId = GDB_ID.NULL
sSelLayerName = ''
if nVisibilityMode ~= LAYER_VIEW_TYPE.ALL then
EgtOutBox( 'No selected element!', 'Warning', 'WARNING')
return
else
nSelLayerId = GDB_ID.NULL
sSelLayerName = ''
end
end
end
@@ -70,11 +99,11 @@ function RunViewManager.Exec()
local nLayerIndex = 1
local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex)
while nLayerId do
if nVisibilityMode == 1 then -- All
if nVisibilityMode == LAYER_VIEW_TYPE.ALL then
EgtSetStatus( nLayerId, GDB_ST.ON)
elseif nVisibilityMode == 2 then -- Till Selected
elseif nVisibilityMode == LAYER_VIEW_TYPE.TILL_SEL then
EgtSetStatus( nLayerId, EgtIf( nLayerId <= nSelLayerId, GDB_ST.ON, GDB_ST.OFF))
elseif nVisibilityMode == 3 then -- Only Selected
elseif nVisibilityMode == LAYER_VIEW_TYPE.ONLY_SEL then
EgtSetStatus( nLayerId, EgtIf( nLayerId == nSelLayerId, GDB_ST.ON, GDB_ST.OFF))
end
local nCrvId = EgtGetFirstGroupInGroup( nLayerId)
@@ -83,21 +112,21 @@ function RunViewManager.Exec()
local nShellId = EgtGetFirstInGroup( nPathId)
while nShellId do
local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i')
EgtSetStatus( nShellId, EgtIf( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber), GDB_ST.ON, GDB_ST.OFF))
EgtSetStatus( nShellId, EgtIf( nShellType == SHELL_VIEW_TYPE.ALL or ( nShellType == SHELL_VIEW_TYPE.OUTER and nType == TYPE.OUTER_SHELL) or (nShellType == SHELL_VIEW_TYPE.INNER and nType == TYPE.INNER_SHELL), GDB_ST.ON, GDB_ST.OFF))
nShellId = EgtGetNext( nShellId)
end
local nSolidId = EgtGetFirstNameInGroup( nCrvId, SOLID_GRP)
local nSurfId = EgtGetFirstInGroup( nSolidId)
while nSurfId do
local nType = EgtGetInfo( nSurfId, KEY_TYPE, 'i')
EgtSetStatus( nSurfId, EgtIf( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber), GDB_ST.ON, GDB_ST.OFF))
EgtSetStatus( nSurfId, EgtIf( nShellType == SHELL_VIEW_TYPE.ALL or ( nShellType == SHELL_VIEW_TYPE.OUTER and nType == TYPE.OUTER_SHELL) or (nShellType == SHELL_VIEW_TYPE.INNER and nType == TYPE.INNER_SHELL), GDB_ST.ON, GDB_ST.OFF))
nSurfId = EgtGetNext( nSurfId)
end
local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP)
nShellId = EgtGetFirstInGroup( nToolPathId)
while nShellId do
local nType = EgtGetInfo( nShellId, KEY_TYPE, 'i')
EgtSetStatus( nShellId, EgtIf( nType and ( nShellType == 1 or ( nShellType == 2 and nType == 0) or (nShellType == 3 and nType == nInnerNumber)), GDB_ST.ON, GDB_ST.OFF))
EgtSetStatus( nShellId, EgtIf( nType and ( nShellType == SHELL_VIEW_TYPE.ALL or ( nShellType == SHELL_VIEW_TYPE.OUTER and nType == TYPE.OUTER_SHELL) or (nShellType == SHELL_VIEW_TYPE.INNER and nType == TYPE.INNER_SHELL)), GDB_ST.ON, GDB_ST.OFF))
nShellId = EgtGetNext( nShellId)
end
nCrvId = EgtGetNext( nCrvId)
@@ -109,6 +138,11 @@ function RunViewManager.Exec()
nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
end
-- riporto impostazioni in gruppo apposito
EgtSetInfo( nViewId, KEY_LAYER_VIEW, nVisibilityMode)
EgtSetInfo( nViewId, KEY_SHELL_VIEW, nShellType)
EgtSetInfo( nViewId, KEY_SEL_LAYER, nSelLayerId)
EgtDraw()
end