1

Тема: Отрисовка примитивов

Насчет подобного http://forum.phazotron-7.com/viewtopic.php?id=38 мы уже спрашивали, но т.к. это реально мешает жить, спрашиваю еще раз другими словами: действительно ли Вы считаете, что линии с координатами (0, 0)-(0, 50) и (0, 50)-(0, 0) должны отображаться со сдвигом в 1 пиксель?
Нам неудобно, что отображение фигур зависит от порядка задания координат.

2

Re: Отрисовка примитивов

Прорисовка линий так, как это делаем мы, является правильной с точки зрения математики.
Мы могли бы ввести ряд настроек на уровне профиля проекта, определяющих учёт последнего пикселя при прорисовке примитивов, но эта работа приведёт не только к изменениям в самом САПР, но и в генераторе программного кода, и займёт некоторое время, которого у нас сейчас нет. Если эта работа для Вас действительно важна, попробуйте связаться с руководством нашей компании напрямую.
В данный момент мы ведём работу над возможностью генератора программного кода создавать прорисовку с помощью прямого вызова функций графической библиотеки OpenGL ES 2.0 .

3

Re: Отрисовка примитивов

То что линия (0,0)-(0,1) имеет длину 1 пиксель и совпадает с точкой (0,0) правильно. Я считаю математически и логически неправильным то что прямая с координатами (0,1)-(0,0) не совпадает с ней. Задача не в том чтобы рисовать или нет последний пиксель, а в том где рисовать остальные.

4

Re: Отрисовка примитивов

Тут ещё есть такой нюанс. Если прорисовывать последний пиксель, то линия, у которой координаты начала и конца совпадают, по идее, всё же должна быть прорисована и иметь длину один пиксель, что, нам кажется, не совсем корректно.
В любом случае, повторюсь, мы можем выполнить для Вас эту работу, но Вам необходимо обсудить это с руководством нашей компании.

5 (13-12-2016 11:59:33 отредактировано gluhow)

Re: Отрисовка примитивов

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

6

Re: Отрисовка примитивов

То, что вы просите, как раз и означает прорисовку последнего пикселя. И в случае совпадения начала с концом линия всё же будет прорисовываться длинной в один пиксель, что на наш взгляд не совсем корректно.
Текущая функциональность закладывалась нами сознательно ещё на этапе проектирования САПР. Это не есть баг программы, и мы не против сделать описанную выше доработку, и обязательно сделаем это в ближайшем будущем, но в данное время мы реализуем другую достаточно приоритетную для нас функциональность. В ближайшие 2-3 дня мы обсудим сложившуюся ситуацию с руководством и отпишемся в данной ветке форума, ждите.

7

Re: Отрисовка примитивов

Руководством компании было принято следующее решение. В связи со значимостью данной функции для пользователей были изменены внутренние планы развития САПР с коррекцией механизмов прорисовки некоторых примитивов после окончания текущей работы. Ориентировочно к середине февраля нужная Вам версия САПР будет готова.

8

Re: Отрисовка примитивов

Здравствуйте!
Вышла новая версия САПР Формат Про. Теперь при прорисовке примитивов Линия и Прямоугольник может учитываться вершина x2,y2, что определяется настройкой в профиле проекта (опция Прорисовка последней координаты на странице Основное). Тела примитивов будут покрывать данные координаты, что увеличит на единицу длину Линии, а также ширину и высоту Прямоугольника.
Пожалуйста, скачивайте.

9

Re: Отрисовка примитивов

Дан массив точек, по которым следует отрисовать данную область. Можем ли мы нарисовать ее в Формат Про 2.0.4116?

Post's attachments

Иконка вложений 19.png 13.62 Кб, 14 скачиваний с 2018-12-14 

10

Re: Отрисовка примитивов

Здравствуйте!
Можете попробовать в цикле перебирать точки массива, прорисовывая на каждой итерации один треугольник по алгоритму построения полосного полигона. Т.е. получится прорисовка полосного полигона, но с произвольным числом вершин. Треугольник при этом будет являться полосным или веерным полигоном построенным по трём точкам, и координатами его вершин, соответственно, потребуется управлять.

11

Re: Отрисовка примитивов

Добрый вечер! Я не очень поняла, что вы имеете ввиду. Не могли бы вы, ради примера, прислать проект с отрисовкой этой области?

12

Re: Отрисовка примитивов

Мы описали координаты точек в двух массивах, но они могут храниться и в одном. При этом каждая координата не обязательно должна занимать 32 бита, и в одном int значении, например, могут одновременно храниться x и y координата одной точки.

Post's attachments

Иконка вложений FillShape.fpproj 2.72 Кб, 57 скачиваний с 2018-12-14 

13

Re: Отрисовка примитивов

Добрый день! К сожалению, задачу, которую мы решаем подразумевает более сложную отрисовку. Мы не можем использовать данный способ для заливки многоугольника, так как нам приходят только координаты точек. По предложенному вами способу отрисовки был создан проект в котором видно, что ваш вариант решения не подходит. Ждем других предложений.

Post's attachments

Иконка вложений FillShape.fpprof 997 b, 38 скачиваний с 2018-12-17 

Иконка вложений FillShape.fpproj 3.85 Кб, 43 скачиваний с 2018-12-17 

14

Re: Отрисовка примитивов

Здравствуйте!
Да, у вас получилось не то, что вы ожидали, т.к. точки расположены не в том порядке, который нужен для заполнения пространства с помощью данного алгоритма.
Как мы поняли, точки описывают произвольную замкнутую область, которая должна быть залита некоторым цветом. Такая задача решается с помощью триангуляции данной площади, т.е. путём разбивки её на треугольники. Признаться, мы не знакомы с данными алгоритмами, но они достаточно хорошо описаны в интернете. Вам понадобится реализовать алгоритм в проекте САПР, но лучше оформить его в виде внешнего исходного кода, замещающего программный код функции вычисления или прорисовки. В качестве треугольника по-прежнему подойдёт полосный или веерный полигон, построенный по трём точкам. При написании внешнего программного кода, это должно делаться с помощью функции gfDrawPolygonFan или gfDrawPolygonStrip описанной в файле GraphLib.h .