3dPrinting :

- modifiche e correzioni per Costolature (Setti -> Ribs).
This commit is contained in:
DarioS
2022-07-03 19:04:07 +02:00
parent 9aecef3add
commit 1459253e57
13 changed files with 378 additions and 251 deletions
+50 -49
View File
@@ -23,10 +23,10 @@ local function GetLayerParamsForPathCalc()
LayerParams.dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd')
LayerParams.nFloorNbr = EgtGetInfo( s_nPartId, KEY_FLOOR_NBR, 'i')
LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v')
-- parametri setti
LayerParams.dSettiOverlap = EgtGetInfo( s_nPartId, KEY_SETTI_OVERLAP, 'd')
LayerParams.nSettiShellsNbr = EgtGetInfo( s_nPartId, KEY_SETTI_SHELLS_NBR, 'i')
LayerParams.bSettiInvertOrder = EgtGetInfo( s_nPartId, KEY_SETTI_INVERT_ORDER, 'b')
-- parametri costolature
LayerParams.dRibsOverlap = EgtGetInfo( s_nPartId, KEY_RIBS_OVERLAP, 'd')
LayerParams.nRibsShellsNbr = EgtGetInfo( s_nPartId, KEY_RIBS_SHELLS_NBR, 'i')
LayerParams.bRibsInvertOrder = EgtGetInfo( s_nPartId, KEY_RIBS_INVERT_ORDER, 'b')
return LayerParams
end
@@ -102,10 +102,10 @@ local function AddFloor( nSrfId, nGrpId, LayerParams, nFloorNbr)
end
--------------------------------------------------------------------
local function ReorderSetti( nGrp, bInvertOrder)
local function ReorderRibs( nGrp, bInvertOrder)
EgtSpInit()
local vIds = EgtGetNameInGroup( nGrp, SETTI_CRV .. '*')
local vIds = EgtGetNameInGroup( nGrp, RIBS_CRV .. '*')
for i = 1, #vIds do
local pt = EgtMP( vIds[i], GDB_RT.GLOB)
EgtSpAddPoint( pt:getX(), pt:getY(), pt:getZ(), 0, 0, pt:getX(), pt:getY(), pt:getZ(), 0, 0)
@@ -113,47 +113,47 @@ local function ReorderSetti( nGrp, bInvertOrder)
local vOrd, dLen = EgtSpCalculate( SHP_TY.OPEN)
EgtSpTerminate()
local vOrderedSetti = {}
local vOrderedRibs = {}
if bInvertOrder then
for i = #vOrd, 1, -1 do
table.insert( vOrderedSetti, vIds[vOrd[i]])
table.insert( vOrderedRibs, vIds[vOrd[i]])
end
else
for i = 1, #vOrd do
table.insert( vOrderedSetti, vIds[vOrd[i]])
table.insert( vOrderedRibs, vIds[vOrd[i]])
end
end
return vOrderedSetti
return vOrderedRibs
end
--------------------------------------------------------------------
local function CalcSettiPaths( nSliceGrp, nSettiGrp, LayerParams, nStmId)
local function CalcRibsPaths( nSliceGrp, nRibsGrp, LayerParams, nStmId)
-- calcolo gli offset
local dOffs = ( LayerParams.nSettiShellsNbr - 1) * LayerParams.dStrand / 2
local nOffsGrp = EgtGroup( nSettiGrp)
local vSetti = EgtGetNameInGroup( nSettiGrp, SETTI_CRV .. '*')
for i = 1, #vSetti do
for k = 0, LayerParams.nSettiShellsNbr - 1 do
local nNewId = EgtOffsetCurveAdv( vSetti[i], - dOffs + k * LayerParams.dStrand)
EgtSetName( nNewId, EgtGetName( vSetti[i]))
EgtSetInfo( nNewId, KEY_TYPE, TYPE.SETTO)
local dOffs = ( LayerParams.nRibsShellsNbr - 1) * LayerParams.dStrand / 2
local nOffsGrp = EgtGroup( nRibsGrp)
local vRibs = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*')
for i = 1, #vRibs do
for k = 0, LayerParams.nRibsShellsNbr - 1 do
local nNewId = EgtOffsetCurveAdv( vRibs[i], - dOffs + k * LayerParams.dStrand)
EgtSetName( nNewId, EgtGetName( vRibs[i]))
EgtSetInfo( nNewId, KEY_TYPE, TYPE.RIB)
EgtRelocateGlob( nNewId, nOffsGrp)
end
end
-- riordino setti
local vOrderedSetti = ReorderSetti( nOffsGrp, LayerParams.bSettiInvertOrder)
-- riordino costolature
local vOrderedRibs = ReorderRibs( nOffsGrp, LayerParams.bRibsInvertOrder)
-- scorro i gruppi di curve
local nCrvGrp = EgtGetFirstNameInGroup( nSliceGrp, CONTOUR_GRP .. '*')
while nCrvGrp do
local nSettiPathGrp = EgtGetFirstNameInGroup( nCrvGrp, SETTI_GRP)
local nSrf = EgtGetFirstNameInGroup( nSettiPathGrp, LAYER_SRF)
local nRibsPathGrp = EgtGetFirstNameInGroup( nCrvGrp, RIBS_GRP)
local nSrf = EgtGetFirstNameInGroup( nRibsPathGrp, LAYER_SRF)
if nSrf then
for i = 1, #vOrderedSetti do
local nNewId = EgtCopyGlob( vOrderedSetti[i], nSettiPathGrp)
-- trim dei setti con la regione offsettata
for i = 1, #vOrderedRibs do
local nNewId = EgtCopyGlob( vOrderedRibs[i], nRibsPathGrp)
-- trim delle costole con la regione offsettata
local nCrv, nCnt = EgtTrimCurveWithRegion( nNewId, nSrf, true, false)
-- elimino tratti troppo corti
for nId = nCrv, nCrv + nCnt - 1 do
@@ -165,8 +165,8 @@ local function CalcSettiPaths( nSliceGrp, nSettiGrp, LayerParams, nStmId)
end
end
if not EgtGetFirstNameInGroup( nSettiPathGrp, SETTI_CRV .. '*') then
EgtErase( nSettiPathGrp)
if not EgtGetFirstNameInGroup( nRibsPathGrp, RIBS_CRV .. '*') then
EgtErase( nRibsPathGrp)
end
nCrvGrp = EgtGetNextName( nCrvGrp, CONTOUR_GRP .. '*')
end
@@ -188,7 +188,7 @@ function CalcPaths.Exec( nPartId, nStmId)
-- scorro tutti i suoi layer
for nIdx = 1, #vLayIds do
local nSettiGrp = EgtGetFirstNameInGroup( vLayIds[nIdx], SETTI_GRP)
local nRibsGrp = EgtGetFirstNameInGroup( vLayIds[nIdx], RIBS_GRP)
-- scorro tutti i gruppi di contorni
local nCrvGrpId = EgtGetFirstNameInGroup( vLayIds[nIdx], CONTOUR_GRP.."*") or GDB_ID.NULL
@@ -218,7 +218,8 @@ function CalcPaths.Exec( nPartId, nStmId)
if not bOk then
EgtErase( nSrfId)
nSrfId = EgtCopyGlob( nSrf, nCrvGrpId)
bOk = ( EgtSurfFrOffset( nSrfId, -dOffs + 0.05) and EgtSurfFrChunkCount( nSrfId) > 0)
local dNewOffs = dOffs - 0.05
bOk = ( EgtSurfFrOffset( nSrfId, -dNewOffs) and EgtSurfFrChunkCount( nSrfId) > 0)
end
-- se offset riuscito, estraggo i contorni (pareti esterne)
if bOk then
@@ -247,32 +248,32 @@ function CalcPaths.Exec( nPartId, nStmId)
EgtErase( nSrfId)
end
-- setti
if nSettiGrp then
-- costolature
if nRibsGrp then
-- creo o svuoto il gruppo per i setti
local nSettiPathGrp = EgtGetFirstNameInGroup( nCrvGrpId, SETTI_GRP)
if not nSettiPathGrp then
nSettiPathGrp = EgtGroup( nCrvGrpId)
EgtSetName( nSettiPathGrp, SETTI_GRP)
EgtSetStatus( nSettiPathGrp, GDB_ST.OFF)
-- creo o svuoto il gruppo per le costolature
local nRibsPathGrp = EgtGetFirstNameInGroup( nCrvGrpId, RIBS_GRP)
if not nRibsPathGrp then
nRibsPathGrp = EgtGroup( nCrvGrpId)
EgtSetName( nRibsPathGrp, RIBS_GRP)
EgtSetStatus( nRibsPathGrp, GDB_ST.OFF)
else
EgtEmptyGroup( nSettiPathGrp)
EgtEmptyGroup( nRibsPathGrp)
end
-- calcolo superficie di offset da usare per i setti
local nSrfId = EgtCopy( nSrf, nSettiPathGrp)
local dOffs = 0.5 * LayerParams.dStrand - LayerParams.dOffs + ( LayerParams.nShellsNbr - 1) * LayerParams.dStrand + ( 1 - LayerParams.dSettiOverlap / 100) * LayerParams.dStrand
-- calcolo superficie di offset da usare per le costolature
local nSrfId = EgtCopy( nSrf, nRibsPathGrp)
local dOffs = 0.5 * LayerParams.dStrand - LayerParams.dOffs + ( LayerParams.nShellsNbr - 1) * LayerParams.dStrand + ( 1 - LayerParams.dRibsOverlap / 100) * LayerParams.dStrand
local bOk = ( EgtSurfFrOffset( nSrfId, - dOffs) and EgtSurfFrChunkCount( nSrfId) > 0)
if not bOk then
EgtErase( nSrfId)
nSrfId = EgtCopyGlob( nSrf, nSettiPathGrp)
nSrfId = EgtCopyGlob( nSrf, nRibsPathGrp)
bOk = ( EgtSurfFrOffset( nSrfId, - dOffs + 0.05) and EgtSurfFrChunkCount( nSrfId) > 0)
end
-- se non ho una superficie errore ed elimino il gruppo dei setti
-- se non ho una superficie errore ed elimino il gruppo delle costolature
if not bOk then
EgtErase( nSettiPathGrp)
EgtOutLog( 'Error on Offset (Setti) (layer '..tostring( nIdx)..') - CalcPaths')
EgtErase( nRibsPathGrp)
EgtOutLog( 'Error on Offset (Ribs) (layer '..tostring( nIdx)..') - CalcPaths')
end
end
@@ -287,9 +288,9 @@ function CalcPaths.Exec( nPartId, nStmId)
nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL
end
-- sistemo eventuali setti
if nSettiGrp then
CalcSettiPaths( vLayIds[nIdx], nSettiGrp, LayerParams, nStmId)
-- sistemo eventuali costolature
if nRibsGrp then
CalcRibsPaths( vLayIds[nIdx], nRibsGrp, LayerParams, nStmId)
end
if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then