-- -- EEEEEEEEEE GGGGGG wwww wwww -- EEEEEEEEEE GGGGGGGGGG wwww wwww -- EEEE GGGG GGGG wwww wwww wwww -- EEEE GGGG wwww wwww wwww -- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww -- EEEEEEE GGGG GGGGGGG wwww wwwwww wwww -- EEEE GGGG GGGG wwww wwwwwwww wwww -- EEEE GGGG GGGG wwww wwww wwww wwww -- EEEEEEEEEE GGGGGGGGGG wwwwwwww wwwwwwww -- EEEEEEEEEE GGGGGG wwwwwww wwwwwww -- -- _OPivot.lua by EgalWare s.r.l. 2019.06.04 -- Autore: Filippo Monchi -- _OPivot, componente di secondo livello, non può essere chiamato direttamente da un lua dei -- componenti di interfaccia -- 2019.06.04 V1.001 FM First version -- 2019.07.29 V1.002 FM Manage new differents pivot models and submodels: Offset pivot with submodel 2 3 4, -- OffsetInpermediate with submodel 3 -- the defalult and old one is submodel (1) for all model -- 2019.10.18 V2.000 FM Manage use Materials -- 2024.07.19 V2.001 FM Set note 'NotCheckDir' to pocketing and antisplint paths -- Tavola per definizione modulo (serve ma non usata) local OPivot = {} -- Intestazioni require( 'EgtBase') EgtEnableDebug( false) -- Valori limite local dExtraH = 0.5 local sMaxFeed = 'MaxFeed' local sRapid = 'Rapid' -- contatori local nTotContEnt = 0 local nTotContEnt_r = 0 local function DrawAddLineDrawCircle( pInitial, pFinal, nGroup, idTable, bPrev, nGroupCirc, nRad, bDrawFirst, bDrawLast, cColor1, cColor2, sMVar, nCounter_r, sReference) local nReference = GDB_RT.LOC if sReference and sReference == 'grid' then nReference = GDB_RT.GRID end local nLine = EgtLine(nGroup, pInitial, pFinal, nReference) local nNumLine -- serve per il conteggio delle entità in caso di concatenamento con curvecompo if nCounter_r and nLine then nTotContEnt_r = nTotContEnt_r + 1 elseif nLine then nTotContEnt = nTotContEnt + 1 end if idTable then table.insert( idTable, nLine) -- se devo inserire una variazione nell'entità if sMVar then nNumLine = #idTable end end if bPrev then if bDrawFirst then local nCircle1 = EgtCircle( nGroupCirc, pInitial, nRad , nReference) EgtSetColor( nCircle1, cColor1) end if bDrawLast then local nCircle2 = EgtCircle( nGroupCirc, pFinal, nRad , nReference) EgtSetColor( nCircle2, cColor2) end end return nLine, nNumLine, sMVar end local function DrawAddCircleDrawCircle( pCenter, dRadius, dAngIni, dAngCen, nGroup, idTable, bPrev, nGroupCirc, nRad, bDrawFirst, bDrawLast, cColor1, cColor2, sMVar, nCounter_r, sReference) local nReference = GDB_RT.LOC if sReference and sReference == 'grid' then nReference = GDB_RT.GRID end local nCircle = EgtArc( nGroup, pCenter, dRadius, dAngIni, dAngCen, 0, nReference) local nNumCircle -- serve per il conteggio delle entità in caso di concatenamento con curvecompo if nCounter_r and nCircle then nTotContEnt_r = nTotContEnt_r + 1 elseif nCircle then nTotContEnt = nTotContEnt + 1 end if idTable then table.insert( idTable, nCircle) -- se devo inserire una variazione nell'entità if sMVar then nNumCircle = #idTable end end if bPrev then if bDrawFirst then local nCircle1 = EgtCircle( nGroupCirc, EgtSP( nCircle), nRad , nReference) EgtSetColor( nCircle1, cColor1) end if bDrawLast then local nCircle2 = EgtCircle( nGroupCirc, EgtEP( nCircle), nRad , nReference) EgtSetColor( nCircle2, cColor2) end end return nCircle, nNumCircle, sMVar end local function DrawSingleAntiSplintPath( bRotHor, tTableRef, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) local pIni, pEnd if bStartAng then if bRotHor then -- se antisplint ruotato -- linea entrante inclinata pIni = Point3d(-((dLevelX/2)+dIniPosY)*invG*nInvX, -(((dLevelYRot-dD)/2) - 0.2 - dDeltaPosX)*nInvY,dZedWork) pEnd = Point3d(-((dLevelX/2)+dPosY)*invG*nInvX, -(((dLevelYRot-dD)/2) - 0.2)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), true, true, ORANGE(), ORANGE(), nil, nil, 'grid') -- linea entrante in X pIni = pEnd pEnd = Point3d(-((dLevelX/2)+dEndPosY)*invG*nInvX, -(((dLevelYRot-dD)/2) - 0.2)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') -- linee tangente al percorso pIni = pEnd pEnd = Point3d(-((dLevelX/2)+dEndPosY)*invG*nInvX, -((dLevelYRot-dD)/2)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') -- linea di uscita pIni = pEnd pEnd = Point3d(-((dLevelX/2)+(dD*3/4))*invG*nInvX,-((dLevelYRot-dD)/2)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(pIni:getX(), -(((dLevelYRot-dD)/2) - 0.2 - dDeltaPosX)*nInvY, dZedWork) else -- antisplint normale -- linea entrante inclinata pIni = Point3d(-(((dLevelX-dD)/2) - 0.2 - dDeltaPosX)*invG*nInvX, (dLevelY+dIniPosY)*nInvY,dZedWork) pEnd = Point3d(-(((dLevelX-dD)/2) - 0.2)*invG*nInvX, (dLevelY+dPosY)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), true, true, ORANGE(), ORANGE(), nil, nil, 'grid') -- linea entrante in Y pIni = pEnd pEnd = Point3d(-(((dLevelX-dD)/2) - 0.2)*invG*nInvX, (dLevelY+dEndPosY)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') -- linea a tangere il percorso pIni = pEnd pEnd = Point3d(-((dLevelX-dD)/2)*invG*nInvX, (dLevelY+dEndPosY)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') -- linea di uscita pIni = pEnd pEnd = Point3d(-((dLevelX-dD)/2)*invG*nInvX,(dLevelY+(dD*3/4))*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-(((dLevelX-dD)/2) - 0.2 - dDeltaPosX)*invG*nInvX, pIni:getY(), dZedWork) end else -- se entrata singola if bRotHor then -- se antisplint ruotato if nStep == 1 then pIni = Point3d(-((dLevelX/2)+dIniPosY)*invG*nInvX, -((dLevelYRot-dD)/2)*nInvY,dZedWork) pEnd = Point3d(-((dLevelX/2)+dEndPosY)*invG*nInvX, -((dLevelYRot-dD)/2)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), true, true, ORANGE(), ORANGE()) else pIni = Point3d(-((dLevelX/2)+dIniPosY)*invG*nInvX, (-((dLevelYRot-dD)/2)+0.2)*nInvY,dZedWork) pEnd = Point3d(-((dLevelX/2)+dEndPosY)*invG*nInvX, (-((dLevelYRot-dD)/2)+0.2)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), true, true, ORANGE(), ORANGE()) -- faccio il ritorno alla posizione di partenza pIni = pEnd pEnd = Point3d(-((dLevelX/2)+dEndPosY)*invG*nInvX, -((dLevelYRot-dD)/2)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE()) pIni = pEnd pEnd = Point3d(-((dLevelX/2)+dIniPosY)*invG*nInvX, pIni:getY(), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE()) pIni = pEnd pEnd = Point3d(pIni:getX(), (-((dLevelYRot-dD)/2)+0.2)*nInvY, dZedWork) end else -- antisplint normale if nStep == 1 then pIni = Point3d(-((dLevelX-dD)/2)*invG*nInvX, (dLevelY+dIniPosY)*nInvY,dZedWork) pEnd = Point3d(-((dLevelX-dD)/2)*invG*nInvX, (dLevelY+dEndPosY)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), true, true, ORANGE(), ORANGE(), nil, nil, 'grid') else pIni = Point3d(-(((dLevelX-dD)/2) - 0.2)*invG*nInvX, (dLevelY+dIniPosY)*nInvY,dZedWork) pEnd = Point3d(-(((dLevelX-dD)/2) - 0.2)*invG*nInvX, (dLevelY+dEndPosY)*nInvY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), true, true, ORANGE(), ORANGE(), nil, nil, 'grid') -- faccio il ritorno alla posizione di partenza pIni = pEnd pEnd = Point3d(-((dLevelX-dD)/2)*invG*nInvX, (dLevelY+dEndPosY)*nInvY, dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d( pIni:getX(), (dLevelY+dIniPosY)*nInvY, dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tTableRef, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-(((dLevelX-dD)/2) - 0.2)*invG*nInvX, pIni:getY(), dZedWork) end end end return tTableRef, pIni, pEnd end local function DrawAddAntiSplintPath( dD, dTh, subtype, dLen, dHei, dHeiHor, bStartAng, stn, invG, Lg, bPreview, Dm, bEqualTh, sLabel, sLabelR, dStp, dMainZedStart, bOpzFour, B_SK, bOnKnuckle) local nStep local dStep local nPass local dZedWork, dZedStart local tPocketAs = {} local tPocketAs_r = {} local tPocketAs2 = {} local tPocketAs2_r = {} local pIni, pIni2, pEnd, pEnd2 local pIni_r, pIni2_r, pEnd_r, pEnd2_r local tMVar = {} local tMVar2 = {} local tMVar_r = {} local tMVar2_r = {} local nConEnt local sKindVar local dPosY, dEndPosY, dIniPosY, dDeltaPosX local dLevelX, dLevelY, dLevelYRot local hintAs1, hintAs2, hintAs3, hintAs4 nStep = ceil(dTh/dStp) -- numero di passate dStep = (dTh/nStep) -- passo ricalcolato nPass = 1 dZedStart = dMainZedStart while nPass <= nStep do dZedWork = dZedStart - dStep if nPass == nStep then if nStep == 1 then dZedWork = dZedStart else dZedWork = dMainZedStart-dTh end end if subtype == 2 or subtype == 3 then dLevelX = dLen dLevelY = dHei dLevelYRot = dHeiHor else if bOpzFour then dLevelX = dLen dLevelY = 0 dLevelYRot = dHeiHor else dLevelX = dLen dLevelY = dHei-(dHeiHor/2) dLevelYRot = dHeiHor end end if bStartAng then -- se lead-in con angolo dEndPosY = -(dD/4) dPosY = dEndPosY + (dD/8) dIniPosY = dPosY + (dD*7/8) dDeltaPosX = ( (dD*7/8) / tan(30)) local nInvX, nInvY if not stn or ( stn and invG > 0) then -- se il pivot non sborda local bRotGeom = false if bOnKnuckle then if B_SK then nInvX = -1 nInvY = -1 else nInvX = 1 nInvY = 1 end else nInvX = 1 nInvY = 1 if B_SK and stn then bRotGeom = true end end tPocketAs, pIni, pEnd = DrawSingleAntiSplintPath( bRotGeom, tPocketAs, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) -- se il percorso è altro come spessore porta if bEqualTh and not stn then if bOnKnuckle then if B_SK then nInvX = 1 nInvY = 1 else nInvX = -1 nInvY = -1 end else nInvX = -1 nInvY = -1 end tPocketAs2, pIni2, pEnd2 = DrawSingleAntiSplintPath( false, tPocketAs2, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) end else -- se il pivot sborda local bRotGeom = false if bEqualTh then -- se il pivot è passante if bOnKnuckle then if B_SK then nInvX = 1 nInvY = 1 else nInvX = -1 nInvY = -1 end else nInvX = -1 nInvY = -1 end tPocketAs2, pIni2, pEnd2 = DrawSingleAntiSplintPath( bRotGeom, tPocketAs2, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) else -- altrimenti il pivot non è passante, faccio geometria ruotata bRotGeom = true -- setto per ruotare geometria if bOnKnuckle then if B_SK then nInvX = -1 nInvY = 1 else nInvX = 1 nInvY = 1 end else nInvX = 1 nInvY = 1 if B_SK then bRotGeom = false end end tPocketAs, pIni, pEnd = DrawSingleAntiSplintPath( bRotGeom, tPocketAs, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) end end if mkrev then -- se abilitato anche il percorso inverso end else -- lead-in diritto dEndPosY = -(dD/4) dIniPosY = (dD*3/4) if not stn or ( stn and invG > 0) then -- se il pivot non sborda local bRotGeom = false if bOnKnuckle then if B_SK then nInvX = -1 nInvY = -1 else nInvX = 1 nInvY = 1 end else nInvX = 1 nInvY = 1 if B_SK and stn then bRotGeom = true end end tPocketAs, pIni, pEnd = DrawSingleAntiSplintPath( bRotGeom, tPocketAs, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) -- se il percorso è altro come spessore porta if bEqualTh and not stn then if bOnKnuckle then if B_SK then nInvX = 1 nInvY = 1 else nInvX = -1 nInvY = -1 end else nInvX = -1 nInvY = -1 end tPocketAs2, pIni2, pEnd2 = DrawSingleAntiSplintPath( false, tPocketAs2, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) end else -- se il pivot sborda local bRotGeom = false if bEqualTh then -- se il pivot è passante if bOnKnuckle then if B_SK then nInvX = 1 nInvY = 1 else nInvX = -1 nInvY = -1 end else nInvX = -1 nInvY = -1 end tPocketAs2, pIni2, pEnd2 = DrawSingleAntiSplintPath( bRotGeom, tPocketAs2, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) else -- altrimenti il pivot non è passante, faccio geometria ruotata bRotGeom = true -- setto per ruotare geometria if bOnKnuckle then if B_SK then nInvX = -1 nInvY = 1 else nInvX = 1 nInvY = 1 end else nInvX = 1 nInvY = 1 if B_SK then bRotGeom = false end end tPocketAs, pIni, pEnd = DrawSingleAntiSplintPath( bRotGeom, tPocketAs, dLevelX, dD, dDeltaPosX, invG, dLevelY, dPosY, dIniPosY, dEndPosY, dZedWork, Lg, Dm, bPreview, dLevelYRot, nInvX, nInvY, bStartAng, nStep) end end if mkrev then -- se abilitato anche il percorso inverso end end nPass = nPass + 1 dZedStart = dZedWork -- se ho altri passi scendo in z if nPass <= nStep then local pIniLoc if #tPocketAs > 0 then pIniLoc = pEnd pEnd = Point3d(pIniLoc:getX(), pIniLoc:getY(), (dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocketAs, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), sMaxFeed, nil, 'grid') table.insert( tMVar, {nConEnt,sKindVar}) end if bEqualTh and #tPocketAs2 > 0 then pIniLoc = pEnd2 pEnd2 = Point3d(pIniLoc:getX(), pIniLoc:getY(), (dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni2, pEnd2, Lg, tPocketAs2, bPreview, Dm, (dD/2), false, true, ORANGE(), ORANGE(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nConEnt,sKindVar}) end if mkrev then -- se abilitato anche il percorso inverso end end end -- end while -- trasformo in geometria composita if ( #tPocketAs > 0) then hintAs1 = EgtCurveCompo( Lg, tPocketAs, true) if hintAs1 then if nStep == 1 then EgtModifyCurveThickness(hintAs1, -dTh) else EgtModifyCurveThickness( hintAs1, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar[i][1], 0) .. ', ' .. 'code=' .. tMVar[i][2] .. '}' if i < #tMVar then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintAs1, 'MVar', sListEnt) end end EgtSetName(hintAs1, sLabel) end end if ( #tPocketAs2 > 0) then hintAs3 = EgtCurveCompo( Lg, tPocketAs2, true) if hintAs3 then if nStep == 1 then EgtModifyCurveThickness(hintAs3, -dTh) else EgtModifyCurveThickness( hintAs3, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar2 do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar2[i][1], 0) .. ', ' .. 'code=' .. tMVar2[i][2] .. '}' if i < #tMVar2 then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintAs3, 'MVar', sListEnt) end end EgtSetName(hintAs3, sLabel) end end if ( #tPocketAs_r > 0) then hintAs2 = EgtCurveCompo( Lg, tPocketAs_r, true) if hintAs2 then if nStep == 1 then EgtModifyCurveThickness(hintAs2, -dTh) else EgtModifyCurveThickness( hintAs2, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar_r do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar_r[i][1], 0) .. ', ' .. 'code=' .. tMVar_r[i][2] .. '}' if i < #tMVar_r then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintAs2, 'MVar', sListEnt) end end EgtSetName(hintAs2, sLabelR) end end if ( #tPocketAs2_r > 0) then hintAs4 = EgtCurveCompo( Lg, tPocketAs2_r, true) if hintAs4 then if nStep == 1 then EgtModifyCurveThickness(hintAs4, -dTh) else EgtModifyCurveThickness( hintAs4, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar2_r do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar2_r[i][1], 0) .. ', ' .. 'code=' .. tMVar2_r[i][2] .. '}' if i < #tMVar2_r then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintAs4, 'MVar', sListEnt) end end EgtSetName(hintAs4, sLabelR) end end return hintAs1, hintAs2, hintAs3, hintAs4 end local function CkeckRadiusRemain( dLenghtX, dLengthY, dDiam, dOffsVal, nOffsMade) local dRemainX, rRemainY dRemainX = ((dLenghtX/2)-(dDiam/2)-(dOffsVal*nOffsMade)) rRemainY = ( dLengthY -(dDiam/2)-(dOffsVal*nOffsMade)) return dRemainX, rRemainY end -- Funzione di disegno function OPivot.Draw( EC, EM, tPivotParam, bPreview, bRunByCompo, nDrawMach, Pz, Lg, dThickDoor) -- Assegno le dimensioni local L = tPivotParam.L local H = tPivotParam.H local T = tPivotParam.T local L3 = tPivotParam.L3 local H3 = tPivotParam.H3 local T3 = tPivotParam.T3 local radius = tPivotParam.rad local D_SK = tPivotParam.D_SK local B_SK = tPivotParam.B_SK local d = tPivotParam.d local p = tPivotParam.p local p3 = tPivotParam.p3 local sf = tPivotParam.sf local s3 = tPivotParam.s3 local d2 = tPivotParam.d2 local d3 = tPivotParam.d3 local d4 = tPivotParam.d4 local jn = tPivotParam.jn local L2 = tPivotParam.L2 local H2 = tPivotParam.H2 local invG = tPivotParam.invG local mkrev = tPivotParam.mkrev local stn = tPivotParam.stn local stnb = tPivotParam.stnb local ech = tPivotParam.ech local ptype = tPivotParam.type local subtype = tPivotParam.stype local bEqualTh = tPivotParam.bETh -- Assegno i nomi geometrie local LG = tPivotParam.LG local LM = tPivotParam.LM local LA = tPivotParam.LA local LGV = tPivotParam.LGV local LMV = tPivotParam.LMV local LAV = tPivotParam.LAV local DM = 'DUMMY' -- variabili per messaggi e settaggi vari local sCompoName = tPivotParam.Nome -- settaggio opzione per partenza ad angolo o meno local bStartAng = true local bStartOppo = true -- RunByComponetInterface local RC = true if not bRunByCompo then -- controllo se lanciato da componente RC = false end -- 0 solo geom esterna, 1 solo geom mach, 2 entrambe if not nDrawMach then -- se non definita la setto per non creare geometria di lavorazione nDrawMach = 0 end -- set variabili per compatibilità con vecchi componenti -- step face: per compatibilità con tutti i componenti, se non è definito lo setto = alla profondità cava if not sf or abs(sf) <= GEO.EPS_SMALL then sf = T end -- radius face: per compatibilità con tutti i componenti, se non è definito lo setto a 0 if not radius or abs(radius) <= GEO.EPS_SMALL then radius = 0 end -- se tipo intermediate e sottotipo 3, lo risetto perchè le geometrie sono come quelle del sottotipo 2 if ptype == 2 and subtype == 3 then subtype = 2 end -- Layer local Dm if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) -- layer della figura principale EgtSetName( Lg, sCompoName) end if nDrawMach > 0 then -- se abilitata geometria lavorazione Dm = EgtGroup( Pz, GDB_RT.LOC) -- layer disegni cerchi rappresentatte il diametro utensile EgtSetName(Dm,DM) end -- variabili geometrie restituite in uscita local hint -- disegno geometrie principale (o del knuckle) local hintPk -- disegno svuotatura principale (o del knuckle) local hintAs1 -- percorso antischeggia normale ( o sul knuckle) local hintAs2 -- percorso antischeggia reverso ( o sul knuckle) local hintPk_r -- disegno svuotatura principale reverso (o del knuckle) local hintAs3 -- secondo percorso anticheggia normale su spessore passante del knuckle local hintAs4 -- secondo percorso anticheggia reverso su spessore passante del knuckle local hint2 -- disegno geometrie body local hintPk2 -- disegno svuotatura body local hintAs1b -- percorso antischeggia normale ( o sul knuckle) local hintAs2b -- percorso antischeggia reverso ( o sul knuckle) local hintPk2_r -- disegno svuotatura reverso body local hintAs3b -- secondo percorso anticheggia normale su spessore passante del knuckle local hintAs4b -- secondo percorso anticheggia reverso su spessore passante del knuckle -- variabili punto local pIni, pEnd, pCentr -- creo lo stesso la geometria esterna perché viene utilizzata anche per creare il percorso di lavorazione -- se non è previsto viene eliminato dopo local tPocket = {} -- stn = false -- stnb = false -- setto la griglia top EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP)) -- Costruzione della geometria del knuckle pivot ( in senso orario) if T3 and LG then if subtype == 2 or subtype == 3 then if stn then if invG < 0 then if B_SK then -- mezza linea verso destra -- pIni = Point3d(0,H3+dExtraH,0) -- pEnd = Point3d((L3/2),H3+dExtraH,0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd pIni = Point3d((L3/2),H3+dExtraH,0) pEnd = Point3d((L3/2),-(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-((L3/2)+(d3/2)+dExtraH),-(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-((L3/2)+(d3/2)+dExtraH),H3+dExtraH,0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- pEnd = Point3d(0,H3+dExtraH,0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd else -- mezza linea verso sinistra -- pIni = Point3d(0,-(H3+dExtraH),0) -- pEnd = Point3d(-(L3/2),-(H3+dExtraH),0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd pIni = Point3d(-(L3/2),-(H3+dExtraH),0) pEnd = Point3d(-(L3/2),(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((L3/2)+(d3/2)+dExtraH),(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((L3/2)+(d3/2)+dExtraH),-(H3+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- pEnd = Point3d(0,-(H3+dExtraH,0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd end else if B_SK then -- mezza linea verso sinistra -- pIni = Point3d(0,-(H3+dExtraH),0) -- pEnd = Point3d(-((L3/2)+(d3/2)+dExtraH),-(H3+dExtraH),0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd pIni = Point3d(-((L3/2)+(d3/2)+dExtraH),-(H3+dExtraH),0) pEnd = Point3d(-((L3/2)+(d3/2)+dExtraH),(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d((L3/2),(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d((L3/2),-(H3+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- pEnd = Point3d(0,-(H3+dExtraH),0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd else -- mezza linea verso destra -- pIni = Point3d(0,H3+dExtraH,0) -- pEnd = Point3d(((L3/2)+(d3/2)+dExtraH),H3+dExtraH,0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd pIni = Point3d(((L3/2)+(d3/2)+dExtraH),H3+dExtraH,0) pEnd = Point3d(((L3/2)+(d3/2)+dExtraH),-(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-(L3/2),-(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-(L3/2),H3+dExtraH,0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- pEnd = Point3d(0,H3+dExtraH,0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd end end else -- mezza linea verso destra -- pIni = Point3d(0,H3+dExtraH,0) -- pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)+dExtraH),H3+dExtraH,0), Point3d((L3/2),H3+dExtraH,0)) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd pIni = EgtIf( stn, Point3d(((L3/2)+(d3/2)+dExtraH),H3+dExtraH,0), Point3d((L3/2),H3+dExtraH,0)) pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)+dExtraH),-(H3+(d3/2)+dExtraH),0), Point3d((L3/2),-(H3+(d3/2)+dExtraH),0)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-(L3/2),-(H3+(d3/2)+dExtraH),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-(L3/2),H3+dExtraH,0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- pEnd = Point3d(0,H3,0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd end else -- sottotipo 4 -- -- linea verso destra -- pIni = Point3d(0,(H3-(H/2)),0) -- if ech then -- pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)),(H3-(H/2)),0), Point3d((L3/2)-dExtraH,(H3-(H/2)),0)) -- else -- pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)+dExtraH),(H3-(H/2)),0), Point3d(L3/2,(H3-(H/2)),0)) -- end -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- if ech then -- arco orario verso destra -- pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)+dExtraH),(H3-(H/2)-dExtraH),0), Point3d((L3/2),(H3-(H/2)-dExtraH),0)) -- pCentr = EgtIf( stn, Point3d(((L3/2)+(d3/2)),(H3-(H/2)-dExtraH),0), Point3d((L3/2)-dExtraH,(H3-(H/2)-dExtraH),0)) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end pIni = EgtIf( stn, Point3d((((L3+d3)/2)+dExtraH),(H3-(H/2))+dExtraH,0), Point3d((L3/2),(H3-(H/2))+dExtraH,0)) if ech then pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)+dExtraH),-(H/2)+dExtraH,0), Point3d((L3/2),-(H/2)+dExtraH,0)) else pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)+dExtraH),-(H/2),0), Point3d((L3/2),-(H/2),0)) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd if ech then -- arco orario verso sinistra pEnd = EgtIf( stn, Point3d(((L3/2)+(d3/2)),-(H/2),0), Point3d((L3/2)-dExtraH,-(H/2),0)) pCentr = EgtIf( stn, Point3d(((L3/2)+(d3/2)),-(H/2)+dExtraH,0), Point3d((L3/2)-dExtraH,-(H/2)+dExtraH,0)) DrawAddCircleDrawCircle( pCentr, dExtraH, 0,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end pEnd = Point3d(-(L3/2),-(H/2),0) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- if ech then -- pEnd = Point3d(-(L3/2),(H3-(H/2)-dExtraH),0) -- else pEnd = Point3d(-(L3/2),(H3-(H/2))+dExtraH,0) -- end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- if ech then -- -- arco orario verso destra -- pEnd = Point3d(-(L3/2)+dExtraH,(H3-(H/2)),0) -- pCentr = Point3d(-(L3/2)+dExtraH,(H3-(H/2)-dExtraH),0) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 180,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end -- pEnd = Point3d(0,(H3-(H/2)),0) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd end hint = EgtCurveCompo( Lg, tPocket, true) EgtModifyCurveThickness( hint, -T3) EgtSetName( hint, LG) end tPocket = {} local stx -- Costruzione della geometria del corpo pivot ( in senso orario) if T and LGV then if subtype == 2 or subtype == 3 then EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT)) else EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT)) end if subtype == 2 or subtype == 3 then if not H3 then H3 = DGD.dT end if not L3 then L3 = 0 end local dXval local dXdim if subtype == 2 then dXdim = L3 -- dXval = -((L-L3)/2) dXval = dXdim/2 stx = stn else -- dXval = 0 dXval = H/2 dXdim = H stx = stnb end if stx then -- pIni = Point3d(dXval, dExtraH,H3) pIni = EgtIf( B_SK, Point3d( dXval, dExtraH,H3), Point3d( (dXval+(d/2)+dExtraH), dExtraH,H3)) -- mezza linea verso destra -- if ech then -- pEnd = EgtIf( B_SK, Point3d((dXdim/2)-dExtraH,0,H3), Point3d(((dXdim+d)/2),0,H3)) -- else -- pEnd = EgtIf( B_SK, Point3d((dXdim/2),0,H3), Point3d((((dXdim+d)/2)+dExtraH),0,H3)) -- end -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- if ech then -- arco orario verso destra -- pEnd = EgtIf( B_SK, Point3d((dXdim/2),-dExtraH,H3), Point3d(((dXdim/2)+(d/2)+dExtraH),-dExtraH,H3)) -- pCentr = EgtIf( B_SK, Point3d((dXdim/2)-dExtraH,-dExtraH,H3), Point3d(((dXdim/2)+(d/2)),-dExtraH,H3)) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end local dYval if subtype == 2 then dYval = H else dYval = L end if B_SK then if radius > 0 then pEnd = Point3d((dXdim/2),-dYval+radius,H3) else pEnd = Point3d((dXdim/2),-dYval,H3) end else if ech then pEnd = Point3d(((dXdim/2)+(d/2)+dExtraH),-dYval+dExtraH,H3) -- considero un raccordino seguente else pEnd = Point3d(((dXdim/2)+(d/2)+dExtraH),-dYval,H3) end end -- linea discendente DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- arco orario verso sinistra if B_SK then if radius > 0 then pEnd = Point3d((dXdim/2)-radius,-dYval,H3) pCentr = Point3d((dXdim/2)-radius,-dYval+radius,H3) DrawAddCircleDrawCircle( pCentr, radius, 0,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end else if ech then pEnd = Point3d(((dXdim/2)+(d/2)),-dYval,H3) pCentr = Point3d(((dXdim/2)+(d/2)),-dYval+dExtraH,H3) DrawAddCircleDrawCircle( pCentr, dExtraH, 0,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end end if subtype == 2 then dXval = (dXdim/2)-L else dXval = -(dXdim/2) end -- linea verso sinistra if B_SK then if ech then pEnd = Point3d( dXval-(d/2),-dYval,H3) else pEnd = Point3d( dXval-(d/2)-dExtraH,-dYval,H3) end else if radius > 0 then pEnd = Point3d( dXval+radius,-dYval,H3) else pEnd = Point3d( dXval,-dYval,H3) end end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- arco orario verso sinistra if B_SK then if ech then pEnd = Point3d( dXval-(d/2)-dExtraH,-dYval+dExtraH,H3) pCentr = Point3d( dXval-(d/2),-dYval+dExtraH,H3) DrawAddCircleDrawCircle( pCentr, dExtraH, -90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end else if radius > 0 then pEnd = Point3d( dXval,-dYval+radius,H3) pCentr = Point3d( dXval+radius,-dYval+radius,H3) DrawAddCircleDrawCircle( pCentr, radius, -90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end end -- linea risale in Y if B_SK then -- if ech then -- pEnd = Point3d( dXval-(d/2)-dExtraH,-dExtraH,H3) -- else -- pEnd = Point3d( dXval-(d/2)-dExtraH,0,H3) -- end pEnd = Point3d( dXval-(d/2)-dExtraH,dExtraH,H3) else -- if ech then -- pEnd = Point3d( dXval,-dExtraH,H3) -- else -- pEnd = Point3d( dXval,0,H3) -- end pEnd = Point3d( dXval,dExtraH,H3) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd if B_SK then -- if ech then -- pEnd = Point3d( dXval-(d/2),dExtraH,H3) -- pCentr = Point3d( dXval-(d/2), 0,H3) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 180,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end -- if subtype == 2 then -- pEnd = Point3d(-((L-dXdim)/2),0,H3) -- else -- pEnd = Point3d(0,0,H3) -- end else -- if ech then -- pEnd = Point3d( dXval+dExtraH,0,H3) -- pCentr = Point3d( dXval+dExtraH,-dExtraH,H3) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 180,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end -- if subtype == 2 then -- pEnd = Point3d(-((L-dXdim)/2),0,H3) -- else -- pEnd = Point3d(0,0,H3) -- end end -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd else -- pIni = Point3d(dXval, dExtraH,H3) pIni = Point3d( dXval, dExtraH,H3) -- mezza linea verso destra -- if ech then -- pEnd = Point3d((dXdim/2)-dExtraH,0,H3) -- else -- pEnd = Point3d((dXdim/2),0,H3) -- end -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- if ech then -- arco orario verso destra -- pEnd = Point3d((dXdim/2),-dExtraH,H3) -- pCentr = Point3d((dXdim/2)-dExtraH,-dExtraH,H3) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end local dYval if subtype == 2 then dYval = H else dYval = L end if radius > 0 then pEnd = Point3d((dXdim/2),-dYval+radius,H3) else pEnd = Point3d((dXdim/2),-dYval,H3) end -- linea discendente DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- arco orario verso sinistra if radius > 0 then pEnd = Point3d((dXdim/2)-radius,-dYval,H3) pCentr = Point3d((dXdim/2)-radius,-dYval+radius,H3) DrawAddCircleDrawCircle( pCentr, radius, 0,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end if subtype == 2 then dXval = (dXdim/2)-L else dXval = -(dXdim/2) end -- linea verso sinistra if radius > 0 then pEnd = Point3d( dXval+radius,-dYval,H3) else pEnd = Point3d( dXval,-dYval,H3) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- arco orario verso sinistra if radius > 0 then pEnd = Point3d( dXval,-dYval+radius,H3) pCentr = Point3d( dXval+radius,-dYval+radius,H3) DrawAddCircleDrawCircle( pCentr, radius, -90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end -- linea risale in Y -- if ech then -- pEnd = Point3d( dXval,-dExtraH,H3) -- else -- pEnd = Point3d( dXval,0,H3) -- end pEnd = Point3d( dXval,dExtraH,H3) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- if ech then -- pEnd = Point3d( dXval+dExtraH,0,H3) -- pCentr = Point3d( dXval+dExtraH,-dExtraH,H3) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 180,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end -- if subtype == 2 then -- pEnd = Point3d(-((L-dXdim)/2),0,H3) -- else -- pEnd = Point3d(0,0,H3) -- end -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd end else -- sottotipo 4 stx = stnb pIni = EgtIf( stnb, Point3d((H/2)+(d/2)+dExtraH,dExtraH,(L3/2)), Point3d((H/2),dExtraH,(L3/2))) -- pIni = Point3d(0,0,(L3/2)) -- mezza linea verso destra -- if ech then -- pEnd = EgtIf( stnb, Point3d((H/2)+(d/2),0,(L3/2)), Point3d((H/2)-dExtraH,0,(L3/2))) -- else -- pEnd = EgtIf( stnb, Point3d((H/2)+(d/2)+dExtraH,0,(L3/2)), Point3d((H/2),0,(L3/2))) -- end -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- if ech then -- pEnd = EgtIf( stnb, Point3d((H/2)+(d/2)+dExtraH,-dExtraH,(L3/2)), Point3d((H/2),-dExtraH,(L3/2))) -- pCentr = EgtIf( stnb, Point3d((H/2)+(d/2),-dExtraH,(L3/2)), Point3d((H/2)-dExtraH,-dExtraH,(L3/2))) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end -- linea discesa in Y if stnb then if ech then pEnd = Point3d((H/2)+(d/2)+dExtraH,-L+dExtraH,(L3/2)) else pEnd = Point3d((H/2)+(d/2)+dExtraH,-L,(L3/2)) end else if radius > 0 then pEnd = Point3d((H/2),-L+radius,(L3/2)) else pEnd = Point3d((H/2),-L,(L3/2)) end end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- arco orario verso sinistra if stnb then if ech then pEnd = Point3d((H/2)+(d/2),-L,(L3/2)) pCentr = Point3d((H/2)+(d/2),-L+dExtraH,(L3/2)) DrawAddCircleDrawCircle( pCentr, dExtraH, 0,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end else if radius > 0 then pEnd = Point3d((H/2)-radius,-L,(L3/2)) pCentr = Point3d((H/2)-radius,-L+radius,(L3/2)) DrawAddCircleDrawCircle( pCentr, radius, 0,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end end -- linea verso sinistra if radius > 0 then pEnd = Point3d(-(H/2)+radius,-L,(L3/2)) else pEnd = Point3d(-(H/2),-L,(L3/2)) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- arco orario verso sinistra if radius > 0 then pEnd = Point3d(-(H/2),-(L-radius),(L3/2)) pCentr = Point3d(-(H/2)+radius,-(L-radius),(L3/2)) DrawAddCircleDrawCircle( pCentr, radius, -90,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd end -- linea risalita in Y -- if ech then -- pEnd = Point3d(-(H/2),-dExtraH,(L3/2)) -- else -- pEnd = Point3d(-(H/2),0,(L3/2)) -- end pEnd = Point3d(-(H/2),dExtraH,(L3/2)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- if ech then -- pEnd = Point3d(-(H/2)+dExtraH,0,(L3/2)) -- pCentr = Point3d(-(H/2)+dExtraH,-dExtraH,(L3/2)) -- DrawAddCircleDrawCircle( pCentr, dExtraH, 180,-90, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd -- end -- ultima mezza linea verso destra -- pEnd = Point3d(0,0,(L3/2)) -- DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, 0, false, false, RED(), RED(), nil, nil, 'grid') -- pIni = pEnd end hint2 = EgtCurveCompo( Lg, tPocket, true) EgtModifyCurveThickness( hint2, -T) EgtSetName( hint2, LGV) EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP)) end -- debug -- nDrawMach = 0 ---------------------------------------------- ---------------------------------------------- -- Costruzione delle geometrie di lavorazione ---------------------------------------------- ---------------------------------------------- if nDrawMach > 0 then -- se abilitata geometria lavorazione if not Lg then Lg = EgtGroup(Pz,GDB_RT.LOC) EgtSetName(Lg,sCompoName) end local bOnKnuckle = true -- geometria antischeggia percorso principale o knuckle if d4 and hint then -- se parametro valido hintAs1, hintAs2, hintAs3, hintAs4 = DrawAddAntiSplintPath( d4, T3, subtype, L3, H3, H, bStartAng, stn, invG, Lg, bPreview, Dm, bEqualTh, LA, (LA..'_R'), s3, 0, nil, B_SK, bOnKnuckle) end -- geometria antischeggia percorso body if d2 and hint2 then -- se parametro valido local dLocXStart, dLocYStart, dLocZStart, dLocYAmp local bOpzFour if subtype == 2 or subtype == 3 then EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT)) if subtype == 2 then if invG > 0 then dLocXStart = (L*2)-L3 else dLocXStart = L3 end dLocYAmp = H*2 else dLocXStart = H dLocYAmp = L*2 end dLocYStart = 0 dLocZStart = H3 else EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT)) dLocXStart = H -- larghezza cava (posizione z globale) dLocYStart = H/2 -- partenza Y (posizione y globale) dLocYAmp = L*2 dLocZStart = L3/2 bOpzFour = true end bOnKnuckle = false hintAs1b, hintAs2b, hintAs3b, hintAs4b = DrawAddAntiSplintPath( d2, T, subtype, dLocXStart, dLocYStart, dLocYAmp, bStartAng, stnb, invG, Lg, bPreview, Dm, false, LAV, (LAV..'_R'), sf, dLocZStart, bOpzFour, B_SK, bOnKnuckle) EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP)) end --------------------------------------- -- geometria svuotatura giro esterno --------------------------------------- local tPocket = {} local tPocket_r = {} local tPocket2 = {} local tPocket2_r = {} local tMVar = {} local tMVar2 = {} local tMVar_r = {} local tMVar2_r = {} local pIni, pIni2, pEnd, pEnd2 local nCase, nCaseNext local dZedStart, dZedWork local nRadius, hint_ofs, hint_ofs_r, hint_ofs2, hint_ofs2_r local pIni_r, pEnd_r local nStep local dStep local nPass local pStartStep local pStartStep_r ------------------------------------ -- se è presente geometria knuckle ------------------------------------ if d3 and hint then local dDimMin local dDimMin2 if subtype == 2 or subtype == 3 then -- individuo in che caso sono if L3 > (H3*2) then local dLenComp = EgtIf( stn, L3+(d3/2)+dExtraH,L3) dDimMin = max( ((H3*2)+(d3/2)+dExtraH), dLenComp) dDimMin2 = min( ((H3*2)+(d3/2)+dExtraH), dLenComp) dDimMin2 = dDimMin2 * 2 else -- se larghezza più stretta dell'altezza dDimMin2 = min( ((H3*2)+(d3/2)+dExtraH), EgtIf( stn, L3+(d3/2)+dExtraH,L3)) dDimMin = dDimMin2 end else -- individuo in che caso sono dDimMin = max( H3, EgtIf( stn, L3+(d3/2)+dExtraH,L3)) dDimMin2 = min( H3, EgtIf( stn, L3+(d3/2)+dExtraH,L3)) -- se il minimo è sull'altezza cava che sborda sempre sul lato dell'altezza lo raddoppio if abs( dDimMin2 - H3) < GEO.EPS_SMALL then dDimMin2 = dDimMin2 * 2 end end if abs(dDimMin-d3) < 0.03 then -- solo 1 passaggio in centro nCase = 1 elseif (dDimMin-d3) <= ( d3*0.98) then -- solo passaggio di contornatura nCase = 2 elseif ((dDimMin-d3) > ( d3*0.98)) and ( (dDimMin-d3) <= (d3*(1+p3))) then -- passaggio di contornatura + un passaggio centrale nCase = 3 elseif (dDimMin-d3) > (d3*(1+p3)) then -- passaggio di contornatura + passaggi offset nCase = 4 end local nDirVers = 1 local nConEnt local sKindVar local dLocPosY local dLocPosX -- resetto contatori entità nTotContEnt = 0 nTotContEnt_r = 0 nRadius = dDimMin2/2 nPass = 1 dZedStart = 0 nStep = ceil(T3/s3) -- numero di passate dStep = (T3/nStep) -- passo ricalcolato while nPass <= nStep do dZedWork = dZedStart - dStep if nPass == nStep then dZedWork = -T3 end if nCase == 1 then -- solo 1 passaggio in centro if nDirVers == 1 then -- se passata di andata if subtype == 2 or subtype == 3 then dLocPosY = (H3+(d3*3/4)) else dLocPosY = (H3-(H/2)+(d3*3/4)) end pIni = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY, dZedWork) pStartStep = pIni if subtype == 4 then dLocPosY = ((H-d3)/2) end pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), -dLocPosY, dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end else -- altrimenti passata di ritorno if subtype == 2 or subtype == 3 then dLocPosY = (H3+(d3*3/4)) else dLocPosY = ((H-d3)/2) end pIni = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), -dLocPosY, dZedWork) if subtype == 4 then dLocPosY = (H3-(H/2)+(d3*3/4)) end pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY, dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end end -- solo contornatura or contornatura + un passaggio centrale or contornatura + passaggi svuotatura elseif ( nCase == 2) or ( nCase == 3) or ( nCase == 4) then -- calcolo l'ampiezza dell'offset nRadius = nRadius - (d3/2) -- offset hint_ofs = EgtOffsetCurveAdv( hint, (d3/2), GDB_OT.FILLET) if hint_ofs and hint_ofs > 0 then if mkrev then -- se abilitato anche il percorso inverso -- copia del percorso offsettato hint_ofs_r = EgtCopyGlob( hint_ofs, Lg) end -- muovo la geometria in Z EgtMove( hint_ofs, Point3d(0,0,dZedWork) - ORIG()) -- se flag inverso, inverto la geometria, solo qui non nelle altre copie if invG < 0 then EgtInvertCurve(hint_ofs) end if bStartOppo then if not stn or ( stn and invG > 0) then -- se il pivot non sborda if subtype == 2 or subtype == 3 then if B_SK then if not stn then dLocPosY = (H3+(d3*3/4)) else dLocPosY = -(H3+(d3*3/4)) end else dLocPosY = (H3+(d3*3/4)) end if B_SK then if not stn then pIni = Point3d(-((L3-d3)/2)*invG, dLocPosY,dZedWork) else pIni = Point3d((((L3-d3)/2) - 0.2)*invG, dLocPosY,dZedWork) end else pIni = Point3d(-(((L3-d3)/2) - 0.2)*invG, dLocPosY,dZedWork) end pStartStep = pIni -- linea in Y con centro utensile fuori if B_SK then if not stn then dLocPosY = H3+dExtraH else dLocPosY = -(H3+dExtraH) end else dLocPosY = H3+dExtraH end if B_SK then if not stn then pEnd = Point3d(-((L3-d3)/2)*invG, dLocPosY,dZedWork) else pEnd = Point3d((((L3-d3)/2) - 0.2)*invG, dLocPosY,dZedWork) end else pEnd = Point3d(-(((L3-d3)/2) - 0.2)*invG, dLocPosY,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea traversa in X per andare sul vecchio punto iniziale (in X) if B_SK then if not stn then dLocPosX = -((L3-d3)/2)*invG else dLocPosX = -((L3/2)+dExtraH)*invG end else dLocPosX = ((L3-d3)/2)*invG end pEnd = Point3d( dLocPosX, dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') -- linea entrante a prendere il percorso di offset pIni = pEnd pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else -- altro sottotipo dLocPosY = (H3-(H/2)+(d3*3/4)) pIni = Point3d(-(((L3-d3)/2) - 0.2)*invG, dLocPosY,dZedWork) pStartStep = pIni -- linea in Y con centro utensile fuori dLocPosY = (H3-(H/2))+dExtraH pEnd = Point3d(-(((L3-d3)/2) - 0.2)*invG, dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea traversa in X per andare sul vecchio punto iniziale (in X) if stn then -- se è aperto dall'altro lato dLocPosX = ((L3/2)+dExtraH)*invG else dLocPosX = ((L3-d3)/2)*invG end pEnd = Point3d( dLocPosX, dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') -- linea entrante a prendere il percorso di offset pIni = pEnd pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end else -- se il pivot sborda faccio geometria opposta o ruotata in base al sottotipo if subtype == 2 or subtype == 3 then -- inserimento opposto if B_SK then pIni = Point3d(-(((L3-d3)/2) - 0.2)*invG, (H3+(d3*3/4)),dZedWork) pStartStep = pIni -- linea in Y opposta con centro utensile fuori pEnd = Point3d(-(((L3-d3)/2) - 0.2)*invG, (H3+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea in X opposta con centro utensile fuori pEnd = Point3d(((L3/2)+dExtraH)*invG, (H3+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd else pIni = Point3d((((L3-d3)/2) - 0.2)*invG, -(H3+(d3*3/4)),dZedWork) pStartStep = pIni -- linea in Y opposta con centro utensile fuori pEnd = Point3d((((L3-d3)/2) - 0.2)*invG, -(H3+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea in X opposta con centro utensile fuori pEnd = Point3d(-((L3-d3)/2)*invG, -(H3+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd end -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else -- altro tipo: inserimento sul fianco pIni = Point3d(-((L3/2)+(d3*3/4))*invG, (-((H-d3)/2)+0.2),dZedWork) pStartStep = pIni -- linea in X con centro utensile fuori pEnd = Point3d(-((L3/2)+dExtraH)*invG,(-((H-d3)/2)+0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pIni = pEnd pEnd = Point3d(-((L3/2)+dExtraH)*invG,(H3-(H/2)+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((L3-d3)/2)*invG,(H3-(H/2)+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') -- linea entrante a prendere il percorso di offset pIni = pEnd pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end end local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs) nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom) table.insert( tPocket, hint_ofs) else -- se attacco al vecchio punto if not stn or ( stn and invG > 0) then -- se il pivot non sborda -- prima linea entrante if subtype == 2 or subtype == 3 then dLocPosY = (H3+(d3*3/4)) dLocPosX = ((L3-d3)/2)*invG else dLocPosY = (H3-(H/2)+(d3*3/4)) if stn then -- se è aperto dall'altro lato dLocPosX = ((L3/2)+dExtraH)*invG else dLocPosX = ((L3-d3)/2)*invG end end pIni = Point3d( dLocPosX, dLocPosY,dZedWork) pStartStep = pIni pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else -- se il pivot sborda faccio geometria opposta o ruotata in base al sottotipo if subtype == 2 or subtype == 3 then -- inserimento opposto pIni = Point3d((((L3-d3)/2) - 0.2)*invG, -(H3+(d3*3/4)),dZedWork) pStartStep = pIni -- linea in Y opposta con centro utensile fuori pEnd = Point3d((((L3-d3)/2) - 0.2)*invG, -(H3+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea in X opposta con centro utensile fuori pEnd = Point3d(-((L3-d3)/2)*invG, -(H3+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else -- inserimento sul fianco -- prima linea entrante pIni = Point3d(-((L3/2)+(d3*3/4))*invG,(-((H-d3)/2)+0.2),dZedWork) pStartStep = pIni pEnd = Point3d(-((L3/2)+dExtraH)*invG,(-((H-d3)/2)+0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pIni = pEnd pEnd = Point3d(-((L3/2)+dExtraH)*invG,(H3-(H/2)+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((L3-d3)/2)*invG,(H3-(H/2)+dExtraH),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end end local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs) nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom) table.insert( tPocket, hint_ofs) end if mkrev then -- se abilitato anche il percorso inverso end end if nCase == 3 then -- passaggio di contornatura + un passaggio centrale if not stn or ( stn and invG > 0) then -- se il pivot non sborda if subtype == 2 or subtype == 3 then -- linea posizionamento passata centrale if B_SK then if not stn then dLocPosY = H3+dExtraH else dLocPosY = -(H3+dExtraH) end else dLocPosY = H3+dExtraH end pIni = pEnd if B_SK then if not stn then pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) else pEnd = Point3d( EgtIf( stn, -(((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) end else pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale if B_SK then if not stn then dLocPosY = (H3+dExtraH) else dLocPosY = -(H3+dExtraH) end else dLocPosY = (H3+dExtraH) end if B_SK then if not stn then pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), -dLocPosY,dZedWork) else pEnd = Point3d( EgtIf( stn, -(((d3/2)+dExtraH)/2), 0), -dLocPosY,dZedWork) end else pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), -dLocPosY,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then if B_SK then if not stn then dLocPosY = H3+dExtraH else dLocPosY = -(H3+dExtraH) end else dLocPosY = H3+dExtraH end if B_SK then if not stn then pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) else pEnd = Point3d( EgtIf( stn, -(((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) end else pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end else -- linea posizionamento passata centrale dLocPosY = (H3-(H/2))+dExtraH pIni = pEnd pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale dLocPosY = ((H-d3)/2)-0.2 pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), -dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then dLocPosY = (H3-(H/2))+dExtraH pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end end else -- il pivot sborda, inserimento opposto if subtype == 2 or subtype == 3 then -- linea posizionamento passata centrale if B_SK then dLocPosY = -(H3+dExtraH) else dLocPosY = H3+dExtraH end pIni = pEnd if B_SK then pEnd = Point3d( EgtIf( stn, -(((d3/2)+dExtraH)/2), 0), -dLocPosY,dZedWork) else pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), -dLocPosY,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale pEnd = Point3d( pIni:getX(), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then pEnd = Point3d( pIni:getX(), -dLocPosY+dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end else -- altrimenti altro sottotipo -- linea posizionamento passata centrale dLocPosY = (H3-(H/2)) pIni = pEnd pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY+dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale dLocPosY = ((H-d3)/2)-0.2 pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), -dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then dLocPosY = (H3-(H/2)) pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY+dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end end end elseif nCase == 4 then -- passaggio di contornatura + passaggi svuotatura local nDistYcentr = (d3*p3) local bContinue -- se percorso offset esiste if hint_ofs and hint_ofs > 0 then -- faccio l'offset del raggio fresa nRadius = nRadius - nDistYcentr bContinue = nRadius > 0 nCountOfs = 0 local nInvOffs = 1 local bFailOfs = false local dCompareX = L3 local dCompareY = H3 local dRemX, dRemY if stn then dCompareX = L3+(d3/2)+dExtraH end if subtype == 2 or subtype == 3 then dCompareY = H3*2 end -- se percorso offset esiste while bContinue do hint_ofs2 = EgtOffsetCurveAdv( hint_ofs, nDistYcentr*invG*nInvOffs, GDB_OT.FILLET) if hint_ofs2 and hint_ofs2 > 0 then nCountOfs = nCountOfs + 1 -- linea congiunzione tra offset pIni = pEnd -- inverto il percorso EgtInvertCurve(hint_ofs2) pEnd = EgtSP( hint_ofs2, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, YELLOW(), YELLOW(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs2, GDB_RT.GRID) hint_ofs = hint_ofs2 local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs) nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom) table.insert( tPocket, hint_ofs) if mkrev then -- se abilitato anche il percorso inverso end -- calcolo nuovo passo in Y e indice direzione nRadius = nRadius - nDistYcentr if nRadius > 0 then dRemX, dRemY = CkeckRadiusRemain( dCompareX, dCompareY, d3, nDistYcentr, (nCountOfs+1)) if (dRemX and dRemX > (d3/4)) or ( dRemY and dRemY > d3) then bContinue = true else bContinue = false end else bContinue = false end nInvOffs = -nInvOffs else bContinue = false bFailOfs = true end end -- end while if p > 0.75 then -- se la percentuale di sovrapposizione è alta local nMakeExtraPass = 0 -- ricalcolo le rimanenze dRemX, dRemY = CkeckRadiusRemain( dCompareX, dCompareY, d3, nDistYcentr, nCountOfs) -- calcolo in quale direzione ha collassato if dRemX > dRemY then -- se larghezza risultante maggiore if dRemY > d3 then -- se la passata precedente è maggiore del diametro utensile nMakeExtraPass = 2 -- passata orizzontale end else -- altezza risultante maggiore della larghezza if dRemX > (d3/2.02) then -- se la passata precedente è maggiore del raggio utensile nMakeExtraPass = 1 -- passata verticale end end if nMakeExtraPass == 1 then -- se passata verticale if subtype == 2 or subtype == 3 then -- linea posizionamento passata centrale if B_SK then if invG > 0 then dLocPosY = -(H3+dExtraH) else dLocPosY = (H3+dExtraH) end else dLocPosY = H3+dExtraH end pIni = pEnd if B_SK then if invG > 0 then pEnd = Point3d( EgtIf( stn, -(((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) else pEnd = Point3d( EgtIf( stn, -(((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) end else pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale pEnd = Point3d( pIni:getX(), -dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then pEnd = Point3d( pIni:getX(), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end else -- altrimenti atro sottotipo -- linea posizionamento passata centrale dLocPosY = (H3-(H/2))+dExtraH pIni = pEnd pEnd = Point3d( EgtIf( stn, (((d3/2)+dExtraH)/2), 0), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale dLocPosY = ((H-d3)/2)-0.2 pEnd = Point3d( pIni:getX(), -dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then dLocPosY = (H3-(H/2))+dExtraH pEnd = Point3d( pIni:getX(), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end end elseif nMakeExtraPass == 2 then -- se passata orizzontale if subtype == 2 or subtype == 3 then -- linea posizionamento passata orizzontale pIni = pEnd if B_SK then if invG > 0 then dLocPosY = -(H3+dExtraH) else dLocPosY = (H3+dExtraH) end pEnd = Point3d( EgtIf( stn, -((L3+(d3/2)+dExtraH)/2), -((L3/2)-(d3*3/4))), dLocPosY,dZedWork) else dLocPosY = (H3+dExtraH) pEnd = Point3d( EgtIf( stn, ((L3+(d3/2)+dExtraH)/2), ((L3/2)-(d3*3/4))), dLocPosY,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linea posizionamento in Y if B_SK then if invG > 0 then dLocPosY = (H3-(d3/2)) else dLocPosY = -(H3-(d3/2)) end else dLocPosY = -(H3-(d3/2)) end pEnd = Point3d( pIni:getX(), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linea attraversamento in X if B_SK then if invG > 0 then pEnd = Point3d( ((L3/2)-(d3*3/4)), pIni:getY(),dZedWork) else pEnd = Point3d( -((L3/2)-(d3*3/4)), pIni:getY(),dZedWork) end else pEnd = Point3d( -((L3/2)-(d3*3/4)), pIni:getY(),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- risalgo in Y fuori dalla svuotatura if B_SK then if invG > 0 then dLocPosY = -(H3+(d3*3/4)) else dLocPosY = (H3+(d3*3/4)) end else dLocPosY = (H3+(d3*3/4)) end pEnd = Point3d( pIni:getX(), dLocPosY,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd if mkrev then -- se abilitato anche il percorso inverso end else dLocPosY = (H3-(H/2)) -- linea posizionamento passata orizzontale pIni = pEnd pEnd = Point3d( EgtIf( stn, (((L3+d3)/2)+dExtraH)-(d3*3/4), (L3/2)-(d3*3/4)), dLocPosY+dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linea posizionamento in Y pEnd = Point3d( pIni:getX(), dLocPosY-(d3/2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linea attraversamento in X pEnd = Point3d( -((L3/2)-(d3*3/4)), pIni:getY(),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- risalgo in Y fuori dalla svuotatura pEnd = Point3d( pIni:getX(), dLocPosY+(d3*3/4),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd if mkrev then -- se abilitato anche il percorso inverso end end end end end end end nPass = nPass + 1 dZedStart = dZedStart - dStep nRadius = dDimMin2/2 nDirVers = -nDirVers -- se ho altri passi torno al punto di inizio if nPass <= nStep and nCase > 1 then pIni = pEnd if not stn or ( stn and invG > 0) then -- se il pivot non sborda pEnd = Point3d(pIni:getX(),pStartStep:getY(),dZedStart) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar, {nTotContEnt,sKindVar}) pIni = pEnd pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar, {nTotContEnt,sKindVar}) else -- se il pivot sborda faccio geometria opposta o ruotata in base al sottotipo if subtype == 2 or subtype == 3 then -- inserimento opposto pEnd = Point3d(pIni:getX(),pStartStep:getY(),dZedStart) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar, {nTotContEnt,sKindVar}) pIni = pEnd pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar, {nTotContEnt,sKindVar}) else -- inserimento sul fianco pEnd = Point3d(pStartStep:getX(),pIni:getY(),dZedStart) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar, {nTotContEnt,sKindVar}) pIni = pEnd pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket, bPreview, Dm, (d3/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar, {nTotContEnt,sKindVar}) end end if mkrev then -- se abilitato anche il percorso inverso end end end -- end while end ------------------------------------- -- se è presente la geometria body ------------------------------------- if d and hint2 then local dDimMin local dDimMin2 local nDirVers = 1 local nConEnt local sKindVar local dLocXStart, dLocYStart, dLocZStart, dLocXAmp, dLocYAmp if subtype == 2 or subtype == 3 then EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.FRONT)) dLocZStart = H3 if subtype == 2 then dLocXAmp = L dLocYAmp = H else dLocXAmp = H dLocYAmp = L end -- individuo in che caso sono if dLocXAmp > dLocYAmp then local dLenComp = EgtIf( stx, dLocXAmp+(d/2)+dExtraH,dLocXAmp) dDimMin = max( dLocYAmp, dLenComp) dDimMin2 = min( dLocYAmp, dLenComp) dDimMin2 = dDimMin2 * 2 else -- se larghezza più stretta dell'altezza local dLenComp = EgtIf( stx, dLocXAmp+(d/2)+dExtraH,dLocXAmp) dDimMin2 = min( dLocYAmp, dLenComp) dDimMin = dDimMin2 if abs( dDimMin2 - dLocYAmp) < GEO.EPS_SMALL then -- se il minimo è sull'altezza if dLenComp/dDimMin2 >= 2 then -- se lunghezza è più del doppio dell'altezza dDimMin2 = dDimMin2 * 2 end end end else EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.RIGHT)) dLocZStart = L3/2 -- individuo in che caso sono dLocXAmp = L dLocYAmp = H dDimMin = min( L, EgtIf( stx, H+(d/2)+dExtraH,H)) dDimMin2 = dDimMin end if abs(dDimMin-d) < 0.03 then -- solo 1 passaggio in centro nCase = 1 elseif (dDimMin-d) <= ( d*0.98) then -- solo passaggio di contornatura nCase = 2 elseif ((dDimMin-d) > ( d*0.98)) and ( (dDimMin-d) <= (d*(1+p))) then -- passaggio di contornatura + un passaggio centrale nCase = 3 elseif (dDimMin-d) > (d*(1+p)) then -- passaggio di contornatura + passaggi offset nCase = 4 end -- resetto contatori entità nTotContEnt = 0 nTotContEnt_r = 0 nRadius = dDimMin2/2 nPass = 1 dZedStart = dLocZStart nStep = ceil(T/sf) -- numero di passate dStep = (T/nStep) -- passo ricalcolato while nPass <= nStep do dZedWork = dZedStart - dStep if nPass == nStep then -- if nStep == 1 then -- dZedWork = dZedStart -- else dZedWork = dLocZStart-T -- end end if nCase == 1 then -- solo 1 passaggio in centro if nDirVers == 1 then -- se passata di andata if subtype == 2 then if bStartOppo then if invG > 0 then pIni = Point3d((((L3+d)/2) - L), (d*3/4),dZedWork) pStartStep = pIni pEnd = Point3d((((L3+d)/2) - L), -H+(d/2), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd if stx then pEnd = Point3d(((L3/2)+(d*3/4)),-H+(d/2),dZedWork) else pEnd = Point3d(((L3-d)/2),-H+(d/2),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end else if stx then pIni = Point3d(((L3/2)+(d*3/4)),-H+(d/2),dZedWork) else pIni = Point3d(((L3-d)/2),(d*3/4),dZedWork) end pStartStep = pIni if stx then pEnd = Point3d((((L3+d)/2) - L), -H+(d/2), dZedWork) else pEnd = Point3d(((L3-d)/2),-H+(d/2),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd if stx then pEnd = Point3d((((L3+d)/2) - L), (d*3/4),dZedWork) else pEnd = Point3d((((L3+d)/2) - L), -H+(d/2),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end end else -- codice vetusto: da verificare if invG > 0 then if stx then pIni = Point3d(((L3/2)+(d*3/4)),-H+(d/2), dZedWork) else pIni = Point3d(((L3-d)/2),(d*3/4), dZedWork) end pStartStep = pIni if stx then pEnd = Point3d((((L3+d)/2) - L), -H+(d/2), dZedWork) else pEnd = Point3d(((L3-d)/2), -H+(d/2), dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd if stx then pEnd = Point3d((((L3+d)/2) - L), (d*3/4),dZedWork) else pEnd = Point3d((((L3+d)/2) - L), -H+(d/2),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end else pIni = Point3d((((L3+d)/2) - L), (d*3/4), dZedWork) pStartStep = pIni pEnd = Point3d((((L3+d)/2) - L), -H+(d/2), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd if stx then pEnd = Point3d(((L3/2)+(d*3/4)),-H+(d/2),dZedWork) else pEnd = Point3d(((L3-d)/2),-H+(d/2),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end end end elseif subtype == 3 then pIni = Point3d( EgtIf( stx, -((d/2)+dExtraH)*invG, 0), (d*3/4), dZedWork) pStartStep = pIni pEnd = Point3d( EgtIf( stx, -((d/2)+dExtraH)*invG, 0), -L+(d/2), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end elseif subtype == 4 then pIni = Point3d( EgtIf( stx, ((d/2)+dExtraH), 0)*invG, (d*3/4), dZedWork) pStartStep = pIni pEnd = Point3d( EgtIf( stx, ((d/2)+dExtraH), 0)*invG, -(L-(d/2)), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end end else -- altrimenti passata di ritorno if subtype == 2 then if bStartOppo then if invG > 0 then if stx then pIni = Point3d(((L3/2)+(d*3/4)),-H+(d/2),dZedWork) else pIni = Point3d(((L3-d)/2), -H+(d/2), dZedWork) end pEnd = Point3d((((L3+d)/2) - L),-H+(d/2), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d((((L3+d)/2) - L), (d*3/4),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end else if stx then pIni = Point3d((((L3+d)/2) - L), (d*3/4),dZedWork) pEnd = Point3d((((L3+d)/2) - L), -H+(d/2), dZedWork) else pIni = Point3d((((L3+d)/2) - L), -H+(d/2),dZedWork) pEnd = Point3d(((L3-d)/2),-H+(d/2),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd if stx then pEnd = Point3d(((L3/2)+(d*3/4)),-H+(d/2),dZedWork) else pEnd = Point3d(((L3-d)/2),(d*3/4),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end end else -- codice vetusto, da verificare if invG > 0 then if stx then pIni = Point3d((((L3+d)/2) - L), (d*3/4),dZedWork) pEnd = Point3d((((L3+d)/2) - L), -H+(d/2), dZedWork) else pIni = Point3d((((L3+d)/2) - L), -H+(d/2),dZedWork) pEnd = Point3d(((L3-d)/2),-H+(d/2),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd if stx then pEnd = Point3d(((L3/2)+(d*3/4)),-H+(d/2),dZedWork) else pEnd = Point3d(((L3-d)/2),(d*3/4),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end else if stx then pIni = Point3d(((L3/2)+(d*3/4)),-H+(d/2),dZedWork) else pIni = Point3d(((L3-d)/2), -H+(d/2), dZedWork) end pEnd = Point3d((((L3+d)/2) - L),-H+(d/2), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d((((L3+d)/2) - L), (d*3/4),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end end end elseif subtype == 3 then pIni = Point3d( EgtIf( stx, -((d/2)+dExtraH)*invG, 0), -L+(d/2), dZedWork) pEnd = Point3d( EgtIf( stx, -((d/2)+dExtraH)*invG, 0), (d*3/4), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end elseif subtype == 4 then pIni = Point3d( EgtIf( stx, ((d/2)+dExtraH), 0)*invG, -(L-(d/2)), dZedWork) pEnd = Point3d( EgtIf( stx, ((d/2)+dExtraH), 0)*invG, (d*3/4), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata scendo in Z if nPass < nStep then pEnd = Point3d( pIni:getX(), pIni:getY(), (dZedWork-dStep)) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, RED(), RED(), nil, nil, 'grid') end if mkrev then -- se abilitato anche il percorso inverso end end end -- solo contornatura or contornatura + un passaggio centrale or contornatura + passaggi svuotatura elseif ( nCase == 2) or ( nCase == 3) or ( nCase == 4) then -- calcolo l'ampiezza dell'offset nRadius = nRadius - (d/2) -- offset hint_ofs = EgtOffsetCurveAdv( hint2, (d/2), GDB_OT.FILLET) if hint_ofs and hint_ofs > 0 then if mkrev then -- se abilitato anche il percorso inverso -- copia del percorso offsettato hint_ofs_r = EgtCopyGlob( hint_ofs, Lg) end -- muovo la geometria in Z EgtMove( hint_ofs, Point3d(0,0, dZedWork-dLocZStart) - ORIG(), GDB_RT.GRID) -- se flag inverso, inverto la geometria, solo qui non nelle altre copie if invG < 0 then EgtInvertCurve(hint_ofs) end if bStartOppo then if subtype == 2 then if invG > 0 then if B_SK and stx then -- se knuckle è opposto e sborda faccio geometria ruotata pIni = Point3d( ((L3/2) - L - (d*3/4)), -(H-(d/2)-0.2),dZedWork) pStartStep = pIni pEnd = Point3d(((L3/2) - L - dExtraH), -(H-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pEnd = Point3d(((L3/2) - L - dExtraH), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd if stx then pEnd = Point3d( (((L3+d)/2) - L), dExtraH,dZedWork) else pEnd = Point3d( (((L3-d)/2) - L), dExtraH,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd else -- altrimenti diritta pIni = Point3d((((L3+d)/2) - L + 0.2), (d*3/4),dZedWork) pStartStep = pIni -- linea in Y con centro utensile fuori pEnd = Point3d((((L3+d)/2) - L + 0.2), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea traversa in X per andare sul vecchio punto iniziale (in X) if stx then pEnd = Point3d(((L3/2)+dExtraH),dExtraH,dZedWork) else pEnd = Point3d(((L3-d)/2), dExtraH,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd end -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else if stx and not B_SK then -- se il pivot sborda e il knukle non è opposto, faccio geometria ruotata pIni = Point3d(((L3/2)+(d*3/4)), -(H-(d/2)-0.2),dZedWork) pStartStep = pIni pEnd = Point3d(((L3/2) + dExtraH), -(H-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pEnd = Point3d(((L3/2) + dExtraH), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((L3-d)/2), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd else -- altrimenti geometria dritta pIni = Point3d(((L3-d)/2),(d*3/4),dZedWork) pStartStep = pIni pEnd = Point3d(((L3-d)/2), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd end -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end elseif subtype == 3 then if not stx or ( stx and invG > 0) then -- se il pivot non sborda pIni = Point3d(-(((H-d)/2) - 0.2)*invG, (d*3/4),dZedWork) pStartStep = pIni -- linea in Y con centro utensile fuori pEnd = Point3d(-(((H-d)/2) - 0.2)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea traversa in X per andare sul vecchio punto iniziale (in X) pEnd = Point3d(((H-d)/2)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else -- se il pivot sborda faccio geometria ruotata pIni = Point3d(-((H/2)+(d*3/4))*invG, -(L-(d/2)-0.2),dZedWork) pStartStep = pIni -- linea in X con centro utensile fuori pEnd = Point3d(-((H/2)+dExtraH)*invG, -(L-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pEnd = Point3d(-((H/2)+dExtraH)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((H-d)/2)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end elseif subtype == 4 then if not stx or ( stx and invG > 0) then -- se il pivot non sborda pIni = Point3d(-(((H-d)/2)-0.2)*invG, (d*3/4),dZedWork) pStartStep = pIni -- linea in Y con centro utensile fuori pEnd = Point3d(-(((H-d)/2)-0.2)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea traversa in X per andare sul vecchio punto iniziale (in X) pEnd = Point3d(((H-d)/2)*invG,dExtraH, dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else -- se il pivot sborda faccio geometria ruotata pIni = Point3d(-((H/2)+(d*3/4))*invG,-(L-(d/2)-0.2), dZedWork) pStartStep = pIni -- linea in X con centro utensile fuori pEnd = Point3d(-((H/2)+dExtraH)*invG,-(L-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pEnd = Point3d( -((H/2)+dExtraH)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((H-d)/2)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end end local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs) nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom) table.insert( tPocket2, hint_ofs) else -- se attacco al vecchio punto, codice vetusto: da verificare if subtype == 2 then if not stx or ( stx and invG > 0) then -- se il pivot non sborda -- prima linea entrante pIni = Point3d(((L3-d)/2)*invG, (d*3/4),dZedWork) pStartStep = pIni pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else pIni = Point3d(((L3/2) - L - (d*3/4))*invG, -(H-(d/2)-0.2),dZedWork) pStartStep = pIni -- linea in X con centro utensile fuori pEnd = Point3d(((L3/2) - L - dExtraH)*invG, -(H-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pEnd = Point3d(((L3/2) - L - dExtraH)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((L3-d)/2)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end elseif subtype == 3 then if not stx or ( stx and invG > 0) then -- se il pivot non sborda -- prima linea entrante pIni = Point3d(((H-d)/2)*invG, (d*3/4),dZedWork) pStartStep = pIni pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else pIni = Point3d(-((H/2)+(d*3/4))*invG, -(L-(d/2)-0.2),dZedWork) pStartStep = pIni -- linea in X con centro utensile fuori pEnd = Point3d(-((H/2)+dExtraH)*invG, -(L-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linee traverse in Y e poi X per andare sul vecchio punto iniziale (in X) pEnd = Point3d(-((H/2)+dExtraH)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(((H-d)/2)*invG, dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end elseif subtype == 4 then if not stx or ( stx and invG > 0) then -- se il pivot non sborda pIni = Point3d(-(d*3/4), ((H-d)/2)*invG,dZedWork) pStartStep = pIni -- prima linea entrante pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) else pIni = Point3d( L-(d/2)-0.2, -((H/2)+(d*3/4))*invG,dZedWork) pStartStep = pIni -- linea in Y con centro utensile fuori pEnd = Point3d( L-(d/2)-0.2,-((H/2)+dExtraH)*invG,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linee traverse in X e poi Y per andare sul vecchio punto iniziale (in Y) pEnd = Point3d( -dExtraH,-((H/2)+dExtraH)*invG,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d(-dExtraH,((H-d)/2)*invG,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pIni = pEnd -- linea entrante a prendere il percorso di offset pEnd = EgtSP( hint_ofs, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, RED(), RED(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs, GDB_RT.GRID) end end local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs) nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom) table.insert( tPocket2, hint_ofs) end if mkrev then -- se abilitato anche il percorso inverso end end if nCase == 3 then -- passaggio di contornatura + un passaggio centrale if subtype == 2 then local nMakeExtraPass = 0 local dRemX = L local dRemY = H if stx then dRemX = dRemX + (d/2) end -- calcolo in quale direzione ha collassato if dRemX > dRemY then -- se larghezza risultante maggiore nMakeExtraPass = 2 -- passata orizzontale else -- altezza risultante maggiore della larghezza nMakeExtraPass = 1 -- passata verticale end if nMakeExtraPass == 1 then -- se passata verticale -- linea posizionamento passata centrale pIni = pEnd if B_SK then pEnd = Point3d( EgtIf( stx, -((L - (L3 - (d/2) - dExtraH))/2), -((L-L3)/2)), dExtraH, dZedWork) else pEnd = Point3d( EgtIf( stx, ((L3 - (L - (d/2) - dExtraH))/2), ((L3-L)/2)), dExtraH, dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale if B_SK then pEnd = Point3d( EgtIf( stx, -((L - (L3 - (d/2) - dExtraH))/2), -((L-L3)/2)), -(H-(d/2)-dExtraH), dZedWork) else pEnd = Point3d( EgtIf( stx, ((L3 - (L - (d/2) - dExtraH))/2), ((L3-L)/2)), -(H-(d/2)-dExtraH), dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della svuotatura if nPass < nStep then if B_SK then pEnd = Point3d( EgtIf( stx, -((L - (L3 - (d/2) - dExtraH))/2), -((L-L3)/2)), (d*3/4), dZedWork) else pEnd = Point3d( EgtIf( stx, ((L3 - (L - (d/2) - dExtraH))/2), ((L3-L)/2)), (d*3/4), dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end elseif nMakeExtraPass == 2 then -- se passata orizzontale -- linea posizionamento passata centrale pIni = pEnd if B_SK then pEnd = Point3d( EgtIf( stx, -((L3+(d/2)+dExtraH)/2), -(L3-d)/2), dExtraH, dZedWork) else pEnd = Point3d( EgtIf( stx, ((L3+(d/2)+dExtraH)/2), (L3-d)/2), dExtraH, dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale if B_SK then pEnd = Point3d( EgtIf( stx, -((L3+(d/2)+dExtraH)/2), -(L3-d)/2), -(H/2), dZedWork) else pEnd = Point3d( EgtIf( stx, ((L3+(d/2)+dExtraH)/2), (L3-d)/2), -(H/2), dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd if B_SK then pEnd = Point3d( -((L3/2)-L+(d/2)), -(H/2), dZedWork) else pEnd = Point3d( (L3/2)-L+(d/2), -(H/2), dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della svuotatura if nPass < nStep then if B_SK then pEnd = Point3d( -((L3/2)-L+(d/2)), (d*3/4), dZedWork) else pEnd = Point3d( (L3/2)-L+(d/2), (d*3/4), dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end end elseif subtype == 3 then -- linea posizionamento passata centrale pIni = pEnd pEnd = Point3d( EgtIf( stx, (((d/2)+dExtraH)/2), 0), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale pEnd = Point3d( EgtIf( stx, (((d/2)+dExtraH)/2), 0), -(L-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then pEnd = Point3d( EgtIf( stx, (((d/2)+dExtraH)/2), 0), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end elseif subtype == 4 then -- linea posizionamento passata centrale pIni = pEnd pEnd = Point3d( EgtIf( stx, (((d/2)+dExtraH)/2), 0), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale pEnd = Point3d( EgtIf( stx, (((d/2)+dExtraH)/2), 0), -(L-(d/2)-0.2), dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then pEnd = Point3d( EgtIf( stx, (((d/2)+dExtraH)/2), 0), dExtraH, dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end end elseif nCase == 4 then -- passaggio di contornatura + passaggi svuotatura local nDistYcentr = (d*p) local nDistYcentrRad local bContinue if subtype == 2 or subtype == 3 then nDistYcentrRad = nDistYcentr else if L > H then -- la lunghezza L è sulla X e la H sulla Y nDistYcentrRad = nDistYcentr else nDistYcentrRad = nDistYcentr/2 end end -- se percorso offset esiste if hint_ofs and hint_ofs > 0 then -- faccio l'offset del raggio fresa nRadius = nRadius - nDistYcentrRad bContinue = nRadius > 0 nCountOfs = 0 local nInvOffs = 1 local bFailOfs = false local dCompareX = dLocXAmp local dCompareY = dLocYAmp local dRemX, dRemY if stx then dCompareX = dLocXAmp+(d/2)+dExtraH end -- se percorso offset esiste while bContinue do hint_ofs2 = EgtOffsetCurveAdv( hint_ofs, nDistYcentr*invG*nInvOffs, GDB_OT.FILLET) if hint_ofs2 and hint_ofs2 > 0 then nCountOfs = nCountOfs + 1 -- linea congiunzione tra offset pIni = pEnd -- inverto il percorso EgtInvertCurve(hint_ofs2) pEnd = EgtSP( hint_ofs2, GDB_RT.GRID) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), nil, nil, 'grid') pEnd = EgtEP( hint_ofs2, GDB_RT.GRID) hint_ofs = hint_ofs2 local ntypeDom, nNumCurve = EgtCurveDomain(hint_ofs) nTotContEnt = nTotContEnt + ( nNumCurve - ntypeDom) table.insert( tPocket2, hint_ofs) if mkrev then -- se abilitato anche il percorso inverso end -- calcolo nuovo passo in Y e indice direzione nRadius = nRadius - nDistYcentrRad if nRadius > 0 then dRemX, dRemY = CkeckRadiusRemain( dCompareX, dCompareY, d, nDistYcentrRad, (nCountOfs+1)) if (dRemX and dRemX > (d/4)) or ( dRemY and dRemY > d) then bContinue = true else bContinue = false end else bContinue = false end nInvOffs = -nInvOffs else bContinue = false bFailOfs = true end end -- end while if subtype == 2 or subtype == 3 then if p > 0.75 then -- se la percentuale di sovrapposizione è alta local nMakeExtraPass = 0 -- ricalcolo le rimanenze dRemX, dRemY = CkeckRadiusRemain( dCompareX, dCompareY, d, nDistYcentrRad, nCountOfs) -- calcolo in quale direzione ha collassato if dRemX > dRemY then -- se larghezza risultante maggiore if dRemY > d then -- se la passata precedente è maggiore del diametro utensile nMakeExtraPass = 2 -- passata orizzontale end else -- altezza risultante maggiore della larghezza if dRemX > (d/2.03) then -- se la passata precedente è maggiore del raggio utensile nMakeExtraPass = 1 -- passata verticale end end if nMakeExtraPass == 1 then -- se passata verticale -- linea posizionamento passata centrale pIni = pEnd if subtype == 2 then if B_SK then pEnd = Point3d( EgtIf( stx, (((L3-dLocXAmp)-((d/2)+dExtraH))/2), ((L3-dLocXAmp)/2)), dExtraH,dZedWork) else pEnd = Point3d( EgtIf( stx, (((L3-dLocXAmp)+((d/2)+dExtraH))/2), ((L3-dLocXAmp)/2)), dExtraH,dZedWork) end else pEnd = Point3d( EgtIf( stx, (((d/2)+dExtraH)/2), 0), dExtraH,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- linee passata centrale pEnd = Point3d( pIni:getX(), -(dLocYAmp-(d/2)-0.2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- se non sono all'ultima passata ritorno al punto di inizio della passata centrale, -- si perde un po' di tempo ma è l'unica per poter rifare il passo if nPass < nStep then pEnd = Point3d( pIni:getX(), dExtraH,dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd end if mkrev then -- se abilitato anche il percorso inverso end elseif nMakeExtraPass == 2 then -- se passata orizzontale -- linea posizionamento passata orizzontale pIni = pEnd if subtype == 2 then pEnd = Point3d( EgtIf( stx, ((L3+(d/2)+dExtraH)/2), (L3/2)-(d*3/4)), dExtraH,dZedWork) else pEnd = Point3d( EgtIf( stx, ((dLocXAmp+(d/2)+dExtraH)/2), (dLocXAmp/2)-(d*3/4)), dExtraH,dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd pEnd = Point3d( pIni:getX(), -(d/2),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd if subtype == 2 then pEnd = Point3d( ((L3/2)-L+(d*3/4)), pIni:getY(),dZedWork) else pEnd = Point3d( -((dLocXAmp/2)-(d*3/4)), pIni:getY(),dZedWork) end DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd -- risalgo in Y fuori dalla svuotatura pEnd = Point3d( pIni:getX(), (d*3/4),dZedWork) DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), true, true, YELLOW(), YELLOW(), nil, nil, 'grid') pIni = pEnd if mkrev then -- se abilitato anche il percorso inverso end end end elseif subtype == 4 then end end end end nPass = nPass + 1 dZedStart = dZedStart - dStep nRadius = dDimMin2/2 nDirVers = -nDirVers -- se ho altri passi torno al punto di inizio if nPass <= nStep and nCase > 1 then pIni = pEnd if not stx or ( stx and invG > 0) then -- se il pivot non sborda if B_SK and stx then -- se il knuckle è opposto faccio come se sborda (attacco ruotato) pEnd = Point3d(pStartStep:getX(),pIni:getY(),dZedStart) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) pIni = pEnd pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) else -- altrimenti non sborda (attacco normale) pEnd = Point3d(pIni:getX(),pStartStep:getY(),dZedStart) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) pIni = pEnd pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) end else -- se il pivot sborda faccio geometria ruotata if B_SK then -- se il knuckle è opposto faccio come se non sborda (attacco normale) pEnd = Point3d(pIni:getX(),pStartStep:getY(),dZedStart) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) pIni = pEnd pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) else -- altrimenti sborda (attacco ruotato) pEnd = Point3d(pStartStep:getX(),pIni:getY(),dZedStart) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) pIni = pEnd pEnd = Point3d(pStartStep:getX(),pStartStep:getY(),(dZedStart - dStep)) _, nConEnt, sKindVar = DrawAddLineDrawCircle( pIni, pEnd, Lg, tPocket2, bPreview, Dm, (d/2), false, true, YELLOW(), YELLOW(), sMaxFeed, nil, 'grid') table.insert( tMVar2, {nTotContEnt,sKindVar}) end end if mkrev then -- se abilitato anche il percorso inverso end end end -- end while EgtSetGridFrame( Frame3d( 0,0,0, GDB_FR.TOP)) end -- trasformo in geometria composita if ( #tPocket > 0) then hintPk = EgtCurveCompo( Lg, tPocket, true) if hintPk then EgtModifyCurveThickness(hintPk, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar[i][1], 0) .. ', ' .. 'code=' .. tMVar[i][2] .. '}' if i < #tMVar then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintPk, 'MVar', sListEnt) end EgtSetName(hintPk,LM) end end if ( #tPocket2 > 0) then hintPk2 = EgtCurveCompo( Lg, tPocket2, true) if hintPk2 then EgtModifyCurveThickness(hintPk2, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar2 do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar2[i][1], 0) .. ', ' .. 'code=' .. tMVar2[i][2] .. '}' if i < #tMVar2 then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintPk2, 'MVar', sListEnt) end EgtSetName(hintPk2,LMV) end end if ( #tPocket_r > 0) then hintPk_r = EgtCurveCompo( Lg, tPocket_r, true) if hintPk_r then EgtModifyCurveThickness(hintPk_r, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar_r do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar_r[i][1], 0) .. ', ' .. 'code=' .. tMVar_r[i][2] .. '}' if i < #tMVar_r then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintPk_r, 'MVar', sListEnt) end EgtSetName(hintPk_r,(LM..'_R')) end end if ( #tPocket2_r > 0) then hintPk2_r = EgtCurveCompo( Lg, tPocket2_r, true) if hintPk2_r then EgtModifyCurveThickness(hintPk2_r, 0) -- assegno nota con la lista delle entità di variazione local sListEnt = '' for i = 1, #tMVar2_r do sListEnt = sListEnt .. '{ ent=' .. EgtNumToString( tMVar2_r[i][1], 0) .. ', ' .. 'code=' .. tMVar2_r[i][2] .. '}' if i < #tMVar2_r then sListEnt = sListEnt .. ',' end end -- end for if string.len( sListEnt) > 0 then EgtSetInfo( hintPk2_r, 'MVar', sListEnt) end EgtSetName(hintPk2_r,(LMV..'_R')) end end -- se variabile inversione negativa inverto la direzione del percorso geometrico principale if invG < 0 then if hint then EgtInvertCurve(hint) end if hint2 then EgtInvertCurve(hint2) end end end -- se c'è lo spostamento opposto del percorso body if D_SK > 0 then if hint2 then EgtMove( hint2, Point3d(D_SK,0,0) - ORIG()) end if hintPk2 then EgtMove( hintPk2, Point3d(D_SK,0,0) - ORIG()) end if hintAs1b then EgtMove( hintAs1b, Point3d(D_SK,0,0) - ORIG()) end if hintAs2b then EgtMove( hintAs2b, Point3d(D_SK,0,0) - ORIG()) end if hintPk2_r then EgtMove( hintPk2_r, Point3d(D_SK,0,0) - ORIG()) end if hintAs3b then EgtMove( hintAs3b, Point3d(D_SK,0,0) - ORIG()) end -- DEBUG -- EgtSaveFile( sNgeFile) -- EgtMove(DGD.PZ, Point3d(0,0,nil) - ORIG()) if hintAs4b then EgtMove( hintAs4b, Point3d(D_SK,0,0) - ORIG()) end end -- se abilitata solo geometria di lavorazione elimino il percorso di sola geometria if nDrawMach == 1 then if hint then -- cancello il percorso EgtErase( hint) end if hint2 then -- cancello il percorso EgtErase( hint2) end end -- cambio colore alla geometria if bPreview then if EC == 0 then -- geometrie knuckle if hint then EgtSetColor(hint,AQUA()) end if hintPk then EgtSetColor(hintPk,AQUA()) end if hintAs1 then EgtSetColor(hintAs1,AQUA()) end if hintAs2 then EgtSetColor(hintAs2,AQUA()) end if hintPk_r then EgtSetColor(hintPk_r,AQUA()) end if hintAs3 then EgtSetColor(hintAs3,AQUA()) end if hintAs4 then EgtSetColor(hintAs4,AQUA()) end -- geometrie body if hint2 then EgtSetColor(hint2,AQUA()) end if hintPk2 then EgtSetColor(hintPk2,AQUA()) end if hintAs1b then EgtSetColor(hintAs1b,AQUA()) end if hintAs2b then EgtSetColor(hintAs2b,AQUA()) end if hintPk2_r then EgtSetColor(hintPk2_r,AQUA()) end if hintAs3b then EgtSetColor(hintAs3b,AQUA()) end if hintAs4b then EgtSetColor(hintAs4b,AQUA()) end else -- geometrie knuckle if hint then EgtSetColor(hint,ORANGE()) end if hintPk then EgtSetColor(hintPk,ORANGE()) end if hintAs1 then EgtSetColor(hintAs1,ORANGE()) end if hintAs2 then EgtSetColor(hintAs2,ORANGE()) end if hintPk_r then EgtSetColor(hintPk_r,ORANGE()) end if hintAs3 then EgtSetColor(hintAs3,ORANGE()) end if hintAs4 then EgtSetColor(hintAs4,ORANGE()) end -- geometrie body if hint2 then EgtSetColor(hint2,ORANGE()) end if hintPk2 then EgtSetColor(hintPk2,ORANGE()) end if hintAs1b then EgtSetColor(hintAs1b,ORANGE()) end if hintAs2b then EgtSetColor(hintAs2b,ORANGE()) end if hintPk2_r then EgtSetColor(hintPk2_r,ORANGE()) end if hintAs3b then EgtSetColor(hintAs3b,ORANGE()) end if hintAs4b then EgtSetColor(hintAs4b,ORANGE()) end end else -- altrimenti non Preview -- cancello le parti ausiliarie se disegnate if Dm then EgtErase(Dm) end -- assegno nota su percorsi antisplint e svuotatura if hintPk then EgtSetInfo( hintPk, 'NotCheckDir', '1') end if hintAs1 then EgtSetInfo( hintAs1, 'NotCheckDir', '1') end if hintAs2 then EgtSetInfo( hintAs2, 'NotCheckDir', '1') end if hintPk_r then EgtSetInfo( hintPk_r, 'NotCheckDir', '1') end if hintAs3 then EgtSetInfo( hintAs3, 'NotCheckDir', '1') end if hintAs4 then EgtSetInfo( hintAs4, 'NotCheckDir', '1') end if hintPk2 then EgtSetInfo( hintPk2, 'NotCheckDir', '1') end if hintAs1b then EgtSetInfo( hintAs1b, 'NotCheckDir', '1') end if hintAs2b then EgtSetInfo( hintAs2b, 'NotCheckDir', '1') end if hintPk2_r then EgtSetInfo( hintPk2_r, 'NotCheckDir', '1') end if hintAs3b then EgtSetInfo( hintAs3b, 'NotCheckDir', '1') end if hintAs4b then EgtSetInfo( hintAs4b, 'NotCheckDir', '1') end end return hint, hintPk, hintAs1, hintAs2, hintPk_r, hintAs3, hintAs4, hint2, hintPk2, hintAs1b, hintAs2b, hintPk2_r, hintAs3b, hintAs4b end return OPivot