Вверх ↑
Этот топик читают: Гость
Ответов: 1988
Рейтинг: 633
#31: 2014-06-04 20:53:13 ЛС | профиль | цитата
nesco, в элементах есть возможность заливки штриховыми кистями и шаблоном изображения, но нет возможности сдвига заливки. Можно все это поправить.
Вот схема для тестирования: test_offsetbrush_1.sha
В схеме прямоугольник рисуется в позиции курсора, а заливка изображением может не совпадать с началом прямоугольника, так как начала заливки начинается с позиции 0,0 и продолжается мозаично (тоже касается и штриховых кистей).
В результате видим вот такое:

Внеся небольшие изменения можно сдвигать заливку, то есть подгонять под рисуемую фигуру.Добавить свойство:
@UseOffsetBrush=Сдвигать заливку на значение OffsetBrush|14|1|True,False
и добавив точку для подачи данных для сдвига:
*OffsetBrush=Сдиг заливки (картинки при PatternStyle = True и штриховых линий Style = bsVertical и т.п.) при UseOffsetBrush = True в формате Y*65536 + X|4|1

В элементах будет добавлено только это:
#pas
if _prop_UseOffsetBrush then
begin
p := cardinal(ReadInteger(_Data, _data_OffsetBrush, 0));
SetBrushOrgEx(pDC, smallint(p and $FFFF), smallint(p shr 16), nil)
end;
Все остальное в Img_Draw.pas и ImgDrawPoint.ini как и в случае с свойствами Style и PatternStyle.

После изменений заливка картинкой постоянно подгоняется под прямоугольник (см. пример test_offsetbrush_2.sha в архиве)

В архиве файлы из последней ревизии с дополнениями и две схемы для тестирования: test_offsetbrush_01.zip
  • Для тестирования изменения внес только в Img_Rectangle, но если возражений не будет, то обновлю все элементы и выложу одним архивом для обновления.
  • карма: 9

    1
    файлы: 4image_test_1.png [3.4KB] [728], image_test_2.png [3.3KB] [733], test_offsetbrush_01.zip [6.3KB] [284], test_offsetbrush_1.sha [1.4KB] [368]
    Голосовали:miver
    Разработчик
    Ответов: 25687
    Рейтинг: 2088
    #32: 2014-06-04 22:30:46 ЛС | профиль | цитата
    sla8a писал(а):
    *OffsetBrush=Сдиг заливки

    А это зачем? Вроде у нас нет вывода свойств на нижние точки. Почему предпочтение дано именно этому свойству
    карма: 20

    0
    Ответов: 1988
    Рейтинг: 633
    #33: 2014-06-04 22:48:19 ЛС | профиль | цитата
    nesco писал(а):
    вывода свойств на нижние точки
    Ничего на нижние точки не выводится. Подаются данные на для сдвига заливки. Выглядит так:
    Скриншот тестовой схемы test_offsetbrush_2.sha
    карма: 9

    0
    файлы: 1image_test_3.png [7.8KB] [688]
    Разработчик
    Ответов: 25687
    Рейтинг: 2088
    #34: 2014-06-04 23:21:00 ЛС | профиль | цитата
    И если ты особачил UseOffsetBrush, то где тогда doUseOffsetBrush
    ------------ Дoбавленo в 23.21:
    Короче, я посмотрел внимательней -- надо оставить OffsetBrush, но добавить doUseOffsetBrush
    карма: 20

    0
    Ответов: 1988
    Рейтинг: 633
    #35: 2014-06-04 23:25:13 ЛС | профиль | цитата
    nesco, свойство UseOffsetBrush работает так же как и свойство PatternStyle. Стоит True идет чтение данных с OffsetBrush.
    nesco писал(а):
    И если ты особачил UseOffsetBrush, то где тогда doUseOffsetBrush
    Так в Img_Draw.pas, там где и процедуры doPatternStyle и doStyle.
    ------------ Дoбавленo в 23.25:
    sla8a писал(а):
    и добавив точку для получения данных для сдвига:
    Вот что вас ввело в заблуждение. Моя вина, неправильно написал. Правильно:
    и добавив точку для подачи данных для сдвига


    карма: 9

    0
    Разработчик
    Ответов: 25687
    Рейтинг: 2088
    #36: 2014-06-04 23:33:22 ЛС | профиль | цитата
    sla8a, добавляй во все элементы, будем целиком потом тестировать. Я не против, че по одному элементу тестировать-то
    карма: 20

    0
    Ответов: 1988
    Рейтинг: 633
    #37: 2014-06-10 23:12:37 ЛС | профиль | цитата
    nesco, вот все последние наработки.

    Скриншот примера
    Совместимость сохранена И так по порядку:
    1. Добавлено свойство:
      @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
      И изменил иконки, сделав переключение при смене свойства Mode.
      Иконки элемента Img_Arc

      В ini файлах элементах наследников ImgDrawPoint.ini заблокировал неиспользуемые свойства и точки (к примеру Img_Line.ini).


    Архив с элементами удален! Вносятся изменения. Ждите.

    карма: 9

    0
    файлы: 2image_arc.png [1.1KB] [1676], image_offsetbrush.png [89.5KB] [1798]
    Ответов: 1988
    Рейтинг: 633
    #38: 2014-07-02 01:07:35 ЛС | профиль | цитата
    В первом посте описание предлагаемых дополнений и новые элементы. Там же архив для тестирования. У кого есть желания тестируйте.
    nesco, обратите внимание на пример WindowsExampleDrawdemoEllipse.pas, после добавления Orientation=Ориентация текста (в градусах) текст перекосило.

    карма: 9

    0
    Разработчик
    Ответов: 25687
    Рейтинг: 2088
    #39: 2014-07-02 01:46:46 ЛС | профиль | цитата
    Исправил. Ты там еще попроверяй, может еще чего найдешь. Но лучше сам исправляй, а тут выкладывай правки, если не трудно, конечно
    карма: 20

    0
    Ответов: 758
    Рейтинг: 111
    #40: 2014-09-30 15:00:39 ЛС | профиль | цитата
    sla8a, У меня пример Create_Img_CurveBezier.sha не запускается пишет
    E:\BD\HiAsm\Elements\delphi\code\hiImg_CurveBezier.pas(39) Error: Undeclared identifier: 'ReadObject'

    ------------ Дoбавленo в 15.00:
    Извините за беспокойство решение нашел сам - заменой Share.pas [burl=http://forum.d2h.ru/forum.html?q=3&p=268371]отсюда[/burl]
    карма: 1

    0
    Ответов: 1841
    Рейтинг: 123
    #41: 2015-10-09 13:01:41 ЛС | профиль | цитата
    sla8a,
    Не знаю, понравится ли предложение.
    Дополнить эту серию таким компонентом, как Img_Rectangle и Img_Ellipse он должен динамически создавать фигуры:
    1. различной геометрии (прямоугольник, эллипс, ромб, (трапецию?)...треугольник, как в примере белая фигура - вывести точку.
    Примечание: Часть прямоугольника не входящая в фигуру должна (может) быть прозрачной.
    2. фигуру можно перемещать мышкой, как в примере белая фигура.
    3. иметь подсказку. Подсказка формируется динамически при создании фигуры, как в примере белая фигура - вывести точку.
    4. цвет заливки и контура формируется динамически при создании фигуры, как в примере синяя, или белая фигура - вывести точки.
    5. надпись формируется динамически при создании фигуры, как в примере синяя фигура - вывести точку.
    Примечание: размеры фигуры формируются сообразно длине и шрифту(размеру) надписи (X,Y). Надпись центрируется (не надо лево-право).
    6. координаты формируются динамически при создании фигуры, как в примере синяя фигура - вывести точку.

    Пример. http://forum.hiasm.net/forum_serv.php?q=56&id=4053
    Add(MainForm,2953706,21,105)
    {
    Width=770
    Height=549
    Point(Width)
    Point(Height)
    Point(Handle)
    link(onCreate,78395:doEvent1,[(117,125)(117,209)])
    }
    Add(Hub,78395,280,203)
    {
    OutCount=3
    link(onEvent1,10658158:doAlign,[(312,209)(312,188)])
    link(onEvent2,2997142:doFor,[(306,216)(306,234)(149,234)(149,251)])
    }
    Add(Img_TextEx,16636350,329,252)
    {
    Font=[MS Sans Serif,8,0,-16777211,1]
    Point(X)
    Point(Y)
    link(Bitmap,14438375:Var2,[])
    link(Text,6579562:Value,[(342,166)(412,166)])
    link(Y,5527788:Var2,[(356,240)(293,240)])
    }
    Add(MathParse,7729257,245,252)
    {
    DataCount=4
    MathStr="((%1 /(%3+ 1))* %4)- (%2/2)"
    ResultType=0
    link(onResult,253803:doEvent1,[(289,258)(289,244)])
    link(X1,2953706:Width,[(251,194)(27,194)])
    link(X2,3657703:Var1,[(258,240)(296,240)(296,296)])
    link(X3,15305470:Var2,[])
    link(X4,2997142:Position,[(272,240)(220,240)(220,289)(167,289)])
    }
    Add(Memory,3354146,259,133)
    {
    Default=Integer(7)
    }
    Add(For,2997142,161,245)
    {
    Start=1
    link(onEvent,816330:doEvent1,[])
    link(End,15305470:Var1,[(174,187)])
    }
    Add(GetDataEx,15305470,259,182)
    {
    link(Data,3354146:Value,[])
    }
    Add(PaintBox,10658158,329,168)
    {
    Top=50
    Width=762
    Height=472
    Align=4
    Point(doAlign)
    Point(onMouseMove)
    Point(MouseX)
    Point(MouseY)
    Point(Handle)
    }
    Add(GetDataEx,14438375,329,210)
    {
    link(Data,10658158:Bitmap,[])
    }
    Add(Hub,253803,301,238)
    {
    OutCount=3
    link(onEvent1,12634381:doEvent1,[(353,244)(353,139)])
    link(onEvent2,11318370:doDraw,[(395,251)(395,356)])
    link(onEvent3,16636350:doDraw,[])
    }
    Add(PointXY,497124,441,231)
    {
    Y=52
    link(X,438429:Result,[])
    link(Y,7988523:Result,[])
    }
    Add(PointXY,631950,497,231)
    {
    link(X,8930881:Result,[])
    link(Y,10915429:Result,[(510,201)(552,201)])
    }
    Add(GetDataEx,3657703,315,291)
    {
    Angle=1
    link(Data,16636350:TextWidth,[(335,296)])
    }
    Add(Memory,6579562,406,28)
    {
    Default=String(qwerty 123456)
    }
    Add(Img_Ellipse,11318370,476,350)
    {
    Point2AsOffset=0
    UseOffsetFill=1
    Style=1
    Color=15780518
    BgColor=15780518
    Point(Point1)
    Point(Point2)
    Point(BgColor)
    link(Bitmap,14438375:Var3,[(482,215)])
    link(Point1,497124:Point,[(496,306)(447,306)])
    link(Point2,631950:Point,[])
    }
    Add(Math,438429,441,133)
    {
    OpType=1
    Op2=3
    }
    Add(Math,8930881,497,140)
    {
    Op2=8
    link(Op1,3657703:Var3,[(503,128)(321,128)])
    }
    Add(Math,10915429,546,140)
    {
    Op2=8
    link(Op1,5458469:Var1,[(552,128)(349,128)])
    }
    Add(Hub,12634381,385,133)
    {
    OutCount=4
    link(onEvent1,438429:doOperation,[])
    link(onEvent2,8930881:doOperation,[])
    link(onEvent3,10915429:doOperation,[(473,153)(473,146)])
    link(onEvent4,7988523:doOperation,[(423,160)(423,188)])
    }
    Add(MathParse,7921612,224,343)
    {
    MathStr="(%1 * %2) + (%1 * %2)"
    link(X2,5458469:Var2,[(237,321)(349,321)])
    }
    Add(Hub,816330,210,245)
    {
    OutCount=3
    link(onEvent1,5113320:doGetString,[(242,251)(242,69)])
    link(onEvent2,7921612:doCalc,[(236,258)(236,304)(212,304)(212,349)])
    link(onEvent3,7729257:doCalc,[(234,265)(234,258)])
    }
    Add(GetDataEx,5527788,287,364)
    {
    Angle=2
    link(Data,7921612:Result,[(293,387)(230,387)])
    }
    Add(Math,7988523,448,182)
    {
    OpType=1
    Op2=3
    link(Op1,5527788:Var3,[(454,170)(375,170)(375,369)])
    }
    Add(GetDataEx,5458469,343,291)
    {
    Angle=3
    link(Data,16636350:TextHeight,[(342,296)])
    }
    Add(MoveWindow,9062231,427,532)
    {
    link(Handle,224405:Handle,[])
    }
    Add(FlowCharts,224405,427,469)
    {
    Left=340
    Top=180
    Width=90
    Height=30
    Color=-256
    Cursor=2
    WinStyle=2
    Hint="Hint"
    PenColor=255
    BlockType=3
    Point(Handle)
    Point(onMouseDown)
    Point(onMouseMove)
    Point(onMove)
    Point(Left)
    Point(Top)
    Point(PHandle)
    Point(doWidth)
    Point(doColor)
    link(onMouseDown,9062231:doMove,[(471,475)(471,507)(415,507)(415,538)])
    }
    Add(StrList,5113320,259,21)
    {
    Strings=#8:qwerty 1|11:asdfghjkl 2|12:zxcvbnm yyyy|10:1234567890|16:lkjhgfds zxcvbmn|14:efghju fgh jkj|9:zxc cvbnm|8:qwerty 1|0:|
    Point(doGetString)
    Point(onGetString)
    link(onGetString,6579562:doValue,[])
    }



    Компонент для примера (потом удалить). http://forum.hiasm.net/forum_serv.php?q=56&id=4052

    Пример возможного применения.
    http://forum.hiasm.net/forum_serv.php?q=56&id=4054
    Схему парсера не привожу, - много новых компонентов, да и не в тему, можно замутить отдельной темой.
    карма: 5

    0
    файлы: 1code_36360.txt [3.7KB] [379]
    Ответов: 758
    Рейтинг: 111
    #42: 2015-10-09 18:46:32 ЛС | профиль | цитата
    sla8a, Ссылка "Архив с последними дополнениями 2015-10-09" на первом посте не работает
    карма: 1

    0
    Ответов: 1841
    Рейтинг: 123
    #43: 2015-10-09 19:37:20 ЛС | профиль | цитата
    miver, а эта http://forum.hiasm.net//getfile/36357?
    карма: 5

    0
    Ответов: 758
    Рейтинг: 111
    #44: 2015-10-09 20:20:55 ЛС | профиль | цитата
    flint2, Закачал
    карма: 1

    0
    Ответов: 1988
    Рейтинг: 633
    #45: 2015-10-10 01:45:36 ЛС | профиль | цитата
    miver писал(а):
    Ссылка "Архив с последними дополнениями 2015-10-09" на первом посте не работает
    Исправил.
    flint2, есть у меня такой элемент, но сделанный процентов на 70. Рабочее название Scheme: Схема. Это интерфейсный элемент на котором строится схема.
    Вот посмотрите: (новая тема: Scheme Построение блок схем )
    Правым кликом мыши по элементу вызовите меню и установите нужные элементы, двойным кликом можно переименовать. Можно выделять элемент, перетягивать, менять размер, цвет. Связи и прочие мелочи не доделаны.
    ------------ Дoбавленo в 01.45:
    Надо будет на ноутбуке посмотреть, вроде там поновее версия.
    карма: 9

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