Робочий процес 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:
Тип елемента Минулий тиждень Сьогодні Зміна IfcColumn 148 156 +8 IfcBeam 85 89 +4 IfcSlab 12 12 0 IfcFooting 24 24 0 Разом 2 789 2 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)'