Ця сторінка ще не перекладена українською. Показано англійську версію. Переглянути англійською

Робочий процес IFC Open BIM

Обробка IFC-файлів для відкритої BIM-співпраці із зовнішніми партнерами.

Огляд робочого процесу

Зовнішні партнери
ArchiCAD
Tekla
Bentley
Інші BIM
Обмін IFC
Файли IFC
Обробка RAPS
Завантаження
Трансляція SVF2
Хмара APS
Бакет OSS
Viewables
Метадані
Координація
Forge Viewer
Звіти
Партнери→IFC→Обробка→Хмара→Результат

Підхід CLI

Крок 1: Завантаження IFC-файлу

raps object upload my-bucket model.ifc

Крок 2: Трансляція у SVF2

URN=$(raps object urn my-bucket model.ifc --output plain)
raps translate start "$URN" --format svf2 --wait

Крок 3: Перевірка трансляції

raps translate manifest "$URN"

Крок 4: Витяг даних IFC

# Отримання метаданих
raps derivative metadata "$URN" --output json > ifc-metadata.json

# Отримання наборів властивостей IFC
raps derivative properties "$URN" --output json > ifc-properties.json

# Отримання ієрархії моделі
raps derivative tree "$URN" --output json > ifc-tree.json

Крок 5: Аналіз вмісту IFC

# Підрахунок елементів за типом IFC
cat ifc-properties.json | jq '
  group_by(.properties.IfcType) |
  map({type: .[0].properties.IfcType, count: length}) |
  sort_by(-.count)'

# Перелік усіх наборів властивостей
cat ifc-properties.json | jq '[.[].properties | keys] | flatten | unique'

CI/CD-конвеєр

# .github/workflows/ifc-processing.yml
name: IFC Processing Pipeline

on:
  push:
    paths:
      - 'ifc/**/*.ifc'

env:
  BUCKET: ifc-exchange-${{ github.repository_id }}

jobs:
  process-ifc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install RAPS
        run: cargo install raps

      - name: Setup bucket
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          raps bucket create --key "$BUCKET" --policy persistent --region US 2>/dev/null || true

      - name: Process IFC files
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          mkdir -p ./ifc-reports

          for ifc in ifc/**/*.ifc; do
            [ -f "$ifc" ] || continue

            filename=$(basename "$ifc")
            name="${filename%.ifc}"

            echo "Processing: $ifc"

            # Завантаження
            raps object upload "$BUCKET" "$ifc"

            # Трансляція
            URN=$(raps object urn "$BUCKET" "$filename" --output plain)
            raps translate start "$URN" --format svf2 --wait

            # Витяг метаданих
            raps derivative metadata "$URN" --output json > "./ifc-reports/${name}-metadata.json"
            raps derivative properties "$URN" --output json > "./ifc-reports/${name}-properties.json"

            # Генерація звіту
            echo "# IFC Report: $filename" > "./ifc-reports/${name}-report.md"
            echo "Processed: $(date)" >> "./ifc-reports/${name}-report.md"
            echo "" >> "./ifc-reports/${name}-report.md"
            echo "## Element Count by Type" >> "./ifc-reports/${name}-report.md"
            cat "./ifc-reports/${name}-properties.json" | jq -r '
              group_by(.properties.IfcType) |
              map({type: .[0].properties.IfcType, count: length}) |
              sort_by(-.count) |
              .[] | "- \(.type): \(.count)"
            ' >> "./ifc-reports/${name}-report.md"
          done

      - name: Upload reports
        uses: actions/upload-artifact@v4
        with:
          name: ifc-reports
          path: ./ifc-reports/

Потік конвеєра

Git Push
ifc/**/*.ifc changed
Для кожного IFC
Завантаження в OSS
↓
Трансляція SVF2
↓
Витяг метаданих
↓
Генерація звіту
Артефакти
metadata.json
properties.json
report.md

Інтеграція з MCP

Обробка IFC від партнера

User: "We received IFC files from the structural engineer. Upload them and check if they translated correctly."
Користувач
AI-асистент
RAPS MCP
Хмара APS
Обробити IFC-файли партнера
→
aps_object_upload()
→
Завантажити IFC
→
aps_translate_start()
→
Очікування завершення:
aps_translate_manifest()
→
Перевірка статусу
→
aps_derivative_properties()
→
Отримати властивості
→
Дані IFC
←
Трансляція завершена + звіт

Відповідь AI:

Конструктивний IFC-файл успішно завантажено та транслятовано.

Зведення моделі:

  • Файл: structural-model.ifc
  • Статус: Завершено
  • Елементів: 2 847 загалом

За типом IFC:

  • IfcColumn: 156
  • IfcBeam: 89
  • IfcSlab: 12
  • IfcFooting: 24
  • IfcWall: 45
  • IfcConnection: 2 521

Порівняння версій IFC

User: "Compare the structural IFC we received today with last week's version"

Відповідь AI:

Порівняння версій IFC:

Тип елементаМинулий тижденьСьогодніЗміна
IfcColumn148156+8
IfcBeam8589+4
IfcSlab12120
IfcFooting24240
Разом2 7892 847+58

Нові елементи, ймовірно, знаходяться на осях E-F, поверхи 3-4.


Валідація IFC

Перевірка обов’язкових властивостей

# Перевірка наявності обов'язкових властивостей у всіх елементів
cat ifc-properties.json | jq '
  [.[] | select(
    .properties.GlobalId == null or
    .properties.Name == null
  )] | length'

Експорт зведення наборів властивостей

# Перелік усіх визначень Pset
cat ifc-properties.json | jq '
  [.[].properties | to_entries | .[] | select(.key | startswith("Pset_"))] |
  group_by(.key) |
  map({pset: .[0].key, count: length})'

Валідація схеми IFC

# Перевірка розподілу типів IFC
cat ifc-properties.json | jq '
  group_by(.properties.IfcType) |
  map({
    type: .[0].properties.IfcType,
    count: length,
    hasGlobalId: ([.[] | select(.properties.GlobalId != null)] | length),
    hasName: ([.[] | select(.properties.Name != null)] | length)
  }) |
  sort_by(-.count)'

Пов’язане