1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "InterpolationOptions.hxx"
24 const double INTERP_KERNEL::InterpolationOptions::DFT_MEDIAN_PLANE=0.5;
26 const double INTERP_KERNEL::InterpolationOptions::DFT_SURF3D_ADJ_EPS=1.e-4;
28 const double INTERP_KERNEL::InterpolationOptions::DFT_MAX_DIST_3DSURF_INTERSECT=-1.;
30 const char INTERP_KERNEL::InterpolationOptions::PRECISION_STR[]="Precision";
32 const char INTERP_KERNEL::InterpolationOptions::MEDIANE_PLANE_STR[]="MedianPlane";
34 const char INTERP_KERNEL::InterpolationOptions::BOUNDING_BOX_ADJ_STR[]="BoundingBoxAdjustment";
36 const char INTERP_KERNEL::InterpolationOptions::BOUNDING_BOX_ADJ_ABS_STR[]="BoundingBoxAdjustmentAbs";
38 const char INTERP_KERNEL::InterpolationOptions::MAX_DISTANCE_3DSURF_INSECT_STR[]="MaxDistance3DSurfIntersect";
40 const char INTERP_KERNEL::InterpolationOptions::PRINT_LEV_STR[]="PrintLevel";
42 const char INTERP_KERNEL::InterpolationOptions::DO_ROTATE_STR[]="DoRotate";
44 const char INTERP_KERNEL::InterpolationOptions::ORIENTATION_STR[]="Orientation";
46 const char INTERP_KERNEL::InterpolationOptions::MEASURE_ABS_STR[]="MeasureAbs";
48 const char INTERP_KERNEL::InterpolationOptions::INTERSEC_TYPE_STR[]="IntersectionType";
50 const char INTERP_KERNEL::InterpolationOptions::SPLITTING_POLICY_STR[]="SplittingPolicy";
52 const char INTERP_KERNEL::InterpolationOptions::TRIANGULATION_INTERSECT2D_STR[]="Triangulation";
54 const char INTERP_KERNEL::InterpolationOptions::CONVEX_INTERSECT2D_STR[]="Convex";
56 const char INTERP_KERNEL::InterpolationOptions::GEOMETRIC_INTERSECT2D_STR[]="Geometric2D";
58 const char INTERP_KERNEL::InterpolationOptions::POINTLOCATOR_INTERSECT_STR[]="PointLocator";
60 const char INTERP_KERNEL::InterpolationOptions::PLANAR_SPLIT_FACE_5_STR[]="PLANAR_FACE_5";
62 const char INTERP_KERNEL::InterpolationOptions::PLANAR_SPLIT_FACE_6_STR[]="PLANAR_FACE_6";
64 const char INTERP_KERNEL::InterpolationOptions::GENERAL_SPLIT_24_STR[]="GENERAL_24";
66 const char INTERP_KERNEL::InterpolationOptions::GENERAL_SPLIT_48_STR[]="GENERAL_48";
68 std::string INTERP_KERNEL::InterpolationOptions::getIntersectionTypeRepr() const
70 if(_intersection_type==INTERP_KERNEL::Triangulation)
71 return std::string(TRIANGULATION_INTERSECT2D_STR);
72 else if(_intersection_type==INTERP_KERNEL::Convex)
73 return std::string(CONVEX_INTERSECT2D_STR);
74 else if(_intersection_type==INTERP_KERNEL::Geometric2D)
75 return std::string(GEOMETRIC_INTERSECT2D_STR);
76 else if(_intersection_type==INTERP_KERNEL::PointLocator)
77 return std::string(POINTLOCATOR_INTERSECT_STR);
79 return std::string("UNKNOWN_INTERSECT_TYPE");
82 bool INTERP_KERNEL::InterpolationOptions::setOptionDouble(const std::string& key, double value)
84 if(key==PRECISION_STR)
89 else if(key==MEDIANE_PLANE_STR)
91 setMedianPlane(value);
94 else if(key==BOUNDING_BOX_ADJ_STR)
96 setBoundingBoxAdjustment(value);
99 else if(key==BOUNDING_BOX_ADJ_ABS_STR)
101 setBoundingBoxAdjustmentAbs(value);
104 else if(key==MAX_DISTANCE_3DSURF_INSECT_STR)
106 setMaxDistance3DSurfIntersect(value);
113 bool INTERP_KERNEL::InterpolationOptions::setOptionInt(const std::string& key, int value)
115 if(key==PRINT_LEV_STR)
117 setPrintLevel(value);
120 else if(key==DO_ROTATE_STR)
122 setDoRotate(value != 0);
125 else if(key==ORIENTATION_STR)
127 setOrientation(value);
130 else if(key==MEASURE_ABS_STR)
132 bool valBool=(value!=0);
133 setMeasureAbsStatus(valBool);
140 bool INTERP_KERNEL::InterpolationOptions::setOptionString(const std::string& key, const std::string& value)
142 if(key==INTERSEC_TYPE_STR)
144 if(value==TRIANGULATION_INTERSECT2D_STR)
146 setIntersectionType(INTERP_KERNEL::Triangulation);
149 else if(value==CONVEX_INTERSECT2D_STR)
151 setIntersectionType(INTERP_KERNEL::Convex);
154 else if(value==GEOMETRIC_INTERSECT2D_STR)
156 setIntersectionType(INTERP_KERNEL::Geometric2D);
159 else if(value==POINTLOCATOR_INTERSECT_STR)
161 setIntersectionType(INTERP_KERNEL::PointLocator);
165 else if(key==SPLITTING_POLICY_STR)
167 if(value==PLANAR_SPLIT_FACE_5_STR)
169 setSplittingPolicy(INTERP_KERNEL::PLANAR_FACE_5);
172 else if(value==PLANAR_SPLIT_FACE_6_STR)
174 setSplittingPolicy(INTERP_KERNEL::PLANAR_FACE_6);
177 else if(value==GENERAL_SPLIT_24_STR)
179 setSplittingPolicy(INTERP_KERNEL::GENERAL_24);
182 else if(value==GENERAL_SPLIT_48_STR)
184 setSplittingPolicy(INTERP_KERNEL::GENERAL_48);
193 std::string INTERP_KERNEL::InterpolationOptions::getSplittingPolicyRepr() const
195 if(_splitting_policy==INTERP_KERNEL::PLANAR_FACE_5)
196 return std::string(PLANAR_SPLIT_FACE_5_STR);
197 else if(_splitting_policy==INTERP_KERNEL::PLANAR_FACE_6)
198 return std::string(PLANAR_SPLIT_FACE_6_STR);
199 else if(_splitting_policy==INTERP_KERNEL::GENERAL_24)
200 return std::string(GENERAL_SPLIT_24_STR);
201 else if(_splitting_policy==INTERP_KERNEL::GENERAL_48)
202 return std::string(GENERAL_SPLIT_48_STR);
204 return std::string("UNKNOWN_SPLITTING_POLICY");
207 std::string INTERP_KERNEL::InterpolationOptions::filterInterpolationMethod(const std::string& meth) const
209 if ( _P1P0_bary_method && meth == "P1P0" )
214 bool INTERP_KERNEL::InterpolationOptions::setInterpolationOptions(long print_level,
215 std::string intersection_type,
219 double bounding_box_adjustment,
220 double bounding_box_adjustment_abs,
221 double max_distance_for_3Dsurf_intersect,
224 std::string splitting_policy,
225 bool P1P0_bary_method )
227 _print_level=print_level;
228 _precision=precision;
229 _median_plane=median_plane;
230 _do_rotate=do_rotate;
231 _bounding_box_adjustment=bounding_box_adjustment;
232 _bounding_box_adjustment_abs=bounding_box_adjustment_abs;
233 _max_distance_for_3Dsurf_intersect=max_distance_for_3Dsurf_intersect;
234 _orientation=orientation;
235 _measure_abs=measure_abs;
236 _P1P0_bary_method=P1P0_bary_method;
237 return(setOptionString(INTERSEC_TYPE_STR,intersection_type) && setOptionString(SPLITTING_POLICY_STR,splitting_policy));
240 std::string INTERP_KERNEL::InterpolationOptions::printOptions() const
242 std::ostringstream oss; oss.precision(15); oss << "Interpolation Options ******" << std::endl;
243 oss << "Print level : " << _print_level << std::endl;
244 oss << "Intersection type : " << getIntersectionTypeRepr() << std::endl;
245 oss << "Precision : " << _precision << std::endl;
246 oss << "Median plane : " << _median_plane << std::endl;
247 oss << "Do Rotate status : " << std::boolalpha << _do_rotate << std::endl;
248 oss << "Bounding box adj : " << _bounding_box_adjustment << std::endl;
249 oss << "Bounding box adj abs : " << _bounding_box_adjustment_abs << std::endl;
250 oss << "Max distance for 3DSurf intersect : " << _max_distance_for_3Dsurf_intersect << std::endl;
251 oss << "Orientation : " << _orientation << std::endl;
252 oss << "Measure abs : " << _measure_abs << std::endl;
253 oss << "Splitting policy : " << getSplittingPolicyRepr() << std::endl;
254 oss << "P1P0 Barycentric method : " << _P1P0_bary_method << std::endl;
255 oss << "****************************" << std::endl;