3dPrinting :
- riorganizzazione - correzioni nel collegamento e nel riordino dei setti.
This commit is contained in:
+44
-56
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user