|
|
| Расположение в меню |
|---|
| Правка → Расположение... |
| Верстаки |
| Все |
| Быстрые клавиши |
| Нет |
| Представлено в версии |
| - |
| См. также |
| Выравнивание, Расположение |
The Std Placement command displays the Placement task panel for a selected object.
The Placement task panel
The dialog can also be launched by clicking on the ellipsis button … that appears in the Property View when you click on the ДанныеPlacement property.
Смотрите так же: Основы составления скриптов в FreeCAD.
See the Python scripting tutorial.
A placement is internally defined by a matrix; in many cases it is simpler to represent it by means of two components, a Base point (vector), and a Rotation value. The Rotation itself has different representations; it can be entirely defined by the value of a "quaternion" (xi + yj + zk + w), but it can also be described by a rotation Axis (unit vector) and a rotation Angle (radians).
import FreeCAD as App
doc = App.newDocument()
obj = doc.addObject("Part::Cylinder", "Cylinder")
print(obj.Placement)
# Placement [Pos=(0,0,0), Yaw-Pitch-Roll=(0,0,0)]
print(obj.Placement.Base)
# Vector (0.0, 0.0, 0.0)
print(obj.Placement.Rotation)
# Rotation (0.0, 0.0, 0.0, 1.0)
print(obj.Placement.Rotation.Angle)
# 0.0
print(obj.Placement.Rotation.Axis)
# Vector (0.0, 0.0, 1.0)
print(obj.Placement.Rotation.Q)
# (0.0, 0.0, 0.0, 1.0)
Move the base point of the object, then rotate the object 45 degrees around the X-axis.
The math module supplies a method radians() to easily convert degrees to radians and has to be imported at first.
import math
obj.Placement.Base = App.Vector(5, 3, 1)
obj.Placement.Rotation.Axis = App.Vector(1, 0, 0)
obj.Placement.Rotation.Angle = math.radians(45)
print(obj.Placement)
# Placement [Pos=(5,3,1), Yaw-Pitch-Roll=(0,0,45)]
print(obj.Placement.Rotation.Q)
# (0.3826834323650898, 0.0, 0.0, 0.9238795325112867)
print(obj.Placement.Matrix)
# Matrix ((1,0,0,5),(0,0.707107,-0.707107,3),(0,0.707107,0.707107,1),(0,0,0,1))
To rotate the object 90 degrees around both the X-axis and Z-axis, obj.Placement.Rotation.setYawPitchRoll can be used.
obj.Placement.Base = App.Vector(5, 3, 1)
obj.Placement.Rotation.Axis = App.Vector(1, 0, 0)
obj.Placement.Rotation.setYawPitchRoll(90, 0, 90)
print(obj.Placement)
# Placement [Pos=(5,3,1), Yaw-Pitch-Roll=(90,0,90)]