Вверх ↑
Этот топик читают: Гость
Ответов: 2236
Рейтинг: 676
#1: 2012-05-24 01:18:58 ЛС | профиль | цитата
Для тестирования и обсуждения доступны следующие дополнения:
  1. Элементам использующим заливку добавлено свойство UseOffsetBrush:
    @UseOffsetBrush=Сдвигать заливку (картинку при PatternStyle = True или штриховые линии, к примеру Style = bsVertical): False - без сдига, True - сдвиг заливки в начало рисования, FromOffsetBrush - сдвиг на значение из точки OffsetBrush|4|0|False,True,FromOffsetBrush
    И точка для подачи данных сдвига:
    *OffsetBrush=Значение сдига заливки при UseOffsetBrush = FromOffsetBrush в формате Y*65536 + X|4|1
    Скриншот примера
  2. Добавлено свойства для отмены рисования очертания фигур. Сейчас очертание (линия) рисуется в любом случае. При заливки картинкой это не всегда нужно, да и бывают случаи когда фигура нужна без очертания.
    @Outline=Рисовать очертания фигуры линией|14|1|False,True
  3. В элемент Img_Arc: Дуга добавлена хорда.
    @Mode=Режим отрисовки фигуры: Arc - дуга, Pie - сектор, Chord - хорда|4|0|Arc,Pie,Chord
    Так-же добавлено свойство UseAngle упрощающее работу с элементом:
    UseAngle=Использовать данные Point3 как угол начала, а Point4 как угол конца фигуры|14|0|False,True
    И изменил иконки, сделав переключение при смене свойства Mode.
    Иконки элемента Img_Arc
  4. Новый элемент Img_Pen Применить для рисования линии геометрическое пероНа данный момент все элементы используют косметическое перо, которое быстрое и простое. При внесения небольших изменений в элементы и добавления данного элемента, можно рисовать линии и очертания фигур геометрическим пером. А это заливка линии (как штриховыми линиями так и картинкой), вписывание очертания в размер фигуры (если линия толще 1), изменения конца линии и мест прерывания и многое другое (см. пример к элементу). Элемент подключается как и элементы трансформации (внесены дополнения в элемент Img_Draw.pas).
    тестирование элемента Img_Pen

  5. Новый элемент Img_ROP2 Бинарные растровые операции. Элемент позволяет назначить объекту вывода графики бинарную растровую операцию. Всего доступно 16 операций. По элементу сделан достаточно информативный пример с описанием и таблицей всех операций. У элемента сменные иконки под каждую операцию.
    таблица из примера по элементу ROP2

  6. Новый элемент (он же старый) Img_CurveBezier Кривая Безье обновлен до версии 1.10. Добавлена трансформация и возможность использования геометрического пера (см. пункт 4).
    тест элемента кривой Безье
    пример создания кривой Безье и копирования в буфер обмена элемента с внесенными данными для последующей вставки в схему
  7. Новый элемент Img_FocusRect Рисует фокусную рамку.
    Фокусная рамка
Совместимость сохранена


new_2015_10_09.zip]Архив с последними дополнениями 2015-10-09        Для тестирования


старый пост от 24.03.2012 (устаревшая информация)

1. Добавил элементам стили линий и стили заливки.
2. Новый элемент Кривая Безье.
3. Элементам Дуга и Эллипс добавил в свойства Point3 и Point4 возможность редактировать через меню XY.
4. Заменил в элементе Заливка области FloodFill на ExtFloodFill и добавил заливку по границе (описание 1nd1g0).
Все должно остаться совместимым с предыдущими версиями.

Style=Определяет стиль заливки внутренней
bsClear - без заливки
bsSolid - цветом BgColor
bsPattern - изображением шаблоном
*bsManual - пользовательская заливка по св-ву BgColors
bsHorizontal - горизонтальными линиями
bsVertical - вертикальными линиями
bsFDiagonal - диагональными линиями (с лева на права)
bsBDiagonal - диагональными линиями (с права на лево)
bsCross - решетка
bsDiagCros - диагональная решетка
----------------
*Только для элемента Диаграмма
StylePen=Определяет стиль линии (только при Size = 1)
psSolid - сплошная
psDash - штриховая
psDot - пунктирная
psDashDot - штрих-пунтктирная
psDashDotDot - чередуется штрих и два пунктира
скачать архив В архиве схемы для тестирования, измененные элементы (Img_Draw заменить), новый элемент Кривая Безье.

тест элементов
тест элемента кривой Безье
карма: 11

7
файлы: 8testelements.jpg [92.7KB] [2839], testcurvebezier.jpg [26.5KB] [2846], testelements.zip [131.3KB] [552], table_rop2.png [34.5KB] [2117], create_img_curvebezier.png [8.6KB] [2020], test_img_pen.png [31.3KB] [2035], new_2015_10_09.zip [57.4KB] [587], img_focusrect.png [688.1KB] [1917]
Голосовали:1nd1g0, ser_davkin, foksov, sаmakacd, LainX, Dseren, miver
Ответов: 3889
Рейтинг: 362
#2: 2012-05-24 01:29:42 ЛС | профиль | цитата
sla8a, в заливке лучше сделать как я предлагал: два режима, по умолчанию должен отрабатывать код типа ExtFloodFill(pDC, x1, y1, OldColor, FLOODFILLBORDER) или FloodFill(pDC, x1, y1, OldColor), причём OldColor по умолчанию должен быть равен 0 (clBlack). Это нужно для совместимости со старыми схемами и вообще полезно в некоторых случаях заливки.
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2012-05-24 01:46:33 правка | ЛС | профиль | цитата


Редактировалось 10 раз(а), последний 2021-06-21 04:31:12
карма: 0

0
Ответов: 3889
Рейтинг: 362
#4: 2012-05-24 09:01:59 ЛС | профиль | цитата
93.84.38.172, оставлять FloodFill не обязательно, он устарел со времён 16-битных ОС и всё равно является заглушкой к ExtFloodFill. Элементу нужно добавить свойство на два состояния: FLOODFILLBORDER (по умолчанию) и FLOODFILLSURFACE. В зависимости от состояния case в коде будет выполнять либо


#pas
ExtFloodFill(pDC, x1, y1, Color2RGB(ReadInteger(_Data,_data_BorderColor,_prop_BorderColor)), FLOODFILLBORDER);
либо

#pas
ExtFloodFill(pDC, x1, y1, GetPixel(pDC, x1, y1), FLOODFILLSURFACE);
где BorderColor - свойство типа Color (умолчание - чёрный) и соответствующая ему точка.
------------ Дoбавленo в 09.01:
Нужно это всё для эмуляции старого поведения IMG_FloodFill по умолчанию, что избавляет от необходимости делать Ex версию элемента. После таких изменений можно убедительно попросить разработчиков залить Ваши элементы на SVN.
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#5: 2012-05-24 09:07:33 ЛС | профиль | цитата
После таких переделок надо проверить все компоненты рисования, тк изменен модуль Img_Draw (с ним, кстати, работает еще и DocumentTemplate), а не только те, которые отредактировали. Пока это не будет сделано, добавлено на SVN ничего не будет. Причем, проверять надо еще и в режиме печати, а не только рисование на контексте
карма: 22

0
Ответов: 2236
Рейтинг: 676
#6: 2012-05-24 09:09:06 ЛС | профиль | цитата
1nd1g0, обновил архив с измененным элементом заливка.

nesco, в Img_Draw добавлен _prop_StylePen:integer; , a в _prop_Style TBrushStyle заменен на integer.
Про
nesco писал(а):
с ним, кстати, работает еще и DocumentTemplate)
не знал .
карма: 11

0
Ответов: 3889
Рейтинг: 362
#7: 2012-05-24 10:06:13 ЛС | профиль | цитата
sla8a, может тогда за одно изобразим аппроксимирующие сплайны из GDI+? Они гораздо удобнее Безье в использовании, даём им массив точек, уровень аппроксимации ("плавности" линий), перо и всё, GDI+ самостоятельно проведёт плавную кривую по всем точкам и не нужно никаких касательных. Я в прошлом году делал такое на IC, с прозрачностью линий и т.п.
------------ Дoбавленo в 10.06:
sla8a писал(а):
обновил архив с измененным элементом заливка

Для полной совместимости по умолчанию не surface, а border должен стоять. Правда, элемент явно практически никто с момента его создания не использовал, иначе давно бы возмутились "неправильным" алгоритмом заливки.
карма: 1

0
Ответов: 1376
Рейтинг: 197
#8: 2012-05-24 12:10:04 ЛС | профиль | цитата
nesco писал(а):
проверить все компоненты рисования, тк изменен модуль Img_Draw

Использующие Img_Draw.pas:

hiImg_AlphaBmp.pas
hiImg_Arc.pas
hiImg_Bmp.pas
hiImg_Diagram.pas
hiImg_Ellipse.pas
hiImg_FloodFill.pas
hiImg_GetPoint.pas
hiImg_Gradient.pas
hiImg_Line.pas
hiImg_MultiText.pas
hiImg_Point.pas
hiImg_Polygon.pas
hiImg_Rectangle.pas
hiImg_Text.pas
hiDocumentTemplate.pas
hiPrint_GradientRect.pas
hiPrint_Image.pas
hiPrint_Shape.pas
hiPrint_Table.pas
hiPrint_Text.pas
карма: 1

0
Ответов: 2236
Рейтинг: 676
#9: 2012-05-24 15:04:35 ЛС | профиль | цитата
Посмотрел остальные элементы, работают (схемы из справки и примеров). Нет возможности проверить в режиме печати. Попробуйте распечатать используя схему из примеров PrintPrintTextDoc.sha, с обновленным Img_Draw.pas (из архива в первом посте).

Еще подправил элемент Заливка области и добавил схему для тестирования (архив обновил).

1nd1g0, посмотри тестовую схему TestFloodFill (в архиве). Вот на моей памяти не один из графических редакторов (к примеру тотже Paint) не заливает используя Border, везде Surface. Так зачем у HiAsm по умолчанию ставить не стандартно? Не думаю что пострадает совместимость если оставить заливку по Surface. ExampleDrawDemoBabyPainter - не пострадает
1nd1g0 писал(а):
за одно изобразим аппроксимирующие сплайны из GDI+?

Да я не против, информации не могу найти нужной. Если есть что по этой теме или ссылка, посмотрю, если осилю сделаю.
карма: 11

0
Ответов: 3889
Рейтинг: 362
#10: 2012-05-24 18:22:40 ЛС | профиль | цитата
sla8a, простейший пример работы ломанной линией, "сглаживаемой" автоматически генерируемыми сплайнами без необходимости самостоятельно расчитывать касательные. Мечта художника. Потягайте ползунки, начиная с нижнего:
code_27990.txt
------------ Дoбавленo в 17.46:
Это была идея компонента GP_DrawCurve. Если он будет не один, то теперь надо подумать над GP_PointArray под массив вершин. Ещё нужно как-то дружить наш Bitmap и TGPImage, у меня год назад стояла задача просто поверх всех окон рисовать, потому этот вопрос лично мною пока не исследован.
------------ Дoбавленo в 18.22:
foksov писал(а):
Если есть что по этой теме или ссылка, посмотрю
По теме лучше всего книга "Графика в проектах Delphi" Осипова.
карма: 1

1
файлы: 1code_27990.txt [3.7KB] [733]
Голосовали:sla8a
Гость
Ответов: 17029
Рейтинг: 0
#11: 2012-05-24 21:59:36 правка | ЛС | профиль | цитата


Редактировалось 10 раз(а), последний 2021-06-21 04:31:12
карма: 0

0
Ответов: 3889
Рейтинг: 362
#12: 2012-05-27 12:49:24 ЛС | профиль | цитата
Итак, коллеги, каков Ваш вердикт относительно новых компонентов Если внимательно посмотреть, легко убедиться, что единственное изменённое свойство в Img_Draw (_prop_Style) не используется нигде, кроме доделанных sla8a компонент. То есть физически не может повлиять на работу остальных, а его, судя по тестам, работают прекрасно. Только заливка должна быть по умолчанию в режиме, совместимом со старым компонентом.
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#13: 2012-05-27 14:39:10 ЛС | профиль | цитата
1nd1g0 писал(а):
То есть физически не может повлиять на работу остальных

Если свойство не работает, то его надо выключить. Думаю, вы знаете, как это делается
карма: 22

0
Ответов: 3889
Рейтинг: 362
#14: 2012-05-27 14:49:39 ЛС | профиль | цитата
nesco, оно работает в его компонентах, ты предлагаешь объявлять его индивидуально в каждом и удалить из Img_Draw вообще?
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#15: 2012-05-27 14:55:23 ЛС | профиль | цитата
1nd1g0 писал(а):
оно работает в его компонентах, ты предлагаешь объявлять его индивидуально в каждом и удалить из Img_Draw вообще?

Еще раз -- отключить в свойствах тех компонентов, где не работает. Если отключаемых больше, то сделать наоборот -- прописать персонально каждому, которому надо
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)