///////////////////////////////////////////////////////////////////////////////
|
// 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
|
|
<group OdGe_Classes>
|
|
\sa
|
<link ge_OdGeCylinder.html, Working with Cylinders>
|
*/
|
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
|