IBimDataCloudPart
IBimDataCloudPart – интерфейс объекта-посредника для чтения файлов облаков точек. Наследуется от IBimDataPart.
export interface IBimDataCloudPart extends IBimDataPart {
getCloudPoints(index: number): Promise<Float32Array>;
getCloudHierarchy(): Promise<BimCloudHierarchyItem[]>;
getCloudParameters(): Promise<Map<string, string>>;
getCloudMetadata(): Promise<BimCloudMetadata>;
}
Методы
getCloudPoints()
Метод возвращает данные о точках в узле октодерева облака точек.
getCloudPoints(index: number): Promise<Float32Array>;
где:
index
– идентификатор данных узла октодерева.
Возвращает массив данных вида: [x0, y0, z0, c0, ... , xn, yn, zn, cn]
.
Массив последовательно описывает точки узла, на каждую точку приходится 4 элемента: x, y, z, color
.
Цвет точки закодирован в BGRA32 формате.
getCloudHierarchy()
Метод возвращает иерархию октодерева облака точек.
getCloudHierarchy(): Promise<BimCloudHierarchyItem[]>;
Подробнее: BimCloudHierarchyItem.
Иерархия дерева записана с помощью обхода в ширину. Данные об узлах дерева расположены в массиве уровень за уровнем.
Например, для дерева с корневым узломr
, обозначим дочерние узлы добавлением цифры к имени:r1
,r2
,r3
. Дочерними узлами дляr1
будут соответственноr11
,r12
,r13
. Тогда данные об узлах дерева будут расположены в массиве следующим образом:[r, r1, r2, r3, r11, r12, r13, r21, r22, r23, r31, ...]
getCloudParameters()
Метод возвращает параметры облака точек в виде словаря с данными в текстовом виде.
getCloudParameters(): Promise<Map<string, string>>;
getCloudMetadata()
Метод возвращает параметры облака точек, в прочитанном и обработанном виде.
getCloudMetadata(): Promise<BimCloudMetadata>;
Подробнее: BimCloudMetadata.
BimCloudHierarchyItem
Класс описывает узел октодерева облака точек.
export class BimCloudHierarchyItem {
index: number; // идентификатор узла октодерева
dataIndex: number; // идентификатор данных узла октодерева
type: BimHierarchyItemType; // тип узла октодерева
mask: number; // битовая маска, показывающая, какие из дочерних узлов существуют
numPoints: number; // количество точек в узле октодерева
min: { x: number, y: number, z: number }; // BoundingBox.min - габариты узла октодерева
max: { x: number, y: number, z: number }; // BoundingBox.max - габариты узла октодерева
}
BimCloudHierarchyItem
Перечисление типов узлов октодерева.
export enum BimHierarchyItemType {
NORMAL = 0, // узел содержит как данные о точках, так и дочерние узлы
LEAF = 1, // лист октодерева, содержит только данные о точках, не имеет дочерних узлов
PROXY = 2 // узел содержит только дочерние узлы
}
BimCloudMetadata
export class BimCloudMetadata {
depth: number;
min: { x: number, y: number, z: number }; // BoundingBox.min - габариты октодерева
max: { x: number, y: number, z: number }; // BoundingBox.max - габариты октодерева
baseSpacing: number; // расстояние между точками на нулевом уровне дерева (корневой узел)
// расстояние между точками уменьшается в 2 раза за каждый уровень: spacing = baseSpacing / (1 << node.level)
version?: number;
filename?: string;
description?: string;
inputPoints?: number;
processedPoints?: number;
nodesCount?: number;
nodesPoints?: number;
posOffset?: { x: number, y: number, z: number };
posScale?: { x: number, y: number, z: number };
root_min?: { x: number, y: number, z: number };
root_max?: { x: number, y: number, z: number };
}