Получить облачную модель Revit Workshared как класс C# Autodesk.Revit.DB Document

У меня есть подключаемый модуль Revit, и я хочу, чтобы он выполнял некоторые операции с общей облачной моделью.

Я не могу понять, как получить модель Revit как класс документа (Autodesk.Revit.DB) который хранится в облаке BIM360 в режиме реального времени, а не в локальной или загруженной копии.

Похоже, мне нужно использовать разные API, и для этого есть несколько шагов, хотя Я ожидал чего-то относительно более простого, я быстро понял, что это на самом деле может иметь несколько шагов, которые я, честно говоря, не могу понять.

Есть ли для этого рабочий соответствующий пример кода на git hub?

Обновлено: мне удалось найти приведенный ниже код, но он не компилируется потому что ForgeClient и OSSObjectsApi не существуют в последней пакет forge sdk, как я могу это исправить?

using System;
using System.IO;
using System.Threading.Tasks;
using Autodesk.Forge;
using Autodesk.Forge.Model;
using Autodesk.Forge.Client;
using Newtonsoft.Json.Linq;

namespace BIM360Downloader
{
    class Program
    {
        static void Main(string[] args)
        {
            // These are the client ID and client secret that you obtained
            // when you registered your application on the Forge developer portal.
            string clientId = "YOUR_CLIENT_ID";
            string clientSecret = "YOUR_CLIENT_SECRET";

            // Replace these with the project ID and file ID of the model you want to download.
            string projectId = "YOUR_PROJECT_ID";
            string fileId = "YOUR_FILE_ID";

            // Create a new Forge API client.
            ForgeClient client = new ForgeClient(clientId, clientSecret);

            // Get the access token for the client.
            TwoLeggedApi oauth = new TwoLeggedApi();
            dynamic token = oauth.Authenticate(clientId, clientSecret, "client_credentials", new Scope[] { Scope.DataRead });
            string accessToken = token.access_token;

            // Set the bearer token for the client.
            client.Configuration.AccessToken = accessToken;

            // Download the model from BIM 360.
            MemoryStream modelStream = DownloadModelAsync(client, projectId, fileId).Result;
            Console.WriteLine("Successfully downloaded model to memory stream.");
        }

        static async Task<MemoryStream> DownloadModelAsync(ForgeClient client, string projectId, string fileId)
        {
            // Set up the request to download the model.
            OSSObjectsApi objectsApi = new OSSObjectsApi();
            dynamic objectDetails = await objectsApi.GetObjectDetailsAsync(projectId, fileId);
            string bucketKey = objectDetails.bucketKey;

            // Download the model data.
            dynamic data = await objectsApi.GetObjectAsync(bucketKey, fileId);
            byte[] modelData = data.Body;

            // Create a new MemoryStream object to store the model data.
            MemoryStream modelStream = new MemoryStream(modelData);
            return modelStream;
        }
    }
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы открыть динамическую модель Revit (RCM), используйте ModelPathUtils.ConvertCloudGUIDsToCloudPath() , чтобы преобразовать руководство проекта и модели в ModelPath . Затем вы можете использовать этот ModelPath, чтобы открыть документ с помощью метода Application.OpenDocumentFile().

Также читайте разделы Getting the CloudPath for a Model и SaveAsCloudModel Information from the Web Browser в ссылке о том, как найти гайды аккаунта, проекта и модели интересующей вас модели.

var cloudModelPath = ModelPathUtils.ConvertCloudGUIDsToCloudPath(region, projectGuid, modelGuid);
Document doc = app.OpenDocumentFile(cloudModelPath, new OpenOptions());

Этот код будет работать в настольной надстройке, если действительный пользователь вошел в систему и у этого пользователя есть доступ к входной модели. Хотя вы явно не упомянули, что это необходимо для работы с Design Automation для Revit, вы добавили тег #autodesk-designautomation к своему вопросу. Хорошей новостью является то, что тот же код, что и выше, должен работать для надстройки Design Automation (комплект приложений), но есть дополнительный шаг, как предоставить пользовательский контекст для задания автоматизации проектирования. Пожалуйста, обратитесь к записи в блоге и образцу github для автоматизации проектирования для RCM.

Другие вопросы по теме