예제 #1
0
파일: main.py 프로젝트: Zebreu/mist
def main_multi(files):
    """ Is executed if the user wants to analyze many scenes at once and compare them """
    ### Initialization
    directional_tree = templates.make_directional()
    other_relationships_tree = templates.make_other_relationships()
    tables = []

    for file in files:
        tables.append(database.RelationshipsTable())
        table = tables[-1]
        ### Parsing
        shapes = x3dparser.parse_file(file)
        x3dparser.parse_child_nodes(shapes)

        ### Geometric representation
        for shape in shapes:
            shape.update_shape()
            shape.calculate_bounding_box()
            #print shape.name, shape.type, shape.location, shape.bounding_box
        print ""

        ### Relationships computation
        compute_without_opposites(shapes, directional_tree, other_relationships_tree, table)

        list_relationships(table, [0,"target","reference"], 4)
예제 #2
0
파일: main.py 프로젝트: Zebreu/mist
def main(filename):
    """ Computes relationships and sets up a query interface for the user """
    ### Initialization
    directional_tree = templates.make_directional()
    other_relationships_tree = templates.make_other_relationships()
    table = database.RelationshipsTable()

    ### Parsing
    shapes = x3dparser.parse_file(filename)
    x3dparser.parse_child_nodes(shapes)

    ### Geometric representation
    for shape in shapes:
        shape.update_shape()
        shape.calculate_bounding_box()
        print shape.name, shape.bounding_box
    print ""

    ### Add scene information to shapes

    minCorner = []
    maxCorner = []

    for i in range(3):
        axevertices = [vertex[i] for shape in shapes for vertex in shape.bounding_box]
        minCorner.append(min(axevertices))
        maxCorner.append(max(axevertices))

    scene_bounding_box = [minCorner, maxCorner]

    for shape in shapes:
        shape.scene_bounding_box = scene_bounding_box

    ### Relationships computation

    #compute_without_opposites(shapes, directional_tree, other_relationships_tree, table)
    compute_everything(shapes, directional_tree, other_relationships_tree, table)

    table.shapes = list(shapes)

    for shape in shapes:
        for relation in dir_relations_supported:
            table.find_relevant(shape, relation)
        table.distance_find_relevant(shape,"isFarFrom")
        table.distance_find_relevant(shape,"isCloseTo")
        table.complete_relevant(shape)

    print len(table.relationships)
    print "Calculated", len(table.relevant), "relevant relationships."

    table.fill_vectors()
    
    for v in table.vectors:
        print v

    ### Interface
    command = "None"
    while command != "exit":
        print "\nObjects in the scene: "
        for shape in shapes:
            print shape.name
        command = raw_input('\nPossible queries (optional arguments between square brackets): \n"list [<name1>] [<relationship>] [<name2>]"\n"exit"\n"relevant"\n')
        print ""
        interpret_commands(command, table)