def create_uv_tree(obj, quantity, uv_center, mean = [0.0, 0.0], variance = [0.005, 0.005], balancing_factor = 0.0, build_type = 'CURVE', interpolation_resolution = 0): # Generate scattered points x = [uv_center[0]] y = [uv_center[1]] x = np.concatenate((x, np.random.normal(uv_center[0], variance[0], quantity) + mean[0])) y = np.concatenate((y, np.random.normal(uv_center[1], variance[1], quantity) + mean[1])) points = np.dstack((x, y)) np.clip(points, 0., 1., out = points) # all items are stored in the first list-item of the output points = points[0] # Run mstree root_point = mstree.mstree(points, balancing_factor) # Convert node positions from uv to 3d nodes = mstree.tree_to_list(root_point) interpolated_nodes = [] for node in nodes: parent = node.parent interpolated_nodes.append(node) if parent is None: continue points = interpolate(parent.pos, node.pos, interpolation_resolution)[1:-1] print(len(points)) parent.children.remove(node) active_parent = parent for point in points: new_node = mstree.Node(active_parent, np.array(point), -1) interpolated_nodes.append(new_node) active_parent = new_node node.parent = active_parent active_parent.children.append(node) node_uv_points = [mathutils.Vector((node.pos[0], node.pos[1])) for node in interpolated_nodes] print(len(node_uv_points)) node_3d_points = pam.mapUVPointTo3d(obj, node_uv_points) print(len(node_3d_points)) for i, node in enumerate(interpolated_nodes): node.pos = node_3d_points[i] if build_type == 'CURVE': curve_obj = mst_blender.buildTreeCurve(root_point) curve_obj.data.bevel_depth = 0.002 elif build_type == 'MESH': mesh_obj = mst_blender.buildTreeMesh(root_point)
def create_uv_tree(obj, quantity, uv_center, mean=[0.0, 0.0], variance=[0.005, 0.005], balancing_factor=0.0, build_type='CURVE', interpolation_resolution=0): # Generate scattered points x = [uv_center[0]] y = [uv_center[1]] x = np.concatenate( (x, np.random.normal(uv_center[0], variance[0], quantity) + mean[0])) y = np.concatenate( (y, np.random.normal(uv_center[1], variance[1], quantity) + mean[1])) points = np.dstack((x, y)) np.clip(points, 0., 1., out=points) # all items are stored in the first list-item of the output points = points[0] # Run mstree root_point = mstree.mstree(points, balancing_factor) # Convert node positions from uv to 3d nodes = mstree.tree_to_list(root_point) interpolated_nodes = [] for node in nodes: parent = node.parent interpolated_nodes.append(node) if parent is None: continue points = interpolate(parent.pos, node.pos, interpolation_resolution)[1:-1] print(len(points)) parent.children.remove(node) active_parent = parent for point in points: new_node = mstree.Node(active_parent, np.array(point), -1) interpolated_nodes.append(new_node) active_parent = new_node node.parent = active_parent active_parent.children.append(node) node_uv_points = [ mathutils.Vector((node.pos[0], node.pos[1])) for node in interpolated_nodes ] print(len(node_uv_points)) node_3d_points = pam.mapUVPointTo3d(obj, node_uv_points) print(len(node_3d_points)) for i, node in enumerate(interpolated_nodes): node.pos = node_3d_points[i] if build_type == 'CURVE': curve_obj = mst_blender.buildTreeCurve(root_point) curve_obj.data.bevel_depth = 0.002 elif build_type == 'MESH': mesh_obj = mst_blender.buildTreeMesh(root_point)
import mstree import numpy as np def drawTree(root_node): plt.figure() plt.scatter(points[:, 0], points[:, 1]) drawTreeRecursive(root_node) plt.show() def drawTreeRecursive(root_node): for child in root_node.children: print('Plotting from point ' + str(root_node.index) + ' to ' + str(child.index)) plt.plot((root_node.pos[0], child.pos[0]), (root_node.pos[1], child.pos[1]), '-') drawTreeRecursive(child) if __name__ == '__main__': points = np.random.rand(100, 2) * 10 - 5 points[0] = (0, 0) # plt.scatter(points[:,0], points[:,1]) # plt.show() # f = open('testdata.csv', 'r') # reader = csv.reader(f, delimiter=";", quoting=csv.QUOTE_NONNUMERIC) # points = np.array([row for row in reader]) # print(points) root = mstree.mstree(points, threshold=50, balancing_factor=0) drawTree(root)
import mstree import numpy as np import cProfile import csv import time f = open('testdata_large.csv', 'r') reader = csv.reader(f, delimiter=";", quoting=csv.QUOTE_NONNUMERIC) points = np.array([row for row in reader]) v = [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000] for vv in v: points = np.random.rand(vv,2) * 10 - 5 points[0] = (0,0) # cProfile.run('mstree.mstree(points, threshold = 100, balancing_factor = 0.0)') t1 = time.time() tree = mstree.mstree(points, balancing_factor = 0.0) t2 = time.time() print(vv, '\t', t2-t1) # mstree.add_quad_diameter(tree)
import matplotlib.pyplot as plt import mstree import numpy as np def drawTree(root_node): plt.figure() plt.scatter(points[:,0], points[:,1]) drawTreeRecursive(root_node) plt.show() def drawTreeRecursive(root_node): for child in root_node.children: print('Plotting from point ' + str(root_node.index) + ' to ' + str(child.index)) plt.plot((root_node.pos[0], child.pos[0]), (root_node.pos[1], child.pos[1]),'-') drawTreeRecursive(child) if __name__ == '__main__': points = np.random.rand(100,2) * 10 - 5 points[0] = (0,0) # plt.scatter(points[:,0], points[:,1]) # plt.show() # f = open('testdata.csv', 'r') # reader = csv.reader(f, delimiter=";", quoting=csv.QUOTE_NONNUMERIC) # points = np.array([row for row in reader]) # print(points) root = mstree.mstree(points, threshold = 50, balancing_factor = 0) drawTree(root)
import mstree import numpy as np import cProfile import csv import time f = open('testdata_large.csv', 'r') reader = csv.reader(f, delimiter=";", quoting=csv.QUOTE_NONNUMERIC) points = np.array([row for row in reader]) v = [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000] for vv in v: points = np.random.rand(vv, 2) * 10 - 5 points[0] = (0, 0) # cProfile.run('mstree.mstree(points, threshold = 100, balancing_factor = 0.0)') t1 = time.time() tree = mstree.mstree(points, balancing_factor=0.0) t2 = time.time() print(vv, '\t', t2 - t1) # mstree.add_quad_diameter(tree)