Как подружить Python и САПР «SolidWorks». Часть 1 – Знакомство
Всем привет!
Решил немного отойти от своей любимой темы нейронных сетей и написать небольшой скрипт на Python для работы с конструкторской документацией в САПР «SolidWorks». Так как изначально у меня инженерное образование, то мне периодически приходится заниматься конструкторской деятельностью и, по своему опыту, я знаю, как много иногда приходится тратить времени для оформления чертежей и сохранения их в формате pdf или dwg (особенно, если мы говорим о большом количестве деталей сборок). И тут я подумал, почему не упростить жизнь себе и своим коллегам-конструкторам и не подружить Python и SolidWorks.
В этой статье я вкратце опишу, как можно быстро (буквально за один день) написать простой скрипт, с максимально простым графическим интерфейсом для работы с Системой автоматизированного проектирования SolidWorks. Очень надеюсь, что эта статья поможет всем инженерам-конструкторам в их непростой, но крайне интересной деятельности.
Работа будет состоять из двух основных частей (соответственно и статей будет две):
Часть 1 – Создание общей базы для работы с SolidWorks, написание простого графического интерфейса на tkinter, реализация возможности сохранения чертежей в форматах pdf и dwg.
Часть 2 – Реализация возможности автоматизированного заполнения полей таблицы чертежей из единого excel файла, и самая интересная фича этого проекта: автоматическое создание чертежей деталей из 3D-моделей (для начала реализация простых деталей из листового металла).
По итогу «завернём» программу в один .exe файл для возможности использовать на любых машинах. Используем Python 3 и SolidWorks 2020.
Итак, ТЗ готово, можем приступать!
В этой статье я опишу процесс реализации Части 1 (думаю для начала, многим хватит и этого функционала программы). Основная цель – экономия времени, представим, что у вас есть сборка, в которой огромное количество деталей и на каждую делать сделан чертеж (предположим, 100 чертежей) и открывать каждый чертеж и вручную его сохранять, это очень много человеко-часов. А если у вас 100 сборок по 100 деталей? Сделаем так, чтобы при выборе нужной папки все происходило автоматически (загружаем программу и спокойно косячим дальше занимаемся своими делами, пока скрипт всё сохраняет за вас).
#Библиотеки
from tkinter import filedialog
from tkinter.messagebox import showinfo, askyesno
from tkinter import ttk
import os
import subprocess as sb
import win32com.client
В __init__ инициализируем небольшое приветственное окно с описанием:
class PySolW:
def __init__(self):
self.window = Tk()
self.window.title("Программа сохранения файлов Solid")
self. window.geometry('600x300')
self.lbl_start = Label(self.window, text="Добрый день! \n "
"\tДобро пожаловать в программу для работы с САПР SolidWorks!\n"
"Для начала работы необходимо запустить SolidWorks.\n "
"Нажмите кнопку запуска.", font='GOST 12')
self.lbl_start.grid(column=0, row=0)
#Кнопка уно
self.btn = Button(self.window, text="Запустить SolidWorks", command=self.start_SolidW)
self.btn.grid(column=0, row=3, ipadx=6, ipady=20, padx=5, pady=20)
#Кнопка дос
self.btn_2 = Button(self.window, text="Узнать подробнее о программе", command=self.info_prog)
self.btn_2.grid(column=0, row=4, ipadx=6, ipady=20, padx=5, pady=20)
self.window.mainloop()
Визуально всё этого мракобесие будет выглядеть так:
Сразу попрошу прощения у Гуру tkinter и ООП на Python, если вдруг что-то написано не оптимально или криво :) Подробное описание работы с tkinter вы можете найти в свободном доступе, так что на этом я долго останавливаться не буду. Перейдем к работе с SolidWorks.
Кликаем на «Запустить SolidWorks» и получаем выбор основного функционала программы:
В настоящий момент кнопка создания чертежей из 3D модели «заглушена», так как ведутся работы по написанию соответствующего кода. Так что жмём «сохранить чертежи в pdf/dwg формат» и выбираем нужный формат и папку с чертежами:
И процесс сохранения пошёл!
Самые внимательные заметили (в списке библиотек), что мы пользуемся win32com.client для взаимодействия с Component Object Model (COM). Этот пакет позволяет нам залезть в SolidWorks (или любое другое приложение на windows) и автоматизировать очень многое. В текущем коде порядок действий следующий:
1) Открываем SolidWorks (здесь и далее описаны функции, используемые в классе, но можно написать линейно, без написания функций):
def startSolidWorks(self):
sb.Popen(r'C:/Program Files/SOLIDWORKS Corp/SOLIDWORKS/SLDWORKS.exe')
2) Подключаемся к SW:
def connectToSolidWorks(self):
sw = win32com.client.Dispatch("SLDWORKS.Application")
return sw
3) Открываем нужный нам файл чертежа:
def openDocFile(self, sw, Path):
f = sw.getopendocspec(Path)
model = sw.opendoc7(f)
return model
4) Сохраняем открытый файл в нужный формат:
model.SaveAs3(save_path_dir + f'/{name_drawning}.pdf', 0, 2)
model.SaveAs3(save_path_dir + f'/{name_drawning}.dwg', 0, 2)
5) Закрываем файл чертежа:
sw.CloseAllDocuments(True)
И повторяем n количество раз, где n – число чертежей в папке.
6) В самом конце закрываем SolidWorks:
def shutSolidWorks(self):
sb.call('Taskkill /IM SLDWORKS.exe /F')
Ну, вот и всё, это все процесс! В цикле всё делает скрипт, а мы спокойно идём кушать борщ в столовую нашего КБ.
Напоследок завернём всю нашу замечательную программу в .exe файл для удобства пользования на других машинах. Тут всё довольно просто, воспользуемся библиотекой Pyinstaller. (устанавливаем pip3 install pyinstaller –> заходим в папку со скриптом в формате .py –> пишем в терминале pyinstaller --onefile ИМЯ_СКРИПТА.py -> Создается exe-файл –> Хэппи Енд).
В репозитории на моем github (https://github.com/Mazepov/PySolW) вы сможете скачать .exe файл для альфа-теста, любой желающий может протестировать и пользоваться в своё удовольствие. Итак, первая часть нашего ТЗ выполнена (можно аванс и в отпуск? :))
В целом на этом у меня всё! Сам код не выкладываю, так как он в процессе доработки (сделана только первая часть, всё сыро), но, если кому потребуется помощь – с радостью подскажу, помогу, предоставлю версию скрипта для работы.
Следующий этап разработки программы опубликую в ближайшем будущем! Всем программистам, аналитикам и инженерам - привет, будут вопросы или желание посотрудничать – пишите! Всем добра
PS: В следующей статье я опишу Часть 2. И в ближайшее время будет новая статья по нейронным сетям (спойлер: создадим голосового ассистента, который научим узнавать и запоминать новых пользователей с помощью веб-камеры).