29 , mAttribute( attribute )
35 std::unique_ptr<QgsPointCloudBlock> block =
mIndex.
nodeData( n, req );
36 const char *ptr = block->data();
37 block->attributes().find( attribute.
name(), mAttributeOffset );
38 const int size = block->pointRecordSize();
39 for (
const int point : points )
41 const int offset = point * size + mAttributeOffset;
43 mPointValues[point] = oldValue;
49 undoRedoPrivate(
true );
54 undoRedoPrivate(
false );
57void QgsPointCloudLayerUndoCommandChangeAttribute::undoRedoPrivate(
bool isUndo )
60 QgsCopcPointCloudIndex *copcIndex =
static_cast<QgsCopcPointCloudIndex *
>( editIndex->mIndex.
get() );
63 if ( editIndex->mEditedNodeData.contains( mNode ) )
65 chunkData = editIndex->mEditedNodeData[mNode];
69 QPair<uint64_t, int32_t> offsetSizePair = copcIndex->mHierarchyNodePos[mNode];
70 chunkData = copcIndex->readRange( offsetSizePair.first, offsetSizePair.second );
Collection of point cloud attributes.
Attribute for point cloud data pair of name and size in bytes.
QString name() const
Returns name of the attribute.
double convertValueToDouble(const char *ptr) const
Returns the attribute's value as a double for data pointed to by ptr.
The QgsPointCloudEditingIndex class is a QgsPointCloudIndex that is used as an editing buffer when ed...
Smart pointer for QgsAbstractPointCloudIndex.
std::unique_ptr< QgsPointCloudBlock > nodeData(const QgsPointCloudNodeId &n, const QgsPointCloudRequest &request)
Returns node data block.
bool updateNodeData(const QHash< QgsPointCloudNodeId, QByteArray > &data)
Tries to update the data for the specified nodes.
QgsAbstractPointCloudIndex * get()
Returns pointer to the implementation class.
QgsPointCloudAttributeCollection attributes() const
Returns all attributes that are stored in the file.
static QByteArray updateChunkValues(QgsCopcPointCloudIndex *copcIndex, const QByteArray &chunkData, const QgsPointCloudAttribute &attribute, const QgsPointCloudNodeId &n, const QHash< int, double > &pointValues, std::optional< double > newValue=std::nullopt)
Sets new classification value for the given points in voxel and return updated chunk data.
QgsPointCloudLayerUndoCommandChangeAttribute(QgsPointCloudIndex index, const QgsPointCloudNodeId &n, const QVector< int > &points, const QgsPointCloudAttribute &attribute, double value)
Constructor for QgsPointCloudLayerUndoCommandChangeAttribute.
Base class for undo/redo command for point cloud editing.
QgsPointCloudIndex mIndex
QgsPointCloudLayerUndoCommand(QgsPointCloudIndex index)
Ctor.
Represents a indexed point cloud node's position in octree.
Point cloud data request.
void setAttributes(const QgsPointCloudAttributeCollection &attributes)
Set attributes filter in the request.