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

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

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




  • Сообщения

    • Максим604
      Поэтому и вопрос. почему шопмилл подачу меняет, когда пишешь через него(макропеременые), а когда через G код не меняется. как шопмилл просчитывает новую подачу я понимаю, но не понимаю как прравильно и почему именно так правильно, а не наоброт. почему шопмилл переводит подачу с движения по траектории на движение по центру?     
    • Snake 60
      Так а зачем, если вот эта кнопка  сохраняет все детали и подсборки входящие в нее: При желании можно повесить на горячую кнопку через Настройка-Клавиатура
    • maxx2000
      ну хотя бы то что одна написана через макропеременные, вторая в джи кодах. Ты считаешь что при одинаковом результате у них одинаковые алгоритмы?  
    • Максим604
      А что должно смущать?
    • maxx2000
      Ничего не смущает?
    • Максим604
      разные уп, но смысл одинаковый. в первом варианте подача меняется, во втором сохраняется.   Это то что не устраивает   M0 E_MI_TR(1,0,0,"REZBA_D11.9_P2_VARGUS","",1,0.05,2,50,2,1297,-16.2,91,2,10,14,1.0826,1.083,0.1,0,3,0.03937,0.31831,,,,1,0,"ISO_METRIC","M14");*RO* E_MI_TR(1,0,0,"REZBA_D11.9_P2_VARGUS","",1,0.05,2,50,2,1298,-16.2,91,2,10,14,1.0826,1.083,0.1,0,3,0.07874,0.63662,,,,-1,0,"ISO_METRIC","M14");*RO* _E_P002: E_PS_CIR(1,0,0,-14,90,0,,0,,102.5,12.857,30,8,10,0,,);*RO* CALL "END.SPF";#SM;*RO* E_END(0,1,0);*RO* M30 ;#SM;*RO* _____________________________________________   это устраивает N104 T=" ФРЕЗ. РЕЗЬБЫ - 12" N106 M6 N108 G0 X0. Y0. S1326 M3 D1 N110 Z50. N112 Z5. N114 G1 Z-25. F198.9 N116 G41 Y-4.95 N118 G3 X9.95 Y0. Z-24.5 I3.74372 J4.95 N120 Z-22.5 I-9.95 J0. N122 Z-20.5 I-9.95 J0. N124 Z-18.5 I-9.95 J0. N126 Z-16.5 I-9.95 J0. N128 Z-14.5 I-9.95 J0. N130 Z-12.5 I-9.95 J0. N132 Z-10.5 I-9.95 J0. N134 Z-8.5 I-9.95 J0. N136 Z-6.5 I-9.95 J0. N138 Z-4.5 I-9.95 J0. N140 Z-2.5 I-9.95 J0. N142 Z-.5 I-9.95 J0. N144 X0. Y9.95 Z0. I-9.95 J0. N146 X-4.95 Y0. Z.5 I0. J-6.20628 N148 G1 G40 X0.
    • sklide008
      Да точно, подзабыл уже все. а можно ли горячими клавишами открыть деталь из сборки и пересохранить не открывая деталь?
    • maxx2000
      наверное пришло время выложить программу которая устраивает и которая не устраивает
    • Максим604
      Резьбу фрезерует. Просто выходит что подача меняется в разы.    Писал в мастеркаме  и крео. Там всё понятно. Подача=обороты*кол-во зубьев*подача на зуб. И с такой скоростью режет.    А когда пишешь через шопмилл ( стойка синумерик). То подача меняется от написаной
    • Tad
      Скиньте для начала парметры вашей машины.
×
×
  • Создать...