[Bf-blender-cvs] [eef4792627f] soc-2020-testing-frameworks: Review: added comments, doc strings, improvements, support for random vertices
calra123
noreply at git.blender.org
Thu Jul 9 19:39:12 CEST 2020
Commit: eef4792627f4bd35cf8bb2e5aad43f75cce56f22
Author: calra123
Date: Thu Jun 11 02:16:42 2020 +0530
Branches: soc-2020-testing-frameworks
https://developer.blender.org/rBeef4792627f4bd35cf8bb2e5aad43f75cce56f22
Review: added comments, doc strings, improvements, support for random vertices
===================================================================
M tests/python/modules/test_object_generator.py
===================================================================
diff --git a/tests/python/modules/test_object_generator.py b/tests/python/modules/test_object_generator.py
index 7a206ef13e1..6ac13c8d450 100644
--- a/tests/python/modules/test_object_generator.py
+++ b/tests/python/modules/test_object_generator.py
@@ -1,47 +1,86 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+"""blender -b --python tests/python/modules/test_object_generator.py -- /path/to/blend/file/new_or_existing.blend"""
import bpy
-import re
import os
import sys
+import random
+from pathlib import Path
offset_x = 5
+flag = 0
-def validating_user_input(mesh, vert_set):
- for i in vert_set:
- if not isinstance(i, int) or i <= 0:
- raise Exception("Please enter a valid index(integer).")
-
- max_vert = len(mesh.data.vertices)
-
- for i in vert_set:
- if i > max_vert-1:
- raise Exception("Index is greater than maximum number of vertices.")
-
-
-def do_selection(mesh, vert_set: set):
-
+def vertex_selection(mesh, vert_set: set, randomize: bool):
+ """Selecting vertices which will be later assigned to vertex groups"""
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='DESELECT')
bpy.ops.object.mode_set(mode='OBJECT')
+ mesh.select_set(1)
+
+ if not randomize:
+ for index in vert_set:
+ mesh.data.vertices[index].select = True
+ else:
+ max_vert = len(mesh.data.vertices)
+ random_size = random.randint(1, max_vert)
+ print(random_size)
+ for index in range(random_size):
+ random_index = random.randint(0, random_size)
+ print(random_index)
+ mesh.data.vertices[random_index].select = True
+
+
+def create_vertex_group(obj_name, vg_name, vg_vert_set, randomize):
+ """
+ Creates a vertex group. Raises Exception for invalid index
+ :param obj_name : blend object: - the object for vertex group
+ :param vg_name : str - vertex group name
+ :param vg_vert_set : set - set of vertices assgined to the vertex group
+ :param randomize : bool - select random vertices"""
+ # Validating user input
+ # -checking for whether the object exists
+ # -index value is within the right range
+
+ if obj_name not in bpy.data.objects:
+ global flag
+ flag = 1
+ raise Exception('Object {} not Found!'.format(obj_name))
+ mesh = bpy.data.objects[obj_name]
+ max_vert = len(mesh.data.vertices)
+ for i in vg_vert_set:
+ if not isinstance(i, int) or i < 0 or i > max_vert - 1:
+ flag = 1
+ raise Exception("Please enter a valid index(integer).")
- for index in vert_set:
- mesh.data.vertices[index].select = True
+ mesh.vertex_groups.new(name=vg_name)
+ vertex_selection(mesh, vg_vert_set, randomize)
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.object.vertex_group_assign()
bpy.ops.object.mode_set(mode='OBJECT')
-def create_vertex_group(obj_name, vg_name, vg_vert_set):
-
- mesh = bpy.data.objects[obj_name]
- mesh.vertex_groups.new(name=vg_name)
- vert_set = vg_vert_set
- validating_user_input(mesh, vert_set)
- do_selection(mesh, vert_set)
-
-
def get_last_location():
+ """To find the location of last created object."""
farthest = 0
all_y_locs = []
for obj in bpy.data.objects:
@@ -54,97 +93,71 @@ def get_last_location():
return farthest
-def name_test_object(obj_name):
- bpy.context.active_object.name = "testObj" + obj_name
-
-
-def name_exp_object(obj_name):
- bpy.context.active_object.name = "expObj" + obj_name
-
-
def create_test_objects(obj_dict):
+ """
+ Creates test and expected objects
+ :param obj_dict: dict (key:value) - dictionary contains test object names and types, e.g. {'myTestCube':'Cube'}
+ """
offset_y = get_last_location() + 5
+ test_obj_list = []
for obj_name, obj_type in obj_dict.items():
- print("Object type:", obj_type, "\nObject name:", obj_name)
test_obj_name = "testObj" + obj_name
- exp_obj_name = "expObj" + obj_name
if test_obj_name not in bpy.data.objects.keys():
if obj_type == "Circle":
bpy.ops.mesh.primitive_circle_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_circle_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Cube":
bpy.ops.mesh.primitive_cube_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_cube_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Plane":
bpy.ops.mesh.primitive_plane_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_plane_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Sphere":
bpy.ops.mesh.primitive_uv_sphere_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_uv_sphere_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Cone":
bpy.ops.mesh.primitive_cone_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_cone_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Cylinder":
bpy.ops.mesh.primitive_cylinder_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_cylinder_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Icosphere":
bpy.ops.mesh.primitive_ico_sphere_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_ico_sphere_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Torus":
bpy.ops.mesh.primitive_torus_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_torus_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Monkey":
bpy.ops.mesh.primitive_monkey_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_monkey_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
elif obj_type == "Grid":
bpy.ops.mesh.primitive_grid_add(location=(0, offset_y, 0))
- name_test_object(obj_name)
- bpy.ops.mesh.primitive_grid_add(location=(offset_x, offset_y, 0))
- name_exp_object(obj_name)
+ else:
+ global flag
+ flag = 1
+ raise Exception("{} Object type not yet supported".format(obj_type))
+
+ test_obj_list.append(test_obj_name)
+ bpy.context.active_object.name = test_obj_name
+ bpy.ops.object.duplicate_move(TRANSFORM_OT_translate={"value": (offset_x, 0, 0)})
+ bpy.context.active_object.name = "expObj" + obj_name
offset_y += 5
else:
print("Object already present.")
+ if not flag:
+ print("{} were successfully created!".format(test_obj_list))
+
-pattern = re.compile(r"[A-Z]:?[\\\/].*\.blend|[\\\/].*\.blend")
+argv = sys.argv
+argv = argv[argv.index("--") + 1:]
-args = list(sys.argv)
-print(args)
-for cmd in args:
- mo = pattern.search(cmd)
- if mo is not None:
- path_to_file = mo.group()
+# Converting the path to be platform independent and then into string
+path_to_file = str(Path(argv[0]))
print(path_to_file)
if os.path.exists(path_to_file):
@@ -153,13 +166,16 @@ if os.path.exists(path_to_file):
else:
+ # Looking at the global flag variable
+ if not flag:
+ bpy.ops.wm.save_as_mainfile(filepath=path_to_file)
- bpy.ops.wm.save_as_mainfile(filepath=path_to_file)
+ # Cleaning up a new blend file
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)
-create_test_objects({'Cube': 'Cube', 'Cy1': "Cylinder"})
+create_test_objects({'Cube2': 'Cube', 'Cy2': "Cylinder"})
-create_vertex_group('Cube', "vg_solidify7", {1, 2, 3, 4})
+create_vertex_group('expObjCube', "vg_solidify8", {1, 2, 3, 4}, True)
bpy.ops.wm.save_mainfile(filepath=path_to_file)
More information about the Bf-blender-cvs
mailing list