Forge, API и программирование – Русский – только для чтения
Задавайте вопросы и делитесь знаниями по Autodesk Forge и программированию на API программного обеспечения Autodesk
отмена
Отображаются результаты для 
Показать  только  | Вместо этого искать 
Вы имели в виду: 
Ответить
Сообщение 1 из 72
kart1984
7259 просмотров, 71 ответов

Revit API

Доброго времени суток!

Предлагаю в данной теме вести обсуждение Revit API. Сейчас готовлю статью для новичков, не только в АПИ Revit, но и впрограммировании тоже. Думаю со временем наберется русскоязычный материал для этой темы и обсуждений будет много... Некоторый материал и мои нароботки присутствуют на моем блоге.

Для начала дам общую информацию по дополнениям. Как они регистрируются в Revit.

Для регистрации дополнения используется файл манифест который находится в папке:

  • Если используется Windows XP: C:\Documents and Settings\All Users\Application Data\Autodesk\Revit\Addins\2011\
  • Если Windows 7: C:\ProgramData\Autodesk\Revit\Addins\2011\

 

Естественно если у вас Windows установлен на другом диске, то ищете папку там. Файл манифест имеет разширение *.addin.

Вот код, написанный в одном из моих файлов:

<?xml version="1.0" encoding="utf-8"?>
<RevitAddIns>
  <AddIn Type="Application">
    <Name>Editing</Name>
    <Assembly>C:\ProgramData\Autodesk\Revit\AddIns\2011\Editing.dll</Assembly>
    <AddInId>76eb700a-2c85-4888-a78d-31429ecae9ef</AddInId>
    <FullClassName>Editing.App</FullClassName>
  </AddIn>
  <AddIn Type="Command">
    <Assembly>C:\ProgramData\Autodesk\Revit\AddIns\2011\Editing.dll</Assembly>
    <AddInId>a9551912-c6e3-44a6-844d-e4d140c33916</AddInId>
    <FullClassName>Editing.Flipped</FullClassName>
    <Text>Антиотзеркаливание</Text>
    <Description>Возвращает отзеркаленным дверям заложеную в семействе ориентацию Право/лево</Description>
    <LongDescription>Описание</LongDescription>
    <AvailabilityClassName>Editing.Antimirror.FlippedAviability</AvailabilityClassName>
    <VisibilityMode>NotVisibleInFamily</VisibilityMode>
    <VisibilityMode>NotVisibleWhenNoActiveDocument</VisibilityMode>
    <LanguageType>Unknown</LanguageType>
  </AddIn>
</RevitAddIns>
Это не весь код, но я оставил основной. Я выделил цветом то, что нам может пригодиться. Как видно дополнения делятся на две категории. Это Application и Command. Дополнения типа Application запускаются сразу после старта Revit. Command  запускается при нажатии кнопки или выборе из списка дополнений во вкладке Надстройки. В тег Assembly у нас заключен путь к файлу дополнения. В теге FullClassName указан путь к классу, с которого стартует наше дополнение. AvailabilityClassName и VisibilityMode управляют доступностью к комманды в том или ином случае. Остальные теги относятся к описанию нашего дополнения.

Думаю для начала хватит.

 

С уважением
Артур Кураков
Теги (2)
71 ОТВЕТ 71
Сообщение 2 из 72
borissofff
в ответ: kart1984

Я могу только немного в HTML писать... но очень хочется попробовать, к Ревиту что то дописать!?

Может для чайников посоветуешь литературу, сайты, какие то может программы нужны в дополнение!?

Сообщение 3 из 72
kart1984
в ответ: borissofff

Даже не знаю... Я по мере надобности в справку смотрел. Учебников не покупал. 
Сейчас пишу статью как раз для чайников во всем в направлении АПИ Ревит. Первая часть не за горами )))) Чуть чуть потерпи...

С уважением
Артур Кураков
Сообщение 4 из 72
Andrey_Bushman
в ответ: borissofff

>Я могу только немного в HTML писать... но очень хочется попробовать, к Ревиту что то дописать!?

 

А я могу в ворде и в блокноте писать. Возьмёшь меня с собой?Подмигивающий

Чтобы писать под ревит, тебе сначала нужно будет изучить азы дотнета, а то ты такого "напишешь"... Можем устроить взаимовыгодное сотрудничество - ты меня учишь ревиту, а я тебя дотнету. Подмигивающий

 

Сообщение 5 из 72
kart1984
в ответ: kart1984

В 2012 версии теперь есть некоторые дополнения в процессе регистрации приложений. Появились новые теги <VendorId> и <VendorDescription>. Первый указывает идентификатор разработчика, который можно зарегистрировать тут. Ну а второй тег содержит описание этого идентификатора.

С уважением
Артур Кураков
Сообщение 6 из 72
Andrey_Bushman
в ответ: kart1984

Я в курсе 🙂

Сообщение 7 из 72
kart1984
в ответ: Andrey_Bushman

Адругие могут быть не в курсе )))))

С уважением
Артур Кураков
Сообщение 8 из 72
Dobrii_API
в ответ: kart1984

доброе время суток.

сейчас пытаюсь программно связывать файлы в revit.

получить путь к связанному файлу я нашел как. а вот как задать этот пenm программно. т.е. средствами API, как не знаю. вопрос в конечном итоге стоит такой. есть ли какой-то атрибут, которому можно присвоить путь к файлу. чтобы установить связь между файлами в revit?  

Сообщение 9 из 72
vite_
в ответ: kart1984

Здравствуйте!

 

В качестве тестового проекта, создал «RevitDevTV» по презентации http://download.autodesk.com/media/adn/Revit_2011_2012_DevTV_EN/Revit_2011_2012_DevTV_EN.html

 

В файле helloWorld.addin прописал:

 

helloWorld.addin

 

Атрибут AddInId равен идентификатору сборки GUID

При запуске Revit, выдает исключение:

 

External Tools

 

Что я сделал не так?

Сообщение 10 из 72
kart1984
в ответ: kart1984

Приветствую!

Вами показан пример файла манифеста для версии Revit 2011. В 2012 версии в файле манифесте так же требуется тег с vendorId.  Для теста стоит использовать ADNP
Выглядит это так:
 <VendorId>ADNP</VendorId>

Зарегистрировать свой символ можно здесь.

С уважением
Артур Кураков
Сообщение 11 из 72
vite_
в ответ: kart1984

Здравствуйте!

 

Я обновил «Revit 2012 SDK», в общем, все нормально, с этим разобрался.

Посмотрел, презентации http://www.youtube.com/view_play_list?p=815E042EB534D804, интересные возможности применения API.

Сообщение 12 из 72
Spyrite
в ответ: kart1984

Приветствую участников форума!

 

При программировании в среде Visual Studio 2010 на языке VB с использованием функционала Revit API у меня, как у начинающего программиста, возникла проблема.

 

Как показано в примерах, прилагаемых к справочной документации Revit SDK 2012, приложения, работающие в среде Revit создаются основе шаблона библиотеки классов (Class Library). Далее, эти приложения подключаются к Revit посредством манифеста (т.е. фаила *.addin) и вызываются соответствующей командой, расположенной на вкладке "Надстройки" (AddIns) панели инструментов Revit (на ленте).

 

Однако моя цель - это не дополнение к Revit, а отдельное, независимое приложение, имеющее свою собственную форму, скомпелированное в исполнительный файл, т.е. в фаил *.exe, которая в дополнение к функционалу API от другого ПО использует функционал Revit API. При попытке подключить динамические библиотеки RevitAPI.dll и RevitAPIUI.dll при помощи "Add Reference..." к проекту, созданному на основе шаблона "Windows Form Application", независимо от выбранного языка (C# или VB) Visual Studio в списке предупреждений констатирует следующее:

 

"Possible problem detected while building assembly 'имя моего проекта': Сборка "RevitAPI.dll", на которую даётся ссылка, предназначена для другого процессора"

 

Тоже самое и для RevitAPIUI.dll.

 

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

 

Так вот, собственно, вопрос: как быть? Существует ли вообще способ использовать Revit API вне самого Revit?

Сообщение 13 из 72
kart1984
в ответ: Spyrite

Приветствую!
Насколько я знаю такой возможности нет, так как эти две библиотеки являются грубо говоря переводчиками. То есть для их функционирования нужен запущеный Ревит. Как вариант можно предложить для вашего приложения создать ДЛЛ библиотеку, которая будет как мостик между Ревит и вашим приложением, но при этом для его работы должен быть запущен Ревит, иначе Ревитовская часть этой библиотеки попросту не будет работать.... 

С уважением
Артур Кураков
Сообщение 14 из 72
Spyrite
в ответ: kart1984

Спасибо за ответ!

 

Я рассматривал такой вариант с подключением уже скомпилированной библиотеки, в которой содержится необходимая для моего приложения revit'овская процедура. Но и здесь не всё так гладко: когда в программном коде начинаешь обращаться к именам классов из этой библиотеки, Visual Basic пишет:

 

"Reference required to assembly 'RevitAPIUI, Version=2012.0.0.0, Culture=neutral, PublicKeyToken=null' containing the implemented interface 'Autodesk.Revit.UI.IExternalCommand'. Add one to your project"

 

То есть он просит подключить те пресловутые RevitAPI.dll и RevitAPIUI.dll к моему проекту. Замкнутый круг. Я правда не пробовал отлаживать, но мне кажется результат будет тем же. А кроме того, я даже не знаю как обратиться к функции execute, которая является обязательной для интерфейса IExternalCommand и которая, собственно, и содержит мою процедуру. Точнее говоря какие аргументы в эту функцию положить: .execute(?,?,?).

 

Я так понимаю эта функция должна обрабатывать внешнюю команду, вызываемую пользователем. В случае, когда приложение встроено в Revit (через манифест, например), этой командой является как раз нажатие кнопочки на панели инструментов. По идее что-то подобное должно быть и в моём приложении. Но в первом случае нажатие кнопки - это обращение к классу ExternalCommandData (который, кстати, принадлежит RevitAPIUI.dll), а во втором - это событие. Нестыковка получается.

Сообщение 15 из 72
kart1984
в ответ: Spyrite

А вы пробовали в одном проекте (solution) с исполняемым файлом создать проект библиотеки и при компиляции этой библиотеки выполнить запуск Ревит. Когда вы подключаете уже скомпилированную библиотеку ему требуется чтоб Ревит уже был запущен. Просто пока нет возможности самому протестить, но как решение попробуйте.  Ну и конечно под это лучше подходит использовать интерфейс IExternalApplication. Этот класс будет сохраняться, пока запущен Revit. Его ссылку просто нужно сохранить и затем передать вашему приложению.

С уважением
Артур Кураков
Сообщение 16 из 72
Spyrite
в ответ: vite_

Если я правильно понял, то речь идёт о Solution, в котором находятся два проекта, подобно тому, как это реализовано в примерах SDK (там один файл с расширением *.sln - запускаешь его, а там в одном Solution'е сразу открываются все доступные примеры, каждый из которых содержится в отдельном проекте). Была у меня и такая мысль, но я, честно говоря, ещё не разобрался, как такое осуществить. Как добавить в проект новый лист, определённый как класс - это я знаю, но скорее всего это не то, ведь в этом случае свойства проекта будут одними и теми же. Так что буду разбираться дальше....

 

Насчет интерфейса IExternalApplication. Я правильно понимаю, что этот интерфейс предназначен для того, чтобы выполнить программный код непосредственно вместе с запуском Revit и, соответственно, с его закрытием? Если это так, то, наверное, действительно, такое решение мне больше подходит. Тогда, надо полагать, мне в программном коде достаточно будет добавить строку, которая бы просто запускала файл Revit.exe. А вместе с ним запустится и процедура. Скорее всего это должно реализовываться как-то через пространство имён System.Runtime. Но опять же возникает ряд вопросов:

 

1. Как отключить запуск процедуры вместе с Revit в том случае, когда мне эта процедура не требуется?

2. (в продолжение темы) Возможно ли реализовать мою процедуру как функцию, которая бы не только выполняла нужные действия в Revit (к слову, эти действия связаны с присвоением параметрам типоразмера семейства значений программных переменных из моего приложения), но ещё и возвращала бы значение одного из параметров как String или как Integer?

Сообщение 17 из 72
40ushek
в ответ: Spyrite

1. Как отключить запуск процедуры вместе с Revit в том случае, когда мне эта процедура не требуется?

2. (в продолжение темы) Возможно ли реализовать мою процедуру как функцию, которая бы не только выполняла нужные действия в Revit (к слову, эти действия связаны с присвоением параметрам типоразмера семейства значений программных переменных из моего приложения), но ещё и возвращала бы значение одного из параметров как String или как Integer?

 

вам надо создать приложение для ревита(addin), и к нему (приложению) подключить  подключить  ваше основное приложение в качестве ссылки. я так сделал. все работает.

Сообщение 18 из 72
40ushek
в ответ: 40ushek

добавлю, что мое приложение работает как отдельно, а также вызывается ревитом, и может взаимодействоваать с роботом. 🙂

Сообщение 19 из 72
Gotzman
в ответ: 40ushek

Доброго времени суток. Возникла проблема построения сетки формообразующей состоящей из правельных треугольников в ревите. Друг рассказывал про Revit API. Нашел ссылку на сайт где делаю с помощь API сетку и где приведено часть кода http://theprovingground.wikidot.com/revit-api-py-dividesurface   

 

сделал сетку в автокаде но с помощью формаобразующих не получаеться построить сетку в ревит нельзя задать форму стежней образующей.

 

проблема номер два

 

импортирую файл автокада с посроенной сеткой и пытаюсь с помощьб функции указать на линию присвоить на линию балку металическую но если форма большая нужно долго протыкивать(((

 

Вопрос можно ли написать программку на API что бы она генерировала сетку произвольной формы в Ревит из треугольников и автоматам присваивала каждой линии образующей профелей металлопроката??

 

Прилагаю рисунки

 

первый рисунок сетка в автокаде

ворой рисунок наложение профилей насетку в Ревите.

 

Если кто может конкретно помочь с проблемой пишите договоримся!!!

 

Сообщение 20 из 72
Sadykov
в ответ: vite_

Здравствуйте! Вопрос по использованию менеджера листов . Когда выделяем на плане фрагмент, переносим его на лист то в марке обозначения пишется не только номер листа, но и название альбома. Если строке номер листа удалять название альбома . оно снова прописывается в этой строке. До использования менеджера писался только лист . Если возможность обойти эту проблему ?менеджер листов.jpg

Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.

Новая тема  

Autodesk Design & Make Report