Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/ui/buttons_data_bone.py')
-rw-r--r--release/ui/buttons_data_bone.py76
1 files changed, 75 insertions, 1 deletions
diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py
index 510b41de8a7..dae969a7e5f 100644
--- a/release/ui/buttons_data_bone.py
+++ b/release/ui/buttons_data_bone.py
@@ -174,6 +174,9 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel):
bone = context.bone
pchan = ob.pose.pose_channels[context.bone.name]
+ row = layout.row()
+ row.itemR(ob.pose, "ik_solver")
+
split = layout.split(percentage=0.25)
split.itemR(pchan, "ik_dof_x", text="X")
row = split.row()
@@ -218,11 +221,27 @@ class BONE_PT_inverse_kinematics(BoneButtonsPanel):
row.itemR(pchan, "ik_min_z", text="")
row.itemR(pchan, "ik_max_z", text="")
row.active = pchan.ik_dof_z and pchan.ik_limit_z
-
split = layout.split()
split.itemR(pchan, "ik_stretch", text="Stretch", slider=True)
split.itemL()
+ if ob.pose.ik_solver == "ITASC":
+ layout.itemL(text="Joint constraint:")
+ split = layout.split(percentage=0.3)
+ row = split.row()
+ row.itemR(pchan, "ik_rot_control", text="Rotation")
+ row = split.row()
+ row.itemR(pchan, "ik_rot_weight", text="Weight", slider=True)
+ row.active = pchan.ik_rot_control
+ # not supported yet
+ #split = layout.split(percentage=0.3)
+ #row = split.row()
+ #row.itemR(pchan, "ik_lin_control", text="Size")
+ #row = split.row()
+ #row.itemR(pchan, "ik_lin_weight", text="Weight", slider=True)
+ #row.active = pchan.ik_lin_control
+
+
class BONE_PT_deform(BoneButtonsPanel):
__label__ = "Deform"
__default_closed__ = True
@@ -271,9 +290,64 @@ class BONE_PT_deform(BoneButtonsPanel):
col.itemL(text="Offset:")
col.itemR(bone, "cyclic_offset")
+class BONE_PT_iksolver_itasc(BoneButtonsPanel):
+ __idname__ = "BONE_PT_iksolver_itasc"
+ __label__ = "iTaSC parameters"
+ __default_closed__ = True
+
+ def poll(self, context):
+ ob = context.object
+ bone = context.bone
+
+ if ob and context.bone:
+ pchan = ob.pose.pose_channels[context.bone.name]
+ return pchan.has_ik and ob.pose.ik_solver == "ITASC" and ob.pose.ik_param
+
+ return False
+
+ def draw(self, context):
+ layout = self.layout
+ ob = context.object
+ itasc = ob.pose.ik_param
+
+ layout.row().itemR(itasc, "simulation")
+ if itasc.simulation:
+ split = layout.split()
+ row = split.row()
+ row.itemR(itasc, "reiteration")
+ row = split.row()
+ if itasc.reiteration:
+ itasc.initial_reiteration = True
+ row.itemR(itasc, "initial_reiteration")
+ row.active = not itasc.reiteration
+
+ flow = layout.column_flow()
+ flow.itemR(itasc, "precision")
+ flow.itemR(itasc, "num_iter")
+ flow.active = not itasc.simulation or itasc.initial_reiteration or itasc.reiteration
+
+ if itasc.simulation:
+ layout.itemR(itasc, "auto_step")
+ row = layout.row()
+ if itasc.auto_step:
+ row.itemR(itasc, "min_step")
+ row.itemR(itasc, "max_step")
+ else:
+ row.itemR(itasc, "num_step")
+
+ layout.itemR(itasc, "solver")
+ if itasc.simulation:
+ layout.itemR(itasc, "feedback")
+ layout.itemR(itasc, "max_velocity")
+ if itasc.solver == "DLS":
+ row = layout.row()
+ row.itemR(itasc, "dampmax")
+ row.itemR(itasc, "dampeps")
+
bpy.types.register(BONE_PT_context_bone)
bpy.types.register(BONE_PT_transform)
bpy.types.register(BONE_PT_transform_locks)
bpy.types.register(BONE_PT_bone)
bpy.types.register(BONE_PT_deform)
bpy.types.register(BONE_PT_inverse_kinematics)
+bpy.types.register(BONE_PT_iksolver_itasc)