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

Синхронізація BIM 360/ACC

Завантаження моделей з BIM 360/ACC та локальна обробка.

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

Хмара BIM 360 / ACC
Хаб
Проєкт
Тека
Елемент
Версія
Автентифікація
3-Legged OAuth
↓
raps auth login
Операції RAPS
Перегляд/Навігація
Завантаження
Отримання метаданих
Отримання версій
Локальна обробка
Локальні файли
↓
Трансляція
↓
Витяг даних

Підхід CLI

Крок 1: Автентифікація

# Вхід через 3-legged OAuth (відкриє браузер)
raps auth login

# Або для CI/headless із попередньо виданими токенами
raps auth login --token "$APS_ACCESS_TOKEN" --refresh-token "$APS_REFRESH_TOKEN" --non-interactive

Крок 2: Навігація ієрархією проєкту

# Перелік усіх хабів (акаунтів)
raps hub list

# Збереження ID хабу
HUB_ID="b.your-hub-id"

# Перелік проєктів у хабі
raps project list "$HUB_ID"

# Збереження ID проєкту
PROJECT_ID="b.your-project-id"

# Перелік тек верхнього рівня
raps folder list "$PROJECT_ID" --top

# Перелік вмісту конкретної теки
FOLDER_ID="urn:adsk.wipprod:fs.folder:abc123"
raps folder list "$PROJECT_ID" "$FOLDER_ID"

Крок 3: Завантаження файлів

# Перелік елементів у теці
raps folder list "$PROJECT_ID" "$FOLDER_ID" --output json > items.json

# Завантаження конкретного елемента
ITEM_ID=$(jq -r '.[0].id' items.json)
raps item download "$PROJECT_ID" "$ITEM_ID" --output ./downloads/

# Завантаження всіх елементів з теки
jq -r '.[].id' items.json | while read item_id; do
  raps item download "$PROJECT_ID" "$item_id" --output ./downloads/
done

Крок 4: Отримання історії версій

# Перелік усіх версій елемента
raps item versions "$PROJECT_ID" "$ITEM_ID" --output json > versions.json

# Завантаження конкретної версії
VERSION_ID=$(jq -r '.[0].id' versions.json)
raps item download "$PROJECT_ID" "$ITEM_ID" --version "$VERSION_ID" --output ./downloads/

CI/CD-конвеєр

# .github/workflows/acc-sync.yml
name: ACC Model Sync

on:
  schedule:
    - cron: '0 6 * * *'  # Щоденно о 6:00
  workflow_dispatch:

env:
  HUB_ID: ${{ secrets.ACC_HUB_ID }}
  PROJECT_ID: ${{ secrets.ACC_PROJECT_ID }}
  FOLDER_ID: ${{ secrets.ACC_MODELS_FOLDER_ID }}

jobs:
  sync-models:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install RAPS
        run: cargo install raps

      - name: Authenticate with ACC
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
          APS_ACCESS_TOKEN: ${{ secrets.APS_ACCESS_TOKEN }}
          APS_REFRESH_TOKEN: ${{ secrets.APS_REFRESH_TOKEN }}
        run: |
          raps auth login --token "$APS_ACCESS_TOKEN" --refresh-token "$APS_REFRESH_TOKEN" --non-interactive

      - name: Sync models from ACC
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          mkdir -p ./synced-models

          # Перелік та завантаження всіх моделей Revit
          raps folder list "$PROJECT_ID" "$FOLDER_ID" --output json | \
            jq -r '.[] | select(.name | endswith(".rvt")) | .id' | \
            while read item_id; do
              raps item download "$PROJECT_ID" "$item_id" --output ./synced-models/
            done

      - name: Upload to OSS for processing
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          BUCKET="acc-synced-$(date +%Y%m%d)"
          raps bucket create --key "$BUCKET" --policy transient --region US 2>/dev/null || true

          for model in ./synced-models/*.rvt; do
            [ -f "$model" ] || continue

            key=$(basename "$model")
            raps object upload "$BUCKET" "$model"

            URN=$(raps object urn "$BUCKET" "$key" --output plain)
            raps translate start "$URN" --format svf2
          done

      - name: Generate sync report
        run: |
          echo "# ACC Sync Report" > sync-report.md
          echo "Date: $(date)" >> sync-report.md
          echo "" >> sync-report.md
          echo "## Synced Files" >> sync-report.md
          ls -la ./synced-models/ >> sync-report.md

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: sync-report
          path: |
            sync-report.md
            ./synced-models/

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

Розклад/Ручний
Щоденно о 6:00
Автентифікація
Refresh Token
Синхронізація ACC
Перегляд теки
Завантаження моделей
Обробка OSS
Завантаження в бакет
Трансляція SVF2
Результат
sync-report.md
synced-models/

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

Навігація та завантаження

User: "Download the latest architectural model from the Main Street project in ACC"
Користувач
AI-асистент
RAPS MCP
Хмара ACC
Завантажити модель Main Street
→
aps_hub_list()
→
Отримати хаби
→
aps_project_list()
→
Отримати проєкти
→
aps_folder_list()
→
Отримати вміст
→
aps_item_download()
→
Завантажити файл
→
←
Завантаження завершено

Відповідь AI:

Завантажено ‘MainStreet-Architectural-v42.rvt’ (156 МБ)

  • Останнє редагування: 14 лютого 2024, John Smith
  • Версія: 42
  • Збережено в: ./downloads/MainStreet-Architectural-v42.rvt

Перегляд останніх змін

User: "Show me what models changed in the Main Street project this week"

Відповідь AI:

Файли, змінені в проєкті Main Street (12-16 лютого 2024):

ФайлЗміненоАвторВерсія
Architectural.rvt14 лютJohn Smithv42
MEP.rvt13 лютJane Doev28
Structural.rvt12 лютBob Wilsonv31

Бажаєте завантажити будь-який з них?

Синхронізація та обробка

User: "Sync all the Revit models from the Design folder and translate them"

Відповідь AI:

Синхронізація 5 моделей з теки Design…

ФайлРозмірСтатус
Building-A.rvt124 МБЗавантажено, трансляція…
Building-B.rvt98 МБЗавантажено, трансляція…
Site.rvt45 МБЗавантажено, транслятовано
Landscape.rvt23 МБЗавантажено, транслятовано
Parking.rvt67 МБЗавантажено, трансляція…

Усі файли синхронізовано. 3 трансляції в процесі, 2 завершено.


Типові шаблони

Інкрементальна синхронізація

# Відстеження часу останньої синхронізації
LAST_SYNC=$(cat .last-sync 2>/dev/null || echo "1970-01-01")

# Отримання елементів, змінених після останньої синхронізації
raps folder list "$PROJECT_ID" "$FOLDER_ID" --output json | \
  jq --arg since "$LAST_SYNC" '[.[] | select(.lastModified > $since)]' | \
  jq -r '.[].id' | while read item_id; do
    raps item download "$PROJECT_ID" "$item_id" --output ./synced/
  done

# Оновлення часу останньої синхронізації
date -Iseconds > .last-sync

Дзеркалювання структури тек

# Рекурсивна синхронізація структури тек
sync_folder() {
  local project_id=$1
  local folder_id=$2
  local local_path=$3

  mkdir -p "$local_path"

  raps folder list "$project_id" "$folder_id" --output json | while read -r item; do
    type=$(echo "$item" | jq -r '.type')
    name=$(echo "$item" | jq -r '.name')
    id=$(echo "$item" | jq -r '.id')

    if [ "$type" = "folders" ]; then
      sync_folder "$project_id" "$id" "$local_path/$name"
    else
      raps item download "$project_id" "$id" --output "$local_path/"
    fi
  done
}

sync_folder "$PROJECT_ID" "$FOLDER_ID" "./local-mirror"

Пов’язане