Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.01;
Скачать: CL | DM;

Вниз

Как задать толщину линии TPen.Width равную 1 мм?(продожение темы)   Найти похожие ветки 

 
Dmitry S ©   (2008-09-22 17:36) [0]

Я понимаю, что пиксел может быть не квадратный! Я потому и спрашиваю, что писать в TPen.Width.
Понятно дело, если линия горизонтальная - <количество точек на мм по вертикали>, если вертикальная - <количество точек на мм по горизонтали> писать нужно. А как быть, если линия под углом 30 градусов? А если это еще и кривая, что тогда?


 
KilkennyCat ©   (2008-09-22 17:58) [1]

Есть разрешение: точки на дюйм. Остальное - побарабану.


 
Dmitry S ©   (2008-09-22 18:08) [2]


> Есть разрешение: точки на дюйм. Остальное - побарабану.

Есть разрешение по-горизонтали, есть по-вертикали.
А если точки на кв. дюйм, но тут это не в кассу.


 
Поросенок Винни-Пух ©   (2008-09-22 18:21) [3]

Есть разрешение по-горизонтали, есть по-вертикали.

А разрешения по диагонали нет.
Значит в кассу.


 
{RASkov} ©   (2008-09-22 18:56) [4]

> [0] Dmitry S ©   (22.09.08 17:36)
> Я понимаю, что пиксел может быть не квадратный!

Нет, значит не понимаешь :(
Ибо width - это одно значение и оно либо столько, либо столько, или либо столько, но никак не столько и столько. :)
Вот научишь перо вращать при рисовании линии, тогда да, можно прямоугольным пикселем рисовать ровномерной толщины линию в любом направлении...
Подсказка: попробуй LineDDA использовать


 
Leonid Troyanovsky ©   (2008-09-22 19:42) [5]


> Dmitry S ©   (22.09.08 17:36)  

> под углом 30 градусов? А если это еще и кривая, что тогда?

Ну, тут все просто: тридцатиградусный угловой пиксель.
Или кривой, если не свезло.

--
Regards, LVT.


 
Дмитрий Белькевич ©   (2008-09-22 20:12) [6]

Математика тебе поможет, в частности тригонометрия. Это в случае линий, если нужны кривые - то, думается, никак - только руками эти кривые рисовать поточечно или разбивая на достаточно короткие отрезки.


 
Дмитрий Белькевич ©   (2008-09-22 20:20) [7]

Формулу готовую без бумаги не напишу, могу только логику представить.

В случае линий, очевидно, нужно учитывать DPI и по X и по Y, беря какую-то часть от каждой координаты с помощью коэффициентов. В сумме коэфиициентов получая единицу. Коэффициенты зависят от угла наклона линии - в какую сторону линия наклонена больше, от той координаты будет больше и браться.

Дальше думай сам...


 
Anatoly Podgoretsky ©   (2008-09-22 20:56) [8]

> Дмитрий Белькевич  (22.09.2008 20:12:06)  [6]

Алгоритмы Брезенхема, в частности реализованый в Виндоус LineDDA - идеально подходит для этой цели, если не используются операции из Виндовс. Также ширина и высота "пикселя" важна для сглаживания линий


 
DVM ©   (2008-09-22 22:12) [9]

Мне кажется, в GDI+ уже все это реализовано.


 
Дмитрий Белькевич ©   (2008-09-22 22:15) [10]

Брезенхем тут слабо поможет - отрезки прямых можно и виндой рисовать, только толщину постоянно пересчитывать (что придётся и LineDDA делать, как я понимаю), а кривые оно всё равно не посчитает.

Опять же - медленно...


 
Anatoly Podgoretsky ©   (2008-09-22 23:35) [11]

> Дмитрий Белькевич  (22.09.2008 22:15:10)  [10]

Естественно, что Line это прямая, а любая кривая это набор прямых.
LineDDA избавляет от расчета следующей точки, что делается с помощью оптимального алгоритма (Брезенхема).
А расчитаная точка - это уже пиксель любой формы и размера.


 
Anatoly Podgoretsky ©   (2008-09-22 23:35) [12]

> Дмитрий Белькевич  (22.09.2008 22:15:10)  [10]

Забыл насчет "медленно", а что быстро?


 
Германн ©   (2008-09-23 00:29) [13]

Имхо, на данный момент подобные дискуссии о ширине карандаша в миллиметрах бессмыслены.
Особенно в отношении сабжа! Сей сабж есть "восстановление закрытой ветки". А судя по высказываниям автора в этой ветке, он не понял ничего из закрытой, не хочет понимать, да в добавок злится.


 
Дмитрий С   (2008-09-23 01:14) [14]


> Германн ©   (23.09.08 00:29) [13]

:) чудно. Однако ответа я так и не получил.


 
Германн ©   (2008-09-23 01:28) [15]


> Дмитрий С   (23.09.08 01:14) [14]
>
>
> > Германн ©   (23.09.08 00:29) [13]
>
> :) чудно. Однако ответа я так и не получил.
>

А ты спрашивал? Или Dmitry S ©?
Вы оба получили кучу ответов, в которых ясно было сказано, что свойство TPen.Width в общем случае не гарантирует толщину линии! И не может её гарантировать!
Придуриваешься? Или нет?


 
Дмитрий Белькевич ©   (2008-09-23 02:35) [16]

>Забыл насчет "медленно", а что быстро?

MoveTo, если, конечно, аппаратное ускорение есть. Иначе - всё равно, да.

>:) чудно. Однако ответа я так и не получил.

Ответов ты получил множество.

Если нужен кусок кода - есть job.ru и аналоги.

В любом случае, для общего случая не получится.



Страницы: 1 вся ветка

Текущий архив: 2009.11.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.016 c
1-1222244774
andreoman
2008-09-24 12:26
2009.11.01
как узнать в событии OnExit новый активный объект


15-1251731165
HarryG
2009-08-31 19:06
2009.11.01
Печать картинок под wine


15-1251803846
DVM
2009-09-01 15:17
2009.11.01
Разбор командной строки на имя файла и параметры


6-1209043050
tytus
2008-04-24 17:17
2009.11.01
NetWkstaUserGetInfo - как правильно использовать?


4-1220776855
Дмитрий Белькевич
2008-09-07 12:40
2009.11.01
Количество записанных байт на жесикий