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

ADN Club => AutoCAD .NET API => Тема начата: Teltro от 01-04-2019, 14:46:16

Название: Использование цвета colordialog в wpf
Отправлено: Teltro от 01-04-2019, 14:46:16
Есть диалоговое wpf окно, которое вызывается с помощью команды в autocad. В нем есть кнопка цвет и справа от нее белый(до нажатия) квадрат. При нажатии этой кнопки вызывается автокадовский ColorDialog, в котором выбирается цвет. Нужно чтобы цвет квадрата менялся на выбранный в colordialog. Как это сделать, ведь "color" автокадовский не является  .net-овским, а значит я не могу окрасить элементов но xaml-окна. Была идея получения rgb цвета, но это работало только на второе меню из colordilog.
Название: Re: Использование цвета colordialog в wpf
Отправлено: Александр Ривилис от 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;
Название: Re: Использование цвета colordialog в wpf
Отправлено: Дмитрий Загорулькин от 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:
Название: Re: Использование цвета colordialog в wpf
Отправлено: Александр Ривилис от 01-04-2019, 17:16:24
Дмитрий Загорулькин,
Насколько я помню эта таблица ACI->RGB не очень стабильна и зависит от версии AutoCAD и еще чего-то. Да и использование её внутри AutoCAD не имеет смысла, так как можно пользоваться методом EntityColor.LookUpRgb.
Название: Re: Использование цвета colordialog в wpf
Отправлено: Дмитрий Загорулькин от 01-04-2019, 17:20:45
Можете считать это первоапрельской шуткой :) Давно это было, молод был, горяч... Три ночных часа вместо сна потратить на написание такого метода было проще, чем найти решение поадеватнее :)
Название: Re: Использование цвета colordialog в wpf
Отправлено: Teltro от 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"
Название: Re: Использование цвета colordialog в wpf
Отправлено: Teltro от 01-04-2019, 21:01:31
Всё, разобрался, тупанул: с первого раза не смог Convert.ToByte сделать
Название: Re: Использование цвета colordialog в wpf
Отправлено: Teltro от 01-04-2019, 21:03:19
Хотя данное решение не для каждого цвета работает, есть ли вариант получше?
Название: Re: Использование цвета colordialog в wpf
Отправлено: Teltro от 01-04-2019, 21:06:34
Всё, работает, спасибо.
Название: Re: Использование цвета colordialog в wpf
Отправлено: Александр Ривилис от 01-04-2019, 21:34:50
Teltro,
Прочитай у меня в подписи правило про форматирование кода на форуме.