Talvez você já tenha encontrado minhas anotações sobre os primeiros passos da programação CAD usando o exemplo do NanoCAD.
Note-se que para uma pessoa que não sabe programar e conhece CAD no nível de "culman eletrônico", foi uma aventura incrível. No entanto, o NanoCAD ainda é principalmente um produto comercial. Sua versão gratuita não é atualizada há cerca de seis anos e está desatualizada em termos de oportunidades de desenvolvimento.
Mas eu realmente queria, como em uma história maravilhosa:
"Felicidade para todos, em vão, e não deixar ninguém se ofender!" . Portanto, foi decidido seguir o conselho de um camarada de combate
DrZugrik e instalar o FreeCAD por si mesmo.
Então, em busca intensa, estou escrevendo material para você, em apenas um dia aprendi como fazer esse software CAD ser amigo do Anaconda, escrevi um script simples em Python que desenha um pequeno quadrado com texto e o testou para trabalhar no Windows e Linux. O que estou realmente pronto para contar em etapas e demonstrações, para que você também possa fazer isso.
Deseja conhecer um casal charmoso de Python e FreeCAD? Então você é bem-vindo sob gato.

Conteúdo:
Parte I: Introdução.Parte II: Instalação Padrão e Primeira AmostraParte III: Agora faça amizade com o Anaconda no FreeCadParte IV: Escrevendo uma biblioteca simplesParte V: ConclusãoParte I: Introdução
Curiosamente, no Habré, existem muito poucas publicações dedicadas ao FreeCAD, um bom artigo foi publicado por
Eddy_Em “Meet: FreeCAD” , e mais alguns trabalhos nos quais o herói do nosso artigo é mencionado de passagem.
Para começar, apenas duas palavras sobre o programa. Não duplicarei as informações do
site oficial, mas simplesmente descrevo de forma ampla por que voltei minha atenção para este CAD.
Portanto, o FreeCAD é um sistema de design assistido por computador de código aberto, focado principalmente na modelagem paramétrica tridimensional. No momento da redação deste artigo, a versão mais recente do programa é 0.18.3. Não se confunda que o valor do número da versão esteja longe de um. O FreeCAD é longo e ativamente desenvolvido e atualmente é bastante funcional. Além disso, como eu o entendo há muito tempo, ele tem uma certa popularidade entre as pessoas envolvidas na modelagem e impressão 3D, especialmente entre as pessoas ideológicas criadas por si mesmas que estão interessadas em código aberto / hardware aberto e todos os tipos de bricolage.
Mas se de repente você não entender a modelagem 3D, esse não é um motivo para ignorar o FreeCAD. A funcionalidade CAD é dividida em módulos específicos - Workbench, entre os quais há o desenho 2D usual, incluindo um ambiente de trabalho para decorar quadros de folha e até um ambiente de trabalho para implementar o conceito BIM.
Na verdade, o programa possui uma "carruagem e um carrinho pequeno", mas hoje tentaremos fazer algo completamente primitivo, apenas para "aguçar o apetite".
Parte II: Instalação Padrão e Primeira Amostra
O FreeCAD está disponível para todos os três sistemas operacionais comuns, mas como eu sou privado da técnica "Apple", consideraremos apenas as opções para Windows 10 e Linux Mint.
A maneira mais fácil de iniciar a programação do FreeCAD é baixar o pacote de distribuição e instalá-lo de maneira padrão para o sistema operacional. Nesse caso, teremos à disposição um intérprete Python pré-instalado com o programa (no momento da redação do artigo Python versão 3.6.6).
Para iniciar a programação para o FreeCAD, talvez até mais fácil do que para o NanoCAD ou AutoCAD, basta abrir a guia Exibir -> Painel -> e ativar o console Python. Na verdade, é tudo, você pode programar com segurança.
Mas primeiro, vamos tentar desenhar algo usando meios regulares. Por exemplo, um círculo.
Preste atenção na saída do console
Gui.activateWorkbench("DraftWorkbench") >>> App.newDocument("") >>> App.setActiveDocument("____________________") >>> App.ActiveDocument=App.getDocument("____________________") >>> Gui.ActiveDocument=Gui.getDocument("____________________") >>> Gui.activeDocument().activeView().viewDefaultOrientation() >>> import Draft >>> pl=FreeCAD.Placement() >>> pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) >>> pl.Base=FreeCAD.Vector(-1.0610677003860474,-0.31207874417305,0.0) >>> circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) >>> Draft.autogroup(circle

O FreeCAD não esconde nada sob o capô, todas as operações principais para desenhar um círculo são exibidas no console. Agora você pode copiar o código e desenhar um segundo círculo, um pouco para a direita.
Vamos tentar inserir uma variável e desenhar outro círculo, para o qual copiamos a saída do console e a inserimos linha por linha, fazendo uma pequena modificação.
x=-1.0610677003860474 pl=FreeCAD.Placement() pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) pl.Base=FreeCAD.Vector(x*5,-0.31207874417305,0.0) circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None)
Como você pode ver agora, existem dois círculos e, conforme planejado, um à direita da coordenada x do ponto base do primeiro círculo multiplicado por 5.

Parte III: Agora faça amizade com o Anaconda no FreeCad
Mas os recursos do CAD não se limitam ao uso padrão como um "culman". Usando a API, o FreeCAD pode ser incorporado ao seu próprio programa e usado com ou sem uma interface gráfica, mas veremos esse problema em outro momento.
Enquanto isso, imagine essa situação, digamos que você goste de aprendizado de máquina e análise de dados em Python e já tenha instalado o
kit de distribuição Anaconda , provavelmente ficará muito feliz em saber que, graças ao pessoal do conda-forge, você pode combinar todos os recursos desse kit de distribuição e do FreeCAD.
O
link fornece orientações sobre como instalá-lo se você usar o mini-conda, e nós o instalaremos no "Anaconda" de pleno direito por meio de seu navegador.
Portanto, abra o Anaconda-Navigator, vá para a guia
Ambientes e crie um novo ambiente clicando no botão
Criar . O nome do ambiente, você pode dar qualquer, eu chamei - "freecad". Selecionamos a versão necessária do Python e criamos um novo ambiente.

Mas isso não basta, você precisa adicionar o canal conda-forge, basta digitar o campo que aparece depois de clicar no botão
Adicionar "conda-forge" e deixar o sistema atualizar a lista de pacotes.

Quase pronto agora resta instalar o próprio FreeCAD
Clique em LMB no nome do pacote e selecione a versão que queremos instalar, como na figura abaixo
(eu já a instalei)
Após uma espera tediosa, você terá o kit de distribuição do FreeCad totalmente instalado, a versão desejada precisará ser lançada apenas.
No caso mais simples, sem os parâmetros de inicialização, você precisa iniciar o console conda com o nosso ambiente e iniciar o CAD com o comando FreeCAD com o mesmo nome.

Uma janela vazia do FreeCAD será aberta, na qual selecionamos uma bancada para o desenho bidimensional.

Como você pode ver, agora a versão do Python não é exatamente o que era com uma instalação padrão.

Vamos criar um novo documento (Control + N), que será útil para testar nossa mini biblioteca.
Parte IV: Escrevendo uma biblioteca simples
Nossa biblioteca será primitiva. Em essência, criaremos um comando que desenhará um retângulo no qual o texto arbitrário especificado pelo usuário será inserido.
Crie um arquivo
(chamei de "drawhabr.py") e escreva o seguinte código:
Ou você pode simplesmente copiar o arquivo do
GitHubO código é muito simples, mas acho que vale a pena explicar alguns pontos.
import FreeCAD, FreeCADGui, Part, Draft
Importamos as bibliotecas necessárias e, em seguida, criamos a classe.
Como ainda não aprendi a lidar com a entrada do mouse, inseriremos as coordenadas do objeto e do texto diretamente no console a partir do teclado. Isso é implementado pelos métodos padrão do Python. Então, no construtor da classe, chamamos nossa função (método), que desenhará tudo.
Dos recursos do FreeCAD no construtor da classe, dois comandos podem ser distinguidos:
self.view = FreeCADGui.ActiveDocument.ActiveView FreeCAD.Console.PrintMessage("\r\n Your object was successfully created")
O primeiro seleciona o espaço do espaço de trabalho ativo para nós e o segundo, após a instalação do objeto, escreve uma mensagem na parte inferior da janela do programa (em uma barra cinza, para não ser confundida com o console do Python)
O código do método também é intuitivo, mas vou explicar a confiabilidade.
def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!"
Necessário caso o usuário insira uma sequência vazia. Sem isso, a palavra Rótulo será inserida no texto e o retângulo terá um comprimento incorreto.
point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0))
Defina as coordenadas do ponto base do dia do nosso quadro ao redor do texto.
Deixe-me lembrá-lo de que os dados são retirados da entrada do console.
Observe que estamos trabalhando com uma coordenada tridimensional do formato FreeCAD.Vector (x, y, z), mas neste exemplo podemos negligenciar a coordenada Z. Outros parâmetros relacionados à rotação do quadro não estão tocando.
text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0))
crie o texto usando o comando Draft.makeText, passando o texto que você inseriu no console.
Tome coordenadas com um pequeno deslocamento do ponto base do quadro.
De uma maneira boa, foi necessário aprender a processar o quadro (borda) do texto usando os parâmetros da API e, em seguida, calcular a largura e a altura do quadro de enquadramento com base nele. Mas como eu me familiarizei com o programa, resolvi o problema pelo método dos camponeses. Fixaremos a altura da fonte, atribuiremos o estilo da fonte monoespaçada (Courier) e, dependendo disso, determinaremos o comprimento e a largura do quadro que desenhamos ao redor do texto.
text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier"
Resta apenas substituir nossos parâmetros na função de desenho do retângulo
rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None)
isso, de fato, é tudo.
Resta apenas conectar nossa biblioteca. Para fazer isso, você pode simplesmente copiá-lo para a pasta na qual estão localizadas as demais bibliotecas Python para o ambiente selecionado.
Por exemplo, no Windows 10, o caminho pode ser o seguinte
(significativo no local da instalação do Anaconda):C: \ Usuários \ NomeDoUsuário \ Anaconda3 \ envs \ freecad \ Lib
Para Linux, o caminho seria algo como isto:
/home/ourUserName/anaconda3/envs/freecad/lib/python3.7
Tudo o que resta para carregar nossa biblioteca.
Para fazer isso, primeiro digite o nome do nosso módulo no console (sem extensão de arquivo)
import drawhabr
E então chame o construtor da classe
drawhabr.stamp()
É tudo o que há para liderar, funcionar com parâmetros e apreciar o resultado.

Apenas no caso, aqui está uma captura de tela confirmando que tudo funciona no Linux também.

Parte V: Conclusão
Hoje, demos apenas um pequeno passo no caminho para entender a API do FreeCAD.
Apesar de, na minha opinião, para desenho bidimensional e desenvolvimento de projetos, o FreeCAD não ser tão familiar quanto o AutoCAD (NanoCAD) ou outros sistemas CAD comuns, mas é muito mais fácil programá-lo.
Mesmo apesar da falta de documentação e da necessidade de atualizar alguns artigos com exemplos no Wiki FreeCAD, ainda assim descobrir sua API e executar o primeiro programa acabou sendo uma pessoa pouco treinada e com conhecimento mínimo em escrever código Python.
E, como os desenvolvedores não são gananciosos e, se necessário, permitem o desenvolvimento comercial usando o FreeCAD sob a licença LGPL e em combinação com todo o poder das bibliotecas Python (por exemplo, do mesmo kit de distribuição Anaconda), o desenvolvimento de programas usando o FreeCAD parece interessante tarefa.
Se eu entender que você está interessado neste tópico, tentarei fazer um mini-ciclo de anotações por analogia com o Nanocad
Série de programação NanoCAD