Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // Created on: 1995-10-18
0002 // Created by: Andre LIEUTIER
0003 // Copyright (c) 1995-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 _Plate_Plate_HeaderFile
0018 #define _Plate_Plate_HeaderFile
0019 
0020 #include <Standard.hxx>
0021 #include <Standard_DefineAlloc.hxx>
0022 #include <Standard_Handle.hxx>
0023 
0024 #include <Standard_Integer.hxx>
0025 #include <Plate_SequenceOfPinpointConstraint.hxx>
0026 #include <Plate_SequenceOfLinearXYZConstraint.hxx>
0027 #include <Plate_SequenceOfLinearScalarConstraint.hxx>
0028 #include <TColgp_HArray2OfXYZ.hxx>
0029 #include <TColgp_SequenceOfXY.hxx>
0030 #include <Message_ProgressScope.hxx>
0031 
0032 class Plate_PinpointConstraint;
0033 class Plate_LinearXYZConstraint;
0034 class Plate_LinearScalarConstraint;
0035 class Plate_GlobalTranslationConstraint;
0036 class Plate_LineConstraint;
0037 class Plate_PlaneConstraint;
0038 class Plate_SampledCurveConstraint;
0039 class Plate_GtoCConstraint;
0040 class Plate_FreeGtoCConstraint;
0041 class gp_XYZ;
0042 class gp_XY;
0043 class math_Matrix;
0044 
0045 
0046 //! This class implement a variationnal spline algorithm able
0047 //! to define a two variable function satisfying some constraints
0048 //! and minimizing an energy like criterion.
0049 class Plate_Plate 
0050 {
0051 public:
0052 
0053   DEFINE_STANDARD_ALLOC
0054 
0055   
0056   Standard_EXPORT Plate_Plate();
0057   
0058   Standard_EXPORT Plate_Plate(const Plate_Plate& Ref);
0059   
0060   Standard_EXPORT Plate_Plate& Copy (const Plate_Plate& Ref);
0061 Plate_Plate& operator= (const Plate_Plate& Ref)
0062 {
0063   return Copy(Ref);
0064 }
0065   
0066   Standard_EXPORT void Load (const Plate_PinpointConstraint& PConst);
0067   
0068   Standard_EXPORT void Load (const Plate_LinearXYZConstraint& LXYZConst);
0069   
0070   Standard_EXPORT void Load (const Plate_LinearScalarConstraint& LScalarConst);
0071   
0072   Standard_EXPORT void Load (const Plate_GlobalTranslationConstraint& GTConst);
0073   
0074   Standard_EXPORT void Load (const Plate_LineConstraint& LConst);
0075   
0076   Standard_EXPORT void Load (const Plate_PlaneConstraint& PConst);
0077   
0078   Standard_EXPORT void Load (const Plate_SampledCurveConstraint& SCConst);
0079   
0080   Standard_EXPORT void Load (const Plate_GtoCConstraint& GtoCConst);
0081   
0082   Standard_EXPORT void Load (const Plate_FreeGtoCConstraint& FGtoCConst);
0083   
0084   Standard_EXPORT void SolveTI (const Standard_Integer ord = 4, 
0085                                 const Standard_Real anisotropie = 1.0, 
0086                                 const Message_ProgressRange& theProgress = Message_ProgressRange());
0087   
0088   //! returns True if all has been correctly done.
0089   Standard_EXPORT Standard_Boolean IsDone() const;
0090   
0091   Standard_EXPORT void destroy();
0092 ~Plate_Plate()
0093 {
0094   destroy();
0095 }
0096   
0097   //! reset the Plate in the initial state
0098   //! ( same as after Create())
0099   Standard_EXPORT void Init();
0100   
0101   Standard_EXPORT gp_XYZ Evaluate (const gp_XY& point2d) const;
0102   
0103   Standard_EXPORT gp_XYZ EvaluateDerivative (const gp_XY& point2d, const Standard_Integer iu, const Standard_Integer iv) const;
0104   
0105   Standard_EXPORT void CoefPol (Handle(TColgp_HArray2OfXYZ)& Coefs) const;
0106   
0107   Standard_EXPORT void SetPolynomialPartOnly (const Standard_Boolean PPOnly = Standard_True);
0108   
0109   Standard_EXPORT Standard_Integer Continuity() const;
0110   
0111   Standard_EXPORT void UVBox (Standard_Real& UMin, Standard_Real& UMax, Standard_Real& VMin, Standard_Real& VMax) const;
0112   
0113   Standard_EXPORT void UVConstraints (TColgp_SequenceOfXY& Seq) const;
0114 
0115 
0116 
0117 
0118 protected:
0119 
0120 
0121 
0122 
0123 
0124 private:
0125 
0126   
0127   Standard_EXPORT Standard_Real SolEm (const gp_XY& point2d, const Standard_Integer iu, const Standard_Integer iv) const;
0128   
0129     Standard_Real Polm (const gp_XY& point2d, const Standard_Integer iu, const Standard_Integer iv, const Standard_Integer idu, const Standard_Integer idv) const;
0130   
0131     Standard_Integer& Deru (const Standard_Integer index) const;
0132   
0133     Standard_Integer& Derv (const Standard_Integer index) const;
0134   
0135     gp_XYZ& Solution (const Standard_Integer index) const;
0136   
0137     gp_XY& Points (const Standard_Integer index) const;
0138   
0139   Standard_EXPORT void SolveTI1 (const Standard_Integer IterationNumber,
0140                                  const Message_ProgressRange& theProgress = Message_ProgressRange());
0141   
0142   Standard_EXPORT void SolveTI2 (const Standard_Integer IterationNumber,
0143                                  const Message_ProgressRange& theProgress = Message_ProgressRange());
0144   
0145   Standard_EXPORT void SolveTI3 (const Standard_Integer IterationNumber,
0146                                  const Message_ProgressRange& theProgress = Message_ProgressRange());
0147   
0148   Standard_EXPORT void fillXYZmatrix (math_Matrix& mat, const Standard_Integer i0, const Standard_Integer j0, const Standard_Integer ncc1, const Standard_Integer ncc2) const;
0149 
0150 
0151   Standard_Integer order;
0152   Standard_Integer n_el;
0153   Standard_Integer n_dim;
0154   Standard_Address solution;
0155   Standard_Address points;
0156   Standard_Address deru;
0157   Standard_Address derv;
0158   Standard_Boolean OK;
0159   Plate_SequenceOfPinpointConstraint myConstraints;
0160   Plate_SequenceOfLinearXYZConstraint myLXYZConstraints;
0161   Plate_SequenceOfLinearScalarConstraint myLScalarConstraints;
0162   Standard_Real ddu[10];
0163   Standard_Real ddv[10];
0164   Standard_Integer maxConstraintOrder;
0165   Standard_Boolean PolynomialPartOnly;
0166   Standard_Real Uold;
0167   Standard_Real Vold;
0168   Standard_Real U2;
0169   Standard_Real R;
0170   Standard_Real L;
0171 
0172 
0173 };
0174 
0175 
0176 #include <Plate_Plate.lxx>
0177 
0178 
0179 
0180 
0181 
0182 #endif // _Plate_Plate_HeaderFile