3dPrinting 2.7h1 :

- aggiunto parametro RibsStrandOverlap per impostare una sovrapposizione tra le passate di uno stesso setto
- aggiunto numero massimo di layer da realizzare.
This commit is contained in:
SaraP
2025-08-19 14:32:17 +02:00
parent c718593585
commit e1c375aa5a
5 changed files with 96 additions and 74 deletions
+23 -8
View File
@@ -1287,7 +1287,8 @@ local function ComputeRibsOrientedOffset( nRibsGrp)
local bCCW = EgtGetInfo( vIds[i], KEY_RIBS_USER_LINK_CCW, 'b') or false
local nLinkOrder = EgtGetInfo( vIds[i], KEY_RIBS_USER_LINK_ORDER, 'i') or 0
local dStrand = EgtGetInfo( vIds[i], KEY_RIBS_STRAND, 'd')
local dOffs = ( nShellsNbr - 1) * dStrand / 2
local dStrandOverlap = EgtGetInfo( vIds[i], KEY_RIBS_STRAND_OVERLAP, 'd') or 0
local dOffs = ( nShellsNbr - 1) * ( 1 - dStrandOverlap / 100) * dStrand / 2
-- ordine di realizzazione degli offset
if not bUserLinked then
@@ -1303,7 +1304,7 @@ local function ComputeRibsOrientedOffset( nRibsGrp)
local vOffsRib = {}
for k = 0, nShellsNbr - 1 do
local dOffsCurr = dOffs - k * dStrand
local dOffsCurr = dOffs - k * ( 1 - dStrandOverlap / 100) * dStrand
local nNewId
if abs( dOffsCurr) < GEO.EPS_SMALL then
nNewId = EgtCopyGlob( vIds[i], nOffsGrp)
@@ -1607,10 +1608,11 @@ local function AdjustRibsOffsetForIntersection( nCrv1, nCrv2, nOffsGrp, nLoopGrp
local nShells = EgtGetInfo( nCrv1, KEY_RIBS_SHELLS_NBR, 'i')
local dStrand1 = EgtGetInfo( nCrv1, KEY_RIBS_STRAND, 'd')
local dStrandOverlap1 = EgtGetInfo( nCrv1, KEY_RIBS_STRAND_OVERLAP, 'd') or 0
local dOverlap = EgtGetInfo( nCrv2, KEY_RIBS_OVERLAP, 'i')
local dStrand2 = EgtGetInfo( nCrv2, KEY_RIBS_STRAND, 'd')
if dOverlap / 100 * dStrand2 > nShells * dStrand1 * 0.5 - GEO.EPS_SMALL then
if dOverlap / 100 * dStrand2 > ( nShells - 1) * ( 1 - dStrandOverlap1 / 100) * dStrand1 * 0.5 + dStrand1 * 0.5 - GEO.EPS_SMALL then
-- non ha senso spezzare la curva, aggiorno solo split order dei suoi offset
for i = 1, #vOffs2 do
CopyInfo( nCrv2, vOffs2[i], KEY_SPLIT_ORDER, 'i')
@@ -1619,7 +1621,7 @@ local function AdjustRibsOffsetForIntersection( nCrv1, nCrv2, nOffsGrp, nLoopGrp
end
-- calcolo la superficie della curva principale ( nCrv1) da usare per trim
local dOffs = nShells * dStrand1 * 0.5 + dStrand2 * ( 0.5 - dOverlap / 100)
local dOffs = ( nShells - 1) * ( 1 - dStrandOverlap1 / 100) * dStrand1 * 0.5 + dStrand1 * 0.5 + dStrand2 * ( 0.5 - dOverlap / 100)
local nSrf = EgtSurfFrFatCurve( nOffsGrp, nCrv1, dOffs, false, false, s_dOffsTol)
if not nSrf then
EgtOutLog( 'Error : ribs intersection failed (layer '.. EgtNumToString( s_nCurrIdx) ..') - CalcPaths')
@@ -1678,9 +1680,11 @@ local function AdjustRibsOffsetForIntersection2Shells( nCrv1, nCrv2, nOffsGrp)
-- costruisco le superfici da usare per trim
local dStrand1 = EgtGetInfo( nCrv1, KEY_RIBS_STRAND, 'd')
local nSrf1 = EgtSurfFrFatCurve( nOffsGrp, nCrv1, dStrand1 * 0.5, false, false, s_dOffsTol)
local dStrandOverlap1 = EgtGetInfo( nCrv1, KEY_RIBS_STRAND_OVERLAP, 'd') or 0
local nSrf1 = EgtSurfFrFatCurve( nOffsGrp, nCrv1, ( 1 - dStrandOverlap1 / 100) * dStrand1 * 0.5, false, false, s_dOffsTol)
local dStrand2 = EgtGetInfo( nCrv2, KEY_RIBS_STRAND, 'd')
local nSrf2 = EgtSurfFrFatCurve( nOffsGrp, nCrv2, dStrand2 * 0.5, false, false, s_dOffsTol)
local dStrandOverlap2 = EgtGetInfo( nCrv2, KEY_RIBS_STRAND_OVERLAP, 'd') or 0
local nSrf2 = EgtSurfFrFatCurve( nOffsGrp, nCrv2, ( 1 - dStrandOverlap2 / 100) * dStrand2 * 0.5, false, false, s_dOffsTol)
-- trim degli offset di nCrv1
local vOffs1 = EgtGetNameInGroup( nOffsGrp, EgtGetName( nCrv1)) or {}
@@ -2143,6 +2147,7 @@ local function ReassignInfo( nCrv, nCnt, vOrig)
CopyInfo( vOrig[i], nId, KEY_RIBS_LEAD_IN_LEN, 'd')
CopyInfo( vOrig[i], nId, KEY_ASSOCIATED_SURF, 'i')
CopyInfo( vOrig[i], nId, KEY_RIBS_OVERLAP, 'd')
CopyInfo( vOrig[i], nId, KEY_RIBS_STRAND_OVERLAP, 'd')
CopyInfo( vOrig[i], nId, KEY_RIBS_TYPE, 'i')
CopyInfo( vOrig[i], nId, KEY_RIBS_LINK, 'b')
CopyInfo( vOrig[i], nId, KEY_RIBS_LINK_FILLET, 'd')
@@ -2585,7 +2590,8 @@ local function AddFillet( nRib1, vLinks, nRib2, nGrpId)
local nSplit2 = EgtGetInfo( nRib2, KEY_SPLIT_ID, 'i') or 0
if nOrig1 == nOrig2 and nSplit1 == nSplit2 then
local dStrand = EgtGetInfo( nRib1, KEY_RIBS_STRAND, 'd')
dFillet1 = min( dFillet1, 0.5 * dStrand)
local dStrandOverlap = EgtGetInfo( nRib1, KEY_RIBS_STRAND_OVERLAP, 'd')
dFillet1 = min( dFillet1, 0.5 * ( 1 - dStrandOverlap / 100) * dStrand)
dFillet2 = dFillet1
end
@@ -2833,9 +2839,18 @@ local function HandleRibsIntersectionForRibsMergedShells( vOrigRibs, nRibsGrp, n
nCrv1, nCrv2 = nCrv2, nCrv1
end
-- verifico che la curva secondaria abbia una sola passata
local nShells2 = EgtGetInfo( nCrv2, KEY_RIBS_SHELLS_NBR, 'i')
if nShells2 > 1 then
EgtOutLog( 'Error : shell-merged ribs intersect in a non valid way (layer '.. EgtNumToString( s_nCurrIdx) ..') - CalcPaths')
table.insert( s_vErr, ' - layer ' .. EgtNumToString( s_nCurrIdx) .. ' : error in ribs-merged shells intersection')
return false
end
-- calcolo la superficie della curva principale ( nCrv1) da usare per trim
local nShells = EgtGetInfo( nCrv1, KEY_RIBS_SHELLS_NBR, 'i')
local dOffs = (( nShells + 1) * 0.5 - dOverlap / 100) * dStrand
local dStrandOverlap = EgtGetInfo( nCrv1, KEY_RIBS_STRAND_OVERLAP, 'd')
local dOffs = (( nShells - 1) * ( 1 - dStrandOverlap / 100) * 0.5 + 1 - dOverlap / 100) * dStrand
local nSrf = EgtSurfFrFatCurve( nGrpTmp, nCrv1, dOffs, false, false, s_dOffsTol)
if not nSrf then
EgtOutLog( 'Error : EgtSurfFrFatCurve for shell-merged ribs intersection failed (layer '.. EgtNumToString( s_nCurrIdx) ..') - CalcPaths')