Jump to content

Как развернуть псевдопапку в интерфейсе Teacmnter


Recommended Posts

alexeytur

Добрый день!

Есть плагин для TC, он создает компонент, и связывает его с выделенным в интерфейсе элементом.

При этом созданный компонент появляется в псевдопапке под выделенным элементом.

 

Эта псевдопапка может быть свернута, можно ли её развернуть программно?

И как максимум, развернуть её и выделить новосозданный компонент?

Link to post
Share on other sites


UnPinned posts
lexx174

думаю это возможно, но такую именно задачу не делал,нужно писать код чтобы проверить

 

а в чем необходимость разворачивать папку?если нужен объект который виден через псевдопапку, может проще на отдельной вкладке открыть этот объект? это и в плане кода гораздо быстрее и меньше времени

Edited by lexx174
Link to post
Share on other sites
alexeytur
2 часа назад, lexx174 сказал:

 

а в чем необходимость разворачивать папку?если нужен объект который виден через псевдопапку, может проще на отдельной вкладке открыть этот объект? это и в плане кода гораздо быстрее и меньше времени

Мне просто показать юзеру, что вот он созданный элемент. Юзер вряд ли будет его дальше редактировать, поэтому может и излишне открывать его в новой вкладке.  Но как запасной вариант, подойдет. Можете подсказать код?

Link to post
Share on other sites
lexx174

как раз таки вкладка - это вовсе не излишне,это по сути команда Открыть. или отправить в Мой тимцентр.

 

AIFDesktop adesktop = AIFUtility.getAIFPortal().getDesktopManager().getActiveDesktop();
AbstractAIFCommand open = session.getOpenCommand(new Object[] { adesktop, item} );
((OpenCommand)open).executeModeless();

 

  • Нравится 1
Link to post
Share on other sites
alexeytur
2 минуты назад, lexx174 сказал:

как раз таки вкладка - это вовсе не излишне,это по сути команда Открыть. или отправить в Мой тимцентр.

 


AIFDesktop adesktop = AIFUtility.getAIFPortal().getDesktopManager().getActiveDesktop();
AbstractAIFCommand open = session.getOpenCommand(new Object[] { adesktop, item} );
((OpenCommand)open).executeModeless();

 

Спасибо, завтра попробую.

Link to post
Share on other sites
butulec
3 часа назад, lexx174 сказал:

как раз таки вкладка - это вовсе не излишне,это по сути команда Открыть. или отправить в Мой тимцентр.

 


AIFDesktop adesktop = AIFUtility.getAIFPortal().getDesktopManager().getActiveDesktop();
AbstractAIFCommand open = session.getOpenCommand(new Object[] { adesktop, item} );
((OpenCommand)open).executeModeless();

 

У у меня кстати ранее был опыт с этим)

Это код для Файл-Открыть, у меня была проблема я хотел статус открыть в отдельной вкладке в моем тимцентре, так он открывал применяемость

То есть от открывает просто объект, если объект будет не Элемент вероятней всего он его не отправить в новую вкладку)

Я пользовался вот этим 

PerspectiveDefService s = new PerspectiveDefService();
s.activate();
IPerspectiveDef findByPerspectiveId = s.findByPerspectiveId("com.teamcenter.rac.ui.perspectives.navigatorPerspective");
findByPerspectiveId.openPerspective(new InterfaceAIFComponent[] { (InterfaceAIFComponent)comp });

 

  • Нравится 1
Link to post
Share on other sites
butulec
10 часов назад, alexeytur сказал:

Добрый день!

Есть плагин для TC, он создает компонент, и связывает его с выделенным в интерфейсе элементом.

При этом созданный компонент появляется в псевдопапке под выделенным элементом.

 

Эта псевдопапка может быть свернута, можно ли её развернуть программно?

И как максимум, развернуть её и выделить новосозданный компонент?

 

IWorkbenchPart iWorkbenchPart = HandlerUtil.getActivePart(arg0);
        
         IStructuredViewerProvider iStructuredViewerProvider = (IStructuredViewerProvider)iWorkbenchPart;
          StructuredViewer structuredViewer = iStructuredViewerProvider.getViewer();
          final Display display = HandlerUtil.getActiveShellChecked(arg0).getDisplay();
            final ISelection paramISelection = HandlerUtil.getCurrentSelection(arg0);
            final TreeViewer treeViewer = (TreeViewer)structuredViewer;

          
          
          if (treeViewer != null) {
              TreeSelection treeSelection = (TreeSelection)AdapterUtil.getAdapter(paramISelection, TreeSelection.class);
              final TreePath[] selectedTreePaths = (treeSelection == null) ? null : treeSelection.getPaths();
              if (selectedTreePaths != null && selectedTreePaths.length > 0) {

                      ITreeContentProvider iTreeContentProvider = (ITreeContentProvider)treeViewer.getContentProvider();
                      WorkspaceCommonContentProvider workspaceCommonContentProvider = (iTreeContentProvider instanceof WorkspaceCommonContentProvider) ? (WorkspaceCommonContentProvider)iTreeContentProvider : null;
                      byte b1 = 0;
                      int i = selectedTreePaths.length;
                      TreePath[] arrayOfTreePath;
                      int j = (arrayOfTreePath = selectedTreePaths).length;
                      for (byte b2 = 0; b2 < j; b2++) {
                        TreePath treePath1 = arrayOfTreePath[b2];
                        TreePath treePath2 = treePath1;
                        Object object = treePath1.getLastSegment();
                        if (object != null) {
                          String str = object.toString();
                         TCComponentContentProvider tCComponentContentProvider = null;
                         if (workspaceCommonContentProvider != null) {
                            ITreeContentProvider iTreeContentProvider1 = workspaceCommonContentProvider.getDelegateContentProvider(object);
                            if (iTreeContentProvider1 instanceof TCComponentContentProvider)
                              tCComponentContentProvider = (TCComponentContentProvider)iTreeContentProvider1; 
                          } else if (iTreeContentProvider instanceof TCComponentContentProvider) {
                            tCComponentContentProvider = (TCComponentContentProvider)iTreeContentProvider;
                          } 
                          if (tCComponentContentProvider != null)
                            tCComponentContentProvider.setSyncLoadSwitch(true); 
                          try {
                            LinkedList<TreePath> linkedList = new LinkedList();
                            linkedList.addFirst(treePath2);
                            byte b = -1;
                            byte b3 = 0;
                            byte b4 = 0;
                           
                            while (!linkedList.isEmpty()) {
                              if (b != -1 && ++b3 >= b)
                                break; 
                              int k = linkedList.size();
                              Object[] arrayOfObject = { str, Integer.valueOf(b3), Integer.valueOf(b4) };

                              byte b5 = 50;
                              final ArrayList<TreePath> arrayList = new ArrayList();
                              for (int m = 0; m < k; m += b5) {
                                arrayList.clear();
                                for (byte b6 = 0; b6 < b5; b6++) {
                                  int n = m + b6;
                                  if (n >= k)
                                    break; 
                                  arrayList.add(linkedList.get(n));
                                  
                                } 
                                Runnable runnable = new Runnable() {
                                    public void run() {
                                      for (TreePath treePath : arrayList)
                                        treeViewer.setExpandedState(treePath, true); 
                                    }
                                  };
                                display.syncExec(runnable);
                              } 
                              String str2 = MessageFormat.format(Messages.ExpandCollapseHandler_AccessNthLevel, arrayOfObject);
                              final LinkedList<TreePath> linkedList1 = new LinkedList();
                              for (TreePath treePath : linkedList) {
                                b4++;
                                IStatus iStatus = expandByTreePath(treeViewer, iTreeContentProvider, treePath, -1, 1, linkedList1,display);

                                Object object11 = treePath.getLastSegment();

                                  Object[] arrayOfObject11 = iTreeContentProvider.getChildren(object);
                                  byte b11 = (byte) ((arrayOfObject == null) ? 0 : arrayOfObject.length);
                                  if (b!=-1)
                                    for (byte b111 = 0; b111 < b; b111++) {
                                      Object object111 = arrayOfObject[b1];
                                      if (object111 != null) {
                                        if (!cyclicReference(object111, treePath)) {
                                          TreePath treePath11 = treePath.createChildPath(object111);
                                          if(treePath11.getLastSegment().toString().indexOf("View")!=-1){
                                              linkedList1.addLast(treePath);
                                          Runnable runnable = new Runnable() {
                                              public void run() {
                                                for (TreePath treePath : linkedList1)
                                                  treeViewer.setExpandedState(treePath, true); 
                                              }
                                            };
                                          display.syncExec(runnable);
                                          }
                                        } 
                                      } 
                                    }  
                                
                              
                              } 
                              linkedList = linkedList1;
                            } 
                          } finally {
                            if (tCComponentContentProvider != null)
                              tCComponentContentProvider.setSyncLoadSwitch(false); 
                          } 
                          if (tCComponentContentProvider != null)
                            tCComponentContentProvider.setSyncLoadSwitch(false); 
                        } 
                      } 


              } 
            } 

Вот из декомпиляции подправленный)

Вместо View отношения напишите свое...и не нашел пока как ISelection сделать для этого объекта, но думаю там все просто, от treeview идем у него и метод есть нужный

Link to post
Share on other sites
alexeytur
13 часов назад, lexx174 сказал:

как раз таки вкладка - это вовсе не излишне,это по сути команда Открыть. или отправить в Мой тимцентр.

 


AIFDesktop adesktop = AIFUtility.getAIFPortal().getDesktopManager().getActiveDesktop();
AbstractAIFCommand open = session.getOpenCommand(new Object[] { adesktop, item} );
((OpenCommand)open).executeModeless();

 

 

10 часов назад, butulec сказал:

У у меня кстати ранее был опыт с этим)

Это код для Файл-Открыть, у меня была проблема я хотел статус открыть в отдельной вкладке в моем тимцентре, так он открывал применяемость

То есть от открывает просто объект, если объект будет не Элемент вероятней всего он его не отправить в новую вкладку)

Я пользовался вот этим 


PerspectiveDefService s = new PerspectiveDefService();
s.activate();
IPerspectiveDef findByPerspectiveId = s.findByPerspectiveId("com.teamcenter.rac.ui.perspectives.navigatorPerspective");
findByPerspectiveId.openPerspective(new InterfaceAIFComponent[] { (InterfaceAIFComponent)comp });

 

 

 

Спасибо, эти способы работают.

Link to post
Share on other sites
alexeytur
6 часов назад, butulec сказал:

 


IWorkbenchPart iWorkbenchPart = HandlerUtil.getActivePart(arg0);
        
         IStructuredViewerProvider iStructuredViewerProvider = (IStructuredViewerProvider)iWorkbenchPart;
          StructuredViewer structuredViewer = iStructuredViewerProvider.getViewer();
          final Display display = HandlerUtil.getActiveShellChecked(arg0).getDisplay();
            final ISelection paramISelection = HandlerUtil.getCurrentSelection(arg0);
            final TreeViewer treeViewer = (TreeViewer)structuredViewer;

          
          
          if (treeViewer != null) {
              TreeSelection treeSelection = (TreeSelection)AdapterUtil.getAdapter(paramISelection, TreeSelection.class);
              final TreePath[] selectedTreePaths = (treeSelection == null) ? null : treeSelection.getPaths();
              if (selectedTreePaths != null && selectedTreePaths.length > 0) {

                      ITreeContentProvider iTreeContentProvider = (ITreeContentProvider)treeViewer.getContentProvider();
                      WorkspaceCommonContentProvider workspaceCommonContentProvider = (iTreeContentProvider instanceof WorkspaceCommonContentProvider) ? (WorkspaceCommonContentProvider)iTreeContentProvider : null;
                      byte b1 = 0;
                      int i = selectedTreePaths.length;
                      TreePath[] arrayOfTreePath;
                      int j = (arrayOfTreePath = selectedTreePaths).length;
                      for (byte b2 = 0; b2 < j; b2++) {
                        TreePath treePath1 = arrayOfTreePath[b2];
                        TreePath treePath2 = treePath1;
                        Object object = treePath1.getLastSegment();
                        if (object != null) {
                          String str = object.toString();
                         TCComponentContentProvider tCComponentContentProvider = null;
                         if (workspaceCommonContentProvider != null) {
                            ITreeContentProvider iTreeContentProvider1 = workspaceCommonContentProvider.getDelegateContentProvider(object);
                            if (iTreeContentProvider1 instanceof TCComponentContentProvider)
                              tCComponentContentProvider = (TCComponentContentProvider)iTreeContentProvider1; 
                          } else if (iTreeContentProvider instanceof TCComponentContentProvider) {
                            tCComponentContentProvider = (TCComponentContentProvider)iTreeContentProvider;
                          } 
                          if (tCComponentContentProvider != null)
                            tCComponentContentProvider.setSyncLoadSwitch(true); 
                          try {
                            LinkedList<TreePath> linkedList = new LinkedList();
                            linkedList.addFirst(treePath2);
                            byte b = -1;
                            byte b3 = 0;
                            byte b4 = 0;
                           
                            while (!linkedList.isEmpty()) {
                              if (b != -1 && ++b3 >= b)
                                break; 
                              int k = linkedList.size();
                              Object[] arrayOfObject = { str, Integer.valueOf(b3), Integer.valueOf(b4) };

                              byte b5 = 50;
                              final ArrayList<TreePath> arrayList = new ArrayList();
                              for (int m = 0; m < k; m += b5) {
                                arrayList.clear();
                                for (byte b6 = 0; b6 < b5; b6++) {
                                  int n = m + b6;
                                  if (n >= k)
                                    break; 
                                  arrayList.add(linkedList.get(n));
                                  
                                } 
                                Runnable runnable = new Runnable() {
                                    public void run() {
                                      for (TreePath treePath : arrayList)
                                        treeViewer.setExpandedState(treePath, true); 
                                    }
                                  };
                                display.syncExec(runnable);
                              } 
                              String str2 = MessageFormat.format(Messages.ExpandCollapseHandler_AccessNthLevel, arrayOfObject);
                              final LinkedList<TreePath> linkedList1 = new LinkedList();
                              for (TreePath treePath : linkedList) {
                                b4++;
                                IStatus iStatus = expandByTreePath(treeViewer, iTreeContentProvider, treePath, -1, 1, linkedList1,display);

                                Object object11 = treePath.getLastSegment();

                                  Object[] arrayOfObject11 = iTreeContentProvider.getChildren(object);
                                  byte b11 = (byte) ((arrayOfObject == null) ? 0 : arrayOfObject.length);
                                  if (b!=-1)
                                    for (byte b111 = 0; b111 < b; b111++) {
                                      Object object111 = arrayOfObject[b1];
                                      if (object111 != null) {
                                        if (!cyclicReference(object111, treePath)) {
                                          TreePath treePath11 = treePath.createChildPath(object111);
                                          if(treePath11.getLastSegment().toString().indexOf("View")!=-1){
                                              linkedList1.addLast(treePath);
                                          Runnable runnable = new Runnable() {
                                              public void run() {
                                                for (TreePath treePath : linkedList1)
                                                  treeViewer.setExpandedState(treePath, true); 
                                              }
                                            };
                                          display.syncExec(runnable);
                                          }
                                        } 
                                      } 
                                    }  
                                
                              
                              } 
                              linkedList = linkedList1;
                            } 
                          } finally {
                            if (tCComponentContentProvider != null)
                              tCComponentContentProvider.setSyncLoadSwitch(false); 
                          } 
                          if (tCComponentContentProvider != null)
                            tCComponentContentProvider.setSyncLoadSwitch(false); 
                        } 
                      } 


              } 
            } 

Вот из декомпиляции подправленный)

Вместо View отношения напишите свое...и не нашел пока как ISelection сделать для этого объекта, но думаю там все просто, от treeview идем у него и метод есть нужный

 

Пытался скомпилить этот код, нет находит функций expandByTreePath и cyclicReference. И что подставлять в arg0?

 

Link to post
Share on other sites
butulec
4 часа назад, alexeytur сказал:

 

Пытался скомпилить этот код, нет находит функций expandByTreePath и cyclicReference. И что подставлять в arg0?

 

arg0 это из public Object execute(ExecutionEvent arg0) throws ExecutionException  или у вас не по кнопке?

              TreeSelection treeSelection = (TreeSelection)AdapterUtil.getAdapter(paramISelection, TreeSelection.class);
              final TreePath[] selectedTreePaths = (treeSelection == null) ? null : treeSelection.getPaths();
              if (selectedTreePaths != null && selectedTreePaths.length > 0) {

                      ITreeContentProvider iTreeContentProvider = (ITreeContentProvider)treeViewer.getContentProvider();
                      WorkspaceCommonContentProvider workspaceCommonContentProvider = (iTreeContentProvider instanceof WorkspaceCommonContentProvider) ? (WorkspaceCommonContentProvider)iTreeContentProvider : null;
                      byte b1 = 0;
                      int i = selectedTreePaths.length;
                      TreePath[] arrayOfTreePath;
                      int j = (arrayOfTreePath = selectedTreePaths).length;
                      for (byte b2 = 0; b2 < j; b2++) {
                        TreePath treePath1 = arrayOfTreePath[b2];
                        TreePath treePath2 = treePath1;
                        Object object = treePath1.getLastSegment();
                        if (object != null) {
                          String str = object.toString();
                         TCComponentContentProvider tCComponentContentProvider = null;
                         if (workspaceCommonContentProvider != null) {
                            ITreeContentProvider iTreeContentProvider1 = workspaceCommonContentProvider.getDelegateContentProvider(object);
                            if (iTreeContentProvider1 instanceof TCComponentContentProvider)
                              tCComponentContentProvider = (TCComponentContentProvider)iTreeContentProvider1; 
                          } else if (iTreeContentProvider instanceof TCComponentContentProvider) {
                            tCComponentContentProvider = (TCComponentContentProvider)iTreeContentProvider;
                          } 
                          if (tCComponentContentProvider != null)
                            tCComponentContentProvider.setSyncLoadSwitch(true); 
                          try {
                            LinkedList<TreePath> linkedList = new LinkedList();
                            linkedList.addFirst(treePath2);
                            byte b = -1;
                            byte b3 = 0;
                            byte b4 = 0;
                           
                            while (!linkedList.isEmpty()) {
                              if (b != -1 && ++b3 >= b)
                                break; 
                              int k = linkedList.size();
                              Object[] arrayOfObject = { str, Integer.valueOf(b3), Integer.valueOf(b4) };

                              byte b5 = 50;
                              final ArrayList<TreePath> arrayList = new ArrayList();
                              for (int m = 0; m < k; m += b5) {
                                arrayList.clear();
                                for (byte b6 = 0; b6 < b5; b6++) {
                                  int n = m + b6;
                                  if (n >= k)
                                    break; 
                                  arrayList.add(linkedList.get(n));
                                  
                                } 
                                Runnable runnable = new Runnable() {
                                    public void run() {
                                      for (TreePath treePath : arrayList)
                                        treeViewer.setExpandedState(treePath, true); 
                                    }
                                  };
                                display.syncExec(runnable);
                              } 
                              String str2 = MessageFormat.format(Messages.ExpandCollapseHandler_AccessNthLevel, arrayOfObject);
                              final LinkedList<TreePath> linkedList1 = new LinkedList();
                              for (TreePath treePath : linkedList) {
                                b4++;
                               
                                Object object0 = treePath.getLastSegment();

                                  Object[] arrayOfObject0 = iTreeContentProvider.getChildren(object0);
                                  byte b0 = (byte) ((arrayOfObject0 == null) ? 0 : arrayOfObject0.length);
                                  if (b0!=-1)
                                    for (byte b10 = 0; b10 < b0; b10++) {
                                      Object object10 = arrayOfObject0[b10];
                                      if (object10 != null) {
                                          TreePath treePath0 = treePath.createChildPath(object10);
                                          if(treePath0.getLastSegment().toString().indexOf("View")!=-1){
                                              linkedList1.addLast(treePath0);
                                          Runnable runnable = new Runnable() {
                                              public void run() {
                                                for (TreePath treePath0 : linkedList1)
                                                  treeViewer.setExpandedState(treePath0, true); 
                                              }
                                            };
                                          display.syncExec(runnable);
                                          }
                                         
                                      } 
                                    }  
                                 
                                  } 
                              linkedList = linkedList1;
                            } 
                          } finally {
                            if (tCComponentContentProvider != null)
                              tCComponentContentProvider.setSyncLoadSwitch(false); 
                          } 
                          if (tCComponentContentProvider != null)
                            tCComponentContentProvider.setSyncLoadSwitch(false); 
                        } 
                      } 


              } 
            

 

Link to post
Share on other sites
alexeytur
12 минут назад, butulec сказал:

arg0 это из public Object execute(ExecutionEvent arg0) throws ExecutionException

Понятно.

 

Остался вопрос по функциям  expandByTreePath и cyclicReference, где они находятся?

Link to post
Share on other sites
butulec
3 минуты назад, alexeytur сказал:

Понятно.

 

Остался вопрос по функциям  expandByTreePath и cyclicReference, где они находятся?

посмотрите, я убрал, вывел из функций, у меня все работает)

Это просто из декомпилированных плагинов, можно все собрать в маленький код, просто надо рефакторингом заняться, а времени нет)

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • TBC
      Продолжаем свое движение к триллионам Индустрии 4.0. Конкуренты? А их нет и не будет. We continue our movement towards the trillions of Industry 4.0. Competitors? And they are not and will not be.Вот ролик новый сделал по врезерно-сверлильному кибер-технологу. https://youtu.be/lLl87HdYbakЕсли уж по токарному никто мне вызов не сделал, то по фрезерно-сверлильному я даже и теоретически не допускаю, что кто то на планете мне сможет это сделать.Схожу за продуктами и если появятся какие то новые мыли по этой публикации продолжу чуть позже.Вот по поводу моего плана сделать из технологов РФ собственников, которые бы создавали свой собственный бизнес в Сети и проникали с ним на рынки других стран. Если ваш начальник самодур, как у меня был на Идель Нефтемаш г-н Кузнецоы Н.И. и считает, что вы принадлежите ему целиком и полностью, раз работаете у него, то тогда да, тогда будет тяжело это все организовать. Но и в этих условиях можно готовить свой бизнес. Вы же имеете свободное время, вот в это время и работайте на себя и свое будущее, а не на дядю. Тем более, будущее с дядей, вызывает большие сомнения в том, что оно будет улучшаться год от года. Скорее наоборот. Но может так быть, что вашего начальника будет интересовать потенциальная выгода, которую он получит, если вы начнете оцифровывать, так скажем, свои знания и сделаете в конце концов его производство более эффективным и конкурентоспособным. Тогда вам повезло. В любом случае в этом направлении двигаться придется. Никакого другого пути просто нет. А если зазеваетесь, ничего хорошего вас и ваше предприятие не ждет. Кстати на том же Идель Нефтемаш, я проработал полтора года, пока у некоторых не возникло желание как то отжать моии знания, которые я копил многие годы, что вынудило меня уволиться. Так вот, я там каждый день приносил с собой свой нетбук, на нем и работал, мне так и не дали ПК. Но программы я им при увольнениии все оставил, которые успел создать.
    • РоманВ
      Растаскиваешь точки в стороны, а потом с зажатым Ctrl выбираешь одну и другую.
    • AKLion
      Там всё просто концевик нужно переключать при повороте кулачка
    • BSV1
      Нет, @Чингачгук . Это Ваше без роуча. Неужели не признали? 
    • Waldemar Do
      Здравствуйте, уважаемые Господа ! Поделитесь пожалуйста опытом и ценными соображениями: есть  набор маркироввочного инструмента ShetMarker для револьверного пресса. Нужно чтобы он мог  гравировать (царапать)  листовой материал  - как его  собрать ? - для чего там разноцветные пружины и пара серых металлических цилиндров ?                                        Самое главное - как его запрограммировать :  режим SCRIBE  с цифрой 1- engraving - или другой из прилагаемого списка ?  Спасибо.
    • malvi.dp
      ПКМ на нужном элементе - выбрать другой. В раскрывшемся списке выбираете, что нужно
    • gudstartup
      Сфотографируйте на вашем eprom модуле бумажные наклейки это нужно чтобы определить тип модуля и расположение микросхем где 1 где последняя а затем создать из их содержимого PCP файл но все таки я думаю что до этого не дойдет и сименс вам протянет руку помощи!
    • Чингачгук
      я тебе покажу городскую воздушную мобильность  
    • BSV1
      В ТФ возможно как средствами самой программы, так и средствами PDM (если она есть). Варианты   Может в 17-ой еще что-то добавили, но я  пока не в курсе.
    • RedCuc
      Возникли 2 вопроса касаемо ТБ. 1 - почему иногда при добавлении крепежа в отверстие он поворачивается вокруг своей оси? Отверстия сделаны через "Отверстие под крепеж". 2 - как правильно сделать группу крепежа (болт+шайба в верхнем уровне и шайба+гровер+гайка в нижнем уровне)?  
×
×
  • Create New...