Merge branch 'STR0006_Tenon' into develop

This commit is contained in:
andrea.villa
2025-02-27 17:38:40 +01:00
7 changed files with 329 additions and 39 deletions
+2
View File
@@ -201,6 +201,7 @@ local function GetStrategies_Egalware( Proc)
---------------------------------------------------------------------
-- Feature : Tenon
elseif ID.IsTenon( Proc) then
Strategies = { { sStrategyId = 'STR0006'}}
---------------------------------------------------------------------
-- Feature : Mortise
elseif ID.IsMortise( Proc) then
@@ -460,6 +461,7 @@ local function GetStrategies_Essetre( Proc)
---------------------------------------------------------------------
-- Feature : Tenon
elseif ID.IsTenon( Proc) then
Strategies = { { sStrategyId = 'STR0006'}}
---------------------------------------------------------------------
-- Feature : Mortise
elseif ID.IsMortise( Proc) then
+30 -36
View File
@@ -211,12 +211,13 @@ end
-------------------------------------------------------------------------------------------------------------
function FeatureLib.GetAdditionalInfo( Proc, Part)
-- se foro calcolo altri dati
Proc.FeatureInfo = {}
-- se foro
if ID.IsDrilling( Proc) then
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
Proc.dDiam, Proc.dLen, Proc.nFcs, Proc.nFce = FeatureLib.GetDrillingData( Proc)
elseif ID.IsDovetailTenon( Proc) then
Proc.dDTLength, Proc.dDTMaxDist, Proc.vtDTNormal, Proc.ptDTCenter, Proc.idAddAuxGeom = FeatureLib.GetDoveTailTenonData( Proc)
Proc.FeatureInfo = FeatureLib.GetDrillingData( Proc)
-- se tenone o tenone a coda di rondine
elseif ID.IsTenon( Proc) or ID.IsDovetailTenon( Proc) then
Proc.FeatureInfo = FeatureLib.GetTenonData( Proc)
end
return Proc
@@ -226,6 +227,7 @@ end
-- Recupero dati foro e adattamento se speciale
function FeatureLib.GetDrillingData( Proc)
local AuxId = EgtGetInfo( Proc.id, 'AUXID', 'i')
local FeatureExtraInfo = {}
-- verifico se foro da adattare
if EgtExistsInfo( Proc.id, 'DiamUser') then
@@ -235,17 +237,19 @@ function FeatureLib.GetDrillingData( Proc)
end
end
local dDiam = EgtGetInfo( Proc.id, 'P12', 'd') or 0
local dLen = abs( EgtCurveThickness( Proc.id + AuxId)) or 0
local nFcs = EgtGetInfo( Proc.id, 'FCS', 'i') or 0
local nFce = EgtGetInfo( Proc.id, 'FCE', 'i') or 0
FeatureExtraInfo.dDrillDiam = EgtGetInfo( Proc.id, 'P12', 'd') or 0
FeatureExtraInfo.dDrillLen = abs( EgtCurveThickness( Proc.id + AuxId)) or 0
FeatureExtraInfo.nDrillFcs = EgtGetInfo( Proc.id, 'FCS', 'i') or 0
FeatureExtraInfo.nDrillFce = EgtGetInfo( Proc.id, 'FCE', 'i') or 0
return dDiam, dLen, nFcs, nFce
return FeatureExtraInfo
end
-------------------------------------------------------------------------------------------------------------
-- Recupero dati tenone a coda di rondine
function FeatureLib.GetDoveTailTenonData( Proc)
-- Recupero dati tenone e tenone a coda di rondine
function FeatureLib.GetTenonData( Proc)
local FeatureExtraInfo = {}
-- recupero e verifico l'entità curva
local idAux = EgtGetInfo( Proc.id, 'AUXID', 'i')
if idAux then idAux = idAux + Proc.id end
@@ -253,13 +257,13 @@ function FeatureLib.GetDoveTailTenonData( Proc)
local vtExtr = EgtCurveExtrusion( idAux, GDB_RT.GLOB)
local ptBC = EgtGP( idAux, GDB_RT.GLOB)
-- determino altezza del tenone
local frDtTen = Frame3d( ptBC, vtExtr)
local b3DtTen = EgtGetBBoxRef( Proc.id, GDB_BB.STANDARD, frDtTen)
local dDtTenH = b3DtTen:getDimZ()
local frTen = Frame3d( ptBC, vtExtr)
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 * dDtTenH
-- calcolo distanza massima della curva dal punto più lontano della base tenone Dt (facet 0)
local ptC = ptBC + vtN * dTenH
-- calcolo distanza massima della curva dal punto più lontano della base tenone (facet 0)
local dMaxDist
for i = 0, Proc.nFct - 1 do
local ptFC, vtFN = EgtSurfTmFacetCenter( Proc.id, i, GDB_ID.ROOT)
@@ -283,17 +287,17 @@ function FeatureLib.GetDoveTailTenonData( Proc)
end
end
if not dMaxDist then
local b3DtAux = EgtGetBBoxRef( idAux, GDB_BB.STANDARD, frDtTen)
dMaxDist = 2 * ( b3DtTen:getRadius() - b3DtAux:getRadius())
local b3TenonAux = EgtGetBBoxRef( idAux, GDB_BB.STANDARD, frTen)
dMaxDist = 2 * ( b3Ten:getRadius() - b3TenonAux:getRadius())
end
Proc.dDTLength = dDtTenH
Proc.dDTMaxDist = dMaxDist
Proc.vtDTNormal = vtExtr
Proc.ptDTCenter = ptC
Proc.idAddAuxGeom = idAux
FeatureExtraInfo.dTenonLength = dTenH
FeatureExtraInfo.dTenonMaxDist = dMaxDist
FeatureExtraInfo.vtTenonN = vtExtr
FeatureExtraInfo.ptTenonCenter = ptC
FeatureExtraInfo.idAddAuxGeom = idAux
return Proc.dDTLength, Proc.dDTMaxDist, Proc.vtDTNormal, Proc.ptDTCenter, Proc.idAddAuxGeom
return FeatureExtraInfo
end
@@ -462,21 +466,11 @@ function FeatureLib.GetFeatureSplittingPoints( Proc, Part, OptionalParameters)
return FeatureSplittingPoints
end
-------------------------------------------------------------------------------------------------------------
function FeatureLib.GetAdditionalInfo( Proc, Part)
-- se foro calcolo altri dati
if ID.IsDrilling( Proc) then
-- assegno diametro e facce di ingresso e uscita (dati tabelle sempre per riferimento)
Proc.dDiam, Proc.dLen, Proc.nFcs, Proc.nFce = FeatureLib.GetDrillingData( Proc)
end
return Proc
end
-------------------------------------------------------------------------------------------------------------
function FeatureLib.GetFeatureVolume( Proc, Part)
local dProcVolume = 0
local nAddGrpId = BeamLib.GetAddGroup( Proc.idPart)
local nAddGrpId = BeamLib.GetAddGroup( Part.id)
if not nAddGrpId then
-- TODO gestire meglio questo errore. Non conviene creare e verificare all'inizio se il gruppo esiste?
EgtOutLog( 'Error : missing AddGroup')
+7 -1
View File
@@ -242,7 +242,7 @@ function MachiningLib.FindMill( Proc, ToolSearchParameters)
-- calcolo riduzione del massimo materiale utilizzabile
local ToolEntryAngle = GetToolEntryAngle( Proc, ToolSearchParameters.vtToolDirection)
-- se ToolHolder più grande dell'utensile, il primo oggetto in collisione è il ToolHolder. Altrimenti il motore.
local dDimObjToCheck = EgtIf( TOOLS[i].ToolHolder.dDiameter > TOOLS[i].dDiameter, TOOLS[i].ToolHolder.dDiameter, BeamData.C_SIMM_ENC)
local dDimObjToCheck = EgtIf( TOOLS[i].ToolHolder.dDiameter > TOOLS[i].dDiameter, TOOLS[i].ToolHolder.dDiameter, TOOLS[i].SetupInfo.dCAxisEncumbrance)
local dCurrentMaxMatReduction = BeamData.COLL_SIC or 5
-- TODO implementare le funzioni di Tool Collision Avoidance (vedi wiki e FacesBysaw -> CalcLeadInOutPerpGeom)
@@ -603,6 +603,12 @@ function MachiningLib.AddOperations( vProc, Part, sRotation)
end
EgtSetMachiningGeometry( Geometry)
-- si scrive info pezzo e feature su geometria lavorazione
if Geometry then
EgtSetInfo( Geometry[1][1], 'CUTID', MACHININGS[i].Proc.idCut)
EgtSetInfo( Geometry[1][1], 'TASKID', MACHININGS[i].Proc.idTask)
end
-- impostazione parametri lavorazione
-- TODO scrivere sempre Steps, LeadIn, LeadOut nelle tabelle in modo da non dover controllare ogni volta che ci siano
for k = 1, #MachiningParameters do
@@ -3,7 +3,7 @@
local STR0001Data = {
sStrategyId = 'STR0001',
Parameters = {
{ sName = 'dOverMatOnLenght', sNameNge = 'OVM_LENGTH', sValue = '0', sDescription = 'Sovramateriale lunghezza tenone', sType = 'd'},
{ sName = 'dOverMatOnLength', sNameNge = 'OVM_LENGTH', sValue = '0', sDescription = 'Sovramateriale lunghezza tenone', sType = 'd'},
{ sName = 'dOverMatOnRadius', sNameNge = 'OVM_RADIUS', sValue = '0', sDescription = 'Sovramateriale larghezza tenone', sType = 'd'},
{ sName = 'nMaxMillingPaths', sNameNge = 'MAX_PATHS', sValue = '3', sDescription = 'Numero massimo di passaggi di fresatura. Se richiesti più passaggi, si fa svuotatura', sType = 'd'},
{ sName = 'bUseDTToolOnPocketing', sNameNge = 'ALLOW_DT_POCKET', sValue = 'true', sDescription = 'Utilizza utensile a coda di rondine per fare svuotatura', sType = 'b'}
+269
View File
@@ -0,0 +1,269 @@
-- Strategia: STR0006
-- Descrizione
-- Lama + fresa CodaDiRondine per tenone
-- Feature: 55,1
-- carico librerie
local BeamLib = require( 'BeamLib')
local BeamData = require( 'BeamData')
local MachiningLib = require( 'MachiningLib')
local FeatureLib = require( 'FeatureLib')
-- strategie di base
local BladeToWaste = require( 'BLADETOWASTE')
local FaceByBlade = require('FACEBYBLADE')
-- Tabella per definizione modulo
local STR0006 = {}
local Strategy = {}
-------------------------------------------------------------------------------------------------------------
function AddMachiningAllSteps( Proc, Cutting, AuxiliaryData)
local bMachiningAdded = false
if not AuxiliaryData then
AuxiliaryData = {}
end
AuxiliaryData.Clones = {}
local dOriginalRadialOffset = Cutting.dRadialOffset
local dOriginalLeadInPerpDistance = Cutting.LeadIn.dPerpDistance
local dOriginalLeadOutPerpDistance = Cutting.LeadOut.dPerpDistance
for i = 1, Cutting.HorizontalSteps.nCount do
AuxiliaryData.Clones[i] = {}
AuxiliaryData.Clones[i].LeadIn = {}
AuxiliaryData.Clones[i].LeadOut = {}
AuxiliaryData.Clones[i].dRadialOffset = dOriginalRadialOffset + Cutting.HorizontalSteps.dStep * ( Cutting.HorizontalSteps.nCount - i)
-- update distanza perpendicolare attacco per contemplare l'offset applicato
AuxiliaryData.Clones[i].LeadIn.dPerpDistance = dOriginalLeadInPerpDistance - Cutting.dRadialOffset
AuxiliaryData.Clones[i].LeadOut.dPerpDistance = dOriginalLeadOutPerpDistance - Cutting.dRadialOffset
end
bMachiningAdded = MachiningLib.AddNewMachining( Proc, Cutting, AuxiliaryData)
return bMachiningAdded
end
-------------------------------------------------------------------------------------------------------------
function STR0006.Make( bAddMachining, Proc, Part, CustomParameters)
-- carico parametri de default e li aggiorno con quelli passati dal chiamante (potrebbero non essere congruenti)
local StrategyLib = {}
StrategyLib.Config = require( 'STR0006\\STR0006Config')
Strategy.sName = StrategyLib.Config.sStrategyId
CustomParameters = BeamLib.GetUpdateCustomParameters( CustomParameters, StrategyLib.Config.Parameters)
Strategy.Parameters = BeamLib.LoadCustomParametersInStrategy( CustomParameters)
Strategy.Machining = {}
Strategy.Result = {}
local bAreAllMachiningsAdded = true
local ToolSearchParameters = {}
local Milling = {}
local Cutting = {}
local bCuttingWithMill = false
local nMillingPathsNeeded = 0
local dCompletionPercentage
-- calcolo se la lavorazione del tenone può essere spostata dopo taglio di coda
local dLengthOnX = Proc.b3Box:getDimX()
local bCanMoveAfterSplit = MachiningLib.CanMoveAfterSplitcut( dLengthOnX, Part)
-- aggiunta superficie di taglio sulla lunghezza del tenone
local nAddGrpId = BeamLib.GetAddGroup( Part.id)
local idTenonCutPlane = EgtSurfTmPlaneInBBox( nAddGrpId, Proc.FeatureInfo.ptTenonCenter, Proc.FeatureInfo.vtTenonN, Part.b3Part, GDB_RT.GLOB)
-- scelta automatica lavorazione. Non viene mai scelta la motosega
if Strategy.Parameters.sCuttingStrategy == 'AUTO' then
-- creo piano di taglio sulla testa del tenone
local OptionalParameters = { dMaxWasteVolume = Strategy.Parameters.dMaxWasteVolume,
dMaxWasteLength = Strategy.Parameters.dMaxWasteLength
}
Cutting.Result, dCompletionPercentage = BladeToWaste.Make( idTenonCutPlane, Part, OptionalParameters)
-- se presente almeno una lavorazione e completo, il taglio è applicabile
if #Cutting.Result > 0 and dCompletionPercentage == 100 then
Cutting.bIsApplicable = true
end
-- se non possibile di lama si prova con fresa
if not Cutting.Result or #Cutting.Result == 0 then
bCuttingWithMill = true
end
-- lavorazione forzata con utensile lama
elseif Strategy.Parameters.sCuttingStrategy == 'BLADE_FORCED' then
local OptionalParameters = { dMaxWasteVolume = Strategy.Parameters.dMaxWasteVolume,
dMaxWasteLength = Strategy.Parameters.dMaxWasteLength
}
Cutting.Result, dCompletionPercentage = BladeToWaste.Make( idTenonCutPlane, Part, OptionalParameters)
-- se presente almeno una lavorazione e completo, il taglio è applicabile
if #Cutting.Result > 0 and dCompletionPercentage == 100 then
Cutting.bIsApplicable = true
end
-- lavorazione forzata con utensile fresa
elseif Strategy.Parameters.sCuttingStrategy == 'MILL_FORCED' then
bCuttingWithMill = true
-- lavorazione forzata con utensile motosega
elseif Strategy.Parameters.sCuttingStrategy == 'CHAINSAW_FORCED' then
-- DA FARE!!
end
-- TODO = Verificare se il taglio può essere fatto prima (con pezzo a caduta). Deve dagliare in un colpo, altrimenti a cubetti non si può fare prima di separare.
if Cutting.bIsApplicable then
local ParametersMRR = {}
ParametersMRR.nToolIndex = Cutting.Result.nToolIndex
Cutting.dMRR = MachiningLib.GetToolMRR( ParametersMRR)
end
-- === ricerca utensile per lavorare tenone ===
Milling.bIsApplicable = false
-- se tenone in testa oppure se di coda ma è possibile lavorare dopo separazione
if not( Proc.AffectedFaces.bLeft) or bCanMoveAfterSplit then
ToolSearchParameters.dElevation = Proc.FeatureInfo.dTenonLength
ToolSearchParameters.vtToolDirection = Proc.FeatureInfo.vtTenonN
Milling.ToolInfo = {}
Milling.ToolInfo = MachiningLib.FindMill( Proc, ToolSearchParameters)
Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( 'Mill')
if Milling.ToolInfo.nToolIndex then
Milling.bIsApplicable = true
-- calcolo passate necessarie
nMillingPathsNeeded = ceil( Proc.FeatureInfo.dTenonMaxDist / TOOLS[Milling.ToolInfo.nToolIndex].dSideStep)
local ParametersMRR = {}
ParametersMRR.nToolIndex = Milling.ToolInfo.nToolIndex
Milling.dMRR = MachiningLib.GetToolMRR( ParametersMRR)
end
-- se cutting da fare come svuotatura, copio i dati dell'utensile scelto per lavorare il tenone
if bCuttingWithMill and Milling.bIsApplicable then
Cutting.bIsApplicable = true
Cutting.ToolInfo = Milling.ToolInfo
Cutting.dMRR = Milling.dMRR
end
end
-- setto il risultato in base agli utensili trovati
-- lavorazione completa
if Milling.bIsApplicable and Cutting.bIsApplicable then
Strategy.Result.sStatus = 'Completed'
Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 100)
Strategy.Result.dMRR = ( Milling.dMRR + Cutting.dMRR) / 2
Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( EgtIf( bCuttingWithMill, 'Mill,Mill', 'Mill,Blade'))
Strategy.Result.sInfo = ''
-- lavorazione incompleta
elseif Cutting.bIsApplicable then
Strategy.Result.sStatus = 'Not-Completed'
Strategy.Result.nCompletionIndex = FeatureLib.GetFeatureCompletionIndex( 50)
Strategy.Result.dMRR = ( Milling.dMRR + Cutting.dMRR) / 2
Strategy.Result.nQuality = FeatureLib.GetFeatureQuality( EgtIf( bCuttingWithMill, 'Mill', 'Blade'))
Strategy.Result.sInfo = 'Tenon not completed'
-- strategia non applicabile, manca il taglio di lama sulla lunghezza del tenone
else
Strategy.Result.sStatus = 'Not-Applicable'
Strategy.Result.nCompletionIndex = 0
Strategy.Result.dMRR = 0
Strategy.Result.nQuality = 0
Strategy.Result.sInfo = 'Error on Tenon cutting'
end
-- applicazione delle lavorazioni
if bAddMachining and Strategy.Result.sStatus ~= 'Not-Applicable' then
-- taglio in lunghezza sul tenone
if Cutting.bIsApplicable then
OptionalParameters = {}
local AuxiliaryData = {}
-- se cutting da fare come svuotatura
if bCuttingWithMill then
Cutting.Steps = {}
Cutting.LeadIn = {}
Cutting.nType = MCH_OY.POCKETING
Cutting.nSubType = MCH_POCK_SUB.SPIRALIN
Cutting.LeadIn.nType = MCH_POCK_LI.ZIGZAG
Cutting.Steps.dStep = TOOLS[Cutting.ToolInfo.nToolIndex].dStep
Cutting.Steps.dSideStep = TOOLS[Cutting.ToolInfo.nToolIndex].dSideStep
Cutting.nToolIndex = Cutting.ToolInfo.nToolIndex
Cutting.LeadIn.dTangentDistance = TOOLS[Cutting.ToolInfo.nToolIndex].dDiameter/2
Cutting.LeadIn.dElevation = TOOLS[Cutting.ToolInfo.nToolIndex].dDiameter/2
Cutting.sDepth = 0
Cutting.Geometry = {{ idTenonCutPlane, 0}}
Cutting.vtToolDirection = Proc.vtTNormal
if Proc.AffectedFaces.bLeft and bCanMoveAfterSplit then
Cutting.sStage = 'AfterTail'
end
bAreAllMachiningsAdded = MachiningLib.AddNewMachining( Proc, Cutting)
-- taglio di lama
else
for i = 1, #Cutting.Result do
if Cutting.Result[i].bIsApplicable then
if Proc.AffectedFaces.bLeft and bCanMoveAfterSplit then
Cutting.Result[i].sStage = 'AfterTail'
end
local bIsMachiningAdded = AddMachiningAllSteps( Proc, Cutting.Result[i])
if not bIsMachiningAdded then
bAreAllMachiningsAdded = false
end
Strategy.Result.sInfo = Strategy.Result.sInfo .. '\n' .. Cutting.Result[i].sMessage
end
end
end
end
-- passaggio sul profilo
if Milling.bIsApplicable then
local AuxiliaryData = {}
-- se molti passaggi richiesti, si fa svuotatura
if nMillingPathsNeeded > Strategy.Parameters.nMaxMillingPaths then
-- TODO. SERVONO NUOVE SVUOTATURE!!!!
else
-- aggiungo geometria
Milling.Geometry = {{ Proc.FeatureInfo.idAddAuxGeom, -1}}
Milling.nToolIndex = Milling.ToolInfo.nToolIndex
Milling.nType = MCH_MY.MILLING
Milling.vtToolDirection = Proc.vtTNormal
Milling.sDepth = 0
-- LeadIn / LeadOut
Milling.LeadIn = {}
Milling.LeadOut = {}
Milling.LeadIn.nType = MCH_MILL_LI.TANGENT
Milling.LeadOut.nType = MCH_MILL_LI.TANGENT
Milling.LeadIn.dTangentDistance = TOOLS[Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC
Milling.LeadIn.dPerpDistance = TOOLS[Milling.ToolInfo.nToolIndex].dSideStep
Milling.LeadOut.dTangentDistance = TOOLS[Milling.ToolInfo.nToolIndex].dDiameter / 2 + BeamData.COLL_SIC
Milling.LeadOut.dPerpDistance = TOOLS[Milling.ToolInfo.nToolIndex].dSideStep
if Proc.AffectedFaces.bLeft and bCanMoveAfterSplit then
Milling.sStage = 'AfterTail'
end
-- sistemo il lato e la direzione di lavoro
Milling.bInvert = EgtIf( TOOLS[Milling.ToolInfo.nToolIndex].bIsCCW, false, true)
Milling.nWorkside = EgtIf( TOOLS[Milling.ToolInfo.nToolIndex].bIsCCW, MCH_MILL_WS.RIGHT, MCH_MILL_WS.LEFT)
Milling.sUserNotes = EgtSetVal( 'MaxElev', EgtNumToString( Proc.FeatureInfo.dTenonLength, 1)) .. ';'
-- TODO calcolare SCC
-- passate con sovramateriale
AuxiliaryData.Clones = {}
for i = nMillingPathsNeeded, 1, -1 do
-- il primo è il passaggio più esterno
local nIndexClones = nMillingPathsNeeded - i + 1
-- suddivido step in base al numero passate da fare
local dRealSideStep = floor( Proc.FeatureInfo.dTenonMaxDist / nMillingPathsNeeded)
-- cambia solo sovrmateriale radiale
AuxiliaryData.Clones[nIndexClones] = {}
AuxiliaryData.Clones[nIndexClones].dRadialOffset = ( i - 1) * dRealSideStep
end
-- aggiunge lavorazione
bAreAllMachiningsAdded = MachiningLib.AddNewMachining( Proc, Milling, AuxiliaryData)
end
end
end
return bAreAllMachiningsAdded, Strategy.Result
end
-------------------------------------------------------------------------------------------------------------
return STR0006
@@ -0,0 +1,19 @@
-- Parametri configurabili da cliente per strategia: STR0001
local STR0006Data = {
sStrategyId = 'STR0006',
Parameters = {
{ sName = 'dOverMatOnLength', sNameNge = 'OVM_LENGTH', sValue = '0', sDescription = 'Sovramateriale lunghezza tenone', sType = 'd'},
{ sName = 'dOverMatOnRadius', sNameNge = 'OVM_RADIUS', sValue = '0', sDescription = 'Sovramateriale larghezza tenone', sType = 'd'},
{ sName = 'nMaxMillingPaths', sNameNge = 'MAX_PATHS', sValue = '3', sDescription = 'Numero massimo di passaggi di fresatura. Se richiesti più passaggi, si fa svuotatura', sType = 'd'},
{ sName = 'dMaxWasteLength', sNameNge = 'MAX_WASTE_LENGTH', sValue = '300', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'},
{ sName = 'dMaxWasteVolume', sNameNge = 'MAX_WASTE_VOLUME', sValue = '6000000', sDescriptionShort = '', sDescriptionLong = '', sType = 'd', sMessageId = '', sMinUserLevel = '1'},
{ sName = 'sCuttingStrategy', sNameNge = 'EXEC_TENON_SURF', sValue = 'AUTO', sType = 'combo', sMinUserLevel = '1',
Choices = { { sValue = 'AUTO', sDescriptionShort = '', sDescriptionLong = '', sMessageId = ''},
{ sValue = 'BLADE_FORCED', sDescriptionShort = '', sDescriptionLong = '', sMessageId = ''},
{ sValue = 'MILL_FORCED', sDescriptionShort = '', sDescriptionLong = '', sMessageId = ''},
{ sValue = 'CHAINSAW_FORCED', sDescriptionShort = '', sDescriptionLong = '', sMessageId = ''}}}
}
}
return STR0006Data
+1 -1
View File
@@ -90,7 +90,7 @@ function BLADETOWASTE.Make( ProcOrId, Part, OptionalParameters)
local dCompletionPercentage = 0
-- disambiguazione feature vs id trimesh
local Proc
local Proc = {}
if type( ProcOrId) == "table" then
Proc = ProcOrId
elseif type( ProcOrId) == "number" then