Перейти к публикации

NXOpen. DrawingSheet из View


Brain (Pinkies friend)

Рекомендованные сообщения

Доброго времени суток!

Имею задачу найти на выделенных листах объекты типа NXOpen.Annotations.IdSymbol.

Выделенные листы получаю через UI.GetUI().SelectionManager.GetSelectedTaggedObject(i), где они NXOpen.View.

Для поиска объектов использую AskVisibleObjects(), который ругается на все неактивные листы (DrawingSheet). На просторах сети нашёл решение, использующее "костыль" в виде открывания  листа и поиска объектов в нём.

Подскажите, пожалуйста как зная вид получить ссыль на конкретный лист, зная вид. Ну или другой путь решения.

Собственно, код:
 

        private void button1_Click(object sender, EventArgs e)
        {
            int SelectedObjNum = UI.GetUI().SelectionManager.GetNumSelectedObjects();
            for (int i = 0; i <= SelectedObjNum - 1; i++)
            {
                NXOpen.NXObject selectedObject = (NXOpen.NXObject)UI.GetUI().SelectionManager.GetSelectedTaggedObject(i);//UI.GetUI().SelectionManager.GetSelectedObject(0);
                NXOpen.View drawingView = (NXOpen.View)selectedObject;

                if (selectedObject != null)
                {
                    DisplayableObject[] displayableObjects = drawingView.AskVisibleObjects();
                    foreach (DisplayableObject disobj in displayableObjects)
                    {
                        if (disobj.GetType().ToString() == "NXOpen.Annotations.IdSymbol")
                        {
                            listBox1.Items.Add("___");
                            NXOpen.Annotations.IdSymbol symObject = (NXOpen.Annotations.IdSymbol)disobj;
                            AddSymInfOnList(symObject);
                        }
                    }  
                }
            }
        }

 

Ссылка на сообщение
Поделиться на других сайтах


1 час назад, Brain (Pinkies friend) сказал:

Доброго времени суток!

Имею задачу найти на выделенных листах объекты типа NXOpen.Annotations.IdSymbol.

Выделенные листы получаю через UI.GetUI().SelectionManager.GetSelectedTaggedObject(i), где они NXOpen.View.

Для поиска объектов использую AskVisibleObjects(), который ругается на все неактивные листы (DrawingSheet). На просторах сети нашёл решение, использующее "костыль" в виде открывания  листа и

Как вариант зная вид можно узнать OwningPart, дальше пробегитесь по DrawingSheet.SheetDraftingViews (проще через linq), соотв-но найдя нужный вид найдете соотв-ий лист

Изменено пользователем lexincton
Ссылка на сообщение
Поделиться на других сайтах

Благодарю.

Не совсем понял зачем OwningPart (только осваиваю и с именно этим не встречался пока), да и Linq - не моя сильная сторона.

В принципе, смущает необходимость перебора - как-то это не логично и попахивает не самыми шустрыми решениями. Однако, способ работает.

 

аа

        private void button1_Click(object sender, EventArgs e)
        {
			//Получаем количество выбранных объектов
            int SelectedObjNum = UI.GetUI().SelectionManager.GetNumSelectedObjects();
			//Получаем массив листов чертежей
            NXOpen.Drawings.DrawingSheetCollection sheetCollection = displayPart.DrawingSheets;
            NXOpen.Drawings.DrawingSheet[] drawingSheets = sheetCollection.ToArray();
			
            for (int i = 0; i <= SelectedObjNum - 1; i++)
            {
                NXOpen.NXObject selectedObject =(NXOpen.NXObject)UI.GetUI().SelectionManager.GetSelectedTaggedObject(i);
                NXOpen.View drawingView = (NXOpen.View)selectedObject;
                //Если выбранный объект - вид, перебираем листы и ищем соответствие вида
                if (selectedObject != null)
                {
                    foreach (NXOpen.Drawings.DrawingSheet drawingSheet in drawingSheets)
                    {
                        if (drawingSheet.View == drawingView)
                        {
                            //Костыль. Если найденный лист уже открыт, то после открытия повторно, могут не найтись все нужные объекты
                            if (drawingSheet != Program.displayPart.DrawingSheets.CurrentDrawingSheet)
                            {
                                drawingSheet.Open();
                            }
                            

                            DisplayableObject[] displayableObjects = drawingView.AskVisibleObjects();
                            foreach (DisplayableObject disobj in displayableObjects)
                            {
                                if (disobj.GetType().ToString() == "NXOpen.Annotations.IdSymbol")
                                {
                                    NXOpen.Annotations.IdSymbol symObject = (NXOpen.Annotations.IdSymbol)disobj;
                                    AddSymInfOnList(symObject);
                                }
                            }
                        }
                    }
                }
            }
        }

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...