OmagCUT :
- movimento manuale 5assi ortogonale al piano lama con aggiunta spessore lama (opzionale da ini macchina) - aggiunta lettura variabile 5assi attivo da vecchio NUM (Axium) - aggiunta possibilità attacco lama speciale a zig-zag per ceramica.
This commit is contained in:
@@ -667,6 +667,7 @@ Friend Module CamAuto
|
||||
Dim dReducedDepth As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_REDUCEDDEPTH, 1, m_MainWindow.GetMachIniFile())
|
||||
Dim dHolesOffset As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OFFSET, 0, m_MainWindow.GetMachIniFile())
|
||||
Dim dHolesOverlap As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OVERLAP, 0, m_MainWindow.GetMachIniFile())
|
||||
Dim dCutSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, 1, m_MainWindow.GetMachIniFile()), 10 * EPS_SMALL)
|
||||
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, m_MainWindow.GetMachIniFile()), 10 * EPS_SMALL)
|
||||
Dim bOneHoleIntCorner As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_ONEHOLE_INTCORNER, 0, m_MainWindow.GetMachIniFile()) <> 0)
|
||||
Dim bMillingOnCorners As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_MILLING_ON_CORNERS, 1, m_MainWindow.GetMachIniFile()) <> 0)
|
||||
@@ -682,6 +683,7 @@ Friend Module CamAuto
|
||||
EgtLuaSetGlobNumVar("CAM.HOLESOFFSET", dHolesOffset)
|
||||
EgtLuaSetGlobNumVar("CAM.HOLESOVERLAP", dHolesOverlap)
|
||||
EgtLuaSetGlobBoolVar("CAM.ONEHOLEINTCORNER", bOneHoleIntCorner)
|
||||
EgtLuaSetGlobNumVar("CAM.CUTSAFETY", dCutSafety)
|
||||
EgtLuaSetGlobNumVar("CAM.CORNERSAFETY", dCornerSafety)
|
||||
EgtLuaSetGlobBoolVar("CAM.MILLINGONCORNERS", bMillingOnCorners)
|
||||
EgtLuaSetGlobBoolVar("CAM.MILLINGONSINKS", bMillingOnSinks)
|
||||
|
||||
@@ -159,6 +159,7 @@
|
||||
Public Const K_SAWROUGHING As String = "SawRoughing"
|
||||
Public Const K_SAWFINISHING As String = "SawFinishing"
|
||||
Public Const K_WATERJETTING As String = "WaterJetting"
|
||||
Public Const K_SAWINGSPECIALLEADIN As String = "SawingSpecialLeadIn"
|
||||
|
||||
Public Const S_MACH_NEST As String = "Nest"
|
||||
Public Const K_MACH_HOLES_OFFSET As String = "HolesOffset"
|
||||
@@ -209,6 +210,7 @@
|
||||
|
||||
Public Const S_MACH_DIRECTCUTS As String = "DirectCuts"
|
||||
Public Const K_FINALHOME As String = "FinalHome"
|
||||
Public Const K_ADDSAWTHTO5AXMOVE As String = "AddSawThTo5AxMove"
|
||||
|
||||
Public Const S_MACHBUTTONS As String = "MachButtons"
|
||||
Public Const S_CONTROLMACHBUTTONS As String = "ControlMachButtons"
|
||||
|
||||
@@ -111,9 +111,24 @@ Public Class ManualAxesMoveUC
|
||||
' Leggo se in modalità 3a o 5a
|
||||
Dim bG24On As Boolean = m_CN.Is_G24_active()
|
||||
EgtLuaSetGlobBoolVar("CMD.G24", bG24On)
|
||||
' Recupero spessore lama corrente
|
||||
Dim sSaw As String = m_MainWindow.m_CurrentMachine.sCurrSaw
|
||||
EgtTdbSetCurrTool(sSaw)
|
||||
Dim dThick As Double = 0
|
||||
EgtTdbGetCurrToolParam(MCH_TP.THICK, dThick)
|
||||
EgtLuaSetGlobNumVar("CMD.SAWTH", dThick)
|
||||
' Assegno nome e valore asse da muovere
|
||||
EgtLuaSetGlobStringVar("CMD.AXISNAME", GetAxisName(CurrentBtn))
|
||||
EgtLuaSetGlobNumVar("CMD.AXISMOVE", GetAxisMove(CurrentBtn))
|
||||
Dim sAxName As String = GetAxisName(CurrentBtn)
|
||||
Dim dAxVal As Double = GetAxisMove(CurrentBtn)
|
||||
If m_MainWindow.m_CurrentMachine.bAddSawThTo5AxMove And bG24On And sAxName = "X" Then
|
||||
If dAxVal > 0 Then
|
||||
dAxVal += dThick
|
||||
ElseIf dAxVal < 0 Then
|
||||
dAxVal -= dThick
|
||||
End If
|
||||
End If
|
||||
EgtLuaSetGlobStringVar("CMD.AXISNAME", sAxName)
|
||||
EgtLuaSetGlobNumVar("CMD.AXISMOVE", dAxVal)
|
||||
' Calcolo stringa di comando risultante
|
||||
EgtLuaCallFunction("CmdString")
|
||||
EgtLuaGetGlobStringVar("CMD.CMDSTRING", CmdString)
|
||||
|
||||
@@ -84,6 +84,7 @@ Public Class CurrentMachine
|
||||
Private m_bSawRoughing As Boolean = False
|
||||
Private m_bSawFinishing As Boolean = False
|
||||
Private m_bWaterJetting As Boolean = False
|
||||
Private m_bSawingSpecialLeadIn As Boolean = False
|
||||
|
||||
' Variabili che contengono il nome degli utensili disponibili per tipo
|
||||
Private m_sCurrSaw As String = String.Empty
|
||||
@@ -126,6 +127,8 @@ Public Class CurrentMachine
|
||||
|
||||
' Flag home finale per tagli diretti
|
||||
Private m_bDirectCutsFinalHome As Boolean = True
|
||||
' Flag aggiunta spessore lama a movimento manuale 5assi
|
||||
Private m_bAddSawThTo5AxMove As Boolean = False
|
||||
|
||||
' Variazione iniziale/finale della feed dei tagli
|
||||
Private m_bFsevEnable As Boolean = False
|
||||
@@ -475,6 +478,12 @@ Public Class CurrentMachine
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Friend ReadOnly Property bSawingSpecialLeadIn As Boolean
|
||||
Get
|
||||
Return m_bSawingSpecialLeadIn
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Friend Property sCurrSaw As String
|
||||
Get
|
||||
Return m_sCurrSaw
|
||||
@@ -761,6 +770,12 @@ Public Class CurrentMachine
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Friend ReadOnly Property bAddSawThTo5AxMove As Boolean
|
||||
Get
|
||||
Return m_bAddSawThTo5AxMove
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Friend ReadOnly Property bFsevEnable As Boolean
|
||||
Get
|
||||
Return m_bFsevEnable
|
||||
@@ -1065,6 +1080,8 @@ Public Class CurrentMachine
|
||||
' taglio waterjet
|
||||
m_bWaterJetting = (GetPrivateProfileInt(S_MACHININGS, K_WATERJETTING, 0, sMachIniFile) > 0) And
|
||||
m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.ENABLE_WJ)
|
||||
' possibilità di definire attacco speciale per materiali ceramici
|
||||
m_bSawingSpecialLeadIn = (GetPrivateProfileInt(S_MACHININGS, K_SAWINGSPECIALLEADIN, 0, sMachIniFile) > 0)
|
||||
|
||||
' Leggo utensili correnti
|
||||
' lama
|
||||
@@ -1153,6 +1170,8 @@ Public Class CurrentMachine
|
||||
|
||||
' Leggo flag per posizione home alla fine dei tagli diretti
|
||||
m_bDirectCutsFinalHome = (GetPrivateProfileInt(S_MACH_DIRECTCUTS, K_FINALHOME, 1, sMachIniFile) <> 0)
|
||||
' Leggo flag per aggiunta spessore lama a movimento manuale 5assi
|
||||
m_bAddSawThTo5AxMove = (GetPrivateProfileInt(S_MACH_DIRECTCUTS, K_ADDSAWTHTO5AXMOVE, 0, sMachIniFile) <> 0)
|
||||
|
||||
' Leggo dati per feed ridotta all'inizio/fine dei tagli
|
||||
m_bFsevEnable = (GetPrivateProfileInt(S_NEST, K_MACH_CUTFSEVENABLE, 0, sMachIniFile) <> 0)
|
||||
|
||||
@@ -125,9 +125,9 @@ Public Class MachiningDbPageUC
|
||||
LonOffsetTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 16)
|
||||
RadOffsetTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 17)
|
||||
|
||||
SpecificLeadInGpBx.Header = "AttaccoCeramica(SISTEMARE)"
|
||||
SpecificLenTxBl.Text = "Lunghezza(SIST.)"
|
||||
SpecificStepTxBl.Text = "Step(SIST.)"
|
||||
SpecificLeadInGpBx.Header = EgtMsg( 90894) 'Attacco Ceramica
|
||||
SpecificLenTxBl.Text = EgtMsg( 90895) 'Lunghezza
|
||||
SpecificStepTxBl.Text = EgtMsg( 90896) 'Passo
|
||||
|
||||
MinThicknessTxBl.Text = EgtMsg(MSG_MACHININGSDBPAGEUC + 25)
|
||||
MaxThicknessTxBl.Text = EgtMsg(MSG_MACHININGSDBPAGEUC + 26)
|
||||
@@ -489,9 +489,9 @@ Public Class MachiningDbPageUC
|
||||
EgtMdbGetCurrMachiningParam(MCH_MP.THICKREF, ToolDouble)
|
||||
ThicknessFeedTxBx.Text = LenToString(ToolDouble, 3)
|
||||
' Attacco specifico
|
||||
'EgtMdbGetCurrMachiningParam(MCH_MP.SPECIFICLEN, ToolDouble)
|
||||
EgtMdbGetCurrMachiningParam( MCH_MP.LITANG, ToolDouble)
|
||||
SpecificLenTxBx.Text = LenToString(ToolDouble, 3)
|
||||
'EgtMdbGetCurrMachiningParam(MCH_MP.SPECIFICSTEP, ToolDouble)
|
||||
EgtMdbGetCurrMachiningParam( MCH_MP.LIELEV, ToolDouble)
|
||||
SpecificStepTxBx.Text = LenToString(ToolDouble, 3)
|
||||
' Sovramateriale
|
||||
EgtMdbGetCurrMachiningParam(MCH_MP.OFFSL, ToolDouble)
|
||||
@@ -561,10 +561,12 @@ Public Class MachiningDbPageUC
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.STEPEXTARC, dTemp)
|
||||
StringToLen(ArcIntTxBx.Text, dTemp)
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.STEPINTARC, dTemp)
|
||||
StringToLen(SpecificLenTxBx.Text, dTemp)
|
||||
'EgtMdbSetCurrMachiningParam(MCH_MP.SPECIFICLEN, dTemp)
|
||||
StringToLen(SpecificStepTxBx.Text, dTemp)
|
||||
'EgtMdbSetCurrMachiningParam(MCH_MP.SPECIFICSTEP, dTemp)
|
||||
If nMachiningType = MCH_MY.SAWING Then
|
||||
StringToLen(SpecificLenTxBx.Text, dTemp)
|
||||
EgtMdbSetCurrMachiningParam( MCH_MP.LITANG, dTemp)
|
||||
StringToLen(SpecificStepTxBx.Text, dTemp)
|
||||
EgtMdbSetCurrMachiningParam( MCH_MP.LIELEV, dTemp)
|
||||
End If
|
||||
' Parametri Foratura
|
||||
StringToLen(StartPosTxBx.Text, dTemp)
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.STARTPOS, dTemp)
|
||||
@@ -611,8 +613,10 @@ Public Class MachiningDbPageUC
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.LPTURNS, nTemp)
|
||||
StringToInt(HpTurnsTxBx.Text, nTemp)
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.HPTURNS, nTemp)
|
||||
StringToLen(LiTangTxBx.Text, dTemp)
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.LITANG, dTemp)
|
||||
If nMachiningType = MCH_MY.WATERJETTING Then
|
||||
StringToLen(LiTangTxBx.Text, dTemp)
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.LITANG, dTemp)
|
||||
End If
|
||||
StringToLen(LiPerpTxBx.Text, dTemp)
|
||||
EgtMdbSetCurrMachiningParam(MCH_MP.LIPERP, dTemp)
|
||||
StringToLen(LoTangTxBx.Text, dTemp)
|
||||
@@ -837,9 +841,7 @@ Public Class MachiningDbPageUC
|
||||
LoTangTxBx.Visibility = Windows.Visibility.Hidden
|
||||
LoPerpTxBl.Visibility = Windows.Visibility.Hidden
|
||||
LoPerpTxBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Visible
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Visible
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Visible
|
||||
SpecificLeadInGpBx.Visibility = If( m_MainWindow.m_CurrentMachine.bSawingSpecialLeadIn, Windows.Visibility.Visible, Windows.Visibility.Hidden)
|
||||
Case MCH_MY.MILLING 'Parametri Fresatura
|
||||
SideAngleTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SideAngleTxBx.Visibility = Windows.Visibility.Hidden
|
||||
@@ -1004,8 +1006,6 @@ Public Class MachiningDbPageUC
|
||||
LoPerpTxBl.Visibility = Windows.Visibility.Hidden
|
||||
LoPerpTxBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Hidden
|
||||
Case MCH_MY.DRILLING 'Parametri Foratura
|
||||
SideAngleTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SideAngleTxBx.Visibility = Windows.Visibility.Hidden
|
||||
@@ -1126,8 +1126,6 @@ Public Class MachiningDbPageUC
|
||||
LoPerpTxBl.Visibility = Windows.Visibility.Hidden
|
||||
LoPerpTxBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Hidden
|
||||
Case MCH_MY.SAWROUGHING 'Parametri Sgrossatura con lama
|
||||
SideAngleTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SideAngleTxBx.Visibility = Windows.Visibility.Hidden
|
||||
@@ -1296,8 +1294,6 @@ Public Class MachiningDbPageUC
|
||||
LoPerpTxBl.Visibility = Windows.Visibility.Hidden
|
||||
LoPerpTxBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Hidden
|
||||
Case MCH_MY.SAWFINISHING 'Parametri Finitura con lama
|
||||
SideAngleTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SideAngleTxBx.Visibility = Windows.Visibility.Hidden
|
||||
@@ -1463,8 +1459,6 @@ Public Class MachiningDbPageUC
|
||||
LoPerpTxBl.Visibility = Windows.Visibility.Hidden
|
||||
LoPerpTxBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Hidden
|
||||
Case MCH_MY.POCKETING 'Parametri Svuotatura
|
||||
SideAngleTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SideAngleTxBx.Visibility = Windows.Visibility.Hidden
|
||||
@@ -1629,8 +1623,6 @@ Public Class MachiningDbPageUC
|
||||
LoPerpTxBl.Visibility = Windows.Visibility.Hidden
|
||||
LoPerpTxBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Hidden
|
||||
Case MCH_MY.WATERJETTING 'Parametri WaterJetting
|
||||
DepthTxBl.Visibility = Windows.Visibility.Hidden
|
||||
DepthTxBx.Visibility = Windows.Visibility.Hidden
|
||||
@@ -1799,8 +1791,6 @@ Public Class MachiningDbPageUC
|
||||
LoPerpTxBl.Visibility = Windows.Visibility.Visible
|
||||
LoPerpTxBx.Visibility = Windows.Visibility.Visible
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Hidden
|
||||
End Select
|
||||
'Parametri utensile
|
||||
ToolTxBl.Visibility = Windows.Visibility.Visible
|
||||
@@ -1829,8 +1819,6 @@ Public Class MachiningDbPageUC
|
||||
CurveBrd.Visibility = Windows.Visibility.Hidden
|
||||
SawStepGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLeadInGpBx.Visibility = Windows.Visibility.Hidden
|
||||
SpecificLenTxBl.Visibility = Windows.Visibility.Hidden
|
||||
SpecificStepTxBx.Visibility = Windows.Visibility.Hidden
|
||||
'Parametri Foratura
|
||||
StartPosTxBl.Visibility = Windows.Visibility.Hidden
|
||||
StartPosTxBx.Visibility = Windows.Visibility.Hidden
|
||||
|
||||
@@ -62,5 +62,5 @@ Imports System.Windows
|
||||
' by using the '*' as shown below:
|
||||
' <Assembly: AssemblyVersion("1.0.*")>
|
||||
|
||||
<Assembly: AssemblyVersion("2.2.6.2")>
|
||||
<Assembly: AssemblyFileVersion("2.2.6.2")>
|
||||
<Assembly: AssemblyVersion("2.2.6.4")>
|
||||
<Assembly: AssemblyFileVersion("2.2.6.4")>
|
||||
|
||||
+20
-10
@@ -131,12 +131,12 @@ Public Class NumNCOld
|
||||
|
||||
#Region " Variabili "
|
||||
|
||||
Public Var6003 As Byte
|
||||
Public Var600A As Byte
|
||||
Public Var600B As Byte
|
||||
Public Var600C As Byte
|
||||
Public Var600D As Byte
|
||||
Public Var600E As Byte
|
||||
Public Var600F As Byte
|
||||
|
||||
Public var6010L As Long
|
||||
Public var6014L As Long
|
||||
@@ -147,7 +147,6 @@ Public Class NumNCOld
|
||||
Public var6028L As Long
|
||||
Public var602CL As Long
|
||||
|
||||
|
||||
Private iFirstVar As UInt16
|
||||
Private n_portNC As Int16
|
||||
|
||||
@@ -356,7 +355,16 @@ Public Class NumNCOld
|
||||
|
||||
global_state = eStateType.BUSY
|
||||
|
||||
'lettura variabili da %V600A.B a %V600D.B tramite un solo accesso in memoria per %V600A.B e lettura di 4 in serie
|
||||
' Lettura variabile %V6003
|
||||
|
||||
iFirstVar = &H6003
|
||||
|
||||
nret = ReadLadderVar(n_portNC, VBY, iFirstVar, 1, MyData, SYN)
|
||||
If nret = 0 Then
|
||||
Var6003 = MyData.data(0)
|
||||
End If
|
||||
|
||||
' Lettura variabili da %V600A.B a %V600D.B tramite un solo accesso in memoria per %V600A.B e lettura di 4 in serie
|
||||
|
||||
iFirstVar = &H600A
|
||||
|
||||
@@ -376,9 +384,7 @@ Public Class NumNCOld
|
||||
n_spindle_override(0) = CShort(Math.Round((Var600B * 50 / 255) + 50))
|
||||
End If
|
||||
|
||||
'Fine lettura %V600D.B
|
||||
|
||||
' lettura variabile assorbimento mandrino ( %V250F )
|
||||
' Lettura variabile assorbimento mandrino ( %V250F )
|
||||
|
||||
iFirstVar = &H250F
|
||||
|
||||
@@ -390,7 +396,7 @@ Public Class NumNCOld
|
||||
|
||||
End If
|
||||
|
||||
' lettura potenziometro F override......
|
||||
' Lettura potenziometro F override......
|
||||
|
||||
' Type tInterpo
|
||||
' FeedMes1 As Integer '; /* not used */
|
||||
@@ -416,7 +422,7 @@ Public Class NumNCOld
|
||||
'e non gestiamo il caso del numero negativo.......
|
||||
d_DInterpo_Prog_Feed = CDbl(BitConverter.ToUInt16(MyData.data, 10)) ' sembrerebbero i due bytes più alti del long ...??
|
||||
|
||||
'lettura variabile S effettiva
|
||||
' Lettura variabile S effettiva
|
||||
|
||||
iFirstVar = &H2600
|
||||
|
||||
@@ -426,7 +432,7 @@ Public Class NumNCOld
|
||||
d_spindle_eff(0) = CDbl(BitConverter.ToInt32(MyData.data, 0)) ' progr. Feed
|
||||
End If
|
||||
|
||||
'lettura variabili da %V6010.L a %V601C.L
|
||||
' Lettura variabili da %V6010.L a %V601C.L
|
||||
|
||||
iFirstVar = &H6010
|
||||
|
||||
@@ -443,7 +449,7 @@ Public Class NumNCOld
|
||||
d_spindle_prog(0) = CDbl(var6014L)
|
||||
|
||||
|
||||
'lettura variabili da %V6020.L a %V602C.L
|
||||
' Lettura variabili da %V6020.L a %V602C.L
|
||||
|
||||
iFirstVar = &H6020
|
||||
|
||||
@@ -966,6 +972,10 @@ Public Class NumNCOld
|
||||
|
||||
End Function
|
||||
|
||||
Public Overrides Function Is_G24_active() As Boolean
|
||||
Return (( Var6003 And &H1) <> 0)
|
||||
End Function
|
||||
|
||||
Public Overrides Function get_program_status() As Int16
|
||||
|
||||
Dim nret As Int16 = -1
|
||||
|
||||
Reference in New Issue
Block a user