deargui-vpl/ref/virtools/Includes/CK3dPointCloud.h

878 lines
38 KiB
C++

/*************************************************************************/
/* File : CK3dPointCloud.h */
/* Author : Romain Sididris */
/* */
/* Virtools SDK */
/* Copyright (c) Virtools 2003, All Rights Reserved. */
/*************************************************************************/
#if (!defined(CK3DPOINTCLOUD_H) || defined(CK_3DIMPLEMENTATION))
#define CK3DPOINTCLOUD_H "$Id:$"
// When included from the implementation side the
// sub includes, PURE definition and class statement must to be removed
#ifndef CK_3DIMPLEMENTATION
/***********************************************************
Summary: An iterator to iterate on a cloud of points.
{filename:CloudSelection}
Remarks:
See Also:CK3dPointCloud
************************************************************/
class CloudSelection {
public:
enum EDrawMode {
ePoint = 0,
eSprites = 1,
ePrimitive = 2,
};
enum Flags {
eLighting = 1<<4,
eVBUptodate = 1<<5,
eVisible = 1<<6,
eUseMatColor = 1<<7,
};
XString m_Name;
int m_MaxSize;
int m_Flags;
CKMaterial* m_DisplayMaterial;
CKMesh* m_DisplayMesh;
virtual const XString& GetName() const = 0;
virtual void SetName(const XString& iName) = 0;
virtual CKMaterial* GetDisplayMaterial() const = 0;
virtual void SetDisplayMaterial(CKMaterial* iMaterial) = 0;
virtual void UseMaterialColor(CKBOOL iUse) = 0;
virtual CKBOOL IsUsingMaterialColor() const = 0;
virtual CKBOOL IsVisible() const = 0;
virtual void SetVisible(CKBOOL IsVisible) = 0;
virtual CKBOOL IsLightingEnabled() const = 0;
virtual void EnableLighting(CKBOOL iEnable = TRUE) = 0;
virtual int GetPointCount() const = 0;
virtual const VxVector& GetPointPosition(int iPointIndex) const = 0;
virtual int GetPointOriginalIndex(int iPointIndex) const = 0;
virtual int GetMaximumPointCount() const = 0;
virtual void SetMaximumPointCount(int iMaxPointCount) = 0;
virtual int GetDrawMode() const = 0;
virtual void SetDrawMode(int iMode) = 0;
virtual CKMesh* GetDisplayMesh() const = 0;
virtual void SetDisplayMesh(CKMesh* iMesh) = 0;
virtual void ClearSelection() = 0;
};
/***********************************************************
Summary: An iterator to iterate on a cloud of points.
{filename:CloudIterator}
Remarks:
It can be used to iterate the octree that is used to store the data.
This tree is made up of node that contain up to 8 children nodes
One can ask an iterator from the tree root node (See CK3dPointCloud::GetRootIterator)
and then iterate using Depth first (NextNode) or custom (ToChildByIndex) iteration.
Warning: Only a single iterator should be created at a time on a single CK3dPointCloud.
See Also:CK3dPointCloud
************************************************************/
class CloudIterator {
public:
//Summary: Return TRUE if the iterator is on a tree node.
//
virtual XBOOL IsNode() = 0;
//Summary: Return TRUE if the iterator is on a tree leaf.
//
virtual XBOOL IsLeaf() = 0;
//Summary: Return the current node bounding box in cloud local coordinates (as visible in the 3D view).
//
virtual void GetBox(VxBbox& oBox) = 0;
//Summary: Return the current node bounding box in cloud local coordinates (as in the original .asc file).
//
virtual void GetRealBox(VxBbox& oBox) = 0;
//--- Linear iteration (depth first or width first)
//Summary: Advance the iterator to the next element (node or leaf) in a Depth First order.
//
virtual XBOOL NextNode() = 0;
//Summary: Advance the iterator to the next point
//
virtual XBOOL NextPoint() = 0;
//--- Node iteration
//Summary: Move this iterator back the parent node
//Return Value: TRUE if sucessful, FALSE if there the iterator is on tree root.
//
virtual XBOOL ToParent() = 0;
//Summary: Return the number of children of the current node
//
virtual int GetChildrenCount() = 0;
//Summary: Advance the iterator down to the iChildIndex children
//Return Value: TRUE if sucessful, FALSE if no child exist.
//
virtual XBOOL ToChildByIndex(int iChildIndex) = 0;
//Summary: Return if a child exists for one of the 8 possible branches of a node.
//
virtual XBOOL IsChildHere(int iBranchIndex) = 0;
//Summary: Advance the iterator down to a children given its position in the 8 possible branches.
//Return Value: TRUE if sucessful, FALSE if no child exist.
//
virtual XBOOL ToChildByBranch(int iBranchIndex) = 0;
//Summary: Returns the position of the currently iterated point (as visible in the 3D view).
//
virtual VxVector GetCurrentPointPosition() = 0;
//Summary: Returns the position of the currently iterated point (as it was stored in the .asc file).
//
virtual VxVector GetCurrentPointRealPosition() = 0;
//Summary: Returns the global index of the currently iterated point.
//
virtual int GetCurrentPointIndex() = 0;
};
/*******************************************************
Summary: Attributes on points
Remarks:
Every points can store attributes on it. By default 4 types of attribute are defined
(not necessarily used): A color , normal , intensity and render group.
This attributes can be integer or float values. For integer the number of bits used to store
the value can be specified in the BitsPerValue member thus allowing efficient storage.
See Also:CK3dPointCloud
*******************************************************/
struct CloudAttributeDescription {
CloudAttributeDescription():ValueType(ATTRIBUT_INT),BitsPerValue(0),Flags(ATTRIBUT_RESERVED) {}
#ifdef DOCJETDUMMY // DOCJET secret macro
#else
enum AttValueType {
ATTRIBUT_INT = 0, // A int (with n bit per value) will be stored for each point
ATTRIBUT_FLOAT , // A float (32 bit) will be stored for each point
ATTRIBUT_COLOR , // A 16 bit color
ATTRIBUT_NORMAL , // A 10 bit compressed normal
};
enum AttFlags {
ATTRIBUT_RESERVED = 1<<0, //
ATTRIBUT_DYNAMIC = 1<<1, // Attribute values are frequently updated
ATTRIBUT_PUTINVB = 1<<2, // This attribut values will be put in the vertex buffers with positions
};
#endif
AttValueType ValueType; // Type of the value stored
// Can be ATTRIBUT_INT , ATTRIBUT_FLOAT , ATTRIBUT_COLOR (A 16 bit 565 color) or ATTRIBUT_NORMAL (A 16 bit compressed normal)
XString Name; // Name of the attribute
int BitsPerValue; // Summary:Number of bits taken by the value
// Remarks:This value is only used when using an ATTRIBUT_INT or ATTRIBUT_ENUM storage. If this not given (0) 32 bits will be used for each value.
DWORD Flags; // Reserved
};
#include "CK3dEntity.h"
#undef CK_PURE
#define CK_PURE = 0
/***************************************************************************
{filename:CK3dPointCloud}
Name: CK3dPointCloud
Summary: Cloud of 3D points.
Remarks:
This class is used to manage and display clouds of 3D points.
These points are stored in a tree structure for efficient memory management and can have
attribute attached like colors, normal or user defined attributes.
One of these attribute is called the render group (see GetPointRenderGroup).
Points can be placed in different render group to have different render options
(rendering as a sprite , size of this sprite , usage of a given material, etc..).
The class id of CK3dPointCloud is CKCID_3DPOINTCLOUD.
See also: CK3dEntity
***************************************************************************/
class CK3dPointCloud : public CK3dEntity {
#endif
public :
/***************************************************************
Summary: Default Point cloud attributes.
Remarks:
This enumeration represents the attribute type that are always
created for a 3D point cloud (which does not mean they are used)
*****************************************************************/
enum DefaultCloudAttribute {
CLOUD_ATTRIBUTE_UNUSED = 0, // Attribute 0 is not used
CLOUD_ATTRIBUTE_COLOR = 1, // Color information is stored as 16 bits color
CLOUD_ATTRIBUTE_NORMAL = 2, // Normal information is stored as compressed on 10 bits
CLOUD_ATTRIBUTE_INTENSITY = 3, // An intensity stored on 8 bits
};
/************************************************************
Summary: Create the cloud using a .Asc file.
Remarks:
This method searches for a file named iFileName.Desc in the same directory
than the iFileName file.
This *.Desc* file contains the information about the number of points, bounding box, etc...
and its syntax is the following:
Version 0
Points 2399432
Format 6
Precision (0.110841,0.122853,0.114422)
BoxMin (503847.437500,78931.140625,19900.824219)
BoxMax (521581.968750,98587.679688,38208.335938)
Translate (-512000,-88000,-29000)
Rescale 0.05
No comments are allowed in a *.Desc* file for the moment....
This information allows for a quick one-step processing of the .asc file. If the *.Desc* file is not found
the file is loaded in a two-step process to identify the bounding volumes
The asc file is a text-mode file which contains a list of point and its syntax looks like this:
10.0 11.0 5.0
8.002 13.15 14.2
etc...
The data contained in a .asc file is expected to be in the form :
X Y Z (floats) [R G B (0..255)] [NX NY NZ (floats)] [I(0..255)]
If the appropriate fields are found (color, normal and/or intensity) the relevant attribute types
are created and marked as used on the point cloud.
See Also: CreateFromPointList
*************************************************************/
virtual CKBOOL CreateFromAscFile(const char* iFileName) CK_PURE;
/************************************************************
Summary: Create the cloud using an array of points.
Arguments:
iPointCount: Number of points in the iPoints array.
iPoints: A point to the list of point in the cloud.
iNormals: (Optionnal, can be NULL) A pointer to an array of VxVector containing the points normals.
iColors: (Optionnal, can be NULL) A pointer to an array of DWORD containing the points colors (32 bit ARGB).
iIntensities: (Optionnal, can be NULL) A pointer to an array of Bytes containing the points intensity.
iPrecision: A vector containing the error that is acceptable between the value given in iPoints and the values that will get stored in the tree.
Remarks:
This methods creates a new cloud using the data given in the different arrays.
Only the iPointCount, iPoints and iPrecision parameters are mandatory.
See Also: CreateFromAscFile
*************************************************************/
virtual CKBOOL CreateFromPointList(int iPointCount,VxVector* iPoints,VxVector* iNormals,DWORD* iColors,BYTE* iIntensities,VxVector& iPrecision) CK_PURE;
/****************************************************************
Summary: Enables or disables the lighting of the points
Input Arguments:
iEnable: TRUE to set lighting on , FALSE to set it off.
Remarks:
If the data set does not contain any normal information the
lighting can not be enabled.
See Also: IsLightingEnabled,HasNormals
*****************************************************************/
virtual void EnableLighting(CKBOOL iEnable = TRUE) CK_PURE;
/****************************************************************
Summary: Returns if the point are lit.
Remarks:
If the data set does not contain any normal information the
lighting can not be enabled.
See Also: EnableLighting,HasNormals
*****************************************************************/
virtual CKBOOL IsLightingEnabled() const CK_PURE;
/****************************************************************
Summary: Sets the size factor for points drawn as sprites.
Remarks:
This value is taken as a multiplication factor of the size of the point sprites.
To be drawn as sprites a point must belong to a render group which rendering
is set to Sprite mode (see CloudRenderGroup).
See Also: SetRenderGroup,GetGlobalPointSize,CloudRenderGroup
*****************************************************************/
virtual void SetGlobalPointSize(float iPointSize) CK_PURE;
/****************************************************************
Summary: Returns the size factor for points drawn as sprites.
Remarks:
This value is taken as a multiplication factor of the size of the point sprites.
To be drawn as sprites a point must belong to a render group which rendering
is set to Sprite mode (see CloudRenderGroup).
See Also: SetRenderGroup,SetGlobalPointSize,CloudRenderGroup
*****************************************************************/
virtual float GetGlobalPointSize() const CK_PURE;
virtual void ShowMainCloud(CKBOOL iShow) CK_PURE;
virtual CKBOOL IsMainCloudVisible() const CK_PURE;
virtual void SetPickingPrecision(float iPointDistance) CK_PURE;
virtual float GetPickingPrecision() const CK_PURE;
virtual void UsePointSprite(CKBOOL iUse) CK_PURE;
virtual CKBOOL IsUsingPointSprite() const CK_PURE;
virtual void SetGlobalMaterial(CKMaterial* iMaterial) CK_PURE;
virtual CKMaterial* GetGlobalMaterial() const CK_PURE;
virtual void UseMaterialColor(CKBOOL iUse) CK_PURE;
virtual CKBOOL IsUsingMaterialColor() const CK_PURE;
virtual void SetLOD(int iLod) CK_PURE;
virtual int GetLOD() const CK_PURE;
// Number of points...
/****************************************************************
Summary: Returns the number of points stored.
Remarks:
See Also: GetMemorySize,GetVertexBufferCount,GetVertexBufferMemorySize
*****************************************************************/
virtual CKDWORD GetPointsCount() const CK_PURE;
/****************************************************************
Summary: Returns the memory taken to store all the points and their attributes.
Remarks:
See Also: GetPointsCount,GetVertexBufferCount,GetVertexBufferMemorySize
*****************************************************************/
virtual CKDWORD GetMemorySize() const CK_PURE;
/****************************************************************
Summary: Returns the number of vertex buffers allocated to display the cloud.
Remarks:
The number of vertex buffer that will be generated depends on the number of
vertices that can be placed in a single vertex buffer. This value is controled
by a global variable CK2_3D\CloudVerticesPerVB.
See Also: GetPointsCount,GetMemorySize,GetVertexBufferMemorySize
*****************************************************************/
virtual CKDWORD GetVertexBufferCount() const CK_PURE;
/****************************************************************
Summary: Returns the memory taken to store all the vertex buffers.
Remarks:
This method returns the size (in bytes) taken by all the currently allocated
vertex buffers to display the cloud.
See Also: GetPointsCount,GetVertexBufferCount,GetMemorySize
*****************************************************************/
virtual CKDWORD GetVertexBufferMemorySize() const CK_PURE;
/****************************************************************
Summary: Returns the offset that was applied to all the points when loaded from a .asc file.
Remarks:
When loading from a .asc file an offset and scale factor can be applied to all the points
if a *.Desc* was used.
This scale factor and offset can be taken into account when accessing the point position with
an iterator (see CloudIterator::GetCurrentPointPosition and GetCurrentPointRealPosition )
See Also: CreateFromAscFile, GetLoadScaleFactor
*****************************************************************/
virtual const VxVector& GetLoadOffset() const CK_PURE;
/****************************************************************
Summary: Returns the scale factor that was applied to all the points when loaded from a .asc file.
Remarks:
When loading from a .asc file an offset and scale factor can be applied to all the points
if a *.Desc* was used.
This scale factor and offset can be taken into account when accessing the point position with
an iterator (see CloudIterator::GetCurrentPointPosition and GetCurrentPointRealPosition )
See Also: CreateFromAscFile, GetLoadOffset
*****************************************************************/
virtual float GetLoadScaleFactor() const CK_PURE;
//-------------------------------------------
/****************************************************************
Summary: Sets the position of the referential.
Remarks:
This methods the referential of the cloud without actually moving the points
themselves. It is different from the CK3dEntity::SetPosition method which moves
the whole cloud.
*****************************************************************/
virtual void SetReferentialPosition(const VxVector& iPosition,CK3dEntity* iRef = NULL) CK_PURE;
/****************************************************************
Summary: Returns an iterator on the root of the tree.
See Also: CloudIterator,SelectSphere,SelectHalfSpace,SelectCylinder,RayPick
*****************************************************************/
virtual CloudIterator* GetRootIterator() CK_PURE;
/****************************************************************
Summary: Returns an iterator on the root of the tree.
See Also: CloudIterator,SelectSphere,SelectHalfSpace,SelectCylinder,RayPick
*****************************************************************/
virtual CloudSelection* CreateSelection(const XString& iName, int iMaxSize = 250000) CK_PURE;
virtual int GetSelectionCount() const CK_PURE;
virtual CloudSelection* GetSelection(int iIndex) const CK_PURE;
virtual CloudSelection* GetSelection(const XString& iName) const CK_PURE;
virtual void RemoveSelection(CloudSelection* iSelection) CK_PURE;
virtual void RemoveSelection(const XString& iName) CK_PURE;
/****************************************************************
Summary: Selects a list of points within a box.
Arguments:
iBox: Axis aligned selection box given in the cloud local space.
iOBox: Oriented selection box given in the cloud local space.
iSelection: Index of the selection which should contain .
Remarks:
This method returns an iterator which can then be used to acces all the points
that are inside the given box or NULL if no such point exists.
See Also: CloudIterator,SelectSphere,SelectHalfSpace,SelectCylinder,RayPick
*****************************************************************/
virtual int SelectPoint(CKRenderContext* iContext,const Vx2DVector& iScreenPosition,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
/****************************************************************
Summary: Selects a list of points within a box.
Arguments:
iBox: Axis aligned selection box given in the cloud local space.
iOBox: Oriented selection box given in the cloud local space.
iSelection: Pointer on the CloudSelection in which the result should be stored. This selection must have been previously created with the CreateSelection Method
Remarks:
This method returns the number of points that were put in the selection.
See Also: CloudIterator,SelectSphere,RayPick
*****************************************************************/
virtual int SelectBox(const VxBbox& iBox,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
virtual int SelectBox(const VxOBB& iOBox,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
/****************************************************************
Summary: Selects a list of points within a sphere.
Arguments:
iSphere: Selection sphere given in the cloud local space.
iPutInRenderGroup: If >= 0 this value gives the render group in which the selected point should be put. Default is -1, that is do not change the point render group.
Remarks:
This method returns an iterator which can then be used to acces all the points
that are inside the given sphere or NULL if no such point exists.
See Also: CloudIterator,SelectBox,SelectHalfSpace,SelectCylinder,RayPick
*****************************************************************/
virtual int SelectSphere(const VxSphere& iSphere,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
virtual int SelectCone(const VxCone& iCone,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
virtual int SelectConvexObject(CK3dEntity* iEnt,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
virtual int SelectConvexObjectGroup(CKGroup* iGroup,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
virtual int SelectConvexObjectGroup(const XObjectPointerArray& iObjects,CloudSelection* iSelection, BOOL iClearSelection = TRUE) CK_PURE;
//---------- Base Attributes -------
/****************************************************************
Summary: Returns if a normal is stored per point.
Remarks:
This method is equivalent to calling IsCloudAttributeUsed(CLOUD_ATTRIBUTE_NORMAL).
Normals must exist if lighting is to be enabled.
See Also: HasColors,UseNormals,GetPointNormal,IsCloudAttributeUsed
*****************************************************************/
virtual CKBOOL HasNormals() const CK_PURE;
/****************************************************************
Summary: Returns if a color is stored per point.
Remarks:
This method is equivalent to calling IsCloudAttributeUsed(CLOUD_ATTRIBUTE_COLOR).
If not color is stored per point, the default color is full white.
See Also: HasNormals,UseNormals,GetPointNormal,IsCloudAttributeUsed
*****************************************************************/
virtual CKBOOL HasColors() const CK_PURE;
/****************************************************************
Summary: Ensure memory is allocatd to store normals.
Remarks:
This method is equivalent to calling UseCloudAttribute(CLOUD_ATTRIBUTE_NORMAL).
This ensures that memory is allocated to store a normal for each point.
A normal is compressed on 10 bits for efficiency purposes.
See Also: HasNormals,GetPointNormal,UseCloudAttribute
*****************************************************************/
virtual void UseNormals(CKBOOL iUseNormals) CK_PURE;
/****************************************************************
Summary: Ensure memory is allocatd to store colors.
Remarks:
This method is equivalent to calling UseCloudAttribute(CLOUD_ATTRIBUTE_COLOR).
This ensures that memory is allocated to store a color for each point.
A color is stored internally as a 16 bit ARGB 1555 color.
See Also: HasColors,GetPointColor,UseCloudAttribute
*****************************************************************/
virtual void UseColors(CKBOOL iUseColors) CK_PURE;
/****************************************************************
Summary: Returns the color of a point in ARGB 8888 format.
Remarks:
If there is no color stored in the cloud , the returned value is 0xFFFFFFFF.
Note: Colors are internally encoded in 16 bit.
See Also: HasColors,UseColor,SetPointColor,GetPointIntAttribute
*****************************************************************/
virtual DWORD GetPointColor(int iPointIndex) const CK_PURE;
/****************************************************************
Summary: Sets the color of a point in ARGB 8888 format.
Remarks:
If there is no color stored in the cloud , this function does nothing.
Modifying the color of a point can be a slow operation, if used inside a vertex buffer,
as the whole vertex buffer will be reloaded in video memory.
Note: Colors are internally encoded in 16 bit.
See Also: HasColors,UseColor,GetPointColor
*****************************************************************/
virtual void SetPointColor(int iPointIndex,DWORD iColor) CK_PURE;
/****************************************************************
Summary: Returns the normal of a point.
Remarks:
If there is no normal stored in the cloud, the returned value is the vector (0,0,0) .
See Also: HasNormals,UseNormals
*****************************************************************/
virtual VxVector GetPointNormal(int iPointIndex) const CK_PURE;
/****************************************************************
Summary: Sets the normal of a point.
Remarks:
If there is no normal stored in the cloud , this function does nothing.
Modifying the normal of a point can be a slow operation, if used inside a vertex buffer,
as the whole vertex buffer will be reloaded in video memory.
See Also: HasColors,UseColor
*****************************************************************/
virtual void SetPointNormal(int iPointIndex,const VxVector& iNormal) CK_PURE;
/****************************************************************
Summary: Returns the intensity of a point.
Remarks:
If there is no intensity stored in the cloud, the returned value is 0.
The intensity is a information stored on a byte (0..255) that was retrieved when reading
a .asc file for example.
See Also: GetPointIntAttribute,SetPointIntensity
*****************************************************************/
virtual int GetPointIntensity(int iPointIndex) const CK_PURE;
/****************************************************************
Summary: Sets the intensity of a point.
Remarks:
If there is no intensity stored in the cloud, the function does nothing.
Modifying the normal of a point can be a slow operation, if used inside a vertex buffer,
as the whole vertex buffer will be reloaded in video memory.
See Also: GetPointIntAttribute,GetPointIntensity
*****************************************************************/
virtual void SetPointIntensity(int iPointIndex, BYTE iNewIntensity) CK_PURE;
//---------- User Attributes -------
/********************************************************************
Summary: Register a new type of attribute to use on the cloud.
Arguments:
iAttributeDesc: A CloudAttributeDescription that defines the attribute to create.
Remarks:
The CloudAttributeDescription structure identifies the type of data that will be stored (integer or float)
along with a description.
An attribute can be stored on all points or only on a subset of points.
This function returns an index that can be later used to access data on points.
See Also:UnRegisterCloudAttribute,GetCloudAttributeIndexByName
*********************************************************************/
virtual int RegisterCloudAttribute(const CloudAttributeDescription& iAttributeDesc) CK_PURE;
/********************************************************************
Summary: Removes an attribute type from the cloud.
Arguments:
iAttributeIndex: Index of the attribute to remove (Can be returned from a name with GetCloudAttributeIndexByName).
Remarks:
The default attributes (Color,Normal,Intensity and render group) can not be removed.
Removing an attribute can change the indices that were attributed to all the user attribute.
See Also:RegisterCloudAttribute,GetCloudAttributeIndexByName
*********************************************************************/
virtual void UnRegisterCloudAttribute(int iAttributeIndex) CK_PURE;
/********************************************************************
Summary: Returns an attribute type from the cloud given its name.
Arguments:
iName: Name of the attribute type which index should be returned.
Remarks:
See Also:RegisterCloudAttribute,UnRegisterCloudAttribute,GetCloudAttributeCount
*********************************************************************/
virtual int GetCloudAttributeIndexByName(const XBaseString& iName) const CK_PURE;
/********************************************************************
Summary: Returns the number of attribute types on the cloud.
Remarks:
The default attributes (Color,Normal,Intensity and render group) can not be removed which means
there should be at least 4 default groups.
See Also:RegisterCloudAttribute,GetCloudAttributeIndexByName
*********************************************************************/
virtual int GetCloudAttributeCount() const CK_PURE;
/********************************************************************
Summary: Returns the description of an attribute type.
Input Arguments:
iAttributeIndex: Index of the attribute which description should be returned (Can be returned from a name with GetCloudAttributeIndexByName).
Remarks:
The 4 first attributes are the Color,Normal,Intensity and render group attributes.
The description of an attribute type gives the type of value stored on the points in the cloud.
See Also:CloudAttributeDescription,SetCloudAttributeDescription,GetCloudAttributeIndexByName
*********************************************************************/
virtual const CloudAttributeDescription& GetCloudAttributeDescription(int iAttributeIndex) const CK_PURE;
/********************************************************************
Summary: Sets the description of an attribute type.
Input Arguments:
iAttributeIndex: Index of the attribute which description should be returned (Can be returned from a name with GetCloudAttributeIndexByName).
Remarks:
The 4 first attributes are the Color,Normal,Intensity and render group attributes.
The description of an attribute type gives the type of value stored on the points in the cloud.
See Also:CloudAttributeDescription,GetCloudAttributeDescription,GetCloudAttributeIndexByName
*********************************************************************/
virtual void SetCloudAttributeDescription(int iAttributeIndex,const CloudAttributeDescription& iDescription) CK_PURE;
/***********************************************************************
Summary: Returns whether a attribute type is used.
Remarks:
Having an attribute defined on a cloud does not mean it is used. An attribute type must be marked
as used with this method before points can hold data for this attribute.
Warning: When an attribute is marked as "non used" all the memory that was
used to store the point data is released, therefore switching back and forth to "used" - "not used"
will not keep the value initially stored on the points.
See Also:UseCloudAttribute
***********************************************************************/
virtual CKBOOL IsCloudAttributeUsed(int iAttributeIndex) const CK_PURE;
/***********************************************************************
Summary: Sets the usage of a given attribute type.
Remarks:
Having an attribute defined on a cloud does not mean it is used. An attribute type must be marked
as used with this method before points can hold data for this attribute.
Warning: When an attribute is marked as "non used" all the memory that was
used to store the point data is released, therefore switching back and forth to "used" - "not used"
will not keep the value initially stored on the points.
See Also:IsCloudAttributeUsed
***********************************************************************/
virtual void UseCloudAttribute(int iAttributeIndex,BOOL iUse) CK_PURE;
/********************************************************************
Summary: Returns whether the values of an attribute type will be inside the vertex buffer.
Input Arguments:
iAttributeIndex: Index of the attribute for which we want to known if values will be present in VB.
Remarks:
See Also:CloudAttributeDescription,SetCloudAttributeInVB
*********************************************************************/
virtual CKBOOL IsCloudAttributeInVB(int iAttributeIndex) const CK_PURE;
/********************************************************************
Summary: Sets whether the values of an attribute type should be put inside the vertex buffer.
Input Arguments:
iAttributeIndex: Index of the attribute which VB presence should be modified.
iPutInVB: TRUE if attribute values should uploaded in the vertex buffer , FALSE otherwise
Remarks:
See Also:CloudAttributeDescription,IsCloudAttributeInVB
*********************************************************************/
virtual void SetCloudAttributeInVB(int iAttributeIndex,CKBOOL iPutInVB) CK_PURE;
/***********************************************************************
Summary: Gets the value of an attribute on a point (stored as an integer).
Input arguments:
iPointIndex: Index of the point (0..GetPointsCount()).
iAttributeIndex: Index of the attribute to get the value of.
Remarks:
This method should only be used if the value stored by the attribute
is an integer as described in the CloudAttributeDescription.
An attribute index can be retrieve from its name using GetCloudAttributeIndexByName.
See Also:SetAttributeOnPoint,SetPointIntAttribute,GetPointFloatAttribute,GetCloudAttributeIndexByName
***********************************************************************/
virtual int GetPointIntAttribute(int iPointIndex,int iAttributeIndex) const CK_PURE;
/***********************************************************************
Summary: Gets the value of an attribute on a point (stored as a float).
Input arguments:
iPointIndex: Index of the point (0..GetPointsCount()).
iAttributeIndex: Index of the attribute to get the value of.
Remarks:
This method should only be used if the value stored by the attribute
is a float as described in the CloudAttributeDescription.
An attribute index can be retrieve from its name using GetCloudAttributeIndexByName.
See Also:SetAttributeOnPoint,GetPointIntAttribute,SetPointFloatAttribute,GetCloudAttributeIndexByName
***********************************************************************/
virtual float GetPointFloatAttribute(int iPointIndex,int iAttributeIndex) const CK_PURE;
/***********************************************************************
Summary: Sets the value of an attribute on a point (stored as an integer).
Input arguments:
iPointIndex: Index of the point (0..GetPointsCount()).
iAttributeIndex: Index of the attribute to set the value of.
iValue: integer Value
Remarks:
This method should only be used if the value stored by the attribute
is an integer as described in the CloudAttributeDescription.
An attribute index can be retrieve from its name using GetCloudAttributeIndexByName.
See Also:SetAttributeOnPoint,GetPointIntAttribute,GetPointFloatAttribute,GetCloudAttributeIndexByName
***********************************************************************/
virtual void SetPointIntAttribute(int iPointIndex,int iAttributeIndex, int iValue) CK_PURE;
/***********************************************************************
Summary: Sets the value of an attribute on a point (stored as a float).
Input arguments:
iPointIndex: Index of the point (0..GetPointsCount()).
iAttributeIndex: Index of the attribute to set the value of.
iValue: float Value
Remarks:
This method should only be used if the value stored by the attribute
is a float as described in the CloudAttributeDescription.
An attribute index can be retrieve from its name using GetCloudAttributeIndexByName.
See Also:SetAttributeOnPoint,SetPointIntAttribute,GetPointFloatAttribute,GetCloudAttributeIndexByName
***********************************************************************/
virtual void SetPointFloatAttribute(int iPointIndex,int iAttributeIndex, float iValue) CK_PURE;
virtual void SetClipPlaneCount(int iClipPlaneCount) CK_PURE;
virtual int GetClipPlaneCount() const CK_PURE;
virtual void SetClipPlane(int iClipPlaneIndex,const VxPlane& iPlaneEquation) CK_PURE;
virtual void GetClipPlane(int iClipPlaneIndex,VxPlane& oPlaneEquation) const CK_PURE;
virtual CKBOOL LoadAttributesFromTextFile(int iAttributeIndex,const char* iFileName,float iOffset = 0.0f, float iScale = 1.0f) CK_PURE;
/************************************************************
Summary: Create the cloud using a data array of points.
Arguments:
iArray: A pointer to a CKDataArray that contain the points to load.
iColumn1: Index of the column that contains the points to load.
iColumn2: Optionnal index of the additionnal column when using 3 columns containing floats.
iColumn3: Optionnal index of the additionnal column when using 3 columns containing floats.
Remarks:
This methods creates a new cloud using the data given in the input iArray.
Only point position (a vector) can be specified through this method, additionnal attributes
can be read later using LoadAttributesFromArray.
The valid format for a data array is to contain either:
- a column containing strings (slower),
- a column containing parameters of type vector.
- 3 columns containing floats.
Any other data types will produce an error.
See Also: CreateFromAscFile,LoadAttributesFromTextFile,LoadAttributesFromArray
*************************************************************/
virtual CKBOOL LoadAttributesFromArray(int iAttributeIndex,CKDataArray* iArray, int iColumn = 0,float iOffset = 0.0f, float iScale = 1.0f) CK_PURE;
/************************************************************
Summary: Create the cloud using a data array of points.
Arguments:
iArray: A pointer to a CKDataArray that contain the points to load.
iColumn1: Index of the column that contains the points to load.
iColumn2: Optionnal index of the additionnal column when using 3 columns containing floats.
iColumn3: Optionnal index of the additionnal column when using 3 columns containing floats.
Remarks:
This methods creates a new cloud using the data given in the input iArray.
Only point position (a vector) can be specified through this method, additionnal attributes
can be read later using LoadAttributesFromArray.
The valid format for a data array is to contain either:
- a column containing strings (slower),
- a column containing parameters of type vector.
- 3 columns containing floats.
Any other data types will produce an error.
See Also: CreateFromAscFile,LoadAttributesFromTextFile,LoadAttributesFromArray
*************************************************************/
virtual CKBOOL CreateFromArray(CKDataArray* iArray,int iColumn1 = 0,int iColumn2 = -1,int iColumn3 = -1) CK_PURE;
/************************************************************
Summary: Deletes all the data stored by the cloud.
Arguments:
iKeepAttributes: Keeps the attributes definitions.
iKeepSelection: Keeps the selections definitions.
Remarks:
See Also: CreateFromAscFile,CreateFromArray
*************************************************************/
virtual CKBOOL ClearAllData(CKBOOL iKeepAttributes = TRUE, CKBOOL iKeepSelection = TRUE) CK_PURE;
virtual void SetLODPointCount(int iLod,int iPointCount) CK_PURE;
virtual int GetLODPointCount(int iLod) const CK_PURE;
/*************************************************
Summary: Dynamic cast operator.
Arguments:
iO: A pointer to a CKObject to cast.
Return Value:
iO casted to the appropriate class or NULL if iO is not from the required class .
Example:
CKObject* Object;
CK3dPointCloud* anim = CK3dPointCloud::Cast(Object);
Remarks:
*************************************************/
static CK3dPointCloud* Cast(CKObject* iO)
{
return CKIsChildClassOf(iO,CKCID_3DPOINTCLOUD)?(CK3dPointCloud*)iO:NULL;
}
#ifndef CK_3DIMPLEMENTATION
};
#endif
#endif