Добавление значка к курсору в AutoCAD 2015 с помощью .NET
В AutoCAD API 2015 появилось много новых возможностей.
Одна из новых возможностей та, что теперь можно прицепить к курсору свой значок, то, что вы, возможно, видели в статье блога с точки зрения пользователя. Хорошей новостью является то, что возможность добавлять свои собственные значки курсора обеспечивается в общедоступном API (хотя я в действительности использовал внутренний, но при этом общедоступный метод для конвертации растра в требуемый формат изображения значка).
Вместо того чтобы загружать и использовать растровый (bitmap) ресурс я решил создать растровое изображение програмно и преобразовать его в формат, необходимый для значка курсора. Если вы загрузите свой собственный растровый ресурс и увидите, что изображение перевернуто, вы можете также попробовать использовать ConvertBitmapToAcGiImageBGRA32Ex() вместо ConvertBitmapToAcGiImageBGRA32(), который я использовал, чтобы убедится, что это может помочь.
Я обнаружил несколько полезных трюков и объединил их вместе: чтобы сделать прозрачный фон для вашего значка нужно использовать пурпурный цвет (R = 255, G = 0, B = 255). Я думаю, что я знал это и раньше, но я как-то привык думать о цвете, необходимом для прозрачных пикселов в иконках Ленты - R = 192, G = 192, В = 192 - а так пришлось заново искать его. Я также обнаружил, что вам нужно установить приоритет значка курсора в 1 или 2, если вы хотите, чтобы ваш знак был заменен системными значками (по крайней мере при операциях выбора примитивов на экране) или 3, если вы хотите, чтобы ваш значок был виден всегда. Там могут быть и другие варианты приоритета, но это те, которые я нашел на данный момент.
Я решил добавить значок курсора в одной команде и удалить его в другой – для того чтобы увидеть как это будет работать в начале выбора примитивов и в других случаях - но более характерно добавлять значок при запуске JIG и удалять его сразу после его завершения.
Вот C# код:
- using Autodesk.AutoCAD.EditorInput;
- using Autodesk.AutoCAD.GraphicsInterface;
- using Autodesk.AutoCAD.Internal;
- using Autodesk.AutoCAD.Runtime;
- using System.Drawing;
- namespace CursorBadges
- {
- public class Commands
- {
- private ImageBGRA32 _img = null;
- [CommandMethod("ACB")]
- public void AddCursorBadge()
- {
- if (_img == null)
- {
- using (var bmp = new Bitmap(85, 85))
- {
- using (var g = Graphics.FromImage(bmp))
- {
- // В качестве прозрачного цвета значка используем
- // Magenta. А в качестве фона используем три концентрических
- // заполненных кольца
- g.Clear(Color.Magenta);
- g.FillEllipse(Brushes.Blue, 5, 5, 60, 60);
- g.FillEllipse(Brushes.White, 15, 15, 40, 40);
- g.FillEllipse(Brushes.Red, 25, 25, 20, 20);
- }
- _img = Utils.ConvertBitmapToAcGiImageBGRA32(bmp);
- }
- }
- // Добавление значка с приоритетом 1 означает, что
- // он не будет виден при операциях выбора. Изменение
- // этого значения в 3 достаточно, чтобы и при операциях
- // выбора был виден наш значок (большее значение
- // еще увеличит шансы на то, что он останется видимым)
- var cbu = new CursorBadgeUtilities();
- cbu.AddSupplementalCursorImage(_img, 1);
- }
- [CommandMethod("RCB")]
- public void RemoveCursorBadge()
- {
- var cbu = new CursorBadgeUtilities();
- if (cbu.HasSupplementalCursorImage() && _img != null)
- cbu.RemoveSupplementalCursorImage(_img);
- }
- }
- }
Когда вы запустите команду ACB вы увидите значок рядом с курсором. Команда RCB удаляет значок полностью.
Обсуждение: http://adn-cis.org/forum/index.php?topic=736
Опубликовано 16.05.2014Отредактировано 18.05.2014 в 14:35:28