Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.044 c
2-1251462711
denis_lunev
2009-08-28 16:31
2009.10.25
Сохранение изменений свойств в EDIT


1-1220945342
Iris
2008-09-09 11:29
2009.10.25
настройки печати StringGrid-а


2-1251206612
Дмитрий_
2009-08-25 17:23
2009.10.25
TStrngList.AddObject..?


15-1250975984
Германн
2009-08-23 01:19
2009.10.25
Мини-опрос. Кому сколько ехать из дома до той конторы,


15-1249935362
XcCCC
2009-08-11 00:16
2009.10.25
сложение цвета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский