/////////////////////////////////////////////////////////////////////////////// // 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_DBRAY_H #define OD_DBRAY_H #include "TD_PackPush.h" #include "DbCurve.h" class OdGePoint3d; class OdGeVector3d; /** \details This class implements the ray object (Ray entity) in the database. This class inherits the base functionality of entities. A ray is a semi-infinite line. \sa TD_Db \sa \sa OdDbXline, OdDbLine classes */ class TOOLKIT_EXPORT OdDbRay : public OdDbCurve { public: ODDB_DECLARE_MEMBERS(OdDbRay); /** \details Builds an instance of the ray object. \remarks Use the static pseudo-constructor instead it. See: */ OdDbRay(); /* void getOffsetCurvesGivenPlaneNormal( const OdGeVector3d& normal, double offsetDist, OdRxObjectPtrArray& offsetCurves) const; //Replace OdRxObjectPtrArray */ /** \details Returns the WCS coordinates of the base point from which the ray outs (DXF 10) as three-dimensional point instance. \sa \sa OdDbRay::setBasePoint() method */ OdGePoint3d basePoint() const; /** \details Sets the base point of the from which the ray outs (DXF 10). The initial value is (0,0,0) by default. \param geBasePoint [in] Three-dimensional point instance to set the base point. \sa \sa OdDbRay::basePoint() method */ void setBasePoint( const OdGePoint3d& geBasePoint ); /** \details Returns the WCS unit direction vector of the ray (DXF 11) as three-dimensional vector instance. This vector orients the ray in would space. \sa \sa OdDbRay::setUnitDir() method */ OdGeVector3d unitDir() const; /** \details Sets the direction vector of the ray (DXF 11) in WCS. The initial value is (0,0,1) by default. \param geDirVector [in] Three-dimensional vector instance to set the ray direction. \remarks The method automatically converts the specified coordinates to a unit vector. \sa \sa OdDbRay::unitDir() method */ void setUnitDir( const OdGeVector3d& geDirVector ); virtual OdResult dwgInFields( OdDbDwgFiler* pFiler); virtual void dwgOutFields( OdDbDwgFiler* pFiler) const; virtual OdResult dxfInFields( OdDbDxfFiler* pFiler); virtual void dxfOutFields( OdDbDxfFiler* pFiler) const; virtual OdResult subGetClassID( void* pClsid) const; bool subWorldDraw( OdGiWorldDraw* pWd) const; /** \note Always returns eInvalidExtents. */ OdResult subGetGeomExtents( OdGeExtents3d& extents) const; virtual bool isClosed() const; virtual bool isPeriodic() const; /** \details Determines whether the ray entity is planar as a Boolean value and returns True. This method is inherited from the OdDbEntity class. \sa \sa OdDbRay::getPlane(), OdDbEntity::isPlanar() methods */ virtual bool isPlanar() const; /** \details Gets an arbitrary plane passed through the ray entity. This method is inherited from the OdDbEntity class. \param gePlane [out] Reference to a variable in which this method must save the plane parameters as a plane instance. \param gePlanarity [out] Reference to a variable in which this method must save the plane type (returns kLinear - arbitrary plane). \sa \sa OdDbRay::isPlanar(), OdDbEntity::getPlane() methods */ virtual OdResult getPlane( OdGePlane& gePlane, OdDb::Planarity& gePlanarity ) const; /** \details Gets the start parameter value. The start parameter equals a zero for rays. \param startParam [out] Reference to a variable in which this method must save the start parameter value as a Double value. \sa \sa */ virtual OdResult getStartParam( double& startParam ) const; /** \details This method is not applicable for the ray entity. \param endParam [out] Reference to a variable of a Double type. */ virtual OdResult getEndParam( double& endParam ) const; /** \details Computes the WCS coordinates of the start point of the ray for which the parameter equals zero. The start point coincides with the base point. \param startPoint [out] Reference to a variable in which this method must save the start point as three-dimensional point instance. \sa \sa */ virtual OdResult getStartPoint( OdGePoint3d& startPoint ) const; /** \details This method is not applicable for the ray entity. \param endPoint [out] Reference to a variable which is three-dimensional point instance. */ virtual OdResult getEndPoint( OdGePoint3d& endPoint ) const; /** \details Computes the WCS coordinates of the point on the ray at the specified parameter value. \param param [in] Parameter value specifying the point on the ray as a Double value. \param pointOnCurve [out] Reference to a variable in which this method must save the three-dimensional point instance corresponding to the parameter. \sa \sa */ virtual OdResult getPointAtParam( double param, OdGePoint3d& pointOnCurve ) const; /** \details Computes the parameter at the point placed on the ray. \param pointOnCurve [in] Three-dimensional point instance which specifies the point on the ray. \param param [out] Reference to a variable in which this method must save the parameter value as a Double value. \sa \sa */ virtual OdResult getParamAtPoint( const OdGePoint3d& pointOnCurve, double& param ) const; /** \details Computes the distance along the ray measured from the base point in drawing units at the specified parameter. \param param [in] Parameter value specifying the point on the ray as a Double value. \param dist [out] Reference to a variable in which this method must save the distance value as a Double value. \sa \sa */ virtual OdResult getDistAtParam( double param, double& dist ) const; /** \details Computes the parameter at the distance along the ray measured from the base point. \param dist [in] Distance value along the ray as a Double value in drawing units. \param param [out] Reference to a variable in which this method must save the parameter value as a Double value. \sa \sa */ virtual OdResult getParamAtDist( double dist, double& param ) const; /** \details Computes the first derivative for the specified parameter of the ray entity and returns the three-dimensional vector instance. The first derivative is constant for any point of the ray. \param param [in] Parameter value specifying the point on the ray as a Double value. \param firstDeriv [out] Reference to a variable in which this method must save the first derivative as three-dimensional vector instance. \sa \sa */ virtual OdResult getFirstDeriv( double param, OdGeVector3d& firstDeriv ) const; /** \details Computes the second derivative for the specified parameter of the ray entity and returns the three-dimensional vector instance. The second derivative has (0,0,0) coordinates for any point of the ray. \param param [in] Parameter value specifying the point on the ray as a Double value. \param secondDeriv [out] Reference to a variable in which this method must save the second derivative as three-dimensional vector instance. \sa \sa */ virtual OdResult getSecondDeriv( double param, OdGeVector3d& secondDeriv ) const; /** \details This method is not applicable for the ray entity. */ virtual OdResult getArea( double& area ) const; TD_USING(OdDbCurve::getFirstDeriv); TD_USING(OdDbCurve::getSecondDeriv); virtual OdResult subTransformBy( const OdGeMatrix3d& xfm); virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const; virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol); }; /** \details The typified smart pointer for the ray object (Ray entity). This template class is specialization of the OdSmartPtr class for the OdDbRay class. \sa */ typedef OdSmartPtr OdDbRayPtr; #include "TD_PackPop.h" #endif