3dPrinting :

- riorganizzazione
- correzioni nel collegamento e nel riordino dei setti.
This commit is contained in:
SaraP
2022-06-29 11:34:46 +02:00
parent b9f1922969
commit 37dd22aa3e
13 changed files with 487 additions and 399 deletions
+44 -56
View File
@@ -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