TestEIn 1.6d9 :
- distanza ora viene espressa in griglia se abilitata visualizz.coord. griglia - aggiunto disegno frame con Drag - aggiunto drag a disegno punto - griglia anche da oggetti punto e frame - corretto calcolo punto continuazione alla fine di LinePDL e LinePVL.
This commit is contained in:
+92
-8
@@ -71,6 +71,7 @@ Public Class Controller
|
||||
SETNAME
|
||||
SETINFO
|
||||
POINT
|
||||
FRAME
|
||||
LINE2P
|
||||
LINEPDL
|
||||
LINEPVL
|
||||
@@ -908,6 +909,9 @@ Public Class Controller
|
||||
' Point
|
||||
Case CMD.POINT
|
||||
Return ProcessPoint()
|
||||
' Point
|
||||
Case CMD.FRAME
|
||||
Return ProcessFrame()
|
||||
' Line2P
|
||||
Case CMD.LINE2P
|
||||
Return ProcessLine2P()
|
||||
@@ -1058,6 +1062,10 @@ Public Class Controller
|
||||
DragGridRotate3D()
|
||||
Case CMD.COPYPARTLAYEROBJ
|
||||
DragCopyPartLayerObj()
|
||||
Case CMD.POINT
|
||||
DragPoint()
|
||||
Case CMD.FRAME
|
||||
DragFrame()
|
||||
Case CMD.LINE2P
|
||||
DragLine2P()
|
||||
Case CMD.LINEPDL
|
||||
@@ -1430,6 +1438,24 @@ Public Class Controller
|
||||
End If
|
||||
Dim nId As Integer = EgtGetLastSelectedObj()
|
||||
Select Case EgtGetType(nId)
|
||||
Case GDB_TY.GEO_POINT
|
||||
Dim ptOrig As Point3d
|
||||
If Not EgtStartPoint(nId, GDB_ID.ROOT, ptOrig) Then
|
||||
Return False
|
||||
End If
|
||||
Dim frNew As Frame3d = EgtGetGridFrame()
|
||||
frNew.ChangeOrigin(ptOrig)
|
||||
EnableCommandLog()
|
||||
EgtSetGridFrame(frNew)
|
||||
DisableCommandLog()
|
||||
Case GDB_TY.GEO_FRAME
|
||||
Dim frNew As New Frame3d
|
||||
If Not EgtFrame(nId, GDB_ID.ROOT, frNew) Then
|
||||
Return False
|
||||
End If
|
||||
EnableCommandLog()
|
||||
EgtSetGridFrame(frNew)
|
||||
DisableCommandLog()
|
||||
Case GDB_TY.CRV_ARC
|
||||
Dim vtZ As Vector3d
|
||||
If Not EgtCurveExtrusion(nId, vtZ) OrElse vtZ.IsSmall() Then
|
||||
@@ -1933,16 +1959,16 @@ Public Class Controller
|
||||
Private Function ProcessPoint() As Boolean
|
||||
Select Case m_nStep
|
||||
Case 0
|
||||
' deve esistere un gruppo corrente
|
||||
If GetCurrLayer() = GDB_ID.NULL Then
|
||||
' deve esistere un gruppo corrente e devo poter creare il gruppo di drag
|
||||
If GetCurrLayer() = GDB_ID.NULL Or Not m_Scene.CreateDragGroup() Then
|
||||
Return False
|
||||
End If
|
||||
' non serve il gruppo di drag
|
||||
m_Scene.EnableDrag()
|
||||
' imposto stato a primo punto per point
|
||||
m_Scene.SetStatusSelPoint()
|
||||
m_nStep = 1
|
||||
' abilito dialogo
|
||||
RaiseEvent PrepareInputBox("POINT", "Insert Point", "", False, False)
|
||||
RaiseEvent PrepareInputBox("POINT", "Insert Point", "", False, True)
|
||||
m_nInpType = IBT.TY_POINT3D
|
||||
SetInputBoxPoint3d(m_ptCont)
|
||||
Case 1
|
||||
@@ -1964,6 +1990,64 @@ Public Class Controller
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Sub DragPoint()
|
||||
' il gruppo di Drag ha riferimento globale
|
||||
If m_nStep = 1 Then
|
||||
' svuoto il gruppo di drag
|
||||
EgtEmptyGroup(m_Scene.GetDragGroup())
|
||||
' creo il punto
|
||||
EgtCreateGeoPoint(m_Scene.GetDragGroup(), m_ptLast, GDB_RT.GLOB)
|
||||
EgtDraw()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function ProcessFrame() As Boolean
|
||||
Select Case m_nStep
|
||||
Case 0
|
||||
' deve esistere un gruppo corrente e devo poter creare il gruppo di drag
|
||||
If GetCurrLayer() = GDB_ID.NULL Or Not m_Scene.CreateDragGroup() Then
|
||||
Return False
|
||||
End If
|
||||
m_Scene.EnableDrag()
|
||||
' imposto stato a primo punto per point
|
||||
m_Scene.SetStatusSelPoint()
|
||||
m_nStep = 1
|
||||
' abilito dialogo
|
||||
RaiseEvent PrepareInputBox("FRAME", "Insert Origin", "", False, True)
|
||||
m_nInpType = IBT.TY_POINT3D
|
||||
SetInputBoxPoint3d(m_ptCont)
|
||||
Case 1
|
||||
' creo il frame allineato con grid (i dati sono in globale)
|
||||
EnableCommandLog()
|
||||
If EgtCreateGeoFrame(GetCurrLayer(), New Frame3d(m_ptLast.Loc(GDB_ID.GRID)), GDB_RT.GRID) <> GDB_ID.NULL Then
|
||||
m_ptCont = m_ptLast
|
||||
End If
|
||||
DisableCommandLog()
|
||||
' reset stato scena
|
||||
m_Scene.ResetStatus()
|
||||
' aggiorno stato
|
||||
m_nStep = 0
|
||||
RaiseEvent UpdateUI(Me, True)
|
||||
Case Else
|
||||
m_nStep = 0
|
||||
Return False
|
||||
End Select
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Sub DragFrame()
|
||||
' il gruppo di Drag ha riferimento globale
|
||||
If m_nStep = 1 Then
|
||||
' svuoto il gruppo di drag
|
||||
EgtEmptyGroup(m_Scene.GetDragGroup())
|
||||
' creo il frame
|
||||
Dim frNew As Frame3d = EgtGetGridFrame()
|
||||
frNew.ChangeOrigin(m_ptLast)
|
||||
EgtCreateGeoFrame(m_Scene.GetDragGroup(), frNew, GDB_RT.GLOB)
|
||||
EgtDraw()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function ProcessLine2P() As Boolean
|
||||
Select Case m_nStep
|
||||
Case 0
|
||||
@@ -2119,9 +2203,9 @@ Public Class Controller
|
||||
m_vtLast.Loc(GDB_ID.GRID), m_dLast, GDB_RT.GRID)
|
||||
DisableCommandLog()
|
||||
If nId <> GDB_ID.NULL Then
|
||||
m_ptCont = m_ptLast
|
||||
m_vtCont = (m_ptLast - m_ptP1)
|
||||
m_vtCont = m_vtLast
|
||||
m_vtCont.Normalize()
|
||||
m_ptCont = m_ptP1 + m_vtCont * m_dLast
|
||||
End If
|
||||
EgtDraw()
|
||||
' aggiorno stato
|
||||
@@ -2210,9 +2294,9 @@ Public Class Controller
|
||||
m_vtLast.Loc(GDB_ID.GRID), m_dLast, GDB_RT.GRID)
|
||||
DisableCommandLog()
|
||||
If nId <> GDB_ID.NULL Then
|
||||
m_ptCont = m_ptLast
|
||||
m_vtCont = (m_ptLast - m_ptP1)
|
||||
m_vtCont = m_vtLast
|
||||
m_vtCont.Normalize()
|
||||
m_ptCont = m_ptP1 + m_vtCont * m_dLast
|
||||
End If
|
||||
EgtDraw()
|
||||
' aggiorno stato
|
||||
|
||||
@@ -1744,6 +1744,23 @@ Public Function EgtAtParamVector(ByVal nId As Integer, ByVal dU As Double, ByRef
|
||||
Return EgtAtParamVector(nId, dU, nId, VtV)
|
||||
End Function
|
||||
|
||||
<DllImport(EgtIntDll, CharSet:=CharSet.Unicode)>
|
||||
Private Function EgtFrame(ByVal nId As Integer, ByVal nRefId As Integer,
|
||||
ByRef PtOrig As Point3d, ByRef VtX As Vector3d, ByRef VtY As Vector3d, ByRef VtZ As Vector3d) As Boolean
|
||||
End Function
|
||||
Public Function EgtFrame(ByVal nId As Integer, ByVal nRefId As Integer, ByRef frFrame As Frame3d) As Boolean
|
||||
Dim PtOrig As Point3d
|
||||
Dim VtDirX, VtDirY, VtDirZ As Vector3d
|
||||
If Not EgtFrame(nId, nRefId, PtOrig, VtDirX, VtDirY, VtDirZ) Then
|
||||
frFrame = Frame3d.GLOB()
|
||||
Return False
|
||||
Else
|
||||
Return frFrame.Setup(PtOrig, VtDirX, VtDirY, VtDirZ)
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
|
||||
<DllImport(EgtIntDll, CharSet:=CharSet.Unicode)>
|
||||
Public Function EgtCurveLength(ByVal nId As Integer, ByRef dLen As Double) As Boolean
|
||||
End Function
|
||||
|
||||
Generated
+19
-19
@@ -108,6 +108,7 @@ Partial Class Form1
|
||||
Me.btnPoint = New System.Windows.Forms.Button()
|
||||
Me.btnLine2P = New System.Windows.Forms.Button()
|
||||
Me.TabConstruct = New System.Windows.Forms.TabPage()
|
||||
Me.btnExplodeSurf = New System.Windows.Forms.Button()
|
||||
Me.btnMergeSurf = New System.Windows.Forms.Button()
|
||||
Me.btnInvertSurf = New System.Windows.Forms.Button()
|
||||
Me.btnRevolve = New System.Windows.Forms.Button()
|
||||
@@ -182,7 +183,6 @@ Partial Class Form1
|
||||
Me.MruSFile6 = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.MruSFile7 = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.MruSFile8 = New System.Windows.Forms.ToolStripMenuItem()
|
||||
Me.btnExplodeSurf = New System.Windows.Forms.Button()
|
||||
Me.TableLayoutPanel1.SuspendLayout()
|
||||
Me.TabControl1.SuspendLayout()
|
||||
Me.TabFile.SuspendLayout()
|
||||
@@ -1564,6 +1564,24 @@ Partial Class Form1
|
||||
Me.TabConstruct.TabIndex = 4
|
||||
Me.TabConstruct.Text = "Construct"
|
||||
'
|
||||
'btnExplodeSurf
|
||||
'
|
||||
Me.btnExplodeSurf.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control
|
||||
Me.btnExplodeSurf.FlatAppearance.BorderSize = 0
|
||||
Me.btnExplodeSurf.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.Control
|
||||
Me.btnExplodeSurf.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.GradientInactiveCaption
|
||||
Me.btnExplodeSurf.FlatStyle = System.Windows.Forms.FlatStyle.Flat
|
||||
Me.btnExplodeSurf.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.btnExplodeSurf.Image = CType(resources.GetObject("btnExplodeSurf.Image"), System.Drawing.Image)
|
||||
Me.btnExplodeSurf.ImageAlign = System.Drawing.ContentAlignment.TopCenter
|
||||
Me.btnExplodeSurf.Location = New System.Drawing.Point(0, 288)
|
||||
Me.btnExplodeSurf.Name = "btnExplodeSurf"
|
||||
Me.btnExplodeSurf.Size = New System.Drawing.Size(56, 48)
|
||||
Me.btnExplodeSurf.TabIndex = 44
|
||||
Me.btnExplodeSurf.Text = "Explode"
|
||||
Me.btnExplodeSurf.TextAlign = System.Drawing.ContentAlignment.BottomCenter
|
||||
Me.btnExplodeSurf.UseVisualStyleBackColor = False
|
||||
'
|
||||
'btnMergeSurf
|
||||
'
|
||||
Me.btnMergeSurf.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control
|
||||
@@ -2351,24 +2369,6 @@ Partial Class Form1
|
||||
Me.MruSFile8.Size = New System.Drawing.Size(160, 22)
|
||||
Me.MruSFile8.Text = "File8"
|
||||
'
|
||||
'btnExplodeSurf
|
||||
'
|
||||
Me.btnExplodeSurf.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control
|
||||
Me.btnExplodeSurf.FlatAppearance.BorderSize = 0
|
||||
Me.btnExplodeSurf.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.Control
|
||||
Me.btnExplodeSurf.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.GradientInactiveCaption
|
||||
Me.btnExplodeSurf.FlatStyle = System.Windows.Forms.FlatStyle.Flat
|
||||
Me.btnExplodeSurf.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
|
||||
Me.btnExplodeSurf.Image = CType(resources.GetObject("btnExplodeSurf.Image"), System.Drawing.Image)
|
||||
Me.btnExplodeSurf.ImageAlign = System.Drawing.ContentAlignment.TopCenter
|
||||
Me.btnExplodeSurf.Location = New System.Drawing.Point(0, 288)
|
||||
Me.btnExplodeSurf.Name = "btnExplodeSurf"
|
||||
Me.btnExplodeSurf.Size = New System.Drawing.Size(56, 48)
|
||||
Me.btnExplodeSurf.TabIndex = 44
|
||||
Me.btnExplodeSurf.Text = "Explode"
|
||||
Me.btnExplodeSurf.TextAlign = System.Drawing.ContentAlignment.BottomCenter
|
||||
Me.btnExplodeSurf.UseVisualStyleBackColor = False
|
||||
'
|
||||
'Form1
|
||||
'
|
||||
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
|
||||
|
||||
+7
-7
@@ -883,7 +883,7 @@
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC2
|
||||
DQAAAk1TRnQBSQFMAgEBDgEAAXABEAFwAhABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
|
||||
DQAAAk1TRnQBSQFMAgEBDgEAAXgBEAF4AhABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
|
||||
AUADAAFAAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
|
||||
AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
|
||||
AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
|
||||
@@ -952,7 +952,7 @@
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADW
|
||||
CAAAAk1TRnQBSQFMAgEBAgEAAZABBwGQAQcBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
CAAAAk1TRnQBSQFMAgEBAgEAAZgBBwGYAQcBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
@@ -1092,11 +1092,11 @@
|
||||
</data>
|
||||
<data name="btnPoint.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||
xAAADsQBlSsOGwAAAAd0SU1FB94KFxEsB9kvlzIAAACGSURBVFhH7dPRCYAwDABRB+u0TucWsRW0ogcR
|
||||
keuPhQdyFJKPOkXEUBhNGE0YTRhNGE0YTRhNGE0Yn6inVO1jV+heBmOmDduGzkv3cgmMmdvw0xLXuxmM
|
||||
mX+Besa+geZYovP+gi9hNGE0YTRhNGE0YTRhNGE0YTRhNGE0YTRhNGE0YfTEtAKYv7U6xFtRwAAAAABJ
|
||||
RU5ErkJggg==
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQffBBwHAxGEIS8JAAAAq0lEQVRYR+3TUQqDMBBF
|
||||
UReWxbkWV9ddxKRN4qgXppTOSz8qHAjXgcyHLjnnqTAqYVTCqIRRCaMSRiWMShiVML6jPKmohy7RnAej
|
||||
p172vHR7HD5cAqPndrlZ4jrrwej5L1Ceud9ANZY46P6Cb8KohFEJY6Trt3J6Ga1eXqx2idtQlH55O48l
|
||||
cDhCu9Qu8DrboWh2gdH6QeEnFuhGswMzYFTCqIRRCaMSRp287IDzhJ/eCN+kAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="btnLine2P.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
|
||||
@@ -902,7 +902,11 @@ Public Class Form1
|
||||
|
||||
' --------------------- Commands --------------------------------
|
||||
Private Sub btnPoint_Click(sender As System.Object, e As System.EventArgs) Handles btnPoint.Click
|
||||
m_Controller.ExecuteCommand(CMD.POINT)
|
||||
If (ModifierKeys And Keys.Shift) <> Keys.Shift Then
|
||||
m_Controller.ExecuteCommand(CMD.POINT)
|
||||
Else
|
||||
m_Controller.ExecuteCommand(CMD.FRAME)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub btnLine2P_Click(sender As System.Object, e As System.EventArgs) Handles btnLine2P.Click
|
||||
|
||||
@@ -46,5 +46,5 @@ Imports System.Runtime.InteropServices
|
||||
' utilizzando l'asterisco (*) come descritto di seguito:
|
||||
' <Assembly: AssemblyVersion("1.0.*")>
|
||||
|
||||
<Assembly: AssemblyVersion("1.6.4.8")>
|
||||
<Assembly: AssemblyFileVersion("1.6.4.8")>
|
||||
<Assembly: AssemblyVersion("1.6.4.9")>
|
||||
<Assembly: AssemblyFileVersion("1.6.4.9")>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 233 B After Width: | Height: | Size: 269 B |
@@ -284,19 +284,19 @@ Public Class Scene
|
||||
' disegno la linea (coordinate geo globali)
|
||||
EgtSetGeoLine(m_ptPrev, ptSel)
|
||||
' calcolo la distanza e il delta e li visualizzo
|
||||
Dim dX As Double = ptSel.x - m_ptPrev.x
|
||||
Dim dY As Double = ptSel.y - m_ptPrev.y
|
||||
Dim dZ As Double = ptSel.z - m_ptPrev.z
|
||||
Dim dDist As Double = Sqrt(dX * dX + dY * dY + dZ * dZ)
|
||||
Dim vtDist As Vector3d = ptSel - m_ptPrev
|
||||
If m_bGridCursorPos Then
|
||||
vtDist.ToLoc(EgtGetGridFrame())
|
||||
End If
|
||||
Dim sOut As New System.Text.StringBuilder
|
||||
sOut.Append(EgtMsg(1301)) ' Dist=
|
||||
sOut.Append(dDist.ToString("F4", CultureInfo.InvariantCulture))
|
||||
sOut.Append(vtDist.Len().ToString("F4", CultureInfo.InvariantCulture))
|
||||
sOut.Append(" dX=")
|
||||
sOut.Append(dX.ToString("F4", CultureInfo.InvariantCulture))
|
||||
sOut.Append(vtDist.x.ToString("F4", CultureInfo.InvariantCulture))
|
||||
sOut.Append(" dY=")
|
||||
sOut.Append(dY.ToString("F4", CultureInfo.InvariantCulture))
|
||||
sOut.Append(vtDist.y.ToString("F4", CultureInfo.InvariantCulture))
|
||||
sOut.Append(" dZ=")
|
||||
sOut.Append(dZ.ToString("F4", CultureInfo.InvariantCulture))
|
||||
sOut.Append(vtDist.z.ToString("F4", CultureInfo.InvariantCulture))
|
||||
' lancio l'evento per visualizzare la distanza
|
||||
RaiseEvent OnShowDistance(Me, sOut.ToString())
|
||||
m_nStatus = ST.GETDIST
|
||||
@@ -594,7 +594,7 @@ Public Class Scene
|
||||
Private Sub ShowCursorPos(ByVal WinXY As Point)
|
||||
|
||||
' se coord. griglia e non snap a punto in Z
|
||||
If (m_bGridCursorPos And m_nStatus <> ST.SELPOINTZ) Then
|
||||
If m_bGridCursorPos And m_nStatus <> ST.SELPOINTZ Then
|
||||
' calcolo lo snap da utilizzare
|
||||
Dim nSnap As SP = SP.PT_SKETCH
|
||||
If m_nStatus = ST.SELPOINT And m_nSnapType = SP.PT_GRID Then
|
||||
|
||||
Reference in New Issue
Block a user