|
Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych
|
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: 3136 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: 3136 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ć:) |
|
|
|
|
|
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
|
|
|
|
|
|
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.16 sekundy. Zapytań do SQL: 12 |
|
|