3dPrinting :

- slicing a 90°.
This commit is contained in:
SaraP
2022-10-20 17:23:48 +02:00
parent 217bb4f26e
commit d875e31491
6 changed files with 113 additions and 76 deletions
+25 -27
View File
@@ -444,26 +444,17 @@ end
--------------------------------------------------------------------
-- Funzione che sistema le intersezioni fra costolature nel caso di 2 passate
local function AdjustRibsOffsetForIntersection2Shells( nCrv1, nCrv2, LayerParams, nOffsGrp, nOrigGrp)
-- recupero gli offset originali delle due curve
local vOffsOrig1 = EgtGetNameInGroup( nOrigGrp, EgtGetName( nCrv1))
local vOffsOrig2 = EgtGetNameInGroup( nOrigGrp, EgtGetName( nCrv2))
local function AdjustRibsOffsetForIntersection2Shells( nCrv1, nCrv2, LayerParams, nOffsGrp)
-- costruisco le superfici da usare per trim
local nOverlap = EgtGetInfo( nCrv1, KEY_RIBS_OVERLAP, 'i')
local dOffs = LayerParams.dStrand / 2 + ( 1 - nOverlap / 100) * LayerParams.dStrand
local nRect1 = EgtRectangle3P( nOffsGrp, EgtSP( vOffsOrig1[1]), EgtEP( vOffsOrig1[2]), EgtEP( vOffsOrig1[1]))
local nSrf1 = EgtSurfFlatRegion( nOffsGrp, {nRect1})
local vtN1 = EgtSurfFrNormVersor( nSrf1, GDB_ID.ROOT)
local nSrf1 = EgtSurfFrFatCurve( nOffsGrp, nCrv1, LayerParams.dStrand / 2, false)
local vtN1 = EgtSurfFrNormVersor( nSrf1, GDB_ID.ROOT)
if LayerParams.vtSlicing * vtN1 < 0 then
EgtInvertSurf( nSrf1)
end
local nRect2 = EgtRectangle3P( nOffsGrp, EgtSP( vOffsOrig2[1]), EgtEP( vOffsOrig2[2]), EgtEP( vOffsOrig2[1]))
local nSrf2 = EgtSurfFlatRegion( nOffsGrp, {nRect2})
local vtN2 = EgtSurfFrNormVersor( nSrf2, GDB_ID.ROOT)
local nSrf2 = EgtSurfFrFatCurve( nOffsGrp, nCrv2, LayerParams.dStrand / 2, false)
local vtN2 = EgtSurfFrNormVersor( nSrf2, GDB_ID.ROOT)
if LayerParams.vtSlicing * vtN2 < 0 then
EgtInvertSurf( nSrf2)
end
@@ -481,9 +472,7 @@ local function AdjustRibsOffsetForIntersection2Shells( nCrv1, nCrv2, LayerParams
end
EgtErase( nSrf1)
EgtErase( nRect1)
EgtErase( nSrf2)
EgtErase( nRect2)
end
@@ -497,14 +486,22 @@ local function HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPa
EgtCopyGlob( vOffsRib[i], nRibsPathGrp)
end
-- copio i setti in un gruppo con frame locale per calcolare le intersezioni
local frLoc = Frame3d( ORIG(), LayerParams.vtSlicing)
local nGrpTmp = EgtGroup( nRibsGrp, frLoc)
local vOrigRibsIds = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*')
local vRibsIds = {}
for i = 1, #vOrigRibsIds do
table.insert( vRibsIds, EgtCopyGlob( vOrigRibsIds[i], nGrpTmp))
end
-- calcolo la regione nella quale ha senso considerare l'intersezione
local nSrf = EgtGetFirstNameInGroup( nCrvGrp, TOT_SHELL_TRIM_SURF)
local bOk, bExists, nSrfOffs = ComputeSurfOffset( nSrf, nCrvGrp, 2 * LayerParams.dStrand)
local bOk, bExists, nSrfOffs = ComputeSurfOffset( nSrf, nCrvGrp, 2 * LayerParams.dStrand)
if not bOk or not bExists then
nSrfOffs = EgtCopyGlob( nSrf, nCrvGrp)
end
local vRibsIds = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*')
local bInters = false
local vSplit = {}
for i = 1, #vRibsIds do
@@ -513,8 +510,8 @@ local function HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPa
local ptInt = EgtIP( vRibsIds[i], vRibsIds[j], ORIG())
if ptInt then
-- verifico se l'interserzione si trova nella regione dello slice
local nPtId = EgtPoint( nRibsPathGrp, ptInt)
-- verifico se l'interserzione si trova nella regione dello slice
local nPtId = EgtPoint( nGrpTmp, ptInt)
if not EgtSurfFrTestExternal( nSrfOffs, nPtId) then
bInters = true
@@ -523,15 +520,15 @@ local function HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPa
local _, dParE1 = EgtCurveDomain( vRibsIds[i])
local _, dParE2 = EgtCurveDomain( vRibsIds[j])
local nCrv1 = vRibsIds[i] -- curva principale che non viene tagliata
local nCrv2 = vRibsIds[j] -- curve secondaria da modificare
local nCrv1 = vOrigRibsIds[i] -- curva principale che non viene tagliata
local nCrv2 = vOrigRibsIds[j] -- curve secondaria da modificare
if dPar1 < 10 * GEO.EPS_SMALL or abs( dPar1 - dParE1) < 10 * GEO.EPS_SMALL then
nCrv1, nCrv2 = nCrv2, nCrv1
end
if bAllTwoStrands then
-- nel caso di 2 passate gestione speciale
AdjustRibsOffsetForIntersection2Shells( nCrv1, nCrv2, LayerParams, nRibsPathGrp, nOffsGrp)
AdjustRibsOffsetForIntersection2Shells( nCrv1, nCrv2, LayerParams, nRibsPathGrp)
else
AdjustRibsOffsetForIntersection( nCrv1, nCrv2, LayerParams, nRibsPathGrp)
end
@@ -542,6 +539,7 @@ local function HandleRibsIntersections( nRibsGrp, LayerParams, nOffsGrp, nRibsPa
end
EgtErase( nSrfOffs)
EgtErase( nGrpTmp)
return bInters
end
@@ -906,7 +904,7 @@ local function CalcRibsPaths( nSliceGrp, nRibsGrp, LayerParams, nIdx, nMaxStrand
end
if not EgtGetFirstNameInGroup( nRibsPathGrp, RIBS_CRV .. '*') then
EgtErase( nRibsPathGrp)
EgtErase( nRibsPathGrp)
end
nCrvGrp = EgtGetNextName( nCrvGrp, CONTOUR_GRP .. '*')
end