SolidWorks — использование SwCSharpAddin, работа с макросом и шаблоном детали

Характеристика некоторых особенностей работы с SolidWorks. Разработка и модификация приложения SwCSharpAddin. Разработка макроса отрисовки болта. Описание этапов процесса построения шестигранного болта на основе разных подходов при создании детали.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 24.04.2017
Размер файла 2,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Лабораторная работа № 7:

SolidWorks -- использование SwCSharpAddin, работа с макросом и шаблоном детали

Содержание

Вводная часть

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

2. Модификация приложения SwCSharpAddin: макрос отрисовки болта

3. Модификация приложения SwCSharpAddin: построение через шаблон детали

Завершающая часть

О приложении к Лабораторной работе № 6

Вводная часть

В этой работе будет рассмотрены некоторые особенности работы с программным комплексом САПР: SolidWorks (версии 2012 с установленным пакетом обновлений Service Pack 2.0).

В отличие от предыдущей работы (Лабораторная работа № 6), в данной работе будет рассмотрен класс приложений подключаемых к SolidWorks и работающих только при запуске самого SolidWекorks. Речь идёт об Addin-приложениях (Добавление). Дополнения являются полноценными модулями для Solidworks, могут использовать как собственный интерфейс (те же формы Windows Forms), так и элементы пользовательского интерфейса SolidWorks. Фактически, добавления встраиваются непосредственно в оболочку SolidWorks. Грамотно собранное стороннее добавление можно запросто не отличить от «родных» инструментов SolidWorks.

Также в данной работе на основе добавления будет реализовано построение шестигранного болта на основе разных «подходов» при создании детали.

1. Работа с кодом макроса, отстраивающего шестигранный болт по трём параметрам, задаваемым пользователем во время исполнения кода.

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

Вместе с установкой SolidWorks обязательно идёт установщик API SDK, который содержит также шаблоны проектов Addin под разные среды разработки Visual Studio (Visual Studio .NET, .ET 2003, 2005, 2008 и 2010, а также более ранние) и разные языки, один из которых C#. SolidWorks API SDK устанавливается вручную. Выбранный шаблон устанавливается в пользовательские документы (в независимости от языка операционной системы, в папке пользователя будет создана папка: My Documents. Весь путь будет выглядеть так: My Documents\<версия Visual Studio под которую ставится шаблон>\ Templates\ProjectTemplates\Visual C#

После установки шаблона в конечной папке появится архив swcsharpaddin.zip.

Для русской версии ОС Windows XP соответственно необходимо переместить конечное содержимое директории …\Visual C# в аналогичною директорию, но уже находящуюся в «правильной» директории шаблонов: Мои документы\<версия Visual Studio под которую ставится шаблон>\ Templates\ProjectTemplates\Visual C#

Для Windows 7 и Visual Studio 2010 конечный путь выглядит так: C:\Users\<имя текущего пользователя>\Documents\Visual Studio 2010\Templates\ProjectTemplates\Visual C#

Разумеется, конечной директорией, где хранятся шаблоны, может быть выбрана любая другая директория на дисек. Главное, необходимо правильно указать путь к этой директории с шаблонами в visual Studio 2010:

Рис. 1. 1. Сервиc -> Параметры...: Размещения пользовательских шаблонов проектов

Если Addin устанавливается простым копированием шаблона в папку для шаблонов Visual Studio 2010, то его перед первым запуском необходимо будет зарегистрировать, путём копирования библиотеки SolidWorksToolsWizard.dll в папку C:\Windows\assembly

1. Создание приложения 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

2. Модификация приложения SwCSharpAddin: макрос отрисовки болта

Итак. Обеспечим новую функциональность для нашего добавления. Пусть есть макрос для отрисовки шестигранного болта с фиксированными размерами. Обеспечим изменение размеров в форме, загружающейся до отрисовки болта. Форма будет запрашивать у пользователя три параметра, по которым строится болт: шаг по спирали, высота спирали и радиус стержня с резьбой. Построение детали болта начнётся после нажатия на кнопку Создать болт (макрос) в нашем добавлении.

Для начала организуем в добавлении две новые кнопки. Одна для вышеописанного макроса, вторая же для будущей функциональности. Нарисуем эти кнопки открыв в обозревателе решений файлы ToolbarLarge.bmp и ToolbarSmall.bmp.

В ToolbarLarge.bmp нарисуем:

В ToolbarSmall.bmp нарисуем:

Теперь добавим обработчики для новых кнопок. Откроем файл SwAddin.cs. Найдём:

public const int mainCmdGroupID = 5;

public const int mainItemID1 = 0;

public const int mainItemID2 = 1;

public const int mainItemID3 = 2;

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

public const int mainItemID4 = 3;

public const int mainItemID5 = 4;

Найдём:

int cmdIndex0, cmdIndex1, cmdIndex2;

Изменим на:

int cmdIndex0, cmdIndex1, cmdIndex2, cmdIndex3, cmdIndex4;

Найдём: solidworks приложение деталь болт

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);

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

cmdIndex3 = cmdGroup.AddCommandItem2("UsingMacro", -1, "Создать болт при помощи макроса", "Создать болт (макрос)", 3, "UsingMacro", "", mainItemID4, menuToolbarOption);

cmdIndex4 = cmdGroup.AddCommandItem2("UsingTemp", -1, "Создать болт с использованием шаблона", "Создать болт (шаблон)", 4, "UsingTemp", "", mainItemID5, menuToolbarOption);

Найдём:

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

Изменим на:

int[] knownIDs = new int[5] { mainItemID1, mainItemID2, mainItemID3, mainItemID4, mainItemID5 };

Найдём:

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);

Изменим на:

int[] cmdIDs = new int[6];

int[] TextType = new int[6];

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;

cmdIDs[4] = cmdGroup.get_CommandID(cmdIndex3);

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

cmdIDs[5] = cmdGroup.get_CommandID(cmdIndex4);

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

bResult = cmdBox.AddCommands(cmdIDs, TextType);

Найдём:

public void CreateCube()

{

Добавим до:

public void UsingMacro()

{

string partTemplate = iSwApp.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplatePart);

if ((partTemplate != null) && (partTemplate != ""))

{

IModelDoc2 swDoc = (IModelDoc2)iSwApp.NewDocument(partTemplate, (int)swDwgPaperSizes_e.swDwgPaperA2size, 0.0, 0.0);

// Начало макроса

bool boolstatus = false;

// Спираль: часть 1

double C = 1 / 1000.0;

double Height, Pitch, Radius;

// Загружаем форму LWP07Macro

LWP07Macro Macro = new LWP07Macro();

Macro.Text = "Использование SwCSharpAddin (C#) :: Выбор размеров шестигранного болта (макрос)";

Macro.ShowDialog();

Height = Macro.H * C;

Pitch = Macro.P * C;

Radius = Macro.R * C;

Macro.Dispose();

// Начало первого эскиза. Создаём круг для спирали

boolstatus = swDoc.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, false, 0, null, 0);

swDoc.SketchManager.InsertSketch(true);

swDoc.ClearSelection2(true);

SketchSegment skSegment = null;

skSegment = ((SketchSegment)(swDoc.SketchManager.CreateCircleByRadius(0, 0, 0, Radius)));

swDoc.InsertHelix(false, true, false, true, 2, Height, Pitch, 0, 0, (double)Math.PI);

boolstatus = swDoc.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, true, false, "Спираль1");

swDoc.ClearSelection2(true);

boolstatus = swDoc.Extension.SelectByID2("", "SKETCH", 0, 0, -Radius, false, 0, null, 0);

boolstatus = swDoc.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, true, false, "Эскиз1");

swDoc.ClearSelection2(true);

// Спираль: часть 2

// create reference plane

swDoc.ViewRotateplusx(); swDoc.ViewRotateplusx(); swDoc.ViewRotateplusx();

//boolstatus = swDoc.Extension.SelectByID2("", "POINTREF", 0, 0, -Radius, false, 0, null, 0); // Выбираем конечную точку

boolstatus = swDoc.Extension.SelectByID2("Спираль1", "REFERENCECURVES", 0, 0, 0, false, 0, null, 0); // Выбираем всё

boolstatus = swDoc.Extension.SelectByID2("", "POINTREF", 0, 0, -Radius, true, 1, null, 0);

swDoc.ViewRotateminusy();

RefPlane myRefPlane = null;

myRefPlane = ((RefPlane)(swDoc.FeatureManager.InsertRefPlane(2, 0, 4, 1, 0, 0)));

//swDoc.ClearSelection2(true);

boolstatus = swDoc.Extension.SelectByID2("", "PLANE", 0, 0, -Radius, false, 0, null, 0);

boolstatus = swDoc.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, true, false, "Плоскость1"); // Изменяем имя

swDoc.BlankRefGeom(); // Скрываем Плоскость1

swDoc.ShowNamedView2("*Изометрия", -1);

swDoc.ViewZoomtofit2();

// Эскиз2: треугольник/резьба формы

boolstatus = swDoc.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, false, 0, null, 0);

swDoc.SketchManager.InsertSketch(true);

swDoc.ShowNamedView2("*Normal To", 0);

swDoc.ViewRotateminusx();

swDoc.ViewTranslateminusx();

swDoc.ClearSelection2(true);

double x, y, z, dx, dy;

//x = .049903; y = -.001803; z = 0; // Старые координаты. Те что удалось установить вручную изначально

x = y = z = 0;

dx = dy = Radius / 10.0 + Pitch / 4.0;

skSegment = ((SketchSegment)(swDoc.SketchManager.CreateLine(x, y, z, x, y + dy, z)));

skSegment = ((SketchSegment)(swDoc.SketchManager.CreateLine(x, y + dy, z, x + dx, y + dy, z))); // Горизонталь

skSegment = ((SketchSegment)(swDoc.SketchManager.CreateLine(x + dx, y + dy, z, x, y, z)));

swDoc.ClearSelection2(true);

//boolstatus = swDoc.Extension.SelectByID2("", "SKETCHSEGMENT", x+dx/2.0, y+dy, z, false, 0, null, 0);

//swDoc.SketchAddConstraints("sgHORIZONTAL2D"); // Больше не нужно

//swDoc.ClearSelection2(true);

//swDoc.ViewRotateminusx(); // Тоже не нужно

swDoc.SetPickMode();

boolstatus = swDoc.Extension.SelectByID2("Точка1", "SKETCHPOINT", x, y, z, false, 0, null, 0);

boolstatus = swDoc.Extension.SelectByID2("Спираль1", "REFERENCECURVES", 0, 0, 0, true, 1, null, 0);

swDoc.SketchAddConstraints("sgATPIERCE");

swDoc.ClearSelection2(true);

boolstatus = swDoc.Extension.SelectByID2("Точка1", "SKETCHPOINT", x, y, z, false, 0, null, 0);

swDoc.SketchConstraintsDel(0, "sgCOINCIDENT"); // Автоматически "совпадающие"

swDoc.SketchManager.InsertSketch(true);

// Перемещаем Эскиз2 на Плоскость1

boolstatus = swDoc.Extension.SelectByID2("Эскиз2", "SKETCH", 0, 0, 0, false, 0, null, 0);

boolstatus = swDoc.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, true, 0, null, 0);

boolstatus = swDoc.DeSelectByID("Справа", "PLANE", 0, 0, 0);

boolstatus = swDoc.Extension.SelectByID2("Эскиз2", "SKETCH", 0, 0, 0, false, 0, null, 0);

boolstatus = swDoc.Extension.SelectByID2("Плоскость1", "PLANE", 0, 0, 0, true, 0, null, 0);

boolstatus = swDoc.ChangeSketchPlane();

boolstatus = swDoc.EditRebuild3();

swDoc.SetPickMode();

swDoc.ClearSelection2(true);

swDoc.ViewZoomtofit2();

// Делаем резьбу; 1: эскиз пути, 2: маршрут спирали, 4: выполняем

//boolstatus = swDoc.Extension.SelectByID2("Эскиз2", "SKETCH", 0.005135831118, -0.0038831893819, 0, true, 1, null, 0);

boolstatus = swDoc.Extension.SelectByID2("Эскиз2", "SKETCH", 0, 0, 0, true, 1, null, 0);

boolstatus = swDoc.Extension.SelectByID2("Спираль1", "REFERENCECURVES", 0, 0, 0, true, 4, null, 0);

Feature myFeature = null;

myFeature = ((Feature)(swDoc.FeatureManager.InsertProtrusionSwept3(false, false, 0, false, false, 0, 0, false, 0, 0, 0, 0, true, true, true, 0, true)));

// Снимаем выделение, скрываем окружность (созданную вначале), меняем положение камеры (вид)

swDoc.ClearSelection2(true);

boolstatus = swDoc.Extension.SelectByID2("Эскиз1", "SKETCH", 0, 0, 0, false, 0, null, 0);

swDoc.BlankSketch();

swDoc.ClearSelection2(true);

swDoc.ShowNamedView2("*Изометрия", -1);

swDoc.ViewZoomtofit2();

// Спираль: часть 3

// Вытягивание

double Height2 = Height + Radius / 4.0 + dx * 1.5;

boolstatus = swDoc.Extension.SelectByID2("Эскиз1", "SKETCH", 0, 0, 0, false, 0, null, 0);

myFeature = ((Feature)(swDoc.FeatureManager.FeatureExtrusion2(true, false, false, 0, 0, Height2, 0.00254, false, false, false, false, 0.01745329251994, 0.01745329251994, false, false, false, false, true, true, true, 0, 0, false)));

swDoc.ISelectionManager.EnableContourSelection = false;

swDoc.ClearSelection2(true);

// Вырезаем вытягивание (наверх)

//boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0, Height2, 0, false, 0, null, 0);

//swDoc.SketchManager.InsertSketch(true);

//swDoc.ClearSelection2(true);

//skSegment = ((SketchSegment)(swDoc.SketchManager.CreateCircleByRadius(0, 0, 0, Radius + c)));

//swDoc.SketchManager.InsertSketch(true);

//swDoc.ClearSelection2(true);

//boolstatus = swDoc.Extension.SelectByID2("Sketch3", "SKETCH", 0, 0, 0, false, 0, null, 0);

//myFeature = ((Feature)(swDoc.FeatureManager.FeatureCut(true, false, true, 0, 0, c, 0.0508, false, false, false, false, 0.01745329251994, 0.01745329251994, false, false, false, false, false, true, true)));

//swDoc.ISelectionManager.EnableContourSelection = false;

//swDoc.ClearSelection2(true);

// Шляпка болта

double extrHeight = Radius + c / 4;

boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0, Height2, 0, false, 0, null, 0);

swDoc.SketchManager.InsertSketch(true);

//skSegment = ((SketchSegment)(swDoc.SketchManager.CreateCircleByRadius(0, 0, 0, Radius*1.5))); // Созданём полигон (6 граней) вместо окружности

Array vSkLines = null;

vSkLines = ((Array)(swDoc.SketchManager.CreatePolygon(0, 0, 0, -Radius * 2, 0, 0, 6, true)));

swDoc.SketchManager.InsertSketch(true);

swDoc.ClearSelection2(true);

boolstatus = swDoc.Extension.SelectByID2("Эскиз3", "SKETCH", 0, Height2, 0, false, 0, null, 0);

myFeature = ((Feature)(swDoc.FeatureManager.FeatureExtrusion2(true, false, false, 0, 0, extrHeight, 0.00254, false, false, false, false, 0.01745329251994, 0.01745329251994, false, false, false, false, true, true, true, 0, 0, false)));

swDoc.ISelectionManager.EnableContourSelection = false;

swDoc.ClearSelection2(true);

// Кромки

boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0, Height2 + extrHeight, 0, false, 0, null, 0);

swDoc.ViewRotateplusx();

swDoc.ViewRotateplusx();

swDoc.ViewRotateplusx();

swDoc.ViewRotateplusx();

boolstatus = swDoc.Extension.SelectByID2("", "FACE", Radius * 1.5, Height2, 0, true, 1, null, 0);

//boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0, 0, 0, true, 2, null, 0);

Array radiiArray3 = null;

double[] radiis3 = new double[1];

Array setBackArray3 = null;

double[] setBacks3 = new double[0];

Array pointArray3 = null;

double[] points3 = new double[0];

radiiArray3 = radiis3;

setBackArray3 = setBacks3;

pointArray3 = points3;

myFeature = ((Feature)(swDoc.FeatureManager.FeatureFillet(195, Radius * 2.0 / 25.0, 0, 0, radiiArray3, setBackArray3, pointArray3)));

swDoc.ClearSelection2(true);

boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0, 0, 0, false, 0, null, 0);

myFeature = ((Feature)(swDoc.FeatureManager.FeatureFillet(195, Radius * 2.0 / 25.0, 0, 0, radiiArray3, setBackArray3, pointArray3)));

// Завершающий вид на деталь

swDoc.ShowNamedView2("*Изометрия", -1);

swDoc.ViewZoomtofit2();

// Конец макроса

}

else

{

System.Windows.Forms.MessageBox.Show("Нет части доступных шаблонов. Пожалуйста, проверьте ваши настройки чтобы убедиться, что часть шаблонов выбрана или недостающие шаблоны.");

}

}

public void UsingTemp()

{

// Пока пусто

}

Добавим недостающую форму для работы кода макроса. Нажмём ПКМ на названии проекта в обозревателе решений, далее в раскрывающемся списке Добавить -> Создать элемент... (Ctrl+Shift+A). Выберем в открывшемся окне Форма Windows Forms. В поле Имя внизу окна вписываем LWP07Macro.cs, далее жмём ОК.

Задаём следующие параметры формы на панели Свойства:

Text:

Использование SwCSharpAddin (C#) :: Ввод размеров болта для макроса

Size:

600; 100

FormBorderStyle:

FixedDialog

MaximizeBox:

False

Рис. 3. 1. Модифицированная форма LWP07Macro

Добавим на нашу форму ToolTip ().

Параметры добавленного элемента всплывающей подсказки таковы:

(Name):

Hint

Слева направо установим три TextBox со следующими параметрами:

(Name):

TBHeight

Text:

75

ToolTip на Hint:

Высота спирали

(Name):

TBRadius

Text:

10

ToolTip на Hint:

Радиус стержня

(Name):

TBPitch

Text:

3

ToolTip на Hint:

Шаг спирали

Добавим над каждым TextBox слева направо по элементу Label. Свойства Text каждого текстового элемента будут соответственно H, R и P.

Установим на форме в правом нижнем углу кнопку Button. Параметры кнопки будут следующими:

(Name):

B_OK

Text:

Размер выбран

Size:

100; 23

Рис. 3. 2. Модифицированная форма LWP07Macro

Двойным щелчком по кнопке B_OK создаём событие Click, код такой:

double.TryParse(TBHeight.Text, out H);

double.TryParse(TBRadius.Text, out R);

double.TryParse(TBPitch.Text, out P);

if (H > 0 && R > 0 && P > 0)

Close();

else

{

MessageBox.Show("Ошибка ввода размеров: нужно ввести все неотрицательные числа в поля формы.\n\nРазмеры по умолчанию:\nH: 75 мм.\nR: 10 мм.\nP: 3 мм.", "Использование SwCSharpAddin (C#) :: Ввод размеров болта для макроса");

}

Добавим после строчки:

public partial class LWP07Macro : Form

{

Код:

public double H, R, P;

Компилируем приложение (Debug) и запускаем. Загружаем новую деталь (или непосредственно панель инструментов) и нажимаем на кнопку в нашем добавлении с буквой «М». Результат работы показан ниже (Рис. 3. 3):

Рис. 3. 3. Результат построение шестигранного болта при помощи макроса

3. Модификация приложения 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#) :: Результат изменения рамзеров шаблона");

}

Завершающая часть

Компилируем приложение (Release) и запускаем. Не создавая новой детали добавим на панель инструментов наше добавление:

Нажимаем на кнопку с буквой «Ш»:

В открывшемся окне указываем необходимые размеры и пути к шаблону и месту для сохранения. Нажимаем на кнопку: «Размер выбран». В результат будет открыт шаблон, изменены его размеры, после чего новая модель будет сохранена под новым именем. В конце будет выдано всплывающее сообщение с новыми размерами, полученными из новой модели.

Результат работы показан ниже (Рис. 5. 1):

Рис. 5. 1. Работа кнопки Создать болт (шаблон): на просмотр было открыто то что SolidWorks собрал (шестигранный болт на основе шаблона) и сохранил на диск по указанному в форме пути и с именем заданным пользователем (Bolt_Final.sldprt)

О приложении к Лабораторной работе № 7

Получившуюся программу (LWP07SW02.exe), собранную из кусков кода приведённых в данной лабораторной работе, деталь шаблона (файл Bolt_Default_Template.sldprt), а также шаблон добавления SolidWorks 2012 из установки SolidWorks API SDK (swcsharpaddin.zip) можно загрузить по ссылке в конце этого материала.

Размещено на Allbest.ru


Подобные документы

  • Современный подход к проектированию и производству высокотехнологичной и наукоёмкой продукции. Схема, структура, интерфейсы и приложения, создаваемые на платформе SolidWorks API. Особенности использования API в коммерческих программных продуктах.

    курсовая работа [325,7 K], добавлен 06.08.2013

  • Решение математических примеров, построение графиков с помощью программы Mathcad. Создание 3D модели сборки, гидродинамического расчета, термического расчета и статистического расчета с помощью программы SolidWorks. Детали интерфейса, элементы вкладок.

    отчет по практике [2,3 M], добавлен 25.11.2014

  • История создания программы SolidWorks: рынок САПР в 90-е гг., появление средств программного комплекса. Общая характеристика и описание программы SolidWorks: концепция, пользовательский интерфейс, принципы работы, создание сборок, визуализация изделий.

    курсовая работа [1,4 M], добавлен 11.11.2010

  • Использование трехмерного твердотельного и поверхностного параметрического проектирования на этапах конструкторской и технологической подготовки производства. Проектирование горизонтального тонкоплёночного испарителя в программном комплексе SolidWorks.

    курсовая работа [2,2 M], добавлен 09.06.2016

  • Разработка чертежа детали в 3D-формате в системе проектирования AutoCAD. Особенности процесса построения сложных пространственных моделей, использования функций и команд, связанных с 3D-графикой в среде AutoCAD. Результаты работы: пример чертежа детали.

    отчет по практике [1,9 M], добавлен 16.06.2015

  • САПР інженерного аналізу та підготовки виробництва виробів SolidWorks, AutoCAD та Unigraphics, їх відмінні та подібні ознаки, порівняльна характеристика та особливості використання, оцінка можливостей, технічні вимоги. Універсальна система СADAD (США).

    контрольная работа [1,1 M], добавлен 25.03.2010

  • Создание программных комплексов для систем автоматизированного проектирования с системами объемного моделирования и экспресс-тестами. SolidWorks - мировой стандарт автоматизированного проектирования. Пользовательский интерфейс, визуализация модели.

    курсовая работа [3,2 M], добавлен 13.10.2012

  • Проектирование и моделирование платы и корпуса цифрового устройства. Геометрическая модель платы и нахождение собственных частот. Исследование теплообмена с использованием граничного условия и вентилятора. Методы моделирования в системе SolidWorks.

    курсовая работа [2,3 M], добавлен 06.07.2012

  • Обґрунтування вибору автоматизованої системи для створення конструкторської документації. Проектування 3D моделі і креслення деталі в системі SolidWorks. Розробка API програми. Призначення деталі "прес-форма". Розробка керуючої програми для устаткування.

    курсовая работа [3,3 M], добавлен 16.12.2013

  • Организация рабочего места и создание 2D и 3D чертежей деталей, выполнение статического анализа и выбор материала. Наложение граничных условий и нагружений, оптимизация конструкции детали, ее технологический код и разработка процесса изготовления.

    курсовая работа [2,9 M], добавлен 19.09.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.