Модификация приложения 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!