diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..dd4c951
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..db8786c
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f4341c8
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/rigacar.iml b/.idea/rigacar.iml
new file mode 100644
index 0000000..8b8c395
--- /dev/null
+++ b/.idea/rigacar.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 2c310d9..a0b25ab 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,13 @@
+# Rigacar
+
+## Fork
+
+_This fork supports **Blender 4.0+** and consolidates fixes from the community while the maintainer is absent._
+
+Upstream readme description below.
+
+## Upstream
+
Rigacar is a free addon for Blender. It is designed to fulfill the following goals:
* generate a complete rig as quickly as possible (actually few seconds) for standard car models
@@ -6,6 +16,6 @@ Rigacar is a free addon for Blender. It is designed to fulfill the following goa
Please read [full documentation](http://digicreatures.net/articles/rigacar.html) on my website.
-You can also watch the series of videotutorials:
+You can also watch the series of video tutorials:
-[](https://www.youtube.com/watch?v=D3XQxA_-TzY&list=PLH_mmrv8SfPFiEj93RJt3sBvHCnipI9qK "Rigacar videotutorials")
+[](https://www.youtube.com/watch?v=D3XQxA_-TzY&list=PLH_mmrv8SfPFiEj93RJt3sBvHCnipI9qK "Rigacar video tutorials")
diff --git a/__init__.py b/__init__.py
index afa2475..7865ec8 100644
--- a/__init__.py
+++ b/__init__.py
@@ -21,17 +21,18 @@
bl_info = {
"name": "Rigacar (Generates Car Rig)",
"author": "David Gayerie",
- "version": (7, 1),
- "blender": (2, 83, 0),
+ "version": (8, 0),
+ "blender": (4, 0, 0),
"location": "View3D > Add > Armature",
"description": "Adds a deformation rig for vehicules, generates animation rig and bake wheels animation.",
"wiki_url": "http://digicreatures.net/articles/rigacar.html",
"tracker_url": "https://github.com/digicreatures/rigacar/issues",
- "category": "Rigging"}
-
+ "category": "Rigging"
+}
if "bpy" in locals():
import importlib
+
if "bake_operators" in locals():
importlib.reload(bake_operators)
if "car_rig" in locals():
@@ -188,15 +189,16 @@ def draw(self, context):
def menu_entries(menu, context):
- menu.layout.operator(car_rig.OBJECT_OT_armatureCarDeformationRig.bl_idname, text="Car (deformation rig)", icon='AUTO')
+ menu.layout.operator(car_rig.OBJECT_OT_armatureCarDeformationRig.bl_idname, text="Car (deformation rig)",
+ icon='AUTO')
classes = (
- RIGACAR_PT_rigProperties,
- RIGACAR_PT_groundSensorsProperties,
- RIGACAR_PT_animationRigView,
- RIGACAR_PT_wheelsAnimationView,
- RIGACAR_PT_groundSensorsView,
+ RIGACAR_PT_rigProperties,
+ RIGACAR_PT_groundSensorsProperties,
+ RIGACAR_PT_animationRigView,
+ RIGACAR_PT_wheelsAnimationView,
+ RIGACAR_PT_groundSensorsView,
)
diff --git a/bake_operators.py b/bake_operators.py
index 65fed30..2276e76 100644
--- a/bake_operators.py
+++ b/bake_operators.py
@@ -19,6 +19,7 @@
#
import bpy
+import bpy_extras.anim_utils
import mathutils
import math
import itertools
@@ -33,7 +34,9 @@ def wrapper(self, context, *args, **kwargs):
return func(self, context, *args, **kwargs)
finally:
context.window.cursor_modal_restore()
+
return wrapper
+
return cursor_decorator
@@ -135,7 +138,7 @@ def evaluate(self, f):
def fix_old_steering_rotation(rig_object):
"""
- Fix armature generated with rigacar version < 6.0
+ Fix armature generated with Rigacar version < 6.0
"""
if rig_object.pose and rig_object.pose.bones:
if 'MCH-Steering.rotation' in rig_object.pose.bones:
@@ -194,7 +197,8 @@ def _create_scale_evaluator(self, action, source_bone):
def _bake_action(self, context, *source_bones):
action = context.object.animation_data.action
- nla_tweak_mode = context.object.animation_data.use_tweak_mode if hasattr(context.object.animation_data, 'use_tweak_mode') else False
+ nla_tweak_mode = context.object.animation_data.use_tweak_mode if hasattr(context.object.animation_data,
+ 'use_tweak_mode') else False
# saving context
selected_bones = [b for b in context.object.data.bones if b.select]
@@ -208,14 +212,15 @@ def _bake_action(self, context, *source_bones):
source_bones_matrix_basis.append(context.object.pose.bones[source_bone.name].matrix_basis.copy())
source_bone.select = True
- # Blender 2.81 : Another hack for another bug in the bake operator
- # removing from the selection objects which are not the current one
- for obj in context.selected_objects:
- if obj is not context.object:
- obj.select_set(state=False)
-
- bpy.ops.nla.bake(frame_start=self.frame_start, frame_end=self.frame_end, only_selected=True, bake_types={'POSE'}, visual_keying=True)
- baked_action = context.object.animation_data.action
+ baked_action = bpy_extras.anim_utils.bake_action(
+ context.object,
+ action=None,
+ frames=range(self.frame_start, self.frame_end + 1),
+ only_selected=True,
+ do_pose=True,
+ do_object=False,
+ do_visual_keying=True,
+ )
# restoring context
for source_bone, matrix_basis in zip(source_bones, source_bones_matrix_basis):
@@ -262,6 +267,10 @@ def _bake_wheels_rotation(self, context):
bones = set(wheel_bones + brake_bones)
baked_action = self._bake_action(context, *bones)
+ if baked_action is None:
+ self.report({'WARNING'}, "Existing action failed to bake. Won't bake wheel rotation")
+ return
+
try:
for wheel_bone, brake_bone in zip(wheel_bones, brake_bones):
self._bake_wheel_rotation(context, baked_action, wheel_bone, brake_bone)
@@ -302,6 +311,10 @@ def _evaluate_distance_per_frame(self, action, bone, brake_bone):
def _bake_wheel_rotation(self, context, baked_action, bone, brake_bone):
fc_rot = create_property_animation(context, bone.name.replace('MCH-', ''))
+ # Reset the transform of the wheel bone, otherwise baking yields wrong results
+ pb: bpy.types.PoseBone = context.object.pose.bones[bone.name]
+ pb.matrix_basis.identity()
+
for f, distance in self._evaluate_distance_per_frame(baked_action, bone, brake_bone):
kf = fc_rot.keyframe_points.insert(f, distance)
kf.interpolation = 'LINEAR'
@@ -362,10 +375,12 @@ def _evaluate_rotation_per_frame(self, action, bone_offset, bone):
length_ratio = bone_offset * self.rotation_factor / projected_steering_direction
steering_direction_vector *= length_ratio
- steering_position = mathutils.geometry.distance_point_to_plane(steering_direction_vector, world_space_bone_direction_vector, world_space_bone_normal_vector)
+ steering_position = mathutils.geometry.distance_point_to_plane(steering_direction_vector,
+ world_space_bone_direction_vector,
+ world_space_bone_normal_vector)
if previous_steering_position is not None \
- and abs(steering_position - previous_steering_position) < steering_threshold:
+ and abs(steering_position - previous_steering_position) < steering_threshold:
continue
yield f, steering_position
@@ -377,15 +392,24 @@ def _bake_steering_rotation(self, context, bone_offset, bone):
clear_property_animation(context, 'Steering.rotation')
fix_old_steering_rotation(context.object)
fc_rot = create_property_animation(context, 'Steering.rotation')
- action = self._bake_action(context, bone)
+
+ baked_action = self._bake_action(context, bone)
+ if baked_action is None:
+ self.report({'WARNING'}, "Existing action failed to bake. Won't bake steering rotation")
+ return
try:
- for f, steering_pos in self._evaluate_rotation_per_frame(action, bone_offset, bone):
+ # Reset the transform of the steering bone, because baking action manipulates the transform
+ # and evaluate_rotation_frame expects it at it's default position
+ pb: bpy.types.PoseBone = context.object.pose.bones[bone.name]
+ pb.matrix_basis.identity()
+
+ for f, steering_pos in self._evaluate_rotation_per_frame(baked_action, bone_offset, bone):
kf = fc_rot.keyframe_points.insert(f, steering_pos)
kf.type = 'JITTER'
kf.interpolation = 'LINEAR'
finally:
- bpy.data.actions.remove(action)
+ bpy.data.actions.remove(baked_action)
class ANIM_OT_carClearSteeringWheelsRotation(bpy.types.Operator):
@@ -394,8 +418,10 @@ class ANIM_OT_carClearSteeringWheelsRotation(bpy.types.Operator):
bl_description = "Clear generated rotation for steering and wheels"
bl_options = {'REGISTER', 'UNDO'}
- clear_steering: bpy.props.BoolProperty(name="Steering", description="Clear generated animation for steering", default=True)
- clear_wheels: bpy.props.BoolProperty(name="Wheels", description="Clear generated animation for wheels", default=True)
+ clear_steering: bpy.props.BoolProperty(name="Steering", description="Clear generated animation for steering",
+ default=True)
+ clear_wheels: bpy.props.BoolProperty(name="Wheels", description="Clear generated animation for wheels",
+ default=True)
def draw(self, context):
self.layout.use_property_decorate = False
diff --git a/car_rig.py b/car_rig.py
index 910ad0d..1feb833 100644
--- a/car_rig.py
+++ b/car_rig.py
@@ -26,10 +26,11 @@
from math import inf
from rna_prop_ui import rna_idprop_ui_create
-CUSTOM_SHAPE_LAYER = 13
-MCH_BONE_EXTENSION_LAYER = 14
-DEF_BONE_LAYER = 15
-MCH_BONE_LAYER = 31
+DEFAULT_VISIBLE_LAYER = 'CarRig_Default_Ctrls' # New Setting for Blender4.0
+CUSTOM_SHAPE_LAYER = 'CarRig_Custom_Ctrls' # 13
+MCH_BONE_EXTENSION_LAYER = 'CarRig_MCH_Bone_Ext' # 14
+DEF_BONE_LAYER = 'CarRig_Def_Bone' # 15
+MCH_BONE_LAYER = 'CarRig_MCH_Bone' # 31
def deselect_edit_bones(ob):
@@ -88,12 +89,11 @@ def create_translation_x_driver(ob, bone, driver_data_path):
def create_bone_group(pose, group_name, color_set, bone_names):
- group = pose.bone_groups.new(name=group_name)
- group.color_set = color_set
+ # Here Only set color
for bone_name in bone_names:
bone = pose.bones.get(bone_name)
if bone is not None:
- bone.bone_group = group
+ bone.color.palette = color_set
def name_range(prefix, nb=1000):
@@ -113,38 +113,52 @@ def get_widget(name):
def define_custom_property(target, name, value, description=None, overridable=True):
- rna_idprop_ui_create(target, name, default=value, description=description, overridable=overridable, min=-inf, max=inf)
+ rna_idprop_ui_create(target, name, default=value, description=description, overridable=overridable, min=-inf,
+ max=inf)
def dispatch_bones_to_armature_layers(ob):
+ '''Bone Collections were introduced in Blender 4.0 as replacement of Armature Layers and Bone Groups.'''
+ amt = bpy.context.object.data
+ default_visible_layer = amt.collections.new(name=DEFAULT_VISIBLE_LAYER)
+ custom_shape_layer = amt.collections.new(name=CUSTOM_SHAPE_LAYER) # 13
+ def_bone_layer = amt.collections.new(name=DEF_BONE_LAYER) # 15
+ mch_bone_layer = amt.collections.new(name=MCH_BONE_LAYER) # 31
+ mch_bone_extension_layer = amt.collections.new(name=MCH_BONE_EXTENSION_LAYER) # 14
+
+ # set visibility
+ custom_shape_layer.is_visible = False
+ def_bone_layer.is_visible = False
+ mch_bone_extension_layer.is_visible = False
+ mch_bone_layer.is_visible = False
+
+ # get MCH bone
re_mch_bone = re.compile(r'^MCH-Wheel(Brake)?\.(Ft|Bk)\.[LR](\.\d+)?$')
- default_visible_layers = [False] * 32
for b in ob.data.bones:
- layers = [False] * 32
if b.name.startswith('DEF-'):
- layers[DEF_BONE_LAYER] = True
+ def_bone_layer.assign(b)
elif b.name.startswith('MCH-'):
- layers[MCH_BONE_LAYER] = True
+ mch_bone_layer.assign(b)
if b.name in ('MCH-Body', 'MCH-Steering') or re_mch_bone.match(b.name):
- layers[MCH_BONE_EXTENSION_LAYER] = True
+ mch_bone_extension_layer.assign(b)
else:
- layer_num = ob.pose.bones[b.name].bone_group_index
- layers[layer_num] = True
- default_visible_layers[layer_num] = True
- b.layers = layers
+ default_visible_layer.assign(b)
+ pass
- ob.data.layers = default_visible_layers
-
- shape_bone_layers = [False] * 32
- shape_bone_layers[CUSTOM_SHAPE_LAYER] = True
for b in ob.pose.bones:
if b.custom_shape:
if b.custom_shape_transform:
ob.pose.bones[b.custom_shape_transform.name].custom_shape = b.custom_shape
- ob.data.bones[b.custom_shape_transform.name].layers = shape_bone_layers
+ custom_shape_layer.assign(ob.pose.bones[b.custom_shape_transform.name])
+ # ob.data.bones[b.custom_shape_transform.name].layers = shape_bone_layers
else:
- ob.data.bones[b.name].layers[CUSTOM_SHAPE_LAYER] = True
+ default_visible_layer.assign(ob.data.bones[b.name])
+ # ob.data.bones[b.name].layers[CUSTOM_SHAPE_LAYER] = True
+
+ # Remove custom shape from default layer
+ for bone in custom_shape_layer.bones:
+ default_visible_layer.unassign(bone)
class NameSuffix(object):
@@ -184,7 +198,8 @@ def __init__(self, armature, bone_name):
bone = armature.data.bones[bone_name]
self.__center = bone.head.copy()
if not objs:
- self.__xyz = [bone.head.x - bone.length / 2, bone.head.x + bone.length / 2, bone.head.y - bone.length, bone.head.y + bone.length, .0, bone.head.z * 2]
+ self.__xyz = [bone.head.x - bone.length / 2, bone.head.x + bone.length / 2, bone.head.y - bone.length,
+ bone.head.y + bone.length, .0, bone.head.z * 2]
else:
self.__xyz = [inf, -inf, inf, -inf, inf, -inf]
self.__compute(mathutils.Matrix(), *objs)
@@ -270,7 +285,8 @@ def __init__(self, armature, position, side_position, default):
self.position = position
self.side_position = side_position
self.wheels = []
- wheel_bones = (armature.data.edit_bones.get(name) for name in name_range('DEF-Wheel.%s.%s' % (self.position, self.side_position)))
+ wheel_bones = (armature.data.edit_bones.get(name) for name in
+ name_range('DEF-Wheel.%s.%s' % (self.position, self.side_position)))
for wheel_bone in wheel_bones:
if wheel_bone is None:
break
@@ -354,7 +370,8 @@ def car_center(self):
@property
def width(self):
- return max([self.bb_body.width] + [abs(w.compute_outer_x() - self.bb_body.center.x) * 2 for w in self.wheels_dimensions])
+ return max([self.bb_body.width] + [abs(w.compute_outer_x() - self.bb_body.center.x) * 2 for w in
+ self.wheels_dimensions])
@property
def height(self):
@@ -418,7 +435,8 @@ def nb_back_wheels(self):
@property
def wheels_dimensions(self):
- return filter(lambda w: w.nb, (self.wheels_front_left, self.wheels_front_right, self.wheels_back_left, self.wheels_back_right))
+ return filter(lambda w: w.nb,
+ (self.wheels_front_left, self.wheels_front_right, self.wheels_back_left, self.wheels_back_right))
def create_wheel_brake_bone(wheel_brake, parent_bone, wheel_bone):
@@ -435,8 +453,12 @@ def generate_constraint_on_wheel_brake_bone(wheel_brake_pose_bone, wheel_pose_bo
wheel_brake_pose_bone.lock_scale = (True, False, False)
wheel_brake_pose_bone.custom_shape = get_widget('WGT-CarRig.WheelBrake')
wheel_brake_pose_bone.bone.show_wire = True
- wheel_brake_pose_bone.bone_group = wheel_pose_bone.bone_group
- wheel_brake_pose_bone.bone.layers = wheel_pose_bone.bone.layers
+ amt = bpy.context.object.data
+ groups = amt.collections
+ for group in groups:
+ for bone in group.bones:
+ if bone.name == wheel_pose_bone.anme:
+ group.assign(wheel_brake_pose_bone)
cns = wheel_brake_pose_bone.constraints.new('LIMIT_SCALE')
cns.name = 'Brakes'
@@ -677,7 +699,8 @@ def generate_animation_wheel_bones(self, name_suffix, wheel_bounding_box, parent
ground_sensor.head = wheel_bounding_box.box_center
ground_sensor.head.z = def_wheel_bone.head.z
ground_sensor.tail = ground_sensor.head
- ground_sensor.tail.y += max(max(wheel_bounding_box.height, ground_sensor.head.z) / 2.5, wheel_bounding_box.width * 1.02)
+ ground_sensor.tail.y += max(max(wheel_bounding_box.height, ground_sensor.head.z) / 2.5,
+ wheel_bounding_box.width * 1.02)
ground_sensor.use_deform = False
ground_sensor.parent = parent_bone
@@ -795,7 +818,8 @@ def generate_constraints_on_rig(self):
cns.to_max_y_rot = math.radians(-180)
cns.owner_space = 'LOCAL'
cns.target_space = 'LOCAL'
- create_constraint_influence_driver(self.ob, cns, '["suspension_rolling_factor"]', base_influence=influence)
+ create_constraint_influence_driver(self.ob, cns, '["suspension_rolling_factor"]',
+ base_influence=influence)
root = pose.bones['Root']
root.lock_scale = (True, True, True)
@@ -804,19 +828,19 @@ def generate_constraints_on_rig(self):
root.bone.show_wire = True
for ground_sensor_axle_name in ('GroundSensor.Axle.Ft', 'GroundSensor.Axle.Bk'):
- groundsensor_axle = pose.bones.get(ground_sensor_axle_name)
- if groundsensor_axle:
- groundsensor_axle.lock_location = (True, True, False)
- groundsensor_axle.lock_rotation = (True, True, True)
- groundsensor_axle.lock_scale = (True, True, True)
- groundsensor_axle.custom_shape = get_widget('WGT-CarRig.GroundSensor.Axle')
- groundsensor_axle.lock_rotation_w = True
- groundsensor_axle.custom_shape_transform = pose.bones['SHP-%s' % groundsensor_axle.name]
- groundsensor_axle.bone.show_wire = True
- self.generate_ground_projection_constraint(groundsensor_axle)
-
- if groundsensor_axle.name == 'GroundSensor.Axle.Ft' and 'GroundSensor.Axle.Bk' in pose.bones:
- cns = groundsensor_axle.constraints.new('LIMIT_DISTANCE')
+ ground_sensor_axle = pose.bones.get(ground_sensor_axle_name)
+ if ground_sensor_axle:
+ ground_sensor_axle.lock_location = (True, True, False)
+ ground_sensor_axle.lock_rotation = (True, True, True)
+ ground_sensor_axle.lock_scale = (True, True, True)
+ ground_sensor_axle.custom_shape = get_widget('WGT-CarRig.GroundSensor.Axle')
+ ground_sensor_axle.lock_rotation_w = True
+ ground_sensor_axle.custom_shape_transform = pose.bones['SHP-%s' % ground_sensor_axle.name]
+ ground_sensor_axle.bone.show_wire = True
+ self.generate_ground_projection_constraint(ground_sensor_axle)
+
+ if ground_sensor_axle.name == 'GroundSensor.Axle.Ft' and 'GroundSensor.Axle.Bk' in pose.bones:
+ cns = ground_sensor_axle.constraints.new('LIMIT_DISTANCE')
cns.name = 'Limit distance from Root'
cns.limit_mode = 'LIMITDIST_ONSURFACE'
cns.target = self.ob
@@ -878,7 +902,8 @@ def generate_constraints_on_rig(self):
cns.owner_space = 'LOCAL'
cns.target_space = 'LOCAL'
- self.generate_childof_constraint(mch_steering_rotation, mch_root_axle_front if mch_root_axle_front else root)
+ self.generate_childof_constraint(mch_steering_rotation,
+ mch_root_axle_front if mch_root_axle_front else root)
mch_steering = pose.bones['MCH-Steering']
cns = mch_steering.constraints.new('DAMPED_TRACK')
@@ -1150,7 +1175,8 @@ def generate_constraints_on_wheel_damper(self, wheel_dimension):
def generate_bone_groups(self):
pose = self.ob.pose
create_bone_group(pose, 'Direction', color_set='THEME04', bone_names=('Root', 'Drift', 'SHP-Root', 'SHP-Drift'))
- create_bone_group(pose, 'Suspension', color_set='THEME09', bone_names=('Suspension', 'WheelDamper.Ft.L', 'WheelDamper.Ft.R', 'WheelDamper.Bk.L', 'WheelDamper.Bk.R'))
+ create_bone_group(pose, 'Suspension', color_set='THEME09', bone_names=(
+ 'Suspension', 'WheelDamper.Ft.L', 'WheelDamper.Ft.R', 'WheelDamper.Bk.L', 'WheelDamper.Bk.R'))
wheel_widgets = ('Steering',)
for wheel_dimension in self.dimension.wheels_dimensions:
@@ -1158,7 +1184,8 @@ def generate_bone_groups(self):
wheel_widgets += tuple(wheel_dimension.names('WheelBrake'))
create_bone_group(pose, 'Wheel', color_set='THEME03', bone_names=wheel_widgets)
- ground_sensor_names = ('GroundSensor.Axle.Ft', 'GroundSensor.Axle.Bk', 'SHP-GroundSensor.Axle.Ft', 'SHP-GroundSensor.Axle.Bk')
+ ground_sensor_names = (
+ 'GroundSensor.Axle.Ft', 'GroundSensor.Axle.Bk', 'SHP-GroundSensor.Axle.Ft', 'SHP-GroundSensor.Axle.Bk')
for wheel_dimension in self.dimension.wheels_dimensions:
ground_sensor_names += tuple(wheel_dimension.names('GroundSensor'))
ground_sensor_names += tuple("SHP-%s" % i for i in ground_sensor_names)
@@ -1252,15 +1279,15 @@ def draw(self, context):
def invoke(self, context, event):
self.bones_position = {
- 'Body': mathutils.Vector((0.0, 0, .8)),
- 'Wheel.Ft.L': mathutils.Vector((0.9, -2, .5)),
- 'Wheel.Ft.R': mathutils.Vector((-.9, -2, .5)),
- 'Wheel.Bk.L': mathutils.Vector((0.9, 2, .5)),
- 'Wheel.Bk.R': mathutils.Vector((-.9, 2, .5)),
- 'WheelBrake.Ft.L': mathutils.Vector((0.8, -2, .5)),
- 'WheelBrake.Ft.R': mathutils.Vector((-.8, -2, .5)),
- 'WheelBrake.Bk.L': mathutils.Vector((0.8, 2, .5)),
- 'WheelBrake.Bk.R': mathutils.Vector((-.8, 2, .5))
+ 'Body': mathutils.Vector((0.0, 0, .8)),
+ 'Wheel.Ft.L': mathutils.Vector((0.9, -2, .5)),
+ 'Wheel.Ft.R': mathutils.Vector((-.9, -2, .5)),
+ 'Wheel.Bk.L': mathutils.Vector((0.9, 2, .5)),
+ 'Wheel.Bk.R': mathutils.Vector((-.9, 2, .5)),
+ 'WheelBrake.Ft.L': mathutils.Vector((0.8, -2, .5)),
+ 'WheelBrake.Ft.R': mathutils.Vector((-.8, -2, .5)),
+ 'WheelBrake.Bk.L': mathutils.Vector((0.8, 2, .5)),
+ 'WheelBrake.Bk.R': mathutils.Vector((-.8, 2, .5))
}
self.target_objects_name = {}
@@ -1316,24 +1343,29 @@ def execute(self, context):
try:
bpy.ops.object.mode_set(mode='EDIT')
except TypeError:
- self.report({'ERROR'}, "Cannot edit the new armature! Please make sure the active collection is visible and editable")
+ self.report({'ERROR'},
+ "Cannot edit the new armature! Please make sure the active collection is visible and editable")
return {'CANCELLED'}
self._create_bone(rig, 'Body', delta_pos=self.body_pos_delta)
self._create_wheel_bones(rig, 'Wheel.Ft.L', self.nb_front_wheels_pairs, self.front_wheel_pos_delta)
- self._create_wheel_bones(rig, 'Wheel.Ft.R', self.nb_front_wheels_pairs, self.front_wheel_pos_delta.reflect(mathutils.Vector((1, 0, 0))))
+ self._create_wheel_bones(rig, 'Wheel.Ft.R', self.nb_front_wheels_pairs,
+ self.front_wheel_pos_delta.reflect(mathutils.Vector((1, 0, 0))))
self._create_wheel_bones(rig, 'Wheel.Bk.L', self.nb_back_wheels_pairs, self.back_wheel_pos_delta)
- self._create_wheel_bones(rig, 'Wheel.Bk.R', self.nb_back_wheels_pairs, self.back_wheel_pos_delta.reflect(mathutils.Vector((1, 0, 0))))
+ self._create_wheel_bones(rig, 'Wheel.Bk.R', self.nb_back_wheels_pairs,
+ self.back_wheel_pos_delta.reflect(mathutils.Vector((1, 0, 0))))
front_wheel_brakes_delta_pos = self.front_wheel_pos_delta.copy()
front_wheel_brakes_delta_pos.x = self.front_wheel_brakes_pos_delta
self._create_wheel_bones(rig, 'WheelBrake.Ft.L', self.nb_front_wheel_brakes_pairs, front_wheel_brakes_delta_pos)
- self._create_wheel_bones(rig, 'WheelBrake.Ft.R', self.nb_front_wheel_brakes_pairs, front_wheel_brakes_delta_pos.reflect(mathutils.Vector((1, 0, 0))))
+ self._create_wheel_bones(rig, 'WheelBrake.Ft.R', self.nb_front_wheel_brakes_pairs,
+ front_wheel_brakes_delta_pos.reflect(mathutils.Vector((1, 0, 0))))
back_wheel_brakes_delta_pos = self.back_wheel_pos_delta.copy()
back_wheel_brakes_delta_pos.x = self.back_wheel_brakes_pos_delta
self._create_wheel_bones(rig, 'WheelBrake.Bk.L', self.nb_back_wheel_brakes_pairs, back_wheel_brakes_delta_pos)
- self._create_wheel_bones(rig, 'WheelBrake.Bk.R', self.nb_back_wheel_brakes_pairs, back_wheel_brakes_delta_pos.reflect(mathutils.Vector((1, 0, 0))))
+ self._create_wheel_bones(rig, 'WheelBrake.Bk.R', self.nb_back_wheel_brakes_pairs,
+ back_wheel_brakes_delta_pos.reflect(mathutils.Vector((1, 0, 0))))
deselect_edit_bones(rig)
@@ -1356,7 +1388,8 @@ def _create_bone(self, rig, name, delta_pos):
target_obj = bpy.context.scene.objects[target_obj_name]
if name == 'Body':
b.tail = b.head
- b.tail.y += target_obj.dimensions[1] / 2 if target_obj.dimensions and target_obj.dimensions[0] != 0 else 1
+ b.tail.y += target_obj.dimensions[1] / 2 if target_obj.dimensions and target_obj.dimensions[
+ 0] != 0 else 1
target_obj.parent = rig
target_obj.parent_bone = b.name
target_obj.parent_type = 'BONE'
@@ -1416,9 +1449,9 @@ class POSE_OT_carAnimationAddBrakeWheelBones(bpy.types.Operator):
@classmethod
def poll(cls, context):
- return context.object.mode == 'POSE' and\
- context.object is not None and context.object.data is not None and\
- context.object.data.get('Car Rig')
+ return context.object.mode == 'POSE' and \
+ context.object is not None and context.object.data is not None and \
+ context.object.data.get('Car Rig')
def execute(self, context):
mode = context.object.mode
@@ -1437,7 +1470,8 @@ def create_wheelbrake_bone(self, context, wheel_pose_bone, name, parent_name):
amt = context.object.data
if name not in amt.bones and parent_name in amt.bones:
bpy.ops.object.mode_set(mode='EDIT')
- create_wheel_brake_bone(amt.edit_bones.new(name), amt.edit_bones[parent_name], amt.edit_bones[wheel_pose_bone.name])
+ create_wheel_brake_bone(amt.edit_bones.new(name), amt.edit_bones[parent_name],
+ amt.edit_bones[wheel_pose_bone.name])
bpy.ops.object.mode_set(mode='POSE')
generate_constraint_on_wheel_brake_bone(obj.pose.bones[name], wheel_pose_bone)
diff --git a/widgets.py b/widgets.py
index 4b77a56..ae37e9e 100644
--- a/widgets.py
+++ b/widgets.py
@@ -72,7 +72,8 @@ def get_widgets():
(0.41178521513938904, 0.07347165793180466, 0.0), (0.3602612316608429, 0.09748400002717972, 0.0),
(0.29565858840942383, 0.12036669254302979, 0.0), (0.21969391405582428, 0.13851231336593628, 0.0),
(0.13528653979301453, 0.15106302499771118, 0.0), (0.04568054899573326, 0.15747304260730743, 0.0),
- (-0.560016930103302, 3.5614462490229926e-07, 0.0), (-0.5472726821899414, 0.051212746649980545, 0.0),
+ (-0.560016930103302, 3.5614462490229926e-07, 0.0),
+ (-0.5472726821899414, 0.051212746649980545, 0.0),
(-0.5173879265785217, 0.09973714500665665, 0.0), (-0.46497008204460144, 0.14364132285118103, 0.0),
(-0.3959912657737732, 0.1842898577451706, 0.0), (-0.3111281096935272, 0.21670186519622803, 0.0),
(-0.21430844068527222, 0.2407861351966858, 0.0), (-0.10925304144620895, 0.2556171119213104, 0.0),
@@ -80,7 +81,8 @@ def get_widgets():
(-0.4915122985839844, 0.12226644158363342, 0.0), (-0.4308139681816101, 0.1645427942276001, 0.0),
(-0.3535597026348114, 0.2004958689212799, 0.0), (-0.2627182900905609, 0.22874398529529572, 0.0),
(-0.16178074479103088, 0.2482016384601593, 0.0), (-0.05462652072310448, 0.2581210136413574, 0.0),
- (-0.4683051109313965, 2.978201791847823e-07, 0.0), (-0.46016228199005127, 0.03240064159035683, 0.0),
+ (-0.4683051109313965, 2.978201791847823e-07, 0.0),
+ (-0.46016228199005127, 0.03240064159035683, 0.0),
(-0.43346360325813293, 0.06059274449944496, 0.0), (-0.38938117027282715, 0.08542850613594055, 0.0),
(-0.33114129304885864, 0.110313281416893, 0.0), (-0.2601758539676666, 0.13103415071964264, 0.0),
(-0.17921197414398193, 0.1465274840593338, 0.0), (-0.09136109799146652, 0.15609556436538696, 0.0),
@@ -89,57 +91,72 @@ def get_widgets():
(-0.29565858840942383, 0.12036669254302979, 0.0), (-0.21969391405582428, 0.13851231336593628, 0.0),
(-0.13528653979301453, 0.15106302499771118, 0.0), (-0.04568054899573326, 0.15747304260730743, 0.0),
(0.0, 0.26062488555908203, 0.0), (0.0, 0.15932999551296234, 0.0)],
- 'edges': [(8, 0), (9, 1), (10, 2), (11, 3), (12, 4), (13, 5), (14, 6), (15, 7), (1, 8), (2, 9), (3, 10), (4, 11),
- (5, 12), (6, 13), (7, 14), (64, 15), (24, 16), (25, 17), (26, 18), (27, 19), (28, 20), (29, 21),
- (30, 22), (31, 23), (17, 24), (18, 25), (19, 26), (20, 27), (21, 28), (22, 29), (23, 30), (65, 31),
- (0, 16), (24, 8), (1, 17), (25, 9), (40, 32), (41, 33), (42, 34), (43, 35), (44, 36), (45, 37), (46, 38),
- (47, 39), (33, 40), (34, 41), (35, 42), (36, 43), (37, 44), (38, 45), (39, 46), (64, 47), (56, 48),
- (57, 49), (58, 50), (59, 51), (60, 52), (61, 53), (62, 54), (63, 55), (49, 56), (50, 57), (51, 58),
- (52, 59), (53, 60), (54, 61), (55, 62), (65, 63), (32, 48), (56, 40), (33, 49), (57, 41)]
+ 'edges': [(8, 0), (9, 1), (10, 2), (11, 3), (12, 4), (13, 5), (14, 6), (15, 7), (1, 8), (2, 9), (3, 10),
+ (4, 11), (5, 12), (6, 13), (7, 14), (64, 15), (24, 16), (25, 17), (26, 18), (27, 19), (28, 20),
+ (29, 21), (30, 22), (31, 23), (17, 24), (18, 25), (19, 26), (20, 27), (21, 28), (22, 29), (23, 30),
+ (65, 31), (0, 16), (24, 8), (1, 17), (25, 9), (40, 32), (41, 33), (42, 34), (43, 35), (44, 36),
+ (45, 37), (46, 38), (47, 39), (33, 40), (34, 41), (35, 42), (36, 43), (37, 44), (38, 45), (39, 46),
+ (64, 47), (56, 48), (57, 49), (58, 50), (59, 51), (60, 52), (61, 53), (62, 54), (63, 55), (49, 56),
+ (50, 57), (51, 58), (52, 59), (53, 60), (54, 61), (55, 62), (65, 63), (32, 48), (56, 40), (33, 49),
+ (57, 41)]
}
widgets['Root'] = {
- 'vertices': [(-0.5, -0.8844379782676697, 0.0), (-0.3844379782676697, -1.0, 0.0), (-0.4912033677101135, -0.9286617040634155, 0.0),
- (-0.4661526679992676, -0.9661527276039124, 0.0), (-0.42866164445877075, -0.9912034273147583, 0.0), (0.3844379782676697, -1.0, 0.0),
- (0.5, -0.8844379782676697, 0.0), (0.42866164445877075, -0.9912034273147583, 0.0), (0.4661526679992676, -0.9661527276039124, 0.0),
- (0.4912033677101135, -0.9286617040634155, 0.0), (-0.5, 0.8844379782676697, 0.0), (-0.3844379782676697, 1.0, 0.0),
- (-0.4912033677101135, 0.9286617040634155, 0.0), (-0.4661526679992676, 0.9661527276039124, 0.0), (-0.42866164445877075, 0.9912034273147583, 0.0),
- (0.5, 0.8844379782676697, 0.0), (0.3844379782676697, 1.0, 0.0), (0.4912033677101135, 0.9286617040634155, 0.0),
- (0.4661526679992676, 0.9661527276039124, 0.0), (0.42866164445877075, 0.9912034273147583, 0.0), (0.1234154999256134, -1.0, 0.0),
- (-0.1234154999256134, -1.0, 0.0), (0.1234154999256134, -1.0971899032592773, 0.0), (-0.1234154999256134, -1.0971899032592773, 0.0),
- (0.3031257688999176, -1.0971899032592773, 0.0), (-0.3031257688999176, -1.0971899032592773, 0.0), (0.0, -1.25, 0.0)],
- 'edges': [(0, 2), (2, 3), (3, 4), (4, 1), (5, 7), (7, 8), (8, 9), (9, 6), (10, 12), (12, 13), (13, 14), (14, 11), (15, 17), (17, 18), (18, 19),
- (19, 16), (0, 10), (6, 15), (11, 16), (20, 5), (21, 1), (22, 20), (23, 21), (24, 22), (25, 23), (26, 24), (26, 25)]
+ 'vertices': [(-0.5, -0.8844379782676697, 0.0), (-0.3844379782676697, -1.0, 0.0),
+ (-0.4912033677101135, -0.9286617040634155, 0.0), (-0.4661526679992676, -0.9661527276039124, 0.0),
+ (-0.42866164445877075, -0.9912034273147583, 0.0), (0.3844379782676697, -1.0, 0.0),
+ (0.5, -0.8844379782676697, 0.0), (0.42866164445877075, -0.9912034273147583, 0.0),
+ (0.4661526679992676, -0.9661527276039124, 0.0), (0.4912033677101135, -0.9286617040634155, 0.0),
+ (-0.5, 0.8844379782676697, 0.0), (-0.3844379782676697, 1.0, 0.0),
+ (-0.4912033677101135, 0.9286617040634155, 0.0), (-0.4661526679992676, 0.9661527276039124, 0.0),
+ (-0.42866164445877075, 0.9912034273147583, 0.0), (0.5, 0.8844379782676697, 0.0),
+ (0.3844379782676697, 1.0, 0.0), (0.4912033677101135, 0.9286617040634155, 0.0),
+ (0.4661526679992676, 0.9661527276039124, 0.0), (0.42866164445877075, 0.9912034273147583, 0.0),
+ (0.1234154999256134, -1.0, 0.0), (-0.1234154999256134, -1.0, 0.0),
+ (0.1234154999256134, -1.0971899032592773, 0.0), (-0.1234154999256134, -1.0971899032592773, 0.0),
+ (0.3031257688999176, -1.0971899032592773, 0.0), (-0.3031257688999176, -1.0971899032592773, 0.0),
+ (0.0, -1.25, 0.0)],
+ 'edges': [(0, 2), (2, 3), (3, 4), (4, 1), (5, 7), (7, 8), (8, 9), (9, 6), (10, 12), (12, 13), (13, 14),
+ (14, 11), (15, 17), (17, 18), (18, 19), (19, 16), (0, 10), (6, 15), (11, 16), (20, 5), (21, 1),
+ (22, 20), (23, 21), (24, 22), (25, 23), (26, 24), (26, 25)]
}
widgets['GroundSensor'] = {
- 'vertices': [(-0.5, -0.822191596031189, 0.0), (-0.32219159603118896, -1.0, 0.0), (-0.4761781692504883, -0.9110957980155945, 0.0),
- (-0.4110957980155945, -0.9761781692504883, 0.0), (0.32219159603118896, -1.0, 0.0), (0.5, -0.822191596031189, 0.0),
- (0.4110957980155945, -0.9761781692504883, 0.0), (0.47617819905281067, -0.9110957980155945, 0.0), (-0.5, 0.822191596031189, 0.0),
- (-0.32219159603118896, 1.0, 0.0), (-0.4761781692504883, 0.9110957980155945, 0.0), (-0.4110957980155945, 0.9761781692504883, 0.0),
- (0.5, 0.822191596031189, 0.0), (0.32219159603118896, 1.0, 0.0), (0.4761781692504883, 0.9110957980155945, 0.0),
- (0.4110957980155945, 0.9761781692504883, 0.0)],
- 'edges': [(0, 2), (2, 3), (3, 1), (4, 6), (6, 7), (7, 5), (8, 10), (10, 11), (11, 9), (12, 14), (14, 15), (15, 13), (0, 8), (1, 4), (5, 12), (9, 13)]
+ 'vertices': [(-0.5, -0.822191596031189, 0.0), (-0.32219159603118896, -1.0, 0.0),
+ (-0.4761781692504883, -0.9110957980155945, 0.0), (-0.4110957980155945, -0.9761781692504883, 0.0),
+ (0.32219159603118896, -1.0, 0.0), (0.5, -0.822191596031189, 0.0),
+ (0.4110957980155945, -0.9761781692504883, 0.0), (0.47617819905281067, -0.9110957980155945, 0.0),
+ (-0.5, 0.822191596031189, 0.0), (-0.32219159603118896, 1.0, 0.0),
+ (-0.4761781692504883, 0.9110957980155945, 0.0), (-0.4110957980155945, 0.9761781692504883, 0.0),
+ (0.5, 0.822191596031189, 0.0), (0.32219159603118896, 1.0, 0.0),
+ (0.4761781692504883, 0.9110957980155945, 0.0), (0.4110957980155945, 0.9761781692504883, 0.0)],
+ 'edges': [(0, 2), (2, 3), (3, 1), (4, 6), (6, 7), (7, 5), (8, 10), (10, 11), (11, 9), (12, 14), (14, 15),
+ (15, 13), (0, 8), (1, 4), (5, 12), (9, 13)]
}
widgets['GroundSensor.Axle'] = {
- 'vertices': [(0.0, 0.5, 0.0), (-0.19134172797203064, 0.4619397521018982, 0.0), (-0.3535533845424652, 0.3535533845424652, 0.0),
- (-0.4619397521018982, 0.19134171307086945, 0.0), (-0.5, -2.1855694143368964e-08, 0.0), (-0.4619397521018982, -0.19134175777435303, 0.0),
- (-0.3535533845424652, -0.3535533845424652, 0.0), (-0.19134174287319183, -0.4619397521018982, 0.0), (-7.549790126404332e-08, -0.5, 0.0),
- (0.1913416087627411, -0.46193981170654297, 0.0), (0.35355329513549805, -0.35355350375175476, 0.0), (0.4619397521018982, -0.19134178757667542, 0.0),
- (0.5, 5.962440319251527e-09, 0.0), (0.4619397222995758, 0.1913418024778366, 0.0), (0.35355326533317566, 0.35355350375175476, 0.0),
- (0.19134148955345154, 0.46193987131118774, 0.0), (0.0, 0.2866188585758209, 0.0), (-0.1096842959523201, 0.2648012936115265, 0.0),
- (-0.2026701420545578, 0.2026701420545578, 0.0), (-0.2648012936115265, 0.1096842885017395, 0.0), (-0.2866188585758209, -1.2528508008813333e-08, 0.0),
- (-0.2648012936115265, -0.10968431085348129, 0.0), (-0.2026701420545578, -0.2026701420545578, 0.0), (-0.1096843034029007, -0.2648012936115265, 0.0),
- (-4.327824498773225e-08, -0.2866188585758209, 0.0), (0.10968422889709473, -0.2648013234138489, 0.0),
- (0.20267008244991302, -0.20267020165920258, 0.0), (0.2648012936115265, -0.10968433320522308, 0.0),
- (0.2866188585758209, 3.4178957442065894e-09, 0.0), (0.2648012638092041, 0.10968434065580368, 0.0),
- (0.20267006754875183, 0.20267020165920258, 0.0), (0.10968416184186935, 0.26480135321617126, 0.0), (-2.1639122493866125e-08, 0.0, 0.0)],
- 'edges': [(1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (9, 8), (10, 9), (11, 10), (12, 11), (13, 12), (14, 13), (15, 14), (0, 15),
- (17, 16), (18, 17), (19, 18), (20, 19), (21, 20), (22, 21), (23, 22), (24, 23), (25, 24), (26, 25), (27, 26), (28, 27), (29, 28), (30, 29),
- (31, 30), (16, 31), (32, 24), (16, 32), (20, 32), (28, 32)]
- }
-
+ 'vertices': [(0.0, 0.5, 0.0), (-0.19134172797203064, 0.4619397521018982, 0.0),
+ (-0.3535533845424652, 0.3535533845424652, 0.0), (-0.4619397521018982, 0.19134171307086945, 0.0),
+ (-0.5, -2.1855694143368964e-08, 0.0), (-0.4619397521018982, -0.19134175777435303, 0.0),
+ (-0.3535533845424652, -0.3535533845424652, 0.0), (-0.19134174287319183, -0.4619397521018982, 0.0),
+ (-7.549790126404332e-08, -0.5, 0.0), (0.1913416087627411, -0.46193981170654297, 0.0),
+ (0.35355329513549805, -0.35355350375175476, 0.0), (0.4619397521018982, -0.19134178757667542, 0.0),
+ (0.5, 5.962440319251527e-09, 0.0), (0.4619397222995758, 0.1913418024778366, 0.0),
+ (0.35355326533317566, 0.35355350375175476, 0.0), (0.19134148955345154, 0.46193987131118774, 0.0),
+ (0.0, 0.2866188585758209, 0.0), (-0.1096842959523201, 0.2648012936115265, 0.0),
+ (-0.2026701420545578, 0.2026701420545578, 0.0), (-0.2648012936115265, 0.1096842885017395, 0.0),
+ (-0.2866188585758209, -1.2528508008813333e-08, 0.0),
+ (-0.2648012936115265, -0.10968431085348129, 0.0), (-0.2026701420545578, -0.2026701420545578, 0.0),
+ (-0.1096843034029007, -0.2648012936115265, 0.0),
+ (-4.327824498773225e-08, -0.2866188585758209, 0.0),
+ (0.10968422889709473, -0.2648013234138489, 0.0), (0.20267008244991302, -0.20267020165920258, 0.0),
+ (0.2648012936115265, -0.10968433320522308, 0.0), (0.2866188585758209, 3.4178957442065894e-09, 0.0),
+ (0.2648012638092041, 0.10968434065580368, 0.0), (0.20267006754875183, 0.20267020165920258, 0.0),
+ (0.10968416184186935, 0.26480135321617126, 0.0), (-2.1639122493866125e-08, 0.0, 0.0)],
+ 'edges': [(1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5), (7, 6), (8, 7), (9, 8), (10, 9), (11, 10), (12, 11),
+ (13, 12), (14, 13), (15, 14), (0, 15), (17, 16), (18, 17), (19, 18), (20, 19), (21, 20), (22, 21),
+ (23, 22), (24, 23), (25, 24), (26, 25), (27, 26), (28, 27), (29, 28), (30, 29), (31, 30), (16, 31),
+ (32, 24), (16, 32), (20, 32), (28, 32)]}
widgets['Wheel'] = {
'vertices': [(0, 0.9999999403953552, -1.1874362826347351e-07), (0, 0.9807851910591125, 0.19509020447731018),
(0, 0.9238794445991516, 0.38268333673477173), (0, 0.8314695358276367, 0.555570125579834),
@@ -242,127 +259,217 @@ def get_widgets():
}
widgets['Steering'] = {
- 'vertices': [(0.7296777367591858, 0.07034172862768173, 0.0), (0.057004380971193314, -0.07034172862768173, 0.0), (0.7296777367591858, -0.07034172862768173, 0.0),
- (0.057004380971193314, 0.07034172862768173, 0.0), (0.7296777367591858, 0.16664999723434448, 0.0), (0.7296777367591858, -0.16664999723434448, 0.0),
- (0.9998999834060669, 0.0, 0.0), (-0.7296777367591858, 0.07034172862768173, 0.0), (-0.057004380971193314, -0.07034172862768173, 0.0),
- (-0.7296777367591858, -0.07034172862768173, 0.0), (-0.057004380971193314, 0.07034172862768173, 0.0), (-0.7296777367591858, 0.16664999723434448, 0.0),
+ 'vertices': [(0.7296777367591858, 0.07034172862768173, 0.0), (0.057004380971193314, -0.07034172862768173, 0.0),
+ (0.7296777367591858, -0.07034172862768173, 0.0),
+ (0.057004380971193314, 0.07034172862768173, 0.0), (0.7296777367591858, 0.16664999723434448, 0.0),
+ (0.7296777367591858, -0.16664999723434448, 0.0),
+ (0.9998999834060669, 0.0, 0.0), (-0.7296777367591858, 0.07034172862768173, 0.0),
+ (-0.057004380971193314, -0.07034172862768173, 0.0),
+ (-0.7296777367591858, -0.07034172862768173, 0.0),
+ (-0.057004380971193314, 0.07034172862768173, 0.0), (-0.7296777367591858, 0.16664999723434448, 0.0),
(-0.7296777367591858, -0.16664999723434448, 0.0), (-0.9998999834060669, 0.0, 0.0)],
- 'edges': [(2, 1), (3, 0), (1, 3), (0, 4), (5, 2), (4, 6), (6, 5), (9, 8), (10, 7), (8, 10), (7, 11), (12, 9), (11, 13), (13, 12)]
+ 'edges': [(2, 1), (3, 0), (1, 3), (0, 4), (5, 2), (4, 6), (6, 5), (9, 8), (10, 7), (8, 10), (7, 11), (12, 9),
+ (11, 13), (13, 12)]
}
widgets['Suspension'] = {
- 'vertices': [(-0.42728525400161743, -0.12928833067417145, -0.04404989629983902), (-0.06909304857254028, 0.2578587830066681, 0.0),
+ 'vertices': [(-0.42728525400161743, -0.12928833067417145, -0.04404989629983902),
+ (-0.06909304857254028, 0.2578587830066681, 0.0),
(-0.13347753882408142, 0.23118986189365387, 0.0), (-0.1887657195329666, 0.1887657195329666, 0.0),
(-0.23118992149829865, 0.13347753882408142, 0.0), (-0.2578587830066681, 0.06909307092428207, 0.0),
- (-0.42728525400161743, -0.06909316033124924, -0.025838270783424377), (-0.2578587830066681, -0.06909302622079849, 0.0),
- (-0.23118986189365387, -0.13347747921943665, 0.0), (-0.18876579403877258, -0.18876568973064423, 0.0),
+ (-0.42728525400161743, -0.06909316033124924, -0.025838270783424377),
+ (-0.2578587830066681, -0.06909302622079849, 0.0),
+ (-0.23118986189365387, -0.13347747921943665, 0.0),
+ (-0.18876579403877258, -0.18876568973064423, 0.0),
(-0.1334775984287262, -0.23118983209133148, 0.0), (-0.06909313797950745, -0.2578587532043457, 0.0),
- (-0.42728525400161743, 0.06909292191267014, -0.025838270783424377), (0.06909293681383133, -0.2578587830066681, 0.0),
+ (-0.42728525400161743, 0.06909292191267014, -0.025838270783424377),
+ (0.06909293681383133, -0.2578587830066681, 0.0),
(0.13347743451595306, -0.23118995130062103, 0.0), (0.18876565992832184, -0.18876583874225616, 0.0),
(0.23118983209133148, -0.1334775984287262, 0.0), (0.2578587532043457, -0.06909316033124924, 0.0),
- (0.42728525400161743, -0.06909316033124924, -0.025838270783424377), (0.2578587830066681, 0.06909292191267014, 0.0),
+ (0.42728525400161743, -0.06909316033124924, -0.025838270783424377),
+ (0.2578587830066681, 0.06909292191267014, 0.0),
(0.23118992149829865, 0.13347740471363068, 0.0), (0.18876585364341736, 0.18876561522483826, 0.0),
(0.13347768783569336, 0.2311897873878479, 0.0), (0.0690932497382164, 0.2578587532043457, 0.0),
- (0.42728525400161743, 0.06909292191267014, -0.025838270783424377), (0.42728525400161743, -0.12928833067417145, -0.04404989629983902),
- (0.42728525400161743, 0.12928791344165802, -0.04404982924461365), (0.6011841893196106, -2.227646831443053e-07, -0.12004293501377106),
- (-0.42728525400161743, 0.12928791344165802, -0.04404982924461365), (-0.6011841893196106, -2.227646831443053e-07, -0.12004293501377106),
- (-0.06909316033124924, -0.42728525400161743, -0.025838270783424377), (0.06909292191267014, -0.42728525400161743, -0.025838270783424377),
- (-0.12928833067417145, -0.42728525400161743, -0.04404989629983902), (0.12928785383701324, -0.42728525400161743, -0.04404980689287186),
- (-2.545882011872891e-07, -0.6011841893196106, -0.12004290521144867), (-0.06909316033124924, 0.42728525400161743, -0.025838270783424377),
- (0.06909292191267014, 0.42728525400161743, -0.025838270783424377), (-0.12928833067417145, 0.42728525400161743, -0.04404989629983902),
- (0.12928785383701324, 0.42728525400161743, -0.04404982924461365), (-2.545882011872891e-07, 0.6011841893196106, -0.12004293501377106),
- (0.0, 0.1595769226551056, 0.0), (-0.0797884613275528, 0.13819767534732819, 0.0), (-0.13819767534732819, 0.079788438975811, 0.0),
- (-0.1595769226551056, -6.975329203129377e-09, 0.0), (-0.13819767534732819, -0.0797884613275528, 0.0),
- (-0.0797884613275528, -0.13819767534732819, 0.0), (-2.409544741510672e-08, -0.1595769226551056, 0.0),
+ (0.42728525400161743, 0.06909292191267014, -0.025838270783424377),
+ (0.42728525400161743, -0.12928833067417145, -0.04404989629983902),
+ (0.42728525400161743, 0.12928791344165802, -0.04404982924461365),
+ (0.6011841893196106, -2.227646831443053e-07, -0.12004293501377106),
+ (-0.42728525400161743, 0.12928791344165802, -0.04404982924461365),
+ (-0.6011841893196106, -2.227646831443053e-07, -0.12004293501377106),
+ (-0.06909316033124924, -0.42728525400161743, -0.025838270783424377),
+ (0.06909292191267014, -0.42728525400161743, -0.025838270783424377),
+ (-0.12928833067417145, -0.42728525400161743, -0.04404989629983902),
+ (0.12928785383701324, -0.42728525400161743, -0.04404980689287186),
+ (-2.545882011872891e-07, -0.6011841893196106, -0.12004290521144867),
+ (-0.06909316033124924, 0.42728525400161743, -0.025838270783424377),
+ (0.06909292191267014, 0.42728525400161743, -0.025838270783424377),
+ (-0.12928833067417145, 0.42728525400161743, -0.04404989629983902),
+ (0.12928785383701324, 0.42728525400161743, -0.04404982924461365),
+ (-2.545882011872891e-07, 0.6011841893196106, -0.12004293501377106),
+ (0.0, 0.1595769226551056, 0.0), (-0.0797884613275528, 0.13819767534732819, 0.0),
+ (-0.13819767534732819, 0.079788438975811, 0.0),
+ (-0.1595769226551056, -6.975329203129377e-09, 0.0),
+ (-0.13819767534732819, -0.0797884613275528, 0.0),
+ (-0.0797884613275528, -0.13819767534732819, 0.0),
+ (-2.409544741510672e-08, -0.1595769226551056, 0.0),
(0.07978841662406921, -0.13819767534732819, 0.0), (0.1381976306438446, -0.07978851348161697, 0.0),
(0.1595769226551056, -7.418926628588451e-08, 0.0), (0.13819773495197296, 0.07978837937116623, 0.0),
- (0.07978855073451996, 0.1381976157426834, 0.0), (0.3002154231071472, 0.06909292191267014, -0.0018598437309265137),
- (0.34257203340530396, 0.06909292191267014, -0.007112756371498108), (0.3849286139011383, 0.06909292191267014, -0.015268802642822266),
- (0.3849286139011383, -0.06909316033124924, -0.015268847346305847), (0.34257200360298157, -0.06909316033124924, -0.00711272656917572),
- (0.30021539330482483, -0.06909316033124924, -0.0018598437309265137), (-0.3002154231071472, 0.06909303367137909, -0.0018598437309265137),
- (-0.34257203340530396, 0.0690929964184761, -0.007112756371498108), (-0.3849286139011383, 0.06909295171499252, -0.015268802642822266),
- (-0.3849286139011383, -0.06909313052892685, -0.015268802642822266), (-0.34257200360298157, -0.06909309327602386, -0.007112711668014526),
- (-0.30021539330482483, -0.06909305602312088, -0.0018598586320877075), (-0.06909314543008804, -0.30021539330482483, -0.0018598437309265137),
- (-0.06909314543008804, -0.34257200360298157, -0.00711272656917572), (-0.06909315288066864, -0.3849286139011383, -0.015268847346305847),
- (0.06909293681383133, -0.3002154231071472, -0.0018598437309265137), (0.06909292936325073, -0.34257203340530396, -0.007112756371498108),
- (0.06909292191267014, -0.3849286139011383, -0.015268802642822266), (-0.06909307837486267, 0.3002154231071472, -0.0018598437309265137),
- (-0.06909310817718506, 0.34257203340530396, -0.007112756371498108), (-0.06909313052892685, 0.3849286139011383, -0.015268802642822266),
- (0.06909316033124924, 0.30021539330482483, -0.0018598437309265137), (0.06909307837486267, 0.34257200360298157, -0.00711272656917572),
+ (0.07978855073451996, 0.1381976157426834, 0.0),
+ (0.3002154231071472, 0.06909292191267014, -0.0018598437309265137),
+ (0.34257203340530396, 0.06909292191267014, -0.007112756371498108),
+ (0.3849286139011383, 0.06909292191267014, -0.015268802642822266),
+ (0.3849286139011383, -0.06909316033124924, -0.015268847346305847),
+ (0.34257200360298157, -0.06909316033124924, -0.00711272656917572),
+ (0.30021539330482483, -0.06909316033124924, -0.0018598437309265137),
+ (-0.3002154231071472, 0.06909303367137909, -0.0018598437309265137),
+ (-0.34257203340530396, 0.0690929964184761, -0.007112756371498108),
+ (-0.3849286139011383, 0.06909295171499252, -0.015268802642822266),
+ (-0.3849286139011383, -0.06909313052892685, -0.015268802642822266),
+ (-0.34257200360298157, -0.06909309327602386, -0.007112711668014526),
+ (-0.30021539330482483, -0.06909305602312088, -0.0018598586320877075),
+ (-0.06909314543008804, -0.30021539330482483, -0.0018598437309265137),
+ (-0.06909314543008804, -0.34257200360298157, -0.00711272656917572),
+ (-0.06909315288066864, -0.3849286139011383, -0.015268847346305847),
+ (0.06909293681383133, -0.3002154231071472, -0.0018598437309265137),
+ (0.06909292936325073, -0.34257203340530396, -0.007112756371498108),
+ (0.06909292191267014, -0.3849286139011383, -0.015268802642822266),
+ (-0.06909307837486267, 0.3002154231071472, -0.0018598437309265137),
+ (-0.06909310817718506, 0.34257203340530396, -0.007112756371498108),
+ (-0.06909313052892685, 0.3849286139011383, -0.015268802642822266),
+ (0.06909316033124924, 0.30021539330482483, -0.0018598437309265137),
+ (0.06909307837486267, 0.34257200360298157, -0.00711272656917572),
(0.0690930038690567, 0.3849286139011383, -0.015268847346305847)],
- 'edges': [(2, 1), (3, 2), (4, 3), (5, 4), (12, 28), (0, 6), (8, 7), (9, 8), (10, 9), (11, 10), (28, 29), (29, 0), (14, 13), (15, 14), (16, 15),
- (17, 16), (54, 24), (57, 17), (20, 19), (21, 20), (22, 21), (23, 22), (60, 12), (25, 18), (24, 26), (27, 25), (26, 27), (63, 7),
- (32, 30), (31, 33), (34, 32), (33, 34), (66, 30), (69, 31), (37, 35), (36, 38), (39, 37), (38, 39), (72, 35), (75, 36), (41, 40),
- (42, 41), (43, 42), (44, 43), (45, 44), (46, 45), (47, 46), (48, 47), (49, 48), (50, 49), (51, 50), (40, 51), (19, 52), (52, 53),
- (53, 54), (18, 55), (55, 56), (56, 57), (5, 58), (58, 59), (59, 60), (6, 61), (61, 62), (62, 63), (11, 64), (64, 65), (65, 66),
- (13, 67), (67, 68), (68, 69), (1, 70), (70, 71), (71, 72), (23, 73), (73, 74), (74, 75)]
- }
+ 'edges': [(2, 1), (3, 2), (4, 3), (5, 4), (12, 28), (0, 6), (8, 7), (9, 8), (10, 9), (11, 10), (28, 29),
+ (29, 0), (14, 13), (15, 14), (16, 15), (17, 16), (54, 24), (57, 17), (20, 19), (21, 20), (22, 21),
+ (23, 22), (60, 12), (25, 18), (24, 26), (27, 25), (26, 27), (63, 7), (32, 30), (31, 33), (34, 32),
+ (33, 34), (66, 30), (69, 31), (37, 35), (36, 38), (39, 37), (38, 39), (72, 35), (75, 36), (41, 40),
+ (42, 41), (43, 42), (44, 43), (45, 44), (46, 45), (47, 46), (48, 47), (49, 48), (50, 49), (51, 50),
+ (40, 51), (19, 52), (52, 53), (53, 54), (18, 55), (55, 56), (56, 57), (5, 58), (58, 59), (59, 60),
+ (6, 61), (61, 62), (62, 63), (11, 64), (64, 65), (65, 66), (13, 67), (67, 68), (68, 69), (1, 70),
+ (70, 71), (71, 72), (23, 73), (73, 74), (74, 75)]}
widgets['WheelDamper'] = {
- 'vertices': [(-0.17770397663116455, -0.09192684292793274, 0.14030149579048157), (-0.17770397663116455, -0.09192684292793274, 0.23383590579032898),
- (-0.10793274641036987, -0.16846297681331635, 0.13250692188739777), (-0.10793278366327286, -0.16846297681331635, 0.22604137659072876),
- (-0.009241040796041489, -0.1998595893383026, 0.12471239268779755), (-0.009241056628525257, -0.19985966384410858, 0.21824686229228973),
- (0.09192679077386856, -0.17770402133464813, 0.11691785603761673), (0.09192682057619095, -0.17770402133464813, 0.21045231819152832),
- (0.16846293210983276, -0.10793281346559525, 0.1091233491897583), (0.16846293210983276, -0.10793281346559525, 0.2026577889919281),
- (0.1998595893383026, -0.009241072461009026, 0.10132881999015808), (0.1998595893383026, -0.009241089224815369, 0.19486328959465027),
- (0.17770397663116455, 0.09192679077386856, 0.09353431314229965), (0.1777040809392929, 0.09192677587270737, 0.18706879019737244),
- (0.10793274641036987, 0.16846294701099396, 0.08573977649211884), (0.10793281346559525, 0.16846294701099396, 0.17927424609661102),
- (0.009240993298590183, 0.19985954463481903, 0.0779452696442604), (0.009241056628525257, 0.1998595893383026, 0.1714797168970108),
- (-0.09192684292793274, 0.17770391702651978, 0.07015073299407959), (-0.09192682057619095, 0.17770402133464813, 0.16368518769741058),
- (-0.16846294701099396, 0.10793264955282211, 0.06235618144273758), (-0.16846297681331635, 0.10793274641036987, 0.15589064359664917),
- (-0.19985954463481903, 0.009240960702300072, 0.05456162989139557), (-0.1998595893383026, 0.00924102496355772, 0.14809606969356537),
- (-0.17770391702651978, -0.09192687273025513, 0.04676707834005356), (-0.17770402133464813, -0.09192684292793274, 0.14030154049396515),
- (-0.1079326793551445, -0.16846294701099396, 0.03897252678871155), (-0.10793278366327286, -0.16846302151679993, 0.13250696659088135),
- (-0.00924097653478384, -0.19985954463481903, 0.03117799013853073), (-0.009241056628525257, -0.19985966384410858, 0.12471242249011993),
- (0.09192684292793274, -0.17770391702651978, 0.02338346280157566), (0.09192682057619095, -0.1777040809392929, 0.11691789329051971),
- (0.16846293210983276, -0.1079326942563057, 0.015588936395943165), (0.16846293210983276, -0.10793283581733704, 0.10912337899208069),
- (0.19985954463481903, -0.009240993298590183, 0.0077944230288267136), (0.1998595893383026, -0.009241105057299137, 0.10132886469364166),
- (0.17770391702651978, 0.09192683547735214, -9.42906623890849e-08), (0.1777040809392929, 0.09192677587270737, 0.09353433549404144),
- (0.1079326793551445, 0.16846290230751038, -0.007794610224664211), (0.10793281346559525, 0.16846294701099396, 0.08573982864618301),
- (0.00924097653478384, 0.19985945522785187, -0.015589137561619282), (0.009241056628525257, 0.1998595893383026, 0.0779452919960022),
- (-0.09192682057619095, 0.177703857421875, -0.023383673280477524), (-0.09192682057619095, 0.17770402133464813, 0.07015074789524078),
- (-0.16846290230751038, 0.10793262720108032, -0.031178224831819534), (-0.16846294701099396, 0.10793274641036987, 0.06235621124505997),
- (-0.19985945522785187, 0.009240944869816303, -0.03897276148200035), (-0.1998595893383026, 0.00924102496355772, 0.05456166714429855),
- (-0.177703857421875, -0.09192684292793274, -0.046767283231019974), (-0.17770402133464813, -0.09192684292793274, 0.04676711559295654),
- (-0.10793262720108032, -0.16846290230751038, -0.054561812430620193), (-0.10793278366327286, -0.16846302151679993, 0.038972560316324234),
- (-0.009240960702300072, -0.19985948503017426, -0.062356337904930115), (-0.00924102496355772, -0.19985966384410858, 0.031178021803498268),
- (0.09192684292793274, -0.177703857421875, -0.07015086710453033), (0.09192683547735214, -0.17770402133464813, 0.023383498191833496),
- (0.16846293210983276, -0.10793262720108032, -0.07794538885354996), (0.16846302151679993, -0.10793278366327286, 0.015588970854878426),
- (0.19985945522785187, -0.009240944869816303, -0.08573991060256958), (0.19985966384410858, -0.009241040796041489, 0.007794454228132963),
- (0.1777038276195526, 0.09192683547735214, -0.09353446215391159), (0.1777040809392929, 0.09192684292793274, -6.286042264491698e-08),
- (0.10793259739875793, 0.1684628427028656, -0.10132896900177002), (0.10793281346559525, 0.16846302151679993, -0.007794579025357962),
- (0.00924092996865511, 0.1998593956232071, -0.10912348330020905), (0.009241040796041489, 0.19985966384410858, -0.015589105896651745),
- (-0.09192682057619095, 0.17770376801490784, -0.11691801995038986), (-0.09192684292793274, 0.17770405113697052, -0.023383641615509987),
- (-0.1684628427028656, 0.10793255269527435, -0.12471257150173187), (-0.16846302151679993, 0.10793274641036987, -0.031178191304206848),
- (-0.1998593509197235, 0.009240913204848766, -0.1325071007013321), (-0.19985966384410858, 0.009240993298590183, -0.03897274285554886),
- (-0.17770376801490784, -0.09192683547735214, -0.1403016299009323), (-0.17770402133464813, -0.09192688763141632, -0.046767283231019974),
- (-0.10793255269527435, -0.1684628427028656, -0.14809612929821014), (-0.10793274641036987, -0.16846303641796112, -0.054561812430620193),
- (-0.009240896441042423, -0.1998593509197235, -0.15589067339897156), (-0.009240993298590183, -0.19985966384410858, -0.062356337904930115),
- (0.09192683547735214, -0.17770375311374664, -0.16368518769741058), (0.09192688763141632, -0.17770402133464813, -0.07015086710453033),
- (0.1684628129005432, -0.10793253034353256, -0.1714797168970108), (0.16846302151679993, -0.10793274641036987, -0.07794538885354996),
- (0.1998593509197235, -0.009240913204848766, -0.17927424609661102), (0.1998595893383026, -0.009241009131073952, -0.08573991060256958),
- (0.17770375311374664, 0.09192679077386856, -0.18706879019737244), (0.17770397663116455, 0.09192684292793274, -0.09353446215391159),
- (0.10793255269527435, 0.1684628278017044, -0.19486330449581146), (0.10793274641036987, 0.16846294701099396, -0.10132896900177002),
- (0.00924092996865511, 0.1998593509197235, -0.20265783369541168), (0.00924102496355772, 0.19985954463481903, -0.10912348330020905),
- (-0.09192678332328796, 0.17770370841026306, -0.2104523628950119), (-0.09192679077386856, 0.17770394682884216, -0.11691801995038986),
- (-0.1684628129005432, 0.10793255269527435, -0.21824689209461212), (-0.16846290230751038, 0.10793272405862808, -0.12471257150173187),
- (-0.19985929131507874, 0.00924092996865511, -0.22604137659072876), (-0.19985954463481903, 0.00924102496355772, -0.1325071007013321),
- (-0.17770370841026306, -0.09192678332328796, -0.23383590579032898), (-0.17770391702651978, -0.09192680567502975, -0.1403016299009323),
- (-0.21371114253997803, -0.21371114253997803, 0.24772925674915314), (0.21371114253997803, -0.21371114253997803, 0.24772925674915314),
- (-0.21371114253997803, 0.21371114253997803, 0.24772925674915314), (0.21371114253997803, 0.21371114253997803, 0.24772925674915314),
- (-0.21371114253997803, -0.21371114253997803, -0.24772925674915314), (0.21371114253997803, -0.21371114253997803, -0.24772925674915314),
- (-0.21371114253997803, 0.21371114253997803, -0.24772925674915314), (0.21371114253997803, 0.21371114253997803, -0.24772925674915314)],
- 'edges': [(1, 3), (2, 0), (3, 5), (4, 2), (5, 7), (6, 4), (7, 9), (8, 6), (9, 11), (10, 8), (11, 13), (12, 10), (13, 15), (14, 12),
- (15, 17), (16, 14), (17, 19), (18, 16), (19, 21), (20, 18), (21, 23), (22, 20), (23, 25), (24, 22), (25, 27), (26, 24),
- (27, 29), (28, 26), (29, 31), (30, 28), (31, 33), (32, 30), (33, 35), (34, 32), (35, 37), (36, 34), (37, 39), (38, 36),
- (39, 41), (40, 38), (41, 43), (42, 40), (43, 45), (44, 42), (45, 47), (46, 44), (47, 49), (48, 46), (49, 51), (50, 48),
- (51, 53), (52, 50), (53, 55), (54, 52), (55, 57), (56, 54), (57, 59), (58, 56), (59, 61), (60, 58), (61, 63), (62, 60),
- (63, 65), (64, 62), (65, 67), (66, 64), (67, 69), (68, 66), (69, 71), (70, 68), (71, 73), (72, 70), (73, 75), (74, 72),
- (75, 77), (76, 74), (77, 79), (78, 76), (79, 81), (80, 78), (81, 83), (82, 80), (83, 85), (84, 82), (85, 87), (86, 84),
- (87, 89), (88, 86), (89, 91), (90, 88), (91, 93), (92, 90), (93, 95), (94, 92), (95, 97), (96, 94), (100, 98), (98, 99),
- (99, 101), (101, 100), (104, 102), (102, 103), (103, 105), (105, 104)]
+ 'vertices': [(-0.17770397663116455, -0.09192684292793274, 0.14030149579048157),
+ (-0.17770397663116455, -0.09192684292793274, 0.23383590579032898),
+ (-0.10793274641036987, -0.16846297681331635, 0.13250692188739777),
+ (-0.10793278366327286, -0.16846297681331635, 0.22604137659072876),
+ (-0.009241040796041489, -0.1998595893383026, 0.12471239268779755),
+ (-0.009241056628525257, -0.19985966384410858, 0.21824686229228973),
+ (0.09192679077386856, -0.17770402133464813, 0.11691785603761673),
+ (0.09192682057619095, -0.17770402133464813, 0.21045231819152832),
+ (0.16846293210983276, -0.10793281346559525, 0.1091233491897583),
+ (0.16846293210983276, -0.10793281346559525, 0.2026577889919281),
+ (0.1998595893383026, -0.009241072461009026, 0.10132881999015808),
+ (0.1998595893383026, -0.009241089224815369, 0.19486328959465027),
+ (0.17770397663116455, 0.09192679077386856, 0.09353431314229965),
+ (0.1777040809392929, 0.09192677587270737, 0.18706879019737244),
+ (0.10793274641036987, 0.16846294701099396, 0.08573977649211884),
+ (0.10793281346559525, 0.16846294701099396, 0.17927424609661102),
+ (0.009240993298590183, 0.19985954463481903, 0.0779452696442604),
+ (0.009241056628525257, 0.1998595893383026, 0.1714797168970108),
+ (-0.09192684292793274, 0.17770391702651978, 0.07015073299407959),
+ (-0.09192682057619095, 0.17770402133464813, 0.16368518769741058),
+ (-0.16846294701099396, 0.10793264955282211, 0.06235618144273758),
+ (-0.16846297681331635, 0.10793274641036987, 0.15589064359664917),
+ (-0.19985954463481903, 0.009240960702300072, 0.05456162989139557),
+ (-0.1998595893383026, 0.00924102496355772, 0.14809606969356537),
+ (-0.17770391702651978, -0.09192687273025513, 0.04676707834005356),
+ (-0.17770402133464813, -0.09192684292793274, 0.14030154049396515),
+ (-0.1079326793551445, -0.16846294701099396, 0.03897252678871155),
+ (-0.10793278366327286, -0.16846302151679993, 0.13250696659088135),
+ (-0.00924097653478384, -0.19985954463481903, 0.03117799013853073),
+ (-0.009241056628525257, -0.19985966384410858, 0.12471242249011993),
+ (0.09192684292793274, -0.17770391702651978, 0.02338346280157566),
+ (0.09192682057619095, -0.1777040809392929, 0.11691789329051971),
+ (0.16846293210983276, -0.1079326942563057, 0.015588936395943165),
+ (0.16846293210983276, -0.10793283581733704, 0.10912337899208069),
+ (0.19985954463481903, -0.009240993298590183, 0.0077944230288267136),
+ (0.1998595893383026, -0.009241105057299137, 0.10132886469364166),
+ (0.17770391702651978, 0.09192683547735214, -9.42906623890849e-08),
+ (0.1777040809392929, 0.09192677587270737, 0.09353433549404144),
+ (0.1079326793551445, 0.16846290230751038, -0.007794610224664211),
+ (0.10793281346559525, 0.16846294701099396, 0.08573982864618301),
+ (0.00924097653478384, 0.19985945522785187, -0.015589137561619282),
+ (0.009241056628525257, 0.1998595893383026, 0.0779452919960022),
+ (-0.09192682057619095, 0.177703857421875, -0.023383673280477524),
+ (-0.09192682057619095, 0.17770402133464813, 0.07015074789524078),
+ (-0.16846290230751038, 0.10793262720108032, -0.031178224831819534),
+ (-0.16846294701099396, 0.10793274641036987, 0.06235621124505997),
+ (-0.19985945522785187, 0.009240944869816303, -0.03897276148200035),
+ (-0.1998595893383026, 0.00924102496355772, 0.05456166714429855),
+ (-0.177703857421875, -0.09192684292793274, -0.046767283231019974),
+ (-0.17770402133464813, -0.09192684292793274, 0.04676711559295654),
+ (-0.10793262720108032, -0.16846290230751038, -0.054561812430620193),
+ (-0.10793278366327286, -0.16846302151679993, 0.038972560316324234),
+ (-0.009240960702300072, -0.19985948503017426, -0.062356337904930115),
+ (-0.00924102496355772, -0.19985966384410858, 0.031178021803498268),
+ (0.09192684292793274, -0.177703857421875, -0.07015086710453033),
+ (0.09192683547735214, -0.17770402133464813, 0.023383498191833496),
+ (0.16846293210983276, -0.10793262720108032, -0.07794538885354996),
+ (0.16846302151679993, -0.10793278366327286, 0.015588970854878426),
+ (0.19985945522785187, -0.009240944869816303, -0.08573991060256958),
+ (0.19985966384410858, -0.009241040796041489, 0.007794454228132963),
+ (0.1777038276195526, 0.09192683547735214, -0.09353446215391159),
+ (0.1777040809392929, 0.09192684292793274, -6.286042264491698e-08),
+ (0.10793259739875793, 0.1684628427028656, -0.10132896900177002),
+ (0.10793281346559525, 0.16846302151679993, -0.007794579025357962),
+ (0.00924092996865511, 0.1998593956232071, -0.10912348330020905),
+ (0.009241040796041489, 0.19985966384410858, -0.015589105896651745),
+ (-0.09192682057619095, 0.17770376801490784, -0.11691801995038986),
+ (-0.09192684292793274, 0.17770405113697052, -0.023383641615509987),
+ (-0.1684628427028656, 0.10793255269527435, -0.12471257150173187),
+ (-0.16846302151679993, 0.10793274641036987, -0.031178191304206848),
+ (-0.1998593509197235, 0.009240913204848766, -0.1325071007013321),
+ (-0.19985966384410858, 0.009240993298590183, -0.03897274285554886),
+ (-0.17770376801490784, -0.09192683547735214, -0.1403016299009323),
+ (-0.17770402133464813, -0.09192688763141632, -0.046767283231019974),
+ (-0.10793255269527435, -0.1684628427028656, -0.14809612929821014),
+ (-0.10793274641036987, -0.16846303641796112, -0.054561812430620193),
+ (-0.009240896441042423, -0.1998593509197235, -0.15589067339897156),
+ (-0.009240993298590183, -0.19985966384410858, -0.062356337904930115),
+ (0.09192683547735214, -0.17770375311374664, -0.16368518769741058),
+ (0.09192688763141632, -0.17770402133464813, -0.07015086710453033),
+ (0.1684628129005432, -0.10793253034353256, -0.1714797168970108),
+ (0.16846302151679993, -0.10793274641036987, -0.07794538885354996),
+ (0.1998593509197235, -0.009240913204848766, -0.17927424609661102),
+ (0.1998595893383026, -0.009241009131073952, -0.08573991060256958),
+ (0.17770375311374664, 0.09192679077386856, -0.18706879019737244),
+ (0.17770397663116455, 0.09192684292793274, -0.09353446215391159),
+ (0.10793255269527435, 0.1684628278017044, -0.19486330449581146),
+ (0.10793274641036987, 0.16846294701099396, -0.10132896900177002),
+ (0.00924092996865511, 0.1998593509197235, -0.20265783369541168),
+ (0.00924102496355772, 0.19985954463481903, -0.10912348330020905),
+ (-0.09192678332328796, 0.17770370841026306, -0.2104523628950119),
+ (-0.09192679077386856, 0.17770394682884216, -0.11691801995038986),
+ (-0.1684628129005432, 0.10793255269527435, -0.21824689209461212),
+ (-0.16846290230751038, 0.10793272405862808, -0.12471257150173187),
+ (-0.19985929131507874, 0.00924092996865511, -0.22604137659072876),
+ (-0.19985954463481903, 0.00924102496355772, -0.1325071007013321),
+ (-0.17770370841026306, -0.09192678332328796, -0.23383590579032898),
+ (-0.17770391702651978, -0.09192680567502975, -0.1403016299009323),
+ (-0.21371114253997803, -0.21371114253997803, 0.24772925674915314),
+ (0.21371114253997803, -0.21371114253997803, 0.24772925674915314),
+ (-0.21371114253997803, 0.21371114253997803, 0.24772925674915314),
+ (0.21371114253997803, 0.21371114253997803, 0.24772925674915314),
+ (-0.21371114253997803, -0.21371114253997803, -0.24772925674915314),
+ (0.21371114253997803, -0.21371114253997803, -0.24772925674915314),
+ (-0.21371114253997803, 0.21371114253997803, -0.24772925674915314),
+ (0.21371114253997803, 0.21371114253997803, -0.24772925674915314)],
+ 'edges': [(1, 3), (2, 0), (3, 5), (4, 2), (5, 7), (6, 4), (7, 9), (8, 6), (9, 11), (10, 8), (11, 13), (12, 10),
+ (13, 15), (14, 12), (15, 17), (16, 14), (17, 19), (18, 16), (19, 21), (20, 18), (21, 23), (22, 20),
+ (23, 25), (24, 22), (25, 27), (26, 24), (27, 29), (28, 26), (29, 31), (30, 28), (31, 33), (32, 30),
+ (33, 35), (34, 32), (35, 37), (36, 34), (37, 39), (38, 36), (39, 41), (40, 38), (41, 43), (42, 40),
+ (43, 45), (44, 42), (45, 47), (46, 44), (47, 49), (48, 46), (49, 51), (50, 48), (51, 53), (52, 50),
+ (53, 55), (54, 52), (55, 57), (56, 54), (57, 59), (58, 56), (59, 61), (60, 58), (61, 63), (62, 60),
+ (63, 65), (64, 62), (65, 67), (66, 64), (67, 69), (68, 66), (69, 71), (70, 68), (71, 73), (72, 70),
+ (73, 75), (74, 72), (75, 77), (76, 74), (77, 79), (78, 76), (79, 81), (80, 78), (81, 83), (82, 80),
+ (83, 85), (84, 82), (85, 87), (86, 84), (87, 89), (88, 86), (89, 91), (90, 88), (91, 93), (92, 90),
+ (93, 95), (94, 92), (95, 97), (96, 94), (100, 98), (98, 99), (99, 101), (101, 100), (104, 102),
+ (102, 103), (103, 105), (105, 104)]
}
return widgets
+
if __name__ == "__main__":
create()