- aggiunta gestione in doppio di forature e groove passanti (rivolte verso Z+)
- lieve correzione a check utensile doppio - aggiunto interasse minimo per lavorazioni in doppio
This commit is contained in:
@@ -55,7 +55,7 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Classificazione della feature
|
||||
function WPD.Classify( Proc, b3Raw)
|
||||
function WPD.Classify( Proc, b3Raw)
|
||||
|
||||
-- recupero e verifico l'entità foro
|
||||
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') or 0
|
||||
@@ -156,6 +156,41 @@ function WPD.RotateClassify( Proc)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function IsToolDoubleOk( sToolMasterName, sToolDoubleName)
|
||||
local bIsToolDoubleOk = false
|
||||
-- dimensioni utensile master
|
||||
EgtTdbSetCurrTool( sToolMasterName)
|
||||
local dTMaxMat = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
||||
local dTDiam = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||
-- dimensioni utensile double
|
||||
EgtTdbSetCurrTool( sToolDoubleName)
|
||||
local dTMaxMatDouble = EgtTdbGetCurrToolParam( MCH_TP.MAXMAT)
|
||||
local dTDiamDouble = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||
-- controllo che siano uguali
|
||||
bIsToolDoubleOk = ( dTMaxMatDouble > dTMaxMat - 100 * GEO.EPS_SMALL) and
|
||||
( abs( dTDiam - dTDiamDouble) < 100 * GEO.EPS_SMALL) and
|
||||
EgtTdbGetCurrToolParam( MCH_TP.ACTIVE)
|
||||
return bIsToolDoubleOk
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function IsMachiningOkForDouble( sMachining)
|
||||
local bDoubleOk = false
|
||||
if sMachining and EgtMdbSetCurrMachining( sMachining) then
|
||||
-- recupero l'utensile della lavorazione
|
||||
local sToolMasterName = EgtMdbGetCurrMachiningParam( MCH_MP.TOOL)
|
||||
if EgtTdbSetCurrTool( sToolMasterName or '') then
|
||||
-- cerco eventuale utensile in doppio
|
||||
local sToolDoubleName = EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'DOUBLE', 's')
|
||||
if sToolDoubleName and EgtTdbSetCurrTool( sToolDoubleName) then
|
||||
bDoubleOk = IsToolDoubleOk( sToolMasterName, sToolDoubleName)
|
||||
end
|
||||
end
|
||||
end
|
||||
return bDoubleOk
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function IsHorizLongDrill( Proc)
|
||||
-- recupero e verifico l'entità foro
|
||||
@@ -263,10 +298,21 @@ function WPD.Make( Proc, nRawId, b3Raw)
|
||||
end
|
||||
end
|
||||
end
|
||||
local bUseDLenToFindDrilling = true
|
||||
local sDrilling, nType = WM.FindDrilling( dDiam, dLen, sHead)
|
||||
if not sDrilling then
|
||||
bUseDLenToFindDrilling = false
|
||||
sDrilling, nType = WM.FindDrilling( dDiam, nil, sHead)
|
||||
end
|
||||
-- se Proc è settata per essere specchiata cerco la lavorazione adatta e verifico possa essere effettivamente specchiata
|
||||
if Proc.Double and Proc.Double == 2 then
|
||||
local sDrillingBackup = sDrilling
|
||||
sDrilling = WM.FindDrilling( dDiam, EgtIf( bUseDLenToFindDrilling, dLen, nil), 'H1')
|
||||
if not IsMachiningOkForDouble( sDrilling) then
|
||||
Proc.Double = 0
|
||||
sDrilling = sDrillingBackup
|
||||
end
|
||||
end
|
||||
if sHead and not sDrilling then
|
||||
sDrilling, nType = WM.FindDrilling( dDiam, dLen)
|
||||
if not sDrilling then
|
||||
@@ -447,21 +493,26 @@ function WPD.Make( Proc, nRawId, b3Raw)
|
||||
end
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.DEPTH, dDepth)
|
||||
-- Note utente
|
||||
local sUserNotes = ''
|
||||
-- leggo eventuali note esistenti della lavorazione
|
||||
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
|
||||
-- se foratura o svuotatura, dichiarazione nessuna generazione sfridi per Vmill
|
||||
if nType == 'Drill' or nType == 'Pocket' then
|
||||
sUserNotes = 'VMRS=0;'
|
||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'VMRS', 0)
|
||||
end
|
||||
-- se foratura
|
||||
if nType == 'Drill' then
|
||||
-- aggiungo alle note massima elevazione (coincide con affondamento)
|
||||
sUserNotes = sUserNotes .. 'MaxElev=' .. EgtNumToString( dDepth, 1) .. ';'
|
||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', EgtNumToString( dDepth, 1))
|
||||
-- se foro passante, aggiungo questa qualifica alle note
|
||||
if bOpen then
|
||||
sUserNotes = sUserNotes .. 'Open=1;'
|
||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'Open', 1)
|
||||
end
|
||||
end
|
||||
-- se lavorazione in doppio aggiungo le rispettive note
|
||||
if Proc.Double and Proc.Double == 2 then
|
||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'DOUBLE', Proc.Double)
|
||||
sUserNotes = EgtSetValInNotes( sUserNotes, 'MirrorAx', Proc.MirrorAx)
|
||||
end
|
||||
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
|
||||
-- eseguo
|
||||
if not EgtApplyMachining( true, false) then
|
||||
|
||||
@@ -758,8 +758,8 @@ local function IsToolDoubleOk( sToolMasterName, sToolDoubleName)
|
||||
local dTMaxDepthOnSideDouble = EgtIf( bIsBladeDouble, EgtTdbGetCurrToolParam( MCH_TP.MAXMAT), min( EgtTdbGetCurrToolValInNotes( MCH_TP.USERNOTES, 'SIDEDEPTH', 'd') or 999, 0.5 * ( dTDiamDouble - dTDiamThDouble)))
|
||||
-- controllo che siano uguali
|
||||
bIsToolDoubleOk = ( bIsBlade == bIsBladeDouble) and
|
||||
( abs( dTMaxMat - dTMaxMatDouble) < 100 * GEO.EPS_SMALL) and
|
||||
( abs( dTMaxDepth - dTMaxDepthDouble) < 100 * GEO.EPS_SMALL) and
|
||||
( dTMaxMatDouble > dTMaxMat - 100 * GEO.EPS_SMALL) and
|
||||
( dTMaxDepthDouble > dTMaxDepth - 100 * GEO.EPS_SMALL) and
|
||||
( abs( dTDiam - dTDiamDouble) < 100 * GEO.EPS_SMALL) and
|
||||
( abs( dTDiamTh - dTDiamThDouble) < 100 * GEO.EPS_SMALL) and
|
||||
( bTipFeed == bTipFeedDouble) and
|
||||
|
||||
+150
-9
@@ -192,7 +192,7 @@ function WallExec.CollectFeatures( PartId, b3Raw)
|
||||
Proc.TaskId = nTaskId
|
||||
Proc.Box = EgtGetBBoxGlob( ProcId, GDB_BB.STANDARD)
|
||||
Proc.IsOutline = ( Proc.Prc == 251 or Proc.Prc == 252)
|
||||
|
||||
|
||||
-- recupero l'elenco delle facce della parte interessate dalla feature
|
||||
Proc.AffectedFaces = WL.GetProcessAffectedFaces( Proc)
|
||||
|
||||
@@ -201,7 +201,7 @@ function WallExec.CollectFeatures( PartId, b3Raw)
|
||||
for i = 1, Proc.Fct do
|
||||
Proc.Face[i] = { Id = i - 1, VtN = EgtSurfTmFacetNormVersor( Proc.Id, i - 1, GDB_ID.ROOT ), Elevation = WL.GetFaceElevation( Proc.Id, i - 1, PartId)}
|
||||
end
|
||||
|
||||
|
||||
if Proc.Box and not Proc.Box:isEmpty() then
|
||||
table.insert( vProc, Proc)
|
||||
-- se foro
|
||||
@@ -643,16 +643,19 @@ end
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- Controlla in vProc la presenza di feature da lavorare in doppio e, se trovate, ne setta i parametri
|
||||
local function SetMirroredFeatures( vProc, b3Raw)
|
||||
local dMinimumDistanceMirroredFeatures = 780
|
||||
local vGroovesThrough = {}
|
||||
local vDrillings = {}
|
||||
for i = 1, #vProc do
|
||||
local Proc = vProc[i]
|
||||
if Proc.Flg ~= 0 then
|
||||
-- AGGIUNGERE DIPENDENZA DA COSTANTE WALLDATA!!
|
||||
|
||||
-- tutte le rabbet, tunnel e groove, tranne le groove passanti che guardano Z+, vengono confrontati con possibili feature mirror
|
||||
if Proc.TopologyLongName == 'Rabbet-Through-RightAngles-Parallel-2'or
|
||||
Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-3' or
|
||||
Proc.TopologyLongName == 'Groove-Blind-RightAngles-Parallel-4' or
|
||||
Proc.TopologyLongName == 'Tunnel-Blind-RightAngles-Parallel-5' or
|
||||
( Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' and Proc.AffectedFaces.Front) then
|
||||
( Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' and Proc.AffectedFaces.Front and Proc.AffectedFaces.Left and Proc.AffectedFaces.Right) then
|
||||
-- feature rivolta verso Y- e parallela a X
|
||||
local bIsFeatureFacingFrontSide = Proc.AffectedFaces.Front
|
||||
-- feature vicino al bordo Y- del grezzo
|
||||
@@ -663,7 +666,7 @@ local function SetMirroredFeatures( vProc, b3Raw)
|
||||
nFaceLookingFrontSide = j - 1
|
||||
end
|
||||
end
|
||||
local dMaxDist = 300
|
||||
local dMaxDist = 100
|
||||
if nFaceLookingFrontSide then
|
||||
local ptFaceCenter = EgtSurfTmFacetCenter( Proc.Id, nFaceLookingFrontSide, GDB_ID.ROOT)
|
||||
local dSideDist = abs( ptFaceCenter:getY() - b3Raw:getMin():getY())
|
||||
@@ -678,7 +681,7 @@ local function SetMirroredFeatures( vProc, b3Raw)
|
||||
local ProcMirror = vProc[j]
|
||||
if ProcMirror.TopologyLongName == Proc.TopologyLongName and ProcMirror.Id ~= Proc.Id and ProcMirror.Flg ~= 0 then
|
||||
-- feature specchiata rivolta verso Y+ e parallela a X
|
||||
local bIsMirrorFeatureFacingBackSide = ProcMirror.AffectedFaces.Back
|
||||
local bIsMirrorFeatureFacingBackSide = EgtIf( Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3', ProcMirror.AffectedFaces.Back and Proc.AffectedFaces.Left and Proc.AffectedFaces.Right, ProcMirror.AffectedFaces.Back)
|
||||
-- feature specchiata vicino al bordo Y+ del grezzo
|
||||
local bIsMirrorFeatureOnEdge = false
|
||||
local nMirrorFaceLookingBackSide
|
||||
@@ -703,8 +706,11 @@ local function SetMirroredFeatures( vProc, b3Raw)
|
||||
local bIsMirrorBoxXAligned = abs( Proc.Box:getCenter():getX() - ProcMirror.Box:getCenter():getX()) < 500 * GEO.EPS_SMALL
|
||||
-- box che non si intersecano
|
||||
local bIsNotMirrorBoxOverlapping = not OverlapsXY( b3Proc, b3ProcMirror)
|
||||
-- distanza minima tra le feature
|
||||
local dYMinDistance = max( b3Proc:getMin():getY(), b3ProcMirror:getMin():getY()) - min( b3Proc:getMax():getY(), b3ProcMirror:getMax():getY())
|
||||
local bIsMirrorFeatureDistanceOk = dYMinDistance > dMinimumDistanceMirroredFeatures + 10 * GEO.EPS_SMALL
|
||||
-- se tutte vere le condizioni, calcolo i parametri da passare alle lavorazioni
|
||||
if bIsMirrorFeatureFacingBackSide and bIsMirrorFeatureOnEdge and bIsMirrorFeatureSameDimension and bIsMirrorBoxXAligned and bIsNotMirrorBoxOverlapping then
|
||||
if bIsMirrorFeatureFacingBackSide and bIsMirrorFeatureOnEdge and bIsMirrorFeatureSameDimension and bIsMirrorBoxXAligned and bIsNotMirrorBoxOverlapping and bIsMirrorFeatureDistanceOk then
|
||||
nMirrorId = ProcMirror.Id
|
||||
local b3Tab = EgtGetTableArea()
|
||||
local ptOnMirrorAx = ( Proc.Box:getCenter() + ProcMirror.Box:getCenter()) / 2
|
||||
@@ -729,10 +735,145 @@ local function SetMirroredFeatures( vProc, b3Raw)
|
||||
Proc.Stype = 2
|
||||
end
|
||||
end
|
||||
|
||||
-- le groove passanti, parallele a X e rivolte verso Z+ vanno raccolte, ordinate e accoppiate a 2 a 2 per il doppio
|
||||
elseif Proc.TopologyLongName == 'Groove-Through-RightAngles-Parallel-3' and Proc.AffectedFaces.Top and Proc.AffectedFaces.Left and Proc.AffectedFaces.Right then
|
||||
table.insert( vGroovesThrough, Proc)
|
||||
-- i fori verticali e aperti verso Z+ vanno raccolti, ordinati e accoppiati a 2 a 2 per il doppio a parità di X
|
||||
elseif Proc.TopologyLongName == 'DRILLING' then
|
||||
-- recupero e verifico l'entità foro
|
||||
local AuxId = EgtGetInfo( Proc.Id, 'AUXID', 'i') or 0
|
||||
if AuxId then AuxId = AuxId + Proc.Id end
|
||||
if not AuxId or EgtGetType( AuxId) ~= GDB_TY.CRV_ARC then
|
||||
return false
|
||||
end
|
||||
-- recupero il vettore del foro
|
||||
local vtExtr = EgtCurveExtrusion( AuxId, GDB_RT.GLOB)
|
||||
if Proc.AffectedFaces.Top and AreSameOrOppositeVectorApprox( vtExtr, Z_AX()) then
|
||||
table.insert( vDrillings, Proc)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- ordino le groove passanti rivolte verso Z+ in base alla Y crescente
|
||||
table.sort( vGroovesThrough, function( a, b) return b.Box:getCenter():getY() > a.Box:getCenter():getY() end)
|
||||
|
||||
-- funzione per l'ordinamento dei fori
|
||||
local function SortDrillingsForMirror( Proc1, Proc2)
|
||||
local Proc1X = Proc1.Box:getCenter():getX()
|
||||
local Proc1Y = Proc1.Box:getCenter():getY()
|
||||
local Proc2X = Proc2.Box:getCenter():getX()
|
||||
local Proc2Y = Proc2.Box:getCenter():getY()
|
||||
if Proc1X < Proc2X - 10 * GEO.EPS_SMALL then
|
||||
return true
|
||||
elseif abs( Proc1X - Proc2X) < 10 * GEO.EPS_SMALL then
|
||||
if Proc1Y < Proc2Y - 10 * GEO.EPS_SMALL then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
-- ordino le forature aperte verso Z+ in base alla X e poi alla Y crescente
|
||||
table.sort( vDrillings, SortDrillingsForMirror)
|
||||
|
||||
-- accoppio le groove passanti rivolte verso Z+
|
||||
local nCurrentGroove = 1
|
||||
while nCurrentGroove <= #vGroovesThrough do
|
||||
local Proc = vGroovesThrough[nCurrentGroove]
|
||||
if Proc.Flg ~= 0 then
|
||||
local b3Proc = EgtGetBBoxGlob( Proc.Id, GDB_BB.STANDARD)
|
||||
local j = nCurrentGroove + 1
|
||||
while j <= #vGroovesThrough do
|
||||
local ProcMirror = vGroovesThrough[j]
|
||||
local b3ProcMirror = EgtGetBBoxGlob( ProcMirror.Id, GDB_BB.STANDARD)
|
||||
-- feature non disattivata e diversa dala i-esima
|
||||
local bIsMirrorIdOk = ( Proc.Id ~= ProcMirror.Id and ProcMirror.Flg ~= 0)
|
||||
-- box delle stesse dimensioni
|
||||
local bIsMirrorFeatureSameDimension = false
|
||||
bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < 500 * GEO.EPS_SMALL and
|
||||
abs( b3Proc:getDimY() - b3ProcMirror:getDimY()) < 500 * GEO.EPS_SMALL and
|
||||
abs( b3Proc:getDimZ() - b3ProcMirror:getDimZ()) < 500 * GEO.EPS_SMALL
|
||||
-- box allineati in X
|
||||
local bIsMirrorBoxXAligned = abs( Proc.Box:getCenter():getX() - ProcMirror.Box:getCenter():getX()) < 500 * GEO.EPS_SMALL
|
||||
-- box che non si intersecano
|
||||
local bIsNotMirrorBoxOverlapping = not OverlapsXY( b3Proc, b3ProcMirror)
|
||||
-- distanza minima tra le feature
|
||||
local dYMinDistance = max( b3Proc:getMin():getY(), b3ProcMirror:getMin():getY()) - min( b3Proc:getMax():getY(), b3ProcMirror:getMax():getY())
|
||||
local bIsMirrorFeatureDistanceOk = dYMinDistance > dMinimumDistanceMirroredFeatures + 10 * GEO.EPS_SMALL
|
||||
-- se tutte vere le condizioni, calcolo i parametri da passare alle lavorazioni
|
||||
if bIsMirrorIdOk and bIsMirrorFeatureSameDimension and bIsMirrorBoxXAligned and bIsNotMirrorBoxOverlapping and bIsMirrorFeatureDistanceOk then
|
||||
local dYMirrorAx
|
||||
local b3Tab = EgtGetTableArea()
|
||||
local ptOnMirrorAx = ( Proc.Box:getCenter() + ProcMirror.Box:getCenter()) / 2
|
||||
dYMirrorAx = ptOnMirrorAx:getY() - b3Tab:getMin():getY()
|
||||
-- scrivo i parametri nella lavorazione
|
||||
-- 2: specchiatura in Y
|
||||
Proc.Double = 2
|
||||
Proc.MirrorId = ProcMirror.Id
|
||||
-- posizione Y dell'asse di specchiatura
|
||||
Proc.MirrorAx = dYMirrorAx
|
||||
-- rimuovo dalla lista le groove già assegnate
|
||||
local ProcMirrorOldId = ProcMirror.Id
|
||||
table.remove( vGroovesThrough, nCurrentGroove)
|
||||
if j > #vGroovesThrough or ( vGroovesThrough[j].Id ~= ProcMirrorOldId) then j = j - 1 end
|
||||
table.remove( vGroovesThrough, j)
|
||||
nCurrentGroove = 0
|
||||
break
|
||||
end
|
||||
j = j + 1
|
||||
end
|
||||
end
|
||||
nCurrentGroove = nCurrentGroove + 1
|
||||
end
|
||||
|
||||
-- accoppio le forature
|
||||
local nCurrentDrilling = 1
|
||||
while nCurrentDrilling <= #vDrillings do
|
||||
local Proc = vDrillings[nCurrentDrilling]
|
||||
if Proc.Flg ~= 0 then
|
||||
local j = nCurrentDrilling + 1
|
||||
local b3Proc = EgtGetBBoxGlob( Proc.Id, GDB_BB.STANDARD)
|
||||
while j <= #vDrillings do
|
||||
local ProcMirror = vDrillings[j]
|
||||
local b3ProcMirror = EgtGetBBoxGlob( ProcMirror.Id, GDB_BB.STANDARD)
|
||||
-- feature non disattivata e diversa dala i-esima
|
||||
local bIsMirrorIdOk = ( Proc.Id ~= ProcMirror.Id and ProcMirror.Flg ~= 0)
|
||||
-- box delle stesse dimensioni
|
||||
local bIsMirrorFeatureSameDimension = false
|
||||
bIsMirrorFeatureSameDimension = abs( b3Proc:getDimX() - b3ProcMirror:getDimX()) < 500 * GEO.EPS_SMALL and
|
||||
abs( b3Proc:getDimY() - b3ProcMirror:getDimY()) < 500 * GEO.EPS_SMALL and
|
||||
abs( b3Proc:getDimZ() - b3ProcMirror:getDimZ()) < 500 * GEO.EPS_SMALL
|
||||
-- box allineati in X
|
||||
local bIsMirrorBoxXAligned = abs( Proc.Box:getCenter():getX() - ProcMirror.Box:getCenter():getX()) < 10 * GEO.EPS_SMALL
|
||||
-- box che non si intersecano
|
||||
local bIsNotMirrorBoxOverlapping = not OverlapsXY( b3Proc, b3ProcMirror)
|
||||
-- distanza minima tra le feature
|
||||
local dYMinDistance = max( b3Proc:getMin():getY(), b3ProcMirror:getMin():getY()) - min( b3Proc:getMax():getY(), b3ProcMirror:getMax():getY())
|
||||
local bIsMirrorFeatureDistanceOk = dYMinDistance > dMinimumDistanceMirroredFeatures + 10 * GEO.EPS_SMALL
|
||||
-- se tutte vere le condizioni, calcolo i parametri da passare alle lavorazioni
|
||||
if bIsMirrorIdOk and bIsMirrorFeatureSameDimension and bIsMirrorBoxXAligned and bIsNotMirrorBoxOverlapping and bIsMirrorFeatureDistanceOk then
|
||||
local dYMirrorAx
|
||||
local b3Tab = EgtGetTableArea()
|
||||
local ptOnMirrorAx = ( Proc.Box:getCenter() + ProcMirror.Box:getCenter()) / 2
|
||||
dYMirrorAx = ptOnMirrorAx:getY() - b3Tab:getMin():getY()
|
||||
-- scrivo i parametri nella lavorazione
|
||||
-- 2: specchiatura in Y
|
||||
Proc.Double = 2
|
||||
Proc.MirrorId = ProcMirror.Id
|
||||
-- posizione Y dell'asse di specchiatura
|
||||
Proc.MirrorAx = dYMirrorAx
|
||||
-- rimuovo dalla lista le groove già assegnate
|
||||
local ProcMirrorOldId = ProcMirror.Id
|
||||
table.remove( vDrillings, nCurrentDrilling)
|
||||
if j > #vDrillings or ( vDrillings[j].Id ~= ProcMirrorOldId) then j = j - 1 end
|
||||
table.remove( vDrillings, j)
|
||||
nCurrentDrilling = 0
|
||||
break
|
||||
end
|
||||
j = j + 1
|
||||
end
|
||||
end
|
||||
nCurrentDrilling = nCurrentDrilling + 1
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
@@ -820,7 +961,7 @@ function WallExec.ProcessFeatures()
|
||||
while nOperId do
|
||||
EgtSetCurrMachining( nOperId)
|
||||
local nOperationProcIds = EgtGetMachiningGeometry()
|
||||
local nOperationProcId = nOperationProcIds[1]
|
||||
local nOperationProcId = nOperationProcIds[1][1]
|
||||
local nCurrentOperId = nOperId
|
||||
for i = 1, #vProcToDisable do
|
||||
local ProcId = vProcToDisable[i]
|
||||
|
||||
Reference in New Issue
Block a user