1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
|
// This file is generated by WOK (CPPExt).
// Please do not edit this file; modify original file instead.
// The copyright and license terms as defined for the original file apply to
// this header file considered to be the "object code" form of the original source.
#ifndef _GeomFill_Pipe_HeaderFile
#define _GeomFill_Pipe_HeaderFile
#include <Standard.hxx>
#include <Standard_DefineAlloc.hxx>
#include <Standard_Macro.hxx>
#include <Standard_Real.hxx>
#include <Handle_Adaptor3d_HCurve.hxx>
#include <Handle_Geom_Surface.hxx>
#include <Handle_GeomFill_LocationLaw.hxx>
#include <Handle_GeomFill_SectionLaw.hxx>
#include <Standard_Integer.hxx>
#include <Standard_Boolean.hxx>
#include <Handle_Geom_Curve.hxx>
#include <GeomFill_Trihedron.hxx>
#include <Handle_Geom2d_Curve.hxx>
#include <GeomAbs_Shape.hxx>
class Adaptor3d_HCurve;
class Geom_Surface;
class GeomFill_LocationLaw;
class GeomFill_SectionLaw;
class Standard_ConstructionError;
class Geom_Curve;
class Geom2d_Curve;
class gp_Dir;
class TColGeom_SequenceOfCurve;
//! Describes functions to construct pipes. A pipe is built by
//! sweeping a curve (the section) along another curve (the path).
//! The Pipe class provides the following types of construction:
//! - pipes with a circular section of constant radius,
//! - pipes with a constant section,
//! - pipes with a section evolving between two given curves.
//! All standard specific cases are detected in order to build,
//! where required, a plane, cylinder, cone, sphere, torus,
//! surface of linear extrusion or surface of revolution.
//! Generally speaking, the result is a BSpline surface (NURBS).
//! A Pipe object provides a framework for:
//! - defining the pipe to be built,
//! - implementing the construction algorithm, and
//! - consulting the resulting surface.
//! There are several methods to instantiate a Pipe:
//! 1) give a path and a radius : the section is
//! a circle. This location is the first point
//! of the path, and this direction is the first
//! derivate (calculate at the first point ) of
//! the path.
//!
//! 2) give a path and a section.
//! Differtent options are available
//! 2.a) Use the classical Frenet trihedron
//! - or the CorrectedFrenet trihedron
//! (To avoid twisted surface)
//! - or a constant trihedron to have all the sections
//! in a same plane
//! 2.b) Define a ConstantBinormal Direction to keep the
//! same angle beetween the Direction and the sections
//! along the sweep surface.
//! 2.c) Define the path by a surface and a 2dcurve,
//! the surface is used to define the trihedron's normal.
//! It is usefull to keep a constant angle beetween
//! input surface and the pipe. --
//! 3) give a path and two sections. The section
//! evoluate from First to Last Section.
//!
//! 3) give a path and N sections. The section
//! evoluate from First to Last Section.
//!
//! In general case the result is a NURBS. But we
//! can generate plane, cylindrical, spherical,
//! conical, toroidal surface in some particular case.
//!
//! The natural parametrization of the result is:
//!
//! U-Direction along the section.
//! V-Direction along the path.
//!
//! But, in some particular case, the surface must
//! be construct otherwise.
//! The method "EchangeUV" return false in such cases.
class GeomFill_Pipe
{
public:
DEFINE_STANDARD_ALLOC
//! Constructs an empty algorithm for building pipes. Use
//! the function Init to initialize it.
Standard_EXPORT GeomFill_Pipe();
Standard_EXPORT GeomFill_Pipe(const Handle(Geom_Curve)& Path, const Standard_Real Radius);
//! Create a pipe with a constant section
//! (<FirstSection>) and a path (<Path>)
//! Option can be - GeomFill_IsCorrectedFrenet
//! - GeomFill_IsFrenet
//! - GeomFill_IsConstant
Standard_EXPORT GeomFill_Pipe(const Handle(Geom_Curve)& Path, const Handle(Geom_Curve)& FirstSect, const GeomFill_Trihedron Option = GeomFill_IsCorrectedFrenet);
//! Create a pipe with a constant section
//! (<FirstSection>) and a path defined by <Path> and <Support>
Standard_EXPORT GeomFill_Pipe(const Handle(Geom2d_Curve)& Path, const Handle(Geom_Surface)& Support, const Handle(Geom_Curve)& FirstSect);
//! Create a pipe with a constant section
//! (<FirstSection>) and a path <Path> and a fixed
//! binormal direction <Dir>
Standard_EXPORT GeomFill_Pipe(const Handle(Geom_Curve)& Path, const Handle(Geom_Curve)& FirstSect, const gp_Dir& Dir);
//! Create a pipe with an evolving section
//! The section evoluate from First to Last Section
Standard_EXPORT GeomFill_Pipe(const Handle(Geom_Curve)& Path, const Handle(Geom_Curve)& FirstSect, const Handle(Geom_Curve)& LastSect);
//! Create a pipe with N sections
//! The section evoluate from First to Last Section
Standard_EXPORT GeomFill_Pipe(const Handle(Geom_Curve)& Path, const TColGeom_SequenceOfCurve& NSections);
//! Create a pipe with a constant radius with 2
//! guide-line.
Standard_EXPORT GeomFill_Pipe(const Handle(Geom_Curve)& Path, const Handle(Geom_Curve)& Curve1, const Handle(Geom_Curve)& Curve2, const Standard_Real Radius);
//! Create a pipe with a constant radius with 2
//! guide-line.
Standard_EXPORT GeomFill_Pipe(const Handle(Adaptor3d_HCurve)& Path, const Handle(Adaptor3d_HCurve)& Curve1, const Handle(Adaptor3d_HCurve)& Curve2, const Standard_Real Radius);
//! Create a pipe with a constant section and with 1
//! guide-line.
//! Use the function Perform to build the surface.
//! All standard specific cases are detected in order to
//! construct, according to the respective geometric
//! nature of Path and the sections, a planar, cylindrical,
//! conical, spherical or toroidal surface, a surface of
//! linear extrusion or a surface of revolution.
//! In the general case, the result is a BSpline surface
//! (NURBS) built by approximation of a series of sections where:
//! - the number of sections N is chosen automatically
//! by the algorithm according to the respective
//! geometries of Path and the sections. N is greater than or equal to 2;
//! - N points Pi (with i in the range [ 1,N ]) are
//! defined at regular intervals along the curve Path
//! from its first point to its end point. At each point Pi,
//! a coordinate system Ti is computed with Pi as
//! origin, and with the tangential and normal vectors
//! to Path defining two of its coordinate axes.
//! In the case of a pipe with a constant circular section,
//! the first section is a circle of radius Radius centered
//! on the origin of Path and whose "Z Axis" is aligned
//! along the vector tangential to the origin of Path. In the
//! case of a pipe with a constant section, the first section
//! is the curve FirstSect. In these two cases, the ith
//! section (for values of i greater than 1) is obtained by
//! applying to a copy of this first section the geometric
//! transformation which transforms coordinate system
//! T1 into coordinate system Ti.
//! In the case of an evolving section, N-2 intermediate
//! curves Si are first computed (if N is greater than 2,
//! and with i in the range [ 2,N-1 ]) whose geometry
//! evolves regularly from the curve S1=FirstSect to the
//! curve SN=LastSect. The first section is FirstSect,
//! and the ith section (for values of i greater than 1) is
//! obtained by applying to the curve Si the geometric
//! transformation which transforms coordinate system
//! T1 into coordinate system Ti.
Standard_EXPORT GeomFill_Pipe(const Handle(Geom_Curve)& Path, const Handle(Adaptor3d_HCurve)& Guide, const Handle(Geom_Curve)& FirstSect, const Standard_Boolean ByACR, const Standard_Boolean rotat);
Standard_EXPORT void Init (const Handle(Geom_Curve)& Path, const Standard_Real Radius) ;
Standard_EXPORT void Init (const Handle(Geom_Curve)& Path, const Handle(Geom_Curve)& FirstSect, const GeomFill_Trihedron Option = GeomFill_IsCorrectedFrenet) ;
Standard_EXPORT void Init (const Handle(Geom2d_Curve)& Path, const Handle(Geom_Surface)& Support, const Handle(Geom_Curve)& FirstSect) ;
Standard_EXPORT void Init (const Handle(Geom_Curve)& Path, const Handle(Geom_Curve)& FirstSect, const gp_Dir& Dir) ;
Standard_EXPORT void Init (const Handle(Geom_Curve)& Path, const Handle(Geom_Curve)& FirstSect, const Handle(Geom_Curve)& LastSect) ;
Standard_EXPORT void Init (const Handle(Geom_Curve)& Path, const TColGeom_SequenceOfCurve& NSections) ;
//! Create a pipe with a constant radius with 2
//! guide-line.
Standard_EXPORT void Init (const Handle(Adaptor3d_HCurve)& Path, const Handle(Adaptor3d_HCurve)& Curve1, const Handle(Adaptor3d_HCurve)& Curve2, const Standard_Real Radius) ;
//! Initializes this pipe algorithm to build the following surface:
//! - a pipe with a constant circular section of radius
//! Radius along the path Path, or
//! - a pipe with constant section FirstSect along the path Path, or
//! - a pipe where the section evolves from FirstSect to
//! LastSect along the path Path.
//! Use the function Perform to build the surface.
//! Note: a description of the resulting surface is given under Constructors.
Standard_EXPORT void Init (const Handle(Geom_Curve)& Path, const Handle(Adaptor3d_HCurve)& Guide, const Handle(Geom_Curve)& FirstSect, const Standard_Boolean ByACR, const Standard_Boolean rotat) ;
//! Builds the pipe defined at the time of initialization of this
//! algorithm. A description of the resulting surface is given under Constructors.
//! If WithParameters (defaulted to false) is set to true, the
//! approximation algorithm (used only in the general case
//! of construction of a BSpline surface) builds the surface
//! with a u parameter corresponding to the one of the path.
//! Exceptions
//! Standard_ConstructionError if a surface cannot be constructed from the data.
//! Warning: It is the old Perform method, the next methode is recommended.
Standard_EXPORT void Perform (const Standard_Boolean WithParameters = Standard_False, const Standard_Boolean myPolynomial = Standard_False) ;
//! detects the particular cases. And compute the surface.
//! if none particular case is detected we make an approximation
//! with respect of the Tolerance <Tol>, the continuty <Conti>, the
//! maximum degree <MaxDegree>, the maximum number of span <NbMaxSegment>
//! and the spine parametrization.
//! If we can't create a surface with the data
Standard_EXPORT void Perform (const Standard_Real Tol, const Standard_Boolean Polynomial, const GeomAbs_Shape Conti = GeomAbs_C1, const Standard_Integer MaxDegree = 11, const Standard_Integer NbMaxSegment = 30) ;
//! Returns the surface built by this algorithm.
//! Warning
//! Do not use this function before the surface is built (in this
//! case the function will return a null handle).
const Handle(Geom_Surface)& Surface() const;
//! The u parametric direction of the surface constructed by
//! this algorithm usually corresponds to the evolution
//! along the path and the v parametric direction
//! corresponds to the evolution along the section(s).
//! However, this rule is not respected when constructing
//! certain specific Geom surfaces (typically cylindrical
//! surfaces, surfaces of revolution, etc.) for which the
//! parameterization is inversed.
//! The ExchangeUV function checks for this, and returns
//! true in all these specific cases.
//! Warning
//! Do not use this function before the surface is built.
Standard_EXPORT Standard_Boolean ExchangeUV() const;
//! Sets a flag to try to create as many planes,
//! cylinder,... as possible. Default value is
//! <Standard_False>.
void GenerateParticularCase (const Standard_Boolean B) ;
//! Returns the flag.
Standard_Boolean GenerateParticularCase() const;
//! Returns the approximation's error. if the Surface
//! is plane, cylinder ... this error can be 0.
Standard_Real ErrorOnSurf() const;
protected:
private:
Standard_EXPORT void Init() ;
//! The result (<mySurface>) is an approximation. Using
//! <SweepSectionGenerator> to do that. If
//! <WithParameters> is set to <Standard_True>, the
//! apprxoximation will be done in respect to the spine
//! parametrization.
Standard_EXPORT void ApproxSurf (const Standard_Boolean WithParameters) ;
Standard_EXPORT Standard_Boolean KPartT4() ;
Standard_Real myRadius;
Standard_Real myError;
Handle(Adaptor3d_HCurve) myAdpPath;
Handle(Adaptor3d_HCurve) myAdpFirstSect;
Handle(Adaptor3d_HCurve) myAdpLastSect;
Handle(Geom_Surface) mySurface;
Handle(GeomFill_LocationLaw) myLoc;
Handle(GeomFill_SectionLaw) mySec;
Standard_Integer myType;
Standard_Boolean myExchUV;
Standard_Boolean myKPart;
Standard_Boolean myPolynomial;
};
#include <GeomFill_Pipe.lxx>
#endif // _GeomFill_Pipe_HeaderFile
|