
Лабораторна робота №1
Тема:
"Створення
спеціальних додатків SolidWorks.
Розробка користувацького додатку
SolidWorks API. Використання макросів".
Мета: "Засвоєння механізмів SolidWorks API, програмування модулів розширення SolidWorks".
Теоретичні відомості
Система автоматизованого проектування SolidWorks є додатком, спеціально спроектованим для роботи під управлінням операційної системи Windows. Можливості SolidWorks можна значно розширити за допомогою написання доповнень до нього. Для цього використовується так званий інтерфейс програмного доступу (API) . Інтерфейс надає безліч різних функцій доступних в SolidWorks. Інтерфейс складний і заплутаний, проте при правильній розробці доповнення до SolidWorks його можна спростити.
SolidWorks являє собою сервер автоматизації (Automation) і реалізує доступ до своїх ресурсів за допомогою об'єктно-орієнтованого інтерфейсу SolidWorks API, реалізованого у вигляді стандартних об'єктів.
До SolidWorks можна звернутися за допомогою Visual Basic 6.0 Visual Basic for Applications (VBA) , Visual Basic . NET , Visual C # . NET , Visual C + + 6.0 , Visual C + + . NET, або макросів SolidWorks.
Можна створити додаток до SolidWorks, який є незалежним (stand - alone) exe файлом або модулем розширення. У першому випадку додаток виконується поза SolidWorks, в другому випадку – він впроваджується в SolidWorks, в його меню і панелі інструментів, що значно спрощує роботу з додатком. Другий варіант кращий, однак більш складний для реалізації.
Найбільш доцільним є розробка модуля розширення з використанням технології .NET. Хоча вона і вимоглива до ресурсів, у технології .NET є величезна бібліотека класів, яка містить класи, які найчастіше зустрічаються.
Об'єктна модель SolidWorksAPI. SolidWorks має об'єктно-орієнтовану архітектуру, яка у довідці називається об'єктною моделлю. Об'єкти SolidWorks є класами, або інтерфейсами з точки зору програміста. Розглянемо призначення найбільш важливих об'єктів (класів) SolidWorks.
SldWorks – об'єкт найвищого рівня в API – моделі SolidWorks. Це прямий і непрямий доступ до всіх інших об'єктів, представлених в SolidWorks API. Цей об'єкт являє доступ до інтерфейсу, що реалізує основний набір функцій рівня додатків: створити документ, відкрити документ, впорядкувати вікна, змінити активний документ і т.д.
Modeler – надає інтерфейс до управління тимчасовими тілами (temporary bodies), що створюються динамічно під час побудови моделей. Дозволяє створювати тимчасові тіла, обмежені поверхнями, перевіряти взаємний перетин тіл і т.д.
ModelDoc – в SolidWorks існує три основних типи документа: Деталі (Parts), Збірка (Assembly), Креслення (Drawing), реалізованих за допомогою наступних API об'єктів: PartDoc, AssemblyDoc, DrawingDoc. Об'єкт ModelDoc реалізує безліч функцій рівня документа, загальних для перерахованих вище типів документів, таких як: друк, збереження файлу, визначення імені асоційованого компонента і т.д. Таким чином, клас ModelDoc є базовим для класів PartDoc, AssemblyDoc, DrawingDoc .
Об'єкт ModelDoc надає прямий доступ до методів об'єктів PartDoc, AssemblyDoc, DrawingDoc. До основних функцій об'єкта належать: управління конфігураціями, джерелами освітлення, розмірами, операціями з ескізами, вибором елементів, створення елементів, управління станом елемента і т.д.
PartDoc – в основному даний об'єкт реалізує підмножину функцій, що здійснюють роботу з моделлю деталі. Будучи прямим спадкоємцем класу ModelDoc, клас PartDoc перевизначає деякі батьківські методи і реалізує методи рівня документа. До основних функцій, які характерні для PartDoc відносяться: створення твердотілих елементів, отримання розширень, отримання елемента по імені і т.д. За допомогою об'єкта даного типу можна отримати доступ до колекцій об'єктів Feature і Body, які визначають геометрію тривимірної деталі.
AssemblyDoc – як правило даний об'єкт реалізує підмножину функцій, що здійснюють маніпулювання деталями в збірці. Як і клас PartDoc, клас AssemblyDoc є прямим спадкоємцем класу ModelDoc і реалізує батьківські методи рівня документа. До основних функцій, характерним для AssemblyDoc можна віднести: додавання, видалення, редагування деталей в контексті збірки, накладення, видалення, редагування складальних залежностей між компонентами, управління конфігураціями збірки, створення розірваного виду, управління видимістю компонентів. За допомогою об'єкта даного типу можна отримати доступ до колекцій об'єктів Component, які представляють собою реалізацію деталей і підзбірок в контексті збірок.
DrawingDoc – використовується для створення креслень і їх елементів, таких як лінії, дуги, фаски і т.д. Як і два вищеописаних класи, клас DrawingDoc є нащадком класу ModelDoc і, отже, реалізує весь набір функцій рівня документа. За допомогою об'єкта даного типу можна отримати доступ до колекцій елементів креслення.
Взаємозв'язок ModelDoc2, PartDoc, AssemblyDoc і DrawingDoc. Маючи посилання на PartDoc, AsseblyDoc або DrawingDoc можна отримати посилання на об'єкт ModelDoc2. Отримання такого посилання є безпечною операцією. Маючи посилання на ModelDoc2 можна отримати посилання на PartDoc, AssemblyDoc або DrawingDoc. Отримання такого посилання є небезпечною операцією, оскільки об'єкт, що знаходиться за посиланням ModelDoc2 обов'язково повинен бути об'єктом PartDoc, якщо ми хочемо отримати посилання на PartDoc, AssemblyDoc, якщо ми хочемо отримати посилання на AssemblyDoc і DrawingDoc, якщо ми хочемо отримати посилання на DrawingDoc .
Component – об'єкт використовується для здійснення рекурсивного розбору дерева збірки. Інкапсулює в собі об'єкти класу PartDoc або AssemblyDoc для забезпечення вкладеності збірок. Частково реалізує підмножина функцій ModelDoc, проте не є його спадкоємцем. Клас Component реалізований таким чином, що містить покажчик на об'єкт типу ModelDoc, перенаправляючи свої функції відповідного об'єкту. Слід зазначити, що зберігається об'єкт не представляє собою повноцінного об'єкту класу ModelDoc і може бути використаний, тільки якщо завантажений відповідний файл. Даний клас дає доступ до колекцій дочірніх компонентів, будучи внутрішнім ітератором .
Mate – є спадкоємцем класу Feature і визначає сполучення двох компонентів в контексті збірки. За допомогою даного об'єкта можна отримати інформацію про сполученні, включаючи: спряжені компоненти, що сполучаються геометрії компонентів, тип сполучення, вирівнювання, можливість перестановки розмірів, відстань і кут між геометріями компонентів.
Body – об'єкт даного класу зберігає інформацію про поверхні, що його утворюють. Відповідно, з його допомогою можливе виконання операцій над поверхнями, такими як: зшивання поверхонь, заповнення простору між поверхнями і т.д. Даний клас надає доступ до колекцій поверхонь.
Surface – об'єкт даного класу визначає поверхню будь-якої форми. За його допомогою можливе виконання операцій на рівні поверхонь, таких як отримання типу поверхні, визначення площі поверхні і т.д. Даний клас надає доступ до колекції елементарних граней.
Feature – об'єкт для доступу до елементів деталі. Є базовим для цілого ряду класів, які реалізують різні дії над тривимірним тілом, такі як: RefAxis (довідкові осі), ReferenceCurve (довідкова крива), RefPlane (довідкова площину), ChamferFeatureData2 (елемент – фаска), CircularPatterFeatureData (елемент - кругової масив), DraftFeatureData (елемент - ухил) , DomeFeatureData2 (елемент -купол) , ExtrudeFeatureData2 (елемент - видавлювання) , LinearPatterFeatureData2 (елемент - лінійний масив), LoftFeatureData2 (елемент – по-поверхні), MirrorPatternFeatureData (елемент - дзеркальне відображення), RevolveFeatureData2 (елемент - обертання), RibFeatureData2 (елемент - ребро), ScaleFeatureData2 (елемент - масштаб), ShellFeatureData2 (елемент - оболонка), FilletFeatureData2 (елемент - заокруглення) та ін. За допомогою об'єкта даного типу можна отримати доступ до колекцій дочірніх елементів, площин, вершин і т.д. Об'єкт має вбудований ітератор.
Sketch – об'єкт даного типу зазвичай використовується для створення параметричних ескізів в контексті деталей і зборок для створення твердотілих елементів на їх основі. Даний об'єкт також використовується в кресленнях. Об'єкт надає доступ до колекцій елементів ескізу, таким як: точки, лінії, дуги і т.д., надає інформацію про свої геометричних характеристиках і т.д.
Configuration – об'єкт конфігурації дозволяє управляти різними станами деталей і зборок. Конфігурація може бути як на рівні параметри елемента, так і на рівні структури виробу. Таким чином, вибираючи активну конфігурацію , можна міняти властивості вибраного елемента.
Parameter – об'єкт даного класу дозволяє вважати або встановити значення параметрів деталі. Як зазначалося вище, SolidWorks володіє обмеженими засобами параметризації деталей і зборок і не допускає, зокрема, використовувати глобальні параметри, складні математичні залежності і т.д.
Робота з макросами. SolidWorks створення макросу.
Можна створити новий макрос за допомогою панелі інструментів "Макрос" або за допомогою елемента меню. Створення нового макросу відрізняється від запису макросу. При створенні нового макросу він програмується Вами безпосередньо в програмі сканування макросів. При записи макросу він створюється всередині програми SolidWorks.
Для створення нового макросу:
1. Натисніть кнопку Створити макрос на панелі інструментів "Макрос" або виберіть Інструменти->Макрос->Створити.
2. З'явиться діалогове вікно Створити макрос.
3. Введіть Ім'я файлу.
4. Натисніть кнопку Зберегти.
Відкриється програма для редагування макросів, в якому можна створити новий макрос.
Редагування макросу. Можна редагувати або налагоджувати записаний макрос.
Для редагування макросу:
1. Натисніть кнопку Редагувати макрос на панелі інструментів "Макрос" або натисніть Інструменти->Макрос->Змінити. Якщо раніше редагування макросів вже виконувалося, можна вибрати макрос безпосередньо в меню, натиснувши Інструменти->Макрос. У цьому меню є список з останніх дев'яти редагувати макросів.
2. У діалоговому вікні виберіть файл макросу (. Swp) і натисніть Відкрити. Також можна відредагувати файли. Swb . При запуску або редагуванні файлу. Swb він автоматично буде перетворений у файл. Swp.
3 . Відредагуйте макрос.
Стратегія розробки додатків для SolidWorksSolidWorks API постійно поліпшується і змінюється. Іноді складно знайти потрібний клас або метод для вирішення завдання. Якщо використовувати макроси, то можна зробити набагато простіше. Увімкніть запис макросу, виконайте дію, яке ви хочете зробити і перегляньте код макросу, який згенерував SolidWorks. Тепер можна подивитися опис методів і класів у довідці. Це рішення працює не завжди, але допомагає в більшості випадків. Використання макросів – зручний спосіб перевірити ваше програмне рішення, так як не вимагає ретельного дизайну програми і завантаження великовагових середовищ розробки, макроси - інтегровані в сам SolidWorks.
Створення програми для автоматизації SolidWorks в C #
1. Створити проект
File -> New -> Project -> Visual C # Projects -> Class Library або Windows Application або Console application (залежно від архітектури додатку). Вказати ім'я проекту і розташування файлів проекту на диску.
2. Додати посилання на необхідні бібліотеки
Project-> Add Reference -> COM. У списку вибрати:
SolidWorks 2013 Constant type library (файл swconst.tlb)
SolidWorks 2013 exposed type libraries for addin use (файл swpublished.tlb) якщо ви припускаєте писати модуль розширення.
SldWorks 2013 type library (sldworks.tlb).
Звернення до об'єктів, об'єктної моделі SolidWorks
Для того, щоб звернутися до властивості або викликати метод SolidWorks API необхідно отримати посилання на об'єкт. Наприклад, щоб викликати метод Face2:: GetArea ми повинні мати посилання на об'єкт класу Face2.
Існує кілька способів для доступу до об'єктів, що надаються SolidWorks API. Наприклад, отримати посилання на об'єкт класу Face2 можна таким чином:
Отримати посилання на об'єкт класу Body2, використовуючи PartDoc:: GetBodies2 або PartDoc:: EnumBodies3 і перебрати поверхні на твердому тілі використовуючи методи Body2:: GetFirstFace і Face2:: GetNextFace.
Отримати посилання зі списку обраних примітивів, використовуючи SelectionMgr:: GetSelectedObject5 або SelectionMgr:: GetSelectedObject6.
Отримати цим посиланням: на об'єкт по його імені, використовуючи PartDoc:: GetEntityByName.
Відкриття та збереження файлів SolidWorks
Для відкриття файлів SolidWorks використовується метод SldWorks:: OpenDoc6 (). Файли можуть бути наступних типів: деталь, збірка і креслення. Тип файлу, що відкривається визначається перерахуванням
swDocumentTypes_e.
Приклад відкривання файлу з деталлю:
int errors=0;
int warnings=0;
solid.OpenDoc6(fileName,(int)SwConst.swDocumentTypes_e.swDocPART,(int)SwConst.swOpenDocOptions_e.swOpenDocOptions_Silent,"",ref errors, ref warnings);
Для збереження файлів SolidWorks використовується метод ModelDoc2:: SaveAs4 ().
Приклад збереження файлу
modelDoc.SaveAs4(fileName,(int)SwConst.swSaveAsVersion_e.swSaveAsCurrent
Version,(int)SwConst.swSaveAsOptions_e.swSaveAsOptions_Silent,ref errors,ref warnings);
Звернення до розмірів тривимірної моделі SolidWorks з програми
Якщо ви проставляєте розміри на ескізі або виконуєте операції видавлювання, вирізання, повороту ескізу SolidWorks дає розмірами імена за замовчуванням.
Для того, щоб переглянути розміри деталі необхідно в FeatureManager натиснути правою кнопкою на папці «Примітки» і вибрати прапорець Відобразити розміри елемента.
Для того, щоб переглянути або змінити ім'я розміру, необхідно клацнути на ньому правою кнопкою миші, після чого з'явитися вікно «Властивості розміру»
Для програмного зміни значення розміру використовується метод ModelDoc2:: Parameter (). Цей метод має один аргумент – повне ім'я розміру. Цей метод повертає для розміру об'єкт Dimension.
Для того, щоб дізнатися значення розміру в користувальницьких одиницях використовуються властивість Dimension:: Value і методи Dimension:: GetValue2 (), Dimension:: GetValue3 ().
Для того, щоб змінити значення розміру в користувальницьких одиницях використовуються властивість Dimension:: Value і методи Dimension:: SetValue2 (), Dimension:: SetValue3 ().
Для роботи розмірами в системних координатах використовуються властивість Dimension:: SystemValue і методи Dimension:: GetSystemValue2 (), Dimension:: GetSystemValue3 (), Dimension:: SetSystemValue2 (), Dimension:: SetSystemValue3 ().
Методи для роботи з розмірами підтримують роботу з конфігураціями, а властивості немає.
Для того , щоб зміни розмірів набули чинності , необхідно використовувати методи ModelDoc2:: ForceRebuild3 або ModelDoc2:: EditRebuild3.
Отримання списку всіх розмірів деталі
Для того, щоб програмно дізнатися імена всіх елементів деталі необхідно виконати обхід всіх елементів деталі. Ви можете переглянути приклади в довідці по SolidWorks API, а можна скористатися прикладом DimensionTraverser.cs.
Клас DimensionTraverser призначений для обходу всіх розмірів деталі. Для використання класу необхідно:
1. Створити свій клас який реалізує інтерфейс DimensionTraverserListener
public interface DimensionTraverserListener
{
void OnDimension(SldWorks.IDimension dimension);
}
2. Визначити у своєму класі метод OnDimension()
public void OnDimension(SldWorks.IDimension dimension)
{
// сюди помістити код для обробки розміру, який передається
//в якості аргумента dimension
}
3. Підлючити свій клас до DimensionTraverser за допомогою наступного коду:
SldWorks.IModelDoc2 modelDoc = (SldWorks.IModelDoc2)_solid.ActiveDoc;
DimensionTraverser traverser = new DimensionTraverser(modelDoc);
traverser.AddListener(this);
traverser.Traverse();
traverser.RemoveListener(this);
У цьому коді this вказує на те, що клас, в якому визначений метод, що містить цей код, реалізує інтерфейс DimensionTraverserListener. Якщо цей код знаходиться поза класом, що реалізує інтерфейс DimensionTraverserListener, необхідно замість this вказати ім'я об'єкта класу реалізовує інтерфейс DimensionTraverserListener.