Форум: "Основная";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];
ВнизКак задать толщину линии 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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.045 c