Kod źródłowy FreeCAD

From FreeCAD Documentation
Revision as of 14:34, 29 October 2023 by Kaktus (talk | contribs) (Created page with "* 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 [https://en.wikipedia.org/wiki/Open_Cascade_Technology OpenCascade Technology] ''(OCCT)'' i [http://www.coin3d.org/ 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....")

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.
  • 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