The FreeCAD source code/pl

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 is an avid user of other open-source libraries. Besides Python and Qt, used by the core and almost all of the modules, the two heavyweight libraries used throughout most modules are OpenCascade Technology (OCCT) and Coin3D. OpenCascade is used to create and manage all the solid geometry of FreeCAD, while coin3D is used to manage the 3D view. OpenCascade is used mainly in the App world, and coin3D exclusively in the Gui world. A basic understanding of OpenCascade is fundamental to do any geometry-related work with FreeCAD. More specific modules make use of more specific libraries, and since there are usually no restrictions on that point apart from these libraries to be easily available on all platforms, the list of dependencies of a full FreeCAD installation with all its modules can be quite large.


 * FreeCAD's document objects, which are all the objects contained in a FreeCAD document, are what appear in the Tree View in the GUI and in FreeCAD.ActiveDocument.Objects in Python. They may or may not have any geometrical data, and may or may not show anything in the 3D view. They are always separated in App and Gui parts. The Gui part is not loaded when running in console mode. Standard geometrical objects, such as those found in Part or PartDesign, have their OpenCascade-based geometry defined in their App counterpart, while the Gui counterpart (also usually called "View Provider") is responsible for creating a coin3D representation of that geometry, which will be inserted into the main coin3D scene graph of the 3D view.


 * 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