| RDB 2

Public Types | Public Member Functions | Static Public Member Functions | List of all members
riegl::rdb::pointcloud::PointAttributes Class Reference

Manage point attributes. More...

`#include <pointAttributes.hpp>`

## Public Types
typedef std::uint64_t | PointID
| Point identifier data type. More...

## Public Member Functions
| PointAttributes (riegl::rdb::PointcloudData *pointcloud)
| Constructor. More...
std::vector< std::string > | list () const
| Query attribute names. More...
bool | exists (const std::string &name) const
| Check if attribute exists. More...
void | add (const PointAttribute &attribute)
| Add new attribute. More...
void | add (const std::string &name)
| Add RIEGL attribute. More...
PointAttribute | get (const std::string &name) const
| Query attribute details. More...
void | group (const std::string &name, std::string &group, std::uint32_t &index) const
| Query attribute group and index. More...
void | put (const PointAttribute &attribute)
| Modify attribute details. More...
void | remove (const std::string &name)
| Delete attribute. More...
void | duplicate (const std::string &source, const std::string &target)
| Duplicate attribute data. More...
void | discard (const std::string &name)
| Discard attribute data. More...
std::string | primaryAttributeName () const
| Name of primary point attribute. More...

## Static Public Member Functions
static std::vector< std::string > | listDefault (riegl::rdb::Context &context)
| Query default attribute names. More...
static std::vector< std::string > | listFiltered (const std::string &filter, riegl::rdb::Context &context)
| Query attribute names of filter. More...
static PointAttribute | getDefault (riegl::rdb::Context &context, const std::string &name)
| Query default attribute details. More...
static void | groupDefault (riegl::rdb::Context &context, const std::string &name, std::string &group, std::uint32_t &index)
| Query default attribute group and index. More...
static PointAttribute | getMerged (riegl::rdb::Context &context, const std::vector< riegl::rdb::Pointcloud *> &pointclouds, const std::string &name)
| Merge attribute details. More...
static std::vector< PointAttribute > | getMerged (riegl::rdb::Context &context, const std::vector< riegl::rdb::Pointcloud *> &pointclouds)
| Merge attribute details. More...
static std::string | pointIDName ()
| Point identifier attribute name. More...
static std::string | pointIDUnit ()
| Point identifier attribute unit. More...
static DataType | pointIDType ()
| Point identifier data type enum. More...

## Detailed Description

Manage point attributes.

This class allows to manage point attributes (dimensions).

When creating a new database, each point has at least two attributes:

- an unique point identifier (ID)
- the primary attribute specified in CreateSettings::primaryAttribute

Both attributes cannot be deleted or modified in any way.

The point identifier attribute is always named "id" and is an unsigned 64 bit integer number (see DataTypes::UINT64, pointIDType() and pointIDName()).

See also
  riegl::rdb::Pointcloud::pointAttribute()

Definition at line 83 of file pointAttributes.hpp.

## Member Typedef Documentation

## ◆ PointID

typedef std::uint64_t riegl::rdb::pointcloud::PointAttributes::PointID

Point identifier data type.

Definition at line 362 of file pointAttributes.hpp.

## Constructor & Destructor Documentation

## ◆ PointAttributes()

riegl::rdb::pointcloud::PointAttributes::PointAttributes | ( | riegl::rdb::PointcloudData * | pointcloud | ) |
| explicit

Constructor.

Note
  You cannot create new PointAttributes objects directly, use riegl::rdb::Pointcloud::pointAttribute() instead.

## Member Function Documentation

## ◆ add() [1/2]

void riegl::rdb::pointcloud::PointAttributes::add | ( | const PointAttribute & | attribute | ) |

Add new attribute.

Note
  All attribute name related functions are case sensitive (i.e. "xyz" and "XYZ" are different attributes).
  Attribute names are unique. If an attribute with the same name already exists in the database, this function fails.

Parameters

  [in] | attribute | attribute information to be added

Examples:
  rdb-example-01-create-database.cpp, and rdb-example-08-invert-points.cpp.

## ◆ add() [2/2]

void riegl::rdb::pointcloud::PointAttributes::add | ( | const std::string & | name | ) |

Add RIEGL attribute.

If the given name refers to an built-in RIEGL default point attribute, this function adds the point attribute to the database. Otherwise this function fails.

Note
  All attribute name related functions are case sensitive (i.e. "xyz" and "XYZ" are different attributes).
  Attribute names are unique. If an attribute with the same name already exists in the database, this function fails.

Parameters

  [in] | name | name of a RIEGL point attribute

## ◆ discard()

void riegl::rdb::pointcloud::PointAttributes::discard | ( | const std::string & | name | ) |

Discard attribute data.

Use this function to delete the current point attribute data (but not the point attribute description). This is equivalent to a newly created point attribute, i.e. all points will have the default value.

Note
  The primary point attribute (see CreateSettings::primaryAttribute) and the unique point identifier (ID) data cannot be discarded.

Parameters

  [in] | name | attribute name

## ◆ duplicate()

void riegl::rdb::pointcloud::PointAttributes::duplicate | ( | const std::string & | source,
|  | const std::string & | target
| ) |  |

Duplicate attribute data.

Use this function to duplicate the current point attribute data (but not the point attribute description). This can e.g. be used to make a backup of point attribute data.

Note
  The source and target attributes must exist and be compatible (i.e. attribute minimum, maximum, resolution and length are identical).
  The primary point attribute and the point ID attribute cannot be used as target attribute.

Parameters

  [in] | source | source attribute name
  [in] | target | target attribute name

## ◆ exists()

bool riegl::rdb::pointcloud::PointAttributes::exists | ( | const std::string & | name | ) | const

Check if attribute exists.

Returns
  true if an attribute with given name exists

Parameters

  [in] | name | attribute name

Examples:
  rdb-example-08-invert-points.cpp.

## ◆ get()

PointAttribute riegl::rdb::pointcloud::PointAttributes::get | ( | const std::string & | name | ) | const

Query attribute details.

If the given attribute name could not be found, the function fails.

Parameters

  [in] | name | attribute name

Examples:
  rdb-example-02-insert-points.cpp, rdb-example-06-database-stat.cpp, and rdb-example-10-attribute-groups.cpp.

## ◆ getDefault()

static PointAttribute riegl::rdb::pointcloud::PointAttributes::getDefault | ( | riegl::rdb::Context & | context,
|  | const std::string & | name
| ) |  |
| static

Query default attribute details.

This function is similar to get() but instead of returning the attribute details defined in the database, it returns the details of the built-in RIEGL default point attribute.

If the given attribute name could not be found, the function fails.

Parameters

  [in] | context | library context
  [in] | name | attribute name

## ◆ getMerged() [1/2]

static PointAttribute riegl::rdb::pointcloud::PointAttributes::getMerged | ( | riegl::rdb::Context & | context,
|  | const std::vector< riegl::rdb::Pointcloud *> & | pointclouds,
|  | const std::string & | name
| ) |  |
| static

Merge attribute details.

This function returns the details (description) of a point attribute by analyzing two or more point clouds. If the attribute details are not the same in all point clouds (e.g. a typo was fixed or the minimum, maximum, resolution or default value has changed), merged details that cover all variants are returned. However, some changes can not be merged, e.g. changes to the vector length, the unit symbol or changes to the minimum, maximum and resolution values that would require unsupported data types (see riegl::rdb::pointcloud::DataType). In this case an exception with error code riegl::rdb::Error::PointAttributeNotMergeable is thrown. It is not required that the point attribute exists in all point clouds.

This function might be helpful when merging point clouds, i.e. when reading points from multiple databases and storing them in a single database. In this case one needs to define the point attributes in the target database. If the source databases were generated by different software applications (or different versions of the same application), the details of the same attribute may slightly differ (see above), which makes the definition of the attribute in the target database quite hard. So instead of defining the attributes by using a hard-coded table, one can use this function to generate the attribute description at runtime.

Examples (simplified, fake attributes):

Example 1 | Attribute | Description | Resolution | Minimum | Maximum
--- | --- | --- | --- | --- | ---
Point cloud A | amplitude | signal amplitude | 0.01 | 0.00 | 655.35
Point cloud B | amplitude | signal amplitude | 0.01 | -327.68 | 327.67
Merged details | amplitude | signal amplitude | 0.01 | -327.68 | 655.35

Example 2 | Attribute | Description | Resolution | Minimum | Maximum
--- | --- | --- | --- | --- | ---
Point cloud A | temperature | coarse temperature | 0.50 | -100.00 | 500.00
Point cloud B | temperature | precise temperature | 0.01 | -100.00 | 1000.00
Merged details | temperature | precise temperature | 0.01 | -100.00 | 1000.00

In both examples the value range (minimum/maximum) of the attribute has changed, so the result range is the combination (disjunction) of both ranges.

In the second example the resolution is different too. The example shows that always the higher resolution (lower value) is returned.

If the description text changes, then the result is the text that is stored in the younger database (the database that was created last). In example 2, "Point cloud B" is the younger database.

Parameters

  [in] | context | library context
  [in] | pointclouds | list of point clouds
  [in] | name | attribute name

## ◆ getMerged() [2/2]

static std::vector<PointAttribute> riegl::rdb::pointcloud::PointAttributes::getMerged | ( | riegl::rdb::Context & | context,
|  | const std::vector< riegl::rdb::Pointcloud *> & | pointclouds
| ) |  |
| static

Merge attribute details.

Same as the overloaded version above, but instead of merging one point attribute, this function merges all point attributes of all given point clouds.

Parameters

  [in] | context | library context
  [in] | pointclouds | list of point clouds

## ◆ group()

void riegl::rdb::pointcloud::PointAttributes::group | ( | const std::string & | name,
|  | std::string & | group,
|  | std::uint32_t & | index
| ) |  | const

Query attribute group and index.

Since RDB version 2.2 the point attributes are grouped and sorted for a better overview. The grouping and order is defined by a table which is stored in the meta data entry "riegl.point_attribute_groups". Each database is filled with a default table with RIEGL point attributes.

The list() function returns the names of the attributes actually used in the order defined by the table. Function group() returns the group name as well as the table index of a point attribute (index starts at 1 for the first attribute in the first group and goes up to N for the last attribute in the last group).

So unless you want to change the order of the point attributes or add your own, it is not necessary to access or change the attribute table.

See also
  list()

Parameters

  [in] | name | attribute name
  [out] | group | attribute group name
  [out] | index | attribute index

Examples:
  rdb-example-10-attribute-groups.cpp.

## ◆ groupDefault()

static void riegl::rdb::pointcloud::PointAttributes::groupDefault | ( | riegl::rdb::Context & | context,
|  | const std::string & | name,
|  | std::string & | group,
|  | std::uint32_t & | index
| ) |  |
| static

Query default attribute group and index.

This function works like group() but returns the group and index from the built-in RIEGL default attribute table.

Parameters

  [in] | context | library context
  [in] | name | attribute name
  [out] | group | attribute group name
  [out] | index | attribute index

## ◆ list()

std::vector<std::string> riegl::rdb::pointcloud::PointAttributes::list | ( |  | ) | const

Query attribute names.

This function returns the names of the attributes defined in the database in the order defined by the point attribute group table (details see group() function).

See also
  group()

Examples:
  rdb-example-06-database-stat.cpp, and rdb-example-10-attribute-groups.cpp.

## ◆ listDefault()

static std::vector<std::string> riegl::rdb::pointcloud::PointAttributes::listDefault | ( | riegl::rdb::Context & | context | ) |
| static

Query default attribute names.

Returns
  a list of built-in RIEGL default attribute names

Note
  the order of attribute names is undefined

## ◆ listFiltered()

static std::vector<std::string> riegl::rdb::pointcloud::PointAttributes::listFiltered | ( | const std::string & | filter,
|  | riegl::rdb::Context & | context
| ) |  |
| static

Query attribute names of filter.

Returns
  a list of attribute names used in the filter string

Examples:

    filter: (riegl.reflectance > 0)
    result: [riegl.reflectance]

    filter: (riegl.id < 100) && (riegl.class == 2)
    result: [riegl.id, riegl.class]

    filter: (riegl.target_index == riegl.target_count)
    result: [riegl.target_index, riegl.target_count]

    filter: (riegl.xyz[0] > 0.0) && (riegl.xyz[1] > 0.0)
    result: [riegl.xyz]

Parameters

  [in] | filter | filter string

## ◆ pointIDName()

static std::string riegl::rdb::pointcloud::PointAttributes::pointIDName | ( |  | ) |
| static

Point identifier attribute name.

## ◆ pointIDType()

static DataType riegl::rdb::pointcloud::PointAttributes::pointIDType | ( |  | ) |
| static

Point identifier data type enum.

## ◆ pointIDUnit()

static std::string riegl::rdb::pointcloud::PointAttributes::pointIDUnit | ( |  | ) |
| static

Point identifier attribute unit.

## ◆ primaryAttributeName()

std::string riegl::rdb::pointcloud::PointAttributes::primaryAttributeName | ( |  | ) | const

Name of primary point attribute.

## ◆ put()

void riegl::rdb::pointcloud::PointAttributes::put | ( | const PointAttribute & | attribute | ) |

Modify attribute details.

This function allows to modify certain point attribute properties. Thereto the function looks for a point attribute of the given name, compares the given properties with those stored in the database and finally updates the modified properties in the database.

Note
  Only the modification of `name`, `title`, `description`, `tags`, `unitSymbol`, `scaleFactor` and `lodSettings` is supported. If a point attribute shall be renamed, the `name` property must contain the old and the new name separated by " -> ". Example: To rename `riegl.xyz` to `riegl.xyz_socs`, set `attribute.name` to `riegl.xyz -> riegl.xyz_socs`.

Parameters

  [in] | attribute | attribute information to be modified

## ◆ remove()

void riegl::rdb::pointcloud::PointAttributes::remove | ( | const std::string & | name | ) |

Delete attribute.

If the given attribute name could not be found, this function does not fail.

Note
  The primary point attribute (see CreateSettings::primaryAttribute) and the unique point identifier (ID) cannot be deleted.

Parameters

  [in] | name | attribute name

The documentation for this class was generated from the following file:

- riegl/rdb/pointcloud/pointAttributes.hpp