Corel FORUM Strona Główna Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload

Poprzedni temat «» Następny temat
Przenoszenie zaznaczonego węzła w miejsce kursora
Autor Wiadomość
zyzio 
Praktyk


Dołączył: 06 Cze 2011
Posty: 90
Skąd: Podkarpacie
Wysłany: 24 Maj 2016, 21:59   Przenoszenie zaznaczonego węzła w miejsce kursora

Witam. Czy z punktu widzenia programistycznego trudno byłoby napisać coś takiego jak makro przenoszące zaznaczony węzeł w miejsce aktualnego położenia kursora?
Wiem, że są skrypty, które wklejają ze schowka element w miejscu kursora myszki...
Generalnie chodzi o to, aby podczas edycji krzywej uniknąć konieczności ciągłego celowania w każdy węzeł i przesuwania go z naciśniętym przyciskiem myszy co jest rzeczą, której najbardziej nie lubię w corelu. Uważam, że szybkie zakreślenie danego węzła i wskazanie kursowem miejsca gdzie makro ma go przesunąć byłoby sporym ułatwieniem i przyspieszeniem pracy w tym zakresie.
Z góry dzięki za info.
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 25 Maj 2016, 14:02   

Jedyna różnica jest taka, że raz przesuwasz kursor z wciśniętym przyciskiem myszy, a raz bez. Wyobraź sobie, że masz węzeł na węźle i zaznaczyłeś więcej niż jeden, a pozycja kursora jest tylko jedna, który węzeł ma być ustawiony?
W Corelu jest jeszcze parę innych narzędzi, które wymagają wciśnięcia przycisku myszy przy rysowaniu, np. elipsa, prostokąt. Też chcesz to przerabiać? Jak szybki jesteś, że ma to jakiekolwiek znaczenie? Ja też jestem leniwy i nic innego nie robię, tylko kombinuję jak zrobić i się nie narobić, ale bez przesady.
To się bez wątpienia da zrobić, tylko po co?
 
 
zyzio 
Praktyk


Dołączył: 06 Cze 2011
Posty: 90
Skąd: Podkarpacie
Wysłany: 25 Maj 2016, 17:52   

chezare w moim przypadku najbardziej chodzi mi o 2 aspekty:
1. Wyeliminować potrzebę dokładnego celowania kursorem w dany węzeł z zamiarem jego przesunięcia (tego nie lubię najbardziej)
2. Przenoszenie zaznaczonego węzła w miejsce kursowa jako alternatywa dla przesuwania z wciśniętym przyciskiem myszy co jest po prostu bardzo męczące z fizycznego punktu widzenia podczas wielogodzinnej pracy.

Przy zaznaczeniu kilku węzłów domyślam się, że zostałyby przeniesione w to samo miejsce ale to nie jest problem, trzeba po prostu mieć to na uwadze. Pozostałe narzędzia o których wspomniałeś czyli elipsa, prostokąt są w porządku.

Generalnie całą tą ideę zaczerpnąłem z blendera, w którym moim zdaniem edycja krzywych stoi na najwyższym z możliwych poziomów użyteczności, a praca z nimi to czysta przyjemność. Niestety jako soft 3d nie ma on domyślnego exportera krzywych Beziera poza zewnętrznym skryptem napisanym przez jednego z użytkowników, jednak nie jest już rozwijany a wymaga dopracowania.
 
 
tomek123
Bywalec
tomek123


Wersja CorelDRAW: X7
Pomógł: 8 razy
Dołączył: 06 Gru 2014
Posty: 34
Skąd: Tychy
Wysłany: 25 Maj 2016, 23:10   

Kod:

Public Sub go_click()
On Error Resume Next
    Dim c As Curve, i%, x#, y#
    Set c = ActiveShape.Curve
    For i = 1 To c.Nodes.count
        If c.Nodes(i).Selected Then
            ActiveDocument.GetUserClick x, y, 0, -1, True, 309
            c.Nodes(i).SetPosition x, y
            Exit For
        End If
    Next i
End Sub

najlepiej przypisz sobie to makro do jakiegoś klawisza, ale nie wiem jak to się robi, powinno gdzieś pisać w Google
 
 
zyzio 
Praktyk


Dołączył: 06 Cze 2011
Posty: 90
Skąd: Podkarpacie
Wysłany: 26 Maj 2016, 00:19   

No po prostu super :) Tomku a dałoby radę zniwelować to dodatkowe kliknięcie, które wskazuje nowe miejsce dla węzła? Czyli mam zaznaczony węzeł, następnie wciskam skrót klawiszowy przypisany do makra i węzeł przemieszcza się od razu w miejsce kursora bez dodatkowego kliknięcia.
Dzięki
 
 
Cysorz 



Pomógł: 205 razy
Dołączył: 01 Sty 2011
Posty: 3137
Skąd: Kraków
Wysłany: 26 Maj 2016, 00:24   

Brawo za skrypt, nawet nie sądziłem, że coś takiego jest takie proste ;)
Ale tak się zastanawiam nad sensem takiego działania, bo zamiast operacji "zaznacz - przeciągnij - upuść" trzeba dodatkowo gdzieś tam na końcu jeszcze jakiegoś skrótu (lub wciśnięcia specjalnie stworzonej do tego ikonki?) użyć. I myszka w międzyczasie nie może nawet drgnąć, bo węzeł trafi nie tam gdzie trzeba... A przecież można włączyć przyciąganie do obiektu, prowadnic, siatki czy co tam jeszcze ktoś sobie życzy.
Broń Boże, żebym krytykował, ale jakoś w tym większego sensu nie widzę a w Corelu pracuję (praktycznie codziennie) już coś koło ćwierć wieku ;)
Zresztą może właśnie dlatego... :-/
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 26 Maj 2016, 00:26   

Bo w tym nie ma żadnego sensu.
Skrót? :-)
Będzie z tego więcej nieszczęść, niż pożytku, ale bawcie się dalej.
 
 
zyzio 
Praktyk


Dołączył: 06 Cze 2011
Posty: 90
Skąd: Podkarpacie
Wysłany: 26 Maj 2016, 00:42   

Panowie ja też w Corelu jestem już ładnych kilka lat codziennie i stuningowałem go jak tylko się dało w miarę moich możliwości a mianowicie wspomagam się podczas pracy programem do obsługi gestów myszy "StrokesPlus" umożliwiającym przypisanie do konkretnego gestu wiele pożytecznych rzeczy począwszy od skrótów klawiszowych a skończywszy na rozbudowanych makrach oraz "Autohotkey" dzięki któremu można praktycznie w nieograniczony sposób definiować własne kombinacje skrótów klawiszowych i wiele więcej
natomiast w kwestii sposobu przemieszczania w tym przypadku węzłów sam nie jestem sobie w stanie poradzić - zazdroszczę Wam wiedzy z zakresu programowania i wierzcie mi, że gdybyście popracowali jakiś czas na krzywych w blenderze (co gorąco polecam) to przyznalibyście, że rozwijanie takiego rozwiązania bezpośrednio w corelu ma sens.
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 26 Maj 2016, 01:32   

O ile mogłem sobie wyobrazić zaznaczenie węzła, przesunięcie kursora i kliknięcie, to zastąpienia tegoż kliknięcia skrótem klawiaturowym wyobrazić sobie nie mogę.
Naturalnym narzędziem w programie graficznym nie jest mysz, tylko tablet i piórko.
Musicie wymyślić skrót, który da się obsłużyć jedną ręką, bo odkładanie piórka tak żeby nie ruszył się kursor będzie niewygodne. :-) O tym, że zajmie to dodatkowo czas nie wspomnę.
Rozumiem przyzwyczajenia, ale wydaje mi się, że ktoś kto używa różnych programów, sam tak mam, które w różny sposób są obsługiwane, nie ma problemu z tym, że w jednym jest tak, a w drugim inaczej?
 
 
Cysorz 



Pomógł: 205 razy
Dołączył: 01 Sty 2011
Posty: 3137
Skąd: Kraków
Wysłany: 26 Maj 2016, 02:15   

keyzetman - nie odbieraj tego jako krytyki, bo ani ja ani chezare jesteśmy od tego daleko (chezare - mam nadzieję, że nie obrazisz się, że wypowiadam się przy okazji w Twoim imieniu?). Ja jako stary pryk po prostu nie rozumiem, po co "obchodzić" jakąś funkcję, skoro jej działanie jest proste i zrozumiałe a wszelkie kombinowanie tylko gmatwa sprawę...
 
 
chezare 



Pomógł: 402 razy
Dołączył: 24 Gru 2010
Posty: 4551
Skąd: Grodzisk Mazowiecki
Wysłany: 26 Maj 2016, 06:32   

O co miałbym się obrażać kiedy w zasadzie to samo myślę. :-)
Rozumiem, że przyzwyczajenie może przez chwilę przeszkadzać, ale nie wierzę, że może to trwać latami. Trudno mi też uwierzyć, że od przytrzymania przycisku myszy komuś może się zmęczyć palec. Wątpię żeby taka modyfikacja przyspieszyła choćby odrobinę pracę, na pewno nie przyśpieszy jej procedura, którą trzeba "ręcznie" wywołać. Mam nadzieję, że Tomek się nie obrazi.
Nie znam się na tym i być może jakąś głupotę napiszę, ale wydaje mi się, że z obiektem złożonym z krzywych nie jest powiązane żadne zdarzenie związane z myszą, a to jest warunek żeby taka procedura uruchamiała się automatycznie w momencie kliknięcia czy przemieszczenia gryzonia.
To nie jest moim zdaniem proste zadanie.
 
 
zyzio 
Praktyk


Dołączył: 06 Cze 2011
Posty: 90
Skąd: Podkarpacie
Wysłany: 26 Maj 2016, 09:20   

chezare napisał/a:
...Trudno mi też uwierzyć, że od przytrzymania przycisku myszy komuś może się zmęczyć palec....


chezare po kilku dniach pod rząd przy wektoryzacji starych map i planów geodezyjnych to nie jest już kwestia wiary lecz fakt :) na tyle odczuwalny, że dobrałem się do mikrostyku w myszce, aby zmniejszyć jego "twardość" podczas klikania.
To właśnie z punktu widzenia pracy przy mapach poprosiłem o pomoc z tym skryptem.
Kolejna kwestią, jest to, że każdy z nas na pewno ma już wypracowany własny styl pracy, który jego zdaniem jest najlepszy i także w moim przypadku tak jest no ale nawet jeśli coś jest dobre nie znaczy, że nie może być jeszcze lepsze.
Dzięki skryptowi, który wstawił tomek123 mogę teraz zadeklarować w programiku "Autohotkey" pod jednym skrótem klawiszowym 3 rzeczy po kolei:

1. wciśnięcie klawisza "+" na klawiaturze numerycznej co jak wiadomo spowoduje dodanie nowego węzła w kolejności za lub przed aktualnie zaznaczonym, zależnie od kierunku krzywej
2. uruchomienie wspomnianego skryptu (można ustawić kilkadziesiąt milisekund opóźnienia aby nie dochodziło do nieprzewidzianych zdarzeń)
3. kliknięcie lewego przycisku myszki

Co to daje? W moim przypadku bardzo wiele właśnie podczas pracy nad mapami, ponieważ zaczynając rysować dany element najpierw dodaję na szybko "z daleka" podstawowe węzły potrzebne aby złapać zarys całego obiektu a dopiero później już na dużym powiększeniu widoku dodaję bardzo precyzyjnie wszystkie detale.
 
 
tomek123
Bywalec
tomek123


Wersja CorelDRAW: X7
Pomógł: 8 razy
Dołączył: 06 Gru 2014
Posty: 34
Skąd: Tychy
Wysłany: 26 Maj 2016, 11:11   

Kod:
Private Declare Function GetCursorPos Lib "user32" (ByRef pos As lpPoint) As Boolean
Private Type lpPoint: x As Long: y As Long: End Type
Public Sub go_cursor()
    On Error Resume Next
    Dim c As Curve, p As lpPoint, x#, y#, i%
    ActiveDocument.Unit = cdrMillimeter
    Set c = ActiveShape.Curve
    For i = 1 To c.Nodes.count
        If c.Nodes(i).Selected Then
            GetCursorPos p
            ActiveDocument.ActiveWindow.ScreenToDocument p.x, p.y, x, y
            c.Nodes(i).SetPosition x, y
            Exit For
        End If
    Next i
End Sub

dwie pierwsze linijki muszą być umieszczone na górze modułu nad wszystkimi procedurami...
Zaznacza się węzeł i po naciśnięciu skrótu do procedury 'go_cursor' węzeł się przemieszcza
Żeby zrobić skrót to w managerze makr prawy klik
 
 
tomek123
Bywalec
tomek123


Wersja CorelDRAW: X7
Pomógł: 8 razy
Dołączył: 06 Gru 2014
Posty: 34
Skąd: Tychy
Wysłany: 26 Maj 2016, 11:26   

Kod:
Public Sub go_cursor_mm()
    On Error Resume Next
    Dim c As Curve, p As lpPoint, x#, y#, i%, pos_x&, pos_y&
    ActiveDocument.Unit = cdrMillimeter
    Set c = ActiveShape.Curve
    For i = 1 To c.Nodes.count
        If c.Nodes(i).Selected Then
            GetCursorPos p
            ActiveDocument.ActiveWindow.ScreenToDocument p.x, p.y, x, y
            pos_x = x
            pos_y = y
            c.Nodes(i).SetPosition pos_x, pos_y
            Exit For
        End If
    Next i
End Sub

jak potrzebujesz szybko tworzyć proste linie i kąty proste z tworzonych węzłów to druga procedura, która przyciąga do pełnych współrzędnych w mm

ale jak chcesz przyciągać do cm lub innej jednostki miary to wystarczy zmienić:
ActiveDocument.Unit = cdrMillimeter na np. ActiveDocument.Unit = cdrCentimeter
 
 
zyzio 
Praktyk


Dołączył: 06 Cze 2011
Posty: 90
Skąd: Podkarpacie
Wysłany: 26 Maj 2016, 11:42   

Fantastycznie dokładnie o coś takiego mi chodziło :) tomek123 jesteś wielki, bardzo dziękuję.
 
 
tomek123
Bywalec
tomek123


Wersja CorelDRAW: X7
Pomógł: 8 razy
Dołączył: 06 Gru 2014
Posty: 34
Skąd: Tychy
Wysłany: 26 Maj 2016, 11:57   

nie ma za co ;) ja też to wykorzystam przy pracy, bo nawet mi się to spodobało i już sobie dodałem do prywatnego zbioru, ale pomysł był jednoznacznie twój, najważniejszy jest pomysł
 
 
zyzio 
Praktyk


Dołączył: 06 Cze 2011
Posty: 90
Skąd: Podkarpacie
Wysłany: 26 Maj 2016, 12:24   

Pomysł to jedno ale wiedza jak go wykonać to drugie.
Tomku widzę, ze masz doświadczenie w programowaniu a taka wiedza jest cenna więc jeśli byłbyś zainteresowany jeszcze kilkoma pomysłami to mógłbym za ich realizację zapłacić:)
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Nowe zasady dotyczące cookies. Wykorzystujemy pliki cookies, aby nasz serwis lepiej spełniał Państwa oczekiwania. Można zablokować zapisywanie cookies, zmieniając ustawienia przeglądarki.
         
Strona wygenerowana w 0.11 sekundy. Zapytań do SQL: 12