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
+60 -62
View File
@@ -1217,7 +1217,8 @@ local function VerifyRibsLink( nLinkId, nCurr, nNext, nGrpTmp, dStrand)
local dOffs
if nOrigId == nOrigCurr or nOrigId == nOrigNext then
-- se passata relativa ad un setto coinvolto nel link verifico soltanto che il percorso del link non entri nella regione occupata dal setto
dOffs = dCurrStrand * 0.5
local dStrandOverlap = EgtGetInfo( vRibsIds[i], KEY_RIBS_STRAND_OVERLAP, 'd')
dOffs = dCurrStrand * ( 0.5 - dStrandOverlap / 100)
else
-- altrimenti verifico che le regioni del link e del setto non si sovrappongono ( a meno dell'overlap fissato)
dOffs = dCurrStrand * 0.5 + ( 0.5 - dOverlap / 100) * dStrand - 50 * GEO.EPS_SMALL
@@ -1346,8 +1347,15 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, bForceLink, vtSlicing, nGrp
local dStrand1 = EgtGetInfo( nCurr, KEY_CRV_STRAND, 'd')
local dStrand2 = EgtGetInfo( nNext, KEY_CRV_STRAND, 'd')
local dStrand = max( dStrand1, dStrand2)
local dFillet1 = EgtGetInfo( nCurr, KEY_RIBS_LINK_FILLET, 'd')
local dFillet2 = EgtGetInfo( nNext, KEY_RIBS_LINK_FILLET, 'd')
if bForceLink then
local dStrandOverlap1 = EgtGetInfo( nCurr, KEY_RIBS_STRAND_OVERLAP, 'd')
local dStrandOverlap2 = EgtGetInfo( nNext, KEY_RIBS_STRAND_OVERLAP, 'd')
dFillet1 = min( dFillet1, ( 1 - dStrandOverlap1 / 100) * dStrand1 * 0.5)
dFillet2 = min( dFillet2, ( 1 - dStrandOverlap2 / 100) * dStrand2 * 0.5)
end
local vCrvIds = EgtGetAllInGroup( nLoopGrp)
-- recupero le curve di bordo su cui poggiano i setti e i corrispondenti parametri
@@ -1380,10 +1388,6 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, bForceLink, vtSlicing, nGrp
if nLinkId then
-- fillet
if bForceLink then
dFillet1 = min( dFillet1, dStrand1 * 0.5)
dFillet2 = min( dFillet2, dStrand2 * 0.5)
end
AddFillet( nCurr, nLinkId, dFillet1, vtSlicing)
AddFillet( nLinkId, nNext, dFillet2, vtSlicing)
-- assegno le info
@@ -1409,8 +1413,6 @@ local function CalcRibsLink( nCurr, nNext, nLoopGrp, bForceLink, vtSlicing, nGrp
local bValid = VerifyRibsLink( nLinkId, nCurr, nNext, nGrpTmp, dStrand)
if bValid then
-- fillet
dFillet1 = min( dFillet1, dStrand1 * 0.5)
dFillet2 = min( dFillet2, dStrand2 * 0.5)
AddFillet( nCurr, nLinkId, dFillet1, vtSlicing)
AddFillet( nLinkId, nNext, dFillet2, vtSlicing)
return nLinkId
@@ -1466,56 +1468,49 @@ end
local function VerifyRibsLead( nId, nRibId, bInVsOut, nGrpTmp)
local dStrand = EgtGetInfo( nRibId, KEY_CRV_STRAND, 'd')
local dOverlap = EgtGetInfo( nRibId, KEY_RIBS_OVERLAP, 'd')
local dShellOverlap = EgtGetInfo( nRibId, KEY_RIBS_OVERLAP, 'd')
local dStrandOverlap = EgtGetInfo( nRibId, KEY_RIBS_STRAND_OVERLAP, 'd')
local dOverlap = max( dShellOverlap, dStrandOverlap)
local nOrigRib = EgtGetInfo( nRibId, KEY_ORIGINAL_RIB, 'i')
local dLen = EgtCurveLength( nId)
-- porto il lead nel gruppo locale
local nLeadLoc = EgtCopyGlob( nId, nGrpTmp)
-- individuo eventuale lead in o link relativo al setto corrente ( solo se collega due passate dello stesso setto)
local nCurrLI
local nCurrLink
if bInVsOut then
-- se è lead in devo solo verificare se seguito da un link
local nNext = EgtGetNext( nRibId)
if nNext and EgtGetName( nNext) == LINK_CRV then
local nNextRib = EgtGetNext( nNext)
local nOrigRib = EgtGetInfo( nRibId, KEY_ORIGINAL_RIB, 'i') or -1
local nOrigRibPrev = EgtGetInfo( nNextRib, KEY_ORIGINAL_RIB, 'i') or -1
if nOrigRib == nOrigRibPrev then
nCurrLink = nNext
end
end
else
-- se è lead out devo verificare se preceduto da lead in o da link
local nPrev = EgtGetPrev( nRibId)
if nPrev and EgtGetName( nPrev) == LEAD_IN_CRV then
nCurrLI = nPrev
elseif nPrev and EgtGetName( nPrev) == LINK_CRV then
local nPrevRib = EgtGetPrev( nPrev)
local nOrigRib = EgtGetInfo( nRibId, KEY_ORIGINAL_RIB, 'i') or -1
local nOrigRibPrev = EgtGetInfo( nPrevRib, KEY_ORIGINAL_RIB, 'i') or -1
if nOrigRib == nOrigRibPrev then
nCurrLink = nPrev
end
end
end
-- 1) verifico se interseca altri setti, lead in, lead out o collegamenti
-- recupero gli id degli elementi da controllare
local vCheckIds = {}
local nCurrId = EgtGetFirstInGroup( EgtGetParent( nRibId))
while nCurrId do
-- considero solo i setti e gli elementi a loro associati ( tranne i wipe perchè non corrispondono a materiale depositato)
local nType = EgtGetInfo( nCurrId, KEY_TYPE, 'i')
if nType == TYPE.RIB or ( nType == TYPE.COASTING and EgtGetInfo( EgtGetPrev( nCurrId), KEY_TYPE, 'i') == TYPE.RIB) then
-- verifico non sia un tratto relativo al setto corrente
if nCurrId ~= nCurrLI and nCurrId ~= nRibId and nCurrId ~= nId and nCurrId ~= nCurrLink then
table.insert( vCheckIds, nCurrId)
if nCurrId ~= nRibId and nCurrId ~= nId then
-- considero solo i setti e gli elementi a loro associati ( tranne i wipe perchè non corrispondono a materiale depositato)
local nType = EgtGetInfo( nCurrId, KEY_TYPE, 'i')
if nType == TYPE.RIB or ( nType == TYPE.COASTING and EgtGetInfo( EgtGetPrev( nCurrId), KEY_TYPE, 'i') == TYPE.RIB) then
-- controllo che non sia un elemento relativo ad un'altra passata del setto corrente
if EgtGetName( nCurrId) == LEAD_IN_CRV then
-- il setto di riferimento è l'elemento successivo
local nCurrOrigRib = EgtGetInfo( EgtGetNext( nCurrId), KEY_ORIGINAL_RIB, 'i') or -1
if nOrigRib ~= nCurrOrigRib then
table.insert( vCheckIds, nCurrId)
end
elseif EgtGetName( nCurrId) == LINK_CRV then
-- il link va controllato se non congiunge due passate del setto corrente
local nOrigRib1 = EgtGetInfo( EgtGetPrev( nCurrId), KEY_ORIGINAL_RIB, 'i') or -1
local nOrigRib2 = EgtGetInfo( EgtGetNext( nCurrId), KEY_ORIGINAL_RIB, 'i') or -1
if nOrigRib ~= nOrigRib1 or nOrigRib ~= nOrigRib2 then
table.insert( vCheckIds, nCurrId)
end
else
local nCurrOrigRib = EgtGetInfo( nCurrId, KEY_ORIGINAL_RIB, 'i')
if nOrigRib ~= nCurrOrigRib then
table.insert( vCheckIds, nCurrId)
end
end
end
end
nCurrId = EgtGetNext( nCurrId)
end
-- tra gli id da controllare devo aggiungere anche altri setti non ancora presenti nel toolpath ( tipologie di setti realizzate in seguito)
local nCrvGrp = EgtGetParent( EgtGetParent( nRibId))
local nRibsPathGrp = EgtGetFirstNameInGroup( nCrvGrp, RIBS_GRP)
@@ -1568,26 +1563,29 @@ local function VerifyRibsLead( nId, nRibId, bInVsOut, nGrpTmp)
end
-- 3) verifiche con eventuale lead in
if nCurrLI then
local nLeadInLoc = EgtCopyGlob( nCurrLI, nGrpTmp)
-- verifico se intersezione fra curve
local _, nPnt, nCrv = EgtCurveCurveInters( nLeadLoc, nLeadInLoc, nGrpTmp)
if nPnt ~= 0 or nCrv ~= 0 then
return false
end
local dLeadInLen = EgtCurveLength( nLeadInLoc)
if dLeadInLen > dStrand + GEO.EPS_SMALL then
local nSrfLeadIn = EgtSurfFrFatCurve( nGrpTmp, nId, dStrand * ( 1 - dOverlap / 100), false)
if nSrfLeadIn then
-- EgtSetStatus( nSrfLeadIn, GDB_ST.OFF)
-- verifico di avere un solo tratto esterno di lunghezza sufficiente
local nRes, nCnt = EgtTrimCurveWithRegion( nLeadInLoc, nSrfLeadIn, false, false)
if nCnt ~= 1 then
return false
else
local dLen = EgtCurveLength( nRes)
if dLen < dStrand / 2 + GEO.EPS_SMALL then
if not bInVsOut then
local nCurrLI = EgtGetPrev( nRibId)
if nCurrLI and EgtGetName( nCurrLI) == LEAD_IN_CRV then
local nLeadInLoc = EgtCopyGlob( nCurrLI, nGrpTmp)
-- verifico se intersezione fra curve
local _, nPnt, nCrv = EgtCurveCurveInters( nLeadLoc, nLeadInLoc, nGrpTmp)
if nPnt ~= 0 or nCrv ~= 0 then
return false
end
local dLeadInLen = EgtCurveLength( nLeadInLoc)
if dLeadInLen > dStrand + GEO.EPS_SMALL then
local nSrfLeadIn = EgtSurfFrFatCurve( nGrpTmp, nId, dStrand * ( 1 - dOverlap / 100), false)
if nSrfLeadIn then
-- EgtSetStatus( nSrfLeadIn, GDB_ST.OFF)
-- verifico di avere un solo tratto esterno di lunghezza sufficiente
local nRes, nCnt = EgtTrimCurveWithRegion( nLeadInLoc, nSrfLeadIn, false, false)
if nCnt ~= 1 then
return false
else
local dLen = EgtCurveLength( nRes)
if dLen < dStrand / 2 + GEO.EPS_SMALL then
return false
end
end
end
end