ADN Open CIS
Сообщество программистов Autodesk в СНГ

15/12/2014

Совет по миграции: ACAD2011\12 в 13\14\15

Этот совет связан не только с ACAD, но и с перспективами Visual Studio и будет полезен всем, кто использует шаблон CMap, где ключом является AcDbHandle&

CMap<AcDbHandle, AcDbHandle&, CString, CString> handleMap;

Я недавно получил запрос, когда программист получил сообщение об ошибке C2440: 'typecast' : cannot convert from 'AcDbHandle' to 'long' , хотя этот код прекрасно работает в компиляторе VS 90.0 compiler но дает ошибку в VS 100.0\110.0. После небольшого исследования я обнаружил, что изменился шаблон по-умолчанию

Опубликовано 15.12.2014     Читать далее >>>
14/12/2014

Полезный вспомогательный класс для выбора двух элементов

Вчера мы обсуждали как создать размер между центрами семейств. Код команды, переведённый в том примере, довольно небольшой.

Это обусловлено тем, что я использовал новый вспомогательный класс JtPairPicker, который помогает выбрать два элемента в модели.

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

Опубликовано 14.12.2014     Читать далее >>>
13/12/2014

Создание размера между центрами семейств

Вопрос: Я знаю, как создать размер между гранями двух семейств.

А как можно создать размер между центрами этих семейств?

Опубликовано 13.12.2014     Читать далее >>>
29/11/2014

Как получить все уровни, упорядоченные по высоте

Вопрос: Как я могу получить коллекцию уровней, отсортированную по высоте уровня? Пока что мне кажется, что FilteredElementCollector возвращает IEnumerable и его можно отсортировать с помощью OrderBy, затем, вызвав метод ToElementIds(), то будет создан набор идентификаторов, в уже нужном порядке. Верно?

Вот код, который я попробовал. Он не работает:

Код - C#: [Выделить]
  UIDocument uiDoc = this.ActiveUIDocument;

  Document doc = uiDoc.Document;

 

  FilteredElementCollector levCollector

    = new FilteredElementCollector( doc );

 

  ICollection<Element> levelsCollection

    = levCollector.OfClass( typeof( Level ) )

      .OrderBy( lev => lev.Elevation )

      .ToElementIds();

Кто-то может мне подсказать, что я делаю не так?

Опубликовано 29.11.2014     Читать далее >>>
28/11/2014

Проблема с экспортом в Navisworks

Вопрос: Я пишу надстройку, в которой мне надо экспортировать модель.

Проблема в том, что тот же самый код работал замечательно в Revit 2014, но в 2015 диалог экспорта в NWC просто зависает.

Кто-нибудь знает, что за изменения были сделаны в методе Document.Export, что он теперь не работает в новой версии?

Ответ: Я попробовал экспортировать модель в NWC как в 2014 Revit так и в 2015 Revit с помощью простенького кода. В обоих случаях не возникло никаких проблем. Можете предоставить код, в котором вы делаете экспорт? Кстати сначала я столкнулся с проблемой, что в Revit 2015 не было возможности экспорта в Navisworks, но после того как я это исправил, диалог с экспортом появился и модель была экспортирована, как и ожидалось.

Опубликовано 28.11.2014     Читать далее >>>
27/11/2014

Использование групп транзакций для освобождения элементов без сохранения или синхронизации

Вопрос: У меня есть файл, открытый в Revit и который я изменяю своей надстройкой. Могу ли я программно закрыть файл без синхронизации, сохранения и оставления элементов заимствованными текущим пользователем?

 

Есть возможность освободить не редактированные элементы с помощью метода WorksharingUtils.RelinquishOwnership. Но этот метод не освобождает редактируемые элементы.

Документация к методу Document.Close также не содержит информации о том, как освободить элементы.

Есть ли какой-нибудь способ добиться желаемого результата, без сохранения или повторного открытия той же самой модели?

Опубликовано 27.11.2014     Читать далее >>>
26/11/2014

Сохранение семейства после его редактирования с помощью FamilyManager

Вопрос: Мы разрабатываем надстройку, в которой мы выгружаем файлы семейства в базу данных.

 

Сначала мы добавляем в семейство несколько общих параметров с помощью метода FamilyManager.AddParameter().

Все работает неплохо, до тех пор, пока мы не вызываем метод UploadOriginal в котором мы пытаемся сохранить измененное семейство в файл:

Код - C#: [Выделить]
  string path = Path.GetTempPath();

  string name = family.Name;

  string fName = name + ".rfa";

  string fPath = path + fName;

 // Revit выбрасывает исключение на этой строчке

// С описанием, что семейство не редактируемое.

// Почему так?

// Чтобы выгрузить семейство, мне его нужно сохранить предварительно,

// но мешает ошибка.

  Document famDoc = doc.EditFamily( family );

  famDoc.SaveAs( fPath );

  famDoc.Close( false );

 

  // остальной код...

Что может являться причиной этой ошибки?

Опубликовано 26.11.2014     Читать далее >>>
24/11/2014

Переименование общего параметра

Вопрос: Как можно переименовать общий параметр, который уже используется в проекте или семействе? Мне нужно сохранить его идентификатор, только изменить название параметра.

Опубликовано 24.11.2014     Читать далее >>>
24/11/2014

Сохранение порядка отрисовки примитивов при операции клонирования блоков

WblockClone API не гарантирует сохранение порядка отрисовки примитивов (DrawOrder) при клонировании блоков, т.к. операция WblockClone – это очень низкоуровневая операция, которая только копирует примитивы. Так что программисту придется самому позаботится о сохранении порядка отрисовки примитивов в блоке при его клонировании.
Опубликовано 24.11.2014     Читать далее >>>
22/11/2014

Связывание клавиши помощи F1 с кнопкой на Ленте

Вопрос:

Я хотел бы, чтобы показывался мой chm-файл при нажатии клавиши F1 когда в подсказке кнопки на ленте появляется сообщение "Нажмите F1 для получения дополнительной справки.". Можно посмотреть пример как это сделать?

Ответ:

Свойства "HelpSource" и "HelpTopic" класса RibbonItem должны быть установлены для того, чтобы AutoCAD показал ваш chm-файл. "HelpSource" - это Uri к chm-файлу, а "HelpTopic" – это идентификатор темы (topic id) страницы в chm-файле.

Ниже кусок кода. Вы должны изменить строки "HelpSource" и "HelpTopic" для указания chm-файла у вас в системе и идентификатора темы в нём. Так же не забудьте подключить "AdWindows.dll" к своему проекту.

Опубликовано 22.11.2014     Читать далее >>>