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

Форум программистов: 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 ] 


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

Зарегистрированные пользователи: Google [Bot]


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

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