Сообщество программистов Autodesk в СНГ

ADN Club => Civil 3D API => Тема начата: Дмитрий Загорулькин от 13-07-2016, 05:30:30

Название: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 13-07-2016, 05:30:30
Надежды мало, но рискну спросить. Может быть, кто-нибудь натолкнет на хорошую идею.  :D
У объектов Civil 3D свой собственный цвет ручек. Он не зависит от настроек цвета ручек AutoCAD. Если по умолчанию, то у ручек AutoCAD цвет 150, а у ручек Civil - цвет 0,255,255 и я не знаю способа его изменить (может и можно).
Когда используется переопределение ручек у объектов (GripOverrule), то у создаваемых ручек цвет будет задан по цвету ручек AutoCAD, даже если это объекты Civil. Программно изменить их цвет на 0,255,255 не проблема. Однако, у ручек Civil есть еще и контрастная рамка толщиной в 1 px, без которой они выглядят очень непрезентабельно. Проблема в том, что цвет этой рамки изменяется в зависимости от цвета фона и мне не удалось определить правила, по которым происходит это изменение. Опыты показали, что цвет рамки всегда серый - то есть, его RGB составляющие равны друг другу. При изменении цвета модели цвет рамки изменяется не всегда. В зависимости от цвета модели, устанавливаются значения:
Других пока не встречал.
Как бы найти зависимость цвета этой рамки от цвета модели?
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 13-07-2016, 07:23:17
У объектов Civil 3D свой собственный цвет ручек. Он не зависит от настроек цвета ручек AutoCAD.
Значит нужно писать в ADN DevHelp с этим вопросом. Если нужно, то я могу отправить от своего имени.
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 13-07-2016, 07:35:27
Отправьте, если Вам не сложно. А то, боюсь, с моим английским обсуждение может сильно затянуться :)
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 13-07-2016, 07:57:10
Ok! Отправлю.
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 13-07-2016, 11:57:55
Кстати:
Если по умолчанию, то у ручек AutoCAD цвет 150, а у ручек Civil - цвет 0,255,255 и я не знаю способа его изменить (может и можно).
Цвет контура ручек AutoCAD задается системной переменной GRIPCONTOUR, её значение у меня 251 (RGB: 101,101,101) в темной схеме и 150 (RGB: 0,127,255) в светлой теме
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 13-07-2016, 12:51:05
Попробовал изменять значение этой переменной. У ручек объектов AutoCAD контур меняет цвет, у объектов Civil - нет.
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 13-07-2016, 12:58:43
Посмотри вот эту ветку реестра: HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:ZZZ\AEC\X.Y\General\Grips
Похоже, что значения там соответствуют этой настройке AD-ручек:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F45537%2F7842324.6%2F0_12d45f_6103f84f_orig.png&hash=a1572bb741a7105e3b68380c4d72e864)
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 13-07-2016, 13:12:44
Да, действительно! Цвет ручки для объекта Civil задается здесь! Надо будет обработать возможность его изменения пользователем. Спасибо!
Но для рамки вроде тут нет цвета. К тому же, как я уже писал, цвет рамки меняется в зависимости от цвета модели. Поэтому, вряд ли есть фиксированное значение цвета, которое хранится в переменной или еще где-то. Должно быть какое-то правило определения цвета в зависимости от фона.
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 13-07-2016, 14:19:35
Но для рамки вроде тут нет цвета.
Это точно, не цвет Дополнительно? Я смотрю, что 254 цвет в зависимости от цвета фона меняет свой RGB. Например, при белом он 183,183,183. При черном: 214,214,214, синем: 204,204,204 и т.д.

P.S.: Вопрос в ADN DevHelp отправил. Возможно есть какое-то API для этого.
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 13-07-2016, 21:01:56
Это точно, не цвет Дополнительно? Я смотрю, что 254 цвет в зависимости от цвета фона меняет свой RGB. Например, при белом он 183,183,183. При черном: 214,214,214, синем: 204,204,204 и т.д.
Эта настройка вообще своей жизнью живет :)

P.S. Вообще, по поведению, похоже - тоже можно установить только серый цвет.  Но цвету рамки ручки она не соответствует, я проверил
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 14-07-2016, 18:02:35
Получил сегодня ответ, что API для получения цвета ручки и контура ручки в объектах Civil 3D нет. Я еще попытаюсь что-то из них выудить, но похоже, что это бесперспективно.
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 14-07-2016, 18:29:48
Спасибо!
Я еще попытаюсь что-то из них выудить, но похоже, что это бесперспективно.
Боюсь, что да. Правда, благодаря Вам, есть один вариант определения цвета ручки - читать реестр. Радует, что там значения обновляются сразу при изменении настроек. Формат сохранения цвета там мне понятен.
Пока что просто настроил цвет моих ручек на 0,255,255 а контура на 51,51,51 и вынес задание цвета в отдельный метод с надеждой, что в будущем разберусь с этим. В принципе, в большинстве случаев, выглядит неплохо. А так, не встречал я еще человека на протяжении всей моей трудовой деятельности, который менял бы цвета ручек и их контуров. Так что, может быть, пока и оставлю так...
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 14-07-2016, 18:46:10
Обнаружил, что в 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 не упомянул вообще об этой возможности в ответе на мой вопрос. ;)
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 14-07-2016, 18:53:54
Я думаю, что он не знает о такой возможности. Насколько я знаю, его познания (как и мои) ограничены .NET.
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 14-07-2016, 18:56:39
Вот мы это и проверим. Я ему написал про эту возможность в OMF...
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 15-07-2016, 23:08:40
С третьей попытки Augusto Goncalves понял что я от него хочу. Похоже его воодушевили мои раскопки в реестре и в OMF и он пообещал уточнить у команды разработчиков Civil 3D о правилах формирования ручек. Так что пока еще не всё потеряно. :)
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Александр Ривилис от 19-07-2016, 16:29:18
Увы, но и команда разработчиков Civil 3D не помогла с этой информацией. :(
Название: Re: Как вычислять цвет рамки вокруг ручек у объектов Civil 3D?
Отправлено: Дмитрий Загорулькин от 19-07-2016, 16:38:11
Эх... Спасибо!  :)