Assembly Basic Tutorial/ru

В этом учебнике будут указаны некоторые внутренности текущего процесса сборки, предоставляя теоретические основы используемого дизайна. Цель состоит в том, чтобы понять работу верстака Assembly, его структуру и способы использования.

Этот верстак находится на ранней стадии проектирования, поэтому Вы столкнётесь с неправильное поведением и всеми видами ошибок/сбоев. Пожалуйста, сообщайте о воспроизводимых проблемах на [подфорум assembly] или [систему отслеживания ошибок].

Как это двигать: координатная система
Задачей верстака для сборок является перестановка частей. Поэтому ясно, что нужен способ для получения этой трансформации частей, и эта часть введения будет посвящена этой базовой функциональности.

В FreeCAD каждый объект в трёхмерном пространстве имеет собственную координатную систему. Эта локальная система установлена относительно её родительской системы через трансформацию, её размещение. Размещение объектов определяет, как локальная геометрия должна транслироваться и вращаться для выражения в родительской системе. Следовательно, если Вы перемещаете деталь редактированием её параметра размещения, Вы не изменяете деталь, только трансформацию её координатной системы в родительскую систему. Представьте простой куб в верстаке Part. При создании параметр длинны устанавливает размер в местном направлении x. Когда расположении пусто, это тоже глобальное направление по оси x. Если Вы вращаете деталь, установив ось вращения и угол, длинна всё ещё будет в местном направлении x, тем не менее визуально это больше не изменит x, поскольку внешний вид представлен в глобальной координатной системе. Геометрия куба не изменится, изменится лишь визуализация.



Это упрощает перемещение отдельных частей: просто установить его размещение. Однако в FreeCAD большинство проектов делаются с помощью множества элементов (накладок, карманов и т.д.), как это поддерживать? Перемещать каждый элемент отдельно? Оба пути создают проблемы при моделировании, поэтому используется трети путь: вообще не перемещать их! Вместо этого концепция Тела была введена в общее моделирование, всё, создаваемое в моделировании частей, теперь сгруппировано под ним. Объекты тоже имеют параметр размещения и могут быть трансформированы.

Возвратимся к местной и родительской координатной системам: тело это идеальное воплощение этой концепции! Каждый элемент внутри тела не может быть перемещён напрямую, его размещение всегда пусто. Это значит, что геометрию элементов не нужно вращать или транслировать если мы хотим выразить их в координатной системе тела. Но мы можем перемещать тело внутри глобальной координатной системы установкой их размещения, и тогда глобальное значение геометрии элементов вычисляется применением этой же трансформации. Запомните, мы вращаем координатную системы. Это значит что если мы трансформируем систему тела, всё под ней используется как персональная глобальная система. Элементы не требуется перемещать вообще. Вам нужен весь дизайн в другом месте? Просто установите размещение тела!

Подытожим: координатные системы могут быть сгруппированы, каждый объект использует родительскую систему как персонально глобальную. Если родительская координатная система трансформирована, дочерние будут трансформированы без изменения их локальных систем.

Что может быть собрано: Объектная модель
С объектом типа Body мы имеем всё, что нужно для сборки: мы можем двигать сложные проекты in a comprehensible way, right?. Не совсем! Что случится, если Вы хотите вставить свой проект внутрь сборки несколько раз? Например, если Вы смоделировали винт, Вы не хотите повторять моделирование каждый раз, когда он нужен. Копирование помогает, но что если Вы измените проект винта: менять все копии? Это утомительно. Чтобы преодолеть это, снова предложен новый объект: деталь. Деталь это чисто сборочный объект и может быть сделан лишь внутри этого верстака. Его задача ссылаться на объект типа Body и давать иную координатную систему.

Чтобы понять, почему это введено, нам надо рассмотреть, как всё перемещается в FreeCAD. Давайте расширим чертёж тела выше двумя частями, ссылающимися на это же тело, как показано на следующей картинке.



Локальная система тела одинакова в обоих частях, тем не менее, части имеют их собственное размещение и потому могут быть трансформированы в отношении глобальной системы. Поскольку размещение применяется рекурсивно, те же возможности могут приводить к разным положениям. Представьте, что Вы изменили положение P4 и P5, ваш дизайн появится в двух полностью различных местах внутри глобальной системы без изменений для функций или тела, содержащего их. Затем представим изменение базовой координатной системы P3: вам придётся изменить позицию всех вхождений вашего дизайна тем же образом!

Вы можете удивиться, как ваш проект может быть в двух местах, имея лишь одну геометрию? Это просто: деталь показывает лишь визуальное представление геометрии тела, и у Вас может быть несколько картинок вашей единственной детали. Так же эти визуальные представления трансформируются, если Вы установили размещения. Деталь не поддерживает никакой модельной информации.

Back to our use case: if you need 100 screws you will model only one body with your design. Then you can add as much parts as you want holding this one body. By applying different placements to the parts only you can move the screws around as you want. And if you change something in your design, the body gets updated and every part too, as they all reference it. Awesome!

Now imagine another use case: you have a nice electrical motor assembly consisting of multiple parts, are all moved to the right position. Afterwards you want to create a bigger machine and you need multiple electrical motors for it. What we want is to reuse the motor assembly, the same reasoning as with the multiple body incarnations apply. For simple designs we were able to create multiple parts from one body, however, we can't create a part from multiple parts. Therefore we need another object which can do that! FreeCAD introduces the product object for this. A product is basically a full assembly with multiple parts, but also has a placement property. What does that mean? It becomes clear when we again extend the coordinate system chart with our new product object.



Now our parts are not anymore beneath the global coordinate system, but they are grouped beneath the product. For the parts nothing change: they works as before. And in fact, if our Product1 would have been the top-level object, absolutely nothing would change at all. The global system is just replaced by a product coordinate system which acts as global one. In our example however, we added the product to another product, together with a third part. Now it gets interesting: As a product has a placement property, it can be moved! And we already learned that such a transformation is applied to all children. Therefore parts 1 and 2 would move when you change the placement of Product1.

Back to our example: Product1 would be the electrical motor, Product2 the big machine. Now you can add multiple products to the machine which all reference the same parts as Product1, hence all representing a electrical motor. And as every product can be placed diffrently, you can move all motors to diffrent positions. Combine it with other parts and assemblies and you can build a complex machine. Again, if you update one body, all parts and therefore all products referencing it get updated.

At last you may ask why there is no global coordinate system in the last picture. Thats because nothing like a global coordinate system exists, it was just a concept for easy explaining. If you assembly your electrical motor, the top-level coordinate system would be the Product1 system. However, this is not a general global one, as you can add it to a another product which is the top-level cs afterwards. And this can be added to another, and so on. There is nothing like a global coordinate system, just a top-level one.

To summarize: In the assembly workbench you can combine parts to assemblies (products). These products can be staked together with other parts in arbitrary numbers.

How to set Relations: Assembly Constraints
Up to now we discussed all details of moving things around with placements and the objects involved in it. It is however very tedious to calculate all placements by hand and set them manual via the property editor. It would be more pleasant if it would be possible to set simple relations between parts instead of abstract rotations and translations. Therefore FreeCAD introduces assembly constraints. As the name indicates, they work the same way as in the sketcher: the user applies different attributes to geometries of the parts. This can be for example the distance between two points, or their orientation (parallel, perpendicular) of lines etc. FreeCAD trys then to find placements which satisfy all given constraints.



To assemble things in the real world, one would use the parts structure to fit the counterpart into its place, for example a bolt which belongs into a hole. Or surfaces which touch each other and therefore define the parts exact position. In FreeCAD it works exactly like that: you use the parts geometry to specify where the second part belongs to. At your disposal are points, straight lines, planes and cylinders. The picture to the right shows them all in the FreeCAD environment. But of course, the geometry alone is not enough to calculate the parts positions, the kind of relation needs to be known too. For example two faces: They can touch each other, or just be parallel, maybe even perpendicular. This relation is set in FreeCAD through the already mentioned assembly constraints. You have 6 diffrent types at your hand: Fix, Distance, Orientation, Angle, Align and Coincident. Lets see what they all do and how to use them.

Fix
The fix constraint is the simplest of all constraints. It only needs one part to be selected and then it fixes its position and its rotation. No matter what you do to this part afterwards: it will hold its place. And thats the whole purpose of that type. It's most useful to have always one fixed part per assembly, as it can be annoying if all parts get moved to satisfy other constraints. If you fix the most basic part in your assembly, all other parts will move towards it which gives you a pleasant experience. Note that this constraint works only in the assembly it is created in, the part will not be fixed in any parent assembly (remember: assemblies can be stacked).

Distance
As you already guessed from the name, with this constraint you can specify the distance between two geometries. This works for two points, but also for a point and a line, or a line and a cylinder and many more combinations. This constraint is pretty simple, but two points need mentioning: First, if there are multiple possible distances between geometries, for example the last mentioned line and cylinder, then the shortest distance is used. Second, sometimes multiple solutions exist even for the shortest distance. This is the case for the point-plane distance: every value can be satisfied with the point above AND below the plane. So if you only specify the value, it can happen that FreeCAD puts the point at the wrong side of the plane. To control this, the distance constraint has a special option, the solution space. This option allows to reduce the space of possible solutions, so that it matches your wishes. Lets see how this works on our small example: