Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Inventor API / Re: 2D эскиз детали из сборки
« Последний ответ от Elfilagas 15-11-2018, 10:39:41 »
Удалось собрать что-то рабочее по основной задаче.
Осталась последняя проблема, как раз вот эта - при наличии элемента в сборке, задевающего деталь, на этой детали не рисуется эскиз. Подавление этих отверстий в сборке не помогает.
Была идея исключать эти детали из элемента, выполнять эскиз, потом включать обратно, но у этого решения есть несколько недостатков. Во первых придется сперва выбирать деталь, проверять и исключать из всех элементов, а затем выбирать плоскость эскиза. А второе это то, что элемент удаляется при отсутствии в нем деталей обрабатываемых в сборе, и в случае если в элементе присутствует только одна эта деталь придется добавлять любую деталь из сборки в качестве "заглушки", а потом возвращать все обратно, после отрисовки эскиза. И такое решение кажется слишком "костыльным".
Может что-то еще посоветуете попробовать?
2
Revit API / Re: Ширина DockablePane
« Последний ответ от Александр Игнатович 14-11-2018, 17:01:35 »
Нет, к сожалению, не получилось. с помощью SetupDockablePane можно задать только изначальные параметры, затем всё это изменяется динамически и Revit сохраняет эти данные даже между перезапусками. Официального способа управлять у нас нет, но чисто теоретически можно попробовать с помощью WinAPI, правда, у меня не получилось.

В самом UserControl получал hwnd:
Код - C# [Выбрать]
  1. var hwndSource = (HwndSource)PresentationSource.FromVisual(this);

Дальше с помощью
Код - C# [Выбрать]
  1. [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
  2. private static extern IntPtr GetParent(IntPtr hWnd);

добирался до Docking View (Закрепленный вид):
Код - C# [Выбрать]
  1. return GetParent(GetParent(GetParent(hwndSource.Handle)));

Здесь можно поисследовать с помощью утилиты Microsoft Spy++, её можно поставить вместе с Visual Studio

Успешно получал его размеры:

Код - C# [Выбрать]
  1. [DllImport("user32.dll")]
  2. private static extern long GetWindowRect(IntPtr hWnd, ref Rectangle lpRect);

Дальше пытался с помощью:
Код - C# [Выбрать]
  1. [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
  2. private static extern IntPtr SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
  3.  
  4.  
  5. const short SWP_NOMOVE = 0X2;
  6. const short SWP_NOSIZE = 1;
  7. const short SWP_NOZORDER = 0X4;
  8. const int SWP_SHOWWINDOW = 0x0040;
  9.  

пытался поменять ширину
Код - C# [Выбрать]
  1. SetWindowPos(hWnd, IntPtr.Zero, rect.X, rect.Y, rect.Width + 50, rect.Height, SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW);

но без особого эффекта.

Еще поковырял AdWindows и PresentationFramework, но тоже ничего толкового не нашёл :-(
3
Revit API / Re: Не копируется группа методом .CopyElements
« Последний ответ от Pabloa 14-11-2018, 16:56:14 »
Ясно, спасибо, попробую скопировать с вида на вид, может получится)
4
Да, DetailLine специфичный для вида. Насколько помню, указанный метод для копирования элементов поддерживает копирование между видами из разных документов.
В справке
Цитировать
The destination view can be in the same document as the source view.

Can be, а может и не быть)
5
Revit API / Re: Не копируется группа методом .CopyElements
« Последний ответ от Pabloa 14-11-2018, 16:33:21 »
Ну так в описании ошибки конкретно указано, что некоторые элементы специфичны для вида, т.е., например, аннотации, тексты, размеры и т.д. Есть метод
Код - C# [Выбрать]

    public static ICollection<ElementId> CopyElements(
            View sourceView,
            ICollection<ElementId> elementsToCopy,
            View destinationView,
            Transform additionalTransform,
            CopyPasteOptions options
    )


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

На счет CopyElements, мне нужно копировать из документа в документ, а CopyElements, как я понимаю, копирует в одном документе с вида на вид.
Попробовал разбить группу и скопировать отдельный элемент - одну линию (DetailLine) - выдает ту же ошибку. То есть как я понимаю, линия - это специфичный элемент и его нельзя скопировать из документа в документ (копирую из семейства  категории "Типовая Аннотация" в такое же семейство)?
6
Ну так в описании ошибки конкретно указано, что некоторые элементы специфичны для вида, т.е., например, аннотации, тексты, размеры и т.д. Есть метод
Код - C# [Выбрать]
  1. public static ICollection<ElementId> CopyElements(
  2.         View sourceView,
  3.         ICollection<ElementId> elementsToCopy,
  4.         View destinationView,
  5.         Transform additionalTransform,
  6.         CopyPasteOptions options
  7. )

для копирования между видами. Возможно, лучшим решением будет копировать элементы, содержащиеся в группе, и затем их в новом документе уже пересобирать обратно в группу
7
Revit API / Не копируется группа методом .CopyElements
« Последний ответ от Pabloa 14-11-2018, 16:08:07 »
Добрый день, подскажите пожалуйста, я хочу скопировать группу из одного сем-ва в другое. Но при копировании выдается исключение "Some of the elements cannot be copied, because they are view-specific". В чем может быть ошибка?

Код - C# [Выбрать]
  1. public void copy_group(Document familyDoc,                        
  2.                        Document  familyDoc2,
  3.                        int id_group)
  4.         {
  5.             ElementId el_id = familyDoc2.GetElement(new ElementId(id_group)).Id;
  6.             ICollection<ElementId> Coll = new Collection<ElementId>();  
  7.             Coll.Add(el_id);
  8.             using (Transaction t = new Transaction(familyDoc, "Ред. сем."))
  9.             {
  10.                 t.Start();
  11.                 //копирование группы(здесь ошибка)
  12.                 ElementTransformUtils.CopyElements(familyDoc2,
  13.                                                    Coll,
  14.                                                    familyDoc,
  15.                                                    Transform.Identity,
  16.                                                    new CopyPasteOptions());
  17.                 t.Commit();
  18.             }            
  19.         }
  20.  
8
Задал этот вопрос в ADN DevHelp. Может быть у них найдётся ответ.
9
Revit API / Re: Как задать координаты объекту PolyLine
« Последний ответ от Алексей (IdeaSoft) 14-11-2018, 14:46:01 »
Все понял почему нельзя полилиния наследуется так
public class PolyLine : GeometryObject

10
Revit API / Re: Как задать координаты объекту PolyLine
« Последний ответ от Алексей (IdeaSoft) 14-11-2018, 14:37:47 »
Подскажите явно не получается преобразовать PolyLine в Curve

Код - C# [Выбрать]
  1. using RVT_DB = Autodesk.Revit.DB;
  2. RVT_DB.Curve crv = (RVT_DB.Curve)pl;

Возможно как-то по другому это сделать?
Страницы: [1] 2 3 ... 10