Использование цвета colordialog в wpf

Автор Тема: Использование цвета colordialog в wpf  (Прочитано 7534 раз)

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

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Есть диалоговое wpf окно, которое вызывается с помощью команды в autocad. В нем есть кнопка цвет и справа от нее белый(до нажатия) квадрат. При нажатии этой кнопки вызывается автокадовский ColorDialog, в котором выбирается цвет. Нужно чтобы цвет квадрата менялся на выбранный в colordialog. Как это сделать, ведь "color" автокадовский не является  .net-овским, а значит я не могу окрасить элементов но xaml-окна. Была идея получения rgb цвета, но это работало только на второе меню из colordilog.

Отмечено как Решение Teltro 01-04-2019, 21:06:07

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование цвета colordialog в wpf
« Ответ #1 : 01-04-2019, 16:57:12 »
Teltro,
Приветствую на форуме!
Я так понимаю, что тебе нужно преобразовать индексный цвет AutoCAD (ACI-цвет) в RGB. Вот код для этого:
Код - C# [Выбрать]
  1. short colIndex = dlg.Color.ColorIndex;
  2. byte byt = System.Convert.ToByte(colIndex);
  3. int rgb = Autodesk.AutoCAD.Colors.EntityColor.LookUpRgb(byt);
  4. long b = (rgb & 0xffL);
  5. long g = (rgb & 0xff00L) >> 8;
  6. long r = rgb >> 16;
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Использование цвета colordialog в wpf
« Ответ #2 : 01-04-2019, 16:59:07 »
Была идея получения rgb цвета
Отличная идея!
но это работало только на второе меню из colordilog.
Код - C# [Выбрать]
  1. /// <summary>
  2. /// Получение системного цвета из индексного цвета AutoCAD
  3. /// </summary>
  4. /// <param name="index">Индекс цвета AutoCAD</param>
  5. /// <returns>Объект System.Drawing.Color, соответствующий указанному индексу цвета в AutoCAD</returns>
  6. public static Color GetColorFromIndex(short index)
  7. {
  8.     AcCol.Color acColor = AcCol.Color
  9.         .FromColorIndex(AcCol.ColorMethod.None, index);
  10.     return acColor.ColorValue;
  11. }
  12.  
И мегакод! Не влез...

Bonus:

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование цвета colordialog в wpf
« Ответ #3 : 01-04-2019, 17:16:24 »
Дмитрий Загорулькин,
Насколько я помню эта таблица ACI->RGB не очень стабильна и зависит от версии AutoCAD и еще чего-то. Да и использование её внутри AutoCAD не имеет смысла, так как можно пользоваться методом EntityColor.LookUpRgb.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Использование цвета colordialog в wpf
« Ответ #4 : 01-04-2019, 17:20:45 »
Можете считать это первоапрельской шуткой :) Давно это было, молод был, горяч... Три ночных часа вместо сна потратить на написание такого метода было проще, чем найти решение поадеватнее :)

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Использование цвета colordialog в wpf
« Ответ #5 : 01-04-2019, 20:59:36 »
Да, я хочу
Цитировать
нужно преобразовать индексный цвет AutoCAD (ACI-цвет) в RGB

Код - C# [Выбрать]
  1. long b = (rgb & 0xffL);
  2. long g = (rgb & 0xff00L) >> 8;
  3. long r = rgb >> 16;
но для получения цвета нужны байты(byte). Тут я ещё не понимаю, что есть "& 0xffL"
Код - C# [Выбрать]
  1. AcCol.Color acColor = AcCol.Color
  2.         .FromColorIndex(AcCol.ColorMethod.None, index);
  3.     return acColor.ColorValue;
AcColor - это Autodesk.Autocad.Colors.Color?)

если и так, то всё равно "невозможно преобразовать из System.Drawing.Color в System.Windows.Media.Color"
« Последнее редактирование: 01-04-2019, 21:33:50 от Александр Ривилис »

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Использование цвета colordialog в wpf
« Ответ #6 : 01-04-2019, 21:01:31 »
Всё, разобрался, тупанул: с первого раза не смог Convert.ToByte сделать

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Использование цвета colordialog в wpf
« Ответ #7 : 01-04-2019, 21:03:19 »
Хотя данное решение не для каждого цвета работает, есть ли вариант получше?

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

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Использование цвета colordialog в wpf
« Ответ #8 : 01-04-2019, 21:06:34 »
Всё, работает, спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Использование цвета colordialog в wpf
« Ответ #9 : 01-04-2019, 21:34:50 »
Teltro,
Прочитай у меня в подписи правило про форматирование кода на форуме.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение