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

Вниз

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

 
Д С   (2008-09-21 19:20) [0]

По идее нужно 1 мм умножить <количество точек/мм>. А какое <количество точек/мм> использовать: то, что по-горизонтали или то, что по-вертикали?


 
guav ©   (2008-09-21 19:26) [1]

А разрешение по горизонтали и вертикали может быть разное, есть такие принтеры.


> Как задать толщину линии TPen.Width равную 1 мм?

Достаточно SetMapMode MM_LOMETRIC и задать толщину 10.


 
Anatoly Podgoretsky ©   (2008-09-21 19:30) [2]

> Д С  (21.09.2008 19:20:00)  [0]

Оба, поскольку точка может быть не квадратная.


 
Д С   (2008-09-21 19:33) [3]

Это интересно.
А функция SetMapMode на что еще влияет?
На координаты в MoveTo, LineTo, Rectangle, ... ?


 
Д С   (2008-09-21 19:34) [4]


> Anatoly Podgoretsky ©   (21.09.08 19:30) [2]

Как вы себе это представляете?


 
guav ©   (2008-09-21 19:44) [5]

> [3] Д С   (21.09.08 19:33)

На всё она влияет. Могут только быть сюрпризы, связанные с тем, что TCanvas не учитывает это свойство HDC.


> [4] Д С   (21.09.08 19:34)

Будет ли пиксель у принтера 600х1200 DPI квадратным ?


 
Д С   (2008-09-21 20:08) [6]


> guav ©   (21.09.08 19:44) [5]

вопрос не в том... вопрос в том, что писать в TPen.Width ?


 
Anatoly Podgoretsky ©   (2008-09-21 20:22) [7]


> Как вы себе это представляете?

Зачем же спрашивал про горизонталь/вертикаль.


 
guav ©   (2008-09-21 21:39) [8]

Преобразования координат через функции SetMapMode, SetViewportExtEx, и т.д.  применяются ко всему - и к толщине Pen и к координатам. Эти преобразования также могут менять направление осей и положение начала координат, так при SetMapMode(Canvas.Handle, MM_LOMETRIC) ось Y смотрит в другую сторону.
 SetMapMode(Canvas.Handle, MM_LOMETRIC);
 Canvas.Pen.Width := 10; // 1 мм.


http://msdn.microsoft.com/en-us/library/ms532673(VS.85).aspx


 
Д С   (2008-09-21 21:49) [9]


> guav ©   (21.09.08 21:39) [8]

Это конечно хорошо, что я это узнал сейчас. Но у меня у самого уже много логики завязано на точках и преобразовании вручную.


 
{RASkov} ©   (2008-09-21 22:09) [10]

> [9] Д С   (21.09.08 21:49)
> Но у меня у самого уже много логики завязано на точках и
> преобразовании вручную

См GetDeviceCaps
ну и пример:
function MmToPixX(DC: HDC; const Xmm: Extended): Integer;
begin
 Result := Round(Xmm / 25.4 * GetDeviceCaps(DC, LOGPIXELSX));
end;


 
Д С   (2008-09-21 22:11) [11]

{RASkov} ©   (21.09.08 22:09) [10]
Вот в этом и вопрос собственно: Что использовать GetDeviceCaps(DC, LOGPIXELSX) или GetDeviceCaps(DC, LOGPIXELSY) ?


 
{RASkov} ©   (2008-09-21 22:13) [12]

> [11] Д С   (21.09.08 22:11)

По Х используй LOGPIXELSX, а по У - LOGPIXELSY


 
{RASkov} ©   (2008-09-21 22:15) [13]

Т.е две функции у тебя должно быть:
function MmToPixX(DC: HDC; const Xmm: Extended): Integer;
function MmToPixY(DC: HDC; const Ymm: Extended): Integer;


 
{RASkov} ©   (2008-09-21 22:23) [14]

Т.е. ширина вертикальной линии задается Х"ом, а горизонт. Y"ком....


 
Д С   (2008-09-21 22:30) [15]


>
> По Х используй LOGPIXELSX, а по У - LOGPIXELSY

Конструктивно:
Что вписать в этом случае?
Canvas.Pen.Width = ???;
Canvas.MoveTo(100,100);
Canvas.LineTo(200,300); // линия не вертикальная и не горизонтальная


 
guav ©   (2008-09-21 22:49) [16]

> [15] Д С   (21.09.08 22:30)

Это ещё решается.
Вопрос что делать в случае эллипса, дуги или кривой Безье. Я ничего лучше использования функций преобразования координат SetMapMode, etc не нашел. Кстати, мой хелловорлд по SetMapMode http://code.progler.ru/view/261 .


 
Д С   (2008-09-21 22:58) [17]


> guav ©   (21.09.08 22:49) [16]

Вот интересно как M$ решила эту проблему.


 
guav ©   (2008-09-21 23:48) [18]

> [17] Д С   (21.09.08 22:58)

Думаешь, они нашли что-то лучше SetMapMode ? Вряд ли, Ворд её импортирует.


 
Дмитрий С   (2008-09-22 00:00) [19]

т.е. сама windows ничего не делает при изменении SetMapMode ? Все делает драйвер устройства?


 
guav ©   (2008-09-22 01:02) [20]

Не знаю.

http://msdn.microsoft.com/en-us/library/ms532662(VS.85).aspx
Applications that display geometric shapes (circles, squares, polygons, and so on, make use of one of the device-independent mapping modes. For example, if you are writing an application to provide charting capabilities for a spreadsheet program and want to guarantee that the diameter of each pie chart is 2 inches, use the MM_LOENGLISH mapping mode and call the appropriate functions to draw and fill the chart. Specifying MM_LOENGLISH, guarantees that the diameter of the chart is consistent on any display or printer. If MM_TEXT is used instead of MM_LOENGLISH, a chart that appears circular on a VGA display would appear elliptical on an EGA display and would appear very small on a 300 dpi (dots per inch) laser printer.


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

Я нерусский не понимаю ))


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

> Дмитрий С  (22.09.2008 1:14:21)  [21]

Это плохо, но там сказано что все будет ОК


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


> Дмитрий С   (22.09.08 01:14) [21]

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


 
Д С   (2008-09-22 01:33) [24]


> Германн ©   (22.09.08 01:27) [23]

В нашей профессии главное не нерусский знать, а деньги зарабатывать ;)
Это, конечно, шутка, но в ней намёк.


 
Германн ©   (2008-09-22 01:40) [25]


> В нашей профессии главное не нерусский знать, а деньги зарабатывать
> ;)

Эээ. А что есть "наша профессия"?


 
Дмитрий С   (2008-09-22 01:51) [26]


> Эээ. А что есть "наша профессия"?

Кнопальщик :))


 
Германн ©   (2008-09-22 02:05) [27]


> Дмитрий С   (22.09.08 01:51) [26]
>
>
> > Эээ. А что есть "наша профессия"?
>
> Кнопальщик :))
>

Не. Это не моя профессия. Примите и прочь!


 
Дмитрий С   (2008-09-22 02:12) [28]

Какие все высокомерные :) Интересно, это жить не мешает?


 
Германн ©   (2008-09-22 02:59) [29]


> Дмитрий С   (22.09.08 02:12) [28]
>
> Какие все высокомерные :) Интересно, это жить не мешает?
>
>

Не. Не мешает.


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

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

>Конструктивно:
>Что вписать в этом случае?

Конструктивно: пиксель может быть неквадратным.


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

p.s. представь, что пиксель может быть не только неквадратным, но и некубическим ;) Мы как раз с такими, среди прочего, работаем.



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

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

Наверх




Память: 0.53 MB
Время: 0.019 c
15-1251405006
Юрий
2009-08-28 00:30
2009.10.25
С днем рождения ! 28 августа 2009 пятница


11-1207080572
Lotos
2008-04-02 00:09
2009.10.25
Заполнение данных в mdvXLGrid


2-1251702004
wah
2009-08-31 11:00
2009.10.25
XP Style и Standard


2-1251266538
Риг
2009-08-26 10:02
2009.10.25
Зависание в THread


15-1250858767
macrodens
2009-08-21 16:46
2009.10.25
Вопрос по RAID