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:
+60
-62
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user