/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2019, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2019 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #ifndef OD_GEELLIPCYLNDR_H #define OD_GEELLIPCYLNDR_H /*!DOM*/ #include "Ge/GeSurface.h" #include "Ge/GeInterval.h" #include "OdPlatformSettings.h" class OdGeCircArc3d; #include "TD_PackPush.h" /** \details This class represents cylinders with an elliptical cross-section. \remarks An eliptical cylinder is defined by: * major and minor radii * origin (a point on the axis of symmetry) * axis of symmetry * major axis * height It is generated by a line parallel to the axis of symmetry, along an eliptical path. Parameter V is the angle of revolution, measured from the major axis to the axis of symmetry. The right hand rule is applied along the direction of the axis of symmetry for positive angles. For a closed cylinder, V defaults to [-OdaPI, OdaPI). Parameter U varies along the axis of symmetry. U is dimensionless and increases in the direction of the axis of symmetry. U = 0 corresponds to the center of the cylinder base, and U = 1 corresponds to the center of the cylinder top. The surface of the cylinder is perodic in V with a period of Oda2PI. [umin, umax] x [vmin, vmax] defines a four-sided cylindrical patch bounded by two straight lines (at vmin and vmax) and two circular arcs (at umin and umax). The following constraints apply to the definition of a cylindrical patch: * umin < umax * |vmax - vmin| <= Oda2PI * majorRadius > 0.0 * minorRadius > 0.0 The angle of a point on an ellipse is measured by projecting the point along a vector perpendicular to the major axis onto a circle whose center is the center of this ellipse and whose radius is the major radius of this ellipse. The angle between the major axis of the ellipse, and a vector from the center of the ellipse to the intersection point with the circle, measured counterclockwise, is the angle of the point on the ellipse. Corresponding C++ library: TD_Ge \sa */ class GE_TOOLKIT_EXPORT OdGeEllipCylinder : public OdGeSurface { public: /** \details Default constructor for the OdGeEllipCylinder class. \remarks The default constructor uses a reference axis of (1,0,0), a baseOrigin of (0,0,0), an axisOfSymmetry of (0,1,0), and base radii of 2.0. */ OdGeEllipCylinder(); /** \details Constructor for the OdGeEllipCylinder class. \param minorRadius [in] Minor radius of the elliptical cylinder. \param majorRadius [in] Major radius of the elliptical cylinder. \param origin [in] Origin of the elliptical cylinder. \param axisOfSymmetry [in] Axis of symmetry (rotation). */ OdGeEllipCylinder( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry); /** \details Constructor for the OdGeEllipCylinder class. \param minorRadius [in] Minor radius of the elliptical cylinder. \param majorRadius [in] Major radius of the elliptical cylinder. \param origin [in] Origin of the elliptical cylinder. \param axisOfSymmetry [in] Axis of symmetry (rotation). \param majorAxis [in] Major axis of the elliptical cylinder. \param height [in] Height interval of the cylinder. \param startAng [in] Start angle of the elliptical cylinder. \param endAng [in] End angle of the elliptical cylinder. \remarks All angles are expressed in radians. */ OdGeEllipCylinder( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry, const OdGeVector3d& majorAxis, const OdGeInterval& height, double startAng, double endAng); /** \details Copy constructor for the OdGeEllipCylinder class. \param cylinder [in] Elliptical cylinder to be copied. */ OdGeEllipCylinder(const OdGeEllipCylinder& cylinder); // Geometric properties. // /** \details Returns the ratio of the minor to major radius of the cylinder. \returns The ratio of radii of this cylinder as a double value. */ double radiusRatio() const; /** \details Returns the minor radius of the cylinder. \returns The minor radius of this cylinder as a double value. */ double minorRadius() const; /** \details Returns the major radius of the cylinder. \returns The major radius of this cylinder as a double value. */ double majorRadius() const; /** \details Returns the origin of the cylinder. \returns The origin of this cylinder as an OdGePoint3d instance. */ OdGePoint3d origin() const; /** \details Retrieves the starting and ending angles of this cylinder. \param startAng [out] Receives the start angle. \param endAng [out] Receives the end angle. \remarks All angles are expressed in radians. */ void getAngles( double& startAng, double& endAng) const; /** \details Retrieves the interval of the axis of symmetry. \param height [out] Receives the interval of the axis of symmetry. */ void getHeight( OdGeInterval& height) const; /** \details Returns the cylinder height that corresponds to the specified position on the U-axis. \remarks Parameter U varies along the axis of symmetry. U is dimensionless and increases in the direction of the axis of symmetry. \param u [in] Position of the cylinder on the U-axis. \returns The height as a double value. */ double heightAt( double u) const; /** \details Returns the axis of symmetry of this cylinder. \returns The axis of symmetry of this cylinder as an OdGeVector3d instance. */ OdGeVector3d axisOfSymmetry() const; /** \details Returns the major axis of this cylinder. \returns The major axis of this cylinder as an OdGeVector3d instance. */ OdGeVector3d majorAxis() const; /** \details Returns the minor axis of this cylinder. \returns The minor axis of this cylinder as an OdGeVector3d instance. */ OdGeVector3d minorAxis() const; /** \details Checks if the normal to this surface is pointing outward. \returns true if and only if the normal to this surface is pointing outward. */ bool isOuterNormal() const; /** \details Checks if the base of this cylinder is a full ellipse within the specified tolerance. \param tol [in] Geometric tolerance. \returns true if and only if the base of this cylinder is a full ellipse within the specified tolerance. */ bool isClosed( const OdGeTol& tol = OdGeContext::gTol) const; /** \details Sets OuterNormal according to the parameter. \param isOuterNormal [in] Sets OuterNormal. */ void setIsOuterNormal( bool isOuterNormal); /** \details Sets the minor radius of the elliptical cylinder. \param minorRadius [in] The minor radius of the elliptical cylinder. \returns A reference to this OdGeEllipCylinder object. */ OdGeEllipCylinder& setMinorRadius( double minorRadius); /** \details Sets the major radius of the elliptical cylinder. \param majorRadius [in] The major radius of the elliptical cylinder. \remarks This method doesn't change state returned by isOuterNormal(). To chenge outer normal state you should use setIsOuterNormal. \returns A reference to this OdGeEllipCylinder object. */ OdGeEllipCylinder& setMajorRadius( double majorRadius); /** \details Sets the start and end angles of the elliptical cylinder. \param startAng [in] Start angle. \param endAng [in] End angle. \remarks All angles are expressed in radians. \returns A reference to this OdGeEllipCylinder object. */ OdGeEllipCylinder& setAngles( double startAng, double endAng); /** \details Sets the height of the elliptical cylinder. \param height [in] Height of the elliptical cylinder. \returns A reference to this OdGeEllipCylinder object. */ OdGeEllipCylinder& setHeight( const OdGeInterval& height); /** \details Sets the parameters for the cylinder and returns a reference to the cylinder. \param majorRadius [in] Major radius of the elliptical cylinder. \param minorRadius [in] Minor radius of the elliptical cylinder. \param origin [in] Origin of the elliptical cylinder. \param axisOfSymmetry [in] Axis of symmetry (rotation). \returns A reference to this OdGeEllipCylinder object. */ OdGeEllipCylinder& set( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry); /** \details Sets the parameters for the cylinder and returns a reference to the cylinder. \param majorRadius [in] Major radius of the elliptical cylinder. \param minorRadius [in] Minor radius of the elliptical cylinder. \param origin [in] Origin of the elliptical cylinder. \param axisOfSymmetry [in] Axis of symmetry (rotation). \param majorAxis [in] Major axis of the elliptical cylinder. \param height [in] Height interval of the cylinder. \param startAng [in] Start angle of the elliptical cylinder. \param endAng [in] End angle of the elliptical cylinder. \remarks All angles are expressed in radians. \returns A reference to this OdGeEllipCylinder object. */ OdGeEllipCylinder& set( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry, const OdGeVector3d& majorAxis, const OdGeInterval& height, double startAng, double endAng); /** \details Checks if the cylinder intersects with a line entity, and returns the number of intersections and the points of intersection. \param lineEnt [in] Any 3D line entity. \param numInt [out] Receives the number of intersections. \param p1 [out] Receives the first intersection point. \param p2 [out] Receives the second intersection point. \param tol [in] Geometric tolerance. \remarks * p1 is valid only if numInt > 0. * p2 is valid only if numInt > 1. \returns true if and only if this cylinder intersects with a line entity. */ bool intersectWith( const OdGeLinearEnt3d& linEnt, int& numInt, OdGePoint3d& p1, OdGePoint3d& p2, const OdGeTol& tol = OdGeContext::gTol) const; /** \details Assignment operator for the OdGeEllipCylinder object. \param cylinder [in] Cylinder to be assigned. \returns A reference to this OdGeEllipCylinder object. */ OdGeEllipCylinder& operator =(const OdGeEllipCylinder& ); }; #include "TD_PackPop.h" #endif // OD_GEELLIPCYLNDR_H // AE - End