Подсветка выбранных объектов

Автор Тема: Подсветка выбранных объектов  (Прочитано 6261 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Здравствуйте!

Я пишу программу для многократного копирования набора элементов.
Так выглядит код для пользовательского выбора объектов:
Код - C# [Выбрать]
  1. UIDocument uidoc = ActiveUIDocument;
  2. Selection sel = uidoc.Selection;
  3. IList<Reference> objRefsToCopy = sel.PickObjects(ObjectType.Element, new FamilyInstancePickFilter(), "Выберите объекты для копирования");
  4.  
При этом включается подсветка выбранных объектов.
Далее активируется вид в плане и после  этого у пользователя запрашивается базовая точка копирования.
Код - C# [Выбрать]
  1. XYZ basePoint = sel.PickPoint("Укажите базовую точку для копирования");
  2.  
При этом исчезает подсветка выбранных объектов.

Я хочу сделать так, чтобы при выборе базовой точки пользователь видел подсвеченными те объекты, которые он выбирал.

Подскажите, пожалуйста, как это можно сделать?


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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Подсветка выбранных объектов
« Ответ #1 : 23-10-2017, 15:26:37 »
Ну правильно то, что не исчезает подсветка, а меняется конкретный выбор. Т.е. вы выбрали объекты, затем запомнили ElementId этих объектов, а потом выбрали новый объект - точку. Соответственно, текущий выбор поменялся и подсветка убралась.
А решается ваша проблема просто - у вас есть коллекция ElementId нужных объектов. После того, как выбрали точку просто скажите Ревиту еще раз выбрать те элементы, используя метод Selection.SetElementIds()

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Подсветка выбранных объектов
« Ответ #2 : 23-10-2017, 15:28:35 »
Я пишу программу для многократного копирования набора элементов
Если я правильно понял, то я не понял - зачем??? Ревит и сам это может



Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Re: Подсветка выбранных объектов
« Ответ #3 : 23-10-2017, 20:44:37 »
Мне нужно, чтобы объекты были подсвечены в момент указания базовой точки для их копирования.

Функционал программы включает в себя не только копирование объектов. При вставке задаются типоразмеры и уровень. Кроме этого объекты поворачиваются вокруг вертикальной оси, проходящей через точку вставки.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Подсветка выбранных объектов
« Ответ #4 : 23-10-2017, 21:40:08 »
Вот тема - Highlight Elements, а вот еще вариант на форуме. Может вы что-то не так делаете?

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Re: Подсветка выбранных объектов
« Ответ #5 : 24-10-2017, 09:59:49 »
А решается ваша проблема просто - у вас есть коллекция ElementId нужных объектов. После того, как выбрали точку просто скажите Ревиту еще раз выбрать те элементы, используя метод Selection.SetElementIds()
Да это понятно.
Но мне нужно, чтобы объекты были подсвечены в момент указания точки.
Вроде все так делаю. Объекты подсвечиваются. Проблема в том, что нельзя сохранить предыдущую подсветку при указании точки.

Спасибо за вашу помощь.

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Подсветка выбранных объектов
« Ответ #6 : 24-10-2017, 10:36:53 »
Но мне нужно, чтобы объекты были подсвечены в момент указания точки
Я повторюсь - вы что-то не так делаете. Ибо:
Код - C# [Выбрать]
  1. using Autodesk.Revit.Attributes;
  2. using Autodesk.Revit.DB;
  3. using Autodesk.Revit.UI;
  4. using Autodesk.Revit.UI.Selection;
  5.  
  6. namespace Revit_PlanDimensions.Commands
  7. {
  8.     [Transaction(TransactionMode.Manual)]
  9.     [Regeneration(RegenerationOption.Manual)]
  10.     class TestCommand : IExternalCommand
  11.     {
  12.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  13.         {
  14.             var selection = commandData.Application.ActiveUIDocument.Selection;
  15.             var doc = commandData.Application.ActiveUIDocument.Document;
  16.             // select objects
  17.             var selectedReferences = selection.PickObjects(ObjectType.Element, "Select elements:");
  18.             // select point
  19.             var p = selection.PickPoint("Pick point");
  20.             return Result.Succeeded;
  21.         }
  22.     }
  23. }


Как видите - подсветка никуда не исчезает вообще!

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Re: Подсветка выбранных объектов
« Ответ #7 : 24-10-2017, 10:58:22 »
Спасибо.
Это очень странно. У меня подсветка пропадает.
Я не думаю, что причина в этом, но я пишу макрос в SharpDevelop.
У меня аналогичный код выглядит следующим образом:
Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.Revit.UI;
  3. using Autodesk.Revit.DB;
  4. using Autodesk.Revit.UI.Selection;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7.  
  8. namespace Tests
  9. {
  10.     [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
  11.     [Autodesk.Revit.DB.Macros.AddInId("610CFA8F-DED3-4D98-BF7D-05EFF21B1C24")]
  12.         public partial class ThisApplication
  13.         {
  14.                 private void Module_Startup(object sender, EventArgs e)
  15.                 {
  16.  
  17.                 }
  18.  
  19.                 private void Module_Shutdown(object sender, EventArgs e)
  20.                 {
  21.  
  22.                 }
  23.                
  24.                
  25.                 public void SelsectionPickPoint()
  26.                 {
  27.                         UIDocument uidoc = ActiveUIDocument;
  28.                         Document doc = uidoc.Document;
  29.                        
  30.                         var selection = ActiveUIDocument.Selection;
  31.                        
  32.                         var selectedReferences = selection.PickObjects(ObjectType.Element, "Select elements:");
  33.                        
  34.                         var p = selection.PickPoint("Pick point");
  35.                 }
  36.  
  37.                 #region Revit Macros generated code
  38.                 private void InternalStartup()
  39.                 {
  40.                         this.Startup += new System.EventHandler(Module_Startup);
  41.                         this.Shutdown += new System.EventHandler(Module_Shutdown);
  42.                 }
  43.                 #endregion
  44.         }
  45. }
  46.  
  47.  

Еще у меня объекты относятся к категории "Обобщенные модели".
Revit 2018.

Даже не знаю в чем еще может быть причина.

Позже, когда будет возможность, переделаю в Visual Studio как у вас и проверю.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подсветка выбранных объектов
« Ответ #8 : 24-10-2017, 11:31:34 »
Может причина в том, что у вас макросы, а у Александра - команда. Т.е. несколько отличаются контексты.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Re: Подсветка выбранных объектов
« Ответ #9 : 24-10-2017, 11:33:15 »
Возможно.
Я проверю как смогу.
Сейчас просто нет Visual Studio под рукой.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Подсветка выбранных объектов
« Ответ #10 : 24-10-2017, 11:37:41 »
Возможно.
Я проверю как смогу.
Сейчас просто нет Visual Studio под рукой.
Вообще-то достаточно SharpDevelop для этой цели.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Подсветка выбранных объектов
« Ответ #11 : 24-10-2017, 11:42:06 »
Может причина в том, что у вас макросы, а у Александра - команда. Т.е. несколько отличаются контексты
Я сейчас проверил макрос (первый раз в своей жизни вообще с ними столкнулся) - отработало все точь в точь как на видео выше - подсветка осталась на месте, когда я указывал точку
Единственное, что отличает мой тест от теста ТС - я выбирал стены и оси. Нужно попробовать семейства в категории "Обобщенные модели"

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Re: Подсветка выбранных объектов
« Ответ #12 : 24-10-2017, 11:43:08 »
Вообще-то достаточно SharpDevelop для этой цели.
Спасибо) SharpDevelop который идет в комплекте с Revit можно использовать для любых целей, а не только написания макросов?
Я об этом не думал. Надо попробовать.

Оффлайн Кирилл ЗахаровАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 119
  • Карма: 5
Re: Подсветка выбранных объектов
« Ответ #13 : 24-10-2017, 11:44:01 »
Единственное, что отличает мой тест от теста ТС - я выбирал стены и оси.
А версия Revit? У меня 2018.

Отмечено как Решение Кирилл Захаров 24-10-2017, 11:56:41

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

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Подсветка выбранных объектов
« Ответ #14 : 24-10-2017, 11:56:02 »
Все - я разобрался что не так. В моем примере после выбора элементов и при указании точки я не производил зумирования (т.е. не крутил колесиком) и поэтому подсветка оставалась. Как-только прокрутить колесиком - подсветка исчезнет.
Ну и плохая новость - в Revit API нет возможности сделать то, что вы хотите