X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FBLSURFPlugin%2FBLSURFPlugin_BLSURF.cxx;h=ca54cf399db7228228ada1e08581c449c731623d;hb=0d3082a841df02944ed867bbdfee21658fa17224;hp=fbb7a8f20d418d769f4a4fefdb5e9528bbce3aa1;hpb=5f72ca855ecba6919607eacb0786df8b14682e13;p=plugins%2Fblsurfplugin.git diff --git a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx index fbb7a8f..ca54cf3 100644 --- a/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx +++ b/src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -31,7 +31,6 @@ extern "C"{ #include #include -#include } #include @@ -96,6 +95,8 @@ extern "C"{ #include #endif +using namespace std; + /* ================================== * =========== PYTHON ============== * ==================================*/ @@ -578,7 +579,7 @@ void createAttractorOnFace(TopoDS_Shape GeomShape, std::string AttractorFunction double a, b; // Attractor parameter double d = 0.; bool createNode=false; // To create a node on attractor projection - int pos1, pos2; + size_t pos1, pos2; const char *sep = ";"; // atIt->second has the following pattern: // ATTRACTOR(xa;ya;za;a;b;True|False;d) @@ -766,7 +767,7 @@ void BLSURFPlugin_BLSURF::addCoordsFromVertex(BLSURFPlugin_Hypothesis::TEntry th ///////////////////////////////////////////////////////// void BLSURFPlugin_BLSURF::createPreCadFacesPeriodicity(TopoDS_Shape theGeomShape, const BLSURFPlugin_Hypothesis::TPreCadPeriodicity &preCadPeriodicity) { - MESSAGE("BLSURFPlugin_BLSURF::createFacesPeriodicity"); + MESSAGE("BLSURFPlugin_BLSURF::createPreCadFacesPeriodicity"); TopoDS_Shape geomShape1 = entryToShape(preCadPeriodicity.shape1Entry); TopoDS_Shape geomShape2 = entryToShape(preCadPeriodicity.shape2Entry); @@ -789,14 +790,14 @@ void BLSURFPlugin_BLSURF::createPreCadFacesPeriodicity(TopoDS_Shape theGeomShape _preCadFacesIDsPeriodicityVector.push_back(preCadFacesPeriodicityIDs); MESSAGE("_preCadFacesIDsPeriodicityVector.size() = " << _preCadFacesIDsPeriodicityVector.size()); - MESSAGE("BLSURFPlugin_BLSURF::createFacesPeriodicity END"); + MESSAGE("BLSURFPlugin_BLSURF::createPreCadFacesPeriodicity END"); } ///////////////////////////////////////////////////////// void BLSURFPlugin_BLSURF::createPreCadEdgesPeriodicity(TopoDS_Shape theGeomShape, const BLSURFPlugin_Hypothesis::TPreCadPeriodicity &preCadPeriodicity) { - MESSAGE("BLSURFPlugin_BLSURF::createEdgesPeriodicity"); + MESSAGE("BLSURFPlugin_BLSURF::createPreCadEdgesPeriodicity"); TopoDS_Shape geomShape1 = entryToShape(preCadPeriodicity.shape1Entry); TopoDS_Shape geomShape2 = entryToShape(preCadPeriodicity.shape2Entry); @@ -813,125 +814,16 @@ void BLSURFPlugin_BLSURF::createPreCadEdgesPeriodicity(TopoDS_Shape theGeomShape _preCadEdgesIDsPeriodicityVector.push_back(preCadEdgesPeriodicityIDs); MESSAGE("_preCadEdgesIDsPeriodicityVector.size() = " << _preCadEdgesIDsPeriodicityVector.size()); - MESSAGE("BLSURFPlugin_BLSURF::createEdgesPeriodicity END"); - -} - -///////////////////////////////////////////////////////// -void BLSURFPlugin_BLSURF::createFacesPeriodicity(TopoDS_Shape theGeomShape, BLSURFPlugin_Hypothesis::TEntry theFace1, BLSURFPlugin_Hypothesis::TEntry theFace2) -{ - MESSAGE("BLSURFPlugin_BLSURF::createFacesPeriodicity"); - - TopoDS_Shape GeomShape1 = entryToShape(theFace1); - TopoDS_Shape GeomShape2 = entryToShape(theFace2); - - TListOfIDs theFace1_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomShape1, TopAbs_FACE); - TListOfIDs theFace2_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomShape2, TopAbs_FACE); - - // Only one face id, since only a face can be selected - int theFace1_id = theFace1_ids[0]; - int theFace2_id = theFace2_ids[0]; - - std::pair pairOfFacesID = std::make_pair(theFace1_id, theFace2_id); - - _facesIDsPeriodicityVector.push_back(pairOfFacesID); - MESSAGE("_facesIDsPeriodicityVector.size() = " << _facesIDsPeriodicityVector.size()); - MESSAGE("BLSURFPlugin_BLSURF::createFacesPeriodicity END"); - -} - - -///////////////////////////////////////////////////////// -void BLSURFPlugin_BLSURF::createEdgesPeriodicity(TopoDS_Shape theGeomShape, BLSURFPlugin_Hypothesis::TEntry theFace1, BLSURFPlugin_Hypothesis::TEntry theEdge1, - BLSURFPlugin_Hypothesis::TEntry theFace2, BLSURFPlugin_Hypothesis::TEntry theEdge2, int edge_orientation) -{ - MESSAGE("BLSURFPlugin_BLSURF::createEdgesPeriodicity"); - - TEdgePeriodicityIDs edgePeriodicityIDs; - - if (theFace1 != "") - { - TopoDS_Shape GeomFace1 = entryToShape(theFace1); - TListOfIDs theFace1_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomFace1, TopAbs_FACE); - // Only one face id, since only a face can be selected - edgePeriodicityIDs.theFace1ID = theFace1_ids[0]; - } - else - edgePeriodicityIDs.theFace1ID = 0; - if (theFace2 != "") - { - TopoDS_Shape GeomFace2 = entryToShape(theFace2); - TListOfIDs theFace2_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomFace2, TopAbs_FACE); - edgePeriodicityIDs.theFace2ID = theFace2_ids[0]; - } - else - edgePeriodicityIDs.theFace2ID = 0; - - TopoDS_Shape GeomEdge1 = entryToShape(theEdge1); - TopoDS_Shape GeomEdge2 = entryToShape(theEdge2); - - TListOfIDs theEdge1_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomEdge1, TopAbs_EDGE); - TListOfIDs theEdge2_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomEdge2, TopAbs_EDGE); - - if (edge_orientation == 0 && GeomEdge1.Closed()) - { - // if edge is closed, we have to set its orientation - MESSAGE("GeomEdge1.Orientation() = " << GeomEdge1.Orientation()); - MESSAGE("GeomEdge2.Orientation() = " << GeomEdge2.Orientation()); - if(GeomEdge1.Orientation() == TopAbs_FORWARD) - edge_orientation = CAD_ORIENTATION_REVERSED; - else - edge_orientation = CAD_ORIENTATION_FORWARD; - } - - // Only one edge id, since only a edge can be selected - edgePeriodicityIDs.theEdge1ID = theEdge1_ids[0]; - edgePeriodicityIDs.theEdge2ID = theEdge2_ids[0]; - edgePeriodicityIDs.edge_orientation = edge_orientation; - - _edgesIDsPeriodicityVector.push_back(edgePeriodicityIDs); - MESSAGE("_edgesIDsPeriodicityVector.size() = " << _edgesIDsPeriodicityVector.size()); - MESSAGE("BLSURFPlugin_BLSURF::createEdgesPeriodicity END"); + MESSAGE("BLSURFPlugin_BLSURF::createPreCadEdgesPeriodicity END"); } -///////////////////////////////////////////////////////// -void BLSURFPlugin_BLSURF::createVerticesPeriodicity(TopoDS_Shape theGeomShape, BLSURFPlugin_Hypothesis::TEntry theEdge1, BLSURFPlugin_Hypothesis::TEntry theVertex1, - BLSURFPlugin_Hypothesis::TEntry theEdge2, BLSURFPlugin_Hypothesis::TEntry theVertex2) -{ - MESSAGE("BLSURFPlugin_BLSURF::createVerticesPeriodicity"); - - TopoDS_Shape GeomEdge1 = entryToShape(theEdge1); - TopoDS_Shape GeomVertex1 = entryToShape(theVertex1); - TopoDS_Shape GeomEdge2 = entryToShape(theEdge2); - TopoDS_Shape GeomVertex2 = entryToShape(theVertex2); - - TListOfIDs theEdge1_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomEdge1, TopAbs_EDGE); - TListOfIDs vertices1_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomVertex1, TopAbs_VERTEX); - TListOfIDs theEdge2_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomEdge2, TopAbs_EDGE); - TListOfIDs vertices2_ids = _getSubShapeIDsInMainShape(theGeomShape, GeomVertex2, TopAbs_VERTEX); - - // Only one vertex id, since only a vertex can be selected - TVertexPeriodicityIDs vertexPeriodicityIDs; - vertexPeriodicityIDs.theEdge1ID = theEdge1_ids[0]; - vertexPeriodicityIDs.theVertex1ID = vertices1_ids[0]; - vertexPeriodicityIDs.theEdge2ID = theEdge2_ids[0]; - vertexPeriodicityIDs.theVertex2ID = vertices2_ids[0]; - - _verticesIDsPeriodicityVector.push_back(vertexPeriodicityIDs); - MESSAGE("_verticesIDsPeriodicityVector.size() = " << _verticesIDsPeriodicityVector.size()); - MESSAGE("BLSURFPlugin_BLSURF::createVerticesPeriodicity END"); - -} - ///////////////////////////////////////////////////////// void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, cadsurf_session_t * css, - precad_session_t * pcs, - const TopoDS_Shape& theGeomShape, - bool * use_precad + const TopoDS_Shape& theGeomShape ) { // rnc : Bug 1457 @@ -948,7 +840,10 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, bool _minSizeRel = BLSURFPlugin_Hypothesis::GetDefaultMinSizeRel(); double _maxSize = BLSURFPlugin_Hypothesis::GetDefaultMaxSize(diagonal); bool _maxSizeRel = BLSURFPlugin_Hypothesis::GetDefaultMaxSizeRel(); + double _use_gradation = BLSURFPlugin_Hypothesis::GetDefaultUseGradation(); double _gradation = BLSURFPlugin_Hypothesis::GetDefaultGradation(); + double _use_volume_gradation = BLSURFPlugin_Hypothesis::GetDefaultUseVolumeGradation(); + double _volume_gradation = BLSURFPlugin_Hypothesis::GetDefaultVolumeGradation(); bool _quadAllowed = BLSURFPlugin_Hypothesis::GetDefaultQuadAllowed(); double _angleMesh = BLSURFPlugin_Hypothesis::GetDefaultAngleMesh(); double _chordalError = BLSURFPlugin_Hypothesis::GetDefaultChordalError(diagonal); @@ -956,17 +851,23 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, double _anisotropicRatio = BLSURFPlugin_Hypothesis::GetDefaultAnisotropicRatio(); bool _removeTinyEdges = BLSURFPlugin_Hypothesis::GetDefaultRemoveTinyEdges(); double _tinyEdgeLength = BLSURFPlugin_Hypothesis::GetDefaultTinyEdgeLength(diagonal); + bool _optimiseTinyEdges = BLSURFPlugin_Hypothesis::GetDefaultOptimiseTinyEdges(); + double _tinyEdgeOptimisLength = BLSURFPlugin_Hypothesis::GetDefaultTinyEdgeOptimisationLength(diagonal); + bool _correctSurfaceIntersec= BLSURFPlugin_Hypothesis::GetDefaultCorrectSurfaceIntersection(); + double _corrSurfaceIntersCost = BLSURFPlugin_Hypothesis::GetDefaultCorrectSurfaceIntersectionMaxCost(); bool _badElementRemoval = BLSURFPlugin_Hypothesis::GetDefaultBadElementRemoval(); double _badElementAspectRatio = BLSURFPlugin_Hypothesis::GetDefaultBadElementAspectRatio(); bool _optimizeMesh = BLSURFPlugin_Hypothesis::GetDefaultOptimizeMesh(); bool _quadraticMesh = BLSURFPlugin_Hypothesis::GetDefaultQuadraticMesh(); int _verb = BLSURFPlugin_Hypothesis::GetDefaultVerbosity(); - int _topology = BLSURFPlugin_Hypothesis::GetDefaultTopology(); + //int _topology = BLSURFPlugin_Hypothesis::GetDefaultTopology(); // PreCAD - int _precadMergeEdges = BLSURFPlugin_Hypothesis::GetDefaultPreCADMergeEdges(); + //int _precadMergeEdges = BLSURFPlugin_Hypothesis::GetDefaultPreCADMergeEdges(); + int _precadRemoveTinyUVEdges = BLSURFPlugin_Hypothesis::GetDefaultPreCADRemoveTinyUVEdges(); + //int _precadRemoveDuplicateCADFaces = BLSURFPlugin_Hypothesis::GetDefaultPreCADRemoveDuplicateCADFaces(); int _precadProcess3DTopology = BLSURFPlugin_Hypothesis::GetDefaultPreCADProcess3DTopology(); - int _precadDiscardInput = BLSURFPlugin_Hypothesis::GetDefaultPreCADDiscardInput(); + //int _precadDiscardInput = BLSURFPlugin_Hypothesis::GetDefaultPreCADDiscardInput(); if (hyp) { @@ -988,8 +889,12 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, // if max size is not explicitly specified, "relative" flag is ignored _maxSizeRel = hyp->IsMaxSizeRel(); } - if (hyp->GetGradation() > 0) + _use_gradation = hyp->GetUseGradation(); + if (hyp->GetGradation() > 0 && _use_gradation) _gradation = hyp->GetGradation(); + _use_volume_gradation = hyp->GetUseVolumeGradation(); + if (hyp->GetVolumeGradation() > 0 && _use_volume_gradation ) + _volume_gradation = hyp->GetVolumeGradation(); _quadAllowed = hyp->GetQuadAllowed(); if (hyp->GetAngleMesh() > 0) _angleMesh = hyp->GetAngleMesh(); @@ -1001,17 +906,25 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, _removeTinyEdges = hyp->GetRemoveTinyEdges(); if (hyp->GetTinyEdgeLength() > 0) _tinyEdgeLength = hyp->GetTinyEdgeLength(); + _optimiseTinyEdges = hyp->GetOptimiseTinyEdges(); + if (hyp->GetTinyEdgeOptimisationLength() > 0) + _tinyEdgeOptimisLength = hyp->GetTinyEdgeOptimisationLength(); + _correctSurfaceIntersec = hyp->GetCorrectSurfaceIntersection(); + if (hyp->GetCorrectSurfaceIntersectionMaxCost() > 0) + _corrSurfaceIntersCost = hyp->GetCorrectSurfaceIntersectionMaxCost(); _badElementRemoval = hyp->GetBadElementRemoval(); if (hyp->GetBadElementAspectRatio() >= 0) _badElementAspectRatio = hyp->GetBadElementAspectRatio(); _optimizeMesh = hyp->GetOptimizeMesh(); _quadraticMesh = hyp->GetQuadraticMesh(); _verb = hyp->GetVerbosity(); - _topology = (int) hyp->GetTopology(); + //_topology = (int) hyp->GetTopology(); // PreCAD - _precadMergeEdges = hyp->GetPreCADMergeEdges(); + //_precadMergeEdges = hyp->GetPreCADMergeEdges(); + _precadRemoveTinyUVEdges = hyp->GetPreCADRemoveTinyUVEdges(); + //_precadRemoveDuplicateCADFaces = hyp->GetPreCADRemoveDuplicateCADFaces(); _precadProcess3DTopology = hyp->GetPreCADProcess3DTopology(); - _precadDiscardInput = hyp->GetPreCADDiscardInput(); + //_precadDiscardInput = hyp->GetPreCADDiscardInput(); const BLSURFPlugin_Hypothesis::TOptionValues& opts = hyp->GetOptionValues(); BLSURFPlugin_Hypothesis::TOptionValues::const_iterator opIt; @@ -1031,41 +944,18 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, const BLSURFPlugin_Hypothesis::TOptionValues& preCADopts = hyp->GetPreCADOptionValues(); for ( opIt = preCADopts.begin(); opIt != preCADopts.end(); ++opIt ) if ( !opIt->second.empty() ) { - *use_precad = true; - MESSAGE("precad_set_param(): " << opIt->first << " = " << opIt->second); - precad_set_param(pcs, opIt->first.c_str(), opIt->second.c_str()); - } - - const BLSURFPlugin_Hypothesis::TOptionValues& custom_preCADopts = hyp->GetCustomPreCADOptionValues(); - for ( opIt = custom_preCADopts.begin(); opIt != custom_preCADopts.end(); ++opIt ) - if ( !opIt->second.empty() ) { - *use_precad = true; - MESSAGE("precad_set_param(): " << opIt->first << " = " << opIt->second); - precad_set_param(pcs, opIt->first.c_str(), opIt->second.c_str()); + MESSAGE("cadsurf_set_param(): " << opIt->first << " = " << opIt->second); + set_param(css, opIt->first.c_str(), opIt->second.c_str()); } } -// else { -// //0020968: EDF1545 SMESH: Problem in the creation of a mesh group on geometry -// // GetDefaultPhySize() sometimes leads to computation failure -// // GDD 26/07/2012 From Distene documentation, global physical size default value = diag/100 -// _phySize = BLSURFPlugin_Hypothesis::GetDefaultPhySize(diagonal); -// _minSize = BLSURFPlugin_Hypothesis::GetDefaultMinSize(diagonal); -// _maxSize = BLSURFPlugin_Hypothesis::GetDefaultMaxSize(diagonal); -// _chordalError = BLSURFPlugin_Hypothesis::GetDefaultChordalError(diagonal); -// _tinyEdgeLength = BLSURFPlugin_Hypothesis::GetDefaultTinyEdgeLength(diagonal); -// MESSAGE("BLSURFPlugin_BLSURF::SetParameters using defaults"); -// } - // PreCAD - if (_topology == BLSURFPlugin_Hypothesis::PreCAD) { - *use_precad = true; - precad_set_param(pcs, "verbose", val_to_string(_verb).c_str()); - precad_set_param(pcs, "merge_edges", _precadMergeEdges ? "1" : "0"); - precad_set_param(pcs, "process_3d_topology", _precadProcess3DTopology ? "1" : "0"); - precad_set_param(pcs, "discard_input_topology", _precadDiscardInput ? "1" : "0"); - } - // unlimit mesh size (issue 0022266) - set_param(css, "max_number_of_points_per_patch", "1000000"); + // PreProcessor (formerly PreCAD) -- commented params are preCADoptions (since 0023307) + //set_param(css, "merge_edges", _precadMergeEdges ? "yes" : "no"); + set_param(css, "remove_tiny_uv_edges", _precadRemoveTinyUVEdges ? "yes" : "no"); + //set_param(css, "remove_duplicate_cad_faces", _precadRemoveDuplicateCADFaces ? "yes" : "no"); + set_param(css, "process_3d_topology", _precadProcess3DTopology ? "1" : "0"); + //set_param(css, "discard_input_topology", _precadDiscardInput ? "1" : "0"); + //set_param(css, "max_number_of_points_per_patch", "1000000"); bool useGradation = false; switch (_physicalMesh) @@ -1129,8 +1019,10 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, // anisotropic and quadrangle mesh requires disabling gradation if ( _anisotropic && _quadAllowed ) useGradation = false; // limitation of V1.3 - if ( useGradation ) - set_param(css, "gradation", val_to_string(_gradation).c_str()); + if ( useGradation && _use_gradation ) + set_param(css, "gradation", val_to_string(_gradation).c_str()); + if ( useGradation && _use_volume_gradation ) + set_param(css, "volume_gradation", val_to_string(_volume_gradation).c_str()); set_param(css, "element_generation", _quadAllowed ? "quad_dominant" : "triangle"); @@ -1140,6 +1032,12 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, set_param(css, "remove_tiny_edges", _removeTinyEdges ? "1" : "0"); if ( _removeTinyEdges ) set_param(css, "tiny_edge_length", val_to_string(_tinyEdgeLength).c_str()); + set_param(css, "optimise_tiny_edges", _optimiseTinyEdges ? "1" : "0"); + if ( _optimiseTinyEdges ) + set_param(css, "tiny_edge_optimisation_length", val_to_string(_tinyEdgeOptimisLength).c_str()); + set_param(css, "correct_surface_intersections", _correctSurfaceIntersec ? "1" : "0"); + if ( _correctSurfaceIntersec ) + set_param(css, "surface_intersections_processing_max_cost", val_to_string(_corrSurfaceIntersCost ).c_str()); set_param(css, "force_bad_surface_element_removal", _badElementRemoval ? "1" : "0"); if ( _badElementRemoval ) set_param(css, "bad_surface_element_aspect_ratio", val_to_string(_badElementAspectRatio).c_str()); @@ -1169,7 +1067,7 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, MESSAGE("Geomtype is " << GeomType); int key = -1; // Group Management - if (GeomType == TopAbs_COMPOUND){ + if (GeomType == TopAbs_COMPOUND) { for (TopoDS_Iterator it (GeomShape); it.More(); it.Next()){ // Group of faces if (it.Value().ShapeType() == TopAbs_FACE){ @@ -1415,36 +1313,15 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, } MESSAGE("Setting Size Map on FACES "); -// #if BLSURF_VERSION_LONG < "3.1.1" - cadsurf_data_set_sizemap_iso_cad_face(css, size_on_surface, &_smp_phy_size); -// #else -// if (*use_precad) -// iso_sizemap_f = sizemap_new(c, distene_sizemap_type_iso_cad_face, (void *)size_on_surface, NULL); -// else -// clean_iso_sizemap_f = sizemap_new(c, distene_sizemap_type_iso_cad_face, (void *)size_on_surface, NULL); -// #endif + cadsurf_set_sizemap_iso_cad_face(css, size_on_surface, &_smp_phy_size); if (HasSizeMapOnEdge){ MESSAGE("Setting Size Map on EDGES "); -// #if BLSURF_VERSION_LONG < "3.1.1" - cadsurf_data_set_sizemap_iso_cad_edge(css, size_on_edge, &_smp_phy_size); -// #else -// if (*use_precad) -// iso_sizemap_e = sizemap_new(c, distene_sizemap_type_iso_cad_edge, (void *)size_on_edge, NULL); -// else -// clean_iso_sizemap_e = sizemap_new(c, distene_sizemap_type_iso_cad_edge, (void *)size_on_edge, NULL); -// #endif + cadsurf_set_sizemap_iso_cad_edge(css, size_on_edge, &_smp_phy_size); } if (HasSizeMapOnVertex){ MESSAGE("Setting Size Map on VERTICES "); -// #if BLSURF_VERSION_LONG < "3.1.1" - cadsurf_data_set_sizemap_iso_cad_point(css, size_on_vertex, &_smp_phy_size); -// #else -// if (*use_precad) -// iso_sizemap_p = sizemap_new(c, distene_sizemap_type_iso_cad_point, (void *)size_on_vertex, NULL); -// else -// clean_iso_sizemap_p = sizemap_new(c, distene_sizemap_type_iso_cad_point, (void *)size_on_vertex, NULL); -// #endif + cadsurf_set_sizemap_iso_cad_point(css, size_on_vertex, &_smp_phy_size); } } @@ -1453,9 +1330,6 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, // reset vectors _preCadFacesIDsPeriodicityVector.clear(); _preCadEdgesIDsPeriodicityVector.clear(); - _facesIDsPeriodicityVector.clear(); - _edgesIDsPeriodicityVector.clear(); - _verticesIDsPeriodicityVector.clear(); MESSAGE("SetParameters preCadFacesPeriodicityVector"); const BLSURFPlugin_Hypothesis::TPreCadPeriodicityVector preCadFacesPeriodicityVector = BLSURFPlugin_Hypothesis::GetPreCadFacesPeriodicityVector(hyp); @@ -1475,44 +1349,6 @@ void BLSURFPlugin_BLSURF::SetParameters(const BLSURFPlugin_Hypothesis* hyp, } MESSAGE("_preCadEdgesIDsPeriodicityVector.size() = " << _preCadEdgesIDsPeriodicityVector.size()); - if ( _preCadFacesIDsPeriodicityVector.size() > 0 || _preCadEdgesIDsPeriodicityVector.size() > 0 ) - { - MESSAGE("USING PRECAD FOR PERIODICITY") - *use_precad = true; - precad_set_param(pcs, "verbose", val_to_string(_verb).c_str()); - } - - MESSAGE("SetParameters facesPeriodicityVector"); - const BLSURFPlugin_Hypothesis::TFacesPeriodicityVector facesPeriodicityVector = BLSURFPlugin_Hypothesis::GetFacesPeriodicityVector(hyp); - - for (std::size_t i = 0; i_error - // => No need to append msg to _comment - if (status > 0) - { - // TODO: fix the SIGSEGV of COMPERR_WARNING with 2 launches - error(COMPERR_WARNING, _comment); - } - if (status < 0) - { - error(_comment); - } - } - else { - // retrieve the pre-processed CAD object - - // dcad - cleandc = precad_new_dcad(pcs); - if(!cleandc){ - cout << "Unable to retrieve PreCAD result on dcad \n"; - } - else - cout << "PreCAD processing successfull on dcad \n"; - - // cad - cleanc = precad_new_cad(pcs); - if(!cleanc){ - cout << "Unable to retrieve PreCAD result on cad \n"; - } - else - cout << "PreCAD processing successfull on cad \n"; - - // #if BLSURF_VERSION_LONG >= "3.1.1" - // /* We can now get the updated sizemaps (if any) */ - // // if(geo_sizemap_e) - // // clean_geo_sizemap_e = precad_new_sizemap(pcs, geo_sizemap_e); - // // - // // if(geo_sizemap_f) - // // clean_geo_sizemap_f = precad_new_sizemap(pcs, geo_sizemap_f); - // - // if(iso_sizemap_p) - // clean_iso_sizemap_p = precad_new_sizemap(pcs, iso_sizemap_p); - // - // if(iso_sizemap_e) - // clean_iso_sizemap_e = precad_new_sizemap(pcs, iso_sizemap_e); - // - // if(iso_sizemap_f) - // clean_iso_sizemap_f = precad_new_sizemap(pcs, iso_sizemap_f); - // #endif - } - // Now we can delete the PreCAD session - precad_session_delete(pcs); - } - - if (cleandc) { - cout << "Give the pre-processed dcad object to the current MG-CADSurf session \n"; - cadsurf_data_set_dcad(css, cleandc); - } - else { - // Use the original one - cadsurf_data_set_dcad(css, dcad); - } + + // TODO: be able to use a mesh in input. + // See imsh usage in Products/templates/mg-cadsurf_template_common.cpp + // => cadsurf_set_mesh + + // Use the original dcad + cadsurf_set_dcad(css, dcad); - if (cleanc) { - // Give the pre-processed CAD object to the current MG-CADSurf session - cout << "Give the pre-processed CAD object to the current MG-CADSurf session \n"; - cadsurf_data_set_cad(css, cleanc); - } - else { - // Use the original one - cadsurf_data_set_cad(css, c); - } + // Use the original cad + cadsurf_set_cad(css, c); std::cout << std::endl; std::cout << "Beginning of Surface Mesh generation" << std::endl; @@ -2786,10 +2495,10 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh& aMesh, std::cout << std::endl; mesh_t *msh = NULL; - cadsurf_data_get_mesh(css, &msh); + cadsurf_get_mesh(css, &msh); if(!msh){ /* release the mesh object */ - cadsurf_data_regain_mesh(css, msh); + cadsurf_regain_mesh(css, msh); return error(_comment); } @@ -2920,10 +2629,10 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh& aMesh, mesh_get_composite_tag_definition(msh, tag, &nb_tag, tags_buff); if(nb_tag > 1) tag=tags_buff[nb_tag-1]; - if ( tag > emap.Extent() ) + if ( tag < 1 || tag > emap.Extent() ) { std::cerr << "MG-CADSurf BUG:::: Edge tag " << tag - << " more than nb CAD egdes (" << emap.Extent() << ")" << std::endl; + << " does not point to a CAD edge (nb edges " << emap.Extent() << ")" << std::endl; continue; } if (tags[vtx[0]]) { @@ -3045,7 +2754,7 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh& aMesh, } /* release the mesh object, the rest is released by cleaner */ - cadsurf_data_regain_mesh(css, msh); + cadsurf_regain_mesh(css, msh); if ( needMerge ) // sew mesh computed by MG-CADSurf with pre-existing mesh { @@ -3092,7 +2801,6 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh& aMesh, } // SetIsAlwaysComputed( true ) to sub-meshes of EDGEs w/o mesh - TopLoc_Location loc; double f,l; for (int i = 1; i <= emap.Extent(); i++) if ( SMESH_subMesh* sm = aMesh.GetSubMeshContaining( emap( i ))) sm->SetIsAlwaysComputed( true );