Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:04:12

0001 // Created on: 1996-08-09
0002 // Created by: Herve LOUESSARD
0003 // Copyright (c) 1996-1999 Matra Datavision
0004 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0005 //
0006 // This file is part of Open CASCADE Technology software library.
0007 //
0008 // This library is free software; you can redistribute it and/or modify it under
0009 // the terms of the GNU Lesser General Public License version 2.1 as published
0010 // by the Free Software Foundation, with special exception defined in the file
0011 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0012 // distribution for complete text of the license and disclaimer of any warranty.
0013 //
0014 // Alternatively, this file may be used under the terms of Open CASCADE
0015 // commercial license or contractual agreement.
0016 
0017 #ifndef _LocalAnalysis_CurveContinuity_HeaderFile
0018 #define _LocalAnalysis_CurveContinuity_HeaderFile
0019 
0020 #include <Standard.hxx>
0021 #include <Standard_DefineAlloc.hxx>
0022 #include <Standard_Handle.hxx>
0023 
0024 #include <GeomAbs_Shape.hxx>
0025 #include <LocalAnalysis_StatusErrorType.hxx>
0026 class Geom_Curve;
0027 class GeomLProp_CLProps;
0028 
0029 
0030 
0031 //! This class gives tools to check local continuity C0
0032 //! C1 C2 G1 G2 between  two points situated on two curves
0033 class LocalAnalysis_CurveContinuity 
0034 {
0035 public:
0036 
0037   DEFINE_STANDARD_ALLOC
0038 
0039   
0040 
0041   //! -u1 is the parameter of the point on Curv1
0042   //! -u2 is the  parameter of the point on  Curv2
0043   //! -Order is the required continuity:
0044   //! GeomAbs_C0    GeomAbs_C1  GeomAbs_C2
0045   //! GeomAbs_G1 GeomAbs_G2
0046   //!
0047   //! -EpsNul  is  used to  detect a  a vector with nul
0048   //! magnitude (in mm)
0049   //!
0050   //! -EpsC0 is used for C0  continuity to confuse two
0051   //! points (in mm)
0052   //!
0053   //! -EpsC1 is  an angular  tolerance in radians  used
0054   //! for C1 continuity  to compare the angle between
0055   //! the first derivatives
0056   //!
0057   //! -EpsC2 is an   angular tolerance in radians  used
0058   //! for C2  continuity to  compare the angle  between
0059   //! the second derivatives
0060   //!
0061   //! -EpsG1 is an  angular  tolerance in radians  used
0062   //! for G1  continuity to compare  the angle  between
0063   //! the tangents
0064   //!
0065   //! -EpsG2 is  an angular  tolerance in radians  used
0066   //! for  G2 continuity to  compare  the angle between
0067   //! the normals
0068   //!
0069   //! - percent  : percentage of  curvature variation (unitless)
0070   //! used for G2 continuity
0071   //!
0072   //! - Maxlen is the maximum length of Curv1 or Curv2 in
0073   //! meters used to detect nul curvature (in mm)
0074   //!
0075   //! the constructor computes the quantities  which are
0076   //! necessary to check the continuity in the following cases:
0077   //!
0078   //! case  C0
0079   //! --------
0080   //! - the distance between P1 and P2  with P1=Curv1 (u1)  and
0081   //! P2=Curv2(u2)
0082   //!
0083   //! case C1
0084   //! -------
0085   //!
0086   //! - the angle  between  the first derivatives
0087   //! dCurv1(u1)           dCurv2(u2)
0088   //! --------     and     ---------
0089   //! du                   du
0090   //!
0091   //! - the ratio   between  the magnitudes  of the first
0092   //! derivatives
0093   //!
0094   //! the angle value is between 0 and PI/2
0095   //!
0096   //! case  C2
0097   //! -------
0098   //! - the angle  between the second derivatives
0099   //! 2                   2
0100   //! d  Curv1(u1)       d Curv2(u2)
0101   //! ----------        ----------
0102   //! 2                   2
0103   //! du                  du
0104   //!
0105   //! the angle value is between 0 and PI/2
0106   //!
0107   //! - the ratio between the magnitudes of  the second
0108   //! derivatives
0109   //!
0110   //! case G1
0111   //! -------
0112   //! the angle between  the tangents at each point
0113   //!
0114   //! the angle value is between 0 and PI/2
0115   //!
0116   //! case G2
0117   //! -------
0118   //! -the angle between the normals at each point
0119   //!
0120   //! the angle value is between 0 and PI/2
0121   //!
0122   //! - the relative variation of curvature:
0123   //! |curvat1-curvat2|
0124   //! ------------------
0125   //! 1/2
0126   //! (curvat1*curvat2)
0127   //!
0128   //! where curvat1 is the curvature at the first point
0129   //! and curvat2 the curvature at the second point
0130   Standard_EXPORT LocalAnalysis_CurveContinuity(const Handle(Geom_Curve)& Curv1, const Standard_Real u1, const Handle(Geom_Curve)& Curv2, const Standard_Real u2, const GeomAbs_Shape Order, const Standard_Real EpsNul = 0.001, const Standard_Real EpsC0 = 0.001, const Standard_Real EpsC1 = 0.001, const Standard_Real EpsC2 = 0.001, const Standard_Real EpsG1 = 0.001, const Standard_Real EpsG2 = 0.001, const Standard_Real Percent = 0.01, const Standard_Real Maxlen = 10000);
0131   
0132   Standard_EXPORT Standard_Boolean IsDone() const;
0133   
0134   Standard_EXPORT LocalAnalysis_StatusErrorType StatusError() const;
0135   
0136   Standard_EXPORT GeomAbs_Shape ContinuityStatus() const;
0137   
0138   Standard_EXPORT Standard_Real C0Value() const;
0139   
0140   Standard_EXPORT Standard_Real C1Angle() const;
0141   
0142   Standard_EXPORT Standard_Real C1Ratio() const;
0143   
0144   Standard_EXPORT Standard_Real C2Angle() const;
0145   
0146   Standard_EXPORT Standard_Real C2Ratio() const;
0147   
0148   Standard_EXPORT Standard_Real G1Angle() const;
0149   
0150   Standard_EXPORT Standard_Real G2Angle() const;
0151   
0152   Standard_EXPORT Standard_Real G2CurvatureVariation() const;
0153   
0154   Standard_EXPORT Standard_Boolean IsC0() const;
0155   
0156   Standard_EXPORT Standard_Boolean IsC1() const;
0157   
0158   Standard_EXPORT Standard_Boolean IsC2() const;
0159   
0160   Standard_EXPORT Standard_Boolean IsG1() const;
0161   
0162   Standard_EXPORT Standard_Boolean IsG2() const;
0163 
0164 
0165 
0166 
0167 protected:
0168 
0169 
0170 
0171 
0172 
0173 private:
0174 
0175   
0176   Standard_EXPORT void CurvC0 (GeomLProp_CLProps& Curv1, GeomLProp_CLProps& Curv2);
0177   
0178   Standard_EXPORT void CurvC1 (GeomLProp_CLProps& Curv1, GeomLProp_CLProps& Curv2);
0179   
0180   Standard_EXPORT void CurvC2 (GeomLProp_CLProps& Curv1, GeomLProp_CLProps& Curv2);
0181   
0182   Standard_EXPORT void CurvG1 (GeomLProp_CLProps& Curv1, GeomLProp_CLProps& Curv2);
0183   
0184   Standard_EXPORT void CurvG2 (GeomLProp_CLProps& Curv1, GeomLProp_CLProps& Curv2);
0185 
0186 
0187   Standard_Real myContC0;
0188   Standard_Real myContC1;
0189   Standard_Real myContC2;
0190   Standard_Real myContG1;
0191   Standard_Real myContG2;
0192   Standard_Real myCourbC1;
0193   Standard_Real myCourbC2;
0194   Standard_Real myG2Variation;
0195   Standard_Real myLambda1;
0196   Standard_Real myLambda2;
0197   GeomAbs_Shape myTypeCont;
0198   Standard_Real myepsnul;
0199   Standard_Real myepsC0;
0200   Standard_Real myepsC1;
0201   Standard_Real myepsC2;
0202   Standard_Real myepsG1;
0203   Standard_Real myepsG2;
0204   Standard_Real myMaxLon;
0205   Standard_Real myperce;
0206   Standard_Boolean myIsDone;
0207   LocalAnalysis_StatusErrorType myErrorStatus;
0208 
0209 
0210 };
0211 
0212 
0213 
0214 
0215 
0216 
0217 
0218 #endif // _LocalAnalysis_CurveContinuity_HeaderFile