PerfectVector
Autor: Irene Kim

AxiDraw: sprawdź kolejność ścieżek przed rysowaniem

Porównaj podglądy SVG offline AxiDraw, aby sprawdzić kolejność ścieżek, odwrócenie i ruch przy pisaku podniesionym z papieru. Zachowaj geometrię rysunku i poznaj, co zachowuje zapisany plik SVG.

8 min czytania
Na tej stronie

Aby zoptymalizować podróż pióra SVG w AxiDraw, najpierw upewnij się, że ścieżki rysują żądane znaki. Następnie porównaj podglądy offline z tą samą geometrią i stałymi ustawieniami. Zmiana kolejności może skrócić ruch pisaka z podniesionym pisakiem bez zmniejszania liczby podniesień i zmiany rysowanych kształtów.

Zachowaj oryginalny plik SVG. Poniższy podgląd sprawdza kolejność i opcjonalne odwrócenie ścieżki; nie rekonstruuje linii środkowych, nie naprawia niechcianych konturów ani trwale nie zmienia układu oryginalnych obiektów SVG. W naszym teście wykorzystaliśmy osiem autorskich pociągnięć, a nie wektoryzowany kontur z PerfectVector lub fizyczny rysunek piórem.

Wypróbuj na własnym obrazie
Otwórz pełne narzędzie
Za darmo i bez rejestracji: upuść obraz, aby zobaczyć podgląd swojego wektora.

Zdiagnozuj skoki przed zmianą kolejności

Ruch piórem dotykającym papieru to trasa, która zostawia ślady. Ruch z pisakiem podniesionym z papieru to ruch pomiędzy znakami z podniesionym pisakiem. Krótko wyglądający rysunek może wymagać długiego ruchu, gdy pióro jest podniesione znad papieru, gdy kolejne obiekty są daleko od siebie.

Co pokazuje podglądCzym się zająć w pierwszej kolejności
Dwie krawędzie wokół linii, które powinny stanowić jedno pociągnięcieZbuduj zamierzoną trasę jednoliniową
Pusty obwód, w którym chciałeś zacieniony obszarUtwórz wyraźne ścieżki pisaków z kreskowaniem
Poprawne znaki, ale powtarzające się przeskoki na stroniePoniżej porównaj ustawienia sekwencjonowania ścieżek i odwrócenia kierunku ścieżki
Niepożądane linie narysowane pomiędzy oddzielnymi znakamiPrzed zaakceptowaniem krótszej trasy sprawdź geometrię oparcia i łączenie ścieżek

Pomiar długości ścieżki SVG pozwala odpowiedzieć na pytanie, jak długa jest geometria rysunku. Samo w sobie nie obejmuje przejazdu maszyny pomiędzy tymi ścieżkami.

Dokumentacja CLI AxiDraw rozróżnia te ustawienia: 0 zwykle przestrzega kolejności dokumentów z możliwością łączenia, 1 również zmienia kolejność ścieżek, a 2 pozwala również na odwrócenie ścieżki. Połączenie sąsiednich ścieżek rysunkowych to osobna decyzja. Na potrzeby tego porównania wyłączamy tę funkcję za pomocą min_gap = -1, aby sąsiadujące kreski nie mogły stać się jednym ciągłym znacznikiem.

Odwrócenie może mieć znaczenie w przypadku prac wrażliwych na kierunek. Jeżeli rysunek musi mieć określoną kolejność pisania lub kierunek, krótsza droga ruchu z podniesionym pisakiem nie jest wystarczającym powodem do zaakceptowania ustawienia 2. Warstwy ograniczają również sortowanie; nie należy zakładać, że grupy zagnieżdżone zachowują optymalizowaną sekwencję rysowania. Sprawdź rzeczywisty podgląd swojego dokumentu.

Uruchom trzy podglądy offline na niezmienionym pliku SVG

Ten przykład wymaga języka Python i oficjalnego interfejsu API języka Python AxiDraw. Przetestowaliśmy API 3.9.6 z Pythonem 3.9.6. Postępuj zgodnie z oficjalnymi instrukcjami instalacji, jeśli moduł nie jest zainstalowany w środowisku Python, którego używasz.

Dokumentacja API Pythona definiuje podgląd jako symulację offline. Ustaw preview = True po plot_setup i przed plot_run. Poniższy skrypt zawsze to ustawia i potwierdza; nie zawiera żadnego połączenia z urządzeniem.

Zapisz ten mały przykład jako eight-strokes.svg lub użyj duplikatu własnego pliku SVG:

<svg xmlns="http://www.w3.org/2000/svg" width="100mm" height="80mm" viewBox="0 0 100 80">
  <g fill="none" stroke="#152b3b" stroke-width="0.4">
    <path id="stroke-0" d="M 10 20 L 18 20"/>
    <path id="stroke-1" d="M 88 60 L 80 60"/>
    <path id="stroke-2" d="M 20 20 L 28 20"/>
    <path id="stroke-3" d="M 78 60 L 70 60"/>
    <path id="stroke-4" d="M 30 20 L 38 20"/>
    <path id="stroke-5" d="M 68 60 L 60 60"/>
    <path id="stroke-6" d="M 40 20 L 48 20"/>
    <path id="stroke-7" d="M 58 60 L 50 60"/>
  </g>
</svg>

Plik testowy ma rzutnię 100 × 80 mm i pasujące wymiary viewBox. To odwzorowuje każdą jednostkę współrzędnych na 1 mm tutaj, zgodnie z mapowaniem rzutni i viewBox SVG. Każdy z ośmiu pociągnięć ma długość 8 mm.

Zapisz następujący plik jako preview-orders.py:

from pathlib import Path
import json
import sys
from pyaxidraw import axidraw
 
source = Path(sys.argv[1]).resolve()
destination = Path(sys.argv[2])
destination.mkdir()  # Use a new directory; preserve previous results.
reports = []
for order in (0, 1, 2):
    ad = axidraw.AxiDraw()
    ad.plot_setup(str(source))
    ad.options.preview = True
    ad.options.rendering = 3
    ad.options.reordering = order
    ad.options.random_start = False
    ad.options.auto_rotate = False
    ad.options.report_time = False
    ad.params.min_gap = -1
    assert ad.options.preview is True
    output = ad.plot_run(True)
    if ad.errors.code:
        raise RuntimeError(f"Preview error: {ad.errors.code}")
    (destination / f"preview-order-{order}.svg").write_text(output)
    reports.append({
        "order": order,
        "pen_down_m": ad.distance_pendown,
        "pen_up_m": ad.distance_total - ad.distance_pendown,
        "pen_lifts": ad.pen_lifts,
    })
report = json.dumps(reports, indent=2)
(destination / "distances.json").write_text(report + "\n")
print(report)

Uruchom go w środowisku Python zawierającym oficjalny interfejs API, używając nowej nazwy katalogu wyjściowego:

python3 preview-orders.py eight-strokes.svg preview-check

Zapisuje trzy diagnostyczne pliki SVG i distances.json. rendering = 3 obejmuje zarówno ruch uniesiony, jak i rysujący. Losowe starty i automatyczny obrót są wyłączone; łączenie ścieżek jest wyłączone. Zachowaj te opcje na stałe podczas porównywania własnego pliku. Ten skrypt jest metodą inspekcji w trybie offline, a nie poleceniem obsługi plotera.

Porównaj ruch oddzielnie z podniesionym pisakiem i narysowaną geometrią

W naszym pliku testowym ośmiu uderzeń powstał dokładny skrypt:

Zmiana kolejnościSzacunkowy ruch przy pisaku podniesionym z papieruRuch z piórem dotykającym papieruZgłoszone wzrosty
00.509749 m0.064 m8
10.223592 m0.064 m8
20.180919 m0.064 m8

Są to szacunki oprogramowania natywnego dla tego pliku, obejmujące podróż od początku i powrót do domu. Odległość opuszczenia pozostała 64 mm, a liczba uniesień pozostała osiem. Krótszy ruch z pisakiem oderwanym od papieru nie oznaczał mniejszej liczby podniesień. Nie mierzyliśmy fizycznego rysunku piórem, czasu, jaki upłynął od wydruku ani gwarantowanej poprawy w przypadku kolejnego rysunku.

Skumulowane podglądy AxiDraw pokazują niezmienione osiem niebieskich pociągnięć rysunkowych, podczas gdy trasy ruchu w kolorze magenta z podniesionym pisakiem różnią się od zera do dwóch; zwiększono kontrast wyświetlacza i wagę obrysu.
Rzeczywiste Preview przechwytywania skumulowanych kopii wyświetlania natywnych ścieżek SDK, renderowanych za pomocą resvg. Niebieski jest długopisem; magenta jest długopisem. Kolory i grubość obrysu zostały ulepszone w celu zapewnienia czytelności; współrzędne ścieżki natywnej pozostają niezmienione. Żaden ploter nie był podłączony.

Skumulowany rysunek porównuje ustawienia 0 i 2; tabela zawiera także 1. Wyświetla kopie natywnych ścieżek podglądu SDK z mocniejszymi kolorami niebieskim i magenta oraz grubszymi kreskami dla zapewnienia czytelności. Są to style wyświetlania, a nie fizyczne szerokości piór. Natywne współrzędne ścieżki i transformacje pozostają niezmienione; rzutnia wyświetlania przycina nieużywaną przestrzeń. Sprawdzono wszystkie trzy natywne podglądy, a niezależna kontrola geometrii znalazła te same osiem poziomych segmentów rysunku, co umożliwiło odwrócenie kolejności ich punktów końcowych. Każdy próbkowany wierzchołek pozostawał w zamierzonym segmencie.

W przypadku pliku otwórz każdy podgląd SVG i sprawdź warstwę rysunku oddzielnie od warstwy z podniesionymi ruchami. Potwierdź zamierzony rozmiar strony i lokalizację, wszystkie oczekiwane znaki, niezmienione dziury lub odstępy i brak nowego narysowanego łącznika. Sprawdź, czy dopuszczalny jest każdy skok odwrócony. Odrzuć trasę, która rysuje nieprawidłowe znaki, nawet jeśli jej raport dotyczący odległości jest mniejszy.

Dowiedz się, co zachowuje zapisany podgląd

Dokumentacja dotycząca ponownego zamawiania AxiDraw wyjaśnia, że ​​optymalizacja odbywa się w kopii tymczasowej. Oryginalne obiekty w zapisanym wyjściowym formacie SVG zachowują swoją pierwotną kolejność. W naszych wynikach również zachowano każdą oryginalną ścieżkę stroke-* i jej oryginalną sekwencję.

Dlatego preview-order-2.svg jest podglądem diagnostycznym, a nie dowodem na to, że inny program odczyta plik graficzny o trwale zmienionej kolejności. Zachowaj źródło, wybraną opcję i raport porównawczy razem. Jeśli później użyjesz oryginału w AxiDraw, zastosuj ponownie zamierzone ustawienia kolejności w odpowiednim procesie drukowania.

Jeśli Twoim problemem jest niechciana geometria rysunku, wróć do kroku tworzenia trasy. Jeśli tylko droga poruszania się z podniesionym pisakiem jest marnotrawstwem, porównaj podglądy ze stałymi ustawieniami. Rozmiar fizyczny, zachowanie pióra i działanie maszyny nadal wymagają własnych kontroli; ta kontrola offline ich nie potwierdza.

Gdzie pasuje PerfectVector przed tą kontrolą

Jeśli nadal masz tylko grafikę rastrową i chcesz, aby jej widoczne kontury z wypełnieniem kolorem były edytowalnymi kształtami wektorowymi, wektoryzator obrazu PerfectVector może być odpowiednim wcześniejszym krokiem. Sprawdź jego podgląd względem konturów i otworów źródła. Nie wyznacza pojedynczej linii środkowej ani nie optymalizuje kolejności ścieżek AxiDraw; użyj linii środkowej lub kreskowania, jeśli są to trasy, których potrzebujesz.

Jeśli masz już prawidłowe trasy SVG, zachowaj je i bezpośrednio przeprowadź kontrolę offline. Odtworzenie pliku SVG nie powoduje braku brakujących informacji o zamówieniu. Chroniony podgląd PerfectVector można tylko przeglądać; edycja i eksport wyniku wymagają jego odblokowania.

Często zadawane pytania

Czy zmiana kolejności AxiDraw trwale zmienia kolejność obiektów w moim pliku SVG? Nie. Udokumentowana optymalizacja wykorzystuje kopię tymczasową. Zapisany podgląd zawiera diagnostyczne warstwy ruchu, podczas gdy oryginalne obiekty graficzne zachowują swoją kolejność. Zachowaj wybrane ustawienie osobno.

Dlaczego ruch pióra podniesionego znad papieru zmniejszył się, podczas gdy liczba uniesień pozostała taka sama? Te same osiem oddzielnych pociągnięć można odwiedzać w innej kolejności lub kierunku. W naszym teście referencyjnym z wyłączonym łączeniem ścieżek wszystkie ustawienia zgłaszały osiem podniesień i 64 mm rysunku, podczas gdy ruch przy podniesionym pisaku uległ zmianie.

Czy zamawianie może naprawić podwójny ślad lub wygenerować cieniowanie? Nie. Najpierw popraw trasy rysunku. Użyj przepływu pracy z linią środkową dla pojedynczego pociągnięcia lub skonstruuj jawne ścieżki kreskowania do cieniowania obszaru, a następnie porównaj kolejność na zaakceptowanej geometrii.

Źródła

  1. AxiDraw — dokumentacja API Pythona — definiuje podgląd i renderowanie offline, z przykładami zwracającymi podgląd SVG.
  2. AxiDraw — dokumentacja CLI — obejmuje instalację, sekwencjonowanie ścieżek i ustawienia odwrócenia kierunku ścieżki, obsługę warstw i tymczasową optymalizację.
  3. W3C — Układy współrzędnych SVG, przekształcenia i jednostki — Wyjaśnia mapowanie rzutni użyte w zwymiarowanym przykładzie.

Wciąż zaczynasz od rysunku rastrowego, którego kontury z wypełnieniem kolorem są Ci potrzebne? Zacznij od własnego obrazu, a następnie sprawdź kontury i otwory podglądu względem źródła. Gdy już istnieją zamierzone trasy piór, sprawdź ich kolejność osobno, korzystając z powyższej metody offline.

Więcej z bloga

PerfectVector

Zamień obraz w
edytowalny plik SVG

Wektoryzuj i sprawdzaj podgląd za darmo, bez dziennego limitu.