24#ifndef __ODGIPOINTCLOUD_H__
25#define __ODGIPOINTCLOUD_H__
101 if (!pFlags)
return addSet;
102 return *pFlags = (*pFlags & ~(3 << (component << 1))) | addSet;
109 return DataSize((flags >> (component << 1)) & 3);
141 const void *pNormals = NULL)
402 for (
OdUInt32 nArray = 0; nArray < nArrays; nArray++)
403 nPoints += pArrays[nArray].m_nPoints;
415 if (nArrays == 1) pointsCopy = *pArrays, pCopy = &pointsCopy;
416 else if (nArrays > 1) m_comps.
resize(nArrays),
418 if (m_pFilter->
filterPoints(pCopy, nArrays, compFlags, pExtents))
419 return addPointsImpl(pCopy, nArrays, compFlags, nCellId, pExtents);
427 return addPointsFiltered(pArrays, nArrays, compFlags, nCellId, pExtents);
429 return addPointsImpl(pArrays, nArrays, compFlags, nCellId, pExtents);
455 pObj->attachFilter(pFilter);
const OdGiPointCloudCellId kGiPointCloudNegativeCellId
OdSmartPtr< OdGiPointCloudFilter > OdGiPointCloudFilterPtr
OdSmartPtr< OdGiPointCloudReceiver > OdGiPointCloudReceiverPtr
OdSmartPtr< OdGiPointCloud > OdGiPointCloudPtr
OdUInt64 OdGiPointCloudCellId
#define GETBIT(flags, bit)
OdArray< OdUInt8, OdMemoryAllocator< OdUInt8 > > OdUInt8Array
const T * asArrayPtr() const
void resize(size_type logicalLength, const T &value)
OdGeEntity3d & transformBy(const OdGeMatrix3d &xfm)
static GE_STATIC_EXPORT const OdGeExtents3d kInvalid
static GE_STATIC_EXPORT const OdGeMatrix3d kIdentity
OdGeMatrix3d & preMultBy(const OdGeMatrix3d &leftSide)
OdGiPointCloud::ComponentsArray m_comps
virtual bool filterPointsImpl(OdGiPointCloud::ComponentsRaw *&pPoints, OdUInt32 &nArrays, OdUInt32 &compFlags, const OdGeBoundBlock3d *&pExtents) const
OdGiPointCloud::ComponentsArray & components() const
static OdGiPointCloudFilterPtr createObject(OdUInt32 compFlags, const OdGiPointCloudFilter *pPrevFilter=NULL)
void setComponentsRequest(OdUInt32 compFlags)
ODRX_DECLARE_MEMBERS(OdGiPointCloudComponentsFilter)
virtual bool filterBoundingBoxImpl(OdGeBoundBlock3d &) const
OdUInt32 componentsRequest() const
const OdGeExtents3d & getExtents() const
static OdGiPointCloudReceiverPtr createObject(const OdGiPointCloudFilter *pFilter)
virtual bool addPointsImpl(const OdGiPointCloud::ComponentsRaw *pArrays, OdUInt32 nArrays, OdUInt32 compFlags, OdGiPointCloudCellId, const OdGeBoundBlock3d *pExtents)
ODRX_DECLARE_MEMBERS(OdGiPointCloudExtentsReceiver)
virtual void extractTransformImpl(OdGeMatrix3d &) const
void attachFilter(const OdGiPointCloudFilter *pFilter)
OdGiPointCloudFilterPtr m_pPrevFilter
ODRX_DECLARE_MEMBERS(OdGiPointCloudFilter)
virtual bool filterBoundingBoxImpl(OdGeBoundBlock3d &bb) const =0
OdGiPointCloudFilterPtr detachFilter()
virtual bool filterPointsImpl(OdGiPointCloud::ComponentsRaw *&pArrays, OdUInt32 &nArrays, OdUInt32 &compFlags, const OdGeBoundBlock3d *&pExtents) const =0
bool filterPoints(OdGiPointCloud::ComponentsRaw *&pArrays, OdUInt32 &nArrays, OdUInt32 &compFlags, const OdGeBoundBlock3d *&pExtents) const
bool filterBoundingBox(OdGeBoundBlock3d &bb) const
OdGeMatrix3d extractTransform() const
const OdGiPointCloudFilter * previousFilter() const
virtual bool updatePointsData(OdGiPointCloudReceiver *pReceiver, OdUInt32 components=kNoComponents, OdUInt32 flags=0, const OdGiViewport *pVp=NULL, const OdGiViewport *pVpFrom=NULL, OdUInt32 pointSize=0, OdGiPointCloudScheduler *pExternalScheduler=NULL) const =0
virtual OdUInt32 componentsMask() const
ODRX_DECLARE_MEMBERS(OdGiPointCloud)
virtual bool getExtents(OdGeBoundBlock3d &) const
virtual const OdGeMatrix3d & globalTransform() const
static OdUInt32 getDefaultDataSizeFlags()
virtual bool isDataCompatible(const OdGiViewport &pVp1, const OdGiViewport &pVp2) const =0
virtual bool calculateExtents(OdGeExtents3d &extents, const OdGiPointCloudFilter *pFilter=NULL) const
OdArray< Components > ComponentsArray
static DataSize getDataSizeFlags(OdUInt32 flags, Component component)
virtual OdInt32 defaultPointSize() const
static OdUInt32 addDataSizeFlags(OdUInt32 *pFlags, Component component, DataSize ds)
virtual OdUInt32 supportFlags(Component component=kNumComponents) const
OdArray< ComponentsRaw, OdMemoryAllocator< ComponentsRaw > > ComponentsRawArray
virtual OdUInt32 totalPointsCount() const =0
static OdGiPointCloudFilterPtr createObject(const OdGiPointCloudFilter *pPrevFilter=NULL, bool bForce=false)
virtual bool filterPointsImpl(OdGiPointCloud::ComponentsRaw *&, OdUInt32 &, OdUInt32 &, const OdGeBoundBlock3d *&) const
virtual bool filterBoundingBoxImpl(OdGeBoundBlock3d &) const
OdGiPointCloudFilterPtr detachFilter()
OdGiPointCloud::ComponentsRawArray m_comps
OdGiPointCloudFilterPtr m_pFilter
OdUInt32 numPointsTotal(const OdGiPointCloud::ComponentsRaw *pArrays, OdUInt32 nArrays) const
bool removePoints(OdUInt32 nPoints, OdGiPointCloudCellId nCellId=kGiPointCloudNegativeCellId)
virtual bool addPointsImpl(const OdGiPointCloud::ComponentsRaw *pArrays, OdUInt32 nArrays, OdUInt32 compFlags, OdGiPointCloudCellId nCellId, const OdGeBoundBlock3d *pExtents)=0
virtual bool removePointsImpl(OdUInt32, OdGiPointCloudCellId)
ODRX_DECLARE_MEMBERS(OdGiPointCloudReceiver)
bool addPoints(const OdGiPointCloud::ComponentsRaw *pArrays, OdUInt32 nArrays, OdUInt32 compFlags, OdGiPointCloudCellId nCellId=kGiPointCloudNegativeCellId, const OdGeBoundBlock3d *pExtents=NULL)
void attachFilter(const OdGiPointCloudFilter *pFilter)
OdGiPointCloudScheduler()
virtual void startScheduling()=0
virtual void stopScheduling()=0
virtual SchedulerState checkSchedulerState(bool bFinal=false)=0
virtual ~OdGiPointCloudScheduler()
OdGiPointCloudTimerBasedScheduler()
OdUInt32 timerPeriod() const
~OdGiPointCloudTimerBasedScheduler()
void setTimerPeriod(OdUInt32 msec)
OdPerfTimerBase * m_pTimer
SchedulerState checkSchedulerState(bool bFinal=false)
OdUInt8Array m_component[kNumExtraComponents]
bool hasComponent(long nComponent) const
bool hasComponent(long nComponent) const
const void * m_pComponent[kNumExtraComponents]
ComponentsRaw & construct(const void *pPoints, OdUInt32 nPoints, const void *pColors=NULL, const void *pTransparencies=NULL, const void *pNormals=NULL)
ComponentsRaw & fromComponents(Components &comps, OdUInt32 components=0xFFFFFFFF)