Kod źródłowy FreeCAD

From FreeCAD Documentation
Revision as of 14:55, 29 October 2023 by Kaktus (talk | contribs) (Created page with "* Obiekty dokumentu FreeCAD, które są wszystkimi obiektami zawartymi w dokumencie FreeCAD, są tym, co pojawia się w widoku drzewa w GUI i w FreeCAD.ActiveDocument.Objects() w Pythonie. Mogą one mieć lub nie mieć żadnych danych geometrycznych i mogą lub nie mogą pokazywać niczego w widoku 3D. Są one zawsze podzielone na części APP i GUI. Część Gui nie jest ładowana podczas działania w trybie konsoli. Standardowe obiekty geometryczne, takie jak te znajdu...")

Kod źródłowy FreeCAD jest zarządzany za pomocą git i jest publiczny, otwarty i dostępny na licencji LGPL. Może być kopiowany, pobierany, czytany, analizowany, redystrybuowany i modyfikowany przez każdego. Jeśli planujesz wprowadzić modyfikacje, które chcesz zobaczyć w oficjalnym kodzie, pamiętaj, że Twoje zmiany będą musiały zostać zatwierdzone przez programistów FreeCAD, więc dobrze jest najpierw omówić swoje zamiary i pomysły na forum, aby uniknąć ryzyka odrzucenia zmian z jakiegoś powodu, którego nie przewidziałeś.

Poniżej znajduje się kilka wskazówek i przydatnych informacji, które naprowadzą Cię na właściwe tory, jeśli jesteś zainteresowany eksploracją kodu FreeCAD.

  • Kod FreeCAD jest zaprogramowany głównie w C++, ale w dużej mierze opiera się na Pythonie. Bardzo duża część jego funkcjonalności zapewnia powiązane wiązania Pythona, a częścią podstawowej filozofii rozwoju FreeCAD jest zawsze oferowanie dostępu Pythona do każdej nowej funkcji zaimplementowanej w C++. Aby to osiągnąć, CPython (narzędzia interfejsu C dostarczane przez samego Pythona) i specjalnie PyCXX są intensywnie wykorzystywane w całym FreeCAD. Wiele szablonów i niestandardowych narzędzi jest również dostarczanych w samym kodzie FreeCAD, aby bardzo ułatwić tworzenie powiązanych wiązań Pythona. Niektóre bardziej wysokopoziomowe części kodu FreeCAD są w pełni zakodowane w Pythonie.
  • Kod źródłowy FreeCAD jest w pełni wieloplatformowy i dołożono wszelkich starań, aby umożliwić korzystanie z aplikacji na jak największej liczbie platform i konfiguracji oraz nie stawiać obecnych użytkowników w trudnych sytuacjach. Dlatego, o ile to możliwe, unika się nowych wersji potrzebnych komponentów, które nie są powszechnie i łatwo dostępne na wszystkich platformach, a kompatybilność wsteczna (możliwość otwarcia pliku wyprodukowanego w starej wersji FreeCAD na nowszej wersji) jest ważnym priorytetem.
  • Prawie cała funkcjonalność FreeCAD jest podzielona na dwie różne części, nazwane APP i GUI. Ta separacja jest odzwierciedlona wszędzie w strukturze plików kodu źródłowego. Aplikacja zawiera wszystkie funkcje, które muszą działać w trybie czysto konsolowym (bez GUI). Ponieważ FreeCAD może być kompilowany i uruchamiany bez graficznego interfejsu użytkownika, kod w aplikacji jest niezależny od jakiejkolwiek biblioteki związanej z GUI. GUI zawiera cały kod potrzebny do działania w trybie GUI i jest zbudowany wokół funkcjonalności aplikacji.
  • Większość funkcjonalności FreeCAD jest zaimplementowana w modułach. FreeCAD bez modułu jest prostym oknem kontenera, które może po prostu otworzyć i zapisać plik. Wszystkie narzędzia geometrii i środowiska pracy są zaimplementowane w modułach. Moduły mogą być napisane w C++, Pythonie lub łącząc to, co najlepsze z tych dwóch światów. Mogą to być moduły hybrydowe C++/Python, w których solidna podstawowa funkcjonalność jest zaprogramowana w C++, a narzędzia użytkownika końcowego są napisane w Pythonie, co ułatwia ich rozszerzanie i dostosowywanie przez użytkowników FreeCAD. Każdy moduł zazwyczaj definiuje i tworzy środowisko pracy w interfejsie FreeCAD, gdy jest używany w trybie GUI, zwykle o tej samej nazwie, ale nie jest obowiązkowe, aby moduły zawierały środowisko pracy.
  • Moduły FreeCAD często zależą od innych modułów. Większość modułów wykorzystujących geometrię bryłową zależy od modułu Część, który jest najbardziej podstawowym modułem FreeCAD i implementuje większość interfejsów z OpenCascade. Chociaż inne moduły mogą bezpośrednio korzystać z funkcjonalności OpenCascade, często polegają na funkcjach wyższego poziomu dostarczanych przez Część.
  • Moduły są zawsze inicjowane z Pythona. Nawet jeśli są napisane w całości w C++, zawsze zawierają minimalną strukturę Pythona/CPythona.
  • FreeCAD jest gorliwym zwolennikiem innych bibliotek open-source. Oprócz Pythona i Qt, używanych przez rdzeń i prawie wszystkie moduły, dwie ciężkie biblioteki używane w większości modułów to OpenCascade Technology (OCCT) i Coin3D. OpenCascade służy do tworzenia i zarządzania całą geometrią bryłową FreeCAD, podczas gdy coin3D służy do zarządzania widokiem 3D. OpenCascade jest używany głównie w świecie aplikacji, a coin3D wyłącznie w świecie GUI. Podstawowe zrozumienie OpenCascade jest niezbędne do wykonywania wszelkich prac związanych z geometrią za pomocą FreeCAD. Bardziej specyficzne moduły wykorzystują bardziej specyficzne biblioteki, a ponieważ zwykle nie ma żadnych ograniczeń w tym zakresie, poza tym, że biblioteki te muszą być łatwo dostępne na wszystkich platformach, lista zależności pełnej instalacji FreeCAD ze wszystkimi jego modułami może być dość duża.
  • Obiekty dokumentu FreeCAD, które są wszystkimi obiektami zawartymi w dokumencie FreeCAD, są tym, co pojawia się w widoku drzewa w GUI i w FreeCAD.ActiveDocument.Objects() w Pythonie. Mogą one mieć lub nie mieć żadnych danych geometrycznych i mogą lub nie mogą pokazywać niczego w widoku 3D. Są one zawsze podzielone na części APP i GUI. Część Gui nie jest ładowana podczas działania w trybie konsoli. Standardowe obiekty geometryczne, takie jak te znajdujące się w Part lub PartDesign, mają swoją geometrię opartą na OpenCascade zdefiniowaną w ich odpowiedniku App, podczas gdy odpowiednik GUI (zwykle nazywany również "Dostawcą widoku") jest odpowiedzialny za tworzenie reprezentacji coin3D tej geometrii, która zostanie wstawiona do głównego wykresu sceny coin3D widoku 3D.
  • The basic directory structure of the source code is organized like this:
    • App: contains the FreeCAD console-mode application, defines basic structures and base classes for document objects, that are used by modules to build their own.
    • Base: contains core functionality commonly used everywhere in FreeCAD: 3D vectors, units, matrices, placements, etc.
    • Gui: contains the FreeCAD GUI-mode application, defines the 3D view, contains many tools and functions to be used by workbenches to interact with the interface and with the 3D view, defines base classes for view providers.
    • Doc: contains mainly an all-in-one Qt help file generated from this wiki.
    • Mod: contains all the modules, themselves further separated into App and Gui (except for python modules, which don't always follow that rule so clearly).

Related

  • Source Code Management
  • The Power users hub contains a lot of documentation about modules, OpenCascade and Coin3D, mainly for the Python programmer. However, as the functionality is similar, these pages will be of interest to the C++ programmer as well.
  • FCStd - the FreeCAD file format