Как добраться до быстрых ссылок (ShortCuts)?

Автор Тема: Как добраться до быстрых ссылок (ShortCuts)?  (Прочитано 16105 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Похоже это всё-таки не оно. Не говоря уже о том, что в нём в DXF-кодах закодированы только какие-то флаги.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Похоже это всё-таки не оно.
Похоже, AeccDbRootSettingsNode - тоже не ОНО:



"Параметры чертежа". Вряд ли это связано с быстрыми ссылками...

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Что за XRecord могут храниться в словаре {24DE2741-47F6-4298-B91B-737E814BAE3E}?





Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
На втором скриншоте - данные о Civil 3D: наименование, версия, код продукта.

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
На втором скриншоте - данные о Civil 3D: наименование, версия, код продукта.
Я не нашел, что обозначает код 160. У всех записей разные значения...

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Мне поставили задачу реализовать пакетную вставку быстрых ссылок. Это, в принципе, реализуемо?
« Последнее редактирование: 11-07-2018, 14:41:21 от Andant »

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
А свойство IsReferenceObject у Civil.Entity не говорит о том, что это объект из быстрой ссылки?
Код - C# [Выбрать]
  1. namespace Autodesk.Civil.DatabaseServices
  2. {
  3.     [Wrapper("AeccDbEntity")]
  4.     public class Entity : Aec.DatabaseServices.Entity
  5.     {
  6.         protected internal Entity(IntPtr unmanagedPointer, bool autoDelete);
  7.  
  8.         public bool IsReferenceStale { get; }
  9.         public bool IsReferenceValid { get; }
  10.         public bool IsReferenceSubObject { get; }
  11.         public bool IsReferenceObject { get; }
  12.  
  13.         public override AutoCAD.DatabaseServices.ObjectId StyleId { get; set; }
  14.         public virtual string StyleName { get; set; }
  15.         public bool ShowToolTip { get; set; }
  16.         public virtual string DisplayName { get; }
  17.         public virtual string Description { get; set; }
  18.         public virtual string Name { get; set; }
  19.         public virtual object Document { get; }
  20.         public virtual object Application { get; }
  21.     }
  22. }

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А свойство IsReferenceObject у Civil.Entity не говорит о том, что это объект из быстрой ссылки?
Да, именно так. Но это позволяет определить только, что объект был вставлен быстрой ссылкой. А вот выяснить откуда он был вставлен так просто не получится.
IsReferenceStale - ссылка нуждается в обновлении (исходный файл был изменён).
IsReferenceValid - подозреваю, что показывает, найден ли исходный файл.

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Пока, первая задача связанная с быстрыми ссылками, это не изменять объекты из быстрых ссылок   :o
Все плагины написанные без учета быстрых ссылок. Выяснилось, что изменения вносятся и в объекты из быстрых ссылок. Что недопустимо.
Civil, через пользовательский интерфейс, блокирует изменения объектов быстрых ссылок. Только общие свойства примитивов менять можно: слой, цвет и т.п.

Отмечено как Решение Andant 07-09-2018, 17:21:33

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Мне поставили задачу реализовать пакетную вставку быстрых ссылок. Это, в принципе, реализуемо?
Везде пишут, что через API это невозможно сделать.
Есть способ использовать штатные возможности с помощью автоматизации окон Windows.
Я пользуюсь библиотекой https://github.com/Roemer/FlaUI

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Все плагины написанные без учета быстрых ссылок. Выяснилось, что изменения вносятся и в объекты из быстрых ссылок. Что недопустимо.
Да, было дело, на эти грабли тоже наступали :)
Есть способ использовать штатные возможности с помощью автоматизации окон Windows.
Я пользуюсь библиотекой https://github.com/Roemer/FlaUI
И получается добраться до палитры Civil 3D "Область инструментов - Навигатор" и автоматизировать подгрузку ссылок?

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
И получается добраться до палитры Civil 3D "Область инструментов - Навигатор" и автоматизировать подгрузку ссылок?
;D нет пока.
Это общий способ, когда нет API. Например, генерацию перекрестков так делал. Запускается команда Civil и через FlaUI нажимаются контролы на окнах.
Задача по подключению быстрых ссылок есть в планах. Надеюсь получиться таким способом сделать.

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Протестировал вставку быстрых ссылок через FlaUI.

Минусы:
  • Должна быть открыта палитра "Область инструментов" на вкладке "Навигатор". Переключать вкладки, через FlaUI пока не умею.
  • Нельзя трогать мышку
  • Есть задержки после вставки ссылки. Пока непонятно, как их учесть.
Попробую довести до пользователей  ::)
Код автоматизации FlaUI:
Извините, вам запрещён просмотр содержимого спойлеров.

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Протестировал вставку быстрых ссылок через FlaUI.
Спасибо, Вильдар!
Я тоже несколько дней бьюсь над этим.
У меня при item.RightClick() происходит исключение, что-то типа NotClickable... Но это я обошел. Главное - не смог добраться до диалога.
Теперь попробую Ваш способ. Наверное, можно еще попробовать отследить событие добавления окна...
« Последнее редактирование: 06-09-2018, 15:47:36 от Andant »

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Andant,
я запускаю консольный проект с FlaUI в отдельном процессе и ему передаю файл задания (в примере выше нет файла задания, там код специально для быстрых ссылок. буду переделывать в файл задания).
Думаю, что применение FlaUI из процесса акада приведет к куче ошибок. Модальное окно блокирует поток. Запуск FlaUI из другого потока тоже невозможен.
Свой вариант консольной утилиты с FlaUI могу выложить на github.