Powrót na stronę główną www.And3mD.prv.pl

Menu:
Strona Początkowa
Co Nowego?
BeOS/OpenBeOS
Linux
Podstawy C/C++
C FAQ
Biblioteki stand. C (GNU libc)
Programowanie w Linuxie
Programowanie w BeOSie
GLib
GTK
OpenGL
SDL
Moje Programy
Download
Linki
Pozdrowienia
Autor




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():
horizontalwartość, o którą zostanie przesunięty pisak w kierunku poziomym
verticalwartość, 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():
pointobiekt typu BPoint określający pozycję, na którą zostanie przesunięty pisak.
xnowa współrzędna x pisaka
ynowa 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


And3mD online - www.and3md.prv.pl
Kontakt: And3mD@interia.pl