3dPrinting :

- riorganizzazione
- correzioni nel collegamento e nel riordino dei setti.
This commit is contained in:
SaraP
2022-06-29 11:34:46 +02:00
parent b9f1922969
commit 37dd22aa3e
13 changed files with 487 additions and 399 deletions
+125 -97
View File
@@ -12,40 +12,42 @@ EgtOutLog( ' CalcToolPath started', 1)
-- Dati
local AMD = require( 'AddManData')
---------------------------------------------------------------------
local s_nPartId
---------------------------------------------------------------------
local function GetLayerParamsForToolPathCalc()
local nParamsGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, PARAMS_GRP)
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')
LayerParams.dLinkParam = EgtGetInfo( nParamsGrp, KEY_LINK_PARAM, 'd')
LayerParams.nLeadInType = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_TYPE, 'i')
LayerParams.dLeadInTangDist = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_TANG_DIST, 'd')
LayerParams.dLeadInOrthoDist = EgtGetInfo( nParamsGrp, KEY_LEAD_IN_ORTHO_DIST, 'd')
LayerParams.nLeadOutType = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_TYPE, 'i')
LayerParams.dLeadOutTangDist = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_TANG_DIST, 'd')
LayerParams.dLeadOutOrthoDist = EgtGetInfo( nParamsGrp, KEY_LEAD_OUT_ORTHO_DIST, 'd')
LayerParams.dOffsetLP = EgtGetInfo( nParamsGrp, KEY_OFFSET_LEAD_POINT, 'd')
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')
LayerParams.dStrand = EgtGetInfo( s_nPartId, KEY_STRAND, 'd')
LayerParams.dLayHeight = EgtGetInfo( s_nPartId, KEY_SLICE_STEP, 'd')
LayerParams.dOffs = EgtGetInfo( s_nPartId, KEY_OFFSET_SLICE, 'd')
LayerParams.bInvert = ( EgtGetInfo( s_nPartId, KEY_PRINT_DIRECTION, 'i') == PRINT_DIRECTION.CW)
LayerParams.nOrder = EgtGetInfo( s_nPartId, KEY_PRINT_ORDER, 'i')
LayerParams.nLinkType = EgtGetInfo( s_nPartId, KEY_LINK_TYPE, 'i')
LayerParams.dLinkParam = EgtGetInfo( s_nPartId, KEY_LINK_PARAM, 'd')
LayerParams.nLeadInType = EgtGetInfo( s_nPartId, KEY_LEAD_IN_TYPE, 'i')
LayerParams.dLeadInTangDist = EgtGetInfo( s_nPartId, KEY_LEAD_IN_TANG_DIST, 'd')
LayerParams.dLeadInOrthoDist = EgtGetInfo( s_nPartId, KEY_LEAD_IN_ORTHO_DIST, 'd')
LayerParams.nLeadOutType = EgtGetInfo( s_nPartId, KEY_LEAD_OUT_TYPE, 'i')
LayerParams.dLeadOutTangDist = EgtGetInfo( s_nPartId, KEY_LEAD_OUT_TANG_DIST, 'd')
LayerParams.dLeadOutOrthoDist = EgtGetInfo( s_nPartId, KEY_LEAD_OUT_ORTHO_DIST, 'd')
LayerParams.dOffsetLP = EgtGetInfo( s_nPartId, KEY_OFFSET_LEAD_POINT, 'd')
LayerParams.dSPOffs = EgtGetInfo( s_nPartId, KEY_SP_OFFSET_ON_SLICE, 'd')
LayerParams.dCoastingLen = EgtGetInfo( s_nPartId, KEY_COASTING_LEN, 'd')
LayerParams.dWipeLen = EgtGetInfo( s_nPartId, KEY_WIPE_LEN, 'd')
LayerParams.vtSlicing = EgtGetInfo( s_nPartId, KEY_SLICING_DIR, 'v')
LayerParams.dTDiam = EgtGetInfo( s_nPartId, KEY_TOOL_DIAM, 'd')
-- Parametri setti
LayerParams.nSettiShellsNbr = EgtGetInfo( nParamsGrp, KEY_SETTI_SHELLS_NBR, 'i')
LayerParams.bSettiLink = EgtGetInfo( nParamsGrp, KEY_SETTI_LINK, 'b')
LayerParams.bSettiInvert = EgtGetInfo( nParamsGrp, KEY_SETTI_INVERT, 'b')
LayerParams.bSettiLIInvert = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_IN_INVERT, 'b')
LayerParams.dSettiLILen = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_IN_LEN, 'd')
LayerParams.bSettiLOInvert = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_INVERT, 'b')
LayerParams.dSettiLOLen = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_LEN, 'd')
LayerParams.dSettiLOWipeTang = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_WIPE1, 'd')
LayerParams.dSettiLOWipe = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_WIPE2, 'd')
LayerParams.dSettiLOWipeAng = EgtGetInfo( nParamsGrp, KEY_SETTI_LEAD_OUT_WIPE_DIR, 'd')
LayerParams.nSettiShellsNbr = EgtGetInfo( s_nPartId, KEY_SETTI_SHELLS_NBR, 'i')
LayerParams.bSettiLink = EgtGetInfo( s_nPartId, KEY_SETTI_LINK, 'b')
LayerParams.bSettiInvert = EgtGetInfo( s_nPartId, KEY_SETTI_INVERT, 'b')
LayerParams.bSettiLIInvert = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_IN_INVERT, 'b')
LayerParams.dSettiLILen = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_IN_LEN, 'd')
LayerParams.bSettiLOInvert = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_INVERT, 'b')
LayerParams.dSettiLOLen = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_LEN, 'd')
LayerParams.dSettiLOWipeTang = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_WIPE1, 'd')
LayerParams.dSettiLOWipe = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_WIPE2, 'd')
LayerParams.dSettiLOWipeAng = EgtGetInfo( s_nPartId, KEY_SETTI_LEAD_OUT_WIPE_DIR, 'd')
return LayerParams
end
@@ -170,53 +172,46 @@ local function AddRetractionOnLastCrv( nTpathGrpId, LayerParams)
end
--------------------------------------------------------------------
local function CalcSettiLink( nSettiGrp, nLoopGrp, LayerParams, nTpathGrpId)
local function CalcSettiLink( ptS, ptE, nCurr, nLoopGrp)
local nCrvId = EgtGetFirstInGroup( nLoopGrp)
local nCurr = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
while nCurr do
local nNext = EgtGetNextName( nCurr, SETTI_CRV .. '*')
if nNext then
local ptS = EgtEP( nCurr)
local ptE = EgtSP( nNext)
local dParS = EgtCurveParamAtPoint( nCrvId, ptS)
local dParE = EgtCurveParamAtPoint( nCrvId, ptE)
local dParS = EgtCurveParamAtPoint( nCrvId, ptS)
local dParE = EgtCurveParamAtPoint( nCrvId, ptE)
if dParE then
-- verifico i due percorsi ( dParS->dParE e dParE->dParS)
local nCopyId1 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER)
local nCopyId2 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER)
EgtTrimCurveStartEndAtParam( nCopyId1, dParS, dParE)
EgtTrimCurveStartEndAtParam( nCopyId2, dParE, dParS)
EgtInvertCurve( nCopyId2)
local dLen1 = EgtCurveLength( nCopyId1)
local dLen2 = EgtCurveLength( nCopyId2)
if dLen1 < dLen2 then
EgtErase( nCopyId2)
EgtSetInfo( nCopyId1, KEY_TYPE, TYPE.SETTO)
else
EgtErase( nCopyId1)
EgtSetInfo( nCopyId2, KEY_TYPE, TYPE.SETTO)
end
end
if dParS and dParE then
-- verifico i due percorsi ( dParS->dParE e dParE->dParS)
local nCopyId1 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER)
local nCopyId2 = EgtCopyGlob( nCrvId, nCurr, GDB_IN.AFTER)
EgtTrimCurveStartEndAtParam( nCopyId1, dParS, dParE)
EgtTrimCurveStartEndAtParam( nCopyId2, dParE, dParS)
EgtInvertCurve( nCopyId2)
local dLen1 = EgtCurveLength( nCopyId1)
local dLen2 = EgtCurveLength( nCopyId2)
if dLen1 < dLen2 then
EgtErase( nCopyId2)
EgtSetInfo( nCopyId1, KEY_TYPE, TYPE.SETTO)
else
EgtErase( nCopyId1)
EgtSetInfo( nCopyId2, KEY_TYPE, TYPE.SETTO)
end
-- passo alla successiva
nCurr = nNext
end
end
--------------------------------------------------------------------
local function AddSettiLeadIn( nCrv, nLoopsGrp, dLeadInLen, bInvert)
if dLeadInLen < GEO.EPS_SMALL then return end
-- recupero la curva di offset
local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp)
local nCopyOffs = EgtCopyGlob( nCrvOffs, nCrv, GDB_IN.BEFORE)
local ptS = EgtSP( nCrv)
local dParS = EgtCurveParamAtPoint( nCrvOffs, ptS)
if not dParS then return end
local nCopyOffs = EgtCopyGlob( nCrvOffs, nCrv, GDB_IN.BEFORE)
EgtChangeClosedCurveStartPoint( nCopyOffs, ptS)
if bInvert then
EgtInvertCurve( nCopyOffs)
@@ -233,7 +228,9 @@ local function AddSettiLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams, bInvert
-- recupero la curva di offset
local nCrvOffs = EgtGetFirstInGroup( nLoopsGrp)
local ptE = EgtEP( nCrv)
local vtE = EgtUV( nCrvOffs, EgtCurveParamAtPoint( nCrvOffs, ptE), 1)
local dParE = EgtCurveParamAtPoint( nCrvOffs, ptE)
if not dParE then return end
local vtE = EgtUV( nCrvOffs, dParE, 1)
if bInvert then vtE = - vtE end
local nCrvLO
local nWipe
@@ -259,7 +256,7 @@ local function AddSettiLeadOut( nCrv, nTPathGrp, nLoopsGrp, LayerParams, bInvert
if bInvert then
EgtInvertCurve( nWipe)
end
EgtTrimCurveEndAtLen( nWipe, LayerParams.dSettiLOWipeTang)
EgtTrimCurveEndAtLen( nWipe, LayerParams.dSettiLOWipeTang)
-- aggiorno ptE e vtE
ptE = EgtEP( nWipe)
vtE = EgtEV( nWipe)
@@ -289,7 +286,7 @@ end
---------------------------------------------------------------------
local function CalcSettiToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ)
local nSettiGrp = EgtGetFirstNameInGroup( nCrvGrp, SETTI_GRP)
-- aggiungo i setti nel toolpath
local vEntIds = EgtGetNameInGroup( nSettiGrp, SETTI_CRV .. '*')
@@ -301,22 +298,9 @@ local function CalcSettiToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ)
-- mi sposto dell'altezza layer
EgtMove( nNewEntId, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
EgtModifyCurveExtrusion( nNewEntId, LayerParams.vtSlicing, GDB_RT.GLOB)
EgtSetColor( nNewEntId, EgtStdColor('GRAY'))
-- eventuale inversione delle curva
if LayerParams.bSettiLink then
-- se link le curve devono avere direzioni alternate
if ( LayerParams.bSettiInvert and i % 2 == 1) or
( not LayerParams.bSettiInvert and i % 2 == 0) then
EgtInvertCurve( nNewEntId)
end
else
if LayerParams.bSettiInvert then
EgtInvertCurve( nNewEntId)
end
end
end
EgtSetColor( nNewEntId, EgtStdColor('GRAY'))
end
-- estraggo i contorni delle superfici di offset
local nLoopGrp = EgtGroup( nSettiGrp)
local nSrfId = EgtGetFirstNameInGroup( nSettiGrp, LAYER_SRF)
@@ -330,29 +314,71 @@ local function CalcSettiToolPath( nCrvGrp, nTpathGrpId, LayerParams, dCorrZ)
EgtMove( j, LayerParams.dLayHeight * LayerParams.vtSlicing, GDB_RT.GLOB)
end
end
end
end
-- collegamenti e leadin/leadout
-- orientamento delle curve
local nInd = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
local bInvert = LayerParams.bSettiInvert
while nInd do
local sName = EgtGetName( nInd)
-- considero tutte le passate relative al setto corrente
local vIds = EgtGetNameInGroup( nTpathGrpId, sName)
for i = 1, #vIds do
if ( bInvert and i % 2 == 1) or ( not bInvert and i % 2 == 0) then
EgtInvertCurve( vIds[i])
end
end
-- passo al gruppo di setti successivo
nInd = EgtGetNextName( vIds[#vIds], SETTI_CRV .. '*')
-- aggiorno bInvert per il gruppo successivo
if LayerParams.bSettiLink and LayerParams.nSettiShellsNbr % 2 == 1 then
bInvert = not bInvert
end
end
-- collegamenti
local vSettiIds = EgtGetNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
for i = 1, #vSettiIds - 1 do
local sNameCurr = EgtGetName( vSettiIds[i])
local sNameNext = EgtGetName( vSettiIds[i + 1])
local ptS = EgtEP( vSettiIds[i])
local ptE = EgtSP( vSettiIds[i + 1])
if LayerParams.bSettiLink then
CalcSettiLink( ptS, ptE, vSettiIds[i], nLoopGrp)
else
-- collego solo le passate dello stesso setto
if sNameCurr == sNameNext then
CalcSettiLink( ptS, ptE, vSettiIds[i], nLoopGrp)
end
end
end
-- leadin/leadout
local bInvertLI = EgtIf( LayerParams.nSettiShellsNbr == 1, LayerParams.bSettiLIInvert, not LayerParams.bSettiInvert)
local bInvertLO = LayerParams.bSettiLOInvert
if LayerParams.bSettiLink then
-- collego i setti
CalcSettiLink( nSettiGrp, nLoopGrp, LayerParams, nTpathGrpId)
-- aggiungo ingresso e uscita solo sul primo e sull'ultimo setto
local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
local bInvertLI = EgtIf( LayerParams.nSettiShellsNbr == 1, LayerParams.bSettiLIInvert, not LayerParams.bSettiInvert)
local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
if nFirst then AddSettiLeadIn( nFirst, nLoopGrp, LayerParams.dSettiLILen, bInvertLI) end
local nLast = EgtGetLastNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
local bInvertLO = LayerParams.bSettiLOInvert
if LayerParams.nSettiShellsNbr > 1 then
bInvertLO = EgtIf( #vEntIds % 2 == 0, not bInvertLI, bInvertLI)
end
if nLast then AddSettiLeadOut( nLast, nTpathGrpId, nLoopGrp, LayerParams, bInvertLO) end
elseif LayerParams.nSettiShellsNbr == 1 then
local vNewEntIds = EgtGetNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
for i = 1, #vNewEntIds do
AddSettiLeadIn( vNewEntIds[i], nLoopGrp, LayerParams.dSettiLILen, LayerParams.bSettiLIInvert)
AddSettiLeadOut( vNewEntIds[i], nTpathGrpId, nLoopGrp, LayerParams, LayerParams.bSettiLOInvert)
end
else
local nFirst = EgtGetFirstNameInGroup( nTpathGrpId, SETTI_CRV .. '*')
while nFirst do
local sName = EgtGetName( nFirst)
local vEnt = EgtGetNameInGroup( nTpathGrpId, sName)
AddSettiLeadIn( nFirst, nLoopGrp, LayerParams.dSettiLILen, bInvertLI)
if LayerParams.nSettiShellsNbr > 1 then
bInvertLO = EgtIf( #vEnt % 2 == 0, not bInvertLI, bInvertLI)
end
AddSettiLeadOut( vEnt[#vEnt], nTpathGrpId, nLoopGrp, LayerParams, bInvertLO)
nFirst = EgtGetNextName( vEnt[#vEnt], SETTI_CRV .. '*')
end
end
end
@@ -360,14 +386,16 @@ end
---------------------------------------------------------------------
function CalcToolPath.Exec( nPartId)
s_nPartId = nPartId
-- Verifico il pezzo
if not nPartId then
if not s_nPartId then
EgtOutBox( 'Error missing part', 'ToolPathCalc')
return
end
-- Recupero i layer da processare
local vLayIds = EgtGetNameInGroup( nPartId, SLICE_LAYER.."*")
local vLayIds = EgtGetNameInGroup( s_nPartId, SLICE_LAYER.."*")
if not vLayIds then
EgtOutBox( 'Error missing slices', 'ToolPathCalc')
return