3dPrinting :
- nel caso multiplanare aggiunto controllo su strand massimo e minimo ( dati letti dal file ini programma).
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user