From e0454dbc54cdd9192c2b8ccdf772af419a47e851 Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 18 Dec 2013 16:18:55 +0000 Subject: [PATCH] Merge from V7_3_BR branch 18/12/2013 --- CMakeLists.txt | 2 +- HEXABLOCK_version.h.in | 21 ++- bin/runAppli.in | 4 +- doc/_static/gui_addshape.png | Bin 0 -> 30457 bytes doc/conf.py.in | 5 + doc/gui_add_geometry.rst | 29 ++++ doc/interactive.rst | 1 + doc/python.rst | 1 + doc/tui_add_geometry.rst | 22 +++ src/HEXABLOCK/CMakeLists.txt | 2 + src/HEXABLOCKGUI/HEXABLOCKGUI.cxx | 4 + src/HEXABLOCKGUI/MyDlgRef/CMakeLists.txt | 47 ------ src/HEXABLOCKGUI/MyDlgRef/MyDlgRef.hxx | 2 +- src/HEXABLOCKGUI/resources/SalomeApp.xml.in | 6 +- src/TEST_PY/cas_2013/cas_2013.py | 167 ++++++++++++++++++++ 15 files changed, 256 insertions(+), 57 deletions(-) create mode 100644 doc/_static/gui_addshape.png create mode 100644 doc/gui_add_geometry.rst create mode 100644 doc/tui_add_geometry.rst create mode 100755 src/TEST_PY/cas_2013/cas_2013.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 966facd..b3e2c68 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ CMAKE_POLICY(SET CMP0003 NEW) STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC) SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7) -SET(${PROJECT_NAME_UC}_MINOR_VERSION 2) +SET(${PROJECT_NAME_UC}_MINOR_VERSION 3) SET(${PROJECT_NAME_UC}_PATCH_VERSION 0) SET(${PROJECT_NAME_UC}_VERSION ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION}) diff --git a/HEXABLOCK_version.h.in b/HEXABLOCK_version.h.in index b2dc846..d448bd6 100755 --- a/HEXABLOCK_version.h.in +++ b/HEXABLOCK_version.h.in @@ -24,8 +24,23 @@ HEXABLOCK_VERSION is (major << 16) + (minor << 8) + patch. */ -#define HEXABLOCK_VERSION_STR "@VERSION@" -#define HEXABLOCK_VERSION @XVERSION@ -#define HEXABLOCK_DEVELOPMENT @VERSION_DEV@ + +/*! + Specify version of SALOME HEXABLOCK module, as follows + +HEXABLOCK_VERSION_MAJOR : (integer) number identifying major version +HEXABLOCK_VERSION_MINOR : (integer) number identifying minor version +HEXABLOCK_VERSION_MAINTENANCE : (integer) number identifying maintenance version +HEXABLOCK_VERSION_STR : (string) complete version number "major.minor.maintenance" +HEXABLOCK_VERSION : (hex) complete version number (major << 16) + (minor << 8) + maintenance +HEXABLOCK_DEVELOPMENT : (integer) indicates development version when set to 1 + */ + +#define HEXABLOCK_VERSION_MAJOR @SALOMEHEXABLOCK_MAJOR_VERSION@ +#define HEXABLOCK_VERSION_MINOR @SALOMEHEXABLOCK_MINOR_VERSION@ +#define HEXABLOCK_VERSION_MAINTENANCE @SALOMEHEXABLOCK_PATCH_VERSION@ +#define HEXABLOCK_VERSION_STR "@SALOMEHEXABLOCK_VERSION@" +#define HEXABLOCK_VERSION @SALOMEHEXABLOCK_XVERSION@ +#define HEXABLOCK_DEVELOPMENT @SALOMEHEXABLOCK_VERSION_DEV@ #endif // __HEXABLOCK_VERSION_H__ diff --git a/bin/runAppli.in b/bin/runAppli.in index 08cfde0..559d021 100755 --- a/bin/runAppli.in +++ b/bin/runAppli.in @@ -21,8 +21,8 @@ if [ -z "${KERNEL_ROOT_DIR}" ] ; then export KERNEL_ROOT_DIR=@KERNEL_ROOT_DIR@ fi -if [ -z "${HEXA_ROOT_DIR}" ] ; then -export HEXA_ROOT_DIR=@prefix@ +if [ -z "${HEXABLOCK_ROOT_DIR}" ] ; then +export HEXABLOCK_ROOT_DIR=@CMAKE_INSTALL_PREFIX@ fi searchFreePort() { diff --git a/doc/_static/gui_addshape.png b/doc/_static/gui_addshape.png new file mode 100644 index 0000000000000000000000000000000000000000..a093009fab03d9b4b7d06aef60acda12533fdcf4 GIT binary patch literal 30457 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 YVHU$*wPOIjycPn#ZlqJ9_2Bvc0Scy~&Hw-a literal 0 HcmV?d00001 diff --git a/doc/conf.py.in b/doc/conf.py.in index ef8a962..c5f403f 100644 --- a/doc/conf.py.in +++ b/doc/conf.py.in @@ -77,6 +77,11 @@ release = '@SALOMEHEXABLOCK_VERSION@' # for source files. exclude_trees = [] +# A list of glob-style patterns that should be excluded when looking for source +# files. They are matched against the source file names relative to the +# source directory, using slashes as directory separators on all platforms. +exclude_patterns = ['**/CVS'] + # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None diff --git a/doc/gui_add_geometry.rst b/doc/gui_add_geometry.rst new file mode 100644 index 0000000..9b0343a --- /dev/null +++ b/doc/gui_add_geometry.rst @@ -0,0 +1,29 @@ +:tocdepth: 3 + +.. _guiaddgeometry: + +============================ +Add a geometry to a document +============================ + +Only geometries added to a document can be used by that document. +Vertices, Edges and Quadrangles of the model of blocks of a document can only be associated to those of a geometry that +has already been added to that document. + +To add a geometry to a document: + +- *1-* Import the geometry (.brep, .step, ...) in the GEOM Module +- *2-* Activate HexaBlock +- *3-* Open your document or create a new one +- *4-* In the **Main Menu** select **Association -> Add geometry** +- *5-* Select the imported geometry and click the **Apply** button of the **Add geometry** Dialog Box + + + .. image:: _static/gui_addshape.png + :align: center + +.. centered:: + Adding geometry to a document + + +TUI command: :ref:`tuiaddgeometry` \ No newline at end of file diff --git a/doc/interactive.rst b/doc/interactive.rst index 2b507e5..2bf64fa 100644 --- a/doc/interactive.rst +++ b/doc/interactive.rst @@ -65,6 +65,7 @@ It provides the toolset allowing to: gui_modify_elmts.rst gui_modify_symmetry.rst gui_association.rst + gui_add_geometry.rst gui_asso_quad_to_geom.rst gui_asso_vertex_to_geom.rst gui_groups.rst diff --git a/doc/python.rst b/doc/python.rst index dbc72ed..762cf5b 100644 --- a/doc/python.rst +++ b/doc/python.rst @@ -32,6 +32,7 @@ By the links below you can find sample scripts for all operations provided by He tui_modify_elmts.rst tui_quad_revolution.rst tui_association.rst + tui_add_geometry.rst tui_asso_quad_to_geom.rst tui_asso_vertex_to_geom.rst tui_groups.rst diff --git a/doc/tui_add_geometry.rst b/doc/tui_add_geometry.rst new file mode 100644 index 0000000..6e7ba0e --- /dev/null +++ b/doc/tui_add_geometry.rst @@ -0,0 +1,22 @@ +:tocdepth: 3 + + +.. _tuiaddgeometry: + +============================ +Add a geometry to a document +============================ + +To add a geometry to a document in python mode, you need the following arguments: + +- *doc* : the document +- *geom* : the geometry +- *shape_name* : the name of the geometry + +Use the function **addShape**:: + + doc = hexablock.addDocument (doc_name) + geom = geompy.ImportBREP (shape_name + ".brep") + shape = hexablock.addShape (doc, geom , shape_name) + +GUI command: :ref:`guiaddgeometry` diff --git a/src/HEXABLOCK/CMakeLists.txt b/src/HEXABLOCK/CMakeLists.txt index 602cd3d..88fd8f7 100644 --- a/src/HEXABLOCK/CMakeLists.txt +++ b/src/HEXABLOCK/CMakeLists.txt @@ -69,6 +69,7 @@ SET(HEXABLOCKEngine_HEADERS HexHexa.hxx HexMatrix.hxx HexQuad.hxx + HexQpattern.hxx HexVertex.hxx HexLaw.hxx HexCloner.hxx @@ -105,6 +106,7 @@ SET(HEXABLOCKEngine_SOURCES HexVertex.cxx HexEdge.cxx HexQuad.cxx + HexQpattern.cxx HexHexa.cxx HexHexa_disco.cxx HexVector.cxx diff --git a/src/HEXABLOCKGUI/HEXABLOCKGUI.cxx b/src/HEXABLOCKGUI/HEXABLOCKGUI.cxx index c243f38..63ebc65 100755 --- a/src/HEXABLOCKGUI/HEXABLOCKGUI.cxx +++ b/src/HEXABLOCKGUI/HEXABLOCKGUI.cxx @@ -941,6 +941,7 @@ void HEXABLOCKGUI::createAndFillDockWidget() _dwInputPanel = new QDockWidget(aParent); _dwInputPanel->setVisible(false); _dwInputPanel->setWindowTitle("Input Panel"); + _dwInputPanel->setObjectName("InputPanelDockWidget"); // _dwInputPanel->setMinimumWidth(DWINPUT_MINIMUM_WIDTH); // --- force a minimum until display // _treeViewDelegate = new DocumentDelegate(_dwInputPanel); @@ -951,6 +952,7 @@ void HEXABLOCKGUI::createAndFillDockWidget() _dwPattern->setVisible(false); _dwPattern->setWindowTitle("Model"); _dwPattern->setMinimumWidth(DW_MINIMUM_WIDTH); // --- force a minimum until display + _dwPattern->setObjectName("ModelDockWidget"); QFrame* patternFrame = new QFrame(_dwPattern); patternFrame->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); @@ -985,6 +987,7 @@ void HEXABLOCKGUI::createAndFillDockWidget() _dwGroups->setVisible(false); _dwGroups->setWindowTitle("Groups"); _dwGroups->setMinimumWidth(DW_MINIMUM_WIDTH); // --- force a minimum until display + _dwGroups->setObjectName("GroupsDockWidget"); _groupsTreeView = new QTreeView(_dwGroups); _groupsTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); // _groupsTreeView->setItemDelegate(_treeViewDelegate); @@ -996,6 +999,7 @@ void HEXABLOCKGUI::createAndFillDockWidget() _dwMesh->setVisible(false); _dwMesh->setWindowTitle("Mesh"); _dwMesh->setMinimumWidth(DW_MINIMUM_WIDTH); // --- force a minimum until display + _dwMesh->setObjectName("MeshDockWidget"); _meshTreeView = new QTreeView(_dwMesh); _meshTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers); _meshTreeView->setSelectionMode(QAbstractItemView::SingleSelection); diff --git a/src/HEXABLOCKGUI/MyDlgRef/CMakeLists.txt b/src/HEXABLOCKGUI/MyDlgRef/CMakeLists.txt index d3fa128..3708385 100644 --- a/src/HEXABLOCKGUI/MyDlgRef/CMakeLists.txt +++ b/src/HEXABLOCKGUI/MyDlgRef/CMakeLists.txt @@ -51,58 +51,11 @@ SET(_other_SOURCES # uic files / to be processed by pyuic SET(_pyuic_files - DlgRef_1List1Spin1Btn_QTD.ui - DlgRef_1Sel1Check1List_QTD.ui - DlgRef_1Sel1Check1Sel_QTD.ui - DlgRef_1Sel1Check_QTD.ui - DlgRef_1Sel1List1Check3Btn_QTD.ui - DlgRef_1Sel1Spin1Check_QTD.ui - DlgRef_1Sel1Spin_QTD.ui - DlgRef_1Sel2Spin1View1Check_QTD.ui DlgRef_1Sel2Spin_QTD.ui - DlgRef_1Sel3Check_QTD.ui DlgRef_1Sel3Spin_QTD.ui - DlgRef_1Sel3Spin1Check_QTD.ui - DlgRef_1Sel4Spin2Check_QTD.ui - DlgRef_1Sel4Spin_QTD.ui - DlgRef_1Sel5Spin1Check_QTD.ui - DlgRef_1Sel5Spin_QTD.ui - DlgRef_1Sel_QTD.ui - DlgRef_1SelExt_QTD.ui - DlgRef_1Spin_QTD.ui - DlgRef_2Sel1List1Check_QTD.ui - DlgRef_2Sel1List2Check_QTD.ui - DlgRef_2Sel1List_QTD.ui - DlgRef_2Sel1Spin2Check_QTD.ui DlgRef_2Sel1Spin_QTD.ui - DlgRef_2Sel1SpinInt_QTD.ui - DlgRef_2Sel2List_QTD.ui - DlgRef_2Sel2Spin1Check_QTD.ui - DlgRef_2Sel2Spin3Check_QTD.ui - DlgRef_2Sel2Spin_QTD.ui - DlgRef_2Sel3Spin2Rb_QTD.ui - DlgRef_2Sel3Spin_QTD.ui - DlgRef_2Sel4Spin1Check_QTD.ui DlgRef_2Sel_QTD.ui - DlgRef_2SelExt_QTD.ui - DlgRef_2Spin_QTD.ui - DlgRef_3Check_QTD.ui - DlgRef_3Radio_QTD.ui - DlgRef_3Radio1Sel1Spin_QTD.ui - DlgRef_3Sel1Check_QTD.ui - DlgRef_3Sel1Spin_QTD.ui - DlgRef_3Sel2Spin_QTD.ui - DlgRef_3Sel3Spin1Check_QTD.ui - DlgRef_3Sel3Spin2Check_QTD.ui - DlgRef_3Sel4Spin2Check_QTD.ui - DlgRef_3Sel_QTD.ui - DlgRef_3Spin1Check_QTD.ui DlgRef_3Spin_QTD.ui - DlgRef_4Sel1List1Check_QTD.ui - DlgRef_4Sel1List_QTD.ui - DlgRef_4Sel1Spin2Check_QTD.ui - DlgRef_4Sel1Spin3Check_QTD.ui - DlgRef_6Sel_QTD.ui DlgRef_Skeleton_QTD.ui ) diff --git a/src/HEXABLOCKGUI/MyDlgRef/MyDlgRef.hxx b/src/HEXABLOCKGUI/MyDlgRef/MyDlgRef.hxx index 2b28da7..4497749 100644 --- a/src/HEXABLOCKGUI/MyDlgRef/MyDlgRef.hxx +++ b/src/HEXABLOCKGUI/MyDlgRef/MyDlgRef.hxx @@ -22,7 +22,7 @@ #define MYGEOM_MYDLGREF_HXX #if defined WIN32 -# if defined MYDLGREF_EXPORTS || defined MYDlgRef_EXPORTS +# if defined MYDLGREF_EXPORTS || defined MyDlgRef_EXPORTS # define MYDLGREF_EXPORT __declspec( dllexport ) # else # define MYDLGREF_EXPORT __declspec( dllimport ) diff --git a/src/HEXABLOCKGUI/resources/SalomeApp.xml.in b/src/HEXABLOCKGUI/resources/SalomeApp.xml.in index a003c8e..16ab98d 100755 --- a/src/HEXABLOCKGUI/resources/SalomeApp.xml.in +++ b/src/HEXABLOCKGUI/resources/SalomeApp.xml.in @@ -24,15 +24,15 @@ - +
- +
- +
diff --git a/src/TEST_PY/cas_2013/cas_2013.py b/src/TEST_PY/cas_2013/cas_2013.py new file mode 100755 index 0000000..55d61fa --- /dev/null +++ b/src/TEST_PY/cas_2013/cas_2013.py @@ -0,0 +1,167 @@ +# !/bin/python +# -*- coding: latin-1 -*- +# Hexa : Creation d'hexaedres + +import hexablock +import os + +#---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 + +doc = hexablock.addDocument ("default") +vx = doc.addVector (1,0,0) +vy = doc.addVector (0,1,0) +vz = doc.addVector (0,0,1) + +vxy = doc.addVector (1,1,0) + +nbr_files = 0 + + +# ======================================================= save_vtk +def save_vtk () : + + global nbr_files + nom = "lecas%d.vtk" % nbr_files + nbr_files += 1 + doc.saveVtk (nom) + +# ======================================================= carre +def carre (x) : + return x*x + +# ======================================================= get_center +def get_center (quad) : + px = 0 + py = 0 + pz = 0 + for nv in range (4) : + vertex = quad.getVertex (nv) + px += vertex.getX() / 4 + py += vertex.getY() / 4 + pz += vertex.getZ() / 4 + return [ px, py, pz ] +# ======================================================= nearest +def nearest (grid, vertex) : + nbre = grid.countVertex() + dmin = 1e+6 + result = None + px = vertex.getX() + py = vertex.getY() + pz = vertex.getZ() + for nro in range (nbre) : + v1 = grid.getVertex (nro) + d2 = carre(px-v1.getX()) + carre(py-v1.getY()) + carre(pz-v1.getZ()) + if (d2 < dmin) : + result = v1 + dmin = d2 + + print vertex.getName () , px, py, pz, " -> ", result.getName() + return result + +# ======================================================= nearest_quad +def nearest_quad (grid, quad) : + dmin = 1e+16 + result = None + [ox, oy, oz] = get_center (quad) + nbre = grid.countQuad () + for nro in range (nbre) : + q1 = grid.getQuad (nro) + if q1 != None : + [px, py, pz] = get_center (q1) + d2 = carre(px-ox) + carre(py-oy) + carre(pz-oz) + if (d2 < dmin) : + result = q1 + dmin = d2 + + print quad.getName () , px, py, pz, " -> ", result.getName() + return result + +# ======================================================= insert_cylinder +def insert_cylinder (plaque, nx, ny) : + + hexa = plaque.getHexaIJK (nx, ny, 0) + xmin = 666 ; ymin = xmin ; zmin = xmin + xmax = -666 ; ymax = xmax ; zmax = xmax + + tabv1 = [] + for nv in range (8) : + node = hexa.getVertex (nv) + xmin = min (xmin, node.getX()) ; xmax = max (xmax, node.getX()) + ymin = min (ymin, node.getY()) ; ymax = max (ymax, node.getY()) + zmin = min (zmin, node.getZ()) ; zmax = max (zmax, node.getZ()) + tabv1.append (node) + + doc.removeHexa (hexa) + save_vtk () + + dx = (xmax - xmin)/2 + dz = (zmax - zmin)/2 + xorig = (xmin + xmax)/2 + yorig = (ymin + ymax)/2 + zorig = (zmin + zmax)/2 - dz + + orig = doc.addVertex (xorig, yorig, zorig) + nr = 1 + na = 4 + nh = 1 + rext = dx + rint = rext/2 + haut = 1 + angle = 360 + pipe = doc.makePipeUni (orig, vxy,vz, rint,rext,angle,haut, nr,na,nh) + + hexablock.what () + + tabquad = [] + tabv0 = [] + for nq in range (4) : + quad = pipe.getQuadJK (1, nq, 0) + tabquad.append (quad) + + print " .. tabquad[0] = ", tabquad[0].getName () + cible = nearest_quad (plaque, tabquad[0]) + tabquad[0]. setColor (5) + cible . setColor (5) + save_vtk () + + va1 = tabquad[0].getVertex (0) + va2 = tabquad[0].getVertex (1) + vb1 = cible.nearestVertex (va1) + vb2 = cible.nearestVertex (va2) + doc.setLevel (1) + doc.joinQuadsUni (tabquad, cible, va1, vb1, va2, vb2, 1) + hexablock.what () + save_vtk () + + return + doc.setLevel (1) + for nv in range (8) : + ier = doc.mergeVertices (tabv0[nv], tabv1[nv]) + print "ier = ", ier + save_vtk () + + +# ======================================================= test_2013 +def test_2013 () : + + orig = doc.addVertex (0,0,0) + + lx = 3 + ly = lx + lz = 1 + nx = 3 + ny = nx + nz = 1 + + plaque = doc.makeCartesianUni (orig, vx,vy,vz, lx, ly, lz, nx,ny,nz) + save_vtk () + + insert_cylinder (plaque, 1, 1) + return doc + +# ================================================================= Begin + +doc = test_2013 () +doc.addLaws (0.1, True) + +mesh_hexas = hexablock.mesh (doc) -- 2.39.2