IntersectionChecker
IIntersectionChecker
IIntersectionChecker – базовый интерфейс обработки пересечений объектов. Подробнее: ISceneIntersectionChecker и IModelIntersectionChecker.
export interface IIntersectionChecker<TOptions extends IntersectionCheckOptions> {
getIntersectionByRay(ray: THREE.Ray, camera: THREE.Camera, options?: TOptions): THREE.Intersection | undefined;
getIntersectionIDByRay(ray: THREE.Ray, camera: THREE.Camera, options?: TOptions): { modelId: string, guid: string } | undefined;
getIntersectionByNdcPt(ndcPos: THREE.Vector2, camera: THREE.Camera, options?: TOptions): THREE.Intersection | undefined;
getIntersectionIDByNdcPt(ndcPos: THREE.Vector2, camera: THREE.Camera, options?: TOptions): { modelId: string, guid: string } | undefined;
getIntersectionIDByFrustumNdcPt(ndcFrustumBox: THREE.Box3, unProjMatrix: THREE.Matrix4, isContainsOnly: boolean, options?: TOptions): { modelId: string; guid: string; }[] | undefined;
getObjectsBoundingBox(elements: ModelElementIds[], options?: TOptions): THREE.Box3;
}
Методы
getIntersectionByRay()
Метод возвращает ближайшее пересечение объекта модели с лучом.
getIntersectionByRay(ray: THREE.Ray, camera: THREE.Camera, options?: TOptions): THREE.Intersection | undefined;
где:
ray – луч, с которым считаются пересечения. Подробнее: THREE.Ray.
camera – камера, используемая в отрисовке. Необходима для проверки пересечений с объектами, не зависящими от глубины кадра: спрайтами, текстовыми метками, точками замечаний и т.д.
options – параметры проверки пересечений. Необязательный параметр. Подробнее: SceneCheckOptions, ModelCheckOptions.
Возвращает объект типа THREE.Intersection, если пересечение существует. В противном случае возвращает undefined.
getIntersectionIDByRay()
Метод возвращает modelId и entityGuid ближайшего объекта модели, пересекающегося с лучом.
getIntersectionIDByRay(ray: THREE.Ray, camera: THREE.Camera, options?: TOptions): { modelId: string, guid: string } | undefined;
где:
ray – луч, с которым считаются пересечения. Подробнее: THREE.Ray.
camera – камера, используемая в отрисовке. Необходима для проверки пересечений с объектами, не зависящими от глубины кадра: спрайтами, текстовыми метками, точками замечаний и т.д.
options – параметры проверки пересечений. Необязательный параметр. Подробнее: SceneCheckOptions, ModelCheckOptions.
Возвращает объект { modelId: string, guid: string }, если пересечение существует. В противном случае возвращает undefined.
getIntersectionByNdcPt()
Метод возвращает ближайшее пересечение объекта модели с лучом, выпущенным из точки нахождения камеры в направлении точки в Normalized Device Coordinates (NDC пространство).
getIntersectionByNdcPt(ndcPoint: THREE.Vector2, camera: THREE.Camera, options?: TOptions): THREE.Intersection | undefined;
где:
ndcPoint – 2D координаты точки в Normalized Device Coordinates (NDC пространство), в которую выпускается луч. Подробнее: THREE.Vector2.
camera – камера, используемая для определения положения начала луча и для перевода Normalized Device Coordinates (NDC пространство) в мировые координаты. Подробнее: THREE.Camera.
options – параметры проверки пересечений. Необязательный параметр. Подробнее: SceneCheckOptions, ModelCheckOptions.
Возвращает объект типа THREE.Intersection, если пересечение существует. В противном случае возвращает undefined.
getIntersectionIDByNdcPt()
Метод возвращает modelId и entityGuid ближайшего объекта модели, пересекающегося с лучом, выпущенным из точки нахождения камеры в направлении точки в Normalized Device Coordinates (NDC пространство).
getIntersectionIDByNdcPt(ndcPoint: THREE.Vector2, camera: THREE.Camera, options?: TOptions): { modelId: string, guid: string } | undefined;
где:
ndcPoint – 2D координаты точки, в которую выпускается луч, в Normalized Device Coordinates (NDC пространство). Подробнее: THREE.Vector2.
camera – камера, используемая для определения положения начала луча и для перевода Normalized Device Coordinates (NDC пространство) в мировые координаты. Подробнее: THREE.Camera.
options – параметры проверки пересечений. Необязательный параметр. Подробнее: SceneCheckOptions, ModelCheckOptions.
Возвращает объект { modelId: string, guid: string }, если пересечение существует. В противном случае возвращает undefined.
getIntersectionIDByFrustumNdcPt()
Метод возвращает список modelId и entityGuid объектов модели, пересекаемых усечённой пирамидой (Frustum).
getIntersectionIDByFrustumNdcPt(ndcFrustumBox: THREE.Box3, unProjMatrix: THREE.Matrix4, isContainsOnly: boolean, options?: TOptions): { modelId: string; guid: string; }[];
где:
ndcFrustumBox – представление Frsutum в Normalized Device Coordinates (NDC пространство). Подробнее: THREE.Box3.
unProjMatrix – матрица проекции координат Normalized Device Coordinates (NDC пространство) в мировые координаты. Подробнее: THREE.Matrix4.
isContainsOnly – если true, то отбрасываются не полностью содержащиеся внутри пирамиды объекты. В противном случае в вывод включаются как содержащиеся внутри пирамиды объекты, так и касающиеся или пересекающиеся с ней.
Если при расчёте учитываются секущие плоскости, то isContainsOnly также указывает на то, что объект не должен быть обрезан секущими.
options – параметры проверки пересечений, необязательный параметр. Подробнее: SceneCheckOptions, ModelCheckOptions.
Возвращает список объектов { modelId: string, guid: string }, если пересечение существует. В противном случае возвращает пустой массив.
Пример расчёта пересечений с Frustum, образованным областью видимости камеры:
const camera = viewer3D.navigation.getCamera();
const unprojectionMatrix = new THREE.Matrix4();
const ndcFrustumBox = new THREE.Box3();
//матрица проекции из Normalized Device Coordinates (NDC пространство) в мировые координаты:
unprojectionMatrix.multiplyMatrices(camera.matrixWorld, camera.projectionMatrixInverse);
//левый нижний угол усечённой пирамиды в Normalized device coordinates (NDC пространство: x=-1, y=-1), ближняя плоскость камеры (nearPlane): z = -1:
ndcFrustumBox.min = new THREE.Vector3(-1, -1, -1);
//правый верхний угол усечённой пирамиды в Normalized device coordinates (NDC пространство: x=1, y=1), дальняя плоскость камеры (farPlane): z = 1:
ndcFrustumBox.max = new THREE.Vector3(1, 1, 1);
//Находим все объекты, содержащиеся внутри и/или пересекающие усечённую пирамиду, без учета секущих плоскостей.
const intersections = intersectionChecker.getIntersectionIDByFrustumNdcPt(ndcFrustumBox, unprojectionMatrix, false, false);
Более сложный пример использования: BoxSelectionExtension.
getObjectsBoundingBox()
Метод возвращает общий ограничивающий объем для переданного списка элементов.
getObjectsBoundingBox(elements: ModelElementIds[], options?: TOptions): THREE.Box3;
где:
elements – список элементов для вычисления общего ограниченного объема. Подробнее: ModelElementIds.
options – параметры проверки пересечений. Необязательный параметр. Подробнее: SceneCheckOptions, ModelCheckOptions.
Возвращает объект THREE.Box3.
ISceneIntersectionChecker
ISceneIntersectionChecker – интерфейс обработки пересечений объектов на отдельной сцене. Расширяет IIntersectionChecker.
export interface ISceneIntersectionChecker extends IIntersectionChecker<SceneCheckOptions> {
//Возвращает ограничивающий объём сцены.
get boundingBox(): THREE.Box3;
}
SceneCheckOptions
SceneCheckOptions – опции проверки пересечений для ISceneIntersectionChecker.
export interface SceneCheckOptions {
//Определяет, учитываются ли секущие плоскости при расчёте пересечений на данной сцене.
//Если учитываются, то пересечения с объектами за пределами секущего объёма отбрасываются.
filterByClipping?: boolean;
}
IModelIntersectionChecker
IModelIntersectionChecker – интерфейс обработки пересечений всех объектов модели. Расширяет IIntersectionChecker.
export interface IModelIntersectionChecker extends IIntersectionChecker<ModelCheckOptions> {
// Возвращает ограничивающий объём всей модели.
get boundingBox(): THREE.Box3;
// Возвращает центр ограничивающего объёма модели.
get modelCenter(): THREE.Vector3;
}
ModelCheckOptions
ModelCheckOptions – опции проверки пересечений для IModelIntersectionChecker.
export interface ModelCheckOptions extends SceneCheckOptions {
// Наименования сцен, которые участвуют в проверке пересечений.
// Если не задано, то пересечения проверяются для всех сцен.
sceneNames?: string[],
}