|
Corel FORUM
Forum użytkowników programów firmy Corel. Grafika wektorowa, rastrowa i obróbka zdjęć cyfrowych
|
Makro do przekładania obiektów z warstw |
Autor |
Wiadomość |
TheMan258
Początkujący TheMan258
Wersja CorelDRAW: x5
Wiek: 33 Dołączył: 22 Lut 2021 Posty: 14 Skąd: Kraków
|
Wysłany: 18 Wrzesień 2021, 13:56 Makro do przekładania obiektów z warstw
|
|
|
Witam wszystkich, mam problem, który nie mogę rozwiązać a w Internecie też za dużo o nim nie ma. Pracuję w Corelu x5, mam 2 warstwy z mapami bitowymi i muszę je wszystkie poprzekładać między sobą, aby to zobrazować dołączam zdjęcie w załączniku. Na pierwszej warstwie są niestety obiekty nie parzyste zaś na drugiej parzyste i chciałbym znaleźć sposób, aby napisać kod, który poprzekłada te obiekty w taki sposób, aby po rozdzieleniu na strony zachowały swoją kolejność, (na stronie pierwszej była mapa z numerkiem 1, na drugiej z numerkiem 2 itd.) Wydaje mi się, że makro musiałoby przeskakiwać z jednej warstwy na drugą do momentu aż nie skończą się mapy. Samo makro do rozdzielania na strony posiadam jednak problem jest z tym przekładaniem i przeskakiwaniem tych warstw. Myślałem o tym żeby wykorzystać Static Id jednak nie wiem jak to zapętlić . Jeśli ktoś wie jak to poprzekładać albo ma inny sposób jak to zrobić to bardzo proszę o radę
2 warstwy z mapami.png
|
Pobierz Plik ściągnięto 303 raz(y) 29.78 KB |
|
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 31 Październik 2021, 12:43
|
|
|
W twoim przykładzie mapy bitowe nie posiadają nazw. Jak więc masz zamiar określić która jest parzysta, a która nie? Po za tym przydały by się 3 warstwy:
1. Źródłowa,
2. Parzysta,
3. Nieparzysta.
StaticID to identyfikator obiektu, ale nie wiem jak chcesz go użyć skoro parzystość tego numerka ma się nijak do parzystości obiektów na warstwie. Nawet jeśli jest zależność dla nowych obiektów to np. usuwając kilka lub zmieniając ich kolejność na warstwie, takiej zależności już nie będzie.
TheMan258 napisał/a: | nie wiem jak to zapętlić |
Tu masz opis pętli dla VBA: VBA w Excel - Pętla For
Z pętlą Do While to uważaj bo ona jest wykonywana do czasu, aż warunek zostanie spełniony. Czyli jak nie zostanie to zawiesisz Corela (ilośkrotny ESC zatrzymuje makro - oile się zdąży go wcisnąć lub Ctrl+Break - przycisk pauzy - różnie opisywany na różnych klawiaturach).
Test do zabawy:
Kod: | Sub TestParzysteNieparzyste()
Dim l As Layer
Dim s As Shape
Dim lp As Layer
Dim ln As Layer
Set l = ActiveLayer
Set lp = ActivePage.Layers("parzyste")
Set ln = ActivePage.Layers("nieparzyste")
l.Activate
Dim id As Integer
id = 1
For Each s In l.Shapes
' wyswietla informacje w Immediate
Debug.Print "SID: " & s.StaticID & " pseudo id: " & id
' nadanie nazwy dla obiektu
s.Name = "SID: " & s.StaticID & " pseudo id: " & id
' dla StaticID:
'If s.StaticID Mod 2 = 0 Then
' dla pseudo id:
If id Mod 2 = 0 Then
' parzyste
Debug.Print "-> przenies do parzyste"
s.MoveToLayer lp
Else
' nieparzyste
Debug.Print "-> przenies do nieparzyste"
s.MoveToLayer ln
End If
id = id + 1
Next s
End Sub |
VBA jest trochę archaiczne w obecnych czasach. Niestety Corel nie przechodzi na Pythona. |
|
|
|
|
TheMan258
Początkujący TheMan258
Wersja CorelDRAW: x5
Wiek: 33 Dołączył: 22 Lut 2021 Posty: 14 Skąd: Kraków
|
Wysłany: 9 Listopad 2021, 18:52
|
|
|
Super makro z którego można wycisnąć jeszcze więcej lub użyć w innym projekcie. Rzeczywiście nie zastanowiłem się nad tym aby najpierw ponazywać te obrazki. Tylko teraz pojawia się problem a mianowicie w jaki sposób nazwać mapy w taki sposób aby na 1 warstwie były cyfry tylko nieparzyste a na drugiej zaś parzyste. Jeśli dobrze rozumiem to w tym kodzie operacja Mod 2 Kod: | If s.StaticID Mod 2 = 0 Then... If id Mod 2 = 0 Then | odpowiada za parzystość liczb, tak? |
|
|
|
|
maroQ
Doradca
Pomógł: 16 razy Wiek: 40 Dołączył: 08 Lut 2011 Posty: 117 Skąd: Kalisz
|
Wysłany: 9 Listopad 2021, 22:32
|
|
|
Mod to jest dzielenie modulo w języku C i pochodnych używało się operatora % w Pythonie jest tak samo. Jest to reszta z dzielenia więc jeśli liczba dzieli się przez 2 z wynikiem 0 to masz parzyste. Jak nie to nieparzyste.
Musiałbyś nazwać je ręcznie, z makra przez s.Name = "1" itp. albo jakimś mechanizmem. Bez nazywania możesz zdać się na kolejność obiektów w warstwie. StaticID jest słabym pomysłem do szukania parzystych liczb.
Jak byś miał jakoś nazwane obiekty to będzie można wyssać z nazwy mapy jej nazwę i poprzesuwać.
Chyba, że ustawisz jakoś mapy w warstwie i zaczniesz szukać po współrzędnych przez GetBoundingBox nie bardzo rozumiem po co chcesz przesuwać parzyste mapy na jedną warstwę, a nieparzyste na inną.
Przymierzam się do pisania makr w Pythonie. Język jest bardzo prosty i daje spore możliwości. No i można pracować na otwartym kodzie bez kompilacji jak w vba czy php. Corel poszalał od wersji nowszych niż X5. Zupełnie popsuli efektywność programu. No i mamy 2021 rok, a oni nie używają wielu procesorów ani GPU. |
|
|
|
|
TheMan258
Początkujący TheMan258
Wersja CorelDRAW: x5
Wiek: 33 Dołączył: 22 Lut 2021 Posty: 14 Skąd: Kraków
|
Wysłany: 19 Listopad 2021, 19:26
|
|
|
Dzięki wielkie za wyjaśnienie. Nie miałem, jak odpisać wcześniej. Ogólnie chodzi o to, że mam poskanowane bardzo stare materiały. Ktoś kto tym się zajmował zrobił to w ten sposób, że zrobił skan 2 stron razem (na jednej kartce) i teraz przyszło mi to wydrukować dwustronnie tak aby jedna strona była na jednej kartce. Mając te bitmapy wpadłem na pomysł, aby w Corelu wykadrować jedną połówkę i drugą. I tu się pojawił problem, bo gdy zapiszę to do .pdf to Acrobat nie ma opcji przekładania stron (znaczy się ma opcję organizuj no, ale to mozolna ręczna praca). Więc mając te połówki myślałem, żeby to rozdzielić na dwie warstwy nieparzystą i parzystą. Próbowałem napisać makro które kopiowałoby raz z jednej warstwy raz z drugiej i umieszczało na kolejnych stronach lecz utknąłem na tym, że się nie kopiuje na przemian. Z jedną rzeczą sobie poradzę, ale mając ich 100 i więcej niestety nie jestem w stanie. |
|
|
|
|
|
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.11 sekundy. Zapytań do SQL: 14 |
|
|