3dPrinting :
- slicing a 45° - migliorie varie.
This commit is contained in:
+48
-34
@@ -18,6 +18,7 @@ local function GetLayerParamsForToolPathCalc()
|
||||
local LayerParams = {}
|
||||
LayerParams.dStrand = EgtGetInfo( nParamsGrp, KEY_STRAND, 'd')
|
||||
LayerParams.dLayHeight = EgtGetInfo( nParamsGrp, KEY_SLICE_STEP, 'd')
|
||||
LayerParams.dOffs = EgtGetInfo( nParamsGrp, KEY_OFFSET_SLICE, 'd')
|
||||
LayerParams.bInvert = ( EgtGetInfo( nParamsGrp, KEY_PRINT_DIRECTION, 'i') == PRINT_DIRECTION.CW)
|
||||
LayerParams.nOrder = EgtGetInfo( nParamsGrp, KEY_PRINT_ORDER, 'i')
|
||||
LayerParams.nLinkType = EgtGetInfo( nParamsGrp, KEY_LINK_TYPE, 'i')
|
||||
@@ -32,39 +33,47 @@ local function GetLayerParamsForToolPathCalc()
|
||||
LayerParams.dSPOffs = EgtGetInfo( nParamsGrp, KEY_SP_OFFSET_ON_SLICE, 'd')
|
||||
LayerParams.dCoastingLen = EgtGetInfo( nParamsGrp, KEY_COASTING_LEN, 'd')
|
||||
LayerParams.dWipeLen = EgtGetInfo( nParamsGrp, KEY_WIPE_LEN, 'd')
|
||||
|
||||
LayerParams.vtSlicing = EgtGetInfo( nParamsGrp, KEY_SLICING_DIR, 'v')
|
||||
LayerParams.dTDiam = EgtGetInfo( nParamsGrp, KEY_TOOL_DIAM, 'd')
|
||||
|
||||
return LayerParams
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function ComputeZCorrection( LayerParams)
|
||||
local _, dAng, _ = SphericalFromVector( LayerParams.vtSlicing)
|
||||
-- correzione per l'offset
|
||||
local dCorr1 = LayerParams.dOffs * sin( dAng)
|
||||
-- eventuale correzione per il diametro ugello
|
||||
local dCorr2 = max( LayerParams.dTDiam * 0.5 * sin( dAng) - LayerParams.dLayHeight * cos( dAng) - LayerParams.dStrand * 0.5 * sin( dAng) + 10 * GEO.EPS_SMALL, 0.0)
|
||||
return dCorr1 + dCorr2
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
local function AddLeadIn( nCrvId, LayerParams, nGrpId)
|
||||
|
||||
local ptE = EgtSP( nCrvId)
|
||||
local vtTang = EgtSV( nCrvId)
|
||||
local vtOrtho = Vector3d( vtTang)
|
||||
local dAng = 90
|
||||
local dAng = 90
|
||||
if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INF_INT_EXT) or
|
||||
( not LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.EXT_INT_INF) then
|
||||
dAng = - 90
|
||||
end
|
||||
|
||||
vtOrtho:rotate( Z_AX(), dAng)
|
||||
local ptS = ptE - LayerParams.dLeadInTangDist * vtTang + LayerParams.dLeadInOrthoDist * vtOrtho
|
||||
-- impongo che la coordinata z dei due punti sia la stessa
|
||||
ptS = Point3d( ptS:getX(), ptS:getY(), ptE:getZ())
|
||||
vtOrtho:rotate( LayerParams.vtSlicing, dAng)
|
||||
local ptS = ptE - LayerParams.dLeadInTangDist * vtTang + LayerParams.dLeadInOrthoDist * vtOrtho
|
||||
|
||||
local nLeadInCrv = GDB_ID.NULL
|
||||
if LayerParams.nLeadInType == LEAD_TYPE.LINEAR then
|
||||
nLeadInCrv = EgtLine( nGrpId, ptS, ptE)
|
||||
nLeadInCrv = EgtCurveCompoFromPoints( nGrpId, {ptS, ptE})
|
||||
elseif LayerParams.nLeadInType == LEAD_TYPE.ARC then
|
||||
local _, _, dAngIni = SphericalFromVector( vtTang)
|
||||
nLeadInCrv = EgtArc2PD( nGrpId, ptE, ptS, 180 + dAngIni)
|
||||
nLeadInCrv = EgtArc2PV( nGrpId, ptE, ptS, -vtTang)
|
||||
EgtInvertCurve( nLeadInCrv)
|
||||
end
|
||||
EgtRelocate( nLeadInCrv, nGrpId, GDB_IN.FIRST_SON)
|
||||
EgtModifyCurveExtrusion( nLeadInCrv, Z_AX(), GDB_RT.GLOB)
|
||||
EgtModifyCurveExtrusion( nLeadInCrv, LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
EgtSetInfo( nLeadInCrv, KEY_TYPE, TYPE.LINK)
|
||||
EgtSetColor( nLeadInCrv, EgtStdColor('GRAY'))
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
@@ -78,23 +87,19 @@ local function AddLeadOut( nCrvId, LayerParams, nGrpId)
|
||||
( not LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.EXT_INT_INF) then
|
||||
dAng = 90
|
||||
end
|
||||
|
||||
vtOrtho:rotate( Z_AX(), dAng)
|
||||
|
||||
vtOrtho:rotate( LayerParams.vtSlicing, dAng)
|
||||
local ptE = ptS + LayerParams.dLeadOutTangDist * vtTang + LayerParams.dLeadOutOrthoDist * vtOrtho
|
||||
-- impongo che la coordinata z dei due punti sia la stessa
|
||||
ptE = Point3d( ptE:getX(), ptE:getY(), ptS:getZ())
|
||||
|
||||
local nLeadOutCrv = GDB_ID.NULL
|
||||
if LayerParams.nLeadOutType == LEAD_TYPE.LINEAR then
|
||||
nLeadOutCrv = EgtLine( nGrpId, ptS, ptE)
|
||||
nLeadOutCrv = EgtCurveCompoFromPoints( nGrpId, {ptS, ptE})
|
||||
elseif LayerParams.nLeadOutType == LEAD_TYPE.ARC then
|
||||
local _, _, dAngIni = SphericalFromVector( vtTang)
|
||||
nLeadOutCrv = EgtArc2PD( nGrpId, ptS, ptE, dAngIni)
|
||||
nLeadOutCrv = EgtArc2PV( nGrpId, ptS, ptE, vtTang)
|
||||
end
|
||||
EgtRelocate( nLeadOutCrv, nGrpId, GDB_IN.LAST_SON)
|
||||
EgtModifyCurveExtrusion( nLeadOutCrv, Z_AX(), GDB_RT.GLOB)
|
||||
EgtModifyCurveExtrusion( nLeadOutCrv, LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
EgtSetInfo( nLeadOutCrv, KEY_TYPE, TYPE.LINK)
|
||||
EgtSetColor( nLeadOutCrv, EgtStdColor('GRAY'))
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------
|
||||
@@ -134,7 +139,7 @@ end
|
||||
--------------------------------------------------------------------
|
||||
local function AddRetractionOnLastCrv( nTpathGrpId, LayerParams)
|
||||
|
||||
local nCrvId = EgtGetLastNameInGroup( nTpathGrpId, SHELL_CRV .. "*")
|
||||
local nCrvId = EgtGetLastNameInGroup( nTpathGrpId, SHELL_CRV .. "*")
|
||||
if LayerParams.nLeadOutType == LEAD_TYPE.NONE then
|
||||
AddRetraction( nCrvId, LayerParams.dCoastingLen, LayerParams.dWipeLen)
|
||||
else
|
||||
@@ -169,10 +174,12 @@ function CalcToolPath.Exec( nPartId)
|
||||
return
|
||||
end
|
||||
|
||||
-- recupero i parametri per calcolo dei toolpath
|
||||
local LayerParams = GetLayerParamsForToolPathCalc()
|
||||
|
||||
-- Ciclo sui layer
|
||||
for nIdx = 1, #vLayIds do
|
||||
-- recupero i parametri relativi al layer
|
||||
local LayerParams = GetLayerParamsForToolPathCalc()
|
||||
|
||||
-- scorro tutti i gruppi di contorni
|
||||
local nCrvGrpId = EgtGetFirstNameInGroup( vLayIds[ nIdx], CONTOUR_GRP.."*")
|
||||
while nCrvGrpId do
|
||||
@@ -197,11 +204,15 @@ function CalcToolPath.Exec( nPartId)
|
||||
local nEntId = EgtGetFirstInGroup( nPathGrpId)
|
||||
while nEntId do
|
||||
local nNewEntId = EgtCopyGlob( nEntId, nTpathGrpId, EgtIf( LayerParams.nOrder == PRINT_ORDER.INF_INT_EXT, GDB_IN.FIRST_SON, GDB_IN.LAST_SON))
|
||||
EgtMove( nNewEntId, Vector3d( 0, 0, LayerParams.dLayHeight), GDB_RT.GLOB)
|
||||
-- correggo posizione in Z ( per essere sicuri di appoggiare sul piano)
|
||||
local dCorr = ComputeZCorrection( LayerParams)
|
||||
EgtMove( nNewEntId, dCorr * Z_AX(), GDB_RT.GLOB)
|
||||
-- mi sposto dell'altezza layer
|
||||
EgtMove( nNewEntId, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
if LayerParams.bInvert then
|
||||
EgtInvertCurve( nNewEntId)
|
||||
end
|
||||
EgtModifyCurveExtrusion( nNewEntId, Z_AX(), GDB_RT.GLOB)
|
||||
EgtModifyCurveExtrusion( nNewEntId, LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
EgtSetColor( nNewEntId, EgtStdColor('GRAY'))
|
||||
nEntId = EgtGetNext( nEntId)
|
||||
end
|
||||
@@ -240,17 +251,20 @@ function CalcToolPath.Exec( nPartId)
|
||||
EgtTrimCurveEndAtLen( nPrevId, EgtCurveLength( nPrevId) - LayerParams.dLinkParam / 2)
|
||||
EgtTrimCurveStartAtLen( nCurrId, LayerParams.dLinkParam / 2)
|
||||
if LayerParams.nLinkType == LINK_TYPE.LINEAR then
|
||||
nLinkId = EgtLine( nTpathGrpId, EgtEP( nPrevId), EgtSP( nCurrId))
|
||||
nLinkId = EgtCurveCompoFromPoints( nTpathGrpId, {EgtEP( nPrevId), EgtSP( nCurrId)})
|
||||
elseif LayerParams.nLinkType == LINK_TYPE.BIARC then
|
||||
local _, _, dAngIni = SphericalFromVector( EgtEV( nPrevId))
|
||||
local _, _, dAngFin = SphericalFromVector( EgtSV( nCurrId))
|
||||
nLinkId = EgtBiArc( nTpathGrpId, EgtEP( nPrevId), EgtSP( nCurrId), dAngIni, dAngFin, 0.5)
|
||||
local frLoc = Frame3d( ORIG(), LayerParams.vtSlicing)
|
||||
local nGrpTmp = EgtGroup( nTpathGrpId, frLoc)
|
||||
local _, _, dAngIni = SphericalFromVector( EgtEV( nPrevId, nGrpTmp))
|
||||
local _, _, dAngFin = SphericalFromVector( EgtSV( nCurrId, nGrpTmp))
|
||||
nLinkId = EgtBiArc( nGrpTmp, EgtEP( nPrevId, nGrpTmp), EgtSP( nCurrId, nGrpTmp), dAngIni, dAngFin, 0.5)
|
||||
EgtRelocateGlob( nLinkId, nTpathGrpId, GDB_IN.LAST_SON)
|
||||
EgtErase( nGrpTmp)
|
||||
end
|
||||
|
||||
if nLinkId then
|
||||
EgtRelocate( nLinkId, nCurrId, GDB_IN.BEFORE)
|
||||
EgtSetColor( nLinkId, EgtStdColor('GRAY'))
|
||||
EgtModifyCurveExtrusion( nLinkId, Z_AX(), GDB_RT.GLOB)
|
||||
EgtRelocate( nLinkId, nCurrId, GDB_IN.BEFORE)
|
||||
EgtModifyCurveExtrusion( nLinkId, LayerParams.vtSlicing, GDB_RT.GLOB)
|
||||
EgtSetInfo( nLinkId, KEY_TYPE, TYPE.LINK)
|
||||
end
|
||||
end
|
||||
@@ -277,7 +291,7 @@ function CalcToolPath.Exec( nPartId)
|
||||
local nId = EgtGetFirstNameInGroup( nTpathGrpId, SHELL_CRV .. "*")
|
||||
local nFirstId = nId
|
||||
local nLastId = EgtGetLastNameInGroup( nTpathGrpId, SHELL_CRV .. "*")
|
||||
while nId do
|
||||
while nId do
|
||||
if nId == nLastId then
|
||||
AddRetractionOnLastCrv( nTpathGrpId, LayerParams)
|
||||
else
|
||||
@@ -292,7 +306,7 @@ function CalcToolPath.Exec( nPartId)
|
||||
end
|
||||
end
|
||||
end
|
||||
nId = EgtGetNextName( nId, SHELL_CRV .. "*")
|
||||
nId = EgtGetNextName( nId, SHELL_CRV .. "*")
|
||||
end
|
||||
|
||||
--passo al gruppo di contorni successivo
|
||||
|
||||
Reference in New Issue
Block a user