JSPM

  • Created
  • Published
  • Downloads 25
  • Score
    100M100P100Q115140F

IFC 3D model viewer component for web applications

Package Exports

  • @sequent-org/ifc-viewer
  • @sequent-org/ifc-viewer/style.css

Readme

@sequent-org/ifc-viewer

IFC 3D model viewer component for web applications. Основан на Three.js и web-ifc для просмотра BIM моделей в браузере.

✨ Полностью автономный пакет - не требует внешних CSS фреймворков (Tailwind, Bootstrap и т.д.).

🚀 Установка

npm install @sequent-org/ifc-viewer

📋 Основное использование

Простой пример

import { IfcViewer } from '@sequent-org/ifc-viewer'

// Создание просмотрщика с автозагрузкой модели (минимальный режим)
const viewer = new IfcViewer({
  container: document.getElementById('viewer-container'),
  ifcUrl: '/path/to/model.ifc'
  // showSidebar: false (по умолчанию)
  // showControls: false (по умолчанию) 
  // showToolbar: true (по умолчанию)
})

await viewer.init()

Интеграция в Laravel + Vite

В Laravel проекте с Vite:

// В вашем JS файле  
import { IfcViewer } from '@sequent-org/ifc-viewer'

function showIfcModal(ifcUrl) {
  const modal = document.getElementById('ifc-modal')
  const container = modal.querySelector('.modal-content')
  
  const viewer = new IfcViewer({
    container: container,
    ifcUrl: ifcUrl
    // Минимальный режим по умолчанию - только просмотрщик с верхней панелью
  })
  
  viewer.init().then(() => {
    modal.style.display = 'flex'
  })
}

Загрузка пользовательского файла

const viewer = new IfcViewer({
  container: '#viewer-container',
  autoLoad: false  // не загружать автоматически
  // По умолчанию только верхняя панель, загрузка через кнопку "📁 Загрузить"
})

await viewer.init()

// Альтернативно: программная загрузка файла
const fileInput = document.getElementById('file-input')
fileInput.addEventListener('change', async (e) => {
  const file = e.target.files[0]
  if (file) {
    await viewer.loadModel(file)
  }
})

⚙️ Опции конфигурации

Опция Тип По умолчанию Описание
container HTMLElement | string обязательно DOM элемент или селектор для контейнера
ifcUrl string null URL для загрузки IFC файла
ifcFile File null File объект для загрузки
showSidebar boolean false Показывать боковую панель с деревом
showControls boolean false Показывать нижние кнопки управления
showToolbar boolean true Показывать верхнюю панель инструментов
autoLoad boolean true Автоматически загружать при инициализации
theme string 'light' Тема интерфейса ('light' | 'dark')

🎯 API методы

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

// Инициализация просмотрщика
await viewer.init()

// Загрузка модели
await viewer.loadModel('/path/to/model.ifc')  // по URL
await viewer.loadModel(fileObject)            // File объект

// Управление интерфейсом
viewer.setSidebarVisible(true)
viewer.setTheme('dark')

// Получение информации
const modelInfo = viewer.getModelInfo()
const threeViewer = viewer.getViewer()
const ifcService = viewer.getIfcService()

// Освобождение ресурсов
viewer.dispose()

📡 События

Просмотрщик отправляет пользовательские события:

const container = document.getElementById('viewer-container')

// Готовность к работе
container.addEventListener('ifcviewer:ready', (e) => {
  console.log('Просмотрщик готов', e.detail.viewer)
})

// Модель загружена
container.addEventListener('ifcviewer:model-loaded', (e) => {
  console.log('Модель загружена', e.detail.model)
})

// Ошибка
container.addEventListener('ifcviewer:error', (e) => {
  console.error('Ошибка просмотрщика', e.detail.error)
})

// Освобождение ресурсов
container.addEventListener('ifcviewer:disposed', (e) => {
  console.log('Ресурсы освобождены')
})

🎨 Стили

Стили подключаются автоматически при импорте пакета и полностью автономны - не требуют Tailwind CSS, Bootstrap или других внешних фреймворков.

Если нужно подключить стили отдельно:

import '@sequent-org/ifc-viewer/style.css'

Преимущества локальных стилей:

  • ✅ Полная автономность пакета
  • ✅ Нет конфликтов с CSS фреймворками сайта
  • ✅ Меньший размер bundle'а
  • ✅ Быстрая загрузка без внешних зависимостей

🎛️ Функции верхней панели

При включенной опции showToolbar доступны следующие инструменты:

Качество рендеринга

  • Low - Низкое качество для слабых устройств
  • Med - Среднее качество (по умолчанию)
  • High - Высокое качество для детального просмотра

Стили отображения

  • Edges - Показ/скрытие контуров граней
  • Flat - Переключение плоского/гладкого затенения

Секущие плоскости

  • Clip X/Y/Z - Активация секущих плоскостей по осям
  • При активации появляются слайдеры для точной настройки позиции
  • Одновременно активна только одна плоскость

Загрузка файлов

  • 📁 Загрузить - Кнопка выбора IFC файла пользователем

🧪 Тестирование

Для локального тестирования пакета:

git clone <repo-url>
cd ifc-viewer
npm install
npm run test:manual

Откроется страница test.html с интерактивными тестами.

📦 Поддерживаемые форматы

  • .ifc - стандартные IFC файлы
  • .ifczip - архивы IFC
  • .zip - ZIP архивы с IFC файлами

🔧 Системные требования

  • Node.js >= 16
  • Современный браузер с поддержкой WebGL
  • Для работы требуются файлы web-ifc.wasm в публичной папке проекта

📄 Лицензия

MIT License

🤝 Поддержка

Для вопросов и предложений создавайте Issues в репозитории проекта.