#include <gp_XY.hxx>
#include <gp_XYZ.hxx>
-#include <Basics_OCCTVersion.hxx>
-
#include <Basics_Utils.hxx>
#include "utilities.h"
bool SMESH_Pattern::Load (const char* theFileContents)
{
- MESSAGE("Load( file ) ");
-
Kernel_Utils::Localizer loc;
// file structure:
// ! This is a comment
// NB_POINTS ! 1 integer - the number of points in the pattern.
// X1 Y1 [Z1] ! 2 or 3 reals - nodes coordinates within 2D or 3D domain:
- // X2 Y2 [Z2] ! the pattern dimention is defined by the number of coordinates
+ // X2 Y2 [Z2] ! the pattern dimension is defined by the number of coordinates
// ...
// [ ID1 ID2 ... IDn ] ! Indices of key-points for a 2D pattern (only).
// ! elements description goes after all
// X1 Y1 [Z1] ! 2 or 3 reals - nodes coordinates within 2D or 3D domain:
- // read the first point coordinates to define pattern dimention
+ // read the first point coordinates to define pattern dimension
int dim = readLine( fields, lineBeg, clearFields );
if ( dim == 2 )
myIs2D = true;
bool SMESH_Pattern::Save (ostream& theFile)
{
- MESSAGE(" ::Save(file) " );
-
Kernel_Utils::Localizer loc;
if ( !IsLoaded() ) {
TopoDS_Vertex the1stVertex,
bool theKeepNodes)
{
- MESSAGE(" ::Load(face) " );
Clear();
myIs2D = true;
myToKeepNodes = theKeepNodes;
Extrema_GenExtPS projector;
GeomAdaptor_Surface aSurface( BRep_Tool::Surface( face ));
- if ( theProject || needProject )
- projector.Initialize( aSurface, 20,20, 1e-5,1e-5 );
+ projector.Initialize( aSurface, 20,20, 1e-5,1e-5 );
int iPoint = 0;
TNodePointIDMap nodePointIDMap;
if ( needProject )
{
- MESSAGE("Project the submesh");
// ---------------------------------------------------------------
// The case where the submesh is projected to theFace
// ---------------------------------------------------------------
myPoints.resize( nbNodes );
+ // care of INTERNAL VERTEXes
+ TopExp_Explorer vExp( face, TopAbs_VERTEX, TopAbs_EDGE );
+ for ( ; vExp.More(); vExp.Next() )
+ {
+ const SMDS_MeshNode* node =
+ SMESH_Algo::VertexNode( TopoDS::Vertex( vExp.Current()), aMeshDS );
+ if ( !node || node->NbInverseElements( SMDSAbs_Face ) == 0 )
+ continue;
+ myPoints.resize( ++nbNodes );
+ list< TPoint* > & fPoints = getShapePoints( face );
+ nodePointIDMap.insert( make_pair( node, iPoint ));
+ TPoint* p = &myPoints[ iPoint++ ];
+ fPoints.push_back( p );
+ gp_XY uv = helper.GetNodeUV( face, node );
+ p->myInitUV.SetCoord( uv.X(), uv.Y() );
+ p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 );
+ }
+
// Load U of points on edges
+ Bnd_Box2d edgesUVBox;
+
list<int>::iterator nbEinW = myNbKeyPntInBoundary.begin();
int iE = 0;
vector< TopoDS_Edge > eVec;
else
keyPoint->myInitUV = C2d->Value( isForward ? f : l ).XY();
keyPoint->myInitXYZ.SetCoord (keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0);
+ edgesUVBox.Add( gp_Pnt2d( keyPoint->myInitUV ));
}
}
if ( !vPoint->empty() )
double u = epos->GetUParameter();
paramNodeMap.insert( make_pair( u, node ));
}
- if ((int) paramNodeMap.size() != eSubMesh->NbNodes() ) {
+ if ((int) paramNodeMap.size() != eSubMesh->NbNodes() - nbMeduimNodes ) {
// wrong U on edge, project
Extrema_ExtPC proj;
BRepAdaptor_Curve aCurve( edge );
p->myInitUV = C2d->Value( u ).XY();
}
p->myInitXYZ.SetCoord( p->myInitUV.X(), p->myInitUV.Y(), 0 );
+ edgesUVBox.Add( gp_Pnt2d( p->myInitUV ));
unIt++; unRIt++;
iPoint++;
}
else
keyPoint->myInitUV = C2d->Value( isForward ? l : f ).XY();
keyPoint->myInitXYZ.SetCoord( keyPoint->myInitUV.X(), keyPoint->myInitUV.Y(), 0 );
+ edgesUVBox.Add( gp_Pnt2d( keyPoint->myInitUV ));
}
}
if ( !vPoint->empty() )
nodePointIDMap.insert( make_pair( node, iPoint ));
TPoint* p = &myPoints[ iPoint++ ];
fPoints.push_back( p );
- if ( theProject )
+ if ( theProject || edgesUVBox.IsOut( p->myInitUV ) )
p->myInitUV = project( node, projector );
else {
const SMDS_FacePosition* pos =
// resUV /= 2.;
// }
- if ( isDeformed ) {
- MESSAGE("intersectIsolines(), d1 = " << d1 << ", d2 = " << d2 << ", delta = " << delta <<
- ", " << (loc1 - loc2).SquareModulus() << " > " << delta * delta);
- }
+ // if ( isDeformed ) {
+ // MESSAGE("intersectIsolines(), d1 = " << d1 << ", d2 = " << d2 << ", delta = " << delta <<
+ // ", " << (loc1 - loc2).SquareModulus() << " > " << delta * delta);
+ // }
return true;
}
}
if ( !intersectIsolines( uv1[0], uv2[0], ratio[0],
uv1[1], uv2[1], ratio[1], theUV, theIsDeformed )) {
- MESSAGE(" Cant intersect isolines for a point "<<theInitUV.X()<<", "<<theInitUV.Y());
+ MESSAGE(" Can't intersect isolines for a point "<<theInitUV.X()<<", "<<theInitUV.Y());
return setErrorCode( ERR_APPLF_BAD_TOPOLOGY );
}
return false;
}
else {
- //MESSAGE(" Cant improve UV, uv: "<<uv.X()<<" "<<uv.Y());
+ //MESSAGE(" Can't improve UV, uv: "<<uv.X()<<" "<<uv.Y());
}
}
if ( !oldIsIn && nbOldFix ) {
return false;
}
else {
- //MESSAGE(" Cant fix UV, uv: "<<uv.X()<<" "<<uv.Y());
+ //MESSAGE(" Can't fix UV, uv: "<<uv.X()<<" "<<uv.Y());
}
}
if ( newIsIn && oldIsIn )
list < TIsoNode* > internNodes;
bool needIteration = true;
if ( startNodes.empty() ) {
- MESSAGE( " Starting UV by compUVByIsoIntersection()");
+ //MESSAGE( " Starting UV by compUVByIsoIntersection()");
needIteration = false;
map < double, TIsoLine >& isos = isoMap[ 0 ];
map < double, TIsoLine >::iterator isoIt = isos.begin();
#endif
} while ( maxMove > 1e-8 && nbIter++ < maxNbIter );
- MESSAGE( "compUVByElasticIsolines(): Nb iterations " << nbIter << " dist: " << sqrt( maxMove ));
+ //MESSAGE( "compUVByElasticIsolines(): Nb iterations " << nbIter << " dist: " << sqrt( maxMove ));
if ( nbIter >= maxNbIter && sqrt(maxMove) > minUvSize * 0.05 ) {
MESSAGE( "compUVByElasticIsolines() failed: "<<sqrt(maxMove)<<">"<<minUvSize * 0.05);
list< TPoint* > & ePoints = getShapePoints( eID++ );
TPoint* p = ePoints.front();
if ( !compUVByIsoIntersection( theEdgesPointsList, p->myInitUV, p->myUV, aBool )) {
- MESSAGE("cant sortSameSizeWires()");
+ MESSAGE("can't sortSameSizeWires()");
return false;
}
gcVec[iW] += p->myUV;
const TopoDS_Vertex& theVertexOnKeyPoint1,
const bool theReverse)
{
- MESSAGE(" ::Apply(face) " );
TopoDS_Face face = theReverse ? TopoDS::Face( theFace.Reversed() ) : theFace;
if ( !setShapeToMesh( face ))
return false;
// If there are several wires, define the order of edges of inner wires:
// compute UV of inner edge-points using 2 methods: the one for in-face points
// and the one for on-edge points and then choose the best edge order
- // by the best correspondance of the 2 results
+ // by the best correspondence of the 2 results
if ( nbWires > 1 )
{
// compute UV of inner edge-points using the method for in-face points
- // and devide eList into a list of separate wires
+ // and divide eList into a list of separate wires
bool aBool;
list< list< TopoDS_Edge > > wireList;
list<TopoDS_Edge>::iterator eIt = elIt;
for ( pIt++; pIt != ePoints.end(); pIt++ ) {
TPoint* p = (*pIt);
if ( !compUVByIsoIntersection( edgesPointsList, p->myInitUV, p->myUV, aBool )) {
- MESSAGE("cant Apply(face)");
+ MESSAGE("can't Apply(face)");
return false;
}
// keep the computed UV to compare against by setFirstEdge()
for ( pIt = fPoints.begin(); !isDeformed && pIt != fPoints.end(); pIt++ )
if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
(*pIt)->myUV, isDeformed )) {
- MESSAGE("cant Apply(face)");
+ MESSAGE("can't Apply(face)");
return false;
}
// try to use a complex algo if it is a difficult case
for ( ; pIt != fPoints.end(); pIt++ ) // continue with the simple algo
if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
(*pIt)->myUV, isDeformed )) {
- MESSAGE("cant Apply(face)");
+ MESSAGE("can't Apply(face)");
return false;
}
}
for ( pIt = fPoints.begin(); !isDeformed && pIt != fPoints.end(); pIt++ )
if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
(*pIt)->myUV, isDeformed )) {
- MESSAGE("cant Apply(face)");
+ MESSAGE("can't Apply(face)");
return false;
}
// try to use a complex algo if it is a difficult case
for ( ; pIt != fPoints.end(); pIt++ ) // continue with the simple algo
if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
(*pIt)->myUV, isDeformed )) {
- MESSAGE("cant Apply(face)");
+ MESSAGE("can't Apply(face)");
return false;
}
}
for ( pIt = fPoints.begin(); !isDeformed && pIt != fPoints.end(); pIt++ )
if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
(*pIt)->myUV, isDeformed )) {
- MESSAGE("cant Apply(face)");
+ MESSAGE("can't Apply(face)");
return false;
}
// try to use a complex algo if it is a difficult case
for ( ; pIt != fPoints.end(); pIt++ ) // continue with the simple algo
if ( !compUVByIsoIntersection( edgesPointsList, (*pIt)->myInitUV,
(*pIt)->myUV, isDeformed )) {
- MESSAGE("cant Apply(face)");
+ MESSAGE("can't Apply(face)");
return false;
}
}
const int theNode000Index,
const int theNode001Index)
{
- MESSAGE(" ::Apply(set<MeshVolumes>) " );
-
if ( !IsLoaded() ) {
MESSAGE( "Pattern not loaded" );
return setErrorCode( ERR_APPL_NOT_LOADED );
const TopoDS_Shell& theBlock,
bool theKeepNodes)
{
- MESSAGE(" ::Load(volume) " );
Clear();
myIs2D = false;
myToKeepNodes = theKeepNodes;
const TopoDS_Vertex& theVertex000,
const TopoDS_Vertex& theVertex001)
{
- MESSAGE(" ::Apply(volume) " );
-
if (!findBoundaryPoints() || // bind ID to points
!setShapeToMesh( theBlock )) // check theBlock is a suitable shape
return false;
const int theNode000Index,
const int theNode001Index)
{
- //MESSAGE(" ::Apply(MeshVolume) " );
-
if (!findBoundaryPoints()) // bind ID to points
return false;
const bool toCreatePolygons,
const bool toCreatePolyedrs)
{
- MESSAGE(" ::MakeMesh() " );
if ( !myIsComputed )
return setErrorCode( ERR_MAKEM_NOT_COMPUTED );
{
if ( myIsBoundaryPointsFound ) return true;
- MESSAGE(" findBoundaryPoints() ");
-
myNbKeyPntInBoundary.clear();
if ( myIs2D )
TopAbs_ShapeEnum aType = theShape.ShapeType();
bool dimOk = ( myIs2D ? aType == TopAbs_FACE : aType == TopAbs_SHELL );
if ( !dimOk ) {
- MESSAGE( "Pattern dimention mismatch" );
+ MESSAGE( "Pattern dimension mismatch" );
return setErrorCode( ERR_APPL_BAD_DIMENTION );
}