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

Makra - Problem z wypełnieniem kształtu?

TheMan258 - 27 Styczeń 2024, 19:16
Temat postu: Problem z wypełnieniem kształtu?
Witam,
Dawno się nie odzywałem, ponieważ dotychczas radziłem sobie ze wszystkim samodzielnie. Jednak teraz napotkałem problem, z którym nie potrafię sobie poradzić. Kiedyś otrzymałem od klienta plik z topperem, i moje zdziwienie było ogromne, gdy próbowałem go wypełnić kolorem – wypełniał się całościowo zamiast tylko liter. Z ciekawości próbowałem zamykać ścieżki później zacząłem korzystać z różnych narzędzi, takich jak CurveWorks czy Cadintools, ale niestety, bezskutecznie :cry . Szukałem rozwiązania w Internecie, lecz bez rezultatu (albo może źle szukałem 😉). Pojawia się także problem z plikami DXF. Wszystkie importowane z CADA kształty są praktycznie pootwierane. Z topperem, podobnym do tego załączonego, można poradzić sobie np. trasowaniem, ale gdy pojawi się potrzeba otwarcia pliku z CADA, sytuacja staje się mniej radosna. Czy istnieje jakiś sposób, na przykład przy użyciu makra który pozamyka otwarte ścieżki. Spotkaliście się z czymś takim kiedykolwiek :hm W załączniku przesyłam wspomniany plik.

Oganesson - 28 Styczeń 2024, 12:51

Użyj narzędzia "smart fill tool" (inteligentne wypełnienie) do wypełniena a będziesz miał linie wypełnione tak jak po prawej.
TheMan258 - 28 Styczeń 2024, 22:07

Oganesson napisał/a:
Użyj narzędzia "smart fill tool" (inteligentne wypełnienie) do wypełniena a będziesz miał linie wypełnione tak jak po prawej.

Bardzo dziękuję za odpowiedź :ok Człowiek codziennie się czegoś uczy nowego. W wolnym czasie pomyślę nad stworzeniem makra który wypełnia w ten sposób otwarte obiekty :dances

Martin Nez - 29 Styczeń 2024, 20:19

To nie problem z rozłączonymi węzłami - rozłączone są małe elementy: nad "n" w "Komunia" oraz w środku "a" w "Święta". To częsty błąd Corela, ja mam takie makro do radzenia sobie z nim:
Kod:
Sub zalej()
    ' sprawdzenie czy coś zostało zaznaczone
    If ActiveSelection.Shapes.Count = 0 Then
        MsgBox ("Zaznacz obiekt(y).")
        Exit Sub
    End If
   
    Dim s As Shape
    For Each s In ActiveSelectionRange
        If s.Type = cdrGroupShape Then
            For Each ss In s.Shapes
                If ss.FillMode = cdrFillWinding Then ss.FillMode = cdrFillAlternate
            Next
        Else
            If s.FillMode = cdrFillWinding Then s.FillMode = cdrFillAlternate
        End If
    Next s
End Sub

Należy zaznaczyć obiekt z takim błędem i uruchomić skrypt. Działa z obiektami i jednopoziomowymi grupami (tylko z takich korzystam, więc nie kombinowałem z innymi).

Pozdr,
MN

TheMan258 - 1 Luty 2024, 22:56

Martin Nez napisał/a:
To nie problem z rozłączonymi węzłami - rozłączone są małe elementy: nad "n" w "Komunia" oraz w środku "a" w "Święta". To częsty błąd Corela, ja mam takie makro do radzenia sobie z nim:
Kod:
Sub zalej()
    ' sprawdzenie czy coś zostało zaznaczone
    If ActiveSelection.Shapes.Count = 0 Then
        MsgBox ("Zaznacz obiekt(y).")
        Exit Sub
    End If
   
    Dim s As Shape
    For Each s In ActiveSelectionRange
        If s.Type = cdrGroupShape Then
            For Each ss In s.Shapes
                If ss.FillMode = cdrFillWinding Then ss.FillMode = cdrFillAlternate
            Next
        Else
            If s.FillMode = cdrFillWinding Then s.FillMode = cdrFillAlternate
        End If
    Next s
End Sub

Należy zaznaczyć obiekt z takim błędem i uruchomić skrypt. Działa z obiektami i jednopoziomowymi grupami (tylko z takich korzystam, więc nie kombinowałem z innymi).

Pozdr,
MN

Dopiero teraz znalazłem czas na odpisanie... Super bardzo dziękuję to 100% rozwiązuje problem z wypełniem :!: Jak zacząłem drążyć temat to znalazłem podobne przypadki na zagranicznych forach, ale tam też radzili żeby użyć "smartfill" tak jak kolega wyżej poradził. Na szybko coś takiego napisałem.
Kod:
 S.GetPosition x, y
Set s1 = S.CustomCommand("Boundary", "SmartFill", x, y, Nothing, 0.003, Nothing)
I problem w tym, że bazuje ono na współrzędnych kursora i po dodaniu pętli raz wypełnia prawidłowo a raz nie. Więc zatem nie pozostaje mi nic innego jak jeszcze raz podziękować za poświecenie czasu i powyższe macro :ok

Sparkman - 14 Luty 2024, 11:15

W przypadku tego pliku wystarczyło użyć funkcji Reverse Direction do któregoś z węzłów zewnętrznej pętli. Nie wiem czemu ale Coreldraw ma czasem ma problem z poprawnym wypełnieniem takich obiektów.
Oczywiście warto też usunąć kilka małych elementów, o których wspomniano wcześniej.
Ja do takiego czyszczenia używam starego macra WX Tools / selectSmalObjects, ale to w Corel X6.


Powered by phpBB modified by Przemo © 2003 phpBB Group