- Prima versione strategia Mortasa a coda di rondine STR0007

- Modifiche a librerie per gestione strategia
This commit is contained in:
andrea.villa
2025-03-20 12:50:54 +01:00
parent 76e00c211e
commit 5032edc79a
4 changed files with 531 additions and 4 deletions
+4
View File
@@ -221,9 +221,11 @@ local function GetStrategies_Egalware( Proc)
---------------------------------------------------------------------
-- Feature : Dovetail Mortise
elseif ID.IsDovetailMortise( Proc) then
Strategies = { { sStrategyId = 'STR0007'}}
---------------------------------------------------------------------
-- Feature : Dovetail Mortise Front
elseif ID.IsFrontDovetailMortise( Proc) then
Strategies = { { sStrategyId = 'STR0007'}}
---------------------------------------------------------------------
-- Feature : Marking
elseif ID.IsMarking( Proc) then
@@ -481,9 +483,11 @@ local function GetStrategies_Essetre( Proc)
---------------------------------------------------------------------
-- Feature : Dovetail Mortise
elseif ID.IsDovetailMortise( Proc) then
Strategies = { { sStrategyId = 'STR0007'}}
---------------------------------------------------------------------
-- Feature : Dovetail Mortise Front
elseif ID.IsFrontDovetailMortise( Proc) then
Strategies = { { sStrategyId = 'STR0007'}}
---------------------------------------------------------------------
-- Feature : Marking
elseif ID.IsMarking( Proc) then
+53 -4
View File
@@ -233,6 +233,9 @@ function FeatureLib.GetAdditionalInfo( Proc, Part)
-- se tenone o tenone a coda di rondine
elseif ID.IsTenon( Proc) or ID.IsDovetailTenon( Proc) then
Proc.FeatureInfo = FeatureLib.GetTenonData( Proc)
-- se mortasa a coda di rondine o mortasa frontale a coda di rondine
elseif ID.IsDovetailMortise( Proc) or ID.IsFrontDovetailMortise( Proc) then
Proc.FeatureInfo = FeatureLib.GetDTMortiseData( Proc)
end
return Proc
@@ -269,14 +272,13 @@ function FeatureLib.GetTenonData( Proc)
local idAux = EgtGetInfo( Proc.id, 'AUXID', 'i')
if idAux then idAux = idAux + Proc.id end
-- recupero i dati della curva
local vtExtr = EgtCurveExtrusion( idAux, GDB_RT.GLOB)
local vtN = EgtCurveExtrusion( idAux, GDB_RT.GLOB)
local ptBC = EgtGP( idAux, GDB_RT.GLOB)
-- determino altezza del tenone
local frTen = Frame3d( ptBC, vtExtr)
local frTen = Frame3d( ptBC, vtN)
local b3Ten = EgtGetBBoxRef( Proc.id, GDB_BB.STANDARD, frTen)
local dTenH = b3Ten:getDimZ()
-- assegno centro e normale della faccia top
local vtN = vtExtr
local ptC = ptBC + vtN * dTenH
-- calcolo distanza massima della curva dal punto più lontano della base tenone (facet 0)
local dMaxDist
@@ -308,7 +310,7 @@ function FeatureLib.GetTenonData( Proc)
FeatureExtraInfo.dTenonLength = dTenH
FeatureExtraInfo.dTenonMaxDist = dMaxDist
FeatureExtraInfo.vtTenonN = vtExtr
FeatureExtraInfo.vtTenonN = vtN
FeatureExtraInfo.ptTenonCenter = ptC
FeatureExtraInfo.idAddAuxGeom = idAux
@@ -316,6 +318,53 @@ function FeatureLib.GetTenonData( Proc)
end
-------------------------------------------------------------------------------------------------------------
-- Recupero dati foro e adattamento se speciale
function FeatureLib.GetDTMortiseData( Proc)
local FeatureExtraInfo = {}
local idAux = EgtGetInfo( Proc.id, 'AUXID', 'i')
if idAux then idAux = idAux + Proc.id end
local vtMortiseN = EgtCurveExtrusion( idAux, GDB_RT.GLOB)
-- ne determino l'asse
local vtAx = EgtEV( idAux, GDB_RT.GLOB) - EgtSV( idAux, GDB_RT.GLOB)
vtAx:normalize()
-- determino l'altezza della mortasa (0=faccia di fondo)
local rFrameDtMortise, dMortiseLength, dMortiseWidth = EgtSurfTmFacetMinAreaRectangle( Proc.id, 0, GDB_RT.GLOB)
if abs( rFrameDtMortise:getVersY() * vtAx) > abs( rFrameDtMortise:getVersX() * vtAx) then
rFrameDtMortise:rotate( rFrameDtMortise:getOrigin(), rFrameDtMortise:getVersZ(), 90)
dMortiseLength, dMortiseWidth = dMortiseWidth, dMortiseLength
end
local b3DtMortise = EgtGetBBoxRef( Proc.id, GDB_BB.STANDARD, rFrameDtMortise)
local dMortiseDepth = b3DtMortise:getDimZ()
-- recupero il raggio minimo della mortasa
local dMortiseMinRadius = 1000
local nSt, nEnd = EgtCurveDomain( idAux)
for i = nSt, nEnd - 1 do
local dRad = EgtCurveCompoRadius( idAux, i)
if dRad > 0 and dRad < dMortiseMinRadius then
dMortiseMinRadius = dRad
end
end
-- distanza massima all'imbocco ortogonale all'asse
local vtDiff = EgtEP( idAux, GDB_RT.GLOB) - EgtSP( idAux, GDB_RT.GLOB)
local vtOrtDiff = vtDiff - vtDiff * vtAx * vtAx
local dMortiseMaxDist = min( vtOrtDiff:len(), dMortiseWidth)
FeatureExtraInfo.bIsFrontMortise = Proc.nPrc == 56
FeatureExtraInfo.dMortiseLength = dMortiseLength
FeatureExtraInfo.dMortiseWidth = dMortiseWidth
FeatureExtraInfo.dMortiseMaxDist = dMortiseMaxDist
FeatureExtraInfo.dMortiseDepth = dMortiseDepth
FeatureExtraInfo.dMortiseMinRadius = dMortiseMinRadius
FeatureExtraInfo.vtMortiseN = vtMortiseN
FeatureExtraInfo.idAddAuxGeom = idAux
return FeatureExtraInfo
end
-------------------------------------------------------------------------------------------------------------
-- funzione che restituisce indice di completamento in base alla percentuale di volume lavorato
function FeatureLib.GetFeatureCompletionIndex( dCompletionPercentage)