/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2016, 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 Teigha(R) software pursuant to a license // agreement with Open Design Alliance. // Teigha(R) Copyright (C) 2002-2016 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. Library: TD_Ge \sa */ class GE_TOOLKIT_EXPORT OdGeEllipCylinder : public OdGeSurface { public: /** \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. \note All angles are expressed in radians. */ OdGeEllipCylinder (); OdGeEllipCylinder (const OdGeEllipCylinder& ); OdGeEllipCylinder ( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry); OdGeEllipCylinder ( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry, const OdGeVector3d& majorAxis, const OdGeInterval& height, double startAng, double endAng); // Geometric properties. // /** \details Returns the ratio of the minor to major radius of the cylinder. */ double radiusRatio () const ; /** \details Returns the minor radius of the cylinder. */ double minorRadius () const ; /** \details Returns the major radius of the cylinder. */ double majorRadius () const ; /** \details Returns the origin of the cylinder. */ OdGePoint3d origin () const ; /** \details Returns the start and end angles of the cylinder. \param startAng [out] Receives the start angle. \param endAng [out] Receives the end angle. \note All angles are expressed in radians. */ void getAngles ( double& startAng, double& endAng) const ; /** \details Returns 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. */ double heightAt ( double u) const ; /** \details Returns the axis of symmetry of the cylinder. */ OdGeVector3d axisOfSymmetry () const ; /** \details Returns the major axis of the cylinder. */ OdGeVector3d majorAxis () const ; /** \details Returns the minor axis of the cylinder. */ OdGeVector3d minorAxis () const; /** \details Returns true if and only if the normal to the cylinder is pointing outward. */ bool isOuterNormal () const; /** \details Returns true if and only if the cylinder is a full ellipse within the specified tolerance. \param tol [in] Geometric 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. */ OdGeEllipCylinder& setMinorRadius ( double minorRadius); /** \details Sets the major radius of the elliptical cylinder. \param majorRadius [in] The major radius of the elliptical cylinder. */ 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. \note All angles are expressed in radians. */ OdGeEllipCylinder& setAngles ( double startAng, double endAng); /** \details Sets the height of the elliptical cylinder. \param height [in] Height of the elliptical cylinder. */ 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). \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. \note All angles are expressed in radians. */ OdGeEllipCylinder& set ( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry); OdGeEllipCylinder& set ( double minorRadius, double majorRadius, const OdGePoint3d& origin, const OdGeVector3d& axisOfSymmetry, const OdGeVector3d& majorAxis, const OdGeInterval& height, double startAng, double endAng); /** \details Returns True if the cylinder intersects with the specified 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. */ bool intersectWith ( const OdGeLinearEnt3d& linEnt, int& numInt, OdGePoint3d& p1, OdGePoint3d& p2, const OdGeTol& tol = OdGeContext::gTol) const; OdGeEllipCylinder& operator =(const OdGeEllipCylinder& ); }; #include "TD_PackPop.h" #endif // OD_GEELLIPCYLNDR_H // AE - End