Вывод графики на форму. Как?

Тема в разделе "WASM.BEGINNERS", создана пользователем Shoorup, 3 ноя 2008.

  1. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Хочу сделать программу для работы с векторными шрифтами AutoCAD. Пишу пока в C++Builder.
    Не знаю как лучше выводить графику на форму. Пока рисую канвой (Canvas). Но это похоже на извращение. Дело в том, что все координаты на форме отсчитываются от левого верхнего угла, что конечно не удобно для меня. Хочется выводить от левого нижнего угла, независимо от размера формы. Или еще лучше указать базовую точку на форме и все координаты выводить от нее. Также хочу сделать программу максимально маленького размера и максимально быструю.
    Есть ли смысл делать не через Canvas? Как лучше вывести на форму необходимую графику. Какую литературу почитать на данную тему?
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
  3. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Так я поменяю направление и ед.изм. А как поменять базовую точку?
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Попробуй SetWindowOrg() или SetViewportOrg().
     
  5. Ra!N

    Ra!N New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2006
    Сообщения:
    111
    сделай переходные ф-ции, которые будут переводить координаты, удобные для тебя в координаты, используемые канвасом. Короче, Абстрагируй!
     
  6. Shoorup

    Shoorup Member

    Публикаций:
    0
    Регистрация:
    20 сен 2007
    Сообщения:
    109
    Делал примерно так:
    Код (Text):
    1. void __fastcall TForm1::MPaintBPaint(TObject *Sender)
    2. {
    3.  MPaintB->Canvas->Pen->Color = clBlack;
    4.  MPaintB->Canvas->Rectangle(0,0,MPaintB->ClientWidth,MPaintB->ClientHeight);
    5.  //сетка
    6.  MPaintB->Canvas->Pen->Color = clRed;
    7. for (i = 0; i < NLines; i++)
    8.  {
    9.    MPaintB->Canvas->MoveTo((i+1)*((MPaintB->ClientWidth-1) / (NLines+1)),MPaintB->ClientHeight);
    10.    MPaintB->Canvas->LineTo((i+1)*((MPaintB->ClientWidth-1) / (NLines+1)),0);
    11.    MPaintB->Canvas->MoveTo(0,(i+1)*((MPaintB->ClientHeight-1) / (NLines+1)));
    12.    MPaintB->Canvas->LineTo(MPaintB->ClientWidth,(i+1)*((MPaintB->ClientHeight-1) / (NLines+1)));
    13.  }
    14.    MPaintB->Canvas->Pen->Color = clBlack;
    15. }
    но получается какой-то бред... дико не удобно. А по планам на всем этом еще и рисовать нужно будет.
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Shoorup
    Рисуй в памяти, потом либо отображай на визуальный компонент (вроде TImage), либо используй DirectX.