From: vsr Date: Mon, 8 Oct 2012 13:09:32 +0000 (+0000) Subject: Merge from V6_main (04/10/2012) X-Git-Tag: V7_0_0 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=1f21457b1a75fd43cad34441bea2bb9124134708;p=plugins%2Fblsurfplugin.git Merge from V6_main (04/10/2012) --- diff --git a/doc/salome/gui/BLSURFPLUGIN/Makefile.am b/doc/salome/gui/BLSURFPLUGIN/Makefile.am index 1746a98..2517c0b 100644 --- a/doc/salome/gui/BLSURFPLUGIN/Makefile.am +++ b/doc/salome/gui/BLSURFPLUGIN/Makefile.am @@ -28,16 +28,15 @@ EXTRA_DIST += images input static/footer.html static/doxygen.css guidocdir = $(docdir)/gui/BLSURFPLUGIN guidoc_DATA = images/head.png +DOC_PYTHONPATH=$(prefix)/bin/salome:$(SMESH_ROOT_DIR)/bin/salome:$(SMESH_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(MED_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(GEOM_ROOT_DIR)/bin/salome:$(GEOM_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(KERNEL_ROOT_DIR)/bin/salome:$(KERNEL_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(OMNIORB_ROOT)/lib/python$(PYTHON_VERSION)/site-packages:$(OMNIORB_ROOT)/lib64/python$(PYTHON_VERSION)/site-packages +DOC_SMESH_MeshersList=BLSURFPlugin -usr_docs: doxyfile - echo "===========================================" ; \ - echo "Generating Python interface documentation"; \ - echo "===========================================" ; \ - $(DOXYGEN) doxyfile_py \ - echo "===========================================" ; \ - echo "Generating GUI documentation" ; \ - echo "===========================================" ; \ - $(DOXYGEN) doxyfile ; +smesh.py: $(top_srcdir)/src/BLSURFPlugin/BLSURFPluginDC.py + @PYTHONPATH=$(DOC_PYTHONPATH):${PYTHONPATH} 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 + @$(DOXYGEN) doxyfile_py ; \ + $(DOXYGEN) doxyfile docs: usr_docs diff --git a/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in b/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in index 68057ba..2c1ad9d 100755 --- a/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in +++ b/doc/salome/gui/BLSURFPLUGIN/doxyfile_py.in @@ -96,7 +96,9 @@ EXAMPLE_RECURSIVE = NO #--------------------------------------------------------------------------- #Input related options #--------------------------------------------------------------------------- -INPUT = @top_srcdir@/src/BLSURFPlugin/BLSURFPluginDC.py +INPUT = @top_srcdir@/src/BLSURFPlugin/BLSURFPluginDC.py \ + smesh.py \ + @SMESH_ROOT_DIR@/bin/salome/smesh_algorithm.py FILE_PATTERNS = IMAGE_PATH = @srcdir@/images RECURSIVE = NO @@ -129,24 +131,24 @@ GENERATE_RTF = NO #--------------------------------------------------------------------------- CLASS_DIAGRAMS = NO HIDE_UNDOC_RELATIONS = NO -HAVE_DOT = NO -CLASS_GRAPH = NO +HAVE_DOT = YES +CLASS_GRAPH = YES COLLABORATION_GRAPH = NO GROUP_GRAPHS = NO UML_LOOK = NO -TEMPLATE_RELATIONS = NO -INCLUDE_GRAPH = NO -INCLUDED_BY_GRAPH = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO -GRAPHICAL_HIERARCHY = NO -DIRECTORY_GRAPH = NO -DOT_IMAGE_FORMAT = jpg +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png DOT_FONTNAME = Arial DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 -MAX_DOT_GRAPH_HEIGHT = 1200 -MAX_DOT_GRAPH_DEPTH = 0 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = NO @@ -156,4 +158,4 @@ DOT_CLEANUP = YES #External reference options #--------------------------------------------------------------------------- GENERATE_TAGFILE = blsurfpluginpy_doc.tag -SEARCHENGINE = YES \ No newline at end of file +SEARCHENGINE = YES diff --git a/doc/salome/gui/BLSURFPLUGIN/input/blsurf_hypo.doc b/doc/salome/gui/BLSURFPLUGIN/input/blsurf_hypo.doc index 1964dbe..9bc028a 100644 --- a/doc/salome/gui/BLSURFPLUGIN/input/blsurf_hypo.doc +++ b/doc/salome/gui/BLSURFPLUGIN/input/blsurf_hypo.doc @@ -5,7 +5,7 @@ \anchor blsurf_top BLSURF Parameters hypothesis works only with \b DISTENE \b BLSurf 2d algorithm. This algorithm is a commercial software. To obtain a -licence, visit http://www.distene.com/corp/eval-distene.html +licence, visit http://www.distene.com/en/corp/eval-distene.html \tableofcontents @@ -430,7 +430,7 @@ The enforced vertex is the projection of a point defined by its - If the projected point is on the boundary or outside of the face, it will be ignored. -- If a group name is specified, the enforced nodes will be added in the group. If the group does not exist it will be created. +- If a group name is specified : If the group exists, the enforced nodes will be added in the existing group, if the group does not exist it will be created. \sa Sample TUI Script of the \ref tui_blsurf "creation of a BLSurf hypothesis", including enforced vertices. diff --git a/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc b/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc index 0d3efc1..2e883ab 100644 --- a/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc +++ b/doc/salome/gui/BLSURFPLUGIN/input/blsurfplugin_python_interface.doc @@ -2,11 +2,11 @@ \page blsurfplugin_python_interface_page Python Interface -Python package \ref BLSURFPluginDC "BLSURFPlugin" defines several classes, destined for creation of the 2D meshes. +Python package BLSURFPluginDC defines several classes, destined for creation of the 2D meshes. -Documentation for BLSURFPlugin package is available in linear form grouped by classes, declared in the BLSURFPluginDC.py file. +BLSURF meshing plugin dynamically adds several methods to the smesh.Mesh class to create meshing algorithms. -Below you can see an example of usage of the BLSURFPlugin package for mesh generation: +Below you can see an example of usage of the BLSURFPlugin Python API for mesh generation: \anchor tui_blsurf diff --git a/resources/BLSURFPlugin.xml b/resources/BLSURFPlugin.xml index ff40d4c..7eb2e41 100644 --- a/resources/BLSURFPlugin.xml +++ b/resources/BLSURFPlugin.xml @@ -33,7 +33,33 @@ + dim="2"> + + + SetOptionValue, + SetPreCADOptionValue, + UnsetOption, + UnsetPreCADOption, + SetSizeMap, + SetConstantSizeMap, + UnsetSizeMap, + SetAttractor, + UnsetAttractor, + SetAttractorGeom, + UnsetAttractorGeom, + SetEnforcedVertex, + SetEnforcedVertexNamed, + SetEnforcedVertexGeom, + SetEnforcedVertexWithGroup, + SetEnforcedVertexNamedWithGroup, + SetEnforcedVertexGeomWithGroup, + UnsetEnforcedVertex, + UnsetEnforcedVertexGeom, + UnsetEnforcedVertices + + + + diff --git a/src/BLSURFPlugin/BLSURFPluginDC.py b/src/BLSURFPlugin/BLSURFPluginDC.py index 8dffd50..791744e 100644 --- a/src/BLSURFPlugin/BLSURFPluginDC.py +++ b/src/BLSURFPlugin/BLSURFPluginDC.py @@ -17,7 +17,12 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -from smesh import Mesh_Algorithm, AssureGeomPublished +## +# @package BLSURFPluginDC +# Python API for the BLSURF meshing plug-in module. + +from smesh_algorithm import Mesh_Algorithm +from smesh import AssureGeomPublished # Topology treatment way of BLSURF FromCAD, PreProcess, PreProcessPlus, PreCAD = 0,1,2,3 @@ -34,22 +39,40 @@ except ImportError: noBLSURFPlugin = 1 pass +#---------------------------- +# Mesh algo type identifiers +#---------------------------- - -# a constant to call Mesh.Triangle(BLSURF,geom=0) +## Algorithm type: BLSurf triangle 2D algorithm, see BLSURF_Algorithm BLSURF = "BLSURF" -## BLSURF 2D algorithm. It is created by calling Mesh.Triangle(BLSURF,geom=0) +#---------------------- +# Algorithms +#---------------------- + +## BLSurf 2D algorithm. +# +# It can be created by calling smesh.Mesh.Triangle(smesh.BLSURF,geom=0) # class BLSURF_Algorithm(Mesh_Algorithm): + ## name of the dynamic method in smesh.Mesh class + # @internal meshMethod = "Triangle" + ## type of algorithm used with helper function in smesh.Mesh class + # @internal algoType = BLSURF + ## doc string of the method + # @internal + docHelper = "Creates triangle 2D algorithm for faces" _angleMeshS = 8 _gradation = 1.1 ## Private constructor. + # @param mesh parent mesh object algorithm is assigned to + # @param geom geometry (shape/sub-shape) algorithm is assigned to; + # if it is @c 0 (default), the algorithm is assigned to the main shape def __init__(self, mesh, geom=0): Mesh_Algorithm.__init__(self) if noBLSURFPlugin: @@ -57,102 +80,141 @@ class BLSURF_Algorithm(Mesh_Algorithm): self.Create(mesh, geom, BLSURF, "libBLSURFEngine.so") self.params=None #self.SetPhysicalMesh() - PAL19680 + pass ## Sets a way to define size of mesh elements to generate. # @param thePhysicalMesh is: DefaultSize, BLSURF_Custom or SizeMap. def SetPhysicalMesh(self, thePhysicalMesh=DefaultSize): self.Parameters().SetPhysicalMesh(thePhysicalMesh) + pass ## Sets size of mesh elements to generate. + # @param theVal value of mesh element size def SetPhySize(self, theVal): self.Parameters().SetPhySize(theVal) + pass ## Sets lower boundary of mesh element size (PhySize). + # @param theVal value of mesh element minimal size def SetPhyMin(self, theVal=-1): self.Parameters().SetPhyMin(theVal) + pass ## Sets upper boundary of mesh element size (PhySize). + # @param theVal value of mesh element maximal size def SetPhyMax(self, theVal=-1): self.Parameters().SetPhyMax(theVal) + pass ## Sets a way to define maximum angular deflection of mesh from CAD model. # @param theGeometricMesh is: 0 (None) or 1 (Custom) def SetGeometricMesh(self, theGeometricMesh=0): if self.Parameters().GetPhysicalMesh() == 0: theGeometricMesh = 1 self.Parameters().SetGeometricMesh(theGeometricMesh) + pass ## Sets angular deflection (in degrees) of a mesh face from CAD surface. + # @param theVal value of angular deflection for mesh face def SetAngleMeshS(self, theVal=_angleMeshS): if self.Parameters().GetGeometricMesh() == 0: theVal = self._angleMeshS self.Parameters().SetAngleMeshS(theVal) + pass ## Sets angular deflection (in degrees) of a mesh edge from CAD curve. + # @param theVal value of angular deflection for mesh edge def SetAngleMeshC(self, theVal=_angleMeshS): if self.Parameters().GetGeometricMesh() == 0: theVal = self._angleMeshS self.Parameters().SetAngleMeshC(theVal) + pass ## Sets lower boundary of mesh element size computed to respect angular deflection. + # @param theVal value of mesh element minimal size def SetGeoMin(self, theVal=-1): self.Parameters().SetGeoMin(theVal) + pass ## Sets upper boundary of mesh element size computed to respect angular deflection. + # @param theVal value of mesh element maximal size def SetGeoMax(self, theVal=-1): self.Parameters().SetGeoMax(theVal) + pass ## Sets maximal allowed ratio between the lengths of two adjacent edges. + # @param theVal value of maximal length ratio def SetGradation(self, theVal=_gradation): if self.Parameters().GetGeometricMesh() == 0: theVal = self._gradation self.Parameters().SetGradation(theVal) + pass ## Sets topology usage way. - # @param way defines how mesh conformity is assured + # @param way defines how mesh conformity is assured + # - FromCAD - mesh conformity is assured by conformity of a shape + # - PreProcess or PreProcessPlus - by pre-processing a CAD model + # - PreCAD - by pre-processing with PreCAD a CAD model def SetTopology(self, way): self.Parameters().SetTopology(way) + pass ## To respect geometrical edges or not. + # @param toIgnoreEdges "ignore edges" flag value def SetDecimesh(self, toIgnoreEdges=False): self.Parameters().SetDecimesh(toIgnoreEdges) + pass ## Sets verbosity level in the range 0 to 100. + # @param level verbosity level def SetVerbosity(self, level): self.Parameters().SetVerbosity(level) + pass ## To optimize merges edges. + # @param toMergeEdges "merge edges" flag value def SetPreCADMergeEdges(self, toMergeEdges=False): self.Parameters().SetPreCADMergeEdges(toMergeEdges) + pass ## To remove nano edges. + # @param toRemoveNanoEdges "remove nano edges" flag value def SetPreCADRemoveNanoEdges(self, toRemoveNanoEdges=False): self.Parameters().SetPreCADRemoveNanoEdges(toRemoveNanoEdges) + pass ## To compute topology from scratch + # @param toDiscardInput "discard input" flag value def SetPreCADDiscardInput(self, toDiscardInput=False): self.Parameters().SetPreCADDiscardInput(toDiscardInput) + pass ## Sets the length below which an edge is considered as nano # for the topology processing. + # @param epsNano nano edge length threshold value def SetPreCADEpsNano(self, epsNano): self.Parameters().SetPreCADEpsNano(epsNano) + pass ## Sets advanced option value. + # @param optionName advanced option name + # @param level advanced option value def SetOptionValue(self, optionName, level): self.Parameters().SetOptionValue(optionName,level) + pass ## Sets advanced PreCAD option value. - # Keyword arguments: - # optionName: name of the option - # optionValue: value of the option + # @param optionName name of the option + # @param optionValue value of the option def SetPreCADOptionValue(self, optionName, optionValue): self.Parameters().SetPreCADOptionValue(optionName,optionValue) + pass ## Sets GMF file for export at computation + # @param fileName GMF file name def SetGMFFile(self, fileName): self.Parameters().SetGMFFile(fileName) + pass - ## Enforced vertices (BLSURF) + #----------------------------------------- + # Enforced vertices (BLSURF) + #----------------------------------------- ## To get all the enforced vertices def GetAllEnforcedVertices(self): @@ -194,11 +256,14 @@ class BLSURF_Algorithm(Mesh_Algorithm): return self.Parameters().SetEnforcedVertex(theFace, x, y, z) else: return self.Parameters().SetEnforcedVertexWithGroup(theFace, x, y, z, groupName) + pass else: if groupName == "": return self.Parameters().SetEnforcedVertexNamed(theFace, x, y, z, vertexName) else: return self.Parameters().SetEnforcedVertexNamedWithGroup(theFace, x, y, z, vertexName, groupName) + pass + pass ## To set an enforced vertex on a face (or group, compound) given a GEOM vertex, group or compound. # @param theFace : GEOM face (or group, compound) on which to define an enforced vertex @@ -211,6 +276,7 @@ class BLSURF_Algorithm(Mesh_Algorithm): return self.Parameters().SetEnforcedVertexGeom(theFace, theVertex) else: return self.Parameters().SetEnforcedVertexGeomWithGroup(theFace, theVertex,groupName) + pass ## To remove an enforced vertex on a given GEOM face (or group, compound) given the coordinates. # @param theFace : GEOM face (or group, compound) on which to remove the enforced vertex @@ -253,7 +319,9 @@ class BLSURF_Algorithm(Mesh_Algorithm): def GetInternalEnforcedVertexAllFacesGroup(self): return self.Parameters().GetInternalEnforcedVertexAllFacesGroup() - ## Attractors + #----------------------------------------- + # Attractors + #----------------------------------------- ## Sets an attractor on the chosen face. The mesh size will decrease exponentially with the distance from theAttractor, following the rule h(d) = theEndSize - (theEndSize - theStartSize) * exp [ - ( d / theInfluenceDistance ) ^ 2 ] # @param theFace : face on which the attractor will be defined @@ -266,14 +334,18 @@ class BLSURF_Algorithm(Mesh_Algorithm): AssureGeomPublished( self.mesh, theFace ) AssureGeomPublished( self.mesh, theAttractor ) self.Parameters().SetAttractorGeom(theFace, theAttractor, theStartSize, theEndSize, theInfluenceDistance, theConstantSizeDistance) + pass ## Unsets an attractor on the chosen face. # @param theFace : face on which the attractor has to be removed def UnsetAttractorGeom(self, theFace): AssureGeomPublished( self.mesh, theFace ) self.Parameters().SetAttractorGeom(theFace) + pass - ## Size maps (BLSURF) + #----------------------------------------- + # Size maps (BLSURF) + #----------------------------------------- ## To set a size map on a face, edge or vertex (or group, compound) given Python function. # If theObject is a face, the function can be: def f(u,v): return u+v @@ -284,25 +356,33 @@ class BLSURF_Algorithm(Mesh_Algorithm): def SetSizeMap(self, theObject, theSizeMap): AssureGeomPublished( self.mesh, theObject ) self.Parameters().SetSizeMap(theObject, theSizeMap) + pass ## To remove a size map defined on a face, edge or vertex (or group, compound) # @param theObject : GEOM face, edge or vertex (or group, compound) on which to define a size map def UnsetSizeMap(self, theObject): AssureGeomPublished( self.mesh, theObject ) self.Parameters().UnsetSizeMap(theObject) + pass ## To remove all the size maps def ClearSizeMaps(self): self.Parameters().ClearSizeMaps() + pass ## Sets QuadAllowed flag. + # @param toAllow "allow quadrangles" flag value def SetQuadAllowed(self, toAllow=True): self.Parameters().SetQuadAllowed(toAllow) + pass ## Defines hypothesis having several parameters - # + # @return hypothesis object def Parameters(self): if not self.params: self.params = self.Hypothesis("BLSURF_Parameters", [], "libBLSURFEngine.so", UseExisting=0) + pass return self.params + + pass # end of BLSURF_Algorithm class diff --git a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx index 4743bba..e834c58 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx +++ b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx @@ -689,6 +689,10 @@ void BLSURFPlugin_BLSURF::SetParameters( bool * use_precad ) { + // rnc : Bug 1457 + // Clear map so that it is not stored in the algorithm with old enforced vertices in it + EnfVertexCoords2EnfVertexList.clear(); + int _topology = BLSURFPlugin_Hypothesis::GetDefaultTopology(); int _physicalMesh = BLSURFPlugin_Hypothesis::GetDefaultPhysicalMesh(); double _phySize = BLSURFPlugin_Hypothesis::GetDefaultPhySize(); @@ -1025,7 +1029,7 @@ void BLSURFPlugin_BLSURF::SetParameters( TopExp_Explorer exp (GeomShape, TopAbs_FACE); for (; exp.More(); exp.Next()){ MESSAGE("Iterating shapes. Shape type is " << exp.Current().ShapeType()); - TopExp_Explorer exp_face (exp.Current(), TopAbs_VERTEX); + TopExp_Explorer exp_face (exp.Current(), TopAbs_VERTEX, TopAbs_EDGE); for (; exp_face.More(); exp_face.Next()) { // Get coords of vertex @@ -1041,6 +1045,7 @@ void BLSURFPlugin_BLSURF::SetParameters( enfVertex->faceEntries.clear(); enfVertex->geomEntry = ""; enfVertex->grpName = grpName; + enfVertex->vertex = TopoDS::Vertex( exp_face.Current() ); _createEnforcedVertexOnFace( TopoDS::Face(exp.Current()), aPnt, enfVertex); HasSizeMapOnFace = true; } @@ -1192,6 +1197,7 @@ bool BLSURFPlugin_BLSURF::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) helper.SetIsQuadratic( haveQudraticSubMesh ); bool needMerge = false; set< SMESH_subMesh* > edgeSubmeshes; + set< SMESH_subMesh* >& mergeSubmeshes = edgeSubmeshes; /* Now fill the CAD object with data from your CAD * environement. This is the most complex part of a successfull @@ -1323,8 +1329,9 @@ bool BLSURFPlugin_BLSURF::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape) gp_Pnt P(xyzCoords[0],xyzCoords[1],xyzCoords[2]); BRepClass_FaceClassifier scl(f,P,1e-7); // scl.Perform() is bugged. The function was rewritten -// scl.Perform(); - BRepClass_FaceClassifierPerform(&scl,f,P,1e-7); + // BRepClass_FaceClassifierPerform(&scl,f,P,1e-7); + // OCC 6.5.2: scl.Perform() is not bugged anymore + scl.Perform(f, P, 1e-7); TopAbs_State result = scl.State(); MESSAGE("Position of point on face: "< -#include "SMESH_2D_Algo.hxx" +#include "SMESH_Algo.hxx" #include "SMESH_Mesh.hxx" #include #include diff --git a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx index 1856a70..f934918 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx +++ b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.cxx @@ -1134,6 +1134,7 @@ std::ostream & BLSURFPlugin_Hypothesis::SaveTo(std::ostream & save) { << _angleMeshS << " " << _gradation << " " << (int) _quadAllowed << " " << (int) _decimesh; save << " " << _phyMin << " " << _phyMax << " " << _angleMeshC << " " << _hgeoMin << " " << _hgeoMax << " " << _verb; save << " " << (int) _preCADMergeEdges << " " << (int) _preCADRemoveNanoEdges << " " << (int) _preCADDiscardInput << " " << _preCADEpsNano ; + save << " " << (int) _enforcedInternalVerticesAllFaces; TOptionValues::iterator op_val = _option2value.begin(); if (op_val != _option2value.end()) { @@ -1355,6 +1356,12 @@ std::istream & BLSURFPlugin_Hypothesis::LoadFrom(std::istream & load) { else load.clear(std::ios::badbit | load.rdstate()); + isOK = (load >> i); + if (isOK) + _enforcedInternalVerticesAllFaces = (bool) i; + else + load.clear(std::ios::badbit | load.rdstate()); + std::string option_or_sm; bool hasOptions = false; bool hasPreCADOptions = false; diff --git a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx index f6167a5..2b014b0 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx +++ b/src/BLSURFPlugin/BLSURFPlugin_Hypothesis.hxx @@ -184,6 +184,7 @@ public: TEnfVertexCoords coords; TEnfGroupName grpName; TEntryList faceEntries; + TopoDS_Vertex vertex; }; struct CompareEnfVertices diff --git a/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx b/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx index 3c6fd03..4884edf 100644 --- a/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx +++ b/src/GUI/BLSURFPluginGUI_HypothesisCreator.cxx @@ -1386,7 +1386,7 @@ void BLSURFPluginGUI_HypothesisCreator::onAddEnforcedVertices() { if (boost::trim_copy(groupName).empty()) groupName = ""; - if (selEnfVertex == 1) + if (selEnfVertex <= 1) { double x,y,z; x = myXCoord->GetValue();