3dPrinting 2.6d1 :
- sistemati fillet per setti anche nel caso di ribs-merged shells - correzioni varie.
This commit is contained in:
+104
-3
@@ -184,6 +184,7 @@ local function GetPathsFromSurf( nSrfId, sName, nType, nGrpId, vPtStart)
|
||||
for nInd = 0, nCrvCnt - 1 do
|
||||
EgtSetName( nCrvId + nInd, sName)
|
||||
EgtSetInfo( nCrvId + nInd, KEY_TYPE, nType)
|
||||
EgtModifyCurveExtrusion( nCrvId + nInd, s_vtSlicing, GDB_ID.ROOT)
|
||||
|
||||
-- se è loop interno lo inverto per averlo orientato in senso antiorario
|
||||
if nInd > 0 then
|
||||
@@ -2528,6 +2529,89 @@ end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
--------------------- RIBS-MERGED SHELLS ---------------------------
|
||||
--------------------------------------------------------------------
|
||||
local function CalcFillet( nCrv1, nCrv2, dFillet, nGrpId, nGrpTmp)
|
||||
|
||||
if dFillet < GEO.EPS_SMALL then return end
|
||||
|
||||
-- creo il fillet
|
||||
local dParRef1 = EgtCurveParamAtLength( nCrv1, EgtCurveLength( nCrv1) - 100 * GEO.EPS_SMALL)
|
||||
local dParRef2 = EgtCurveParamAtLength( nCrv2, 100 * GEO.EPS_SMALL)
|
||||
local nFillet = EgtCurveFillet( nGrpTmp, nCrv1, EgtUP( nCrv1, dParRef1, nGrpTmp), nCrv2, EgtUP( nCrv2, dParRef2, nGrpTmp), dFillet, true, GDB_RT.LOC)
|
||||
if not nFillet then
|
||||
-- ritento con valore di fillet leggermente inferiore
|
||||
nFillet = EgtCurveFillet( nGrpTmp, nCrv1, EgtUP( nCrv1, dParRef1, nGrpTmp), nCrv2, EgtUP( nCrv2, dParRef2, nGrpTmp), dFillet - 50 * GEO.EPS_SMALL, true, GDB_RT.LOC)
|
||||
end
|
||||
|
||||
-- spezzo a metà il fillet per assegnarlo alle due curve
|
||||
if nFillet then
|
||||
local nNewFillet = EgtSplitCurve( nFillet, 2)
|
||||
|
||||
-- aggiungo a nCrv1
|
||||
if EgtExistsObj( nCrv1) then
|
||||
EgtAddCurveCompoArcTg( nCrv1, EgtEP( nNewFillet, GDB_ID.ROOT), true, GDB_RT.GLOB)
|
||||
EgtErase( nNewFillet)
|
||||
else
|
||||
-- nCrv1 viene sostituita completamente dal fillet
|
||||
local nNewCrv = EgtCurveCompo( nGrpId, {nNewFillet})
|
||||
EgtChangeId( nNewCrv, nCrv1)
|
||||
end
|
||||
|
||||
-- aggiungo a nCrv2
|
||||
if EgtExistsObj( nCrv2) then
|
||||
EgtAddCurveCompoArcTg( nCrv2, EgtSP( nNewFillet + 1, GDB_ID.ROOT), false, GDB_RT.GLOB)
|
||||
EgtErase( nNewFillet + 1)
|
||||
else
|
||||
-- nCrv2 viene sostituita completamente dal fillet
|
||||
local nNewCrv = EgtCurveCompo( nGrpId, {nNewFillet + 1})
|
||||
EgtChangeId( nNewCrv, nCrv2)
|
||||
end
|
||||
else
|
||||
EgtOutLog( 'Warning : ribs-merged shells fillet not possible (layer '..tostring( s_nCurrIdx)..') - CalcPath')
|
||||
end
|
||||
|
||||
EgtRelocateGlob( nFillet or GDB_ID.NULL, nGrpId)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function AddFillet( nRib1, vLinks, nRib2, nGrpId)
|
||||
|
||||
local dFillet1 = EgtGetInfo( nRib1, KEY_RIBS_LINK_FILLET, 'd')
|
||||
local dFillet2 = EgtGetInfo( nRib2, KEY_RIBS_LINK_FILLET, 'd')
|
||||
-- verifico se necessaria correzione per passate dello stesso setto
|
||||
local nOrig1 = EgtGetInfo( nRib1, KEY_ORIGINAL_RIB, 'i')
|
||||
local nOrig2 = EgtGetInfo( nRib2, KEY_ORIGINAL_RIB, 'i')
|
||||
local nSplit1 = EgtGetInfo( nRib1, KEY_SPLIT_ID, 'i') or 0
|
||||
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)
|
||||
dFillet2 = dFillet1
|
||||
end
|
||||
|
||||
-- creo un gruppo con riferimento locale allo slicing per i conti del fillet
|
||||
local nGrpTmp = EgtGroup( nGrpId, Frame3d( ORIG(), s_vtSlicing), GDB_RT.GLOB)
|
||||
|
||||
-- calcolo il primo fillet
|
||||
local ptRib1 = EgtEP( nRib1, GDB_ID.ROOT)
|
||||
for i = 1, #vLinks do
|
||||
if AreSamePointApprox( ptRib1, EgtSP( vLinks[i], GDB_ID.ROOT)) then
|
||||
CalcFillet( nRib1, vLinks[i], dFillet1, nGrpId, nGrpTmp)
|
||||
break
|
||||
end
|
||||
end
|
||||
-- calcolo il secondo fillet
|
||||
local ptRib2 = EgtSP( nRib2, GDB_ID.ROOT)
|
||||
for i = 1, #vLinks do
|
||||
if AreSamePointApprox( EgtEP( vLinks[i], GDB_ID.ROOT), ptRib2) then
|
||||
CalcFillet( vLinks[i], nRib2, dFillet2, nGrpId, nGrpTmp)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
EgtErase( nGrpTmp)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function ComputeShortestLinkOnCurve( nCrv, dParS, dParE, nGrp)
|
||||
|
||||
@@ -2778,6 +2862,8 @@ local function HandleRibsIntersectionForRibsMergedShells( vOrigRibs, nRibsGrp, n
|
||||
if nLinkId then
|
||||
local nRes = EgtCurveWithRegionClassify( nLinkId, nShellSrf)
|
||||
if nRes == GDB_CRC.IN then
|
||||
-- fillet
|
||||
AddFillet( nCrv, {nLinkId}, nCrv + 1, nRibsGrp)
|
||||
EgtAddCurveCompoCurve( nCrv + 1, nLinkId, true, false)
|
||||
EgtAddCurveCompoCurve( nCrv + 1, nCrv, true, false)
|
||||
else
|
||||
@@ -2883,6 +2969,7 @@ local function CreateRibsMergedShellLastLink( vShells, vRibs, nGrp, bInvert)
|
||||
if bInvert then
|
||||
-- conservo tratto dParS->dParE
|
||||
EgtTrimCurveStartEndAtParam( nLink, dParS, dParE)
|
||||
EgtInvertCurve( nLink)
|
||||
else
|
||||
-- conservo tratto dParE->dParS
|
||||
EgtTrimCurveStartEndAtParam( nLink, dParE, dParS)
|
||||
@@ -2925,6 +3012,8 @@ local function CreateRibsMergedShellLastLink( vShells, vRibs, nGrp, bInvert)
|
||||
end
|
||||
end
|
||||
if nPartLink then
|
||||
-- fillet
|
||||
AddFillet( vRibs[i], {nPartLink}, nOtherPart, nGrp)
|
||||
EgtAddCurveCompoCurve( vRibs[i], nPartLink)
|
||||
EgtAddCurveCompoCurve( vRibs[i], nOtherPart)
|
||||
end
|
||||
@@ -3017,6 +3106,7 @@ local function AdjustRibsMergedExtraShellLink( nLinkId, vExtraShells, nGrp)
|
||||
|
||||
local frLoc = Frame3d( ORIG(), s_vtSlicing)
|
||||
local nGrpLoc = EgtGroup( nGrp, frLoc)
|
||||
local vLinks = {}
|
||||
|
||||
-- devo conservare solo le intersezioni fra link ed extra shell
|
||||
for i = 1, #vExtraShells do
|
||||
@@ -3024,6 +3114,8 @@ local function AdjustRibsMergedExtraShellLink( nLinkId, vExtraShells, nGrp)
|
||||
if nRes then
|
||||
for nId = nRes + nPntCnt, nRes + nPntCnt + nCrvCnt - 1 do
|
||||
EgtRelocateGlob( nId, nGrp)
|
||||
EgtModifyCurveExtrusion( nId, s_vtSlicing, GDB_ID.ROOT)
|
||||
table.insert( vLinks, nId)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -3031,6 +3123,7 @@ local function AdjustRibsMergedExtraShellLink( nLinkId, vExtraShells, nGrp)
|
||||
-- cancello il link originale
|
||||
EgtErase( nLinkId)
|
||||
EgtErase( nGrpLoc)
|
||||
return vLinks
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
@@ -3072,7 +3165,7 @@ local function CreateRibsMergedShellCurve( nGrp, nRibsGrp, vShells, vOrigShells,
|
||||
-- creo il link
|
||||
local nLinkId = CreateRibsMergedShellLink( nCurr, nNext, nGrp, EgtIf( bLinkOnShell, vLoopsShell, vLoopsTrim), nRibsGrp)
|
||||
if not nLinkId then
|
||||
return false
|
||||
return false
|
||||
end
|
||||
|
||||
-- se link fatto sulla shell verifico non si sovrapponga al last link
|
||||
@@ -3094,16 +3187,24 @@ local function CreateRibsMergedShellCurve( nGrp, nRibsGrp, vShells, vOrigShells,
|
||||
end
|
||||
|
||||
-- verifico se necessari aggiustamenti per extra shell
|
||||
local vLinks
|
||||
if bExtraShell and bLinkOnShell then
|
||||
AdjustRibsMergedExtraShellLink( nLinkId, vOrigShells, nGrp)
|
||||
vLinks = AdjustRibsMergedExtraShellLink( nLinkId, vOrigShells, nGrp)
|
||||
end
|
||||
|
||||
-- fillet
|
||||
AddFillet( nCurr, vLinks or {nLinkId}, nNext, nGrp)
|
||||
|
||||
end
|
||||
|
||||
-- eventuali aggiustamenti del last link per extra shell
|
||||
local vLastLinks
|
||||
if bExtraShell then
|
||||
AdjustRibsMergedExtraShellLink( nLastLink, vOrigShells, nGrp)
|
||||
vLastLinks = AdjustRibsMergedExtraShellLink( nLastLink, vOrigShells, nGrp)
|
||||
end
|
||||
|
||||
-- fillet sul last link
|
||||
AddFillet( vRibs[#vRibs], vLastLinks or {nLastLink}, vRibs[1], nGrp)
|
||||
|
||||
-- elimino le curve inutili e le superfici
|
||||
EgtErase( nRibsGrp)
|
||||
|
||||
@@ -390,7 +390,7 @@ local function AddRetraction( nCrvId, vtSlicing, dCoastingLen, dWipeLen, dWipeDi
|
||||
|
||||
-- curva ausiliaria per generare correttamente wipe
|
||||
local nCopyId = EgtCopyGlob( nCrvId, nCrvId, GDB_IN.AFTER)
|
||||
if not EgtCurveIsClosed( nCopyId) then
|
||||
if not EgtCurveIsClosed( nCopyId) and EgtCurveIsFlat( nCopyId) then
|
||||
local ptNewStart = EgtEP( nCopyId, GDB_ID.ROOT)
|
||||
-- mi posiziono in un frame locale per fare i conti
|
||||
local nGrp = EgtGroup( EgtGetParent( nCrvId), Frame3d( ORIG(), vtSlicing), GDB_RT.GLOB)
|
||||
@@ -400,10 +400,12 @@ local function AddRetraction( nCrvId, vtSlicing, dCoastingLen, dWipeLen, dWipeDi
|
||||
if nInters > 0 then
|
||||
-- caso con sovrapposizione
|
||||
nCopyId, nCrvCnt = EgtSplitCurveAtSelfInters( nCopyId)
|
||||
for nIdx = 1, nCrvCnt - 2 do
|
||||
EgtAddCurveCompoCurve( nCopyId, nCopyId + nIdx)
|
||||
if nCrvCnt > 1 then
|
||||
for nIdx = 1, nCrvCnt - 2 do
|
||||
EgtAddCurveCompoCurve( nCopyId, nCopyId + nIdx)
|
||||
end
|
||||
EgtErase( nCopyId + nCrvCnt - 1)
|
||||
end
|
||||
EgtErase( nCopyId + nCrvCnt - 1)
|
||||
end
|
||||
EgtCloseCurveCompo( nCopyId)
|
||||
EgtChangeClosedCurveStartPoint( nCopyId, ptNewStart, GDB_RT.GLOB)
|
||||
@@ -1064,6 +1066,10 @@ end
|
||||
--------------------------------------------------------------------
|
||||
local function AddFillet( nCrv1, nCrv2, dFillet, vtSlicing)
|
||||
|
||||
if dFillet < GEO.EPS_SMALL then
|
||||
return
|
||||
end
|
||||
|
||||
local nRefPosId = EgtGetPrev( nCrv1)
|
||||
local nRefGrpId = EgtGetParent( nCrv1)
|
||||
local vsInfo1 = EgtGetAllInfo( nCrv1)
|
||||
@@ -1091,7 +1097,7 @@ local function AddFillet( nCrv1, nCrv2, dFillet, vtSlicing)
|
||||
EgtAddCurveCompoArcTg( nCrv1, EgtEP( nNewFillet, GDB_ID.ROOT), true, GDB_RT.GLOB)
|
||||
EgtErase( nNewFillet)
|
||||
else
|
||||
-- nCrv1 viene sostutuita completamente dal fillet
|
||||
-- nCrv1 viene sostituita completamente dal fillet
|
||||
local nNewCrv = EgtCurveCompo( nRefGrpId, {nNewFillet})
|
||||
-- riposiziono dopo il precedente di nCrv1 ( se esiste) oppure in testa al gruppo
|
||||
if nRefPosId ~= GDB_ID.NULL then
|
||||
@@ -1113,7 +1119,7 @@ local function AddFillet( nCrv1, nCrv2, dFillet, vtSlicing)
|
||||
EgtAddCurveCompoArcTg( nCrv2, EgtSP( nNewFillet + 1, GDB_ID.ROOT), false, GDB_RT.GLOB)
|
||||
EgtErase( nNewFillet + 1)
|
||||
else
|
||||
-- nCrv2 viene sostutuita completamente dal fillet
|
||||
-- nCrv2 viene sostituita completamente dal fillet
|
||||
local nNewCrv = EgtCurveCompo( nRefGrpId, {nNewFillet + 1})
|
||||
EgtRelocateGlob( nNewCrv, nCrv1, GDB_IN.AFTER)
|
||||
EgtChangeId( nNewCrv, nCrv2)
|
||||
@@ -1977,7 +1983,7 @@ end
|
||||
--------------------------------------------------------------------
|
||||
local function AddSpiralVaseLeadOut( nOldId, LayerParams)
|
||||
|
||||
if LayerParams.nLeadOutType ~= LEAD_TYPE.NONE then
|
||||
if LayerParams.nLeadOutType ~= LEAD_TYPE.NONE then
|
||||
EgtTrimCurveEndAtLen( nOldId, EgtCurveLength( nOldId) - LayerParams.dOffsetLP)
|
||||
local nLeadOut = AddLeadOut( nOldId, LayerParams, EgtGetParent( nOldId))
|
||||
if nLeadOut then
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
-- Version.lua by Egaltech s.r.l. 2024/02/13
|
||||
-- Gestione della versione di 3dPrinting
|
||||
|
||||
VERSION = '2.6c1'
|
||||
VERSION = '2.6d1'
|
||||
Reference in New Issue
Block a user