3dPrinting :
- slicing a 90°.
This commit is contained in:
+25
-27
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user