Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Не могу нарисовать сетку крест на крест.   Найти похожие ветки 

 
Use_R   (2012-11-30 23:15) [0]

Т.е. штриховка по диагонали.
Count - кол-во ячеек.
W, H   - высота и ширина ячейки.

Штриховка в правую сторону выводиться корректно.
В левую криво.

Понять не могу где ошибка.


procedure DrawMesh;
var
 i          : LongWord;
 Count, W, H: LongWord;
begin
 Count:= 200;
 W    := 10;
 H    := 10;

 For i:= 0 to Count do
   MyCanvas.Line(i * W, 0, 0, i * H);

 For i:= 0 to Count do
   MyCanvas.Line(i * W, 0, Count * W, i * H);
end;



 
Sha ©   (2012-11-30 23:24) [1]

должна помочь бумага в клеточку


 
Use_R   (2012-11-30 23:35) [2]

Первый цикл рисует правильно.
Второй цикл, такой же, только конец линии уже справа.

Рисуется какая-то арка!


 
xayam ©   (2012-11-30 23:44) [3]


> Count * W

?


 
xayam ©   (2012-11-30 23:49) [4]

вообще подход какой-то неправильный.
Два цикла вложенных по всем ячейкам и внутри сразу крест рисуется. Не?


 
Use_R   (2012-11-30 23:50) [5]


> xayam ©   (30.11.12 23:44) [3]
>
>
> > Count * W


Это самая правая граница для X.
0 - самая левая граница для Х.


 
DVM ©   (2012-11-30 23:55) [6]


> Use_R   (30.11.12 23:15) 

Не поможет? (На вещественные координаты не смотри)


procedure TECADDiagCrossFillPattern.Paint(Canvas: TECADCanvas; Rect: TECADFloatRect);
var
 X1, Y1: Extended;

 procedure DrawFrom1(X1, Y1, Width, Height: Extended);
 var
   M, D, X2, Y2: Extended;
 begin
   M := Min(Width, Height);
   X2 := X1 + M;
   Y2 := Y1 + M;
   D := Max(0, Max(Y2 - Rect.Bottom, X2 - Rect.Right));
   X2 := X2 - D;
   Y2 := Y2 - D;
   Canvas.DrawLine(X1, Y1, X2, Y2);
 end;

 procedure DrawFrom2(X1, Y1, Width, Height: Extended);
 var
   M, D, X2, Y2: Extended;
 begin
   M := Min(Width, Height);
   X2 := X1 + M;
   Y2 := Y1 - M;
   D := Max(0, Max(Rect.Top - Y2, X2 - Rect.Right));
   X2 := X2 - D;
   Y2 := Y2 + D;
   Canvas.DrawLine(X1, Y1, X2, Y2);
 end;

begin
 X1 := Rect.Left;
 Y1 := Rect.Top;
 while Y1 < Rect.Bottom do begin
   DrawFrom1(X1, Y1, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top);
   Y1 := Y1 + Period;
 end;
 X1 := Rect.Left + Period;
 Y1 := Rect.Top;
 while X1 < Rect.Right do begin
   DrawFrom1(X1, Y1, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top);
   X1 := X1 + Period;
 end;
 X1 := Rect.Left;
 Y1 := Rect.Bottom;
 while Y1 > Rect.Top do begin
   DrawFrom2(X1, Y1, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top);
   Y1 := Y1 - Period;
 end;
 X1 := Rect.Left + Period;
 Y1 := Rect.Bottom;
 while X1 < Rect.Right do begin
   DrawFrom2(X1, Y1, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top);
   X1 := X1 + Period;
 end;
end;



 
Use_R   (2012-12-01 00:17) [7]


> DVM ©   (30.11.12 23:55) [6]


Тормозит аццки.

Вот мой код, закрашивает прямоугольник в косую линию, наклон в право.
Быстро работает.

Такое же, но в левую сторону не могу написать. :)



For i:= 0 to Count do
begin
  Line(i * W, 0,       0,                 i * H);
  Line(i * W, Row * H, Count * W, i * H);
end;



 
DVM ©   (2012-12-01 00:25) [8]


> Use_R   (01.12.12 00:17) [7]


> Тормозит аццки.

Странно, у меня оно не тормозит совсем.


 
antonn ©   (2012-12-01 00:26) [9]

For i:= 0 to Count do
  MyCanvas.Line(0, 0, Count * W, i * H);


 
kilkennycat ©   (2012-12-01 00:37) [10]

Brush.Style := bsDiagCross;


 
DVM ©   (2012-12-01 00:39) [11]


> kilkennycat ©   (01.12.12 00:37) [10]
> Brush.Style := bsDiagCross;

там не регулируется период


 
kilkennycat ©   (2012-12-01 00:53) [12]


> DVM ©   (01.12.12 00:39) [11]

а вдруг он совпадает с требуемым? ;)



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

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.057 c
15-1341413403
Artem
2012-07-04 18:50
2013.03.22
mail.ru у вас открывается?


2-1334691033
Новичок
2012-04-17 23:30
2013.03.22
Сканер штрих-кодов


15-1337791087
Avatar
2012-05-23 20:38
2013.03.22
Посоветуйте роутер


2-1331669763
Очень злой
2012-03-14 00:16
2013.03.22
Свойство для поля array[0..20] of char


15-1344950240
DVM
2012-08-14 17:17
2013.03.22
Помогите перевести с английского на русский





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский