Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Прочее ПО от Autodesk > Revit > Создание пользовательских панелей и кнопок

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

Ответ
Поиск в этой теме
Непрочитано 17.03.2016, 14:04 #1
Создание пользовательских панелей и кнопок
SNIIP
 
Регистрация: 04.05.2010
Сообщений: 338

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

Сейчас работаю в ревите, появилась необходимость загружать часто используемые семейства по кнопке. Очень неудобно выискивать их в диспетчер объектов.

И если информацию по созданию конопок я нашел, (очень оказалось сложно, куда сложнее чем в автокаде) то можно ли сделать еще типа Нажмите на изображение для увеличения
Название: Снимок.PNG
Просмотров: 280
Размер:	82.4 Кб
ID:	167040 меню как то? чтобы не просто по кнопке загружалось семейство, а еще и с параметрами которые я задал? такое возможно сделать?

Возможно вы посоветует другой метод,, не кнопки. Тоже интерсно будет послушать... Цель моя следующая: как то быстро добраться до необходимых мне семейств. в 1 клик. не выискивая их. Это может быть меню, кнопка, палитра и т.д....

РЕШЕНИЕ:

Открываете Ревит, жмете на знак «?».
В справке находите:
Revit API Developers Guide
+ Introduction
+ Getting Started
+ Walkthrough: Hello World
+ Walkthrough: Add Hello World Ribbon Panel


Последний раз редактировалось SNIIP, 24.03.2016 в 10:31.
Просмотров: 7159
 
Непрочитано 17.03.2016, 18:59
#2
miko2009

Инженер-конструктор
 
Регистрация: 13.10.2011
Москва
Сообщений: 2,359


http://adn-cis.org/rabota-s-makrosam...-vvedenie.html
miko2009 вне форума  
 
Непрочитано 18.03.2016, 21:37
#3
Wrath

Конструктор
 
Регистрация: 11.11.2011
Сообщений: 284


Да при чем здесь макросьі... Макросом кнопку не создашь.
Для создания любого єлемента пользовательского интерфейса необходимо создавать стороннее приложение. Может бьіть динамо что-то подобное умеет - не знаю точно...
Возможно єто станет полезньім.
Wrath вне форума  
 
Непрочитано 19.03.2016, 15:44
#4
miko2009

Инженер-конструктор
 
Регистрация: 13.10.2011
Москва
Сообщений: 2,359


макрос + файл манифест = готовая кнопка. У Тамика есть и шаблон готовый. Просто сначала нужно понять что есть такое макрос и как он работает и как потом из него сделать addin
miko2009 вне форума  
 
Непрочитано 19.03.2016, 22:50
#5
Wrath

Конструктор
 
Регистрация: 11.11.2011
Сообщений: 284


miko2009, тьі сам-то пробовал макросом кнопку создать?
Макросами удобно создавать маленькие програмки или отлаживать куски кода. Если человеку нужен именно eternal application или command , не вижу смьісла колупаться в макросах.

А на счет загрузки семейства с параметрами (пропустил я сей пункт), смотрите в сторону размещения семейства с последующим изменением параметров на нужньіе. Все програмно, само собой...
Wrath вне форума  
 
Непрочитано 19.03.2016, 22:55
#6
miko2009

Инженер-конструктор
 
Регистрация: 13.10.2011
Москва
Сообщений: 2,359


мáкрос — программный алгоритм действий, записанный пользователем. В чем проблема записать макрос в виде dll ?
miko2009 вне форума  
 
Автор темы   Непрочитано 21.03.2016, 06:49
#7
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


Цитата:
Сообщение от miko2009 Посмотреть сообщение
макрос + файл манифест = готовая кнопка. У Тамика есть и шаблон готовый.
Я макрсоы пишу небольшие, и есть готовый для работы, но я его использую тоже с помощью addin как внешние инструменты, а как сделать из него кнопку? что за шаблон?
SNIIP вне форума  
 
Непрочитано 21.03.2016, 11:57
#8
Wrath

Конструктор
 
Регистрация: 11.11.2011
Сообщений: 284


miko2009, спасибо за википасту.) Почему бьі не назьівать єто просто кодом, во избежание недоразумений? Макрос в ревите имеет отличную от external command/application точку входа, а так же атрибутьі, да и функционал его ограничен.
SNIIP, вам следует создавать класс, реализующий интерфейс IExternalApplication. Вьі бьі посмотрели ссьілку вьіше - там все вполне доходчиво излагается.
Wrath вне форума  
 
Непрочитано 21.03.2016, 12:22
#9
miko2009

Инженер-конструктор
 
Регистрация: 13.10.2011
Москва
Сообщений: 2,359


Ну для меня макрос это мини программа (скажем до 5000 строк ) а вообще вопрос был :
Возможно вы посоветует другой метод,, не кнопки. Тоже интерсно будет послушать... Цель моя следующая: как то быстро добраться до необходимых мне семейств. в 1 клик. не выискивая их. Это может быть меню, кнопка, палитра и т.д....

Цитата:
Сообщение от SNIIP Посмотреть сообщение
а как сделать из него кнопку? что за шаблон?
тогда вам ссылка от Wrath , есть альтернативные методы типа PythonShell или Dynamo но их вам станет мало со временем. Шаблон имелся ввиду получения надстройки dll из любого макроса, он вам уже не нужен
miko2009 вне форума  
 
Автор темы   Непрочитано 22.03.2016, 09:28
#10
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


Легкое создание кнопок на ленте для вызова внешних команд... что то совсем легким для меня не стало)

проблема 1: не смог файл автора: VCRevitRibbonUtil.dll переделать для ревита 2016...

при компилирование в фраймворк 4.5 вылетает такое окошко:



и после него все сбрасывается на 4.0. Открывал, закрывал заного все одно фраймворк не меняется. В чем причина?
(возможно у вас есть уже скомпилированная Dll для Revit 2016 было бы здорово)

проблема 2:

не могу понять, а код по созданию кнопки пишется в самом приложении или в отдельном?

На данный момент у меня есть утилита копирующая экраны. Это dll с файлом манифеста и подгружается в разделе Надстрйоки - > внешние инструменты.

Как мне преобразовать это в кнопку?

Где должен быть этот код?:
Код:
[Выделить все]
  Ribbon.GetApplicationRibbon(a)
                .Tab("MyTab")
                .Panel("Panel1")
 
                .CreateButton("btn1",
                              "Button1",
                              typeof (Command1),
                              btn => btn
                                .SetLargeImage(Resources
                                    ._1348119708_face_monkey_32)
                                .SetSmallImage(Resources
                                    ._1348119708_face_monkey_16))
И в каком месте кнопке передается информация о том, какой файл выполнять?
SNIIP вне форума  
 
Непрочитано 22.03.2016, 12:21
#11
Wrath

Конструктор
 
Регистрация: 11.11.2011
Сообщений: 284


Offtop: Ну когда же люди читать-то научатся...
Цитата:
Создавать свои вкладки, панели и кнопки необходимо в методе OnStartup класса, реализуемого интерфейс IExternalApplication. Данный класс необходимо зарегистрировать в файле манифеста
По поводу VCRevitRibbonUtil.dll ничего сказать не могу - не использовал. Вам бьі посоветовал использовать стандартньій метод, изложенньій немного вьіше в статье.
Цитата:
Сообщение от SNIIP Посмотреть сообщение
И в каком месте кнопке передается информация о том, какой файл выполнять?
Конструктор PushButtonData принимает строковьій параметр имени исполняемой командьі.

Последний раз редактировалось Wrath, 22.03.2016 в 12:28.
Wrath вне форума  
 
Автор темы   Непрочитано 22.03.2016, 12:48
#12
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


мое приложение написано классом: IExternalCommand
в чем отличие IExternalApplication? и могу ли я объявить метод OnStartup в классе IExternalCommand? (возможно некорректный вопрос, но я только учусь программировать, не судите строго)
SNIIP вне форума  
 
Непрочитано 22.03.2016, 13:20
#13
Wrath

Конструктор
 
Регистрация: 11.11.2011
Сообщений: 284


Можете - только работать он не будет.) Говоря по-простому, класс, реализующий интерфейс IExternalCommand - єто команда, а реализующий IExternalApplication - приложение. Они имеют различньіе точки входа. Приложение подгружается во время запуска ревита - как раз и исполняется метод OnStartup(), а команда исполняется по запросу.
Вам следует создать класс реализующий IExternalApplication. В том же пространстве имен размещайте и свой класс, реализующий IExternalCommand. В Revit SDK есть множество примеров - советую ознакомится, раз уж вьібрали сей нелегкий путь.)
Ну и настоятельно рекоммендую ознакомиться.
Wrath вне форума  
 
Автор темы   Непрочитано 23.03.2016, 10:46
#14
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


День пробился безрезультатно(( Помогите кто может? любым способом хоть 1м хоть вторым из статьи создать кнопку... вот есть у меня такое приложение:

Код:
[Выделить все]
using System;
using System.Collections.Generic;
using System.Linq;

using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;




[TransactionAttribute(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
public class CopyViewKS : IExternalCommand
{
    public Result Execute(
      ExternalCommandData commandData,
      ref string message,
      ElementSet elements)
    {
        //Get application and document objects
        UIApplication uiApp = commandData.Application;
        Document doc = uiApp.ActiveUIDocument.Document;

        Transaction trans = new Transaction(doc);
        trans.Start("Lab");

        Selection sel = uiApp.ActiveUIDocument.Selection;
        ICollection<ElementId> elementSet = sel.GetElementIds();
        int count = elementSet.Count;

        for (int i = 0; i <= count - 1; i++)
        {

            var elem1 = elementSet.First();
            elementSet.Remove(elem1);

            Element elem2 = doc.GetElement(elem1);

            Type a;

            a = elem2.GetType();


            if (a.FullName == "Autodesk.Revit.DB.Viewport")
            {


                Viewport viewPort1;
                viewPort1 = doc.GetElement(elem1) as Viewport;



                View view1;
                view1 = doc.GetElement(viewPort1.ViewId) as View;

                var newview = view1.Duplicate(ViewDuplicateOption.WithDetailing);


                XYZ point;
                point = new XYZ(0, 0, 0);

                Viewport.Create(doc, viewPort1.SheetId, newview, point);
            }
            else {
                if (a.FullName == "Autodesk.Revit.DB.ScheduleSheetInstance")
                {
                    ScheduleSheetInstance Spesivview;


                    Spesivview = doc.GetElement(elem1) as ScheduleSheetInstance;
                    ViewSchedule Spesiv;
                    Spesiv = doc.GetElement(Spesivview.ScheduleId) as ViewSchedule;


                    var newSpesiv = Spesiv.Duplicate(ViewDuplicateOption.Duplicate);

                    XYZ point;
                    point = new XYZ(0, 0, 0);
                    ScheduleSheetInstance.Create(doc, doc.ActiveView.Id, newSpesiv, point);


                }
            }
        }
        trans.Commit();

        return Result.Succeeded;
    }
}
Это класс типа IExternalCommand. Как сделать IExternalApplication? как к нему подлючить мой класс?

Может есть готовый проект с кнопкой что бы можно было на примере разобраться? С архивом из статьи не могу потестировать т.к. не не меняется фраймворк.... (проблему описал выше)

Или хотя бы план действий описать.. есть код команды, нужно сделать из него приложение с кнопкой... Зарание спасибо.
SNIIP вне форума  
 
Непрочитано 23.03.2016, 11:34
#15
Владимир_М


 
Регистрация: 05.11.2015
Сообщений: 585


Цитата:
Сообщение от SNIIP Посмотреть сообщение
Или хотя бы план действий описать.. есть код команды, нужно сделать из него приложение с кнопкой... Зарание спасибо.
Хотя Вам примерно такие же ссылки давали уже. Мне, например, хватило разобрать обычную справку Ревит, чтобы сделать свою закладку в меню и там свою ленту с кнопками.
Ну, давайте еще раз. Открываете Ревит, жмете на знак «?».
В справке находите:
Revit API Developers Guide
+ Introduction
+ Getting Started
+ Walkthrough: Hello World
+ Walkthrough: Add Hello World Ribbon Panel
Когда все это повторите самостоятельно и получите кнопку НеlloWord, то затем в коде из этого примера:
Код:
[Выделить все]
namespace Walkthrough
{
   /// <remarks>
   /// This application's main class. The class must be Public.
   /// </remarks>
   public class CsAddPanel : IExternalApplication
   {
      // Both OnStartup and OnShutdown must be implemented as public method
      public Result OnStartup(UIControlledApplication application)
      {
         // Add a new ribbon panel
         RibbonPanel ribbonPanel = application.CreateRibbonPanel("NewRibbonPanel");

         // Create a push button to trigger a command add it to the ribbon panel.
         string thisAssemblyPath = Assembly.GetExecutingAssembly().Location;
         PushButtonData buttonData = new PushButtonData("cmdHelloWorld",
            "Hello World", thisAssemblyPath, "Walkthrough.HelloWorld");
в последние строчки забъете свою Dll, namespace и класс.
Владимир_М вне форума  
 
Автор темы   Непрочитано 23.03.2016, 20:32
#16
SNIIP


 
Регистрация: 04.05.2010
Сообщений: 338


Цитата:
Сообщение от Владимир_М Посмотреть сообщение
Revit API Developers Guide
+ Introduction
+ Getting Started
+ Walkthrough: Hello World
+ Walkthrough: Add Hello World Ribbon Panel
Это гениально, я не знал что такое есть в справке, более чем доступно, все получилось, спасибо
SNIIP вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Прочее ПО от Autodesk > Revit > Создание пользовательских панелей и кнопок

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCAD. Язык макрокоманд и создание кнопок. Задание 6.1. Не получается. AlexZh Программирование 2 23.09.2015 22:55
AutoCAD Architecture 2010. Создание стеновых панелей на базе серии 1.090 Botan Вертикальные решения на базе AutoCAD 3 01.02.2010 22:54
В.Свет "AutoCAD Язык макрокоманд и создание кнопок Dym Разное 17 15.12.2006 07:09
Создание кнопок Dmitriy83 AutoCAD 1 25.04.2006 06:35
AutoCAD2006 создание кнопок DDlis AutoCAD 10 21.07.2005 17:23