Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный_практикум.doc
Скачиваний:
74
Добавлен:
15.11.2019
Размер:
45.35 Mб
Скачать

2. Создание приложения SwCSharpAddin

Добавление при сборке в среде разработки регистрируется в реестре операционной системы и изменяет некоторые ключи, поэтому для работы с добавлением необходимы права Администратора ОС. Запускаем Visual Studio 2010 под учётной записью с административными параметрами, выбирая пункт: Запуск от имени администратора (правая кнопка мыши по ярлыку). Либо изменив параметр Совместимость -> Уровень прав: (поставить галочку) Выполнять эту программу от имени администратора в свойствах ярлыка или самого приложения Visual Studio devenv.exe):

Рис. 2. 1. Расположение исполняемого файла devenv.exe

Откроется Начальная страница:

Для начала, надо создать проект, для этого выполним последовательно: Файл -> Создать -> Проект… (также можно просто нажать сочетание клавиш Ctrl+Shift+N или пункт «Создать проект…» на Начальной странице):

Рис. 2. 2. Создание нового проекта

Выберем слева в пункте Установленные шаблоны язык Visual C#, далее найдём в списке SwCSharpAddin. Также здесь можно выбрать какой использовать «фреймворк» (набора компонентов для написания программ). В нашем случае выберем .NET Framework 4.

Рис. 2. 3. Окно создания нового проекта

В поле Имя вводим LWP07SW02 это название программы (выбрано по названию лабораторного практикума, номеру и названию работы). В поле Расположение указана конечная директория, где будет находиться весь проект. Выберем расположение удобное для быстрого поиска. В поле Имя решения вводится либо название программы «по умолчанию» из поля Имя автоматически, либо можно ввести своё собственное. Под этим именем будет создана конечная папка проекта (если Имя и Имя решения разные).

Рис. 2. 4. Вводим данные нового проекта приложений SwCSharpAddin

После нажатия клавиши ОК мы увидим сформированный проект и исходный код приложения SwCSharpAddin (не пустого изначально).

Рис. 2. 5. Обозреватель решений: состав проекта приложения SwCSharpAddin сформированного средой разработки

Теперь, можно откомпилировать созданную программу, нажав клавишу F5 ( Отладка -> Начать отладку или нажав на иконку . Тем самым мы запускаем приложение в режиме отладки (и производим компиляцию debug-версии программы) (Debug выбрано изначально). После компиляции автоматически откроется окно Solidworks. Проверим подключение нашего добавления. Для этого откроем окно Добавления...:

Рис. 2. 6. Запуск приложения SwCSharpAddin по конфигурации Debug: проверка подключение добавления LWP07SW02

Если добавление было успешно подключено (появилось в списке Другие добавления и стоят обе галочки слева и справа от имени добавления), то можно проверить его работу. По умолчанию, поставляемое добавление уже достаточно «навороченное» и представляет из себя полноценный пример демонстрирующий основные возможности добавлений в принципе. Потому, даже не внося изменений в исходный код, добавление обладает рядом интересных возможностей.

Создаём новую деталь (Файл -> Новый... или сочетание клавиш Ctrl+N):

Рис. 2. 7. Создание новой детали для проверки работы добавления

Теперь подключим его функционал. Вначале включим панель инструментов. Для этого нажмём ПКМ на свободном месте рядом с названием Деталь1:

Найдём в открывшемся списке C# Addin и нажмём:

И подключим широкую панель инструментов (Элементы, Эскиз, Анализировать и прочие). ПКМ по области надписей под широкой панелью инструментов:

Нажмём на C# Addin и сразу же перейдём на эту панель, в результате увидим следующее:

Нажмём Create cube, а затем на Show PMP и Flyout Tooltip:

Рис. 2. 8. Запуск приложения SwCSharpAddin по конфигурации Debug: демонстрация всех возможностей

Разбирать весь код добавления не имеет смысла. Код достаточно прост для понимания и внесения изменений. Весь проект изначально состоит из четырёх основных файлов кода *.cs, главных из которых два.

1. UserPMPage.cs отвечает за панель пользовательских элементов управления Solidworks (на рис. 2. 8 слева, панель Sample PMP). Этот файл отвечает за оформление панели (функция AddControls() реализует инициализацию конструктора). Разумеется, таких панелей может быть много. Событийные инструменты (функции для работы с пользовательскими элементами и событиями от них) такой панели описаны в PMPHandler.cs. Для каждой панели может быть своя событийная модель и свой обработчик событий.

2. SwAddin.cs отвечает за построение всего добавления. По сути является главным файлов с которым придётся работать большую часть времени. Содержит инициализацию всего меню и всех функций, которое это меню реализует. И файл который является фундаментом для всего добавления это: EventHandling.cs. Реализует событийную модель (обработку событий) для всего добавления.

В качестве примера работы с добавлением и кодом, сделаем клон панели Sample PMP (Property Manager Page). Для начала нам нужна копия файла UserPMPage.cs. Нажмём ПКМ в обозревателе решений на этот файл, далее Копировать (либо просто выделим его и нажмём сочетание клавиш Crtl+C). Далее выделим название нашего проекта, зелёное ( ) -> ПКМ и Вставить (Ctrl+V). Переименуем (ЛКМ по файлу в обозревателе и нажмём F2) файл Копия UserPMPage.cs в UserPMPage2.cs. Зайдём в файл. Найдём строчку:

public class UserPMPage

Заменим на:

public class UserPMPage2

Найдём:

public UserPMPage(SwAddin addin)

Заменим:

public UserPMPage2(SwAddin addin)

Открываем файл SwAddin.cs, находим:

Description = "LWP07SW02 description",

Title = "LWP07SW02",

Заменяем на:

Description = "Лабораторная работа № 7, приложение-добавление для SolidWorks 2012: LWP07SW02.dll",

Title = "Использование SwCSharpAddin (C#)",

Находим в этом же файле:

#region Property Manager Variables

UserPMPage ppage = null;

#endregion

Заменяем на:

#region Property Manager Variables

UserPMPage ppage = null;

// Клонируем панель элементов PMP

UserPMPage2 ppage2 = null;

#endregion

Находим:

#region Setup Sample Property Manager

AddPMP();

#endregion

Заменяем на:

#region Setup Sample Property Manager

AddPMP();

// Клонируем панель элементов PMP

AddPMP2();

#endregion

Находим:

int cmdIndex0, cmdIndex1;

string Title = "C# Addin", ToolTip = "C# Addin";

Заменяем на:

int cmdIndex0, cmdIndex1, cmdIndex2;

string Title = "Использование SwCSharpAddin (C#)", ToolTip = "LWP07SW02.dll: все возможности";

Находим:

int[] knownIDs = new int[2] { mainItemID1, mainItemID2 };

Заменяем на:

int[] knownIDs = new int[3] { mainItemID1, mainItemID2, mainItemID3 };

Находим:

int menuToolbarOption = (int)(swCommandItemType_e.swMenuItem | swCommandItemType_e.swToolbarItem);

cmdIndex0 = cmdGroup.AddCommandItem2("CreateCube", -1, "Create a cube", "Create cube", 0, "CreateCube", "", mainItemID1, menuToolbarOption);

cmdIndex1 = cmdGroup.AddCommandItem2("Show PMP", -1, "Display sample property manager", "Show PMP", 2, "ShowPMP", "EnablePMP", mainItemID2, menuToolbarOption);

Заменяем на:

int menuToolbarOption = (int)(swCommandItemType_e.swMenuItem | swCommandItemType_e.swToolbarItem);

cmdIndex0 = cmdGroup.AddCommandItem2("CreateCube", -1, "Create a cube", "Create cube", 0, "CreateCube", "", mainItemID1, menuToolbarOption);

cmdIndex1 = cmdGroup.AddCommandItem2("Show PMP", -1, "Display sample property manager", "Show PMP", 1, "ShowPMP", "EnablePMP", mainItemID2, menuToolbarOption);

// Клонируем панель элементов PMP

cmdIndex2 = cmdGroup.AddCommandItem2("Показать ещё одну PMP", -1, "Открыть ещё одну страницу с элементами", "Показать ещё одну PMP", 2, "ShowPMP2", "EnablePMP2", mainItemID3, menuToolbarOption);

Находим:

int[] cmdIDs = new int[3];

int[] TextType = new int[3];

cmdIDs[0] = cmdGroup.get_CommandID(cmdIndex0);

TextType[0] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal;

cmdIDs[1] = cmdGroup.get_CommandID(cmdIndex1);

TextType[1] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal;

cmdIDs[2] = cmdGroup.ToolbarId;

TextType[2] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal | (int)swCommandTabButtonFlyoutStyle_e.swCommandTabButton_ActionFlyout;

bResult = cmdBox.AddCommands(cmdIDs, TextType);

Заменяем на:

int[] cmdIDs = new int[4];

int[] TextType = new int[4];

cmdIDs[0] = cmdGroup.get_CommandID(cmdIndex0);

TextType[0] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal;

cmdIDs[1] = cmdGroup.get_CommandID(cmdIndex1);

TextType[1] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal;

cmdIDs[2] = cmdGroup.ToolbarId;

TextType[2] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal | (int)swCommandTabButtonFlyoutStyle_e.swCommandTabButton_ActionFlyout;

cmdIDs[3] = cmdGroup.get_CommandID(cmdIndex2);

TextType[3] = (int)swCommandTabButtonTextDisplay_e.swCommandTabButton_TextHorizontal;

bResult = cmdBox.AddCommands(cmdIDs, TextType);

Находим:

public Boolean RemovePMP()

{

ppage = null;

return true;

}

Добавляем после:

// Клонируем панель элементов PMP

public Boolean AddPMP2()

{

ppage2 = new UserPMPage2(this);

return true;

}

public Boolean RemovePMP2()

{

ppage2 = null;

return true;

}

Находим:

public int EnablePMP()

{

if (iSwApp.ActiveDoc != null)

return 1;

else

return 0;

}

Добавляем после:

// Клонируем панель элементов PMP

public void ShowPMP2()

{

if (ppage2 != null)

ppage2.Show();

}

public int EnablePMP2()

{

if (iSwApp.ActiveDoc != null)

return 1;

else

return 0;

}

Всё. Компилируем приложение (Debug) и запускаем. Результат показан на рисунке ниже:

Рис. 2. 9. Результат работы добавления с клонированной страницей PMP