Продукти AutoCAD – Українською
Шлях компанії Autodesk розпочинався в далекому 1982 році разом із програмним продуктом AutoCAD. В цій гілці на форумі ви можете ділитися знаннями, запитувати й отримувати відповіді, та читати найпопулярніші теми по програмним продуктам сімейства Autodesk AutoCAD.
abbrechen
Suchergebnisse werden angezeigt für 
Anzeigen  nur  | Stattdessen suchen nach 
Meintest du: 

Челендж: пакетна обробка креслень із складними об'єктами.

3 ANTWORTEN 3
GELÖST
Antworten
Nachricht 1 von 4
klimanskiy_a
1051 Aufrufe, 3 Antworten

Челендж: пакетна обробка креслень із складними об'єктами.

Вітаю.

 

При експортуванні креслень з сторонньої САПР виходить кілька однотипних файлів DWG (рамка 297х420 креслення зі штампом, складові блоки та різні елементи всередині).

 

Завдання:

 

Будь-яким зручним способом автоматизувати виконання наступних дій:

 

- відкрити перше кресленя з виділенної групи

- виконати команду "виділити все" + "розбити" (повторити п'ять разів поспіль - інакше при копіюванні елементи відлітають у космос)

- "виділити все" та "by layer"

- зберегти.
- створити порожній (далі - "основний") простір креслення
- відкрити перше креслення з числа отриманих у п.1,

- "виділити все"

- "копіювати",

- вставити скопійоване в основне креслення так, щоб нижній лівий кут рамки креслення, що копіюється, був вирівняний за точкою №1 (x=0, y=Y=5250 )
- закрити перше креслення.

- відкрити друге креслення з числа отриманих у п.1,

- "виділити все"

- "копіювати"

- вставити скопійоване в простір основного  креслення так, щоб нижній лівий кут рамки креслення, що копіюється, був вирівняний за точкою №2 (x=500, y=Y=5250 )
- закрити друге креслення

 

повторяти поки не закінчиться матеріал

 

На виході - єдиний файл DWG у якому координатною сіткою розставлені креслення.

 

Screenshot_2.png

 

Discuss welcomed :grinsendes_Gesicht_mit_großen_Augen:

3 ANTWORTEN 3
Nachricht 2 von 4
DmytroMukhin
als Antwort auf: klimanskiy_a

Вітання!

Челендж цікавий, навіть 100 переглядів (що тут не мало), але щось не приєднуються бажаючі... підніму тему, може хто хоча б прокоментує)

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" повідомленню! | Do you find the posts helpful? "LIKE" these posts!
На ваше запитання відповіли? Натисніть кнопку 'ПРИЙНЯТИ РІШЕННЯ' | Have your question been answered successfully? Click 'ACCEPT SOLUTION' button.

Дмитро Мухін | Dmytro Mukhin Facebook | Instagram | InventorInUa




Менеджер спільноти Autodesk | Autodesk Community Manager
Nachricht 3 von 4
Yaroslav.shelest
als Antwort auf: klimanskiy_a

Добрий день.
Тут перше і основне питання, навіщо збирати клеслення/листи в просторі моделі.
Я б радив переходити на підшивки, це одне креслення це один лист.

Це спростить багато моментів для написання майбутнього коду.
Значну частину того що ви хочете можна реалізувати на LISP або VBA.

Я б радив спробувати вирішити задачу з допомогою AI, так як такий спосіб суттєво прокачає в суміжних питання.

Тому беремо ваше питання і трохи його модифікуємо.

Yaroslavshelest_0-1705397414953.png

Yaroslavshelest_1-1705397437094.png

Sub ProcessDrawings()
Dim drawings As AcadDocuments
Dim currentDrawing As AcadDocument
Dim mainDrawing As AcadDocument

' Отримати колекцію відкритих креслень
Set drawings = ThisDrawing.Application.Documents

' Перевірити, чи є креслення для обробки
If drawings.Count = 0 Then
MsgBox "Немає відкритих креслень.", vbExclamation
Exit Sub
End If

' Відкрити перше креслення з виділеної групи
Set currentDrawing = drawings.Item(1)
currentDrawing.Activate

' Виконати команди "виділити все" + "розбити" п'ять разів
For i = 1 To 5
ThisDrawing.SendCommand "_ALL" & vbCr
ThisDrawing.SendCommand "_BREAK" & vbCr
Next i

' Виконати команди "виділити все" та "by layer"
ThisDrawing.SendCommand "_ALL" & vbCr
ThisDrawing.SendCommand "_BYLAYER" & vbCr

' Зберегти поточне креслення
currentDrawing.Save

' Створити порожній (основний) простір креслення
Set mainDrawing = drawings.Add
mainDrawing.Activate

' Відкрити перше креслення з числа отриманих у п.1
currentDrawing.Activate

' Виконати команду "виділити все"
ThisDrawing.SendCommand "_ALL" & vbCr

' Виконати команду "копіювати"
ThisDrawing.SendCommand "_COPY" & vbCr

' Перейти в основне креслення
mainDrawing.Activate

' Вставити скопійоване в основне креслення
ThisDrawing.SendCommand "_PASTE" & vbCr

' Вирівняти нижній лівий кут рамки креслення за точкою 0, 0, 0
ThisDrawing.SendCommand "_BASE" & vbCr & "0,0,0" & vbCr

' Зберегти основне креслення
mainDrawing.Save
End Sub


Цей код використовує об'єктну модель AutoCAD для доступу до функцій API. Зверніть увагу, що цей код розроблений для використання в редакторі VBA в середовищі AutoCAD. Вам слід вставити цей код в редактор VBA, який можна відкрити за допомогою команди "VBAIDE" в AutoCAD

Це звісно тільки приклад і його треба дебажити, але це цілком працюючий спосіб.

Для того щоб простіше вирішити задачу її слід розбити на кроки і робити запит на кожен крок окремо, і одразу його перевіряти.
Якщо щось не працює, одразу шукати інше рішення.
Потім об'єднувати працюючи покрові рішення в групи, там теж можуть бути проблеми, але цілком вирішуємі.
Головне це поетапний контроль і зберігання версій коду.

Ось приклад коду який був написаний саме ChatGPT під моїм наглядом. Я умисне не писав код самостійно.
https://forums.autodesk.com/t5/architecture-engineering/yak-organizuvati-poshtovu-skrinku-dlya-listi...
По часу, від ідеї до кінцевого результату це зайняло 3-4 дні, основній час як завжди їсть дебагінг. Часом проблема не в коді а в вихідних даних, що їх не так задають і т.п. Тому треба перевіряти на простих прикладах і точно розуміти що той чи інший шмат коду буде працювати.


Для зручної роботи з кодом вам буде потрібна якась IDE (середовище розробки), можете спробувати класичне середовище https://code.visualstudio.com/, її цілком достатньо.

Також підказка/порада, слідкуйте за кодом який пише ChatGPT коли об'єднуєте шматки коду, або просите його використати як шаблон шматок коду і даєте додаткові умови. Часто буває так що він спрошує код і викидує з нього потрібні вам компоненти, в усякому разі в мене так було.

Якщо ви почнете тут цей кейс з дебагінгом, можете розраховувати на мою допомогу в вичитуванні VBA коду, або його оптимізації.

Також якщо кейс з розташуванням креслень в просторі моделі по координатам обовязковий, можливо теж розглядати вирішення такої задачі, але виглядає вона складнішою.



Відповідь корисна? Клікніть на"ВПОДОБАЙКУ"цим повідомленням! | Do you find the posts helpful? "LIKE" these posts!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click"ACCEPT SOLUTION"

Yaroslav Shelest / Ярослав Шелест
BIM-Manager & Civil Engineer & Інженер ПЦБ
Facebook |LinkedIn |Autodesk |Behance
EESignature

Nachricht 4 von 4
DmytroMukhin
als Antwort auf: klimanskiy_a

Думаю, що погодетесь із переможцем в цьому челенджі)

Відмітив відповідь Ярослава як рішення, адже та відповідь достойна цього точно. Це допоможе піднімати цей пост вище при результатах пошуку в гугл.

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" повідомленню! | Do you find the posts helpful? "LIKE" these posts!
На ваше запитання відповіли? Натисніть кнопку 'ПРИЙНЯТИ РІШЕННЯ' | Have your question been answered successfully? Click 'ACCEPT SOLUTION' button.

Дмитро Мухін | Dmytro Mukhin Facebook | Instagram | InventorInUa




Менеджер спільноти Autodesk | Autodesk Community Manager

Sie finden nicht, was Sie suchen? Fragen Sie die Community oder teilen Sie Ihr Wissen mit anderen.

In Foren veröffentlichen