O código-fonte do FreeCAD

From FreeCAD Documentation
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This page is a translated version of the page The FreeCAD source code and the translation is 100% complete.

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 são sempre inicializados a partir do Python. Mesmo que sejam escritos inteiramente em C++, eles sempre incluem uma estrutura mínima do Python/CPython.
  • O FreeCAD é um ávido usuário de outras bibliotecas de código aberto. Além do Python e do Qt, usados pelo núcleo e por quase todos os módulos, as duas bibliotecas principais utilizadas em grande parte dos módulos são OpenCascade Technology (OCCT) e Coin3D. O OpenCascade é utilizado para criar e gerenciar toda a geometria sólida do FreeCAD, enquanto o Coin3D é usado para gerenciar a visualização 3D. O OpenCascade é predominantemente utilizado no mundo do App, enquanto o Coin3D é exclusivamente usado no mundo do Gui. Uma compreensão básica do OpenCascade é fundamental para realizar qualquer trabalho relacionado à geometria com o FreeCAD. Módulos mais específicos fazem uso de bibliotecas mais específicas, e como geralmente não há restrições neste ponto além de garantir que estas bibliotecas estejam facilmente disponíveis em todas as plataformas, a lista de dependências de uma instalação completa do FreeCAD com todos os seus módulos pode ser bastante extensa.
  • Os objetos de documento do FreeCAD, que são todos os objetos contidos em um documento do FreeCAD, são aqueles que aparecem na Visualização de Árvore na GUI e em FreeCAD.ActiveDocument.Objects() em Python. Eles podem ou não ter dados geométricos e podem ou não mostrar algo na visualização 3D. Eles estão sempre divididos em partes App e Gui. A parte Gui não é carregada durante a execução no modo console. Objetos geométricos padrão, como os encontrados em Part ou PartDesign, têm sua geometria baseada no OpenCascade definida em sua contraparte App, enquanto a contraparte Gui (também geralmente chamada de "Provedor de Visualização") é responsável por criar uma representação em Coin3D dessa geometria, que será inserida no gráfico de cena principal em 3D da visualização.
  • A estrutura básica de diretórios do código-fonte é organizada da seguinte forma:
    • App: contém a aplicação do FreeCAD no modo console, define estruturas básicas e classes base para objetos de documento, que são usados pelos módulos para construir os seus próprios.
    • Base: contém funcionalidades essenciais comumente utilizadas em todo o FreeCAD: vetores 3D, unidades, matrizes, posicionamentos, etc.
    • Gui: contém a aplicação do FreeCAD no modo GUI, define a visualização 3D, inclui muitas ferramentas e funções para serem utilizadas pelas bancadas de trabalho para interagir com a interface e com a visualização 3D, e define classes base para provedores de visualização.
    • Doc: contém principalmente um arquivo de ajuda Qt completo gerado a partir deste wiki.
    • Mod: contém todos os módulos, que são separados em App e Gui (exceto os módulos Python, que nem sempre seguem essa regra tão claramente).

Relacionado

  • Gerenciamento de código-fonte
  • O Hub de usuários avançados contém muita documentação sobre módulos, OpenCascade e Coin3D, principalmente para o programador Python. No entanto, como a funcionalidade é semelhante, estas páginas também serão de interesse para o programador C++.
  • FCStd - o formato de arquivo FreeCAD