AIMP Forum

AIMP for PC => Дополнения / Addons => Разработка / Development => Topic started by: Black_AVP_Bim on September 26, 2024, 15:33:02

Title: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on September 26, 2024, 15:33:02
Уважаемые программеры, кто пишет на Delphi, не могли бы вы поделиться простейшим примером/шаблоном плагина визуализации?
ЕМНИП, в каком-то старом SDK был подобный пример, но начиная с 4-ой версии пропал ...
Перерыл весь этот раздел, единственное, что полезное нашёл - https://www.aimp.ru/forum/index.php?topic=46518.0 , но теме уже 10 лет и ссылки все битые.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on September 26, 2024, 21:43:48
Вот исходник одной из стандартной визуалок.
ACL-ку можно взять на гите (https://github.com/ArtemIzmaylov/ACL).

П.С. согласен, надо добавить пример в SDK
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on September 27, 2024, 13:41:14
Спасибо, Артём!
Однако, собрать плагин не получается: нет файлов, указанных в директивах {$I ABL.PEFlagsForDLL.inc}, {$I AIMP.Plugins.inc}.
При попытке компиляции такое сообщение:
[MakeDir Error] Unable to create directory "B:\DCUs\Win32\". Could not find a part of the path 'B:\DCUs\Win32\'.

Вопрос по ACL: после компиляции компоненты должны появиться в палитре?
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on September 27, 2024, 13:45:18
{$I ABL.PEFlagsForDLL.inc}, {$I AIMP.Plugins.inc}

их можно просто выкинуть, там просто define-ы

Вопрос по ACL: после компиляции компоненты должны появиться в палитре?

простой компиляции - нет, да они и не используются.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on September 27, 2024, 13:59:46
Всё равно  ошибка та же: пытается создать директорию на несуществующем диске B:\.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on September 27, 2024, 16:17:30
Всё равно  ошибка та же: пытается создать директорию на несуществующем диске B:\.

В свойствах проекта нужно поменять путь, куда класть DCU-шки (Building \ Delphi Compiler \ Unit output directory)
Это у меня RAM-drive на B: замаплен - туда весь рабочий мусор летит
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on September 27, 2024, 20:22:40
... П.С. согласен, надо добавить пример в SDK
Артём, если возьмёшься за это дело, то лучше пример плагина с использованием AIMPVisualData, к нему интерес и вопросов заметно больше, судя по темам в этом разделе.
Можно даже ничего не разрисовывать в Draw, что-нибудь простенькое. Хотя бы на таком примере разобраться со структурой плагина.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on September 27, 2024, 21:40:32
Вот три демки (пока только по Embedded). В SDK их включу при следующем обновлении.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on September 28, 2024, 15:48:12
Вот три демки (пока только по Embedded).
Собрал aimp_visDemo.dll, но ни 5.30, ни 5.40 её не видят.
В 5.00, 5.11 работает как в окне, так и в полноэкранном режиме.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on September 28, 2024, 21:00:42
Собрал aimp_visDemo.dll, но ни 5.30, ни 5.40 её не видят.
В 5.00, 5.11 работает как в окне, так и в полноэкранном режиме.

Нужной разрядности?
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on September 29, 2024, 15:34:03
Нужной разрядности?
Запутался я в этой разрядности. Почему-то в этих примерах не создаются отдельные папки Win32 и Win64, видно, что-то перемудрил с конфигурацией проекта, dll-ки компилировались в один каталог. Вчера уже по внутренностям их определил, кто есть кто: х32 или х64. Всё работает.

У меня вопрос: с какой периодичностью вызывается метод Draw в плагине и можно ли использовать таймер?
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on September 29, 2024, 22:16:25
с какой периодичностью вызывается метод Draw

где-то 30 в секунду. Таймер не имеет смысла использовать.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 01, 2024, 16:52:12
Артём, подскажи в какую сторону копать: мне нужно получить наложение цветов в режиме ADD из нескольких PNG.
На картинке это сделано с помощью StretchBlt, но она прозрачность не поддерживает.
В твоей ACL.Graphics.Ex вроде, нашёл то что нужно, но, боюсь, без примера мне не разобраться. Так понял, что графика должна загружаться в TACLDib?

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72498)
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 01, 2024, 20:32:07
Артём, подскажи в какую сторону копать: мне нужно получить наложение цветов в режиме ADD из нескольких PNG.
На картинке это сделано с помощью StretchBlt, но она прозрачность не поддерживает.
В твоей ACL.Graphics.Ex вроде, нашёл то что нужно, но, боюсь, без примера мне не разобраться. Так понял, что графика должна загружаться в TACLDib?

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72498)

Тебе нужен TACLBitmapLayer из ACL.Graphics.Ex. У него есть DrawBlend, которому как раз-таки можно задать режим наложения при отрисовке.

Как в TACLBitmapLayer загрузить PNGшку:

Code: [Select]
  LImage := TACLImage.Create('test.png');
  try
    LBitmap := LImage.ToBitmap;
    try
      LDib := TACLBitmapLayer;
      LDib.Assign(LBitmap);
    finally
      LBitmap.Free;
    end;
  finally
    LImage.Free;
  end;

TACLImage лежит в ACL.Graphics.Images
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 02, 2024, 23:15:10
Не получается установить ACLPackage для режима х64, ругается на секцию
requires
  rtl,
  vcl,
  designide, <<<<
  vclx,
  vclsmp,
  vclie,
  dclstd; <<<<<

[dcc64 Fatal Error] ACLPackage.dpk(35): E2202 Required package 'designide' not found

Если без установки в uses прописать нужные модули из runtime, то на каждый (и на все, что те ссылаются) выдаёт:
[dcc64 Fatal Error] ACL.Graphics.pas(16): F1026 File not found: 'ACL.Config.inc'

Может, что-то неправильно делаю...
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 02, 2024, 23:53:20
Не получается установить ACLPackage для режима х64

IDE работает в 32-битном режиме, пакет нужно ставить в 32-бит. А код уж компилится в обоих

Если без установки в uses прописать нужные модули из runtime, то на каждый (и на все, что те ссылаются) выдаёт:
[dcc64 Fatal Error] ACL.Graphics.pas(16): F1026 File not found: 'ACL.Config.inc'

Нужно пути прописать к файлам (ну или кинуть все в папку с проектом)
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 03, 2024, 13:04:35
Нужно пути прописать к файлам (ну или кинуть все в папку с проектом)
Пути прописаны ко всем библиотекам.
Даже если скопировать все pas из \Base в папку с проектом, ошибка та же: File not found: 'ACL.Config.inc', причём для обеих разрядностей и на все модули, где есть {$I ACL.Config.inc}.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 03, 2024, 17:02:41
ACL.Config.inc

так он лежит не в Base, а на уровне выше, рядом с пакетом. Конфиг распространяется на всю либу, а не только на Base
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 03, 2024, 18:58:03
так он лежит не в Base, а на уровне выше, рядом с пакетом.
Вот в этом вся загвоздка и была! Общую папку я и не прописал. Спасибо!
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 03, 2024, 22:02:55
Не получается нарисовать с прозрачностью. На png-ке красный круг на прозрачном фоне, а выводиться красный квадрат.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72517)

Компилируется без ошибок:
Code: [Select]
procedure TForm1.DrawBtnClick(Sender: TObject);
var
  LImage : TACLImage;
  LBitmap : TACLBitmap;
  LDib : TACLBitmapLayer;

begin
//  LImage := TACLImage.Create(HInstance, 'Red', PChar('RCDATA'));
  LImage := TACLImage.Create('d:\Delphi_Projects\ACL_exp\Red.png');
  try
    LBitmap := LImage.ToBitmap;
    try
      LDib := TACLBitmapLayer.Create;
      LDib.Assign(LBitmap);
    finally
      LBitmap.Free;
    end;
  finally
    LImage.Free;
  end;
  PaintBox.Canvas.Brush.Color := clBlack;
  PaintBox.Canvas.FillRect(PaintBox.ClientRect);
  LDib.DrawBlend(PaintBox.Canvas, Point(100,100), bmAddition, 255);
  LDib.Free
end;

Почему-то потребовалось указать полный путь к файлу, хотя картинка лежит в папке проекта.
Это понял, почему - в Release картинку закинул, а в Debug забыл.
Из ресурсов загрузить тоже не получилось, но она там точно есть.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 03, 2024, 22:23:41
Похоже баг дельфи. TBitmap.SupportsPartialTransparency всегда возвращает False, хотя пиксели у картинки валидные. Поисследую и отпишусь
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 03, 2024, 22:40:59
Как оказалось, все дело в Dib-секции, которую возвращает winapi, там почему-то нет одного блока данных. В общем... я сделал иначе, и оно даже стало чуть проще.

Code: [Select]
  LDib := TACLBitmapLayer.Create;
  LImage := TACLImage.Create('B:\Red.png');
  try
    LImage.SaveToDib(LDib);
  finally
    LImage.Free;
  end;
  PaintBox1.Canvas.Brush.Color := clBlack;
  PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);
  LDib.DrawBlend(PaintBox1.Canvas, Point(100,100), bmAddition, 255);
  LDib.Free

Только возьми с гит-хаба последнюю версию ACL.Graphic.Images
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 04, 2024, 11:51:44
В общем... я сделал иначе, и оно даже стало чуть проще.
Угу, заработало, сейчас рисуется нормально.
Но теперь другая незадача, вернее, две. Из ресурсов png так и не могу загрузить, пишет, что ресурс не найден, хотя при использовании VCL.Imaging.pngimage загружается:
Code: [Select]
  ImgR := TPNGImage.Create;
  ImgR.LoadFromResourceName(HInstance, 'Red');
Но этот TPNGImage, похоже, к ACL никак ни приткнуть.

Другая незадача в том, что мне нужно ресайзить выводимую картинку, а ACLDib.Resize использовать не получается и DrawBlend принимает только TPoint.

С первой проблемой разобрался, дошагав по твоим исходникам до TResourceStream, оказывается для типа ресурсов нужны обычные константы, вот так загружается:
  LImage := TACLImage.Create(HInstance, 'Red', RT_RCDATA).
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 04, 2024, 13:34:50
ACLDib.Resize использовать не получается

Это ресайз буфера, изображение не переносится.

ACLDib.Resize использовать не получается и DrawBlend принимает только TPoint

Да, нужно предварительно масштабировать картинку на другой буфер, и уже потом тот буфер выводить.
Там есть другая функция DrawBlend, принимающая TRect, вот с помощью нее тебе нужно отресайзить картинку на временный буфер, а уже потом его Blend-ить с учетом нужного режима.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 04, 2024, 14:36:36
Вроде, получилось, не знаю уж, насколько правильно:
Code: [Select]
procedure TForm1.DrawBtnClick(Sender: TObject);
var
  LImage : TACLImage;
  DstDib, LDib : TACLBitmapLayer;

begin
  LImage := TACLImage.Create(HInstance, 'Red', RT_RCDATA);
  LDib := TACLBitmapLayer.Create;
  DstDib := TACLBitmapLayer.Create(PaintBox.ClientRect);
  try
    LImage.SaveToDib(LDib);
  finally
    LImage.Free;
  end;
  PaintBox.Canvas.Brush.Color := clBlack;
  PaintBox.Canvas.FillRect(PaintBox.ClientRect);
  LDib.DrawBlend(DstDib.Canvas, Rect(50,50,300,300), 255, true);
  DstDib.DrawBlend(PaintBox.Canvas, Point(0,0), bmAddition, 255);
  LDib.Free;
  DstDib.Free
end;

Но как это будет шевелиться в плагине в Draw, ещё и ресайз слоёв делать надо при изменении размера окна.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 04, 2024, 21:14:18
Вроде правильно.

Но как это будет шевелиться в плагине в Draw, ещё и ресайз слоёв делать надо при изменении размера окна.

Целиком этот код в Draw не надо. Загрузка и ресайз должны быть в Init/Resize, а в Draw - непосредственно графика
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 04, 2024, 21:41:21
Не получается в плагине подключить модули  ACL.Graphics.Ex,  ACL.Graphics.Images (на форме работает).
При попытке компиляции открываются эти файлы и стопорится на одном и том же месте:
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72535)

[dcc64 Fatal Error] ACL.Graphics.Ex.pas(37): F2613 Unit 'Graphics' not found.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 04, 2024, 22:38:02
Не получается в плагине подключить модули  ACL.Graphics.Ex,  ACL.Graphics.Images (на форме работает).
При попытке компиляции открываются эти файлы и стопорится на одном и том же месте:
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72535)

[dcc64 Fatal Error] ACL.Graphics.Ex.pas(37): F2613 Unit 'Graphics' not found.

В свойствах проекта в разделе компилятора надо дописать в Unit scope names Vcl;Vcl.Imaging;Vcl.Touch;
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 05, 2024, 11:19:21
В свойствах проекта в разделе компилятора надо дописать в Unit scope names Vcl;Vcl.Imaging;Vcl.Touch;
Спасибо, Артём! Не подскажешь, где можно почитать про все эти настройки проекта, желательно на русском, чтоб тебя не дёргать каждый раз?
Столько, всё-таки, непонятного для меня полсе D7.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 05, 2024, 16:30:01
Собрал два варианта: на API и на ACL. Всё-таки, на ACL плагин заметно тяжелее получился, нагрузка на проц примерно в 3 раза больше, в полноэкранном режиме на моём железе еле шевелится, но зато более гладко выглядит. Если рисовать без блюра, то по нагрузке почти одинаково, но без него пикселизация заметна.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 06, 2024, 21:17:53
Не подскажешь, где можно почитать про все эти настройки проекта, желательно на русском, чтоб тебя не дёргать каждый раз?

Увы, не знаю. Это как-то все с опытом познавалось...

Всё-таки, на ACL плагин заметно тяжелее получился

Конечно, в ней много всего, в т.ч. много высокоуровневых оберток и зависимость от VCL.

Если рисовать без блюра, то по нагрузке почти одинаково

Blur как делаешь? средствами ACL?
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 06, 2024, 22:31:02
Blur как делаешь? средствами ACL?
Ну, да, в той процедуре DrawBlend(ACanvas: TCanvas; const R: TRect; AAlpha: Byte; ASmoothStretch: Boolean) последний параметр, как я понял, и задаёт блюр.

Средствами APi получилось сделать, поскольку это частный случай, когда нужен лишь режим смешивания Add, что позволили использовать обычные bmp-ки на чёрном фоне.
При выводе с помощью StretchBlt с параметром SRCPAINT этот фон не мешает.

Файлы, всё-таки, огромные получаются. Смотрю твои ddl-ки, они в сотни кБ укладываются, а у меня вариант на ACL аж 4 мега весит (release).
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 07, 2024, 11:36:29

последний параметр, как я понял, и задаёт блюр

Это растяжение картинки со сглаживанием.

Смотрю твои ddl-ки, они в сотни кБ укладываются, а у меня вариант на ACL аж 4 мега весит (release).

Они собираются с использованием AIMP.Runtime.dll, вся ACL оттуда тянется.

Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 07, 2024, 16:25:16
Это растяжение картинки со сглаживанием.
Кстати, при выводе со сглаживанием, параметр AAlpha в той процедуре игнорируется?
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 07, 2024, 16:41:51
Кстати, при выводе со сглаживанием, параметр AAlpha в той процедуре игнорируется?

Похоже на баг
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 08, 2024, 14:44:09
Артём, позволю себе ещё одно наблюдение по поводу процедуры
procedure TACLBitmapLayer.DrawBlend(ACanvas: TCanvas; const P: TPoint; AMode: TACLBlendMode; AAlpha: Byte = MaxByte);

ИМХО, что-то не так со смешением синего цвета с другими. Сравнивал по своим визуалкам на API и ACL, текстуры в них одинаковые, а результат смешения визуально разный.
При использовании ACL, если зелёный с красным даёт ожидаемый жёлтый, то при смешении синего с зелёным (красным) голубого (пурпурного) не получается, или эффект какой-то слабый.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 08, 2024, 22:47:32
Вроде все верно:
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72565)
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 08, 2024, 22:49:31
или эффект какой-то слабый.

Там, где эффект слабый, альфа-канал у пикселя есть?
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 09, 2024, 16:43:17
Дико извиняюсь, моя оплошность - перед выводом третьего цвета промежуточный буфер не очищался.
Как его правильно очищать? Я использовал TACLDib.Reset/
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 09, 2024, 16:47:00
Да, через Reset
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 16, 2024, 11:10:53
Странную вещь сегодня обнаружил сначала в плагине, но проверил и на обычной форме.
Заливаю канву чёрным цветом как обычно:
  PaintBox.Canvas.Brush.Color := clBlack;
  PaintBox.Canvas.FillRect(PaintBox.ClientRect);
Вывожу на неё картинку (белые прямоугольники на прозрачном фоне:

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72594)

Поверх неё накладывается в режиме bmMultiply другая:

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72593)

Результат:

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72595)

А должно быть так (картина из ФШ):

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=73485.0;attach=72592)


Но, если канву залить, выведя на неё чёрную картинку, то изображение получается ожидаемое.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 16, 2024, 14:30:19
 
  PaintBox.Canvas.Brush.Color := clBlack;
  PaintBox.Canvas.FillRect(PaintBox.ClientRect);

После такого у Canvas-а не будет альфа-канала. А мой DrawBlend его учитывает при работе.
У меня в ACL.Graphics есть acFillRect, который принимает не TColor, а TAlphaColor (System.UITypes). Правда подавать в нее нужно будет уже не clBlack, а TAlphaColors.Black
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 16, 2024, 15:03:12
После такого у Canvas-а не будет альфа-канала. А мой DrawBlend его учитывает при работе.
Вон, оно в чём дело. Спасибо.
Интересно, что при выводе в режиме bmAddition всё прокатывало, или именно потому, что ADD.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on October 16, 2024, 15:52:10
Теперь другая беда... С такой заливкой:
  acFillRect(FCanvas, Rect(0, 0, FWidth, FHeight), $FF000000);
всё правильно заработало, но на 2624.
Запускаю плагин на другом компе (там 2628) - прозрачности нет. Обновление до 2629 ничего не изменило.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on October 16, 2024, 21:33:47
всё правильно заработало, но на 2624.
Запускаю плагин на другом компе (там 2628) - прозрачности нет. Обновление до 2629 ничего не изменило.

Скинь плагин, посмотрю. Ночная версия пока еще в очень плохом состоянии.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on November 02, 2024, 19:01:23
Возможно ли как-то ограничить размеры окна визуализации со стороны плагина, сделать его пропорциональным фоновой текстуре или вообще задать жёсткие размеры?
Неприглядно смотрятся те же индикаторы в LVU с искажёнными пропорциями.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on November 02, 2024, 19:22:34
Можно лимитировать лишь разрешение. А пропорции - тут как нарисуешь на канвасе, так и будет
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on November 10, 2024, 18:50:15
Пытаюсь прикрутить к визуалке форму для настройки опций по примеру "GUI Demo" из SDK.
Как правильно передать значения из контролов формы в модуль визуализации? У самой формы переменной в явном виде нет. Ничего лучшего пока не придумал, как объявить глабальные переменные в модуле формы, а из модуля визуализации их считывать.
Вроде, работает, но насколько это криминально?
И как и куда можно сохранять настройки плагина?
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on November 11, 2024, 08:25:09
Ничего лучшего пока не придумал, как объявить глабальные переменные в модуле формы, а из модуля визуализации их считывать.
Вроде, работает, но насколько это криминально?

Ничего криминального в этом нет.

И как и куда можно сохранять настройки плагина?

Как работать с конфигом плеера есть вот в этом плагине:
https://github.com/ArtemIzmaylov/aimp_switchOutput/blob/main/aimp_switchOutputUnit.pas
см. метод Initialize и Finalize
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on November 11, 2024, 11:27:44
Ничего криминального в этом нет.
Но, как-то, вроде, криво кажется...

Как работать с конфигом плеера есть вот в этом плагине:
Спасибо, Артём! Буду разбираться.
Ещё и с локализацией непонятки остались.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on November 11, 2024, 11:39:04
Но, как-то, вроде, криво кажется...

Это, если бы у тебя был большой продукт. А тут оно все изолировано.


Ещё и с локализацией непонятки остались

для GUI API локализации подхватываются автоматически. В справке есть об этом
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on November 16, 2024, 19:04:28
Артём, не сталкивался с такой проблемой: почему SetWorldTransform не работает в буфере?
В инете подобные вопросы встречаются, кто-то считает, что и не должно, а кто-то утверждает, что работает. Вроде, всё делаю, как описано, пробовал и на ACLDib, и на низком уровне. Если никакой трансформации нет, то картинка выводится, если же добавляешь поворот, отражение или наклон, то изображения нет.
Непосредственно с контекстом PaintBox или DC, что передаётся в плагине в Draw, работает, а через буфер нет.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on November 17, 2024, 13:15:10
Нужно для Canvas.Handle вызвать SetGraphicMode(dc, GM_ADVANCED)
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on November 17, 2024, 18:36:34
Разобрался, в чём дело. Перед тем, как вывести трансформированный буфер на целевой контекст, нужно вызвать функцию ModifyWorldTransform с параметром MWT_IDENTITY, тогда всё работает.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on May 14, 2025, 13:49:43
Можно ли в одном плагине визуализации создать два независимых окна со своим контекстом?
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on May 14, 2025, 13:58:42
Можно ли в одном плагине визуализации создать два независимых окна со своим контекстом?

Можно
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on May 14, 2025, 14:16:52
Лаконичный ответ.  ;)
То есть, если я правильно понял, можно создать два класса, к примеру, TVisualization1 и TVisualization2 ?
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on May 14, 2025, 14:57:57
Лаконичный ответ.  ;)
То есть, если я правильно понял, можно создать два класса, к примеру, TVisualization1 и TVisualization2 ?

Визуализаций быть может зарегистрировано сколько угодно. Ведь все сводится к вызову:
Code: [Select]
  Core.RegisterExtension(IAIMPServiceVisualizations, TVisualization.Create);
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on May 14, 2025, 15:15:08
Тогда, правильно ли будет, если сделать так:
создать
TVisualization1
затем
TVisualization2 = class(TVisualization1)
и в нём перекрыть только метод Draw ?
Регистрировать, ес-но, оба.
Мне не совсем понятно, как несколько визуализаций будут делить DC, передаваемый плеером.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on May 14, 2025, 15:21:06
и в нём перекрыть только метод Draw ?

Да, без проблем

Мне не совсем понятно, как несколько визуализаций будут делить DC, передаваемый плеером.

А рисует на DC только один плагин - тот, который выберет пользователь.
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on May 14, 2025, 15:27:21
А рисует на DC только один плагин - тот, который выберет пользователь.
Так мне нужно, чтоб оба окна были на экране одновременно.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on May 14, 2025, 15:33:19
Так мне нужно, чтоб оба окна были на экране одновременно.

В таком случае ты должен рисовать уже не на моем DC, а на каком-то своем.
И для этого тебе нужно реализовывать IAIMPExtensionCustomVisualization вместо IAIMPExtensionEmbeddedVisualization
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on May 14, 2025, 16:01:23
На IAIMPExtensionCustomVisualization, к сожалению, примеров нет.
Title: Re: Помощь в разработке плагина визуализации
Post by: Artem on May 14, 2025, 16:42:03
На IAIMPExtensionCustomVisualization, к сожалению, примеров нет.

IAIMPExtensionCustomVisualization там по сути только Draw, куда приходят данные визуализации. А где и как ты будешь их визуализировать - полностью на твоей совести. Я так понимаю, тебе нужно создать TForm и на Draw от плагина рисовать на ее Canvas.
Title: Re: Помощь в разработке плагина визуализации
Post by: Vladislav Letov on December 18, 2025, 23:05:47
можно пошаговую инструкцию для чайников?
мне надо вот это видео превратить в визуализацию.
https://skr.sh/vZ8AgFX4eqJ
Title: Re: Помощь в разработке плагина визуализации
Post by: DarkDrawKill on December 19, 2025, 00:10:59
можно пошаговую инструкцию для чайников?
мне надо вот это видео превратить в визуализацию.
https://skr.sh/vZ8AgFX4eqJ
прям для чайников нету как пойдёте зависит от языка на котором писать будете обычно берут Visual Studio с GDI+ (для C++) так же можете на Delphi с ACL
Title: Re: Помощь в разработке плагина визуализации
Post by: Black_AVP_Bim on December 19, 2025, 17:47:13
мне надо вот это видео превратить в визуализацию.
Это какой-то реальный плагин или просто анимрованная картинка?
На видео связи с музыкой никакой не просматривается: ни по частоте, ни по уровню.
Title: Re: Помощь в разработке плагина визуализации
Post by: Vladislav Letov on December 19, 2025, 22:31:08
Это какой-то реальный плагин или просто анимрованная картинка?
На видео связи с музыкой никакой не просматривается: ни по частоте, ни по уровню.
просто анимация. точнее это скринсейвер.