Вітаю.
При експортуванні креслень з сторонньої САПР виходить кілька однотипних файлів DWG (рамка 297х420 креслення зі штампом, складові блоки та різні елементи всередині).
Завдання:
Будь-яким зручним способом автоматизувати виконання наступних дій:
- відкрити перше кресленя з виділенної групи
- виконати команду "виділити все" + "розбити" (повторити п'ять разів поспіль - інакше при копіюванні елементи відлітають у космос)
- "виділити все" та "by layer"
- зберегти.
- створити порожній (далі - "основний") простір креслення
- відкрити перше креслення з числа отриманих у п.1,
- "виділити все"
- "копіювати",
- вставити скопійоване в основне креслення так, щоб нижній лівий кут рамки креслення, що копіюється, був вирівняний за точкою №1 (x=0, y=Y=5250 )
- закрити перше креслення.
- відкрити друге креслення з числа отриманих у п.1,
- "виділити все"
- "копіювати"
- вставити скопійоване в простір основного креслення так, щоб нижній лівий кут рамки креслення, що копіюється, був вирівняний за точкою №2 (x=500, y=Y=5250 )
- закрити друге креслення
повторяти поки не закінчиться матеріал
На виході - єдиний файл DWG у якому координатною сіткою розставлені креслення.
Discuss welcomed ![]()
Gelöst! Gehe zur Lösung
Gelöst von Yaroslav.shelest. Gehe zur Lösung
Вітання!
Челендж цікавий, навіть 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

Добрий день.
Тут перше і основне питання, навіщо збирати клеслення/листи в просторі моделі.
Я б радив переходити на підшивки, це одне креслення це один лист.
Це спростить багато моментів для написання майбутнього коду.
Значну частину того що ви хочете можна реалізувати на LISP або VBA.
Я б радив спробувати вирішити задачу з допомогою AI, так як такий спосіб суттєво прокачає в суміжних питання.
Тому беремо ваше питання і трохи його модифікуємо.
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
Думаю, що погодетесь із переможцем в цьому челенджі)
Відмітив відповідь Ярослава як рішення, адже та відповідь достойна цього точно. Це допоможе піднімати цей пост вище при результатах пошуку в гугл.
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" повідомленню! | Do you find the posts helpful? "LIKE" these posts!
На ваше запитання відповіли? Натисніть кнопку 'ПРИЙНЯТИ РІШЕННЯ' | Have your question been answered successfully? Click 'ACCEPT SOLUTION' button.
Дмитро Мухін | Dmytro Mukhin Facebook | Instagram | InventorInUa

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