- •1. Вводная часть
- •2. Знакомство со средой разработки на примере создания простого консольного приложения
- •3. Модификация консольного приложения
- •4. Публикация
- •5. О приложении к Лабораторной работе № 1
- •Лабораторная работа № 2: Создание простого приложения Windows Forms
- •Создание простого приложения Windows Forms
- •Модификация приложения Windows Forms
- •Завершающая часть
- •2. Создание простого приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Завершающая часть
- •5. О приложении к Лабораторной работе № 2
- •3. Лабораторная работа № 3: Windows Forms и использование некоторых элементов управления Лабораторная работа № 3: Windows Forms и использование некоторых элементов управления
- •Вводная часть
- •О приложении к Лабораторной работе № 3
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: элемент управления MenuStrip
- •5. Модификация приложения Windows Forms: элемент управления Button
- •6. Модификация приложения Windows Forms: элемент управления ToolTip
- •7. Модификация приложения Windows Forms: элемент управления ComboBox
- •8. Модификация приложения Windows Forms: элемент управления WebBrowser
- •9. Модификация приложения Windows Forms: добавляем исходный код
- •10. Завершающая часть
- •11. О приложение к Лабораторной работе № 3
- •4. Лабораторная работа № 4: Windows Forms — работа с формами Лабораторная работа № 4: Windows Forms — работа с формами
- •Вводная часть
- •О приложении к Лабораторной работе № 4
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: добавление новой формы
- •5. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через прямой доступ к элементу формы
- •6. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через передачу метода в конструктор формы
- •7. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через класс делегата
- •8. Модификация приложения Windows Forms: динамическое связывание параметров двух форм и передача параметра через свойства
- •9. Завершающая часть
- •10. О приложении к Лабораторной работе № 4
- •5. Лабораторная работа № 5: Windows Forms — элементы управления Лабораторная работа № 5: Windows Forms — элементы управления
- •Вводная часть
- •О приложении к Лабораторной работе № 5
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms
- •4. Модификация приложения Windows Forms: динамическое добавление и уничтожение элемента управления
- •5. Модификация приложения Windows Forms: стандартные диалоговые окна
- •6. Модификация приложения Windows Forms: открытие файла, сохранение файла и работа с текстом
- •7. Модификация приложения Windows Forms: прочее
- •8. Завершающая часть
- •9. О приложении к Лабораторной работе № 5
- •Лабораторная работа № 6: SolidWorks — работа с SolidWorks
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: eDrawings 2012
- •4. Модификация приложения Windows Forms: организация работы с SolidWorks через приложение
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 6
- •Лабораторная работа № 7: SolidWorks — использование SwCSharpAddin, работа с макросом и шаблоном детали
- •2. Создание приложения SwCSharpAddin
- •3. Модификация приложения SwCSharpAddin: макрос отрисовки болта
- •4. Модификация приложения SwCSharpAddin: построение через шаблон детали
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 7
- •8. Лабораторная работа № 8: Создание простого приложения Windows Foundation Presentation Лабораторная работа № 8: Создание простого приложения Windows Foundation Presentation
- •Вводная часть
- •О приложении к Лабораторной работе № 8
- •1. Вводная часть
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation
- •4. Модификация приложения Windows Foundation Presentation: добавление нового элемента из библиотеки компонентов wpf
- •5. Модификация приложения Windows Forms: расширение функциональности приложения и работа с оформление
- •6. Модификация приложения Windows Foundation Presentation: различные возможности wpf
- •7. Модификация приложения Windows Foundation Presentation: немного о стилях и шаблонах
- •8. Завершающая часть
- •9. О приложении к Лабораторной работе № 8
- •Лабораторная работа № 9: Создание приложения-презентации Windows Foundation Presentation
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation
- •4. Модификация приложения Windows Foundation Presentation: работа с решением в Expression Blend
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 9
- •Лабораторная работа № 10: Работа с базами данных — xml и ole
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: odbc
- •4. Модификация приложения Windows Forms: ole
- •5. Модификация приложения Windows Forms: xml
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 10
- •Лабораторная работа № 11: Динамическая связь приложений через библиотеку классов
- •2. Удалённый объект: создание библиотеки классов удалённого объекта
- •3. Клиент: создание приложения Windows Forms
- •4. Сервер: создание консольного приложения
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 11
- •Лабораторная работа № 12: Автоматизация Microsoft Office Word
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: создание и заполнение нового документа Microsoft Word
- •4. Модификация приложения Windows Forms: работа с шаблонами
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 12
- •Лабораторная работа № 13: Автоматизация Microsoft Office Excel
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: создание и заполнение нового документа Microsoft Excel
- •4. Модификация приложения Windows Forms: чтение данных с документа Microsoft Excel
- •5. Модификация приложения Windows Forms: прочие возможности Microsoft Excel
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 13
- •Лабораторная работа № 14: Простой растровый редактор
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: подготовка интерфейса редактора
- •4. Модификация приложения Windows Forms: функциональность растрового редактора
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 14
- •15. Лабораторная работа № 15: Векторный редактор изображений Лабораторная работа № 15: Векторный редактор изображений
- •Вводная часть
- •О приложении к Лабораторной работе № 15
- •1. Вводная часть
- •2. Создание решения, приложения Windows Forms и библиотеки классов
- •3. Модификация приложения Windows Forms: подготовка интерфейса редактора и добавление файлов ресурсов
- •4. О будущей функциональности векторного редактора изображений
- •5. Модификация приложения Windows Forms: подготовка библиотеки классов
- •6. Модификация приложения Windows Forms: функциональность векторного редактора
- •7. Завершающая часть
- •8. О приложении к Лабораторной работе № 15
- •Лабораторная работа № 16: Windows Communication Foundation
- •2. Создание приложения wcf:
- •3. Модификация приложения wcf: приложение-клиент для wcf-службы
- •4. Создание приложения Windows Forms: сервер чата на wcf
- •5. Создание приложения Windows Forms: клиент чата на wcf
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 16
- •Лабораторная работа № 17: Знакомство с Silverlight
- •2. Создание приложения Silverlight:
- •3. Модификация приложения Silverlight: первые шаги и полноэкранный режим
- •4. Модификация приложения Silverlight: простой проигрыватель mp3-файлов
- •5. Модификация приложения Silverlight: работа с анимацией
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 17
- •Лабораторная работа № 18: Знакомство с asp.Net
- •2. Создание веб-приложения asp.Net
- •3. Модификация веб-приложения asp.Net: реализация различной функциональности
- •4. Модификация веб-приложения asp.Net: ajax
- •5. Завершающая часть
- •6. О приложении к Лабораторной работе № 18
- •Вводная часть
- •О приложении к Лабораторной работе № 19
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: подготовка интерфейса и добавление TabControl
- •4. Модификация приложения Windows Forms: вкладка «Просто фон!»
- •5. Модификация приложения Windows Forms: вкладка «Объекты и градиент»
- •6. Модификация приложения Windows Forms: вкладка «Мой монитор сломался!»
- •7. Модификация приложения Windows Forms: вкладка «Векторные часы»
- •8. Модификация приложения Windows Forms: вкладка «Огонь!!!»
- •9. Модификация приложения Windows Forms: вкладка «Дождик»
- •10. Завершающая часть
- •11. О приложении к Лабораторной работе № 19
- •Лабораторная работа № 20: Inventor — работа с Inventor
- •Вводная часть
- •О приложении к Лабораторной работе № 20
- •1. Вводная часть
- •2. Создание приложения Windows Forms
- •3. Модификация приложения Windows Forms: запуск и завершение приложения Inventor
- •4. Модификация приложения Windows Forms: создание новых документов
- •5. Модификация приложения Windows Forms: доступ к элементам документов Inventor
- •6. Завершающая часть
- •7. О приложении к Лабораторной работе № 20
- •Лабораторная работа № 21: Знакомство с языком f# (Эф-шарп) на примере простого приложения для командной строки
- •Вводная часть
- •О приложении к Лабораторной работе № 21
- •1. Вводная часть
- •2. Основные положения при работе с f#
- •3. Создание приложения «Учебник по f#»
- •4. Создание консольного приложения
- •5. О приложении к Лабораторной работе № 21
- •Лабораторная работа № 22: Различные примеры на f#
- •2. Создание приложения «Приложение f#»
- •3. Модификация приложения f#: match
- •4. Модификация приложения f#: создание форм и рисование объектов на форме
- •5. Модификация приложения f#: работа с базой данных Microsoft Access
- •6. О приложении к Лабораторной работе № 22
- •23. Дополнительная лабораторная работа № 1
- •24. Дополнительная лабораторная работа № 2
- •25. Дополнительная лабораторная работа № 3
- •Вводная часть
- •1. Вводная часть
- •2. Создание приложения Windows Foundation Presentation
- •3. Модификация приложения Windows Foundation Presentation: добавление ресурсов
- •4. Модификация приложения Windows Foundation Presentation: добавление исходного кода
- •5. Модификация приложения Windows Foundation Presentation: оформление элемента ListBox
- •6. Завершающая часть
- •7. О приложении к данной работе
4. Модификация приложения SwCSharpAddin: построение через шаблон детали
А теперь немного реалий. Да, наше добавление справляется со своей задачей. Строит болты ( ), но вот незадача. Редактировать построенное макрос уже не может. Естественно, что записать в макрос можно любые действия (почти любые), и даже действия по редактированию, но целесообразность подобного можно поставить под сомнение хотя бы потому, что это уже лишняя работа, надстройка над надстройкой. Костыль. Один макрос чтобы нарисовать с «нуля», второй чтобы изменить размер у нарисованного. А если, допустим, у нас не простенький болт, а модель какого-нибудь аппарата высокого давления с парочкой тысяч деталей или ракеты «Протон-М» с миллионом?
Хорошо, можно скажем сделать разных деталей с разными размерами на все случаи жизни. Пару сотен тысяч файлов с разными размерами. Или создать грамотный макрос для изменения размеров, но здесь опять возникает вопрос количества деталей и затрат на редактирование двух макросов в случае изменения детали. А также постоянный контроль кода на ошибки. И очень большие затраты по времени на переделку в случае перехода команды разработки на новую версию SolidWorks. API с каждым годом претерпевает существенные изменения и многое, что было написано для старых версий SolidWorks уже не запускается на новых, то есть требуется вмешательство и устранение проблем совместимости.
Вывод напрашивается сам. Эффективность макросов резко падает в тех случаях, когда деталей в модели становится очень много. Здесь на передний план выходит даже не сама запись и объём кода, а тот объём работы что потребуется затратить на привидение макроса к редактируемому виду (расстановка переменных в ключевых местах, чистка от лишних записей). Да и к тому же, код сложнее читать. А когда перед тобой пара тысяч строк...
Профессиональные разработчики не используют макросы для построения с «нуля». Или даже полного редактирования. Наиболее успешным вариантом является совмещение макросов и шаблонов деталей. Использование шаблонов в разы сокращает тот объём работ, который нужно проделать при работе с достаточно серьёзной по количеству деталей моделью. К тому же моментально снимается проблема редактирования только что построенной модели. В качестве шаблона можно подгрузить модель с нормальными размерами и поменять любой непонравившийся размер той же самой программой. Размер кода такой программы фактически составляет десятую или сотую часть от аналогичного кода «записанного» макроса. В кода, где главным является шаблон, редактируются значения размеров в этом шаблоне. Эти размеры можно как получать из модели, так и отсылать в модель. Сли, например встанет вопрос об изменении шаблона, достаточно отредактировать сам шаблон (не забывая о вездесущих привязках и уравнениях для размеров) и внести новые размеры в код.
Допустим, время на создание модели для макроса и для шаблона одинаково. Тогда время на расстановку переменных в макрос нужно в разы больше, чем время на создание кода по изменению ключевых размеров модели. Также для макроса требуется большое количество лишних вычислений, которые в шаблоне решаются через привязку.
Почему нельзя использовать макрос и расстановку размеров одновременно? Разумеется, можно. Можно кодом менять размеры модели , построенной через макрос, но, у данного метода возникают те же самые проблемы: низкая визуальная информативность кода по сравнению с шаблоном, а также присутствует необходимость расстановки привязок. При этом в разы увеличивается время на контроль и отлов ошибок кода макроса...
Теперь, попытаемся сделать вот что. Допустим нам нужно, чтобы наше приложение запускалось отдельно, но при необходимости оно могло открывать SolidWorks и что-то делать (например, строить элемент по размерам из приложения). Такой способ работы противоположен концепции использования макросов после запуска SolidWorks и гораздо медленнее (необходимость запускать SolidWorks пусть даже и в фоновом режиме). Однако бывают ситуации, когда такой подход необходим.
Итак. Пускай теперь у нас есть шаблон модели шестигранного болта с резьбой с расставленными привязками и сформированными зависимостями размеров друг от друга. В шаблоне выделено три ключевых размера. Назовём его Bolt_Default_Template.sldprt. Шаблон выглядит так:
Рис. 4. 1. Заготовка шаблона для добавления SwCSharpAddin
Добавим ещё одну форму. Нажмём ПКМ на названии проекта в обозревателе решений, далее в раскрывающемся списке Добавить -> Создать элемент... (Ctrl+Shift+A). Выберем в открывшемся окне Форма Windows Forms. В поле Имя внизу окна вписываем LWP07Temp.cs, далее жмём ОК.
Задаём следующие параметры формы на панели Свойства:
Text: |
Использование SwCSharpAddin (C#) :: Ввод размеров болта для шаблона |
Size: |
600; 300 |
FormBorderStyle: |
FixedDialog |
MaximizeBox: |
False |
Рис. 4. 2. Модифицированная форма LWP07Temp
Добавим на нашу форму ToolTip ( ).
Параметры добавленного элемента всплывающей подсказки таковы:
(Name): |
Hint |
Немного поясним, что будет делать наша форма для работы с шаблоном. На форме будет присутствовать две дополнительные кнопки. Одна кнопка будет выбирать шаблон на диск, вторая кнопка будет выбирать путь и имя, по которому будет сохранён болт на основе изменённого по размерам шаблона. В остальном, форма также будет обеспечивать ввод трёх размеров: высота болта до шляпки, радиус стержня и шаг спирали (между витками).
Для начала размести на форме два диалога: FileOpenDialog и SaveFileDialog с параметрами:
OpenFileDialog:
(Name): |
OFD_Template |
FileName: |
Bolt_Default_Template.sldprt |
SaveFileDialog:
(Name): |
SFD_Template |
FileName: |
Bolt_Final.sldprt |
Сверху под заголовком размести две кнопки Button и две TextBox:
Сверху вниз, слева направо идёт:
Button:
(Name): |
B_Template |
Text: |
Выбор файла шаблона |
TextBox:
(Name): |
TB_Template |
ReadOnly: |
True |
Button:
(Name): |
B_Final |
Text: |
Выбор файла для сохранения |
TextBox:
(Name): |
TB_Final |
ReadOnly: |
True |
Снизу разместим три TextBox и кнопку:
TextBox:
(Name): |
TB_H |
ToolTip на Hint: |
Высота болта |
TextBox:
(Name): |
TB_R |
ToolTip на Hint: |
Радиус стержня |
TextBox:
(Name): |
TB_C |
ToolTip на Hint: |
Шаг спирали |
Button:
(Name): |
B_OK |
Text: |
Размер выбран |
Открываем код главного файла формы (LWP07Temp.cs). Выбираем форму в обозревателе решений, далее правая кнопка мыши и во всплывающем меню Перейти к коду. Найдём:
public partial class LWP07Temp : Form
{
Добавим после:
public string P_Template, P_Final; // Строковый переменные пути к шаблону и путь куда сохранить готовую деталь
public double H, R, P; // Высота, радиус и шаг
private bool B1, B2; // Логические переменные для организации работы с диалогами
Найдём:
public LWP07Temp()
{
InitializeComponent();
Добавим после:
// Инициализируем переменные при старте формы
P_Template = "D:\\Bolt_Default_Template.sldprt";
P_Final = "D:\\Bolt_Final.sldprt";
B1 = false;
B2 = false;
TB_Template.Text = P_Template;
TB_Final.Text = P_Final;
TB_H.Text = "100";
TB_R.Text = "10";
TB_P.Text = "3";
Событие Click кнопки B_Template:
private void B_Template_Click(object sender, EventArgs e)
{
B1 = true; // Пользователь открыл диалог выбора файла
OFD_Template.ShowDialog();
TB_Template.Text = OFD_Template.FileName; // Отправляем путь в TextBox
P_Template = TB_Template.Text; // Значение TextBox присваиваем переменной
}
Событие Click кнопки B_Final:
private void B_Final_Click(object sender, EventArgs e)
{
B2 = true;
SFD_Final.ShowDialog();
TB_Final.Text = SFD_Final.FileName;
P_Final = TB_Final.Text;
}
Событие Click кнопки B_OK:
private void B_OK_Click(object sender, EventArgs e)
{
if (B1 == false)
{
P_Template = "D:\\Bolt_Default_Template.sldprt";
}
else { P_Template = OFD_Template.FileName; } // Если диалог выбора файла был открыт, сохраняем пользовательский выбор в переменную
if (B2 == false)
{
P_Final = "D:\\Bolt_Final.sldprt";
}
else { P_Final = SFD_Final.FileName; }
double.TryParse(TB_H.Text, out H);
double.TryParse(TB_R.Text, out R);
double.TryParse(TB_P.Text, out P);
if (H > 0 && R > 0 && P > 0)
Close();
else
{
MessageBox.Show("Ошибка ввода размеров: нужно ввести все неотрицательные числа в поля формы.\n\nРазмеры по умолчанию:\nH: 100 мм.\nR: 10 мм.\nP: 3 мм.", "Использование SwCSharpAddin (C#) :: Ввод размеров болта для шаблона");
}
}
Теперь изменим код функции UsingTemp() файла SwAddin.cs:
public void UsingTemp()
{
String Path_Template, Path_Final;
Double FormH, FormR, FormP;
Double NewH, NewR, NewP;
// Загружаем форму LWP07Temp
LWP07Temp Temp = new LWP07Temp();
Temp.Text = "Использование SwCSharpAddin (C#) :: Ввод размеров болта для шаблона";
Temp.ShowDialog();
Path_Template = Temp.P_Template;
Path_Final = Temp.P_Final;
FormH = Temp.H / 1000.0;
FormR = Temp.R * 2 / 1000.0;
FormP = Temp.P / 1000.0;
Temp.Dispose();
IModelDoc2 swDoc = (IModelDoc2)iSwApp.OpenDoc6(Path_Template, (int)swDocumentTypes_e.swDocPART, 0, "", 0, 0); // Открываем шаблон
bool boolstatus = false;
swDoc = (IModelDoc2)iSwApp.ActivateDoc2(Path_Template, false, 0); // Делаем шаблон активным
Dimension myDimension = null; // Объявляем переменную для размеров
myDimension = ((Dimension)(swDoc.Parameter("D1@Бобышка-Вытянуть1"))); // Высота болта
myDimension.SystemValue = FormH; // Присваиваем размеру значение с формы
myDimension = ((Dimension)(swDoc.Parameter("D1@Эскиз1"))); // Радиус стержня
myDimension.SystemValue = FormR;
myDimension = ((Dimension)(swDoc.Parameter("D4@Спираль1"))); // Шаг спирали
myDimension.SystemValue = FormP;
swDoc.SaveAs2(Path_Final, 0, false, false); // Сохраняем новую модель как новый файл, шаблон при это закрывается
boolstatus = swDoc.EditRebuild3(); // Перестраиваем вид модели (обновляем по размерам)
swDoc = (IModelDoc2)iSwApp.ActivateDoc2(Path_Final, false, 0);
swDoc.ClearSelection2(true);
// Получаем новые размеры непосредственно из детали
myDimension = ((Dimension)(swDoc.Parameter("D1@Бобышка-Вытянуть1"))); // Высота болта
NewH = myDimension.SystemValue;
myDimension = ((Dimension)(swDoc.Parameter("D1@Эскиз1"))); // Радиус стержня
NewR = myDimension.SystemValue;
myDimension = ((Dimension)(swDoc.Parameter("D4@Спираль1"))); // Шаг спирали
NewP = myDimension.SystemValue;
System.Windows.Forms.MessageBox.Show("В результате изменения размеров шаблона шестигранного болта были установлены слпедующие размеры:\n\n\tВысота болта: " + (NewH * 1000) + "мм\n\tРадиус стрежня: " + (NewR * 1000) + "мм\n\tШаг спирали: " + (NewP * 1000) + "мм\n\nЭти данные были успешно получены из сохранённой при работе дополнения детали.", "Использование SwCSharpAddin (C#) :: Результат изменения рамзеров шаблона");
}