A2plus Workbench/ru: Difference between revisions

From FreeCAD Documentation
(Created page with "Верстак A2plus")
 
No edit summary
 
(268 intermediate revisions by 7 users not shown)
Line 1: Line 1:
<languages/>
<languages/>
[[Image:A2p_workbench.svg|thumb|128px|Иконка верстака A2plus]]
<div style="float:right; clean:both; margin-left:0.5em;">__TOC__</div>


== Introduction ==
<span id="Introduction"></span>
== Введение ==


{{TOCright}}
The A2plus workbench is an [[External workbenches|external workbench]] to assemble different parts in FreeCAD.


Верстак A2plus - это [[External workbenches/ru|внешний верстак]] для [[Assembly/ru|создания сборок]] деталей в FreeCAD.
This documentation describes A2plus version '''0.4.10 or newer'''.


Эта документация описывает версию A2plus '''0.4.56 или новее'''.
== Installing ==


<span id="Installing"></span>
The A2plus workbench is an addon to FreeCAD. It can easily be installed via the menu {{MenuCommand|Tools → [[Std_AddonMgr|Addon Manager]]}}.
==Установка==
A2plus is under active development and will get new features frequently. Therefore you should update it regularly using also the menu {{MenuCommand|Tools → [[Std_AddonMgr|Addon Manager]]}}.
The A2plus code is hosted and developed [https://github.com/kbwbe/A2plus on GitHub] and can also be installed manually by copying it into FreeCAD's MOD directory.


Верстак A2plus - это дополнение к FreeCAD. Его легко установить через меню {{MenuCommand | Инструменты → [[Std_AddonMgr | Менеджер дополнений]]}}.
== Getting Started ==
A2plus находится в стадии активной разработки и будет часто получать новые функции. Поэтому вы должны регулярно обновлять его, используя меню {{MenuCommand | Инструменты → [[Std_AddonMgr | Менеджер дополнений]]}}.
Код A2plus размещается и разрабатывается [https://github.com/kbwbe/A2plus на GitHub], а также может быть установлен вручную путем копирования его в каталог MOD FreeCAD.


<span id="Getting_Started"></span>
At first switch to the A2plus toolbar in FreeCAD. To create an assembly create a new file in FreeCAD. At first this file needs to be saved. It is recommended (but not necessary) to save it in the same folder of the parts you want to assemble.
== Начало работы ==


Сначала переключитесь на панель инструментов A2plus во FreeCAD. Для создания сборки создайте новый файл в FreeCAD. Сначала этот файл нужно сохранить. Рекомендуется (но не обязательно) сохранять его в той же папке, что будущая сборка деталей.
Now parts can be added to the assembly by using the toolbar button [[Image:A2p ImportPart.svg|24px]]. The first added part gets a fixed position by default. (You can change this later via the part property {{PropertyData|fixed Position}}.)<br />Parts that are already in the assembly can be cloned with the toolbar button [[Image:A2p_DuplicatePart.svg|24px]].<br />To edit a part from the assembly, select it in the model tree and use the toolbar button [[Image:A2p EditPart.svg|24px]]. This will open the part into a new tab in FreeCAD or switch to its tab if the file is already opened.<br />To import changes in parts into the assembly click on the toolbar button [[Image:A2p_ImportPart_Update.svg|24px]].


Теперь детали можно добавлять в сборку с помощью кнопки на панели инструментов [[Image: A2p ImportPart.svg|24px]] или [[Image:A2p ShapeReference.svg|24px]]. Кнопка [[Image:A2p ImportPart.svg|24px]] добавляет все тела в выбранном файле как единую деталь. При использовании кнопки [[Image:A2p ShapeReference.svg|24px]] Вы можете выбрать, какие детали из файла должны быть импортированы как деталь. Так можно, например, импортировать только эскиз для сборки дальнейших частей, используя эскиз для определения позиций деталей.
Imported parts will keep their external dependencies and can be edited. For well-defined parts like screws it is however useful that their shape cannot be edited. This can be achieved with the toolbar button [[Image:A2p ConvertPart.svg|24px]] that converts the selected part to a static copy of the original part.


Первая добавленная часть получает фиксированную позицию по умолчанию. (Это можно изменить позже через свойство детали {{PropertyData|фиксированная позиция}}.)
To save the assembly and close it afterwards, the toolbar button [[Image:A2p Save and exit.svg|24px]] can be used.


Детали, уже находящиеся в сборке, можно клонировать с помощью кнопки на панели инструментов [[Image: A2p_DuplicatePart.svg|24px]].
== Assembling ==


Чтобы отредактировать деталь из сборки, выберите ее в дереве модели и используйте кнопку на панели инструментов [[Image:A2p EditPart.svg|24px]]. Это откроет деталь в новой вкладке во FreeCAD или переключится на ее вкладку, если файл уже открыт.
Assembling parts is done by adding constraints between parts. After a constraint A2plus will move the parts according to the constraint if possible.<br/>For complex constraints between parts A2plus might fail to solve the constraints. Therefore also have a look at section [[#Troubleshooting|Troubleshooting]] for strategies to resolve such cases.


Чтобы импортировать изменения деталей в сборку, нажмите кнопку на панели инструментов [[Image: A2p_ImportPart_Update.svg|24px]]. Кнопка на пранели [[File:A2p_RecursiveUpdate.svg|24px]] тоже импортирует детали, но по возможности рекурсивно [[#Узлы сборки|подсборки]]. Если Вы выберете одну или несколько частей в древе проекта FreeCAD, A2plus запросит Вас об обновлении только выбранных частей.
Constraints between parts are added by keeping the {{KEY|Ctrl}} key pressed and selecting an edge or face of two parts. The constraint will be added attached in the model tree to the affected parts.


Импортированные части сохранят свои внешние зависимости и могут быть отредактированы. Однако для стандартных частей, таких как винты, полезно, чтобы их форму нельзя было редактировать. Это может быть достигнуто с помощью кнопки на панели инструментов [[Image: A2p ConvertPart.svg|24px]], которая преобразует выбранную деталь в статическую копию оригинальной детали.
=== Keeping the Overview ===


Чтобы сохранить сборку и затем закрыть ее, можно использовать кнопку на панели инструментов [[Image: A2p Save and exit.svg|24px]].
The more parts you add, the more important it is to keep the overview. A2plus therefore offers these tools to move and view parts:


Toggling the toolbar button [[Image:A2p CD_OneButton.svg|24px]] sets the way you can select several several edges, faces etc.: Either with a single click or by {{KEY|Ctrl}}+click.
* To move a part around in the assembly, select it in the model tree and use the toolbar button [[Image:A2p MovePart.svg|24px]]. When you placed the part where you like it, left-click with the mouse. If the moved part has already constraints the part will be placed accordingly by pressing the toolbar button [[Image:A2p solver.svg|24px]] because this triggers to resolve all constraints of the assembly.
* To show a constraint select it in the model tree and use the toolbar button [[Image:A2p ViewConnection.svg|24px]]. This will make the whole assembly transparent and highlight the two things that are connected in the constraint. To go back to the normal view, left-click into the assembly.
* To show only certain parts in the assembly, select these parts in the model tree and use the toolbar button [[Image:A2p Isolate Element.svg|24px]]. Alternatively you can hide a certain part by selecting it in the model tree and pressing {{KEY|Space}} to toggle its visibility.
* To toggle the transparency view of the whole assembly you can use the toolbar button [[Image:A2p ToggleTransparency.svg|24px]].


<span id="Assembling"></span>
=== Constraints ===
== Сборка ==


Сборка деталей осуществляется путем добавления ограничений между деталями. После введения ограничения A2plus переместит детали в соответствии с ограничением, если это возможно.
When creating a constraint such a dialog will be displayed after you pressed a constraint toolbar button:<br/>
[[Image:A2p_ConstraintPropertiesDialog.png]].<br/>
For certain constraints it allows you to modify the constraint direction. With the button {{Button|[[Image:A2p solver.svg|24px]] Solve}} you can check in advance if this new constraint can be solved by A2plus. If not, have a look at section [[#Troubleshooting|Troubleshooting]].


Ограничения между деталями добавляются удерживанием клавиши {{KEY|Ctrl}} и выбором ребра или грани двух частей. Затем нажмите кнопку на панели инструментов нужного ограничения. Появится диалог, определённый в разделе [[#Constraints|Constraints]]. Ограничение будет добавлено в дереве модели к выделенным деталям.
A2plus provides the following constraints:


Для сложных ограничений между частями A2plus может не справится с расположением деталей. Поэтому также ознакомьтесь с разделом [[#Troubleshooting|Устранение неполадок]], чтобы узнать, как решить такие случаи.
==== Point on Point ====


<span id="Keeping_track"></span>
Select a [[Glossary#Vertex|vertex]] (point) on each part. The toolbar button [[Image:A2p PointIdentity.svg|24px]] adds the constraint {{Variable|pointIdentity}}. It will make the vertices coincident.
=== Отслеживание ===


Чем больше частей вы добавляете, тем важнее сохранять возможность их отслеживания. A2plus предлагает следующие инструменты для перемещения и просмотра деталей:
==== Point on Line ====


* Чтобы переместить деталь в сборке, выберите ее в дереве модели и используйте кнопку на панели инструментов [[Image: A2p MovePart.svg|24px]]. Когда вы разместите деталь там, где вам это нравится, щелкните левой кнопкой мыши. Если перемещенная деталь уже имеет ограничения, она будет размещена соответствующим образом при нажатии кнопки на панели инструментов [[Image: A2p solver.svg|24px]], потому что это инициирует разрешение всех ограничений сборки.
Select a [[Glossary#Vertex|vertex]] (point), or circular [[Glossary#Edge|edge]] (will select its center point), or a spherical [[Glossary#Face|face]] (will also select its center point) on one part and an [[Glossary#Edge|edge]] on the other part. The toolbar button [[Image:A2p PointOnLineConstraint.svg|24px]] adds the constraint {{Variable|pointOnLine}}. It will put the vertex on the edge.
* Чтобы отобразить ограничение, выберите его в дереве модели и используйте кнопку на панели инструментов [[Image: A2p ViewConnection.svg|24px]]. Это сделает всю сборку прозрачной и выделит два объекта, связанных ограничениями. Чтобы вернуться к обычному виду, щелкните левой кнопкой мыши по сборке.
* Чтобы показать только определенные детали в сборке, выберите эти детали в дереве модели и используйте кнопку на панели инструментов [[Image: A2p Isolate Element.svg|24px]]. В качестве альтернативы вы можете скрыть определенную деталь, выбрав ее в дереве модели и нажав {{KEY|Space}}, чтобы переключить ее видимость.
* Для переключения вида прозрачности всей сборки вы можете использовать кнопку панели инструментов [[Image: A2p ToggleTransparency.svg|24px]].
* Каждая деталь может быть сделана прозрачной при использовании обычного редактирования FreeCAD. Однако, иногда установки прозрачности деталей пропадают при повторном открытии сборки из-за ошибки в FreeCAD. В качестве обходного пути можно использовать кнопку на панели [[Image:A2p_Restore_Transparency.svg|24px]] для восстановления установок прозрачности.


<span id="Constraints"></span>
==== Point on Plane ====
=== Ограничения ===


При создании ограничения, после нажатия кнопки на панели инструментов ограничения, будет отображаться такой диалог:
Select a [[Glossary#Vertex|vertex]] (point), or circular [[Glossary#Edge|edge]] (will select its center point), or a spherical [[Glossary#Face|face]] (will also select its center point) on one part and a plane on the other part. The toolbar button [[Image:A2p PointOnPlaneConstraint.svg|24px]] adds the constraint {{Variable|pointOnPlane}}. The constraint dialog allows you to specify an offset between the point and the plane. This offset can also be flipped between both sides of the plane. If the offset is zero, the constraint will put the vertex on the plane.


[[Image:A2p_ConstraintPropertiesDialog.png]]
==== Sphere on Sphere ====
{{Caption|Выше: Диалог параметров ограничений A2plus}}


Для определенных ограничений это позволяет вам изменить направление ограничения. С помощью кнопки {{Button|[[Image:A2p solver.svg|24px]] Solve}} вы можете заранее проверить, может ли это новое ограничение быть решено с помощью A2plus. Если нет, загляните в раздел [[#Разрешение проблем|Разрешение проблем]].
Select either a spherical [[Glossary#Face|face]] or a [[Glossary#Vertex|vertex]] (point) on both parts. The toolbar button [[Image:A2p SphericalSurfaceConstraint.svg|24px]] adds the constraint {{Variable|sphereCenterIdent}}. It will either make the center of the spheres, the center of the sphere and the vertex, or the vertices coincident.


Ограничения могут быть сброшены изменением их [[Std_ToggleVisibility/ru|видимости]]. Это делается выбором ограничения в древе проекта и нажатием {{KEY|Space}}. Это переключает свойство {{PropertyData|Suppressed}} (подавлено). Подавленное ограничение не учитывается при разрешении сборки.
==== Circular Edge on Circular Edge ====


A2plus поддерживает следующие ограничения:
Select a circular [[Glossary#Edge|edge]] on both parts. The toolbar button [[Image:A2p CircularEdgeConstraint.svg|24px]] adds the constraint {{Variable|circularEdge}}. The constraint dialog allows you to specify an offset between the edges. This offset can also be flipped. You can furthermore set the constraint direction and lock the rotation of the parts. If the offset is zero, the constraint will put the edges concentric in the same plane.


<span id="Point_on_Point"></span>
==== Axis Coincident ====
==== Точка на точке ====


Выберите [[Glossary#Vertex|Вершины]] (точки) в каждой детали. Кнопка на панели инструментов [[Image: A2p PointIdentity.svg|24px]] добавляет ограничение {{Variable|pointIdentity}}. Это сделает точки совпадающими.
Select either a cylindrical [[Glossary#Face|face]] or a linear [[Glossary#Edge|edge]] on both parts. The toolbar button [[Image:A2p AxialConstraint.svg|24px]] adds the constraint {{Variable|axisCoincident}}. The constraint dialog allows you to specify the axis direction. The dialog allows you furthermore to lock the rotation of the parts. The constraint will make the axes or lines coincident.


<span id="Point_on_Line"></span>
==== Axis Parallel ====
==== Точка на линии ====


Выберите [[Glossary#Vertex|вершину]] (точку), или [[Glossary#Edge|край]] окружности (выберет ее центр), или [[Glossary#Face|поверхность]] сферы (также выберет ее центр) и [[Glossary # Edge | край]] детали. Кнопка на панели инструментов [[Image: A2p PointOnLineConstraint.svg | 24px]] добавляет ограничение {{Variable|pointOnLine}}. Это поместит точку на край.
Select either a cylindrical [[Glossary#Face|face]] or a linear [[Glossary#Edge|edge]] on both parts. The toolbar button [[Image:A2p AxisParallelConstraint.svg|24px]] adds the constraint {{Variable|axisParallel}}. The constraint dialog allows you to specify the axis direction. The constraint will make the axes or lines parallel.


<span id="Point_on_Plane"></span>
==== Axis on Plane ====
==== Точка на плоскости ====


Выберите [[Glossary#Vertex|вершину]] (точку), или [[Glossary#Edge|край]] окружности (выберет ее центр), или [[Glossary#Face|поверхность]] сферы (также выберет ее центр) и плоскость. Кнопка на панели инструментов [[Image: A2p PointOnPlaneConstraint.svg|24px]] добавляет ограничение {{Variable|pointOnPlane}}. Диалог ограничений позволяет указать смещение между точкой и плоскостью. Это смещение также можно переключать между обеими сторонами плоскости. Если смещение равно нулю, ограничение поместит вершину на плоскость.
Select either a cylindrical [[Glossary#Face|face]] or a linear [[Glossary#Edge|edge]] on one part and a plane on the other part. The toolbar button [[Image:A2p AxisPlaneParallelConstraint.svg|24px]] adds the constraint {{Variable|axisPlaneParallel}}. The constraint will make the axis or line parallel to the plane.


<span id="Sphere_on_Sphere"></span>
==== Plane Parallel ====
==== Сфера на Сфере ====


Выберите [[Glossary#Face|поверхность]] сфер или [[Glossary#Vertex|вершины]] (точки) на обеих деталях. Кнопка на панели инструментов [[Image: A2p SphericalSurfaceConstraint.svg|24px]] добавляет ограничение {{Variable |phereCenterIdent}}. Это совместит центры сфер, центр сферы и точку, либо вершины.
Select a plane on both parts. The toolbar button [[Image:A2p PlanesParallelConstraint.svg|24px]] adds the constraint {{Variable|planesParallel}}. The constraint dialog allows you to specify the constraint direction. The constraint will make the planes parallel.


<span id="Circular_Edge_on_Circular_Edge"></span>
==== Plane on Plane ====
==== Круговая кромка на круговой кромке ====


Выберите [[Glossary#Edge|край]] окружности на обеих деталях. Кнопка на панели инструментов [[Image: A2p CircularEdgeConstraint.svg|24px]] добавляет ограничение {{Variable | roundEdge}}. Диалог ограничений позволяет указать смещение между краями. Это смещение также можно перевернуть. Кроме того, вы можете установить направление ограничения и заблокировать вращение частей. Если смещение равно нулю, ограничение поместит края окружности в одной плоскость.
Select a plane on both parts. The toolbar button [[Image:A2p PlaneCoincidentConstraint.svg|24px]] adds the constraint {{Variable|planeCoincident}}. The constraint dialog allows you to specify a constraint direction and an offset between the planes. This offset can also be flipped. If the offset is zero, the constraint will make the planes coincident.


<span id="Axis_Coincident"></span>
==== Plane Angular ====
==== Совпадение по оси ====


Выберите [[Glossary # Face|поверхность]] сферы или [[Glossary # Edge | края]] линий на обеих частях. Кнопка на панели инструментов [[Image: A2p AxialConstraint.svg|24px]] добавляет ограничение {{Variable|axisCoincident}}. Диалог ограничений позволяет указать направление оси. Диалог позволяет вам также заблокировать вращение частей. Ограничение сделает оси или линии совпадающими.
Select a plane on both parts. The toolbar button [[Image:A2p AngleConstraint.svg|24px]] adds the constraint {{Variable|angledPlanes}}. The constraint dialog allows you to specify an angle between the planes. The constraint will make the planes at first parallel and the set the specified angle.


<span id="Axis_Parallel"></span>
==== Coincidence at Center of Mass ====
==== Параллельные оси ====


Выберите [[Glossary # Face|поверхность]] сферы или [[Glossary # Edge| края]] линий на обеих частях. Кнопка на панели инструментов [[Image: A2p AxisParallelConstraint.svg | 24px]] добавляет ограничение {{Variable|axisParallel}}. Диалог ограничений позволяет указать направление оси. Ограничение сделает оси или линии параллельными.
Select either a closed [[Glossary#Edge|edge]] or a plane on both parts. The toolbar button [[Image:A2p CenterOfMassConstraint.svg|24px]] adds the constraint {{Variable|centerOfMass}}. The constraint dialog allows you to specify an offset between the edges or planes. This offset can also be flipped. You can furthermore set the constraint direction and lock the rotation of the parts. If the offset is zero, the constraint will put the edges or planes into the same plane.


<span id="Axis_on_Plane_parallel"></span>
=== Subassemblies ===
==== Ось параллельно плоскости ====


Выберите цилиндрическую [[Glossary/ru#Face|поверхность]] или линейные [[Glossary/ru#Edge|края]] детали и плоскость на другой детали. Кнопка на панели инструментов [[Image: A2p AxisPlaneParallelConstraint.svg|24px]] добавляет ограничение {{Variable|axisPlaneParallel}}. Ограничение сделает ось или линию параллельной плоскости.
An assembly can contain other assemblies. They are added like parts by pressing the toolbar button [[Image:A2p ImportPart.svg|24px]] and selecting a {{FileName|*.FCStd}} file containing an assembly. Such subassemblies can also be edited like parts using the toolbar button [[Image:A2p EditPart.svg|24px]]. Please assure sure for higher assembly stages that you update the assembly via the toolbar button [[Image:A2p ImportPart_Update.svg|24px]] when there were changes.


<span id="Axis_on_Plane_normal"></span>
== Constraint Handling ==
==== Ось нормально плоскости ====


Выберите цилиндрическую [[Glossary/ru#Face|поверхность]] или линейные [[Glossary/ru#Edge|края]] детали и плоскость на другой детали. Кнопка на панели инструментов [[Image:A2p AxisPlaneNormalConstraint.svg|24px]] добавляет ограничение {{Variable|axisPlaneNormal}}. Ограничение сделает ось или линию нормальной плоскости.
Possible constraints for a selection are displayed in the toolbar and the ''Constraint Tools'' dialog by enabling the corresponding buttons. The ''Constraint Tools'' dialog is opened via the toolbar button [[Image:A2p DefineConstraints.svg|24px]]. It is intended to stay open to be able to add quickly several constraints to the assembly.


<span id="Axis_on_Plane_angle"></span>
Existing constraints can be edited by selecting them in the model tree and then either double-clicking on it or using the toolbar button [[Image:A2p EditConstraint.svg|24px]]. This opens the ''Constraint Properties'' dialog.
==== Ось под углом к плоскости ====


Выберите цилиндрическую [[Glossary/ru#Face|поверхность]] или линейные [[Glossary/ru#Edge|края]] детали и плоскость на другой детали. Кнопка панели инструментов [[Image:A2p AxisPlaneAngleConstraint.svg|24px]] добавляет ограничение {{Variable|axisPlaneAngle}}. Это ограничение сначала сделает оси параллельными плоскости. Затем вы можете отрегулировать угол для оси в появившемся диалоговом окне настроек ограничения.
Constraints can be deleted either by selecting them in the model tree and pressing {{KEY|Del}} or by selecting a part with constraints in the model tree and using the toolbar button [[Image:A2p DeleteConnections.svg|24px]].


<span id="Plane_Parallel"></span>
All constraints can any time be resolved with the toolbar button [[Image:A2p solver.svg|24px]]. If the toolbar button [[Image:A2p ToggleAutoSolve.svg|24px]] is turned on a resolve is automatically done after every edit of a constraint.
==== Плоскости Параллельны ====


Выберите две плоскости. Кнопка на панели инструментов [[Image: A2p PlanesParallelConstraint.svg|24px]] добавляет ограничение {{Variable | planesParallel}}. Диалог ограничений позволяет вам указать направление ограничения. Ограничение сделает плоскости параллельными.
The toolbar button [[Image:A2p FlipConstraint.svg|24px]] affects the constraint that was added most recently. It flips the constraint direction.


<span id="Plane_on_Plane"></span>
== Part Lists ==
==== Плоскость на Плоскости ====


Выберите две плоскости. Кнопка на панели инструментов [[Image: A2p PlaneCoincidentConstraint.svg|24px]] добавляет ограничение {{Variable | planeCoincident}}. Диалог ограничений позволяет указать направление ограничения и смещение между плоскостями. Это смещение также можно перевернуть. Если смещение равно нулю, ограничение сделает плоскости совпадающими.
To create part lists of assemblies, the different parts of the assembly must get part info that can be read by A2plus. This is done by editing the part using the toolbar button [[Image:A2p EditPart.svg|24px]]. In the opened part press the toolbar button [[Image:A2p PartsInfo.svg|24px]] and a [[Spreadsheet_Workbench|spreadsheet]] with the name ''#PARTINFO#'' is created.


<span id="Plane_Angular"></span>
The structure of the spreadsheet is like this:
==== Плоскость под углом ====

Выберите две плоскости. Кнопка на панели инструментов [[Image: A2p AngleConstraint.svg|24px]] добавляет ограничение {{Variable | angledPlanes}}. Диалог ограничений позволяет указать угол между плоскостями. Ограничение сначала сделает плоскости параллельными и установит из под заданным углом.

<span id="Coincidence_at_Center_of_Mass"></span>
==== Совпадение в Центре масс ====

Выберите либо две замкнутые области, либо две плоскости. Кнопка на панели инструментов [[Image: A2p CenterOfMassConstraint.svg|24px]] добавляет ограничение {{Variable|centerOfMass}}. Диалог ограничений позволяет указать смещение между краями или плоскостями. Это смещение также можно перевернуть. Кроме того, вы можете установить направление ограничения и заблокировать вращение частей. Если смещение равно нулю, ограничение поместит области или плоскости в одну плоскость.

<span id="Subassemblies"></span>
=== Узлы сборки ===

Сборка может содержать другие сборки. Они добавляются как детали путем нажатия кнопки на панели инструментов [[Image: A2p ImportPart.svg|24px]] и выбора файла {{FileName|* .FCStd}}, содержащего сборку. Такие узлы также можно редактировать как детали, используя кнопку на панели инструментов [[Image: A2p EditPart.svg|24px]]. Убедитесь, что для более высоких этапов сборки вы обновили сборку рекурсивно с помощью кнопки на панели инструментов [[File:A2p_RecursiveUpdate.svg|24px]], когда произошли изменения.

<span id="Constraint_Handling"></span>
== Обработка ограничений ==

Возможные ограничения для выбора отображаются на панели инструментов и в диалоговом окне «Инструменты ограничения» при включении соответствующих кнопок. Диалоговое окно «Инструменты ограничения» открывается с помощью кнопки панели инструментов [[Image: A2p DefineConstraints.svg|24px]]. Он должен оставаться открытым, чтобы можно было быстро добавить несколько ограничений в сборку.

Существующие ограничения можно отредактировать, выбрав их в дереве модели, а затем дважды щелкнув по нему или нажав кнопку на панели инструментов [[Image: A2p EditConstraint.svg|24px]]. Откроется диалоговое окно «Свойства ограничения».

Ограничения могут быть временно отключены выделением их в древе модели и изменением у элемента параметра {{PropertyData|Suppressed}}.

Ограничения можно удалить, выбрав их в дереве модели и нажав {{KEY|Del}}, или выбрав деталь с ограничениями в дереве модели и нажать кнопку на панели инструментов [[Image: A2p DeleteConnections.svg|24px]].

Все ограничения могут быть разрешены в любое время с помощью кнопки на панели инструментов [[Image: A2p solver.svg|24px]]. Если кнопка панели инструментов [[Image: A2p ToggleAutoSolve.svg | 24px]] включена, разрешение выполняется автоматически после каждого редактирования ограничения.

Кнопка на панели инструментов [[Image: A2p FlipConstraint.svg|24px]] влияет на ограничение, которое было недавно добавлено. Это переворачивает направление ограничения.

With the [[Image:A2p CD_ConstraintViewer.svg|24px]] tool, it is possible the show and inspect existing constraints. After clicking it a dialog pops up. Then either select a part in the tree and click the button {{Button|Import from part}} to get all constraints of this part, or select one or more constraints in the tree and click the button {{Button|Import from Tree}}. As result you get all info about the constraints. By clicking in the column ''Suppress'' a single constraint can be suppressed. For more features, follow the tooltips of the other dialog buttons.

<span id="Part_Lists"></span>
== Списки деталей ==

Чтобы создать списки деталей сборок, разные детали сборки должны получить информацию о детали, которая может быть прочитана A2plus. Это делается путем редактирования детали с помощью кнопки на панели инструментов [[Image: A2p EditPart.svg|24px]]. В открывшейся части нажмите кнопку панели инструментов [[Image: A2p PartsInfo.svg|24px]] и [[Spreadsheet_Workbench | электронная таблица]] с именем ''#PARTINFO#''.

Структура электронной таблицы выглядит следующим образом:


[[Image:A2p PartinfoTable.png]]
[[Image:A2p PartinfoTable.png]]


Заполните серые поля имеющейся информацией. Эта информация будет отображена в окончательном списке деталей.
Fill out the grey fields with info you have and want to have in the final parts list.


В сборке или узле сборки используйте кнопку на панели инструментов [[Image: A2p PartsList.svg|24px]]. Он спросит вас, хотите ли вы выполнить рекурсивную итерацию по всем узлам сборки. Нажмите «Да». Это создаст новую электронную таблицу с именем ''#PARTSLIST#''. Он содержит информацию из различных электронных таблиц деталей ''PARTSINFO#'' в списке вида:
In the assembly or subassembly use the toolbar button [[Image:A2p PartsList.svg|24px]]. It will ask you if you want to iterate recursively over all subassemblies. Click on ''Yes''. This creates a new spreadsheet with the name ''#PARTSLIST#''. It contains the info from the different ''#PARSTINFO#'' spreadsheets of the parts in a list like this:


[[Image:A2p PartslistTable.png]]
[[Image:A2p PartslistTable.png]]


Положение (POS) автоматически устанавливается в соответствии с внешним видом деталей в дереве модели. Часть верхнего уровня получит POS 1.
The position (POS) is automatically set according to the appearance of the parts in the model tree. The top level part will get POS 1.<br/> The quantity (QTY) is automatically calculated from the assembly. If a parts is two times in the assembly it will get QTY 2.

Количество (QTY) автоматически рассчитывается из сборки. Если деталь в сборке дважды, то QTY будет равно 2.

Если вы обновили информацию о детали, вы можете обновить список деталей, снова нажав кнопку на панели инструментов [[Image: A2p PartsList.svg|24px]].

Для сборочных узлов вы также можете создать информационную электронную таблицу с помощью кнопки на панели инструментов [[Image: A2p PartsInfo.svg|24px]]. Когда вы создаете или обновляете список деталей главной сборки, эта информация будет использоваться, если вы ответите «Нет» на вопрос, хотите ли вы рекурсивно выполнять итерации по всем узлам сборки. Тогда разные детали будут находится не в списке деталей, а только в узлах сборки.

<span id="Special_Features"></span>
== Специальные возможности ==

<span id="Assembly_Structure"></span>
=== Структура сборки ===

Кнопка на панели инструментов [[Image: A2p Treeview.svg|24px]] создает файл HTML со структурой вашей сборки. Файл по умолчанию будет создан в текущем каталоге вашей сборки. Структура выглядит следующим образом:

:[[Image:A2p Dependency-Tree.jpg]]

<span id="Degrees_of_Freedom"></span>
=== Степени свободы ===

Кнопка [[Image:A2p DOFs.svg|24px]] помечает каждую часть сборки степенями свободы. Кроме того, он выводит список со всеми деталями и их зависимостями. Список выводится в виджет FreeCAD «Представление отчета». Если этот виджет в настоящее время не отображается, его можно отобразить, щелкнув правой кнопкой мыши пустую часть области панели инструментов FreeCAD и выбрав его в появившемся контекстном меню, или с помощью меню {{MenuCommand|View → Panels → [[Report view/ru|Просмотр отчета]]}}.

Метки степеней свободы можно удалить, повторно нажав кнопку [[Image:A2p DOFs.svg|24px]].

<span id="Part_Labels"></span>
=== Метки деталей ===

Кнопка [[Image:A2p PartLabel.svg|24px]] присваивает каждой детали сборки в 3D-виде уникальное имя. Метки деталей можно удалить повторно нажав кнопку [[Image:A2p PartLabelRemove.svg|24px]].

<span id="Shape_of_whole_Assembly"></span>
=== Вид всей сборки ===

<div class="mw-translate-fuzzy">
Иногда необходимо объединить всю сборку в одну форму. Затем эту форму можно использовать, например, для 3D-печати в [[Mesh Workbench | Mesh Workbench]] или для создания чертежей в [[TechDraw Workbench | TechDraw Workbench]]. Он создается с помощью кнопки панели инструментов [[Image: A2p_SimpleAssemblyShape.svg|24px]]. Форма по умолчанию не отображается. Используйте ту же кнопку на панели инструментов, чтобы обновить форму в случае изменений в сборке.
</div>

<span id="Convert_absolute_Paths_to_relative_Ones"></span>
=== Конвертировать абсолютные пути в относительные ===

С помощью меню {{MenuCommand|A2plus → Misc → [[File:A2p_SetRelativePathes.svg|24px]] Convert absolute paths of imported parts to relative ones}} Вы можете конвертировать абсолютные пути импортированных деталей в относительные.

<span id="Preferences"></span>
== Настройки ==

Доступ к настройкам a2plus можно получить через меню FreeCAD {{MenuCommand | Edit → [[Preferences_Editor | Preferences]]}} выбрав раздел «A2plus». Вы можете установить следующие параметры:

<span id="Default_solving_method"></span>
=== Метод решения по умолчанию ===

; Использовать решения частичных систем: Решатель начинает с детали, для которой свойство {{PropertyData|фиксированная позиция}} установлено в значение ''true'', а часть ограничена этим. Все остальные части не рассчитываются. Если решение может быть найдено, добавляется следующая часть ограничений для расчета и так далее.
; Использовать «магнитный» решатель, решая все детали одновременно: Решатель пытается переместить все детали сразу в направлении к детали, у которой свойство {{PropertyData|фиксированная позиция}} установлено в ''true''. Обратите внимание, что в большинстве случаев это займет больше времени для расчета.
; Принудительно фиксировать положение: Для всех деталей в сборке свойство {{PropertyData|фиксированная позиция}} устанавливается в значение ''true''. Тогда никакие расчеты фактически не выполняются, поскольку все детали всегда будут привязаны к позициям, в которых они были созданы.

<span id="Default_solver_behaviour"></span>
=== Поведение решателя по умолчанию ===

; Solve automatically if a constraint property is changed : The solver will automatically be started. The same as turning on the toolbar button [[Image:A2p ToggleAutoSolve.svg|24px]].


<span id="Behaviour_when_updating_imported_parts"></span>
<div class="mw-translate-fuzzy">
; Решить автоматически, если изменён параметр ограничения: Решатель будет запущен автоматически. Аналогично включению кнопки на панели инструментов [[Image: A2p ToggleAutoSolve.svg|24px]].

=== Поведение при обновлении импортированных деталей ===
</div>

; Пересчитать импортированные детали перед их обновлением: Все детали сборки, включая узлы сборок, будут открыты в FreeCAD для реконструкции с использованием значений из электронных таблиц. <br/> Эта функция предназначена для полного параметрирования конструкции. '''Примечание:''' Эта функция очень экспериментальная и не рекомендуется для важных проектов. <br/> Известные проблемы:
* Сборка может быть уничтожена из-за неправильных ссылок на топологические имена в деталях
* Основные электронные таблицы могут быть повреждены, когда они редактируются, а файл детали уже закрыт. Это может привести к краху FreeCAD.

; Включить рекурсивное обновление импортированных деталей: Открывает все узлы сборки рекурсивно для их обновления.

; Использовать экспериментальное топологическое именование: При импорте деталей в сборку алгоритм генерирует топологические имена для каждого узла сборки импортируемой фигуры. Топологические имена записываются в {{PropertyData|mux Info}}. Когда импортируемая деталь должна быть обновлена, эти топологические имена используются для обновления подэлементов ограничений. Таким образом, сборки становятся более устойчивыми к изменчивым числам подэлементов в FreeCAD. <br/> '' 'Примечание:' '' Это увеличивает размеры файлов и время расчета при импорте деталей. Если необходимо использовать топологическое именование, оно должно быть активировано до создания сборки.

; Наследовать прозрачность для каждой поверхности из деталей и узлов: Использовать настройки цвета и прозрачности из импортированных деталей. <br/> '''Примечание:''' Эта функция очень экспериментальная и не рекомендуется для важных проектов.

; Не импортировать невидимые фигуры: Это позволит скрыть невидимые базовые / строительные фигуры. '''Примечание:''' Никакие ограничения не должны быть связаны с опорными / конструктивными формами в вышестоящих или других сборочных узлах. В противном случае вы можете сломать сборку.

<div class="mw-translate-fuzzy">
; Использовать сплошное объединение для импорта деталей и сборочных узлов: Все импортированные детали будут напрямую объединены в объединение. <br/> Эта функция полезна для моделирования [[FEM_Workbench|FEM]] или [[Manual:Preparing_models_for_3D_printing|3D-печать]], если разрешено только одно тело. Альтернативой является создание [[#Shape_of_whole_Assembly|вида всей сборки]] позже.
</div>

<span id="User_interface_settings"></span>
=== Настройки интерфейса пользователя ===

; Показать ограничения на панели инструментов: Если эта опция не используется, кнопки панели инструментов для различных ограничений не видны, чтобы сэкономить место на панели инструментов. Новые ограничения по-прежнему можно установить с помощью диалогового окна «Инструменты ограничения» (кнопка на панели инструментов [[Image: A2p DefineConstraints.svg|24px]]).

<span id="Storage_of_files"></span>
=== Хранение файлов ===

; Использовать относительные пути для импортированных деталей: Использует относительные пути к файлам деталей.
; Использовать абсолютные пути для импортированных деталей: Использует абсолютные пути к файлам деталей.
; Все файлы находятся в этой папке проекта: Все файлы проекта должны находиться в указанной папке. Не имеет значения, находятся ли они в подпапках этой папки. '' 'Примечание:' '' Одинаковые файлы не могут присутствовать несколько раз в папке (например, в разных подпапках). <br/> Эта опция полезна для работы на разных машинах, потому что тогда нужно только скопировать папку проекта.

<span id="Troubleshooting"></span>
== Разрешение проблем ==

Рано или поздно у вас возникнет проблема, что A2plus не может решить установленные вами ограничения. Чтобы преодолеть это, существуют разные стратегии:

<span id="Using_the_Conflict_Finder_Tool"></span>
=== Использование Conflict Finder Tool ===

Conflict Finder Tool (Инструмент Поиска Конфликтов) - Это самый безопасный метод, когда у вас есть несколько ограничений, потому что этот инструмент пытается решить одно ограничение за другим, пока не найдет конфликтующее ограничение. Затем вы можете перейти к другим стратегиям для устранения выявленного ограничения. Инструмент вызывается с помощью кнопки на панели инструментов [[File:A2p_SearchConstraintConflicts.svg|24px]].

<span id="Checking_Constraint_Direction"></span>
=== Проверка направления ограничения ===

Иногда кажется, что ограничения определены последовательно, но они, тем не менее, не могут быть решены. Пример: Предположим, у вас есть ограничение {{Variable | [[# Plane_Parallel | planesParallel]]}} для двух плоскостей. Теперь вы хотите установить для этих же плоскостей ограничение {{Variable | [[# Plane_on_Plane | planeCoincident]]}}, и A2plus не может решить эту проблему. Тогда направления ограничений {{Variable | planesParallel}} и {{Variable | planeCoincident}} различны. Используйте одно и то же направление для обоих ограничений, чтобы исправить это.

A2plus предлагает автоматическую проверку правильных направлений для '''всех''' ограничений, используя кнопку панели инструментов [[Image:A2p_ReAdjustConstraints.svg|24px]].

<span id="Deleting_Constraints"></span>
=== Удаление ограничений ===

Большинство случаев неразрешимых ограничений происходит непосредственно при добавлении нового ограничения. Решение состоит в том, чтобы удалить ограничение, которое вы добавили последним. A2plus также предложит это.

Иногда стратегия удаления является единственной, например, когда вы отредактировали деталь в FreeCAD так, что грани или ребра, связанные с ограничениями, отсутствуют. Затем следует удалить ограничение по одному, которое связано с измененной деталью. Используйте кнопку на панели инструментов [[Image: A2p solver.svg|24px]] после каждого удаления, чтобы увидеть, достигли ли вы разрешимого состояния.

Когда вы получите сборку, которую можно решить, добавьте шаг за шагом необходимые ограничения.

<span id="Moving_Parts"></span>
=== Перемещение деталей ===

В некоторых случаях решателю нужны только лучшие начальные значения для решения ограничений. Возьмем, к примеру, случай, когда у вас есть осевая часть и колесная часть. Вы добавляете ограничение {{Variable | axisCoincident}} и не получаете информации о том, что решатель не выполнен, но части не перемещаются соответствующим образом, и в виджете «Представление отчета» FreeCAD вы видите "''REACHED POS-ACCURACY: 0.0''". Решением для этого является перемещение деталей ближе к той позиции, которую вы хотите получить с помощью ограничения.

'''Примечание:''' Убедитесь, что хотя бы для одной части ограничения свойство {{PropertyData | фиксированная позиция}} установлено в значение ''false''.

<span id="Setting_the_Tip_Property"></span>
=== Настройка свойства Tip ===

Если вы пропустили некоторые функции своей детали после импорта в сборку A2plus, проверьте свойство {{PropertyData|[[PartDesign_MoveTip|Tip]]}}.

A2plus импортирует тела деталей со всеми их функциями вплоть до свойства Tip. Это разумно, потому что установка Tip на определенную функцию означает, что все функции после Tip не должны появляться в итоговой детали. Так что если Вы пропустили функцию детали в A2plus, откройте деталь через кнопку панели инструментов [[Image:A2p EditPart.svg|24px]], выделите тело и посмотрите свойство {{PropertyData|Tip}}. Если это свойство не в той функции, где нужно, сделайте правый клик на функции, где оно должно быть и выберите {{MenuCommand|[[File:PartDesign_MoveTip.svg|24px]] Set tip}}.Затем сохраните деталь и перезагрузите сборку с помощью кнопки на панели инструментов [[Image:A2p ImportPart_Update.svg|24px]].

<span id="Repairing_Assembly_Tree"></span>
=== Восстановление дерева сборки ===

Если вы не видите четкой причины, по которой некоторые ограничения не могут быть разрешены, вы можете попробовать использовать кнопку на панели инструментов [[Image: A2p RepairTree.svg|24px]]. Это разрешит все ограничения и снова сгруппирует их по разным частям.

<span id="Migrating_old_A2plus_assemblies"></span>
=== Перенос старых сборок A2plus ===

Сборки, созданные с A2plus старше марта 2019 года, не показывают правильные значки для импортированных деталей и имеют устаревшие свойства. Эти сборки можно перенести в A2plus версии 0.4.35 и новее, используя меню {{MenuCommand|A2plus → Misc → [[File:A2p_Upgrade.svg|24px]] Migrate proxies of imported parts}}. Сделав это, вы должны сохранить и снова открыть файл сборки.


<span id="Avoiding_Accented_Characters"></span>
If you have updated a part info you can refresh the parts list by pressing the toolbar button [[Image:A2p PartsList.svg|24px]] again.
=== Избегайте символов подчеркивания ===


'''Эта стратегия не нужна для Windows.'''
For subassemblies you can also create an info spreadsheet using the toolbar button [[Image:A2p PartsInfo.svg|24px]]. When you create or update the parts list of the main assembly this info will be used if you click on ''No'' for the question if you want to iterate recursively over all subassemblies. Then the different parts are not in the parts list but only the subassemblies.


В некоторых операционных системах могут возникнуть проблемы, если имена файлов или пути к файлам деталей или сборки содержат символы с подчеркиванием. Поэтому избегайте таких символов, а также специальных символов в целом.
== Special Features ==


<span id="Fixing_Position"></span>
=== Assembly Structure ===
=== Фиксированная позиция ===


'''Эта стратегия больше не нужна для сборок, созданных с использованием A2plus 0.3.11 или новее, поскольку A2plus теперь выдает предупреждение о пропущенных фиксированных позициях.'''
The toolbar button [[Image:A2p Treeview.svg|24px]] creates a HTML file with the structure of your assembly. The file will by default be created in the folder of your assembly file. The structure looks like this one:<br/> [[Image:A2p Dependency-Tree.jpg]]


Когда вы устанавливаете ограничение между двумя деталями, и ни одна деталь не имеет свойств {{PropertyData | фиксированная позиция}} установленным в ''true'' или связано ограничением с деталью с {{PropertyData | фиксированная позиция}} установленным в ''true'', ограничение не может быть решено. То же самое происходит, если в обеих частях ограничения {{PropertyData | фиксированная позиция}} установлено значение ''true''.
=== Degrees of Freedom ===


Затем A2plus выводит информацию о неудачном решении, но иногда вы видите только то, что детали не перемещаются соответствующим образом, и в виджете «Представление отчета» FreeCAD вы видите «REACHED POS-ACCURACY: 0.0». Это означает, что решатель завершил работу без ошибок, но на самом деле он не смог решить ограничения.
The button [[Image:A2p DOFs.svg|24px]] labels every part of the assembly with their degrees of freedom. Furthermore it outputs a list with all parts and their dependencies. The list is output into FreeCAD's widget ''Report view''. If this widget is currently not visible, it can either be shown by right-clicking into an empty part of the FreeCAD toolbar area and then choosing it in the appearing context menu or with the menu {{MenuCommand|View → [[Std_Panels|Panels]] → Report view}}.<br/>The degrees of freedom labels can be removed with the button [[Image:A2p Unlabel DOFs.svg|24px]].


Поэтому убедитесь, что хотя бы для одной из ваших деталей в сборке {{PropertyData|фиксированная позиция}} установлено значение ''true''. Затем убедитесь, что вы устанавливаете ограничения только для детали, которая каким-то образом связана с фиксированной деталью. Чтобы визуализировать эти зависимости, см. Раздел [[#Assembly_Structure|Структура сборки]].
=== Part Labels ===


<span id="Rotating_Parts"></span>
The button [[Image:A2p PartLabel.svg|24px]] labels every part of the assembly in the 3D view with its name. The part labels can be removed with the button [[Image:A2p PartLabelRemove.svg|24px]].
=== Вращение деталей ===


'''Эта стратегия больше не требуется для сборок, созданных с использованием A2plus 0.4.0 или новее, поскольку A2plus автоматически поворачивает детали в фоновом режиме, чтобы получить достаточный начальный угол для решателя.'''
=== Shape of whole Assembly ===


Решатель часто не выполняется для ограничения {{Variable|angledPlanes}}, если две выбранные плоскости в настоящее время имеют угол 0 ° или 180 °. (Части не перемещаются соответственно, и в виджете «Просмотр отчета» FreeCAD вы видите «REACHED POS-ACCURACY: 0.0».) Решение этой проблемы - повернуть одну часть на несколько градусов с помощью FreeCAD функция преобразования (щелкните правой кнопкой мыши деталь в дереве модели и выберите в контекстном меню {{MenuCommand|Transform}}).
Sometimes it is necessary to have the whole assembly combined as one shape. This shape can then for example be used for 3D printing in the [[Mesh Workbench|Mesh workbench]] or for drawings in the [[TechDraw Module|TechDraw workbench]]. It is created using the toolbar button [[Image:A2p_SimpleAssemblyShape.svg|24px]]. The shape is by default not made visible. Use the same toolbar button to update the shape in case of changes in the assembly.


'''Примечание:''' Убедитесь, что хотя бы для одной части ограничения свойство {{PropertyData | фиксированная позиция}} установлено в значение ''false''.
== Preferences ==


<span id="Animation"></span>
The a2plus preferences can be accessed via FreeCAD's menu {{MenuCommand|Edit → [[Preferences_Editor|Preferences]]}} and there in the section ''A2plus''. You can set the following options:
== Анимация ==


A2plus предлагает анимацию с помощью перетаскивания и скриптов Python.
=== Default solving method ===


<span id="Dragging"></span>
* '''Use solving of partial systems'''<br/> The solver begins with a part that has the property {{PropertyData|fixed Position}} set to ''true'' and a part constrained to it. All other parts are not calculated. If a solution could be found, the next constrained part is added for the calculation and so on.
=== Перетаскиванием ===
* '''Use "magnetic" solver, solving all parts at once'''<br/> The solver tries to move all parts at once in direction to a part that has the property {{PropertyData|fixed Position}} set to ''true''. Note that this will in most cases take more time for the calculation of a solution.
* '''Force fixed position'''<br/> This sets for all parts in the assembly the property {{PropertyData|fixed Position}} to ''true''. Then no calculation is actually performed since all parts will always be fixed to the positions where they were created.


Анимация перетаскиванием интерактивна, поскольку вы запускаете её, перетаскивая часть сборки.
=== Default solver behavior ===
Чтобы получить этот тип анимации:
# Полностью ограничьте деталь, движение или вращение которой нужно анимировать.
# Нажмите на кнопку панели инструментов [[Image:A2p MovePartUnderConstraints.svg|24px]]. Это включает режим перетаскивания.
# Нажмите на нужную деталь в сборке.
# Теперь вы можете перемещать мышь, и деталь будет следовать за движением мыши в пределах установленных ограничений.
# Чтобы завершить режим перетаскивания, щелкните левой кнопкой мыши в сборке или нажмите ESC.


Вот пример сборки, чтобы попробовать анимацию перетаскиванием: [https://forum.freecadweb.org/download/file.php?id=99204 A2p_example-for-dragging-animation.FCStd]
* '''Solve automatically if a constraint property is changed'''<br/> The solver will automatically be started. The same as turning on the toolbar button [[Image:A2p ToggleAutoSolve.svg|24px]].
=== Behavior when updating imported parts ===


[[Image:A2p_dragging-animation-result.gif]]
* '''Recalculate imported parts before updating them'''<br/> All parts of the assembly, including subassemblies, will be opened in FreeCAD to be reconstructed using values from spreadsheets.<br/> This feature is designed to construct fully parametrically. '''Note:''' This feature is very experimental and not recommended for important projects.<br/> Known problems:
** The assembly can be destroyed because of wrong references to topological names in parts
** Master spreadsheets can get broken when they are edited while a referenced part file is already closed. This can crash FreeCAD.


{{Caption|Выше: анимация перетаскивания с использованием примера сборки}}
* '''Enable recursive update of imported parts'''<br/> Opens all subassemblies recursively to update them.


<span id="Scripting"></span>
* '''Use experimental topological naming'''<br/> While importing parts to the assembly an algorithm generates topological names for each subelement of the imported shape. The topological names are written into the {{PropertyData|mux Info}}. When an imported part needs to be updated, these topological names are used to update the subelements of the constraints. So assemblies get more robust against volatile subelement numbers of FreeCAD.<br/> '''Note:''' This increases file sizes and calculation time during importing of parts. If topological naming should be used it has to be activated before the assembly is created.
=== Скриптами ===


Хотя режим перетаскивания предлагает приятные интерактивные анимации, они порой недостаточно точны для скринкастов или видео. Скриптовые анимации имеют то преимущество, что они анимируют движения и вращения определенным образом. Например, вы можете повернуть деталь ровно на 10° назад и вперед. В следующих примерах используется сборка, в которой деталь должна вращаться. Если вы попытаетесь анимировать это с помощью режима перетаскивания, вы увидите, как трудно получить вращение вперед-назад, чтобы, например, показать своему боссу в презентации. С помощью интерактивного сценарного примера, в то же время, это простая задача.
* '''Inherit per face transparency from parts and subassemblies'''<br/> Use color and transparency settings from imported parts.<br/> '''Note:''' This feature is very experimental and not recommended for important projects.


Скриптовая анимация обычно работает следующим образом:
* '''Do not import invisible shapes'''<br/> This will hide invisible datum/construction shapes. '''Note:''' No constraints must be connected to datum/construction shapes in higher or other subassemblies. Otherwise you can break the assembly.
# Сборку полностью ограничивают
# Сценарий изменяет параметр, например, положение или угол поворота детали.
# После изменения параметра разрешаются ограничения сборки
# Шаг 2. и 3. повторяются, чтобы получить анимацию.


Также можно изменить вместо параметра размещения ограничение, например, расстояние между двумя плоскостями.
* '''Use solid union for importing parts and subassemblies'''<br/> All imported parts will directly be put together as union.<br/> This feature is useful for for [[FEM_Module|FEM]] simulations or [[Manual:Preparing_models_for_3D_printing|3D-printing]] if only one solid is allowed. The alternative is to create later a [[#Shape_of_whole_Assembly|shape of the whole assembly]].


<span id="Simple_Script_Example"></span>
=== User interface settings ===
==== Пример простого скрипта ====


Самый простой способ написать сценарий анимации - это неинтерактивная анимация, которая следует заданному движению. Вот пример:
* '''Show constraints in toolbar'''<br/> If this option is not used, the toolbar buttons for the different constraints are not visible to save space in the toolbar. New constraints can still be set using the ''Constraint Tools'' dialog (toolbar button [[Image:A2p DefineConstraints.svg|24px]]).
Сначала скачайте этот сборочный файл [https://forum.freecadweb.org/download/file.php?id=97554 A2p_animated-example.FCStd] и этот скрипт Python [https://forum.freecadweb.org/download/file.php?id=97981 A2p_animation-example-script.py].


<div class="mw-collapsible mw-collapsed toccolours">
=== Storage of files ===
Вот содержимое скрипта. Строки, начинающиеся с «#», описывают, что делают его разные строки:
<div class="mw-collapsible-content">
{{Code|code=
# импорт библиотек
import time, math, PySide
import A2plus.a2p_solversystem as a2p_solver


# используем шаг в 1 градус
* '''Use relative paths for imported parts'''<br/> Uses relative file paths to the part files.
step = 1
* '''Use absolute paths for imported parts'''<br/> Uses absolute file paths to the part files.
# ждём 1 ms между шагами
* '''All files are in this project folder:'''<br/> All project files have to be in the specified folder. It doesn't matter if they are in subfolders of this folder. '''Note:''' No file is allowed to exist several times in the folder (e.g. in different subfolders).<br/> This option is helpful to work on different machines because then one only has to copy the project folder.
timeout = 0.001
# начальный угол будет 0 градусов
angle = 0
# берём текущий открытый документ
document = FreeCAD.activeDocument()
# далее мы хотим менять угол вращения детали "star_wheel_001"
starWheel = document.getObject("star_wheel_001")
# определяем диалог хода выполнения от 0 до 360
progressDialog = PySide.QtGui.QProgressDialog(u"Animation progress", u"Stop", 0, 360)


# блок while является основным циклом для изменения угла и
== Troubleshooting ==
# разрешения ограничений сборки пошагово
while angle < 360: # запускает цикл пока мы не выполним полный оборот (360 градусов)
# прибавляем угол вращения
angle += step
# устанавливаем новый угол в диалоге хода выполнения
progressDialog.setValue(angle)
# изменение угла вращения детали "star_wheel_001"
starWheel.Placement.Rotation.Angle = math.radians(angle)
# разрешение ограничений
a2p_solver.solveConstraints(document, useTransaction=True)
# обновление вида после разрешения ('Gui' здесь графический интерфейс)
FreeCADGui.updateGui()
# вынесение диалога хода выполнения на первый план
PySide.QtGui.QWidget.raise_(progressDialog)
# если будет нажата кнопка 'Stop', выйти из цикла
if progressDialog.wasCanceled():
angle = 360
# сделать паузу перед следующим шагом
time.sleep(timeout)
}}
</div>
</div>


Чтобы использовать скрипт для выполнения анимации, мы должны
Sooner or later you will get the problem that A2plus cannot solve the constraints you set. To overcome this, there are different strategies:
# Открыть файл сборки в FreeCAD.
# Открыть файл скрипта во FreeCAD.
# Кликнуть кнопку на панели инструментов [[Image:Menu_Std_DlgMacroExecute_fr_02.png|24px]] для запуска скрипта (так же называемого макрос).
# Перейти на вкладку со сборкой для наблюдения за вращением.


Измените что-нибудь в скрипте для практики и запустите снова. Например, измените ''step'' на ''5''.
=== Checking Constraint Direction ===


Вот результат анимации примера:
Sometimes constraints seem to be consistently defined but they can nevertheless not be solved. An example: Assume you have a {{Variable|[[#Plane_Parallel|planesParallel]]}} constraint set for two planes. Now you want to set for the same planes the {{Variable|[[#Plane_on_Plane|planeCoincident]]}} constraint and A2plus cannot solve this. Then the constraint directions of {{Variable|planesParallel}} and {{Variable|planeCoincident}} are different. Use the same direction for both constraints to fix this.


[[Image:A2p animated-example-result.gif]]
=== Deleting Constraints ===


<span id="Interactive_Script_Example"></span>
Most cases of unsolvable constraints occur directly when adding a new constraint. The solution is then to delete the constraint you added the last. A2plus will also propose this.
==== Пример интерактивного скрипта ====


Пример первого скрипта показывает создание анимации без вмешательства пользователя. Для большинства приложений Вам нужно вмешиваться в ход анимации. Например, интересный момент в примере - посмотреть как ведущие штифты пересекают центральную канавку колеса. Для более внимательного просмотра Вам следует представить эту деталь коллегам или начальнику. Поэтому вам нужно интерактивное решение.
Sometimes the deletion strategy is the only one, for example when you edited a part in FreeCAD so that faces or edges connected to constraints are missing. You should then delete one constraint after another that is connected to the changed part. Use the toolbar button [[Image:A2p solver.svg|24px]] after every deletion to see if you reached a solvable state.


Это может быть сделано использованием пользовательского диалога анимации со слайдером. Перемещая слайдер, Вы можете установить угол вращения и вращать вперёд и назад в интересующей позиции.
When you got an assembly that can be solved, add step by step the constraints you need.


Мы используем тот же файл сборки [https://forum.freecadweb.org/download/file.php?id=97554 A2p_animated-example.FCStd], и другой скрипт Python [https://forum.freecadweb.org/download/file.php?id=97982 A2p_animation-example-script.py].
=== Moving Parts ===


<div class="mw-collapsible mw-collapsed toccolours">
In some cases the solver only needs better start values to solve the constraints. Take for example the case that you have an axle part and a wheel part. You add a {{Variable|axisCoincident }} constraint and get no info that the solver failed but the parts are not moved accordingly and in the ''Report view'' widget of FreeCAD you see "''REACHED POS-ACCURACY :0.0''". A solution for this is to move the parts closer to that position you like to get by the constraint.
Вот содержимое скрипта для получения диалога интерактивной анимации:
<div class="mw-collapsible-content">
{{Code|code=
# импорт библиотек
import time, math, PySide, sys
import FreeCAD.A2plus.a2p_solversystem as a2p_solver
from FreeCAD import Units
from PySide import QtCore, QtGui


# ждать 1 мс после каждого вычисления
'''Note:''' Assure that at least one part of the constraint has the property {{PropertyData|fixed Position}} set to ''false''.
timeout = 0.001
# мы берём текущий открытый документ
document = FreeCAD.activeDocument()
# нам нужно впоследствии изменять угол вращения детали "star_wheel_001"
starWheel = document.getObject("star_wheel_001")


class AnimationDlg(QtGui.QWidget): # диалог анимации
=== Setting the Tip Property ===


def __init__(self): # для инициализации диалога
If you miss some features of your part after the import to an A2plus assembly, check the property {{PropertyData|[[PartDesign_MoveTip|Tip]]}}.<br/>A2plus imports bodies of parts with all their features up to the tip feature. This is sensible because setting the tip to a certain feature means that all features behind the tip should not appear in the final part. So if you miss a part feature in A2plus, open the part via the toolbar button [[Image:A2p EditPart.svg|24px]], then select a body and look at its property {{PropertyData|Tip}}. If the tip is not at the feature where you want it, right-click on the feature where the tip should be and choose {{MenuCommand|[[File:PartDesign MoveTip.png|24px]] Set tip}}. Finally save the part and reload the assembly using the toolbar button [[Image:A2p ImportPart_Update.svg|24px]].
super(AnimationDlg, self).__init__()
self.initUI()


def initUI(self): # описание компонентов диалогового окна
=== Repairing Assembly Tree ===
self.setMinimumSize(self.minimumSizeHint()) # установливает минимальный размер диалогового окна на минимум
self.setWindowTitle('Animation Dialog')
# используем сеточный макет для всей формы
self.mainLayout = QtGui.QGridLayout()
self.lineNo = 0 # первая диалоговая строка в сетке
# добавить метку описания
DescriptionLabel = QtGui.QLabel(self)
DescriptionLabel.setText("Change slider to change rotation angle")
self.mainLayout.addWidget(DescriptionLabel,self.lineNo,0,1,4)
# следующая диалоговая строка в сетке
self.lineNo += 1
# добавьте метку; нет необходимости в префиксе "self.", потому что мы не хотим менять метку позже
LabelMin = QtGui.QLabel(self)
LabelMin.setText("Min")
LabelMin.setFixedHeight(32)
self.mainLayout.addWidget(LabelMin,self.lineNo,0)
# добавляем правку вращения, чтобы определить минимум ползунка
self.MinEdit = QtGui.QSpinBox(self)
# получаем единицы измерения угла в виде строки
self.MinEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
self.MinEdit.setMaximum(999)
self.MinEdit.setMinimum(0)
self.MinEdit.setSingleStep(10)
self.MinEdit.setValue(0)
self.MinEdit.setFixedHeight(32)
self.MinEdit.setToolTip("Minimal angle for the slider")
QtCore.QObject.connect(self.MinEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMinEdit)
self.mainLayout.addWidget(self.MinEdit,self.lineNo,1)
# добавляем ползунок
self.slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
self.slider.setRange(0, 360)
self.slider.setValue(0)
self.slider.setFixedHeight(32)
self.slider.setToolTip("Move the slider to change the rotation angle")
QtCore.QObject.connect(self.slider, QtCore.SIGNAL("sliderMoved(int)"), self.handleSliderValue)
self.mainLayout.addWidget(self.slider,self.lineNo,2)
# добавляем метку
LabelMax = QtGui.QLabel(self)
LabelMax.setText("Max")
LabelMax.setFixedHeight(32)
self.mainLayout.addWidget(LabelMax,self.lineNo,3)
# добавляем правку вращения, чтобы определить максимум ползунка
self.MaxEdit = QtGui.QSpinBox(self)
# получаем единицы измерения угла в виде строки
self.MaxEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
self.MaxEdit.setMaximum(999)
self.MaxEdit.setMinimum(1)
self.MaxEdit.setSingleStep(10)
self.MaxEdit.setValue(360)
self.MaxEdit.setFixedHeight(32)
self.MaxEdit.setToolTip("Maximal angle for the slider")
QtCore.QObject.connect(self.MaxEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMaxEdit)
self.mainLayout.addWidget(self.MaxEdit,self.lineNo,4)
# следующая диалоговая строка в сетке
self.lineNo += 1
# добовляем spacere
self.mainLayout.addItem(QtGui.QSpacerItem(10,10), 0, 0)
# добавляем метку
LabelCurrent = QtGui.QLabel(self)
LabelCurrent.setText("Current angle:")
LabelCurrent.setFixedHeight(32)
self.mainLayout.addWidget(LabelCurrent,self.lineNo,1)
# выводим текущий угол
self.CurrentAngle = QtGui.QLineEdit(self)
self.CurrentAngle.setText(str(0))
self.CurrentAngle.setFixedHeight(32)
self.CurrentAngle.setToolTip("Current rotation angle")
self.CurrentAngle.isReadOnly()
self.mainLayout.addWidget(self.CurrentAngle,self.lineNo,2)
# добавляем метку для единиц измерения
LabelUnit = QtGui.QLabel(self)
LabelUnit.setText("deg")
LabelUnit.setFixedHeight(32)
self.mainLayout.addWidget(LabelUnit,self.lineNo,3)
# кнопка для закрытия диалогового окна
self.Close = QtGui.QPushButton(self)
self.Close.setText("Close")
self.Close.setFixedHeight(32)
self.Close.setToolTip("Closes the dialog")
QtCore.QObject.connect(self.Close, QtCore.SIGNAL("clicked()"), self.CloseClicked)
self.mainLayout.addWidget(self.Close,self.lineNo,4)
# размещаем нашу размеченную сетку в диалоговом окна
self.setLayout(self.mainLayout)
self.update()


def handleSliderValue(self):
If you cannot see a clear reason why some constraints cannot be resolved, you can try to use the toolbar button [[Image:A2p RepairTree.svg|24px]]. This will resolve all constraints and re-group then again under the different parts.
# устанавливаем значение ползунка как угол
starWheel.Placement.Rotation.Angle = math.radians(self.slider.value())
# выводим текущий угол
self.CurrentAngle.setText(str(self.slider.value()))
# решаем ограничение
a2p_solver.solveConstraints(document)
# обновляем вид после решения ('Gui' stands for 'graphical user interface')
FreeCADGui.updateGui()
# ждём немного, т.к. нужно время для вычислений
time.sleep(timeout)


def setMinEdit(self):
=== Avoiding Accented Characters ===
# убеждаемся что минимум меньше максимума
if self.MinEdit.value() >= self.MaxEdit.value():
self.MaxEdit.setValue(self.MinEdit.value() + 1)
self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())


def setMaxEdit(self):
On some operating systems you can get problems if the file names or the file paths of parts or the assembly contain accented characters. Therefore avoid such characters and also special characters in general.
# убеждаемся что минимум меньше максимума
if self.MinEdit.value() >= self.MaxEdit.value():
self.MinEdit.setValue(self.MaxEdit.value() - 1)
self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())


def CloseClicked(self):
=== Fixing Position ===
AnimationDialog.close()


# создать и показать определённый выше диалог
'''This strategy is no longer necessary for assemblies created with A2plus 0.3.11 or newer because A2plus issues now a warning for missing fixed positions.'''
AnimationDialog = AnimationDlg()
AnimationDialog.show()


# запустить цикл когда диалог станет видим
When you set a constraint between two parts and no part has the property {{PropertyData|fixed Position}} set to ''true'' or is connected by a constraint to a part with {{PropertyData|fixed Position}} set to ''true'', the constraint cannot be solved. The same happens if both parts of the constraint have {{PropertyData|fixed Position}} set to ''true''.
while AnimationDialog.isVisible():
# обновить вид, важно чтобы дать обратную связь ОС для оживления диалога
FreeCADGui.updateGui()
# вынесение диалога вперёд, чтобы он был всегда видим
QtGui.QWidget.raise_(AnimationDialog)
# здесь так же выводится выходного ползунка, поскольку во время вычисления слайдер мог быть передвинут
AnimationDialog.CurrentAngle.setText(str(AnimationDialog.slider.value()))
}}
</div>
</div>


Диалог, определенный в скрипте, выглядит следующим образом:
Then A2plus outputs the info about the failed solution, but sometimes you only see that the parts are not moved accordingly and in the ''Report view'' widget of FreeCAD you see "''REACHED POS-ACCURACY :0.0''". This means the solver finished without errors but it could actually not solve the constraints.


[[Image:A2p_AnimationDialog.png]]
Therefore check that at least one of your parts in the assembly has {{PropertyData|fixed Position}} set to ''true''. Then assure that you only set constraints to a part which is somehow connected to the fixed part. To visualize these dependencies, see section [[#Assembly_Structure|Assembly Structure]].


<span id="Script_Commands"></span>
=== Rotating Parts ===
=== Команды скрипта ===


Чтобы лучше понять синтаксис скрипта, вот некоторая информация о командах:
'''This strategy is no longer necessary for assemblies created with A2plus 0.4.0 or newer because A2plus rotates the parts now automatically a bit in the background to get a sufficient start angle for the solver.'''
{{Code|code= starWheel.Placement.Rotation.Angle = math.radians(angle)}}


Здесь мы меняем свойство размещения {{incode|Rotation.Angle}} детали, которая была преждде взята как {{incode|starWheel}}. Это свойство даёт угол в [https://ru.wikipedia.org/wiki/Радиан радианах]. Функция {{incode|radians()}} из библиотеки {{incode|math}} преобразует угол из градусов в радианы.
The solver often fails for the constraint {{Variable|angledPlanes}} if the two selected planes have currently an angle of 0° or 180°. (The parts are not moved accordingly and in the ''Report view'' widget of FreeCAD you see "''REACHED POS-ACCURACY :0.0''".) A solution for this is to rotate one part by a few degrees using FreeCAD's transform feature (right-click on the part in the model tree and select in the context menu {{MenuCommand|Transform}}).


Свойство {{incode|Rotation.Angle}} использует текущее размещение осей детали (в нашем примере ось X). Для вращения детали, например, вокруг оси Z, надо установить ось вращения (перед вызовом команды вращения), используя команду:
'''Note:''' Assure that at least one part of the constraint has the property {{PropertyData|fixed Position}} set to ''false''.
{{Code|code= starWheel.Placement.Rotation.Axis = FreeCAD.Vector(0,0,1)}}
Вместо вращения деталь может перемещаться. Чтобы изменить, например, размещение в направлении оси Y оси, команда должна быть:
{{Code|code= starWheel.Placement.Base.y = PositionShift}}
В этом случае мы должны определять не переменную {{incode|angle}}, а {{incode|PositionShift}}, которую мы меняем каждый проход цикла.


Существуют разные способы установки размещения детали. Некоторые [[Placement/ru|документированы здесь]]. К сожалению, списка со всеми возможными командами размещения не существует (пока).
{{Userdocnavi}}
{{Code|code=a2p_solver.solveConstraints(document, useTransaction=False/True)}}


Это специфичная для A2plus команда. Она разрешает сборочные ограничения сборки, которую мы ранее получили как {{incode|document}}. Опция {{incode|useTransaction}} указывает, если FreeCAD должен сохранять каждое изменение в стеке отмены/повтора. Поэтому для долгой анимации Вам следует установить её в {{FALSE}}.
[[Category:Addons]]


{{Userdocnavi{{#translation:}}}}
[[Category:External Workbenches]]
[[Category:Addons{{#translation:}}]]
[[Category:External Workbenches{{#translation:}}]]

Latest revision as of 09:08, 23 January 2023

Иконка верстака A2plus

Введение

Верстак A2plus - это внешний верстак для создания сборок деталей в FreeCAD.

Эта документация описывает версию A2plus 0.4.56 или новее.

Установка

Верстак A2plus - это дополнение к FreeCAD. Его легко установить через меню Инструменты → Менеджер дополнений. A2plus находится в стадии активной разработки и будет часто получать новые функции. Поэтому вы должны регулярно обновлять его, используя меню Инструменты → Менеджер дополнений. Код A2plus размещается и разрабатывается на GitHub, а также может быть установлен вручную путем копирования его в каталог MOD FreeCAD.

Начало работы

Сначала переключитесь на панель инструментов A2plus во FreeCAD. Для создания сборки создайте новый файл в FreeCAD. Сначала этот файл нужно сохранить. Рекомендуется (но не обязательно) сохранять его в той же папке, что будущая сборка деталей.

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

Первая добавленная часть получает фиксированную позицию по умолчанию. (Это можно изменить позже через свойство детали Данныефиксированная позиция.)

Детали, уже находящиеся в сборке, можно клонировать с помощью кнопки на панели инструментов .

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

Чтобы импортировать изменения деталей в сборку, нажмите кнопку на панели инструментов . Кнопка на пранели тоже импортирует детали, но по возможности рекурсивно подсборки. Если Вы выберете одну или несколько частей в древе проекта FreeCAD, A2plus запросит Вас об обновлении только выбранных частей.

Импортированные части сохранят свои внешние зависимости и могут быть отредактированы. Однако для стандартных частей, таких как винты, полезно, чтобы их форму нельзя было редактировать. Это может быть достигнуто с помощью кнопки на панели инструментов , которая преобразует выбранную деталь в статическую копию оригинальной детали.

Чтобы сохранить сборку и затем закрыть ее, можно использовать кнопку на панели инструментов .

Toggling the toolbar button sets the way you can select several several edges, faces etc.: Either with a single click or by Ctrl+click.

Сборка

Сборка деталей осуществляется путем добавления ограничений между деталями. После введения ограничения A2plus переместит детали в соответствии с ограничением, если это возможно.

Ограничения между деталями добавляются удерживанием клавиши Ctrl и выбором ребра или грани двух частей. Затем нажмите кнопку на панели инструментов нужного ограничения. Появится диалог, определённый в разделе Constraints. Ограничение будет добавлено в дереве модели к выделенным деталям.

Для сложных ограничений между частями A2plus может не справится с расположением деталей. Поэтому также ознакомьтесь с разделом Устранение неполадок, чтобы узнать, как решить такие случаи.

Отслеживание

Чем больше частей вы добавляете, тем важнее сохранять возможность их отслеживания. A2plus предлагает следующие инструменты для перемещения и просмотра деталей:

  • Чтобы переместить деталь в сборке, выберите ее в дереве модели и используйте кнопку на панели инструментов . Когда вы разместите деталь там, где вам это нравится, щелкните левой кнопкой мыши. Если перемещенная деталь уже имеет ограничения, она будет размещена соответствующим образом при нажатии кнопки на панели инструментов , потому что это инициирует разрешение всех ограничений сборки.
  • Чтобы отобразить ограничение, выберите его в дереве модели и используйте кнопку на панели инструментов . Это сделает всю сборку прозрачной и выделит два объекта, связанных ограничениями. Чтобы вернуться к обычному виду, щелкните левой кнопкой мыши по сборке.
  • Чтобы показать только определенные детали в сборке, выберите эти детали в дереве модели и используйте кнопку на панели инструментов . В качестве альтернативы вы можете скрыть определенную деталь, выбрав ее в дереве модели и нажав Space, чтобы переключить ее видимость.
  • Для переключения вида прозрачности всей сборки вы можете использовать кнопку панели инструментов .
  • Каждая деталь может быть сделана прозрачной при использовании обычного редактирования FreeCAD. Однако, иногда установки прозрачности деталей пропадают при повторном открытии сборки из-за ошибки в FreeCAD. В качестве обходного пути можно использовать кнопку на панели для восстановления установок прозрачности.

Ограничения

При создании ограничения, после нажатия кнопки на панели инструментов ограничения, будет отображаться такой диалог:

Выше: Диалог параметров ограничений A2plus

Для определенных ограничений это позволяет вам изменить направление ограничения. С помощью кнопки Solve вы можете заранее проверить, может ли это новое ограничение быть решено с помощью A2plus. Если нет, загляните в раздел Разрешение проблем.

Ограничения могут быть сброшены изменением их видимости. Это делается выбором ограничения в древе проекта и нажатием Space. Это переключает свойство ДанныеSuppressed (подавлено). Подавленное ограничение не учитывается при разрешении сборки.

A2plus поддерживает следующие ограничения:

Точка на точке

Выберите Вершины (точки) в каждой детали. Кнопка на панели инструментов добавляет ограничение pointIdentity. Это сделает точки совпадающими.

Точка на линии

Выберите вершину (точку), или край окружности (выберет ее центр), или поверхность сферы (также выберет ее центр) и край детали. Кнопка на панели инструментов добавляет ограничение pointOnLine. Это поместит точку на край.

Точка на плоскости

Выберите вершину (точку), или край окружности (выберет ее центр), или поверхность сферы (также выберет ее центр) и плоскость. Кнопка на панели инструментов добавляет ограничение pointOnPlane. Диалог ограничений позволяет указать смещение между точкой и плоскостью. Это смещение также можно переключать между обеими сторонами плоскости. Если смещение равно нулю, ограничение поместит вершину на плоскость.

Сфера на Сфере

Выберите поверхность сфер или вершины (точки) на обеих деталях. Кнопка на панели инструментов добавляет ограничение phereCenterIdent. Это совместит центры сфер, центр сферы и точку, либо вершины.

Круговая кромка на круговой кромке

Выберите край окружности на обеих деталях. Кнопка на панели инструментов добавляет ограничение roundEdge. Диалог ограничений позволяет указать смещение между краями. Это смещение также можно перевернуть. Кроме того, вы можете установить направление ограничения и заблокировать вращение частей. Если смещение равно нулю, ограничение поместит края окружности в одной плоскость.

Совпадение по оси

Выберите поверхность сферы или края линий на обеих частях. Кнопка на панели инструментов добавляет ограничение axisCoincident. Диалог ограничений позволяет указать направление оси. Диалог позволяет вам также заблокировать вращение частей. Ограничение сделает оси или линии совпадающими.

Параллельные оси

Выберите поверхность сферы или края линий на обеих частях. Кнопка на панели инструментов добавляет ограничение axisParallel. Диалог ограничений позволяет указать направление оси. Ограничение сделает оси или линии параллельными.

Ось параллельно плоскости

Выберите цилиндрическую поверхность или линейные края детали и плоскость на другой детали. Кнопка на панели инструментов добавляет ограничение axisPlaneParallel. Ограничение сделает ось или линию параллельной плоскости.

Ось нормально плоскости

Выберите цилиндрическую поверхность или линейные края детали и плоскость на другой детали. Кнопка на панели инструментов добавляет ограничение axisPlaneNormal. Ограничение сделает ось или линию нормальной плоскости.

Ось под углом к плоскости

Выберите цилиндрическую поверхность или линейные края детали и плоскость на другой детали. Кнопка панели инструментов добавляет ограничение axisPlaneAngle. Это ограничение сначала сделает оси параллельными плоскости. Затем вы можете отрегулировать угол для оси в появившемся диалоговом окне настроек ограничения.

Плоскости Параллельны

Выберите две плоскости. Кнопка на панели инструментов добавляет ограничение planesParallel. Диалог ограничений позволяет вам указать направление ограничения. Ограничение сделает плоскости параллельными.

Плоскость на Плоскости

Выберите две плоскости. Кнопка на панели инструментов добавляет ограничение planeCoincident. Диалог ограничений позволяет указать направление ограничения и смещение между плоскостями. Это смещение также можно перевернуть. Если смещение равно нулю, ограничение сделает плоскости совпадающими.

Плоскость под углом

Выберите две плоскости. Кнопка на панели инструментов добавляет ограничение angledPlanes. Диалог ограничений позволяет указать угол между плоскостями. Ограничение сначала сделает плоскости параллельными и установит из под заданным углом.

Совпадение в Центре масс

Выберите либо две замкнутые области, либо две плоскости. Кнопка на панели инструментов добавляет ограничение centerOfMass. Диалог ограничений позволяет указать смещение между краями или плоскостями. Это смещение также можно перевернуть. Кроме того, вы можете установить направление ограничения и заблокировать вращение частей. Если смещение равно нулю, ограничение поместит области или плоскости в одну плоскость.

Узлы сборки

Сборка может содержать другие сборки. Они добавляются как детали путем нажатия кнопки на панели инструментов и выбора файла * .FCStd, содержащего сборку. Такие узлы также можно редактировать как детали, используя кнопку на панели инструментов . Убедитесь, что для более высоких этапов сборки вы обновили сборку рекурсивно с помощью кнопки на панели инструментов , когда произошли изменения.

Обработка ограничений

Возможные ограничения для выбора отображаются на панели инструментов и в диалоговом окне «Инструменты ограничения» при включении соответствующих кнопок. Диалоговое окно «Инструменты ограничения» открывается с помощью кнопки панели инструментов . Он должен оставаться открытым, чтобы можно было быстро добавить несколько ограничений в сборку.

Существующие ограничения можно отредактировать, выбрав их в дереве модели, а затем дважды щелкнув по нему или нажав кнопку на панели инструментов . Откроется диалоговое окно «Свойства ограничения».

Ограничения могут быть временно отключены выделением их в древе модели и изменением у элемента параметра ДанныеSuppressed.

Ограничения можно удалить, выбрав их в дереве модели и нажав Del, или выбрав деталь с ограничениями в дереве модели и нажать кнопку на панели инструментов .

Все ограничения могут быть разрешены в любое время с помощью кнопки на панели инструментов . Если кнопка панели инструментов включена, разрешение выполняется автоматически после каждого редактирования ограничения.

Кнопка на панели инструментов влияет на ограничение, которое было недавно добавлено. Это переворачивает направление ограничения.

With the tool, it is possible the show and inspect existing constraints. After clicking it a dialog pops up. Then either select a part in the tree and click the button Import from part to get all constraints of this part, or select one or more constraints in the tree and click the button Import from Tree. As result you get all info about the constraints. By clicking in the column Suppress a single constraint can be suppressed. For more features, follow the tooltips of the other dialog buttons.

Списки деталей

Чтобы создать списки деталей сборок, разные детали сборки должны получить информацию о детали, которая может быть прочитана A2plus. Это делается путем редактирования детали с помощью кнопки на панели инструментов . В открывшейся части нажмите кнопку панели инструментов и электронная таблица с именем #PARTINFO#.

Структура электронной таблицы выглядит следующим образом:

Заполните серые поля имеющейся информацией. Эта информация будет отображена в окончательном списке деталей.

В сборке или узле сборки используйте кнопку на панели инструментов . Он спросит вас, хотите ли вы выполнить рекурсивную итерацию по всем узлам сборки. Нажмите «Да». Это создаст новую электронную таблицу с именем #PARTSLIST#. Он содержит информацию из различных электронных таблиц деталей PARTSINFO# в списке вида:

Положение (POS) автоматически устанавливается в соответствии с внешним видом деталей в дереве модели. Часть верхнего уровня получит POS 1.

Количество (QTY) автоматически рассчитывается из сборки. Если деталь в сборке дважды, то QTY будет равно 2.

Если вы обновили информацию о детали, вы можете обновить список деталей, снова нажав кнопку на панели инструментов .

Для сборочных узлов вы также можете создать информационную электронную таблицу с помощью кнопки на панели инструментов . Когда вы создаете или обновляете список деталей главной сборки, эта информация будет использоваться, если вы ответите «Нет» на вопрос, хотите ли вы рекурсивно выполнять итерации по всем узлам сборки. Тогда разные детали будут находится не в списке деталей, а только в узлах сборки.

Специальные возможности

Структура сборки

Кнопка на панели инструментов создает файл HTML со структурой вашей сборки. Файл по умолчанию будет создан в текущем каталоге вашей сборки. Структура выглядит следующим образом:

Степени свободы

Кнопка помечает каждую часть сборки степенями свободы. Кроме того, он выводит список со всеми деталями и их зависимостями. Список выводится в виджет FreeCAD «Представление отчета». Если этот виджет в настоящее время не отображается, его можно отобразить, щелкнув правой кнопкой мыши пустую часть области панели инструментов FreeCAD и выбрав его в появившемся контекстном меню, или с помощью меню View → Panels → Просмотр отчета.

Метки степеней свободы можно удалить, повторно нажав кнопку .

Метки деталей

Кнопка присваивает каждой детали сборки в 3D-виде уникальное имя. Метки деталей можно удалить повторно нажав кнопку .

Вид всей сборки

Иногда необходимо объединить всю сборку в одну форму. Затем эту форму можно использовать, например, для 3D-печати в Mesh Workbench или для создания чертежей в TechDraw Workbench. Он создается с помощью кнопки панели инструментов . Форма по умолчанию не отображается. Используйте ту же кнопку на панели инструментов, чтобы обновить форму в случае изменений в сборке.

Конвертировать абсолютные пути в относительные

С помощью меню A2plus → Misc → Convert absolute paths of imported parts to relative ones Вы можете конвертировать абсолютные пути импортированных деталей в относительные.

Настройки

Доступ к настройкам a2plus можно получить через меню FreeCAD Edit → Preferences выбрав раздел «A2plus». Вы можете установить следующие параметры:

Метод решения по умолчанию

Использовать решения частичных систем
Решатель начинает с детали, для которой свойство Данныефиксированная позиция установлено в значение true, а часть ограничена этим. Все остальные части не рассчитываются. Если решение может быть найдено, добавляется следующая часть ограничений для расчета и так далее.
Использовать «магнитный» решатель, решая все детали одновременно
Решатель пытается переместить все детали сразу в направлении к детали, у которой свойство Данныефиксированная позиция установлено в true. Обратите внимание, что в большинстве случаев это займет больше времени для расчета.
Принудительно фиксировать положение
Для всех деталей в сборке свойство Данныефиксированная позиция устанавливается в значение true. Тогда никакие расчеты фактически не выполняются, поскольку все детали всегда будут привязаны к позициям, в которых они были созданы.

Поведение решателя по умолчанию

Solve automatically if a constraint property is changed
The solver will automatically be started. The same as turning on the toolbar button .


Решить автоматически, если изменён параметр ограничения
Решатель будет запущен автоматически. Аналогично включению кнопки на панели инструментов .

Поведение при обновлении импортированных деталей

Пересчитать импортированные детали перед их обновлением
Все детали сборки, включая узлы сборок, будут открыты в FreeCAD для реконструкции с использованием значений из электронных таблиц.
Эта функция предназначена для полного параметрирования конструкции. Примечание: Эта функция очень экспериментальная и не рекомендуется для важных проектов.
Известные проблемы:
  • Сборка может быть уничтожена из-за неправильных ссылок на топологические имена в деталях
  • Основные электронные таблицы могут быть повреждены, когда они редактируются, а файл детали уже закрыт. Это может привести к краху FreeCAD.
Включить рекурсивное обновление импортированных деталей
Открывает все узлы сборки рекурсивно для их обновления.
Использовать экспериментальное топологическое именование
При импорте деталей в сборку алгоритм генерирует топологические имена для каждого узла сборки импортируемой фигуры. Топологические имена записываются в Данныеmux Info. Когда импортируемая деталь должна быть обновлена, эти топологические имена используются для обновления подэлементов ограничений. Таким образом, сборки становятся более устойчивыми к изменчивым числам подэлементов в FreeCAD.
'Примечание:' Это увеличивает размеры файлов и время расчета при импорте деталей. Если необходимо использовать топологическое именование, оно должно быть активировано до создания сборки.
Наследовать прозрачность для каждой поверхности из деталей и узлов
Использовать настройки цвета и прозрачности из импортированных деталей.
Примечание: Эта функция очень экспериментальная и не рекомендуется для важных проектов.
Не импортировать невидимые фигуры
Это позволит скрыть невидимые базовые / строительные фигуры. Примечание: Никакие ограничения не должны быть связаны с опорными / конструктивными формами в вышестоящих или других сборочных узлах. В противном случае вы можете сломать сборку.
Использовать сплошное объединение для импорта деталей и сборочных узлов
Все импортированные детали будут напрямую объединены в объединение.
Эта функция полезна для моделирования FEM или 3D-печать, если разрешено только одно тело. Альтернативой является создание вида всей сборки позже.

Настройки интерфейса пользователя

Показать ограничения на панели инструментов
Если эта опция не используется, кнопки панели инструментов для различных ограничений не видны, чтобы сэкономить место на панели инструментов. Новые ограничения по-прежнему можно установить с помощью диалогового окна «Инструменты ограничения» (кнопка на панели инструментов ).

Хранение файлов

Использовать относительные пути для импортированных деталей
Использует относительные пути к файлам деталей.
Использовать абсолютные пути для импортированных деталей
Использует абсолютные пути к файлам деталей.
Все файлы находятся в этой папке проекта
Все файлы проекта должны находиться в указанной папке. Не имеет значения, находятся ли они в подпапках этой папки. 'Примечание:' Одинаковые файлы не могут присутствовать несколько раз в папке (например, в разных подпапках).
Эта опция полезна для работы на разных машинах, потому что тогда нужно только скопировать папку проекта.

Разрешение проблем

Рано или поздно у вас возникнет проблема, что A2plus не может решить установленные вами ограничения. Чтобы преодолеть это, существуют разные стратегии:

Использование Conflict Finder Tool

Conflict Finder Tool (Инструмент Поиска Конфликтов) - Это самый безопасный метод, когда у вас есть несколько ограничений, потому что этот инструмент пытается решить одно ограничение за другим, пока не найдет конфликтующее ограничение. Затем вы можете перейти к другим стратегиям для устранения выявленного ограничения. Инструмент вызывается с помощью кнопки на панели инструментов .

Проверка направления ограничения

Иногда кажется, что ограничения определены последовательно, но они, тем не менее, не могут быть решены. Пример: Предположим, у вас есть ограничение planesParallel для двух плоскостей. Теперь вы хотите установить для этих же плоскостей ограничение planeCoincident, и A2plus не может решить эту проблему. Тогда направления ограничений planesParallel и planeCoincident различны. Используйте одно и то же направление для обоих ограничений, чтобы исправить это.

A2plus предлагает автоматическую проверку правильных направлений для всех ограничений, используя кнопку панели инструментов .

Удаление ограничений

Большинство случаев неразрешимых ограничений происходит непосредственно при добавлении нового ограничения. Решение состоит в том, чтобы удалить ограничение, которое вы добавили последним. A2plus также предложит это.

Иногда стратегия удаления является единственной, например, когда вы отредактировали деталь в FreeCAD так, что грани или ребра, связанные с ограничениями, отсутствуют. Затем следует удалить ограничение по одному, которое связано с измененной деталью. Используйте кнопку на панели инструментов после каждого удаления, чтобы увидеть, достигли ли вы разрешимого состояния.

Когда вы получите сборку, которую можно решить, добавьте шаг за шагом необходимые ограничения.

Перемещение деталей

В некоторых случаях решателю нужны только лучшие начальные значения для решения ограничений. Возьмем, к примеру, случай, когда у вас есть осевая часть и колесная часть. Вы добавляете ограничение axisCoincident и не получаете информации о том, что решатель не выполнен, но части не перемещаются соответствующим образом, и в виджете «Представление отчета» FreeCAD вы видите "REACHED POS-ACCURACY: 0.0". Решением для этого является перемещение деталей ближе к той позиции, которую вы хотите получить с помощью ограничения.

Примечание: Убедитесь, что хотя бы для одной части ограничения свойство Данные фиксированная позиция установлено в значение false.

Настройка свойства Tip

Если вы пропустили некоторые функции своей детали после импорта в сборку A2plus, проверьте свойство ДанныеTip.

A2plus импортирует тела деталей со всеми их функциями вплоть до свойства Tip. Это разумно, потому что установка Tip на определенную функцию означает, что все функции после Tip не должны появляться в итоговой детали. Так что если Вы пропустили функцию детали в A2plus, откройте деталь через кнопку панели инструментов , выделите тело и посмотрите свойство ДанныеTip. Если это свойство не в той функции, где нужно, сделайте правый клик на функции, где оно должно быть и выберите Set tip.Затем сохраните деталь и перезагрузите сборку с помощью кнопки на панели инструментов .

Восстановление дерева сборки

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

Перенос старых сборок A2plus

Сборки, созданные с A2plus старше марта 2019 года, не показывают правильные значки для импортированных деталей и имеют устаревшие свойства. Эти сборки можно перенести в A2plus версии 0.4.35 и новее, используя меню A2plus → Misc → Migrate proxies of imported parts. Сделав это, вы должны сохранить и снова открыть файл сборки.

Избегайте символов подчеркивания

Эта стратегия не нужна для Windows.

В некоторых операционных системах могут возникнуть проблемы, если имена файлов или пути к файлам деталей или сборки содержат символы с подчеркиванием. Поэтому избегайте таких символов, а также специальных символов в целом.

Фиксированная позиция

Эта стратегия больше не нужна для сборок, созданных с использованием A2plus 0.3.11 или новее, поскольку A2plus теперь выдает предупреждение о пропущенных фиксированных позициях.

Когда вы устанавливаете ограничение между двумя деталями, и ни одна деталь не имеет свойств Данные фиксированная позиция установленным в true или связано ограничением с деталью с Данные фиксированная позиция установленным в true, ограничение не может быть решено. То же самое происходит, если в обеих частях ограничения Данные фиксированная позиция установлено значение true.

Затем A2plus выводит информацию о неудачном решении, но иногда вы видите только то, что детали не перемещаются соответствующим образом, и в виджете «Представление отчета» FreeCAD вы видите «REACHED POS-ACCURACY: 0.0». Это означает, что решатель завершил работу без ошибок, но на самом деле он не смог решить ограничения.

Поэтому убедитесь, что хотя бы для одной из ваших деталей в сборке Данныефиксированная позиция установлено значение true. Затем убедитесь, что вы устанавливаете ограничения только для детали, которая каким-то образом связана с фиксированной деталью. Чтобы визуализировать эти зависимости, см. Раздел Структура сборки.

Вращение деталей

Эта стратегия больше не требуется для сборок, созданных с использованием A2plus 0.4.0 или новее, поскольку A2plus автоматически поворачивает детали в фоновом режиме, чтобы получить достаточный начальный угол для решателя.

Решатель часто не выполняется для ограничения angledPlanes, если две выбранные плоскости в настоящее время имеют угол 0 ° или 180 °. (Части не перемещаются соответственно, и в виджете «Просмотр отчета» FreeCAD вы видите «REACHED POS-ACCURACY: 0.0».) Решение этой проблемы - повернуть одну часть на несколько градусов с помощью FreeCAD функция преобразования (щелкните правой кнопкой мыши деталь в дереве модели и выберите в контекстном меню Transform).

Примечание: Убедитесь, что хотя бы для одной части ограничения свойство Данные фиксированная позиция установлено в значение false.

Анимация

A2plus предлагает анимацию с помощью перетаскивания и скриптов Python.

Перетаскиванием

Анимация перетаскиванием интерактивна, поскольку вы запускаете её, перетаскивая часть сборки. Чтобы получить этот тип анимации:

  1. Полностью ограничьте деталь, движение или вращение которой нужно анимировать.
  2. Нажмите на кнопку панели инструментов . Это включает режим перетаскивания.
  3. Нажмите на нужную деталь в сборке.
  4. Теперь вы можете перемещать мышь, и деталь будет следовать за движением мыши в пределах установленных ограничений.
  5. Чтобы завершить режим перетаскивания, щелкните левой кнопкой мыши в сборке или нажмите ESC.

Вот пример сборки, чтобы попробовать анимацию перетаскиванием: A2p_example-for-dragging-animation.FCStd

Выше: анимация перетаскивания с использованием примера сборки

Скриптами

Хотя режим перетаскивания предлагает приятные интерактивные анимации, они порой недостаточно точны для скринкастов или видео. Скриптовые анимации имеют то преимущество, что они анимируют движения и вращения определенным образом. Например, вы можете повернуть деталь ровно на 10° назад и вперед. В следующих примерах используется сборка, в которой деталь должна вращаться. Если вы попытаетесь анимировать это с помощью режима перетаскивания, вы увидите, как трудно получить вращение вперед-назад, чтобы, например, показать своему боссу в презентации. С помощью интерактивного сценарного примера, в то же время, это простая задача.

Скриптовая анимация обычно работает следующим образом:

  1. Сборку полностью ограничивают
  2. Сценарий изменяет параметр, например, положение или угол поворота детали.
  3. После изменения параметра разрешаются ограничения сборки
  4. Шаг 2. и 3. повторяются, чтобы получить анимацию.

Также можно изменить вместо параметра размещения ограничение, например, расстояние между двумя плоскостями.

Пример простого скрипта

Самый простой способ написать сценарий анимации - это неинтерактивная анимация, которая следует заданному движению. Вот пример: Сначала скачайте этот сборочный файл A2p_animated-example.FCStd и этот скрипт Python A2p_animation-example-script.py.

Вот содержимое скрипта. Строки, начинающиеся с «#», описывают, что делают его разные строки:

# импорт библиотек
import time, math, PySide
import A2plus.a2p_solversystem as a2p_solver

# используем шаг в 1 градус
step = 1
# ждём 1 ms между шагами
timeout = 0.001
# начальный угол будет 0 градусов
angle = 0
# берём текущий открытый документ
document = FreeCAD.activeDocument()
# далее мы хотим менять угол вращения детали "star_wheel_001"
starWheel = document.getObject("star_wheel_001")
# определяем диалог хода выполнения от 0 до 360
progressDialog = PySide.QtGui.QProgressDialog(u"Animation progress", u"Stop", 0, 360)

# блок while является основным циклом для изменения угла и 
# разрешения ограничений сборки пошагово
while angle < 360: # запускает цикл пока мы не выполним полный оборот (360 градусов)
    # прибавляем угол вращения
    angle += step
    # устанавливаем новый угол в диалоге хода выполнения
    progressDialog.setValue(angle)
    # изменение угла вращения детали "star_wheel_001"
    starWheel.Placement.Rotation.Angle = math.radians(angle)
    # разрешение ограничений
    a2p_solver.solveConstraints(document, useTransaction=True)
    # обновление вида после разрешения ('Gui' здесь графический интерфейс)
    FreeCADGui.updateGui()
    # вынесение диалога хода выполнения на первый план
    PySide.QtGui.QWidget.raise_(progressDialog)
    # если будет нажата кнопка 'Stop', выйти из цикла
    if progressDialog.wasCanceled():
        angle = 360
    # сделать паузу перед следующим шагом
    time.sleep(timeout)

Чтобы использовать скрипт для выполнения анимации, мы должны

  1. Открыть файл сборки в FreeCAD.
  2. Открыть файл скрипта во FreeCAD.
  3. Кликнуть кнопку на панели инструментов для запуска скрипта (так же называемого макрос).
  4. Перейти на вкладку со сборкой для наблюдения за вращением.

Измените что-нибудь в скрипте для практики и запустите снова. Например, измените step на 5.

Вот результат анимации примера:

Пример интерактивного скрипта

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

Это может быть сделано использованием пользовательского диалога анимации со слайдером. Перемещая слайдер, Вы можете установить угол вращения и вращать вперёд и назад в интересующей позиции.

Мы используем тот же файл сборки A2p_animated-example.FCStd, и другой скрипт Python A2p_animation-example-script.py.

Вот содержимое скрипта для получения диалога интерактивной анимации:

# импорт библиотек
import time, math, PySide, sys
import FreeCAD.A2plus.a2p_solversystem as a2p_solver
from FreeCAD import Units
from PySide import QtCore, QtGui

# ждать 1 мс после каждого вычисления
timeout = 0.001
# мы берём текущий открытый документ
document = FreeCAD.activeDocument()
# нам нужно впоследствии изменять угол вращения детали "star_wheel_001"
starWheel = document.getObject("star_wheel_001")

class AnimationDlg(QtGui.QWidget): # диалог анимации

    def __init__(self): # для инициализации диалога
        super(AnimationDlg, self).__init__()
        self.initUI()

    def initUI(self): # описание компонентов диалогового окна
        self.setMinimumSize(self.minimumSizeHint()) # установливает минимальный размер диалогового окна на минимум
        self.setWindowTitle('Animation Dialog')
        # используем сеточный макет для всей формы
        self.mainLayout = QtGui.QGridLayout()
        self.lineNo = 0 # первая диалоговая строка в сетке
        # добавить метку описания
        DescriptionLabel = QtGui.QLabel(self)
        DescriptionLabel.setText("Change slider to change rotation angle")
        self.mainLayout.addWidget(DescriptionLabel,self.lineNo,0,1,4)
         # следующая диалоговая строка в сетке
        self.lineNo += 1
        # добавьте метку; нет необходимости в префиксе "self.", потому что мы не хотим менять метку позже
        LabelMin = QtGui.QLabel(self)
        LabelMin.setText("Min")
        LabelMin.setFixedHeight(32)
        self.mainLayout.addWidget(LabelMin,self.lineNo,0)
        # добавляем правку вращения, чтобы определить минимум ползунка
        self.MinEdit = QtGui.QSpinBox(self)
        # получаем единицы измерения угла в виде строки
        self.MinEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
        self.MinEdit.setMaximum(999)
        self.MinEdit.setMinimum(0)
        self.MinEdit.setSingleStep(10)
        self.MinEdit.setValue(0)
        self.MinEdit.setFixedHeight(32)
        self.MinEdit.setToolTip("Minimal angle for the slider")
        QtCore.QObject.connect(self.MinEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMinEdit)
        self.mainLayout.addWidget(self.MinEdit,self.lineNo,1)
        # добавляем ползунок
        self.slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
        self.slider.setRange(0, 360)
        self.slider.setValue(0)
        self.slider.setFixedHeight(32)
        self.slider.setToolTip("Move the slider to change the rotation angle")
        QtCore.QObject.connect(self.slider, QtCore.SIGNAL("sliderMoved(int)"), self.handleSliderValue)
        self.mainLayout.addWidget(self.slider,self.lineNo,2)
        # добавляем метку
        LabelMax = QtGui.QLabel(self)
        LabelMax.setText("Max")
        LabelMax.setFixedHeight(32)
        self.mainLayout.addWidget(LabelMax,self.lineNo,3)
        # добавляем правку вращения, чтобы определить максимум ползунка
        self.MaxEdit = QtGui.QSpinBox(self)
        # получаем единицы измерения угла в виде строки
        self.MaxEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
        self.MaxEdit.setMaximum(999)
        self.MaxEdit.setMinimum(1)
        self.MaxEdit.setSingleStep(10)
        self.MaxEdit.setValue(360)
        self.MaxEdit.setFixedHeight(32)
        self.MaxEdit.setToolTip("Maximal angle for the slider")
        QtCore.QObject.connect(self.MaxEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMaxEdit)
        self.mainLayout.addWidget(self.MaxEdit,self.lineNo,4)
         # следующая диалоговая строка в сетке
        self.lineNo += 1
        # добовляем spacere
        self.mainLayout.addItem(QtGui.QSpacerItem(10,10), 0, 0)
        # добавляем метку
        LabelCurrent = QtGui.QLabel(self)
        LabelCurrent.setText("Current angle:")
        LabelCurrent.setFixedHeight(32)
        self.mainLayout.addWidget(LabelCurrent,self.lineNo,1)
        # выводим текущий угол
        self.CurrentAngle = QtGui.QLineEdit(self)
        self.CurrentAngle.setText(str(0))
        self.CurrentAngle.setFixedHeight(32)
        self.CurrentAngle.setToolTip("Current rotation angle")
        self.CurrentAngle.isReadOnly()
        self.mainLayout.addWidget(self.CurrentAngle,self.lineNo,2)
        # добавляем метку для единиц измерения
        LabelUnit = QtGui.QLabel(self)
        LabelUnit.setText("deg")
        LabelUnit.setFixedHeight(32)
        self.mainLayout.addWidget(LabelUnit,self.lineNo,3)
        # кнопка для закрытия диалогового окна
        self.Close = QtGui.QPushButton(self)
        self.Close.setText("Close")
        self.Close.setFixedHeight(32)
        self.Close.setToolTip("Closes the dialog")
        QtCore.QObject.connect(self.Close, QtCore.SIGNAL("clicked()"), self.CloseClicked)
        self.mainLayout.addWidget(self.Close,self.lineNo,4)
        # размещаем нашу размеченную сетку в диалоговом окна
        self.setLayout(self.mainLayout)
        self.update()

    def handleSliderValue(self):
        # устанавливаем значение ползунка как угол
        starWheel.Placement.Rotation.Angle = math.radians(self.slider.value())
        # выводим текущий угол
        self.CurrentAngle.setText(str(self.slider.value()))
        # решаем ограничение 
        a2p_solver.solveConstraints(document)
        # обновляем вид после решения  ('Gui' stands for 'graphical user interface')
        FreeCADGui.updateGui()
        # ждём немного, т.к. нужно время для вычислений
        time.sleep(timeout)

    def setMinEdit(self):
        # убеждаемся что минимум меньше максимума
        if self.MinEdit.value() >=  self.MaxEdit.value():
            self.MaxEdit.setValue(self.MinEdit.value() + 1)
        self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())

    def setMaxEdit(self):
        # убеждаемся что минимум меньше максимума
        if self.MinEdit.value() >=  self.MaxEdit.value():
            self.MinEdit.setValue(self.MaxEdit.value() - 1)
        self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())

    def CloseClicked(self):
        AnimationDialog.close()

# создать и показать определённый выше диалог
AnimationDialog = AnimationDlg()
AnimationDialog.show()

# запустить цикл когда диалог станет видим
while AnimationDialog.isVisible():
    # обновить вид, важно чтобы дать обратную связь ОС для оживления диалога
    FreeCADGui.updateGui()
    # вынесение диалога вперёд, чтобы он был всегда видим
    QtGui.QWidget.raise_(AnimationDialog)
    # здесь так же выводится выходного ползунка, поскольку во время вычисления слайдер мог быть передвинут
    AnimationDialog.CurrentAngle.setText(str(AnimationDialog.slider.value()))

Диалог, определенный в скрипте, выглядит следующим образом:

Команды скрипта

Чтобы лучше понять синтаксис скрипта, вот некоторая информация о командах:

starWheel.Placement.Rotation.Angle = math.radians(angle)

Здесь мы меняем свойство размещения Rotation.Angle детали, которая была преждде взята как starWheel. Это свойство даёт угол в радианах. Функция radians() из библиотеки math преобразует угол из градусов в радианы.

Свойство Rotation.Angle использует текущее размещение осей детали (в нашем примере ось X). Для вращения детали, например, вокруг оси Z, надо установить ось вращения (перед вызовом команды вращения), используя команду:

starWheel.Placement.Rotation.Axis = FreeCAD.Vector(0,0,1)

Вместо вращения деталь может перемещаться. Чтобы изменить, например, размещение в направлении оси Y оси, команда должна быть:

starWheel.Placement.Base.y = PositionShift

В этом случае мы должны определять не переменную angle, а PositionShift, которую мы меняем каждый проход цикла.

Существуют разные способы установки размещения детали. Некоторые документированы здесь. К сожалению, списка со всеми возможными командами размещения не существует (пока).

a2p_solver.solveConstraints(document, useTransaction=False/True)

Это специфичная для A2plus команда. Она разрешает сборочные ограничения сборки, которую мы ранее получили как document. Опция useTransaction указывает, если FreeCAD должен сохранять каждое изменение в стеке отмены/повтора. Поэтому для долгой анимации Вам следует установить её в false.