Я реализовал средство просмотра с помощью Autodesk Platform Services (прежнее название Forge) на .NET Core. В ведро загружаю 2D чертежи в формате .dwg.
Я включил функцию пометок в средстве просмотра, так что теперь я могу сделать любую пометку поверх .dwg.
То, что у меня есть на данный момент, выглядит так:
Мне нужно сохранить этот чертеж с пометками, которые я сделал, и либо использовать его как второй чертеж внутри ведра, либо переопределить исходный.
Шаги, которые я предпринял до сих пор:
В javascript позади я могу получить разметку только в формате .svg, используя .generateData() в расширении MarkupsCore:
const markupCore = await viewer.loadExtension('Autodesk.Viewing.MarkupsCore');
let svgMarkup = markupCore.generateData();
Получив разметку svg, я конвертирую ее в файл .dxf.
Я думаю, что мне нужно использовать API автоматизации проектирования, чтобы импортировать этот файл dxf в dwg, но я не знаю, как справиться с этим.
Я проверил следующую ссылку по импорту dxf в dwg, но пока не могу найти что-то для своего случая.
Учебники AutoDesk Design Automation по autocad
Если кто-то знает, может быть, другой способ справиться с этим, пожалуйста, дайте мне знать.
Я думаю, что мне нужно использовать API автоматизации проектирования, чтобы импортировать этот файл dxf в dwg, но я не знаю, как с этим справиться.
Да, это правильно, вы можете вставить dxf в основной чертеж, вы должны знать масштаб и положение, чтобы он был правильно размещен поверх вашего чертежа.
Активность
{
"id": "{{ _.activityId }}",
"commandLine": [
"$(engine.path)\\accoreconsole.exe /i \"$(args[main].path)\" /s $(settings[script].path)"
],
"parameters": {
"main": {
"verb": "get",
"description": "test",
"required": true,
"localName": "$(inputFile)"
},
"overlay": {
"verb": "get",
"description": "",
"required": true,
"localName": "markups.dxf"
},
"result": {
"verb": "put",
"description": "",
"required": true,
"localName": "result.dwg"
}
},
"engine": "Autodesk.AutoCAD+24_1",
"description": "import markups",
"settings": {
"script": "-insert\nmarkups.dxf\n4,1,0\n1\n1\n0\nsaveas\n2018\nresult.dwg\n"
}
}
Рабочий элемент
{
"activityId": "{{ _.nickName }}.{{ _.activityId }}+{{ _.alias }}",
"arguments": {
"main": {
"url": "urn:adsk.objects:os.object:madlybuckets/main.dwg",
"verb": "get",
"headers": {
"Authorization": "Bearer {{ _.oAuthToken }}"
}
},
"overlay": {
"url": "urn:adsk.objects:os.object:madlybuckets/markups.dxf",
"verb": "get",
"headers": {
"Authorization": "Bearer {{ _.oAuthToken }}"
}
},
"result": {
"verb": "put",
"url": "urn:adsk.objects:os.object:madlybuckets/result.dwg",
"headers": {
"Authorization": "Bearer {{ _.oAuthToken }}"
}
}
}
}
Здесь main.dwg, markups.dxf загружаются в Службу хранения объектов APS, чтобы я мог напрямую использовать идентификатор объекта загруженных файлов вместо передачи URL-адреса объекта рабочему элементу.
Да, вы можете использовать переменные, украшающие имена параметров с помощью $, например: $(overlay), во время выполнения оно будет разрешаться в имя файла, указанное в рабочем элементе.
Если я обновлю localName до $(overlay), мне нужно что-то обновить в «сценарии», так как на данный момент у меня определен markups.dxf. Можно ли сделать какое-то значение переменной в самом скрипте?
Нет, кроме командной строки, мы больше нигде не расширяем переменные, в чем проблема с использованием markups.dxf, в любом случае, как только рабочий элемент отправлен и завершен, все файлы удаляются. если вы хотите полномасштабную автоматизацию, я бы предложил обернуть логику в команду .NET и загрузить ее как пакет .
возможно ли сделать localName оверлея и привести внутренние параметры в качестве параметров. Не жестко запрограммировано в json. То же, что и «основной» параметр.