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

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 пользователей

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




  • Сообщения

    • ID_Hacker
      Надо смотреть тип HMI. Может быть integrated, то она прям в NCU на линуксе. Можете через X127 подключить ноутбук и VNC Viewer'ом попробовать подключиться по адресу 192.168.214.1 или 215.1, если при этом на экране то же самое что и на TCU тогда у вас нет внешней HMI. Иначе 192.168.214.241 должен быть адрес Simatic IPC. Ну и по электросхема можно посмотреть наличие.
    • Turgenev
      Есть 2 платы, которые экспортировал из Altium в STEP. Импортировал их в Solid, создались 2 сборки. Есть корпус, который создал как деталь в Solid. Хочу создать сборку плат и корпуса. Создаю сборку, помещаю в нее корпус и первую плату- все норм. Помещаю вторую плату и вставляется предыдущая, хоть в уменьшенном предпросмотре показана нужная плата. Иду в Solis второй платы, программа просит перестроить, перестраиваю и вместо второй платы появляется первая плата. Смотрю в дерево сборки второй платы, а там откуда то взялась STEP модель первой платы. Создаю новую деталь и импортирую вторую плату, вставляется все равно первая. В онлайн просмотрщике степ моделей все нормально- степ модели соответствуют своим платам. Подскажите, как это можно исправить?
    • Артур8991
    • SAPRonOff
      хз, напишете в тех поддержку, что ответят?
    • Alexandr97
    • ak762
      а мне нравятся производственные истории, как-будто обратно в цех вернулся.
    • 3d_oemr
      Лучший выбор для творчества: 3D принтер Picaso Designer X S2, для самых требовательных пользователей. Современный дизайн и инновационные технологии в 3D принтере Picaso Designer X S2, который изменит ваш взгляд на создание моделей. Эффективный инструмент для прототипирования: 3D принтер Picaso Designer X S2, которое подарит вам новые возможности и перспективы. Уникальный 3D принтер Picaso Designer X S2 для реализации ваших творческих идей, который станет вашим незаменимым помощником в работе. Лучший выбор для профессиональных дизайнеров: 3D принтер Picaso Designer X S2, который поразит вас своей эффективностью и надежностью. Почувствуйте мощь технологии с 3D принтером Picaso Designer X S2, который отличается высоким качеством печати и точностью деталей. Новейший 3D принтер Picaso Designer X S2 для дизайнеров и инженеров, который поможет вам воплотить ваши идеи в жизнь. Уникальные возможности для творчества с 3D принтером Picaso Designer X S2, которое подарит вам новый уровень ваших проектов. Уникальный инструмент для инженеров и дизайнеров: 3D принтер Picaso Designer X S2, которое обеспечит вас всем необходимым для воплощения идей. Удивительные возможности для создания моделей с 3D принтером Picaso Designer X S2, который не оставит вас равнодушными. Эффективное оборудование для творчества: 3D принтер Picaso Designer X S2, который поможет вам реализовать любые проекты. Превосходное качество печати и скорость работы: 3D принтер Picaso Designer X S2, которое подарит вам новый взгляд на создание моделей. Лучшее оборудование для моделирования: 3D принтер Picaso Designer X S2, который поможет вам воплотить свои идеи в реальность. Мощный инструмент для проектирования: 3D принтер Picaso Designer X S2, который превзойдет ваши ожидания. Революционный 3D принтер Picaso Designer X S2 для ваших проектов, которое станет вашим верным помощником в работе. Исключительное качество и производительность с 3D принтером Picaso Designer X S2, который поможет вам воплотить ваши идеи в жизнь. Продуктивное решение для дизайнеров: 3D принтер Picaso Designer X S2 picaso designer x s2 купить [url=https://aso-design2.ru]https://aso-design2.ru[/url] .
    • Бестолковый
      Сидю, конструячу (SW 2022), никого не трогаю (винду не пересыпаю, дров не ставлю, в реестр не лезу).   Дохожу до листовых деталей, создаю некий Part1 с габаритами (условно) 240х58х8мм через использование Base Flange/Tab, далее делаю то что обычно в таких случаях: - Открываю CutList, ПКМ по Cut-List-Item1 -> Properties -> в открывшемся списке снимаю галочку с нужной мне СЕРОЙ /неактивной/ строки (длина или ширина), копирую содержимое строки, закрываю все окна, открываю File Properties и вставляю код в необходимую мне строку из которой она подтянется в чертёж. Да, наверняка через *опу, но я самоучка и это мой метод переноса габаритов листовых деталей с чертёж и BOM.   Но что-то пошло не так, а именно: Таблица CutList НЕ СЕРАЯ (активны все её строки), а при попытке скопировать оттуда данные и вставить в File Properties строка вида"SW-Bounding Box Length@@@Cut-List-Item1@Лист 240х58х8.SLDPRT" такой и остаётся. Хотя ранее там были цифры габаритов. Открываю старые sldpt'ы в которых 100% это работало и указывало габариты - там та же беда... Откат с резервной копии настроек результата не принёс (((   Что не так-то? Луна не в фазе? Меркурий метроградный? Пятница на носу? Я сам что-то не того тыцнул?   https://fastpic.org/view/123/2024/0606/09656cc22a1847c4b1fbbd66d1324e19.jpg
    • Maik812
      Опоздали лет на 30 ...  с такими конкурсами.. Нужно еще конкурс приложений или около САПР программ и плагинов разных...  у Том систем креотивность  ниже плинтуса
    • SAPRonOff
      бетта пока не начиналась:) но это будет если не самая нассыщенная по доработкам версия, то одна из..
×
×
  • Создать...