diff --git a/LuaLibs/ProcessHeadCut.lua b/LuaLibs/ProcessHeadCut.lua index 85ac1f5..d38e615 100644 --- a/LuaLibs/ProcessHeadCut.lua +++ b/LuaLibs/ProcessHeadCut.lua @@ -159,6 +159,105 @@ local function MakeChamfer( nOriId, Proc, nPhase, nRawId, nPartId, dOvmHead) return true, nil end +--------------------------------------------------------------------- +-- smussi in testa +local function MakeHeadChamfer( idProc, nPartId) + local dDepthHeadChamfer = EgtGetInfo( idProc, 'Q08', 'd') or 0 + -- se non attivo esco subito + if dDepthHeadChamfer < 100 * GEO.EPS_SMALL then + return + end + + -- recupero gruppo per geometria aggiuntiva + local AddGrpId = BL.GetAddGroup( nPartId) + if not AddGrpId then + local sErr = 'Error on process StartFace impossible to find AddGroup' + EgtOutLog( sErr) + return false, sErr + end + + -- recupero la lavorazione + local sMilling = ML.FindMilling( 'Mark') + if not sMilling then + local sErr = 'Error : milling not found in library' + EgtOutLog( sErr) + return false, sErr + end + + local nLoopId, nLoopCnt = EgtExtractSurfTmFacetLoops( idProc, 0, AddGrpId) + if not nLoopId or nLoopCnt > 1 then + local sErr = 'Error MakeHeadChamfer : too many loops' + EgtOutLog( sErr) + return false, sErr + end + + -- setto direzione estrusione corretta + EgtModifyCurveExtrusion( nLoopId, X_AX()) + EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT)) + + local dQ09Value = EgtGetInfo( idProc, 'Q09', 'd') + local bChamferedEdge = dQ09Value > 0 + + local nIdFirstEntity, nEntityCnt = EgtExplodeCurveCompo( nLoopId) + local p3MidPoint = EgtMP( nIdFirstEntity, GDB_ID.GRID) + + for i = 0, nEntityCnt - 1 do + if EgtCurveLength( nIdFirstEntity + i) - 10 < abs( dQ09Value) * 2 then + local sErr = 'Error MakeHeadChamfer : Q09 too high' + EgtOutLog( sErr) + return false, sErr + end + end + + -- creo raccordo o fillet + for i = 0, nEntityCnt - 1 do + local idFirst = nIdFirstEntity + i + local idSecond = EgtIf( i == nEntityCnt - 1, nIdFirstEntity, idFirst + 1) + local ptEndPointFirst = EgtEP( idFirst, GDB_ID.GRID) - ( abs( dQ09Value) * EgtEV( idFirst, GDB_ID.GRID)) + local ptStartPointSecond = EgtSP( idSecond, GDB_ID.GRID) + ( abs( dQ09Value) * EgtEV( idSecond, GDB_ID.GRID)) + + if bChamferedEdge then + EgtCurveChamfer( AddGrpId, idFirst, ptEndPointFirst, idSecond, ptStartPointSecond, abs( dQ09Value), true, GDB_RT.GRID) + else + EgtCurveFillet( AddGrpId, idFirst, ptEndPointFirst, idSecond, ptStartPointSecond, abs( dQ09Value), true, GDB_RT.GRID) + end + end + + EgtSelectPathObjs( nIdFirstEntity, true) + local idGeom, idGeomCnt = EgtCurveCompoByChain( AddGrpId, GDB_ID.SEL, {0,0,0}, true) + if not idGeom or idGeomCnt > 1 then + local sErr = 'Error MakeHeadChamfer : too many loops' + EgtOutLog( sErr) + return false, sErr + end + EgtChangeClosedCurveStartPoint( idGeom, p3MidPoint, GDB_RT.GRID) + + -- Inserisco la lavorazione del lato standard + local dExtra = 2 + local sName1 = 'HeadCham_' .. ( EgtGetName( idProc) or tostring( idProc)) + local nMch1Id = EgtAddMachining( sName1, sMilling) + if not nMch1Id then + local sErr = 'Error adding machining ' .. sName1 .. '-' .. sMilling + EgtOutLog( sErr) + return false, sErr + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ idGeom, -1}}) + -- assegno affondamento e offset radiale + EgtSetMachiningParam( MCH_MP.DEPTH, dDepthHeadChamfer + dExtra) + EgtSetMachiningParam( MCH_MP.OFFSR, dExtra) + -- assegno lato di lavoro + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + -- eseguo + if not ML.ApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMch1Id, false) + return false, sErr + end + + return true, nil +end + --------------------------------------------------------------------- -- tagli verticali aggiuntivi local function AddVerticalPreCuts( Proc, sCutting, dCutXOffset, b3Raw, dOffsetBetweenCuts) @@ -533,6 +632,16 @@ function ProcessHeadCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead, bNeedHCut local bOk, sErr = MakeStandardCuts( Proc, b3Raw, nCuts, dOffsL, HeadCutType, Cutting1Data, Cutting2Data, nil, dOvmHead) + + -- alla fine del taglio si aggiungono gli smussi in testa + local _, sErrHeadChamfer = MakeHeadChamfer( nOriId or Proc.Id, nPartId) + if sErr then + sErr = sErr..'\n'..sErrHeadChamfer + else + sErr = sErrHeadChamfer + end + + return bOk, sErr end diff --git a/LuaLibs/ProcessSplit.lua b/LuaLibs/ProcessSplit.lua index 8f68f7b..18979b6 100644 --- a/LuaLibs/ProcessSplit.lua +++ b/LuaLibs/ProcessSplit.lua @@ -167,6 +167,99 @@ local function MakeChamfer( nOriId, Proc, nPhase, nRawId, nPartId, dOvmTail) return true, nil end +--------------------------------------------------------------------- +-- smussi in coda +local function MakeTailChamfer( idProc, nPartId, dDepthTailChamfer) + -- recupero gruppo per geometria aggiuntiva + local AddGrpId = BL.GetAddGroup( nPartId) + if not AddGrpId then + local sErr = 'Error on process StartFace impossible to find AddGroup' + EgtOutLog( sErr) + return false, sErr + end + + -- recupero la lavorazione + local sMilling = ML.FindMilling( 'Mark') + if not sMilling then + local sErr = 'Error : milling not found in library' + EgtOutLog( sErr) + return false, sErr + end + + local nLoopId, nLoopCnt = EgtExtractSurfTmFacetLoops( idProc, 0, AddGrpId) + if not nLoopId or nLoopCnt > 1 then + local sErr = 'Error MakeHeadChamfer : too many loops' + EgtOutLog( sErr) + return false, sErr + end + + -- setto direzione estrusione corretta + EgtModifyCurveExtrusion( nLoopId, -X_AX()) + EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.LEFT)) + + local dQ09Value = EgtGetInfo( idProc, 'Q09', 'd') + local bChamferedEdge = dQ09Value > 0 + + local nIdFirstEntity, nEntityCnt = EgtExplodeCurveCompo( nLoopId) + local p3MidPoint = EgtMP( nIdFirstEntity, GDB_ID.GRID) + + for i = 0, nEntityCnt - 1 do + if EgtCurveLength( nIdFirstEntity + i) - 10 < abs( dQ09Value) * 2 then + local sErr = 'Error MakeTailChamfer : Q09 too high' + EgtOutLog( sErr) + return false, sErr + end + end + + -- creo raccordo o fillet + for i = 0, nEntityCnt - 1 do + local idFirst = nIdFirstEntity + i + local idSecond = EgtIf( i == nEntityCnt - 1, nIdFirstEntity, idFirst + 1) + local ptEndPointFirst = EgtEP( idFirst, GDB_ID.GRID) - ( abs( dQ09Value) * EgtEV( idFirst, GDB_ID.GRID)) + local ptStartPointSecond = EgtSP( idSecond, GDB_ID.GRID) + ( abs( dQ09Value) * EgtEV( idSecond, GDB_ID.GRID)) + + if bChamferedEdge then + EgtCurveChamfer( AddGrpId, idFirst, ptEndPointFirst, idSecond, ptStartPointSecond, abs( dQ09Value), true, GDB_RT.GRID) + else + EgtCurveFillet( AddGrpId, idFirst, ptEndPointFirst, idSecond, ptStartPointSecond, abs( dQ09Value), true, GDB_RT.GRID) + end + end + + EgtSelectPathObjs( nIdFirstEntity, true) + local idGeom, idGeomCnt = EgtCurveCompoByChain( AddGrpId, GDB_ID.SEL, {0,0,0}, true) + if not idGeom or idGeomCnt > 1 then + local sErr = 'Error MakeTailChamfer : too many loops' + EgtOutLog( sErr) + return false, sErr + end + EgtChangeClosedCurveStartPoint( idGeom, p3MidPoint, GDB_RT.GRID) + + -- Inserisco la lavorazione del lato standard + local dExtra = 2 + local sName1 = 'TailCham_' .. ( EgtGetName( idProc) or tostring( idProc)) + local nMch1Id = EgtAddMachining( sName1, sMilling) + if not nMch1Id then + local sErr = 'Error adding machining ' .. sName1 .. '-' .. sMilling + EgtOutLog( sErr) + return false, sErr + end + -- aggiungo geometria + EgtSetMachiningGeometry( {{ idGeom, -1}}) + -- assegno affondamento e offset radiale + EgtSetMachiningParam( MCH_MP.DEPTH, dDepthTailChamfer + dExtra) + EgtSetMachiningParam( MCH_MP.OFFSR, dExtra) + -- assegno lato di lavoro + EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.RIGHT) + -- eseguo + if not ML.ApplyMachining( true, false) then + local _, sErr = EgtGetLastMachMgrError() + EgtSetOperationMode( nMch1Id, false) + return false, sErr + end + + return true, nil +end + --------------------------------------------------------------------- -- lavorazione con sega a catena per sezioni alte e larghe local function MakeCutByChainSaw( nSurfId, sSawing, nFaceUse, dDepth, sNotes, dRadialOffset, bExtendStartEnd, bInvert) @@ -819,6 +912,43 @@ function ProcessSplit.Make( Proc, nPhase, nRawId, nPartId, nOrd, sDownOrSideOrSt local bOk, sErr = MakeStandardCuts( Proc, b3Raw, nCuts, dOffsL, TailCutType, Cutting1Data, Cutting2Data, nil, dLenEndRaw) + -- se smussi in coda da aggiungere + local dDepthTailChamfer = EgtGetInfo( nOriId or Proc.Id, 'Q08', 'd') or 0 + if dDepthTailChamfer > 100 * GEO.EPS_SMALL then + -- creo subito nuova fase qui, a meno che non sia stata giĆ  creata + if nNewPhase == 0 then + BL.AddPhaseWithRawParts( nRawId, BD.OriXR, BD.PosXR, BD.RAW_OFFSET) + nNewPhase = EgtGetCurrPhase() + local nDispId = EgtGetPhaseDisposition( nNewPhase) + if sDownOrSideOrStd == 'down' then + EgtRotateRawPart( nRawId, X_AX(), 180) + EgtSetInfo( nDispId, 'TYPE', 'MID2') + EgtSetInfo( nDispId, 'ROT', -2) + elseif sDownOrSideOrStd == 'side' then + if bPreMove then EgtMoveRawPart( nRawId, vtMove) end + EgtRotateRawPart( nRawId, X_AX(), EgtIf( BD.RIGHT_LOAD, -90, 90)) + if not bPreMove then EgtMoveRawPart( nRawId, vtMove) end + EgtSetInfo( nDispId, 'TYPE', 'MID2') + EgtSetInfo( nDispId, 'ROT', -1) + else + EgtSetInfo( nDispId, 'TYPE', 'END') + end + EgtSetInfo( nDispId, 'ORD', nOrd) + -- se grezzo successivo senza pezzi e finale, va tolto + local nNextRawId = EgtGetNextRawPart( nRawId) + if nNextRawId and EgtGetPartInRawPartCount( nNextRawId) == 0 and EgtGetRawPartBBox( nNextRawId):getDimX() < BD.MinRaw then + EgtRemoveRawPartFromCurrPhase( nNextRawId) + end + end + -- alla fine del taglio si aggiungono gli smussi in testa + local _, sErrHeadChamfer = MakeTailChamfer( nOriId or Proc.Id, nPartId, dDepthTailChamfer) + if sErr then + sErr = sErr..'\n'..sErrHeadChamfer + else + sErr = sErrHeadChamfer + end + end + return bOk, sErr, nNewPhase end