Disclamer : Eu nunca havia trabalhado com aplicativos CAD / CAM na minha vida e, de repente, precisei. Os princÃpios do trabalho do FreeCAD me admiravam tanto que requer um post urgente no Habr para contar aos outros.
O que está escrito nesta postagem provavelmente será trivial e chato para a maioria dos usuários ativos de CAD, e esta publicação é destinada principalmente a usuários que não são de CAD e lhes conta sobre o maravilhoso novo mundo da computação gráfica.
Entrada
Eu tive uma tarefa simples - fazer um modelo 3D do meu apartamento. Não apenas "paredes em tamanho", mas todas as vigas, saliências e curvas. Eu tentei um, dois, três programas ... Eu me desesperei (começou com o SweetHome3D e o liquidificador e o inkscape terminaram). Eles estavam todos muito desconfortáveis. Entre os programas que experimentei estava o FreeCAD, que perdi por causa do "nifig not do" e "não funciona corretamente". Depois que me desesperei, fui no segundo turno. Dessa vez, lendo um pouco mais de documentação ... E o FreeCAD não apenas "decolou", mas também abriu para mim um novo e delicioso mundo de desenho vetorial preciso, baseado no Constrains.
Problemas de modelagem
Primeiro, falarei sobre a dor que sofri em vários editores.
Vamos começar com o SweetHome3D. Uma interface condicionalmente compreensÃvel que permite descrever a sala como um "piso" (onde a forma e as saliências são especificadas), ao redor da qual uma "parede" é feita. O SweetHome3D me deu dois problemas: a busca por pixels (o tamanho é alterado por mudanças microscópicas do mouse ou na caixa de diálogo, mas não há como "pressionar" a parede contra o chão com precisão - apenas a busca por pixels. O segundo problema - o modelo SweetHome3D não implica a existência de vigas, arcos e outros elementos da parede , que não vão de cima para baixo. Além disso, o SH3D não sabe inclinar paredes e pisos (eu não gostaria de ter esse problema, mas antes que o IRL possa ser corrigido, preciso documentá-lo). 90% do que eu precisava entregue Eu tenho uma dor incrÃvel para 5%, e tornando impossÃvel para os restantes 5%.
O Blender teoricamente permite que você faça tudo, mas apenas teoricamente. Na prática, minhas habilidades não eram suficientes ou o processo em si é muito lento, mas depois de desenhar três ângulos e meio, desisti. Muito lento e muito barulho com iluminação e outras coisas sem importância. Além disso (até onde eu sei), é improvável que o Blender seja capaz de mostrar projeções 2D normais com dimensões.
O Inkscape era bom, exceto por um problema - em uma linha de várias seções (F2) é impossÃvel definir as dimensões de cada seção. Poderia - eu teria pintado tudo no Inkscape.
... Mas minha postagem não é sobre a absoluta superioridade do FreeCAD sobre o Blender (não consigo comparar os dois como iniciante), mas sobre um novo estilo de desenho. Primeiro, sobre os problemas do estilo antigo (ou seja, um desenho vetorial "regular").
Problema de Caça de Pixel
Antes de passar para as fotos e explicar a idéia de restrições, quero me concentrar em alguns problemas que foram afetados por desenhos vetoriais:
Curvas quase unificadas. Se duas curvas estiverem quase se tocando, você poderá pensar que elas estão se tocando. Em algum momento (ao imprimir ou com outras manipulações), a imagem desmoronará.

Linhas quase paralelas / perpendiculares. Eles são paralelos, mas não até o fim.

preste atenção ao contorno, mostra que o retângulo de descrição para duas linhas é maior que a própria linha, ou seja, linha em ângulo agudo.
a derivada da anterior são linhas unidas em um ângulo de 0,001 °.
imprecisões no tamanho e espessura das linhas. A linha tem sua própria espessura e, ao editar (girar, redimensionar etc.), a espessura começa a flutuar. Além disso, na maioria dos reatores vetoriais, é difÃcil desenhar um quadrado com uma área de 100 e uma linha com uma espessura de 0,5 (porque a linha vai 50% para a área da figura e não temos 10x10 no interior, mas 9,75x9,75).
Manter o alinhamento e a simetria é uma tarefa que requer atenção constante.
Os editores têm muitas ferramentas integradas para lidar com esses problemas, mas essas ferramentas têm uma dificuldade - elas devem ser usadas de maneira significativa onde o problema surgiu. E você mesmo deve monitorar a ocorrência de problemas.
Restrições
Foi uma longa introdução. Agora estou falando de restrições, ou, em russo, mantendo conexões (tradução do termo de um artigo sobre graus de liberdade na mecânica) .
Vamos tentar desenhar um quadrado com o lado 10, com base em suas propriedades fundamentais.
O quadrado 4 tem lados retos.

Quase aconteceu. O Solver nos diz que precisamos definir 15 tÃtulos de retenção adicionais para que nossa cifra seja inequÃvoca (possui 0 graus de liberdade).
- Os lados opostos do quadrado são paralelos *

O Solver diz que é melhor. Começou a falhar 13. Preste atenção à s marcas vermelhas - isso é uma indicação de restrições. No inÃcio, recebemos acidentalmente duas restrições - duas linhas horizontais.
Melhorou, embora ainda pareça um pouco quadrado. O que está errado? Ah, sim, um quadrado é um polÃgono e, no polÃgono, os lados convergem em cantos para um ponto. Adicione essas restrições.

O resultado foi um pouco inesperado, embora o solucionador esteja cada vez mais satisfeito. A figura indicada é um quadrilátero comum em que os lados são paralelos aos pares. Um pouco fora do curso da escola, mas compreensÃvel.
Adicionar volume ... aviões para esta figura. As faces adjacentes são perpendiculares.

Já parece verdade (embora eu tenha puxado um pouco o desenho para cima, porque os lados de tamanho zero se encaixam perfeitamente no solucionador como perpendicular à linha em que estão (na forma de um ponto)). solucionador jura por excesso de restrições. Concordamos com ele e removemos uma perpendicularidade (temos a exigência de paralelismo em pares, a perpendicularidade para um par segue automaticamente a perpendicularidade do primeiro par). Depois que removemos o excesso, o solucionador reclama cerca de 4 liberdades.
Proibir qualquer outra coisa, pois há muita liberdade.
Por exemplo, digamos que todos os lados devem ter o mesmo tamanho. É o suficiente para fazer isso para quaisquer dois lados adjacentes, e segue-se que todos os lados são iguais (geometria da escola!).
Depois disso, temos três liberdades. Mais três liberdades? Mas o quadrado é o mesmo ... Sim, este é o quadrado, mas não sabemos seu tamanho (0 também é o tamanho, a propósito) e sua posição no espaço.
Vamos definir: indicaremos que um dos cantos do quadrado está no ponto "0, 0", além de definirmos o tamanho de um lado para 10 mm.
Tudo, a praça está completamente pronta, não tem liberdades, o que significa que não há erros ocultos.

Este exemplo foi um pouco grotesco, mas, como espero, expressivo. Fiquei particularmente impressionado que o solucionador não apenas verifica a ambiguidade, mas também alerta se a figura contém mais restrições do que o necessário.
Letra
Para mim, esse método de descrever uma imagem é completamente novo e inesperado. De certa forma, ele se parece com o que as linguagens de programação digitadas com o código da máquina fazem - elas adicionam restrições que permitem definir restrições sobre possÃveis operações de dados de forma matematicamente precisa. Nesse momento, quando existem muitas restrições, obtemos uma solução inequÃvoca, que definitivamente existe e é definitivamente única. E exatamente o caminho certo, se a entrada estiver correta. E nenhum "bate acidentalmente no mouse" ou "a mão tremeu".