42 name = block.getinstanceName() |
42 name = block.getinstanceName() |
43 type = block.gettypeName() |
43 type = block.gettypeName() |
44 executionOrderId = block.getexecutionOrderId() |
44 executionOrderId = block.getexecutionOrderId() |
45 block_infos = generator.GetBlockType(type) |
45 block_infos = generator.GetBlockType(type) |
46 if block_infos["type"] == "function": |
46 if block_infos["type"] == "function": |
47 output_variable = block.outputVariables.getvariable()[0] |
47 output_variables = block.outputVariables.getvariable() |
48 output_name = "%s%d_OUT"%(type, block.getlocalId()) |
|
49 output_info = (generator.TagName, "block", block.getlocalId(), "output", 0) |
|
50 if not generator.ComputedBlocks.get(block, False) and not order: |
48 if not generator.ComputedBlocks.get(block, False) and not order: |
51 generator.ComputedBlocks[block] = True |
49 generator.ComputedBlocks[block] = True |
52 if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]: |
|
53 generator.Interface.append(("VAR", False, False, False, [])) |
|
54 if output_variable.connectionPointOut in generator.ConnectionTypes: |
|
55 generator.Interface[-1][4].append((generator.ConnectionTypes[output_variable.connectionPointOut], output_name, None, None)) |
|
56 else: |
|
57 generator.Interface[-1][4].append(("ANY", output_name, None, None)) |
|
58 vars = [] |
50 vars = [] |
59 for i, variable in enumerate(block.inputVariables.getvariable()): |
51 for i, variable in enumerate(block.inputVariables.getvariable()): |
60 input_info = (generator.TagName, "block", block.getlocalId(), "input", i) |
52 input_info = (generator.TagName, "block", block.getlocalId(), "input", i) |
61 connections = variable.connectionPointIn.getconnections() |
53 connections = variable.connectionPointIn.getconnections() |
62 if connections is not None: |
54 if connections is not None: |
63 value = generator.ComputeExpression(body, connections, executionOrderId > 0) |
55 value = generator.ComputeExpression(body, connections, executionOrderId > 0) |
64 vars.append(generator.ExtractModifier(variable, value, input_info)) |
56 if len(output_variables) > 1: |
|
57 parameter = variable.getformalParameter() |
|
58 vars.append([(parameter, input_info), |
|
59 (" := ", ())] + generator.ExtractModifier(variable, value, input_info)) |
|
60 else: |
|
61 vars.append(generator.ExtractModifier(variable, value, input_info)) |
|
62 for i, variable in enumerate(output_variables): |
|
63 parameter = variable.getformalParameter() |
|
64 if variable.getformalParameter() == "": |
|
65 variable_name = "%s%d_OUT"%(type, block.getlocalId()) |
|
66 else: |
|
67 variable_name = "%s%d_%s"%(type, block.getlocalId(), parameter) |
|
68 if generator.Interface[-1][0] != "VAR" or generator.Interface[-1][1] or generator.Interface[-1][2] or generator.Interface[-1][3]: |
|
69 generator.Interface.append(("VAR", False, False, False, [])) |
|
70 if variable.connectionPointOut in generator.ConnectionTypes: |
|
71 generator.Interface[-1][4].append((generator.ConnectionTypes[variable.connectionPointOut], variable_name, None, None)) |
|
72 else: |
|
73 generator.Interface[-1][4].append(("ANY", variable_name, None, None)) |
|
74 if len(output_variables) > 1 and parameter not in ["", "OUT"]: |
|
75 vars.append([(parameter, (generator.TagName, "block", block.getlocalId(), "output", i)), |
|
76 (" => %s"%variable_name, ())]) |
|
77 else: |
|
78 output_info = (generator.TagName, "block", block.getlocalId(), "output", i) |
|
79 output_name = variable_name |
65 generator.Program += [(generator.CurrentIndent, ()), |
80 generator.Program += [(generator.CurrentIndent, ()), |
66 (output_name, output_info), |
81 (output_name, output_info), |
67 (" := ", ()), |
82 (" := ", ()), |
68 (type, (generator.TagName, "block", block.getlocalId(), "type")), |
83 (type, (generator.TagName, "block", block.getlocalId(), "type")), |
69 ("(", ())] |
84 ("(", ())] |
70 generator.Program += JoinList([(", ", ())], vars) |
85 generator.Program += JoinList([(", ", ())], vars) |
71 generator.Program += [(");\n", ())] |
86 generator.Program += [(");\n", ())] |
72 return generator.ExtractModifier(output_variable, [(output_name, output_info)], output_info) |
87 if link: |
|
88 connectionPoint = link.getposition()[-1] |
|
89 else: |
|
90 connectionPoint = None |
|
91 for i, variable in enumerate(output_variables): |
|
92 blockPointx, blockPointy = variable.connectionPointOut.getrelPositionXY() |
|
93 if not connectionPoint or block.getx() + blockPointx == connectionPoint.getx() and block.gety() + blockPointy == connectionPoint.gety(): |
|
94 output_info = (generator.TagName, "block", block.getlocalId(), "output", i) |
|
95 output_name = variable.getformalParameter() |
|
96 if variable.getformalParameter() == "": |
|
97 output_name = "%s%d_OUT"%(type, block.getlocalId()) |
|
98 else: |
|
99 output_name = "%s%d_%s"%(type, block.getlocalId(), variable.getformalParameter()) |
|
100 return generator.ExtractModifier(variable, [(output_name, output_info)], output_info) |
73 elif block_infos["type"] == "functionBlock": |
101 elif block_infos["type"] == "functionBlock": |
74 if not generator.ComputedBlocks.get(block, False) and not order: |
102 if not generator.ComputedBlocks.get(block, False) and not order: |
75 generator.ComputedBlocks[block] = True |
103 generator.ComputedBlocks[block] = True |
76 vars = [] |
104 vars = [] |
77 for i, variable in enumerate(block.inputVariables.getvariable()): |
105 for i, variable in enumerate(block.inputVariables.getvariable()): |
91 connectionPoint = link.getposition()[-1] |
119 connectionPoint = link.getposition()[-1] |
92 else: |
120 else: |
93 connectionPoint = None |
121 connectionPoint = None |
94 for i, variable in enumerate(block.outputVariables.getvariable()): |
122 for i, variable in enumerate(block.outputVariables.getvariable()): |
95 blockPointx, blockPointy = variable.connectionPointOut.getrelPositionXY() |
123 blockPointx, blockPointy = variable.connectionPointOut.getrelPositionXY() |
96 output_info = (generator.TagName, "block", block.getlocalId(), "output", i) |
|
97 if not connectionPoint or block.getx() + blockPointx == connectionPoint.getx() and block.gety() + blockPointy == connectionPoint.gety(): |
124 if not connectionPoint or block.getx() + blockPointx == connectionPoint.getx() and block.gety() + blockPointy == connectionPoint.gety(): |
|
125 output_info = (generator.TagName, "block", block.getlocalId(), "output", i) |
98 return generator.ExtractModifier(variable, [("%s.%s"%(name, variable.getformalParameter()), output_info)], output_info) |
126 return generator.ExtractModifier(variable, [("%s.%s"%(name, variable.getformalParameter()), output_info)], output_info) |
99 raise ValueError, "No output variable found" |
127 raise ValueError, "No output variable found" |
100 |
128 |
101 def initialise_block(type, name, block = None): |
129 def initialise_block(type, name, block = None): |
102 return [(type, name, None, None)] |
130 return [(type, name, None, None)] |
103 |
131 |
104 #------------------------------------------------------------------------------- |
132 #------------------------------------------------------------------------------- |