Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?

Автор Тема: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?  (Прочитано 12576 раз)

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

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Надежды мало, но рискну спросить. Может быть, кто-нибудь натолкнет на хорошую идею.  :D
У объектов Civil 3D свой собственный цвет ручек. Он не зависит от настроек цвета ручек AutoCAD. Если по умолчанию, то у ручек AutoCAD цвет 150, а у ручек Civil - цвет 0,255,255 и я не знаю способа его изменить (может и можно).
Когда используется переопределение ручек у объектов (GripOverrule), то у создаваемых ручек цвет будет задан по цвету ручек AutoCAD, даже если это объекты Civil. Программно изменить их цвет на 0,255,255 не проблема. Однако, у ручек Civil есть еще и контрастная рамка толщиной в 1 px, без которой они выглядят очень непрезентабельно. Проблема в том, что цвет этой рамки изменяется в зависимости от цвета фона и мне не удалось определить правила, по которым происходит это изменение. Опыты показали, что цвет рамки всегда серый - то есть, его RGB составляющие равны друг другу. При изменении цвета модели цвет рамки изменяется не всегда. В зависимости от цвета модели, устанавливаются значения:
  • 45,45,45;
  • 51,51,51;
  • 91,91,91;
  • 101,101,101.
Других пока не встречал.
Как бы найти зависимость цвета этой рамки от цвета модели?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
У объектов Civil 3D свой собственный цвет ручек. Он не зависит от настроек цвета ручек AutoCAD.
Значит нужно писать в ADN DevHelp с этим вопросом. Если нужно, то я могу отправить от своего имени.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Отправьте, если Вам не сложно. А то, боюсь, с моим английским обсуждение может сильно затянуться :)

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати:
Если по умолчанию, то у ручек AutoCAD цвет 150, а у ручек Civil - цвет 0,255,255 и я не знаю способа его изменить (может и можно).
Цвет контура ручек AutoCAD задается системной переменной GRIPCONTOUR, её значение у меня 251 (RGB: 101,101,101) в темной схеме и 150 (RGB: 0,127,255) в светлой теме
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Попробовал изменять значение этой переменной. У ручек объектов AutoCAD контур меняет цвет, у объектов Civil - нет.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Посмотри вот эту ветку реестра: HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:ZZZ\AEC\X.Y\General\Grips
Похоже, что значения там соответствуют этой настройке AD-ручек:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Да, действительно! Цвет ручки для объекта Civil задается здесь! Надо будет обработать возможность его изменения пользователем. Спасибо!
Но для рамки вроде тут нет цвета. К тому же, как я уже писал, цвет рамки меняется в зависимости от цвета модели. Поэтому, вряд ли есть фиксированное значение цвета, которое хранится в переменной или еще где-то. Должно быть какое-то правило определения цвета в зависимости от фона.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Но для рамки вроде тут нет цвета.
Это точно, не цвет Дополнительно? Я смотрю, что 254 цвет в зависимости от цвета фона меняет свой RGB. Например, при белом он 183,183,183. При черном: 214,214,214, синем: 204,204,204 и т.д.

P.S.: Вопрос в ADN DevHelp отправил. Возможно есть какое-то API для этого.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Это точно, не цвет Дополнительно? Я смотрю, что 254 цвет в зависимости от цвета фона меняет свой RGB. Например, при белом он 183,183,183. При черном: 214,214,214, синем: 204,204,204 и т.д.
Эта настройка вообще своей жизнью живет :)

P.S. Вообще, по поведению, похоже - тоже можно установить только серый цвет.  Но цвету рамки ручки она не соответствует, я проверил

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

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Спасибо!
Я еще попытаюсь что-то из них выудить, но похоже, что это бесперспективно.
Боюсь, что да. Правда, благодаря Вам, есть один вариант определения цвета ручки - читать реестр. Радует, что там значения обновляются сразу при изменении настроек. Формат сохранения цвета там мне понятен.
Пока что просто настроил цвет моих ручек на 0,255,255 а контура на 51,51,51 и вынес задание цвета в отдельный метод с надеждой, что в будущем разберусь с этим. В принципе, в большинстве случаев, выглядит неплохо. А так, не встречал я еще человека на протяжении всей моей трудовой деятельности, который менял бы цвета ручек и их контуров. Так что, может быть, пока и оставлю так...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Обнаружил, что в OMF есть возможность получить (и устанавливать) информацию о цвете ручек в том виде, как мы получали из реестра:
Код - C++ [Выбрать]
  1. class AecGripManager
  2. {
  3. //.......
  4.     const AcCmEntityColor& objectColor(AecGripUtils::Brightness c = AecGripUtils::kNormal)const;
  5.     const AcCmEntityColor& secondaryColor(AecGripUtils::Brightness c = AecGripUtils::kNormal)const;
  6.     const AcCmEntityColor& styleColor(AecGripUtils::Brightness c = AecGripUtils::kNormal)const;
  7.     const AcCmEntityColor& auxiliaryColor(AecGripUtils::Brightness c = AecGripUtils::kNormal)const;
  8.     const AcCmEntityColor& gripColor(AecGripUtils::Color c, AecGripUtils::Brightness b)const;
  9.  
  10.     void                setObjectColor(const AcCmEntityColor& color);
  11.     void                setStyleColor(const AcCmEntityColor& color);
  12.     void                setAuxiliaryColor(const AcCmEntityColor& color);
  13.     void                setSecondaryColor(const AcCmEntityColor& color);
  14.    
  15.     void                resetGripColors();
  16. //......
  17. }
  18.  
Но это только чистый C++ и только под лицензией ADN. Интересно, что Augusto Goncalves не упомянул вообще об этой возможности в ответе на мой вопрос. ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Я думаю, что он не знает о такой возможности. Насколько я знаю, его познания (как и мои) ограничены .NET.

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

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