for ( int i = 1; i <= nbPyr; ++i )
{
GmfGetLin(meshID, GmfPyramids, &iN[0], &iN[1], &iN[2], &iN[3], &iN[4], &ref);
- if ( !myMesh->AddVolumeWithID( iN[0], iN[2], iN[1], iN[3], iN[4], pyrIDShift + i ))
+ if ( !myMesh->AddVolumeWithID( iN[3], iN[2], iN[1], iN[0], iN[4], pyrIDShift + i ))
status = storeBadNodeIds( "GmfPyramids",i, 5, iN[0], iN[1],iN[2], iN[3], iN[4] );
}
}
// pyramids
BEGIN_ELEM_WRITE( SMDSEntity_Pyramid, GmfPyramids, pyra )
- node2IdMap[ pyra->GetNode( 0 )],
+ node2IdMap[ pyra->GetNode( 3 )],
node2IdMap[ pyra->GetNode( 2 )],
node2IdMap[ pyra->GetNode( 1 )],
- node2IdMap[ pyra->GetNode( 3 )],
+ node2IdMap[ pyra->GetNode( 0 )],
node2IdMap[ pyra->GetNode( 4 )],
END_ELEM_WRITE( pyra );
}
}
- if(myNodeActor->GetPointsLabeled()){
+ if(myNodeActor->GetPointsLabeled()) {
+ myNodeActor->UpdateLabels();
myNodeActor->VisibilityOn();
}
-
if(my0DActor)
my0DActor->UpdateLabels();
void SMESH_ActorDef::Render(vtkRenderer *ren)
{
- unsigned long aTime = myTimeStamp->GetMTime();
- unsigned long anObjTime = myVisualObj->GetUnstructuredGrid()->GetMTime();
- unsigned long aClippingTime = myImplicitBoolean->GetMTime();
+ vtkMTimeType aTime = myTimeStamp->GetMTime();
+ vtkMTimeType anObjTime = myVisualObj->GetUnstructuredGrid()->GetMTime();
+ vtkMTimeType aClippingTime = myImplicitBoolean->GetMTime();
if(anObjTime > aTime || aClippingTime > aTime)
Update();
}
myClsTextProp->SetBold( bold );
myClsTextProp->SetItalic( italic );
myClsTextProp->SetShadow( shadow );
- myClsTextProp->SetColor( r, g, b );
+ myClsTextProp->SetColor( r, g, b );
}
void SMESH_CellLabelActor::SetCellsLabeled(bool theIsCellsLabeled)
{
+ myIsCellsLabeled = theIsCellsLabeled;
+
+ myCellsLabels->SetVisibility(false);
+
myTransformFilter->Update();
vtkUnstructuredGrid* aGrid = vtkUnstructuredGrid::SafeDownCast(myTransformFilter->GetOutput());
- if ( !aGrid )
- return;
- myIsCellsLabeled = theIsCellsLabeled && aGrid->GetNumberOfPoints();
- if ( myIsCellsLabeled )
+ if ( myIsCellsLabeled && aGrid )
{
myCellsNumDataSet->ShallowCopy(aGrid);
vtkUnstructuredGrid *aDataSet = myCellsNumDataSet;
aDataSet->GetCellData()->SetScalars(anArray);
myCellCenters->SetInputData(aDataSet);
myCellsLabels->SetVisibility(GetVisibility());
- }else{
- myCellsLabels->SetVisibility(false);
}
}
-unsigned long int
+vtkMTimeType
SMESH_DeviceActor
::GetMTime()
{
// << " " << myTransformFilter->GetMTime()
// << " " << myFaceOrientationFilter->GetMTime() << endl;
- unsigned long mTime = this->Superclass::GetMTime();
+ vtkMTimeType mTime = this->Superclass::GetMTime();
mTime = max(mTime,myExtractGeometry->GetMTime());
mTime = max(mTime,myExtractUnstructuredGrid->GetMTime());
mTime = max(mTime,myMergeFilter->GetMTime());
virtual vtkCell* GetElemCell(int theObjID);
virtual void SetTransform(VTKViewer_Transform* theTransform);
- virtual unsigned long int GetMTime();
+ virtual vtkMTimeType GetMTime();
virtual void SetFacesOriented(bool theIsFacesOriented);
virtual bool GetFacesOriented() { return myIsFacesOriented; }
/*!
Constructor.
*/
-SMESH_NodeLabelActor::SMESH_NodeLabelActor() {
+SMESH_NodeLabelActor::SMESH_NodeLabelActor()
+{
//Definition of points numbering pipeline
//---------------------------------------
myPointsNumDataSet = vtkUnstructuredGrid::New();
myPtsSelectVisiblePoints->SetInputConnection(myPtsMaskPoints->GetOutputPort());
myPtsSelectVisiblePoints->SelectInvisibleOff();
myPtsSelectVisiblePoints->SetTolerance(0.1);
-
+
myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
myPtsLabeledDataMapper->SetInputConnection(myPtsSelectVisiblePoints->GetOutputPort());
myPtsLabeledDataMapper->SetLabelFormat("%d");
myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
-
+
myPtsTextProp = vtkTextProperty::New();
myPtsTextProp->SetFontFamilyToTimes();
myPtsTextProp->SetFontSize(10);
/*!
Destructor
*/
-SMESH_NodeLabelActor::~SMESH_NodeLabelActor() {
+SMESH_NodeLabelActor::~SMESH_NodeLabelActor()
+{
//Deleting of points numbering pipeline
//---------------------------------------
myPointsNumDataSet->Delete();
-
+
// commented: porting to vtk 5.0
// myPtsLabeledDataMapper->RemoveAllInputs();
myPtsLabeledDataMapper->Delete();
-
+
// commented: porting to vtk 5.0
// myPtsSelectVisiblePoints->UnRegisterAllOutputs();
myPtsSelectVisiblePoints->Delete();
-
+
// commented: porting to vtk 5.0
// myPtsMaskPoints->UnRegisterAllOutputs();
myPtsMaskPoints->Delete();
myPtsTextProp->SetColor( r, g, b );
}
-void SMESH_NodeLabelActor::SetPointsLabeled(bool theIsPointsLabeled) {
+void SMESH_NodeLabelActor::SetPointsLabeled(bool theIsPointsLabeled)
+{
+ myIsPointsLabeled = theIsPointsLabeled;
+
+ myPointLabels->SetVisibility( false );
+
myTransformFilter->Update();
vtkDataSet* aGrid = vtkUnstructuredGrid::SafeDownCast(myTransformFilter->GetOutput());
- if(!aGrid)
- return;
-
- myIsPointsLabeled = theIsPointsLabeled && aGrid->GetNumberOfPoints();
-
- if ( myIsPointsLabeled )
+ if ( myIsPointsLabeled && aGrid )
{
myPointsNumDataSet->ShallowCopy(aGrid);
vtkUnstructuredGrid *aDataSet = myPointsNumDataSet;
myPointLabels->SetVisibility( GetVisibility() );
anArray->Delete();
}
- else
- {
- myPointLabels->SetVisibility( false );
- }
}
SMESH_DeviceActor::RemoveFromRender(theRenderer);
}
-void SMESH_NodeLabelActor::UpdateLabels() {
+void SMESH_NodeLabelActor::UpdateLabels()
+{
if(myIsPointsLabeled)
SetPointsLabeled(myIsPointsLabeled);
}
void SMESH_NodeLabelActor::ProcessEvents(vtkObject* vtkNotUsed(theObject),
unsigned long theEvent,
void* theClientData,
- void* vtkNotUsed(theCallData)) {
- SMESH_NodeLabelActor* self = reinterpret_cast<SMESH_NodeLabelActor*>(theClientData);
+ void* vtkNotUsed(theCallData))
+{
+ SMESH_NodeLabelActor* self = reinterpret_cast<SMESH_NodeLabelActor*>(theClientData);
if(self)
self->UpdateLabels();
}
}
//! get last modification timeStamp
-unsigned long SMDS_Mesh::GetMTime() const
+vtkMTimeType SMDS_Mesh::GetMTime() const
{
return this->myModifTime;
}
inline void setMyModified() { this->myModified = true; }
void Modified();
- unsigned long GetMTime() const;
+ vtkMTimeType GetMTime() const;
bool isCompacted();
protected:
{
}
-unsigned long SMDS_UnstructuredGrid::GetMTime()
+vtkMTimeType SMDS_UnstructuredGrid::GetMTime()
{
- unsigned long mtime = vtkUnstructuredGrid::GetMTime();
+ vtkMTimeType mtime = vtkUnstructuredGrid::GetMTime();
return mtime;
}
int newNodeSize,
std::vector<int>& idCellsOldToNew,
int newCellSize);
- virtual unsigned long GetMTime();
+ virtual vtkMTimeType GetMTime();
virtual vtkPoints *GetPoints();
int InsertNextLinkedCell(int type, int npts, vtkIdType *pts);
vector<SMESH_subMesh*>::iterator onlyBIt = onlyOrderedList.begin();
vector<SMESH_subMesh*>::iterator onlyEIt = onlyOrderedList.end();
- // iterate on ordered submeshes and insert them in detected positions
+ // iterate on ordered sub-meshes and insert them in detected positions
map< int, TPosInList >::iterator i_pos = sortedPos.begin();
for ( ; onlyBIt != onlyEIt; ++onlyBIt, ++i_pos )
*(i_pos->second) = *onlyBIt;
const SMESH_subMesh* smAfter ) const
{
TListOfListOfInt::const_iterator listIdsIt = _mySubMeshOrder.begin();
- TListOfInt::const_iterator idBef, idAft;
for( ; listIdsIt != _mySubMeshOrder.end(); listIdsIt++)
{
const TListOfInt& listOfId = *listIdsIt;
- idBef = std::find( listOfId.begin(), listOfId.end(), smBefore->GetId() );
- if ( idBef != listOfId.end() )
- idAft = std::find( listOfId.begin(), listOfId.end(), smAfter->GetId() );
- if ( idAft != listOfId.end () )
- return ( std::distance( listOfId.begin(), idBef ) <
- std::distance( listOfId.begin(), idAft ) );
+ int iB = -1, iA = -1, i = 0;
+ for ( TListOfInt::const_iterator id = listOfId.begin(); id != listOfId.end(); ++id, ++i )
+ {
+ if ( *id == smBefore->GetId() )
+ {
+ iB = i;
+ if ( iA > -1 )
+ return iB < iA;
+ }
+ else if ( *id == smAfter->GetId() )
+ {
+ iA = i;
+ if ( iB > -1 )
+ return iB < iA;
+ }
+ }
}
- return true; // no order imposed to given submeshes
+ return true; // no order imposed to given sub-meshes
}
//=============================================================================
TopoDS_Shape s0 = GetSubShapeByNode( nn[0], GetMeshDS() );
TopoDS_Shape s1 = GetSubShapeByNode( nn[1], GetMeshDS() );
TopoDS_Shape E = GetCommonAncestor( s0, s1, *myMesh, TopAbs_EDGE );
- if ( !E.IsNull() && !s0.IsSame( s1 ))
+ if ( !E.IsNull() && !s0.IsSame( s1 ) && E.Orientation() != TopAbs_INTERNAL )
{
// is E seam edge?
int nb = 0;
#define UnLoadLib( handle ) FreeLibrary( handle );
#else
#define LibHandle void*
-#define LoadLib( name ) dlopen( name, RTLD_LAZY )
+#define LoadLib( name ) dlopen( name, RTLD_LAZY | RTLD_GLOBAL )
#define GetProc dlsym
#define UnLoadLib( handle ) dlclose( handle );
#endif
#define UnLoadLib( handle ) FreeLibrary( handle );
#else
#define LibHandle void*
- #define LoadLib( name ) dlopen( name, RTLD_LAZY )
+ #define LoadLib( name ) dlopen( name, RTLD_LAZY | RTLD_GLOBAL )
#define GetProc dlsym
#define UnLoadLib( handle ) dlclose( handle );
#endif
if ((int) u2node.size() + nbProxyNodes != myNbPonits &&
(int) u2node.size() + nbProxyNodes != NbPoints( /*update=*/true ))
{
- MESSAGE("Wrong node parameters on edges, u2node.size():"
- <<u2node.size()<<" != myNbPonits:"<<myNbPonits);
+ return myPoints;
+ }
+ if (( myNbPonits > 0 ) &&
+ ( u2node.begin()->first < 0 || u2node.rbegin()->first > 1 ))
+ {
return myPoints;
}
bool _isBase; /* is used in a base FACE */
EdgeWithNeighbors(const TopoDS_Edge& E, int iE, int nbE, int shift, bool isBase ):
_edge( E ), _iBase( iE + shift ),
- _iL( SMESH_MesherHelper::WrapIndex( iE-1, nbE ) + shift ),
- _iR( SMESH_MesherHelper::WrapIndex( iE+1, nbE ) + shift ),
+ _iL( SMESH_MesherHelper::WrapIndex( iE-1, Max( 1, nbE )) + shift ),
+ _iR( SMESH_MesherHelper::WrapIndex( iE+1, Max( 1, nbE )) + shift ),
_isBase( isBase )
{
}
edges[ iFirst ]._iL = edges[ iFirst ]._iBase; // connect to self
edges[ iLast ]._iR = edges[ iLast ]._iBase;
- // look for an EDGE of the outer WIRE connected to vv
+ // look for an EDGE of the outer WIREs connected to vv
TopoDS_Vertex v0, v1;
- for ( iE = 0; iE < nbEdgesInWires.front(); ++iE )
+ for ( iE = 0; iE < iFirst; ++iE )
{
v0 = SMESH_MesherHelper::IthVertex( 0, edges[ iE ]._edge );
v1 = SMESH_MesherHelper::IthVertex( 1, edges[ iE ]._edge );
if ( vv[0].IsSame( v0 ) || vv[0].IsSame( v1 ))
edges[ iFirst ]._iL = edges[ iE ]._iBase;
if ( vv[1].IsSame( v0 ) || vv[1].IsSame( v1 ))
- edges[ iLast ]._iR = edges[ iE ]._iBase;
+ edges[ iLast ]._iR = edges[ iE ]._iBase;
}
}
iFirst += *nbE;
#include <utilities.h>
+#include <BRepAdaptor_Curve.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRepMesh_Delaun.hxx>
#include <BRep_Tool.hxx>
#include <Bnd_B2d.hxx>
#include <GeomAPI_ProjectPointOnSurf.hxx>
#include <GeomLib_IsPlanarSurface.hxx>
+#include <Precision.hxx>
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
#include <TopTools_DataMapIteratorOfDataMapOfShapeShape.hxx>
SMESH_MesherHelper srcHelper( *srcMesh );
srcHelper.SetSubShape( srcFace );
+ SMESH_MesherHelper edgeHelper( *tgtMesh );
+ edgeHelper.ToFixNodeParameters( true );
const SMDS_MeshNode* nullNode = 0;
TAssocTool::TNodeNodeMap::iterator srcN_tgtN;
}
case SMDS_TOP_EDGE:
{
- const TopoDS_Shape & srcE = srcMeshDS->IndexToShape( srcNode->getshapeId() );
- const TopoDS_Shape & tgtE = shape2ShapeMap( srcE, /*isSrc=*/true );
- double srcU = srcHelper.GetNodeU( TopoDS::Edge( srcE ), srcNode );
- tgtMeshDS->SetNodeOnEdge( n, TopoDS::Edge( tgtE ), srcU );
+ const TopoDS_Edge& srcE = TopoDS::Edge( srcMeshDS->IndexToShape( srcNode->getshapeId()));
+ const TopoDS_Edge& tgtE = TopoDS::Edge( shape2ShapeMap( srcE, /*isSrc=*/true ));
+ double srcU = srcHelper.GetNodeU( srcE, srcNode );
+ tgtMeshDS->SetNodeOnEdge( n, tgtE, srcU );
+ if ( !tgtFace.IsPartner( srcFace ))
+ {
+ bool isOk = true;
+ edgeHelper.SetSubShape( tgtE );
+ edgeHelper.GetNodeU( tgtE, n, 0, &isOk );
+ if ( !isOk ) // projection of n to tgtE failed (23395)
+ {
+ double sF, sL, tF, tL;
+ BRep_Tool::Range( srcE, sF, sL );
+ BRep_Tool::Range( tgtE, tF, tL );
+ double srcR = ( srcU - sF ) / ( sL - sF );
+ double tgtU = tF + srcR * ( tL - tF );
+ tgtMeshDS->SetNodeOnEdge( n, tgtE, tgtU );
+ gp_Pnt newP = BRepAdaptor_Curve( tgtE ).Value( tgtU );
+ double dist = newP.Distance( tgtP );
+ double tol = BRep_Tool::Tolerance( tgtE );
+ if ( tol < dist && dist < 1000*tol )
+ tgtMeshDS->MoveNode( n, newP.X(), newP.Y(), newP.Z() );
+ }
+ }
break;
}
case SMDS_TOP_VERTEX:
if ( !tgtFace.IsPartner( srcFace ) )
{
- SMESH_MesherHelper edgeHelper( *tgtMesh );
- edgeHelper.ToFixNodeParameters( true );
helper.ToFixNodeParameters( true );
int nbOkPos = 0;
- bool toCheck = true;
const double tol2d = 1e-12;
srcN_tgtN = src2tgtNodes.begin();
for ( ; srcN_tgtN != src2tgtNodes.end(); ++srcN_tgtN )
}
case SMDS_TOP_EDGE:
{
- const TopoDS_Edge & tgtE = TopoDS::Edge( tgtMeshDS->IndexToShape( n->getshapeId() ));
- edgeHelper.SetSubShape( tgtE );
- edgeHelper.GetNodeU( tgtE, n, 0, &toCheck );
+ // const TopoDS_Edge & tgtE = TopoDS::Edge( tgtMeshDS->IndexToShape( n->getshapeId() ));
+ // edgeHelper.SetSubShape( tgtE );
+ // edgeHelper.GetNodeU( tgtE, n, 0, &toCheck );
break;
}
default:;
}
myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( mesh );
- GetImpl()->SetSourceMesh ( meshImpl );
- GetImpl()->SetSourceEdge ( shapes[ SRC_EDGE ] );
- GetImpl()->SetVertexAssociation( shapes[ SRC_VERTEX ],
- shapes[ TGT_VERTEX ]);
-
+ try {
+ GetImpl()->SetSourceMesh ( meshImpl );
+ GetImpl()->SetSourceEdge ( shapes[ SRC_EDGE ] );
+ GetImpl()->SetVertexAssociation( shapes[ SRC_VERTEX ],
+ shapes[ TGT_VERTEX ]);
+ }
+ catch (...) {
+ }
myBaseImpl->LoadFrom( is );
std::istringstream str( theStream );
myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( mesh );
- GetImpl()->SetSourceMesh ( meshImpl );
- GetImpl()->SetSourceFace ( shapes[ SRC_FACE ] );
- GetImpl()->SetVertexAssociation( shapes[ SRC_VERTEX1 ],
- shapes[ SRC_VERTEX2 ],
- shapes[ TGT_VERTEX1 ],
- shapes[ TGT_VERTEX2 ]);
+ try {
+ GetImpl()->SetSourceMesh ( meshImpl );
+ GetImpl()->SetSourceFace ( shapes[ SRC_FACE ] );
+ GetImpl()->SetVertexAssociation( shapes[ SRC_VERTEX1 ],
+ shapes[ SRC_VERTEX2 ],
+ shapes[ TGT_VERTEX1 ],
+ shapes[ TGT_VERTEX2 ]);
+ }
+ catch( ... ) {
+ }
myBaseImpl->LoadFrom( is );
std::istringstream str( theStream );
//================================================================================
/*!
* \brief Write parameters in a string
- * \retval char* - resulting string
+ * \retval char* - resulting string
*/
//================================================================================
//================================================================================
/*!
* \brief Retrieve parameters from the string
- * \param theStream - the input string
+ * \param theStream - the input string
*/
//================================================================================
myCorbaMesh = SMESH::SMESH_Mesh::_duplicate( mesh );
- GetImpl()->SetSourceMesh ( meshImpl );
- GetImpl()->SetSource3DShape ( shapes[ SRC_SHAPE3D ] );
- GetImpl()->SetVertexAssociation( shapes[ SRC_VERTEX1 ],
- shapes[ SRC_VERTEX2 ],
- shapes[ TGT_VERTEX1 ],
- shapes[ TGT_VERTEX2 ]);
-
+ try {
+ GetImpl()->SetSourceMesh ( meshImpl );
+ GetImpl()->SetSource3DShape ( shapes[ SRC_SHAPE3D ] );
+ GetImpl()->SetVertexAssociation( shapes[ SRC_VERTEX1 ],
+ shapes[ SRC_VERTEX2 ],
+ shapes[ TGT_VERTEX1 ],
+ shapes[ TGT_VERTEX2 ]);
+ }
+ catch (...) {
+ }
myBaseImpl->LoadFrom( is );
std::istringstream str( theStream );
for ( int i = 0; i < nb; ++i )
shapes.push_back( StdMeshers_ObjRefUlils::LoadFromStream( is, & myShapeEntries[i] ));
- GetImpl()->SetEnforcedNodes( shapes, points );
+ try {
+ GetImpl()->SetEnforcedNodes( shapes, points );
+ }
+ catch (...) {
+ }
}
}