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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)