Создание пользовательской надстройки для Revit

Автор Тема: Создание пользовательской надстройки для Revit  (Прочитано 4520 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
В ходе создания надстройки Revit столкнулась с проблемой, что Autidesk.Revit.DB и Syste.Window.Forms не могут совместно использоваться (Form является неоднозначной ссылкой между Autodesk.Revit и System.Windows). Как можно обойти данную проблему?

Отмечено как Решение Виктор Чекалин 10-10-2017, 14:29:53

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Этот вопрос даже не относится к Ревиту)
У вас есть два варианта:
1. В блоке using прописать сокращенную ссылку пространство имён (не помню как это правильно называется). Типа
Код - C# [Выбрать]
  1. using WinF = System.Window.Forms;
И далее по коду уже использовать эту ссылку, типа
Код - C# [Выбрать]
  1. var cm = WinF.ContextMenu;
2. Второй вариант - прям в коде писать полное указание на пространство имён. Типа
Код - C# [Выбрать]
  1. var cm = System.Window.Forms.ContextMenu;

И еще вариант - установить ReSharper - он вам все это подскажет

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
В блоке using прописать сокращенную ссылку пространство имён (не помню как это правильно называется)
Псевдоним (алиас) имени.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Этот вопрос даже не относится к Ревиту)
Не сказала бы))) Библиотека Revit не дает использовать стандартную библиотеку для winForm. В первый раз с таким сталкиваюсь.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Библиотека Revit не дает использовать стандартную библиотеку для winForm.
Пересечения в именах пространств имён есть не только у Revit. И что значит не даёт использовать? Извини, но это глупость.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Bazinga, давайте на примере:
Допустим, я создал супер-пупер САПР приложение под названием PupkinCAD. И я решил предусмотреть возможность написания плагинов под мое приложение, поэтому я создал библиотеку Vasya.dll. В моём приложении есть свое окно с сообщением. И я когда я делал библиотеку, то создал пространство имен Windows в котором создал класс MessageBox со статическим методом Show. Вот мне так захотелось! И я когда это делал, то совершенно не смотрел на стандартные пространства имён. И это нормально!
И вот вы решили написать мега плагин под мое приложение - вы создаете проект и добавляете ссылку на Vasya.dll и где-то в коде решили использовать мое окно с сообщением. НО! У вас есть еще ссылка на PresentationFramework.dll, так как вы использовали в своем плагине обычные окна. В коде, где использовалось стандартное окно и планируется использовать мое окно есть ссылки на пространства имён:
Код - C# [Выбрать]
  1. using System.Windows;
  2. using PupkinVasya.Windows;
Вы пишите в коде:
Код - C# [Выбрать]
  1. MessageBox.Show("Hello world");
и при попытке компиляции получаете ту самую ошибку о конфликте имён. Ну, вам повезло - еще до попытки компиляции IDE вам сообщит об ошибке.
Вот тут Вам и придется применять один из двух подходов, которые я описал в первом ответе.

А вообще - в любой книжке по C# об этом написано. Я конечно вас понимаю - сам до сих пор ни одной не прочитал, поэтому можете просто погуглить. Например вот.

P.S. Не забывайте нажимать кнопку "Решение", если получили нужный вам ответ

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я конечно вас понимаю - сам до сих пор ни одной не прочитал
:o
С остальным согласен полностью.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
А вообще - в любой книжке по C# об этом написано. Я конечно вас понимаю - сам до сих пор ни одной не прочитал, поэтому можете просто погуглить. Например вот
Я обычно msdn использую при необходимости) впервые с дополнениями работаю ::)
И спасибо за примеры) 

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
И что значит не даёт использовать? Извини, но это глупость.
Не допускает использование стандартных элементов (combobox, textbox etc.) Глупость, не глупость, а это мой первый опыт в этой области.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не допускает использование стандартных элементов (combobox, textbox etc.)
Допускает. Но в данном случае требует указания полного квалифицированного имени (или алиаса) для класса, чтобы компилятор мог понять какой именно класс (из какой сборки) должен использоваться.
это мой первый опыт в этой области.
Это всё объясняет. Опыт приходит со временем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Библиотека Revit не дает использовать стандартную библиотеку для winForm.
Мы же на форуме по Revit API. Тут надо говорить, что это плохая библиотека WinForms не дает использовать библиотеку Revit :)
Я обычно msdn использую при необходимости) впервые с дополнениями работаю
И спасибо за примеры) 
Вот ссылочка на MSDN. Там как раз приведен пример, когда один и тот же класс в разных неймспейсах определен.

В дополнение к сказанному, добавлю, что можно алиас еще применить и для класса, не только для namespace. Например, если вы не используете или используете очень редко класс Autodesk.Revit.Db.Form, но активно применяете System.Windows.Forms.Form, то можно написать так:
Код - C# [Выбрать]
  1. using Autodesk.Revit.Db;
  2. using System.Windows.Forms;
  3. using Form = System.Windows.Forms.Form;
  4.  
Теперь при использовании класса Form не будет возникать ошибки, что данный класс объявлен в двух namespaces.