SVF-файл и SFV-файл URN с использованием кода PHP - Forge

Мы пытаемся преобразовать файл Revit (.rvt) в SVF, чтобы мы могли просматривать этот файл в программе просмотра, для этого мы используем forge API и PHP. Но когда мы выполняем команду cURL для получения SVF, получаем NULL результат.

Мы используем следующие шаги -

  1. Аутентификация

    Создал приложение

    Использование трехногого токена

  2. API управления данными

    Мы используем учебник «Загрузить файл», чтобы получить URN файла с диска A360. Ссылка - https://developer.autodesk.com/en/docs/data/v2/tutorials/download-file/ На пятом шаге мы получаем файл URN с версией - $ revitFileURN = 'urn: adsk.wipprod: fs.file: vf.2tIxruH7Qpuhai7__Z982g? version = 1' ; Теперь мы используем этот URN для подготовки этого файла к Viewer, для этого нам нужен файл SVF. Ссылка - https://developer.autodesk.com/en/docs/model-derivative/v2/tutorials/prepare-file-for-viewer/

  3. Подготовьте файл для просмотра

    Преобразовал исходный URN в URN в кодировке Base64:

    $revitFileURNEncoded = base64_encode (  $revitFileURN );
    

    Массив данных создания

    $dataValue = array("input" => array ("urn" =>$revitFileURNEncoded ), "output"=>array("formats"=>array(array("type"=>"svf","views"=>array("2d","3D")))));
    $data_string = http_build_query($dataValue);
    

    Создание массива заголовков

    $strHeader=array();
    $strHeader[]='Authorization: Bearer '.$AccessToken;
    $strHeader[]='Content-Type: application/json';
    

    выполнение cURL -

    curl_setopt_array($curlTranslateFileToSVF, array(
          CURLOPT_URL => $url,
          CURLOPT_POSTFIELDS =>$data_string,
          CURLOPT_POST => 1,
          CURLOPT_HTTPHEADER=>$strHeader,
          CURLOPT_RETURNTRANSFER=>true
    ));
    $curlTranslateFileToSVFResponse  = curl_exec($curlTranslateFileToSVF );
    curl_close($curlTranslateFileToSVF);
    

    Мы получаем NULL в $ curlTranslateFileToSVFResponse

    Пожалуйста, направьте -

    1. How to get SVF file
    2. Как просмотреть этот SVF-файл в браузере

person Sonam Kumar    schedule 14.02.2017    source источник
comment
в трехстороннем контексте вам не нужно конвертировать SVF самостоятельно, все файлы в A360 конвертируются автоматически. Если вам нужен другой результат, вам понадобится производная модели.   -  person Augusto Goncalves    schedule 14.02.2017


Ответы (1)


Например, объяснил Августо, A360 или BIM360 автоматически выполнит перевод быстро, поэтому, если вы посмотрите на ответ элемента, вы заметите, что манифест SVF уже присутствует. Однако вы все равно можете начать перевод в SVF или другие форматы, если они поддерживаются, если вы используете правильный URN, поскольку в A360 / BIM360 существует несколько URN для каждого элемента, но с разным значением. Вот мой код, который я использовал для тестирования:

$access_token =ThreeLeggedController::access_token () ;
\Swagger\Client\Configuration::getDefaultConfiguration ()->setAccessToken ($access_token) ;

$api_instance =new \Swagger\Client\Api\HubsApi () ;
$data =$api_instance->getHubs () ;
//print_r ($data) ;
// Cyrille Fauvel Hub = a.cGVyc29uYWw6dWUyOWNkYzc4

$hub_id ="a.cGVyc29uYWw6dWUyOWNkYzc4" ;
$data =$api_instance->getHubProjects ($hub_id) ;
//print_r ($data) ;
// Forge project = a.cGVyc29uYWw6dWUyOWM4OWI3IzIwMTYwNjEzMzQ4ODgxMzE

$project_id ='a.cGVyc29uYWw6dWUyOWM4OWI3IzIwMTYwNjEzMzQ4ODgxMzE' ;
$api_projects =new \Swagger\Client\Api\ProjectsApi () ;
$data =$api_projects->getProject ($hub_id, $project_id) ;
//print_r ($data) ;
// Root folder = urn:adsk.wipprod:fs.folder:co.XRaMujM2Q-qQARnuF05FuA

$folder_id ='urn:adsk.wipprod:fs.folder:co.XRaMujM2Q-qQARnuF05FuA' ;
$api_folders =new \Swagger\Client\Api\FoldersApi () ;
$data =$api_folders->getFolderContents ($project_id, $folder_id) ;
//print_r ($data->data) ;
// V8 Engine.dwfx = urn:adsk.wipprod:dm.lineage:IzRTVrfDRq6-y8pDzpRZ1g
//               urn:adsk.wipprod:fs.file:vf.IzRTVrfDRq6-y8pDzpRZ1g?version=1

$item_id ='urn:adsk.wipprod:dm.lineage:IzRTVrfDRq6-y8pDzpRZ1g' ;
$file_id ='urn:adsk.wipprod:fs.file:vf.IzRTVrfDRq6-y8pDzpRZ1g?version=1' ;
$api_items =new \Swagger\Client\Api\ItemsApi () ;
$data =$api_items->getItem ($project_id, $item_id) ;
//print_r ($data) ;
//print_r ($data->included [0]->relationships->storage->data->id) ;
// id = urn:adsk.objects:os.object:wip.dm.prod/72f7d0a2-0727-4346-ba0f-33b69d0c2a99.dwfx
//print_r ($data->included [0]->relationships->derivatives->data->id) ;
// urn = dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLkl6UlRWcmZEUnE2LXk4cER6cFJaMWc_dmVyc2lvbj0x

$urn ='dXJuOmFkc2sud2lwcHJvZDpmcy5maWxlOnZmLkl6UlRWcmZEUnE2LXk4cER6cFJaMWc_dmVyc2lvbj0x' ;
$id ='urn:adsk.objects:os.object:wip.dm.prod/72f7d0a2-0727-4346-ba0f-33b69d0c2a99.dwfx' ;
$api_md =new \Swagger\Client\Api\DerivativesApi () ;
$data =$api_md->getManifest ($urn) ;
//print_r ($data) ;

// This is what the viewer is using, so as long you get a descent
// response here, you're good


// Let's try to quick a new translation
$urn2 =base64url_encode ($id) ;
$formats =array ( (object)[ 'type' => 'svf', 'views' => [ "2d", "3d" ] ] ) ;
$job =(object)[ 'input' => (object)[ 'urn' => $urn2 ], 'output' => (object)[ 'formats' => $formats ] ] ;
$data =$api_md->translate ($job, true) ;
print_r ($data) ;

// Done! -> [result] => created

Надеюсь, это объясняет,

person cyrille    schedule 14.02.2017