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
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ć :hm . 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 306 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.
 
 
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: 14