❓ Nie wiesz co to VSC, Python czy Git? Nie ogarniasz programowania?
👉 KLIKNIJ TUTAJ - Prosta Instrukcja Instalacji 👈Szczegółowa instrukcja krok po kroku jak zainstalować i uruchomić program w kilka minut!
Po prostu sklonuj repozytorium, kliknij dwukrotniestart_gui.bati gotowe! 🎉
Profesjonalna aplikacja w Pythonie do konwersji plików DXF (AutoCAD) na format SVG z inteligentnym przypisywaniem tekstów do geometrii oraz nowoczesnym interfejsem graficznym.
- Podstawowy SVG: Prosta konwersja tylko z kształtami geometrycznymi
- Interaktywny SVG: Interfejs do ręcznej korekty przypisań tekstów (kliknij aby wybrać, prawy przycisk aby przypisać)
- Strukturalny SVG: Hierarchicznie zorganizowany wynik pogrupowany według falowników z tooltipami po najechaniu myszką
- Zakładka Konfiguracji: Dynamiczny układ z automatycznym dopasowaniem szerokości panelu
- Edytor Przypisań: Wizualna edycja z wyborem lewym przyciskiem i przypisaniem prawym
- Podgląd na Żywo: Wbudowana przeglądarka SVG z funkcjami zoom i przesuwania
- Responsywne Okno Logów: Wielowątkowe logowanie z automatycznym przewijaniem
- Automatyczne Przypisywanie: Algorytm oparty na odległości automatycznie przypisuje etykiety tekstowe do segmentów geometrycznych
- Wykrywanie Duplikatów: Automatycznie identyfikuje i usuwa zduplikowane segmenty
- Filtrowanie Outlierów: Usuwa elementy poza znaczącymi granicami dla czystszego wyniku
- Adaptacyjny ViewBox: Dynamicznie obliczany viewBox, który obsługuje elementy z ujemnymi współrzędnymi
- Własne Parsowanie Tekstów: Konfigurowalne wzorce regex do wyodrębniania ID stacji i numerów falowników
- Przetwarzanie Wsadowe: Konwertuj wiele plików DXF za pomocą jednej konfiguracji
- Interaktywne Tooltips: Najedź na elementy w Strukturalnym SVG aby zobaczyć metadane (ID segmentów, ID strukturalne)
- Presety Konfiguracji: Zapisuj i wczytuj pliki
.cfgdla różnych formatów DXF
- Python 3.13 lub wyższy
- pip (menedżer pakietów)
- Sklonuj repozytorium:
git clone https://github.com/kglebows/DXF2SVG.git
cd DXF2SVG- Zainstaluj wymagane zależności:
pip install -r requirements.txtUruchom interfejs graficzny:
python run_interactive_gui.pyLub użyj skryptu wsadowego na Windows:
start_gui.batfrom src.core.dxf2svg import DXF2SVG
# Wczytaj plik DXF
dxf = DXF2SVG('input.dxf', 'config.cfg')
# Przetwarzaj i generuj SVG
dxf.extract_texts()
dxf.extract_polylines()
dxf.assign_texts_to_strings()
dxf.generate_svg('output.svg')Uruchom run_interactive_gui.py aby otworzyć GUI. Główne okno zawiera trzy zakładki:
- Konfiguracja: Ustawienia warstw, ID stacji i formatów wyjściowych
- Edytor Przypisań: Ręczna korekta przypisań tekstów
- Przeglądarka SVG: Podgląd wygenerowanych plików SVG
W zakładce Konfiguracja:
- Kliknij Wybierz Plik DXF aby wczytać plik AutoCAD
- Skonfiguruj nazwy warstw:
- Warstwa Polilinii: Warstwa zawierająca segmenty geometryczne (np.
@IDE_STRING_1) - Warstwa Tekstów: Warstwa zawierająca etykiety tekstowe (np.
@IDE_STRING_1_TXT)
- Warstwa Polilinii: Warstwa zawierająca segmenty geometryczne (np.
- Ustaw ID Stacji (np.
LES1,LES2)
Zdefiniuj wzorce regex do wyodrębniania metadanych z etykiet tekstowych:
- Wzorzec ID Stacji: np.
([A-Z]+\d+)aby wyodrębnićLES1zLES1-INV01 - Wzorzec Falownika: np.
INV(\d+)aby wyodrębnić01zLES1-INV01
Wybierz tryb generowania SVG:
- Interaktywny: Generuje
interactive_assignment.svgz kontrolkami przypisań - Strukturalny: Tworzy hierarchicznie zorganizowany SVG pogrupowany według falowników z tooltipami
Kliknij przycisk Wczytaj i Przetwórz DXF:
- Aplikacja wyodrębni teksty i polilinie
- Uruchomi się automatyczne przypisywanie (algorytm oparty na odległości)
- Zostanie wygenerowany interaktywny SVG
- Pasek postępu pokaże status konwersji
Przejdź do zakładki Edytor Przypisań:
- Zobacz interaktywny SVG z kolorowanymi elementami:
- Zielony: Przypisane segmenty
- Czerwony: Nieprzypisane teksty
- Szary: Nieprzypisane segmenty
- Lewy przycisk myszy - zaznacz tekst lub segment
- Prawy przycisk myszy na docelowym elemencie - przypisz
- Użyj przycisku Wyczyść Przypisanie aby usunąć nieprawidłowe przypisania
W zakładce Konfiguracja, kliknij Generuj Strukturalny SVG:
- Wyjściowy SVG będzie zawierał:
- Hierarchiczne grupowanie według falowników
- Tooltips po najechaniu pokazujące metadane
- Czysty viewBox obejmujący wszystkie elementy
- Geometrię bez duplikatów
Pliki konfiguracyjne używają formatu .cfg ze stylu INI:
[Layers]
polyline_layer = @IDE_STRING_1
text_layer = @IDE_STRING_1_TXT
[Station]
station_id = LES1
[Format]
delimiter = -
remove_prefix = True
[Search]
search_string_regex = ([A-Z]+\d+)
search_inverter_regex = INV(\d+)
search_segment_regex = (\d+)
[Visual]
segment_height = 20
text_size = 3
spacing = 2
[Files]
output_dir = ./output
save_interactive = True
save_structured = True- [Layers]: Nazwy warstw DXF dla polilinii i tekstów
- [Station]: Identyfikator stacji do filtrowania tekstów
- [Format]: Reguły parsowania tekstów (delimiter, obsługa prefiksów)
- [Search]: Wzorce regex do wyodrębniania ID
- [Visual]: Parametry stylizacji SVG
- [Files]: Katalog wyjściowy i flagi generowania
- Cel: Interfejs do ręcznej korekty przypisań
- Funkcje:
- Kliknij aby wybrać elementy
- Prawy przycisk aby przypisać tekst do segmentu
- Kolorowe statusy (zielony=przypisany, czerwony=nieprzypisany tekst, szary=nieprzypisany segment)
- Wbudowany JavaScript dla interaktywności
- Zastosowanie: Korygowanie błędów automatycznego przypisywania
- Cel: Finalny produkcyjny wynik
- Funkcje:
- Hierarchiczne grupy
<g>według ID falownika - Niestandardowe atrybuty danych:
data-structural-id,data-string-id,data-segment-id - Tooltips po najechaniu pokazujące metadane elementu
- Adaptacyjny viewBox dla pełnej widoczności
- Czysta, zwalidowana struktura SVG
- Hierarchiczne grupy
- Zastosowanie: Dokumentacja, integracja webowa, archiwizacja
- Błąd: "Cannot open DXF file"
- Rozwiązanie: Sprawdź ścieżkę do pliku i upewnij się, że DXF nie jest uszkodzony. Sprawdź kompatybilność wersji DXF (obsługiwane R12-R2018).
- Błąd: "0 texts assigned automatically"
- Rozwiązanie:
- Sprawdź czy ID stacji pasuje do zawartości tekstów
- Zweryfikuj wzorce regex w zakładce Konfiguracja
- Upewnij się, że warstwy polilinii i tekstów są prawidłowe
- Błąd: Brakujące etykiety tekstowe w wyniku
- Rozwiązanie:
- Zwiększ parametr
text_sizew konfiguracji - Sprawdź czy nazwa warstwy tekstowej jest prawidłowa
- Zweryfikuj czy teksty są na właściwej warstwie w DXF
- Zwiększ parametr
- Błąd: Brak tooltip po najechaniu
- Rozwiązanie:
- Otwórz SVG w nowoczesnej przeglądarce (Chrome, Firefox, Edge)
- Upewnij się że JavaScript jest włączony
- Kursor musi być bezpośrednio nad elementami
rect
- Błąd: Segmenty lub teksty przycięte na krawędziach
- Rozwiązanie: Aplikacja automatycznie oblicza adaptacyjny viewBox. Jeśli problem się utrzymuje:
- Sprawdź czy nie ma ekstremalnie dużych wartości współrzędnych w DXF
- Zweryfikuj czy filtrowanie outlierów nie jest zbyt agresywne (
outlier_thresholdw konfiguracji)
- Błąd: Błąd pamięci lub zawieszenie
- Rozwiązanie:
- Zmniejsz rozmiar pliku DXF usuwając niepotrzebne warstwy
- Zwiększ rozmiar sterty Pythona:
python -X opt -W ignore run_interactive_gui.py - Sprawdź dostępność pamięci RAM w systemie
Nadpisz domyślne wzorce regex dla specjalistycznych formatów DXF:
from src.config.config_manager import ConfigManager
config = ConfigManager('custom.cfg')
config.set('Search', 'search_string_regex', r'CUSTOM-(\d{4})')
config.set('Search', 'search_inverter_regex', r'INV#(\d+)')
config.save()Przetwarzaj wiele plików DXF z jedną konfiguracją:
import os
from src.core.dxf2svg import DXF2SVG
config_file = 'batch_config.cfg'
input_dir = './input_dxf/'
output_dir = './output_svg/'
for filename in os.listdir(input_dir):
if filename.endswith('.dxf'):
dxf_path = os.path.join(input_dir, filename)
svg_path = os.path.join(output_dir, filename.replace('.dxf', '.svg'))
dxf = DXF2SVG(dxf_path, config_file)
dxf.process_all() # Wyodrębnij, przypisz, generuj
dxf.save_structured_svg(svg_path)Użyj DXF2SVG jako biblioteki w swoich projektach Python:
from src.core.dxf2svg import DXF2SVG
# Inicjalizuj z plikiem DXF i konfiguracją
converter = DXF2SVG('plant_layout.dxf', 'config.cfg')
# Przetwarzanie krok po kroku
texts = converter.extract_texts()
polylines = converter.extract_polylines()
assignments = converter.assign_texts_to_strings()
# Dostęp do surowych danych
for inverter_id, strings in converter.inverter_data.items():
for string_id, segments in strings.items():
print(f"Falownik {inverter_id}, String {string_id}: {len(segments)} segmentów")
# Generuj niestandardowe wyjście
converter.generate_interactive_svg('custom_interactive.svg')
converter.generate_structured_svg('custom_structured.svg')DXF2SVG/
src/
core/ # Logika konwersji
dxf2svg.py # Główny procesor DXF
config.py # Dataclass konfiguracji
geometry_utils.py # Obliczenia geometryczne
svg/ # Generowanie SVG
svg_generator.py # Generator SVG z adaptacyjnym viewBox
gui/ # Interfejs użytkownika
interactive_gui_new.py # Główne okno aplikacji
unified_config_tab.py # Panel konfiguracji
enhanced_svg_viewer.py # Interaktywna przeglądarka SVG
simple_svg_viewer.py # Podstawowy renderer SVG
interactive/ # Edycja przypisań
interactive_editor.py # Zakładka edytora przypisań
assignment_manager.py # Logika przypisań
config/ # Zarządzanie konfiguracją
config_manager.py # I/O plików konfiguracyjnych
utils/ # Narzędzia
console_logger.py # Logowanie wielowątkowe
configs/ # Przykładowe pliki konfiguracyjne
Grabowo3.cfg
ziec.cfg
run_interactive_gui.py # Główny punkt wejścia
start_gui.bat # Launcher dla Windows
requirements.txt # Zależności Pythona
LICENSE # Licencja MIT
README.md # Ten plik
- Python 3.13+
- 4 GB RAM
- Windows 10/11, macOS 10.14+, lub Linux (Ubuntu 20.04+)
- Python 3.13.1
- 8 GB RAM
- Rozdzielczość ekranu 1920x1080 dla optymalnego doświadczenia GUI
ezdxf>=1.3.0- Parsowanie plików DXFsvgwrite>=1.4.3- Generowanie plików SVGtkinter- Framework GUI (dołączony do Pythona)
Zainstaluj wszystkie zależności:
pip install -r requirements.txtWkład mile widziany! Proszę postępować według tych wytycznych:
- Zrób fork repozytorium
- Utwórz gałąź funkcji:
git checkout -b feature/nazwa-funkcji - Zatwierdź zmiany:
git commit -m 'feat: dodaj funkcję' - Wypchnij do gałęzi:
git push origin feature/nazwa-funkcji - Otwórz Pull Request
git clone https://github.com/kglebows/DXF2SVG.git
cd DXF2SVG
python -m venv venv
source venv/bin/activate # Na Windows: venv\Scripts\activate
pip install -r requirements.txt- Przestrzegaj wytycznych PEP 8
- Używaj type hints dla sygnatur funkcji
- Dokumentuj złożoną logikę komentarzami inline
- Pisz opisowe komunikaty commit (format conventional commits)
Ten projekt jest licencjonowany na licencji MIT:
MIT License
Copyright (c) 2024-2025 Konrad Głębowski
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
W razie pytań, zgłoszeń błędów lub próśb o funkcje:
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- ezdxf - Doskonała biblioteka do parsowania DXF
- svgwrite - Solidne generowanie SVG
- Społeczność Python Tkinter za najlepsze praktyki GUI
**Stworzone przez Konrada Głębowskiego **