Совет по миграции: 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. После небольшого исследования я обнаружил, что изменился шаблон по-умолчанию
Полезный вспомогательный класс для выбора двух элементов
Вчера мы обсуждали как создать размер между центрами семейств. Код команды, переведённый в том примере, довольно небольшой.
Это обусловлено тем, что я использовал новый вспомогательный класс JtPairPicker, который помогает выбрать два элемента в модели.
Его можно использовать везде, где вам нужно автоматически или интерактивно в модели выбрать два элемента одного типа.
Создание размера между центрами семейств
Вопрос: Я знаю, как создать размер между гранями двух семейств.
А как можно создать размер между центрами этих семейств?
Лёгкое программирование под Autodesk Vault Часть 47
Лёгкое программирование под Autodesk Vault Часть 46
Лёгкое программирование под Autodesk Vault Часть 45
Лёгкое программирование под Autodesk Vault Часть 44
Лёгкое программирование под Autodesk Vault Часть 43
Как получить все уровни, упорядоченные по высоте
Вопрос: Как я могу получить коллекцию уровней, отсортированную по высоте уровня? Пока что мне кажется, что FilteredElementCollector возвращает IEnumerable и его можно отсортировать с помощью OrderBy, затем, вызвав метод ToElementIds(), то будет создан набор идентификаторов, в уже нужном порядке. Верно?
Вот код, который я попробовал. Он не работает:
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();
Кто-то может мне подсказать, что я делаю не так?
Проблема с экспортом в Navisworks
Вопрос: Я пишу надстройку, в которой мне надо экспортировать модель.
Проблема в том, что тот же самый код работал замечательно в Revit 2014, но в 2015 диалог экспорта в NWC просто зависает.
Кто-нибудь знает, что за изменения были сделаны в методе Document.Export, что он теперь не работает в новой версии?
Ответ: Я попробовал экспортировать модель в NWC как в 2014 Revit так и в 2015 Revit с помощью простенького кода. В обоих случаях не возникло никаких проблем. Можете предоставить код, в котором вы делаете экспорт? Кстати сначала я столкнулся с проблемой, что в Revit 2015 не было возможности экспорта в Navisworks, но после того как я это исправил, диалог с экспортом появился и модель была экспортирована, как и ожидалось.
Использование групп транзакций для освобождения элементов без сохранения или синхронизации
Вопрос: У меня есть файл, открытый в Revit и который я изменяю своей надстройкой. Могу ли я программно закрыть файл без синхронизации, сохранения и оставления элементов заимствованными текущим пользователем?
Есть возможность освободить не редактированные элементы с помощью метода WorksharingUtils.RelinquishOwnership. Но этот метод не освобождает редактируемые элементы.
Документация к методу Document.Close также не содержит информации о том, как освободить элементы.
Есть ли какой-нибудь способ добиться желаемого результата, без сохранения или повторного открытия той же самой модели?
Сохранение семейства после его редактирования с помощью FamilyManager
Вопрос: Мы разрабатываем надстройку, в которой мы выгружаем файлы семейства в базу данных.
Сначала мы добавляем в семейство несколько общих параметров с помощью метода FamilyManager.AddParameter().
Все работает неплохо, до тех пор, пока мы не вызываем метод UploadOriginal в котором мы пытаемся сохранить измененное семейство в файл:
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 );
// остальной код...
Что может являться причиной этой ошибки?
Переименование общего параметра
Вопрос: Как можно переименовать общий параметр, который уже используется в проекте или семействе? Мне нужно сохранить его идентификатор, только изменить название параметра.
Сохранение порядка отрисовки примитивов при операции клонирования блоков
WblockClone API не гарантирует сохранение порядка отрисовки примитивов (DrawOrder) при клонировании блоков, т.к. операция WblockClone – это очень низкоуровневая операция, которая только копирует примитивы. Так что программисту придется самому позаботится о сохранении порядка отрисовки примитивов в блоке при его клонировании.Связывание клавиши помощи F1 с кнопкой на Ленте
Вопрос:Я хотел бы, чтобы показывался мой chm-файл при нажатии клавиши F1 когда в подсказке кнопки на ленте появляется сообщение "Нажмите F1 для получения дополнительной справки.". Можно посмотреть пример как это сделать?
Ответ:
Свойства "HelpSource" и "HelpTopic" класса RibbonItem должны быть установлены для того, чтобы AutoCAD показал ваш chm-файл. "HelpSource" - это Uri к chm-файлу, а "HelpTopic" – это идентификатор темы (topic id) страницы в chm-файле.
Ниже кусок кода. Вы должны изменить строки "HelpSource" и "HelpTopic" для указания chm-файла у вас в системе и идентификатора темы в нём. Так же не забудьте подключить "AdWindows.dll" к своему проекту.