diff --git a/addons/easy_charts/control_charts/RadarChart/radar_chart.gd b/addons/easy_charts/control_charts/RadarChart/radar_chart.gd index 08b33da..ac3eb36 100644 --- a/addons/easy_charts/control_charts/RadarChart/radar_chart.gd +++ b/addons/easy_charts/control_charts/RadarChart/radar_chart.gd @@ -15,260 +15,260 @@ distinct correlations, trade-offs, and a multitude of other comparative measures """ func _get_property_list(): - return [ - # Chart Properties - { - "hint": PROPERTY_HINT_NONE, - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Properties/are_values_columns", - "type": TYPE_BOOL - }, - { - "hint": PROPERTY_HINT_RANGE, - "hint_string": "-1,100,1", - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Properties/labels_index", - "type": TYPE_INT - }, - { - "hint": PROPERTY_HINT_RANGE, - "hint_string": "-1,100,1", - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Properties/function_names_index", - "type": TYPE_INT - }, - { - "hint": PROPERTY_HINT_NONE, - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Properties/use_height_as_radius", - "type": TYPE_BOOL - }, - { - "hint": PROPERTY_HINT_RANGE, - "hint_string": "0,2000", - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Properties/radius", - "type": TYPE_REAL - }, - - # Chart Display - { - "hint": PROPERTY_HINT_RANGE, - "hint_string": "0.1,100", - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Display/full_scale", - "type": TYPE_REAL - }, - - # Chart Style - { - "hint": 24, - "hint_string": "%d/%d:%s"%[TYPE_INT, PROPERTY_HINT_ENUM, - PoolStringArray(Point.SHAPES.keys()).join(",")], - "name": "Chart_Style/points_shape", - "type": TYPE_ARRAY, - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE - }, - { - "hint": PROPERTY_HINT_NONE, - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Style/function_colors", - "type": TYPE_COLOR_ARRAY - }, - { - "hint": PROPERTY_HINT_NONE, - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Style/outline_color", - "type": TYPE_COLOR - }, - { - "hint": PROPERTY_HINT_NONE, - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Style/grid_color", - "type": TYPE_COLOR - }, - { - "class_name": "Font", - "hint": PROPERTY_HINT_RESOURCE_TYPE, - "hint_string": "Font", - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Style/font", - "type": TYPE_OBJECT - }, - { - "class_name": "Font", - "hint": PROPERTY_HINT_RESOURCE_TYPE, - "hint_string": "Font", - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Style/bold_font", - "type": TYPE_OBJECT - }, - { - "hint": PROPERTY_HINT_NONE, - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Style/font_color", - "type": TYPE_COLOR - }, - { - "hint": PROPERTY_HINT_ENUM, - "hint_string": PoolStringArray(ECUtilities.templates.keys()).join(","), - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Style/template", - "type": TYPE_INT - }, - { - "hint": PROPERTY_HINT_RANGE, - "hint_string": "0,360", - "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, - "name": "Chart_Modifiers/rotation", - "type": TYPE_REAL - }, - ] + return [ + # Chart Properties + { + "hint": PROPERTY_HINT_NONE, + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Properties/are_values_columns", + "type": TYPE_BOOL + }, + { + "hint": PROPERTY_HINT_RANGE, + "hint_string": "-1,100,1", + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Properties/labels_index", + "type": TYPE_INT + }, + { + "hint": PROPERTY_HINT_RANGE, + "hint_string": "-1,100,1", + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Properties/function_names_index", + "type": TYPE_INT + }, + { + "hint": PROPERTY_HINT_NONE, + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Properties/use_height_as_radius", + "type": TYPE_BOOL + }, + { + "hint": PROPERTY_HINT_RANGE, + "hint_string": "0,2000", + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Properties/radius", + "type": TYPE_REAL + }, + + # Chart Display + { + "hint": PROPERTY_HINT_RANGE, + "hint_string": "0.1,100", + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Display/full_scale", + "type": TYPE_REAL + }, + + # Chart Style + { + "hint": 24, + "hint_string": "%d/%d:%s"%[TYPE_INT, PROPERTY_HINT_ENUM, + PoolStringArray(Point.SHAPES.keys()).join(",")], + "name": "Chart_Style/points_shape", + "type": TYPE_ARRAY, + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE + }, + { + "hint": PROPERTY_HINT_NONE, + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Style/function_colors", + "type": TYPE_COLOR_ARRAY + }, + { + "hint": PROPERTY_HINT_NONE, + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Style/outline_color", + "type": TYPE_COLOR + }, + { + "hint": PROPERTY_HINT_NONE, + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Style/grid_color", + "type": TYPE_COLOR + }, + { + "class_name": "Font", + "hint": PROPERTY_HINT_RESOURCE_TYPE, + "hint_string": "Font", + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Style/font", + "type": TYPE_OBJECT + }, + { + "class_name": "Font", + "hint": PROPERTY_HINT_RESOURCE_TYPE, + "hint_string": "Font", + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Style/bold_font", + "type": TYPE_OBJECT + }, + { + "hint": PROPERTY_HINT_NONE, + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Style/font_color", + "type": TYPE_COLOR + }, + { + "hint": PROPERTY_HINT_ENUM, + "hint_string": PoolStringArray(ECUtilities.templates.keys()).join(","), + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Style/template", + "type": TYPE_INT + }, + { + "hint": PROPERTY_HINT_RANGE, + "hint_string": "0,360", + "usage": PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE, + "name": "Chart_Modifiers/rotation", + "type": TYPE_REAL + }, + ] func structure_data(database : Array): - # @x_values_index can be either a column or a row relative to x values - # @y_values can be either a column or a row relative to y values - are_values_columns = invert_chart != are_values_columns - match are_values_columns: - true: - for row in database.size(): - var t_row : Array = [] - for column in database[row].size(): - if row == labels_index: - if column == function_names_index: - pass - else: - x_labels.append(database[row][column]) - else: - if column == function_names_index: - y_labels.append(database[row][column]) - else: - if typeof(database[row][column]) == TYPE_INT or typeof(database[row][column]) == TYPE_REAL: - t_row.append(database[row][column] as float) - else: - t_row.append(database[row][column].replace(",", ".") as float) - if not t_row.empty(): - x_datas.append(t_row) - false: - for row in database.size(): - if row == function_names_index: - y_labels = database[row] as PoolStringArray - - var x_temp_datas : PoolRealArray = [] - for column in database[row].size(): - if column == labels_index: - x_labels.append(database[row][column] as String) - else: - x_temp_datas.append(database[row][column] as float) - x_datas.append(x_temp_datas) - - - if labels_index == -1 : - for data in x_datas[0].size(): - x_labels.append("Element %s" % data) - - if function_names_index == -1 : - for data in x_datas.size(): - y_labels.append("Function %s" % data) + # @x_values_index can be either a column or a row relative to x values + # @y_values can be either a column or a row relative to y values + are_values_columns = invert_chart != are_values_columns + match are_values_columns: + true: + for row in database.size(): + var t_row : Array = [] + for column in database[row].size(): + if row == labels_index: + if column == function_names_index: + pass + else: + x_labels.append(database[row][column]) + else: + if column == function_names_index: + y_labels.append(database[row][column]) + else: + if typeof(database[row][column]) == TYPE_INT or typeof(database[row][column]) == TYPE_REAL: + t_row.append(database[row][column] as float) + else: + t_row.append(database[row][column].replace(",", ".") as float) + if not t_row.empty(): + x_datas.append(t_row) + false: + for row in database.size(): + if row == function_names_index: + y_labels = database[row] as PoolStringArray + + var x_temp_datas : PoolRealArray = [] + for column in database[row].size(): + if column == labels_index: + x_labels.append(database[row][column] as String) + else: + x_temp_datas.append(database[row][column] as float) + x_datas.append(x_temp_datas) + + + if labels_index == -1 : + for data in x_datas[0].size(): + x_labels.append("Element %s" % data) + + if function_names_index == -1 : + for data in x_datas.size(): + y_labels.append("Function %s" % data) func build_chart(): - SIZE = get_size() - origin = OFFSET + SIZE/2 + SIZE = get_size() + origin = OFFSET + SIZE/2 var radar_polygon : Array func calculate_pass() : - var ordered_max : Array - for data in x_datas : - var ordered_data : Array = data.duplicate() - ordered_data.sort() - ordered_max.append(ordered_data.pop_back()) - ordered_max.sort() - var max_value : float = ordered_max.pop_back() - var dist = full_scale * pow(10.0,str(max_value).length()-2) - var multi = 0 - var value = dist * multi - x_chors.append(value as String) - while value < max_value: - multi+=1 - value = dist * multi - x_chors.append(value as String) + var ordered_max : Array + for data in x_datas : + var ordered_data : Array = data.duplicate() + ordered_data.sort() + ordered_max.append(ordered_data.pop_back()) + ordered_max.sort() + var max_value : float = ordered_max.pop_back() + var dist = full_scale * pow(10.0,str(max_value).length()-2) + var multi = 0 + var value = dist * multi + x_chors.append(value as String) + while value < max_value: + multi+=1 + value = dist * multi + x_chors.append(value as String) func calculate_coordinates(): - for chor in x_chors.size(): - var inner_polyline : PoolVector2Array - var scalar_factor : float = (x_chors[chor] as float/x_chors.back() as float) - for function in functions: - var angle : float = ((2 * PI * function) / functions) - PI /2 + deg2rad(rotation) - var x_coordinate : float = (radius if (not use_height_as_radius and radius>>>>>>> dev:addons/easy_charts/control_charts/RadarChart/radar_chart.tscn [node name="RadarChart" type="Control"] anchor_right = 1.0 @@ -83,7 +74,7 @@ __meta__ = { [node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="DataTooltip" parent="CanvasLayer" instance=ExtResource( 2 )] -margin_left = -473.792 -margin_top = 853.111 -margin_right = -473.928 -margin_bottom = 853.911 +margin_left = -15.644 +margin_top = -15.8509 +margin_right = -15.78 +margin_bottom = -15.0509 diff --git a/addons/easy_charts/utilities/classes/base/chart.gd b/addons/easy_charts/utilities/classes/base/chart.gd index c319057..fba1e5b 100644 --- a/addons/easy_charts/utilities/classes/base/chart.gd +++ b/addons/easy_charts/utilities/classes/base/chart.gd @@ -148,8 +148,9 @@ var property_list: Array = [] # !! API v2 static func instance(chart_type : int): - var chart_t : String = ECUtilities.get_chart_type(chart_type) - var chart : String = "res://addons/easy_charts/%s/%s.tscn" % [chart_t, chart_t] + var chart_t : Array = ECUtilities.get_chart_type(chart_type) + "res://addons/easy_charts/control_charts/RadarChart/radar_chart.tscn" + var chart : String = "res://addons/easy_charts/control_charts/%s/%s.tscn" % [chart_t[0], chart_t[1]] return load(chart).instance() # .......................... Properties Manager .................................... diff --git a/addons/easy_charts/utilities/scripts/ec_utilities.gd b/addons/easy_charts/utilities/scripts/ec_utilities.gd index d25d83b..38fb872 100644 --- a/addons/easy_charts/utilities/scripts/ec_utilities.gd +++ b/addons/easy_charts/utilities/scripts/ec_utilities.gd @@ -6,11 +6,11 @@ var alphabet : String = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" var plugin_name : String = "Easy Charts" var templates : Dictionary = {} var chart_types : Dictionary = { - 0:"LineChart", - 1:"ColumnChart", - 2:"ScatterChart", - 3:"RadarChart", - 4:"PieChart" + 0:["LineChart","line_chart"], + 1:["ColumnChart","column_chart"], + 2:["ScatterChart","scatter_chart"], + 3:["RadarChart","radar_chart"], + 4:["PieChart","pie_chart"] } func _ready(): @@ -33,7 +33,7 @@ func _load_templates() -> Dictionary: func get_template(template_index : int): return templates.get(templates.keys()[template_index]) -func get_chart_type(chart_type : int): +func get_chart_type(chart_type : int) -> Array: return chart_types.get(chart_types.keys()[chart_type]) func get_letter_index(index : int) -> String: