Конференция "Начинающим" » графические примитивы [D7, 2003]
 
  • novai (18.12.16 12:57) [0]
    Здравствуйте, вот такой вопрос у меня:
    У Canvas есть много графических примитивов (линия, круг, сектор, эллипс итд). Как отрисовать данные примитивы попиксельно, те получить координаты пикселей, что отрисованы через эти команды.
    Алгоритмы, ссылки приветствуются...
  • An a Student (18.12.16 15:28) [1]
    1. Они и так рисуются пикселями. Оптимизированными алгоритмами. Хотя в случае GDI32 какими-то косоптимизированными, но уж что есть.
    2. Нахрена вообще нужны координаты пикселей? Вы явно не с того конца решаете задачу, надо не молоток забивать гвоздём, а наоборот.
  • novai (18.12.16 15:39) [2]
    Я явно с того конца начал задачу, пишется управляющая программа для станка с ЧПУ...
  • An a Student (18.12.16 16:05) [3]
    Что такое ча-па-у? Загуглил, но абсолютно непонятно зачем "программному управлению" понадобились "пиксели". Задача-то какая по сути?
    Вам тут либо Canvas/Растровое не нужно, либо "получать координаты" не нужно.
  • Игорь Шевченко © (18.12.16 16:06) [4]

    > Как отрисовать данные примитивы попиксельно, те получить
    > координаты пикселей, что отрисованы через эти команды.
    > Алгоритмы, ссылки приветствуются...


    RTFM: Path functions, regions
  • novai (18.12.16 16:25) [5]
    An a Student если вы что-то не поняли. то это сугубо ваше дело...
    я еще раз говорю... нужнополучить координаты... Игорь, спс буду смотреть...
    Для остальных... вопрос остается открытым...
  • An a Student (18.12.16 16:31) [6]
    Если там некий станок - ему нужны векторные координаты, которые у вас и так есть (собственно по которым всё и рисуется на Canvas).
    Но если нужна композиция - то это уже математически решается, пиксели тут не при чём.

    А гарантированно узнать что было по факту нарисовано API функциями - можно только вручную проверяя что изменилось на битмапе. Или самому рисовать, без API, по неким сторонним алгоритмам.
  • novai (18.12.16 16:31) [7]
    Игорь, как получить доступ до всех координат пикселей региона? Что-то я не нашел функции...
  • novai (18.12.16 16:32) [8]
    >Или самому рисовать, без API, по неким сторонним алгоритмам.
    Я о них и спрашиваю!
  • Игорь Шевченко © (18.12.16 16:38) [9]
    novai   (18.12.16 16:25) [5]

    Как-то так в нулевом приближении:

    var
     Rgn: HRGN;
    ...
     BeginPath (Canvas.Handle);
     Canvas.Ellipse (...);
     EndPath(Canvas.Handle);
     Rgn := PathToRegion (Canvas.Handle);
     GetRegionData (Rgn, ....);   // <------- Тут пиксели получаются в  
                                           // координатах устройства
     DeleteObject(Rgn);

  • novai (18.12.16 16:39) [10]
    Спасибо, буду разбираться...
  • An a Student (18.12.16 16:39) [11]
    Регион из битмапа можно. Наоборот вроде нету такого.

    Если у вас есть что-то векторное - можете просто в цикле округлять до целых. Формулу отрезка/линии знаете?

    https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B

    https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%91%D1%80%D0%B5%D0%B7%D0%B5%D0%BD%D1%85%D1%8D%D0%BC%D0%B0

    Но всё же лучше задачу описать подробно, ибо так просто не делают, даже в API поэтому и нет функций таких.
  • An a Student (18.12.16 16:41) [12]
    Смысл в регионах? С таким же успехом можно пиксели на монохромном битмапе перебирать после рисования...
  • novai (18.12.16 17:56) [13]
    >Регион из битмапа можно. Наоборот вроде нету такого.
    Где я говорил про битмап? Не надо фантазий...
  • novai (18.12.16 18:05) [14]
    что-то вообще все не то... может проще метод жука применить к каждому нарисованному примитиву через GDI...
  • An a Student (18.12.16 18:13) [15]
    Вот:

    > как получить доступ до всех координат пикселей региона?

    Простые регионы не знаю как устроены, может и списком прямоугольников, а вот сложные регионы это по сути монохромный битмап.
    Canvas тоже технически битмап, или заданный постоянный или временный, но всё равно. Пиксели не могут храниться в воздухе. Пиксели = Битмап.

    > что-то вообще все не то...

    Так может вы всё-таки расскажете что нужно-то получить в итоге? Почему не сунуть в этот чи-пи-йу сами векторные данные? В чём проблема? Что он из себя вообще представляет?
    Целочисленные координаты думаю могут понадобиться только если высверливать в доске узор сверлом, которое не может двигаться свободно, а рывками... Иначе бы зачем такие танцы вокруг...
  • novai (18.12.16 18:20) [16]
    будем считать, то это плоттер... нужно отрисовывать примитивы (лиини, круги, полилинии итп) на бумаге...
  • novai (18.12.16 18:38) [17]
    что-то типа такого должно работать ....
    https://www.youtube.com/watch?v=cZ2mTLdQkKQ&t=0s
    только инструмент другой....
  • An a Student (18.12.16 18:45) [18]
    гм...

    > Плоттеры - это векторные устройства (по крайней мере, по
    > входным данным). В первых поколениях этих устройств пишущий
    > инструмент перемещался по траектории, заданной отображаемой
    > в данный момент фигурой. Плоттер способен рисовать графические
    > примитивы:
    >  * точку;
    >  * отрезок прямой;
    >  * дугу;
    >  * эллипс (окружность как его разновидность);
    >  * прямоугольник;
    > Для плоттеров, которые получают исключительно векторные
    > команды рисования, существует несколько различных языков.
    >  Общепринятым является язык HP-GL, его понимают все плоттеры
    > и практически все прикладные программы, выполняющие графический
    > вывод на плоттер.


    А ваш не понимает базовых команд? Ну а что вам доступно из команд (и уверены ли вы что это действительно всё что он может)?
    Или может всё таки проблема в делении перекрывающих/закрывающих друг-друга примитивов на отдельные элементы?
  • novai (18.12.16 19:16) [19]
    ЧПУ логика разрабатывается... хардварно реализована функция MoveTo и все...
  • Pavia © (19.12.16 12:04) [20]
    Короче у вас есть принтер который поддерживает только G-код.
    А принтер у вас аддитивный или субтрактивный?
    Какова цель работы с пикселями? И почему вы хотите работать с примитивами?
  • Inovet © (19.12.16 16:16) [21]
    > [20] Pavia ©   (19.12.16 12:04)
    > А принтер у вас аддитивный или субтрактивный?

    Для результата есть разница? И субстрактивный - на бумаге и прозрачной плёнке который печатает? А аддитивный на чём?
  • Pavia © (19.12.16 23:36) [22]
    Субстрактивный - это тот который срезает лишнее: фрезер, гравёр.
    А адитивный это который добавляет, к примеру 3D принтер который печатает пластиком.

    Разница  есть.
  • Inovet © (20.12.16 00:55) [23]
    > [22] Pavia ©   (19.12.16 23:36)
    > к примеру 3D принтер

    Ну как бы да, но всё равно ты мощно загнул.:)
  • stas © (21.12.16 17:21) [24]

    > novai   (18.12.16 19:16) [19]
    > ЧПУ логика разрабатывается... хардварно реализована функция
    > MoveTo и все...


    Не пойму зачем все так сложно? почему не перебрать все пиксели в bitmap и там где есть пиксель делать MoveTo на устройстве и ставить точку.
  • Ну и ну (23.12.16 22:04) [25]
    novai   (18.12.16 19:16) [19]

    ЧПУ логика разрабатывается... хардварно реализована функция MoveTo и все...

    Хи. А что G2 и G3 - круговая интерполяция из CNC команд уже исключили? Странно, на прошлой неделе ещё были.
  • kilkennycat © (25.12.16 10:00) [26]

    > А что G2 и G3 - круговая интерполяция из CNC команд уже
    > исключили? Странно, на прошлой неделе ещё были.


    G2 и G3 отсутствовали даже в прошлом году.

    а мой чпу ваще не знает о джикоде, странно...
  • Ну и ну (25.12.16 12:27) [27]
    Ах речь идёт о Кулибиных ...
    В таком случае стоит обратить внимание на Open source проекты, в которых все велосипеды уже давно едут.

    https://github.com/grbl/grbl/blob/master/grbl/gcode.c
    https://github.com/LinuxCNC/linuxcnc/blob/master/src/emc/rs274ngc/interp_arc.cc
    и т.д.
    А ещё: http://cph.phys.spbu.ru/documents/First/RastrG.pdf
    http://grafika.me/node/28
  • kilkennycat © (25.12.16 12:47) [28]

    > Ну и ну   (25.12.16 12:27) [27]
    > Ах речь идёт о Кулибиных ...

    странный вывод.
  • novai (26.12.16 14:41) [29]
    [25]
    я о g-code нигде не упоминал...
    спасибо за ответы...
 
Конференция "Начинающим" » графические примитивы [D7, 2003]
Есть новые Нет новых   [118456   +51][b:0][p:0.002]