3dPrinting :
- modifiche al calcolo dei solidi.
This commit is contained in:
+94
-86
@@ -12,19 +12,14 @@ EgtOutLog( ' RunCalcSolids started', 1)
|
||||
-- Dati
|
||||
local AMD = require( 'AddManData')
|
||||
|
||||
-- PROG_PARTID = 1
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local s_nPartId
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetLayerParamsForSolidCalc()
|
||||
local function GetLayerParamsForSolidCalc( nPartId)
|
||||
local LayerParams = {}
|
||||
LayerParams.bInvert = EgtGetInfo( s_nPartId, KEY_PRINT_DIRECTION, 'b')
|
||||
LayerParams.dLayHeight = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd')
|
||||
LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd')
|
||||
LayerParams.nOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'i')
|
||||
LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v')
|
||||
LayerParams.bInvert = EgtGetInfo( nPartId, KEY_PRINT_DIRECTION, 'b')
|
||||
LayerParams.dLayHeight = EgtGetInfo( nPartId, KEY_SLICE_STEP, 'd')
|
||||
LayerParams.dStrand = EgtGetInfo( nPartId, KEY_STRAND, 'd')
|
||||
LayerParams.nOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i')
|
||||
LayerParams.vtSlicing = EgtGetInfo( nPartId, KEY_SLICING_DIR, 'v')
|
||||
return LayerParams
|
||||
end
|
||||
|
||||
@@ -205,89 +200,102 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function RunCalcSolids.Exec( nPartId)
|
||||
function RunCalcSolids.Exec()
|
||||
|
||||
s_nPartId = nPartId or PROG_PARTID
|
||||
if not s_nPartId then
|
||||
EgtOutBox( 'No part for solid calc', 'Error', 'ERROR')
|
||||
return
|
||||
end
|
||||
|
||||
-- recupero i suoi slice
|
||||
local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER .. '*')
|
||||
if not vLayIds then
|
||||
EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR')
|
||||
return
|
||||
end
|
||||
|
||||
EgtSetInfo( s_nPartId, KEY_HAS_SOLIDS, 1)
|
||||
|
||||
local vErr = {}
|
||||
-- recupero i parametri necessari al calcolo dei solidi
|
||||
local LayerParams = GetLayerParamsForSolidCalc()
|
||||
|
||||
for nIdx = 1, #vLayIds do
|
||||
local nPartIndex = 1
|
||||
local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
|
||||
while nPartId do
|
||||
|
||||
-- scorro tutti i gruppi di contorni
|
||||
local nCrvGrpId = EgtGetFirstNameInGroup( vLayIds[ nIdx], CONTOUR_GRP.."*") or GDB_ID.NULL
|
||||
while nCrvGrpId ~= GDB_ID.NULL do
|
||||
|
||||
-- recupero il gruppo dei percorsi utensile
|
||||
local nTPathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP) or GDB_ID.NULL
|
||||
if nTPathGrpId == GDB_ID.NULL then
|
||||
EgtOutBox( 'Error no tool paths', 'SolidCalc')
|
||||
return
|
||||
end
|
||||
|
||||
-- recupero il gruppo dei solidi
|
||||
local nSolidGrpId = EgtGetFirstNameInGroup( nCrvGrpId, SOLID_GRP) or GDB_ID.NULL
|
||||
if nSolidGrpId == GDB_ID.NULL then
|
||||
nSolidGrpId = EgtGroup( nCrvGrpId)
|
||||
EgtSetName( nSolidGrpId, SOLID_GRP)
|
||||
else
|
||||
EgtEmptyGroup( nSolidGrpId)
|
||||
end
|
||||
|
||||
-- scorro le curve del percorso utensile
|
||||
local nId = EgtGetFirstInGroup( nTPathGrpId)
|
||||
while nId do
|
||||
local bOk = CreateSolidFromCurve( nId, nSolidGrpId, LayerParams)
|
||||
if not bOk then
|
||||
table.insert( vErr, nIdx)
|
||||
end
|
||||
nId = EgtGetNext( nId)
|
||||
end
|
||||
if EgtGetInfo( nPartId, KEY_PART_ON_TABLE, 'b') then
|
||||
-- verifico se necessario calcolare il solido
|
||||
local bCalcSolid = EgtGetInfo( nPartId, KEY_CALC_SOLIDS, 'b') or false
|
||||
local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false
|
||||
|
||||
-- processo gli eventi
|
||||
if ( nIdx % 20) == 0 then
|
||||
EgtDraw()
|
||||
if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then
|
||||
if bCalcSolid and not bHasSolids then
|
||||
|
||||
-- recupero i suoi slice
|
||||
local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER .. '*')
|
||||
if not vLayIds then
|
||||
EgtOutBox( 'No sliced part in this project!', 'Error', 'ERROR')
|
||||
return
|
||||
end
|
||||
|
||||
EgtSetInfo( nPartId, KEY_HAS_SOLIDS, 1)
|
||||
|
||||
local vErr = {}
|
||||
-- recupero i parametri necessari al calcolo dei solidi
|
||||
local LayerParams = GetLayerParamsForSolidCalc( nPartId)
|
||||
|
||||
for nIdx = 1, #vLayIds do
|
||||
|
||||
-- scorro tutti i gruppi di contorni
|
||||
local nCrvGrpId = EgtGetFirstNameInGroup( vLayIds[ nIdx], CONTOUR_GRP.."*") or GDB_ID.NULL
|
||||
while nCrvGrpId ~= GDB_ID.NULL do
|
||||
|
||||
-- recupero il gruppo dei percorsi utensile
|
||||
local nTPathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP) or GDB_ID.NULL
|
||||
if nTPathGrpId == GDB_ID.NULL then
|
||||
EgtOutBox( 'Error no tool paths', 'SolidCalc')
|
||||
return
|
||||
end
|
||||
|
||||
-- recupero il gruppo dei solidi
|
||||
local nSolidGrpId = EgtGetFirstNameInGroup( nCrvGrpId, SOLID_GRP) or GDB_ID.NULL
|
||||
if nSolidGrpId == GDB_ID.NULL then
|
||||
nSolidGrpId = EgtGroup( nCrvGrpId)
|
||||
EgtSetName( nSolidGrpId, SOLID_GRP)
|
||||
EgtSetLevel( nSolidGrpId, GDB_LV.TEMP)
|
||||
else
|
||||
EgtEmptyGroup( nSolidGrpId)
|
||||
end
|
||||
|
||||
-- scorro le curve del percorso utensile
|
||||
local nId = EgtGetFirstInGroup( nTPathGrpId)
|
||||
while nId do
|
||||
local bOk = CreateSolidFromCurve( nId, nSolidGrpId, LayerParams)
|
||||
if not bOk then
|
||||
table.insert( vErr, nIdx)
|
||||
end
|
||||
nId = EgtGetNext( nId)
|
||||
end
|
||||
|
||||
-- processo gli eventi
|
||||
if ( nIdx % 20) == 0 then
|
||||
EgtDraw()
|
||||
if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
--passo al gruppo di contorni successivo
|
||||
nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL
|
||||
end
|
||||
EgtDraw()
|
||||
if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- eventuale segnalazione errori
|
||||
-- if #vErr > 0 then
|
||||
-- EgtOutBox( 'Error on layers :\n' .. table.concat( vErr, ','), 'SolidCalc')
|
||||
-- end
|
||||
|
||||
for i = 1, #vErr do
|
||||
EgtOutLog( 'Error on solid creation (layer ' .. vErr[i] .. ') - SolidCalc')
|
||||
end
|
||||
|
||||
-- eventuale aggiornamento delle ViewInfo
|
||||
local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS)
|
||||
if nViewId then
|
||||
EgtSetInfo( nViewId, SOLID_GRP, true)
|
||||
end
|
||||
end
|
||||
|
||||
--passo al gruppo di contorni successivo
|
||||
nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*") or GDB_ID.NULL
|
||||
end
|
||||
EgtDraw()
|
||||
if EgtProcessEvents( nIdx / #vLayIds * 100, 0) == 1 then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- eventuale segnalazione errori
|
||||
-- if #vErr > 0 then
|
||||
-- EgtOutBox( 'Error on layers :\n' .. table.concat( vErr, ','), 'SolidCalc')
|
||||
-- end
|
||||
|
||||
for i = 1, #vErr do
|
||||
EgtOutLog( 'Error on solid creation (layer ' .. vErr[i] .. ') - SolidCalc')
|
||||
end
|
||||
|
||||
-- eventuale aggiornamento delle ViewInfo
|
||||
local nViewId = EgtGetFirstNameInGroup( GDB_ID.ROOT, VIEWPARAMS)
|
||||
if nViewId then
|
||||
EgtSetInfo( nViewId, SOLID_GRP, true)
|
||||
|
||||
nPartIndex = nPartIndex + 1
|
||||
nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -85,7 +85,8 @@ function RunShowManager.Exec()
|
||||
-- eventuale calcolo dei solidi
|
||||
local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false
|
||||
if not bHasSolids and bCurrSolid then
|
||||
CSOLIDS.Exec( nPartId)
|
||||
EgtSetInfo( nPartId, KEY_CALC_SOLIDS, true)
|
||||
CSOLIDS.Exec()
|
||||
end
|
||||
|
||||
if bImportedSolid ~= bCurrImportedSolid then
|
||||
|
||||
@@ -98,7 +98,8 @@ function RunSliceAdvancement.Exec()
|
||||
-- eventuale calcolo dei solidi
|
||||
local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false
|
||||
if not bHasSolids then
|
||||
CSOLIDS.Exec( nPartId)
|
||||
EgtSetInfo( nPartId, KEY_CALC_SOLIDS, true)
|
||||
CSOLIDS.Exec()
|
||||
end
|
||||
|
||||
local nPrintOrder = EgtGetInfo( nPartId, KEY_PRINT_ORDER, 'i')
|
||||
|
||||
@@ -25,7 +25,8 @@ function RunSlicePalette.UpdateColors( nPaletteType)
|
||||
-- eventuale calcolo dei solidi
|
||||
local bHasSolids = EgtGetInfo( nPartId, KEY_HAS_SOLIDS, 'b') or false
|
||||
if not bHasSolids then
|
||||
CSOLIDS.Exec( nPartId)
|
||||
EgtSetInfo( nPartId, KEY_CALC_SOLIDS, true)
|
||||
CSOLIDS.Exec()
|
||||
end
|
||||
|
||||
-- ciclo sui layer per dis/attivare il resto
|
||||
|
||||
@@ -36,7 +36,7 @@ local function LoadParams( sFile, nPartId)
|
||||
|
||||
EgtSetInfo( nPartId, KEY_PARAMS, sFile)
|
||||
|
||||
SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_CALC_SOLIDS, '1')
|
||||
SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_CALC_SOLIDS, '0')
|
||||
SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SLICING_45, '0')
|
||||
SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SLICE_STEP, '1.0')
|
||||
SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_STRAND, '6.0')
|
||||
@@ -343,7 +343,7 @@ function RunSlicing.Exec()
|
||||
-- Calcolo dei solidi degli strand a partire dai percorsi di lavoro
|
||||
local bCalcSolids = EgtGetInfo( nPartId, KEY_CALC_SOLIDS, 'b')
|
||||
EgtRemoveInfo( nPartId, KEY_HAS_SOLIDS)
|
||||
if bCalcSolids or bCalcSolids == nil then
|
||||
if bCalcSolids then
|
||||
CSOLIDS.Exec( nPartId)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user