API

API основные методы

Получить данные тура ipano.getTour()

возвращает:

{
  id: "tourid",
  title: "Название тура"
}

Получить список всех сцен (панорам) ipano.getScenes()

возвращает список
{
  id: "scene-1", // id сцены, можно использовать для переходов
  title: "Кухня", // название панорамы
  objects: {
    transitions: [], // все переходы на сцене
    media: [],  // все медиа на сцене по клику
    interactive: [], // все интерактивные объекта
    all: [] // все объекты одним списком
  }
}

Получить данные текущей сцены ipano.getCurrentScene()

возвращает один объект
{
  id: "scene-1", // id сцены, можно использовать для переходов
  title: "Кухня", // название панорамы
  objects: {
    transitions: [], // все переходы на сцене
    media: [],  // все медиа на сцене по клику
    interactive: [], // все интерактивные объекта
    all: [] // все объекты одним списком
  }
}

Объекты на сцене ipano.getCurrentObjects()

Возвращает объекты на текущей сцене, с группировкой по типу

{
    "transitions": [], // список переходов
    "media": [], // список медиа
    "interactive": [], // список интерактивных объектов
    "all": [], // список все объектов
}
Каждый из объектов имеет такой формат:
{
  id: "interactive:42", //id объекта
  sceneId: "scene-1", // id сцены
  kind: "interactive",     // тип объекта transition - переход, media - медиа,  interactive - интерактивный объект.
  subtype: "sun", // подтип объекты
  title: "Солнце", // название
  visible: true, // включена ли видимость (по умолчанию всегда включена, далее может выключаться из api)
  animationEnabled: true, // включена ли анимация. (по умолчанию всегда включена, далее может выключаться из api)
  text: null, // подпись или текст на объекте
  targetSceneId: null, // для переходов - id сцены для перехода
  pitch: 0, // угол по горизонтали, на котором установлен объект
  yaw: 0 // угол по вертикали, на котором установлен объект
}


Текущее положение камеры ipano.getCurrentView()

возвращает
{
  yaw: 10, // угол по горизонтальному положению
  pitch: -5, // угол по наклону
  hfov: 100 // ширина угла камеры
}

Полное текущее состояние ipano.getState()

Возвращает полное текущее состояние тура. currentScene, tour, view и infoPanel

Список сценариев сцены ipano.getSceneScenarios(sceneId)

Возвращает сценарии заданной сцены.

Все медиа тура ipano.getProjectMedia():

Возвращает все медиа тура (не только текущей сцены). Медиа, это не точки, клик на которые открывает медиа, это все медиа которые добавлены в проект

{
  id: "media:42", // уникальный идентификатор 
  type: "text", // тип медиа text | audio | photo | link | video | tour | model3d
  title: "Описание", // имя медиа
  text: "<p>...</p>",
  audioUrl: "", // url аудио, если медиа это audio
  audioWithoutPlayer: false, // флаг, нужно ли проигрывать медиа в фоне
  photoUrl: "", // ссылка на фото, если это медиа photo
  linkUrl: "", // ссылка, если это медиа url
  linkNewWindow: true, // открывать ссылку в новом окне для url
  linkEnabled: true, // включить ссылку
  videoUrl720: "", // ссылка на видео 720p если это медиа видео
  videoUrl320: "", // ссылка на видео 320p если это медиа видео
  tourPayload: {}, // json с описание экскурсии для медиа tour
  modelPayload: {}, // настройки 3д модели
  buttonText: "", // текст на кнопке - ссылке
  buttonUrl: "", // кнопка ссылка
  buttonEnabled: false // включена ли кнопка ссылка
}

Навигация и камера

Перейти на панораму ipano.goTo(sceneId, options?)

Переходит на панораму по ее id. Это полный переход со сменой сцены, аналогично клику ну переход.

await ipano.goTo("jkkrio");

Опции (не обязательно)

{
  sourceView: { yaw: 10, pitch: 0 }, // место на панораме откуда произошел переход. Актульано только для эффекта "зум при переходов"
  targetView: { yaw: 120, pitch: -8 }, // место на целевой панораме, куда будет смотреть камера. Если не указано, то возьмется из настроек панорамы.
  syncPosition: true // синхронизировать позицию старой и новой сцены.
}

Сменить панораму ipano.switchPano(sceneId)

Панорама меняется на другую, при этом не меняется сама сцена и объекта на ней. Положение синхронизируется автоматически.

await ipano.switchPano("scene-2");

Смотреть на позицию ipano.lookAt({ yaw, pitch, duration? })

Поворачивает взгляд на нужное место без смены сцены.

await ipano.lookAt({
  yaw: 90, // угол по горизонтали
  pitch: -10, // угол по вертикали
  duration: 600 // продолжительность анимации поповора камера в миллисекундах. 
});

Смотреть на ipano.lookAtObject(objectId, options?)

Наводит камеру на объект текущей сцены по его id.

await ipano.lookAtObject("media:97", { duration: 600 });

Управление объектами на сцене в реальном времени

Скрыть или показать объект ipano.setObjectVisible(objectId, visible)

Скрывает или показывает объект. При старте сцены они всегда показываются, но по сингалу scenerender можно их скрыть. Если объект интерактивный объект, то он прекращает свою работу. Например, выключается солнце или перестает идти дождь.
ipano.setObjectVisible("interactive:42", false);
ipano.setObjectVisible("interactive:42", true);

Скрыть или показать объеты по фильтру ipano.setObjectsVisible(filter, visible)

Тожн самое, но сразу для всех объектов с определенным типом
ipano.setObjectsVisible({ kind: "interactive" }, false);
ipano.setObjectsVisible({ sceneId: "scene-2", kind: "media" }, true);

Изменить свойство объекта по id ipano.updateObject(objectId, patch)

Позволяет изменить свой объекта по его id. Одно или несколько сразу.

  • visible - видимость
  • text - текст подписи
  • animationEnabled - включена ли анимация
ipano.updateObject("media:42", {
  text: "Новый текст",
  animationEnabled: false
});

Изменить свойство у множество объектов ipano.updateObjects(filter, patch)

Указываем у каких типов объектов в текущей сцене нужно поменять свойство по фильтру
ipano.updateObjects(
  { kind: "transition" },
  { animationEnabled: false }
);
Формат фильтра:
{
  sceneId: "scene-1", // на какой сцене
  kind: "transition",   // какие типы объектов  transition - переходы,  media - медиа , interactive - интерактивный элементы
  subtype: "sun", // субтипы
  ids: ["interactive:42"] // список id
}

Медиа и сценарии

Активировать медиа ipano.activateMedia(mediaId)

Медиа запускается для просмотра, используя встроенные механизмы

ipano.activateMedia("media:42");

Запустить сценарий ipano.runScenario(scenarioPk)

Ручной запуск сценария.

await ipano.runScenario(7);

CinemaFX (визуальные runtime-эффекты)

Получить настройки эффектов ipano.getCinemaFX()

Читает текущее runtime-состояние визуальных эффектов.

{
  enabled: true, // включено ли cinemaFX
  vignette: 35, // виньетка
  bloom: 27, // блум
  halation: 41, // гало
  grading: 36, // цветокоррекция
  aberration: 45, // абберации
  sharpen: 26, // резкость
  diffusion: 17, // диффузия
  dof: 64, // глубина резкости
  grain: 64, // пленочный шум
  transition_blur: 100 // размытие переходов
}

Установить состояние эффекта ipano.setCinemaFX(patch)

Меняет эффекты. Не забудьте включить enabled

ipano.setCinemaFX({
  enabled: true,
  bloom: 40,
  vignette: 20,
  grading: 50
});

ipano.setCinemaFX({ enabled: false }); // выключает все сразу

Примеры

Перейти на сцену и повернуть камеру

(async () => {
  await ipano.ready();
  await ipano.goTo("scene-2");
  await ipano.lookAt({ yaw: 45, pitch: -5, duration: 500 });
})();

Скрыть все interactive-объекты текущей сцены

const scene = ipano.getCurrentScene();
(scene?.objects?.interactive || []).forEach((obj) => {
  ipano.setObjectVisible(obj.id, false);
});

Отключить анимацию у всех transition-объектов

ipano.updateObjects(
  { kind: "transition" },
  { animationEnabled: false }
);

Найти медиа и открыть первое доступное

const media = ipano.getProjectMedia();
if (media.length) {
  ipano.activateMedia(media[0].id);
}