ADN Open CIS
Сообщество программистов Autodesk в СНГ

01/07/2017

Передача результатов расчетов Wolfram|One в Autodesk Fusion 360

В рамках процесса разработки может потребоваться передача результатов математических вычислений в окончательный дизайн, расположенный в САПР, с возможностью их обновления во время изменений. В качестве математической системы можно было использовать Wolfram|One. В качестве системы САПР - Autodesk Fusion 360.

Создание блокнота Wolfram|One

Ниже приведен снимок экрана этого блокнота:

 

Чтобы осуществить запрос, мы передаем параметры, добавляя их к URL-адресу:

https://www.wolframcloud.com/objects/user-e2e7e7b9-b7ce-4012-8b07-3f4d0d04b0d2/cuboid?x=10

Этот URL-адрес вернет ответ в формате JSON:

Код - HTML: [Выделить]
  1. {
  2.     "w": 10,
  3.     "d": 70,
  4.     "h": 30
  5. }

Теперь мы можем работать с Autodesk Fusion 360.

Передача переменных в Fusion 360

Создайте модель с определенными пользовательскими параметрами, которые связаны с измерениями. А один - с URL-адресом блокнота:

 

Чтобы импортировать параметры из JSON, создадим надстройку JS:

Код - JavaScript: [Выделить]
  1.  
  2. //Author-ndesign.co
  3. //Description-Passing the Wolfram|One data to the Autodesk Fusion 360
  4.  
  5. function run(context) {
  6.  
  7.     "use strict";
  8.     if (adsk.debug === true) {
  9.         /*jslint debug: true*/
  10.         debugger;
  11.         /*jslint debug: false*/
  12.     }
  13.  
  14.     var ui;
  15.     try {
  16.         var app = adsk.core.Application.get();
  17.         ui = app.userInterface;
  18.         var product = app.activeProduct;
  19.         var design = adsk.fusion.Design(product);
  20.         var params = design.userParameters; //get the list of parameters
  21.         var data = null;
  22.  
  23.         var xhr = new XMLHttpRequest();
  24.         xhr.withCredentials = false;
  25.        
  26.         xhr.onreadystatechange = function()  {
  27.           if (this.readyState == 4) {
  28.               var resp = this.resoponseText;
  29.               var myArr = JSON.parse(this.responseText);
  30.               for (var prop in myArr){
  31.                   var curP = params.itemByName(prop);
  32.                   curP.value = myArr[prop];
  33.               }              
  34.           }
  35.         };
  36.         var notebook = params.itemByName("URL").comment+"?x="+params.itemByName("w").value;
  37.         xhr.open("GET", notebook);
  38.         xhr.responseType = "text";
  39.         xhr.send(data);
  40.  
  41.     }
  42.     catch (e) {
  43.         if (ui) {
  44.             ui.messageBox('Failed : ' + (e.description ? e.description : e));
  45.         }
  46.     }
  47. }
  48.  
  49. function stop(context) {
  50.     var ui;
  51.     try {
  52.         var app = adsk.core.Application.get();
  53.         ui = app.userInterface;
  54.  
  55.         ui.messageBox('Stop addin');
  56.     }
  57.     catch (e) {
  58.         if (ui) {
  59.             ui.messageBox('Failed : ' + (e.description ? e.description : e));
  60.         }
  61.     }
  62. }

Полный код доступен здесь: Project Loxodonta

Теперь запустите эту надстройку, чтобы обновить значения параметров.

Автор: Дмитрий Емельянов

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 01.07.2017