- Aggiunta gestione lead in/lead out

- Aggiunto offset per raccordi
This commit is contained in:
SaraP
2022-04-12 17:42:27 +02:00
parent 124eeecbab
commit a8711e92e7
3 changed files with 118 additions and 4 deletions
+85 -3
View File
@@ -21,9 +21,78 @@ local function GetLayerParamsForToolPathCalc()
LayerParams.nOrder = EgtGetInfo( nParamsGrp, KEY_PRINT_ORDER, 'i')
LayerParams.LinkType = EgtGetInfo( nParamsGrp, KEY_LINK_TYPE, 'i')
LayerParams.LinkParam = EgtGetInfo( nParamsGrp, KEY_LINK_PARAM, 'd')
LayerParams.LinkDist = EgtGetInfo( nParamsGrp, KEY_LINK_DIST, 'd')
LayerParams.LeadInType = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, 'i')
LayerParams.LeadInTangDist = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_TANG_DIST, 'd')
LayerParams.LeadInOrthoDist = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_ORTHO_DIST, 'd')
LayerParams.LeadOutType = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, 'i')
LayerParams.LeadOutTangDist = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_TANG_DIST, 'd')
LayerParams.LeadOutOrthoDist = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_ORTHO_DIST, 'd')
LayerParams.dOffsetLP = EgtGetInfo( nParamsGrp, KEY_OFFSET_LEAD_POINT, 'd')
return LayerParams
end
--------------------------------------------------------------------
local function AddLeadIn( nCrvId, LayerParams, nGrpId)
local ptE = EgtSP( nCrvId)
local vtTang = EgtSV( nCrvId)
local vtOrtho = Vector3d( vtTang)
local dAng = 90
if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INT_EXT_INF) 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.LeadInTangDist * vtTang + LayerParams.LeadInOrthoDist * vtOrtho
local nLeadInCrv = GDB_ID.NULL
if LayerParams.LeadInType == LEAD_TYPE.LINEAR then
nLeadInCrv = EgtLine( nGrpId, ptS, ptE)
elseif LayerParams.LeadInType == LEAD_TYPE.ARC then
local _, _, dAngIni = SphericalFromVector( vtTang)
nLeadInCrv = EgtArc2PD( nGrpId, ptE, ptS, 180 + dAngIni)
EgtInvertCurve( nLeadInCrv)
end
EgtRelocate( nLeadInCrv, nGrpId, GDB_IN.FIRST_SON)
EgtSetInfo( nLeadInCrv, KEY_TYPE, TYPE.LINK)
end
--------------------------------------------------------------------
local function AddLeadOut( nCrvId, LayerParams, nGrpId)
local ptS = EgtEP( nCrvId)
local vtTang = EgtEV( nCrvId)
local vtOrtho = Vector3d( vtTang)
local dAng = - 90
if ( LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.INT_EXT_INF) or
( not LayerParams.bInvert and LayerParams.nOrder == PRINT_ORDER.EXT_INT_INF) then
dAng = 90
end
vtOrtho:rotate( Z_AX(), dAng)
local ptE = ptS + LayerParams.LeadOutTangDist * vtTang + LayerParams.LeadOutOrthoDist * vtOrtho
local nLeadOutCrv = GDB_ID.NULL
if LayerParams.LeadOutType == LEAD_TYPE.LINEAR then
nLeadOutCrv = EgtLine( nGrpId, ptS, ptE)
elseif LayerParams.LeadOutType == LEAD_TYPE.ARC then
local _, _, dAngIni = SphericalFromVector( vtTang)
nLeadOutCrv = EgtArc2PD( nGrpId, ptS, ptE, dAngIni)
end
EgtRelocate( nLeadOutCrv, nGrpId, GDB_IN.LAST_SON)
EgtSetInfo( nLeadOutCrv, KEY_TYPE, TYPE.LINK)
end
---------------------------------------------------------------------
function CalcToolPath.Exec( nPartId)
@@ -71,17 +140,23 @@ function CalcToolPath.Exec( nPartId)
EgtMove( nNewEntId, Vector3d( 0, 0, LayerParams.dLayHeight), GDB_RT.GLOB)
if LayerParams.bInvert then
EgtInvertCurve( nNewEntId)
end
end
nEntId = EgtGetNext( nEntId)
end
-- aggiungo gli opportuni raccordi
local nPrevId = EgtGetFirstInGroup( nTpathGrpId)
local nCurrId = EgtGetNext( nPrevId or GDB_ID.NULL)
local k = 0
while nCurrId do
local nLinkId
EgtTrimCurveEndAtLen( nPrevId, EgtCurveLength( nPrevId) - k * LayerParams.LinkDist)
k = k + 1
EgtChangeClosedCurveStartPoint( nCurrId, EgtEP( nPrevId))
if LayerParams.LinkType == LINK_TYPE.LINEAR then
nLinkId = EgtLine( nTpathGrpId, EgtEP( nPrevId), EgtSP( nCurrId))
else
nLinkId = EgtLine( nTpathGrpId, EgtEP( nPrevId), EgtEP( nCurrId))
else
EgtTrimCurveEndAtLen( nPrevId, EgtCurveLength( nPrevId) - LayerParams.LinkParam / 2)
EgtTrimCurveStartAtLen( nCurrId, LayerParams.LinkParam / 2)
local _, _, dAngIni = SphericalFromVector( EgtEV( nPrevId))
@@ -95,6 +170,13 @@ function CalcToolPath.Exec( nPartId)
nCurrId = EgtGetNext( nCurrId)
end
-- aggiungo leadin/leadout
local nFirstCurve = EgtGetFirstInGroup( nTpathGrpId)
EgtTrimCurveStartAtLen( nFirstCurve, LayerParams.dOffsetLP)
AddLeadIn( nFirstCurve, LayerParams, nTpathGrpId)
local nLastCurve = EgtGetLastInGroup( nTpathGrpId)
EgtTrimCurveEndAtLen( nLastCurve, EgtCurveLength( nLastCurve) - LayerParams.dOffsetLP)
AddLeadOut( nLastCurve, LayerParams, nTpathGrpId)
--passo al gruppo di contorni successivo
nCrvGrpId = EgtGetNextName( nCrvGrpId, CONTOUR_GRP.."*")
end