mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-11 16:19:16 +05:00
Merge remote-tracking branch 'origin/master' into gni/adaptation
This commit is contained in:
commit
7faac48fff
@ -4,14 +4,14 @@
|
||||
Plugins
|
||||
*******
|
||||
|
||||
The following plugins are accessible via **Mesh > SMESH pligins** menu:
|
||||
The following plugins are accessible via **Mesh > SMESH plugins** menu:
|
||||
|
||||
* `SpherePadder plugin <padder/padder_userguide_page.html>`_
|
||||
* `SpherePadder plugin <padder/padder_userguide_page.html>`_
|
||||
* `MGSurfOpt plugin <yams/index.html>`_
|
||||
* `MGCleaner plugin <MGCleaner/index.html>`_
|
||||
* `Z-cracks plugin <zcracks/index.html>`_
|
||||
* `MacMesh plugin <MacMesh/index.html>`_
|
||||
* `blocFissure plugin <blocFissure/index.html>`_
|
||||
* `blocFissure plugin <blocFissure/index.html>`_
|
||||
* **MeshCut plugin** - allows to cut a mesh constituted of linear tetrahedrons by a plane.
|
||||
* **Get min or max value of control** - a sample plugin whose sources are located in *${GUI_ROOT_DIR}/share/salome/plugins/gui/demo* directory (files *minmax_plugin.py, minmax_ui.py and smesh_plugins.py*). You can find a detailed description of how to create your own plugin in documentation: **Help > User's Guide > GUI module > How-To's and Best Practices > Extend SALOME gui functions using python plugins**.
|
||||
|
||||
|
@ -112,12 +112,16 @@
|
||||
<section name="smesh_help" >
|
||||
<parameter name="User's Guide/Mesh module/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/index.html"/>
|
||||
<parameter name="Developer's Guide/Mesh module/Developer's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/tui/SMESH/index.html;;http://docs.salome-platform.org/latest/tui/SMESH/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/Plug-ins/MGSurfOpt plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/yams/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/yams/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/Plug-ins/MGCleaner plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MGCleaner/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/MGCleaner/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/Plug-ins/Z-cracks plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/zcracks/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/Plug-ins/MacMesh plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MacMesh/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/MacMesh/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/Plug-ins/blocFissure plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/blocFissure/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/blocFissure/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/Plug-ins/SpherePadder plugin" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/padder/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/padder/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/MGCleaner plugin/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MGCleaner/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/MGCleaner/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/MGCleaner plugin/Reference" value="%MESHGEMS_ROOT_DIR%/Docs/mg-cleaner_api_manual.pdf"/>
|
||||
<parameter name="User's Guide/Mesh module/MGCleaner plugin/Manual" value="%MESHGEMS_ROOT_DIR%/Docs/mg-cleaner_user_manual.pdf"/>
|
||||
<parameter name="User's Guide/Mesh module/MGSurfOpt plugin/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/yams/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/yams/index.html"/>
|
||||
<parameter name="User's Guide/Mesh module/MGSurfOpt plugin/Reference" value="%MESHGEMS_ROOT_DIR%/Docs/mg-surfopt_api_manual.pdf"/>
|
||||
<parameter name="User's Guide/Mesh module/MGSurfOpt plugin/Manual" value="%MESHGEMS_ROOT_DIR%/Docs/mg-surfopt_user_manual.pdf"/>
|
||||
</section>
|
||||
<section name="resources">
|
||||
<!-- Module resources -->
|
||||
|
@ -250,12 +250,16 @@ void SMESHGUI_DeleteGroupDlg::onOk()
|
||||
//=================================================================================
|
||||
void SMESHGUI_DeleteGroupDlg::reject()
|
||||
{
|
||||
if (SMESH::GetCurrentVtkView()) {
|
||||
SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters
|
||||
}
|
||||
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||
aViewWindow->SetSelectionMode(ActorSelection);
|
||||
disconnect(mySelectionMgr, 0, this, 0);
|
||||
disconnect(mySMESHGUI, 0, this, 0);
|
||||
mySMESHGUI->ResetState();
|
||||
//disconnect(mySMESHGUI, 0, this, 0);
|
||||
//mySMESHGUI->ResetState();
|
||||
mySelectionMgr->clearFilters();
|
||||
mySMESHGUI->ResetState();
|
||||
QDialog::reject();
|
||||
}
|
||||
|
||||
|
@ -308,6 +308,14 @@
|
||||
<source>MEN_COMPUTE</source>
|
||||
<translation>Calculer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_RE_COMPUTE</source>
|
||||
<translation>Nettoyer et calculer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_SHOW_ERRORS</source>
|
||||
<translation>Montrer les erreurs de calcul</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_COMPUTE_SUBMESH</source>
|
||||
<translation>Calculer le sous-maillage</translation>
|
||||
@ -1502,6 +1510,10 @@ Merci de les corriger, puis essayez de nouveau</translation>
|
||||
<source>SMESH_AUTO_DIM</source>
|
||||
<translation>Définition automatique des dimensions spatiales</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_ZTOLERANCE</source>
|
||||
<translation>Tolérance en Z</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_REQUIRED_GROUPS</source>
|
||||
<translation>Créer les groupes des types nécessaires</translation>
|
||||
@ -2306,6 +2318,10 @@ Référez-vous à la documentation sur l'algorithme et la géométrie suppo
|
||||
<source>SMESH_NAME</source>
|
||||
<translation>Nom</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_NAMES</source>
|
||||
<translation>Noms</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_NODES</source>
|
||||
<translation>Nœuds</translation>
|
||||
@ -4665,6 +4681,11 @@ Il ne peut pas être supprimé.</translation>
|
||||
Continuer?
|
||||
</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MSG_WARN_ON_GEOM_MODIF</source>
|
||||
<translation>Cette action est interdite car la géométrie
|
||||
a changé et le maillage doit etre recalculé..</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_ADVANCED</source>
|
||||
<translation>Avancé</translation>
|
||||
@ -4725,6 +4746,29 @@ Il ne peut pas être supprimé.</translation>
|
||||
<translation>Exporter les champs</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_FaceGroupsSeparatedByEdgesDlg</name>
|
||||
<message>
|
||||
<source>CAPTION</source>
|
||||
<translation>Groupes de faces séparées par une arête vive.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SHARP_ANGLE</source>
|
||||
<translation>Angle vif</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CREATE_EDGES</source>
|
||||
<translation>Créer les arêtes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>USE_EXISTING_EDGES</source>
|
||||
<translation>Utiliser les arêtes existantes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>NB_GROUPS_CREATED</source>
|
||||
<translation>%1 groupes de faces créé(s)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_OffsetDlg</name>
|
||||
<message>
|
||||
@ -5267,7 +5311,15 @@ Ouvrez une fenêtre VTK et essayez de nouveau</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MESHES</source>
|
||||
<translation>Maillages</translation>
|
||||
<translation>Maillages, sous-maillages, groupes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>NEW_MESH_NAME</source>
|
||||
<translation>Nom du nouveau maillage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MESH_APPEND_TO</source>
|
||||
<translation>Ajouter au maillage</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PROCESSING_IDENTICAL_GROUPS</source>
|
||||
@ -5635,6 +5687,10 @@ Choisissez un groupe et essayez de nouveau</translation>
|
||||
<source>KEEP_NODES</source>
|
||||
<translation>Les nœuds à conserver pendant la fusion</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KEEP_ELEMENTS</source>
|
||||
<translation>Elements à conserver pendant la fusion</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GROUP_SUBMESH</source>
|
||||
<translation>Groupes et sous-maillages</translation>
|
||||
@ -5654,18 +5710,6 @@ Choisissez un groupe et essayez de nouveau</translation>
|
||||
<source>CANT_GET_TANGENT</source>
|
||||
<translation>Impossible d'obtenir la tangente pour un des nœuds du chemin</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EXTRUSION_0D</source>
|
||||
<translation>Extrusion des éléments 0D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EXTRUSION_1D</source>
|
||||
<translation>Extrusion des éléments 1D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EXTRUSION_2D</source>
|
||||
<translation>Extrusion des éléments 2D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EXTRUSION_ALONG_PATH</source>
|
||||
<translation>Extrusion suivant un chemin</translation>
|
||||
@ -5694,6 +5738,14 @@ Choisissez un groupe et essayez de nouveau</translation>
|
||||
<source>SMESH_BASE_POINT</source>
|
||||
<translation>Point de base</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_SCALES</source>
|
||||
<translation>Facteurs d'échelle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>LINEAR_SCALES</source>
|
||||
<translation>Variation linéaires des facteurs d'échelle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_PATH</source>
|
||||
<translation>Chemin</translation>
|
||||
@ -5725,18 +5777,6 @@ Choisissez un groupe et essayez de nouveau</translation>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_ExtrusionDlg</name>
|
||||
<message>
|
||||
<source>EXTRUSION_0D</source>
|
||||
<translation>Extrusion de nœuds</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EXTRUSION_1D</source>
|
||||
<translation>Extrusion des éléments 1D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EXTRUSION_2D</source>
|
||||
<translation>Extrusion des éléments 2D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EXTRUSION_ALONG_LINE</source>
|
||||
<translation>Extrusion suivant une ligne</translation>
|
||||
@ -5761,6 +5801,14 @@ Choisissez un groupe et essayez de nouveau</translation>
|
||||
<source>BASE_POINT</source>
|
||||
<translation>Point de base</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>LINEAR_ANGLES</source>
|
||||
<translation>Variation linéaire des angles</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMESH_ANGLES</source>
|
||||
<translation>Angles de rotation</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_FilterDlg</name>
|
||||
@ -6142,6 +6190,10 @@ Entrez une valeur correcte et essayez de nouveau</translation>
|
||||
<source>LENGTH2D</source>
|
||||
<translation>Longueur 2D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>LENGTH3D</source>
|
||||
<translation>Longueur 3D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>DEFLECTION2D</source>
|
||||
<translation>Deflection 2D</translation>
|
||||
@ -7826,6 +7878,10 @@ en raison de leurs types incompatibles:
|
||||
<source>COORDINATES</source>
|
||||
<translation>Coordonnées</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>NB_NODES</source>
|
||||
<translation>Nombre de nœuds</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CONNECTIVITY</source>
|
||||
<translation>Connectivité</translation>
|
||||
@ -8132,6 +8188,10 @@ en raison de leurs types incompatibles:
|
||||
<source>FILE_VERSION</source>
|
||||
<translation>Format du fichier</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>VERSION_UNKNOWN</source>
|
||||
<translation>Inconnu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STANDALONE_MESH</source>
|
||||
<translation>Autonome</translation>
|
||||
@ -8329,6 +8389,21 @@ en raison de leurs types incompatibles:
|
||||
<translation>Calculer</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_Angle</name>
|
||||
<message>
|
||||
<source>NODES_GROUP</source>
|
||||
<translation>Trois nœuds</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>RESULT</source>
|
||||
<translation>Angle en degrés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>COMPUTE</source>
|
||||
<translation>Calculer</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_CopyMeshDlg</name>
|
||||
<message>
|
||||
@ -8385,6 +8460,10 @@ with red in the Object Browser.</translation>
|
||||
<source>BASIC_PROPERTIES</source>
|
||||
<translation>Propriétés basiques</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ANGLE</source>
|
||||
<translation>Angle</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SMESHGUI_BoundingBox</name>
|
||||
@ -8521,7 +8600,7 @@ with red in the Object Browser.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>NODES</source>
|
||||
<translation>Noeuds</translation>
|
||||
<translation>Nœuds</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EDGES</source>
|
||||
|
@ -1212,6 +1212,9 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup
|
||||
if ( n->NbInverseElements() == 0 )
|
||||
_impl->GetMeshDS()->RemoveFreeNode( n, /*sm=*/0 );
|
||||
|
||||
_impl->GetMeshDS()->Modified();
|
||||
_impl->SetIsModified( true );
|
||||
|
||||
// Update Python script (theGroup must be alive for this)
|
||||
pyDump << SMESH::SMESH_Mesh_var(_this())
|
||||
<< ".RemoveGroupWithContents( " << theGroup << " )";
|
||||
|
@ -440,6 +440,18 @@ class Mesh_Algorithm:
|
||||
for i in reverseList:
|
||||
if isinstance( i, int ):
|
||||
s = geompy.GetSubShape(self.mesh.geom, [i])
|
||||
|
||||
#bos #20082 begin:
|
||||
if s is None and type(self.geom) != geomBuilder.GEOM._objref_GEOM_Object:
|
||||
# try to get the SHAPERSTUDY engine directly, as GetGen does not work because of
|
||||
# simplification of access in geomBuilder: omniORB.registerObjref
|
||||
from SHAPERSTUDY_utils import getEngine
|
||||
gen = getEngine()
|
||||
if gen:
|
||||
aShapeOp = gen.GetIShapesOperations()
|
||||
s = aShapeOp.GetSubShape(self.mesh.geom, i)
|
||||
#bos #20082 end
|
||||
|
||||
if s.GetShapeType() != geomBuilder.GEOM.EDGE:
|
||||
raise TypeError("Not EDGE index given")
|
||||
resList.append( i )
|
||||
|
@ -53,6 +53,14 @@ Les arêtes sélectionnées ne sont pas des sous-géométries de la pièce à ma
|
||||
<source>EXTMETH_FACE_OFFSET</source>
|
||||
<translation>Décalage de la face</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CREATE_GROUPS_FROM_LAYERS</source>
|
||||
<translation>Créer des groupes à partir des couches</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GROUP_NAME</source>
|
||||
<translation>Nom du groupe</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>@default</name>
|
||||
@ -536,6 +544,10 @@ Les arêtes sélectionnées ne sont pas des sous-géométries de la pièce à ma
|
||||
<source>ENF_NODES</source>
|
||||
<translation>Nœuds imposés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CORNERS</source>
|
||||
<translation>Sommets de coin</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>StdMeshersGUI_LayerDistributionParamWdg</name>
|
||||
@ -562,6 +574,18 @@ Les arêtes sélectionnées ne sont pas des sous-géométries de la pièce à ma
|
||||
<source>ADD_EDGES</source>
|
||||
<translation>Ajouter des arêtes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CREATE_FACES</source>
|
||||
<translation>Créer des faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CONSIDER_INTERNAL_FACES</source>
|
||||
<translation>Considérer les faces partagées et internes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>USE_THRESHOLD_FOR_INTERNAL_FACES</source>
|
||||
<translation>Appliquer le seuil aux faces partagées/internes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>AXIS_X</source>
|
||||
<translation>Axe X</translation>
|
||||
|
Binary file not shown.
@ -6,25 +6,22 @@ MeshGems-Cleaner plugin documentation
|
||||
=====================================
|
||||
|
||||
This documentation covers the usage of MeshGems-Cleaner, also named MG-Cleaner or MGCleaner as plug-in in Salome that can be used within the Salome
|
||||
Mesh module for remeshing 2D Surface.
|
||||
Mesh module for remeshing 2D Surface.
|
||||
|
||||
MG-Cleaner plug-in uses Distene commercial software MeshGems-Cleaner, which is an **automatic surface remeshing tool**.
|
||||
This plug_in offers only the most common functionalities of the tool.
|
||||
|
||||
.. note::
|
||||
for a complete documentation, see :download:`MG-cleaner user manual <files/mg-cleaner_user_manual.pdf>`.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
|
||||
lct.rst
|
||||
Mandatory_params.rst
|
||||
Advanced_params.rst
|
||||
Generics_params.rst
|
||||
editHypo.rst
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -2,8 +2,7 @@ Advanced Remeshing Options
|
||||
==========================
|
||||
|
||||
.. note::
|
||||
Be aware that no control of coherency is done when you set these parameters : for instance, geometrical approximation is only allowed when SurfOpt computes a mesh for finite elements but the GUI will let you choose geometrical approximation and compute a visualisation mesh. See Distene's documentation for more details :
|
||||
:download:`MeshGems-SurfOpt: The automatic surface remeshing tool of the MeshGems Suite <files/mg-surfopt_user_manual.pdf>`.
|
||||
Be aware that no control of coherency is done when you set these parameters : for instance, geometrical approximation is only allowed when SurfOpt computes a mesh for finite elements but the GUI will let you choose geometrical approximation and compute a visualisation mesh. See Distene's documentation for more details.
|
||||
|
||||
|
||||
- **Ridge detection**
|
||||
@ -30,7 +29,7 @@ This parameter P enables the user to specify the maximal chordal deviation E re
|
||||
|
||||
- **Maximal/Minimal size around vertices**
|
||||
|
||||
These two parameters allow the user to prescribe a Maximal/Minimal size for the mesh elements, ie the lengths of the edges.
|
||||
These two parameters allow the user to prescribe a Maximal/Minimal size for the mesh elements, ie the lengths of the edges.
|
||||
|
||||
- **Mesh gradation**
|
||||
|
||||
|
Binary file not shown.
@ -6,25 +6,22 @@ MeshGems-SurfOpt plugin documentation
|
||||
=====================================
|
||||
|
||||
This documentation covers the usage of MeshGems-SurfOpt as plug-in in Salome that can be used within the Salome
|
||||
Mesh module for remeshing 2D Surface.
|
||||
Mesh module for remeshing 2D Surface.
|
||||
|
||||
MeshGems-SurfOpt plug-in uses Distene commercial software MeshGems-SurfOpt, which is an **automatic surface remeshing tool**.
|
||||
This plug-in offers only the most common functionalities of the tool.
|
||||
|
||||
.. note::
|
||||
for a complete documentation, see :download:`MeshGems-SurfOpt: The automatic surface remeshing tool of the MeshGems Suite <files/mg-surfopt_user_manual.pdf>`.
|
||||
|
||||
Contents:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
|
||||
lct.rst
|
||||
Mandatory_params.rst
|
||||
Advanced_params.rst
|
||||
Generics_params.rst
|
||||
editHypo.rst
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user