3dPrinting :

- nel caso multiplanare aggiunto controllo su strand massimo e minimo ( dati letti dal file ini programma).
This commit is contained in:
SaraP
2026-02-18 11:14:42 +01:00
parent 415eb4d32a
commit dd2e8f357a
2 changed files with 77 additions and 6 deletions
+3
View File
@@ -85,6 +85,8 @@ KEY_WIPE_LEN = "WipeLen"
KEY_WIPE_DIR = "WipeDir"
KEY_WIPE_FEEDPU = "WipeFeedPu"
KEY_TOOL_DIAM = "ToolDiam"
KEY_MAX_STRANDH_FACTOR = 'MaxStrandHFactor'
KEY_MIN_STRANDH_FACTOR = 'MinStrandHFactor'
-- Solid Fill
KEY_FLOOR_NBR = "FloorCount"
@@ -214,6 +216,7 @@ KEY_CRV_OFFSET = "CurveOffset"
KEY_ORIG_REF = "Orig"
KEY_WIPE_ON_CRV = "WipeOnCrv"
KEY_FEED_COEFF = 'FeedCoeff'
KEY_ENTITY_NAME = 'EntityName'
SLICING_TYPE = {
VERTICAL = 1,
+74 -6
View File
@@ -306,7 +306,7 @@ local function SliceStm( vIds, nLayId, vtSlicing, ptSlicing, nType, sName, sName
end
-- rinomino le curve, correggo di DeltaZ e assegno parametri
for nId = nChainId, nChainId + nCnt - 1 do
EgtSetName( nId, sName .. tostring( i))
EgtSetName( nId, sName .. EgtNumToString( i))
EgtMove( nId, - ( dDeltaZ + dCorr) * vtSlicing)
EgtSetInfo( nId, KEY_ORIGINAL_SURF, vIds[i])
if tabParams then
@@ -432,7 +432,7 @@ local function SlicingInfill( nLay, sName, sNameGrp)
-- sistemo i nomi delle curve
local vInfillCrvs = EgtGetAllInGroup( nResultLay)
for j = 1, #vInfillCrvs do
EgtSetName( vInfillCrvs[j], sName .. tostring(j))
EgtSetName( vInfillCrvs[j], sName .. EgtNumToString(j))
end
end
@@ -749,14 +749,14 @@ local function PrepareAuxSolidsInfill( nSolidsLay, vtSlicing)
-- creo gruppo associato
local nInfillGrp = EgtGroup( s_nPartId)
EgtSetName( nInfillGrp, AUX_SOLIDS_INFILL_GRP .. tostring( vIds[i]))
EgtSetName( nInfillGrp, AUX_SOLIDS_INFILL_GRP .. EgtNumToString( vIds[i]))
EgtSetStatus( nInfillGrp, GDB_ST.OFF)
-- calcolo infill
CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, dGridOverlap, vIds[i], 0, dStrand, vtSlicing)
-- aggiungo allo slicing
local sName = AUX_SOLIDS_INFILL_CRV .. tostring( vIds[i]) .. '_'
local sName = AUX_SOLIDS_INFILL_CRV .. EgtNumToString( vIds[i]) .. '_'
SlicingInfill( nInfillGrp, sName, AUX_SOLIDS_GRP)
end
end
@@ -785,7 +785,7 @@ local function ExtractRibsLoops( nRibsGrp, nStmId)
if nCrv then
-- assegno nome che permetta di ricondurli alla superficie da cui derivano
for nId = nCrv, nCrv + nCnt - 1 do
EgtSetName( nId, SURF_LOOP .. tostring( vIds[i]))
EgtSetName( nId, SURF_LOOP .. EgtNumToString( vIds[i]))
end
end
end
@@ -826,7 +826,7 @@ local function SlicingNoSolid( nRibsLay, nSlicingType, dMaxH, dSliceStep, vSlici
for i = 1, #vSlicingVal do
-- creo layer e gruppo dei contorni
local nLayId = EgtGroup( s_nPartId)
EgtSetName( nLayId, SLICE_LAYER .. tostring( i))
EgtSetName( nLayId, SLICE_LAYER .. EgtNumToString( i))
EgtSetInfo( nLayId, KEY_SLICE_NBR, i)
local nCrvLayId = EgtGroup( nLayId)
EgtSetName( nCrvLayId, CONTOUR_GRP .. EgtNumToString( 0))
@@ -903,6 +903,67 @@ local function MultiPlanarSlicing( nStmId, dMaxH, vSlicingDir, vSlicingPnt)
return nFirstGrpId, nCnt
end
---------------------------------------------------------------------
local function VerifyMultiPlanarStrand( vLayers)
-- recupero i valori di strand massimo e minimo dal file ini
local sIniFile = EgtGetIniFile()
local dMaxStrandFactor = EgtGetNumberFromIni( '3dPrinting', KEY_MAX_STRANDH_FACTOR, 2, sIniFile)
local dMinStrandFactor = EgtGetNumberFromIni( '3dPrinting', KEY_MIN_STRANDH_FACTOR, 0.5, sIniFile)
local dSliceStep = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd')
local dMaxStrand = dMaxStrandFactor * dSliceStep
local dMinStrand = dMinStrandFactor * dSliceStep
-- ciclo sui piani di slicing calcolati
local vtSlicePrev = EgtGetInfo( vLayers[1], KEY_SLICE_DIR, 'v')
local ptSlicePrev = EgtGetInfo( vLayers[1], KEY_SLICE_POS, 'p') + dSliceStep * vtSlicePrev
for i = 2, #vLayers do
-- recupero il piano corrente
local vtSlice = EgtGetInfo( vLayers[i], KEY_SLICE_DIR, 'v')
local ptSlice = EgtGetInfo( vLayers[i], KEY_SLICE_POS, 'p') + dSliceStep * vtSlice
local dCosAng = vtSlicePrev * vtSlice
-- recupero tutte le curve da verificare :
local vCrvs = {}
-- solido
local vCrvGrps = EgtGetNameInGroup( vLayers[i], CONTOUR_GRP .. '*')
for j = 1, #vCrvGrps do
local vSolidCrvs = EgtGetNameInGroup( vCrvGrps[j], OUTER_CRV)
EgtJoinTables( vCrvs, vSolidCrvs)
end
-- setti
local nRibsGrp = EgtGetFirstNameInGroup( vLayers[i], RIBS_GRP) or GDB_ID.NULL
local vRibsCrv = EgtGetNameInGroup( nRibsGrp, RIBS_CRV .. '*') or {}
EgtJoinTables( vCrvs, vRibsCrv)
-- AuxSolids
local nAuxSolidsGrp = EgtGetFirstNameInGroup( vLayers[i], AUX_SOLIDS_GRP) or GDB_ID.NULL
local vAuxSolidsCrv = EgtGetNameInGroup( nAuxSolidsGrp, AUX_SOLIDS_CRV .. '*') or {}
EgtJoinTables( vCrvs, vAuxSolidsCrv)
-- verifico la distanza dal piano precedente lungo vtSlice
for j = 1, #vCrvs do
local _, dE = EgtCurveDomain( vCrvs[j])
for dU = 0, dE do
local ptCurr = EgtUP( vCrvs[j], dU, GDB_ID.ROOT) + dSliceStep * vtSlice
local dDist = ( ptCurr - ptSlicePrev) * vtSlicePrev / dCosAng
if dDist < dMinStrand - GEO.EPS_SMALL or dDist > dMaxStrand + GEO.EPS_SMALL then
EgtOutLog( 'Error on layer ' .. EgtNumToString( i) .. ' : strand height (' .. EgtNumToString( dDist) .. ') outside valid range (' .. EgtNumToString( dMinStrand) ..
' - ' .. EgtNumToString( dMaxStrand) .. ')')
EgtOutBox( 'Strand height outside valid range', 'Error', 'ERROR')
return false
end
end
end
-- aggiorno per layer successivo
vtSlicePrev = vtSlice
ptSlicePrev = ptSlice
end
return true
end
---------------------------------------------------------------------
local function SlicingWithSolid( nStmId, nSlicingType, dMaxH, vSlicingVal, vSlicingDir)
@@ -1256,6 +1317,13 @@ local function SlicingWithSolid( nStmId, nSlicingType, dMaxH, vSlicingVal, vSlic
end
end
-- se multiplanare verifico strand massimo e minimo
if nSlicingType == SLICING_TYPE.MULTIPLANAR then
if not VerifyMultiPlanarStrand( vLayers) then
return false
end
end
return true
end