Compare commits

..

3 Commits

Author SHA1 Message Date
SaraP 03c1768afe 3dPrinting 2.5g1 :
- aggiunto numero di passate per Filled Solids.
2023-07-03 10:23:37 +02:00
SaraP ba9470ee88 3dPrinting :
- aggiunto collegamento infill.
2023-06-30 12:52:39 +02:00
SaraP e629f1b12d 3dPrinting 2.5f2 :
- gestione strand variabili per entità.
2023-06-21 09:21:17 +02:00
6 changed files with 1377 additions and 732 deletions
+9 -1
View File
@@ -46,6 +46,7 @@ KEY_SLICING_DIR = "SlicingDir"
KEY_SLICE_STEP = "StrandH"
KEY_SHELLS_NBR = "StrandCount"
KEY_STRAND = "StrandW"
KEY_INNER_STRAND = "InnerStrandW"
KEY_STRAND_OVERLAP = "StrandOverlap"
KEY_OFFSET_SLICE = "Offset"
KEY_SP_OFFSET_ON_SLICE = "StartPointOffsetOnSlice"
@@ -88,8 +89,10 @@ KEY_CEIL_TYPE = "CeilType"
KEY_FILL_TYPE = "FillType"
-- Infill
KEY_INFILL_STRAND = "InfillStrandW"
KEY_INFILL_TYPE = "InfillType"
KEY_INFILL_DENSITY = "InfillDensity"
KEY_INFILL_LINK = "InfillLink"
KEY_INFILL_OVERLAP = "InfillOverlap"
KEY_INFILL_GRID_OVERLAP = "InfillGridOverlap"
KEY_INFILL_DIR = "InfillDirection"
@@ -100,6 +103,7 @@ KEY_INFILL_WIPE = "InfillWipe"
KEY_INFILL_WIPE_DIR = "InfillWipeDir"
-- Ribs
KEY_RIBS_STRAND = "RibsStrandW"
KEY_RIBS_TYPE = "RibsType"
KEY_LIMIT_UNBDD_RIBS = "LimitUnboundedRibsWithSolid"
KEY_RIBS_OVERLAP = "RibsOverlap"
@@ -141,6 +145,8 @@ KEY_EXTRA_SHELL_WIPE = "ExtraShellWipe"
KEY_EXTRA_SHELL_WIPE_DIR = "ExtraShellWipeDir"
-- Solidi ausiliari
KEY_AUX_SOLIDS_STRAND = "AuxSolidsStrandW"
KEY_AUX_SOLIDS_SHELLS_NBR = "AuxSolidsStrandCount"
KEY_AUX_SOLIDS_OVERLAP = "AuxSolidsOverlap"
KEY_AUX_SOLIDS_INFILL = "AuxSolidsInfill"
KEY_AUX_SOLIDS_PRINT_ORDER = "AuxSolidsStrandOrder"
@@ -148,6 +154,7 @@ KEY_AUX_SOLIDS_LINK_TYPE = "AuxSolidsLinkType"
KEY_AUX_SOLIDS_LINK_PARAM = "AuxSolidsLinkParam"
KEY_AUX_SOLIDS_SP_OFFSET = "AuxSolidsStartPointOffsetOnSlice"
KEY_AUX_SOLIDS_LP_OFFSET = "AuxSolidsOffsetLeadPoint"
KEY_AUX_SOLIDS_INFILL_LINK = "AuxSolidsInfillLink"
KEY_AUX_SOLIDS_DENSITY = "AuxSolidsDensity"
KEY_AUX_SOLIDS_DIR = "AuxSolidsDirection"
KEY_AUX_SOLIDS_OFFSET_X = "AuxSolidsOffsetX"
@@ -186,6 +193,7 @@ KEY_ASSOCIATED_P_CRV = "AssociatedPathCrv"
KEY_INTERNAL_SRF_LOOP = "InternalSrfLoop"
KEY_PREV_CRV = "PrevCrv"
KEY_NEXT_CRVS = "NextCrvs"
KEY_CRV_STRAND = "CurveStrand"
SLICING_TYPE = {
VERTICAL = 1,
@@ -231,7 +239,7 @@ PRINT_DIRECTION = {
LINK_TYPE = {
NONE = 1,
LINEAR = 2,
BIARC = 3,
BIARC = 3,
}
LEAD_TYPE = {
+771 -548
View File
File diff suppressed because it is too large Load Diff
+24 -16
View File
@@ -15,6 +15,7 @@ local AMD = require( 'AddManData')
---------------------------------------------------------------------
local s_nPartId
local s_vErr = {}
local s_dStrand
-- costanti
local TOLER = 0.05
@@ -97,6 +98,7 @@ end
local function GetRibParams( nId)
local RibParam = {}
ReadParam( nId, KEY_RIBS_STRAND, 'd', s_dStrand, RibParam)
ReadParam( nId, KEY_RIBS_SHELLS_NBR, 'i', 0, RibParam)
ReadParam( nId, KEY_RIBS_INVERT_DIR, 'b', false, RibParam)
ReadParam( nId, KEY_RIBS_LEAD_IN_INVERT, 'b', false, RibParam)
@@ -106,7 +108,7 @@ local function GetRibParams( nId)
ReadParam( nId, KEY_RIBS_LEAD_OUT_COASTING, 'd', 0, RibParam)
ReadParam( nId, KEY_RIBS_LEAD_OUT_WIPE, 'd', 0, RibParam)
ReadParam( nId, KEY_RIBS_LEAD_OUT_WIPE_DIR, 'd', 0, RibParam)
ReadParam( nId, KEY_RIBS_OVERLAP, 'i', 0, RibParam)
ReadParam( nId, KEY_RIBS_OVERLAP, 'd', 0, RibParam)
ReadParam( nId, KEY_RIBS_LINK, 'b', false, RibParam)
ReadParam( nId, KEY_RIBS_TYPE, 'i', RIB_TYPE.INTERNAL, RibParam)
ReadParam( nId, KEY_RIBS_INVERT_STRAND_ORDER, 'b', false, RibParam)
@@ -130,7 +132,9 @@ end
local function GetAuxSolidsParams( nId)
local AuxSolidsParam = {}
ReadParam( nId, KEY_AUX_SOLIDS_OVERLAP, 'i', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_STRAND, 'd', s_dStrand, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_SHELLS_NBR, 'i', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_OVERLAP, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_INFILL, 'i', FILL_TYPE.NONE, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_PRINT_ORDER, 'i', PRINT_ORDER.EXT_INT, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_LINK_TYPE, 'i', LINK_TYPE.NONE, AuxSolidsParam)
@@ -139,9 +143,10 @@ local function GetAuxSolidsParams( nId)
ReadParam( nId, KEY_AUX_SOLIDS_LP_OFFSET, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_DENSITY, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_DIR, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_INFILL_LINK, 'b', false, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_OFFSET_X, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_OFFSET_Y, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_GRID_OVERLAP, 'i', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_GRID_OVERLAP, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_COASTING_LEN, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_WIPE_LEN, 'd', 0, AuxSolidsParam)
ReadParam( nId, KEY_AUX_SOLIDS_WIPE_DIR, 'd', 0, AuxSolidsParam)
@@ -511,7 +516,7 @@ local function CalcGridFromPattern( nInfillGrp, nStmId, dOffsStm, frRef, vtOffs,
local pt2 = pt1 + dDim2 * Y_AX()
local nCrvBase = EgtCurveCompoFromPoints( nMainGrp, {pt1, pt2})
if not nCrvBase then
-- caso zigzag con nOverlapGrid = 100 ( dDim2 = 0)
-- caso zigzag con dOverlapGrid = 100 ( dDim2 = 0)
local vtDir1 = VectorFromPolar( 1, dAng)
local vtDir2 = VectorFromPolar( 1, 180 - dAng)
pt2 = pt1 + vtDir1 * dDim1
@@ -556,7 +561,7 @@ local function CalcGridFromPattern( nInfillGrp, nStmId, dOffsStm, frRef, vtOffs,
end
--------------------------------------------------------------------
local function CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, nGridOverlap, nStmId, dOffsStm, dStrand, vtSlicing)
local function CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, dGridOverlap, nStmId, dOffsStm, dStrand, vtSlicing)
-- frame locale alla direzione dell'infill
local frLoc = Frame3d( ORIG(), vtSlicing)
@@ -569,10 +574,10 @@ local function CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, nG
local vtOffs = Vector3d( dOffsX, dOffsY, 0)
vtOffs:toLoc( frLoc)
-- eventuale correzione di nGridOverlap
-- eventuale correzione di dGridOverlap
if nType ~= FILL_TYPE.LINES and nType ~= FILL_TYPE.GRID and dDensity > 85 then
EgtOutLog( 'Warning: InfillGridOverlap is ignored due to high infill density - CalcSlices')
nGridOverlap = 0
dGridOverlap = 0
end
-- creo le curve di infill
@@ -583,7 +588,7 @@ local function CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, nG
CalcSimpleGridInfill( nInfillGrp, nStmId, dOffsStm, frLoc, vtOffs, dDist)
elseif nType == FILL_TYPE.ZIG_ZAG_GRID then
local dRealStrand = ( 1 - nGridOverlap / 100) * dStrand
local dRealStrand = ( 1 - dGridOverlap / 100) * dStrand
local dAng = 45
local dDim1 = ( dDist - dStrand) * sqrt(2)
local dDim2 = dRealStrand
@@ -591,7 +596,7 @@ local function CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, nG
CalcGridFromPattern( nInfillGrp, nStmId, dOffsStm, frLoc, vtOffs, dDim1, dDim2, dAng, vSlicesAng, dRealStrand, vtSlicing)
elseif nType == FILL_TYPE.HONEYCOMB or nType == FILL_TYPE.HONEYCOMB_GRID then
local dRealStrand = ( 1 - nGridOverlap / 100) * dStrand
local dRealStrand = ( 1 - dGridOverlap / 100) * dStrand
local dAng = 30
local dDim1 = ( dDist - dStrand) / cos(30)
local dDim2 = dDim1 + sqrt(3) * dRealStrand
@@ -610,14 +615,15 @@ local function PrepareInfill( nStmId, vtSlicing)
if nType == FILL_TYPE.NONE then return end
local dDensity = EgtGetInfo( s_nPartId, KEY_INFILL_DENSITY, 'd') or 0
if dDensity < GEO.EPS_SMALL then return end
dDensity = EgtClamp( dDensity, 0, 90)
-- recupero i parametri per infill
local dDir = EgtGetInfo( s_nPartId, KEY_INFILL_DIR, 'd') or 0
local dOffsX = EgtGetInfo( s_nPartId, KEY_INFILL_OFFSET_X, 'd') or 0
local dOffsY = EgtGetInfo( s_nPartId, KEY_INFILL_OFFSET_Y, 'd') or 0
local nGridOverlap = EgtGetInfo( s_nPartId, KEY_INFILL_GRID_OVERLAP, 'i') or 0
local dGridOverlap = EgtGetInfo( s_nPartId, KEY_INFILL_GRID_OVERLAP, 'd') or 0
local dOffsStm = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd')
local dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd')
local dStrand = EgtGetInfo( s_nPartId, KEY_INFILL_STRAND, 'd') or s_dStrand
-- creo gruppo per infill
local nInfillGrp = EgtGroup( s_nPartId)
@@ -625,7 +631,7 @@ local function PrepareInfill( nStmId, vtSlicing)
EgtSetStatus( nInfillGrp, GDB_ST.OFF)
-- calcolo infill
CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, nGridOverlap, nStmId, dOffsStm, dStrand, vtSlicing)
CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, dGridOverlap, nStmId, dOffsStm, dStrand, vtSlicing)
-- aggiungo allo slicing
SlicingInfill( nInfillGrp, vtSlicing, INFILL_CRV, INFILL_GRP)
@@ -643,13 +649,14 @@ local function PrepareAuxSolidsInfill( nSolidsLay, vtSlicing)
if nType & FILL_CATEGORY.INFILL ~= 0 then
local dDensity = ReadParam( vIds[i], KEY_AUX_SOLIDS_DENSITY, 'd', 0)
if dDensity > GEO.EPS_SMALL then
dDensity = EgtClamp( dDensity, 0, 90)
-- recupero i parametri per infill
local dDir = ReadParam( vIds[i], KEY_AUX_SOLIDS_DIR, 'd', 0)
local dOffsX = ReadParam( vIds[i], KEY_AUX_SOLIDS_OFFSET_X, 'd', 0)
local dOffsY = ReadParam( vIds[i], KEY_AUX_SOLIDS_OFFSET_Y, 'd', 0)
local nGridOverlap = ReadParam( vIds[i], KEY_AUX_SOLIDS_GRID_OVERLAP, 'i', 0)
local dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd')
local dGridOverlap = ReadParam( vIds[i], KEY_AUX_SOLIDS_GRID_OVERLAP, 'd', 0)
local dStrand = ReadParam( vIds[i], KEY_AUX_SOLIDS_STRAND, 'd', s_dStrand)
-- creo gruppo associato
local nInfillGrp = EgtGroup( s_nPartId)
@@ -657,7 +664,7 @@ local function PrepareAuxSolidsInfill( nSolidsLay, vtSlicing)
EgtSetStatus( nInfillGrp, GDB_ST.OFF)
-- calcolo infill
CalcInfill( nInfillGrp, nType, dDensity, dDir, dOffsX, dOffsY, nGridOverlap, vIds[i], 0, dStrand, vtSlicing)
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]) .. '_'
@@ -1104,6 +1111,7 @@ function CalcSlices.Exec( nPartId, nStmId, HMax)
EgtOutLog( 'Warning : SliceStep is 0')
return
end
s_dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd')
local dZmin = b3Box:getMin():getZ()
local dZmax = b3Box:getMax():getZ()
@@ -1113,7 +1121,7 @@ function CalcSlices.Exec( nPartId, nStmId, HMax)
--dZmax = 712
-- Eseguo slicing
local nLayCnt = 1
local nLayCnt = 1
local nRecalc = 0
local dDeltaZStart = 0.2
+563 -156
View File
File diff suppressed because it is too large Load Diff
+9 -10
View File
@@ -20,7 +20,6 @@ local function GetLayerParamsForSolidCalc( nPartId)
local LayerParams = {}
LayerParams.bSpiralVase = EgtGetInfo( nPartId, KEY_SPIRAL_VASE, 'b') or false
LayerParams.dLayHeight = EgtGetInfo( nPartId, KEY_SLICE_STEP, 'd')
LayerParams.dStrand = EgtGetInfo( nPartId, KEY_STRAND, 'd')
LayerParams.vtSlicing = EgtGetInfo( nPartId, KEY_SLICING_DIR, 'v')
return LayerParams
end
@@ -192,7 +191,7 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nLayer)
local nType = EgtGetInfo( nCrvId, KEY_TYPE, 'i')
if nType == TYPE.WIPE then return true end
-- scelta del colore
local Color = EgtStdColor( 'GRAY')
local Color = EgtStdColor( 'GRAY')
if nType == TYPE.OUTER_SHELL or nType == TYPE.EXTRA_OUTER_SHELL then
Color = EgtStdColor( 'TEAL')
elseif nType == TYPE.INNER_SHELL or nType == TYPE.EXTRA_SHELL then
@@ -203,14 +202,13 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nLayer)
Color = EgtStdColor( 'YELLOW')
elseif nType == TYPE.COASTING then
Color = EgtStdColor( 'BLUE')
elseif nType == TYPE.WIPE then
Color = EgtStdColor( 'LIME')
elseif nType == TYPE.RIB then
Color = EgtStdColor( 'OLIVE')
elseif nType == TYPE.AUX_SOLID then
Color = EgtStdColor( 'AQUA')
end
local dStrand = EgtGetInfo( nCrvId, KEY_CRV_STRAND, 'd')
local nCopyId = EgtCopyGlob( nCrvId, nSolidGrp)
local nId = GDB_ID.NULL
local nParts = 1
@@ -230,7 +228,7 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nLayer)
local bOk = true
for nInd = 0, nParts - 1 do
local nGuideId = nId + nInd
local nSrfId = CreateSolid( nGuideId, nSolidGrp, LayerParams, LayerParams.dStrand - 5 * GEO.EPS_SMALL)
local nSrfId = CreateSolid( nGuideId, nSolidGrp, LayerParams, dStrand - 5 * GEO.EPS_SMALL)
if not nSrfId then
EgtOutLog( 'Warning : CreateSolid failed '.. '(layer '..tostring( nLayer)..', curve '..tostring( nCrvId)..')')
-- se non ultima, provo a spostare l'estremità finale
@@ -241,9 +239,9 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nLayer)
local bOk1 = EgtTrimCurveEndAtLen( nCopyId, LEN_TRIM)
local bOk2 = EgtAddCurveCompoCurve( nGuideId, nCopyId)
local bOk3 = EgtTrimCurveStartAtLen( nGuideId + 1, LEN_TRIM)
nSrfId = CreateSolid( nGuideId, nSolidGrp, LayerParams, LayerParams.dStrand - 5 * GEO.EPS_SMALL)
nSrfId = CreateSolid( nGuideId, nSolidGrp, LayerParams, dStrand - 5 * GEO.EPS_SMALL)
if not nSrfId then
nSrfId = CreateSolid( nGuideId, nSolidGrp, LayerParams, LayerParams.dStrand - 50 * GEO.EPS_SMALL)
nSrfId = CreateSolid( nGuideId, nSolidGrp, LayerParams, dStrand - 50 * GEO.EPS_SMALL)
end
end
end
@@ -258,7 +256,7 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nLayer)
if nFirstCrv and nCrvNbr > 1 then
local nSrfIds = {}
for nInd2 = 0, nCrvNbr-1 do
local nSrfId2 = CreateSolid( nFirstCrv + nInd2, nSolidGrp, LayerParams, LayerParams.dStrand - 50 * GEO.EPS_SMALL)
local nSrfId2 = CreateSolid( nFirstCrv + nInd2, nSolidGrp, LayerParams, dStrand - 50 * GEO.EPS_SMALL)
EgtErase( nFirstCrv + nInd2)
if nSrfId2 then
table.insert( nSrfIds, nSrfId2)
@@ -279,6 +277,7 @@ local function CreateSolidFromCurve( nCrvId, nSolidGrp, LayerParams, nLayer)
if nSrfId then
EgtSetColor( nSrfId, Color)
EgtSetInfo( nSrfId, KEY_TYPE, nType)
EgtSetInfo( nSrfId, KEY_SLICE_NBR, nLayer)
else
bOk = false
EgtOutLog( 'Warning : CreateSolid_Sewing failed')
@@ -330,7 +329,7 @@ function RunCalcSolids.Exec()
local nTPathGrpId = EgtGetFirstNameInGroup( nCrvGrpId, TOOLPATH_GRP) or GDB_ID.NULL
if nTPathGrpId == GDB_ID.NULL then
EgtOutBox( 'Error no tool paths', 'SolidCalc')
return
return
end
-- recupero il gruppo dei solidi
+1 -1
View File
@@ -1,4 +1,4 @@
-- Version.lua by Egaltech s.r.l. 2023/02/28
-- Gestione della versione di 3dPrinting
VERSION = '2.5f1'
VERSION = '2.5g1'