///////////////////////////////////////////////////////////////////////////////
// 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 __ODGIORTOCLIPPEREX_H__
#define __ODGIORTOCLIPPEREX_H__
#include "Gi/GiOrthoClipper.h"
#include "Gi/GiAbstractClipBoundary.h"
#include "TD_PackPush.h"
class OdGeBoundBlock3d;
class OdStreamBuf;
/** \details
This class implements a geometry clipper, used for clipping objects.
{group:OdGi_Classes}
*/
class ODGI_EXPORT OdGiOrthoClipperEx : public OdGiOrthoClipper
{
public:
ODRX_DECLARE_MEMBERS(OdGiOrthoClipperEx);
// Initial clipper interface support
TD_USING(OdGiOrthoClipper::set);
TD_USING(OdGiOrthoClipper::get);
// Extend initial interface by inverted clipping boundary support
/** \details
Creates a clipping stage.
\param bInverted [in] Specifies the Inverted (if true) or the Normal (if false) type of polygonal clipping boundary.
\param nPoints [in] Count of points.
\param points [in] Points defining sides of clipping prism perpendicular to XY.
\param bClipLowerZ [in] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [in] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [in] Flag which indicates that there is an upper clipping plane
\param dUpperZ [in] Z-coordinate of the upper clipping plane.
\remarks
If nPoints is 0 - XY clip is disabled. If nPoints is 2 - defines a rectangle clipping boundary.
*/
virtual void set(bool bInverted,
OdUInt32 nPoints, // points counter. 0 - disables XY clip; 2 - defines rectangle.
const OdGePoint2d* points, // points defining sides of clipping prism perpendicular to XY
bool bClipLowerZ = false, double dLowerZ = 0.0,
bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
/** \details
Creates a clipping stage.
\param bInverted [in] Specifies the Inverted (if true) or the Normal (if false) type of polygonal clipping boundary.
\param points [in] Array of 2D points defining sides of clipping prism perpendicular to XY.
\param bClipLowerZ [in] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [in] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [in] Flag which indicates that there is an upper clipping plane.
\param dUpperZ [in] Z-coordinate of the upper clipping plane.
*/
virtual void set(bool bInverted,
const OdGePoint2dArray& points, // points defining sides of clipping prism perpendicular to XY
bool bClipLowerZ = false, double dLowerZ = 0.0,
bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
/** \details
Returns a clipping stage.
\param bInverted [out] Specifies the Inverted (if true) or the Normal (if false) type of polygonal clipping boundary.
\param points [out] Array of 2D points defining sides of clipping prism perpendicular to XY.
\param bClipLowerZ [out] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [out] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [out] Flag which indicates that there is an upper clipping plane.
\param dUpperZ [out] Z-coordinate of the upper clipping plane.
*/
virtual void get(bool &bInverted, OdGePoint2dArray& points,
bool& bClipLowerZ, double& dLowerZ,
bool& bClipUpperZ, double& dUpperZ) const = 0;
// Extend initial interface by extended clipping boundary support
/** \details
Creates a clipping stage with extended or complex clipping boundary.
\param bPreprocess [in] Specifies the Complex (if true) or the Extended (if false) type of polygonal clipping boundary.
\param nCounts [in] Count of polygons which define the clipping boundary.
\param counts [in] Array of points count of each polygon.
\param nPoints [in] Count of points.
\param points [in] Points defining sides of clipping prism perpendicular to XY.
\param bClipLowerZ [in] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [in] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [in] Flag which indicates that there is an upper clipping plane.
\param dUpperZ [in] Z-coordinate of the upper clipping plane.
*/
virtual void set(bool bPreprocess, OdUInt32 nCounts, const int *counts,
OdUInt32 nPoints, const OdGePoint2d *points,
bool bClipLowerZ = false, double dLowerZ = 0.0,
bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
/** \details
Creates a clipping stage with extended or complex clipping boundary.
\param bPreprocess [in] Specifies the Complex (if true) or the Extended (if false) type of polygonal clipping boundary.
\param counts [in] Array of points count of each polygon.
\param points [in] Array of 2D Points defining polygons.
\param bClipLowerZ [in] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [in] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [in] Flag which indicates that there is an upper clipping plane.
\param dUpperZ [in] Z-coordinate of the upper clipping plane.
*/
virtual void set(bool bPreprocess, const OdIntArray& counts, const OdGePoint2dArray& points,
bool bClipLowerZ = false, double dLowerZ = 0.0,
bool bClipUpperZ = false, double dUpperZ = 0.0) = 0;
/** \details
Returns a clipping stage.
\param counts [out] Array of points count of each polygon.
\param points [out] Array of 2D points defining polygons.
\param bClipLowerZ [out] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [out] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [out] Flag which indicates that there is an upper clipping plane.
\param dUpperZ [out] Z-coordinate of the upper clipping plane.
*/
virtual void get(OdIntArray& counts, OdGePoint2dArray& points,
bool& bClipLowerZ, double& dLowerZ,
bool& bClipUpperZ, double& dUpperZ) const = 0;
// Stubs for old extended clipping boundary interface
/** \details
Creates a clipping stage with extended clipping boundary.
\param nCounts [in] Count of polygons which define the clipping boundary.
\param counts [in] Array of points count of each polygon.
\param nPoints [in] Count of points.
\param points [in] Points defining sides of clipping prism perpendicular to XY.
\param bClipLowerZ [in] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [in] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [in] Flag which indicates that there is an upper clipping plane.
\param dUpperZ [in] Z-coordinate of the upper clipping plane.
*/
void set(OdUInt32 nCounts, const int *counts,
OdUInt32 nPoints, const OdGePoint2d *points,
bool bClipLowerZ = false, double dLowerZ = 0.0,
bool bClipUpperZ = false, double dUpperZ = 0.0)
{ set(false, nCounts, counts, nPoints, points, bClipLowerZ, dLowerZ, bClipUpperZ, dUpperZ); }
/** \details
Creates a clipping stage with extended clipping boundary.
\param counts [in] Array of points count of each polygon.
\param points [in] Array of 2D points defining polygons.
\param bClipLowerZ [in] Flag which indicates that there is a lower clipping plane.
\param dLowerZ [in] Z-coordinate of the lower clipping plane.
\param bClipUpperZ [in] Flag which indicates that there is an upper clipping plane.
\param dUpperZ [in] Z-coordinate of the upper clipping plane.
*/
void set(const OdIntArray& counts, const OdGePoint2dArray& points,
bool bClipLowerZ = false, double dLowerZ = 0.0,
bool bClipUpperZ = false, double dUpperZ = 0.0)
{ set(false, counts, points, bClipLowerZ, dLowerZ, bClipUpperZ, dUpperZ); }
// Some classification functionality applicable for single (top) clipping stage
/** \details
Returns true if the top clipping stage is empty or returns false in the other case.
*/
virtual bool isEmpty() const = 0;
/** \details
Returns true if the top clipping stage is inverted or returns false in the other case.
*/
virtual bool isInverted() const = 0;
/** \details
Returns true if the top clipping stage is extended or returns false in the other case.
*/
virtual bool isExtended() const = 0;
/** \details
Returns true if there is only one clipping stage or returns false if there is not.
*/
virtual bool isSingleClipStage() const = 0;
/** \details
Returns true if the set of clipping stages is empty or returns false in the other case.
*/
virtual bool isEmptyClipSet() const = 0;
// Support direct setting of clipping boundaries
/** \details
Creates a clipping boundary.
\param pBoundary [in] Clipping boundary.
\param pClipInfo [in] Additional clipping boundary information.
\param pXform [in] Optional boundary transform matrix.
*/
virtual void set(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo = NULL, const OdGeMatrix3d *pXform = NULL) = 0;
/** \details
Returns the type of clipping boundary.
\sa
*/
virtual OdGiAbstractClipBoundary::BoundaryType getType() const = 0;
// Configuration
/** \details
Enables an analytic curves clipping.
\param bEnable [in] Boolean flag which indicates that analytic curves clipping is enabled (true value)
or disabled (false value).
*/
virtual void enableAnalyticCurvesClipping(bool bEnable) = 0;
/** \details
Returns true if the analytic curves clipping is enabled or returns false in the other case.
*/
virtual bool isAnalyticCurvesClippingEnabled() const = 0;
/** \details
Enables clipping.
*/
virtual void enable() = 0;
/** \details
Disables clipping.
*/
virtual void disable() = 0;
/** \details
Returns true if clipping is enabled or returns false in the other case.
*/
virtual bool enabled() const = 0;
/** \details
Represents a memory limit (in bytes) used by clipping engine during clipping a set of polygons.
*/
enum ClipLimit
{
/**Memory limit (in bytes) which limits internal clipping structures number.*/
kPolyClipLimit = 0, // Memory limit (in bytes) which limits internal clipping structures number
/**Count of limits available at the current moment.*/
kNumClipLimits
};
/** \details
Sets a memory limit (in bytes) used by clipping engine during clipping a set of polygons.
\param clipLimit [in] Memory limit (in bytes) which limits internal clipping structures number..
\param nLimit [in] Count of limits.
*/
virtual void setLimit(ClipLimit clipLimit, OdUInt32 nLimit) = 0;
/** \details
Returns a memory limit (in bytes) used by clipping engine during clipping a set of polygons.
\param clipLimit [in] Memory limit (in bytes) which limits internal clipping structures number.
*/
virtual OdUInt32 getLimit(ClipLimit clipLimit) const = 0;
// Support mutiple clip stages
/** \details
Tolerance override specification.
*/
struct TolOverride
{
/**Tolerance override value.*/
double m_tolOverride;
/** \details
How to treat tolerance override.
*/
enum OverrideType
{
/**Tolerance override disabled.*/
kNoOverride = 0,
/**Absolute tolerance override which reset internally calculated tolerance completely.*/
kAbsolute,
/**Tolerance override is a multiplier for internally calculated tolerance.*/
kMultiplier,
/**Tolerance override is a addition to internally calculated tolerance.*/
kAddition
} m_overrideType;
TolOverride() : m_tolOverride(1.e-10), m_overrideType(kNoOverride) {}
};
/** \details
Polygonal clipping boundary tolerance override.
*/
struct PolyTolOverride
{
/**World space clipping tolerance override.*/
TolOverride m_clipTolOverride;
/**Local boundary space clipping tolerance override.*/
TolOverride m_localTolOverride;
/**Sections generation tolerance override.*/
TolOverride m_sectionTolOverride; // reserved
/**Clipping boundary preprocessing tolerance.*/
TolOverride m_boundaryTolOverride; // reserved
};
/** \details
Describes a clipping plane.
*/
struct ClipPlane
{
/**Plane's origin point.*/
OdGePoint3d m_origin;
/**Plane's normal vector.*/
OdGeVector3d m_normal;
/** \details
Describes a type of clipping plane.
*/
enum MarkType
{
/**Plane is not marked.*/
kNoMark = 0,
/**Lower plane.*/
kMarkLower,
/**Upper plane.*/
kMarkUpper
} m_markType;
/**Optional plane clipping tolerance override.*/
TolOverride m_clipTolOverride;
/**Optional plane sections generation tolerance override.*/
TolOverride m_sectionTolOverride;
ClipPlane() : m_markType(kNoMark) {}
};
/** \details
Defines the type of array of clipping planes.
*/
typedef OdArray > ClipPlanesArray;
/** \details
Set of flags which can be passed for separate clipping stage during construction.
*/
enum ClipStageFlags
{
/**Default clipping stage flags state.*/
kCSNoFlags = 0,
/**Construct clipping stage in disabled state.*/
kCSDisabled = (1 << 0),
/**Specifies the Inverted (if true) or the Normal (if false) type of polygonal clipping boundary.*/
kCSInverted = (1 << 1),
/**Mark that the clipping stage can generate section geometry.*/
kCSEnableSections = (1 << 2),
/**Mark that the clipping stage can generate cutted geometry.*/
kCSEnableCutting = (1 << 3),
/**Enable passing geometry through clipping stage without clipping if sections/slicing output disabled.*/
kCSPassNonSections = (1 << 4)
};
/** \details
Represents a classification of clipping contours in a clipping boundary.
*/
enum CountsClassify
{
/**Classification is not used.*/
kCCDontClassify = 0, // Avoid classification
/**Classification by contours inclusion.*/
kCCClassifiedByInclusion, // Classify by polygon-polygon inclusion
/**Classification by positive/negative counts number.*/
kCCClassifiedByInteger, // Classify by positive/negative counts number
/**Classification by clockwise/counterclockwise ordering.*/
kCCClassifiedByOrder, // Classify by CW/CCW ordering
/**Classification by positive/negative normal.*/
kCCClassifiedByNormal, // Classify by positive/negative normal
/**Classification by Xor operation (intersection).*/
kCCClassifiedByXor, // Preprocess by Xor operation (intersection)
/**Classification by set of Union/Subtract operations.*/
kCCClassifiedBySignedXor // Preprocess by set of Union/Subtract operations
};
/** \details
Creates a clipping boundary.
\param pBoundary [in] Clipping boundary.
\param pClipInfo [in] Additional clipping boundary information.
\param pXform [in] Optional boundary transform matrix.
*/
virtual void pushClipStage(OdGiClipBoundary* pBoundary, OdGiAbstractClipBoundary* pClipInfo = NULL, const OdGeMatrix3d *pXform = NULL) = 0;
/** \details
Creates a clipping boundary from infinite planes defined in a space.
\param numPlanes [in] Count of planes.
\param pPlanes [in] Planes for defining a clipping boundary.
\param pXform [in] Optional boundary transform matrix.
\param stageFlags [in] Set of clipping stage flags (look at ClipStageFlags enumeration).
*/
virtual void pushClipStage(OdUInt32 numPlanes, const ClipPlane *pPlanes, const OdGeMatrix3d *pXform = NULL, OdUInt32 stageFlags = kCSNoFlags) = 0;
/** \details
Creates a clipping boundary.
\param nCounts [in] Count of polygons which define the clipping boundary.
\param counts [in] Array of points count of each polygon.
\param nPoints [in] Count of vertices which define the clipping boundary.
\param points [in] Array of points defining a clipping boundary.
\param stageFlags [in] Set of clipping stage flags (look at ClipStageFlags enumeration).
\param countsClass [in] Clipping contours classification mode.
\param pXform [in] Optional boundary transform matrix.
\param numPlanes [in] Count of planes.
\param pPlanes [in] Planes for defining a clipping boundary.
\param pPolyTol [in] Optional polygon tolerance overrides.
*/
virtual void pushClipStage(OdUInt32 nCounts, const int *counts,
OdUInt32 nPoints, const OdGePoint2d *points,
OdUInt32 stageFlags = kCSNoFlags, CountsClassify countsClass = kCCDontClassify, const OdGeMatrix3d *pXform = NULL,
OdUInt32 numPlanes = 0, const ClipPlane *pPlanes = NULL, PolyTolOverride *pPolyTol = NULL) = 0;
/** \details
Creates a clipping boundary.
\param nCounts [in] Count of polygons which define the clipping boundary.
\param counts [in] Array of points count of each polygon.
\param nPoints [in] Count of vertices which define the clipping boundary.
\param points [in] Array of points defining a clipping boundary.
\param pNormal [in] Normal.
\param stageFlags [in] Set of clipping stage flags (look at ClipStageFlags enumeration).
\param countsClass [in] Clipping contours classification mode.
\param pXform [in] Optional boundary transform matrix.
\param numPlanes [in] Count of planes.
\param pPlanes [in] Planes for defining a clipping boundary.
\param pPolyTol [in] Optional polygon tolerance overrides.
*/
virtual void pushClipStage(OdUInt32 nCounts, const int *counts,
OdUInt32 nPoints, const OdGePoint3d *points, const OdGeVector3d *pNormal = NULL,
OdUInt32 stageFlags = kCSNoFlags, CountsClassify countsClass = kCCDontClassify, const OdGeMatrix3d *pXform = NULL,
OdUInt32 numPlanes = 0, const ClipPlane *pPlanes = NULL, PolyTolOverride *pPolyTol = NULL) = 0;
/** \details
Removes a clipping stage.
\returns
Returns true if the clipping stage was successfully removed or returns false in the other case.
*/
virtual bool popClipStage() = 0;
/** \details
Clears all clipping stages.
\param bClearCache [in] Flag which indicates that caches should be cleared.
*/
virtual void clearClipping(bool bClearCache = false) = 0;
/** \details
Clears all temporarily allocated arrays and caches.
*/
virtual void clearTemporaryArrays() = 0;
/** \details
Returns the count of clipping stages.
*/
virtual OdUInt32 numClipStages() const = 0;
/** \details
Classifies the clipping stage.
\param nStage [in] Clipping stage's index.
\param pNPlanes [in/out] Count of planes in the clipping stage.
\param pNPolys [in/out] Count of polygons in the clipping stage.
\param bFirstPolyInverted [in/out] Flag which indicates that the first polygon is inverted.
*/
virtual void classifyClipStage(OdUInt32 nStage, OdUInt32 *pNPlanes, OdUInt32 *pNPolys = NULL, bool *bFirstPolyInverted = NULL) const = 0;
/** \details
Returns true if sectioning enabled for specified clipping stage.
\param nStage [in] Clipping stage's index.
*/
virtual bool isClipStageSectionable(OdUInt32 nStage) const = 0;
/** \details
Returns true if cutting geometry generation enabled for specified clipping stage.
\param nStage [in] Clipping stage's index.
*/
virtual bool isClipStageCuttable(OdUInt32 nStage) const = 0;
/** \details
Returns the clipping stage.
\param nStage [in] Clipping stage's index.
\param counts [out] Array of points count of each polygon in the clipping stage.
\param points [out] Array of 2D points defining a clipping boundary.
\param pNormal [in/out] Normal.
\returns
Returns true if the clipping stage is not empty or returns false in the other case.
*/
virtual bool getClipStage(OdUInt32 nStage, OdIntArray& counts, OdGePoint2dArray& points, OdGeVector3d *pNormal = NULL) const = 0;
/** \details
Returns the clipping stage.
\param nStage [in] Clipping stage's index.
\param counts [out] Array of points count of each polygon in the clipping stage.
\param points [out] Array of 3D points defining a clipping boundary.
\param pNormal [in/out] Normal.
\returns
Returns true if the clipping stage is not empty or returns false in the other case.
*/
virtual bool getClipStage(OdUInt32 nStage, OdIntArray& counts, OdGePoint3dArray& points, OdGeVector3d *pNormal = NULL) const = 0;
/** \details
Returns the clipping stage when the clipping boundary defined by infinite planes.
\param nStage [in] Clipping stage's index.
\param planes [out] Array of infinite planes in the clipping stage.
\returns
Returns true if the clipping stage is not empty or returns false in the other case.
*/
virtual bool getClipStage(OdUInt32 nStage, ClipPlanesArray& planes) const = 0;
/** \details
Enables or disables specified clipping stage.
\param nStage [in] Clipping stage's index.
\param bEnable [in] New clipping stage state.
*/
virtual void enableClipStage(OdUInt32 nStage, bool bEnable) = 0;
/** \details
Checks that clipping stage enabled or disabled.
\param nStage [in] Clipping stage's index.
*/
virtual bool isClipStageEnabled(OdUInt32 nStage) const = 0;
// Interface compatibility with OdGiOrthoPrismIntersector
/** \details
Returns the clipping status:
Returned value Description
0 Clipping does not occur.
8 The object clipped partially or completely at least once.
16 The object completely clipped at least once.
*/
virtual OdUInt32 clipStatus() const = 0;
/** \details
Clears the clipping status:
*/
virtual void clearClipStatus() = 0;
// Some helpful checking routines
/** \details
Represents a visibility status of clipped objects.
*/
enum VisibilityStatus
{
/**Invisible.*/
kStatusInvisible = -1,
/**Clipped.*/
kStatusClipped = 0,
/**Visible.*/
kStatusVisible = 1
};
/** \details
Returns the visible status of the 3D point.
\param pt [in] 3D point.
*/
virtual VisibilityStatus checkPointVisibility(const OdGePoint3d &pt) const = 0;
/** \details
Returns the sphere's visible status.
\param origin [in] Sphere's origin point.
\param radius [in] Sphere's radius.
*/
virtual VisibilityStatus checkSphereVisibility(const OdGePoint3d &origin, double radius) const = 0;
/** \details
Returns the visible status of extents.
\param extents [in] Extents.
*/
virtual VisibilityStatus checkExtentsVisibility(const OdGeExtents3d &extents) const = 0;
/** \details
Returns the visible status of the bounding block.
\param bb [in] Bounding block.
*/
virtual VisibilityStatus checkBoundsVisibility(const OdGeBoundBlock3d &bb) const = 0;
// Clipping engine debugging
/** \details
Enables clipping engine debugging.
\param pStream [out] Stream to which the debugging information is to be written.
*/
virtual void enableLogging(OdStreamBuf *pStream) = 0;
/** \details
Disable clipping engine debugging.
*/
virtual void disableLogging() = 0;
/** \details
Returns boolean value true if the clipping engine debugging enabled. If
the clipping engine debugging disabled returns false.
*/
virtual bool isLoggingEnabled() const = 0;
// Support sections
/** \details
Output for optional section geometry.
*/
virtual OdGiConveyorOutput& sectionOutput() = 0;
/** \details
Output for optional cutting geometry.
*/
virtual OdGiConveyorOutput& cuttingOutput() = 0;
/** \details
Returns native clipping context, managed by this clipping object.
*/
virtual OdGiClippedGeometryOutput::ClippedGeometryOutputInterface *nativeClippingGeometryInterface() = 0;
/** \details
Sends accumulated geometry sections into conveyor output.
\param bFlushClosed [in] Send accumulated closed sections as shell geometry primitive.
\param bFlushOpened [in] Send accumulated opened sections as polyline geometry primitive.
\param bReleaseData [in] Delete accumulated sections data after flushing.
*/
virtual void flushSection(bool bFlushClosed = true, bool bFlushOpened = false,
bool bReleaseData = true) = 0;
};
/** \details
This template class is specialization of the OdSmartPtr class for the OdGiOrthoClipperEx class.
\sa
*/
typedef OdSmartPtr OdGiOrthoClipperExPtr;
// Utility classes
/** \details
This class implements a section/cutted geometry interface connector for clipper.
{group:OdGi_Classes}
*/
class ODGI_EXPORT OdGiClippedGeometryConnector : public OdGiConveyorNode
{
public:
ODRX_DECLARE_MEMBERS(OdGiClippedGeometryConnector);
/** \details
Sets section/cutted geometry output interface.
\param pOutput [in] Section/cutted geometry output interface.
*/
virtual void setClippedGeometryOutput(OdGiClippedGeometryOutput *pOutput) = 0;
/** \details
Returns section/cutted geometry output interface.
*/
virtual OdGiClippedGeometryOutput *getClippedGeometryOutput() const = 0;
/** \details
Checks that section/cutted geometry output was set.
*/
virtual bool hasClippedGeometryOutput() const = 0;
/** \details
Sets the draw context object (to access to traits, etc).
*/
virtual void setDrawContext(OdGiConveyorContext* pDrawCtx) = 0;
/** \details
Sets external clipped geometry output interface.
\param pIface [in] Pointer onto clipped geometry output interface.
*/
virtual void setExternalClippedGeometryOutputInterface(OdGiClippedGeometryOutput::ClippedGeometryOutputInterface *pIface) = 0;
/** \details
Returns active clipped geometry output interface.
*/
virtual OdGiClippedGeometryOutput::ClippedGeometryOutputInterface &clippedGeometryOutputInterface() = 0;
/** \details
Enables skipping of section/cutted geometry output.
\param bSkip [in] New state for section/cutted geometry output skipping mode.
\remarks In case if skipping enabled this conveyor node will simply redirect section/cutted geometry to output geometry.
*/
virtual void setClippedGeometryOutputSkip(bool bSkip) = 0;
/** \details
Check that section/cutted geometry output skipping mode enabled.
*/
virtual bool isClippedGeometryOutputSkipping() const = 0;
/** \details
Provides ability to disable output for this conveyor node.
\param bDisable [in] New state for conveyor node output disable.
\remarks In case if this conveyor node is in disabled state it will work as OdGiEmptyGeometry.
*/
virtual void disableGeometryOutput(bool bDisable) = 0;
/** \details
Returns current state of conveyor node output disable mode.
*/
virtual bool isGeometryOutputDisabled() const = 0;
/** \details
Returns true if closed sections output enabled.
\remarks Always return true for cutted geometry output interface.
*/
virtual bool isClosedSectionsOutputEnabled() const = 0;
/** \details
Returns true if opened sections output enabled.
\remarks Always return true for cutted geometry output interface.
*/
virtual bool isOpenedSectionsOutputEnabled() const = 0;
};
/** \details
This template class is specialization of the OdSmartPtr class for the OdGiClippedGeometryConnector class.
\sa
*/
typedef OdSmartPtr OdGiClippedGeometryConnectorPtr;
#include "TD_PackPop.h"
#endif //#ifndef __ODGIORTOCLIPPEREX_H__