Edytor grafiki wektorowej na PaintBoxie

2

Zacząłem sobie ostatnio popisywać w Lazarusie taki projekt docelowo na Malinę. W zamierzeniu ma to być tworzenie grafiki wektorowej z której tworzę ciąg bitów na maszynę CNC. Po prostu Malina będzie podłączona do frezarki CNC. Na Malinie rysuję i przyciskiem np "Teraz ładnie mi to wyfrezuj w materiale" puszczam po usb na serwosilniki. Piszę tutaj o tym dlatego, że pod tym linkiem: www.youtube.com/watch?v=L3BuCcEEawA wystawiłem dla zainteresowanych do pobrania taki prosty przykład wektorówki. Nie wiem czy da się z tego czegoś nauczyć (oprócz jak nie pisać w ten sposób ;), ale można tam ogarnąć jak rozwiąząć tworzenie tego rodzaju grafik.

1

Znam ten programik, nawet mam w nim swój znikomy udział. ;)

Ogólnie chodzi o to, aby najpierw sobie bardzo dobrze rozplanować funkcjonalność oraz wymagania co do takiego programu, zanim zacznie się cokolwiek pisać. Tego typu rozwiązania idealnie nadają się do stworzenia osobnego komponentu, opakowującego całą funkcjonalność łącznie z wizualnym edytorem. Dzięki temu wystarczy kontrolkę położyć na formularzu i wyklikać co nieco w oknie inspektora obiektów.

Nie jest proste zadanie, ale warto trochę dłużej posiedzieć, aby mieć rozwiązanie łatwe i wygodne w użyciu.

0

No dokładnie, masz udział :) Jak zobaczyłem Twoje rozwiązanie dot. zaznaczania obszaru, pomyślałem, kurde muszę coś na szybko ale inną drogą.. wektorówkę zrobiłem już kiedyś do frezarki CNC ale na Windows (starsze moje filmiki na kanale) ale to zaznaczanie mi się naprawdę spodobało.

0

@machinebyte4: podoba mi się Twoja postawa. Nie tylko zadajesz pytania, ale też się dzielisz, jak masz coś ciekawego do pokazania. Fajne to jest :) Dałem łapkę w górę, chociaż tyle mogę dla Ciebie zrobić ;)

0

W końcu po to mamy forum, aby dzielić się wiedzą i kodem.

Moje rozwiązanie – to narzędzie do zaznaczania – pierwotnie stanowiło PoC-a dotyczącego zaznaczania i przesuwania prostokątnych fragmentów obrazu. Wątek na ten temat dawno temu założył bodaj @hipekk, ale teraz nie pamietam. Nie jest to rozwiązanie praktyczne, dlatego że narzędzie jest cały czas aktywne – trzeba sobie w swoim projekcie dodać kod, za pomocą którego najpierw włączy się to narzędzie, następnie dany fragment się zaznaczy i dopiero wtedy będzie można ramkę rozciągać i przesuwać, co zaowocuje rozciągnięciem lub przesunięciem zaznaczonego kawałka obrazu. Natomiast kotwice nie powinny być widoczne podczas przeciągania i rozciągania, bo zasłaniają zawartość (to akurat pikuś – jeden dodatkowy warunek w zdarzeniu OnPaint).

Wszystko zależy od tego, jakie są wymagania do zastosowania tego kodu. Aby móc zrobić edytor w stylu Painta, trzeba nie tylko poszerzyć funkcjonalność tego narzędzia, ale też wyposażyć edytor (np. jako komponent) w dodatkowe tylne bufory. Nie byłoby z tym jakoś szczególnie dużo pracy, ale trzeba by trochę kodu naklepać.

W podobny sposób można się zabrać za edytor grafiki wektorowej, ale tu będzie jeszcze więcej pisania, bo funkcjonalność większa – więcej typów obiektów, kolor ich obramowania oraz ew. wypełnienia, łączenie wielu w metaobiekty itd. Całkiem fajny projekcik do zrobienia. ;)

0

@machinebyte4: zastanawiałeś się może nad napisaniem takiego etytorka w postaci uniwersalnej, np. jako kontrolki? Tyle że już bez pośpiechu, zaczynając od konkretnego zaprojektowania, ładnego podziału na klasy, dodając różne przydatne funkcje (np. zoom czy linijki).

Taka kontrolka mogłaby się przydać również innym użytkownikom. Bo póki co to w kodzie tego przykładowego projektu jest mały bałagan, a całość działa w oparciu o kontrolkę typu TPaintBox, więc jest to mało uniwersalne rozwiązanie.

1

No jest tam "trochę" bajzlu. To czym piszesz jest jak najbardziej do ogarnięcia tylko, że siedzę nad projektem "ramie robotyczne" , o którym już publikowałem . W skrócie, Malina steruje kilkoma Arduino Uno. Każde Uno steruje serwosilnikiem, zbierając info o pozycji enkodera, generując sygnały kroku, kierunku dla silników, itp. Z Malina komunikuje się po protokole i2c i nie tylko. Dużo by pisać. Część po stronie Uno piszę w Bascomie, na Malinie w Lazarusie. Fizycznie wszystko mam rozbebeszone na stole tzw. operacyjnym ;) Efekt działania jest zadowalający do momentu kiedy coś mi sie nagle nie zesypie podczas n-tego testu. W tym projekcie niestety poza problemami czysto programowymi (te są nawet przyjemne) są jeszcze problemy związana ze sprzętem, z protokołami, zakłóceniami przesyłu danych. Pochłania to dużo czasu, każdy krok, właściwie kroczek do przodu to czasami kilka dni szukania w obwodzie prądowym, Bascomie, Lazarusie. Słowem ściana płaczu :)

0

Hmm, brzmi całkiem ciekawie – będziesz publikował później źródła i pokażesz całość jak skończysz?

0

Możliwe, że tak. Jeśli się komukolwiek do czegokolwiek przydadzą. Fragmenty projektu w Bascomie są ściśle powiązane ze fragmentami W Lazarusie. Jedne bez drugich są tylko kupą kodu z którego nic nie wynika. A wszystko to musi pracować w ściśle określonej architekturze sprzętowej.

0

A to ramię robisz w jakimś konkretnym celu - jako element większej całości nad którą pracujesz albo w ramach zlecenia od klienta, czy po prostu dla własnej satysfakcji albo jako sposób uczenia się?

1 użytkowników online, w tym zalogowanych: 0, gości: 1