3dPrinting :
- modifica della lunghezza dei wipe che entrano nella tavola mantenendo la direzione scelta.
This commit is contained in:
+28
-23
@@ -15,7 +15,6 @@ local AMD = require( 'AddManData')
|
||||
---------------------------------------------------------------------
|
||||
local s_nPartId
|
||||
local s_nDefaultWipeAng = -90 -- angolo = 0° per wipe significa che esce ortogonalmente alla direzione del movimento
|
||||
local s_dHMin
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function GetLayerParamsForToolPathCalc()
|
||||
@@ -83,7 +82,7 @@ local function AddZCorrection( b3Box, LayerParams)
|
||||
local dHTool = LayerParams.dTDiam / 2 * dNxy
|
||||
-- altezza disponibile
|
||||
local dHBox = EgtGetInfo( s_nPartId, KEY_BOX_MIN_Z, 'i') or 0
|
||||
local dHDisp = b3Box:getMin():getZ() - dHBox
|
||||
local dHDisp = b3Box:getMin():getZ() - max( dHBox, 0)
|
||||
|
||||
local dCorrZ = max( 0, max( dHStrand, dHTool) - dHDisp)
|
||||
|
||||
@@ -95,21 +94,32 @@ local function AddZCorrection( b3Box, LayerParams)
|
||||
local nFrameId = EgtGetFirstNameInGroup( s_nPartId, LAY_FRAME)
|
||||
EgtMove( nFrameId, - vtMove, GDB_RT.GLOB)
|
||||
|
||||
end
|
||||
|
||||
------------------------------------------------------------------
|
||||
local function FindWipeEndPoint( ptS, vtDir, dLen, vtSlicing)
|
||||
|
||||
local ptE = ptS + vtDir * dLen
|
||||
-- verifico soddisfi altezza minima per non entrare nella tavola
|
||||
local k = 1
|
||||
while ptE:getZ() < s_dHMin + GEO.EPS_SMALL and k < 36 do
|
||||
vtDir:rotate( vtSlicing, 10)
|
||||
ptE = ptS + vtDir * dLen
|
||||
k = k + 1
|
||||
-- correzione per i wipe
|
||||
-- altezza minima necessaria per i wipe
|
||||
local dHMinWipe = LayerParams.dTDiam / 2 * dNxy + max( dHBox, 0)
|
||||
local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*")
|
||||
for i = 1, #vLayIds do
|
||||
local vCrvGrps = EgtGetNameInGroup( vLayIds[i], CONTOUR_GRP.."*")
|
||||
for j = 1, #vCrvGrps do
|
||||
local nTPath = EgtGetFirstNameInGroup( vCrvGrps[j], TOOLPATH_GRP)
|
||||
if nTPath then
|
||||
local vIds = EgtGetAllInGroup( nTPath)
|
||||
for k = 1, #vIds do
|
||||
-- se wipe verifico se ha lunghezza sensata per non finire nella tavola
|
||||
if EgtGetInfo( vIds[k], KEY_TYPE, 'i') == TYPE.WIPE then
|
||||
local dLen = EgtCurveLength( vIds[k])
|
||||
local vtDir = EgtSV( vIds[k], GDB_ID.ROOT)
|
||||
local ptE = EgtEP( vIds[k], GDB_ID.ROOT)
|
||||
if ptE:getZ() < dHMinWipe then
|
||||
-- modifico la lunghezza per non finire nella tavola
|
||||
local dDiffLen = ( dHMinWipe - ptE:getZ()) / vtDir:getZ()
|
||||
EgtTrimCurveEndAtLen( vIds[k], dLen - abs( dDiffLen))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return ptE
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------
|
||||
@@ -452,7 +462,7 @@ local function AddRetraction( nCrvId, vtSlicing, dCoastingLen, dWipeLen, dWipeDi
|
||||
end
|
||||
|
||||
vtDir:rotate( vtSlicing, EgtIf( bChangeSign, - dAng, dAng))
|
||||
local ptE = FindWipeEndPoint( ptS, vtDir, dWipeLen, vtSlicing)
|
||||
local ptE = ptS + vtDir * dWipeLen
|
||||
nWipeId = EgtCurveCompoFromPoints( EgtGetParent( nCoastingId or nCrvId), {ptS, ptE}, GDB_RT.GLOB)
|
||||
EgtModifyCurveExtrusion( nWipeId, vtSlicing, GDB_RT.GLOB)
|
||||
EgtRelocateGlob( nWipeId, nCoastingId or nCrvId, GDB_IN.AFTER)
|
||||
@@ -1663,7 +1673,7 @@ local function AddRibsLeadOut( nCrv, nLoopsGrp, vtSlicing, nGrpTmp, bForceNoSoli
|
||||
local nType = EgtGetInfo( nCrv, KEY_RIBS_TYPE, 'i')
|
||||
if nType == RIB_TYPE.EXTERNAL then dAng = - dAng end
|
||||
vtE:rotate( vtSlicing, EgtIf( bInvert, - dAng, dAng))
|
||||
local ptFinal = FindWipeEndPoint( ptE, vtE, dRibsLOWipe, vtSlicing)
|
||||
local ptFinal = ptE + vtE * dRibsLOWipe
|
||||
nWipe = EgtCurveCompoFromPoints( EgtGetParent( nCrv), { ptE, ptFinal}, GDB_RT.GLOB)
|
||||
if nWipe then
|
||||
EgtModifyCurveExtrusion( nWipe, vtSlicing, GDB_RT.GLOB)
|
||||
@@ -1993,11 +2003,6 @@ function CalcToolPath.Exec( nPartId)
|
||||
-- recupero i parametri per calcolo dei toolpath
|
||||
local LayerParams = GetLayerParamsForToolPathCalc()
|
||||
|
||||
-- altezza necessaria per correzione wipe
|
||||
local dNxy = sqrt( LayerParams.vtSlicing:getX() * LayerParams.vtSlicing:getX() + LayerParams.vtSlicing:getY() * LayerParams.vtSlicing:getY())
|
||||
local dHBox = EgtGetInfo( s_nPartId, KEY_BOX_MIN_Z, 'i') or 0
|
||||
s_dHMin = LayerParams.dTDiam / 2 * dNxy + dHBox
|
||||
|
||||
-- caso spiral vase
|
||||
if LayerParams.bSpiralVase then
|
||||
return SpiralVase( vLayIds, LayerParams)
|
||||
|
||||
Reference in New Issue
Block a user