From 8abb552206770f6399d103b05fbb79ecc7c74802 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 4 Apr 2013 07:09:30 +0000 Subject: [PATCH] Merge from BR_plugins_pbyacs 03/04/2013 --- configure.ac | 1 + doc/salome/Makefile.am | 2 +- doc/salome/examples/Makefile.am | 31 ++++ doc/salome/examples/blsurfdemo.py | 146 +++++++++++++++++ doc/salome/gui/BLSURFPLUGIN/Makefile.am | 5 +- doc/salome/gui/BLSURFPLUGIN/doxyfile.in | 8 +- doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in | 6 +- .../input/blsurfplugin_python_interface.doc | 150 +----------------- resources/BLSURFPlugin.xml | 2 +- ...SURFPluginDC.py => BLSURFPluginBuilder.py} | 8 +- src/BLSURFPlugin/Makefile.am | 6 +- src/BLSURFPlugin/__init__.py | 22 +++ 12 files changed, 227 insertions(+), 160 deletions(-) create mode 100644 doc/salome/examples/Makefile.am create mode 100644 doc/salome/examples/blsurfdemo.py rename src/BLSURFPlugin/{BLSURFPluginDC.py => BLSURFPluginBuilder.py} (99%) create mode 100644 src/BLSURFPlugin/__init__.py diff --git a/configure.ac b/configure.ac index 79a5b34..361e52f 100644 --- a/configure.ac +++ b/configure.ac @@ -433,6 +433,7 @@ AC_OUTPUT([ \ adm_local/cmake_files/Makefile \ doc/Makefile \ doc/salome/Makefile \ + doc/salome/examples/Makefile \ doc/salome/gui/Makefile \ doc/salome/gui/BLSURFPLUGIN/Makefile \ doc/salome/gui/BLSURFPLUGIN/doxyfile \ diff --git a/doc/salome/Makefile.am b/doc/salome/Makefile.am index 319d245..6d93c6e 100644 --- a/doc/salome/Makefile.am +++ b/doc/salome/Makefile.am @@ -21,7 +21,7 @@ # Author : Patrick GOLDBRONN (CEA) # Date : 30/11/2001 # -SUBDIRS = tui gui +SUBDIRS = examples tui gui SUBDIRSTUI = tui SUBDIRSGUI = gui diff --git a/doc/salome/examples/Makefile.am b/doc/salome/examples/Makefile.am new file mode 100644 index 0000000..fc32167 --- /dev/null +++ b/doc/salome/examples/Makefile.am @@ -0,0 +1,31 @@ +# Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +# File : Makefile +# Author : Alexander KOVALEV (Open Cascade NN) +# Modified by : +# Module : doc +# +include $(top_srcdir)/adm_local/unix/make_common_starter.am + +pyexamplesdir = $(docdir)/examples/BLSURFPLUGIN + +pyexamples_SCRIPTS = blsurfdemo.py + +EXTRA_DIST += $(pyexamples_SCRIPTS) diff --git a/doc/salome/examples/blsurfdemo.py b/doc/salome/examples/blsurfdemo.py new file mode 100644 index 0000000..1a2203f --- /dev/null +++ b/doc/salome/examples/blsurfdemo.py @@ -0,0 +1,146 @@ +# ------------------------------------------------- +# blsurf_construct_mesh_basic_hypo Basic hypothesis +# ------------------------------------------------- + +import salome +salome.salome_init() +import GEOM +from salome.geom import geomBuilder +geompy = geomBuilder.New(salome.myStudy) + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder +smesh = smeshBuilder.New(salome.myStudy) + +# create a box +box = geompy.MakeBoxDXDYDZ(200., 200., 200.) +geompy.addToStudy(box, "box") + +# get sub-shapes +Face_1 = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])[0] +Edge_1 = geompy.SubShapeAllSorted(box, geompy.ShapeType["EDGE"])[0] +Vertex_1 = geompy.SubShapeAllSorted(box, geompy.ShapeType["VERTEX"])[0] + +Face_2 = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])[5] +Wire_1 = geompy.SubShapeAllSorted(Face_2, geompy.ShapeType["WIRE"])[0] + +# Geom object with sizemaps can be unpublished in study. +# They will then be automatically published. +geompy.addToStudyInFather(box,Face_1, "Face_1") +geompy.addToStudyInFather(box,Edge_1, "Edge_1") +geompy.addToStudyInFather(box,Vertex_1, "Vertex_1") + +geompy.addToStudyInFather(box ,Face_2, "Face_2") +geompy.addToStudyInFather(Face_2,Wire_1, "Wire_1") + +# create a mesh on the box +blsurfMesh = smesh.Mesh(box,"box: BLSurf mesh") + +# create a BLSurf algorithm for faces +algo2d = blsurfMesh.Triangle(algo=smeshBuilder.BLSURF) + +# ---------------------------------------------- +# blsurf_construct_mesh_sizemaps Adding sizemaps +# ---------------------------------------------- + +# optional - set physical mesh to 2 = Size Map +algo2d.SetPhysicalMesh( 2 ) + +# optional - set global mesh size +algo2d.SetPhySize( 34.641 ) + +# set size on Face_1 +algo2d.SetSizeMap(Face_1, 'def f(u,v): return 10' ) +# set size on Edge_1 +algo2d.SetSizeMap(Edge_1, 'def f(t): return 5' ) +# set size on Vertex_1 +algo2d.SetSizeMap(Vertex_1, 'def f(): return 2' ) + +# compute the mesh +blsurfMesh.Compute() + +# ---------------------------------------------------------------- +# blsurf_construct_mesh_enforced_vertices Adding enforced vertices +# ---------------------------------------------------------------- + +# Add enforced vertex for Face_1 on (50, 50, 50) +# The projection coordinates will be (50, 50, 0) +algo2d.SetEnforcedVertex(Face_1, 50, 50, 50) + +# Add another enforced vertex on (150, 150, 150) +algo2d.SetEnforcedVertex(Face_1, 150, 150, 150) + +# Retrieve and print the list of enforced vertices defines on Face_1 +enfList = algo2d.GetEnforcedVertices(Face_1) +print "List of enforced vertices for Face_1: " +print enfList + +# compute the mesh +blsurfMesh.Compute() + +# Remove an enforced vertex and print the list +algo2d.UnsetEnforcedVertex(Face_1, 50, 50, 50) +enfList = algo2d.GetEnforcedVertices(Face_1) +print "List of enforced vertices for Face_1: " +print enfList + +# compute the mesh +blsurfMesh.Compute() + +# Remove all enforced vertices defined on Face_1 +algo2d.UnsetEnforcedVertices(Face_1) + +# compute the mesh +blsurfMesh.Compute() + +# --------------------------------------------------- +# blsurf_construct_mesh_attractor Adding an attractor +# --------------------------------------------------- + +# Add an attractor on Face_2, which shape is Wire_1 + +# The size on Wire_1 is 1 and will grow until a maximum of 36.641 (physical size set above) +# The influence distance of the attractor is 20 +# The size is kept constant until a distance of 10 +algo2d.SetAttractorGeom(Face_2, Wire_1, 1, 36.641, 20, 10) + +# In order to let the attractor control the growing of the mesh let set +# the gradation to its maximum +algo2d.SetGradation( 2.5 ) + +# compute the mesh +blsurfMesh.Compute() + +# --------------------------------------------------------------- +# blsurf_construct_mesh_internal_vertices Using internal vertices +# --------------------------------------------------------------- + +# Creating a geometry containing internal vertices +Face_3 = geompy.MakeFaceHW(1, 1, 1) +Vertex_2 = geompy.MakeVertex(0.2, 0.2, 0) +Partition_1 = geompy.MakePartition([Face_3, Vertex_2], [], [], [], geompy.ShapeType["FACE"], 0, [], 0) +OX = geompy.MakeVectorDXDYDZ(1, 0, 0) +OY = geompy.MakeVectorDXDYDZ(0, 1, 0) +Multi_Translation_1 = geompy.MakeMultiTranslation2D(Partition_1, OX, 1, 10, OY, 1, 10) +geompy.addToStudy( Face_3, 'Face_3' ) +geompy.addToStudy( Vertex_2, 'Vertex_2' ) +geompy.addToStudy( Partition_1, 'Partition_1' ) +geompy.addToStudy( OX, 'OX' ) +geompy.addToStudy( OY, 'OY' ) +geompy.addToStudy( Multi_Translation_1, 'Multi-Translation_1' ) + +# The mesh on the geometry with internal vertices +blsurfMesh_internal = smesh.Mesh(Multi_Translation_1, "blsurfMesh_internal") +algo2d = blsurfMesh_internal.Triangle(algo=smeshBuilder.BLSURF) +algo2d.SetPhySize( 0.1 ) + +# Allows BLSURF to take into account internal vertices +algo2d.SetInternalEnforcedVertexAllFaces( True ) + +# Add the created nodes into a group +algo2d.SetInternalEnforcedVertexAllFacesGroup( "my group" ) + +# compute the mesh +blsurfMesh_internal.Compute() + +# End of script diff --git a/doc/salome/gui/BLSURFPLUGIN/Makefile.am b/doc/salome/gui/BLSURFPLUGIN/Makefile.am index 2bb9e46..f0cb7ec 100644 --- a/doc/salome/gui/BLSURFPLUGIN/Makefile.am +++ b/doc/salome/gui/BLSURFPLUGIN/Makefile.am @@ -32,10 +32,7 @@ DOC_PYTHONPATH=$(prefix)/bin/salome:$(SMESH_ROOT_DIR)/bin/salome:$(SMESH_ROOT_DI DOC_LD_LIBRARY_PATH=$(prefix)/lib/salome:${SMESH_ROOT_DIR}/lib/salome:${MED_ROOT_DIR}/lib/salome:${GEOM_ROOT_DIR}/lib/salome:${KERNEL_ROOT_DIR}/lib/salome DOC_SMESH_MeshersList=BLSURFPlugin -smesh.py: $(top_srcdir)/src/BLSURFPlugin/BLSURFPluginDC.py - @PYTHONPATH=$(DOC_PYTHONPATH):${PYTHONPATH} LD_LIBRARY_PATH=$(DOC_LD_LIBRARY_PATH):${LD_LIBRARY_PATH} SMESH_MeshersList=$(DOC_SMESH_MeshersList) $(PYTHON) $(SMESH_ROOT_DIR)/bin/salome/collect_mesh_methods.py -d -o $@ BLSURFPlugin - -usr_docs: doxyfile_py doxyfile smesh.py +usr_docs: doxyfile_py doxyfile @$(DOXYGEN) doxyfile_py ; \ $(DOXYGEN) doxyfile diff --git a/doc/salome/gui/BLSURFPLUGIN/doxyfile.in b/doc/salome/gui/BLSURFPLUGIN/doxyfile.in index 039b1c3..5aa7a7a 100755 --- a/doc/salome/gui/BLSURFPLUGIN/doxyfile.in +++ b/doc/salome/gui/BLSURFPLUGIN/doxyfile.in @@ -38,6 +38,7 @@ WARNINGS = YES INPUT = @srcdir@/input FILE_PATTERNS = *.doc IMAGE_PATH = @srcdir@/images +EXAMPLE_PATH = @top_srcdir@/doc/salome/examples #--------------------------------------------------------------------------- #HTML related options @@ -69,4 +70,9 @@ GENERATE_RTF = NO #rnv: 07.04.2011 Workaround for the doxygen 1.7.3: #because it wrongly defines location of the html files for search. TAGFILES = blsurfpluginpy_doc.tag=../BLSURFPLUGIN/blsurfpluginpy_doc -SEARCHENGINE = YES \ No newline at end of file +SEARCHENGINE = YES + +#--------------------------------------------------------------------------- +#Custom commands +#--------------------------------------------------------------------------- +ALIASES += tui_script{1}="\include \1 Download this script" diff --git a/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in b/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in index 097ce1e..4dad659 100755 --- a/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in +++ b/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in @@ -96,9 +96,9 @@ EXAMPLE_RECURSIVE = NO #--------------------------------------------------------------------------- #Input related options #--------------------------------------------------------------------------- -INPUT = @top_srcdir@/src/BLSURFPlugin/BLSURFPluginDC.py \ - smesh.py \ - @SMESH_ROOT_DIR@/bin/salome/smesh_algorithm.py +INPUT = @top_srcdir@/src/BLSURFPlugin/BLSURFPluginBuilder.py \ + @SMESH_ROOT_DIR@/lib/python@PYTHON_VERSION@/site-packages/salome/salome/smesh/smeshBuilder.py \ + @SMESH_ROOT_DIR@/lib/python@PYTHON_VERSION@/site-packages/salome/salome/smesh/smesh_algorithm.py FILE_PATTERNS = IMAGE_PATH = @srcdir@/images RECURSIVE = NO diff --git a/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc b/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc index 2e883ab..3ee0b8f 100644 --- a/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc +++ b/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc @@ -2,9 +2,9 @@ \page blsurfplugin_python_interface_page Python Interface -Python package BLSURFPluginDC defines several classes, destined for creation of the 2D meshes. +Python package BLSURFPlugin defines several classes, destined for creation of the 2D meshes. -BLSURF meshing plugin dynamically adds several methods to the smesh.Mesh class to create meshing algorithms. +BLSURF meshing plugin dynamically adds several methods to the \ref SMESH_SWIG.smeshBuilder.Mesh "class Mesh" to create meshing algorithms. Below you can see an example of usage of the BLSURFPlugin Python API for mesh generation: @@ -12,148 +12,8 @@ Below you can see an example of usage of the BLSURFPlugin Python API for mesh ge \section blsurf_construct_mesh Construction of Mesh using BLSurf algorithm -\subsection blsurf_construct_mesh_basic_hypo Basic hypothesis -\code -import geompy -import smesh -import BLSURFPlugin - -# create a box -box = geompy.MakeBoxDXDYDZ(200., 200., 200.) -geompy.addToStudy(box, "box") - -# get sub-shapes -Face_1 = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])[0] -Edge_1 = geompy.SubShapeAllSorted(box, geompy.ShapeType["EDGE"])[0] -Vertex_1 = geompy.SubShapeAllSorted(box, geompy.ShapeType["VERTEX"])[0] - -Face_2 = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])[5] -Wire_1 = geompy.SubShapeAllSorted(Face_2, geompy.ShapeType["WIRE"])[0] - -# Geom object with sizemaps can be unpublished in study. -# They will then be automatically published. -geompy.addToStudyInFather(box,Face_1, "Face_1") -geompy.addToStudyInFather(box,Edge_1, "Edge_1") -geompy.addToStudyInFather(box,Vertex_1, "Vertex_1") - -geompy.addToStudyInFather(box ,Face_2, "Face_2") -geompy.addToStudyInFather(Face_2,Wire_1, "Wire_1") - -# create a mesh on the box -blsurfMesh = smesh.Mesh(box,"box: BLSurf mesh") - -# create a BLSurf algorithm for faces -algo2d = blsurfMesh.Triangle(algo=smesh.BLSURF) - -# End of script -\endcode - -\subsection blsurf_construct_mesh_sizemaps Adding sizemaps -\code -# optional - set physical mesh to 2 = Size Map -algo2d.SetPhysicalMesh( 2 ) - -# optional - set global mesh size -algo2d.SetPhySize( 34.641 ) - -# set size on Face_1 -algo2d.SetSizeMap(Face_1, 'def f(u,v): return 10' ) -# set size on Edge_1 -algo2d.SetSizeMap(Edge_1, 'def f(t): return 5' ) -# set size on Vertex_1 -algo2d.SetSizeMap(Vertex_1, 'def f(): return 2' ) - -# compute the mesh -blsurfMesh.Compute() - -# End of script -\endcode - -\subsection blsurf_construct_mesh_enforced_vertices Adding enforced vertices -\code -# Add enforced vertex for Face_1 on (50, 50, 50) -# The projection coordinates will be (50, 50, 0) -algo2d.SetEnforcedVertex(Face_1, 50, 50, 50) - -# Add another enforced vertex on (150, 150, 150) -algo2d.SetEnforcedVertex(Face_1, 150, 150, 150) - -# Retrieve and print the list of enforced vertices defines on Face_1 -enfList = algo2d.GetEnforcedVertices(Face_1) -print "List of enforced vertices for Face_1: " -print enfList - -# compute the mesh -blsurfMesh.Compute() - -# Remove an enforced vertex and print the list -algo2d.UnsetEnforcedVertex(Face_1, 50, 50, 50) -enfList = algo2d.GetEnforcedVertices(Face_1) -print "List of enforced vertices for Face_1: " -print enfList - -# compute the mesh -blsurfMesh.Compute() - -# Remove all enforced vertices defined on Face_1 -algo2d.UnsetEnforcedVertices(Face_1) - -# compute the mesh -blsurfMesh.Compute() - -# End of script -\endcode - -\subsection blsurf_construct_mesh_attractor Adding an attractor -\code -# Add an attractor on Face_2, which shape is Wire_1 - -# The size on Wire_1 is 1 and will grow until a maximum of 36.641 (physical size set above) -# The influence distance of the attractor is 20 -# The size is kept constant until a distance of 10 -algo2d.SetAttractorGeom(Face_2, Wire_1, 1, 36.641, 20, 10) - -# In order to let the attractor control the growing of the mesh let set -# the gradation to its maximum -algo2d.SetGradation( 2.5 ) - -# compute the mesh -blsurfMesh.Compute() - -# End of script -\endcode - -\subsection blsurf_construct_mesh_internal_vertices Using internal vertices -\code -# Creating a geometry containing internal vertices -Face_3 = geompy.MakeFaceHW(1, 1, 1) -Vertex_2 = geompy.MakeVertex(0.2, 0.2, 0) -Partition_1 = geompy.MakePartition([Face_3, Vertex_2], [], [], [], geompy.ShapeType["FACE"], 0, [], 0) -OX = geompy.MakeVectorDXDYDZ(1, 0, 0) -OY = geompy.MakeVectorDXDYDZ(0, 1, 0) -Multi_Translation_1 = geompy.MakeMultiTranslation2D(Partition_1, OX, 1, 10, OY, 1, 10) -geompy.addToStudy( Face_3, 'Face_3' ) -geompy.addToStudy( Vertex_2, 'Vertex_2' ) -geompy.addToStudy( Partition_1, 'Partition_1' ) -geompy.addToStudy( OX, 'OX' ) -geompy.addToStudy( OY, 'OY' ) -geompy.addToStudy( Multi_Translation_1, 'Multi-Translation_1' ) - -# The mesh on the geometry with internal vertices -blsurfMesh_internal = smesh.Mesh(Multi_Translation_1, "blsurfMesh_internal") -algo2d = blsurfMesh_internal.Triangle(algo=smesh.BLSURF) -algo2d.SetPhySize( 0.1 ) - -# Allows BLSURF to take into account internal vertices -algo2d.SetInternalEnforcedVertexAllFaces( True ) - -# Add the created nodes into a group -algo2d.SetInternalEnforcedVertexAllFacesGroup( "my group" ) - -# compute the mesh -blsurfMesh_internal.Compute() - -# End of script -\endcode +\anchor example_BLSURFPlugin +

Example of mesh generation with BLSurf algorithm:

+\tui_script{blsurfdemo.py} */ diff --git a/resources/BLSURFPlugin.xml b/resources/BLSURFPlugin.xml index ec9402d..d627730 100644 --- a/resources/BLSURFPlugin.xml +++ b/resources/BLSURFPlugin.xml @@ -71,7 +71,7 @@ dim="2" support-submeshes="true"> - BLSURF=Triangle(algo=smesh.BLSURF) + BLSURF=Triangle(algo=smeshBuilder.BLSURF) BLSURF_Parameters=Parameters() ViscousLayers2D=ViscousLayers2D(SetTotalThickness(),SetNumberLayers(),SetStretchFactor(),SetIgnoreEdges()) diff --git a/src/BLSURFPlugin/BLSURFPluginDC.py b/src/BLSURFPlugin/BLSURFPluginBuilder.py similarity index 99% rename from src/BLSURFPlugin/BLSURFPluginDC.py rename to src/BLSURFPlugin/BLSURFPluginBuilder.py index 0ae068d..4c2316e 100644 --- a/src/BLSURFPlugin/BLSURFPluginDC.py +++ b/src/BLSURFPlugin/BLSURFPluginBuilder.py @@ -18,11 +18,11 @@ # ## -# @package BLSURFPluginDC +# @package BLSURFPluginBuilder # Python API for the BLSURF meshing plug-in module. -from smesh_algorithm import Mesh_Algorithm -from smesh import AssureGeomPublished +from salome.smesh.smesh_algorithm import Mesh_Algorithm +from salome.smesh.smeshBuilder import AssureGeomPublished # Topology treatment way of BLSURF FromCAD, PreProcess, PreProcessPlus, PreCAD = 0,1,2,3 @@ -486,4 +486,4 @@ class BLSURF_Algorithm(Mesh_Algorithm): pass - pass # end of BLSURF_Algorithm class \ No newline at end of file + pass # end of BLSURF_Algorithm class diff --git a/src/BLSURFPlugin/Makefile.am b/src/BLSURFPlugin/Makefile.am index efa0fc4..1b920a6 100644 --- a/src/BLSURFPlugin/Makefile.am +++ b/src/BLSURFPlugin/Makefile.am @@ -73,4 +73,8 @@ libBLSURFEngine_la_LDFLAGS = \ $(BOOST_LIB_REGEX) # Scripts to be installed. -dist_salomescript_DATA= BLSURFPluginDC.py +#dist_salomescript_DATA= BLSURFPluginDC.py +mypkgpythondir = $(salomepythondir)/salome/BLSURFPlugin +mypkgpython_PYTHON = \ + __init__.py \ + BLSURFPluginBuilder.py diff --git a/src/BLSURFPlugin/__init__.py b/src/BLSURFPlugin/__init__.py new file mode 100644 index 0000000..2c6cf4f --- /dev/null +++ b/src/BLSURFPlugin/__init__.py @@ -0,0 +1,22 @@ +# Copyright (C) 2007-2013 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +## +# @package BLSURFPluginBuilder +# Python API for the BLSURF meshing plug-in module. -- 2.39.2