|
Zarządzanie pisakiem
Najważniejszą opcją pisaka jest zmiana grubości konturów rysowanych figur lub w przypadku linii zmiana jej szerokości. Zmianę grubości pisaka umożliwia nam funkcja SetPenSize() o składni:
virtual void SetPenSize(float size);
Aktualnie ustawiony rozmiar pisaka możemy odczytać za pomocą funkcji PenSize() o składni:
float PenSize(void);
Niektóre funkcje rysujące wykorzystują aktualną pozycję pisaka jako punkt, z którego rozpoczynają operację rysowania, a także zmieniają jego położenie na punkt w którym zakończyły rysowanie np. StrokeLine() w wersji bez argumentu określającego punkt początkowy.
Pozycję pisaka możemy też zmieniać nie rysując niczego na ekranie za pomocą funkcji MovePenTo() lub MovePenBy() .
Funkcja MovePenBy():
Funkcja MovePenBy() przesuwa pisak o określone za pomocą argumentów horizontal i vertical odległości.
Składnia funkcji MovePenBy() : |
void MovePenBy(float horizontal, float vertical);
|
Opis argumentów funkcji MovePenBy() : |
horizontal | wartość, o którą zostanie przesunięty pisak w kierunku poziomym |
vertical | wartość, o którą zostanie przesunięty pisak w kierunku pionowym |
Na przykład, aby przesunąć pisak o 5 punktów w prawo i o 4 w dół wystarczy:
MovePenBy(5,4);
Funkcja MovePenTo():
Funkcja MovePenTo() umożliwia przesunięcie pisaka na pozycję określoną przez współrzędne zapisane albo w obiekcie typu BPoint , albo za pomocą dwóch zmiennych typu float x ,y .
Składnia funkcji MovePenTo() : |
void MovePenTo(BPoint point);
void MovePenTo(float x, float y);
|
Opis argumentów funkcji MovePenTo() : |
point | obiekt typu BPoint określający pozycję, na którą zostanie przesunięty pisak. |
x | nowa współrzędna x pisaka |
y | nowa współrzędna y pisaka |
Odczytanie pozycji pisaka:
Odczytanie aktualnej pozycji pisaka jest równie proste jak jej zmiana. Służy do tego funkcja PenLocation() :
Składnia funkcji PenLocation() : |
BPoint PenLocation();
|
Funkcja PenLocation() nie przyjmuje żadnych argumentów, a wartością przez nią zwracaną jest aktualna pozyca pisaka zapisana w obiekcie typu BPoint .
Program przykładowy:
Program przykładowy wykorzystuje funkcję Draw() do narysowania kolejno linii o grubości 1,2,3,4,5.
Linie rysowane są za pomocą funkcji StrokeLine() z jednym argumentem, określającym punkt końcowy rysowanej linii, czyli jako punkt początkowy wykorzystywana jest aktualna pozycja pisaka.
Aby rysowane linie były równoległe, pozycja pisaka zmieniana jest za pomocą funkcji MovePenTo() :
BPoint konieclinii;
MovePenTo(45,30);//zmiana pozycji pisaka
konieclinii.Set(265,30);
StrokeLine(konieclinii);//rys. linii do punktu konieclinii
SetPenSize(2);//zmiana rozmiaru pisaka
MovePenTo(45,60);//zmiana pozycji pisaka
konieclinii.Set(265,60);
StrokeLine(konieclinii);//rys. linii do punktu konieclinii
SetPenSize(3);//zmiana rozmiaru pisaka
MovePenTo(45,90);//zmiana pozycji pisaka
konieclinii.Set(265,90);
StrokeLine(konieclinii);//rys. linii do punktu konieclinii
SetPenSize(4);//zmiana rozmiaru pisaka
MovePenTo(45,120);//zmiana pozycji pisaka
konieclinii.Set(265,120);
StrokeLine(konieclinii);//rys. linii do punktu konieclinii
SetPenSize(5);//zmiana rozmiaru pisaka
MovePenTo(45,150);//zmiana pozycji pisaka
konieclinii.Set(265,150);
StrokeLine(konieclinii);//rys. linii do punktu konieclinii
Pełny kod źródłowy wygląda następująco:
Plik Widok.h : |
//plik nagłówkowy definiujący klasę widoku
#ifndef _WIDOK_H_
#define _WIDOK_H_
#include<View.h>
extern BRect obszarwidoku;
class Klasa_widoku : public BView
{
public :
Klasa_widoku();
virtual void Draw(BRect);
};
#endif
|
Plik Widok.cpp : |
#include"Widok.h"
BRect obszarwidoku(0,0,340,265);
Klasa_widoku::Klasa_widoku():BView (obszarwidoku,"widok",B_FOLLOW_ALL,B_WILL_DRAW)
{
}
void Klasa_widoku::Draw(BRect)
{
BPoint konieclinii;
MovePenTo(45,30);
konieclinii.Set(265,30);
StrokeLine(konieclinii);
SetPenSize(2);
MovePenTo(45,60);
konieclinii.Set(265,60);
StrokeLine(konieclinii);
SetPenSize(3);
MovePenTo(45,90);
konieclinii.Set(265,90);
StrokeLine(konieclinii);
SetPenSize(4);
MovePenTo(45,120);
konieclinii.Set(265,120);
StrokeLine(konieclinii);
SetPenSize(5);
MovePenTo(45,150);
konieclinii.Set(265,150);
StrokeLine(konieclinii);
DrawString("Program przykładowy ze strony And3mD online.",BPoint(15,210));
DrawString("www.and3md.prv.pl",BPoint(95,225));
}
|
Plik Okno.h : |
//Plik nagłówkowy definiujący klasę okna
#ifndef _OKNO_H_
#define _OKNO_H_
#include<Window.h>
#include"Widok.h"
extern BRect obszarokna;
class Klasa_Okna : public BWindow
{
public :
Klasa_Okna();
virtual bool QuitRequested();
Klasa_widoku * Widok;
};
#endif
|
Plik Okno.cpp : |
/*
Plik źródłowy Okno.cpp zawierający definicje funkcji
*/
#include"Aplikacja.h"
#include"Okno.h"
BRect obszarokna(30,30,340,265);
bool Klasa_Okna::QuitRequested()
{
be_app->PostMessage(B_QUIT_REQUESTED);
return(true);
}
Klasa_Okna::Klasa_Okna():BWindow(obszarokna,"Pen Size",B_TITLED_WINDOW,B_NOT_RESIZABLE,B_CURRENT_WORKSPACE)
{
Widok = new Klasa_widoku;
AddChild(Widok);
}
|
Plik Aplikacja.h : |
//Plik nagłówkowy definiujący klasę aplikacji
#ifndef _APLIKACJA_H_
#define _APLIKACJA_H_
#include <Application.h>
#include"Okno.h"
class Aplikacja : public BApplication
{
public :
Aplikacja();
Klasa_Okna * POkno;
};
#endif
|
Plik Aplikacja.cpp : |
#include"Aplikacja.h"
int main()
{
new Aplikacja();
be_app->Run();
delete be_app;
}
Aplikacja::Aplikacja():BApplication ("application/obiektwidoku")
{
POkno = new Klasa_Okna;
POkno->Show();
POkno->Widok->Show();
}
|
Program przykładowy można pobrać stąd [Link].
Powrót
|