Disclamer : Je n'avais jamais travaillé avec des applications CAD / CAM auparavant dans ma vie, et, tout à coup, j'ai dû le faire. Les principes de travail de FreeCAD m'ont tellement admiré qu'il faut un poste urgent sur Habr pour en parler aux autres.
Ce qui est écrit dans cet article est susceptible d'être trivial et ennuyeux pour la plupart des utilisateurs CAO actifs, et cet article est principalement destiné aux utilisateurs non CAO pour leur parler du merveilleux nouveau monde de l'infographie.
Entrée
J'avais une tâche simple - faire un modèle 3D de mon appartement. Pas seulement des «murs de taille», mais toutes les poutres, les saillies et les virages. J'ai essayé un, deux, trois programmes ... J'ai désespéré (ça a commencé avec SweetHome3D, et blender et inkscape ont pris fin). Ils étaient tous très mal à l'aise. Parmi les programmes que j'ai essayés, il y avait FreeCAD, que j'ai raté à cause du "nifig not do" et "ne fonctionne pas correctement". Après avoir désespéré, je suis allé au deuxième tour. Cette fois, en lisant un peu plus de documentation ... Et FreeCAD a non seulement "décollé", mais aussi ouvert pour moi un nouveau monde délicieux de dessin vectoriel précis basé sur les contraintes.
Problèmes de modélisation
Tout d'abord, je vais parler de la douleur dont j'ai souffert dans divers éditeurs.
Commençons par SweetHome3D. Une interface conditionnellement compréhensible qui vous permet de décrire la pièce comme un "sol" (où la forme et les saillies sont spécifiées) autour desquelles un "mur" est fait. SweetHome3D m'a posé deux problèmes: la chasse aux pixels (la taille est modifiée soit par des déplacements microscopiques de la souris, soit dans la boîte de dialogue, mais il n'y a aucun moyen de «presser» le mur contre le sol avec précision - uniquement la chasse aux pixels. Le deuxième problème - le modèle SweetHome3D n'implique pas l'existence de poutres, arcs et autres éléments de mur , qui ne vont pas de haut en bas. En outre, SH3D ne sait pas comment incliner les murs et les sols (je ne voudrais pas avoir un tel problème, mais avant que l'IRL puisse être corrigé, je dois le documenter). Autrement dit, les couvertures SH3D 90% de ce dont j'avais besoin livré J'ai une douleur incroyable à 5%, et ce qui rend impossible pour les 5% restants.
Blender vous permet théoriquement de tout faire, mais seulement théoriquement. En pratique, soit mes compétences n'étaient pas suffisantes, soit le processus lui-même est très lent, mais après avoir dessiné trois angles et demi, j'ai abandonné. Trop lent et trop de bruit avec l'éclairage et d'autres choses sans importance. De plus (pour autant que je sache), Blender ne sera probablement pas en mesure de montrer des projections 2D normales avec des dimensions.
Inkscape était bon sauf pour un problème - dans une ligne à plusieurs sections (F2), il est impossible de définir les dimensions de chaque section. Pourrait - j'aurais tout peint dans Inkscape.
... Mais mon article n'est pas sur la supériorité absolue de FreeCAD sur Blender (je ne peux pas vraiment les comparer tous les deux en tant que débutant), mais sur un nouveau style de dessin. Tout d'abord, sur les problèmes de l'ancien style (c'est-à-dire un dessin vectoriel "régulier").
Problème de chasse aux pixels
Avant de passer aux images et d'expliquer l'idée des contraintes, je veux me concentrer sur quelques problèmes qui ont été en proie à des dessins vectoriels:
Courbes presque unifiées. Si deux courbes se touchent presque, alors vous pourriez penser qu'elles se touchent. À un moment donné (lors de l'impression ou lors de manipulations supplémentaires), l'image se désagrège.

Lignes presque parallèles / perpendiculaires. Ils sont parallèles, mais pas jusqu'au bout.

faites attention au contour, cela montre que le rectangle de description pour deux lignes est plus grand que la ligne elle-même, c'est-à-dire ligne à un angle aigu.
la dérivée de la précédente est des lignes joignant à un angle de 0,001 °.
imprécisions dans la taille et l'épaisseur des lignes. La ligne a sa propre épaisseur et lors de l'édition (tours, redimensionnements, etc.), l'épaisseur commence à flotter. De plus, dans la plupart des réacteurs vectoriels, il est difficile de dessiner un carré d'une zone de 100 et une ligne d'une épaisseur de 0,5 (car la ligne va de 50% à la zone de la figure, et nous n'avons pas 10x10 à l'intérieur, mais 9,75x9,75).
Le maintien de l'alignement et de la symétrie est une tâche qui nécessite une attention constante.
Les éditeurs ont de nombreux outils intégrés pour faire face à de tels problèmes, mais ces outils ont une difficulté - ils doivent être utilisés de manière significative là où le problème est survenu. Et vous devez surveiller vous-même l'apparition des problèmes.
Contraintes
Ce fut une longue introduction. Je parle maintenant de contraintes, ou, en russe, de relations (traduction du terme d'un article sur les degrés de liberté en mécanique .
Essayons de dessiner un carré avec le côté 10, en fonction de ses propriétés fondamentales.
Le carré 4 a des côtés droits.

Presque arrivé. Le solveur nous dit que nous devons définir 15 obligations de détention supplémentaires afin que notre chiffre soit sans ambiguïté (il a 0 degré de liberté).
- Les côtés opposés du carré sont parallèles *

Le solveur dit que c'est mieux. Il a commencé à être manqué 13. Faites attention aux marques rouges - c'est une indication de contraintes. Au tout début, nous avons accidentellement obtenu deux restrictions - deux lignes horizontales.
Il s'est amélioré, même s'il semble toujours un peu carré. Qu'est-ce qui ne va pas? Ah, oui, un carré est un polygone, et au polygone les côtés convergent en coins vers un point. Ajoutez ces restrictions.

Cela s'est avéré un peu inattendu, bien que le solveur soit de plus en plus content. La figure indiquée est un quadrilatère ordinaire dans lequel les côtés sont parallèles deux à deux. Un peu en dehors du cursus scolaire, mais compréhensible.
Ajouter volume ... plans à ce chiffre. Les faces adjacentes sont perpendiculaires.

Déjà cela semble être vrai (même si j'ai tiré le dessin un peu vers le haut, car les côtés de taille nulle correspondent tout à fait au solveur comme perpendiculaires à la ligne sur laquelle ils se trouvent (sous la forme d'un point)). le solveur ne jure qu'en cas de restrictions excessives. Nous sommes d'accord avec lui et supprimons une perpendicularité (nous avons l'exigence d'un parallélisme par paire, la perpendicularité pour une paire découle automatiquement de la perpendicularité de la première paire). Après avoir enlevé l'excédent, le solveur se plaint d'environ 4 libertés.
N'interdisez rien d'autre, car il y a trop de liberté.
Par exemple, disons que tous les côtés doivent être de la même taille. Il suffit de le faire pour deux côtés adjacents, et il s'ensuit que tous les côtés sont égaux (géométrie scolaire!).
Après cela, nous obtenons trois libertés. Trois libertés de plus? Mais le carré est le même ... Oui, c'est le carré, mais on ne connaît pas sa taille (0 est aussi la taille d'ailleurs) et sa position dans l'espace.
Fixons-le - nous indiquerons que l'un des coins du carré se situe au point "0, 0", et nous fixons la taille d'un côté à 10 mm.
Tout, le carré est complètement prêt, il n'a aucune liberté, ce qui signifie qu'il n'y a pas d'erreurs cachées.

Cet exemple était un peu grotesque, mais, comme je l'espère, expressif. J'ai été particulièrement impressionné que le solveur vérifie non seulement l'ambiguïté, mais avertit également si le chiffre contient plus de restrictions que nécessaire.
Paroles
Pour moi, cette méthode de description d'une image est complètement nouvelle et inattendue. Dans un sens, il ressemble à ce que font les langages de programmation typés avec le code machine - ils y ajoutent des restrictions qui vous permettent de définir des restrictions sur les opérations de données possibles sous une forme mathématiquement précise. À ce moment-là, quand il y a beaucoup de restrictions, nous obtenons une solution sans ambiguïté, qui est certainement là et qui est vraiment unique. Et exactement la bonne si l'entrée était correcte. Et pas de "toucher accidentellement la souris" ni de "main tremblante".