23566: EDF 17146 - Problem with viscous layer

This commit is contained in:
eap 2018-07-17 16:21:24 +03:00
parent 2dff514922
commit ba0f425284
5 changed files with 23 additions and 46 deletions

View File

@ -291,7 +291,7 @@ namespace SMESH{
/*
Class : Length2D
Description : Functor for calculating length of edge
Description : Functor for calculating minimal length of edge
*/
class SMESHCONTROLS_EXPORT Length2D: public virtual NumericalFunctor{
public:

View File

@ -804,58 +804,32 @@ bool SMESH_MesherHelper::CheckNodeUV(const TopoDS_Face& F,
// check that uv is correct
TopLoc_Location loc;
Handle(Geom_Surface) surface = BRep_Tool::Surface( F,loc );
gp_Pnt nodePnt = XYZ( n ), surfPnt(0,0,0);
SMESH_NodeXYZ nXYZ( n );
gp_Pnt nodePnt = nXYZ, surfPnt(0,0,0);
double dist = 0;
if ( !loc.IsIdentity() ) nodePnt.Transform( loc.Transformation().Inverted() );
if ( infinit ||
(dist = nodePnt.Distance( surfPnt = surface->Value( uv.X(), uv.Y() ))) > tol )
{
setPosOnShapeValidity( shapeID, false );
if ( !infinit && distXYZ ) {
surfPnt.Transform( loc );
distXYZ[0] = dist;
distXYZ[1] = surfPnt.X(); distXYZ[2] = surfPnt.Y(); distXYZ[3]=surfPnt.Z();
}
// uv incorrect, project the node to surface
GeomAPI_ProjectPointOnSurf& projector = GetProjector( F, loc, tol );
projector.SetExtremaFlag( Extrema_ExtFlag_MIN );
projector.Perform( nodePnt );
if ( !projector.IsDone() || projector.NbPoints() < 1 )
{
MESSAGE( "SMESH_MesherHelper::CheckNodeUV() failed to project" );
return false;
}
Standard_Real U,V;
projector.LowerDistanceParameters(U,V);
uv.SetCoord( U,V );
surfPnt = surface->Value( U, V );
dist = nodePnt.Distance( surfPnt );
Handle(ShapeAnalysis_Surface) sprojector = GetSurface( F );
uv = sprojector->ValueOfUV( nXYZ, tol ).XY();
surfPnt = sprojector->Value( uv );
dist = surfPnt.Distance( nXYZ );
if ( distXYZ ) {
surfPnt.Transform( loc );
distXYZ[0] = dist;
distXYZ[1] = surfPnt.X(); distXYZ[2] = surfPnt.Y(); distXYZ[3]=surfPnt.Z();
}
if ( dist > tol )
{
Handle(ShapeAnalysis_Surface) sprojector = GetSurface( F );
uv = sprojector->ValueOfUV( nodePnt, tol ).XY();
surfPnt = sprojector->Value( uv );
dist = nodePnt.Distance( surfPnt );
if ( distXYZ ) {
surfPnt.Transform( loc );
distXYZ[0] = dist;
distXYZ[1] = surfPnt.X(); distXYZ[2] = surfPnt.Y(); distXYZ[3]=surfPnt.Z();
}
if ( dist > tol )
{
MESSAGE( "SMESH_MesherHelper::CheckNodeUV(), invalid projection" );
return false;
}
MESSAGE( "SMESH_MesherHelper::CheckNodeUV(), invalid projection" );
return false;
}
// store the fixed UV on the face
if ( myShape.IsSame(F) && shapeID == myShapeID && myFixNodeParameters )
const_cast<SMDS_MeshNode*>(n)->SetPosition
( SMDS_PositionPtr( new SMDS_FacePosition( U, V )));
( SMDS_PositionPtr( new SMDS_FacePosition( uv.X(), uv.Y() )));
}
else if ( myShape.IsSame(F) && uv.Modulus() > numeric_limits<double>::min() )
{

View File

@ -4002,7 +4002,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
const char* theURL,
bool isMultiFile )
{
if (!myStudyContext)
//if (!myStudyContext)
UpdateStudy();
SALOMEDS::Study_var aStudy = getStudyServant();
/* if( !theComponent->_is_nil() )

View File

@ -1176,26 +1176,28 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
}
// import python files corresponding to plugins if they are used in anUpdatedScript
{
TCollection_AsciiString importStr;
//TCollection_AsciiString importStr;
std::vector<std::string> pluginNames = getPluginNames();
for ( size_t i = 0; i < pluginNames.size(); ++i )
{
// Convert access to plugin members:
// e.g. StdMeshers.QUAD_REDUCED -> StdMeshersBuilder.QUAD_REDUCED
// e.g. StdMeshers.QUAD_REDUCED -> smeshBuilder.QUAD_REDUCED
TCollection_AsciiString pluginAccess = (pluginNames[i] + ".").c_str() ;
int iFrom = 1, iPos;
while (( iPos = anUpdatedScript.Location( pluginAccess, iFrom, anUpdatedScript.Length() )))
{
anUpdatedScript.Insert( iPos + pluginNames[i].size(), "Builder" );
iFrom = iPos + pluginNames[i].size() + 8;
//anUpdatedScript.Insert( iPos + pluginNames[i].size(), "Builder" );
anUpdatedScript.Remove( iPos, pluginNames[i].size() );
anUpdatedScript.Insert( iPos, "smeshBuilder" );
iFrom = iPos - pluginNames[i].size() + 12;
}
// if any plugin member is used, import the plugin
if ( iFrom > 1 )
importStr += ( helper + "\n" "from salome." + pluginNames[i].c_str() +
" import " + pluginNames[i].c_str() +"Builder" );
// if ( iFrom > 1 )
// importStr += ( helper + "\n" "from salome." + pluginNames[i].c_str() +
// " import " + pluginNames[i].c_str() +"Builder" );
}
if ( !importStr.IsEmpty() )
initPart += importStr + "\n";
// if ( !importStr.IsEmpty() )
// initPart += importStr + "\n";
}
if ( isMultiFile )

View File

@ -6680,6 +6680,7 @@ void _ViscousBuilder::findCollisionEdges( _SolidData& data, SMESH_MesherHelper&
_EdgesOnShape& eos = data._edgesOnShape[iS];
if ( eos._edges.empty() ) continue;
if ( eos.ShapeType() != TopAbs_EDGE && eos.ShapeType() != TopAbs_VERTEX ) continue;
if ( !eos._sWOL.IsNull() ) continue; // PAL23566
for ( size_t i = 0; i < eos._edges.size(); ++i )
{