Jak odczytać rysunek AutoCAD bez samego AutoCAD-a
Wyobraź sobie taką sytuację: musisz wyodrębnić dane ze starego rysunku technicznego lub zautomatyzować generowanie diagramów, ale Twój budżet nie pozwala na zakup licencji AutoCAD, a zastrzeżone SDK kosztują tyle, co skrzydło samolotu. Format DWG to prawdziwa "czarna skrzynka" świata inżynierii. Jest zamknięty, binarny i zmienia się co kilka lat. Ręczne parsowanie go to wątpliwa przyjemność, która może ciągnąć się miesiącami.
Tutaj właśnie pojawia się LibreDWG. To darmowa biblioteka C będąca częścią projektu GNU, która stawia sobie śmiały cel: dać programistom w pełni funkcjonalne narzędzie do odczytu i zapisu plików DWG bez vendor lock-in.
Czym jest ten projekt
LibreDWG wyłonił się z forka LibDWG. Ironicznie, powodem rozłamu był język: oryginalny projekt używał Esperanto w swoim kodzie i dokumentacji. Społeczność uznała, że angielski jest lepszy dla przyciągnięcia współpracowników, i tak narodził się LibreDWG.
Dziś jest to bez wątpienia najpoważniejsze rozwiązanie Open Source do pracy z formatem DWG. Biblioteka potrafi dekodować praktycznie wszystkie wersje plików. Zapis jest nieco bardziej skomplikowany (szczególnie dla wersji nowszych niż R2004), ale projekt jest aktywnie rozwijany. Jeśli potrzebujesz tylko odczytać dane, wyodrębnić tekst lub przekonwertować rysunek do SVG — to jest dokładnie to, czego szukasz.
Co potrafi biblioteka
Twórcy nie tylko udostępnili kod biblioteki, ale również wyposażyli ją w zestaw przydatnych narzędzi. To świetne przykłady praktycznego użycia API.
Konwersja do formatu wektorowego i JSON
Za pomocą dwgread możesz zamienić binarny rysunek na coś czytelnego dla człowieka. Obsługiwany jest JSON, DXF, a nawet GeoJSON. Otwiera to drzwi do wizualizacji web: przepuść plik przez konwerter, otrzymaj JSON, wyrenderuj na Canvas lub SVG.
Przeszukiwanie rysunków
Narzędzie dwggrep pozwala wyszukiwać ciągi tekstowe wewnątrz plików DWG za pomocą wyrażeń regularnych. Jeśli masz archiwum tysiąca rysunków i musisz znaleźć konkretny węzeł lub specyfikację, to narzędzie zaoszczędzi Ci godziny życia.
Manipulacja warstwami
Przez dwglayers możesz szybko wyciągnąć listę wszystkich warstw. Jest to przydatne dla zautomatyzowanych systemów sprawdzania zgodności lub po prostu dla zrozumienia struktury złożonego projektu.
Generowanie rysunków od zera
Narzędzie dwgadd to najłatwiejszy sposób programowego tworzenia pliku DWG. Przyjmuje proste polecenia do tworzenia encji i ich właściwości. Nie musisz zagłębiać się w zawiłości formatu binarnego — po prostu opisz, co chcesz zobaczyć na rysunku.
Zaplecze techniczne
Biblioteka jest napisana w C99, co czyni ją maksymalnie przenośną. Świetnie sprawdza się na Linuksie i Windows (przez MSYS2 lub Visual Studio 2019+).
Ciekawe jest to, co dotyczy kodowania. Stare wersje DWG używały około 30 różnych stron kodowych. LibreDWG zajmuje się całą brudną robotą konwersji tego zoo do UTF-8. Wewnętrznie używa UTF-8 (a dokładniej WTF8, ponieważ Windows UCS-2 ma swoje własne dziwactwa z parami surrogatowymi), co eliminuje problemy z "zepsutym tekstem" w nazwach warstw czy tekstach.
Dla tych, którzy nie chcą pisać w czystym C, dostępne są wiązania do Pythona i Perla przez SWIG. Pozwala to szybko stworzyć skrypt do przetwarzania rysunków, korzystając z pełnej mocy języków wysokiego poziomu.
Dla kogo to jest
Widzę kilka scenariuszy, w których LibreDWG będzie niezastąpiony:
- Automatyzacja obiegu dokumentów. Gdy musisz automatycznie wyodrębnić dane z ramki rysunkowej i wprowadzić je do bazy danych.
- Usługi webowe dla inżynierów. Tworzenie online'owych przeglądarek lub konwerterów bez używania ciężkiego oprogramowania po stronie serwera.
- Generowanie raportów. Jeśli musisz dołączyć diagram rozmieszczenia urządzeń do raportu generowanego w PDF lub PostScript.
- Integracja z GIS. Dzięki obsłudze GeoJSON dane z rysunków mogą być bezpośrednio przesyłane do systemów informacji geograficznej.
Czy warto spróbować
Musisz rozumieć, że praca z DWG to zawsze chodzenie po cienkim lodzie. Format jest zastrzeżony, a inżynieria odwrotna nie zawsze nadąża za aktualizacjami AutoCAD. Na przykład zapis plików w wersjach R2010-R2018 może nadal skutkować błędami sumy kontrolnej (CRC).
Jednak do zadań odczytu i konwersji LibreDWG jest potężnym i, co najważniejsze, darmowym narzędziem. Jeśli napotkałeś potrzebę programowego przetwarzania rysunków, zacznij od eksplorowania przykładów w folderze examples. Jest tam plik load_dwg.c — to doskonały szkielet dla Twojej przyszłej aplikacji.
Projekt jest żywy, commitów przybywa, a dokumentacja w formacie Texinfo i Doxygen pomoże Ci nawigować w głębiach API. Jeśli jesteś gotów tolerować pewne ograniczenia przy zapisywaniu nowych formatów, LibreDWG stanie się świetnym uzupełnieniem Twojego zestawu narzędzi.
Powiązane projekty