1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Графический редактор

Тема в разделе "Вопросы новичков и не только", создана пользователем -, 12 дек 2010.

  1. Гость

    Репутация:
    0
    Здравствуйте!
    Мне нужно создать графический редактор,в котором можно будет строить многоугольники,выбирать цвета фона и контура,сохранять в цифровом формате(х, у),открывать ранее сохранённые объекты.
    Также необходимо реализовать функции сдвига и симметричного отображения. Рекомендуется применение структурных массивов.
    Язык С++


    Основа готова,многоугольники строит,можно выбирать и изменять цвет,сохранять и открывать ранее созданное.
    Не могу разобраться с двумя функциями:сдвиг и симметричное отображение.А без них программа ничего не стоит!

    Понимаю идею,но не могу реализовать. :)

    Что касается сдвига: ввожу в компонент Edit,например, число,которое и будет шагом,на который нужно сместить изображение,считываю его.
    А вот как сам цикл записать не знаю. :(

    А насчёт симметричного изображения(относительно вертикальной оси) та же история.
    У меня такая идея:определяю какая из вершин многоугольника стоит дальше всех по оси X,отступаю вправо от этой точки произвольную величину,провожу вертикальную линию(ось,относительно которой будет произведена симметрия),затем определяю расстояние(обозначим d) от каждой вершины многоугольника до этой оси и откладываю это же расстояние вправо,то есть к каждой вершине многоугольника прибавляю расстояние 2d.Соединяю.

    Изложила свои соображения.Буду очень благодарна,если кто-нибудь откликнется!
    Если нужно что-нибудь уточнить,я к вашим услугам
    :)
     
  2. DarkKnight

    DarkKnight Well-Known Member

    Репутация:
    0
    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Циклом все точки обошел и сдвинул их...

    Координаты x домножаешь на (-1) и все... (только начало координат конечно должны быть выбраны например в центре экрана, что бы не строить фигуру за экран....
     
  3. Гость

    Репутация:
    0
    Спасибо за ответ!
    Но в том-то и дело,что не получается.

    Код для рисования многоугольника:
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
    TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    if(v==1){ // рисование многоугольника
    if(Shift.Contains(ssLeft)){
    mast.x=X;
    mast.y=Y;
    //Image1->Canvas->Brush->Color=clWhite;
    //Image1->Canvas->TextOutA(X,Y+5,i+1);
    Image1->Canvas->Brush->Color=clRed;
    Image1->Canvas->Ellipse(X-3,Y-3,X+3,Y+3);
    i++;}
    if(i>0){
    for(int j=0;j<i-1;j++){
    Image1->Canvas->Pen->Color=(ColorDialog1->Color);
    Image1->Canvas->MoveTo(mast[j].x,mast[j].y);
    Image1->Canvas->LineTo(mast[j+1].x,mast[j+1].y);
    }
    }

    }

    А вот для сдвига:

    void __fastcall TForm1::N11Click(TObject *Sender)
    {
    // раздел меню Инструменты | Сдвиг
    k=StrToInt(Edit1->Text);
    if(i>0){
    for(int j=0;j<i-1;j++){
    Image1->Canvas->Pen->Color=(ColorDialog1->Color);
    Image1->Canvas->MoveTo(mast[j+k].x,mast[j].y);
    Image1->Canvas->LineTo(mast[j+1+k].x,mast[j+1].y);
    }
    }
    }


    Получается ерунда!
    Мне самой не справиться.
     
  4. Inna1988

    Inna1988 Гость

    Репутация:
    0



    попробуй соединить мои файлы , должен получиться граф редактор
     

    Вложения:

    • 27.11View.txt
      Размер файла:
      2,4 КБ
      Просмотров:
      11
    • 27.11Viewh.txt
      Размер файла:
      1,1 КБ
      Просмотров:
      10
    • 27.11Doc.cpp.txt
      Размер файла:
      1,2 КБ
      Просмотров:
      12
    • 27.11Doc.h.txt
      Размер файла:
      616 байт
      Просмотров:
      11
    • 27.11.cpp.txt
      Размер файла:
      3,4 КБ
      Просмотров:
      12
    • 27.11.h.txt
      Размер файла:
      508 байт
      Просмотров:
      12
    • MainFrm.cpp.txt
      Размер файла:
      1,9 КБ
      Просмотров:
      9
    • MainFrm.h.txt
      Размер файла:
      737 байт
      Просмотров:
      6
  5. Гость

    Репутация:
    0
    А в нём есть функции сдвига и симметричного отображения??
     
  6. Inna1988

    Inna1988 Гость

    Репутация:
    0
    там есть:

    карандаши разных цветов рисуют линиями прямыми. сохраняется все , запоминается и снова воспроизводится
     
  7. Гость

    Репутация:
    0
    К несчастью,мне не это нужно!Но всё равно спасибо! :(
     
  8. Inna1988

    Inna1988 Гость

    Репутация:
    0
    незачто , самой подобное нужно будет скоро))) удачи
     
  9. Гость

    Репутация:
    0
    Как справлюсь,могу поделиться!:)
    А пока надо дерзать! :(
     
  10. Гость

    Репутация:
    0
    Я справилась.Так что кому нужна программа,могу поделиться!
     
  11. vital

    vital Больной Компом Детектед

    Репутация:
    0
    Регистрация:
    29 янв 2006
    Сообщения:
    2.432
    Симпатии:
    40
    ну так выложите. кому надо тот найдет)
     
  12. Гость

    Репутация:
    0
    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    #include "Unit3.h"
    #include <fstream.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    struct Koord{
    int x;
    int y;
    };
    const int K=100;
    Koord mast[K];
    Koord mass[K];
    int i=0,maxx,maxy,j,v,v1,k,step=0;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    Image1->Canvas->Brush->Color=clWhite;
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    Edit1->Clear();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Image1MouseDown(TObject *Sender,
    TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    if(v==1){ // рисование многоугольника
    if(Shift.Contains(ssLeft)){
    mast.x=X;
    mast.y=Y;
    Image1->Canvas->Brush->Color=clRed;
    Image1->Canvas->Ellipse(X-3,Y-3,X+3,Y+3);
    i++;}

    }

    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
    int X, int Y)
    {
    StatusBar1->SimpleText="x="+IntToStr(X)+" y="+IntToStr(Y);
    }
    //---------------------------------------------------------------------------


    void __fastcall TForm1::N2Click(TObject *Sender)
    {
    // раздел меню Файл | Открыть
    i=0;
    if(OpenDialog1->Execute()){
    ifstream fin(OpenDialog1->FileName.c_str());
    if(!fin){ShowMessage("ERROR!Can't open the file!");}
    char s;
    int k=0;
    while(!fin.eof()){
    fin.get(s);
    if(s=='\n') k++;}
    k=k-1;
    Koord *m=new Koord[k];
    fin.close();
    ifstream fin2(OpenDialog1->FileName.c_str());
    if(!fin2){ShowMessage("ERROR!Can't open the file!");}
    for(int j=0;j<k;j++){
    fin2>>m[j].x>>m[j].y;
    }
    fin2.close();
    for(int j=0;j<k;j++){
    Image1->Canvas->Brush->Color=clRed;
    Image1->Canvas->Ellipse(m[j].x-3,m[j].y-3,m[j].x+3,m[j].y+3);
    i++;
    }
    for(int j=0;j<i-1;j++){
    Image1->Canvas->Pen->Color=(ColorDialog1->Color);
    Image1->Canvas->MoveTo(m[j].x,m[j].y);
    Image1->Canvas->LineTo(m[j+1].x,m[j+1].y);
    }
    }
    }
    //---------------------------------------------------------------------------




    void __fastcall TForm1::N3Click(TObject *Sender)
    {
    // раздел меню Файл | Сохранить
    if(SaveDialog1->Execute()){
    ofstream fout(SaveDialog1->FileName.c_str());
    if(!fout){ShowMessage("ERROR!");}
    for(int j=0;j<i;j++){
    fout<<mast[j].x<<" "<<mast[j].y<<"\n";
    }
    }
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::N4Click(TObject *Sender)
    {
    // раздел меню Файл | Выход
    Close();
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::N7Click(TObject *Sender)
    {
    // раздел меню Файл | Очистить всё
    Image1->Canvas->Brush->Color=clWhite;
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    j=0;i=0;v1=0;
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::N9Click(TObject *Sender)
    {
    // раздел меню Инструменты | Выбор цвета
    ColorDialog1->Execute();
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::N10Click(TObject *Sender)
    {
    // раздел меню О программе
    Form3->ShowModal();
    }
    //---------------------------------------------------------------------------


    void __fastcall TForm1::N13Click(TObject *Sender)
    {
    // раздел меню Инструменты | Многоугольник
    v=1;
    Image1->Canvas->Brush->Color=clWhite;
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::N11Click(TObject *Sender)
    {
    // раздел меню Инструменты | Сдвиг
    Image1->Canvas->Brush->Color=clWhite;
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
    step=0;
    step=step+StrToInt(Edit1->Text);
    //if(!isdigit(k)){ShowMessage("Введите шаг!");}
    //if(Shift.Contains(ssLeft)){
    //mast.x=X;
    //mast.y=Y;


    for(int j=0;j<i;j++){
    Image1->Canvas->Brush->Color=clRed;
    Image1->Canvas->Ellipse(mast[j].x-3+step,mast[j].y-3,mast[j].x+3+step,mast[j].y+3);

    }
    if(i>0){
    for(int j=0;j<i-1;j++){
    Image1->Canvas->Pen->Color=(ColorDialog1->Color);
    Image1->Canvas->MoveTo(mast[j].x+step,mast[j].y);
    Image1->Canvas->LineTo(mast[j+1].x+step,mast[j+1].y);
    }
    }
    Image1->Canvas->MoveTo(mast[i-1].x+step,mast[i-1].y);
    Image1->Canvas->LineTo(mast[0].x+step,mast[0].y);
    }
    //---------------------------------------------------------------------------


    void __fastcall TForm1::N12Click(TObject *Sender)
    {
    // раздел меню Инструменты | Симметричное отображение
    int delta=50+step;
    Image1->Canvas->Pen->Color=clRed;
    Image1->Canvas->Pen->Width=1;

    maxx=mast[0].x;
    maxy=mast[0].y;
    for(int j=0;j<i;j++){
    if(mast[j].x>maxx){maxx=mast[j].x;
    maxy=mast[j].y;} }
    Image1->Canvas->MoveTo(maxx+delta,maxy);
    Image1->Canvas->LineTo(maxx+delta,Image1->Height);
    Image1->Canvas->MoveTo(maxx+delta,maxy);
    Image1->Canvas->LineTo(maxx+delta,0);
    //Image1->Canvas->MoveTo(maxx+2*delta,maxy);
    //Image1->Canvas->Brush->Color=clRed;
    //Image1->Canvas->Ellipse(maxx-3+2*delta,maxy-3,maxx+3+2*delta,maxy+3);


    if(i>0){
    for(int j=0;j<i;j++){
    int dx=abs(maxx-mast[j].x)+delta;
    mass[j].x=mast[j].x+2*dx;
    mass[j].y=mast[j].y;
    Image1->Canvas->Ellipse(mast[j].x-3+2*dx,mast[j].y-3,mast[j].x+3+2*dx,mast[j].y+3);
    Image1->Canvas->Brush->Color=clRed;
    Image1->Canvas->Pen->Color=(ColorDialog1->Color);
    if(j==0){
    Image1->Canvas->MoveTo(mass[j].x,mass[j].y); }
    else{
    Image1->Canvas->LineTo(mass[j].x,mass[j].y);
    Image1->Canvas->MoveTo(mass[j].x,mass[j].y);}
    }
    }
    Image1->Canvas->LineTo(mass[0].x,mass[0].y);

    }
    //---------------------------------------------------------------------------

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    if(i>0){
    for(int j=0;j<i-1;j++){
    Image1->Canvas->Pen->Color=(ColorDialog1->Color);
    Image1->Canvas->MoveTo(mast[j].x,mast[j].y);
    Image1->Canvas->LineTo(mast[j+1].x,mast[j+1].y);
    }}
    Image1->Canvas->LineTo(mast[0].x,mast[0].y); }

    //---------------------------------------------------------------------------
     
Загрузка...

Поделиться этой страницей