→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Рисование на Canvas в С++ Builder 
Автор Сообщение
Начинающий

Регистрация: 25.04.2010
Сообщения: 1
Языки:

Репутация: 0 [ ? ]
Сообщение Рисование на Canvas в С++ Builder
Нужно сделать разметку осей координат, что бы она изменялась соответственно в масштабе


Image1->Canvas->MoveTo(0,centerY);
Image1->Canvas->LineTo(Image1->Width,centerY);
Image1->Canvas->MoveTo(centerX,0);
Image1->Canvas->LineTo(centerX,Image1->Height);


for(int i=200; i<Height; i+=1*scale)
{
Image1->Canvas->MoveTo(i,198);
Image1->Canvas->LineTo(i,206);
}

for(int i=200; i<Width; i+=1*scale)
{
Image1->Canvas->MoveTo(197,i);
Image1->Canvas->LineTo(205,i);
}

for(int i=0; i<200; i+=1*scale)
{
Image1->Canvas->MoveTo(i,198);
Image1->Canvas->LineTo(i,206);
}

for(int i=0; i<200; i+=1*scale)
{
Image1->Canvas->MoveTo(197,i);
Image1->Canvas->LineTo(205,i);
}


Первые два цикла рисуют как надо и изменяются в масштабе который задаётся, а 3 и 4 циклы смещаются.
Размеры Image 400 на 400, можно ли как-небудь 3 и 4 циклы зделать что бы отрисовка начиналась с центра (точки 200,200) в левую сторону, то есть к нулю, а второй цикл тже самое только вверх.....

кто знает помогите, а то уже все перепробывал:(

Добавлено спустя 2 минуты 9 секунд:
double centerY = Image1->Height/2;
double centerX = Image1->Width/2;
int scale = StrToInt(Edit5->Text);

Image1->Canvas->Pen->Width = 1;
Image1->Canvas->Pen->Color = clBlack;

Image1->Canvas->MoveTo(0,centerY);
Image1->Canvas->LineTo(Image1->Width,centerY);
Image1->Canvas->MoveTo(centerX,0);
Image1->Canvas->LineTo(centerX,Image1->Height);


for(int i=200; i<Height; i+=1*scale)
{
Image1->Canvas->MoveTo(i,198);
Image1->Canvas->LineTo(i,206);
}

for(int i=0; i<200; i+=1*scale)
{
Image1->Canvas->MoveTo(i,198);
Image1->Canvas->LineTo(i,206);
}

for(int i=200; i<Width; i+=1*scale)
{
Image1->Canvas->MoveTo(197,i);
Image1->Canvas->LineTo(205,i);
}

for(int i=0; i<200; i+=1*scale)
{
Image1->Canvas->MoveTo(197,i);
Image1->Canvas->LineTo(205,i);
}


25.04.2010 15:19
Профиль Отправить email
Начинающий

Регистрация: 09.10.2010
Сообщения: 3

Репутация: 1 [ ? ]
Сообщение Re: Рисование на Canvas в С++ Builder
Для простоти можна написати дві ф-ції які переведуть все в декартові координати з урахуванням масштабу, ну а дальше взагалі просто. [fellow]

//масштаб
const double size = 10;

double getX(double x)
{
double w = Form1->Width;
return w / 2.0 + x * size;
}

double getY(double y)
{
double h = Form1->Height;
return h / 2.0 + y * size;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//розмірність (межі)
int l = -10;
int r = +10;
int t = +10;
int d = -10;

//основна сітка
Form1->Canvas->MoveTo(getX(l), getY(0));
Form1->Canvas->LineTo(getX(r), getY(0));

Form1->Canvas->MoveTo(getX(0), getY(d));
Form1->Canvas->LineTo(getX(0), getY(t));

//поділки
for (int i = l; i <= r; i++)
{
Form1->Canvas->MoveTo(getX(i), getY(-0.2));
Form1->Canvas->LineTo(getX(i), getY(+0.2));
}

for (int i = d; i <= t; i++)
{
Form1->Canvas->MoveTo(getX(-0.2), getY(i));
Form1->Canvas->LineTo(getX(+0.2), getY(i));
}
}


09.10.2010 16:38
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
© 2013 «Форум программистов Украины»