O código-fonte do FreeCAD

From FreeCAD Documentation
Revision as of 15:57, 13 March 2024 by Dikluwe (talk | contribs) (Created page with "Os módulos do FreeCAD frequentemente '''dependem de outros módulos'''. A maioria dos módulos que utilizam geometria sólida dependem do módulo '''Part''', que é o mais fundamental do FreeCAD e implementa a maior parte da interface com o OpenCascade. Embora outros módulos possam usar diretamente a funcionalidade do OpenCascade, geralmente eles contam com funções de nível mais alto fornecidas pelo Part.")

O FreeCAD source code é gerenciado com git e é público, aberto e disponível sob a licença LGPL. Pode ser copiado, baixado, lido, analisado, redistribuído e modificado por qualquer pessoa. Se você planeja fazer modificações que deseja ver incluídas no próprio código oficial, lembre-se de que suas alterações precisarão ser aprovadas pelos desenvolvedores do FreeCAD, por isso é aconselhável discutir primeiro suas intenções em [http: // forum.freecadweb.org forum] para evitar o risco de ter suas alterações rejeitadas por algum motivo que você não previu.

Abaixo estão algumas dicas e informações úteis para colocar você nos trilhos, caso esteja interessado em explorar o código do FreeCAD.

  • O código do FreeCAD é principalmente programado em C++, mas depende significativamente do Python. Uma grande parte de sua funcionalidade é fornecida através de ligações Python associadas, e faz parte da filosofia central do desenvolvimento do FreeCAD sempre oferecer acesso via Python a qualquer novo recurso implementado em C++. Para alcançar isso, o CPython (as ferramentas de interface C fornecidas pelo próprio Python) e especialmente o PyCXX são amplamente utilizados em todo o FreeCAD. Além disso, muitos modelos e ferramentas personalizadas são fornecidos no próprio código do FreeCAD para facilitar a criação de ligações Python associadas. Algumas partes mais de alto nível do código do FreeCAD são totalmente codificadas em Python.

O código fonte do FreeCAD é completamente multiplataforma, e é dedicado um grande cuidado para garantir que a aplicação possa ser utilizada em tantas plataformas e configurações quanto possível, sem causar dificuldades aos usuários existentes. Portanto, sempre que possível, são evitadas novas versões de componentes necessários até que estejam amplamente disponíveis em todas as plataformas, e a compatibilidade com versões anteriores (a capacidade de abrir um arquivo criado com uma versão antiga do FreeCAD em uma versão mais recente) é uma prioridade importante.

  • Quase todas as funcionalidades do FreeCAD são divididas em duas partes distintas, denominadas App e Gui. Essa divisão é refletida em toda a estrutura de arquivos do código-fonte. O módulo App contém todas as funcionalidades que precisam ser executadas no modo de console puro (sem GUI). Como o FreeCAD pode ser compilado e executado sem sua Interface Gráfica do Usuário, o código no módulo App é independente de qualquer biblioteca relacionada à GUI. Já o módulo Gui contém todo o código necessário para ser executado no modo GUI e é construído em torno da funcionalidade do módulo App.

A maioria das funcionalidades do FreeCAD é implementada em Módulos. O FreeCAD sem seus módulos é apenas uma janela contêiner simples que pode abrir e salvar arquivos. Todas as ferramentas de geometria e bancadas de trabalho são implementadas nos Módulos. Esses módulos podem ser escritos em C++, em Python ou combinando o melhor dos dois mundos. Eles podem ser módulos híbridos C++/Python, nos quais a funcionalidade central sólida é programada em C++ e as ferramentas para o usuário final são escritas em Python, tornando-as mais fáceis de estender e adaptar pelos usuários do FreeCAD. Cada módulo geralmente define e cria uma Bancada de Trabalho na interface do FreeCAD, quando usado no modo GUI, geralmente com o mesmo nome, mas não é obrigatório que os módulos contenham uma bancada de trabalho.

Os módulos do FreeCAD frequentemente dependem de outros módulos. A maioria dos módulos que utilizam geometria sólida dependem do módulo Part, que é o mais fundamental do FreeCAD e implementa a maior parte da interface com o OpenCascade. Embora outros módulos possam usar diretamente a funcionalidade do OpenCascade, geralmente eles contam com funções de nível mais alto fornecidas pelo Part.

Os módulos do FreeCAD frequentemente dependem de outros módulos. A maioria dos módulos que utilizam geometria sólida dependem do módulo Part, que é o mais fundamental do FreeCAD e implementa a maior parte da interface com o OpenCascade. Embora outros módulos possam usar diretamente a funcionalidade do OpenCascade, geralmente eles contam com funções de nível mais alto fornecidas pelo Part.

  • 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