Prosty Edytor Graficzny

0

Muszę stworzyć Prosty Edytor graficzny, który będzie tworzył prostokąty i koła z możliwością przenoszenia//przesuwania stworzonych figur myszką.
Potrafię już stworzyć koła i prostokąty, ale jak je przesuwać.
Stworzyłem Pane xp, do którego wrzucam te obiekty Circle i Rectangle,
Co dalej proszę o pomoc całe menu i przyciski są już zrobione potrzebne mi jest tylko wyjaśnienie - jestem dość zielonkawy :D

0

Z tego co pamiętam musisz od złapanie figury do jej puszczenia musisz czytać pozycje kursora i z częstotliwością jaką wybierzesz sobie rysować od nowa z nową pozycją figury

0

Czy plansza, na której malujesz posiada zdarzenia "OnMouseDown", "OnMouseUp" i "OnMouseMove" (możliwe, że inaczej się nazywa, ale myślę, że wiadomo o co chodzi)? Będzie to bardzo potrzebne w Twoim zadaniu.

Zdarzenia oprogramowujesz mniej więcej tak (to nie jest kod Javy ani innego języka, jest to zarys koncepcji):

// Stan klawisza myszki (true <=> nacisniety)
bool ClickState = false;

// Biezacy obiekt
DrawObj CurrentObject = null;

// Przesuniecie miedzy wspolrzednymi obiektu, a wspolrzednymi myszki
int XOffset, YOffset;

void OnMouseDown(int X, int Y)
{
    CurrentObject = null;
    ClickState = false;

    // Przegladanie obiektow w kolekcji
    foreach (DrawObj item in DrawObjCollection)
    {
        // Sprawdzanie, czy wspolrzedne myszki zawieraja sie w powierzchni obiektu
        if ((item.X <= X) && (item.Y <= Y) && ((item.X + item.Width) >= X) && ((item.Y + item.Height) >= Y))
        {
            // Znaleciony obiekt jest obiektem biezacym
            CurrentObject = item;

            // Odnotowanie nacisniecia przycisku
            ClickState = true;

            // Obliczanie wspolrzednych myszki wzgledem obiektu
            XOffset = X - item.X;
            YOffset = Y - item.Y;
            return;
        }
    }
}

void OnMouseUp(int X, int Y)
{
    // Odnotowanie zwolnienia przycisku
    ClickState = false;
}

void OnMouseMove(int Y, int Y)
{
    // Sprawdzanie, czy przycisk jest nacisniety i czy biezacy obiekt nie jest pusty
    if (ClickState && (CurrentObject != null))
    {
        // Przesuwanie obiektu poprzez nadawanie nowych wspolrzednych
        CurrentObject.X = X - XOffset;
        CurrentObject.Y = Y - YOffset;
    }
}

Korzystanie z timera jest moim zdaniem kiepskim pomysłem, będzie albo dużo niepotrzebnych wywołań, albo będzie się odczuwać "bezwładność" programu.

0

Dzieki, a co z powiekszaniem i pomniejszaniem figur :D? i zmiana koloru :D?

0

juz zrobilem, temat do usunieca

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