Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][GD] klasa do rysowania okien (PCV)
Forum PHP.pl > Forum > PHP
exseerius
Witam,

Mam megaśny problem polegający na napisaniu klasy, która rysowalaby okna (schematy okien do aplikacji sprzedażowej dla klienta).

O tyle, o ile zwykłe namalowanie kwadratu z ramą nie sprawia mi problemu, o tyle ksztalty okien są różne i mają różne parametry i w zależności od tego szkice różnie wygladają (kwadratowe pojedyncze, pojedyncze otwierane, podwójne, podwójne otwierane, półokrągłe, okrągłe, z okrągłym zwieńczeniam, z trójkątnym zwieńczeniem)

Każde okno składa się z ramy i płata otwieranego oraz szkicu w jaki sposób się otwiera (takie linie na szybie w kształcie V).

Zastanawiam się w jaki sposób opisac okno, na chwile obecna wymyśliłem, że okna opisuję i przechowuję w db jako serialize arraya:

  1. 'type' => 'R',
  2. 'corners'=>array(
  3. array(0,0),
  4. array($x1,0),
  5. array($x1,$y1),
  6. array(0,$y1)
  7. )
  8. );



a potem staram sie to parasować (type = R oznacza ze jest to prostokąt, a corners to po kolei, lewy górny, prawy górny, prawy dolny i lewy dolny - wiem że wystaczą tylko dwa cornersy do rysowania prostokata, ale tutaj mam wiecej informacji)

Za X1 i Y1 podstawiane sa rzeczywiste wartosci wpisane przez usera (oczywiscie odpowiednio skalowane).

OK, to by był mój problem, mam pytanie, czu ma ktoś pomysł inny na opisywanie tych okien i sposób parasowania tego do grafiki.

Poniżej przykłady tych prostrzych okienek, pozniej postaram sie dołączyć inne przykłady.



Ech widze, że problem jest na tyle zlożony, że malo kogo interesuje a Ci co zerkna nie potrafią pomóc tongue.gif Ni nic, pozostaje walczyć samemu biggrin.gif
jaslanin
Może i ktoś potrafiłby pomóc ale:
1. Jesteś na forum od jakiegoś czasu i nie widzę żebyś jeszcze komuś pomógł. Same prośby o pomoc.
2. Mało kto się zna na budowie okien na tym forum. Ja na pewno się nie znam. Wypisujesz różne możliwe okna piszesz: "Poniżej przykłady tych prostszych okienek, później postaram się dołączyć inne przykłady.". Słowem kluczem jest tutaj inne przykłady. Ja widziałem ten temat ale czekam nadal na te inne przykłady. Ciężko jest pomóc jak się ma zbiór nieskończonej ilości możliwych okien.
3. Piszesz o wartościach wpisanych przez usera, są to tylko wymiary czy też typ okna. Np. interesuje mnie czy te podokna w oknach muszą być jakoś konfigurowalne czy są ustawione na sztywno.
4. Najlepiej jakbyś podał specyfikację techniczną, warunki umowy z klientem dotyczącymi funkcjonalności jakie ten skrypt ma zapewniać.
thek
Ja to wpierw zdefiniowałbym klasę "kontenera". Już tutaj umieściłbym definicję możliwych opcji. Zależnie od rodzaju okna, inne parametry wymagane dla konstruktora:
- prostokąt -> lewy górny i prawy dolny róg
- koło -> środek i promień
- półokrąg, wycinek -> środek, promień, kąt startu, kąt końca (przyjmując za 0 stopni przykładowo promień idący od środka pionowo w górę)

Okna wewnętrzne byłyby instancjami wewnętrznymi tej głównej (kompozycja). Otwieranie byłoby pewnym problemem w czystym php. Tutaj myślę, że użycie JavaScriptu by wchodziło w grę.
exseerius
OK, to troche dokładniej i wklejka tego co juz sam napisałem - trochę chaotyczne, ale to z racji na małą ilośc czasu - projekt robię sam więc komentarze dla mnie sa z reguły nieknieczne, podczas refabrykacji sa u mnie dodawane).

Klasa: window.class.zip


Ogólnie na chwile obecna sa tam dwa rodzaje generowania okien (zacząłem piać od nowa, ale starą logikę zostawiłem)

I tak stara wersja wywoływana jest tak:

  1. $window = new Window();
  2. $window->hSizes = array(200,100); // wymiary poszczególnych bloków w poziomie
  3. $window->vSizes = array(30,100); // to co wyżej w pionie
  4. $window->nonfix = array(0,1,0); // definiowanie które okna maja być otwieralne
  5. $window->init();
  6. $window->addDimentionsInfo();
  7. $window->draw();


Nowy sposób działa tak:

  1. $model = serialize(array(
  2. 'type' => 'R',
  3. 'corners' => array(
  4. array(0,0),
  5. array('$x1',0),
  6. array('$x1','$y1'),
  7. array(0,'$y1')
  8. ),
  9. 'open' => array(
  10. 'LU',
  11. 'RU'
  12. )
  13. ),
  14. 'type' => 'R',
  15. 'corners' => array(
  16. array('$x1',0),
  17. array('$x1+$x2',0),
  18. array('$x1+$x2','$y1'),
  19. array('$x1','$y1')
  20. ),
  21. 'open' => array(
  22. 'LU',
  23. 'RU'
  24. )
  25. )
  26. ));
  27.  
  28.  
  29.  
  30. $window = new Window();
  31. $window->Output($model);


$model to oczywiście zapis okna w tabliczy do dalszej obróbki, zastanawia mnie jedynie czy ma ktoś inny sposób na rozwiązannie takiego "modelu".

Wartości podawane przez usera, to typ okna, wysxszerokość poszczególnych bloków, typ otwierania okna - takie dane podawane sa w pierwszym formularzu i na tej podstawie powinien wyrysować się szkic okna. Okienka które podałem w pierwszym poscie wygenerowane są moją klasą (linie oznaczające strony otwarcia okien później dodane w gimpie).

Tutaj przykłady wszystkich mozliwości okien:



btw. @jaslanin - chętnie pomagałbym innym, natomiast ilość czasu jakim dysponuje nie pozwala mi przesiadywać na forach, a zarejestrowałem sie, aby móc właśnie czasem dopytać o coś czego nie wiem a dla innych to pikuś.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.