-// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// 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.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
bool Load (SMESH_Mesh* theMesh,
const TopoDS_Face& theFace,
bool theProject = false,
- TopoDS_Vertex the1stVertex=TopoDS_Vertex());
+ TopoDS_Vertex the1stVertex=TopoDS_Vertex(),
+ bool theKeepNodes = false );
// Create a pattern from the mesh built on <theFace>.
// <theProject>==true makes override nodes positions
// on <theFace> computed by mesher
bool Load (SMESH_Mesh* theMesh,
- const TopoDS_Shell& theBlock);
+ const TopoDS_Shell& theBlock,
+ bool theKeepNodes = false);
// Create a pattern from the mesh built on <theBlock>
bool Save (std::ostream& theFile);
ERR_LOADF_CANT_PROJECT, // impossible to project nodes
// Load(volume)
ERR_LOADV_BAD_SHAPE, // volume is not a brick of 6 faces
- ERR_LOADV_COMPUTE_PARAMS, // cant compute point parameters
+ ERR_LOADV_COMPUTE_PARAMS, // can't compute point parameters
// Apply(shape)
ERR_APPL_NOT_COMPUTED, // mapping failed
ERR_APPL_NOT_LOADED, // pattern was not loaded
- ERR_APPL_BAD_DIMENTION, // wrong shape dimention
+ ERR_APPL_BAD_DIMENTION, // wrong shape dimension
ERR_APPL_BAD_NB_VERTICES, // keypoints - vertices mismatch
// Apply(face)
ERR_APPLF_BAD_TOPOLOGY, // bad pattern topology
// MakeMesh
ERR_MAKEM_NOT_COMPUTED, // mapping failed
//Unexpected error
- ERR_UNEXPECTED // Unexpected of the pattern mapping alorithm
+ ERR_UNEXPECTED // Unexpected of the pattern mapping algorithm
};
ErrorCode GetErrorCode() const { return myErrorCode; }
{ return myElemXYZIDs.empty() || !applied ? myElemPointIDs : myElemXYZIDs; }
// Return nodal connectivity of the elements of the pattern
+ void GetInOutNodes( std::vector< const SMDS_MeshNode* > *& inNodes,
+ std::vector< const SMDS_MeshNode* > *& outNodes )
+ { inNodes = & myInNodes; outNodes = & myOutNodes; }
+ // Return loaded and just created nodes
+
void DumpPoints() const;
// Debug
// private methods
struct TPoint {
- gp_XYZ myInitXYZ; // loaded postion
+ gp_XYZ myInitXYZ; // loaded position
gp_XY myInitUV;
double myInitU; // [0,1]
gp_Pnt myXYZ; // position to compute
std::list< TPoint* > & getShapePoints(const TopoDS_Shape& theShape);
// Return list of points located on theShape.
// A list of edge-points include vertex-points (for 2D pattern only).
- // A list of face-points doesnt include edge-points.
- // A list of volume-points doesnt include face-points.
+ // A list of face-points doesn't include edge-points.
+ // A list of volume-points doesn't include face-points.
std::list< TPoint* > & getShapePoints(const int theShapeID);
// Return list of points located on the shape
void clearMesh(SMESH_Mesh* theMesh) const;
// clear mesh elements existing on myShape in theMesh
+ bool findExistingNodes( SMESH_Mesh* mesh,
+ const TopoDS_Shape& S,
+ const std::list< TPoint* > & points,
+ std::vector< const SMDS_MeshNode* > & nodes);
+ // fills nodes vector with nodes existing on a given shape
+
static SMESHDS_SubMesh * getSubmeshWithElements(SMESH_Mesh* theMesh,
const TopoDS_Shape& theShape);
// return submesh containing elements bound to theShape in theMesh
// all functions assure that shapes are indexed so that first go
// ordered vertices, then ordered edge, then faces and maybe a shell
TopTools_IndexedMapOfOrientedShape myShapeIDMap;
- std::map< int, std::list< TPoint* > > myShapeIDToPointsMap;
+ std::map< int, std::list< TPoint*> > myShapeIDToPointsMap;
// for the 2d case:
// nb of key-points in each of pattern boundaries
std::list< int > myNbKeyPntInBoundary;
-
+ // nodes corresponding to myPoints
+ bool myToKeepNodes; // to keep these data
+ std::vector< const SMDS_MeshNode* > myInNodes; // loaded nodes
+ std::vector< const SMDS_MeshNode* > myOutNodes; // created nodes
+
// to compute while applying to mesh elements, not to shapes
std::vector<gp_XYZ> myXYZ; // XYZ of nodes to create
std::vector<const SMDS_MeshElement*> myElements; // refined elements
std::vector<const SMDS_MeshNode*> myOrderedNodes;
- // elements to replace with polygon or polyhedron
+ // elements to replace with polygon or polyhedron
std::vector<const SMDS_MeshElement*> myPolyElems;
// definitions of new poly elements
std::list< TElemDef > myPolyElemXYZIDs;