Модификация приложения Windows Forms : создание новых документов
Следующая часть данной работы объясняет, как создать новый документ (например, обычную деталь, тип файла Обычный. ipt) и получить общее число открытых документов в открытом приложении Inventor. Строго говоря, работы с COM-Сервером Inventor очень похожа и мало чем отличается от работы с COM-сервером SolidWorks (классы приложения, документа, эскиза и т.п.). Поэтому основы работы такие же. Необходимо лишь хорошо знать структуру применяемых классов COM-сервера и документа для успешного применения этих навыков.
Единственно «но». Популярность разработки приложений на C# «под и для» Inventor достаточно невысокая по сравнению с тем же «родным» для корпорации Autodesk Inventor Visual Basic for Application и Visual Basic . NET .. Но найти необходимую документацию всё же можно.
И так, размещаем вторую группу элементов на форме следующим образом:
Рис. 4. 1. Расстановка элементов управления второй группы элементов
И код для единственной кнопки B _ Create (событие Click):
private void B_Create_Click(object sender, EventArgs e)
{
Inventor.Application oApp2;
oApp2 = (Inventor.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application");
Inventor.PartDocument oPart2;
oPart2 = (Inventor.PartDocument)oApp2.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject);
// Получае число открытых документов экземпляра приложения Inventor
int number_int = oApp2.Documents.Count;
string number_string = Convert.ToString(number_int);
MessageBox.Show("Текущее число открытых документов: " + number_string, "Работа с Inventor (C#) :: Получение числа открытых страниц в Inventor");
|
|
}
Подкорректируем код LWP20Main():
public LWP20Main()
{
InitializeComponent();
B_Close.Enabled = false;
B_Create.Enabled = false;
}
Найдём:
// Запускаем экземпляр приложения Inventor
Process InventorProcess = System.Diagnostics.Process.Start("C:\\Program Files\\Autodesk\\Inventor 2012\\Bin\\Inventor.exe");
B_Close.Enabled = true;
B_Open.Enabled = false;
Добавим после:
B_Create.Enabled = true;
И изменим событие нажатия кнопки B_Close:
private void B_Close_Click(object sender, EventArgs e)
{
CloseInventor();
B_Close.Enabled = false;
B_Open.Enabled = true;
B_Create.Enabled = false;
}
Компилируем приложение (Debug) и запускаем. Запускаем Inventor основной кнопкой, и жмём несколько раз на Создать и посчитать (Рис. 4. 2):
Рис. 4. 2. Создание двух документов деталей в Inventor и отображение получения общего числа открытых документов
Модификация приложения Windows Forms: доступ к элементам документов Inventor
Допустим, есть документ сборка (тип файла Обычный.iam) с двумя простенькими деталями:
Рис. 5. 1. Сборка1.iam в среде Inventor
Следующая часть нашего приложения сможет, например по имени любой части сборки вводимой в текстовом поле скрыть или показать этот элемент на сборке в Inventor.
|
|
Размести элементы третьей группы следующим образом:
Рис. 5. 2. Расстановка элементов управления третьей группы элементов
Где три кнопки и одно текстовое поле TextBox по порядку:
( Name ): | B_Start |
Text: | Инициализировать сборку |
Size: | 155; 23 |
( Name ): | B_Hide |
Text: | Скрыть |
Size: | 100; 23 |
( Name ): | B_Show |
Text: | Показать |
Size: | 100; 23 |
( Name ): | TB_Name |
Text: | Имя элемента |
Size: | 100; 23 |
Также добавим на форму элемент OpenFileDialog со свойствами:
( Name ): | OFD_Name |
Filter: | Сборка *.iam|*.iam |
И один Label (по первой кнопкой группы).
Найдём в файле LWP 20 Main . cs строчки:
private Inventor.Application oApp1;
Добавим после:
// Делаем это ещё раз для другой части нашего приложения
private Inventor.Application oApp3;
// Объявляем экземпляр переменную oAsmDoc3, чтобы получить возможности в работы в этом классе
private Inventor.AssemblyDocument oAsmDoc3;
Событие Click кнопки B_Start:
private void B_Start_Click(object sender, EventArgs e)
{
OFD_Name.ShowDialog();
oApp3 = (Inventor.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application");
// Открываем файл сборки
oAsmDoc3 = (Inventor._AssemblyDocument)oApp3.Documents.Open(OFD_Name.FileName, true);
|
|
// Проверяем, что хотя бы один документ был открыт
if (oApp3.Documents.Count == 0)
{
MessageBox.Show("Должен быть открыт хотя бы один документ в данный момент");
}
// Проверяем что хотя бы один документ Сборка (*.iam) был активным
if (oApp3.ActiveDocument.DocumentType != Inventor.DocumentTypeEnum.kAssemblyDocumentObject)
{
MessageBox.Show("Должна быть открыт хотя бы одна сборка (документ: \"Сборка\", тип файла: *.iam) в данный момент");
}
// Переопределяем тип активного документа ActiveDocument в AssemblyDocument (документ сборки)
// Устанавливаем ссылку на активный документ
oAsmDoc3 = (Inventor.AssemblyDocument)oApp3.ActiveDocument;
B_Show.Enabled = true;
B_Hide.Enabled = true;
}
Событие MouseClick текстового поля TB _ Name:
private void TB_Name_MouseClick(object sender, MouseEventArgs e)
{
TB_Name.Text = "";
}
Изменим метод LWP20Main():
public LWP20Main()
{
InitializeComponent();
B_Close.Enabled = false;
B_Create.Enabled = false;
B_Start.Enabled = false;
B_Show.Enabled = false;
B_Hide.Enabled = false;
}
И код закрытия Кнопки для приложения Inventor:
private void B_Close_Click(object sender, EventArgs e)
{
CloseInventor();
B_Close.Enabled = false;
B_Open.Enabled = true;
B_Create.Enabled = false;
B_Start.Enabled = false;
|
|
B_Show.Enabled = false;
B_Hide.Enabled = false;
}
Найдём:
Thread.Sleep(20000);
Добавим до:
B_Start.Enabled = true;
Последним штрихом инициализируем события кнопок Скрыть и Показать, а также методу, выполняющему изменения статуса видимости объекта:
private void B_Hide_Click(object sender, EventArgs e)
{
// Вызываем функция, которая работает со сборкой и устанавливает видимость объектов
SetVisibility(oAsmDoc3.ComponentDefinition.Occurrences, TB_Name.Text, false);
// Обновляем вид
oApp3.ActiveView.Update();
}
private void B_Show_Click(object sender, EventArgs e)
{
// Вызываем функция, которая работает со сборкой и устанавливает видимость объектов
SetVisibility(oAsmDoc3.ComponentDefinition.Occurrences, TB_Name.Text, true);
// Обновляем вид
oApp3.ActiveView.Update();
}
private static void SetVisibility(Inventor.ComponentOccurrences Occurences, string SearchName, bool VisibilityOn)
{
// Итерация по каждому из "упоминаний" в коллекции условий
foreach (Inventor.ComponentOccurrence oOccurence in Occurences)
{ // Проверяем, если имя "упоминания" совпадает с введённым на форме именем
// Все символы строки делаем строчными чтобы избежать чувствительности к регистру
if (oOccurence.Name.ToLower().Contains(SearchName.ToLower()))
{ // Проверяем, если параметр "Видимость" отличает от введённого при нажатии на кнопки формы
if (oOccurence.Visible != VisibilityOn)
{ // Устанавливаем видимость для "упоминания" (например, детали)
oOccurence.Visible = VisibilityOn;
}
}
}
}
Готово. Можно компилировать и проверять работоспособность.
Завершающая часть
Компилируем приложение (Release) и запускаем. Жмём на кнопку «Запустить AIP 2012», далее «Инициализировать сборку» и выбираем любой доступный файл сборки (файл *. iam). После чего загрузки сборки вводим в текстовое поля имя любого объекта сборки и меняем видимость. Результат работы показан ниже (Рис. 6. 1):
Рис. 6. 1. Работа кнопки Скрыть: скрытая Деталь1 файла сборки Сборка1. iam
Дата добавления: 2019-09-13; просмотров: 166; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!