From aa9d3bead021aaa60c1203a9baf6812098e537f1 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Fri, 15 Sep 2017 17:28:22 -0300 Subject: Site update --- docs/doxygen/html/_about_form_8cpp_source.html | 96 ++++ docs/doxygen/html/_about_form_8h_source.html | 55 ++- docs/doxygen/html/_art_metro_8cpp_source.html | 95 ++++ docs/doxygen/html/_art_metro_8h_source.html | 53 ++- docs/doxygen/html/_branch_8cpp_source.html | 107 +++++ docs/doxygen/html/_branch_8h_source.html | 91 ++-- docs/doxygen/html/_bus_8cpp_source.html | 126 +++++ docs/doxygen/html/_bus_8h_source.html | 73 +-- docs/doxygen/html/_bus_form_8cpp_source.html | 108 +++++ docs/doxygen/html/_bus_form_8h_source.html | 57 ++- .../html/_bus_form_bitmaps_8cpp_source.html | 95 ++++ docs/doxygen/html/_camera_8cpp_source.html | 95 ++++ docs/doxygen/html/_camera_8h_source.html | 53 ++- docs/doxygen/html/_capacitor_8cpp_source.html | 121 +++++ docs/doxygen/html/_capacitor_8h_source.html | 65 ++- docs/doxygen/html/_chart_view_8cpp_source.html | 98 ++++ docs/doxygen/html/_chart_view_8h_source.html | 59 ++- .../doxygen/html/_chart_view_base_8cpp_source.html | 95 ++++ docs/doxygen/html/_chart_view_base_8h_source.html | 53 ++- .../html/_chart_view_bitmaps_8cpp_source.html | 95 ++++ .../doxygen/html/_connection_line_8cpp_source.html | 106 +++++ docs/doxygen/html/_connection_line_8h_source.html | 73 +-- docs/doxygen/html/_constant_8cpp_source.html | 108 +++++ docs/doxygen/html/_constant_8h_source.html | 73 +-- docs/doxygen/html/_constant_form_8cpp_source.html | 97 ++++ docs/doxygen/html/_constant_form_8h_source.html | 57 ++- docs/doxygen/html/_control_editor_8cpp_source.html | 135 ++++++ docs/doxygen/html/_control_editor_8h_source.html | 91 ++-- .../html/_control_editor_base_8cpp_source.html | 95 ++++ .../html/_control_editor_base_8h_source.html | 55 ++- .../html/_control_editor_bitmaps_8cpp_source.html | 95 ++++ .../doxygen/html/_control_element_8cpp_source.html | 99 ++++ docs/doxygen/html/_control_element_8h_source.html | 57 ++- .../_control_element_container_8cpp_source.html | 114 +++++ .../html/_control_element_container_8h_source.html | 57 ++- .../html/_control_element_solver_8cpp_source.html | 105 +++++ .../html/_control_element_solver_8h_source.html | 77 +-- .../html/_control_system_test_8cpp_source.html | 97 ++++ .../html/_control_system_test_8h_source.html | 57 ++- docs/doxygen/html/_data_report_8cpp_source.html | 114 +++++ docs/doxygen/html/_data_report_8h_source.html | 59 ++- .../html/_data_report_base_8cpp_source.html | 95 ++++ docs/doxygen/html/_data_report_base_8h_source.html | 53 ++- .../html/_data_report_bitmaps_8cpp_source.html | 95 ++++ .../html/_degrees_and_radians_8h_source.html | 51 +- .../html/_electric_calculation_8cpp_source.html | 136 ++++++ docs/doxygen/html/_electric_calculation_8h.html | 53 ++- docs/doxygen/html/_electric_calculation_8h.js | 23 + .../html/_electric_calculation_8h_source.html | 75 +-- .../html/_electromechanical_8cpp_source.html | 128 +++++ .../doxygen/html/_electromechanical_8h_source.html | 63 ++- docs/doxygen/html/_element_8cpp_source.html | 127 +++++ docs/doxygen/html/_element_8h.html | 57 ++- docs/doxygen/html/_element_8h.js | 22 + docs/doxygen/html/_element_8h_source.html | 179 +++---- .../html/_element_data_object_8cpp_source.html | 99 ++++ .../html/_element_data_object_8h_source.html | 55 ++- docs/doxygen/html/_element_form_8cpp_source.html | 95 ++++ docs/doxygen/html/_element_form_8h_source.html | 87 ++-- .../html/_element_form_bitmaps_8cpp_source.html | 95 ++++ .../html/_element_plot_data_8cpp_source.html | 96 ++++ .../doxygen/html/_element_plot_data_8h_source.html | 55 ++- docs/doxygen/html/_exponential_8cpp_source.html | 104 +++++ docs/doxygen/html/_exponential_8h_source.html | 71 +-- .../html/_exponential_form_8cpp_source.html | 97 ++++ docs/doxygen/html/_exponential_form_8h_source.html | 57 ++- docs/doxygen/html/_fault_8cpp_source.html | 121 +++++ docs/doxygen/html/_fault_8h.html | 53 ++- docs/doxygen/html/_fault_8h_source.html | 67 +-- docs/doxygen/html/_file_handing_8cpp_source.html | 190 ++++++++ docs/doxygen/html/_file_handing_8h_source.html | 61 ++- docs/doxygen/html/_gain_8cpp_source.html | 106 +++++ docs/doxygen/html/_gain_8h_source.html | 75 +-- docs/doxygen/html/_gain_form_8cpp_source.html | 97 ++++ docs/doxygen/html/_gain_form_8h_source.html | 57 ++- .../html/_general_properties_form_8cpp_source.html | 97 ++++ .../html/_general_properties_form_8h_source.html | 57 ++- .../html/_generator_stab_form_8cpp_source.html | 102 ++++ .../html/_generator_stab_form_8h_source.html | 63 ++- .../html/_graphical_element_8cpp_source.html | 96 ++++ .../doxygen/html/_graphical_element_8h_source.html | 55 ++- docs/doxygen/html/_i_o_control_8cpp_source.html | 108 +++++ docs/doxygen/html/_i_o_control_8h_source.html | 73 +-- .../html/_i_o_control_form_8cpp_source.html | 97 ++++ docs/doxygen/html/_i_o_control_form_8h_source.html | 57 ++- docs/doxygen/html/_ind_motor_8cpp_source.html | 114 +++++ docs/doxygen/html/_ind_motor_8h_source.html | 67 +-- docs/doxygen/html/_ind_motor_form_8cpp_source.html | 106 +++++ docs/doxygen/html/_ind_motor_form_8h_source.html | 57 ++- docs/doxygen/html/_inductor_8cpp_source.html | 121 +++++ docs/doxygen/html/_inductor_8h_source.html | 65 ++- docs/doxygen/html/_limiter_8cpp_source.html | 104 +++++ docs/doxygen/html/_limiter_8h_source.html | 71 +-- docs/doxygen/html/_limiter_form_8cpp_source.html | 97 ++++ docs/doxygen/html/_limiter_form_8h_source.html | 57 ++- docs/doxygen/html/_line_8cpp_source.html | 139 ++++++ docs/doxygen/html/_line_8h_source.html | 71 +-- docs/doxygen/html/_line_form_8cpp_source.html | 110 +++++ docs/doxygen/html/_line_form_8h_source.html | 59 ++- docs/doxygen/html/_load_8cpp_source.html | 123 +++++ docs/doxygen/html/_load_8h_source.html | 65 ++- docs/doxygen/html/_load_form_8cpp_source.html | 107 +++++ docs/doxygen/html/_load_form_8h_source.html | 59 ++- docs/doxygen/html/_machines_8cpp_source.html | 120 +++++ docs/doxygen/html/_machines_8h_source.html | 91 ++-- docs/doxygen/html/_main_frame_8cpp_source.html | 120 +++++ docs/doxygen/html/_main_frame_8h_source.html | 73 +-- .../doxygen/html/_main_frame_base_8cpp_source.html | 95 ++++ docs/doxygen/html/_main_frame_base_8h_source.html | 53 ++- .../html/_main_frame_bitmaps_8cpp_source.html | 95 ++++ docs/doxygen/html/_multiplier_8cpp_source.html | 103 ++++ docs/doxygen/html/_multiplier_8h_source.html | 71 +-- docs/doxygen/html/_power_element_8cpp_source.html | 122 +++++ docs/doxygen/html/_power_element_8h.html | 61 ++- docs/doxygen/html/_power_element_8h.js | 48 ++ docs/doxygen/html/_power_element_8h_source.html | 161 ++++--- docs/doxygen/html/_power_flow_8cpp_source.html | 108 +++++ docs/doxygen/html/_power_flow_8h_source.html | 55 ++- .../doxygen/html/_properties_data_8cpp_source.html | 95 ++++ docs/doxygen/html/_properties_data_8h_source.html | 61 ++- .../doxygen/html/_properties_form_8cpp_source.html | 95 ++++ docs/doxygen/html/_properties_form_8h_source.html | 57 ++- .../html/_properties_form_bitmaps_8cpp_source.html | 95 ++++ docs/doxygen/html/_rate_limiter_8cpp_source.html | 104 +++++ docs/doxygen/html/_rate_limiter_8h_source.html | 71 +-- .../html/_rate_limiter_form_8cpp_source.html | 97 ++++ .../doxygen/html/_rate_limiter_form_8h_source.html | 57 ++- .../_reactive_shunt_element_form_8cpp_source.html | 106 +++++ .../_reactive_shunt_element_form_8h_source.html | 61 ++- docs/doxygen/html/_shunt_8cpp_source.html | 112 +++++ docs/doxygen/html/_shunt_8h_source.html | 77 +-- .../_simulations_settings_form_8cpp_source.html | 103 ++++ .../html/_simulations_settings_form_8h_source.html | 57 ++- docs/doxygen/html/_sum_8cpp_source.html | 106 +++++ docs/doxygen/html/_sum_8h_source.html | 73 +-- docs/doxygen/html/_sum_form_8cpp_source.html | 97 ++++ docs/doxygen/html/_sum_form_8h_source.html | 57 ++- docs/doxygen/html/_switching_form_8cpp_source.html | 104 +++++ docs/doxygen/html/_switching_form_8h_source.html | 57 ++- docs/doxygen/html/_sync_generator_8cpp_source.html | 116 +++++ docs/doxygen/html/_sync_generator_8h_source.html | 79 ++-- .../html/_sync_machine_form_8cpp_source.html | 112 +++++ .../doxygen/html/_sync_machine_form_8h_source.html | 61 ++- docs/doxygen/html/_sync_motor_8cpp_source.html | 113 +++++ docs/doxygen/html/_sync_motor_8h_source.html | 77 +-- docs/doxygen/html/_text_8cpp_source.html | 146 ++++++ docs/doxygen/html/_text_8h_source.html | 93 ++-- docs/doxygen/html/_text_form_8cpp_source.html | 122 +++++ docs/doxygen/html/_text_form_8h_source.html | 59 ++- .../html/_transfer_function_8cpp_source.html | 106 +++++ .../doxygen/html/_transfer_function_8h_source.html | 75 +-- .../html/_transfer_function_form_8cpp_source.html | 97 ++++ .../html/_transfer_function_form_8h_source.html | 57 ++- docs/doxygen/html/_transformer_8cpp_source.html | 132 ++++++ docs/doxygen/html/_transformer_8h_source.html | 71 +-- .../html/_transformer_form_8cpp_source.html | 107 +++++ docs/doxygen/html/_transformer_form_8h_source.html | 59 ++- docs/doxygen/html/_workspace_8cpp_source.html | 172 +++++++ docs/doxygen/html/_workspace_8h_source.html | 91 ++-- docs/doxygen/html/_workspace_base_8cpp_source.html | 95 ++++ docs/doxygen/html/_workspace_base_8h_source.html | 53 ++- .../html/_workspace_bitmaps_8cpp_source.html | 95 ++++ docs/doxygen/html/annotated.html | 44 +- docs/doxygen/html/annotated_dup.js | 121 +++++ docs/doxygen/html/class_about_form-members.html | 46 +- docs/doxygen/html/class_about_form.html | 54 ++- docs/doxygen/html/class_about_form.js | 7 + .../html/class_about_form_base-members.html | 46 +- docs/doxygen/html/class_about_form_base.html | 54 ++- docs/doxygen/html/class_about_form_base.js | 30 ++ docs/doxygen/html/class_branch-members.html | 46 +- docs/doxygen/html/class_branch.html | 84 +++- docs/doxygen/html/class_branch.js | 24 + docs/doxygen/html/class_bus-members.html | 46 +- docs/doxygen/html/class_bus.html | 80 +++- docs/doxygen/html/class_bus.js | 23 + docs/doxygen/html/class_bus_form-members.html | 46 +- docs/doxygen/html/class_bus_form.html | 54 ++- docs/doxygen/html/class_bus_form.js | 18 + docs/doxygen/html/class_bus_form_base-members.html | 46 +- docs/doxygen/html/class_bus_form_base.html | 54 ++- docs/doxygen/html/class_bus_form_base.js | 92 ++++ docs/doxygen/html/class_camera-members.html | 46 +- docs/doxygen/html/class_camera.html | 54 ++- docs/doxygen/html/class_camera.js | 22 + docs/doxygen/html/class_capacitor-members.html | 46 +- docs/doxygen/html/class_capacitor.html | 72 ++- docs/doxygen/html/class_capacitor.js | 19 + docs/doxygen/html/class_chart_view-members.html | 46 +- docs/doxygen/html/class_chart_view.html | 54 ++- docs/doxygen/html/class_chart_view.js | 44 ++ .../html/class_chart_view_base-members.html | 46 +- docs/doxygen/html/class_chart_view_base.html | 54 ++- docs/doxygen/html/class_chart_view_base.js | 55 +++ .../html/class_connection_line-members.html | 46 +- docs/doxygen/html/class_connection_line.html | 68 ++- docs/doxygen/html/class_connection_line.js | 37 ++ docs/doxygen/html/class_constant-members.html | 46 +- docs/doxygen/html/class_constant.html | 66 ++- docs/doxygen/html/class_constant.js | 18 + docs/doxygen/html/class_constant_form-members.html | 46 +- docs/doxygen/html/class_constant_form.html | 54 ++- docs/doxygen/html/class_constant_form.js | 10 + .../html/class_constant_form_base-members.html | 46 +- docs/doxygen/html/class_constant_form_base.html | 54 ++- docs/doxygen/html/class_constant_form_base.js | 19 + .../doxygen/html/class_control_editor-members.html | 46 +- docs/doxygen/html/class_control_editor.html | 54 ++- docs/doxygen/html/class_control_editor.js | 64 +++ .../html/class_control_editor_base-members.html | 46 +- docs/doxygen/html/class_control_editor_base.html | 54 ++- docs/doxygen/html/class_control_editor_base.js | 38 ++ .../html/class_control_element-members.html | 46 +- docs/doxygen/html/class_control_element.html | 58 ++- docs/doxygen/html/class_control_element.js | 20 + .../html/class_control_element_button-members.html | 46 +- .../doxygen/html/class_control_element_button.html | 54 ++- docs/doxygen/html/class_control_element_button.js | 20 + .../class_control_element_container-members.html | 46 +- .../html/class_control_element_container.html | 54 ++- .../html/class_control_element_container.js | 31 ++ .../html/class_control_element_solver-members.html | 46 +- .../doxygen/html/class_control_element_solver.html | 54 ++- docs/doxygen/html/class_control_element_solver.js | 22 + .../html/class_control_system_test-members.html | 46 +- docs/doxygen/html/class_control_system_test.html | 54 ++- docs/doxygen/html/class_control_system_test.js | 12 + .../class_control_system_test_base-members.html | 46 +- .../html/class_control_system_test_base.html | 54 ++- .../doxygen/html/class_control_system_test_base.js | 39 ++ docs/doxygen/html/class_data_report-members.html | 46 +- docs/doxygen/html/class_data_report.html | 54 ++- docs/doxygen/html/class_data_report.js | 39 ++ .../html/class_data_report_base-members.html | 46 +- docs/doxygen/html/class_data_report_base.html | 54 ++- docs/doxygen/html/class_data_report_base.js | 50 ++ .../html/class_electric_calculation-members.html | 46 +- docs/doxygen/html/class_electric_calculation.html | 77 ++- docs/doxygen/html/class_electric_calculation.js | 35 ++ .../html/class_electromechanical-members.html | 46 +- docs/doxygen/html/class_electromechanical.html | 54 ++- docs/doxygen/html/class_electromechanical.js | 51 ++ docs/doxygen/html/class_element-members.html | 46 +- docs/doxygen/html/class_element.html | 184 +++++++- docs/doxygen/html/class_element.js | 96 ++++ .../html/class_element_data_object-members.html | 46 +- docs/doxygen/html/class_element_data_object.html | 54 ++- docs/doxygen/html/class_element_data_object.js | 11 + .../html/class_element_plot_data-members.html | 46 +- docs/doxygen/html/class_element_plot_data.html | 54 ++- docs/doxygen/html/class_element_plot_data.js | 43 ++ docs/doxygen/html/class_exponential-members.html | 46 +- docs/doxygen/html/class_exponential.html | 66 ++- docs/doxygen/html/class_exponential.js | 17 + .../html/class_exponential_form-members.html | 46 +- docs/doxygen/html/class_exponential_form.html | 54 ++- docs/doxygen/html/class_exponential_form.js | 10 + .../html/class_exponential_form_base-members.html | 46 +- docs/doxygen/html/class_exponential_form_base.html | 54 ++- docs/doxygen/html/class_exponential_form_base.js | 25 + docs/doxygen/html/class_fault-members.html | 46 +- docs/doxygen/html/class_fault.html | 61 ++- docs/doxygen/html/class_fault.js | 24 + docs/doxygen/html/class_file_handing-members.html | 46 +- docs/doxygen/html/class_file_handing.html | 54 ++- docs/doxygen/html/class_file_handing.js | 31 ++ docs/doxygen/html/class_gain-members.html | 46 +- docs/doxygen/html/class_gain.html | 68 ++- docs/doxygen/html/class_gain.js | 21 + docs/doxygen/html/class_gain_form-members.html | 46 +- docs/doxygen/html/class_gain_form.html | 54 ++- docs/doxygen/html/class_gain_form.js | 10 + .../doxygen/html/class_gain_form_base-members.html | 46 +- docs/doxygen/html/class_gain_form_base.html | 54 ++- docs/doxygen/html/class_gain_form_base.js | 19 + .../class_general_properties_form-members.html | 46 +- .../html/class_general_properties_form.html | 54 ++- docs/doxygen/html/class_general_properties_form.js | 9 + ...class_general_properties_form_base-members.html | 46 +- .../html/class_general_properties_form_base.html | 54 ++- .../html/class_general_properties_form_base.js | 23 + .../html/class_generator_stab_form-members.html | 46 +- docs/doxygen/html/class_generator_stab_form.html | 54 ++- docs/doxygen/html/class_generator_stab_form.js | 15 + .../class_generator_stab_form_base-members.html | 46 +- .../html/class_generator_stab_form_base.html | 54 ++- .../doxygen/html/class_generator_stab_form_base.js | 120 +++++ .../html/class_graphical_element-members.html | 46 +- docs/doxygen/html/class_graphical_element.html | 54 ++- docs/doxygen/html/class_graphical_element.js | 5 + docs/doxygen/html/class_i_o_control-members.html | 46 +- docs/doxygen/html/class_i_o_control.html | 66 ++- docs/doxygen/html/class_i_o_control.js | 31 ++ .../html/class_i_o_control_form-members.html | 46 +- docs/doxygen/html/class_i_o_control_form.html | 54 ++- docs/doxygen/html/class_i_o_control_form.js | 14 + .../html/class_i_o_control_form_base-members.html | 46 +- docs/doxygen/html/class_i_o_control_form_base.html | 54 ++- docs/doxygen/html/class_i_o_control_form_base.js | 25 + docs/doxygen/html/class_ind_motor-members.html | 46 +- docs/doxygen/html/class_ind_motor.html | 62 ++- docs/doxygen/html/class_ind_motor.js | 15 + .../doxygen/html/class_ind_motor_form-members.html | 46 +- docs/doxygen/html/class_ind_motor_form.html | 54 ++- docs/doxygen/html/class_ind_motor_form.js | 11 + .../html/class_ind_motor_form_base-members.html | 46 +- docs/doxygen/html/class_ind_motor_form_base.html | 54 ++- docs/doxygen/html/class_ind_motor_form_base.js | 34 ++ docs/doxygen/html/class_inductor-members.html | 46 +- docs/doxygen/html/class_inductor.html | 72 ++- docs/doxygen/html/class_inductor.js | 19 + docs/doxygen/html/class_limiter-members.html | 46 +- docs/doxygen/html/class_limiter.html | 66 ++- docs/doxygen/html/class_limiter.js | 19 + docs/doxygen/html/class_limiter_form-members.html | 46 +- docs/doxygen/html/class_limiter_form.html | 54 ++- docs/doxygen/html/class_limiter_form.js | 10 + .../html/class_limiter_form_base-members.html | 46 +- docs/doxygen/html/class_limiter_form_base.html | 54 ++- docs/doxygen/html/class_limiter_form_base.js | 23 + docs/doxygen/html/class_line-members.html | 46 +- docs/doxygen/html/class_line.html | 96 +++- docs/doxygen/html/class_line.js | 34 ++ docs/doxygen/html/class_line_form-members.html | 46 +- docs/doxygen/html/class_line_form.html | 54 ++- docs/doxygen/html/class_line_form.js | 12 + .../doxygen/html/class_line_form_base-members.html | 46 +- docs/doxygen/html/class_line_form_base.html | 54 ++- docs/doxygen/html/class_line_form_base.js | 72 +++ docs/doxygen/html/class_load-members.html | 46 +- docs/doxygen/html/class_load.html | 68 ++- docs/doxygen/html/class_load.js | 18 + docs/doxygen/html/class_load_form-members.html | 46 +- docs/doxygen/html/class_load_form.html | 54 ++- docs/doxygen/html/class_load_form.js | 11 + .../doxygen/html/class_load_form_base-members.html | 46 +- docs/doxygen/html/class_load_form_base.html | 54 ++- docs/doxygen/html/class_load_form_base.js | 38 ++ docs/doxygen/html/class_machines-members.html | 46 +- docs/doxygen/html/class_machines.html | 80 +++- docs/doxygen/html/class_machines.js | 30 ++ docs/doxygen/html/class_main_app-members.html | 46 +- docs/doxygen/html/class_main_app.html | 54 ++- docs/doxygen/html/class_main_app.js | 8 + docs/doxygen/html/class_main_frame-members.html | 46 +- docs/doxygen/html/class_main_frame.html | 54 ++- docs/doxygen/html/class_main_frame.js | 50 ++ .../html/class_main_frame_base-members.html | 46 +- docs/doxygen/html/class_main_frame_base.html | 54 ++- docs/doxygen/html/class_main_frame_base.js | 95 ++++ docs/doxygen/html/class_multiplier-members.html | 46 +- docs/doxygen/html/class_multiplier.html | 66 ++- docs/doxygen/html/class_multiplier.js | 13 + docs/doxygen/html/class_node-members.html | 46 +- docs/doxygen/html/class_node.html | 54 ++- docs/doxygen/html/class_node.js | 37 ++ .../html/class_open_g_l_colour-members.html | 46 +- docs/doxygen/html/class_open_g_l_colour.html | 57 ++- docs/doxygen/html/class_open_g_l_colour.js | 9 + docs/doxygen/html/class_plot_data-members.html | 46 +- docs/doxygen/html/class_plot_data.html | 52 ++- docs/doxygen/html/class_plot_data.js | 26 ++ docs/doxygen/html/class_power_element-members.html | 46 +- docs/doxygen/html/class_power_element.html | 73 ++- docs/doxygen/html/class_power_element.js | 31 ++ docs/doxygen/html/class_power_flow-members.html | 46 +- docs/doxygen/html/class_power_flow.html | 54 ++- docs/doxygen/html/class_power_flow.js | 10 + .../html/class_properties_data-members.html | 46 +- docs/doxygen/html/class_properties_data.html | 54 ++- docs/doxygen/html/class_properties_data.js | 11 + docs/doxygen/html/class_rate_limiter-members.html | 46 +- docs/doxygen/html/class_rate_limiter.html | 66 ++- docs/doxygen/html/class_rate_limiter.js | 19 + .../html/class_rate_limiter_form-members.html | 46 +- docs/doxygen/html/class_rate_limiter_form.html | 54 ++- docs/doxygen/html/class_rate_limiter_form.js | 10 + .../html/class_rate_limiter_form_base-members.html | 46 +- .../doxygen/html/class_rate_limiter_form_base.html | 54 ++- docs/doxygen/html/class_rate_limiter_form_base.js | 23 + .../class_reactive_shunt_element_form-members.html | 46 +- .../html/class_reactive_shunt_element_form.html | 54 ++- .../html/class_reactive_shunt_element_form.js | 13 + ...s_reactive_shunt_element_form_base-members.html | 46 +- .../class_reactive_shunt_element_form_base.html | 54 ++- .../html/class_reactive_shunt_element_form_base.js | 28 ++ docs/doxygen/html/class_shunt-members.html | 46 +- docs/doxygen/html/class_shunt.html | 72 ++- docs/doxygen/html/class_shunt.js | 19 + .../class_simulations_settings_form-members.html | 46 +- .../html/class_simulations_settings_form.html | 54 ++- .../html/class_simulations_settings_form.js | 10 + ...ass_simulations_settings_form_base-members.html | 46 +- .../html/class_simulations_settings_form_base.html | 54 ++- .../html/class_simulations_settings_form_base.js | 84 ++++ docs/doxygen/html/class_sum-members.html | 46 +- docs/doxygen/html/class_sum.html | 66 ++- docs/doxygen/html/class_sum.js | 22 + docs/doxygen/html/class_sum_form-members.html | 46 +- docs/doxygen/html/class_sum_form.html | 54 ++- docs/doxygen/html/class_sum_form.js | 10 + docs/doxygen/html/class_sum_form_base-members.html | 46 +- docs/doxygen/html/class_sum_form_base.html | 54 ++- docs/doxygen/html/class_sum_form_base.js | 19 + .../doxygen/html/class_switching_form-members.html | 46 +- docs/doxygen/html/class_switching_form.html | 54 ++- docs/doxygen/html/class_switching_form.js | 16 + .../html/class_switching_form_base-members.html | 46 +- docs/doxygen/html/class_switching_form_base.html | 54 ++- docs/doxygen/html/class_switching_form_base.js | 34 ++ .../doxygen/html/class_sync_generator-members.html | 46 +- docs/doxygen/html/class_sync_generator.html | 66 ++- docs/doxygen/html/class_sync_generator.js | 19 + .../html/class_sync_machine_form-members.html | 46 +- docs/doxygen/html/class_sync_machine_form.html | 54 ++- docs/doxygen/html/class_sync_machine_form.js | 16 + .../html/class_sync_machine_form_base-members.html | 46 +- .../doxygen/html/class_sync_machine_form_base.html | 54 ++- docs/doxygen/html/class_sync_machine_form_base.js | 92 ++++ docs/doxygen/html/class_sync_motor-members.html | 46 +- docs/doxygen/html/class_sync_motor.html | 64 ++- docs/doxygen/html/class_sync_motor.js | 16 + docs/doxygen/html/class_text-members.html | 46 +- docs/doxygen/html/class_text.html | 64 ++- docs/doxygen/html/class_text.js | 45 ++ docs/doxygen/html/class_text_form-members.html | 46 +- docs/doxygen/html/class_text_form.html | 54 ++- docs/doxygen/html/class_text_form.js | 26 ++ .../doxygen/html/class_text_form_base-members.html | 46 +- docs/doxygen/html/class_text_form_base.html | 54 ++- docs/doxygen/html/class_text_form_base.js | 54 +++ .../html/class_text_g_l_drawable-members.html | 46 +- docs/doxygen/html/class_text_g_l_drawable.html | 63 ++- docs/doxygen/html/class_text_g_l_drawable.js | 32 ++ docs/doxygen/html/class_text_texture-members.html | 46 +- docs/doxygen/html/class_text_texture.html | 54 ++- docs/doxygen/html/class_text_texture.js | 11 + .../html/class_transfer_function-members.html | 46 +- docs/doxygen/html/class_transfer_function.html | 66 ++- docs/doxygen/html/class_transfer_function.js | 35 ++ .../html/class_transfer_function_form-members.html | 46 +- .../doxygen/html/class_transfer_function_form.html | 54 ++- docs/doxygen/html/class_transfer_function_form.js | 11 + .../class_transfer_function_form_base-members.html | 46 +- .../html/class_transfer_function_form_base.html | 54 ++- .../html/class_transfer_function_form_base.js | 23 + docs/doxygen/html/class_transformer-members.html | 46 +- docs/doxygen/html/class_transformer.html | 86 +++- docs/doxygen/html/class_transformer.js | 27 ++ .../html/class_transformer_form-members.html | 46 +- docs/doxygen/html/class_transformer_form.html | 54 ++- docs/doxygen/html/class_transformer_form.js | 11 + .../html/class_transformer_form_base-members.html | 46 +- docs/doxygen/html/class_transformer_form_base.html | 54 ++- docs/doxygen/html/class_transformer_form_base.js | 92 ++++ docs/doxygen/html/class_workspace-members.html | 46 +- docs/doxygen/html/class_workspace.html | 54 ++- docs/doxygen/html/class_workspace.js | 90 ++++ .../doxygen/html/class_workspace_base-members.html | 46 +- docs/doxygen/html/class_workspace_base.html | 54 ++- docs/doxygen/html/class_workspace_base.js | 22 + docs/doxygen/html/classes.html | 44 +- .../html/classwx_g_l_number_renderer-members.html | 46 +- docs/doxygen/html/classwx_g_l_number_renderer.html | 59 ++- docs/doxygen/html/classwx_g_l_number_renderer.js | 9 + docs/doxygen/html/classwx_g_l_string-members.html | 46 +- docs/doxygen/html/classwx_g_l_string.html | 65 ++- docs/doxygen/html/classwx_g_l_string.js | 16 + .../html/classwx_g_l_string_array-members.html | 46 +- docs/doxygen/html/classwx_g_l_string_array.html | 65 ++- docs/doxygen/html/classwx_g_l_string_array.js | 11 + .../classwx_ribbon_metro_art_provider-members.html | 46 +- .../html/classwx_ribbon_metro_art_provider.html | 54 ++- .../html/classwx_ribbon_metro_art_provider.js | 23 + .../html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.html | 51 +- .../html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.js | 163 +++++++ docs/doxygen/html/dynsections.js | 7 + docs/doxygen/html/files.html | 279 +++++++---- docs/doxygen/html/files.js | 4 + docs/doxygen/html/functions.html | 44 +- docs/doxygen/html/functions_0x7e.html | 44 +- docs/doxygen/html/functions_b.html | 44 +- docs/doxygen/html/functions_c.html | 44 +- docs/doxygen/html/functions_d.html | 44 +- docs/doxygen/html/functions_dup.js | 21 + docs/doxygen/html/functions_e.html | 44 +- docs/doxygen/html/functions_f.html | 44 +- docs/doxygen/html/functions_func.html | 44 +- docs/doxygen/html/functions_func.js | 21 + docs/doxygen/html/functions_func_0x7e.html | 44 +- docs/doxygen/html/functions_func_b.html | 44 +- docs/doxygen/html/functions_func_c.html | 44 +- docs/doxygen/html/functions_func_d.html | 44 +- docs/doxygen/html/functions_func_e.html | 44 +- docs/doxygen/html/functions_func_f.html | 44 +- docs/doxygen/html/functions_func_g.html | 44 +- docs/doxygen/html/functions_func_h.html | 44 +- docs/doxygen/html/functions_func_i.html | 44 +- docs/doxygen/html/functions_func_m.html | 44 +- docs/doxygen/html/functions_func_n.html | 44 +- docs/doxygen/html/functions_func_o.html | 44 +- docs/doxygen/html/functions_func_p.html | 44 +- docs/doxygen/html/functions_func_r.html | 44 +- docs/doxygen/html/functions_func_s.html | 44 +- docs/doxygen/html/functions_func_u.html | 44 +- docs/doxygen/html/functions_func_w.html | 44 +- docs/doxygen/html/functions_g.html | 44 +- docs/doxygen/html/functions_h.html | 44 +- docs/doxygen/html/functions_i.html | 44 +- docs/doxygen/html/functions_m.html | 44 +- docs/doxygen/html/functions_n.html | 44 +- docs/doxygen/html/functions_o.html | 44 +- docs/doxygen/html/functions_p.html | 44 +- docs/doxygen/html/functions_r.html | 44 +- docs/doxygen/html/functions_s.html | 44 +- docs/doxygen/html/functions_u.html | 44 +- docs/doxygen/html/functions_vars.html | 44 +- docs/doxygen/html/functions_w.html | 44 +- docs/doxygen/html/globals.html | 44 +- docs/doxygen/html/globals_enum.html | 44 +- docs/doxygen/html/globals_eval.html | 44 +- docs/doxygen/html/hierarchy.html | 44 +- docs/doxygen/html/hierarchy.js | 178 +++++++ docs/doxygen/html/index.html | 56 ++- docs/doxygen/html/logo128.png | Bin 0 -> 4246 bytes docs/doxygen/html/logo64.png | Bin 0 -> 2289 bytes docs/doxygen/html/logoHeader.png | Bin 0 -> 5202 bytes docs/doxygen/html/main_8cpp_source.html | 98 ++++ docs/doxygen/html/navtree.css | 146 ++++++ docs/doxygen/html/navtree.js | 517 +++++++++++++++++++++ docs/doxygen/html/navtreedata.js | 44 ++ docs/doxygen/html/navtreeindex0.js | 253 ++++++++++ docs/doxygen/html/navtreeindex1.js | 253 ++++++++++ docs/doxygen/html/navtreeindex10.js | 253 ++++++++++ docs/doxygen/html/navtreeindex11.js | 253 ++++++++++ docs/doxygen/html/navtreeindex12.js | 253 ++++++++++ docs/doxygen/html/navtreeindex13.js | 116 +++++ docs/doxygen/html/navtreeindex2.js | 253 ++++++++++ docs/doxygen/html/navtreeindex3.js | 253 ++++++++++ docs/doxygen/html/navtreeindex4.js | 253 ++++++++++ docs/doxygen/html/navtreeindex5.js | 253 ++++++++++ docs/doxygen/html/navtreeindex6.js | 253 ++++++++++ docs/doxygen/html/navtreeindex7.js | 253 ++++++++++ docs/doxygen/html/navtreeindex8.js | 253 ++++++++++ docs/doxygen/html/navtreeindex9.js | 253 ++++++++++ docs/doxygen/html/resize.js | 114 +++++ docs/doxygen/html/search/all_d.js | 1 + docs/doxygen/html/search/pages_0.html | 26 ++ docs/doxygen/html/search/pages_0.js | 4 + docs/doxygen/html/search/searchdata.js | 9 +- .../html/struct_bus_electrical_data-members.html | 46 +- docs/doxygen/html/struct_bus_electrical_data.html | 56 ++- docs/doxygen/html/struct_bus_electrical_data.js | 29 ++ .../struct_capacitor_electrical_data-members.html | 46 +- .../html/struct_capacitor_electrical_data.html | 52 ++- .../html/struct_capacitor_electrical_data.js | 6 + .../html/struct_elements_lists-members.html | 46 +- docs/doxygen/html/struct_elements_lists.html | 52 ++- docs/doxygen/html/struct_elements_lists.js | 5 + docs/doxygen/html/struct_general_data-members.html | 46 +- docs/doxygen/html/struct_general_data.html | 52 ++- docs/doxygen/html/struct_general_data.js | 5 + .../struct_ind_motor_electrical_data-members.html | 46 +- .../html/struct_ind_motor_electrical_data.html | 52 ++- .../html/struct_ind_motor_electrical_data.js | 8 + .../struct_inductor_electrical_data-members.html | 46 +- .../html/struct_inductor_electrical_data.html | 52 ++- .../html/struct_inductor_electrical_data.js | 6 + .../html/struct_integration_constant-members.html | 46 +- docs/doxygen/html/struct_integration_constant.html | 53 ++- docs/doxygen/html/struct_integration_constant.js | 5 + .../html/struct_line_electrical_data-members.html | 46 +- docs/doxygen/html/struct_line_electrical_data.html | 52 ++- docs/doxygen/html/struct_line_electrical_data.js | 22 + .../html/struct_load_electrical_data-members.html | 46 +- docs/doxygen/html/struct_load_electrical_data.html | 52 ++- docs/doxygen/html/struct_load_electrical_data.js | 9 + .../html/struct_reactive_limits-members.html | 46 +- docs/doxygen/html/struct_reactive_limits.html | 52 ++- docs/doxygen/html/struct_reactive_limits.js | 8 + .../html/struct_simulation_data-members.html | 46 +- docs/doxygen/html/struct_simulation_data.html | 52 ++- docs/doxygen/html/struct_simulation_data.js | 19 + .../html/struct_switching_data-members.html | 46 +- docs/doxygen/html/struct_switching_data.html | 53 ++- docs/doxygen/html/struct_switching_data.js | 5 + ...uct_sync_generator_electrical_data-members.html | 46 +- .../struct_sync_generator_electrical_data.html | 54 ++- .../html/struct_sync_generator_electrical_data.js | 79 ++++ .../struct_sync_motor_electrical_data-members.html | 46 +- .../html/struct_sync_motor_electrical_data.html | 54 ++- .../html/struct_sync_motor_electrical_data.js | 79 ++++ ..._transfer_function_1_1_space_state-members.html | 50 +- .../struct_transfer_function_1_1_space_state.html | 56 ++- .../struct_transfer_function_1_1_space_state.js | 7 + ...struct_transformer_electrical_data-members.html | 46 +- .../html/struct_transformer_electrical_data.html | 52 ++- .../html/struct_transformer_electrical_data.js | 28 ++ docs/doxygen/html/wx_g_l_string_8cpp_source.html | 116 +++++ docs/doxygen/html/wx_g_l_string_8h_source.html | 77 +-- 600 files changed, 31000 insertions(+), 6285 deletions(-) create mode 100644 docs/doxygen/html/_about_form_8cpp_source.html create mode 100644 docs/doxygen/html/_art_metro_8cpp_source.html create mode 100644 docs/doxygen/html/_branch_8cpp_source.html create mode 100644 docs/doxygen/html/_bus_8cpp_source.html create mode 100644 docs/doxygen/html/_bus_form_8cpp_source.html create mode 100644 docs/doxygen/html/_bus_form_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/_camera_8cpp_source.html create mode 100644 docs/doxygen/html/_capacitor_8cpp_source.html create mode 100644 docs/doxygen/html/_chart_view_8cpp_source.html create mode 100644 docs/doxygen/html/_chart_view_base_8cpp_source.html create mode 100644 docs/doxygen/html/_chart_view_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/_connection_line_8cpp_source.html create mode 100644 docs/doxygen/html/_constant_8cpp_source.html create mode 100644 docs/doxygen/html/_constant_form_8cpp_source.html create mode 100644 docs/doxygen/html/_control_editor_8cpp_source.html create mode 100644 docs/doxygen/html/_control_editor_base_8cpp_source.html create mode 100644 docs/doxygen/html/_control_editor_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/_control_element_8cpp_source.html create mode 100644 docs/doxygen/html/_control_element_container_8cpp_source.html create mode 100644 docs/doxygen/html/_control_element_solver_8cpp_source.html create mode 100644 docs/doxygen/html/_control_system_test_8cpp_source.html create mode 100644 docs/doxygen/html/_data_report_8cpp_source.html create mode 100644 docs/doxygen/html/_data_report_base_8cpp_source.html create mode 100644 docs/doxygen/html/_data_report_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/_electric_calculation_8cpp_source.html create mode 100644 docs/doxygen/html/_electric_calculation_8h.js create mode 100644 docs/doxygen/html/_electromechanical_8cpp_source.html create mode 100644 docs/doxygen/html/_element_8cpp_source.html create mode 100644 docs/doxygen/html/_element_8h.js create mode 100644 docs/doxygen/html/_element_data_object_8cpp_source.html create mode 100644 docs/doxygen/html/_element_form_8cpp_source.html create mode 100644 docs/doxygen/html/_element_form_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/_element_plot_data_8cpp_source.html create mode 100644 docs/doxygen/html/_exponential_8cpp_source.html create mode 100644 docs/doxygen/html/_exponential_form_8cpp_source.html create mode 100644 docs/doxygen/html/_fault_8cpp_source.html create mode 100644 docs/doxygen/html/_file_handing_8cpp_source.html create mode 100644 docs/doxygen/html/_gain_8cpp_source.html create mode 100644 docs/doxygen/html/_gain_form_8cpp_source.html create mode 100644 docs/doxygen/html/_general_properties_form_8cpp_source.html create mode 100644 docs/doxygen/html/_generator_stab_form_8cpp_source.html create mode 100644 docs/doxygen/html/_graphical_element_8cpp_source.html create mode 100644 docs/doxygen/html/_i_o_control_8cpp_source.html create mode 100644 docs/doxygen/html/_i_o_control_form_8cpp_source.html create mode 100644 docs/doxygen/html/_ind_motor_8cpp_source.html create mode 100644 docs/doxygen/html/_ind_motor_form_8cpp_source.html create mode 100644 docs/doxygen/html/_inductor_8cpp_source.html create mode 100644 docs/doxygen/html/_limiter_8cpp_source.html create mode 100644 docs/doxygen/html/_limiter_form_8cpp_source.html create mode 100644 docs/doxygen/html/_line_8cpp_source.html create mode 100644 docs/doxygen/html/_line_form_8cpp_source.html create mode 100644 docs/doxygen/html/_load_8cpp_source.html create mode 100644 docs/doxygen/html/_load_form_8cpp_source.html create mode 100644 docs/doxygen/html/_machines_8cpp_source.html create mode 100644 docs/doxygen/html/_main_frame_8cpp_source.html create mode 100644 docs/doxygen/html/_main_frame_base_8cpp_source.html create mode 100644 docs/doxygen/html/_main_frame_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/_multiplier_8cpp_source.html create mode 100644 docs/doxygen/html/_power_element_8cpp_source.html create mode 100644 docs/doxygen/html/_power_element_8h.js create mode 100644 docs/doxygen/html/_power_flow_8cpp_source.html create mode 100644 docs/doxygen/html/_properties_data_8cpp_source.html create mode 100644 docs/doxygen/html/_properties_form_8cpp_source.html create mode 100644 docs/doxygen/html/_properties_form_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/_rate_limiter_8cpp_source.html create mode 100644 docs/doxygen/html/_rate_limiter_form_8cpp_source.html create mode 100644 docs/doxygen/html/_reactive_shunt_element_form_8cpp_source.html create mode 100644 docs/doxygen/html/_shunt_8cpp_source.html create mode 100644 docs/doxygen/html/_simulations_settings_form_8cpp_source.html create mode 100644 docs/doxygen/html/_sum_8cpp_source.html create mode 100644 docs/doxygen/html/_sum_form_8cpp_source.html create mode 100644 docs/doxygen/html/_switching_form_8cpp_source.html create mode 100644 docs/doxygen/html/_sync_generator_8cpp_source.html create mode 100644 docs/doxygen/html/_sync_machine_form_8cpp_source.html create mode 100644 docs/doxygen/html/_sync_motor_8cpp_source.html create mode 100644 docs/doxygen/html/_text_8cpp_source.html create mode 100644 docs/doxygen/html/_text_form_8cpp_source.html create mode 100644 docs/doxygen/html/_transfer_function_8cpp_source.html create mode 100644 docs/doxygen/html/_transfer_function_form_8cpp_source.html create mode 100644 docs/doxygen/html/_transformer_8cpp_source.html create mode 100644 docs/doxygen/html/_transformer_form_8cpp_source.html create mode 100644 docs/doxygen/html/_workspace_8cpp_source.html create mode 100644 docs/doxygen/html/_workspace_base_8cpp_source.html create mode 100644 docs/doxygen/html/_workspace_bitmaps_8cpp_source.html create mode 100644 docs/doxygen/html/annotated_dup.js create mode 100644 docs/doxygen/html/class_about_form.js create mode 100644 docs/doxygen/html/class_about_form_base.js create mode 100644 docs/doxygen/html/class_branch.js create mode 100644 docs/doxygen/html/class_bus.js create mode 100644 docs/doxygen/html/class_bus_form.js create mode 100644 docs/doxygen/html/class_bus_form_base.js create mode 100644 docs/doxygen/html/class_camera.js create mode 100644 docs/doxygen/html/class_capacitor.js create mode 100644 docs/doxygen/html/class_chart_view.js create mode 100644 docs/doxygen/html/class_chart_view_base.js create mode 100644 docs/doxygen/html/class_connection_line.js create mode 100644 docs/doxygen/html/class_constant.js create mode 100644 docs/doxygen/html/class_constant_form.js create mode 100644 docs/doxygen/html/class_constant_form_base.js create mode 100644 docs/doxygen/html/class_control_editor.js create mode 100644 docs/doxygen/html/class_control_editor_base.js create mode 100644 docs/doxygen/html/class_control_element.js create mode 100644 docs/doxygen/html/class_control_element_button.js create mode 100644 docs/doxygen/html/class_control_element_container.js create mode 100644 docs/doxygen/html/class_control_element_solver.js create mode 100644 docs/doxygen/html/class_control_system_test.js create mode 100644 docs/doxygen/html/class_control_system_test_base.js create mode 100644 docs/doxygen/html/class_data_report.js create mode 100644 docs/doxygen/html/class_data_report_base.js create mode 100644 docs/doxygen/html/class_electric_calculation.js create mode 100644 docs/doxygen/html/class_electromechanical.js create mode 100644 docs/doxygen/html/class_element.js create mode 100644 docs/doxygen/html/class_element_data_object.js create mode 100644 docs/doxygen/html/class_element_plot_data.js create mode 100644 docs/doxygen/html/class_exponential.js create mode 100644 docs/doxygen/html/class_exponential_form.js create mode 100644 docs/doxygen/html/class_exponential_form_base.js create mode 100644 docs/doxygen/html/class_fault.js create mode 100644 docs/doxygen/html/class_file_handing.js create mode 100644 docs/doxygen/html/class_gain.js create mode 100644 docs/doxygen/html/class_gain_form.js create mode 100644 docs/doxygen/html/class_gain_form_base.js create mode 100644 docs/doxygen/html/class_general_properties_form.js create mode 100644 docs/doxygen/html/class_general_properties_form_base.js create mode 100644 docs/doxygen/html/class_generator_stab_form.js create mode 100644 docs/doxygen/html/class_generator_stab_form_base.js create mode 100644 docs/doxygen/html/class_graphical_element.js create mode 100644 docs/doxygen/html/class_i_o_control.js create mode 100644 docs/doxygen/html/class_i_o_control_form.js create mode 100644 docs/doxygen/html/class_i_o_control_form_base.js create mode 100644 docs/doxygen/html/class_ind_motor.js create mode 100644 docs/doxygen/html/class_ind_motor_form.js create mode 100644 docs/doxygen/html/class_ind_motor_form_base.js create mode 100644 docs/doxygen/html/class_inductor.js create mode 100644 docs/doxygen/html/class_limiter.js create mode 100644 docs/doxygen/html/class_limiter_form.js create mode 100644 docs/doxygen/html/class_limiter_form_base.js create mode 100644 docs/doxygen/html/class_line.js create mode 100644 docs/doxygen/html/class_line_form.js create mode 100644 docs/doxygen/html/class_line_form_base.js create mode 100644 docs/doxygen/html/class_load.js create mode 100644 docs/doxygen/html/class_load_form.js create mode 100644 docs/doxygen/html/class_load_form_base.js create mode 100644 docs/doxygen/html/class_machines.js create mode 100644 docs/doxygen/html/class_main_app.js create mode 100644 docs/doxygen/html/class_main_frame.js create mode 100644 docs/doxygen/html/class_main_frame_base.js create mode 100644 docs/doxygen/html/class_multiplier.js create mode 100644 docs/doxygen/html/class_node.js create mode 100644 docs/doxygen/html/class_open_g_l_colour.js create mode 100644 docs/doxygen/html/class_plot_data.js create mode 100644 docs/doxygen/html/class_power_element.js create mode 100644 docs/doxygen/html/class_power_flow.js create mode 100644 docs/doxygen/html/class_properties_data.js create mode 100644 docs/doxygen/html/class_rate_limiter.js create mode 100644 docs/doxygen/html/class_rate_limiter_form.js create mode 100644 docs/doxygen/html/class_rate_limiter_form_base.js create mode 100644 docs/doxygen/html/class_reactive_shunt_element_form.js create mode 100644 docs/doxygen/html/class_reactive_shunt_element_form_base.js create mode 100644 docs/doxygen/html/class_shunt.js create mode 100644 docs/doxygen/html/class_simulations_settings_form.js create mode 100644 docs/doxygen/html/class_simulations_settings_form_base.js create mode 100644 docs/doxygen/html/class_sum.js create mode 100644 docs/doxygen/html/class_sum_form.js create mode 100644 docs/doxygen/html/class_sum_form_base.js create mode 100644 docs/doxygen/html/class_switching_form.js create mode 100644 docs/doxygen/html/class_switching_form_base.js create mode 100644 docs/doxygen/html/class_sync_generator.js create mode 100644 docs/doxygen/html/class_sync_machine_form.js create mode 100644 docs/doxygen/html/class_sync_machine_form_base.js create mode 100644 docs/doxygen/html/class_sync_motor.js create mode 100644 docs/doxygen/html/class_text.js create mode 100644 docs/doxygen/html/class_text_form.js create mode 100644 docs/doxygen/html/class_text_form_base.js create mode 100644 docs/doxygen/html/class_text_g_l_drawable.js create mode 100644 docs/doxygen/html/class_text_texture.js create mode 100644 docs/doxygen/html/class_transfer_function.js create mode 100644 docs/doxygen/html/class_transfer_function_form.js create mode 100644 docs/doxygen/html/class_transfer_function_form_base.js create mode 100644 docs/doxygen/html/class_transformer.js create mode 100644 docs/doxygen/html/class_transformer_form.js create mode 100644 docs/doxygen/html/class_transformer_form_base.js create mode 100644 docs/doxygen/html/class_workspace.js create mode 100644 docs/doxygen/html/class_workspace_base.js create mode 100644 docs/doxygen/html/classwx_g_l_number_renderer.js create mode 100644 docs/doxygen/html/classwx_g_l_string.js create mode 100644 docs/doxygen/html/classwx_g_l_string_array.js create mode 100644 docs/doxygen/html/classwx_ribbon_metro_art_provider.js create mode 100644 docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.js create mode 100644 docs/doxygen/html/files.js create mode 100644 docs/doxygen/html/functions_dup.js create mode 100644 docs/doxygen/html/functions_func.js create mode 100644 docs/doxygen/html/hierarchy.js create mode 100644 docs/doxygen/html/logo128.png create mode 100644 docs/doxygen/html/logo64.png create mode 100644 docs/doxygen/html/logoHeader.png create mode 100644 docs/doxygen/html/main_8cpp_source.html create mode 100644 docs/doxygen/html/navtree.css create mode 100644 docs/doxygen/html/navtree.js create mode 100644 docs/doxygen/html/navtreedata.js create mode 100644 docs/doxygen/html/navtreeindex0.js create mode 100644 docs/doxygen/html/navtreeindex1.js create mode 100644 docs/doxygen/html/navtreeindex10.js create mode 100644 docs/doxygen/html/navtreeindex11.js create mode 100644 docs/doxygen/html/navtreeindex12.js create mode 100644 docs/doxygen/html/navtreeindex13.js create mode 100644 docs/doxygen/html/navtreeindex2.js create mode 100644 docs/doxygen/html/navtreeindex3.js create mode 100644 docs/doxygen/html/navtreeindex4.js create mode 100644 docs/doxygen/html/navtreeindex5.js create mode 100644 docs/doxygen/html/navtreeindex6.js create mode 100644 docs/doxygen/html/navtreeindex7.js create mode 100644 docs/doxygen/html/navtreeindex8.js create mode 100644 docs/doxygen/html/navtreeindex9.js create mode 100644 docs/doxygen/html/resize.js create mode 100644 docs/doxygen/html/search/pages_0.html create mode 100644 docs/doxygen/html/search/pages_0.js create mode 100644 docs/doxygen/html/struct_bus_electrical_data.js create mode 100644 docs/doxygen/html/struct_capacitor_electrical_data.js create mode 100644 docs/doxygen/html/struct_elements_lists.js create mode 100644 docs/doxygen/html/struct_general_data.js create mode 100644 docs/doxygen/html/struct_ind_motor_electrical_data.js create mode 100644 docs/doxygen/html/struct_inductor_electrical_data.js create mode 100644 docs/doxygen/html/struct_integration_constant.js create mode 100644 docs/doxygen/html/struct_line_electrical_data.js create mode 100644 docs/doxygen/html/struct_load_electrical_data.js create mode 100644 docs/doxygen/html/struct_reactive_limits.js create mode 100644 docs/doxygen/html/struct_simulation_data.js create mode 100644 docs/doxygen/html/struct_switching_data.js create mode 100644 docs/doxygen/html/struct_sync_generator_electrical_data.js create mode 100644 docs/doxygen/html/struct_sync_motor_electrical_data.js create mode 100644 docs/doxygen/html/struct_transfer_function_1_1_space_state.js create mode 100644 docs/doxygen/html/struct_transformer_electrical_data.js create mode 100644 docs/doxygen/html/wx_g_l_string_8cpp_source.html (limited to 'docs/doxygen/html') diff --git a/docs/doxygen/html/_about_form_8cpp_source.html b/docs/doxygen/html/_about_form_8cpp_source.html new file mode 100644 index 0000000..0439f02 --- /dev/null +++ b/docs/doxygen/html/_about_form_8cpp_source.html @@ -0,0 +1,96 @@ + + + + + + + +Project/AboutForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AboutForm.cpp
+
+
+
1 #include "AboutForm.h"
2 
3 AboutForm::AboutForm(wxWindow* parent) : AboutFormBase(parent) { Init(); }
4 AboutForm::~AboutForm() {}
5 void AboutForm::Init()
6 {
7  // Create developers table
8  m_gridCredits->EnableGridLines(false);
9  wxFont headerFont = m_gridCredits->GetDefaultCellFont();
10  headerFont.SetWeight(wxFONTWEIGHT_BOLD);
11  headerFont.SetPointSize(headerFont.GetPointSize() + 1);
12  wxColour headerColour(200, 200, 200);
13  wxColour hyperlinkColour(6, 69, 173);
14 
15  m_gridCredits->AppendCols(3);
16  m_gridCredits->AppendRows(6);
17  m_gridCredits->HideColLabels();
18  m_gridCredits->HideRowLabels();
19  m_gridCredits->SetCellSize(0, 0, 1, 3);
20  m_gridCredits->SetCellSize(3, 0, 1, 3);
21 
22  m_gridCredits->SetCellValue(0, 0, _("Developers"));
23  m_gridCredits->SetCellAlignment(0, 0, wxALIGN_CENTRE, wxALIGN_CENTRE);
24  m_gridCredits->SetCellBackgroundColour(0, 0, headerColour);
25  m_gridCredits->SetCellFont(0, 0, headerFont);
26  m_gridCredits->SetCellValue(1, 0, wxT("Thales Lima Oliveira"));
27  m_gridCredits->SetCellValue(1, 1, _("Main developer and project admin"));
28  m_gridCredits->SetCellValue(1, 2, wxT("thales@ufu.br"));
29 
30  m_gridCredits->SetRowMinimalHeight(2, 30);
31 
32  m_gridCredits->SetCellValue(3, 0, _("Contributors / Special Thanks"));
33  m_gridCredits->SetCellAlignment(3, 0, wxALIGN_CENTRE, wxALIGN_CENTRE);
34  m_gridCredits->SetCellBackgroundColour(3, 0, headerColour);
35  m_gridCredits->SetCellFont(3, 0, headerFont);
36  // Caixeta
37  m_gridCredits->SetCellValue(4, 0, wxT("Geraldo Caixeta Guimar") + static_cast<wxString>(L'\u00E3') + wxT("es"));
38  m_gridCredits->SetCellValue(4, 1, _("Chief advisor"));
39  m_gridCredits->SetCellValue(4, 2, wxT("gcaixeta@ufu.br"));
40  // Marcio Tamashiro
41  m_gridCredits->SetCellValue(5, 0, wxT("M") + static_cast<wxString>(L'\u00E1') + wxT("rcio Augusto Tamashiro"));
42  m_gridCredits->SetCellValue(5, 1, "");
43  m_gridCredits->SetCellValue(5, 2, wxT("tamashiro@ifto.edu.br"));
44 
45  for(int i = 0; i < m_gridCredits->GetNumberRows(); ++i) {
46  m_gridCredits->SetCellTextColour(i, 2, hyperlinkColour);
47  }
48 
49  m_gridCredits->AutoSize();
50 
51  // Last col size
52  int lastColSize = m_notebook->GetPage(1)->GetSize().GetWidth();
53  int lastColNumber = m_gridCredits->GetNumberCols() - 1;
54  for(int i = 0; i < lastColNumber; ++i) {
55  lastColSize -= m_gridCredits->GetColSize(i);
56  }
57  m_gridCredits->SetColSize(lastColNumber, lastColSize);
58  m_gridCredits->SetSize(m_notebook->GetPage(1)->GetSize());
59 
60  // Load license file
61  wxString licenseStr = "";
62  wxTextFile file;
63  if(!file.Open("../data/LICENSE")) {
64  // Error message
65  } else {
66  licenseStr += file.GetFirstLine() + "\n";
67  while(!file.Eof()) {
68  licenseStr += file.GetNextLine() + "\n";
69  }
70  }
71  wxFont font = m_richTextCtrlLicense->GetFont();
72  font.SetFamily(wxFONTFAMILY_TELETYPE);
73  m_richTextCtrlLicense->SetFont(font);
74  m_richTextCtrlLicense->SetEditable(false);
75  m_richTextCtrlLicense->AppendText(licenseStr);
76 }
+
+
+ + + + diff --git a/docs/doxygen/html/_about_form_8h_source.html b/docs/doxygen/html/_about_form_8h_source.html index 455a830..55f1898 100644 --- a/docs/doxygen/html/_about_form_8h_source.html +++ b/docs/doxygen/html/_about_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/AboutForm.h Source File +Project/AboutForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
AboutForm.h
-
1 #ifndef ABOUTFORM_H
2 #define ABOUTFORM_H
3 #include "PropertiesForm.h"
4 
5 #include <wx/textfile.h>
6 
7 class AboutForm : public AboutFormBase
8 {
9  public:
10  AboutForm(wxWindow* parent);
11  virtual ~AboutForm();
12  virtual void Init();
13 
14  protected:
15  virtual void OnOKButtonClick(wxCommandEvent& event) { EndModal(wxID_OK); };
16 };
17 #endif // ABOUTFORM_H
Definition: PropertiesForm.h:169
-
Definition: AboutForm.h:7
+
1 #ifndef ABOUTFORM_H
2 #define ABOUTFORM_H
3 #include "PropertiesForm.h"
4 
5 #include <wx/textfile.h>
6 
7 class AboutForm : public AboutFormBase
8 {
9  public:
10  AboutForm(wxWindow* parent);
11  virtual ~AboutForm();
12  virtual void Init();
13 
14  protected:
15  virtual void OnOKButtonClick(wxCommandEvent& event) { EndModal(wxID_OK); };
16 };
17 #endif // ABOUTFORM_H
+
+
- + diff --git a/docs/doxygen/html/_art_metro_8cpp_source.html b/docs/doxygen/html/_art_metro_8cpp_source.html new file mode 100644 index 0000000..a568bf2 --- /dev/null +++ b/docs/doxygen/html/_art_metro_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/ArtMetro.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ArtMetro.cpp
+
+
+
1 // Name: src/ribbon/art_msw.cpp
3 // Purpose: MSW style art provider for ribbon interface
4 // Author: Peter Cawley
5 // Modified by:
6 // Created: 2009-05-25
7 // RCS-ID: $Id$
8 // Copyright: (C) Peter Cawley
9 // Licence: wxWindows licence
11 
12 #include "wx/wxprec.h"
13 #include <wx/frame.h>
14 
15 #ifdef __BORLANDC__
16  #pragma hdrstop
17 #endif
18 
19 #include "wx/ribbon/art.h"
20 #include "wx/ribbon/art_internal.h"
21 #include "wx/ribbon/bar.h"
22 #include "wx/ribbon/buttonbar.h"
23 #include "wx/ribbon/gallery.h"
24 #include "wx/ribbon/toolbar.h"
25 
26 #include "ArtMetro.h"
27 
28 #ifndef WX_PRECOMP
29 #include "wx/dcmemory.h"
30 #endif
31 
32 #ifdef __WXMSW__
33 #include "wx/msw/private.h"
34 #endif
35 
36 static const char* const gallery_up_xpm[] = {
37  "5 5 2 1",
38  " c None",
39  "x c #FF00FF",
40  " ",
41  " x ",
42  " xxx ",
43  "xxxxx",
44  " "};
45 
46 static const char* const gallery_down_xpm[] = {
47  "5 5 2 1",
48  " c None",
49  "x c #FF00FF",
50  " ",
51  "xxxxx",
52  " xxx ",
53  " x ",
54  " "};
55 
56 static const char* const gallery_left_xpm[] = {
57  "5 5 2 1",
58  " c None",
59  "x c #FF00FF",
60  " x ",
61  " xx ",
62  " xxx ",
63  " xx ",
64  " x "};
65 
66 static const char* const gallery_right_xpm[] = {
67  "5 5 2 1",
68  " c None",
69  "x c #FF00FF",
70  " x ",
71  " xx ",
72  " xxx ",
73  " xx ",
74  " x "};
75 
76 static const char* const gallery_extension_xpm[] = {
77  "5 5 2 1",
78  " c None",
79  "x c #FF00FF",
80  "xxxxx",
81  " ",
82  "xxxxx",
83  " xxx ",
84  " x "};
85 
86 static const char* const panel_extension_xpm[] = {
87  "7 7 2 1",
88  " c None",
89  "x c #FF00FF",
90  "xxxxxx ",
91  "x ",
92  "x ",
93  "x x x",
94  "x xxx",
95  "x xxx",
96  " xxxx"};
97 
98 wxRibbonMetroArtProvider::wxRibbonMetroArtProvider(bool set_colour_scheme) : wxRibbonMSWArtProvider (set_colour_scheme)
99 {
100  m_flags = 0;
101  m_tab_label_font = *wxNORMAL_FONT;
102  m_button_bar_label_font = m_tab_label_font;
103  m_panel_label_font = m_tab_label_font;
104 
105  if(set_colour_scheme)
106  {
107  SetColourScheme(
108  wxColour(255, 255, 255),
109  wxColour(120, 174, 229),
110  wxColour( 0, 0, 0));
111  }
112 
113  m_cached_tab_separator_visibility = -10.0; // valid visibilities are in range [0, 1]
114  m_tab_separation_size = 3;
115  m_page_border_left = 2;
116  m_page_border_top = 1;
117  m_page_border_right = 2;
118  m_page_border_bottom = 3;
119  m_panel_x_separation_size = 2;
120  m_panel_y_separation_size = 1;
121  m_tool_group_separation_size = 3;
122  m_gallery_bitmap_padding_left_size = 4;
123  m_gallery_bitmap_padding_right_size = 4;
124  m_gallery_bitmap_padding_top_size = 4;
125  m_gallery_bitmap_padding_bottom_size = 4;
126 }
127 
128 wxRibbonMetroArtProvider::~wxRibbonMetroArtProvider()
129 {
130 }
131 void wxRibbonMetroArtProvider::GetColourScheme(
132  wxColour* primary,
133  wxColour* secondary,
134  wxColour* tertiary) const
135 {
136  if(primary != NULL)
137  *primary = m_primary_scheme_colour;
138  if(secondary != NULL)
139  *secondary = m_secondary_scheme_colour;
140  if(tertiary != NULL)
141  *tertiary = m_tertiary_scheme_colour;
142 }
143 void wxRibbonMetroArtProvider::SetColourScheme(
144  const wxColour& primary,
145  const wxColour& secondary,
146  const wxColour& tertiary)
147 {
148  m_primary_scheme_colour = primary;
149  m_secondary_scheme_colour = secondary;
150  m_tertiary_scheme_colour = tertiary;
151 
152  wxRibbonHSLColour primary_hsl(primary);
153  wxRibbonHSLColour secondary_hsl(secondary);
154  // tertiary not used for anything
155 
156  // Map primary saturation from [0, 1] to [.25, .75]
157  bool primary_is_gray = false;
158  static const double gray_saturation_threshold = 0.01;
159  if(primary_hsl.saturation <= gray_saturation_threshold)
160  primary_is_gray = true;
161  else
162  {
163  primary_hsl.saturation = cos(primary_hsl.saturation * M_PI)
164  * -0.25 + 0.5;
165  }
166 
167  // Map primary luminance from [0, 1] to [.23, .83]
168  primary_hsl.luminance = cos(primary_hsl.luminance * M_PI) * -0.3 + 0.53;
169 
170  // Map secondary saturation from [0, 1] to [0.16, 0.84]
171  bool secondary_is_gray = false;
172  if(secondary_hsl.saturation <= gray_saturation_threshold)
173  secondary_is_gray = true;
174  else
175  {
176  secondary_hsl.saturation = cos(secondary_hsl.saturation * M_PI)
177  * -0.34 + 0.5;
178  }
179 
180  // Map secondary luminance from [0, 1] to [0.1, 0.9]
181  secondary_hsl.luminance = cos(secondary_hsl.luminance * M_PI) * -0.4 + 0.5;
182 
183 #define LikePrimary(h, s, l) \
184  primary_hsl.ShiftHue(h ## f).Saturated(primary_is_gray ? 0 : s ## f) \
185  .Lighter(l ## f).ToRGB()
186 #define LikeSecondary(h, s, l) \
187  secondary_hsl.ShiftHue(h ## f).Saturated(secondary_is_gray ? 0 : s ## f) \
188  .Lighter(l ## f).ToRGB()
189 
190  m_page_border_pen = wxColour(218,219,220); // LikePrimary(1.4, 0.00, -0.2); // LikePrimary(1.4, 0.00, -0.08);
191 
192  // these are all needed for galleries (which are drawn using base class methods)
193  m_page_background_top_colour = wxColour(245,246,247); // wxColour(254,254,254); //
194  m_page_background_top_gradient_colour = wxColour(245,246,247); // wxColour(242,244,246);
195  m_page_background_colour = wxColour(245,246,247);
196  m_page_background_gradient_colour = wxColour(245,246,247); // wxColour(229,233,238);
197 
198  m_tab_active_background_colour = wxColour(245,246,247); // LikePrimary(1.0, 1.0, 0.94);
199  m_tab_active_background_gradient_colour = *wxBLUE; // wxColour(250,250,250); // LikePrimary(1.0, 1.0, 0.94);
200  m_tab_separator_colour = wxColour (245,246,247); // LikePrimary(0.9, 0.24, 0.05);
201  m_tab_ctrl_background_brush = wxColour(254,254,254); // LikePrimary(1.0, 0.39, 0.07);
202  m_tab_hover_background_colour = wxColour(253,253,253); // LikePrimary(1.3, 0.15, 0.10);
203  m_tab_hover_background_top_colour = *wxBLUE; // wxColour(254,254,254); // LikePrimary(1.4, 0.36, 0.08);
204  m_tab_border_pen = wxColour(218,219,220); // LikePrimary(1.4, 0.03, -0.05);
205  m_tab_separator_gradient_colour = LikePrimary(1.7, -0.15, -0.18);
206  m_tab_hover_background_top_gradient_colour = *wxBLUE; // wxColour(254,254,254); // LikePrimary(1.8, 0.34, 0.13);
207  m_tab_label_colour = LikePrimary(4.3, 0.13, -0.49);
208  m_tab_hover_background_gradient_colour = *wxBLUE; // LikeSecondary(-1.5, -0.34, 0.01);
209 
210  m_panel_minimised_border_gradient_pen = wxColour(232,239,247); // LikePrimary(-6.9, -0.17, -0.09);
211  m_panel_minimised_border_pen = wxColour(164, 206, 249); // LikePrimary(-5.3, -0.24, -0.06);
212  m_panel_border_gradient_pen = *wxBLUE; // LikePrimary(-5.2, -0.15, -0.06);
213  m_panel_border_pen = wxColour(226,227,228); // LikePrimary(-2.8, -0.32, 0.02);
214  m_panel_hover_label_background_brush = *wxBLUE; // LikePrimary(1.0, 0.30, 0.09);
215  m_panel_active_background_colour = LikePrimary(1.6, -0.18, 0.18);
216  m_panel_active_background_gradient_colour = LikePrimary(0.5, 0.34, 0.05);
217  m_panel_label_colour = LikePrimary(2.8, -0.14, -0.45); // LikePrimary(2.8, -0.14, -0.35);
218  m_panel_minimised_label_colour = m_tab_label_colour;
219  m_panel_hover_button_background_brush = wxColour(232,239,247); //LikeSecondary(-0.9, 0.16, -0.07);
220  m_panel_hover_button_border_pen = wxColour(164, 206, 249); // LikeSecondary(-3.9, -0.16, -0.14);
221  SetColour(wxRIBBON_ART_PANEL_BUTTON_FACE_COLOUR, LikePrimary(1.4, -0.21, -0.23));
222  SetColour(wxRIBBON_ART_PANEL_BUTTON_HOVER_FACE_COLOUR, LikePrimary(1.5, -0.24, -0.29));
223 
224  m_button_bar_label_colour = LikePrimary(2.8, -0.14, -0.6); // m_tab_label_colour;
225  m_button_bar_hover_border_pen = wxColour(164, 206, 249); // LikeSecondary(-6.2, 0.47, -0.1); // LikeSecondary(-6.2, -0.47, -0.14);
226  m_button_bar_hover_background_gradient_colour = wxColour(232,239,247); // LikeSecondary(-0.6, 0.16, 0.2); // LikeSecondary(-0.6, 0.16, 0.04);
227  m_button_bar_hover_background_colour = wxColour(232,239,247); // LikeSecondary(-0.2, 0.16, -0.01); // LikeSecondary(-0.2, 0.16, -0.10);
228  m_button_bar_hover_background_top_gradient_colour = wxColour(232,239,247); // LikeSecondary(0.2, 0.16, 0.03); // LikeSecondary(0.2, 0.16, 0.03);
229  // m_button_bar_hover_background_top_colour = *wxRED; // LikeSecondary(8.8, 0.16, 0.17); // LikeSecondary(8.8, 0.16, 0.17);
230  m_button_bar_active_border_pen = wxColour(102,167,232); // LikeSecondary(-6.2, -0.47, -0.25);
231  m_button_bar_active_background_top_colour = *wxYELLOW; // LikeSecondary(-8.4, 0.08, 0.06);
232  m_button_bar_active_background_top_gradient_colour = *wxYELLOW; // LikeSecondary(-9.7, 0.13, -0.07);
233  m_button_bar_active_background_colour = wxColour(209,232,255); // LikeSecondary(-9.9, 0.14, -0.14);
234  m_button_bar_active_background_gradient_colour = *wxYELLOW; // LikeSecondary(-8.7, 0.17, -0.03);
235 
236  m_gallery_button_disabled_background_colour = LikePrimary(-2.8, -0.46, 0.09);
237  m_gallery_button_disabled_background_top_brush = LikePrimary(-2.8, -0.36, 0.15);
238  m_gallery_hover_background_brush = LikePrimary(-0.8, 0.05, 0.15);
239  m_gallery_border_pen = LikePrimary(0.7, -0.02, 0.03);
240  m_gallery_button_background_top_brush = LikePrimary(0.8, 0.34, 0.13);
241  m_gallery_button_background_colour = LikePrimary(1.3, 0.10, 0.08);
242  // SetColour used so that the relevant bitmaps are generated
243  SetColour(wxRIBBON_ART_GALLERY_BUTTON_FACE_COLOUR, LikePrimary(1.4, -0.21, -0.23));
244  SetColour(wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR, LikePrimary(1.5, -0.24, -0.29));
245  SetColour(wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR, LikePrimary(1.5, -0.24, -0.29));
246  SetColour(wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR, LikePrimary(0.0, -1.0, 0.0));
247  m_gallery_button_disabled_background_gradient_colour = LikePrimary(1.5, -0.43, 0.12);
248  m_gallery_button_background_gradient_colour = LikePrimary(1.7, 0.11, 0.09);
249  m_gallery_item_border_pen = LikeSecondary(-3.9, -0.16, -0.14);
250  m_gallery_button_hover_background_colour = m_button_bar_hover_background_colour; // LikeSecondary(-0.9, 0.16, -0.07);
251  m_gallery_button_hover_background_gradient_colour = m_button_bar_hover_background_gradient_colour; // LikeSecondary(0.1, 0.12, 0.03);
252  m_gallery_button_hover_background_top_brush = m_button_bar_hover_background_top_gradient_colour; // LikeSecondary(4.3, 0.16, 0.17);
253  m_gallery_button_active_background_colour = LikeSecondary(-9.9, 0.03, -0.22);
254  m_gallery_button_active_background_gradient_colour = LikeSecondary(-9.5, 0.14, -0.11);
255  m_gallery_button_active_background_top_brush = LikeSecondary(-9.0, 0.15, -0.08);
256 
257  m_toolbar_border_pen = m_button_bar_hover_border_pen; // LikePrimary(1.4, -0.21, -0.16);
258  SetColour(wxRIBBON_ART_TOOLBAR_FACE_COLOUR, LikePrimary(1.4, -0.17, -0.22));
259  m_tool_background_top_colour = LikePrimary(-1.9, -0.07, 0.06);
260  m_tool_background_top_gradient_colour = LikePrimary(1.4, 0.12, 0.08);
261  m_tool_background_colour = wxColour(232,239,247); // LikePrimary(1.4, -0.09, 0.03);
262  m_tool_background_gradient_colour = *wxRED; // LikePrimary(1.9, 0.11, 0.09);
263  m_tool_hover_background_top_colour = m_button_bar_hover_background_top_colour; // LikeSecondary(3.4, 0.11, 0.16);
264  m_tool_hover_background_top_gradient_colour = m_button_bar_hover_background_top_gradient_colour; // LikeSecondary(-1.4, 0.04, 0.08);
265  m_tool_hover_background_colour = m_button_bar_hover_background_colour; // LikeSecondary(-1.8, 0.16, -0.12);
266  m_tool_hover_background_gradient_colour = m_button_bar_hover_background_gradient_colour; // LikeSecondary(-2.6, 0.16, 0.05);
267  m_tool_active_background_top_colour = LikeSecondary(-9.9, -0.12, -0.09);
268  m_tool_active_background_top_gradient_colour = LikeSecondary(-8.5, 0.16, -0.12);
269  m_tool_active_background_colour = LikeSecondary(-7.9, 0.16, -0.20);
270  m_tool_active_background_gradient_colour = LikeSecondary(-6.6, 0.16, -0.10);
271 
272 #undef LikePrimary
273 #undef LikeSecondary
274 
275  // Invalidate cached tab separator
276  m_cached_tab_separator_visibility = -1.0;
277 }
278 
279 void wxRibbonMetroArtProvider::SetFlags(long flags)
280 {
281  if((flags ^ m_flags) & wxRIBBON_BAR_FLOW_VERTICAL)
282  {
283  if(flags & wxRIBBON_BAR_FLOW_VERTICAL)
284  {
285  m_page_border_left++;
286  m_page_border_right++;
287  m_page_border_top--;
288  m_page_border_bottom--;
289  }
290  else
291  {
292  m_page_border_left--;
293  m_page_border_right--;
294  m_page_border_top++;
295  m_page_border_bottom++;
296  }
297  }
298  m_flags = flags;
299 
300  // Need to reload some bitmaps when flags change
301 #define Reload(setting) SetColour(setting, GetColour(setting))
302  Reload(wxRIBBON_ART_GALLERY_BUTTON_FACE_COLOUR);
303  Reload(wxRIBBON_ART_GALLERY_BUTTON_HOVER_FACE_COLOUR);
304  Reload(wxRIBBON_ART_GALLERY_BUTTON_ACTIVE_FACE_COLOUR);
305  Reload(wxRIBBON_ART_GALLERY_BUTTON_DISABLED_FACE_COLOUR);
306  Reload(wxRIBBON_ART_PANEL_BUTTON_FACE_COLOUR);
307  Reload(wxRIBBON_ART_PANEL_BUTTON_HOVER_FACE_COLOUR);
308 #undef Reload
309 }
310 void wxRibbonMetroArtProvider::DrawTabCtrlBackground(
311  wxDC& dc,
312  wxWindow* WXUNUSED(wnd),
313  const wxRect& rect)
314 {
315  dc.SetPen(*wxTRANSPARENT_PEN);
316  dc.SetBrush(m_tab_ctrl_background_brush);
317  dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height);
318 
319  dc.SetPen(m_page_border_pen);
320  if(rect.width > 6)
321  {
322  dc.DrawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width, rect.y + rect.height - 1);
323  }
324  else
325  {
326  dc.DrawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width, rect.y + rect.height - 1);
327  }
328 }
329 
330 void wxRibbonMetroArtProvider::DrawTab(
331  wxDC& dc,
332  wxWindow* WXUNUSED(wnd),
333  const wxRibbonPageTabInfo& tab)
334 {
335  if(tab.rect.height <= 2)
336  return;
337 
338  if(tab.active || tab.hovered)
339  {
340  if(tab.active)
341  {
342  wxRect background(tab.rect);
343 
344  background.x += 2;
345  background.y += 1;
346  background.width -= 3;
347  background.height -= 1;
348 
349  dc.SetPen(*wxTRANSPARENT_PEN);
350  dc.SetBrush(m_tab_active_background_colour);
351  dc.DrawRectangle(background);
352 
353  // TODO: active and hovered
354  }
355  else if(tab.hovered)
356  {
357  wxRect background(tab.rect);
358 
359  background.x += 2;
360  background.y += 1;
361  background.width -= 3;
362  background.height -= 2;
363  dc.SetPen(*wxTRANSPARENT_PEN);
364  dc.SetBrush(m_tab_hover_background_colour);
365  dc.DrawRectangle(background);
366  }
367 
368  wxPoint border_points[4];
369  border_points[0] = wxPoint(1, tab.rect.height - 2);
370  border_points[1] = wxPoint(1, 0);
371  border_points[2] = wxPoint(tab.rect.width - 1, 0);
372  border_points[3] = wxPoint(tab.rect.width - 1, tab.rect.height - 1);
373 
374  if (tab.active)
375  dc.SetPen(m_tab_border_pen);
376  else
377  dc.SetPen(m_tab_border_pen); // TODO: introduce hover border pen colour
378  dc.DrawLines(sizeof(border_points)/sizeof(wxPoint), border_points, tab.rect.x, tab.rect.y);
379  }
380 
381  if(m_flags & wxRIBBON_BAR_SHOW_PAGE_ICONS)
382  {
383  wxBitmap icon = tab.page->GetIcon();
384  if(icon.IsOk())
385  {
386  int x = tab.rect.x + 4;
387  if((m_flags & wxRIBBON_BAR_SHOW_PAGE_LABELS) == 0)
388  x = tab.rect.x + (tab.rect.width - icon.GetWidth()) / 2;
389  dc.DrawBitmap(icon, x, tab.rect.y + 1 + (tab.rect.height - 1 -
390  icon.GetHeight()) / 2, true);
391  }
392  }
393  if(m_flags & wxRIBBON_BAR_SHOW_PAGE_LABELS)
394  {
395  wxString label = tab.page->GetLabel();
396  if(!label.IsEmpty())
397  {
398  dc.SetFont(m_tab_label_font);
399  dc.SetTextForeground(m_tab_label_colour);
400  dc.SetBackgroundMode(wxTRANSPARENT);
401 
402  int text_height;
403  int text_width;
404  dc.GetTextExtent(label, &text_width, &text_height);
405  int width = tab.rect.width - 5;
406  int x = tab.rect.x + 3;
407  if(m_flags & wxRIBBON_BAR_SHOW_PAGE_ICONS)
408  {
409  x += 3 + tab.page->GetIcon().GetWidth();
410  width -= 3 + tab.page->GetIcon().GetWidth();
411  }
412  int y = tab.rect.y + (tab.rect.height - text_height) / 2;
413 
414  if(width <= text_width)
415  {
416  dc.SetClippingRegion(x, tab.rect.y, width, tab.rect.height);
417  dc.DrawText(label, x, y);
418  }
419  else
420  {
421  dc.DrawText(label, x + (width - text_width) / 2 + 1, y);
422  }
423  }
424  }
425 }
426 
427 void wxRibbonMetroArtProvider::DrawPartialPageBackground(wxDC& dc,
428  wxWindow* wnd, const wxRect& rect, wxRibbonPage* page,
429  wxPoint offset, bool hovered)
430 {
431  wxRect background;
432  // Expanded panels need a background - the expanded panel at
433  // best size may have a greater Y dimension higher than when
434  // on the bar if it has a sizer. AUI art provider does not need this
435  // because it paints the panel without reference to its parent's size.
436  // Expanded panels use a wxFrame as parent (not a wxRibbonPage).
437 
438  if(wnd->GetSizer() && wnd->GetParent() != page)
439  {
440  background = wnd->GetParent()->GetSize();
441  offset = wxPoint(0,0);
442  }
443  else
444  {
445  background = page->GetSize();
446  page->AdjustRectToIncludeScrollButtons(&background);
447  background.height -= 2;
448  }
449  // Page background isn't dependant upon the width of the page
450  // (at least not the part of it intended to be painted by this
451  // function). Set to wider than the page itself for when externally
452  // expanded panels need a background - the expanded panel can be wider
453  // than the bar.
454  background.x = 0;
455  background.width = INT_MAX;
456 
457  wxRect paint_rect(rect);
458 
459  dc.SetPen(*wxTRANSPARENT_PEN);
460  dc.SetBrush(m_page_background_colour);
461  dc.DrawRectangle(rect);
462 }
463 
464 void wxRibbonMetroArtProvider::DrawPageBackground(
465  wxDC& dc,
466  wxWindow* WXUNUSED(wnd),
467  const wxRect& rect)
468 {
469  wxRect background(rect);
470 
471  dc.SetPen(*wxTRANSPARENT_PEN);
472  dc.SetBrush(m_page_background_colour);
473  dc.DrawRectangle(background);
474  background.width += 1;
475  dc.SetPen(m_page_border_pen);
476  dc.DrawLine(background.GetBottomLeft(), background.GetBottomRight());
477 }
478 
479 void wxRibbonMetroArtProvider::DrawPanelBackground(
480  wxDC& dc,
481  wxRibbonPanel* wnd,
482  const wxRect& rect)
483 {
484  DrawPartialPageBackground(dc, wnd, rect, false);
485 
486  wxRect true_rect(rect);
487  RemovePanelPadding(&true_rect);
488  bool has_ext_button = wnd->HasExtButton();
489 
490  // draw panel label
491  {
492  // int label_height;
493  dc.SetFont(m_panel_label_font);
494  dc.SetPen(*wxTRANSPARENT_PEN);
495  dc.SetBrush(*wxTRANSPARENT_BRUSH);
496  dc.SetTextForeground(m_panel_label_colour);
497 
498  wxRect label_rect(true_rect);
499  wxString label = wnd->GetLabel();
500  bool clip_label = false;
501  wxSize label_size(dc.GetTextExtent(label));
502 
503  label_rect.SetX(label_rect.GetX() + 1);
504  label_rect.SetWidth(label_rect.GetWidth() - 2);
505  label_rect.SetHeight(label_size.GetHeight() + 2);
506  label_rect.SetY(true_rect.GetBottom() - label_rect.GetHeight());
507  // label_height = label_rect.GetHeight();
508 
509  wxRect label_bg_rect = label_rect;
510 
511  if(has_ext_button)
512  label_rect.SetWidth(label_rect.GetWidth() - 13);
513 
514  if(label_size.GetWidth() > label_rect.GetWidth())
515  {
516  // Test if there is enough length for 3 letters and ...
517  wxString new_label = label.Mid(0, 3) + wxT("...");
518  label_size = dc.GetTextExtent(new_label);
519  if(label_size.GetWidth() > label_rect.GetWidth())
520  {
521  // Not enough room for three characters and ...
522  // Display the entire label and just crop it
523  clip_label = true;
524  }
525  else
526  {
527  // Room for some characters and ...
528  // Display as many characters as possible and append ...
529  for(size_t len = label.Len() - 1; len >= 3; --len)
530  {
531  new_label = label.Mid(0, len) + wxT("...");
532  label_size = dc.GetTextExtent(new_label);
533  if(label_size.GetWidth() <= label_rect.GetWidth())
534  {
535  label = new_label;
536  break;
537  }
538  }
539  }
540  }
541 
542  dc.DrawRectangle(label_bg_rect);
543  if(clip_label)
544  {
545  wxDCClipper clip(dc, label_rect);
546  dc.DrawText(label, label_rect.x, label_rect.y +
547  (label_rect.GetHeight() - label_size.GetHeight()) / 2);
548  }
549  else
550  {
551  dc.DrawText(label, label_rect.x +
552  (label_rect.GetWidth() - label_size.GetWidth()) / 2,
553  label_rect.y +
554  (label_rect.GetHeight() - label_size.GetHeight()) / 2);
555  }
556 
557  if(has_ext_button)
558  {
559  if(wnd->IsExtButtonHovered())
560  {
561  dc.SetPen(m_panel_hover_button_border_pen);
562  dc.SetBrush(m_panel_hover_button_background_brush);
563  dc.DrawRectangle(label_rect.GetRight(), label_rect.GetBottom() - 14, 14, 14);
564  dc.DrawBitmap(m_panel_extension_bitmap[1], label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
565  }
566  else
567  dc.DrawBitmap(m_panel_extension_bitmap[0], label_rect.GetRight() + 3, label_rect.GetBottom() - 10, true);
568  }
569  }
570 
571  if (wnd->GetParent()->IsKindOf(CLASSINFO(wxFrame))) // expanded panels are in their own wxFrame otherwise normal panel
572  {
573  wxRect shadow(rect);
574  shadow.x +=4;
575  shadow.y +=4;
576  dc.SetPen(*wxRED);
577  dc.DrawLine(shadow.GetBottomLeft(), shadow.GetBottomRight());
578  dc.DrawLine(shadow.GetTopRight(), shadow.GetBottomRight());
579  dc.SetBrush(*wxTRANSPARENT_BRUSH);
580  dc.SetPen(m_panel_border_pen);
581  dc.DrawRoundedRectangle(rect, 1.0);
582  }
583  else
584  DrawPanelBorder(dc, true_rect, m_panel_border_pen, m_panel_border_gradient_pen);
585 }
586 
587 void wxRibbonMetroArtProvider::DrawPanelBorder(wxDC& dc, const wxRect& rect,
588  wxPen& primary_colour,
589  wxPen& secondary_colour)
590 {
591  dc.SetPen(m_panel_border_pen);
592  dc.DrawLine(rect.GetTopRight(), rect.GetBottomRight());
593 }
594 
595 void wxRibbonMetroArtProvider::DrawMinimisedPanel(
596  wxDC& dc,
597  wxRibbonPanel* wnd,
598  const wxRect& rect,
599  wxBitmap& bitmap)
600 {
601  DrawPartialPageBackground(dc, wnd, rect, false);
602 
603  wxRect true_rect(rect);
604  // RemovePanelPadding(&true_rect);
605 
606  wxRect client_rect(true_rect);
607  client_rect.width -= 2;
608  client_rect.y++;
609  client_rect.height -= 2;
610 
611  if(wnd->GetExpandedPanel() != NULL)
612  {
613  dc.SetPen(m_button_bar_active_border_pen);
614  dc.SetBrush (m_button_bar_active_background_colour);
615  dc.DrawRectangle(client_rect);
616  }
617  else if(wnd->IsHovered())
618  {
619  dc.SetPen(m_button_bar_hover_border_pen);
620  dc.SetBrush (m_panel_active_background_colour);
621  dc.DrawRectangle(client_rect);
622  }
623  else {
624  dc.SetPen(m_button_bar_hover_border_pen);
625  dc.SetBrush (m_button_bar_hover_background_colour);
626  dc.DrawRectangle(client_rect);
627  }
628 
629  wxRect preview;
630  DrawMinimisedPanelCommon(dc, wnd, true_rect, &preview);
631  dc.SetBrush(m_panel_active_background_colour);
632  dc.SetPen(m_button_bar_hover_border_pen);
633  dc.DrawRectangle(preview);
634 
635  if(bitmap.IsOk())
636  {
637  dc.DrawBitmap(bitmap, preview.x + (preview.width - bitmap.GetWidth()) / 2,
638  preview.y + (preview.height - 7 - bitmap.GetHeight()) / 2, true);
639  }
640 
641  DrawPanelBorder(dc, true_rect, m_panel_border_pen, m_panel_border_gradient_pen);
642 }
643 
644 void wxRibbonMetroArtProvider::DrawMinimisedPanelCommon(
645  wxDC& dc,
646  wxRibbonPanel* wnd,
647  const wxRect& true_rect,
648  wxRect* preview_rect)
649 {
650  wxRect preview(0, 0, 32, 32);
651  if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL)
652  {
653  preview.x = true_rect.x + 4;
654  preview.y = true_rect.y + (true_rect.height - preview.height) / 2;
655  }
656  else
657  {
658  preview.x = true_rect.x + (true_rect.width - preview.width) / 2;
659  preview.y = true_rect.y + 4;
660  }
661  if(preview_rect)
662  *preview_rect = preview;
663 
664  wxCoord label_width, label_height;
665  dc.SetFont(m_panel_label_font);
666  dc.GetTextExtent(wnd->GetLabel(), &label_width, &label_height);
667 
668  int xpos = true_rect.x + (true_rect.width - label_width + 1) / 2;
669  int ypos = preview.y + preview.height + 5;
670 
671  if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL)
672  {
673  xpos = preview.x + preview.width + 5;
674  ypos = true_rect.y + (true_rect.height - label_height) / 2;
675  }
676 
677  dc.SetTextForeground(m_panel_minimised_label_colour);
678  dc.DrawText(wnd->GetLabel(), xpos, ypos);
679 
680 
681  wxPoint arrow_points[3];
682  if(m_flags & wxRIBBON_BAR_FLOW_VERTICAL)
683  {
684  xpos += label_width;
685  arrow_points[0] = wxPoint(xpos + 5, ypos + label_height / 2);
686  arrow_points[1] = arrow_points[0] + wxPoint(-3, 3);
687  arrow_points[2] = arrow_points[0] + wxPoint(-3, -3);
688  }
689  else
690  {
691  ypos += label_height;
692  arrow_points[0] = wxPoint(true_rect.width / 2, ypos + 5);
693  arrow_points[1] = arrow_points[0] + wxPoint(-3, -3);
694  arrow_points[2] = arrow_points[0] + wxPoint( 3, -3);
695  }
696 
697  dc.SetPen(*wxTRANSPARENT_PEN);
698  wxBrush B(m_panel_minimised_label_colour);
699  dc.SetBrush(B);
700  dc.DrawPolygon(sizeof(arrow_points)/sizeof(wxPoint), arrow_points,
701  true_rect.x, true_rect.y);
702 }
703 
704 void wxRibbonMetroArtProvider::DrawButtonBarBackground(
705  wxDC& dc,
706  wxWindow* wnd,
707  const wxRect& rect)
708 {
709  DrawPartialPageBackground(dc, wnd, rect, true);
710 }
711 
712 void wxRibbonMetroArtProvider::DrawPartialPageBackground(
713  wxDC& dc,
714  wxWindow* wnd,
715  const wxRect& rect,
716  bool allow_hovered)
717 {
718  // Assume the window is a child of a ribbon page, and also check for a
719  // hovered panel somewhere between the window and the page, as it causes
720  // the background to change.
721  wxPoint offset(wnd->GetPosition());
722  wxRibbonPage* page = NULL;
723  wxWindow* parent = wnd->GetParent();
724  wxRibbonPanel* panel = wxDynamicCast(wnd, wxRibbonPanel);
725  bool hovered = false;
726 
727  if(panel != NULL)
728  {
729  hovered = allow_hovered && panel->IsHovered();
730  if(panel->GetExpandedDummy() != NULL)
731  {
732  offset = panel->GetExpandedDummy()->GetPosition();
733  parent = panel->GetExpandedDummy()->GetParent();
734  }
735  }
736  for(; parent; parent = parent->GetParent())
737  {
738  if(panel == NULL)
739  {
740  panel = wxDynamicCast(parent, wxRibbonPanel);
741  if(panel != NULL)
742  {
743  hovered = allow_hovered && panel->IsHovered();
744  if(panel->GetExpandedDummy() != NULL)
745  {
746  parent = panel->GetExpandedDummy();
747  }
748  }
749  }
750  page = wxDynamicCast(parent, wxRibbonPage);
751  if(page != NULL)
752  {
753  break;
754  }
755  offset += parent->GetPosition();
756  }
757  if(page != NULL)
758  {
759  DrawPartialPageBackground(dc, wnd, rect, page, offset, hovered);
760  return;
761  }
762 
763  // No page found - fallback to painting with a stock brush
764  dc.SetBrush(*wxWHITE_BRUSH);
765  dc.SetPen(*wxTRANSPARENT_PEN);
766  dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height);
767 }
768 
769 void wxRibbonMetroArtProvider::DrawButtonBarButton(
770  wxDC& dc,
771  wxWindow* WXUNUSED(wnd),
772  const wxRect& rect,
773  wxRibbonButtonKind kind,
774  long state,
775  const wxString& label,
776  const wxBitmap& bitmap_large,
777  const wxBitmap& bitmap_small)
778 {
779  if(kind == wxRIBBON_BUTTON_TOGGLE)
780  {
781  kind = wxRIBBON_BUTTON_NORMAL;
782  if(state & wxRIBBON_BUTTONBAR_BUTTON_TOGGLED)
783  state ^= wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK;
784  }
785 
786  if(state & (wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK |
787  wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK))
788  {
789  if(state & wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK)
790  dc.SetPen(m_button_bar_active_border_pen);
791  else
792  dc.SetPen(m_button_bar_hover_border_pen);
793 
794  wxRect bg_rect(rect);
795  bg_rect.x++;
796  bg_rect.y++;
797  bg_rect.width -= 2;
798  bg_rect.height -= 2;
799 
800  wxRect bg_rect_top(bg_rect);
801  bg_rect_top.height /= 3;
802  bg_rect.y += bg_rect_top.height;
803  bg_rect.height -= bg_rect_top.height;
804 
805  if(kind == wxRIBBON_BUTTON_HYBRID)
806  {
807  switch(state & wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK)
808  {
809  case wxRIBBON_BUTTONBAR_BUTTON_LARGE:
810  {
811  int iYBorder = rect.y + bitmap_large.GetHeight() + 4;
812  wxRect partial_bg(rect);
813  if(state & wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED)
814  {
815  partial_bg.SetBottom(iYBorder - 1);
816  }
817  else
818  {
819  partial_bg.height -= (iYBorder - partial_bg.y + 1);
820  partial_bg.y = iYBorder + 1;
821  }
822  dc.DrawLine(rect.x, iYBorder, rect.x + rect.width, iYBorder);
823  bg_rect.Intersect(partial_bg);
824  bg_rect_top.Intersect(partial_bg);
825  }
826  break;
827  case wxRIBBON_BUTTONBAR_BUTTON_MEDIUM:
828  {
829  int iArrowWidth = 9;
830  if(state & wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED)
831  {
832  bg_rect.width -= iArrowWidth;
833  bg_rect_top.width -= iArrowWidth;
834  dc.DrawLine(bg_rect_top.x + bg_rect_top.width,
835  rect.y, bg_rect_top.x + bg_rect_top.width,
836  rect.y + rect.height);
837  }
838  else
839  {
840  --iArrowWidth;
841  bg_rect.x += bg_rect.width - iArrowWidth;
842  bg_rect_top.x += bg_rect_top.width - iArrowWidth;
843  bg_rect.width = iArrowWidth;
844  bg_rect_top.width = iArrowWidth;
845  dc.DrawLine(bg_rect_top.x - 1, rect.y,
846  bg_rect_top.x - 1, rect.y + rect.height);
847  }
848  }
849  break;
850  case wxRIBBON_BUTTONBAR_BUTTON_SMALL:
851  break;
852  }
853  }
854 
855  if(state & wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK)
856  {
857  dc.SetPen(*wxTRANSPARENT_PEN);
858  dc.SetBrush(m_button_bar_active_background_colour);
859  dc.DrawRectangle(bg_rect_top);
860  dc.DrawRectangle(bg_rect);
861 
862  }
863  else
864  {
865  dc.SetPen(*wxTRANSPARENT_PEN);
866  dc.SetBrush(m_button_bar_hover_background_colour);
867  dc.DrawRectangle(bg_rect_top);
868  dc.DrawRectangle(bg_rect);
869  }
870 
871  if(state & wxRIBBON_BUTTONBAR_BUTTON_ACTIVE_MASK)
872  dc.SetPen(m_button_bar_active_border_pen);
873  else
874  dc.SetPen(m_button_bar_hover_border_pen);
875 
876  dc.SetBrush(*wxTRANSPARENT_BRUSH);
877  dc.DrawRectangle(rect);
878  }
879 
880  dc.SetFont(m_button_bar_label_font);
881  dc.SetTextForeground(m_button_bar_label_colour);
882  DrawButtonBarButtonForeground(dc, rect, kind, state, label, bitmap_large,
883  bitmap_small);
884 }
885 
886 void wxRibbonMetroArtProvider::DrawButtonBarButtonForeground(
887  wxDC& dc,
888  const wxRect& rect,
889  wxRibbonButtonKind kind,
890  long state,
891  const wxString& label,
892  const wxBitmap& bitmap_large,
893  const wxBitmap& bitmap_small)
894 {
895  switch(state & wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK)
896  {
897  case wxRIBBON_BUTTONBAR_BUTTON_LARGE:
898  {
899  const int padding = 2;
900  dc.DrawBitmap(bitmap_large,
901  rect.x + (rect.width - bitmap_large.GetWidth()) / 2,
902  rect.y + padding, true);
903  int ypos = rect.y + padding + bitmap_large.GetHeight() + padding;
904  int arrow_width = kind == wxRIBBON_BUTTON_NORMAL ? 0 : 8;
905  wxCoord label_w, label_h;
906  dc.GetTextExtent(label, &label_w, &label_h);
907  if(label_w + 2 * padding <= rect.width)
908  {
909  dc.DrawText(label, rect.x + (rect.width - label_w) / 2, ypos);
910  if(arrow_width != 0)
911  {
912  DrawDropdownArrow(dc, rect.x + rect.width / 2,
913  ypos + (label_h * 3) / 2,
914  m_button_bar_label_colour);
915  }
916  }
917  else
918  {
919  size_t breaki = label.Len();
920  do
921  {
922  --breaki;
923  if(wxRibbonCanLabelBreakAtPosition(label, breaki))
924  {
925  wxString label_top = label.Mid(0, breaki);
926  dc.GetTextExtent(label_top, &label_w, &label_h);
927  if(label_w + 2 * padding <= rect.width)
928  {
929  dc.DrawText(label_top,
930  rect.x + (rect.width - label_w) / 2, ypos);
931  ypos += label_h;
932  wxString label_bottom = label.Mid(breaki + 1);
933  dc.GetTextExtent(label_bottom, &label_w, &label_h);
934  label_w += arrow_width;
935  int iX = rect.x + (rect.width - label_w) / 2;
936  dc.DrawText(label_bottom, iX, ypos);
937  if(arrow_width != 0)
938  {
939  DrawDropdownArrow(dc,
940  iX + 2 +label_w - arrow_width,
941  ypos + label_h / 2 + 1,
942  m_button_bar_label_colour);
943  }
944  break;
945  }
946  }
947  } while(breaki > 0);
948  }
949  }
950  break;
951  case wxRIBBON_BUTTONBAR_BUTTON_MEDIUM:
952  {
953  int x_cursor = rect.x + 2;
954  dc.DrawBitmap(bitmap_small, x_cursor,
955  rect.y + (rect.height - bitmap_small.GetHeight())/2, true);
956  x_cursor += bitmap_small.GetWidth() + 2;
957  wxCoord label_w, label_h;
958  dc.GetTextExtent(label, &label_w, &label_h);
959  dc.DrawText(label, x_cursor,
960  rect.y + (rect.height - label_h) / 2);
961  x_cursor += label_w + 3;
962  if(kind != wxRIBBON_BUTTON_NORMAL)
963  {
964  DrawDropdownArrow(dc, x_cursor, rect.y + rect.height / 2,
965  m_button_bar_label_colour);
966  }
967  break;
968  }
969  default:
970  // TODO
971  break;
972  }
973 }
974 
975 void wxRibbonMetroArtProvider::DrawToolBarBackground(
976  wxDC& dc,
977  wxWindow* wnd,
978  const wxRect& rect)
979 {
980  DrawPartialPageBackground(dc, wnd, rect);
981 }
982 
983 void wxRibbonMetroArtProvider::DrawToolGroupBackground(
984  wxDC& dc,
985  wxWindow* WXUNUSED(wnd),
986  const wxRect& rect)
987 {
988  // TODO: there is no DrawToolGroupSeparator method currently
989  wxRect line;
990  line.x = rect.GetRight() + 4;
991  line.y = rect.GetY() + 5;
992  line.width = 1;
993  line.height = rect.GetHeight() - 10;
994  dc.GradientFillLinear(line, wxColour(232,234,237), wxColour(178,183,189), wxSOUTH);
995 }
996 
997 void wxRibbonMetroArtProvider::DrawTool(
998  wxDC& dc,
999  wxWindow* WXUNUSED(wnd),
1000  const wxRect& rect,
1001  const wxBitmap& bitmap,
1002  wxRibbonButtonKind kind,
1003  long state)
1004 {
1005  if(kind == wxRIBBON_BUTTON_TOGGLE)
1006  {
1007  if(state & wxRIBBON_TOOLBAR_TOOL_TOGGLED)
1008  state ^= wxRIBBON_TOOLBAR_TOOL_ACTIVE_MASK;
1009  }
1010 
1011  wxRect bg_rect(rect);
1012  bg_rect.Deflate(1);
1013  if((state & wxRIBBON_TOOLBAR_TOOL_LAST) == 0)
1014  bg_rect.width++;
1015 
1016  bool is_split_hybrid = (kind == wxRIBBON_BUTTON_HYBRID && (state &
1017  (wxRIBBON_TOOLBAR_TOOL_HOVER_MASK | wxRIBBON_TOOLBAR_TOOL_ACTIVE_MASK)));
1018 
1019  dc.SetPen(m_toolbar_border_pen);
1020 
1021  if(state & wxRIBBON_TOOLBAR_TOOL_ACTIVE_MASK)
1022  {
1023  dc.SetBrush(m_tool_background_colour);
1024  dc.DrawRectangle(rect);
1025  }
1026  else if(state & wxRIBBON_TOOLBAR_TOOL_HOVER_MASK)
1027  {
1028  dc.SetBrush(m_tool_hover_background_colour);
1029  dc.DrawRectangle(rect);
1030  }
1031 
1032  // remove the highlight from the non-active split part of the hybrid
1033  if(is_split_hybrid)
1034  {
1035  wxRect nonrect(bg_rect);
1036  if(state & (wxRIBBON_TOOLBAR_TOOL_DROPDOWN_HOVERED |
1037  wxRIBBON_TOOLBAR_TOOL_DROPDOWN_ACTIVE))
1038  {
1039  nonrect.width -= 8;
1040  }
1041  else
1042  {
1043  nonrect.x += nonrect.width - 8;
1044  nonrect.width = 7;
1045  }
1046  dc.SetPen(*wxTRANSPARENT_PEN);
1047  dc.SetBrush(m_page_background_top_gradient_colour);
1048  dc.DrawRectangle(nonrect.x, nonrect.y, nonrect.width, nonrect.height);
1049  }
1050 
1051  // Foreground
1052  int avail_width = bg_rect.GetWidth();
1053  if(kind & wxRIBBON_BUTTON_DROPDOWN)
1054  {
1055  avail_width -= 8;
1056  if(is_split_hybrid)
1057  {
1058  dc.SetPen(m_toolbar_border_pen);
1059  dc.DrawLine(rect.x + avail_width + 1, rect.y,
1060  rect.x + avail_width + 1, rect.y + rect.height);
1061  }
1062  dc.DrawBitmap(m_toolbar_drop_bitmap, bg_rect.x + avail_width + 2,
1063  bg_rect.y + (bg_rect.height / 2) - 2, true);
1064  }
1065  dc.DrawBitmap(bitmap, bg_rect.x + (avail_width - bitmap.GetWidth()) / 2,
1066  bg_rect.y + (bg_rect.height - bitmap.GetHeight()) / 2, true);
1067 }
1068 
+
+ + + + diff --git a/docs/doxygen/html/_art_metro_8h_source.html b/docs/doxygen/html/_art_metro_8h_source.html index a0f2568..d99d460 100644 --- a/docs/doxygen/html/_art_metro_8h_source.html +++ b/docs/doxygen/html/_art_metro_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ArtMetro.h Source File +Project/ArtMetro.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ArtMetro.h
-
1 // Name: wx/ribbon/art.h
3 // Purpose: Art providers for ribbon-bar-style interface
4 // Author: Peter Cawley
5 // Modified by:
6 // Created: 2009-05-25
7 // RCS-ID: $Id$
8 // Copyright: (C) Peter Cawley
9 // Licence: wxWindows licence
11 
12 #ifndef _WX_RIBBON_METRO_ART_H_
13 #define _WX_RIBBON_METRO_ART_H_
14 
15 #include "wx/defs.h"
16 
17 #include "wx/ribbon/art.h"
18 #include "wx/brush.h"
19 #include "wx/colour.h"
20 #include "wx/font.h"
21 #include "wx/pen.h"
22 #include "wx/bitmap.h"
23 
24 class WXDLLIMPEXP_FWD_CORE wxDC;
25 class WXDLLIMPEXP_FWD_CORE wxWindow;
26 
27 // class WXDLLIMPEXP_RIBBON wxRibbonMetroArtProvider : public wxRibbonArtProvider
28 class wxRibbonMetroArtProvider : public wxRibbonMSWArtProvider
29 {
30 public:
31  wxRibbonMetroArtProvider(bool set_colour_scheme = true);
32  virtual ~wxRibbonMetroArtProvider();
33  void SetFlags(long flags);
34 
35  void GetColourScheme(wxColour* primary,
36  wxColour* secondary,
37  wxColour* tertiary) const;
38  /*
39  int GetTabCtrlHeight(
40  wxDC& dc,
41  wxWindow* wnd,
42  const wxRibbonPageTabInfoArray& pages);
43  */
44  void SetColourScheme(const wxColour& primary,
45  const wxColour& secondary,
46  const wxColour& tertiary);
47  void DrawTabCtrlBackground(
48  wxDC& dc,
49  wxWindow* wnd,
50  const wxRect& rect);
51 
52  void DrawTab(wxDC& dc,
53  wxWindow* wnd,
54  const wxRibbonPageTabInfo& tab);
55 
56  void DrawPageBackground(
57  wxDC& dc,
58  wxWindow* wnd,
59  const wxRect& rect);
60 
61  void DrawPanelBackground(
62  wxDC& dc,
63  wxRibbonPanel* wnd,
64  const wxRect& rect);
65 
66  void DrawMinimisedPanel(
67  wxDC& dc,
68  wxRibbonPanel* wnd,
69  const wxRect& rect,
70  wxBitmap& bitmap);
71 
72  void DrawButtonBarBackground(
73  wxDC& dc,
74  wxWindow* wnd,
75  const wxRect& rect);
76 
77  void DrawButtonBarButton(
78  wxDC& dc,
79  wxWindow* wnd,
80  const wxRect& rect,
81  wxRibbonButtonKind kind,
82  long state,
83  const wxString& label,
84  const wxBitmap& bitmap_large,
85  const wxBitmap& bitmap_small);
86 
87  void DrawToolBarBackground(
88  wxDC& dc,
89  wxWindow* wnd,
90  const wxRect& rect);
91 
92  void DrawToolGroupBackground(
93  wxDC& dc,
94  wxWindow* wnd,
95  const wxRect& rect);
96 
97  void DrawTool(
98  wxDC& dc,
99  wxWindow* wnd,
100  const wxRect& rect,
101  const wxBitmap& bitmap,
102  wxRibbonButtonKind kind,
103  long state);
104 
105 protected:
106  // void ReallyDrawTabSeparator(wxWindow* wnd, const wxRect& rect, double visibility);
107  void DrawPartialPageBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect,
108  bool allow_hovered = true);
109  void DrawPartialPageBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect,
110  wxRibbonPage* page, wxPoint offset, bool hovered = false);
111  void DrawPanelBorder(wxDC& dc, const wxRect& rect, wxPen& primary_colour,
112  wxPen& secondary_colour);
113 
114  void DrawButtonBarButtonForeground(
115  wxDC& dc,
116  const wxRect& rect,
117  wxRibbonButtonKind kind,
118  long state,
119  const wxString& label,
120  const wxBitmap& bitmap_large,
121  const wxBitmap& bitmap_small);
122  void DrawMinimisedPanelCommon(
123  wxDC& dc,
124  wxRibbonPanel* wnd,
125  const wxRect& rect,
126  wxRect* preview_rect);
127 };
128 
129 #endif // _WX_RIBBON_METRO_ART_H_
Definition: ArtMetro.h:28
+
1 // Name: wx/ribbon/art.h
3 // Purpose: Art providers for ribbon-bar-style interface
4 // Author: Peter Cawley
5 // Modified by:
6 // Created: 2009-05-25
7 // RCS-ID: $Id$
8 // Copyright: (C) Peter Cawley
9 // Licence: wxWindows licence
11 
12 #ifndef _WX_RIBBON_METRO_ART_H_
13 #define _WX_RIBBON_METRO_ART_H_
14 
15 #include "wx/defs.h"
16 
17 #include "wx/ribbon/art.h"
18 #include "wx/brush.h"
19 #include "wx/colour.h"
20 #include "wx/font.h"
21 #include "wx/pen.h"
22 #include "wx/bitmap.h"
23 
24 class WXDLLIMPEXP_FWD_CORE wxDC;
25 class WXDLLIMPEXP_FWD_CORE wxWindow;
26 
27 // class WXDLLIMPEXP_RIBBON wxRibbonMetroArtProvider : public wxRibbonArtProvider
28 class wxRibbonMetroArtProvider : public wxRibbonMSWArtProvider
29 {
30 public:
31  wxRibbonMetroArtProvider(bool set_colour_scheme = true);
32  virtual ~wxRibbonMetroArtProvider();
33  void SetFlags(long flags);
34 
35  void GetColourScheme(wxColour* primary,
36  wxColour* secondary,
37  wxColour* tertiary) const;
38  /*
39  int GetTabCtrlHeight(
40  wxDC& dc,
41  wxWindow* wnd,
42  const wxRibbonPageTabInfoArray& pages);
43  */
44  void SetColourScheme(const wxColour& primary,
45  const wxColour& secondary,
46  const wxColour& tertiary);
47  void DrawTabCtrlBackground(
48  wxDC& dc,
49  wxWindow* wnd,
50  const wxRect& rect);
51 
52  void DrawTab(wxDC& dc,
53  wxWindow* wnd,
54  const wxRibbonPageTabInfo& tab);
55 
56  void DrawPageBackground(
57  wxDC& dc,
58  wxWindow* wnd,
59  const wxRect& rect);
60 
61  void DrawPanelBackground(
62  wxDC& dc,
63  wxRibbonPanel* wnd,
64  const wxRect& rect);
65 
66  void DrawMinimisedPanel(
67  wxDC& dc,
68  wxRibbonPanel* wnd,
69  const wxRect& rect,
70  wxBitmap& bitmap);
71 
72  void DrawButtonBarBackground(
73  wxDC& dc,
74  wxWindow* wnd,
75  const wxRect& rect);
76 
77  void DrawButtonBarButton(
78  wxDC& dc,
79  wxWindow* wnd,
80  const wxRect& rect,
81  wxRibbonButtonKind kind,
82  long state,
83  const wxString& label,
84  const wxBitmap& bitmap_large,
85  const wxBitmap& bitmap_small);
86 
87  void DrawToolBarBackground(
88  wxDC& dc,
89  wxWindow* wnd,
90  const wxRect& rect);
91 
92  void DrawToolGroupBackground(
93  wxDC& dc,
94  wxWindow* wnd,
95  const wxRect& rect);
96 
97  void DrawTool(
98  wxDC& dc,
99  wxWindow* wnd,
100  const wxRect& rect,
101  const wxBitmap& bitmap,
102  wxRibbonButtonKind kind,
103  long state);
104 
105 protected:
106  // void ReallyDrawTabSeparator(wxWindow* wnd, const wxRect& rect, double visibility);
107  void DrawPartialPageBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect,
108  bool allow_hovered = true);
109  void DrawPartialPageBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect,
110  wxRibbonPage* page, wxPoint offset, bool hovered = false);
111  void DrawPanelBorder(wxDC& dc, const wxRect& rect, wxPen& primary_colour,
112  wxPen& secondary_colour);
113 
114  void DrawButtonBarButtonForeground(
115  wxDC& dc,
116  const wxRect& rect,
117  wxRibbonButtonKind kind,
118  long state,
119  const wxString& label,
120  const wxBitmap& bitmap_large,
121  const wxBitmap& bitmap_small);
122  void DrawMinimisedPanelCommon(
123  wxDC& dc,
124  wxRibbonPanel* wnd,
125  const wxRect& rect,
126  wxRect* preview_rect);
127 };
128 
129 #endif // _WX_RIBBON_METRO_ART_H_
+
- + diff --git a/docs/doxygen/html/_branch_8cpp_source.html b/docs/doxygen/html/_branch_8cpp_source.html new file mode 100644 index 0000000..4490b30 --- /dev/null +++ b/docs/doxygen/html/_branch_8cpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +Project/Branch.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Branch.cpp
+
+
+
1 #include "Branch.h"
2 
3 Branch::Branch()
4  : PowerElement()
5 {
6 }
7 Branch::~Branch() {}
8 bool Branch::NodeContains(wxPoint2DDouble position)
9 {
10  wxRect2DDouble nodeRect1(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
11  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
12  wxRect2DDouble nodeRect2(m_pointList[m_pointList.size() - 1].m_x - 5.0 - m_borderSize,
13  m_pointList[m_pointList.size() - 1].m_y - 5.0 - m_borderSize, 10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
14 
15  if(nodeRect1.Contains(position)) {
16  m_activeNodeID = 1;
17  return true;
18  }
19  if(nodeRect2.Contains(position)) {
20  m_activeNodeID = 2;
21  return true;
22  }
23 
24  m_activeNodeID = 0;
25  return false;
26 }
27 
29 {
30  if(m_activeNodeID == 1 && parent == m_parentList[0]) return false;
31  if(m_activeNodeID == 2 && parent == m_parentList[1]) return false;
32 
33  if(parent && m_activeNodeID != 0) {
34  wxRect2DDouble nodeRect(0, 0, 0, 0);
35  if(m_activeNodeID == 1) {
36  nodeRect = wxRect2DDouble(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
37  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
38  }
39  if(m_activeNodeID == 2) {
40  nodeRect = wxRect2DDouble(m_pointList[m_pointList.size() - 1].m_x - 5.0 - m_borderSize,
41  m_pointList[m_pointList.size() - 1].m_y - 5.0 - m_borderSize, 10 + 2.0 * m_borderSize,
42  10 + 2.0 * m_borderSize);
43  }
44 
45  if(parent->Intersects(nodeRect)) {
46  if(m_activeNodeID == 1) {
47  // Check if the user is trying to connect the same bus.
48  if(m_parentList[1] == parent) {
49  m_activeNodeID = 0;
50  return false;
51  }
52 
53  m_parentList[0] = parent;
54 
55  // Centralize the node on bus.
56  wxPoint2DDouble parentPt = parent->RotateAtPosition(
57  m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
58  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
59  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
60  m_pointList[0] = parentPt;
61 
62  UpdateSwitchesPosition();
63  return true;
64  }
65  if(m_activeNodeID == 2) {
66  if(m_parentList[0] == parent) {
67  m_activeNodeID = 0;
68  return false;
69  }
70 
71  m_parentList[1] = parent;
72 
73  wxPoint2DDouble parentPt =
74  parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], -parent->GetAngle());
75  parentPt.m_y = parent->GetPosition().m_y;
76  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
77  m_pointList[m_pointList.size() - 1] = parentPt;
78 
79  UpdateSwitchesPosition();
80  return true;
81  }
82  } else {
83  if(m_activeNodeID == 1) m_parentList[0] = NULL;
84  if(m_activeNodeID == 2) m_parentList[1] = NULL;
85  }
86  }
87  return false;
88 }
89 
91 {
92  for(int i = 0; i < 2; i++) {
93  if(parent == m_parentList[i]) {
94  m_parentList[i] = NULL;
95  m_online = false;
96  UpdateSwitchesPosition();
97  }
98  }
99 }
100 
102 {
103  if(m_parentList[0]) {
104  wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
105  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
106 
107  if(!m_parentList[0]->Intersects(nodeRect)) {
108  m_parentList[0]->RemoveChild(this);
109  m_parentList[0] = NULL;
110  m_online = false;
111  UpdateSwitchesPosition();
112  }
113  }
114  if(m_parentList[1]) {
115  wxRect2DDouble nodeRect = wxRect2DDouble(m_pointList[m_pointList.size() - 1].m_x - 5.0 - m_borderSize,
116  m_pointList[m_pointList.size() - 1].m_y - 5.0 - m_borderSize, 10 + 2.0 * m_borderSize,
117  10 + 2.0 * m_borderSize);
118 
119  if(!m_parentList[1]->Intersects(nodeRect)) {
120  m_parentList[1]->RemoveChild(this);
121  m_parentList[1] = NULL;
122  m_online = false;
123  UpdateSwitchesPosition();
124  }
125  }
126 }
127 
128 void Branch::RotateNode(Element* parent, bool clockwise)
129 {
130  double rotAngle = m_rotationAngle;
131  if(!clockwise) rotAngle = -m_rotationAngle;
132 
133  if(parent == m_parentList[0]) {
134  m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
135  } else if(parent == m_parentList[1]) {
136  m_pointList[m_pointList.size() - 1] = parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], rotAngle);
137  }
138  UpdateSwitchesPosition();
139 }
140 
141 void Branch::UpdateSwitchesPosition()
142 {
143  if(m_parentList[0]) {
144  m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], m_pointList[2]);
145  } else {
146  m_pointList[1] = m_pointList[0];
147  }
148  if(m_parentList[1]) {
149  m_pointList[m_pointList.size() - 2] =
150  GetSwitchPoint(m_parentList[1], m_pointList[m_pointList.size() - 1], m_pointList[m_pointList.size() - 3]);
151  } else {
152  m_pointList[m_pointList.size() - 2] = m_pointList[m_pointList.size() - 1];
153  }
154  UpdateSwitches();
155 }
156 
158 {
159  wxPoint2DDouble swCenter = wxPoint2DDouble(
160  (m_pointList[0].m_x + m_pointList[1].m_x) / 2.0, (m_pointList[0].m_y + m_pointList[1].m_y) / 2.0);
161  m_switchRect[0] = wxRect2DDouble(
162  swCenter.m_x - m_switchSize / 2.0, swCenter.m_y - m_switchSize / 2.0, m_switchSize, m_switchSize);
163 
164  if(m_switchRect.size() > 1) {
165  swCenter =
166  wxPoint2DDouble((m_pointList[m_pointList.size() - 1].m_x + m_pointList[m_pointList.size() - 2].m_x) / 2.0,
167  (m_pointList[m_pointList.size() - 1].m_y + m_pointList[m_pointList.size() - 2].m_y) / 2.0);
168  m_switchRect[1] = wxRect2DDouble(
169  swCenter.m_x - m_switchSize / 2.0, swCenter.m_y - m_switchSize / 2.0, m_switchSize, m_switchSize);
170  }
171 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Branch.cpp:90
+ +
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Branch.cpp:28
+
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
virtual bool Intersects(wxRect2DDouble rect) const =0
Check if the element&#39;s rect intersects other rect.
+
virtual void UpdateSwitches()
Update the switch position.
Definition: Branch.cpp:157
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Branch.cpp:101
+
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Branch.cpp:8
+ +
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Branch.cpp:128
+
+
+ + + + diff --git a/docs/doxygen/html/_branch_8h_source.html b/docs/doxygen/html/_branch_8h_source.html index 78e793c..0fc32bd 100644 --- a/docs/doxygen/html/_branch_8h_source.html +++ b/docs/doxygen/html/_branch_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Branch.h Source File +Project/Branch.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Branch.h
-
1 #ifndef BRANCH_H
2 #define BRANCH_H
3 
4 #include "PowerElement.h"
5 #include "Bus.h"
6 
7 class Branch : public PowerElement
8 {
9 public:
10  Branch();
11  ~Branch();
12 
13  virtual bool Contains(wxPoint2DDouble position) const { return false; }
14  virtual void Draw(wxPoint2DDouble translation, double scale) const {}
15  virtual void Move(wxPoint2DDouble position) {}
16  virtual void StartMove(wxPoint2DDouble position) {}
17  virtual void MoveNode(Element* parent, wxPoint2DDouble position) {}
18  virtual bool NodeContains(wxPoint2DDouble position);
19  virtual bool SetNodeParent(Element* parent);
20  virtual void RemoveParent(Element* parent);
21  virtual void UpdateNodes();
22  virtual wxCursor GetBestPickboxCursor() const { return wxCURSOR_ARROW; }
23  virtual bool Intersects(wxRect2DDouble rect) const { return false; }
24  virtual void MovePickbox(wxPoint2DDouble position) {}
25  virtual bool PickboxContains(wxPoint2DDouble position) { return false; }
26  virtual void RotateNode(Element* parent, bool clockwise = true);
27  virtual void AddPoint(wxPoint2DDouble point) {};
28  virtual bool GetContextMenu(wxMenu& menu) { return false; }
29  virtual void UpdateSwitchesPosition();
30  virtual void UpdateSwitches();
31 
32  protected:
33  bool m_inserted = false;
34 };
35 
36 #endif // BRANCH_H
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Branch.h:14
-
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Branch.cpp:90
-
Definition: Element.h:88
-
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Branch.cpp:28
-
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Branch.h:28
-
virtual void MovePickbox(wxPoint2DDouble position)
Move the pickbox.
Definition: Branch.h:24
-
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Branch.h:16
-
virtual void UpdateSwitches()
Update the switch position.
Definition: Branch.cpp:157
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Branch.h:13
-
virtual void AddPoint(wxPoint2DDouble point)
Add point to the list of points that connect the element to the bus.
Definition: Branch.h:27
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Branch.h:23
+
1 #ifndef BRANCH_H
2 #define BRANCH_H
3 
4 #include "PowerElement.h"
5 #include "Bus.h"
6 
7 class Branch : public PowerElement
8 {
9 public:
10  Branch();
11  ~Branch();
12 
13  virtual bool Contains(wxPoint2DDouble position) const { return false; }
14  virtual void Draw(wxPoint2DDouble translation, double scale) const {}
15  virtual void Move(wxPoint2DDouble position) {}
16  virtual void StartMove(wxPoint2DDouble position) {}
17  virtual void MoveNode(Element* parent, wxPoint2DDouble position) {}
18  virtual bool NodeContains(wxPoint2DDouble position);
19  virtual bool SetNodeParent(Element* parent);
20  virtual void RemoveParent(Element* parent);
21  virtual void UpdateNodes();
22  virtual wxCursor GetBestPickboxCursor() const { return wxCURSOR_ARROW; }
23  virtual bool Intersects(wxRect2DDouble rect) const { return false; }
24  virtual void MovePickbox(wxPoint2DDouble position) {}
25  virtual bool PickboxContains(wxPoint2DDouble position) { return false; }
26  virtual void RotateNode(Element* parent, bool clockwise = true);
27  virtual void AddPoint(wxPoint2DDouble point) {};
28  virtual bool GetContextMenu(wxMenu& menu) { return false; }
29  virtual void UpdateSwitchesPosition();
30  virtual void UpdateSwitches();
31 
32  protected:
33  bool m_inserted = false;
34 };
35 
36 #endif // BRANCH_H
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Branch.h:14
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Branch.cpp:90
+ +
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Branch.cpp:28
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Branch.h:28
+
virtual void MovePickbox(wxPoint2DDouble position)
Move the pickbox.
Definition: Branch.h:24
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Branch.h:16
+
virtual void UpdateSwitches()
Update the switch position.
Definition: Branch.cpp:157
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Branch.h:13
+
virtual void AddPoint(wxPoint2DDouble point)
Add point to the list of points that connect the element to the bus.
Definition: Branch.h:27
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Branch.h:23
Switching data of power elements.
-
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Branch.cpp:101
-
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Branch.cpp:8
-
Definition: PowerElement.h:100
-
virtual bool PickboxContains(wxPoint2DDouble position)
Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be c...
Definition: Branch.h:25
-
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Branch.h:15
-
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Branch.cpp:128
-
virtual void MoveNode(Element *parent, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Branch.h:17
-
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Branch.h:22
-
Definition: Branch.h:7
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Branch.cpp:101
+
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Branch.cpp:8
+ +
virtual bool PickboxContains(wxPoint2DDouble position)
Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be c...
Definition: Branch.h:25
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Branch.h:15
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Branch.cpp:128
+
virtual void MoveNode(Element *parent, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Branch.h:17
+
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Branch.h:22
+
Definition: Branch.h:7
+
- + diff --git a/docs/doxygen/html/_bus_8cpp_source.html b/docs/doxygen/html/_bus_8cpp_source.html new file mode 100644 index 0000000..a47fe77 --- /dev/null +++ b/docs/doxygen/html/_bus_8cpp_source.html @@ -0,0 +1,126 @@ + + + + + + + +Project/Bus.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Bus.cpp
+
+
+
1 #include "Bus.h"
2 #ifdef USING_WX_3_0_X
3 #include "DegreesAndRadians.h"
4 #endif
5 
6 Bus::Bus() : PowerElement() {}
7 Bus::Bus(wxPoint2DDouble position) : PowerElement()
8 {
9  m_width = 100.0;
10  m_height = 5.0;
11  SetPosition(position);
12 }
13 
14 Bus::Bus(wxPoint2DDouble position, wxString name)
15 {
16  m_width = 100.0;
17  m_height = 5.0;
18  SetPosition(position);
19 
20  m_electricalData.name = name;
21 }
22 
23 Bus::~Bus() {}
24 void Bus::Draw(wxPoint2DDouble translation, double scale) const
25 {
26  // Draw selection (layer 1)
27  if(m_selected) {
28  // If the object is selected, the matrix is reset to remove scale effects applied to it, thus keeping the
29  // edges with fixed sizes for all zoom levels.
30  glPushMatrix();
31  glLoadIdentity();
32  // The matrix was reset, so we must use screen coordinates (WorldToScreen).
33  wxPoint2DDouble screenPt = WorldToScreen(translation, scale);
34  glTranslated(screenPt.m_x, screenPt.m_y, 0.0);
35  glRotated(m_angle, 0.0, 0.0, 1.0);
36  glTranslated(-screenPt.m_x, -screenPt.m_y, 0.0);
37 
38  glColor4dv(m_selectionColour.GetRGBA());
39 
40  wxPoint2DDouble pts[4] = {WorldToScreen(translation, scale, -(m_width / 2.0), -(m_height / 2.0)) -
41  wxPoint2DDouble(m_borderSize, m_borderSize),
42  WorldToScreen(translation, scale, -(m_width / 2.0), (m_height / 2.0)) -
43  wxPoint2DDouble(m_borderSize, -m_borderSize),
44  WorldToScreen(translation, scale, (m_width / 2.0), (m_height / 2.0)) -
45  wxPoint2DDouble(-m_borderSize, -m_borderSize),
46  WorldToScreen(translation, scale, (m_width / 2.0), -(m_height / 2.0)) -
47  wxPoint2DDouble(-m_borderSize, m_borderSize)};
48  DrawRectangle(pts);
49  glPopMatrix();
50  }
51  // Draw bus (layer 2)
52  // Push the current matrix on stack.
53  glPushMatrix();
54  // Rotate the matrix around the object position.
55  glTranslated(m_position.m_x, m_position.m_y, 0.0);
56  glRotated(m_angle, 0.0, 0.0, 1.0);
57  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
58 
59  if(m_dynEvent)
60  glColor4dv(m_dynamicEventColour.GetRGBA());
61  else
62  glColor4dv(m_busColour.GetRGBA());
63 
64  DrawRectangle(m_position, m_width, m_height);
65  // Pop the old matrix back.
66  glPopMatrix();
67 
68  // Draw pickbox (layer 3)
69  if(m_showPickbox) {
70  glPushMatrix();
71  glLoadIdentity();
72 
73  wxPoint2DDouble screenPt = WorldToScreen(translation, scale);
74  glTranslated(screenPt.m_x, screenPt.m_y, 0.0);
75  glRotated(m_angle, 0.0, 0.0, 1.0);
76  glTranslated(-screenPt.m_x, -screenPt.m_y, 0.0);
77 
78  wxPoint2DDouble pbPosition[2] = {WorldToScreen(translation, scale, m_width / 2.0),
79  WorldToScreen(translation, scale, -m_width / 2.0)};
80  DrawPickbox(pbPosition[0]);
81  DrawPickbox(pbPosition[1]);
82 
83  glPopMatrix();
84  }
85 }
86 
87 bool Bus::Contains(wxPoint2DDouble position) const
88 {
89  wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
90  return m_rect.Contains(ptR);
91 }
92 
93 bool Bus::Intersects(wxRect2DDouble rect) const
94 {
95  if(m_angle == 0.0 || m_angle == 180.0) return m_rect.Intersects(rect);
96 
97  return RotatedRectanglesIntersects(m_rect, rect, m_angle, 0.0);
98 }
99 
100 bool Bus::PickboxContains(wxPoint2DDouble position)
101 {
102  m_activePickboxID = ID_PB_NONE;
103 
104  wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
105 
106  wxPoint2DDouble center(m_position.m_x + m_width / 2.0, m_position.m_y);
107  wxRect2DDouble rectRight(center.m_x - 5.0, center.m_y - 5.0, 10.0, 10.0);
108 
109  center = wxPoint2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y);
110  wxRect2DDouble rectLeft(center.m_x - 5.0, center.m_y - 5.0, 10.0, 10.0);
111 
112  if(rectRight.Contains(ptR)) {
113  m_activePickboxID = ID_PB_RIGHT;
114  return true;
115  }
116  if(rectLeft.Contains(ptR)) {
117  m_activePickboxID = ID_PB_LEFT;
118  return true;
119  }
120 
121  return false;
122 }
123 
125 {
126  double angle = m_angle;
127  while(angle >= 157.5) angle -= 180.0;
128 
129  if(angle >= -22.5 && angle < 22.5)
130  return wxCursor(wxCURSOR_SIZEWE);
131  else if(angle >= 22.5 && angle < 67.5)
132  return wxCursor(wxCURSOR_SIZENWSE);
133  else if(angle >= 67.5 && angle < 112.5)
134  return wxCursor(wxCURSOR_SIZENS);
135  else if(angle >= 112.5 && angle < 157.5)
136  return wxCursor(wxCURSOR_SIZENESW);
137 
138  return wxCursor(wxCURSOR_ARROW);
139 }
140 
141 void Bus::MovePickbox(wxPoint2DDouble position)
142 {
143  if(m_activePickboxID == ID_PB_NONE) return;
144 
145  wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
146 
147  double dx = 0.0;
148  if(m_activePickboxID == ID_PB_RIGHT)
149  dx = ptR.m_x - m_position.m_x - m_width / 2.0;
150  else if(m_activePickboxID == ID_PB_LEFT)
151  dx = m_position.m_x - m_width / 2.0 - ptR.m_x;
152 
153  if(m_width + dx < 20.0) return;
154 
155  if(m_activePickboxID == ID_PB_RIGHT) {
156  m_position.m_x += (dx / 2.0) * std::cos(wxDegToRad(m_angle));
157  m_position.m_y += (dx / 2.0) * std::sin(wxDegToRad(m_angle));
158  } else if(m_activePickboxID == ID_PB_LEFT) {
159  m_position.m_x -= (dx / 2.0) * std::cos(wxDegToRad(m_angle));
160  m_position.m_y -= (dx / 2.0) * std::sin(wxDegToRad(m_angle));
161  }
162  m_width += dx;
163 
164  SetPosition(m_position);
165 }
166 
167 void Bus::Rotate(bool clockwise)
168 {
169  double rotAngle = m_rotationAngle;
170  if(!clockwise) rotAngle = -m_rotationAngle;
171 
172  m_angle += rotAngle;
173  if(m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
174 }
175 
176 bool Bus::GetContextMenu(wxMenu& menu)
177 {
178  menu.Append(ID_EDIT_ELEMENT, _("Edit bus"));
179  GeneralMenuItens(menu);
180  return true;
181 }
182 
183 bool Bus::ShowForm(wxWindow* parent, Element* element)
184 {
185  BusForm* busForm = new BusForm(parent, this);
186  if(busForm->ShowModal() == wxID_OK) {
187  busForm->Destroy();
188  return true;
189  }
190 
191  busForm->Destroy();
192  return false;
193 }
194 
196 {
197  Bus* copy = new Bus();
198  *copy = *this;
199  return copy;
200 }
201 wxString Bus::GetTipText() const
202 {
203  wxString tipText = m_electricalData.name;
204  tipText += wxString::Format(" (%d)", m_electricalData.number + 1);
205  tipText += "\n";
206  tipText += StringFromDouble(m_electricalData.nominalVoltage, 1) +
207  (m_electricalData.nominalVoltageUnit == UNIT_V ? _(" V") : _(" kV"));
208  tipText += "\n";
209  tipText += _("\nV = ") + wxString::FromDouble(std::abs(m_electricalData.voltage), 5) + _(" p.u.");
210  tipText += "\n";
211  tipText += wxString(L'\u03B8') + " = " + wxString::FromDouble(wxRadToDeg(std::arg(m_electricalData.voltage)), 5) +
212  " " + wxString(L'\u00B0');
213 
214  tipText += _("\n\nFault info:");
215  tipText += _("\nVa = ") + wxString::FromDouble(std::abs(m_electricalData.faultVoltage[0]), 5) + _(" p.u.");
216  tipText += _("\nVb = ") + wxString::FromDouble(std::abs(m_electricalData.faultVoltage[1]), 5) + _(" p.u.");
217  tipText += _("\nVc = ") + wxString::FromDouble(std::abs(m_electricalData.faultVoltage[2]), 5) + _(" p.u.");
218  if(m_electricalData.hasFault) {
219  tipText += _("\nIa = ") + wxString::FromDouble(std::abs(m_electricalData.faultCurrent[0]), 5) + _(" p.u.");
220  tipText += _("\nIb = ") + wxString::FromDouble(std::abs(m_electricalData.faultCurrent[1]), 5) + _(" p.u.");
221  tipText += _("\nIc = ") + wxString::FromDouble(std::abs(m_electricalData.faultCurrent[2]), 5) + _(" p.u.");
222  }
223 
224  tipText += _("\n\nSsc = ") + wxString::FromDouble(std::abs(m_electricalData.scPower), 5) + _(" p.u.");
225 
226  return tipText;
227 }
228 
230 {
231  if(!m_electricalData.plotBus) return false;
232  plotData.SetName(m_electricalData.name);
233  plotData.SetCurveType(ElementPlotData::CT_BUS);
234 
235  std::vector<double> absVoltage, argVoltage;
236  for(unsigned int i = 0; i < m_electricalData.stabVoltageVector.size(); ++i) {
237  absVoltage.push_back(std::abs(m_electricalData.stabVoltageVector[i]));
238  argVoltage.push_back(wxRadToDeg(std::arg(m_electricalData.stabVoltageVector[i])));
239  }
240  plotData.AddData(absVoltage, _("Voltage"));
241  plotData.AddData(argVoltage, _("Angle"));
242  return true;
243 }
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Bus.cpp:183
+ + + +
virtual void MovePickbox(wxPoint2DDouble position)
Move the pickbox.
Definition: Bus.cpp:141
+
virtual wxPoint2DDouble WorldToScreen(wxPoint2DDouble translation, double scale, double offsetX=0.0, double offsetY=0.0) const
Convert the element position to screen position.
Definition: Element.cpp:109
+
virtual wxString GetTipText() const
Get the tip text.
Definition: Bus.cpp:201
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Bus.cpp:176
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Bus.cpp:24
+
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
Definition: BusForm.h:7
+
virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode=GL_QUADS) const
Draw rectangle.
Definition: Element.cpp:53
+
virtual void GeneralMenuItens(wxMenu &menu)
Insert general itens to context menu.
Definition: Element.cpp:228
+
Definition: Bus.h:45
+
virtual bool GetPlotData(ElementPlotData &plotData)
Fill the plot data.
Definition: Bus.cpp:229
+ +
void SetPosition(const wxPoint2DDouble position)
Set the element position and update the rectangle.
Definition: Element.cpp:10
+
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Bus.cpp:124
+
virtual void DrawPickbox(wxPoint2DDouble position) const
Draw pickbox.
Definition: Element.cpp:82
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Bus.cpp:167
+
virtual bool PickboxContains(wxPoint2DDouble position)
Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be c...
Definition: Bus.cpp:100
+ +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ + +
virtual Element * GetCopy()
Get a the element copy.
Definition: Bus.cpp:195
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Bus.cpp:87
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Bus.cpp:93
+
virtual bool RotatedRectanglesIntersects(wxRect2DDouble rect1, wxRect2DDouble rect2, double angle1, double angle2) const
Check if two roteted rectangles intersect.
Definition: Element.cpp:132
+ +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
+
+ + + + diff --git a/docs/doxygen/html/_bus_8h_source.html b/docs/doxygen/html/_bus_8h_source.html index ac8c0cf..8716ed9 100644 --- a/docs/doxygen/html/_bus_8h_source.html +++ b/docs/doxygen/html/_bus_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Bus.h Source File +Project/Bus.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Bus.h
-
1 #ifndef BUS_H
2 #define BUS_H
3 
4 #include "BusForm.h"
5 #include "PowerElement.h"
6 
8  int number = 0;
9  wxString name = "";
10  double nominalVoltage = 138.0;
11  ElectricalUnit nominalVoltageUnit = UNIT_kV;
12  bool isVoltageControlled = false;
13  double controlledVoltage = 1.0;
14  int controlledVoltageUnitChoice = 0; // 0 = p.u., 1 = same as nominalVoltageUnit (UNIT_V or UNIT_kV).
15  bool slackBus = false;
16 
17  // Power flow (p.u.)
18  std::complex<double> voltage = std::complex<double>(1.0, 0.0);
19  std::complex<double> power = std::complex<double>(0.0, 0.0);
20  int busType = 2; // PQ
21 
22  // Fault
23  bool hasFault = false;
24  FaultData faultType = FAULT_THREEPHASE;
25  FaultData faultLocation = FAULT_LINE_A;
26  // p.u. fault data
27  double faultResistance = 0.0;
28  double faultReactance = 0.0;
29  std::complex<double> faultCurrent[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
30  std::complex<double>(0.0, 0.0)};
31  std::complex<double> faultVoltage[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
32  std::complex<double>(0.0, 0.0)};
33  double scPower = 0.0;
34 
35  // Stability
36  bool plotBus = false;
37  bool stabHasFault = false;
38  double stabFaultTime = 0.0;
39  double stabFaultLength = 0.0;
40  double stabFaultResistance = 0.0;
41  double stabFaultReactance = 0.0;
42  std::vector<std::complex<double> > stabVoltageVector;
43 };
44 
45 class Bus : public PowerElement
46 {
47  public:
48  Bus();
49  Bus(wxPoint2DDouble position);
50  Bus(wxPoint2DDouble position, wxString name);
51  ~Bus();
52  virtual Element* GetCopy();
53  virtual bool AddParent(Element* parent, wxPoint2DDouble position) { return true; }
54  virtual bool Contains(wxPoint2DDouble position) const;
55  virtual bool Intersects(wxRect2DDouble rect) const;
56  virtual void Draw(wxPoint2DDouble translation, double scale) const;
57  virtual void Rotate(bool clockwise = true);
58  virtual wxCursor GetBestPickboxCursor() const;
59  virtual void MovePickbox(wxPoint2DDouble position);
60  virtual bool PickboxContains(wxPoint2DDouble position);
61  virtual bool GetContextMenu(wxMenu& menu);
62  virtual wxString GetTipText() const;
63  virtual BusElectricalData GetElectricalData() const { return m_electricalData; }
64  virtual void SetElectricalData(BusElectricalData electricalData) { m_electricalData = electricalData; }
65  virtual bool ShowForm(wxWindow* parent, Element* element);
66  virtual bool GetPlotData(ElementPlotData& plotData);
67 
68  protected:
69  BusElectricalData m_electricalData;
70 };
71 
72 #endif // BUS_H
Definition: Element.h:88
-
FaultData
Information about fault (type and location).
Definition: PowerElement.h:38
-
Definition: PowerElement.h:14
-
Definition: Bus.h:7
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: Bus.h:45
-
Definition: PowerElement.h:43
-
Definition: ElementPlotData.h:39
-
Definition: PowerElement.h:39
+
1 #ifndef BUS_H
2 #define BUS_H
3 
4 #include "BusForm.h"
5 #include "PowerElement.h"
6 
8  int number = 0;
9  wxString name = "";
10  double nominalVoltage = 138.0;
11  ElectricalUnit nominalVoltageUnit = UNIT_kV;
12  bool isVoltageControlled = false;
13  double controlledVoltage = 1.0;
14  int controlledVoltageUnitChoice = 0; // 0 = p.u., 1 = same as nominalVoltageUnit (UNIT_V or UNIT_kV).
15  bool slackBus = false;
16 
17  // Power flow (p.u.)
18  std::complex<double> voltage = std::complex<double>(1.0, 0.0);
19  std::complex<double> power = std::complex<double>(0.0, 0.0);
20  int busType = 2; // PQ
21 
22  // Fault
23  bool hasFault = false;
24  FaultData faultType = FAULT_THREEPHASE;
25  FaultData faultLocation = FAULT_LINE_A;
26  // p.u. fault data
27  double faultResistance = 0.0;
28  double faultReactance = 0.0;
29  std::complex<double> faultCurrent[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
30  std::complex<double>(0.0, 0.0)};
31  std::complex<double> faultVoltage[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
32  std::complex<double>(0.0, 0.0)};
33  double scPower = 0.0;
34 
35  // Stability
36  bool plotBus = false;
37  bool stabHasFault = false;
38  double stabFaultTime = 0.0;
39  double stabFaultLength = 0.0;
40  double stabFaultResistance = 0.0;
41  double stabFaultReactance = 0.0;
42  std::vector<std::complex<double> > stabVoltageVector;
43 };
44 
45 class Bus : public PowerElement
46 {
47  public:
48  Bus();
49  Bus(wxPoint2DDouble position);
50  Bus(wxPoint2DDouble position, wxString name);
51  ~Bus();
52  virtual Element* GetCopy();
53  virtual bool AddParent(Element* parent, wxPoint2DDouble position) { return true; }
54  virtual bool Contains(wxPoint2DDouble position) const;
55  virtual bool Intersects(wxRect2DDouble rect) const;
56  virtual void Draw(wxPoint2DDouble translation, double scale) const;
57  virtual void Rotate(bool clockwise = true);
58  virtual wxCursor GetBestPickboxCursor() const;
59  virtual void MovePickbox(wxPoint2DDouble position);
60  virtual bool PickboxContains(wxPoint2DDouble position);
61  virtual bool GetContextMenu(wxMenu& menu);
62  virtual wxString GetTipText() const;
63  virtual BusElectricalData GetElectricalData() const { return m_electricalData; }
64  virtual void SetElectricalData(BusElectricalData electricalData) { m_electricalData = electricalData; }
65  virtual bool ShowForm(wxWindow* parent, Element* element);
66  virtual bool GetPlotData(ElementPlotData& plotData);
67 
68  protected:
69  BusElectricalData m_electricalData;
70 };
71 
72 #endif // BUS_H
+
FaultData
Information about fault (type and location).
Definition: PowerElement.h:38
+ + +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+
Definition: Bus.h:45
+ + +
Switching data of power elements.
-
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Bus.h:53
-
Definition: PowerElement.h:100
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Bus.h:53
+
+
- + diff --git a/docs/doxygen/html/_bus_form_8cpp_source.html b/docs/doxygen/html/_bus_form_8cpp_source.html new file mode 100644 index 0000000..ab3c994 --- /dev/null +++ b/docs/doxygen/html/_bus_form_8cpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Project/BusForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
BusForm.cpp
+
+
+
1 #include "BusForm.h"
2 #include "Bus.h"
3 
4 BusForm::BusForm(wxWindow* parent, Bus* bus) : BusFormBase(parent)
5 {
6  m_choiceFaultType->SetString(0, _("Three-phase"));
7  m_choiceFaultType->SetString(1, _("Line-to-line"));
8  m_choiceFaultType->SetString(2, _("Double line-to-ground"));
9  m_choiceFaultType->SetString(3, _("Line-to-ground"));
10 
11  SetSize(GetBestSize());
12 
13  m_parent = parent;
14  m_bus = bus;
15 
16  m_textCtrlName->SetValue(bus->GetElectricalData().name);
17  m_textCtrlNomVoltage->SetValue(bus->StringFromDouble(bus->GetElectricalData().nominalVoltage));
18 
19  if(bus->GetElectricalData().nominalVoltageUnit == UNIT_V)
20  m_choiceNomVoltage->SetSelection(0);
21  else
22  m_choiceNomVoltage->SetSelection(1);
23 
24  m_checkBoxCtrlVoltage->SetValue(bus->GetElectricalData().isVoltageControlled);
25  m_textCtrlCtrlVoltage->SetValue(bus->StringFromDouble(bus->GetElectricalData().controlledVoltage));
26  m_choiceCtrlVoltage->SetSelection(bus->GetElectricalData().controlledVoltageUnitChoice);
27  m_checkBoxSlackBus->SetValue(bus->GetElectricalData().slackBus);
28 
29  m_checkBoxFault->SetValue(bus->GetElectricalData().hasFault);
30  switch(bus->GetElectricalData().faultType) {
31  case FAULT_THREEPHASE: {
32  m_choiceFaultType->SetSelection(0);
33  } break;
34  case FAULT_2LINE: {
35  m_choiceFaultType->SetSelection(1);
36  } break;
37  case FAULT_2LINE_GROUND: {
38  m_choiceFaultType->SetSelection(2);
39  } break;
40  case FAULT_LINE_GROUND: {
41  m_choiceFaultType->SetSelection(3);
42  } break;
43  default:
44  break;
45  }
46  switch(bus->GetElectricalData().faultLocation) {
47  case FAULT_LINE_A: {
48  m_choiceFaultPlace->SetSelection(0);
49  } break;
50  case FAULT_LINE_B: {
51  m_choiceFaultPlace->SetSelection(1);
52  } break;
53  case FAULT_LINE_C: {
54  m_choiceFaultPlace->SetSelection(2);
55  } break;
56  default:
57  break;
58  }
59  m_textCtrlFaultResistance->SetValue(bus->StringFromDouble(bus->GetElectricalData().faultResistance));
60  m_textCtrlFaultReactance->SetValue(bus->StringFromDouble(bus->GetElectricalData().faultReactance));
61 
62  m_checkBoxPlotData->SetValue(bus->GetElectricalData().plotBus);
63  m_checkBoxStabFault->SetValue(bus->GetElectricalData().stabHasFault);
64  m_textCtrlStabFaultTime->SetValue(bus->StringFromDouble(bus->GetElectricalData().stabFaultTime));
65  m_textCtrlStabFaultLength->SetValue(bus->StringFromDouble(bus->GetElectricalData().stabFaultLength));
66  m_textCtrlStabFaultResistance->SetValue(bus->StringFromDouble(bus->GetElectricalData().stabFaultResistance));
67  m_textCtrlStabFaultReactance->SetValue(bus->StringFromDouble(bus->GetElectricalData().stabFaultReactance));
68 
69  EnableCtrlVoltageFields(bus->GetElectricalData().isVoltageControlled);
70  EnableFaultFields(bus->GetElectricalData().hasFault);
71  EnableStabFaultFields(bus->GetElectricalData().stabHasFault);
72 }
73 
74 BusForm::~BusForm() {}
75 void BusForm::OnButtonCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
76 void BusForm::OnButtonOKClick(wxCommandEvent& event)
77 {
78  BusElectricalData data = m_bus->GetElectricalData();
79  data.name = m_textCtrlName->GetValue();
80  if(!m_bus->DoubleFromString(m_parent, m_textCtrlNomVoltage->GetValue(), data.nominalVoltage,
81  _("Value entered incorrectly in the field \"Rated voltage\".")))
82  return;
83  data.nominalVoltageUnit = m_choiceNomVoltage->GetSelection() == 0 ? UNIT_V : UNIT_kV;
84  data.isVoltageControlled = m_checkBoxCtrlVoltage->GetValue();
85  if(data.isVoltageControlled) {
86  if(!m_bus->DoubleFromString(m_parent, m_textCtrlCtrlVoltage->GetValue(), data.controlledVoltage,
87  _("Value entered incorrectly in the field \"Controlled voltage\".")))
88  return;
89  data.controlledVoltageUnitChoice = m_choiceCtrlVoltage->GetSelection();
90  }
91  data.slackBus = m_checkBoxSlackBus->GetValue();
92 
93  data.hasFault = m_checkBoxFault->GetValue();
94  switch(m_choiceFaultType->GetSelection()) {
95  case 0: {
96  data.faultType = FAULT_THREEPHASE;
97  } break;
98  case 1: {
99  data.faultType = FAULT_2LINE;
100  } break;
101  case 2: {
102  data.faultType = FAULT_2LINE_GROUND;
103  } break;
104  case 3: {
105  data.faultType = FAULT_LINE_GROUND;
106  } break;
107  }
108 
109  switch(m_choiceFaultPlace->GetSelection()) {
110  case 0: {
111  data.faultLocation = FAULT_LINE_A;
112  } break;
113  case 1: {
114  data.faultLocation = FAULT_LINE_B;
115  } break;
116  case 2: {
117  data.faultLocation = FAULT_LINE_C;
118  } break;
119  }
120 
121  if(!m_bus->DoubleFromString(m_parent, m_textCtrlFaultResistance->GetValue(), data.faultResistance,
122  _("Value entered incorrectly in the field \"Fault resistance\".")))
123  return;
124 
125  if(!m_bus->DoubleFromString(m_parent, m_textCtrlFaultReactance->GetValue(), data.faultReactance,
126  _("Value entered incorrectly in the field \"Fault reactance\".")))
127  return;
128 
129  data.plotBus = m_checkBoxPlotData->GetValue();
130  data.stabHasFault = m_checkBoxStabFault->GetValue();
131 
132  if(!m_bus->DoubleFromString(m_parent, m_textCtrlStabFaultTime->GetValue(), data.stabFaultTime,
133  _("Value entered incorrectly in the field \"Time\".")))
134  return;
135 
136  if(!m_bus->DoubleFromString(m_parent, m_textCtrlStabFaultLength->GetValue(), data.stabFaultLength,
137  _("Value entered incorrectly in the field \"Fault lenght\".")))
138  return;
139 
140  if(!m_bus->DoubleFromString(m_parent, m_textCtrlStabFaultResistance->GetValue(), data.stabFaultResistance,
141  _("Value entered incorrectly in the field \"Fault resistence (stability)\".")))
142  return;
143 
144  if(!m_bus->DoubleFromString(m_parent, m_textCtrlStabFaultReactance->GetValue(), data.stabFaultReactance,
145  _("Value entered incorrectly in the field \"Fault reactance (stability)\".")))
146  return;
147 
148  m_bus->SetElectricalData(data);
149 
150  if(data.stabHasFault)
151  m_bus->SetDynamicEvent(true);
152  else
153  m_bus->SetDynamicEvent(false);
154 
155  EndModal(wxID_OK);
156 }
157 
158 void BusForm::OnNominalVoltageChoice(wxCommandEvent& event) { UpdateChoiceBoxes(); }
159 void BusForm::OnFaultTypeChoice(wxCommandEvent& event) { UpdateChoiceBoxes(); }
160 void BusForm::OnControlledVoltageClick(wxCommandEvent& event)
161 {
162  EnableCtrlVoltageFields(m_checkBoxCtrlVoltage->GetValue());
163 }
164 void BusForm::OnInsertFaultClick(wxCommandEvent& event) { EnableFaultFields(m_checkBoxFault->GetValue()); }
165 void BusForm::OnInsertStabFaultClick(wxCommandEvent& event) { EnableStabFaultFields(m_checkBoxStabFault->GetValue()); }
166 void BusForm::EnableCtrlVoltageFields(bool enable)
167 {
168  m_textCtrlCtrlVoltage->Enable(enable);
169  m_choiceCtrlVoltage->Enable(enable);
170 
171  UpdateChoiceBoxes();
172 }
173 
174 void BusForm::EnableFaultFields(bool enable)
175 {
176  m_choiceFaultType->Enable(enable);
177  m_choiceFaultPlace->Enable(enable);
178  m_textCtrlFaultReactance->Enable(enable);
179  m_textCtrlFaultResistance->Enable(enable);
180  m_staticTextPU_1->Enable(enable);
181  m_staticTextPU_2->Enable(enable);
182 
183  UpdateChoiceBoxes();
184 }
185 
186 void BusForm::EnableStabFaultFields(bool enable)
187 {
188  m_textCtrlStabFaultTime->Enable(enable);
189  m_textCtrlStabFaultLength->Enable(enable);
190  m_staticTextS_1->Enable(enable);
191  m_staticTextS_2->Enable(enable);
192  m_textCtrlStabFaultReactance->Enable(enable);
193  m_textCtrlStabFaultResistance->Enable(enable);
194  m_staticTextPU_3->Enable(enable);
195  m_staticTextPU_4->Enable(enable);
196 }
197 
198 void BusForm::UpdateChoiceBoxes()
199 {
200  switch(m_choiceFaultType->GetSelection()) {
201  case 0: // three-phase
202  {
203  m_choiceFaultPlace->Enable(false);
204  } break;
205  case 1: // line-to-line
206  case 2: // double line-to-line
207  {
208  if(m_checkBoxFault->GetValue()) m_choiceFaultPlace->Enable(true);
209  m_choiceFaultPlace->SetString(0, _("Lines AB"));
210  m_choiceFaultPlace->SetString(1, _("Lines BC"));
211  m_choiceFaultPlace->SetString(2, _("Lines CA"));
212  } break;
213  case 3: // line-to-ground
214  {
215  if(m_checkBoxFault->GetValue()) m_choiceFaultPlace->Enable(true);
216  m_choiceFaultPlace->SetString(0, _("Line A"));
217  m_choiceFaultPlace->SetString(1, _("Line B"));
218  m_choiceFaultPlace->SetString(2, _("Line C"));
219  } break;
220  default:
221  break;
222  }
223  switch(m_choiceNomVoltage->GetSelection()) {
224  case 0: {
225  m_choiceCtrlVoltage->SetString(1, _("V"));
226  } break;
227  case 1: {
228  m_choiceCtrlVoltage->SetString(1, _("kV"));
229  } break;
230  default:
231  break;
232  }
233 }
+ + + + + +
Definition: Bus.h:45
+ + + + +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ +
+
+ + + + diff --git a/docs/doxygen/html/_bus_form_8h_source.html b/docs/doxygen/html/_bus_form_8h_source.html index 73f701f..aed8089 100644 --- a/docs/doxygen/html/_bus_form_8h_source.html +++ b/docs/doxygen/html/_bus_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/BusForm.h Source File +Project/BusForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
BusForm.h
-
1 #ifndef BUSFORM_H
2 #define BUSFORM_H
3 
4 #include "ElementForm.h"
5 class Bus;
6 
7 class BusForm : public BusFormBase
8 {
9 public:
10  BusForm(wxWindow* parent, Bus* bus);
11  virtual ~BusForm();
12 protected:
13  virtual void OnFaultTypeChoice(wxCommandEvent& event);
14  virtual void OnControlledVoltageClick(wxCommandEvent& event);
15  virtual void OnInsertFaultClick(wxCommandEvent& event);
16  virtual void OnInsertStabFaultClick(wxCommandEvent& event);
17  virtual void OnNominalVoltageChoice(wxCommandEvent& event);
18  virtual void OnButtonCancelClick(wxCommandEvent& event);
19  virtual void OnButtonOKClick(wxCommandEvent& event);
20  virtual void EnableCtrlVoltageFields(bool enable = true);
21  virtual void EnableFaultFields(bool enable = true);
22  virtual void EnableStabFaultFields(bool enable = true);
23  virtual void UpdateChoiceBoxes();
24 
25  Bus* m_bus = NULL;
26  wxWindow* m_parent = NULL;
27 };
28 #endif // BUSFORM_H
Definition: BusForm.h:7
-
Definition: ElementForm.h:49
-
Definition: Bus.h:45
+
1 #ifndef BUSFORM_H
2 #define BUSFORM_H
3 
4 #include "ElementForm.h"
5 class Bus;
6 
7 class BusForm : public BusFormBase
8 {
9 public:
10  BusForm(wxWindow* parent, Bus* bus);
11  virtual ~BusForm();
12 protected:
13  virtual void OnFaultTypeChoice(wxCommandEvent& event);
14  virtual void OnControlledVoltageClick(wxCommandEvent& event);
15  virtual void OnInsertFaultClick(wxCommandEvent& event);
16  virtual void OnInsertStabFaultClick(wxCommandEvent& event);
17  virtual void OnNominalVoltageChoice(wxCommandEvent& event);
18  virtual void OnButtonCancelClick(wxCommandEvent& event);
19  virtual void OnButtonOKClick(wxCommandEvent& event);
20  virtual void EnableCtrlVoltageFields(bool enable = true);
21  virtual void EnableFaultFields(bool enable = true);
22  virtual void EnableStabFaultFields(bool enable = true);
23  virtual void UpdateChoiceBoxes();
24 
25  Bus* m_bus = NULL;
26  wxWindow* m_parent = NULL;
27 };
28 #endif // BUSFORM_H
Definition: BusForm.h:7
+ +
Definition: Bus.h:45
+
- + diff --git a/docs/doxygen/html/_bus_form_bitmaps_8cpp_source.html b/docs/doxygen/html/_bus_form_bitmaps_8cpp_source.html new file mode 100644 index 0000000..b467168 --- /dev/null +++ b/docs/doxygen/html/_bus_form_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/BusFormBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
BusFormBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 137;
25 static unsigned char xml_res_file_0[] = {
26 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
27 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
28 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
29 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
30 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
31 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
32 45,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
33 
34 void wxCF637InitBitmapResources()
35 {
36 
37  // Check for memory FS. If not present, load the handler:
38  {
39  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
40  wxFileSystem fsys;
41  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
42  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
43  if (f) delete f;
44  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
45  }
46 
47  XRC_ADD_FILE(wxT("XRC_resource/BusFormBitmaps.cpp$C__Users_Thales_Documents_GitHub_PSP_Project_BusFormBitmaps.xrc"), xml_res_file_0, xml_res_size_0, wxT("text/xml"));
48  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/BusFormBitmaps.cpp$C__Users_Thales_Documents_GitHub_PSP_Project_BusFormBitmaps.xrc"));
49 }
+
+ + + + diff --git a/docs/doxygen/html/_camera_8cpp_source.html b/docs/doxygen/html/_camera_8cpp_source.html new file mode 100644 index 0000000..651e957 --- /dev/null +++ b/docs/doxygen/html/_camera_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/Camera.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Camera.cpp
+
+
+
1 #include "Camera.h"
2 
3 Camera::Camera()
4 {
5  m_translation = wxPoint2DDouble(0, 0);
6  m_scale = 1.0;
7 }
8 
9 Camera::~Camera() {}
10 wxPoint2DDouble Camera::ScreenToWorld(wxPoint2DDouble screenCoords) const
11 {
12  return wxPoint2DDouble(
13  screenCoords.m_x / m_scale - m_translation.m_x, screenCoords.m_y / m_scale - m_translation.m_y);
14 }
15 
16 void Camera::SetTranslation(wxPoint2DDouble screenPoint)
17 {
18  m_translation = screenPoint / m_scale - m_translationStartPt;
19 }
20 
21 void Camera::SetScale(wxPoint2DDouble screenPoint, double delta)
22 {
23  m_translation -= screenPoint * (1.0 - m_scale) / m_scale;
24 
25  m_scale += delta;
26 
27  // Limits: 5% - 300%
28  if(m_scale < m_zoomMin) m_scale = m_zoomMin;
29  if(m_scale > m_zoomMax) m_scale = m_zoomMax;
30 
31  m_translation += screenPoint * (1.0 - m_scale) / m_scale;
32 }
33 
34 wxPoint2DDouble Camera::GetMousePosition(bool worldCoords) const
35 {
36  if(worldCoords) return ScreenToWorld(m_mousePosition);
37  return m_mousePosition;
38 }
+
+ + + + diff --git a/docs/doxygen/html/_camera_8h_source.html b/docs/doxygen/html/_camera_8h_source.html index f1a6202..09cd07e 100644 --- a/docs/doxygen/html/_camera_8h_source.html +++ b/docs/doxygen/html/_camera_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Camera.h Source File +Project/Camera.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Camera.h
-
1 #ifndef CAMERA_H
2 #define CAMERA_H
3 
4 #include <wx/geometry.h>
5 
6 class Camera
7 {
8 public:
9  Camera();
10  ~Camera();
11 
12  void SetScale(wxPoint2DDouble screenPoint, double delta);
13  void SetScale(double scale) { m_scale = scale; }
14  void SetTranslation(wxPoint2DDouble screenPoint);
15  void StartTranslation(wxPoint2DDouble startPoint) { this->m_translationStartPt = startPoint; }
16  void UpdateMousePosition(wxPoint2DDouble mousePosition) { this->m_mousePosition = mousePosition; }
17  double GetScale() const { return m_scale; }
18  wxPoint2DDouble GetTranslation() const { return m_translation; }
19  wxPoint2DDouble GetMousePosition(bool worldCoords = true) const;
20  wxPoint2DDouble ScreenToWorld(wxPoint2DDouble screenCoords) const;
21  double GetZoomMin() const { return m_zoomMin; }
22  double GetZoomMax() const { return m_zoomMax; }
23 
24 protected:
25  wxPoint2DDouble m_translation;
26  wxPoint2DDouble m_translationStartPt;
27  double m_scale;
28 
29  wxPoint2DDouble m_mousePosition;
30 
31  double m_zoomMin = 0.01;
32  double m_zoomMax = 3.0;
33 };
34 
35 #endif // CAMERA_H
Definition: Camera.h:6
+
1 #ifndef CAMERA_H
2 #define CAMERA_H
3 
4 #include <wx/geometry.h>
5 
6 class Camera
7 {
8 public:
9  Camera();
10  ~Camera();
11 
12  void SetScale(wxPoint2DDouble screenPoint, double delta);
13  void SetScale(double scale) { m_scale = scale; }
14  void SetTranslation(wxPoint2DDouble screenPoint);
15  void StartTranslation(wxPoint2DDouble startPoint) { this->m_translationStartPt = startPoint; }
16  void UpdateMousePosition(wxPoint2DDouble mousePosition) { this->m_mousePosition = mousePosition; }
17  double GetScale() const { return m_scale; }
18  wxPoint2DDouble GetTranslation() const { return m_translation; }
19  wxPoint2DDouble GetMousePosition(bool worldCoords = true) const;
20  wxPoint2DDouble ScreenToWorld(wxPoint2DDouble screenCoords) const;
21  double GetZoomMin() const { return m_zoomMin; }
22  double GetZoomMax() const { return m_zoomMax; }
23 
24 protected:
25  wxPoint2DDouble m_translation;
26  wxPoint2DDouble m_translationStartPt;
27  double m_scale;
28 
29  wxPoint2DDouble m_mousePosition;
30 
31  double m_zoomMin = 0.01;
32  double m_zoomMax = 3.0;
33 };
34 
35 #endif // CAMERA_H
Definition: Camera.h:6
+
- + diff --git a/docs/doxygen/html/_capacitor_8cpp_source.html b/docs/doxygen/html/_capacitor_8cpp_source.html new file mode 100644 index 0000000..6d5dbd2 --- /dev/null +++ b/docs/doxygen/html/_capacitor_8cpp_source.html @@ -0,0 +1,121 @@ + + + + + + + +Project/Capacitor.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Capacitor.cpp
+
+
+
1 #include "ReactiveShuntElementForm.h"
2 #include "Capacitor.h"
3 
4 Capacitor::Capacitor() : Shunt() {}
5 Capacitor::Capacitor(wxString name) : Shunt() { m_electricalData.name = name; }
6 Capacitor::~Capacitor() {}
7 bool Capacitor::AddParent(Element* parent, wxPoint2DDouble position)
8 {
9  if(parent) {
10  m_parentList.push_back(parent);
11  parent->AddChild(this);
12  wxPoint2DDouble parentPt =
13  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
14  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
15  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
16 
17  m_position = parentPt + wxPoint2DDouble(0.0, 100.0); // Shifts the position to the down of the bus.
18  m_width = 40;
19  m_height = 30;
20  m_rect = wxRect2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y - m_height / 2.0, m_width, m_height);
21 
22  m_pointList.push_back(parentPt);
23  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
24  m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -m_height / 2.0 - 10.0));
25  m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -m_height / 2.0));
26 
27  m_inserted = true;
28 
29  wxRect2DDouble genRect(0, 0, 0, 0);
30  m_switchRect.push_back(genRect); // Push a general rectangle.
31  UpdateSwitches();
32 
33  return true;
34  }
35  return false;
36 }
37 
38 void Capacitor::Draw(wxPoint2DDouble translation, double scale) const
39 {
40  OpenGLColour elementColour;
41  if(m_online) {
42  if(m_dynEvent)
43  elementColour = m_dynamicEventColour;
44  else
45  elementColour = m_onlineElementColour;
46  } else
47  elementColour = m_offlineElementColour;
48 
49  if(m_inserted) {
50  std::vector<wxPoint2DDouble> capPts;
51  capPts.push_back(wxPoint2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y - m_height / 2.0));
52  capPts.push_back(wxPoint2DDouble(m_position.m_x + m_width / 2.0, m_position.m_y - m_height / 2.0));
53  capPts.push_back(wxPoint2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y - m_height / 2.0 + 10.0));
54  capPts.push_back(wxPoint2DDouble(m_position.m_x + m_width / 2.0, m_position.m_y - m_height / 2.0 + 10.0));
55 
56  if(m_selected) {
57  glLineWidth(1.5 + m_borderSize * 2.0);
58  glColor4dv(m_selectionColour.GetRGBA());
59 
60  DrawLine(m_pointList);
61 
62  glPushMatrix();
63  glTranslated(m_position.m_x, m_position.m_y, 0.0);
64  glRotated(m_angle, 0.0, 0.0, 1.0);
65  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
66 
67  DrawLine(capPts, GL_LINES);
68 
69  DrawGround(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 10.0));
70 
71  glPopMatrix();
72 
73  // Draw node selection.
74  DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
75  }
76  // Draw Capacitor (layer 2).
77  glLineWidth(1.5);
78  glColor4dv(elementColour.GetRGBA());
79  DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
80  DrawLine(m_pointList);
81 
82  DrawSwitches();
83 
84  glPushMatrix();
85  glTranslated(m_position.m_x, m_position.m_y, 0.0);
86  glRotated(m_angle, 0.0, 0.0, 1.0);
87  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
88 
89  glColor4dv(elementColour.GetRGBA());
90  DrawLine(capPts, GL_LINES);
91 
92  DrawGround(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 10.0));
93 
94  glPopMatrix();
95  }
96 }
97 
98 void Capacitor::Rotate(bool clockwise)
99 {
100  double rotAngle = m_rotationAngle;
101  if(!clockwise) rotAngle = -m_rotationAngle;
102 
103  m_angle += rotAngle;
104  if(m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
105  m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle);
106  m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle);
107  UpdateSwitchesPosition();
108 }
109 
110 bool Capacitor::GetContextMenu(wxMenu& menu)
111 {
112  menu.Append(ID_EDIT_ELEMENT, _("Edit Capacitor"));
113  GeneralMenuItens(menu);
114  return true;
115 }
116 
117 bool Capacitor::Contains(wxPoint2DDouble position) const
118 {
119  wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
120  return m_rect.Contains(ptR);
121 }
122 
123 bool Capacitor::Intersects(wxRect2DDouble rect) const
124 {
125  return RotatedRectanglesIntersects(m_rect, rect, m_angle, 0.0);
126 }
127 
128 bool Capacitor::ShowForm(wxWindow* parent, Element* element)
129 {
130  ReactiveShuntElementForm* capacitorForm = new ReactiveShuntElementForm(parent, this);
131  capacitorForm->SetTitle(_("Capacitor"));
132  if(capacitorForm->ShowModal() == wxID_OK) {
133  capacitorForm->Destroy();
134  return true;
135  }
136  capacitorForm->Destroy();
137  return false;
138 }
139 
140 CapacitorElectricalData Capacitor::GetPUElectricalData(double systemPowerBase)
141 {
142  CapacitorElectricalData data = m_electricalData;
143  switch(data.reactivePowerUnit) {
144  case UNIT_VAr: {
145  data.reactivePower = data.reactivePower / systemPowerBase;
146  data.reactivePowerUnit = UNIT_PU;
147  } break;
148  case UNIT_kVAr: {
149  data.reactivePower = (data.reactivePower * 1e3) / systemPowerBase;
150  data.reactivePowerUnit = UNIT_PU;
151  } break;
152  case UNIT_MVAr: {
153  data.reactivePower = (data.reactivePower * 1e6) / systemPowerBase;
154  data.reactivePowerUnit = UNIT_PU;
155  } break;
156  default:
157  break;
158  }
159 
160  return data;
161 }
162 
164 {
165  Capacitor* copy = new Capacitor();
166  *copy = *this;
167  return copy;
168 }
169 
170 wxString Capacitor::GetTipText() const
171 {
172  wxString tipText = m_electricalData.name;
173 
174  // TODO: Avoid reactive power calculation.
175  double reactivePower = m_electricalData.reactivePower;
176  if(!m_online)
177  reactivePower = 0.0;
178  else {
179  std::complex<double> v = static_cast<Bus*>(m_parentList[0])->GetElectricalData().voltage;
180  reactivePower *= std::pow(std::abs(v), 2);
181  }
182  tipText += "\n";
183  tipText += _("\nQ = ") + wxString::FromDouble(reactivePower, 5);
184  switch(m_electricalData.reactivePowerUnit) {
185  case UNIT_PU: {
186  tipText += _(" p.u.");
187  } break;
188  case UNIT_VAr: {
189  tipText += _(" VAr");
190  } break;
191  case UNIT_kVAr: {
192  tipText += _(" kVAr");
193  } break;
194  case UNIT_MVAr: {
195  tipText += _(" MVAr");
196  } break;
197  default:
198  break;
199  }
200 
201  return tipText;
202 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Capacitor.cpp:128
+ +
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Capacitor.cpp:110
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Capacitor.cpp:98
+
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+ +
virtual Element * GetCopy()
Get a the element copy.
Definition: Capacitor.cpp:163
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Capacitor.cpp:117
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Capacitor.cpp:123
+
Definition: Bus.h:45
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Capacitor.cpp:38
+ +
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+ + + + +
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+
Definition: Shunt.h:7
+
virtual wxString GetTipText() const
Get the tip text.
Definition: Capacitor.cpp:170
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Capacitor.cpp:7
+ + +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
+
+ + + + diff --git a/docs/doxygen/html/_capacitor_8h_source.html b/docs/doxygen/html/_capacitor_8h_source.html index 53f440c..c004ac1 100644 --- a/docs/doxygen/html/_capacitor_8h_source.html +++ b/docs/doxygen/html/_capacitor_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Capacitor.h Source File +Project/Capacitor.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Capacitor.h
-
1 #ifndef CAPACITOR_H
2 #define CAPACITOR_H
3 
4 #include "Shunt.h"
5 
7 
9  wxString name;
10  double reactivePower = 100.0;
11  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
12 };
13 
14 class Capacitor : public Shunt
15 {
16 public:
17  Capacitor();
18  Capacitor(wxString name);
19  ~Capacitor();
20 
21  virtual Element* GetCopy();
22  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
23  virtual void Draw(wxPoint2DDouble translation, double scale) const;
24  virtual bool Contains(wxPoint2DDouble position) const;
25  virtual bool Intersects(wxRect2DDouble rect) const;
26  virtual void Rotate(bool clockwise = true);
27  virtual bool GetContextMenu(wxMenu& menu);
28  virtual wxString GetTipText() const;
29  virtual bool ShowForm(wxWindow* parent, Element* element);
30  virtual CapacitorElectricalData GetElectricalData() { return m_electricalData; }
31  virtual CapacitorElectricalData GetPUElectricalData(double systemPowerBase);
32  virtual void SetElectricalData(CapacitorElectricalData electricalData) { m_electricalData = electricalData; }
33 protected:
34  CapacitorElectricalData m_electricalData;
35 };
36 
37 #endif // CAPACITOR_H
Definition: Element.h:88
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:25
-
Definition: Capacitor.h:14
-
Definition: Shunt.h:7
-
Definition: ReactiveShuntElementForm.h:10
-
Definition: Capacitor.h:8
+
1 #ifndef CAPACITOR_H
2 #define CAPACITOR_H
3 
4 #include "Shunt.h"
5 
7 
9  wxString name;
10  double reactivePower = 100.0;
11  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
12 };
13 
14 class Capacitor : public Shunt
15 {
16 public:
17  Capacitor();
18  Capacitor(wxString name);
19  ~Capacitor();
20 
21  virtual Element* GetCopy();
22  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
23  virtual void Draw(wxPoint2DDouble translation, double scale) const;
24  virtual bool Contains(wxPoint2DDouble position) const;
25  virtual bool Intersects(wxRect2DDouble rect) const;
26  virtual void Rotate(bool clockwise = true);
27  virtual bool GetContextMenu(wxMenu& menu);
28  virtual wxString GetTipText() const;
29  virtual bool ShowForm(wxWindow* parent, Element* element);
30  virtual CapacitorElectricalData GetElectricalData() { return m_electricalData; }
31  virtual CapacitorElectricalData GetPUElectricalData(double systemPowerBase);
32  virtual void SetElectricalData(CapacitorElectricalData electricalData) { m_electricalData = electricalData; }
33 protected:
34  CapacitorElectricalData m_electricalData;
35 };
36 
37 #endif // CAPACITOR_H
+
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + +
Definition: Shunt.h:7
+ +
+
- + diff --git a/docs/doxygen/html/_chart_view_8cpp_source.html b/docs/doxygen/html/_chart_view_8cpp_source.html new file mode 100644 index 0000000..b9daeb8 --- /dev/null +++ b/docs/doxygen/html/_chart_view_8cpp_source.html @@ -0,0 +1,98 @@ + + + + + + + +Project/ChartView.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ChartView.cpp
+
+
+
1 #include "ChartView.h"
2 #include "ElementPlotData.h"
3 
4 ChartView::ChartView(wxWindow* parent, std::vector<ElementPlotData> epdList, std::vector<double> time)
5  : ChartViewBase(parent)
6 {
7  m_epdList = epdList;
8  m_time = time;
9  m_xAxisValues = time;
10 
11  m_menuItemShowGrid->Check(m_hideGrid ? false : true);
12  m_menuItemShowLabel->Check(m_showLeg);
13  m_menuItemShowCoordinates->Check(m_showCoords);
14  m_menuItemDarkTheme->Check(m_darkTheme);
15 
16  // Create color property.
17  m_pgPropColor = m_pgMgr->Insert(m_pgPropLineProp, 1, new wxColourProperty(_("Color")));
18  m_pgPropColor->SetEditor(wxT("ChoiceAndButton"));
19  m_pgPropColor->SetValue(static_cast<wxVariant>(*wxBLACK));
20 
21  // Set margins and axis limit to composed mode.
22  m_pgPropMargins->SetValue(wxT("<composed>"));
23  m_pgMgr->Collapse(m_pgPropMargins);
24  m_pgPropAxisLimit->SetValue(wxT("<composed>"));
25  m_pgMgr->Collapse(m_pgPropAxisLimit);
26 
27  // Add line type choices
28  m_pgProplineType->AddChoice(_("Solid"), wxPENSTYLE_SOLID);
29  m_pgProplineType->AddChoice(_("Dot"), wxPENSTYLE_DOT);
30  m_pgProplineType->AddChoice(_("Dash"), wxPENSTYLE_SHORT_DASH);
31  m_pgProplineType->AddChoice(_("Dot and dash"), wxPENSTYLE_DOT_DASH);
32  m_pgProplineType->AddChoice(_("Cross"), wxPENSTYLE_CROSS_HATCH);
33  m_pgProplineType->AddChoice(_("Driagonal cross"), wxPENSTYLE_CROSSDIAG_HATCH);
34 
35  SetMPWindow();
36  GetSizer()->Add(m_mpWindow, 1, wxEXPAND, WXC_FROM_DIP(5));
37  SetTreectrl();
38  Layout();
39  SetInitialSize();
40 
41  BuildColourList();
42 }
43 
44 ChartView::~ChartView() {}
45 void ChartView::SetMPWindow()
46 {
47  m_mpWindow = new mpWindow(this, wxID_ANY);
48 
49  m_mpWindow->SetDoubleBuffered(true);
50 
51  m_mpWindow->SetMargins(20, 10, 40, 60);
52  m_xaxis = new mpScaleX("", mpALIGN_BOTTOM, true);
53  m_yaxis = new mpScaleY("", mpALIGN_LEFT, true);
54  m_xaxis->SetDrawOutsideMargins(false);
55  m_yaxis->SetDrawOutsideMargins(false);
56  m_xaxis->SetTicks(m_hideGrid);
57  m_yaxis->SetTicks(m_hideGrid);
58 
59  m_leg = new mpInfoLegend(wxRect(200, 20, 40, 40), wxWHITE_BRUSH);
60  m_coords = new mpInfoCoords(wxRect(0, 0, 0, 0), wxWHITE_BRUSH);
61 
62  m_chartTitle = new mpText("", 50, 0);
63  wxFont chartTitleFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
64  m_chartTitle->SetFont(chartTitleFont);
65 
66  m_mpWindow->AddLayer(m_xaxis);
67  m_mpWindow->AddLayer(m_yaxis);
68  m_mpWindow->AddLayer(m_leg);
69  m_mpWindow->AddLayer(m_coords);
70  m_mpWindow->AddLayer(m_chartTitle);
71 
72  m_leg->SetVisible(m_showLeg);
73  m_coords->SetVisible(m_showCoords);
74 
75  m_mpWindow->EnableDoubleBuffer(true);
76  m_mpWindow->LockAspect(false);
77  Fit();
78 }
79 
80 void ChartView::SetTreectrl()
81 {
82  wxTreeItemId rootID = m_treeCtrl->AddRoot(wxT("root"));
83  m_treeTimeID = m_treeCtrl->AppendItem(rootID, _("Time"));
84  m_treeCtrl->SetItemTextColour(m_treeTimeID, *wxRED);
85 
86  bool firstElement[ElementPlotData::NUM_ELEMENTS];
87  for(int i = 0; i < ElementPlotData::NUM_ELEMENTS; ++i) firstElement[i] = true;
88 
89  wxString rootElementName[ElementPlotData::NUM_ELEMENTS];
90  rootElementName[ElementPlotData::CT_BUS] = _("Bus");
91  rootElementName[ElementPlotData::CT_IND_MOTOR] = _("Induction motor");
92  rootElementName[ElementPlotData::CT_LINE] = _("Line");
93  rootElementName[ElementPlotData::CT_LOAD] = _("Load");
94  rootElementName[ElementPlotData::CT_SHUNT_CAPACITOR] = _("Capacitor");
95  rootElementName[ElementPlotData::CT_SHUNT_INDUCTOR] = _("Inductor");
96  rootElementName[ElementPlotData::CT_SYNC_COMPENSATOR] = _("Synchronous compensator");
97  rootElementName[ElementPlotData::CT_SYNC_GENERATOR] = _("Synchronous generator");
98  rootElementName[ElementPlotData::CT_TRANSFORMER] = _("Transformer");
99  rootElementName[ElementPlotData::CT_TEST] = _("Test");
100 
101  wxTreeItemId rootItemID[ElementPlotData::NUM_ELEMENTS];
102 
103  for(auto it = m_epdList.begin(), itEnd = m_epdList.end(); it != itEnd; ++it) {
104  ElementPlotData data = *it;
105  ElementPlotData::CurveType curveType = data.GetCurveType();
106 
107  if(firstElement[curveType]) {
108  rootItemID[curveType] = m_treeCtrl->AppendItem(rootID, rootElementName[curveType]);
109  firstElement[curveType] = false;
110  }
111  wxTreeItemId itemID = m_treeCtrl->AppendItem(rootItemID[curveType], data.GetName());
112  for(int i = 0; i < data.GetElementDataNumber(); ++i) {
113  m_treeCtrl->AppendItem(itemID, data.GetDataName(i), -1, -1, data.GetPlotData(i));
114  }
115  }
116 }
117 
118 void ChartView::OnPropertyGridChange(wxPropertyGridEvent& event)
119 {
120  bool fit = false;
121 
122  if(m_treeCtrl->GetSelection()) {
123  if(PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(m_treeCtrl->GetSelection()))) {
124  if(event.GetPropertyName() == _("Draw")) {
125  bool isPlotting = m_pgPropDraw->GetValue();
126  data->SetPlot(isPlotting);
127  if(isPlotting) {
128  wxColour colour = GetNextColour();
129  data->SetColour(colour);
130  m_pgPropColor->SetValue(static_cast<wxVariant>(colour));
131  m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), true);
132  } else {
133  m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), false);
134  }
135  fit = true;
136  } else if(event.GetPropertyName() == _("Color")) {
137  wxColour colour;
138  colour << m_pgPropColor->GetValue();
139  data->SetColour(colour);
140  } else if(event.GetPropertyName() == _("Thickness")) {
141  data->SetThick(m_pgProplineThick->GetValue().GetInteger());
142  } else if(event.GetPropertyName() == _("Type")) {
143  data->SetPenType(static_cast<wxPenStyle>(m_pgProplineType->GetValue().GetInteger()));
144  } else if(event.GetPropertyName() == _("Axis")) {
145  int axis = m_pgProplineAxis->GetValue().GetInteger();
146  if(axis == 1) { // Y
147  // All lines to Y axis
148  AllToYAxis(m_treeCtrl->GetRootItem());
149  // curva selecionada para o eixo X
150  m_treeCtrl->SetItemTextColour(m_treeCtrl->GetSelection(), *wxRED);
151  m_xAxisValues = data->GetValues();
152  }
153  data->SetAxis(axis);
154  fit = true;
155  }
156  }
157  }
158 
159  if(event.GetPropertyName() == _("Margins")) {
160  m_mpWindow->SetMargins(m_pgPropMarginsUp->GetValue().GetLong(), m_pgPropMarginsRight->GetValue().GetLong(),
161  m_pgPropMarginsBot->GetValue().GetLong(), m_pgPropMarginsLeft->GetValue().GetLong());
162  m_mpWindow->UpdateAll();
163  }
164  if(event.GetPropertyName() == _("Axis limit")) {
165  m_mpWindow->Fit(m_pgPropXMin->GetValue().GetDouble(), m_pgPropXMax->GetValue().GetDouble(),
166  m_pgPropYMin->GetValue().GetDouble(), m_pgPropYMax->GetValue().GetDouble());
167  m_mpWindow->UpdateAll();
168  }
169  UpdatePlot(fit);
170 }
171 
172 void ChartView::OnMenuDarkThemeClick(wxCommandEvent& event)
173 {
174  m_darkTheme = event.IsChecked();
175  wxColour grey(96, 96, 96);
176 
177  if(m_darkTheme) {
178  m_mpWindow->SetColourTheme(*wxBLACK, *wxWHITE, grey);
179  m_leg->SetBrush(*wxBLACK_BRUSH);
180  m_coords->SetBrush(*wxBLACK_BRUSH);
181  } else {
182  m_mpWindow->SetColourTheme(*wxWHITE, *wxBLACK, grey);
183  m_leg->SetBrush(*wxWHITE_BRUSH);
184  m_coords->SetBrush(*wxWHITE_BRUSH);
185  }
186 
187  m_mpWindow->UpdateAll();
188 }
189 
190 void ChartView::OnMenuSaveImageClick(wxCommandEvent& event)
191 {
192  int x = m_mpWindow->GetScreenPosition().x;
193  int y = m_mpWindow->GetScreenPosition().y;
194  int width = m_mpWindow->GetSize().GetWidth();
195  int height = m_mpWindow->GetSize().GetHeight();
196 
197  wxScreenDC dcScreen;
198  wxBitmap screenshot(width, height);
199 
200  wxMemoryDC memDC;
201  memDC.SelectObject(screenshot);
202 
203  memDC.Blit(0, 0, width, height, &dcScreen, x, y);
204  memDC.SelectObject(wxNullBitmap);
205 
206  wxFileDialog saveFileDialog(
207  this, _("Save image"), "", "",
208  "PNG image file (*.png)|*.png|Bitmap image file (*.bmp)|*.bmp|JPEG image file (*.jpg)|*.jpg",
209  wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
210  if(saveFileDialog.ShowModal() == wxID_CANCEL) return;
211 
212  wxFileName imagePath(saveFileDialog.GetPath());
213  wxBitmapType imageType = wxBITMAP_TYPE_BMP;
214 
215  if(imagePath.GetExt() == "png")
216  imageType = wxBITMAP_TYPE_PNG;
217  else if(imagePath.GetExt() == "jpg")
218  imageType = wxBITMAP_TYPE_JPEG;
219 
220  screenshot.SaveFile(imagePath.GetFullPath(), imageType);
221 }
222 
223 void ChartView::OnMenuSendClipClick(wxCommandEvent& event)
224 {
225  int x = m_mpWindow->GetScreenPosition().x;
226  int y = m_mpWindow->GetScreenPosition().y;
227  int width = m_mpWindow->GetSize().GetWidth();
228  int height = m_mpWindow->GetSize().GetHeight();
229 
230  wxScreenDC dcScreen;
231  wxBitmap screenshot(width, height);
232 
233  wxMemoryDC memDC;
234  memDC.SelectObject(screenshot);
235 
236  memDC.Blit(0, 0, width, height, &dcScreen, x, y);
237  memDC.SelectObject(wxNullBitmap);
238 
239  if(wxTheClipboard->Open()) {
240  wxTheClipboard->SetData(new wxBitmapDataObject(screenshot));
241  wxTheClipboard->Close();
242 
243  wxMessageDialog msgDialog(this, _("Chart send to clipboard"), _("Info"), wxOK | wxICON_INFORMATION,
244  wxDefaultPosition);
245  msgDialog.ShowModal();
246  } else {
247  wxMessageDialog msgDialog(this, _("It was not possible to send to clipboard"), _("Error"), wxOK | wxICON_ERROR,
248  wxDefaultPosition);
249  msgDialog.ShowModal();
250  }
251 }
252 
253 void ChartView::OnMenuShowCoordinatesClick(wxCommandEvent& event)
254 {
255  m_showCoords = event.IsChecked();
256  m_coords->SetVisible(m_showCoords);
257  m_mpWindow->UpdateAll();
258 }
259 
260 void ChartView::OnMenuShowGridClick(wxCommandEvent& event)
261 {
262  m_hideGrid = event.IsChecked() ? false : true;
263  m_xaxis->SetTicks(m_hideGrid);
264  m_yaxis->SetTicks(m_hideGrid);
265  m_mpWindow->UpdateAll();
266 }
267 
268 void ChartView::OnMenuShowLabelClick(wxCommandEvent& event)
269 {
270  m_showLeg = event.IsChecked();
271  m_leg->SetVisible(m_showLeg);
272  m_mpWindow->UpdateAll();
273 }
274 
275 void ChartView::Fit()
276 {
277  m_mpWindow->Fit();
278  double bBox[4];
279  m_mpWindow->GetBoundingBox(bBox);
280 
281  m_pgPropXMin->SetValue(bBox[0]);
282  m_pgPropXMax->SetValue(bBox[1]);
283  m_pgPropYMin->SetValue(bBox[2]);
284  m_pgPropYMax->SetValue(bBox[3]);
285 }
286 
287 void ChartView::UpdatePlot(bool fit)
288 {
289  wxRect legRect = m_leg->GetRectangle();
290  wxRect coordsRect = m_coords->GetRectangle();
291  m_mpWindow->DelAllLayers(true, false);
292 
293  // GoAllTrees(treeCtrl_ChartSelection->GetRootItem());
294  UpdateAllPlots(m_treeCtrl->GetRootItem());
295 
296  m_xaxis = new mpScaleX(m_pgPropXLabel->GetValueAsString(), mpALIGN_BOTTOM, true);
297  m_yaxis = new mpScaleY(m_pgPropYLabel->GetValueAsString(), mpALIGN_LEFT, true);
298  m_leg = new mpInfoLegend(legRect, wxWHITE_BRUSH);
299  m_coords = new mpInfoCoords(coordsRect, wxWHITE_BRUSH);
300 
301  m_xaxis->SetDrawOutsideMargins(false);
302  m_yaxis->SetDrawOutsideMargins(false);
303  m_xaxis->SetTicks(m_hideGrid);
304  m_yaxis->SetTicks(m_hideGrid);
305 
306  mpText* chartTitle = new mpText(m_pgPropChartTitle->GetValueAsString(), 50, 0);
307  wxFont chartTitleFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
308  chartTitle->SetFont(chartTitleFont);
309 
310  m_mpWindow->AddLayer(m_xaxis);
311  m_mpWindow->AddLayer(m_yaxis);
312  m_mpWindow->AddLayer(m_leg);
313  m_mpWindow->AddLayer(m_coords);
314  m_mpWindow->AddLayer(chartTitle);
315 
316  m_leg->SetVisible(m_showLeg);
317  m_coords->SetVisible(m_showCoords);
318 
319  if(fit) Fit();
320 
321  wxColour grey(96, 96, 96);
322  if(m_darkTheme) {
323  m_mpWindow->SetColourTheme(*wxBLACK, *wxWHITE, grey);
324  m_leg->SetBrush(*wxBLACK_BRUSH);
325  m_coords->SetBrush(*wxBLACK_BRUSH);
326  } else {
327  m_mpWindow->SetColourTheme(*wxWHITE, *wxBLACK, grey);
328  m_leg->SetBrush(*wxWHITE_BRUSH);
329  m_coords->SetBrush(*wxWHITE_BRUSH);
330  }
331 }
332 
333 void ChartView::OnTreeItemActivated(wxTreeEvent& event)
334 {
335  if(PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(event.GetItem()))) {
336  bool isPlotting = data->IsPlot() ? false : true;
337  data->SetPlot(isPlotting);
338  m_pgPropDraw->SetValue(data->IsPlot());
339  if(isPlotting) {
340  wxColour colour = GetNextColour();
341  data->SetColour(colour);
342  m_pgPropColor->SetValue(static_cast<wxVariant>(colour));
343  m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), true);
344  } else {
345  m_treeCtrl->SetItemBold(m_treeCtrl->GetSelection(), false);
346  }
347  UpdatePlot(true);
348  }
349 
350  if(event.GetItem() == m_treeTimeID) {
351  AllToYAxis(m_treeCtrl->GetRootItem());
352  m_treeCtrl->SetItemTextColour(m_treeTimeID, *wxRED);
353  m_xAxisValues = m_time;
354  UpdatePlot(true);
355  }
356 
357  event.Skip();
358 }
359 
360 void ChartView::OnTreeItemSelectionChanged(wxTreeEvent& event)
361 {
362  if(PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(event.GetItem()))) {
363  m_pgPropDraw->SetValue(data->IsPlot());
364  wxVariant colour;
365  colour << data->GetColour();
366  m_pgPropColor->SetValue(colour);
367  m_pgProplineThick->SetValue(data->GetThick());
368  m_pgProplineType->SetValue(data->GetPenType());
369  m_pgProplineAxis->SetValue(data->GetAxis());
370  }
371  event.Skip();
372 }
373 
374 void ChartView::BuildColourList()
375 {
376  m_colourList.push_back(wxColour(255, 0, 0));
377  m_colourList.push_back(wxColour(0, 0, 255));
378  m_colourList.push_back(wxColour(0, 255, 0));
379  m_colourList.push_back(wxColour(255, 128, 0));
380  m_colourList.push_back(wxColour(128, 0, 255));
381  m_colourList.push_back(wxColour(0, 255, 128));
382  m_colourList.push_back(wxColour(255, 255, 0));
383  m_colourList.push_back(wxColour(255, 0, 255));
384  m_colourList.push_back(wxColour(0, 255, 255));
385  m_colourList.push_back(wxColour(128, 255, 0));
386  m_colourList.push_back(wxColour(255, 0, 128));
387  m_colourList.push_back(wxColour(0, 128, 255));
388  m_colourList.push_back(wxColour(128, 128, 128));
389  m_colourList.push_back(*wxBLACK);
390  m_itColourList = --m_colourList.end();
391 }
392 
393 wxColour ChartView::GetNextColour()
394 {
395  if(*m_itColourList == *wxBLACK)
396  m_itColourList = m_colourList.begin();
397  else
398  ++m_itColourList;
399 
400  return *m_itColourList;
401 }
402 
403 wxTreeItemId ChartView::AllToYAxis(wxTreeItemId root)
404 {
405  wxTreeItemIdValue cookie;
406  wxTreeItemId item = m_treeCtrl->GetFirstChild(root, cookie);
407  wxTreeItemId child;
408 
409  while(item.IsOk()) {
410  m_treeCtrl->SetItemTextColour(item, *wxBLACK);
411  if(PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(item))) data->SetAxis(0); // X axis.
412 
413  if(m_treeCtrl->ItemHasChildren(item)) {
414  wxTreeItemId nextChild = AllToYAxis(item);
415  if(nextChild.IsOk()) return nextChild;
416  }
417  item = m_treeCtrl->GetNextChild(root, cookie);
418  }
419 
420  wxTreeItemId dummyID;
421  return dummyID;
422 }
423 
424 wxTreeItemId ChartView::UpdateAllPlots(wxTreeItemId root)
425 {
426  wxTreeItemIdValue cookie;
427  wxTreeItemId item = m_treeCtrl->GetFirstChild(root, cookie);
428  wxTreeItemId child;
429 
430  while(item.IsOk()) {
431  if(PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(item))) {
432  if(data->IsPlot()) {
433  wxString parentName = m_treeCtrl->GetItemText(m_treeCtrl->GetItemParent(item));
434  mpFXYVector* newLayer = new mpFXYVector(data->GetName() + " (" + parentName + ")");
435  newLayer->SetData(m_xAxisValues, data->GetValues());
436  newLayer->SetContinuity(true);
437  wxPen layerPen(data->GetColour(), data->GetThick(), data->GetPenType());
438  newLayer->SetPen(layerPen);
439  newLayer->SetDrawOutsideMargins(false);
440  newLayer->ShowName(false);
441 
442  m_mpWindow->AddLayer(newLayer);
443  }
444  }
445 
446  if(m_treeCtrl->ItemHasChildren(item)) {
447  wxTreeItemId nextChild = UpdateAllPlots(item);
448  if(nextChild.IsOk()) return nextChild;
449  }
450  item = m_treeCtrl->GetNextChild(root, cookie);
451  }
452 
453  wxTreeItemId dummyID;
454  return dummyID;
455 }
456 
457 void ChartView::OnMenuExpCSVClick(wxCommandEvent& event)
458 {
459  wxFileDialog saveFileDialog(this, _("Save CSV file"), "", "", "CSV file (*.csv)|*.csv",
460  wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
461  if(saveFileDialog.ShowModal() == wxID_CANCEL) return;
462 
463  wxTextFile csvFile(saveFileDialog.GetPath());
464  if(!csvFile.Create()) {
465  if(!csvFile.Open()) {
466  wxMessageDialog msgDialog(this, _("It was not possible to open or create the selected file."), _("Error"),
467  wxOK | wxCENTRE | wxICON_ERROR);
468  msgDialog.ShowModal();
469  }
470  } else
471  csvFile.Open();
472  if(csvFile.IsOpened()) {
473  csvFile.Clear();
474  csvFile.AddLine(GetActiveCurvesCSV());
475  csvFile.Write();
476  csvFile.Close();
477  }
478 }
479 
480 wxString ChartView::GetActiveCurvesCSV()
481 {
482  std::vector<PlotData*> activePlotDataList;
483  GetActivePlotData(m_treeCtrl->GetRootItem(), activePlotDataList);
484 
485  std::vector<double> xValues;
486  wxString xName = "";
487 
488  // Find X axis curve, if none is found, X is the m_time.
489  bool foundXAxis = false;
490  for(auto it = activePlotDataList.begin(), itEnd = activePlotDataList.end(); it != itEnd; ++it) {
491  PlotData* data = *it;
492  if(data->GetAxis() == 1) {
493  xValues = data->GetValues();
494  xName = data->GetName();
495  foundXAxis = true;
496  activePlotDataList.erase(it);
497  delete data;
498  break;
499  }
500  }
501  if(!foundXAxis) {
502  xValues = m_time;
503  xName = _("Time");
504  }
505 
506  // Build CSV text.
507  wxString csvText = xName + ";";
508  // Header
509  for(auto it = activePlotDataList.begin(), itEnd = activePlotDataList.end(); it != itEnd; ++it) {
510  PlotData* data = *it;
511  csvText += data->GetName() + ";";
512  }
513  csvText[csvText.length() - 1] = '\n';
514  // Values
515  for(unsigned int i = 0; i < xValues.size(); ++i) {
516  csvText += wxString::FromCDouble(xValues[i], 13) + ";";
517  for(unsigned int j = 0; j < activePlotDataList.size(); ++j) {
518  double value = 0.0;
519  if(i < activePlotDataList[j]->GetValues().size()) {
520  value = activePlotDataList[j]->GetValues()[i];
521  }
522  csvText += wxString::FromCDouble(value, 13) + ";";
523  }
524  csvText[csvText.length() - 1] = '\n';
525  }
526 
527  // Clear active plot data vector.
528  for(auto it = activePlotDataList.begin(); it != activePlotDataList.end(); ++it) {
529  delete(*it);
530  }
531  activePlotDataList.clear();
532 
533  return csvText;
534 }
535 
536 wxTreeItemId ChartView::GetActivePlotData(wxTreeItemId root, std::vector<PlotData*>& plotDataList)
537 {
538  wxTreeItemIdValue cookie;
539  wxTreeItemId item = m_treeCtrl->GetFirstChild(root, cookie);
540  wxTreeItemId child;
541 
542  while(item.IsOk()) {
543  if(PlotData* data = dynamic_cast<PlotData*>(m_treeCtrl->GetItemData(item))) {
544  if(data->IsPlot() || data->GetAxis() == 1) {
545  wxString parentName = m_treeCtrl->GetItemText(m_treeCtrl->GetItemParent(item));
546 
547  PlotData* dataCopy = new PlotData();
548  *dataCopy = *data;
549  dataCopy->SetName(data->GetName() + " (" + parentName + ")");
550  plotDataList.push_back(dataCopy);
551  }
552  }
553 
554  if(m_treeCtrl->ItemHasChildren(item)) {
555  wxTreeItemId nextChild = GetActivePlotData(item, plotDataList);
556  if(nextChild.IsOk()) return nextChild;
557  }
558  item = m_treeCtrl->GetNextChild(root, cookie);
559  }
560 
561  wxTreeItemId dummyID;
562  return dummyID;
563 }
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_chart_view_8h_source.html b/docs/doxygen/html/_chart_view_8h_source.html index a35c4a9..25a48b2 100644 --- a/docs/doxygen/html/_chart_view_8h_source.html +++ b/docs/doxygen/html/_chart_view_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ChartView.h Source File +Project/ChartView.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ChartView.h
-
1 #ifndef CHARTVIEW_H
2 #define CHARTVIEW_H
3 #include "ChartViewBase.h"
4 #include "wxMathPlot/mathplot.h"
5 
6 #include <wx/msgdlg.h>
7 #include <wx/clipbrd.h>
8 #include <wx/bitmap.h>
9 #include <wx/dcscreen.h>
10 #include <wx/filedlg.h>
11 #include <wx/textfile.h>
12 
13 class PlotData;
14 class ElementPlotData;
15 
16 class ChartView : public ChartViewBase
17 {
18  public:
19  ChartView(wxWindow* parent, std::vector<ElementPlotData> epdList, std::vector<double> time);
20  virtual ~ChartView();
21 
22  void Fit();
23  void UpdatePlot(bool fit = true);
24 
25  protected:
26  virtual void OnMenuExpCSVClick(wxCommandEvent& event);
27  virtual void OnTreeItemActivated(wxTreeEvent& event);
28  virtual void OnTreeItemSelectionChanged(wxTreeEvent& event);
29  virtual void OnMenuDarkThemeClick(wxCommandEvent& event);
30  virtual void OnMenuExitClick(wxCommandEvent& event) { Close(); }
31  virtual void OnMenuFitClick(wxCommandEvent& event) { Fit(); }
32  virtual void OnMenuSaveImageClick(wxCommandEvent& event);
33  virtual void OnMenuSendClipClick(wxCommandEvent& event);
34  virtual void OnMenuShowCoordinatesClick(wxCommandEvent& event);
35  virtual void OnMenuShowGridClick(wxCommandEvent& event);
36  virtual void OnMenuShowLabelClick(wxCommandEvent& event);
37  virtual void OnPropertyGridChange(wxPropertyGridEvent& event);
38  virtual void SetMPWindow();
39  virtual void SetTreectrl();
40  virtual void BuildColourList();
41  virtual wxColour GetNextColour();
42  virtual wxTreeItemId AllToYAxis(wxTreeItemId root);
43  virtual wxTreeItemId UpdateAllPlots(wxTreeItemId root);
44  virtual wxString GetActiveCurvesCSV();
45  virtual wxTreeItemId GetActivePlotData(wxTreeItemId root, std::vector<PlotData*>& plotDataList);
46 
47  wxPGProperty* m_pgPropColor = NULL;
48 
49  wxTreeItemId m_treeTimeID;
50 
51  std::vector<ElementPlotData> m_epdList;
52  std::vector<double> m_time;
53  std::vector<double> m_xAxisValues;
54 
55  mpWindow* m_mpWindow = NULL;
56  mpScaleX* m_xaxis = NULL;
57  mpScaleY* m_yaxis = NULL;
58  mpText* m_chartTitle = NULL;
59  mpInfoCoords* m_coords = NULL;
60  mpInfoLegend* m_leg = NULL;
61 
62  bool m_hideGrid = true;
63  bool m_showLeg = true;
64  bool m_showCoords = false;
65  bool m_darkTheme = false;
66 
67  std::vector<wxColour> m_colourList;
68  std::vector<wxColour>::iterator m_itColourList;
69 };
70 #endif // CHARTVIEW_H
Definition: ChartViewBase.h:39
-
Definition: ElementPlotData.h:39
-
Definition: ChartView.h:16
-
Definition: ElementPlotData.h:10
+
1 #ifndef CHARTVIEW_H
2 #define CHARTVIEW_H
3 #include "ChartViewBase.h"
4 #include "wxMathPlot/mathplot.h"
5 
6 #include <wx/msgdlg.h>
7 #include <wx/clipbrd.h>
8 #include <wx/bitmap.h>
9 #include <wx/dcscreen.h>
10 #include <wx/filedlg.h>
11 #include <wx/textfile.h>
12 
13 class PlotData;
14 class ElementPlotData;
15 
16 class ChartView : public ChartViewBase
17 {
18  public:
19  ChartView(wxWindow* parent, std::vector<ElementPlotData> epdList, std::vector<double> time);
20  virtual ~ChartView();
21 
22  void Fit();
23  void UpdatePlot(bool fit = true);
24 
25  protected:
26  virtual void OnMenuExpCSVClick(wxCommandEvent& event);
27  virtual void OnTreeItemActivated(wxTreeEvent& event);
28  virtual void OnTreeItemSelectionChanged(wxTreeEvent& event);
29  virtual void OnMenuDarkThemeClick(wxCommandEvent& event);
30  virtual void OnMenuExitClick(wxCommandEvent& event) { Close(); }
31  virtual void OnMenuFitClick(wxCommandEvent& event) { Fit(); }
32  virtual void OnMenuSaveImageClick(wxCommandEvent& event);
33  virtual void OnMenuSendClipClick(wxCommandEvent& event);
34  virtual void OnMenuShowCoordinatesClick(wxCommandEvent& event);
35  virtual void OnMenuShowGridClick(wxCommandEvent& event);
36  virtual void OnMenuShowLabelClick(wxCommandEvent& event);
37  virtual void OnPropertyGridChange(wxPropertyGridEvent& event);
38  virtual void SetMPWindow();
39  virtual void SetTreectrl();
40  virtual void BuildColourList();
41  virtual wxColour GetNextColour();
42  virtual wxTreeItemId AllToYAxis(wxTreeItemId root);
43  virtual wxTreeItemId UpdateAllPlots(wxTreeItemId root);
44  virtual wxString GetActiveCurvesCSV();
45  virtual wxTreeItemId GetActivePlotData(wxTreeItemId root, std::vector<PlotData*>& plotDataList);
46 
47  wxPGProperty* m_pgPropColor = NULL;
48 
49  wxTreeItemId m_treeTimeID;
50 
51  std::vector<ElementPlotData> m_epdList;
52  std::vector<double> m_time;
53  std::vector<double> m_xAxisValues;
54 
55  mpWindow* m_mpWindow = NULL;
56  mpScaleX* m_xaxis = NULL;
57  mpScaleY* m_yaxis = NULL;
58  mpText* m_chartTitle = NULL;
59  mpInfoCoords* m_coords = NULL;
60  mpInfoLegend* m_leg = NULL;
61 
62  bool m_hideGrid = true;
63  bool m_showLeg = true;
64  bool m_showCoords = false;
65  bool m_darkTheme = false;
66 
67  std::vector<wxColour> m_colourList;
68  std::vector<wxColour>::iterator m_itColourList;
69 };
70 #endif // CHARTVIEW_H
+ + +
+
- + diff --git a/docs/doxygen/html/_chart_view_base_8cpp_source.html b/docs/doxygen/html/_chart_view_base_8cpp_source.html new file mode 100644 index 0000000..01b44b2 --- /dev/null +++ b/docs/doxygen/html/_chart_view_base_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/ChartViewBase.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ChartViewBase.cpp
+
+
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ChartView.wxcp
4 // Do not modify this file by hand!
6 
7 #include "ChartViewBase.h"
8 
9 
10 // Declare the bitmap loading function
11 extern void wxCE3EBInitBitmapResources();
12 
13 static bool bBitmapLoaded = false;
14 
15 
16 ChartViewBase::ChartViewBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
17  : wxFrame(parent, id, title, pos, size, style)
18 {
19  if ( !bBitmapLoaded ) {
20  // We need to initialise the default bitmap handler
21  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
22  wxCE3EBInitBitmapResources();
23  bBitmapLoaded = true;
24  }
25  // Set icon(s) to the application/dialog
26  wxIconBundle app_icons;
27  {
28  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart16"));
29  wxIcon icn;
30  icn.CopyFromBitmap(iconBmp);
31  app_icons.AddIcon( icn );
32  }
33  {
34  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart32"));
35  wxIcon icn;
36  icn.CopyFromBitmap(iconBmp);
37  app_icons.AddIcon( icn );
38  }
39  {
40  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart64"));
41  wxIcon icn;
42  icn.CopyFromBitmap(iconBmp);
43  app_icons.AddIcon( icn );
44  }
45  {
46  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart128"));
47  wxIcon icn;
48  icn.CopyFromBitmap(iconBmp);
49  app_icons.AddIcon( icn );
50  }
51  {
52  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart256"));
53  wxIcon icn;
54  icn.CopyFromBitmap(iconBmp);
55  app_icons.AddIcon( icn );
56  }
57  SetIcons( app_icons );
58 
59 
60  m_menuBar = new wxMenuBar(0);
61  this->SetMenuBar(m_menuBar);
62 
63  m_menuFile = new wxMenu();
64  m_menuBar->Append(m_menuFile, _("File"));
65 
66  m_menuItemSaveImage = new wxMenuItem(m_menuFile, wxID_ANY, _("Save chart as image"), wxT(""), wxITEM_NORMAL);
67  m_menuFile->Append(m_menuItemSaveImage);
68 
69  m_menuItemSendToClipboard = new wxMenuItem(m_menuFile, wxID_ANY, _("Send to clipboard"), wxT(""), wxITEM_NORMAL);
70  m_menuFile->Append(m_menuItemSendToClipboard);
71 
72  m_menuItemExportCSV = new wxMenuItem(m_menuFile, wxID_ANY, _("Export CSV..."), wxT(""), wxITEM_NORMAL);
73  m_menuFile->Append(m_menuItemExportCSV);
74 
75  m_menuFile->AppendSeparator();
76 
77  m_menuItemExit = new wxMenuItem(m_menuFile, wxID_ANY, _("Exit"), wxT(""), wxITEM_NORMAL);
78  m_menuFile->Append(m_menuItemExit);
79 
80  m_menuView = new wxMenu();
81  m_menuBar->Append(m_menuView, _("View"));
82 
83  m_menuItemFit = new wxMenuItem(m_menuView, wxID_ANY, _("Fit"), wxT(""), wxITEM_NORMAL);
84  m_menuView->Append(m_menuItemFit);
85 
86  m_menuView->AppendSeparator();
87 
88  m_menuItemShowGrid = new wxMenuItem(m_menuView, wxID_ANY, _("Show grid"), wxT(""), wxITEM_CHECK);
89  m_menuView->Append(m_menuItemShowGrid);
90 
91  m_menuItemShowLabel = new wxMenuItem(m_menuView, wxID_ANY, _("Show label"), wxT(""), wxITEM_CHECK);
92  m_menuView->Append(m_menuItemShowLabel);
93 
94  m_menuItemShowCoordinates = new wxMenuItem(m_menuView, wxID_ANY, _("Show coordinates"), wxT(""), wxITEM_CHECK);
95  m_menuView->Append(m_menuItemShowCoordinates);
96 
97  m_menuItemDarkTheme = new wxMenuItem(m_menuView, wxID_ANY, _("Dark theme"), wxT(""), wxITEM_CHECK);
98  m_menuView->Append(m_menuItemDarkTheme);
99 
100  wxBoxSizer* boxSizer_lvl1_1 = new wxBoxSizer(wxHORIZONTAL);
101  this->SetSizer(boxSizer_lvl1_1);
102 
103  wxBoxSizer* boxSizer_lvl2_1 = new wxBoxSizer(wxVERTICAL);
104 
105  boxSizer_lvl1_1->Add(boxSizer_lvl2_1, 0, wxEXPAND, WXC_FROM_DIP(5));
106 
107  m_treeCtrl = new wxTreeCtrl(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxTR_DEFAULT_STYLE|wxTR_HIDE_ROOT);
108 
109  boxSizer_lvl2_1->Add(m_treeCtrl, 1, 0, WXC_FROM_DIP(5));
110  m_treeCtrl->SetMinSize(wxSize(250,-1));
111 
112  wxArrayString m_pgMgrArr;
113  wxUnusedVar(m_pgMgrArr);
114  wxArrayInt m_pgMgrIntArr;
115  wxUnusedVar(m_pgMgrIntArr);
116  m_pgMgr = new wxPropertyGridManager(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxPG_SPLITTER_AUTO_CENTER|wxPG_BOLD_MODIFIED);
117 
118  boxSizer_lvl2_1->Add(m_pgMgr, 0, 0, WXC_FROM_DIP(5));
119 
120  m_pgPropLineProp = m_pgMgr->Append( new wxPropertyCategory( _("Line properties") ) );
121  m_pgPropLineProp->SetHelpString(wxT(""));
122 
123  m_pgPropDraw = m_pgMgr->AppendIn( m_pgPropLineProp, new wxBoolProperty( _("Draw"), wxPG_LABEL, 1) );
124  m_pgPropDraw->SetHelpString(wxT(""));
125  m_pgPropDraw->SetEditor( wxT("CheckBox") );
126 
127  m_pgProplineThick = m_pgMgr->AppendIn( m_pgPropLineProp, new wxIntProperty( _("Thickness"), wxPG_LABEL, 1) );
128  m_pgProplineThick->SetHelpString(wxT(""));
129  m_pgProplineThick->SetEditor( wxT("TextCtrl") );
130 
131  m_pgMgrArr.Clear();
132  m_pgMgrIntArr.Clear();
133  m_pgProplineType = m_pgMgr->AppendIn( m_pgPropLineProp, new wxEnumProperty( _("Type"), wxPG_LABEL, m_pgMgrArr, m_pgMgrIntArr, 0) );
134  m_pgProplineType->SetHelpString(wxT(""));
135  m_pgProplineType->SetEditor( wxT("Choice") );
136 
137  m_pgMgrArr.Clear();
138  m_pgMgrIntArr.Clear();
139  m_pgMgrArr.Add(_("Y"));
140  m_pgMgrArr.Add(_("X"));
141  m_pgProplineAxis = m_pgMgr->AppendIn( m_pgPropLineProp, new wxEnumProperty( _("Axis"), wxPG_LABEL, m_pgMgrArr, m_pgMgrIntArr, 0) );
142  m_pgProplineAxis->SetHelpString(wxT(""));
143  m_pgProplineAxis->SetEditor( wxT("Choice") );
144 
145  m_pgPropChartProp = m_pgMgr->Append( new wxPropertyCategory( _("Chart properties") ) );
146  m_pgPropChartProp->SetHelpString(wxT(""));
147 
148  m_pgPropChartTitle = m_pgMgr->AppendIn( m_pgPropChartProp, new wxStringProperty( _("Chart title"), wxPG_LABEL, wxT("")) );
149  m_pgPropChartTitle->SetHelpString(wxT(""));
150  m_pgPropChartTitle->SetEditor( wxT("TextCtrl") );
151 
152  m_pgPropXLabel = m_pgMgr->AppendIn( m_pgPropChartProp, new wxStringProperty( _("X axis label"), wxPG_LABEL, wxT("")) );
153  m_pgPropXLabel->SetHelpString(wxT(""));
154  m_pgPropXLabel->SetEditor( wxT("TextCtrl") );
155 
156  m_pgPropYLabel = m_pgMgr->AppendIn( m_pgPropChartProp, new wxStringProperty( _("Y axis label"), wxPG_LABEL, wxT("")) );
157  m_pgPropYLabel->SetHelpString(wxT(""));
158  m_pgPropYLabel->SetEditor( wxT("TextCtrl") );
159 
160  m_pgPropMargins = m_pgMgr->AppendIn( m_pgPropChartProp, new wxStringProperty( _("Margins"), wxPG_LABEL, wxT("")) );
161  m_pgPropMargins->SetHelpString(wxT(""));
162 
163  m_pgPropMarginsUp = m_pgMgr->AppendIn( m_pgPropMargins, new wxIntProperty( _("Up"), wxPG_LABEL, 20) );
164  m_pgPropMarginsUp->SetHelpString(wxT(""));
165 
166  m_pgPropMarginsBot = m_pgMgr->AppendIn( m_pgPropMargins, new wxIntProperty( _("Botton"), wxPG_LABEL, 40) );
167  m_pgPropMarginsBot->SetHelpString(wxT(""));
168 
169  m_pgPropMarginsLeft = m_pgMgr->AppendIn( m_pgPropMargins, new wxIntProperty( _("Left"), wxPG_LABEL, 60) );
170  m_pgPropMarginsLeft->SetHelpString(wxT(""));
171 
172  m_pgPropMarginsRight = m_pgMgr->AppendIn( m_pgPropMargins, new wxIntProperty( _("Right"), wxPG_LABEL, 10) );
173  m_pgPropMarginsRight->SetHelpString(wxT(""));
174 
175  m_pgPropAxisLimit = m_pgMgr->AppendIn( m_pgPropChartProp, new wxStringProperty( _("Axis limit"), wxPG_LABEL, wxT("")) );
176  m_pgPropAxisLimit->SetHelpString(wxT(""));
177 
178  m_pgPropXMin = m_pgMgr->AppendIn( m_pgPropAxisLimit, new wxFloatProperty( _("X min"), wxPG_LABEL, 0) );
179  m_pgPropXMin->SetHelpString(wxT(""));
180 
181  m_pgPropXMax = m_pgMgr->AppendIn( m_pgPropAxisLimit, new wxFloatProperty( _("X max"), wxPG_LABEL, 1) );
182  m_pgPropXMax->SetHelpString(wxT(""));
183 
184  m_pgPropYMin = m_pgMgr->AppendIn( m_pgPropAxisLimit, new wxFloatProperty( _("Y min"), wxPG_LABEL, 0) );
185  m_pgPropYMin->SetHelpString(wxT(""));
186 
187  m_pgPropYMax = m_pgMgr->AppendIn( m_pgPropAxisLimit, new wxFloatProperty( _("Y max"), wxPG_LABEL, 1) );
188  m_pgPropYMax->SetHelpString(wxT(""));
189  m_pgMgr->SetMinSize(wxSize(250,250));
190 
191  SetName(wxT("ChartViewBase"));
192  SetSize(-1,-1);
193  if (GetSizer()) {
194  GetSizer()->Fit(this);
195  }
196  if(GetParent()) {
197  CentreOnParent(wxBOTH);
198  } else {
199  CentreOnScreen(wxBOTH);
200  }
201 #if wxVERSION_NUMBER >= 2900
202  if(!wxPersistenceManager::Get().Find(this)) {
203  wxPersistenceManager::Get().RegisterAndRestore(this);
204  } else {
205  wxPersistenceManager::Get().Restore(this);
206  }
207 #endif
208  // Connect events
209  this->Connect(m_menuItemSaveImage->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuSaveImageClick), NULL, this);
210  this->Connect(m_menuItemSendToClipboard->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuSendClipClick), NULL, this);
211  this->Connect(m_menuItemExportCSV->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuExpCSVClick), NULL, this);
212  this->Connect(m_menuItemExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuExitClick), NULL, this);
213  this->Connect(m_menuItemFit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuFitClick), NULL, this);
214  this->Connect(m_menuItemShowGrid->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowGridClick), NULL, this);
215  this->Connect(m_menuItemShowLabel->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowLabelClick), NULL, this);
216  this->Connect(m_menuItemShowCoordinates->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowCoordinatesClick), NULL, this);
217  this->Connect(m_menuItemDarkTheme->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuDarkThemeClick), NULL, this);
218  m_treeCtrl->Connect(wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler(ChartViewBase::OnTreeItemActivated), NULL, this);
219  m_treeCtrl->Connect(wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler(ChartViewBase::OnTreeItemSelectionChanged), NULL, this);
220  m_pgMgr->Connect(wxEVT_PG_CHANGED, wxPropertyGridEventHandler(ChartViewBase::OnPropertyGridChange), NULL, this);
221 
222 }
223 
224 ChartViewBase::~ChartViewBase()
225 {
226  this->Disconnect(m_menuItemSaveImage->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuSaveImageClick), NULL, this);
227  this->Disconnect(m_menuItemSendToClipboard->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuSendClipClick), NULL, this);
228  this->Disconnect(m_menuItemExportCSV->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuExpCSVClick), NULL, this);
229  this->Disconnect(m_menuItemExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuExitClick), NULL, this);
230  this->Disconnect(m_menuItemFit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuFitClick), NULL, this);
231  this->Disconnect(m_menuItemShowGrid->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowGridClick), NULL, this);
232  this->Disconnect(m_menuItemShowLabel->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowLabelClick), NULL, this);
233  this->Disconnect(m_menuItemShowCoordinates->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuShowCoordinatesClick), NULL, this);
234  this->Disconnect(m_menuItemDarkTheme->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ChartViewBase::OnMenuDarkThemeClick), NULL, this);
235  m_treeCtrl->Disconnect(wxEVT_COMMAND_TREE_ITEM_ACTIVATED, wxTreeEventHandler(ChartViewBase::OnTreeItemActivated), NULL, this);
236  m_treeCtrl->Disconnect(wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler(ChartViewBase::OnTreeItemSelectionChanged), NULL, this);
237  m_pgMgr->Disconnect(wxEVT_PG_CHANGED, wxPropertyGridEventHandler(ChartViewBase::OnPropertyGridChange), NULL, this);
238 
239 }
+
+ + + + diff --git a/docs/doxygen/html/_chart_view_base_8h_source.html b/docs/doxygen/html/_chart_view_base_8h_source.html index 12791f1..c3adb72 100644 --- a/docs/doxygen/html/_chart_view_base_8h_source.html +++ b/docs/doxygen/html/_chart_view_base_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ChartViewBase.h Source File +Project/ChartViewBase.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ChartViewBase.h
-
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ChartView.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_CHARTVIEW_BASE_CLASSES_H
8 #define _PSP_PROJECT_CHARTVIEW_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/menu.h>
18 #include <wx/treectrl.h>
19 #include <wx/propgrid/manager.h>
20 #include <wx/propgrid/property.h>
21 #include <wx/propgrid/advprops.h>
22 #if wxVERSION_NUMBER >= 2900
23 #include <wx/persist.h>
24 #include <wx/persist/toplevel.h>
25 #include <wx/persist/bookctrl.h>
26 #include <wx/persist/treebook.h>
27 #endif
28 
29 #ifdef WXC_FROM_DIP
30 #undef WXC_FROM_DIP
31 #endif
32 #if wxVERSION_NUMBER >= 3100
33 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
34 #else
35 #define WXC_FROM_DIP(x) x
36 #endif
37 
38 
39 class ChartViewBase : public wxFrame
40 {
41 protected:
42  wxMenuBar* m_menuBar;
43  wxMenu* m_menuFile;
44  wxMenuItem* m_menuItemSaveImage;
45  wxMenuItem* m_menuItemSendToClipboard;
46  wxMenuItem* m_menuItemExportCSV;
47  wxMenuItem* m_menuItemSeparator_1;
48  wxMenuItem* m_menuItemExit;
49  wxMenu* m_menuView;
50  wxMenuItem* m_menuItemFit;
51  wxMenuItem* m_menuItemSeparator_2;
52  wxMenuItem* m_menuItemShowGrid;
53  wxMenuItem* m_menuItemShowLabel;
54  wxMenuItem* m_menuItemShowCoordinates;
55  wxMenuItem* m_menuItemDarkTheme;
56  wxTreeCtrl* m_treeCtrl;
57  wxPropertyGridManager* m_pgMgr;
58  wxPGProperty* m_pgPropLineProp;
59  wxPGProperty* m_pgPropDraw;
60  wxPGProperty* m_pgProplineThick;
61  wxPGProperty* m_pgProplineType;
62  wxPGProperty* m_pgProplineAxis;
63  wxPGProperty* m_pgPropChartProp;
64  wxPGProperty* m_pgPropChartTitle;
65  wxPGProperty* m_pgPropXLabel;
66  wxPGProperty* m_pgPropYLabel;
67  wxPGProperty* m_pgPropMargins;
68  wxPGProperty* m_pgPropMarginsUp;
69  wxPGProperty* m_pgPropMarginsBot;
70  wxPGProperty* m_pgPropMarginsLeft;
71  wxPGProperty* m_pgPropMarginsRight;
72  wxPGProperty* m_pgPropAxisLimit;
73  wxPGProperty* m_pgPropXMin;
74  wxPGProperty* m_pgPropXMax;
75  wxPGProperty* m_pgPropYMin;
76  wxPGProperty* m_pgPropYMax;
77 
78 protected:
79  virtual void OnMenuSaveImageClick(wxCommandEvent& event) { event.Skip(); }
80  virtual void OnMenuSendClipClick(wxCommandEvent& event) { event.Skip(); }
81  virtual void OnMenuExpCSVClick(wxCommandEvent& event) { event.Skip(); }
82  virtual void OnMenuExitClick(wxCommandEvent& event) { event.Skip(); }
83  virtual void OnMenuFitClick(wxCommandEvent& event) { event.Skip(); }
84  virtual void OnMenuShowGridClick(wxCommandEvent& event) { event.Skip(); }
85  virtual void OnMenuShowLabelClick(wxCommandEvent& event) { event.Skip(); }
86  virtual void OnMenuShowCoordinatesClick(wxCommandEvent& event) { event.Skip(); }
87  virtual void OnMenuDarkThemeClick(wxCommandEvent& event) { event.Skip(); }
88  virtual void OnTreeItemActivated(wxTreeEvent& event) { event.Skip(); }
89  virtual void OnTreeItemSelectionChanged(wxTreeEvent& event) { event.Skip(); }
90  virtual void OnPropertyGridChange(wxPropertyGridEvent& event) { event.Skip(); }
91 
92 public:
93  wxMenuBar* GetMenuBar() { return m_menuBar; }
94  wxTreeCtrl* GetTreeCtrl() { return m_treeCtrl; }
95  wxPropertyGridManager* GetPgMgr() { return m_pgMgr; }
96  ChartViewBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Chart viewer"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_FRAME_STYLE);
97  virtual ~ChartViewBase();
98 };
99 
100 #endif
Definition: ChartViewBase.h:39
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ChartView.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_CHARTVIEW_BASE_CLASSES_H
8 #define _PSP_PROJECT_CHARTVIEW_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/menu.h>
18 #include <wx/treectrl.h>
19 #include <wx/propgrid/manager.h>
20 #include <wx/propgrid/property.h>
21 #include <wx/propgrid/advprops.h>
22 #if wxVERSION_NUMBER >= 2900
23 #include <wx/persist.h>
24 #include <wx/persist/toplevel.h>
25 #include <wx/persist/bookctrl.h>
26 #include <wx/persist/treebook.h>
27 #endif
28 
29 #ifdef WXC_FROM_DIP
30 #undef WXC_FROM_DIP
31 #endif
32 #if wxVERSION_NUMBER >= 3100
33 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
34 #else
35 #define WXC_FROM_DIP(x) x
36 #endif
37 
38 
39 class ChartViewBase : public wxFrame
40 {
41 protected:
42  wxMenuBar* m_menuBar;
43  wxMenu* m_menuFile;
44  wxMenuItem* m_menuItemSaveImage;
45  wxMenuItem* m_menuItemSendToClipboard;
46  wxMenuItem* m_menuItemExportCSV;
47  wxMenuItem* m_menuItemSeparator_1;
48  wxMenuItem* m_menuItemExit;
49  wxMenu* m_menuView;
50  wxMenuItem* m_menuItemFit;
51  wxMenuItem* m_menuItemSeparator_2;
52  wxMenuItem* m_menuItemShowGrid;
53  wxMenuItem* m_menuItemShowLabel;
54  wxMenuItem* m_menuItemShowCoordinates;
55  wxMenuItem* m_menuItemDarkTheme;
56  wxTreeCtrl* m_treeCtrl;
57  wxPropertyGridManager* m_pgMgr;
58  wxPGProperty* m_pgPropLineProp;
59  wxPGProperty* m_pgPropDraw;
60  wxPGProperty* m_pgProplineThick;
61  wxPGProperty* m_pgProplineType;
62  wxPGProperty* m_pgProplineAxis;
63  wxPGProperty* m_pgPropChartProp;
64  wxPGProperty* m_pgPropChartTitle;
65  wxPGProperty* m_pgPropXLabel;
66  wxPGProperty* m_pgPropYLabel;
67  wxPGProperty* m_pgPropMargins;
68  wxPGProperty* m_pgPropMarginsUp;
69  wxPGProperty* m_pgPropMarginsBot;
70  wxPGProperty* m_pgPropMarginsLeft;
71  wxPGProperty* m_pgPropMarginsRight;
72  wxPGProperty* m_pgPropAxisLimit;
73  wxPGProperty* m_pgPropXMin;
74  wxPGProperty* m_pgPropXMax;
75  wxPGProperty* m_pgPropYMin;
76  wxPGProperty* m_pgPropYMax;
77 
78 protected:
79  virtual void OnMenuSaveImageClick(wxCommandEvent& event) { event.Skip(); }
80  virtual void OnMenuSendClipClick(wxCommandEvent& event) { event.Skip(); }
81  virtual void OnMenuExpCSVClick(wxCommandEvent& event) { event.Skip(); }
82  virtual void OnMenuExitClick(wxCommandEvent& event) { event.Skip(); }
83  virtual void OnMenuFitClick(wxCommandEvent& event) { event.Skip(); }
84  virtual void OnMenuShowGridClick(wxCommandEvent& event) { event.Skip(); }
85  virtual void OnMenuShowLabelClick(wxCommandEvent& event) { event.Skip(); }
86  virtual void OnMenuShowCoordinatesClick(wxCommandEvent& event) { event.Skip(); }
87  virtual void OnMenuDarkThemeClick(wxCommandEvent& event) { event.Skip(); }
88  virtual void OnTreeItemActivated(wxTreeEvent& event) { event.Skip(); }
89  virtual void OnTreeItemSelectionChanged(wxTreeEvent& event) { event.Skip(); }
90  virtual void OnPropertyGridChange(wxPropertyGridEvent& event) { event.Skip(); }
91 
92 public:
93  wxMenuBar* GetMenuBar() { return m_menuBar; }
94  wxTreeCtrl* GetTreeCtrl() { return m_treeCtrl; }
95  wxPropertyGridManager* GetPgMgr() { return m_pgMgr; }
96  ChartViewBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Chart viewer"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_FRAME_STYLE);
97  virtual ~ChartViewBase();
98 };
99 
100 #endif
+
- + diff --git a/docs/doxygen/html/_chart_view_bitmaps_8cpp_source.html b/docs/doxygen/html/_chart_view_bitmaps_8cpp_source.html new file mode 100644 index 0000000..2b5d1e9 --- /dev/null +++ b/docs/doxygen/html/_chart_view_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/ChartViewBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ChartViewBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 3278;
25 static unsigned char xml_res_file_0[] = {
26 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,
27 0,0,195,62,97,203,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
28 72,89,115,0,0,21,211,0,0,21,211,1,251,209,60,11,0,0,0,25,116,69,88,116,
29 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
30 101,46,111,114,103,155,238,60,26,0,0,12,75,73,68,65,84,120,156,237,157,
31 121,116,21,213,25,192,127,55,9,33,33,160,64,136,85,64,212,82,168,162,162,
32 30,212,163,7,212,138,130,27,214,106,177,5,165,81,17,194,86,15,160,213,138,
33 138,68,20,42,10,138,11,178,184,69,80,118,227,82,177,238,90,197,189,173,
34 82,80,4,142,82,203,81,34,88,1,129,188,240,150,220,254,17,34,9,121,239,101,
35 238,125,119,150,100,238,239,63,242,230,155,249,14,243,155,111,230,125,247,
36 206,187,130,73,31,74,178,178,176,132,147,44,98,17,168,174,246,59,15,139,
37 79,100,33,37,86,130,240,82,83,251,173,4,161,101,223,205,223,74,16,74,234,
38 63,253,89,9,66,71,78,131,191,236,149,160,251,193,237,24,126,226,65,142,
39 118,178,112,245,15,124,82,81,105,58,55,139,7,52,20,0,64,74,58,231,199,25,
40 127,114,17,217,217,217,141,238,100,85,69,196,10,208,68,73,221,0,144,146,
41 221,187,119,147,72,36,60,76,199,226,53,105,59,64,210,74,16,40,218,178,147,
42 92,98,70,247,217,104,11,208,74,16,28,238,22,247,179,65,92,194,88,177,152,
43 150,68,141,236,211,81,15,216,74,224,63,135,179,153,98,86,208,133,10,102,
44 50,131,117,98,32,37,60,67,14,153,157,19,199,131,0,86,2,127,41,21,243,234,
45 149,255,195,216,204,92,49,149,245,226,18,74,120,134,108,244,190,186,43,
46 141,2,213,74,16,143,199,181,14,102,209,163,27,155,184,156,191,37,253,236,
47 8,190,101,174,152,202,106,49,136,98,86,40,139,160,60,12,40,165,164,178,
48 178,210,74,224,33,147,196,188,70,75,253,81,108,228,9,81,202,191,247,138,
49 144,229,80,4,173,113,96,43,129,119,28,197,70,6,241,138,227,237,123,236,
50 21,225,53,49,198,209,246,218,19,1,172,4,222,80,42,230,105,221,223,223,164,
51 151,163,237,50,154,9,82,43,129,180,15,134,174,112,52,95,49,144,55,148,227,
52 254,199,129,220,39,7,59,218,54,227,169,64,82,74,226,123,34,80,109,37,48,
53 205,100,230,56,190,151,215,101,6,67,248,145,2,71,219,26,154,11,38,33,86,
54 101,37,48,200,9,172,227,98,241,150,114,220,247,180,229,65,249,59,199,219,
55 155,155,12,40,173,4,38,185,77,204,69,32,149,227,166,201,43,216,73,43,199,
56 219,155,157,13,106,37,48,66,47,214,50,128,149,202,113,21,20,242,16,3,149,
57 98,204,79,7,182,18,100,204,237,98,142,246,213,95,73,158,82,140,59,243,193,
58 173,4,218,156,202,106,206,227,61,229,184,205,116,96,46,151,40,199,185,247,
59 66,128,149,64,139,201,204,209,138,155,194,80,34,180,84,142,115,247,141,
60 16,43,129,18,189,89,197,217,226,35,229,184,77,252,140,71,228,69,90,199,
61 116,255,149,32,43,129,99,238,96,182,86,220,20,134,178,135,92,173,88,111,
62 222,9,179,18,52,74,95,241,49,191,18,255,84,142,251,154,67,120,92,94,168,
63 125,92,239,94,10,148,18,162,182,99,152,138,73,242,97,173,184,201,114,24,
64 81,90,104,31,215,251,183,66,173,4,13,56,135,247,57,93,124,162,28,247,37,
65 157,153,207,5,25,29,219,159,215,130,173,4,245,40,69,255,234,143,211,248,
66 180,253,116,248,247,94,120,52,2,9,59,148,124,1,43,57,69,172,86,142,219,
67 192,161,44,228,220,140,143,239,239,15,3,196,170,66,47,193,36,161,119,245,
68 79,146,35,50,190,250,193,111,1,32,212,18,252,70,188,197,73,124,174,28,247,
69 57,71,176,132,126,70,114,240,95,0,8,165,4,2,201,36,205,123,127,169,44,161,
70 218,208,169,11,134,0,16,58,9,126,43,222,224,120,214,43,199,173,161,43,79,
71 211,215,88,30,193,17,0,66,35,65,22,213,76,228,81,173,216,137,140,52,118,
72 245,215,228,18,52,66,32,193,239,121,149,158,108,80,142,251,23,71,242,156,
73 60,195,104,46,193,19,0,154,181,4,217,84,51,81,232,93,253,147,40,65,34,140,
74 230,147,252,247,1,130,64,172,10,200,131,236,250,41,150,240,12,125,196,167,
75 188,207,177,188,39,143,99,13,93,73,4,212,227,100,92,198,75,28,197,70,229,
76 184,143,228,209,188,192,105,198,243,9,174,0,80,79,130,150,68,121,80,220,
77 205,48,158,5,224,15,188,8,2,118,147,207,167,116,103,165,60,158,119,57,142,
78 247,57,150,239,105,235,111,222,41,200,166,154,155,197,99,90,177,183,50,
79 194,112,54,53,4,91,0,128,88,21,93,216,78,121,206,77,244,98,109,131,143,
80 11,136,208,155,85,244,22,171,0,144,8,214,114,56,15,113,41,179,228,165,94,
81 103,155,150,98,86,240,75,190,86,142,123,79,246,228,101,78,117,33,163,160,
82 62,3,212,161,143,248,148,215,227,67,233,153,104,120,242,147,33,144,244,
83 96,35,211,120,128,131,248,193,229,236,156,211,130,56,183,104,222,251,111,
84 101,164,225,108,246,17,88,1,4,146,113,98,17,207,113,29,69,108,163,50,6,
85 49,133,241,163,2,34,252,137,39,221,75,80,145,171,248,43,63,231,27,229,184,
86 149,242,120,94,231,36,23,50,170,33,144,2,180,161,146,5,226,86,74,169,255,
87 94,156,170,4,163,197,242,64,84,129,150,68,181,239,253,55,139,209,134,179,
88 169,79,224,4,232,198,38,94,21,163,83,206,139,87,145,160,128,8,215,137,167,
89 12,102,167,199,48,241,28,93,168,80,142,123,77,158,204,219,242,4,23,50,218,
90 71,160,4,56,159,119,121,93,140,226,200,70,30,148,84,36,24,195,50,95,171,
91 64,30,81,110,164,76,43,118,50,195,204,38,147,132,64,8,144,77,53,165,204,
92 227,41,49,145,3,216,237,40,198,169,4,126,87,129,17,162,156,206,108,81,142,
93 123,73,158,202,59,184,123,245,67,0,4,40,100,7,79,115,3,227,196,34,229,183,
94 97,156,74,224,87,21,200,35,202,245,204,215,138,45,165,196,112,54,201,241,
95 85,128,19,89,203,59,98,184,214,108,216,90,156,72,224,215,55,130,49,98,41,
96 157,216,170,28,247,130,236,195,135,28,227,66,70,13,241,77,128,65,188,204,
97 11,98,60,29,53,254,131,246,199,137,4,94,127,35,40,32,194,13,44,80,142,147,
98 8,38,51,220,133,140,146,227,185,0,45,137,114,191,152,206,28,113,39,121,
99 236,49,182,223,198,36,240,250,89,224,26,150,104,9,247,44,103,240,49,61,
100 92,200,40,57,158,10,208,137,45,188,200,88,138,89,225,202,254,43,99,16,77,
101 35,129,87,207,2,173,169,228,90,177,80,57,78,34,184,77,122,115,239,175,197,
102 51,1,206,228,31,188,45,74,232,37,190,48,178,191,84,195,162,145,52,18,120,
103 85,5,198,177,136,34,182,41,199,45,231,44,86,209,205,133,140,82,227,186,
104 0,181,45,221,229,226,207,20,178,195,200,62,215,208,149,115,121,128,72,138,
105 119,225,211,73,224,118,21,56,144,93,140,215,184,250,171,201,226,118,121,
106 181,11,25,165,199,85,1,90,19,161,140,219,26,180,116,51,97,25,103,211,79,
107 206,226,67,121,116,218,119,226,82,73,80,64,132,107,81,63,65,78,25,207,66,
108 218,243,163,114,220,98,250,179,154,95,184,144,81,122,92,19,160,27,155,120,
109 77,140,226,34,241,119,35,251,139,147,77,41,37,12,151,55,255,244,30,252,
110 125,12,74,89,5,32,181,4,127,20,75,93,169,2,109,217,201,88,177,88,57,46,
111 225,211,213,15,46,9,224,180,165,235,148,173,180,227,98,121,55,51,247,251,
112 237,187,239,104,79,25,3,210,198,38,147,192,173,42,112,189,88,64,91,118,
113 42,199,61,201,249,124,193,225,198,243,113,130,81,1,116,90,186,141,241,129,
114 60,150,211,228,195,41,219,162,51,229,224,180,85,0,146,75,96,186,10,20,178,
115 131,107,88,162,28,151,32,139,169,242,42,99,121,168,98,76,128,76,90,186,
116 169,40,99,0,191,102,6,21,20,166,220,198,73,21,128,134,18,20,16,97,188,88,
117 100,34,77,0,110,16,243,105,131,250,186,73,101,92,200,122,186,24,203,67,
118 21,35,2,116,97,51,111,137,145,25,181,116,235,82,69,46,163,229,141,140,147,
119 215,57,122,247,221,73,21,128,134,18,232,54,107,246,167,136,109,140,102,
120 185,114,92,140,28,166,200,161,25,31,63,19,140,8,112,189,152,207,161,26,
121 227,221,201,248,138,78,156,37,31,98,33,231,56,142,113,90,5,160,190,4,166,
122 170,192,4,202,104,173,113,245,63,202,69,108,164,99,198,199,207,4,35,2,228,
123 102,184,108,73,45,175,200,83,232,43,103,243,25,93,149,99,157,86,1,168,47,
124 65,166,85,224,16,190,103,132,40,87,142,139,210,130,105,242,10,237,227,154,
125 194,247,225,96,168,233,234,205,148,131,25,196,20,182,211,70,107,31,42,85,
126 0,246,73,144,105,21,152,64,25,173,168,82,142,155,199,197,252,135,67,180,
127 143,107,10,223,5,216,73,43,134,48,153,82,50,127,227,117,166,28,76,149,194,
128 111,229,213,74,160,91,5,58,178,149,97,226,89,229,184,42,114,185,83,94,169,
129 28,231,6,190,10,176,134,174,156,46,31,102,133,236,99,100,127,223,209,158,
130 50,233,188,10,64,141,4,45,18,122,85,96,162,120,148,124,141,17,205,217,114,
131 32,223,80,164,28,231,6,190,9,176,132,126,244,147,179,140,63,4,205,68,173,
132 10,64,141,4,37,137,165,116,96,187,227,152,195,216,204,80,158,87,77,143,
133 74,242,184,139,98,229,56,183,240,92,128,218,150,238,8,121,147,214,79,155,
134 54,70,5,133,202,85,0,32,59,86,201,216,132,243,9,28,183,136,199,180,86,241,
135 156,37,47,77,219,215,240,26,79,5,72,213,210,53,205,189,92,166,92,5,0,174,
136 142,47,165,40,209,248,12,165,218,69,28,85,217,77,62,211,25,162,28,231,38,
137 158,9,208,88,75,215,36,58,207,2,0,173,168,98,84,236,73,72,164,191,178,247,
138 95,196,209,41,247,49,136,45,180,87,142,115,19,79,4,112,210,210,53,141,110,
139 21,24,41,202,233,16,251,14,226,201,215,230,77,183,136,99,58,118,209,202,
140 245,202,167,131,171,2,168,182,116,77,162,218,23,168,165,21,85,140,102,89,
141 141,0,73,36,112,178,136,99,50,238,225,50,182,210,78,57,206,109,92,19,64,
142 167,165,107,26,213,190,64,45,35,69,121,205,55,130,253,36,232,206,127,149,
143 22,113,172,101,7,173,3,121,245,131,75,2,100,210,210,53,73,5,133,218,85,
144 96,148,216,59,184,83,71,130,219,197,108,173,153,77,51,184,156,109,28,160,
145 28,231,5,70,5,48,209,210,53,141,118,21,160,124,95,95,32,30,165,71,124,157,
146 235,139,56,250,129,49,1,76,182,116,77,162,91,5,10,136,236,171,2,192,132,
147 248,92,98,113,245,171,127,186,116,190,136,163,31,24,57,83,203,101,95,78,
148 147,143,24,107,233,154,102,166,28,68,149,198,138,26,35,40,167,61,63,210,
149 147,13,12,16,43,169,138,195,30,133,31,47,219,74,59,30,196,249,34,142,126,
150 96,68,128,87,57,37,16,35,91,169,168,160,3,79,104,244,5,90,19,97,140,88,
151 202,77,226,241,159,102,57,169,72,112,151,44,102,151,194,34,142,126,16,156,
152 90,237,50,247,50,88,171,10,140,97,57,231,240,65,189,191,57,145,64,103,17,
153 71,63,8,141,0,186,85,32,143,61,73,231,56,54,38,129,206,34,142,126,16,26,
154 1,64,191,59,152,138,84,18,232,46,226,232,7,161,18,160,130,66,158,144,153,
155 173,177,179,63,201,36,208,93,196,209,15,66,37,0,152,175,2,80,95,130,76,
156 22,113,244,131,208,9,224,70,21,128,125,18,100,178,136,163,31,132,78,0,112,
157 167,10,0,108,136,31,204,227,177,204,23,114,242,146,80,10,80,65,33,243,57,
158 223,248,126,167,201,98,162,241,234,148,67,201,65,36,148,2,0,220,35,47,55,
159 90,5,54,210,145,197,244,175,249,71,138,161,228,32,18,90,1,76,87,129,105,
160 178,184,254,50,110,77,68,130,208,10,0,230,170,192,151,116,98,57,103,55,
161 252,160,9,72,16,106,1,76,85,129,191,200,171,82,47,226,24,112,9,66,45,0,
162 100,94,5,190,224,48,202,57,51,253,70,1,150,32,244,2,84,80,200,2,121,158,
163 118,252,157,242,74,103,243,31,2,42,65,232,5,128,154,190,128,78,243,230,
164 51,186,242,60,167,59,15,8,160,4,86,0,224,91,138,152,47,213,159,5,166,226,
165 240,234,175,75,192,36,176,2,236,101,6,67,148,158,5,86,209,157,23,101,111,
166 189,131,5,72,130,224,175,26,230,17,21,20,114,164,92,70,91,118,57,218,126,
167 7,173,51,91,196,177,86,128,28,127,199,13,172,0,117,216,78,27,111,103,51,
168 7,64,2,123,11,240,27,159,111,7,86,128,32,224,163,4,86,128,160,224,147,4,
169 86,128,32,17,143,66,204,220,34,26,78,176,2,4,141,68,204,83,9,172,0,65,196,
170 67,9,172,0,65,197,35,9,172,0,65,198,3,9,172,0,65,199,101,9,172,0,77,1,23,
171 37,176,2,52,21,92,146,192,10,208,148,112,65,2,43,64,83,195,176,4,41,71,
172 3,115,178,156,15,117,182,201,205,166,168,192,14,44,122,135,132,236,4,162,
173 133,179,249,11,219,171,18,68,19,201,151,241,73,121,214,142,57,40,223,113,
174 58,211,251,119,102,122,255,206,142,183,183,152,33,55,55,151,252,252,198,
175 207,211,185,79,173,231,229,47,147,175,101,104,111,1,77,152,104,52,74,36,
176 18,201,104,31,86,128,38,78,166,18,88,1,154,1,209,104,148,202,74,245,69,
177 171,192,10,208,108,136,197,98,90,18,88,1,154,17,58,18,88,1,154,25,170,18,
178 88,1,154,33,42,18,88,1,154,41,78,37,176,2,52,99,156,72,144,178,19,248,252,
179 186,29,180,207,115,214,222,149,134,86,11,183,184,195,87,91,146,119,1,1,
180 4,19,222,180,103,47,12,100,231,64,139,134,63,93,107,111,1,97,33,17,135,
181 88,195,53,142,173,0,97,34,137,4,86,128,176,177,159,4,86,128,48,82,71,2,
182 59,139,35,172,36,226,64,21,255,7,181,153,56,45,184,129,88,206,0,0,0,0,73,
183 69,78,68,174,66,96,130};
184 
185 static size_t xml_res_size_1 = 560;
186 static unsigned char xml_res_file_1[] = {
187 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,
188 0,31,243,255,97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
189 72,89,115,0,0,2,186,0,0,2,186,1,219,5,165,194,0,0,0,25,116,69,88,116,83,
190 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
191 46,111,114,103,155,238,60,26,0,0,1,173,73,68,65,84,56,141,149,147,63,72,
192 28,65,28,133,191,209,185,91,148,104,226,33,130,160,32,92,115,136,141,145,
193 112,130,85,42,17,141,40,241,76,229,191,78,33,54,169,44,130,70,16,212,11,
194 8,130,162,156,26,8,4,133,96,170,84,73,8,136,49,218,120,133,34,8,162,22,
195 34,68,137,133,38,81,55,187,115,55,22,114,171,203,90,172,175,154,249,189,
196 121,31,143,97,70,24,111,86,117,121,241,67,182,79,76,76,149,230,190,202,
197 42,123,32,88,235,8,19,46,48,124,135,6,196,12,79,89,191,6,0,152,166,137,
198 86,150,175,112,5,123,244,51,75,139,248,126,3,0,72,219,22,248,128,12,137,
199 41,108,36,195,186,203,13,0,174,1,202,34,136,125,103,184,138,109,26,89,38,
200 161,155,57,164,232,14,0,80,157,74,178,147,122,198,174,104,38,143,11,151,
201 55,40,18,152,4,25,166,211,153,185,0,221,124,226,51,175,200,86,151,148,168,
202 67,94,138,143,142,23,101,139,122,86,152,162,133,95,20,122,1,175,197,28,
203 35,98,130,36,17,158,232,247,252,180,35,244,170,15,78,139,65,145,224,156,
204 28,226,186,221,213,202,1,52,240,131,25,221,68,163,30,227,136,66,70,69,39,
205 185,234,140,158,212,2,53,108,80,203,26,147,196,56,38,228,2,200,204,162,
206 143,94,166,41,119,140,175,58,74,146,8,221,106,158,58,86,249,43,115,121,
207 171,219,60,23,235,52,88,210,85,30,51,78,7,33,254,80,169,54,25,179,99,156,
208 240,200,115,70,122,38,183,244,133,106,190,17,165,148,35,198,213,115,192,
209 2,25,244,15,0,136,233,145,155,77,230,161,221,130,200,236,44,1,64,73,94,
210 128,255,62,63,147,144,32,2,6,7,103,22,178,52,63,0,192,98,107,216,87,56,
211 35,195,48,120,252,110,23,185,114,240,143,23,139,251,252,190,176,81,105,
212 125,47,200,254,105,154,43,206,33,140,175,150,245,39,228,0,0,0,0,73,69,78,
213 68,174,66,96,130};
214 
215 static size_t xml_res_size_2 = 6410;
216 static unsigned char xml_res_file_2[] = {
217 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0,
218 92,114,168,102,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,
219 89,115,0,0,43,165,0,0,43,165,1,137,102,26,50,0,0,0,25,116,69,88,116,83,
220 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
221 46,111,114,103,155,238,60,26,0,0,24,135,73,68,65,84,120,156,237,221,105,
222 120,85,213,185,192,241,255,10,73,152,81,68,20,84,174,181,22,171,32,85,107,
223 181,173,15,125,180,74,65,64,133,130,85,164,14,113,66,172,94,161,106,69,
224 171,64,64,173,120,169,138,67,85,16,209,160,12,82,172,114,11,181,181,150,
225 58,161,60,90,43,215,214,129,50,22,28,65,40,40,25,200,25,214,253,16,3,9,
226 156,36,103,88,251,221,211,251,251,210,199,152,179,223,45,37,255,189,206,
227 201,58,251,24,38,189,153,2,138,80,74,197,78,17,181,213,126,159,131,82,202,
228 39,69,164,147,104,4,148,138,167,186,165,127,58,165,17,80,42,134,118,63,
229 247,215,8,40,21,59,141,95,252,211,8,40,21,43,123,191,250,175,17,80,42,54,
230 50,255,250,79,35,160,84,44,52,253,251,255,250,8,88,43,120,58,74,41,73,205,
231 111,0,74,167,32,81,163,17,80,42,162,90,222,1,168,17,80,42,178,178,219,2,
232 172,17,80,42,146,138,179,254,206,250,8,148,180,161,67,235,86,180,47,105,
233 229,244,68,118,166,210,108,171,73,57,61,166,82,170,121,217,7,0,118,69,96,
234 226,143,122,114,253,73,221,156,158,200,31,87,111,103,224,220,85,78,143,
235 169,148,106,94,238,239,2,76,167,72,212,84,99,245,233,128,82,161,151,215,
236 219,128,211,169,36,85,85,85,26,1,165,66,46,239,251,0,36,147,26,1,165,194,
237 174,160,27,129,104,4,148,10,183,130,239,4,164,17,80,42,188,156,220,10,76,
238 35,160,212,222,78,53,111,114,32,91,253,62,141,102,57,187,23,96,50,153,164,
239 178,178,82,35,160,20,208,158,106,230,113,11,107,205,16,238,53,119,209,141,
240 45,126,159,82,70,78,111,6,154,74,165,52,2,74,1,99,152,207,1,108,165,29,
241 53,92,195,124,86,155,31,115,175,185,43,112,43,2,231,119,3,214,8,168,184,
242 235,68,37,215,153,39,27,125,173,61,213,187,66,48,133,7,232,204,23,62,157,
243 93,99,158,220,14,92,35,160,226,108,44,243,216,175,137,31,240,14,84,49,206,
244 84,240,111,115,38,83,120,128,125,249,82,248,236,26,243,236,243,0,52,2,42,
245 142,246,97,7,99,205,188,22,191,175,227,87,33,88,99,134,82,206,12,246,97,
246 135,192,217,237,205,211,15,4,209,8,168,184,185,142,57,57,45,239,247,227,
247 11,38,154,71,118,133,160,19,149,30,158,221,222,60,255,68,32,141,128,138,
248 139,46,108,103,76,22,87,255,166,30,91,31,130,113,166,130,182,236,116,124,
249 118,153,137,124,36,152,70,64,197,193,245,230,201,130,175,224,251,179,141,
250 41,60,192,122,115,22,227,76,5,109,168,117,116,118,153,137,125,38,160,70,
251 64,69,217,254,108,227,42,22,56,59,222,1,108,101,10,15,240,47,51,140,49,
252 102,190,103,33,16,253,80,80,141,128,138,170,113,166,130,142,84,57,63,110,
253 15,62,99,26,119,177,210,12,103,140,153,79,107,199,33,16,255,84,96,141,128,
254 138,154,110,108,225,103,44,244,116,198,127,241,41,211,184,139,119,205,185,
255 92,200,18,12,110,126,126,124,249,88,112,141,128,138,146,27,121,156,118,
256 212,136,204,58,156,15,185,208,44,193,98,156,28,207,151,0,128,70,64,69,67,
257 119,62,103,148,121,70,116,230,100,46,119,118,44,223,2,0,26,1,21,126,55,
258 51,75,236,87,118,0,127,226,251,188,108,143,115,118,60,95,3,0,26,1,21,94,
259 61,248,140,203,204,34,209,153,229,14,175,254,16,128,0,64,93,4,106,170,171,
260 244,115,7,84,168,220,98,30,117,254,170,124,115,22,219,190,44,183,125,156,
261 30,51,16,1,0,72,167,82,144,208,207,34,84,225,112,40,159,80,198,98,209,153,
262 46,159,251,215,11,76,0,0,72,167,53,2,42,20,38,152,153,148,146,16,155,247,
263 172,61,133,55,233,229,252,184,193,10,0,104,4,84,224,29,206,135,92,200,18,
264 177,121,22,195,36,15,174,254,16,196,0,128,70,64,5,218,4,51,147,98,228,62,
265 198,110,33,167,177,130,35,60,57,118,48,3,0,26,1,21,72,61,217,200,72,254,
266 40,54,47,77,17,183,217,75,60,59,126,112,3,0,117,17,168,213,8,168,224,152,
267 100,166,139,94,253,159,226,71,188,67,79,207,142,31,236,0,0,88,141,128,10,
268 134,94,172,227,92,254,44,54,47,69,17,183,218,75,61,157,17,252,0,128,70,
269 64,5,66,185,153,65,17,105,177,121,115,24,200,251,28,230,233,140,112,4,0,
270 52,2,202,87,71,179,134,225,44,21,155,151,162,136,95,217,139,61,159,19,158,
271 0,128,70,64,249,230,86,30,22,189,250,87,112,6,43,57,212,243,57,225,10,0,
272 104,4,148,184,111,243,1,67,204,75,98,243,18,20,115,187,135,175,252,55,20,
273 190,0,64,131,8,200,21,89,197,215,36,166,59,187,1,71,54,102,217,179,88,203,
274 193,34,179,194,25,0,248,42,2,53,26,1,229,169,239,152,247,25,108,150,137,
275 205,171,165,132,41,148,137,205,11,111,0,64,35,160,60,119,27,15,137,94,253,
276 31,177,67,89,79,119,177,121,225,14,0,104,4,148,103,78,50,239,48,128,215,
277 197,230,213,80,42,122,245,135,40,4,0,52,2,202,19,147,121,88,116,222,195,
278 12,231,67,14,16,157,25,141,0,128,70,64,57,213,215,172,224,52,222,20,155,
279 87,67,41,83,237,5,98,243,234,69,39,0,160,17,80,206,220,198,67,162,243,30,
280 224,28,62,166,171,232,76,136,90,0,64,35,160,10,214,207,188,193,201,252,
281 93,108,94,37,109,125,185,250,67,20,3,0,26,1,85,144,9,204,20,157,119,63,
282 231,178,137,253,68,103,214,139,102,0,64,35,160,242,114,186,121,157,31,240,
283 182,216,188,29,180,227,110,59,82,108,222,158,162,27,0,208,8,168,156,149,
284 51,67,116,222,61,118,36,155,233,44,58,179,161,104,7,0,52,2,42,107,103,242,
285 10,223,229,159,98,243,182,211,129,105,156,39,54,47,147,232,7,0,52,2,170,
286 69,6,203,120,35,251,220,255,110,251,83,182,210,73,116,230,158,226,17,0,
287 208,8,168,102,13,229,37,78,224,61,177,121,219,232,200,125,156,43,54,175,
288 41,241,9,0,104,4,84,70,6,203,68,35,251,220,127,170,189,128,109,116,20,157,
289 153,73,188,2,0,26,1,181,151,159,240,23,142,97,149,216,188,45,236,195,253,
290 1,184,250,67,28,3,0,26,1,181,75,17,105,110,49,143,138,206,188,147,139,248,
291 146,118,162,51,155,18,207,0,128,70,64,1,48,130,231,233,195,106,177,121,
292 155,233,204,67,118,184,216,188,150,196,55,0,160,17,136,185,86,164,25,47,
293 124,245,191,131,50,118,4,228,234,15,113,15,0,104,4,98,236,124,254,192,145,
294 172,23,155,247,9,251,51,221,14,19,155,151,13,13,0,104,4,98,168,21,105,126,
295 105,30,19,157,249,43,123,49,85,180,17,157,217,18,13,64,61,141,64,172,148,
296 241,123,142,96,131,216,188,143,233,202,163,12,17,155,151,45,13,64,67,26,
297 129,88,40,33,41,126,245,191,213,94,74,53,173,69,103,102,67,3,176,39,141,
298 64,228,93,202,34,190,206,71,98,243,54,208,141,89,156,37,54,47,23,26,128,
299 76,244,115,7,34,171,148,4,227,76,133,232,204,201,246,50,106,41,17,157,153,
300 45,13,64,83,172,213,8,68,208,40,158,225,107,124,34,54,111,61,221,121,130,
301 65,98,243,114,165,1,104,142,70,32,82,218,80,43,126,245,47,183,163,2,123,
302 245,7,13,64,203,52,2,145,113,165,89,200,33,108,18,155,183,138,30,204,97,
303 160,216,188,124,104,0,178,81,31,129,180,70,32,172,218,178,147,235,121,82,
304 116,102,185,29,69,146,86,162,51,115,165,1,200,150,181,144,208,8,132,213,
305 213,102,1,7,177,89,108,222,123,28,198,124,250,139,205,203,151,6,32,23,26,
306 129,80,106,79,181,248,213,127,146,29,69,58,4,63,94,193,63,195,160,201,35,
307 2,39,154,119,185,136,197,162,59,207,212,110,215,152,167,56,128,173,98,243,
308 254,193,55,88,200,169,98,243,10,81,236,247,9,132,82,125,4,74,218,66,81,
309 243,13,29,197,51,220,207,84,74,77,2,128,47,104,207,27,182,55,203,56,134,
310 183,56,138,87,56,54,16,119,134,137,170,14,84,241,115,230,138,206,44,39,
311 28,87,127,208,0,228,175,133,8,180,161,150,251,205,84,46,227,217,70,95,239,
312 68,37,253,204,27,244,227,13,0,82,20,177,146,67,121,149,99,89,102,235,162,
313 240,30,135,97,49,34,255,25,81,119,45,115,233,202,127,196,230,189,205,55,
314 121,198,158,34,54,175,80,26,128,66,52,17,129,30,124,198,66,198,113,34,239,
315 182,120,136,86,164,233,197,58,122,177,142,81,230,25,0,62,165,11,127,179,
316 71,241,22,71,241,170,169,11,67,16,247,145,7,221,62,236,96,172,153,39,58,
317 115,162,189,34,84,241,214,0,20,106,143,8,244,55,203,153,203,45,116,97,123,
318 222,135,236,198,22,206,48,175,114,6,175,2,80,107,74,248,187,61,146,229,
319 230,104,94,179,223,226,105,78,13,205,18,211,79,215,49,135,206,124,33,54,
320 239,77,122,177,152,190,98,243,92,208,191,69,46,88,139,73,84,113,131,125,
321 156,63,48,166,160,31,254,76,74,73,240,61,243,15,198,50,143,5,230,38,206,
322 102,169,211,227,71,81,23,182,51,70,175,254,45,210,0,56,208,129,106,42,152,
323 200,205,137,223,136,252,138,112,162,153,65,17,250,171,200,230,92,199,147,
324 116,162,82,108,222,235,244,225,57,78,18,155,231,138,6,160,64,61,217,200,
325 11,230,74,206,226,101,172,133,202,4,164,60,254,217,236,197,58,93,5,52,99,
326 127,182,113,181,89,32,58,115,2,163,69,231,185,162,1,40,192,32,150,177,212,
327 140,230,72,254,189,235,107,82,17,208,85,64,211,198,153,10,58,82,37,54,111,
328 25,199,240,130,61,81,108,158,75,26,128,60,20,147,162,156,25,204,49,227,
329 51,254,69,147,136,128,174,2,50,235,198,22,126,198,66,209,153,183,112,165,
330 232,60,151,52,0,57,234,202,127,120,150,235,25,107,230,97,176,77,126,159,
331 68,4,38,152,71,116,21,176,135,113,166,130,118,212,136,205,91,106,79,224,
332 69,123,188,216,60,215,52,0,57,56,150,149,44,53,63,163,175,89,145,213,247,
333 123,29,129,222,172,213,85,64,3,221,249,156,43,248,157,232,204,73,230,114,
334 209,121,174,105,0,178,84,198,98,158,55,255,77,15,62,205,233,113,94,71,64,
335 95,11,216,237,102,102,209,150,157,98,243,254,196,247,121,217,30,39,54,207,
336 11,26,128,22,180,161,150,251,204,175,153,102,238,162,148,68,94,199,240,
337 50,2,189,88,199,112,93,5,208,131,207,184,204,44,18,157,89,78,184,175,254,
338 160,1,104,214,193,108,98,9,99,184,144,37,5,31,203,203,8,76,212,215,2,184,
339 153,89,180,166,86,108,222,18,250,178,220,246,17,155,231,21,13,64,19,250,
340 154,21,188,104,70,115,188,249,192,217,49,189,138,64,111,214,198,122,21,
341 112,40,159,112,177,249,189,232,204,73,54,252,87,127,208,0,236,197,96,185,
342 142,57,44,226,58,79,222,69,230,85,4,38,152,153,177,93,5,140,55,143,230,
343 253,244,44,31,139,56,153,55,233,37,54,207,75,26,128,6,58,80,77,133,41,103,
344 188,153,73,43,15,127,152,188,136,192,209,172,137,229,42,224,112,62,228,
345 34,22,139,205,179,24,202,237,40,177,121,94,211,0,124,165,225,150,94,9,94,
346 68,32,142,175,5,76,48,51,41,38,37,54,239,105,123,42,43,56,66,108,158,215,
347 52,0,100,222,210,43,193,117,4,226,246,90,64,79,54,50,146,63,138,205,75,
348 83,196,173,92,42,54,79,66,172,3,80,76,138,219,205,67,77,110,233,149,224,
349 58,2,227,205,163,177,89,5,148,155,25,162,87,255,5,244,227,29,122,138,205,
350 147,16,219,0,116,97,59,11,25,199,85,44,104,118,75,175,4,151,17,232,195,
351 106,134,153,191,22,126,160,128,235,197,58,70,240,188,216,188,20,69,76,182,
352 151,137,205,147,18,203,0,28,203,74,94,52,163,57,197,188,229,247,169,236,
353 82,31,129,164,131,8,148,19,253,221,129,229,194,59,32,231,114,58,239,115,
354 152,216,60,41,177,11,64,190,91,122,37,88,11,85,14,34,208,155,181,145,94,
355 5,72,255,198,35,69,17,183,219,75,196,230,73,138,77,0,92,108,233,149,224,
356 42,2,81,94,5,220,202,195,162,255,109,21,156,193,74,14,21,155,39,41,22,1,
357 112,185,165,87,130,139,8,68,117,21,240,109,62,96,136,121,73,108,94,130,
358 226,200,94,253,33,6,1,240,98,75,175,4,23,17,136,226,42,96,18,211,69,95,
359 180,125,140,51,89,203,193,98,243,164,69,54,0,6,203,88,51,207,179,45,189,
360 18,10,141,64,111,214,242,99,94,116,122,78,126,58,158,247,25,108,150,137,
361 205,171,165,132,41,182,76,108,158,31,34,25,128,250,45,189,229,204,240,116,
362 75,175,132,66,35,48,201,76,143,204,42,224,118,243,144,232,213,255,17,59,
363 148,117,28,36,54,207,15,145,11,192,145,172,231,69,51,74,108,75,111,62,82,
364 57,254,177,23,18,129,168,172,2,78,50,239,48,128,215,197,230,213,80,202,
365 29,92,44,54,207,47,145,10,192,32,150,241,103,115,21,223,224,67,191,79,37,
366 35,139,225,97,134,243,115,123,109,238,143,45,32,2,81,88,5,76,230,97,209,
367 121,211,237,48,62,162,171,232,76,63,68,34,0,173,72,55,123,151,222,32,216,
368 65,91,202,152,200,141,246,106,230,48,144,213,28,146,243,49,242,141,64,216,
369 87,1,125,205,10,78,227,77,177,121,53,148,50,149,11,197,230,249,41,244,1,
370 232,194,118,158,230,134,22,239,210,235,167,213,28,66,63,251,32,139,236,
371 201,64,221,83,128,123,236,79,243,58,86,190,17,8,243,42,224,86,43,123,245,
372 127,128,115,98,113,245,135,144,7,32,136,91,122,247,244,156,61,137,83,237,
373 195,124,192,215,26,125,125,62,253,243,90,5,64,126,17,8,235,42,160,159,121,
374 67,244,255,223,74,218,50,213,94,32,54,207,111,161,13,64,144,183,244,66,
375 221,85,190,156,81,140,228,54,190,160,125,198,127,159,239,42,0,242,139,64,
376 24,87,1,19,152,41,58,239,126,206,101,19,251,137,206,244,83,232,2,208,58,
377 4,91,122,183,176,15,103,219,59,153,102,207,107,246,211,98,11,89,5,64,238,
378 17,232,205,90,134,10,238,162,43,212,233,230,117,126,192,219,98,243,118,
379 208,142,187,237,72,177,121,65,16,170,0,28,204,38,254,16,240,45,189,255,
380 199,17,252,208,78,231,175,124,167,197,239,45,116,21,0,95,189,139,176,54,
381 251,8,76,34,60,171,128,114,102,136,206,187,199,142,100,51,157,69,103,250,
382 45,52,1,8,195,150,222,249,244,103,128,189,143,13,28,152,211,99,10,89,5,
383 212,203,54,2,71,179,38,20,171,128,51,204,43,124,151,127,138,205,219,78,
384 7,166,113,158,216,188,160,8,124,0,194,176,165,119,39,165,140,177,215,51,
385 218,222,68,13,173,115,122,172,139,85,64,189,108,35,16,244,85,128,193,138,
386 63,247,191,135,145,108,165,147,232,204,32,8,116,0,194,176,165,247,99,186,
387 50,216,78,163,130,193,121,31,99,62,253,89,227,232,13,39,149,181,144,104,
388 225,46,89,65,95,5,12,229,37,78,224,61,177,121,219,232,200,189,118,132,216,
389 188,32,9,108,0,164,239,210,155,143,101,28,195,41,118,58,127,227,168,130,
390 142,227,114,21,0,117,47,12,182,20,129,160,174,2,12,150,137,70,246,185,255,
391 84,123,1,219,232,40,58,51,40,2,25,128,65,44,227,47,230,74,241,187,244,102,
392 171,126,75,239,16,123,23,155,28,189,104,52,143,1,206,86,1,208,114,4,130,
393 186,10,56,155,191,112,12,171,196,230,109,97,31,238,231,92,177,121,65,19,
394 168,0,52,220,210,219,137,74,191,79,39,163,134,91,122,147,180,114,118,92,
395 215,171,0,104,57,2,65,91,5,20,145,102,188,121,84,116,230,255,216,11,249,
396 146,118,162,51,131,36,48,1,40,37,25,186,45,189,174,185,94,5,64,243,17,56,
397 154,53,12,9,208,83,172,17,60,79,31,86,139,205,219,76,103,30,228,108,177,
398 121,65,20,152,0,156,104,222,13,229,150,94,151,188,88,5,64,243,17,152,108,
399 100,239,175,215,148,86,62,92,253,239,160,140,29,49,190,250,67,128,2,208,
400 134,157,126,159,66,70,45,109,233,117,205,139,85,0,52,29,129,160,172,2,126,
401 202,115,28,201,122,177,121,159,176,63,211,237,48,177,121,65,21,152,0,4,
402 81,182,91,122,93,242,106,21,0,77,71,192,239,85,64,43,210,220,108,102,137,
403 206,188,131,50,170,104,35,58,51,136,52,0,77,200,101,75,175,107,94,173,2,
404 32,115,4,252,94,5,148,241,123,142,96,131,216,188,143,233,202,76,59,84,108,
405 94,144,105,0,50,200,103,75,175,75,41,138,152,230,225,155,82,50,69,192,175,
406 85,64,9,73,126,105,30,19,157,121,171,189,148,234,28,119,108,70,149,6,160,
407 129,66,182,244,186,54,159,254,172,167,187,103,199,223,51,2,126,173,2,46,
408 49,255,203,215,249,72,108,222,6,186,49,139,179,196,230,5,157,6,224,43,46,
409 182,244,186,148,160,152,187,236,249,158,206,216,51,2,19,204,35,162,191,
410 130,45,37,193,141,60,46,54,15,234,174,254,181,148,136,206,12,50,13,0,238,
411 182,244,186,230,245,42,0,26,71,224,88,254,37,250,169,59,163,120,134,175,
412 241,137,216,188,245,116,103,118,64,2,31,20,177,14,128,23,91,122,93,146,
413 88,5,64,227,8,76,68,102,21,208,134,90,198,153,10,207,231,52,84,110,71,233,
414 213,127,15,177,13,128,87,91,122,93,147,88,5,192,238,8,72,173,2,70,243,52,
415 135,176,201,243,57,245,86,209,131,57,12,20,155,23,22,177,12,128,215,91,
416 122,93,146,90,5,192,238,8,120,189,10,104,203,78,126,97,158,240,236,248,
417 153,76,178,163,2,29,122,191,196,46,0,139,236,201,156,98,103,120,186,165,
418 215,181,249,244,231,223,116,19,153,85,149,128,222,41,111,87,1,87,241,91,
419 14,98,179,103,199,223,211,251,28,198,124,250,139,205,11,147,216,4,160,126,
420 75,111,25,19,217,65,91,191,79,39,39,146,171,0,168,139,192,205,169,25,158,
421 172,2,218,83,45,126,245,47,183,163,114,254,56,182,184,136,197,159,138,31,
422 91,122,93,155,199,0,145,215,2,234,245,76,172,226,204,244,82,231,199,189,
423 198,60,197,1,108,117,126,220,166,188,203,215,89,200,169,98,243,194,38,242,
424 1,240,115,75,175,75,9,138,185,219,163,247,8,52,229,23,137,153,152,148,187,
425 91,175,119,160,138,159,51,215,217,241,178,49,129,209,164,163,255,215,60,
426 111,145,254,147,241,123,75,175,107,210,171,128,62,172,102,96,98,41,164,
427 146,78,142,119,45,115,69,111,236,250,54,223,228,25,123,138,216,188,48,138,
428 100,0,130,180,165,215,37,63,86,1,55,154,10,76,162,26,10,92,9,236,195,14,
429 198,154,121,142,206,42,59,19,237,21,161,125,202,39,37,114,1,8,218,150,94,
430 215,164,87,1,223,98,21,3,121,13,18,59,11,138,192,181,102,14,157,249,194,
431 225,153,53,239,45,142,98,49,125,197,230,133,85,164,2,16,212,45,189,46,249,
432 182,10,192,230,29,129,125,249,146,107,120,202,131,51,107,218,120,59,90,
433 175,254,89,136,68,0,130,190,165,215,181,121,12,16,219,23,0,13,86,1,144,
434 87,4,110,96,54,251,242,165,7,103,150,217,235,244,225,57,78,18,155,23,102,
435 161,15,64,88,182,244,186,84,183,10,144,219,23,0,13,86,1,144,83,4,246,103,
436 27,87,155,5,30,158,217,222,38,48,90,116,94,152,133,58,0,97,218,210,235,
437 218,92,63,87,1,144,117,4,110,96,54,29,169,242,240,204,26,91,198,49,188,
438 96,79,20,155,23,118,161,13,128,196,93,122,131,204,247,85,0,180,24,129,110,
439 108,225,42,243,91,129,51,219,237,22,174,20,157,23,118,161,11,64,138,34,
440 166,216,139,196,238,210,27,100,126,172,2,78,55,175,55,254,98,51,17,24,103,
441 42,104,71,141,192,153,213,89,106,79,224,69,123,188,216,188,40,8,85,0,234,
442 183,244,78,161,76,95,225,197,159,85,192,77,60,190,247,123,4,50,68,160,59,
443 159,115,5,191,19,60,51,152,100,46,23,157,23,5,161,9,64,84,182,244,186,22,
444 136,85,0,236,21,129,95,154,199,104,43,248,89,15,127,226,251,188,108,143,
445 19,155,23,21,161,8,64,212,182,244,186,148,160,216,179,207,17,104,74,198,
446 85,0,236,138,64,15,62,227,114,158,21,61,167,114,244,234,159,143,64,7,32,
447 170,91,122,93,155,195,233,193,88,5,0,36,118,50,46,53,147,214,212,138,157,
448 207,18,250,178,220,246,17,155,23,37,129,13,64,212,183,244,186,20,164,85,
449 64,15,62,227,156,228,18,106,155,249,84,98,215,38,115,153,220,176,136,9,
450 100,0,226,176,165,215,181,160,172,2,110,48,179,41,37,65,117,2,145,8,60,
451 107,79,225,13,219,219,251,65,17,21,152,0,108,176,221,99,183,165,215,165,
452 32,172,2,14,227,99,70,240,252,174,127,246,58,2,22,195,36,125,238,95,144,
453 192,4,96,21,135,48,132,95,199,106,75,175,107,115,56,157,13,194,171,128,
454 1,44,223,245,207,227,204,108,74,104,124,239,0,47,35,240,59,126,200,10,142,
455 240,230,224,49,17,152,0,88,12,47,219,111,251,125,26,161,230,199,59,5,111,
456 50,117,171,128,195,249,136,179,121,33,227,247,120,17,129,52,69,76,182,250,
457 220,191,80,129,9,128,114,67,250,181,128,99,248,23,3,88,206,141,230,113,
458 138,105,250,167,220,117,4,22,208,143,119,232,233,238,128,49,165,1,136,24,
459 63,94,11,184,195,60,192,112,90,190,129,104,117,2,118,58,184,187,88,138,
460 34,38,89,125,238,239,130,6,32,130,164,87,1,135,241,113,214,31,45,94,147,
461 44,60,2,115,57,61,182,111,2,115,77,3,16,65,9,138,153,198,72,191,79,163,
462 73,133,68,32,69,17,183,219,75,220,158,80,140,105,0,34,234,73,59,80,116,
463 21,144,171,124,35,48,155,193,172,228,80,247,39,20,83,26,128,136,10,250,
464 42,0,114,143,64,130,98,110,179,151,122,119,66,49,164,1,136,176,160,175,
465 2,32,183,8,60,198,153,172,229,96,111,79,40,102,52,0,17,22,134,85,0,100,
466 23,129,4,197,76,177,101,34,231,19,39,26,128,136,123,210,14,20,221,29,152,
467 175,150,34,240,8,67,89,199,65,114,39,20,19,26,128,136,75,80,204,52,123,
468 158,223,167,145,149,166,34,80,67,41,119,216,139,229,79,40,6,52,0,49,240,
469 4,131,66,177,10,128,204,17,152,110,135,241,33,7,248,115,66,17,167,1,136,
470 129,48,173,2,160,113,4,106,40,101,42,23,250,123,66,17,166,1,136,137,48,
471 173,2,96,119,4,126,99,207,225,35,186,250,125,58,145,165,1,136,137,176,173,
472 2,0,182,38,219,112,103,114,132,223,167,17,105,26,128,24,9,219,42,96,58,
473 195,216,156,108,15,73,185,251,11,198,141,6,32,70,194,180,10,168,164,45,
474 191,177,63,169,251,135,100,173,70,192,35,26,128,152,9,203,42,224,65,206,
475 230,115,246,221,253,5,141,128,39,52,0,49,147,160,152,123,9,246,243,234,
476 47,104,207,131,245,87,255,134,52,2,206,105,0,98,104,182,29,28,232,85,192,
477 131,252,132,255,208,49,243,191,212,8,56,165,1,136,161,32,175,2,182,211,
478 129,135,236,240,230,191,73,35,224,140,6,32,166,130,186,10,184,207,142,96,
479 59,29,90,254,70,141,128,19,26,128,152,10,226,42,96,43,157,152,206,176,236,
480 31,160,17,40,152,6,32,198,130,182,10,184,215,158,199,14,218,230,246,32,
481 141,64,65,52,0,49,22,164,85,192,38,58,243,8,67,243,123,176,70,32,111,26,
482 128,152,123,194,14,98,99,0,86,1,247,218,17,84,209,38,255,3,104,4,242,162,
483 1,136,185,90,74,184,215,250,187,10,248,148,46,204,98,72,225,7,210,8,228,
484 76,3,160,152,141,191,171,128,123,24,73,53,173,221,28,76,35,144,19,13,128,
485 242,117,21,240,41,251,83,97,7,187,61,168,70,32,107,26,0,5,248,183,10,152,
486 202,249,212,184,186,250,55,164,17,200,138,6,64,1,117,171,128,105,194,191,
487 17,216,72,55,158,176,131,188,27,160,17,104,145,6,64,237,34,253,27,129,169,
488 246,124,106,41,241,118,136,70,160,89,26,0,181,139,228,107,1,27,232,198,
489 124,250,139,204,34,89,11,137,157,50,179,66,70,3,160,26,145,122,45,96,138,
490 45,243,254,234,223,80,42,161,17,200,64,3,160,26,169,165,132,251,56,215,
491 211,25,107,56,152,5,244,243,116,70,70,26,129,189,104,0,212,94,42,236,96,
492 79,87,1,119,218,50,146,180,242,236,248,205,210,8,52,82,236,247,9,168,224,
493 169,165,132,65,118,26,93,216,214,236,247,181,50,150,142,84,230,124,252,
494 87,56,46,223,83,115,35,149,168,251,223,18,15,126,253,24,50,26,0,149,209,
495 70,14,100,35,7,54,255,77,86,230,92,60,161,17,0,244,41,128,138,51,125,58,
496 160,1,80,49,23,243,8,104,0,148,138,113,4,52,0,74,65,108,35,160,1,80,170,
497 94,12,35,160,1,80,170,161,152,69,64,3,160,212,158,98,20,1,13,128,82,153,
498 196,36,2,26,0,165,154,18,131,8,104,0,148,106,78,42,1,137,26,191,207,194,
499 51,26,0,165,90,146,74,70,54,2,26,0,165,178,17,209,8,104,0,148,202,86,4,
500 35,160,1,80,42,23,17,139,128,6,64,169,92,69,40,2,26,0,165,242,17,145,8,
501 104,0,148,202,87,4,34,160,1,80,170,16,33,143,128,6,64,169,66,133,56,2,26,
502 0,165,92,8,105,4,52,0,74,185,18,194,8,104,0,148,114,41,100,17,208,0,40,
503 229,90,136,34,160,1,80,202,11,169,36,212,86,251,125,22,45,210,0,40,229,
504 149,116,42,240,17,208,0,40,229,165,128,71,64,3,160,148,215,2,28,1,13,128,
505 82,18,2,26,1,13,128,82,82,2,24,129,188,62,29,184,93,137,251,110,116,40,
506 109,69,175,174,109,157,31,87,169,160,49,69,80,212,218,237,223,245,205,85,
507 73,62,221,145,200,249,113,121,5,224,184,238,237,243,121,88,179,190,119,
508 72,123,94,187,228,72,231,199,85,42,136,138,139,139,105,223,222,221,207,
509 209,61,203,63,227,218,231,55,230,252,56,125,10,160,148,15,146,201,36,149,
510 149,149,126,159,134,6,64,41,191,4,33,2,26,0,165,124,228,119,4,52,0,74,249,
511 172,62,2,214,90,241,217,26,0,165,2,32,153,76,82,85,85,37,30,1,13,128,82,
512 1,225,71,4,52,0,74,5,136,116,4,52,0,74,5,140,100,4,52,0,74,5,144,84,4,52,
513 0,74,5,148,68,4,52,0,74,5,152,215,17,208,0,40,21,112,94,70,64,3,160,84,
514 8,120,21,1,13,128,82,33,225,69,4,52,0,74,133,136,235,8,104,0,148,10,25,
515 151,239,29,208,0,40,21,66,169,84,202,73,4,52,0,74,133,148,139,8,104,0,148,
516 10,177,66,35,144,87,0,94,219,248,101,94,195,148,82,238,165,82,41,106,107,
517 170,32,143,8,24,110,90,154,170,187,79,105,246,218,151,22,121,114,103,96,
518 165,84,126,170,18,105,42,147,64,73,91,48,38,235,199,229,117,87,224,202,
519 218,52,149,181,233,124,30,170,148,242,82,162,58,167,8,232,101,92,169,40,
520 73,167,235,34,144,229,211,1,13,128,82,81,147,67,4,52,0,74,69,81,150,17,
521 208,0,40,21,85,89,68,64,3,160,84,148,181,16,1,13,128,82,81,215,76,4,52,
522 0,74,197,65,19,17,208,0,40,21,23,25,34,160,1,80,42,78,246,136,128,6,64,
523 169,184,105,16,1,13,128,82,113,244,85,4,254,31,121,241,55,153,214,40,101,
524 56,0,0,0,0,73,69,78,68,174,66,96,130};
525 
526 static size_t xml_res_size_3 = 987;
527 static unsigned char xml_res_file_3[] = {
528 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
529 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
530 72,89,115,0,0,5,98,0,0,5,98,1,172,97,92,156,0,0,0,25,116,69,88,116,83,111,
531 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
532 111,114,103,155,238,60,26,0,0,3,88,73,68,65,84,88,133,197,151,123,104,141,
533 97,24,192,127,239,217,185,76,10,209,140,105,229,210,92,74,174,115,89,91,
534 20,139,134,48,127,80,194,220,134,63,8,145,63,196,54,119,43,33,252,97,182,
535 154,40,162,200,106,214,148,132,153,68,211,102,180,37,119,25,67,238,235,
536 236,59,231,59,123,253,113,182,119,59,190,239,59,151,156,195,243,215,251,
537 60,207,251,188,207,239,125,222,219,247,9,242,238,74,226,28,252,47,177,227,
538 213,72,238,233,100,250,144,62,0,220,122,253,147,151,223,180,127,6,96,3,
539 24,213,219,70,81,86,18,165,243,6,50,105,64,247,152,36,74,166,153,25,226,
540 158,57,0,128,219,237,198,227,241,196,36,57,192,78,81,194,53,54,80,69,46,
541 233,212,25,1,58,32,218,116,111,212,147,15,162,137,229,148,3,144,33,106,
542 25,79,131,57,0,128,207,211,10,122,116,43,145,39,138,113,160,3,240,142,4,
543 138,88,96,13,0,248,1,162,4,145,194,91,150,82,161,244,253,114,37,26,206,
544 16,0,81,132,200,19,197,196,209,6,192,27,250,81,194,188,0,191,53,64,20,32,
545 134,243,138,197,92,83,250,94,185,10,15,129,119,78,112,128,63,32,250,243,
546 57,34,128,2,113,10,91,251,236,95,146,196,105,230,24,250,132,6,0,156,122,
547 11,39,244,125,52,137,44,62,136,153,28,17,135,67,198,140,228,57,11,185,174,
548 244,61,114,53,94,236,145,3,36,241,137,10,177,145,37,190,43,104,58,36,242,
549 133,77,156,39,85,52,4,141,219,69,17,2,9,192,51,146,57,195,108,211,126,65,
550 1,50,68,45,183,196,90,82,219,207,109,171,14,154,255,52,145,47,139,45,227,
551 198,240,148,108,113,179,19,70,230,226,179,72,101,9,176,94,92,160,140,45,
552 36,240,85,217,170,25,173,32,230,136,170,128,11,165,171,116,157,125,35,3,
553 57,199,76,75,88,3,128,11,141,82,177,139,189,156,84,199,199,131,131,77,114,
554 11,179,229,81,106,25,166,32,242,133,177,10,169,162,129,185,226,118,39,140,
555 204,165,45,72,161,13,158,29,162,148,108,110,42,189,137,4,178,56,166,118,
556 240,65,153,3,248,151,99,134,94,197,56,26,3,226,119,115,82,181,159,48,152,
557 139,100,90,38,55,5,72,226,147,106,87,49,150,41,242,20,53,114,184,178,85,
558 146,70,29,67,21,196,118,189,72,249,210,168,39,139,187,74,47,96,77,208,217,
559 155,2,116,200,113,22,49,95,30,226,51,189,12,190,66,185,76,181,51,125,119,
560 24,163,63,6,2,103,95,71,10,151,228,180,160,201,77,1,126,208,157,28,10,216,
561 41,215,89,238,220,10,210,121,68,138,210,183,249,74,72,215,31,144,41,238,
562 43,91,190,92,139,68,68,14,176,77,110,160,76,78,13,25,88,72,103,21,102,81,
563 205,81,223,1,90,219,143,104,13,35,40,35,244,24,166,0,94,194,251,62,172,
564 144,233,60,102,136,210,83,120,139,166,251,247,69,190,92,19,214,24,166,0,
565 225,138,68,80,72,142,193,94,173,143,224,170,62,49,246,0,0,229,50,131,39,
566 93,170,0,176,159,21,17,189,162,198,215,33,2,145,8,246,176,138,173,156,5,
567 224,5,3,184,33,39,248,157,29,0,118,167,69,116,20,0,0,42,101,26,149,164,
568 153,59,195,128,248,171,37,8,75,66,44,71,236,1,66,64,216,1,122,184,226,148,
569 97,100,223,110,124,215,124,49,225,176,57,156,216,28,46,0,30,190,111,225,
570 99,139,238,7,24,218,59,94,117,218,60,57,145,205,147,19,99,2,0,224,114,185,
571 136,143,143,39,251,226,51,174,52,126,251,251,77,24,169,104,90,224,127,167,
572 29,224,114,227,87,117,107,127,248,229,229,135,167,45,230,32,53,239,90,1,
573 225,7,168,111,118,83,223,236,142,121,82,131,216,157,252,6,173,114,47,95,
574 172,143,154,9,0,0,0,0,73,69,78,68,174,66,96,130};
575 
576 static size_t xml_res_size_4 = 1881;
577 static unsigned char xml_res_file_4[] = {
578 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,64,0,0,0,64,8,6,0,0,
579 0,170,105,113,222,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
580 72,89,115,0,0,10,233,0,0,10,233,1,253,117,206,211,0,0,0,25,116,69,88,116,
581 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
582 101,46,111,114,103,155,238,60,26,0,0,6,214,73,68,65,84,120,156,229,155,
583 121,108,84,69,28,199,63,211,61,186,96,57,228,80,17,84,130,136,8,65,140,
584 26,60,162,81,84,98,168,128,130,130,45,32,10,4,80,140,114,41,90,64,40,162,
585 65,81,20,8,162,128,66,41,8,114,40,209,152,200,81,4,131,9,40,136,26,84,136,
586 86,228,16,139,128,96,45,236,118,119,223,238,248,199,186,237,110,119,222,
587 219,247,246,173,108,91,190,255,237,252,126,111,102,222,103,102,126,115,
588 188,89,193,212,29,18,135,147,243,85,89,4,43,33,164,101,186,30,25,83,22,
589 192,249,12,161,186,239,7,43,153,114,123,59,114,59,54,139,115,216,118,176,
590 130,73,159,31,61,215,245,58,103,138,27,252,151,93,16,226,198,139,179,113,
591 185,92,85,105,199,206,4,207,121,165,236,202,73,136,16,89,72,68,82,223,172,
592 154,9,94,175,151,96,176,238,189,116,172,158,20,107,217,43,242,232,79,9,
593 2,105,232,155,0,0,234,54,4,15,1,158,165,152,206,28,96,141,40,224,123,49,
594 208,16,132,18,0,212,93,8,163,89,75,107,78,84,253,238,66,41,107,68,1,59,
595 196,48,186,242,75,130,191,46,0,136,64,8,105,117,7,194,5,248,152,40,138,
596 149,182,235,217,79,5,13,19,210,13,1,0,248,125,62,8,213,13,8,79,177,154,
597 139,57,165,180,21,209,139,3,180,78,72,79,10,0,128,160,191,214,67,200,193,
598 203,120,177,82,105,11,226,100,166,28,170,180,153,3,0,181,30,194,88,86,209,
599 146,211,74,219,98,30,224,55,46,85,218,204,3,128,90,11,161,9,103,24,167,
600 211,250,126,220,186,173,15,86,1,64,173,132,48,142,149,52,227,31,165,109,
601 33,253,248,157,139,116,159,181,14,0,106,21,132,166,84,48,70,124,160,180,
602 85,226,102,150,28,98,248,124,106,0,160,214,64,120,134,21,52,165,66,105,
603 123,75,14,224,40,45,13,159,79,29,0,100,28,66,115,202,121,90,167,245,207,
604 210,128,215,120,36,105,30,246,0,64,70,33,76,20,197,52,194,171,180,205,151,
605 3,248,147,102,74,91,172,236,3,128,140,64,104,193,223,140,102,157,210,118,
606 134,134,188,193,64,83,249,164,7,0,36,64,184,75,236,162,3,135,211,150,125,
607 77,21,136,34,114,116,90,127,174,204,227,184,137,214,135,26,231,1,182,21,
608 244,227,33,192,91,206,55,24,198,39,32,224,36,77,217,65,23,118,202,46,44,
609 163,87,210,160,100,70,173,56,201,19,58,173,95,78,14,179,25,100,58,175,180,
610 2,184,148,19,20,107,211,184,93,236,3,71,36,173,5,127,211,155,237,244,22,
611 219,233,196,1,6,203,25,182,203,41,160,136,6,248,149,182,57,50,159,211,52,
612 54,157,87,218,134,64,119,118,179,93,140,224,70,246,225,11,66,32,148,232,
613 147,199,38,58,114,208,86,57,109,56,206,8,177,94,105,59,77,99,222,52,57,
614 246,163,178,13,64,32,25,199,74,214,137,231,104,78,121,85,186,10,130,131,
615 48,47,136,247,108,149,55,137,165,120,8,40,109,179,25,68,57,57,150,242,179,
616 5,160,17,94,150,139,169,76,19,139,113,16,78,176,171,32,60,108,163,23,92,
617 65,25,195,197,199,74,219,73,154,50,79,230,89,206,51,101,0,87,113,132,205,
618 98,52,189,248,210,208,175,38,4,7,97,38,139,37,41,149,57,69,44,193,141,122,
619 186,125,157,193,202,3,143,100,74,9,192,253,226,11,182,138,81,116,228,144,
620 41,255,154,16,242,217,200,213,38,159,141,170,29,71,121,148,79,149,182,227,
621 52,99,190,28,96,41,191,168,44,1,112,16,166,144,69,20,49,157,28,124,134,
622 190,171,233,193,100,249,68,213,111,95,16,252,90,117,62,83,44,198,130,23,
623 196,187,184,80,127,188,121,85,14,225,44,13,44,229,23,149,105,0,205,41,231,
624 67,38,50,86,172,50,60,106,214,112,80,200,72,70,201,73,44,162,31,135,185,
625 164,202,86,169,85,67,200,103,163,233,88,208,158,35,12,230,51,165,237,24,
626 205,121,135,7,205,190,70,130,76,1,232,202,207,108,21,143,115,167,248,198,
627 208,175,140,22,228,202,121,204,145,249,64,228,40,106,46,241,129,41,10,193,
628 74,44,40,20,139,112,162,152,87,129,153,242,49,188,120,76,229,163,82,82,
629 0,109,56,206,70,241,52,151,115,204,208,111,7,215,114,167,92,200,215,116,
630 138,75,47,150,247,197,245,2,168,134,96,166,23,116,224,48,121,108,82,218,
631 202,104,193,98,250,38,123,5,67,37,5,112,29,63,227,209,89,117,69,85,68,47,
632 250,200,217,202,221,151,170,23,64,4,130,166,37,239,5,47,138,119,148,83,
633 44,192,12,134,227,35,219,240,249,100,178,181,14,56,75,3,134,201,169,140,
634 149,19,8,26,172,170,85,189,0,34,16,250,105,250,51,66,103,14,208,159,45,
635 74,219,97,46,97,137,236,147,90,197,99,148,50,128,82,218,112,183,92,192,
636 71,116,79,234,27,196,89,21,23,18,108,90,152,231,67,139,149,182,233,98,33,
637 89,58,173,255,146,28,142,31,183,249,10,235,40,37,0,27,228,205,220,45,223,
638 102,63,109,77,63,179,156,92,101,47,0,232,163,109,166,131,86,26,151,214,
639 133,82,250,178,77,233,127,136,86,44,227,62,211,101,27,201,18,0,137,96,142,
640 204,103,32,47,91,94,115,235,197,2,136,204,8,227,67,75,65,171,94,227,191,
641 196,219,186,173,95,40,71,18,192,165,180,89,149,105,0,167,104,204,67,242,
642 21,10,25,73,56,197,145,179,92,230,114,68,167,23,244,167,132,171,180,95,
643 65,11,112,3,251,232,45,182,43,253,74,185,140,21,244,76,169,124,149,146,
644 190,73,5,13,217,75,123,186,203,133,108,161,155,173,194,2,184,152,171,179,
645 97,113,16,102,130,88,1,90,128,169,161,5,186,139,173,233,114,4,90,244,176,
646 33,13,74,10,224,43,58,211,67,206,231,144,78,203,89,213,114,122,114,84,231,
647 67,69,127,74,200,99,35,119,104,59,171,86,140,177,218,79,91,86,113,111,90,
648 234,17,85,82,0,149,100,83,105,115,174,141,149,31,183,238,129,165,131,48,
649 11,196,172,72,185,49,203,230,168,166,203,17,132,210,120,140,9,233,60,20,
650 181,32,163,88,16,27,248,98,33,252,72,59,214,112,79,218,235,146,17,0,70,
651 177,160,166,162,16,166,201,81,41,7,95,35,101,4,0,64,49,250,189,160,166,
652 246,104,237,88,175,221,250,191,212,35,99,0,172,244,130,25,12,39,172,105,
653 113,235,132,116,41,99,0,192,120,70,136,234,91,121,53,27,228,45,145,31,90,
654 32,237,16,50,10,192,143,155,57,168,247,8,81,205,20,67,227,47,60,166,25,
655 66,70,1,0,20,203,92,221,94,176,75,118,98,147,188,41,209,144,70,8,25,191,
656 39,239,199,205,24,38,112,155,252,46,46,189,17,94,214,136,30,232,158,190,
657 69,1,56,237,237,8,51,14,0,160,68,118,163,68,181,204,54,190,229,154,22,8,
658 25,31,2,182,101,115,56,212,125,0,96,11,66,253,0,0,41,67,168,63,0,32,37,
659 8,245,11,0,88,134,80,255,0,128,37,8,113,211,224,21,77,18,247,253,215,180,
660 244,48,163,187,250,158,109,109,151,211,157,141,211,29,255,78,123,202,188,
661 172,250,161,250,70,121,28,128,86,57,137,203,130,43,47,244,240,84,183,212,
662 63,61,101,90,217,217,217,120,60,213,245,127,127,239,95,113,0,234,231,16,
663 136,145,223,239,199,231,211,255,146,93,239,1,0,4,2,1,93,8,181,98,41,124,
664 46,20,8,168,131,98,28,128,221,101,94,92,89,241,255,181,243,6,195,156,170,
665 84,127,154,174,123,58,203,79,127,84,198,165,8,10,182,38,219,114,212,63,
666 57,92,224,138,204,14,231,69,12,72,80,40,24,185,218,203,121,20,3,18,244,
667 223,189,230,127,1,145,119,128,141,62,61,149,199,0,0,0,0,73,69,78,68,174,
668 66,96,130};
669 
670 static size_t xml_res_size_5 = 621;
671 static unsigned char xml_res_file_5[] = {
672 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
673 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
674 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
675 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
676 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
677 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
678 45,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
679 120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,104,97,114,116,
680 49,50,56,34,62,67,104,97,114,116,86,105,101,119,66,105,116,109,97,112,115,
681 46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,99,104,97,114,
682 116,49,50,56,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,
683 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,
684 97,112,34,32,110,97,109,101,61,34,99,104,97,114,116,49,54,34,62,67,104,
685 97,114,116,86,105,101,119,66,105,116,109,97,112,115,46,99,112,112,36,100,
686 97,116,97,95,105,109,97,103,101,115,95,99,104,97,114,116,49,54,46,112,110,
687 103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,
688 99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,
689 101,61,34,99,104,97,114,116,50,53,54,34,62,67,104,97,114,116,86,105,101,
690 119,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,
691 97,103,101,115,95,99,104,97,114,116,50,53,54,46,112,110,103,60,47,111,98,
692 106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
693 61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,104,97,
694 114,116,51,50,34,62,67,104,97,114,116,86,105,101,119,66,105,116,109,97,
695 112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,99,
696 104,97,114,116,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,
697 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
698 109,97,112,34,32,110,97,109,101,61,34,99,104,97,114,116,54,52,34,62,67,
699 104,97,114,116,86,105,101,119,66,105,116,109,97,112,115,46,99,112,112,36,
700 100,97,116,97,95,105,109,97,103,101,115,95,99,104,97,114,116,54,52,46,112,
701 110,103,60,47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,
702 99,101,62,10};
703 
704 void wxCE3EBInitBitmapResources()
705 {
706 
707  // Check for memory FS. If not present, load the handler:
708  {
709  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
710  wxFileSystem fsys;
711  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
712  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
713  if (f) delete f;
714  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
715  }
716 
717  XRC_ADD_FILE(wxT("XRC_resource/ChartViewBitmaps.cpp$data_images_chart128.png"), xml_res_file_0, xml_res_size_0, wxT("image/png"));
718  XRC_ADD_FILE(wxT("XRC_resource/ChartViewBitmaps.cpp$data_images_chart16.png"), xml_res_file_1, xml_res_size_1, wxT("image/png"));
719  XRC_ADD_FILE(wxT("XRC_resource/ChartViewBitmaps.cpp$data_images_chart256.png"), xml_res_file_2, xml_res_size_2, wxT("image/png"));
720  XRC_ADD_FILE(wxT("XRC_resource/ChartViewBitmaps.cpp$data_images_chart32.png"), xml_res_file_3, xml_res_size_3, wxT("image/png"));
721  XRC_ADD_FILE(wxT("XRC_resource/ChartViewBitmaps.cpp$data_images_chart64.png"), xml_res_file_4, xml_res_size_4, wxT("image/png"));
722  XRC_ADD_FILE(wxT("XRC_resource/ChartViewBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_ChartViewBitmaps.xrc"), xml_res_file_5, xml_res_size_5, wxT("text/xml"));
723  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/ChartViewBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_ChartViewBitmaps.xrc"));
724 }
+
+ + + + diff --git a/docs/doxygen/html/_connection_line_8cpp_source.html b/docs/doxygen/html/_connection_line_8cpp_source.html new file mode 100644 index 0000000..e7cdfdd --- /dev/null +++ b/docs/doxygen/html/_connection_line_8cpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Project/ConnectionLine.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ConnectionLine.cpp
+
+
+
1 #include "ConnectionLine.h"
2 
3 ConnectionLine::ConnectionLine() : ControlElement(-1)
4 {
5 }
6 
7 ConnectionLine::ConnectionLine(Node* firstNode, int id)
8  : ControlElement(id)
9 {
10  wxPoint2DDouble pt = firstNode->GetPosition();
11  m_tmpSndPt = pt;
12  for(int i = 0; i < 6; i++) {
13  m_pointList.push_back(pt);
14  }
15  m_nodeList.push_back(firstNode);
16  firstNode->SetConnected();
17 }
18 
19 ConnectionLine::~ConnectionLine() {}
20 
21 void ConnectionLine::Draw(wxPoint2DDouble translation, double scale) const
22 {
23  // Line selected (Layer 1).
24  if(m_selected) {
25  glLineWidth(1.5 + m_borderSize * 2.0);
26  glColor4dv(m_selectionColour.GetRGBA());
27  DrawLine(m_pointList);
28  }
29 
30  // Draw line (Layer 2)
31  glLineWidth(1.5);
32  glColor4d(0.0, 0.0, 0.0, 1.0);
33  DrawLine(m_pointList);
34 
35  if(m_type == ELEMENT_LINE) {
36  glColor4d(0.0, 0.0, 0.0, 1.0);
37  DrawCircle(m_pointList[5], 3, 10, GL_POLYGON);
38  }
39 }
40 
41 bool ConnectionLine::Contains(wxPoint2DDouble position) const
42 {
43  if(PointToLineDistance(position) < 5.0) {
44  return true;
45  }
46  return false;
47 }
48 
49 bool ConnectionLine::Intersects(wxRect2DDouble rect) const
50 {
51  for(auto it = m_pointList.begin(); it != m_pointList.end(); ++it) {
52  if(rect.Contains(*it)) return true;
53  }
54  return false;
55 }
56 
57 void ConnectionLine::UpdatePoints()
58 {
59  if(m_type == ELEMENT_ELEMENT) {
60  bool hasOneNode = true;
61  wxPoint2DDouble pt1 = m_nodeList[0]->GetPosition();
62  wxPoint2DDouble pt2;
63  if(m_nodeList.size() == 1)
64  pt2 = m_tmpSndPt;
65  else {
66  pt2 = m_nodeList[1]->GetPosition();
67  hasOneNode = false;
68  }
69  wxPoint2DDouble midPt = (pt1 + pt2) / 2.0 + wxPoint2DDouble(0.0, m_lineOffset);
70 
71  m_pointList[0] = pt1;
72  if(m_nodeList[0]->GetAngle() == 0.0)
73  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(-10, 0);
74  else if(m_nodeList[0]->GetAngle() == 90.0)
75  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(0, -10);
76  else if(m_nodeList[0]->GetAngle() == 180.0)
77  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(10, 0);
78  else if(m_nodeList[0]->GetAngle() == 270.0)
79  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(0, 10);
80 
81  m_pointList[2] = m_pointList[1] + wxPoint2DDouble(0.0, midPt.m_y - m_pointList[1].m_y);
82 
83  m_pointList[5] = pt2;
84  if(hasOneNode)
85  m_pointList[4] = pt2;
86  else {
87  if(m_nodeList[1]->GetAngle() == 0.0)
88  m_pointList[4] = m_pointList[5] + wxPoint2DDouble(-10, 0);
89  else if(m_nodeList[1]->GetAngle() == 90.0)
90  m_pointList[4] = m_pointList[5] + wxPoint2DDouble(0, -10);
91  else if(m_nodeList[1]->GetAngle() == 180.0)
92  m_pointList[4] = m_pointList[5] + wxPoint2DDouble(10, 0);
93  else if(m_nodeList[1]->GetAngle() == 270.0)
94  m_pointList[4] = m_pointList[5] + wxPoint2DDouble(0, 10);
95  }
96 
97  m_pointList[3] = m_pointList[4] + wxPoint2DDouble(0.0, midPt.m_y - m_pointList[4].m_y);
98  } else if(m_type == ELEMENT_LINE) {
99  wxPoint2DDouble pt1 = m_nodeList[0]->GetPosition();
100  wxPoint2DDouble pt2 = m_parentLine->GetMidPoint();
101  wxPoint2DDouble midPt = (pt1 + pt2) / 2.0 + wxPoint2DDouble(0.0, m_lineOffset);
102 
103  m_pointList[0] = pt1;
104  if(m_nodeList[0]->GetAngle() == 0.0)
105  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(-10, 0);
106  else if(m_nodeList[0]->GetAngle() == 90.0)
107  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(0, -10);
108  else if(m_nodeList[0]->GetAngle() == 180.0)
109  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(10, 0);
110  else if(m_nodeList[0]->GetAngle() == 270.0)
111  m_pointList[1] = m_pointList[0] + wxPoint2DDouble(0, 10);
112 
113  m_pointList[2] = m_pointList[1] + wxPoint2DDouble(0.0, midPt.m_y - m_pointList[1].m_y);
114 
115  m_pointList[5] = pt2;
116  if(m_pointList[2].m_y > pt2.m_y) {
117  m_pointList[4] = m_pointList[5] + wxPoint2DDouble(0, 10);
118  } else {
119  m_pointList[4] = m_pointList[5] + wxPoint2DDouble(0, -10);
120  }
121 
122  m_pointList[3] = m_pointList[4] + wxPoint2DDouble(0.0, midPt.m_y - m_pointList[4].m_y);
123  }
124  for(auto it = m_childList.begin(), itEnd = m_childList.end(); it != itEnd; ++it) {
125  ConnectionLine* child = static_cast<ConnectionLine*>(*it);
126  child->UpdatePoints();
127  }
128 }
129 
130 bool ConnectionLine::AppendNode(Node* node, ControlElement* parent)
131 {
132  if(m_nodeList.size() != 1) return false;
133  if(m_nodeList[0] == node) return false;
134  if(m_nodeList[0]->GetNodeType() == node->GetNodeType()) return false;
135  auto nodeList = parent->GetNodeList();
136  for(auto it = nodeList.begin(), itEnd = nodeList.end(); it != itEnd; ++it) {
137  Node* parentNode = *it;
138  if(parentNode == m_nodeList[0]) return false;
139  }
140 
141  m_nodeList.push_back(node);
142  node->SetConnected();
143  return true;
144 }
145 
146 void ConnectionLine::Move(wxPoint2DDouble position)
147 {
148  m_lineOffset = m_moveStartOffset + position.m_y - m_moveStartPtY;
149  UpdatePoints();
150 }
151 
152 void ConnectionLine::StartMove(wxPoint2DDouble position)
153 {
154  m_moveStartPtY = position.m_y;
155  m_moveStartOffset = m_lineOffset;
156 }
157 
158 wxPoint2DDouble ConnectionLine::GetMidPoint() const { return ((m_pointList[2] + m_pointList[3]) / 2.0); }
159 
160 bool ConnectionLine::SetParentLine(ConnectionLine* parent)
161 {
162  if(m_nodeList[0]->GetNodeType() != Node::NODE_IN) return false;
163  if(!parent) return false;
164 
165  m_type = ELEMENT_LINE;
166  m_parentLine = parent;
167  return true;
168 }
169 
170 std::vector<ConnectionLine*> ConnectionLine::GetLineChildList() const
171 {
172  std::vector<ConnectionLine*> childList;
173  for(auto it = m_childList.begin(), itEnd = m_childList.end(); it != itEnd; ++it) {
174  ConnectionLine* child = static_cast<ConnectionLine*>(*it);
175  childList.push_back(child);
176  }
177  return childList;
178 }
179 
181 {
182  for(auto it = m_parentList.begin(); it != m_parentList.end(); ++it) {
183  Element* element = *it;
184  if(element == parent) m_parentList.erase(it--);
185  }
186 }
187 
189 {
190  ConnectionLine* copy = new ConnectionLine();
191  *copy = *this;
192  return copy;
193 }
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
+ +
Element * GetCopy()
Get a the element copy.
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
+ +
virtual void RemoveParent(Element *parent)
Remove a parent.
+ +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
+
+
+ + + + diff --git a/docs/doxygen/html/_connection_line_8h_source.html b/docs/doxygen/html/_connection_line_8h_source.html index 7af2194..474cca3 100644 --- a/docs/doxygen/html/_connection_line_8h_source.html +++ b/docs/doxygen/html/_connection_line_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ConnectionLine.h Source File +Project/ConnectionLine.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ConnectionLine.h
-
1 #ifndef CONNECTIONLINE_H
2 #define CONNECTIONLINE_H
3 
4 #include "ControlElement.h"
5 
7 {
8  public:
9  enum ConnectionLineType { ELEMENT_ELEMENT = 0, ELEMENT_LINE };
11  ConnectionLine(Node* firstNode, int id);
12  ~ConnectionLine();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const;
16  virtual bool Intersects(wxRect2DDouble rect) const;
17  virtual void RemoveParent(Element* parent);
18  virtual void StartMove(wxPoint2DDouble position);
19  virtual void Move(wxPoint2DDouble position);
20  virtual bool AppendNode(Node* node, ControlElement* parent);
21  virtual void UpdatePoints();
22  virtual void SetTemporarySecondPoint(wxPoint2DDouble point) { m_tmpSndPt = point; }
23  virtual wxPoint2DDouble GetMidPoint() const;
24  virtual double GetOffset() const { return m_lineOffset; }
25  virtual void SetOffset(double offset) { m_lineOffset = offset; }
26  virtual ConnectionLineType GetType() const { return m_type; }
27  virtual void SetType(ConnectionLineType newType) { m_type = newType; }
28  virtual ConnectionLine* GetParentLine() const { return m_parentLine; }
29  virtual bool SetParentLine(ConnectionLine* parent);
30 
31  virtual std::vector<ConnectionLine*> GetLineChildList() const;
32 
33  virtual double GetValue() const { return m_value; }
34  virtual void SetValue(double value) { m_value = value; }
35 
36  Element* GetCopy();
37 
38  protected:
39  double m_lineOffset = 0.0;
40  double m_moveStartPtY = 0.0;
41  double m_moveStartOffset = 0.0;
42  wxPoint2DDouble m_tmpSndPt;
43 
44  ConnectionLineType m_type = ELEMENT_ELEMENT;
45  ConnectionLine* m_parentLine = NULL;
46 
47  double m_value;
48 };
49 
50 #endif // CONNECTIONLINE_H
Definition: Element.h:88
-
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: ConnectionLine.cpp:146
-
Definition: ControlElement.h:6
-
Element * GetCopy()
Get a the element copy.
Definition: ConnectionLine.cpp:188
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: ConnectionLine.cpp:21
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: ConnectionLine.cpp:41
-
Definition: ConnectionLine.h:6
-
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: ConnectionLine.cpp:180
-
Definition: ControlElement.h:53
-
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: ConnectionLine.cpp:152
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: ConnectionLine.cpp:49
+
1 #ifndef CONNECTIONLINE_H
2 #define CONNECTIONLINE_H
3 
4 #include "ControlElement.h"
5 
7 {
8  public:
9  enum ConnectionLineType { ELEMENT_ELEMENT = 0, ELEMENT_LINE };
11  ConnectionLine(Node* firstNode, int id);
12  ~ConnectionLine();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const;
16  virtual bool Intersects(wxRect2DDouble rect) const;
17  virtual void RemoveParent(Element* parent);
18  virtual void StartMove(wxPoint2DDouble position);
19  virtual void Move(wxPoint2DDouble position);
20  virtual bool AppendNode(Node* node, ControlElement* parent);
21  virtual void UpdatePoints();
22  virtual void SetTemporarySecondPoint(wxPoint2DDouble point) { m_tmpSndPt = point; }
23  virtual wxPoint2DDouble GetMidPoint() const;
24  virtual double GetOffset() const { return m_lineOffset; }
25  virtual void SetOffset(double offset) { m_lineOffset = offset; }
26  virtual ConnectionLineType GetType() const { return m_type; }
27  virtual void SetType(ConnectionLineType newType) { m_type = newType; }
28  virtual ConnectionLine* GetParentLine() const { return m_parentLine; }
29  virtual bool SetParentLine(ConnectionLine* parent);
30 
31  virtual std::vector<ConnectionLine*> GetLineChildList() const;
32 
33  virtual double GetValue() const { return m_value; }
34  virtual void SetValue(double value) { m_value = value; }
35 
36  Element* GetCopy();
37 
38  protected:
39  double m_lineOffset = 0.0;
40  double m_moveStartPtY = 0.0;
41  double m_moveStartOffset = 0.0;
42  wxPoint2DDouble m_tmpSndPt;
43 
44  ConnectionLineType m_type = ELEMENT_ELEMENT;
45  ConnectionLine* m_parentLine = NULL;
46 
47  double m_value;
48 };
49 
50 #endif // CONNECTIONLINE_H
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
+ +
Element * GetCopy()
Get a the element copy.
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
+ +
virtual void RemoveParent(Element *parent)
Remove a parent.
+ +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
+
- + diff --git a/docs/doxygen/html/_constant_8cpp_source.html b/docs/doxygen/html/_constant_8cpp_source.html new file mode 100644 index 0000000..da0c23e --- /dev/null +++ b/docs/doxygen/html/_constant_8cpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Project/Constant.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Constant.cpp
+
+
+
1 #include "Constant.h"
2 #include "ConstantForm.h"
3 
4 Constant::Constant(int id) : ControlElement(id)
5 {
6  SetValue(m_value);
7  m_angle = 180.0;
8  Node* nodeOut = new Node(m_position + wxPoint2DDouble(m_width / 2, 0), Node::NODE_OUT, m_borderSize);
9  nodeOut->SetAngle(180.0);
10  nodeOut->StartMove(m_position);
11  m_nodeList.push_back(nodeOut);
12 }
13 
14 Constant::~Constant() {}
15 void Constant::Draw(wxPoint2DDouble translation, double scale) const
16 {
17  glLineWidth(1.0);
18  if(m_selected) {
19  glColor4dv(m_selectionColour.GetRGBA());
20  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
21  DrawRectangle(m_position, m_width + borderSize, m_height + borderSize);
22  }
23  glColor4d(1.0, 1.0, 1.0, 1.0);
24  DrawRectangle(m_position, m_width, m_height);
25  glColor4d(0.0, 0.0, 0.0, 1.0);
26  DrawRectangle(m_position, m_width, m_height, GL_LINE_LOOP);
27 
28  // Plot number.
29  glEnable(GL_TEXTURE_2D);
30  glColor4d(0.0, 0.0, 0.0, 1.0);
31  m_glStringValue->bind();
32  m_glStringValue->render(m_position.m_x, m_position.m_y);
33  glDisable(GL_TEXTURE_2D);
34 
35  glColor4d(0.0, 0.0, 0.0, 1.0);
36  DrawNodes();
37 }
38 
39 bool Constant::ShowForm(wxWindow* parent, Element* element)
40 {
41  ConstantForm* form = new ConstantForm(parent, this);
42  if(form->ShowModal() == wxID_OK) {
43  form->Destroy();
44  return true;
45  }
46  form->Destroy();
47  return false;
48 }
49 
50 void Constant::Rotate(bool clockwise)
51 {
52  if(clockwise)
53  m_angle += 90.0;
54  else
55  m_angle -= 90.0;
56  if(m_angle >= 360.0)
57  m_angle = 0.0;
58  else if(m_angle < 0)
59  m_angle = 270.0;
60 
61  UpdatePoints();
62 
63  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
64  Node* node = *it;
65  node->Rotate(clockwise);
66  }
67 }
68 
69 void Constant::UpdatePoints()
70 {
71  if(m_nodeList.size() != 0) {
72  if(m_angle == 0.0) {
73  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
74  } else if(m_angle == 90.0) {
75  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
76  } else if(m_angle == 180.0) {
77  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
78  } else if(m_angle == 270.0) {
79  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
80  }
81  }
82 }
83 
84 void Constant::SetValue(double value)
85 {
86  m_value = value;
87  wxString text = StringFromDouble(m_value);
88 
89  wxFont font(m_fontSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
90  wxScreenDC dc;
91 
92  if(m_glStringValue) {
93  delete m_glStringValue;
94  m_glStringValue = NULL;
95  }
96  m_glStringValue = new wxGLString(text);
97  m_glStringValue->setFont(font);
98  m_glStringValue->consolidate(&dc);
99 
100  m_width = m_glStringValue->getWidth() + 6 + 2 * m_borderSize;
101  m_height = m_glStringValue->getheight() + 6 + 2 * m_borderSize;
102 
103  UpdatePoints();
104 }
105 
107 {
108  Constant* copy = new Constant(m_elementID);
109  *copy = *this;
110  m_glStringValue = NULL;
111  SetValue(m_value);
112  return copy;
113 }
+ +
virtual Element * GetCopy()
Get a the element copy.
Definition: Constant.cpp:106
+
virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode=GL_QUADS) const
Draw rectangle.
Definition: Element.cpp:53
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Constant.cpp:39
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Constant.cpp:50
+
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ + + +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Constant.cpp:15
+
+
+ + + + diff --git a/docs/doxygen/html/_constant_8h_source.html b/docs/doxygen/html/_constant_8h_source.html index 0fd75de..fbe3f8a 100644 --- a/docs/doxygen/html/_constant_8h_source.html +++ b/docs/doxygen/html/_constant_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Constant.h Source File +Project/Constant.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Constant.h
-
1 #ifndef CONSTANT_H
2 #define CONSTANT_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
9 class ConstantForm;
10 
11 class Constant : public ControlElement
12 {
13  public:
14  Constant(int id);
15  ~Constant();
16 
17  virtual void Draw(wxPoint2DDouble translation, double scale) const;
18  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
19  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
20  virtual bool ShowForm(wxWindow* parent, Element* element);
21  virtual void Rotate(bool clockwise = true);
22  virtual void UpdateText() { SetValue(m_value); }
23 
24  virtual void SetValue(double value);
25  virtual double GetValue() const { return m_value; }
26  virtual void UpdatePoints();
27 
28  virtual Element* GetCopy();
29 
30  protected:
31  double m_value = 1.0;
32 
33  wxGLString* m_glStringValue = NULL;
34  int m_fontSize = 10;
35 };
36 
37 #endif // CONSTANT_H
Definition: Element.h:88
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Constant.h:18
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Constant.h:19
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Constant.cpp:106
-
Definition: ConstantForm.h:7
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Constant.cpp:39
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Constant.cpp:50
-
Definition: ControlElement.h:53
-
Definition: Constant.h:11
-
Definition: wxGLString.h:77
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Constant.cpp:15
+
1 #ifndef CONSTANT_H
2 #define CONSTANT_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
9 class ConstantForm;
10 
11 class Constant : public ControlElement
12 {
13  public:
14  Constant(int id);
15  ~Constant();
16 
17  virtual void Draw(wxPoint2DDouble translation, double scale) const;
18  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
19  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
20  virtual bool ShowForm(wxWindow* parent, Element* element);
21  virtual void Rotate(bool clockwise = true);
22  virtual void UpdateText() { SetValue(m_value); }
23 
24  virtual void SetValue(double value);
25  virtual double GetValue() const { return m_value; }
26  virtual void UpdatePoints();
27 
28  virtual Element* GetCopy();
29 
30  protected:
31  double m_value = 1.0;
32 
33  wxGLString* m_glStringValue = NULL;
34  int m_fontSize = 10;
35 };
36 
37 #endif // CONSTANT_H
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Constant.h:18
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Constant.h:19
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Constant.cpp:106
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Constant.cpp:39
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Constant.cpp:50
+ + + +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Constant.cpp:15
+
- + diff --git a/docs/doxygen/html/_constant_form_8cpp_source.html b/docs/doxygen/html/_constant_form_8cpp_source.html new file mode 100644 index 0000000..05386c1 --- /dev/null +++ b/docs/doxygen/html/_constant_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/ConstantForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ConstantForm.cpp
+
+
+
1 #include "ConstantForm.h"
2 #include "Constant.h"
3 
4 ConstantForm::ConstantForm(wxWindow* parent, Constant* constant) : ConstantFormBase(parent)
5 {
6  SetSize(GetBestSize());
7 
8  m_parent = parent;
9  m_constant = constant;
10 
11  m_textCtrlValue->SetValue(m_constant->StringFromDouble(m_constant->GetValue()));
12 }
13 
14 ConstantForm::~ConstantForm() {}
15 void ConstantForm::OnOKButtonClick(wxCommandEvent& event)
16 {
17  if(ValidateData()) EndModal(wxID_OK);
18 }
19 
20 bool ConstantForm::ValidateData()
21 {
22  double value;
23  if(!m_constant->DoubleFromString(this, m_textCtrlValue->GetValue(), value,
24  _("Value entered incorrectly in the field \"Constant value\".")))
25  return false;
26 
27  m_constant->SetValue(value);
28  return true;
29 }
+ +
+
+ + + + diff --git a/docs/doxygen/html/_constant_form_8h_source.html b/docs/doxygen/html/_constant_form_8h_source.html index b5cbb89..ec9368f 100644 --- a/docs/doxygen/html/_constant_form_8h_source.html +++ b/docs/doxygen/html/_constant_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ConstantForm.h Source File +Project/ConstantForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ConstantForm.h
-
1 #ifndef CONSTANTFORM_H
2 #define CONSTANTFORM_H
3 #include "ElementForm.h"
4 
5 class Constant;
6 
8 {
9  public:
10  ConstantForm(wxWindow* parent, Constant* constant);
11  virtual ~ConstantForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  Constant* m_constant = NULL;
20 };
21 #endif // CONSTANTFORM_H
Definition: ElementForm.h:923
-
Definition: ConstantForm.h:7
-
Definition: Constant.h:11
+
1 #ifndef CONSTANTFORM_H
2 #define CONSTANTFORM_H
3 #include "ElementForm.h"
4 
5 class Constant;
6 
8 {
9  public:
10  ConstantForm(wxWindow* parent, Constant* constant);
11  virtual ~ConstantForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  Constant* m_constant = NULL;
20 };
21 #endif // CONSTANTFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_control_editor_8cpp_source.html b/docs/doxygen/html/_control_editor_8cpp_source.html new file mode 100644 index 0000000..69efaba --- /dev/null +++ b/docs/doxygen/html/_control_editor_8cpp_source.html @@ -0,0 +1,135 @@ + + + + + + + +Project/ControlEditor.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlEditor.cpp
+
+
+
1 #include "ControlEditor.h"
2 
3 #ifdef USING_WX_3_0_X
4 #include "DegreesAndRadians.h"
5 #endif
6 #include "FileHanding.h"
7 #include "Camera.h"
8 #include "ControlElement.h"
9 #include "TransferFunction.h"
10 #include "ConnectionLine.h"
11 #include "Sum.h"
12 #include "Multiplier.h"
13 #include "Limiter.h"
14 #include "RateLimiter.h"
15 #include "Exponential.h"
16 #include "Constant.h"
17 #include "Gain.h"
18 
19 #include "ControlElementSolver.h"
20 #include "ControlElementContainer.h"
21 
22 #include "ChartView.h"
23 #include "ElementPlotData.h"
24 
25 ControlElementButton::ControlElementButton(wxWindow* parent, wxString label, wxImage image, wxWindowID id)
26  : wxWindow(parent, id)
27 {
28  SetBackgroundColour(*wxWHITE);
29  // m_font = wxFont(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
30  m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
31  m_label = label;
32  m_image = image;
33  m_imageSize = wxSize(image.GetWidth(), image.GetHeight());
34 
35  // Calculate label size.
36  wxScreenDC dc;
37  dc.SetFont(m_font);
38  wxSize textSize = dc.GetTextExtent(label);
39 
40  int buttonWidth = 0;
41  if(textSize.GetWidth() > m_imageSize.GetWidth()) {
42  buttonWidth = textSize.GetWidth();
43  m_imagePosition = wxPoint((buttonWidth - m_imageSize.GetWidth()) / 2 + m_borderSize, m_borderSize);
44  m_labelPosition = wxPoint(m_borderSize, m_imageSize.GetHeight() + m_borderSize);
45  } else {
46  buttonWidth = m_imageSize.GetWidth();
47  m_imagePosition = wxPoint(m_borderSize, m_borderSize);
48  m_labelPosition =
49  wxPoint((buttonWidth - textSize.GetWidth()) / 2 + m_borderSize, m_imageSize.GetHeight() + m_borderSize);
50  }
51  m_buttonSize =
52  wxSize(buttonWidth + 2 * m_borderSize, textSize.GetHeight() + m_imageSize.GetHeight() + 2 * m_borderSize);
53  SetMinSize(m_buttonSize + wxSize(m_borderSize, m_borderSize));
54 
55  // Events.
56  Bind(wxEVT_PAINT, &ControlElementButton::OnPaint, this);
57  Bind(wxEVT_ENTER_WINDOW, &ControlElementButton::OnMouseEnter, this);
58  Bind(wxEVT_LEAVE_WINDOW, &ControlElementButton::OnMouseLeave, this);
59  Bind(wxEVT_LEFT_DOWN, &ControlElementButton::OnLeftClickDown, this);
60  Bind(wxEVT_LEFT_UP, &ControlElementButton::OnLeftClickUp, this);
61 }
62 
63 ControlElementButton::~ControlElementButton() {}
64 void ControlElementButton::OnPaint(wxPaintEvent& event)
65 {
66  wxPaintDC dc(this);
67  wxGraphicsContext* gc = wxGraphicsContext::Create(dc);
68  if(gc) {
69  if(m_mouseAbove) {
70  if(m_selected) {
71  gc->SetPen(wxPen(wxColour(0, 125, 255, 255), m_borderSize - 1));
72  gc->SetBrush(wxBrush(wxColour(0, 125, 255, 100)));
73  } else {
74  gc->SetPen(*wxTRANSPARENT_PEN);
75  gc->SetBrush(wxBrush(wxColour(0, 125, 255, 70)));
76  }
77  gc->DrawRectangle(m_borderSize / 2, m_borderSize / 2, m_buttonSize.GetWidth(), m_buttonSize.GetHeight());
78  }
79  gc->DrawBitmap(gc->CreateBitmapFromImage(m_image), m_imagePosition.x, m_imagePosition.y, m_imageSize.GetWidth(),
80  m_imageSize.GetHeight());
81  gc->SetFont(m_font, *wxBLACK);
82  gc->DrawText(m_label, m_labelPosition.x, m_labelPosition.y);
83  delete gc;
84  }
85 }
86 
87 void ControlElementButton::OnMouseEnter(wxMouseEvent& event)
88 {
89  m_mouseAbove = true;
90  Refresh();
91  event.Skip();
92 }
93 
94 void ControlElementButton::OnMouseLeave(wxMouseEvent& event)
95 {
96  m_mouseAbove = false;
97  Refresh();
98  event.Skip();
99 }
100 
101 void ControlElementButton::OnLeftClickDown(wxMouseEvent& event)
102 {
103  m_selected = true;
104  Refresh();
105  event.Skip();
106 }
107 
108 void ControlElementButton::OnLeftClickUp(wxMouseEvent& event)
109 {
110  m_selected = false;
111  Refresh();
112  event.Skip();
113 }
114 
115 ControlEditor::ControlEditor(wxWindow* parent, int ioflags) : ControlEditorBase(parent)
116 {
117  BuildControlElementPanel();
118  m_glContext = new wxGLContext(m_glCanvas);
119  m_camera = new Camera();
120  m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
121  // m_camera->SetScale(1.2);
122  m_ioFlags = ioflags;
123 }
124 ControlEditor::~ControlEditor()
125 {
126  // m_tfButton->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(ControlEditor::LeftClickDown), m_tfButton, this);
127 }
128 
129 void ControlEditor::BuildControlElementPanel()
130 {
131  m_panelControlElements->SetDoubleBuffered(true);
132  wxWrapSizer* wrapSizer = new wxWrapSizer();
133  m_panelControlElements->SetSizer(wrapSizer);
134 
135  ControlElementButton* ioButton = new ControlElementButton(m_panelControlElements, _("In/Out"),
136  wxImage("..\\data\\images\\control\\io.png"), ID_IO);
137  wrapSizer->Add(ioButton, 0, wxALL, 5);
138  ioButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
139 
141  m_panelControlElements, _("Transfer fcn"), wxImage("..\\data\\images\\control\\transferFunc.png"), ID_TF);
142  wrapSizer->Add(tfButton, 0, wxALL, 5);
143  tfButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
144 
145  ControlElementButton* sumButton = new ControlElementButton(m_panelControlElements, _("Sum"),
146  wxImage("..\\data\\images\\control\\sum.png"), ID_SUM);
147  wrapSizer->Add(sumButton, 0, wxALL, 5);
148  sumButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
149 
150  ControlElementButton* constButton = new ControlElementButton(
151  m_panelControlElements, _("Constant"), wxImage("..\\data\\images\\control\\value.png"), ID_CONST);
152  wrapSizer->Add(constButton, 0, wxALL, 5);
153  constButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
154 
156  m_panelControlElements, _("Limiter"), wxImage("..\\data\\images\\control\\limiter.png"), ID_LIMITER);
157  wrapSizer->Add(limButton, 0, wxALL, 5);
158  limButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
159 
160  ControlElementButton* gainButton = new ControlElementButton(
161  m_panelControlElements, _("Gain"), wxImage("..\\data\\images\\control\\gain.png"), ID_GAIN);
162  wrapSizer->Add(gainButton, 0, wxALL, 5);
163  gainButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
164 
165  ControlElementButton* multButton = new ControlElementButton(
166  m_panelControlElements, _("Multiplier"), wxImage("..\\data\\images\\control\\mult.png"), ID_MULT);
167  wrapSizer->Add(multButton, 0, wxALL, 5);
168  multButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
169 
170  ControlElementButton* satButton = new ControlElementButton(m_panelControlElements, _("Exponential"),
171  wxImage("..\\data\\images\\control\\sat.png"), ID_EXP);
172  wrapSizer->Add(satButton, 0, wxALL, 5);
173  satButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
174 
175  ControlElementButton* rateLimButton = new ControlElementButton(
176  m_panelControlElements, _("Rate limiter"), wxImage("..\\data\\images\\control\\rateLimiter.png"), ID_RATELIM);
177  wrapSizer->Add(rateLimButton, 0, wxALL, 5);
178  rateLimButton->Bind(wxEVT_LEFT_DOWN, &ControlEditor::LeftClickDown, this);
179 }
180 
181 void ControlEditor::LeftClickDown(wxMouseEvent& event)
182 {
183  AddElement(static_cast<ControlElementButtonID>(event.GetId()));
184  event.Skip();
185 }
186 
187 void ControlEditor::SetViewport()
188 {
189  glClearColor(1.0, 1.0, 1.0, 1.0); // White background.
190  glClear(GL_COLOR_BUFFER_BIT);
191  glDisable(GL_DEPTH_TEST);
192  glDisable(GL_TEXTURE_2D);
193  glEnable(GL_COLOR_MATERIAL);
194  glEnable(GL_BLEND);
195  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
196  glEnable(GL_LINE_SMOOTH);
197 
198  double width = m_glCanvas->GetSize().x - 1;
199  double height = m_glCanvas->GetSize().y - 1;
200 
201  // Viewport fit the screen.
202  glViewport(0, 0, width, height);
203 
204  glMatrixMode(GL_PROJECTION);
205  glLoadIdentity();
206  gluOrtho2D(0.0, width, height, 0.0);
207 
208  glMatrixMode(GL_MODELVIEW);
209  glLoadIdentity();
210 }
211 
212 void ControlEditor::AddElement(ControlElementButtonID id)
213 {
214  switch(id) {
215  case ID_IO: {
216  m_mode = MODE_INSERT;
217  IOControl* io = new IOControl(m_ioFlags, m_lastElementID);
218  m_elementList.push_back(io);
219  } break;
220  case ID_TF: {
221  m_mode = MODE_INSERT;
222  TransferFunction* tf = new TransferFunction(m_lastElementID);
223  m_elementList.push_back(tf);
224  } break;
225  case ID_SUM: {
226  m_mode = MODE_INSERT;
227  Sum* sum = new Sum(m_lastElementID);
228  m_elementList.push_back(sum);
229  } break;
230  case ID_CONST: {
231  m_mode = MODE_INSERT;
232  Constant* constant = new Constant(m_lastElementID);
233  m_elementList.push_back(constant);
234  } break;
235  case ID_LIMITER: {
236  m_mode = MODE_INSERT;
237  Limiter* limiter = new Limiter(m_lastElementID);
238  m_elementList.push_back(limiter);
239  } break;
240  case ID_GAIN: {
241  m_mode = MODE_INSERT;
242  Gain* gain = new Gain(m_lastElementID);
243  m_elementList.push_back(gain);
244  } break;
245  case ID_MULT: {
246  m_mode = MODE_INSERT;
247  Multiplier* mult = new Multiplier(m_lastElementID);
248  m_elementList.push_back(mult);
249  } break;
250  case ID_EXP: {
251  m_mode = MODE_INSERT;
252  Exponential* exp = new Exponential(m_lastElementID);
253  m_elementList.push_back(exp);
254  } break;
255  case ID_RATELIM: {
256  m_mode = MODE_INSERT;
257  RateLimiter* rateLim = new RateLimiter(m_lastElementID);
258  m_elementList.push_back(rateLim);
259  } break;
260  }
261  m_lastElementID++;
262 }
263 
264 void ControlEditor::OnPaint(wxPaintEvent& event)
265 {
266  wxPaintDC dc(m_glCanvas);
267  m_glContext->SetCurrent(*m_glCanvas);
268  SetViewport();
269 
270  // Set GLCanvas scale and translation.
271  glScaled(m_camera->GetScale(), m_camera->GetScale(), 0.0); // Scale
272  glTranslated(m_camera->GetTranslation().m_x, m_camera->GetTranslation().m_y, 0.0); // Translation
273 
274  for(auto it = m_connectionList.begin(), itEnd = m_connectionList.end(); it != itEnd; ++it) {
275  ConnectionLine* line = *it;
276  line->Draw(m_camera->GetTranslation(), m_camera->GetScale());
277  }
278 
279  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
280  Element* element = *it;
281  element->Draw(m_camera->GetTranslation(), m_camera->GetScale());
282  }
283 
284  // Selection rectangle
285  glLineWidth(1.0);
286  glColor4d(0.0, 0.5, 1.0, 1.0);
287  glBegin(GL_LINE_LOOP);
288  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y);
289  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y + m_selectionRect.m_height);
290  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y + m_selectionRect.m_height);
291  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y);
292  glEnd();
293  glColor4d(0.0, 0.5, 1.0, 0.3);
294  glBegin(GL_QUADS);
295  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y);
296  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y + m_selectionRect.m_height);
297  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y + m_selectionRect.m_height);
298  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y);
299  glEnd();
300 
301  glFlush(); // Sends all pending information directly to the GPU.
302  m_glCanvas->SwapBuffers();
303  event.Skip();
304 }
305 
306 void ControlEditor::OnDoubleClick(wxMouseEvent& event)
307 {
308  wxPoint2DDouble clickPoint = event.GetPosition();
309  bool redraw = false;
310 
311  if(m_mode == MODE_EDIT) {
312  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
313  Element* element = *it;
314  if(element->Contains(m_camera->ScreenToWorld(clickPoint))) {
315  element->ShowForm(this, element);
316  CheckConnections();
317  auto childList = element->GetChildList();
318  for(auto itC = childList.begin(), itEndC = childList.end(); itC != itEndC; ++itC) {
319  ConnectionLine* line = static_cast<ConnectionLine*>(*itC);
320  line->UpdatePoints();
321  }
322  redraw = true;
323  }
324  }
325  }
326 
327  if(redraw) Redraw();
328 }
329 
330 void ControlEditor::OnLeftClickDown(wxMouseEvent& event)
331 {
332  wxPoint2DDouble clickPoint = event.GetPosition();
333  bool foundElement = false;
334 
335  if(m_mode == MODE_INSERT) {
336  m_mode = MODE_EDIT;
337  } else {
338  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
339  ControlElement* element = *it;
340  bool foundNode = false;
341  auto nodeList = element->GetNodeList();
342  for(auto itN = nodeList.begin(), itNEnd = nodeList.end(); itN != itNEnd; ++itN) {
343  Node* node = *itN;
344  if(node->Contains(m_camera->ScreenToWorld(clickPoint))) {
345  m_mode = MODE_INSERT_LINE;
346  ConnectionLine* line = new ConnectionLine(node, m_lastElementID);
347  m_lastElementID++;
348  m_connectionList.push_back(line);
349  element->AddChild(line);
350  line->AddParent(element);
351  foundElement = true;
352  foundNode = true;
353  }
354  }
355 
356  if(!foundNode) {
357  // Set movement initial position (not necessarily will be moved).
358  element->StartMove(m_camera->ScreenToWorld(clickPoint));
359 
360  // Click in an element.
361  if(element->Contains(m_camera->ScreenToWorld(clickPoint))) {
362  if(!foundElement) {
363  element->SetSelected();
364  foundElement = true;
365  }
366  m_mode = MODE_MOVE_ELEMENT;
367  }
368  }
369  }
370  if(m_mode != MODE_INSERT_LINE) {
371  for(auto it = m_connectionList.begin(), itEnd = m_connectionList.end(); it != itEnd; ++it) {
372  ConnectionLine* line = *it;
373  line->StartMove(m_camera->ScreenToWorld(clickPoint));
374  if(line->Contains(m_camera->ScreenToWorld(clickPoint))) {
375  line->SetSelected();
376  foundElement = true;
377  m_mode = MODE_MOVE_LINE;
378  }
379  }
380  }
381  }
382 
383  if(!foundElement) {
384  m_mode = MODE_SELECTION_RECT;
385  m_startSelRect = m_camera->ScreenToWorld(clickPoint);
386  }
387 
388  Redraw();
389  event.Skip();
390 }
391 
392 void ControlEditor::OnLeftClickUp(wxMouseEvent& event)
393 {
394  bool foundNode = false;
395  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; it++) {
396  ControlElement* element = *it;
397  if(m_mode == MODE_INSERT_LINE) {
398  auto nodeList = element->GetNodeList();
399  for(auto itN = nodeList.begin(), itNEnd = nodeList.end(); itN != itNEnd; ++itN) {
400  Node* node = *itN;
401  if(node->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
402  ConnectionLine* line = *(m_connectionList.end() - 1);
403  if(line->AppendNode(node, element)) {
404  line->AddParent(element);
405  element->AddChild(line);
406  line->UpdatePoints();
407  m_mode = MODE_EDIT;
408  foundNode = true;
409  }
410  }
411  }
412  } else if(m_mode == MODE_SELECTION_RECT) {
413  if(element->Intersects(m_selectionRect)) {
414  element->SetSelected();
415  } else if(!event.ControlDown()) {
416  element->SetSelected(false);
417  }
418  } else if(!event.ControlDown()) {
419  if(!element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
420  element->SetSelected(false);
421  }
422  }
423  }
424  for(auto it = m_connectionList.begin(), itEnd = m_connectionList.end(); it != itEnd; ++it) {
425  ConnectionLine* cLine = *it;
426  if(m_mode == MODE_INSERT_LINE && !foundNode && it != (itEnd - 1)) {
427  if(cLine->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
428  ConnectionLine* iLine = *(m_connectionList.end() - 1);
429  if(iLine->SetParentLine(cLine)) {
430  cLine->AddChild(iLine);
431  iLine->UpdatePoints();
432  m_mode = MODE_EDIT;
433  foundNode = true;
434  }
435  }
436  } else if(m_mode == MODE_SELECTION_RECT) {
437  if(cLine->Intersects(m_selectionRect)) {
438  cLine->SetSelected();
439  } else if(!event.ControlDown()) {
440  cLine->SetSelected(false);
441  }
442  } else if(!event.ControlDown()) {
443  if(!cLine->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
444  cLine->SetSelected(false);
445  }
446  }
447  }
448 
449  m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
450 
451  if(m_mode == MODE_INSERT_LINE && !foundNode) {
452  ConnectionLine* cLine = *(m_connectionList.end() - 1);
453  // Free nodes
454  auto nodeList = cLine->GetNodeList();
455  for(auto itN = nodeList.begin(), itEndN = nodeList.end(); itN != itEndN; ++itN) {
456  Node* node = *itN;
457  node->SetConnected(false);
458  }
459  // Remove the associated child from parents.
460  auto parentList = cLine->GetParentList();
461  for(auto it = parentList.begin(), itEnd = parentList.end(); it != itEnd; ++it) {
462  Element* element = *it;
463  element->RemoveChild(cLine);
464  }
465  m_connectionList.pop_back();
466  if(cLine) delete cLine;
467  m_mode = MODE_EDIT;
468  } else if(m_mode != MODE_INSERT) {
469  m_mode = MODE_EDIT;
470  }
471 
472  Redraw();
473  event.Skip();
474 }
475 
476 void ControlEditor::OnMiddleDown(wxMouseEvent& event)
477 {
478  // Set to drag mode.
479  switch(m_mode) {
480  case MODE_INSERT: {
481  m_mode = MODE_DRAG_INSERT;
482  } break;
483  case MODE_PASTE: {
484  m_mode = MODE_DRAG_PASTE;
485  } break;
486  default: {
487  m_mode = MODE_DRAG;
488  } break;
489  }
490  m_camera->StartTranslation(m_camera->ScreenToWorld(event.GetPosition()));
491 }
492 
493 void ControlEditor::OnMiddleUp(wxMouseEvent& event)
494 {
495  switch(m_mode) {
496  case MODE_DRAG_INSERT: {
497  m_mode = MODE_INSERT;
498  } break;
499  case MODE_DRAG_PASTE: {
500  m_mode = MODE_PASTE;
501  } break;
502  case MODE_INSERT:
503  case MODE_PASTE: {
504  // Does nothing.
505  } break;
506  default: {
507  m_mode = MODE_EDIT;
508  } break;
509  }
510 }
511 
512 void ControlEditor::OnMouseMotion(wxMouseEvent& event)
513 {
514  wxPoint2DDouble clickPoint = event.GetPosition();
515  bool redraw = false;
516 
517  switch(m_mode) {
518  case MODE_INSERT: {
519  Element* newElement = *(m_elementList.end() - 1); // Get the last element in the list.
520  newElement->Move(m_camera->ScreenToWorld(clickPoint));
521  redraw = true;
522  } break;
523  case MODE_INSERT_LINE: {
524  ConnectionLine* line = *(m_connectionList.end() - 1);
525  line->SetTemporarySecondPoint(m_camera->ScreenToWorld(clickPoint));
526  line->UpdatePoints();
527  redraw = true;
528  } break;
529  case MODE_DRAG:
530  case MODE_DRAG_INSERT:
531  case MODE_DRAG_PASTE: {
532  m_camera->SetTranslation(clickPoint);
533  redraw = true;
534  } break;
535  case MODE_MOVE_ELEMENT: {
536  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; it++) {
537  Element* element = *it;
538  if(element->IsSelected()) {
539  element->Move(m_camera->ScreenToWorld(clickPoint));
540  auto childList = element->GetChildList();
541  for(auto itC = childList.begin(), itEndC = childList.end(); itC != itEndC; itC++) {
542  ConnectionLine* line = static_cast<ConnectionLine*>(*itC);
543  line->UpdatePoints();
544  }
545  redraw = true;
546  }
547  }
548  } break;
549  case MODE_MOVE_LINE: {
550  for(auto it = m_connectionList.begin(), itEnd = m_connectionList.end(); it != itEnd; it++) {
551  ConnectionLine* line = *it;
552  if(line->IsSelected()) {
553  line->Move(m_camera->ScreenToWorld(clickPoint));
554  redraw = true;
555  }
556  }
557  } break;
558  case MODE_SELECTION_RECT: {
559  wxPoint2DDouble currentPos = m_camera->ScreenToWorld(clickPoint);
560  double x, y, w, h;
561  if(currentPos.m_x < m_startSelRect.m_x) {
562  x = currentPos.m_x;
563  w = m_startSelRect.m_x - currentPos.m_x;
564  } else {
565  x = m_startSelRect.m_x;
566  w = currentPos.m_x - m_startSelRect.m_x;
567  }
568  if(currentPos.m_y < m_startSelRect.m_y) {
569  y = currentPos.m_y;
570  h = m_startSelRect.m_y - currentPos.m_y;
571  } else {
572  y = m_startSelRect.m_y;
573  h = currentPos.m_y - m_startSelRect.m_y;
574  }
575 
576  m_selectionRect = wxRect2DDouble(x, y, w, h);
577  redraw = true;
578  } break;
579  default:
580  break;
581  }
582 
583  if(redraw) Redraw();
584  event.Skip();
585 }
586 
587 void ControlEditor::OnScroll(wxMouseEvent& event)
588 {
589  if(event.GetWheelRotation() > 0)
590  m_camera->SetScale(event.GetPosition(), +0.05);
591  else
592  m_camera->SetScale(event.GetPosition(), -0.05);
593 
594  Redraw();
595 }
596 
597 void ControlEditor::OnIdle(wxIdleEvent& event) { ConsolidateTexts(); }
598 void ControlEditor::OnKeyDown(wxKeyEvent& event)
599 {
600  char key = event.GetUnicodeKey();
601  if(key != WXK_NONE) {
602  switch(key) {
603  case WXK_DELETE: // Delete selected elements.
604  {
605  DeleteSelectedElements();
606  } break;
607  case 'R': // Rotate the selected elements.
608  {
609  RotateSelectedElements(event.GetModifiers() != wxMOD_SHIFT);
610  } break;
611  case 'L': {
612  // tests
613  } break;
614  }
615  }
616 }
617 
618 void ControlEditor::RotateSelectedElements(bool clockwise)
619 {
620  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
621  Element* element = *it;
622  if(element->IsSelected()) {
623  element->Rotate(clockwise);
624  auto childList = element->GetChildList();
625  for(auto itC = childList.begin(), itEndC = childList.end(); itC != itEndC; itC++) {
626  ConnectionLine* line = static_cast<ConnectionLine*>(*itC);
627  line->UpdatePoints();
628  }
629  }
630  }
631  Redraw();
632 }
633 
634 void ControlEditor::DeleteSelectedElements()
635 {
636  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
637  Element* element = *it;
638  if(element->IsSelected()) {
639  // Remove child/parent.
640  auto childList = element->GetChildList();
641  for(auto itC = childList.begin(), itEnd = childList.end(); itC != itEnd; ++itC) {
642  // The child is always a connection line.
643  ConnectionLine* child = static_cast<ConnectionLine*>(*itC);
644  // Delete the connection line.
645  for(auto itCo = m_connectionList.begin(); itCo != m_connectionList.end(); ++itCo) {
646  ConnectionLine* line = *itCo;
647  if(line == child) {
648  itCo = DeleteLineFromList(itCo);
649  break;
650  }
651  }
652  }
653  m_elementList.erase(it--);
654  if(element) delete element;
655  }
656  }
657 
658  for(auto it = m_connectionList.begin(); it != m_connectionList.end(); ++it) {
659  ConnectionLine* line = *it;
660  if(line->IsSelected()) {
661  it = DeleteLineFromList(it);
662  }
663  }
664  Redraw();
665 }
666 
667 std::vector<ConnectionLine*>::iterator ControlEditor::DeleteLineFromList(std::vector<ConnectionLine*>::iterator& it)
668 {
669  ConnectionLine* cLine = *it;
670  auto childList = cLine->GetLineChildList();
671  for(auto itC = childList.begin(), itEndC = childList.end(); itC != itEndC; ++itC) {
672  ConnectionLine* child = *itC;
673  for(auto itL = m_connectionList.begin(); itL != m_connectionList.end(); ++itL) {
674  ConnectionLine* childOnList = *itL;
675  if(childOnList == child) {
676  itL = DeleteLineFromList(itL);
677  }
678  }
679  }
680  // Remove
681  auto parentList = cLine->GetParentList();
682  for(auto itP = parentList.begin(), itEnd = parentList.end(); itP != itEnd; ++itP) {
683  Element* parent = *itP;
684  if(parent) parent->RemoveChild(cLine);
685  }
686  if(cLine->GetParentLine()) cLine->GetParentLine()->RemoveChild(cLine);
687  // Free nodes
688  auto nodeList = cLine->GetNodeList();
689  for(auto itN = nodeList.begin(), itEndN = nodeList.end(); itN != itEndN; ++itN) {
690  Node* node = *itN;
691  node->SetConnected(false);
692  }
693  m_connectionList.erase(it--);
694  if(cLine) delete cLine;
695  return it;
696 }
697 
698 void ControlEditor::CheckConnections()
699 {
700  for(auto it = m_connectionList.begin(); it != m_connectionList.end(); ++it) {
701  ConnectionLine* cLine = *it;
702  if(cLine->GetType() == ConnectionLine::ELEMENT_ELEMENT) {
703  if(cLine->GetParentList().size() < 2) {
704  it = DeleteLineFromList(it);
705  }
706  }
707  }
708 }
709 
710 void ControlEditor::OnExportClick(wxCommandEvent& event)
711 {
712  FileHanding fileHandling(this);
713 
714  wxFileDialog saveFileDialog(this, _("Save CTL file"), "", "", "CTL files (*.ctl)|*.ctl",
715  wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
716  if(saveFileDialog.ShowModal() == wxID_CANCEL) return;
717 
718  fileHandling.SaveControl(saveFileDialog.GetPath());
719  wxFileName fileName(saveFileDialog.GetPath());
720  event.Skip();
721 }
722 
723 void ControlEditor::OnImportClick(wxCommandEvent& event)
724 {
725  wxFileDialog openFileDialog(this, _("Open CTL file"), "", "", "CTL files (*.ctl)|*.ctl",
726  wxFD_OPEN | wxFD_FILE_MUST_EXIST);
727  if(openFileDialog.ShowModal() == wxID_CANCEL) return;
728 
729  wxFileName fileName(openFileDialog.GetPath());
730 
731  FileHanding fileHandling(this);
732  if(!fileHandling.OpenControl(fileName, m_elementList, m_connectionList)) {
733  wxMessageDialog msgDialog(this, _("It was not possible to open the selected file."), _("Error"),
734  wxOK | wxCENTRE | wxICON_ERROR);
735  msgDialog.ShowModal();
736  }
737 
738  SetLastElementID();
739  Redraw();
740  event.Skip();
741 }
742 
743 void ControlEditor::OnTestClick(wxCommandEvent& event)
744 {
745  ControlSystemTest csTest(this, &m_inputType, &m_startTime, &m_slope, &m_timeStep, &m_simTime);
746  if(csTest.ShowModal() == wxID_OK) {
747  double printStep = 1e-3;
748  double pdbStep = 1e-1;
749 
750  wxProgressDialog pbd(_("Test"), _("Initializing..."), 100, this,
751  wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_CAN_ABORT | wxPD_SMOOTH);
752  ControlElementSolver solver(this, m_timeStep, 1e-5);
753  if(solver.IsOK()) {
754  bool simStopped = false;
755  double currentTime = 0.0;
756  double printTime = 0.0;
757  double pdbTime = 0.0;
758  std::vector<double> time;
759  std::vector<double> solution;
760  std::vector<double> inputV;
761  while(currentTime <= m_simTime) {
762  double input = 0.0;
763  if(currentTime >= m_startTime) {
764  switch(m_inputType) {
765  case 0: {
766  input = m_slope;
767  } break;
768  case 1: {
769  input = m_slope * (currentTime - m_startTime);
770  } break;
771  case 2: {
772  input = m_slope * std::pow(currentTime - m_startTime, 2);
773  } break;
774  default: {
775  input = 0.0;
776  break;
777  }
778  }
779  }
780 
781  solver.SolveNextStep(input);
782 
783  if(printTime >= printStep) {
784  time.push_back(currentTime);
785  solution.push_back(solver.GetLastSolution());
786  inputV.push_back(input);
787  printTime = 0.0;
788  }
789 
790  if(pdbTime > pdbStep) {
791  if(!pbd.Update((currentTime / m_simTime) * 100, wxString::Format("Time = %.2fs", currentTime))) {
792  pbd.Update(100);
793  simStopped = true;
794  currentTime = m_simTime;
795  }
796  pdbTime = 0.0;
797  }
798 
799  printTime += m_timeStep;
800  currentTime += m_timeStep;
801  pdbTime += m_timeStep;
802  }
803  if(!simStopped) {
804  std::vector<ElementPlotData> epdList;
805  ElementPlotData curveData(_("I/O"), ElementPlotData::CT_TEST);
806  curveData.AddData(inputV, _("Input"));
807  curveData.AddData(solution, _("Output"));
808 
809  curveData.SetPlot(0);
810  curveData.SetColour(0, *wxRED);
811  curveData.SetPlot(1);
812  curveData.SetColour(1, *wxBLUE);
813 
814  epdList.push_back(curveData);
815 
816  ChartView* cView = new ChartView(this, epdList, time);
817  cView->Show();
818  cView->UpdatePlot();
819  }
820  } else {
821  wxMessageDialog msgDialog(this, _("It was not possible to solve the control system"), _("Error"),
822  wxOK | wxCENTRE | wxICON_ERROR);
823  msgDialog.ShowModal();
824  }
825  }
826 }
827 
828 void ControlEditor::OnClose(wxCloseEvent& event)
829 {
830  if(m_ctrlContainer) {
831  m_ctrlContainer->FillContainer(this);
832  }
833  event.Skip();
834 }
835 
836 void ControlEditor::ConsolidateTexts()
837 {
838  // Solve wxGLString bug.
839  if(m_firstDraw) {
840  TransferFunction* tf = new TransferFunction(0);
841  m_elementList.push_back(tf);
842  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
843  ControlElement* element = *it;
844  element->UpdateText();
845  }
846  Redraw();
847  m_elementList.pop_back();
848  delete tf;
849  m_firstDraw = false;
850  }
851 }
852 
853 void ControlEditor::SetLastElementID()
854 {
855  int id = 0;
856  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
857  int elementID = (*it)->GetID();
858  if(id < elementID) id = elementID;
859  }
860  for(auto it = m_connectionList.begin(), itEnd = m_connectionList.end(); it != itEnd; ++it) {
861  int elementID = (*it)->GetID();
862  if(id < elementID) id = elementID;
863  }
864  m_lastElementID = ++id;
865 }
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Element.cpp:107
+ + +
void SetSelected(bool selected=true)
Set element selection.
Definition: Element.h:123
+ +
Definition: Sum.h:9
+
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
Definition: Gain.h:11
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
+
virtual std::vector< Element * > GetChildList() const
Get the Child list.
Definition: Element.h:523
+ + +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
+
Definition: Limiter.h:8
+
virtual void RemoveChild(Element *child)
Remove a child from the list.
Definition: Element.cpp:335
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+
virtual bool Intersects(wxRect2DDouble rect) const =0
Check if the element&#39;s rect intersects other rect.
+
Definition: Camera.h:6
+ + +
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Element.h:234
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Element.h:302
+ + + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Element.h:308
+
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+ + +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Element.h:547
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
+ + +
bool IsSelected() const
Checks if the element is selected.
Definition: Element.h:189
+
virtual bool Contains(wxPoint2DDouble position) const =0
Checks if the element contains a position.
+ +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+ +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
+ +
+
+ + + + diff --git a/docs/doxygen/html/_control_editor_8h_source.html b/docs/doxygen/html/_control_editor_8h_source.html index cfb25f5..e203bd9 100644 --- a/docs/doxygen/html/_control_editor_8h_source.html +++ b/docs/doxygen/html/_control_editor_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ControlEditor.h Source File +Project/ControlEditor.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ControlEditor.h
-
1 #ifndef CONTROLEDITOR_H
2 #define CONTROLEDITOR_H
3 
4 #include "ControlEditorBase.h"
5 #include <wx/wrapsizer.h>
6 #include <wx/dcclient.h>
7 #include <wx/dcscreen.h>
8 #include <wx/graphics.h>
9 #include <GL/gl.h>
10 #include <GL/glu.h>
11 
12 #include <wx/progdlg.h>
13 
14 #include "IOControl.h"
15 #include "ControlSystemTest.h"
16 
17 class FileHanding;
18 class Camera;
19 class Element;
20 class ControlElement;
21 class TransferFunction;
22 class ConnectionLine;
23 class Sum;
24 class Multiplier;
25 class Limiter;
26 class RateLimiter;
27 class Exponential;
28 class Constant;
29 class Gain;
30 
33 
34 class ChartView;
35 class ElementDataObject;
36 
37 enum ControlElementButtonID { ID_IO = 0, ID_TF, ID_SUM, ID_CONST, ID_LIMITER, ID_GAIN, ID_MULT, ID_EXP, ID_RATELIM };
38 
39 class ControlElementButton : public wxWindow
40 {
41  public:
42  ControlElementButton(wxWindow* parent, wxString label, wxImage image, wxWindowID id = wxID_ANY);
44 
45  protected:
46  virtual void OnPaint(wxPaintEvent& event);
47  virtual void OnMouseEnter(wxMouseEvent& event);
48  virtual void OnMouseLeave(wxMouseEvent& event);
49  virtual void OnLeftClickDown(wxMouseEvent& event);
50  virtual void OnLeftClickUp(wxMouseEvent& event);
51 
52  wxString m_label;
53  wxFont m_font;
54  wxPoint m_labelPosition;
55 
56  wxImage m_image;
57  wxSize m_imageSize;
58  wxPoint m_imagePosition;
59 
60  int m_borderSize = 2;
61  bool m_mouseAbove = false;
62  bool m_selected = false;
63 
64  wxSize m_buttonSize;
65 };
66 
68 {
69  public:
70  enum ControlEditorMode {
71  MODE_EDIT = 0,
72  MODE_MOVE_ELEMENT,
73  MODE_MOVE_LINE,
74  MODE_DRAG,
75  MODE_DRAG_INSERT,
76  MODE_INSERT,
77  MODE_INSERT_LINE,
78  MODE_SELECTION_RECT,
79  MODE_PASTE,
80  MODE_DRAG_PASTE
81  };
82 
83  ControlEditor(wxWindow* parent,
84  int ioflags = IOControl::IN_TERMINAL_VOLTAGE | IOControl::IN_VELOCITY | IOControl::OUT_FIELD_VOLTAGE |
85  IOControl::OUT_MEC_POWER);
86  virtual ~ControlEditor();
87 
88  virtual void AddElement(ControlElementButtonID id);
89  virtual void Redraw() { m_glCanvas->Refresh(); }
90  virtual void RotateSelectedElements(bool clockwise);
91  virtual void DeleteSelectedElements();
92  virtual void CheckConnections();
93  virtual std::vector<ConnectionLine*> GetConnectionLineList() const { return m_connectionList; }
94  virtual std::vector<ControlElement*> GetControlElementList() const { return m_elementList; }
95  virtual void SetElementsList(std::vector<ControlElement*> elementList) { m_elementList = elementList; }
96  virtual void SetConnectionsList(std::vector<ConnectionLine*> connectionList) { m_connectionList = connectionList; }
97  virtual void SetControlContainer(ControlElementContainer* ctrlContainer) { m_ctrlContainer = ctrlContainer; }
98  protected:
99  virtual void OnClose(wxCloseEvent& event);
100  virtual void OnTestClick(wxCommandEvent& event);
101  virtual void OnButtonOKClick(wxCommandEvent& event) { Close(); }
102  virtual void OnImportClick(wxCommandEvent& event);
103  virtual void OnExportClick(wxCommandEvent& event);
104  virtual void OnKeyDown(wxKeyEvent& event);
105  virtual void OnIdle(wxIdleEvent& event);
106  virtual void OnScroll(wxMouseEvent& event);
107  virtual void OnDoubleClick(wxMouseEvent& event);
108  virtual void OnLeftClickDown(wxMouseEvent& event);
109  virtual void OnLeftClickUp(wxMouseEvent& event);
110  virtual void OnMiddleDown(wxMouseEvent& event);
111  virtual void OnMiddleUp(wxMouseEvent& event);
112  virtual void OnMouseMotion(wxMouseEvent& event);
113  virtual void OnPaint(wxPaintEvent& event);
114  virtual void LeftClickDown(wxMouseEvent& event);
115 
116  void BuildControlElementPanel();
117  void SetViewport();
118  void ConsolidateTexts();
119  void SetLastElementID();
120 
121  std::vector<ConnectionLine*>::iterator DeleteLineFromList(std::vector<ConnectionLine*>::iterator& it);
122 
123  wxGLContext* m_glContext = NULL;
124  Camera* m_camera = NULL;
125 
126  ControlEditorMode m_mode = MODE_EDIT;
127 
128  wxRect2DDouble m_selectionRect;
129  wxPoint2DDouble m_startSelRect;
130 
131  std::vector<ControlElement*> m_elementList;
132  std::vector<ConnectionLine*> m_connectionList;
133 
134  ControlElementContainer* m_ctrlContainer = NULL;
135 
136  bool m_firstDraw = true;
137  int m_ioFlags;
138 
139  int m_lastElementID = 0;
140 
141  int m_inputType = 0;
142  double m_startTime = 1.0;
143  double m_slope = 1.0;
144  double m_timeStep = 1e-4;
145  double m_simTime = 10.0;
146 };
147 #endif // CONTROLEDITOR_H
Definition: Multiplier.h:8
-
Definition: Element.h:88
-
Definition: ControlElementSolver.h:20
-
Definition: Sum.h:9
-
Definition: Gain.h:11
-
Definition: FileHanding.h:19
-
Definition: Limiter.h:8
-
Definition: Camera.h:6
-
Definition: ControlEditor.h:39
-
Definition: ControlEditorBase.h:47
-
Definition: Exponential.h:8
-
Definition: ElementDataObject.h:12
-
Definition: ChartView.h:16
-
Definition: RateLimiter.h:8
-
Definition: ControlElementContainer.h:20
-
Definition: ConnectionLine.h:6
-
Definition: TransferFunction.h:11
-
Definition: ControlEditor.h:67
-
Definition: ControlElement.h:53
-
Definition: Constant.h:11
+
1 #ifndef CONTROLEDITOR_H
2 #define CONTROLEDITOR_H
3 
4 #include "ControlEditorBase.h"
5 #include <wx/wrapsizer.h>
6 #include <wx/dcclient.h>
7 #include <wx/dcscreen.h>
8 #include <wx/graphics.h>
9 #include <GL/gl.h>
10 #include <GL/glu.h>
11 
12 #include <wx/progdlg.h>
13 
14 #include "IOControl.h"
15 #include "ControlSystemTest.h"
16 
17 class FileHanding;
18 class Camera;
19 class Element;
20 class ControlElement;
21 class TransferFunction;
22 class ConnectionLine;
23 class Sum;
24 class Multiplier;
25 class Limiter;
26 class RateLimiter;
27 class Exponential;
28 class Constant;
29 class Gain;
30 
33 
34 class ChartView;
35 class ElementDataObject;
36 
37 enum ControlElementButtonID { ID_IO = 0, ID_TF, ID_SUM, ID_CONST, ID_LIMITER, ID_GAIN, ID_MULT, ID_EXP, ID_RATELIM };
38 
39 class ControlElementButton : public wxWindow
40 {
41  public:
42  ControlElementButton(wxWindow* parent, wxString label, wxImage image, wxWindowID id = wxID_ANY);
44 
45  protected:
46  virtual void OnPaint(wxPaintEvent& event);
47  virtual void OnMouseEnter(wxMouseEvent& event);
48  virtual void OnMouseLeave(wxMouseEvent& event);
49  virtual void OnLeftClickDown(wxMouseEvent& event);
50  virtual void OnLeftClickUp(wxMouseEvent& event);
51 
52  wxString m_label;
53  wxFont m_font;
54  wxPoint m_labelPosition;
55 
56  wxImage m_image;
57  wxSize m_imageSize;
58  wxPoint m_imagePosition;
59 
60  int m_borderSize = 2;
61  bool m_mouseAbove = false;
62  bool m_selected = false;
63 
64  wxSize m_buttonSize;
65 };
66 
68 {
69  public:
70  enum ControlEditorMode {
71  MODE_EDIT = 0,
72  MODE_MOVE_ELEMENT,
73  MODE_MOVE_LINE,
74  MODE_DRAG,
75  MODE_DRAG_INSERT,
76  MODE_INSERT,
77  MODE_INSERT_LINE,
78  MODE_SELECTION_RECT,
79  MODE_PASTE,
80  MODE_DRAG_PASTE
81  };
82 
83  ControlEditor(wxWindow* parent,
84  int ioflags = IOControl::IN_TERMINAL_VOLTAGE | IOControl::IN_VELOCITY | IOControl::OUT_FIELD_VOLTAGE |
85  IOControl::OUT_MEC_POWER);
86  virtual ~ControlEditor();
87 
88  virtual void AddElement(ControlElementButtonID id);
89  virtual void Redraw() { m_glCanvas->Refresh(); }
90  virtual void RotateSelectedElements(bool clockwise);
91  virtual void DeleteSelectedElements();
92  virtual void CheckConnections();
93  virtual std::vector<ConnectionLine*> GetConnectionLineList() const { return m_connectionList; }
94  virtual std::vector<ControlElement*> GetControlElementList() const { return m_elementList; }
95  virtual void SetElementsList(std::vector<ControlElement*> elementList) { m_elementList = elementList; }
96  virtual void SetConnectionsList(std::vector<ConnectionLine*> connectionList) { m_connectionList = connectionList; }
97  virtual void SetControlContainer(ControlElementContainer* ctrlContainer) { m_ctrlContainer = ctrlContainer; }
98  protected:
99  virtual void OnClose(wxCloseEvent& event);
100  virtual void OnTestClick(wxCommandEvent& event);
101  virtual void OnButtonOKClick(wxCommandEvent& event) { Close(); }
102  virtual void OnImportClick(wxCommandEvent& event);
103  virtual void OnExportClick(wxCommandEvent& event);
104  virtual void OnKeyDown(wxKeyEvent& event);
105  virtual void OnIdle(wxIdleEvent& event);
106  virtual void OnScroll(wxMouseEvent& event);
107  virtual void OnDoubleClick(wxMouseEvent& event);
108  virtual void OnLeftClickDown(wxMouseEvent& event);
109  virtual void OnLeftClickUp(wxMouseEvent& event);
110  virtual void OnMiddleDown(wxMouseEvent& event);
111  virtual void OnMiddleUp(wxMouseEvent& event);
112  virtual void OnMouseMotion(wxMouseEvent& event);
113  virtual void OnPaint(wxPaintEvent& event);
114  virtual void LeftClickDown(wxMouseEvent& event);
115 
116  void BuildControlElementPanel();
117  void SetViewport();
118  void ConsolidateTexts();
119  void SetLastElementID();
120 
121  std::vector<ConnectionLine*>::iterator DeleteLineFromList(std::vector<ConnectionLine*>::iterator& it);
122 
123  wxGLContext* m_glContext = NULL;
124  Camera* m_camera = NULL;
125 
126  ControlEditorMode m_mode = MODE_EDIT;
127 
128  wxRect2DDouble m_selectionRect;
129  wxPoint2DDouble m_startSelRect;
130 
131  std::vector<ControlElement*> m_elementList;
132  std::vector<ConnectionLine*> m_connectionList;
133 
134  ControlElementContainer* m_ctrlContainer = NULL;
135 
136  bool m_firstDraw = true;
137  int m_ioFlags;
138 
139  int m_lastElementID = 0;
140 
141  int m_inputType = 0;
142  double m_startTime = 1.0;
143  double m_slope = 1.0;
144  double m_timeStep = 1e-4;
145  double m_simTime = 10.0;
146 };
147 #endif // CONTROLEDITOR_H
+ + +
Definition: Sum.h:9
+
Definition: Gain.h:11
+ +
Definition: Limiter.h:8
+
Definition: Camera.h:6
+ + + + + + + + + + + +
+
- + diff --git a/docs/doxygen/html/_control_editor_base_8cpp_source.html b/docs/doxygen/html/_control_editor_base_8cpp_source.html new file mode 100644 index 0000000..d97e037 --- /dev/null +++ b/docs/doxygen/html/_control_editor_base_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/ControlEditorBase.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlEditorBase.cpp
+
+
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ControlEditor.wxcp
4 // Do not modify this file by hand!
6 
7 #include "ControlEditorBase.h"
8 
9 
10 // Declare the bitmap loading function
11 extern void wxC870InitBitmapResources();
12 
13 static bool bBitmapLoaded = false;
14 
15 
16 ControlEditorBase::ControlEditorBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
17  : wxFrame(parent, id, title, pos, size, style)
18 {
19  if ( !bBitmapLoaded ) {
20  // We need to initialise the default bitmap handler
21  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
22  wxC870InitBitmapResources();
23  bBitmapLoaded = true;
24  }
25  // Set icon(s) to the application/dialog
26  wxIconBundle app_icons;
27  {
28  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("ctrlEditor16"));
29  wxIcon icn;
30  icn.CopyFromBitmap(iconBmp);
31  app_icons.AddIcon( icn );
32  }
33  {
34  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("ctrlEditor32"));
35  wxIcon icn;
36  icn.CopyFromBitmap(iconBmp);
37  app_icons.AddIcon( icn );
38  }
39  {
40  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("ctrlEditor64"));
41  wxIcon icn;
42  icn.CopyFromBitmap(iconBmp);
43  app_icons.AddIcon( icn );
44  }
45  {
46  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("ctrlEditor128"));
47  wxIcon icn;
48  icn.CopyFromBitmap(iconBmp);
49  app_icons.AddIcon( icn );
50  }
51  {
52  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("ctrlEditor256"));
53  wxIcon icn;
54  icn.CopyFromBitmap(iconBmp);
55  app_icons.AddIcon( icn );
56  }
57  SetIcons( app_icons );
58 
59 
60  m_toolbarMain = this->CreateToolBar(wxTB_TEXT|wxTB_FLAT, wxID_ANY);
61  m_toolbarMain->SetToolBitmapSize(wxSize(32,32));
62 
63  m_toolbarMain->AddTool(wxID_ANY, _("New"), wxXmlResource::Get()->LoadBitmap(wxT("new32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
64 
65  m_toolbarMain->AddTool(ID_RIBBON_IMPORT, _("Import"), wxXmlResource::Get()->LoadBitmap(wxT("imp32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
66 
67  m_toolbarMain->AddTool(ID_RIBBON_EXPORT, _("Export"), wxXmlResource::Get()->LoadBitmap(wxT("exp32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
68 
69  m_toolbarMain->AddSeparator();
70 
71  m_toolbarMain->AddTool(wxID_ANY, _("Copy"), wxXmlResource::Get()->LoadBitmap(wxT("copy32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
72 
73  m_toolbarMain->AddTool(wxID_ANY, _("Paste"), wxXmlResource::Get()->LoadBitmap(wxT("paste32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
74 
75  m_toolbarMain->AddTool(wxID_ANY, _("Undo"), wxXmlResource::Get()->LoadBitmap(wxT("undo32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
76 
77  m_toolbarMain->AddTool(wxID_ANY, _("Redo"), wxXmlResource::Get()->LoadBitmap(wxT("redo32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
78 
79  m_toolbarMain->AddSeparator();
80 
81  m_toolbarMain->AddTool(wxID_ANY, _("Drag"), wxXmlResource::Get()->LoadBitmap(wxT("drag32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
82 
83  m_toolbarMain->AddTool(wxID_ANY, _("Move"), wxXmlResource::Get()->LoadBitmap(wxT("move32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
84 
85  m_toolbarMain->AddTool(wxID_ANY, _("Delete"), wxXmlResource::Get()->LoadBitmap(wxT("delete32")), wxNullBitmap, wxITEM_NORMAL, wxT(""), wxT(""), NULL);
86  m_toolbarMain->Realize();
87 
88  m_auimgr = new wxAuiManager;
89  m_auimgr->SetManagedWindow( this );
90  m_auimgr->SetFlags( wxAUI_MGR_LIVE_RESIZE|wxAUI_MGR_TRANSPARENT_HINT|wxAUI_MGR_TRANSPARENT_DRAG|wxAUI_MGR_ALLOW_ACTIVE_PANE|wxAUI_MGR_ALLOW_FLOATING);
91  m_auimgr->GetArtProvider()->SetMetric(wxAUI_DOCKART_GRADIENT_TYPE, wxAUI_GRADIENT_NONE);
92 
93  m_panelControlElements = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxTAB_TRAVERSAL);
94  m_panelControlElements->SetBackgroundColour(wxColour(wxT("rgb(255,255,255)")));
95 
96  m_auimgr->AddPane(m_panelControlElements, wxAuiPaneInfo().Name(wxT("m_controlElementsPanel")).Caption(_("Control elements")).Direction(wxAUI_DOCK_LEFT).Layer(0).Row(0).Position(0).BestSize(200,200).MinSize(10,10).MaxSize(200,200).CaptionVisible(true).MaximizeButton(false).CloseButton(false).MinimizeButton(true).PinButton(true));
97 
98  m_panelWorkspace = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxTAB_TRAVERSAL);
99 
100  m_auimgr->AddPane(m_panelWorkspace, wxAuiPaneInfo().Direction(wxAUI_DOCK_CENTER).Layer(0).Row(0).Position(0).BestSize(100,100).MinSize(100,100).MaxSize(100,100).Fixed().CaptionVisible(false).MaximizeButton(false).CloseButton(false).MinimizeButton(false).PinButton(false));
101 
102  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
103  m_panelWorkspace->SetSizer(boxSizerLvl2_1);
104 
105  int *m_glCanvasAttr = new int[ 5 ];
106  m_glCanvasAttr[0] = WX_GL_SAMPLE_BUFFERS;
107  m_glCanvasAttr[1] = 1;
108  m_glCanvasAttr[2] = WX_GL_SAMPLES;
109  m_glCanvasAttr[3] = 4;
110  m_glCanvasAttr[4] = 0;
111  m_glCanvas = new wxGLCanvas(m_panelWorkspace, wxID_ANY, m_glCanvasAttr, wxDefaultPosition, wxDLG_UNIT(m_panelWorkspace, wxSize(-1,-1)), 0);
112  wxDELETEA( m_glCanvasAttr );
113 
114  boxSizerLvl2_1->Add(m_glCanvas, 1, wxEXPAND, WXC_FROM_DIP(5));
115 
116  m_panelButtons = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxTAB_TRAVERSAL);
117 
118  m_auimgr->AddPane(m_panelButtons, wxAuiPaneInfo().Direction(wxAUI_DOCK_BOTTOM).Layer(0).Row(0).Position(0).BestSize(100,-1).MinSize(100,-1).MaxSize(100,-1).Fixed().CaptionVisible(false).MaximizeButton(false).CloseButton(false).MinimizeButton(false).PinButton(false));
119  m_auimgr->Update();
120 
121  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
122  m_panelButtons->SetSizer(boxSizerBottomButtons);
123 
124  m_buttonTest = new wxButton(m_panelButtons, wxID_ANY, _("Test system..."), wxDefaultPosition, wxDLG_UNIT(m_panelButtons, wxSize(-1,-1)), 0);
125 
126  boxSizerBottomButtons->Add(m_buttonTest, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
127 
128  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
129 
130  m_buttonOK = new wxButton(m_panelButtons, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(m_panelButtons, wxSize(-1,-1)), 0);
131 
132  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
133 
134  SetName(wxT("ControlEditorBase"));
135  SetSize(800,600);
136  if (GetSizer()) {
137  GetSizer()->Fit(this);
138  }
139  if(GetParent()) {
140  CentreOnParent(wxBOTH);
141  } else {
142  CentreOnScreen(wxBOTH);
143  }
144 #if wxVERSION_NUMBER >= 2900
145  if(!wxPersistenceManager::Get().Find(this)) {
146  wxPersistenceManager::Get().RegisterAndRestore(this);
147  } else {
148  wxPersistenceManager::Get().Restore(this);
149  }
150 #endif
151  // Connect events
152  this->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(ControlEditorBase::OnKeyDown), NULL, this);
153  this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(ControlEditorBase::OnClose), NULL, this);
154  this->Connect(ID_RIBBON_IMPORT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(ControlEditorBase::OnImportClick), NULL, this);
155  this->Connect(ID_RIBBON_EXPORT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(ControlEditorBase::OnExportClick), NULL, this);
156  m_glCanvas->Connect(wxEVT_PAINT, wxPaintEventHandler(ControlEditorBase::OnPaint), NULL, this);
157  m_glCanvas->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(ControlEditorBase::OnLeftClickDown), NULL, this);
158  m_glCanvas->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(ControlEditorBase::OnLeftClickUp), NULL, this);
159  m_glCanvas->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(ControlEditorBase::OnDoubleClick), NULL, this);
160  m_glCanvas->Connect(wxEVT_MIDDLE_DOWN, wxMouseEventHandler(ControlEditorBase::OnMiddleDown), NULL, this);
161  m_glCanvas->Connect(wxEVT_MIDDLE_UP, wxMouseEventHandler(ControlEditorBase::OnMiddleUp), NULL, this);
162  m_glCanvas->Connect(wxEVT_MOTION, wxMouseEventHandler(ControlEditorBase::OnMouseMotion), NULL, this);
163  m_glCanvas->Connect(wxEVT_MOUSEWHEEL, wxMouseEventHandler(ControlEditorBase::OnScroll), NULL, this);
164  m_glCanvas->Connect(wxEVT_IDLE, wxIdleEventHandler(ControlEditorBase::OnIdle), NULL, this);
165  m_glCanvas->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(ControlEditorBase::OnKeyDown), NULL, this);
166  m_buttonTest->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlEditorBase::OnTestClick), NULL, this);
167  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlEditorBase::OnButtonOKClick), NULL, this);
168 
169 }
170 
171 ControlEditorBase::~ControlEditorBase()
172 {
173  this->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(ControlEditorBase::OnKeyDown), NULL, this);
174  this->Disconnect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(ControlEditorBase::OnClose), NULL, this);
175  this->Disconnect(ID_RIBBON_IMPORT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(ControlEditorBase::OnImportClick), NULL, this);
176  this->Disconnect(ID_RIBBON_EXPORT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(ControlEditorBase::OnExportClick), NULL, this);
177  m_glCanvas->Disconnect(wxEVT_PAINT, wxPaintEventHandler(ControlEditorBase::OnPaint), NULL, this);
178  m_glCanvas->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(ControlEditorBase::OnLeftClickDown), NULL, this);
179  m_glCanvas->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(ControlEditorBase::OnLeftClickUp), NULL, this);
180  m_glCanvas->Disconnect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(ControlEditorBase::OnDoubleClick), NULL, this);
181  m_glCanvas->Disconnect(wxEVT_MIDDLE_DOWN, wxMouseEventHandler(ControlEditorBase::OnMiddleDown), NULL, this);
182  m_glCanvas->Disconnect(wxEVT_MIDDLE_UP, wxMouseEventHandler(ControlEditorBase::OnMiddleUp), NULL, this);
183  m_glCanvas->Disconnect(wxEVT_MOTION, wxMouseEventHandler(ControlEditorBase::OnMouseMotion), NULL, this);
184  m_glCanvas->Disconnect(wxEVT_MOUSEWHEEL, wxMouseEventHandler(ControlEditorBase::OnScroll), NULL, this);
185  m_glCanvas->Disconnect(wxEVT_IDLE, wxIdleEventHandler(ControlEditorBase::OnIdle), NULL, this);
186  m_glCanvas->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(ControlEditorBase::OnKeyDown), NULL, this);
187  m_buttonTest->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlEditorBase::OnTestClick), NULL, this);
188  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlEditorBase::OnButtonOKClick), NULL, this);
189 
190  m_auimgr->UnInit();
191  delete m_auimgr;
192 
193 }
194 
195 ControlSystemTestBase::ControlSystemTestBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
196  : wxDialog(parent, id, title, pos, size, style)
197 {
198  if ( !bBitmapLoaded ) {
199  // We need to initialise the default bitmap handler
200  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
201  wxC870InitBitmapResources();
202  bBitmapLoaded = true;
203  }
204 
205  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
206  this->SetSizer(boxSizerLvl1_1);
207 
208  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
209  m_notebook->SetName(wxT("m_notebook"));
210 
211  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
212 
213  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
214  m_notebook->AddPage(m_panelGeneral, _("General"), false);
215 
216  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
217  m_panelGeneral->SetSizer(boxSizerLvl2_1);
218 
219  m_staticTextInput = new wxStaticText(m_panelGeneral, wxID_ANY, _("Input type:"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
220 
221  boxSizerLvl2_1->Add(m_staticTextInput, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
222 
223  wxArrayString m_choiceInputArr;
224  m_choiceInputArr.Add(wxT("Step"));
225  m_choiceInputArr.Add(wxT("Ramp"));
226  m_choiceInputArr.Add(wxT("Quadratic"));
227  m_choiceInput = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceInputArr, 0);
228  m_choiceInput->SetSelection(0);
229 
230  boxSizerLvl2_1->Add(m_choiceInput, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
231 
232  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
233 
234  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
235 
236  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
237 
238  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
239 
240  m_staticTextStartTime = new wxStaticText(m_panelGeneral, wxID_ANY, _("Start time"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
241 
242  boxSizerLvl4_1->Add(m_staticTextStartTime, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
243 
244  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
245 
246  boxSizerLvl4_1->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
247 
248  m_textCtrlStartTime = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT("1,0"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
249  #if wxVERSION_NUMBER >= 3000
250  m_textCtrlStartTime->SetHint(wxT(""));
251  #endif
252 
253  boxSizerLvl5_1->Add(m_textCtrlStartTime, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
254 
255  m_staticTextSec_1 = new wxStaticText(m_panelGeneral, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
256 
257  boxSizerLvl5_1->Add(m_staticTextSec_1, 0, wxRIGHT|wxTOP|wxBOTTOM|wxALIGN_BOTTOM, WXC_FROM_DIP(5));
258 
259  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
260 
261  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
262 
263  m_staticTextSlope = new wxStaticText(m_panelGeneral, wxID_ANY, _("Slope"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
264 
265  boxSizerLvl4_2->Add(m_staticTextSlope, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
266 
267  m_textCtrlSlope = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT("1,0"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
268  #if wxVERSION_NUMBER >= 3000
269  m_textCtrlSlope->SetHint(wxT(""));
270  #endif
271 
272  boxSizerLvl4_2->Add(m_textCtrlSlope, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
273 
274  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
275 
276  gridSizerLvl3_1->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
277 
278  m_staticTextStep = new wxStaticText(m_panelGeneral, wxID_ANY, _("Time step"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
279 
280  boxSizerLvl4_3->Add(m_staticTextStep, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
281 
282  m_textCtrlTimeStep = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT("0,0001"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
283  #if wxVERSION_NUMBER >= 3000
284  m_textCtrlTimeStep->SetHint(wxT(""));
285  #endif
286 
287  boxSizerLvl4_3->Add(m_textCtrlTimeStep, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
288 
289  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
290 
291  gridSizerLvl3_1->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
292 
293  m_staticTextSimTime = new wxStaticText(m_panelGeneral, wxID_ANY, _("Simulation time"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
294 
295  boxSizerLvl4_4->Add(m_staticTextSimTime, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
296 
297  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
298 
299  boxSizerLvl4_4->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
300 
301  m_textCtrlSimTime = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT("10,0"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
302  #if wxVERSION_NUMBER >= 3000
303  m_textCtrlSimTime->SetHint(wxT(""));
304  #endif
305 
306  boxSizerLvl5_2->Add(m_textCtrlSimTime, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
307 
308  m_staticTextSec_2 = new wxStaticText(m_panelGeneral, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
309 
310  boxSizerLvl5_2->Add(m_staticTextSec_2, 0, wxRIGHT|wxTOP|wxBOTTOM|wxALIGN_BOTTOM, WXC_FROM_DIP(5));
311 
312  wxBoxSizer* boxSizerBotomButtons = new wxBoxSizer(wxHORIZONTAL);
313 
314  boxSizerLvl1_1->Add(boxSizerBotomButtons, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
315 
316  m_buttonRun = new wxButton(this, wxID_ANY, _("Run"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
317 
318  boxSizerBotomButtons->Add(m_buttonRun, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
319 
320  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
321 
322  boxSizerBotomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
323 
324 
325  #if wxVERSION_NUMBER >= 2900
326  if(!wxPersistenceManager::Get().Find(m_notebook)){
327  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
328  } else {
329  wxPersistenceManager::Get().Restore(m_notebook);
330  }
331  #endif
332 
333  SetName(wxT("ControlSystemTestBase"));
334  SetSize(-1,-1);
335  if (GetSizer()) {
336  GetSizer()->Fit(this);
337  }
338  if(GetParent()) {
339  CentreOnParent(wxBOTH);
340  } else {
341  CentreOnScreen(wxBOTH);
342  }
343 #if wxVERSION_NUMBER >= 2900
344  if(!wxPersistenceManager::Get().Find(this)) {
345  wxPersistenceManager::Get().RegisterAndRestore(this);
346  } else {
347  wxPersistenceManager::Get().Restore(this);
348  }
349 #endif
350  // Connect events
351  m_buttonRun->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlSystemTestBase::OnRunButtonClick), NULL, this);
352  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlSystemTestBase::OnCancelButtonClick), NULL, this);
353 
354 }
355 
356 ControlSystemTestBase::~ControlSystemTestBase()
357 {
358  m_buttonRun->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlSystemTestBase::OnRunButtonClick), NULL, this);
359  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ControlSystemTestBase::OnCancelButtonClick), NULL, this);
360 
361 }
+
+ + + + diff --git a/docs/doxygen/html/_control_editor_base_8h_source.html b/docs/doxygen/html/_control_editor_base_8h_source.html index 2fd979d..fb66386 100644 --- a/docs/doxygen/html/_control_editor_base_8h_source.html +++ b/docs/doxygen/html/_control_editor_base_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ControlEditorBase.h Source File +Project/ControlEditorBase.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ControlEditorBase.h
-
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ControlEditor.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_CONTROLEDITOR_BASE_CLASSES_H
8 #define _PSP_PROJECT_CONTROLEDITOR_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/toolbar.h>
18 #include <wx/aui/framemanager.h>
19 #include <wx/aui/dockart.h>
20 #include <wx/panel.h>
21 #include <wx/glcanvas.h>
22 #include <wx/button.h>
23 #include <wx/dialog.h>
24 #include <wx/notebook.h>
25 #include <wx/imaglist.h>
26 #include <wx/stattext.h>
27 #include <wx/choice.h>
28 #include <wx/arrstr.h>
29 #include <wx/textctrl.h>
30 #if wxVERSION_NUMBER >= 2900
31 #include <wx/persist.h>
32 #include <wx/persist/toplevel.h>
33 #include <wx/persist/bookctrl.h>
34 #include <wx/persist/treebook.h>
35 #endif
36 
37 #ifdef WXC_FROM_DIP
38 #undef WXC_FROM_DIP
39 #endif
40 #if wxVERSION_NUMBER >= 3100
41 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
42 #else
43 #define WXC_FROM_DIP(x) x
44 #endif
45 
46 
47 class ControlEditorBase : public wxFrame
48 {
49 public:
50  enum {
51  ID_RIBBON_EXPORT = 10001,
52  ID_RIBBON_IMPORT = 10002,
53  };
54 protected:
55  wxToolBar* m_toolbarMain;
56  wxAuiManager* m_auimgr;
57  wxPanel* m_panelControlElements;
58  wxPanel* m_panelWorkspace;
59  wxGLCanvas* m_glCanvas;
60  wxPanel* m_panelButtons;
61  wxButton* m_buttonTest;
62  wxButton* m_buttonOK;
63 
64 protected:
65  virtual void OnKeyDown(wxKeyEvent& event) { event.Skip(); }
66  virtual void OnClose(wxCloseEvent& event) { event.Skip(); }
67  virtual void OnImportClick(wxCommandEvent& event) { event.Skip(); }
68  virtual void OnExportClick(wxCommandEvent& event) { event.Skip(); }
69  virtual void OnPaint(wxPaintEvent& event) { event.Skip(); }
70  virtual void OnLeftClickDown(wxMouseEvent& event) { event.Skip(); }
71  virtual void OnLeftClickUp(wxMouseEvent& event) { event.Skip(); }
72  virtual void OnDoubleClick(wxMouseEvent& event) { event.Skip(); }
73  virtual void OnMiddleDown(wxMouseEvent& event) { event.Skip(); }
74  virtual void OnMiddleUp(wxMouseEvent& event) { event.Skip(); }
75  virtual void OnMouseMotion(wxMouseEvent& event) { event.Skip(); }
76  virtual void OnScroll(wxMouseEvent& event) { event.Skip(); }
77  virtual void OnIdle(wxIdleEvent& event) { event.Skip(); }
78  virtual void OnTestClick(wxCommandEvent& event) { event.Skip(); }
79  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
80 
81 public:
82  wxToolBar* GetToolbarMain() { return m_toolbarMain; }
83  wxPanel* GetPanelControlElements() { return m_panelControlElements; }
84  wxGLCanvas* GetGlCanvas() { return m_glCanvas; }
85  wxPanel* GetPanelWorkspace() { return m_panelWorkspace; }
86  wxButton* GetButtonTest() { return m_buttonTest; }
87  wxButton* GetButtonOK() { return m_buttonOK; }
88  wxPanel* GetPanelButtons() { return m_panelButtons; }
89  wxAuiManager* GetAuimgr() { return m_auimgr; }
90  ControlEditorBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Control editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(800,600), long style = wxDEFAULT_FRAME_STYLE);
91  virtual ~ControlEditorBase();
92 };
93 
94 
95 class ControlSystemTestBase : public wxDialog
96 {
97 protected:
98  wxNotebook* m_notebook;
99  wxPanel* m_panelGeneral;
100  wxStaticText* m_staticTextInput;
101  wxChoice* m_choiceInput;
102  wxStaticText* m_staticTextStartTime;
103  wxTextCtrl* m_textCtrlStartTime;
104  wxStaticText* m_staticTextSec_1;
105  wxStaticText* m_staticTextSlope;
106  wxTextCtrl* m_textCtrlSlope;
107  wxStaticText* m_staticTextStep;
108  wxTextCtrl* m_textCtrlTimeStep;
109  wxStaticText* m_staticTextSimTime;
110  wxTextCtrl* m_textCtrlSimTime;
111  wxStaticText* m_staticTextSec_2;
112  wxButton* m_buttonRun;
113  wxButton* m_buttonCancel;
114 
115 protected:
116  virtual void OnRunButtonClick(wxCommandEvent& event) { event.Skip(); }
117  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
118 
119 public:
120  wxStaticText* GetStaticTextInput() { return m_staticTextInput; }
121  wxChoice* GetChoiceInput() { return m_choiceInput; }
122  wxStaticText* GetStaticTextStartTime() { return m_staticTextStartTime; }
123  wxTextCtrl* GetTextCtrlStartTime() { return m_textCtrlStartTime; }
124  wxStaticText* GetStaticTextSec_1() { return m_staticTextSec_1; }
125  wxStaticText* GetStaticTextSlope() { return m_staticTextSlope; }
126  wxTextCtrl* GetTextCtrlSlope() { return m_textCtrlSlope; }
127  wxStaticText* GetStaticTextStep() { return m_staticTextStep; }
128  wxTextCtrl* GetTextCtrlTimeStep() { return m_textCtrlTimeStep; }
129  wxStaticText* GetStaticTextSimTime() { return m_staticTextSimTime; }
130  wxTextCtrl* GetTextCtrlSimTime() { return m_textCtrlSimTime; }
131  wxStaticText* GetStaticTextSec_2() { return m_staticTextSec_2; }
132  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
133  wxNotebook* GetNotebook() { return m_notebook; }
134  wxButton* GetButtonRun() { return m_buttonRun; }
135  wxButton* GetButtonCancel() { return m_buttonCancel; }
136  ControlSystemTestBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Control system test"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
137  virtual ~ControlSystemTestBase();
138 };
139 
140 #endif
Definition: ControlEditorBase.h:95
-
Definition: ControlEditorBase.h:47
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ControlEditor.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_CONTROLEDITOR_BASE_CLASSES_H
8 #define _PSP_PROJECT_CONTROLEDITOR_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/toolbar.h>
18 #include <wx/aui/framemanager.h>
19 #include <wx/aui/dockart.h>
20 #include <wx/panel.h>
21 #include <wx/glcanvas.h>
22 #include <wx/button.h>
23 #include <wx/dialog.h>
24 #include <wx/notebook.h>
25 #include <wx/imaglist.h>
26 #include <wx/stattext.h>
27 #include <wx/choice.h>
28 #include <wx/arrstr.h>
29 #include <wx/textctrl.h>
30 #if wxVERSION_NUMBER >= 2900
31 #include <wx/persist.h>
32 #include <wx/persist/toplevel.h>
33 #include <wx/persist/bookctrl.h>
34 #include <wx/persist/treebook.h>
35 #endif
36 
37 #ifdef WXC_FROM_DIP
38 #undef WXC_FROM_DIP
39 #endif
40 #if wxVERSION_NUMBER >= 3100
41 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
42 #else
43 #define WXC_FROM_DIP(x) x
44 #endif
45 
46 
47 class ControlEditorBase : public wxFrame
48 {
49 public:
50  enum {
51  ID_RIBBON_EXPORT = 10001,
52  ID_RIBBON_IMPORT = 10002,
53  };
54 protected:
55  wxToolBar* m_toolbarMain;
56  wxAuiManager* m_auimgr;
57  wxPanel* m_panelControlElements;
58  wxPanel* m_panelWorkspace;
59  wxGLCanvas* m_glCanvas;
60  wxPanel* m_panelButtons;
61  wxButton* m_buttonTest;
62  wxButton* m_buttonOK;
63 
64 protected:
65  virtual void OnKeyDown(wxKeyEvent& event) { event.Skip(); }
66  virtual void OnClose(wxCloseEvent& event) { event.Skip(); }
67  virtual void OnImportClick(wxCommandEvent& event) { event.Skip(); }
68  virtual void OnExportClick(wxCommandEvent& event) { event.Skip(); }
69  virtual void OnPaint(wxPaintEvent& event) { event.Skip(); }
70  virtual void OnLeftClickDown(wxMouseEvent& event) { event.Skip(); }
71  virtual void OnLeftClickUp(wxMouseEvent& event) { event.Skip(); }
72  virtual void OnDoubleClick(wxMouseEvent& event) { event.Skip(); }
73  virtual void OnMiddleDown(wxMouseEvent& event) { event.Skip(); }
74  virtual void OnMiddleUp(wxMouseEvent& event) { event.Skip(); }
75  virtual void OnMouseMotion(wxMouseEvent& event) { event.Skip(); }
76  virtual void OnScroll(wxMouseEvent& event) { event.Skip(); }
77  virtual void OnIdle(wxIdleEvent& event) { event.Skip(); }
78  virtual void OnTestClick(wxCommandEvent& event) { event.Skip(); }
79  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
80 
81 public:
82  wxToolBar* GetToolbarMain() { return m_toolbarMain; }
83  wxPanel* GetPanelControlElements() { return m_panelControlElements; }
84  wxGLCanvas* GetGlCanvas() { return m_glCanvas; }
85  wxPanel* GetPanelWorkspace() { return m_panelWorkspace; }
86  wxButton* GetButtonTest() { return m_buttonTest; }
87  wxButton* GetButtonOK() { return m_buttonOK; }
88  wxPanel* GetPanelButtons() { return m_panelButtons; }
89  wxAuiManager* GetAuimgr() { return m_auimgr; }
90  ControlEditorBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Control editor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(800,600), long style = wxDEFAULT_FRAME_STYLE);
91  virtual ~ControlEditorBase();
92 };
93 
94 
95 class ControlSystemTestBase : public wxDialog
96 {
97 protected:
98  wxNotebook* m_notebook;
99  wxPanel* m_panelGeneral;
100  wxStaticText* m_staticTextInput;
101  wxChoice* m_choiceInput;
102  wxStaticText* m_staticTextStartTime;
103  wxTextCtrl* m_textCtrlStartTime;
104  wxStaticText* m_staticTextSec_1;
105  wxStaticText* m_staticTextSlope;
106  wxTextCtrl* m_textCtrlSlope;
107  wxStaticText* m_staticTextStep;
108  wxTextCtrl* m_textCtrlTimeStep;
109  wxStaticText* m_staticTextSimTime;
110  wxTextCtrl* m_textCtrlSimTime;
111  wxStaticText* m_staticTextSec_2;
112  wxButton* m_buttonRun;
113  wxButton* m_buttonCancel;
114 
115 protected:
116  virtual void OnRunButtonClick(wxCommandEvent& event) { event.Skip(); }
117  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
118 
119 public:
120  wxStaticText* GetStaticTextInput() { return m_staticTextInput; }
121  wxChoice* GetChoiceInput() { return m_choiceInput; }
122  wxStaticText* GetStaticTextStartTime() { return m_staticTextStartTime; }
123  wxTextCtrl* GetTextCtrlStartTime() { return m_textCtrlStartTime; }
124  wxStaticText* GetStaticTextSec_1() { return m_staticTextSec_1; }
125  wxStaticText* GetStaticTextSlope() { return m_staticTextSlope; }
126  wxTextCtrl* GetTextCtrlSlope() { return m_textCtrlSlope; }
127  wxStaticText* GetStaticTextStep() { return m_staticTextStep; }
128  wxTextCtrl* GetTextCtrlTimeStep() { return m_textCtrlTimeStep; }
129  wxStaticText* GetStaticTextSimTime() { return m_staticTextSimTime; }
130  wxTextCtrl* GetTextCtrlSimTime() { return m_textCtrlSimTime; }
131  wxStaticText* GetStaticTextSec_2() { return m_staticTextSec_2; }
132  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
133  wxNotebook* GetNotebook() { return m_notebook; }
134  wxButton* GetButtonRun() { return m_buttonRun; }
135  wxButton* GetButtonCancel() { return m_buttonCancel; }
136  ControlSystemTestBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Control system test"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
137  virtual ~ControlSystemTestBase();
138 };
139 
140 #endif
+
+
- + diff --git a/docs/doxygen/html/_control_editor_bitmaps_8cpp_source.html b/docs/doxygen/html/_control_editor_bitmaps_8cpp_source.html new file mode 100644 index 0000000..033ce72 --- /dev/null +++ b/docs/doxygen/html/_control_editor_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/ControlEditorBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlEditorBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 745;
25 static unsigned char xml_res_file_0[] = {
26 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
27 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
28 72,89,115,0,0,5,74,0,0,5,74,1,26,195,117,109,0,0,0,25,116,69,88,116,83,
29 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
30 46,111,114,103,155,238,60,26,0,0,2,102,73,68,65,84,88,133,197,150,75,72,
31 84,97,20,199,127,103,102,156,33,74,90,132,74,11,117,81,11,55,209,46,40,
32 92,70,16,173,130,137,220,4,81,164,102,20,61,209,76,131,102,132,80,202,116,
33 72,68,72,138,194,136,202,6,162,218,84,20,49,6,69,155,22,46,196,213,140,
34 211,131,194,77,77,249,184,119,230,107,49,134,58,119,30,247,53,117,224,194,
35 229,255,125,247,156,31,255,115,248,238,39,74,41,114,67,66,31,166,128,245,
36 134,5,19,177,153,25,105,33,58,122,246,226,237,78,51,251,125,5,244,26,187,
37 0,62,210,28,151,123,231,7,122,210,158,147,93,99,29,165,246,123,236,20,41,
38 21,1,52,218,212,131,246,193,80,211,149,255,2,0,224,71,163,77,198,207,68,
39 66,251,251,77,1,200,133,215,143,165,243,85,66,186,99,113,144,74,171,5,79,
40 51,102,208,42,208,105,147,241,83,67,225,125,131,37,1,80,108,4,169,37,173,
41 215,161,207,91,118,230,170,12,112,142,59,6,221,71,154,22,162,39,134,67,
42 193,235,197,1,86,134,174,129,190,96,149,129,62,137,112,128,103,121,33,154,
43 37,122,108,36,28,28,54,7,224,0,162,83,110,18,99,171,65,247,146,225,8,209,
44 214,27,225,189,35,230,0,28,64,52,242,145,23,108,99,134,26,146,84,243,137,
45 42,62,83,197,87,54,176,155,137,230,222,240,193,107,127,247,22,58,7,86,67,
46 0,248,2,150,32,118,242,158,30,14,211,173,90,243,45,111,111,95,122,49,55,
47 108,54,157,232,98,148,203,50,84,116,143,249,105,183,9,209,193,45,250,36,
48 82,112,189,116,11,114,33,32,111,59,166,168,71,80,75,15,8,217,127,140,160,
49 8,242,146,36,213,68,104,114,8,80,4,162,65,61,180,156,10,236,30,197,186,
50 6,250,162,173,79,221,1,128,44,128,11,16,206,126,70,46,64,24,102,96,77,133,
51 135,254,93,181,150,146,60,79,204,241,104,250,183,59,0,62,143,208,88,183,
52 206,82,146,169,217,249,172,19,62,191,115,128,159,11,105,182,12,79,90,78,
53 180,156,209,26,132,187,23,18,27,51,225,254,141,200,34,132,161,5,107,253,
54 30,238,7,55,57,98,120,19,79,209,251,110,214,84,59,202,118,39,52,235,132,
55 193,129,95,139,25,246,220,157,118,15,2,138,58,81,62,7,86,66,20,113,162,
56 252,0,37,32,12,45,168,12,120,121,123,168,193,81,189,137,153,20,173,79,226,
57 171,197,180,150,65,72,226,245,43,132,47,5,1,244,140,34,150,72,57,2,152,
58 252,62,103,20,85,38,165,46,237,168,207,149,13,0,115,90,134,163,79,227,185,
59 114,217,226,223,204,64,145,88,118,64,152,69,201,183,178,85,18,249,145,79,
60 254,3,152,12,212,147,138,121,230,178,0,0,0,0,73,69,78,68,174,66,96,130};
61 
62 static size_t xml_res_size_1 = 2807;
63 static unsigned char xml_res_file_1[] = {
64 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,
65 0,0,195,62,97,203,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
66 72,89,115,0,0,17,24,0,0,17,24,1,91,182,80,54,0,0,0,25,116,69,88,116,83,
67 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
68 46,111,114,103,155,238,60,26,0,0,10,116,73,68,65,84,120,156,237,157,95,
69 76,20,219,29,199,191,203,46,186,182,122,21,146,251,71,175,212,127,81,180,
70 86,139,127,22,227,195,173,32,75,8,4,255,36,64,241,133,91,77,205,250,36,
71 229,193,122,235,67,233,109,140,9,189,185,241,134,135,210,94,131,9,166,149,
72 4,171,209,162,137,197,69,121,88,16,21,173,232,2,137,90,96,193,191,88,47,
73 18,244,226,229,239,233,195,58,148,101,103,103,102,103,103,230,204,46,191,
74 79,114,18,216,61,115,230,55,231,247,217,157,217,51,103,102,0,130,32,8,130,
75 32,8,130,32,8,130,32,8,130,32,8,130,32,136,240,89,196,59,0,66,25,86,157,
76 218,237,3,240,19,0,119,1,188,209,105,29,132,137,25,3,192,0,12,3,248,22,
77 192,167,124,195,33,140,70,16,64,40,67,0,190,1,240,9,207,160,8,227,152,46,
78 128,80,126,128,255,27,97,33,191,208,8,35,8,37,128,80,190,7,240,53,128,143,
79 120,5,72,232,203,164,0,9,9,9,108,246,236,217,161,68,120,11,224,43,0,31,
80 242,10,148,208,135,73,1,178,179,179,89,111,111,47,43,46,46,102,118,187,
81 93,74,132,114,208,49,66,204,16,32,128,64,24,34,124,204,43,112,66,27,68,
82 5,16,232,233,233,97,197,197,197,114,187,6,18,33,138,145,20,32,12,17,222,
83 0,40,3,144,200,107,67,8,117,40,18,64,192,231,243,49,151,203,197,108,54,
84 155,156,8,9,188,54,136,8,143,176,4,32,17,98,15,85,2,8,116,119,119,203,137,
85 48,8,18,193,212,68,36,128,10,17,22,240,218,80,66,28,77,4,16,232,234,234,
86 34,17,162,12,77,5,16,232,236,236,100,46,151,139,89,173,214,80,34,124,7,
87 224,75,0,243,57,109,55,241,30,93,4,16,232,232,232,96,69,69,69,82,34,188,
88 2,137,192,21,93,5,80,33,194,7,156,250,97,198,98,136,0,2,237,237,237,114,
89 34,252,23,36,130,161,24,42,128,64,91,91,27,137,96,18,184,8,48,93,132,184,
90 184,56,41,17,190,0,240,35,94,29,20,235,112,21,64,192,235,245,178,130,130,
91 2,102,177,88,66,137,240,18,36,130,46,152,66,0,129,251,247,239,43,21,97,
92 14,175,14,139,53,76,37,128,128,2,17,250,64,34,104,130,41,5,16,184,119,239,
93 30,137,160,51,166,22,64,32,12,17,236,188,58,50,90,137,10,1,4,90,91,91,229,
94 68,232,5,240,27,144,8,138,137,42,1,4,154,155,155,89,110,110,110,40,9,72,
95 132,48,136,74,1,4,20,136,208,3,191,8,179,57,245,175,233,137,106,1,4,174,
96 95,191,78,34,168,36,98,1,70,71,71,89,127,127,127,64,25,26,26,210,36,177,
97 211,219,237,239,239,103,131,131,131,33,235,55,53,53,201,137,224,3,137,16,
98 64,196,2,120,60,158,160,142,62,124,248,176,218,156,79,114,228,200,145,160,
99 118,103,205,154,197,46,93,186,36,187,108,99,99,163,18,17,92,0,108,198,118,
100 183,249,48,165,0,229,229,229,65,109,90,173,86,86,83,83,19,118,108,25,25,
101 25,82,34,116,99,134,139,96,58,1,78,157,58,21,244,51,207,98,177,176,202,
102 202,74,213,109,122,60,30,182,125,251,118,18,65,4,83,9,112,254,252,249,160,
103 249,132,22,139,133,85,84,84,168,106,79,44,86,25,17,186,48,195,68,48,141,
104 0,245,245,245,162,87,30,149,149,149,169,138,75,46,230,244,244,116,37,34,
105 232,117,107,30,211,96,10,1,110,220,184,193,230,206,157,27,212,78,105,105,
106 169,170,152,148,226,241,120,88,90,90,154,148,8,29,0,62,71,12,139,192,93,
107 0,175,215,203,18,19,19,131,218,56,120,240,160,170,120,212,224,241,120,216,
108 182,109,219,102,164,8,92,5,232,236,236,100,11,23,46,12,90,126,239,222,189,
109 108,98,98,66,85,60,145,224,118,187,89,106,106,170,148,8,237,224,36,66,156,
110 209,43,212,155,151,47,95,34,59,59,27,207,159,63,15,120,61,63,63,31,149,
111 149,149,176,88,44,134,199,228,116,58,113,243,230,77,184,221,110,164,166,
112 166,138,85,249,41,128,83,0,238,193,96,17,98,74,128,129,129,1,100,101,101,
113 225,225,195,135,1,175,239,220,185,19,213,213,213,176,90,249,126,211,78,
114 21,193,225,112,136,85,89,139,64,17,116,207,79,204,8,48,52,52,132,220,220,
115 92,180,182,182,6,188,158,145,145,129,154,154,26,196,199,199,115,138,44,
116 24,167,211,137,91,183,110,193,237,118,99,243,230,205,98,85,166,138,80,0,
117 64,183,175,173,169,2,204,210,107,37,122,51,50,50,130,188,188,60,52,53,53,
118 5,188,190,117,235,86,92,184,112,1,118,187,57,207,222,58,157,78,180,180,
119 180,72,137,240,51,0,103,0,220,135,206,34,0,192,127,16,249,52,40,43,128,
120 76,0,19,120,127,128,179,116,233,82,86,87,87,199,70,71,71,195,58,112,82,
121 122,16,56,54,54,198,10,10,10,130,234,166,164,164,176,254,254,126,173,142,
122 227,12,193,237,118,179,77,155,54,73,29,44,202,137,176,17,192,31,1,252,29,
123 192,63,1,252,5,192,30,0,115,149,36,111,240,253,74,212,78,131,218,6,160,
124 45,84,240,107,214,172,97,87,175,94,85,220,25,74,4,152,152,152,96,251,247,
125 239,15,170,151,156,156,204,94,188,120,161,117,126,12,97,98,98,130,213,214,
126 214,178,141,27,55,74,137,48,125,215,176,2,64,157,68,253,151,240,15,64,41,
127 18,64,40,225,204,126,217,11,96,84,34,0,6,128,217,108,54,118,226,196,9,69,
128 29,161,68,128,67,135,14,5,213,89,177,98,5,123,250,244,169,30,185,49,20,
129 65,132,13,27,54,200,137,112,4,254,107,32,37,251,254,125,249,43,36,118,35,
130 211,5,80,42,194,47,0,140,40,12,128,89,173,86,86,95,95,47,219,1,114,2,28,
131 61,122,52,232,253,197,139,23,179,174,174,46,61,243,98,56,10,69,8,167,124,
132 17,174,0,66,17,155,253,18,7,255,45,225,195,10,34,57,57,89,246,152,64,74,
133 128,138,138,138,160,247,18,19,19,217,131,7,15,140,200,9,23,198,199,199,
134 89,109,109,45,75,73,73,137,84,128,119,0,146,212,8,32,38,66,134,218,64,46,
135 95,190,44,185,193,161,4,168,174,174,22,189,230,47,46,46,142,157,59,119,
136 206,160,116,240,99,124,124,156,157,57,115,134,173,90,181,42,18,9,254,16,
137 137,0,66,241,1,248,151,218,32,74,74,74,36,55,84,76,0,135,195,193,226,227,
138 227,67,182,57,103,206,28,214,220,220,108,80,42,248,114,246,236,217,72,4,
139 184,46,36,61,146,129,160,37,0,178,212,46,220,211,211,19,246,50,45,45,45,
140 24,29,29,157,252,127,250,200,222,187,119,239,176,99,199,14,60,122,244,72,
141 109,88,81,195,227,199,143,35,89,124,137,240,7,183,145,192,72,199,228,75,
142 74,74,112,250,244,105,196,197,5,110,194,171,87,175,144,149,149,133,190,
143 190,190,136,218,55,59,17,246,31,19,254,136,68,128,30,248,127,123,170,98,
144 201,146,37,242,149,66,176,111,223,62,28,63,126,28,133,133,133,40,43,43,
145 11,122,191,187,187,27,185,185,185,120,251,246,173,234,117,152,157,164,36,
146 209,227,56,165,136,126,253,170,57,8,76,87,184,76,80,169,171,171,147,220,
147 199,137,29,3,0,96,121,121,121,108,108,108,44,160,110,73,73,137,104,221,
148 156,156,156,176,71,32,205,142,70,7,129,191,87,35,64,168,159,129,255,14,
149 55,128,213,171,87,171,250,25,152,158,158,206,70,70,70,68,59,37,63,63,95,
150 116,93,7,14,28,208,43,23,134,162,225,207,192,33,132,249,51,80,110,32,232,
151 51,132,49,16,100,179,217,216,181,107,215,100,55,56,220,9,33,195,195,195,
152 33,167,106,31,59,118,76,203,92,24,138,48,16,164,65,226,133,242,219,16,121,
153 140,104,40,248,115,37,18,216,108,54,118,242,228,73,69,27,174,102,70,208,
154 192,192,0,91,191,126,125,208,114,22,139,133,85,85,85,105,145,15,195,80,
155 56,2,216,10,224,119,240,223,243,72,73,242,43,160,96,40,248,5,212,157,12,
156 250,12,254,179,85,162,43,95,187,118,45,107,104,104,80,220,1,106,167,132,
157 61,121,242,132,37,37,37,5,45,27,31,31,47,123,220,97,6,84,158,12,90,6,224,
158 178,68,253,62,0,191,150,75,160,22,167,131,227,224,31,29,156,60,29,188,108,
159 217,50,118,229,202,149,160,3,55,57,34,153,19,232,245,122,217,130,5,11,130,
160 150,159,55,111,30,187,123,247,174,154,188,232,142,194,196,203,157,14,78,
161 129,127,148,239,111,0,46,0,248,51,128,95,2,248,177,146,228,105,57,33,132,
162 251,172,224,134,134,6,209,235,1,22,45,90,196,124,62,159,170,152,244,66,
163 131,121,0,170,153,58,14,48,162,117,227,60,73,75,75,67,85,85,85,208,64,209,
164 179,103,207,144,147,147,131,215,175,95,115,138,236,255,212,215,215,195,
165 225,112,32,51,51,19,119,238,220,17,171,210,6,255,39,248,231,0,254,1,191,
166 12,154,18,51,115,2,197,216,179,103,143,232,64,81,71,71,7,118,239,222,141,
167 225,225,97,14,81,249,19,159,154,154,138,204,204,76,220,190,125,91,172,74,
168 59,128,95,65,199,196,235,13,247,93,192,84,66,13,20,21,22,22,178,241,241,
169 113,85,109,170,193,237,118,51,135,195,33,245,85,223,134,24,185,80,196,84,
170 2,72,13,20,105,113,207,1,57,204,124,97,136,94,152,74,0,198,252,3,69,161,
171 174,224,45,47,47,87,221,174,20,110,183,155,109,217,178,101,70,37,94,192,
172 116,2,48,22,122,160,72,235,201,36,209,116,113,168,105,175,87,183,219,237,
173 88,190,124,121,192,107,137,137,145,61,63,114,254,252,249,184,120,241,34,
174 118,237,218,133,193,193,193,128,247,74,75,75,177,110,221,58,172,92,185,
175 82,117,251,141,141,141,40,45,45,69,67,67,67,168,42,93,0,254,4,224,36,128,
176 113,213,43,138,2,98,226,46,97,74,9,227,190,0,166,253,192,105,205,140,16,
177 128,238,12,18,154,152,22,128,110,18,37,79,76,10,208,216,216,200,156,78,
178 167,84,226,125,152,225,137,23,136,41,1,20,222,40,146,18,63,133,152,16,128,
179 110,21,171,158,168,22,128,18,31,57,81,41,0,221,46,94,59,162,74,0,225,129,
180 17,160,196,107,70,84,8,160,224,73,33,143,65,137,87,133,169,5,160,135,70,
181 233,143,41,5,160,199,198,25,135,169,4,160,7,71,26,143,41,4,8,227,209,177,
182 148,120,141,225,42,128,215,235,149,123,120,52,61,51,88,103,184,62,62,94,
183 230,169,225,95,2,152,199,169,95,102,12,134,10,208,222,222,206,138,138,138,
184 152,213,106,149,75,252,7,156,250,99,198,97,136,0,10,18,255,10,148,120,46,
185 232,42,64,71,71,135,210,196,207,231,180,253,51,30,93,4,232,236,236,100,
186 46,151,75,42,241,223,129,18,111,10,52,21,160,171,171,139,185,92,174,160,
187 7,63,77,41,131,0,202,0,44,224,181,193,68,32,154,8,64,137,143,94,34,18,160,
188 187,187,155,18,31,229,168,18,32,140,196,39,240,218,48,66,25,97,9,224,243,
189 249,228,18,255,6,148,248,168,66,145,0,62,159,143,21,23,23,139,222,200,1,
190 129,137,143,236,146,32,194,112,36,5,232,233,233,81,146,248,114,0,31,243,
191 218,0,34,50,68,5,232,237,237,149,75,252,91,80,226,99,130,0,1,132,196,219,
192 237,118,185,196,127,194,43,96,66,91,38,5,72,72,72,144,251,196,127,5,224,
193 67,94,129,18,250,48,41,64,136,242,61,128,175,1,124,196,43,64,66,95,66,9,
194 240,3,128,111,1,44,228,23,26,97,4,211,5,24,2,240,13,104,31,63,99,16,4,24,
195 134,255,19,191,136,111,56,132,209,12,193,159,248,79,121,7,66,240,129,62,
196 241,4,65,16,4,65,16,4,65,16,4,65,16,4,65,16,4,65,16,38,224,127,0,16,175,
197 20,218,109,78,242,0,0,0,0,73,69,78,68,174,66,96,130};
198 
199 static size_t xml_res_size_2 = 499;
200 static unsigned char xml_res_file_2[] = {
201 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,
202 0,31,243,255,97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
203 72,89,115,0,0,2,35,0,0,2,35,1,65,239,211,26,0,0,0,25,116,69,88,116,83,111,
204 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
205 111,114,103,155,238,60,26,0,0,1,112,73,68,65,84,56,141,165,145,59,107,194,
206 96,20,134,95,77,200,80,219,46,78,46,118,42,226,104,28,34,116,53,155,14,
207 130,155,16,39,41,217,234,146,12,237,218,201,198,161,63,160,253,27,173,184,
208 8,109,71,131,83,64,161,117,136,16,147,144,161,160,161,169,228,116,169,165,
209 23,181,94,30,56,240,13,231,125,248,206,57,192,142,48,223,222,73,0,33,128,
210 96,43,1,207,243,167,133,66,225,134,227,184,164,105,154,79,155,138,192,243,
211 188,98,89,22,57,142,67,138,162,244,179,217,236,53,128,195,141,5,115,108,
212 219,38,85,85,251,153,76,102,165,232,107,132,68,34,113,82,169,84,68,223,
213 247,161,235,58,210,233,52,38,147,73,92,150,101,33,22,139,149,167,211,233,
214 177,101,89,143,0,222,86,10,60,207,67,167,211,129,109,219,112,93,23,162,
215 40,34,159,207,199,75,165,146,192,48,76,121,54,155,29,141,70,163,7,0,239,
216 243,236,45,128,51,142,227,76,73,146,200,48,12,42,22,139,84,175,215,105,
217 17,166,105,146,44,203,207,44,203,122,0,46,163,0,8,128,31,134,97,52,18,137,
218 0,0,82,169,20,124,223,71,175,215,91,181,54,250,172,159,75,52,12,131,154,
219 205,38,5,65,64,213,106,149,134,195,33,17,17,141,199,99,82,85,181,47,8,194,
220 21,128,189,127,175,176,238,53,216,101,255,115,28,7,154,166,13,90,173,214,
221 157,174,235,23,0,94,23,245,253,17,184,174,139,70,163,49,104,183,219,247,
222 221,110,247,124,89,112,225,8,181,90,237,37,151,203,105,0,246,215,10,253,
223 34,9,224,96,155,224,78,124,0,2,99,224,75,202,65,61,93,0,0,0,0,73,69,78,
224 68,174,66,96,130};
225 
226 static size_t xml_res_size_3 = 6687;
227 static unsigned char xml_res_file_3[] = {
228 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0,
229 92,114,168,102,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,
230 89,115,0,0,34,36,0,0,34,36,1,228,91,10,25,0,0,0,25,116,69,88,116,83,111,
231 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
232 111,114,103,155,238,60,26,0,0,25,156,73,68,65,84,120,156,237,221,121,112,
233 21,101,186,6,240,39,39,202,166,178,95,217,101,199,40,32,42,107,197,148,
234 160,38,133,48,128,12,78,24,161,6,102,80,47,92,239,173,73,244,90,35,163,
235 130,65,64,72,24,52,9,16,106,142,227,202,0,215,202,120,101,36,200,148,38,
236 44,86,18,194,38,91,88,36,200,34,92,23,178,176,132,132,228,4,146,239,254,
237 113,104,132,67,146,211,203,215,219,57,207,175,170,255,73,117,190,126,187,
238 207,121,159,116,206,233,254,26,32,34,34,34,34,34,34,34,34,34,34,34,34,34,
239 34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
240 34,34,34,34,34,34,34,34,34,34,34,162,176,246,123,0,183,219,93,4,17,217,
241 195,7,224,20,128,153,0,110,179,183,20,34,178,154,15,128,184,182,156,2,131,
242 128,40,172,220,24,0,202,114,18,12,2,162,176,80,95,0,48,8,136,194,68,99,
243 1,160,44,39,192,32,32,10,73,106,2,64,89,142,0,152,10,192,99,75,165,68,36,
244 157,150,0,80,150,195,0,166,3,136,180,161,94,34,146,72,79,0,48,8,136,66,
245 132,145,0,80,150,131,0,226,193,127,13,136,92,71,70,0,220,24,4,60,35,32,
246 114,17,153,1,16,24,4,60,35,32,114,184,6,3,32,54,54,86,116,233,210,197,72,
247 16,236,3,48,17,64,132,133,251,67,68,26,52,24,0,233,233,233,194,231,243,
248 9,175,215,107,52,8,14,192,255,25,1,131,128,200,97,26,13,0,133,18,4,157,
249 59,119,102,16,16,133,16,85,1,32,57,8,246,131,65,64,228,8,154,2,64,81,93,
250 93,45,188,94,175,232,212,169,19,131,128,200,197,116,5,128,162,178,178,82,
251 164,165,165,25,13,130,125,96,16,16,217,194,80,0,40,42,42,42,68,90,90,154,
252 232,216,177,163,145,32,40,0,48,222,202,157,39,10,119,82,2,128,65,64,228,
253 78,82,3,32,48,8,58,116,232,96,36,8,182,129,65,64,100,42,83,2,64,113,233,
254 210,37,25,65,144,15,6,1,145,41,76,13,128,27,131,32,57,57,89,180,109,219,
255 214,72,16,228,129,65,64,36,149,37,1,16,24,4,109,218,180,49,26,4,79,88,121,
256 144,136,66,149,165,1,192,32,32,114,22,91,2,64,81,94,94,46,43,8,30,183,242,
257 160,17,133,10,91,3,32,48,8,90,183,110,109,52,8,30,179,242,224,17,185,157,
258 35,2,192,132,32,24,101,225,49,36,114,45,71,5,128,162,172,172,76,36,37,37,
259 137,86,173,90,25,13,130,145,86,30,76,34,183,113,100,0,40,74,75,75,101,4,
260 65,54,128,225,86,30,84,34,183,112,116,0,40,148,32,104,217,178,165,209,32,
261 24,102,229,193,37,114,58,87,4,128,162,164,164,68,86,16,12,181,242,32,19,
262 57,149,171,2,64,193,32,32,146,195,149,1,160,40,41,41,17,179,103,207,22,
263 45,90,180,48,26,4,67,172,60,232,68,78,225,234,0,80,20,23,23,203,10,130,
264 193,86,30,124,34,187,133,68,0,40,148,32,104,222,188,185,222,16,168,3,144,
265 5,224,97,43,95,4,34,187,132,84,0,40,206,158,61,203,32,32,82,33,36,3,64,
266 33,49,8,30,178,242,69,33,178,74,72,7,128,66,9,130,102,205,154,233,13,130,
267 90,248,131,224,65,43,95,28,34,179,133,69,0,40,78,159,62,45,18,18,18,100,
268 4,193,32,43,95,36,114,23,62,20,211,161,186,117,235,134,244,244,116,20,21,
269 21,33,33,33,1,205,154,53,211,58,132,7,192,56,0,123,0,100,2,136,146,93,35,
270 185,31,3,192,225,148,32,56,122,244,40,18,18,18,208,180,105,83,173,67,120,
271 224,127,150,193,33,248,131,224,94,217,53,146,123,49,0,92,226,158,123,238,
272 185,233,140,192,64,16,28,6,131,128,174,97,0,184,140,18,4,18,206,8,148,32,
273 232,39,187,70,114,15,6,128,75,117,239,222,253,122,16,204,156,57,19,183,
274 221,118,155,214,33,148,32,56,2,127,16,244,149,93,35,57,31,3,192,229,186,
275 119,239,14,175,215,139,99,199,142,25,13,130,111,193,32,8,59,12,128,16,209,
276 163,71,15,89,65,112,8,192,42,0,125,100,215,72,206,195,0,8,49,74,16,20,21,
277 21,233,13,130,219,1,76,131,255,51,2,6,65,136,99,0,132,168,158,61,123,222,
278 20,4,145,145,145,90,135,8,12,130,222,178,107,36,251,49,0,66,156,196,32,
279 56,2,127,16,244,146,93,35,217,135,1,16,38,122,245,234,5,175,215,139,194,
280 194,66,76,155,54,141,65,64,0,24,0,97,231,190,251,238,195,170,85,171,112,
281 224,192,1,189,65,208,4,191,4,129,23,64,87,217,53,146,117,24,0,97,234,254,
282 251,239,151,17,4,51,1,28,135,63,8,186,200,174,145,204,199,0,8,115,74,16,
283 236,223,191,31,211,166,77,131,199,163,249,45,161,4,193,9,48,8,92,135,1,
284 64,0,128,254,253,251,203,14,130,206,178,107,36,249,24,0,116,147,1,3,6,92,
285 15,130,248,248,120,68,68,68,104,29,34,48,8,58,201,174,145,228,97,0,80,189,
286 6,12,24,128,204,204,76,35,65,208,20,254,32,248,14,64,58,24,4,142,196,0,
287 160,70,13,28,56,16,153,153,153,216,183,111,159,222,32,104,1,32,1,192,49,
288 248,131,160,163,236,26,73,63,6,0,169,242,192,3,15,24,13,130,59,224,15,2,
289 229,140,128,65,224,0,12,0,210,68,9,130,189,123,247,202,10,130,14,178,107,
290 36,245,24,0,164,203,160,65,131,144,153,153,137,130,130,2,140,27,55,78,207,
291 16,74,16,28,7,131,192,54,12,0,50,100,248,240,225,200,202,202,146,17,4,223,
292 1,72,6,208,86,102,125,212,56,205,247,138,18,80,93,93,141,170,170,170,160,
293 235,181,110,221,90,207,41,178,116,66,8,92,184,112,65,245,250,205,154,53,
294 67,243,230,205,53,109,99,196,136,17,215,131,96,209,162,69,216,176,97,131,
295 214,50,239,4,48,27,192,127,1,200,0,176,4,192,57,173,131,80,232,114,204,
296 115,1,22,47,94,172,106,110,254,226,226,98,75,235,106,200,75,47,189,164,
297 250,121,2,221,186,117,19,39,79,158,52,188,205,252,252,124,49,110,220,56,
298 189,207,52,16,0,46,193,127,70,208,198,172,55,20,241,95,128,144,151,148,
299 148,132,212,212,84,85,235,222,125,247,221,200,206,206,70,143,30,61,12,111,
300 55,58,58,26,89,89,89,200,207,207,215,251,175,129,114,70,240,61,24,4,166,
301 97,0,132,176,140,140,12,204,159,63,95,213,186,237,219,183,199,230,205,155,
302 113,239,189,114,103,11,87,130,32,47,47,15,177,177,177,122,134,184,11,55,
303 7,65,107,153,245,133,59,6,64,136,90,189,122,53,18,18,18,84,173,219,178,
304 101,75,252,235,95,255,66,255,254,253,77,171,231,145,71,30,65,118,118,54,
305 114,115,115,241,196,19,79,232,25,66,9,130,211,96,16,72,195,0,8,65,235,215,
306 175,199,140,25,51,80,87,87,23,116,221,22,45,90,32,43,43,11,67,134,12,177,
307 160,50,32,38,38,6,57,57,57,200,205,205,197,227,143,63,174,103,8,37,8,142,
308 3,152,7,160,149,196,242,194,14,3,32,196,108,217,178,5,191,253,237,111,113,
309 245,234,213,160,235,54,105,210,4,159,126,250,41,30,125,244,81,11,42,187,
310 89,76,76,12,54,109,218,132,220,220,92,60,246,216,99,122,134,104,11,32,9,
311 12,2,67,24,0,33,100,215,174,93,120,234,169,167,80,93,93,29,116,221,200,
312 200,72,172,94,189,26,99,198,140,177,160,178,134,197,196,196,96,243,230,
313 205,200,205,205,197,168,81,163,244,12,209,14,12,2,221,24,0,33,162,168,168,
314 8,227,198,141,195,165,75,151,130,174,235,241,120,176,106,213,42,196,199,
315 199,91,80,153,58,49,49,49,216,178,101,11,114,115,115,49,114,228,72,61,67,
316 4,6,65,75,137,229,133,44,6,64,8,56,115,230,12,226,226,226,80,92,92,28,116,
317 221,136,136,8,172,92,185,18,83,167,78,181,160,50,237,98,98,98,176,117,235,
318 86,100,103,103,99,248,240,225,122,134,96,16,104,192,0,112,185,146,146,18,
319 196,197,197,225,244,233,211,170,214,79,73,73,193,172,89,179,76,174,202,
320 184,216,216,88,108,223,190,29,217,217,217,24,54,108,152,158,33,218,227,
321 151,32,152,13,255,109,201,20,128,1,224,98,23,47,94,196,232,209,163,113,
322 244,232,81,85,235,207,159,63,31,127,250,211,159,76,174,74,174,216,216,88,
323 236,216,177,3,217,217,217,24,58,116,168,158,33,218,195,255,181,225,41,48,
324 8,110,193,0,112,169,170,170,42,140,31,63,30,123,247,238,85,181,126,98,98,
325 34,230,206,157,107,114,85,230,137,141,141,197,206,157,59,141,4,193,191,
326 225,230,32,208,118,179,67,136,98,0,184,208,149,43,87,240,155,223,252,6,
327 185,185,185,170,214,127,246,217,103,85,95,14,236,116,55,6,129,206,107,23,
328 24,4,55,96,0,184,76,93,93,29,166,79,159,142,141,27,55,170,90,255,119,191,
329 251,29,254,246,183,191,57,226,174,68,153,98,99,99,177,107,215,46,100,103,
330 103,99,240,224,193,122,134,184,27,12,2,6,128,155,8,33,240,194,11,47,224,
331 147,79,62,81,181,254,196,137,19,241,225,135,31,234,153,226,219,53,148,32,
332 88,191,126,61,30,126,248,97,61,67,4,6,65,51,137,229,57,94,232,190,51,66,
333 208,171,175,190,138,119,223,125,87,213,186,113,113,113,248,228,147,79,244,
334 60,30,220,117,34,34,34,48,126,252,120,236,222,189,91,70,16,20,1,72,68,152,
335 4,1,3,192,37,210,211,211,145,146,146,162,106,221,232,232,104,172,91,183,
336 14,77,155,54,53,185,42,103,9,12,130,135,30,122,72,207,48,221,0,164,33,76,
337 130,128,1,224,2,31,127,252,49,94,122,233,37,85,235,62,248,224,131,248,226,
338 139,47,112,199,29,119,152,92,149,115,41,65,240,205,55,223,96,253,250,245,
339 120,240,193,7,245,12,163,4,193,81,248,131,32,36,211,148,1,224,112,235,214,
340 173,195,243,207,63,15,33,68,208,117,7,14,28,136,156,156,28,180,110,205,
341 59,101,129,91,131,96,208,160,65,122,134,185,7,55,159,17,132,84,16,48,0,
342 28,44,39,39,7,83,166,76,81,117,103,95,159,62,125,240,229,151,95,162,93,
343 187,118,22,84,230,46,30,143,7,227,199,143,199,158,61,123,144,153,153,137,
344 168,168,40,61,195,40,65,16,82,103,4,12,0,135,218,177,99,7,126,253,235,95,
345 195,231,243,5,93,183,91,183,110,200,206,206,70,167,78,124,250,86,99,60,
346 30,15,226,227,227,113,232,208,33,100,102,102,234,157,253,168,59,126,9,130,
347 153,112,249,196,186,12,0,7,42,44,44,196,216,177,99,81,81,81,17,116,93,153,
348 243,248,133,11,37,8,14,31,62,108,52,8,188,240,63,242,204,181,65,192,0,112,
349 152,227,199,143,99,244,232,209,56,119,46,248,140,216,102,205,227,23,46,
350 2,131,160,95,191,126,122,134,233,1,23,7,65,125,1,192,39,180,216,228,199,
351 31,127,68,92,92,28,126,250,233,167,160,235,90,49,143,95,184,80,130,224,
352 200,145,35,50,130,160,8,46,10,130,250,2,96,7,128,85,0,122,91,92,139,110,
353 106,254,79,118,186,178,178,50,196,197,197,225,228,201,147,65,215,181,122,
354 30,191,112,17,24,4,125,251,246,213,51,76,79,200,15,130,190,0,198,95,27,
355 239,5,0,255,14,96,236,181,109,73,247,3,252,15,102,168,129,63,8,122,153,
356 177,17,149,238,0,48,11,192,215,104,228,33,18,30,143,71,68,71,71,139,229,
357 203,151,139,139,23,47,26,126,168,69,48,178,31,12,82,89,89,41,162,163,163,
358 85,141,217,164,73,19,177,113,227,70,147,247,144,132,16,162,166,166,70,124,
359 252,241,199,162,79,159,62,70,30,112,114,28,254,198,141,212,248,222,143,
360 6,240,62,128,159,131,140,127,6,192,10,0,186,174,122,170,143,18,0,202,226,
361 131,245,65,224,1,48,29,192,143,208,120,192,219,181,107,39,146,147,147,69,
362 85,85,149,105,111,12,153,1,224,243,249,196,232,209,163,85,141,23,25,25,
363 41,50,51,51,77,219,47,170,159,164,32,56,124,237,61,29,44,8,238,7,144,169,
364 115,27,89,240,159,45,24,18,24,0,55,6,129,23,64,87,163,27,8,162,55,128,253,
365 13,212,160,122,233,215,175,159,56,116,232,144,41,111,8,89,1,112,245,234,
366 85,17,31,31,175,106,44,143,199,35,214,172,89,99,202,254,144,58,74,16,244,
367 238,221,219,200,123,243,16,234,15,2,15,128,197,0,106,13,190,247,107,0,188,
368 162,173,229,110,214,80,0,4,6,65,23,35,27,105,64,12,128,179,65,182,175,122,
369 185,235,174,187,196,63,255,249,79,233,111,4,25,1,80,87,87,39,158,123,238,
370 57,85,227,68,68,68,136,191,254,245,175,210,247,131,244,81,130,160,87,175,
371 94,178,130,224,78,0,235,100,189,239,175,45,255,3,157,183,56,7,11,0,179,
372 130,96,36,26,121,0,168,222,37,50,50,82,100,101,101,73,125,3,200,8,128,151,
373 95,126,89,245,62,44,89,178,68,106,253,36,135,207,231,147,21,4,69,178,223,
374 247,215,150,13,208,254,217,131,234,0,8,12,130,206,90,55,116,131,30,0,138,
375 53,110,87,245,114,215,93,119,137,194,194,66,105,47,188,209,0,120,243,205,
376 55,85,215,62,127,254,124,105,117,147,57,124,62,159,240,122,189,162,107,
377 215,174,166,188,127,13,46,234,110,33,189,129,214,0,80,150,106,232,11,130,
378 72,0,123,37,239,244,45,75,191,126,253,68,117,117,181,148,23,220,72,0,100,
379 100,100,168,174,57,49,49,81,74,189,100,13,37,8,186,116,233,98,119,211,7,
380 46,79,105,105,72,189,1,16,24,4,106,47,76,127,206,170,3,145,154,154,42,229,
381 133,214,27,0,107,214,172,17,30,143,71,213,239,62,251,236,179,162,174,174,
382 78,74,189,100,45,7,6,193,81,0,183,171,236,71,195,1,160,44,149,0,210,209,
383 120,16,52,135,255,105,175,150,28,136,54,109,218,136,178,178,50,195,47,176,
384 158,0,200,202,202,18,183,223,126,187,170,223,123,242,201,39,69,109,109,
385 173,225,58,201,94,74,16,116,238,220,217,238,0,16,0,254,179,190,6,52,243,
386 94,128,22,0,18,224,191,70,58,29,64,199,122,214,153,2,255,196,11,150,56,
387 127,254,60,254,254,247,191,91,181,185,235,182,109,219,134,103,158,121,6,
388 87,174,92,81,181,254,215,95,127,141,29,59,118,152,92,21,153,173,73,147,
389 38,152,57,115,38,78,156,56,1,175,215,139,206,157,141,124,76,102,216,127,
390 3,80,53,51,172,172,51,128,192,165,2,183,6,193,87,38,109,171,193,101,248,
391 240,225,134,147,93,203,25,192,190,125,251,68,235,214,173,53,215,217,190,
392 125,123,81,84,84,36,225,239,16,57,69,117,117,181,240,122,189,162,77,155,
393 54,118,157,5,220,242,136,37,43,239,6,188,3,254,51,130,239,224,15,130,110,
394 240,127,239,111,169,221,187,119,227,194,133,11,150,108,235,216,177,99,24,
395 61,122,180,174,237,149,150,150,98,204,152,49,170,158,247,71,238,208,180,
396 105,83,204,156,57,19,83,166,76,177,171,132,184,192,31,216,113,59,176,18,
397 4,223,194,134,185,216,107,107,107,113,224,192,1,75,182,245,212,83,79,225,
398 236,217,179,186,127,255,248,241,227,152,56,113,34,170,170,170,36,86,69,
399 118,43,44,44,180,107,211,183,220,47,96,231,124,0,182,61,163,237,248,241,
400 227,150,108,167,180,180,212,240,24,5,5,5,152,60,121,50,106,107,107,37,84,
401 68,78,112,226,196,9,187,54,125,203,29,190,97,57,33,136,85,255,2,52,230,
402 206,59,239,84,189,238,134,13,27,240,226,139,47,154,88,13,89,169,188,188,
403 220,174,77,183,10,252,65,88,6,128,221,18,19,19,81,80,80,160,105,246,222,
404 21,43,86,224,47,127,249,139,137,85,81,56,10,203,0,176,115,218,236,63,252,
405 225,15,72,77,77,197,128,1,3,52,63,188,99,246,236,217,182,124,141,73,114,
406 181,108,217,210,174,77,95,12,252,129,157,1,112,217,174,13,247,238,109,207,
407 100,71,147,38,77,194,123,239,189,119,253,65,157,163,70,141,194,71,31,125,
408 164,250,217,125,66,8,60,255,252,243,200,201,201,49,179,76,50,89,175,94,
409 182,205,177,115,203,135,95,118,4,64,37,128,101,0,162,0,88,254,241,118,100,
410 100,36,30,120,224,1,171,55,139,184,184,56,172,93,187,22,145,145,55,223,
411 156,245,204,51,207,96,209,162,69,170,199,169,169,169,193,211,79,63,109,
412 217,55,25,36,223,192,129,3,237,218,244,30,53,43,153,125,33,208,141,147,
413 142,126,105,210,182,26,92,70,140,24,97,248,130,14,181,23,2,41,75,116,116,
414 180,168,168,168,104,116,204,196,196,68,77,99,118,233,210,69,156,62,125,
415 218,240,190,144,117,42,43,43,69,90,90,154,104,219,182,173,93,23,2,13,189,
416 165,219,235,33,59,0,234,187,2,80,49,195,234,131,144,158,158,110,248,133,
417 212,18,0,131,6,13,18,231,207,159,15,58,102,109,109,173,120,250,233,167,
418 53,237,203,128,1,3,84,141,77,246,82,174,0,236,212,169,147,93,141,47,224,
419 191,0,207,210,75,129,27,107,124,69,51,0,223,91,117,16,218,183,111,47,46,
420 92,184,96,248,5,85,27,0,125,251,246,21,63,255,252,179,234,113,171,170,170,
421 68,76,76,140,166,125,26,53,106,148,180,219,156,73,46,135,221,12,244,31,
422 141,244,225,77,140,6,128,154,187,0,111,100,217,89,128,140,191,254,66,168,
423 15,128,35,71,142,104,30,187,172,172,76,68,69,69,105,218,175,233,211,167,
424 243,214,97,7,113,88,227,11,88,116,59,176,214,121,0,20,145,240,127,56,97,
425 234,65,184,247,222,123,133,207,231,147,242,2,203,158,22,60,208,153,51,103,
426 52,207,46,51,103,206,28,41,251,70,250,57,112,30,0,101,25,175,165,33,237,
427 152,18,172,59,36,78,6,26,184,56,109,74,48,53,14,28,56,160,249,46,194,21,
428 43,86,72,219,71,82,207,225,83,130,37,107,109,70,173,147,130,202,186,201,
429 121,36,76,154,20,116,195,134,13,82,95,112,43,2,64,8,33,54,111,222,44,154,
430 54,109,170,105,95,215,173,91,39,105,47,41,24,73,141,111,246,164,160,154,
431 191,234,231,180,224,65,88,21,0,66,8,177,118,237,90,17,17,17,161,122,159,
432 155,55,111,46,10,10,10,36,236,37,53,196,164,105,193,63,147,245,190,191,
433 182,172,133,228,105,193,173,122,48,72,79,72,152,36,52,42,42,74,215,135,
434 112,106,88,25,0,90,182,167,44,156,76,196,28,22,60,24,100,33,128,171,6,223,
435 251,62,0,47,107,105,184,64,245,61,26,204,138,198,191,145,7,64,60,128,83,
436 208,120,0,148,71,131,153,249,213,152,213,1,32,132,16,9,9,9,154,142,67,239,
437 222,189,197,217,179,103,165,109,63,156,73,106,124,181,143,6,139,130,190,
438 71,131,213,93,251,189,62,65,187,43,8,39,61,28,180,5,128,231,1,108,66,35,
439 59,31,25,25,41,30,125,244,81,145,145,145,33,202,203,203,77,127,67,216,17,
440 0,122,46,20,26,54,108,88,208,43,16,169,97,54,63,28,116,4,252,127,120,131,
441 253,75,126,10,254,175,221,7,105,28,191,65,167,224,204,199,131,55,248,1,
442 161,213,79,206,177,35,0,132,16,226,242,229,203,154,47,20,26,55,110,156,
443 184,122,245,170,212,58,66,93,109,109,173,200,204,204,20,125,251,246,53,
444 210,248,39,160,175,241,235,211,27,192,175,224,255,99,248,2,252,83,233,63,
445 9,255,183,103,210,117,8,190,138,45,26,12,0,89,23,248,168,101,87,0,8,33,
446 68,105,105,169,230,11,133,102,205,154,37,189,142,80,36,185,241,111,51,169,
447 15,164,170,239,43,2,253,147,216,145,233,218,181,107,135,236,236,108,116,
448 237,170,254,35,25,175,215,139,165,75,151,154,88,149,187,213,213,213,225,
449 31,255,248,7,238,187,239,62,76,158,60,25,199,142,29,211,51,204,41,0,179,
450 0,244,3,240,46,252,31,230,57,94,88,78,8,226,118,93,187,118,197,198,141,
451 27,53,77,108,242,202,43,175,112,50,145,0,74,227,223,127,255,253,152,60,
452 121,50,138,138,138,244,12,115,10,254,198,239,11,23,53,190,130,1,224,82,
453 3,7,14,196,103,159,125,166,122,70,33,113,109,50,145,77,155,54,153,92,153,
454 243,5,54,254,209,163,71,245,12,243,61,92,220,248,10,6,128,139,61,246,216,
455 99,248,240,195,15,175,207,48,20,76,77,77,13,38,77,154,20,182,147,137,40,
456 141,223,191,127,127,163,141,255,34,128,123,225,226,198,87,48,0,92,110,202,
457 148,41,88,184,112,161,234,245,203,203,203,49,118,236,88,156,57,115,198,
458 196,170,156,165,174,174,14,89,89,89,120,248,225,135,49,121,242,100,124,
459 251,237,183,122,134,57,141,95,26,63,29,254,15,165,93,143,1,16,2,94,123,
460 237,53,252,241,143,127,84,189,254,15,63,252,128,177,99,199,58,98,122,116,
461 51,41,141,63,120,240,96,76,152,48,1,251,247,239,215,51,140,210,248,253,
462 16,66,141,175,96,0,132,136,180,180,52,76,154,52,73,245,250,7,15,30,196,
463 164,73,147,80,83,83,99,98,85,246,16,66,32,43,43,11,67,134,12,193,132,9,
464 19,176,111,223,62,61,195,156,65,8,254,197,15,196,0,8,17,30,143,7,171,87,
465 175,198,35,143,60,162,250,119,182,108,217,130,25,51,102,64,8,97,98,101,
466 214,9,108,252,189,123,247,234,25,70,105,124,229,47,126,181,204,26,157,134,
467 1,16,66,154,55,111,142,207,63,255,28,81,81,81,170,127,103,237,218,181,72,
468 74,74,50,177,42,243,5,54,254,158,61,170,38,191,13,84,12,224,207,8,147,198,
469 87,48,0,66,76,187,118,237,176,113,227,70,116,236,216,216,84,140,55,91,176,
470 96,1,50,50,50,76,172,202,60,57,57,57,24,58,116,168,140,198,239,1,32,5,97,
471 210,248,10,6,64,8,234,217,179,39,190,250,234,43,180,106,117,203,163,224,
472 26,148,152,152,136,207,63,255,220,196,170,228,82,26,63,46,46,14,223,124,
473 243,141,158,33,2,27,63,44,31,193,204,0,8,81,202,133,66,77,154,52,81,181,
474 126,109,109,45,166,78,157,138,237,219,183,155,92,153,49,57,57,57,24,54,
475 108,24,226,226,226,176,123,247,110,61,67,148,128,141,127,29,3,32,132,61,
476 254,248,227,154,46,20,186,124,249,50,38,76,152,160,247,90,120,83,221,216,
477 248,187,118,237,210,51,4,27,191,30,12,128,16,55,117,234,84,44,88,176,64,
478 245,250,37,37,37,24,51,102,12,138,139,139,77,172,74,189,156,156,28,12,31,
479 62,220,72,227,151,226,230,198,183,237,153,148,78,228,138,91,22,157,166,
480 71,143,30,136,141,141,13,186,158,218,211,111,179,189,254,250,235,184,124,
481 249,50,118,238,220,169,250,119,86,174,92,137,121,243,230,153,87,84,16,57,
482 57,57,152,51,103,14,118,236,216,161,119,136,82,0,25,0,222,1,80,46,173,48,
483 178,141,99,230,3,32,243,228,230,230,138,145,35,71,26,185,31,191,4,192,60,
484 0,182,61,131,219,77,120,6,64,142,144,151,151,135,185,115,231,98,235,214,
485 173,122,135,40,3,176,2,252,139,175,9,3,128,108,149,151,151,135,55,222,120,
486 3,91,182,108,209,59,132,210,248,169,0,46,74,43,44,76,48,0,200,22,121,121,
487 121,72,74,74,194,230,205,155,245,14,113,14,192,114,176,241,13,97,0,144,
488 165,242,242,242,48,111,222,60,35,19,147,92,2,176,18,254,71,94,133,246,237,
489 140,22,96,0,144,37,242,243,243,145,148,148,196,198,119,24,6,0,153,42,63,
490 63,31,201,201,201,216,176,97,131,222,33,216,248,38,98,0,144,41,182,109,
491 219,134,197,139,23,27,105,252,10,248,191,199,79,1,112,94,90,97,116,19,6,
492 0,73,85,80,80,128,69,139,22,177,241,93,130,1,64,82,108,223,190,29,111,189,
493 245,150,140,198,95,2,255,39,252,100,1,6,0,25,34,169,241,63,0,176,8,124,
494 40,141,229,24,0,164,203,254,253,251,241,214,91,111,225,211,79,63,213,59,
495 165,88,37,128,247,193,198,183,21,3,128,52,57,112,224,0,22,46,92,40,163,
496 241,23,3,248,89,106,113,164,25,3,128,84,97,227,135,38,6,0,53,170,176,176,
497 16,11,22,44,48,210,248,151,1,188,7,255,247,248,63,73,45,142,12,99,0,80,
498 189,36,52,190,15,192,199,240,223,154,203,198,119,40,6,0,221,228,224,193,
499 131,152,63,127,190,145,198,175,1,240,17,128,55,1,252,40,179,54,146,143,
500 1,64,0,128,67,135,14,33,37,37,5,107,214,172,65,93,93,157,158,33,216,248,
501 46,196,0,8,115,74,227,175,93,187,22,181,181,181,122,134,80,26,127,62,128,
502 31,100,214,70,230,99,0,132,169,195,135,15,35,57,57,153,141,31,230,24,0,
503 97,230,200,145,35,88,188,120,177,140,198,95,0,224,255,100,214,70,214,99,
504 0,132,9,9,141,127,5,192,39,240,127,170,127,66,102,109,100,31,6,64,136,59,
505 113,226,4,82,82,82,240,254,251,239,27,109,252,55,1,28,151,90,28,217,142,
506 1,16,162,78,158,60,137,228,228,100,124,240,193,7,184,122,245,170,158,33,
507 216,248,97,128,1,16,98,78,157,58,133,197,139,23,203,104,252,249,0,190,147,
508 90,28,57,14,3,32,68,72,108,252,5,0,156,247,112,64,50,5,3,192,229,190,255,
509 254,123,44,90,180,200,72,227,215,1,248,95,0,175,131,141,31,118,24,0,46,
510 37,177,241,231,0,40,146,90,28,185,6,3,192,101,78,159,62,141,183,223,126,
511 27,94,175,23,62,159,79,207,16,108,124,186,142,1,224,18,18,27,127,46,128,
512 163,82,139,35,215,98,0,56,220,153,51,103,176,116,233,82,188,251,238,187,
513 168,174,174,214,51,132,210,248,111,0,248,86,106,113,228,122,12,0,135,98,
514 227,147,21,24,0,14,115,246,236,89,164,166,166,34,61,61,221,72,227,111,132,
515 255,84,127,159,212,226,40,228,48,0,28,162,184,184,24,239,188,243,14,150,
516 45,91,134,170,170,42,61,67,8,0,95,192,255,23,127,175,212,226,40,100,49,
517 0,108,198,198,39,59,49,0,108,82,82,82,130,183,223,126,91,70,227,39,1,216,
518 35,181,56,10,27,12,0,139,73,108,252,121,0,190,145,89,27,133,31,6,128,69,
519 74,75,75,177,116,233,82,44,95,190,28,151,47,95,214,59,76,14,128,63,131,
520 141,79,146,48,0,76,86,90,90,138,21,43,86,32,53,53,21,229,229,229,122,135,
521 201,1,240,42,128,221,242,42,35,98,0,152,70,98,227,191,6,96,151,188,202,
522 136,126,193,0,144,172,172,172,12,203,151,47,151,209,248,175,3,216,41,175,
523 50,162,91,49,0,36,81,26,63,45,45,13,23,47,94,212,59,12,27,159,44,197,0,
524 48,232,220,185,115,88,182,108,153,209,198,207,135,191,241,191,150,87,25,
525 81,112,12,0,157,46,93,186,132,149,43,87,34,57,57,25,23,46,92,208,59,76,
526 62,252,183,229,110,149,86,24,145,6,12,0,141,36,54,254,92,0,91,228,85,70,
527 164,29,3,64,37,137,141,255,6,128,205,242,42,35,210,143,1,16,132,210,248,
528 41,41,41,56,127,254,188,222,97,216,248,228,72,12,128,6,84,84,84,32,35,35,
529 67,70,227,39,1,216,36,175,50,34,121,24,0,1,148,198,95,178,100,9,206,157,
530 59,167,119,152,124,0,41,0,178,228,85,70,20,222,124,240,223,8,115,203,146,
531 158,158,46,140,186,116,233,146,72,75,75,19,29,58,116,168,119,27,42,151,
532 124,0,227,173,60,40,68,225,194,148,0,168,168,168,144,209,248,219,192,198,
533 39,50,149,212,0,80,26,191,99,199,142,70,26,191,0,108,124,34,75,72,9,0,54,
534 62,145,59,25,10,128,202,202,74,145,150,150,38,58,117,234,100,164,241,247,
535 1,136,7,16,97,225,126,19,17,116,6,64,117,117,181,240,122,189,108,124,34,
536 151,211,20,0,74,227,119,238,220,217,72,227,239,7,27,159,200,17,84,5,128,
537 207,231,147,209,248,7,192,198,39,114,148,70,3,64,105,252,46,93,186,176,
538 241,137,66,80,131,1,16,27,27,107,180,241,247,1,152,8,54,62,145,99,53,24,
539 0,6,150,131,0,166,3,240,88,184,31,68,164,131,204,0,80,26,63,210,210,61,
540 32,34,221,100,4,192,65,248,255,199,231,95,124,34,151,49,18,0,135,192,191,
541 248,68,174,166,39,0,14,131,141,79,20,18,180,4,192,17,0,83,193,83,125,162,
542 144,161,38,0,78,0,152,9,78,116,66,20,114,26,11,0,54,62,81,136,171,47,0,
543 78,130,141,79,20,22,110,12,0,54,62,81,152,241,1,56,5,54,62,81,88,250,61,
544 128,219,237,46,130,136,136,136,136,136,136,136,136,136,136,136,136,136,
545 136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
546 136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,
547 136,168,81,255,15,142,86,241,164,142,198,204,179,0,0,0,0,73,69,78,68,174,
548 66,96,130};
549 
550 static size_t xml_res_size_4 = 648;
551 static unsigned char xml_res_file_4[] = {
552 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
553 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
554 72,89,115,0,0,4,70,0,0,4,70,1,102,1,155,153,0,0,0,25,116,69,88,116,83,111,
555 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
556 111,114,103,155,238,60,26,0,0,2,5,73,68,65,84,88,133,237,150,177,142,218,
557 64,16,134,127,54,186,158,93,48,10,54,6,10,75,137,168,66,146,10,30,1,137,
558 87,72,19,81,34,145,250,210,187,77,27,145,68,148,80,33,132,146,14,148,84,
559 17,21,148,136,230,66,129,128,42,231,59,161,24,100,38,69,236,147,113,72,
560 240,157,206,118,115,191,100,217,179,197,206,231,153,217,217,1,30,20,177,
561 30,29,91,100,140,157,19,209,6,192,34,100,158,63,74,165,82,19,73,146,126,
562 37,147,201,111,0,94,68,2,48,30,143,169,215,235,237,53,77,251,201,57,255,
563 14,224,101,168,0,147,201,132,136,136,44,203,114,64,46,67,3,113,3,56,178,
564 44,139,58,157,206,94,85,213,43,27,36,184,212,28,3,240,130,100,179,217,43,
565 33,196,87,0,207,67,5,56,22,17,27,164,24,42,128,23,36,147,201,24,241,120,
566 124,120,47,32,94,128,110,183,75,170,170,30,56,30,12,6,196,57,167,225,112,
567 120,0,162,40,138,3,242,44,48,128,209,104,68,137,68,130,250,253,254,63,35,
568 162,40,138,33,132,248,2,224,233,189,2,76,167,83,74,167,211,212,110,183,
569 255,155,154,237,118,75,173,86,107,47,203,242,73,144,55,0,222,1,120,108,
570 219,53,198,152,89,42,149,104,185,92,30,0,204,231,115,202,229,114,212,108,
571 54,125,213,135,23,132,115,254,25,192,71,0,63,0,124,2,112,6,0,111,1,16,128,
572 107,0,239,1,236,108,155,234,245,250,13,128,16,130,52,77,35,89,150,105,189,
573 94,251,6,112,100,154,38,53,26,141,189,179,183,253,188,98,158,104,144,219,
574 136,197,98,55,223,134,97,64,215,117,20,10,5,84,171,85,108,54,155,91,167,
575 214,187,191,99,123,83,240,154,49,102,150,203,101,90,173,86,127,213,128,
576 97,24,84,44,22,169,82,169,208,110,183,187,75,10,62,0,184,176,223,103,71,
577 49,79,157,130,197,98,65,249,124,158,106,181,154,47,199,118,17,62,241,29,
578 39,63,125,96,54,155,145,36,73,164,235,250,193,122,32,199,208,143,2,109,
579 68,126,28,187,90,241,221,29,223,6,32,144,59,192,15,64,100,215,177,219,113,
580 224,179,226,137,145,44,248,33,213,51,148,134,55,11,186,1,34,29,203,25,99,
581 231,8,243,143,31,20,165,126,3,125,215,199,83,193,217,127,124,0,0,0,0,73,
582 69,78,68,174,66,96,130};
583 
584 static size_t xml_res_size_5 = 1454;
585 static unsigned char xml_res_file_5[] = {
586 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,64,0,0,0,64,8,6,0,0,
587 0,170,105,113,222,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
588 72,89,115,0,0,8,140,0,0,8,140,1,41,221,10,159,0,0,0,25,116,69,88,116,83,
589 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
590 46,111,114,103,155,238,60,26,0,0,5,43,73,68,65,84,120,156,237,154,77,104,
591 20,103,28,135,159,73,19,41,145,157,236,186,249,218,164,162,182,77,66,91,
592 68,196,83,201,81,144,245,18,188,39,20,84,168,23,41,72,41,123,210,212,20,
593 116,147,75,226,65,33,68,176,198,210,150,22,193,131,8,18,16,130,57,164,4,
594 41,109,67,181,65,211,152,216,170,201,230,131,236,110,52,93,51,255,30,214,
595 137,235,100,118,179,155,204,71,140,243,192,156,246,221,153,255,239,153,
596 143,247,131,23,60,60,60,60,60,222,94,222,41,160,237,126,160,20,152,178,
597 169,22,87,40,42,160,109,35,240,59,240,35,240,177,61,229,108,108,78,1,242,
598 242,88,2,190,7,62,114,181,34,135,57,5,200,161,67,135,164,182,182,86,35,
599 45,226,5,240,29,208,224,106,101,14,113,10,144,43,87,174,200,226,226,162,
600 116,119,119,75,77,77,141,46,98,9,248,137,77,46,98,89,128,206,219,38,98,
601 133,0,163,136,80,40,100,20,81,239,106,197,22,147,85,128,206,243,231,207,
602 179,137,168,115,181,114,139,88,85,128,81,68,117,117,181,6,136,162,40,41,
603 160,151,55,92,68,222,2,116,146,201,164,116,117,117,153,137,248,208,221,
604 40,107,163,96,1,58,137,68,66,186,186,186,164,170,170,202,40,226,3,119,35,
605 21,198,154,5,108,22,17,235,22,96,20,81,89,89,105,20,241,190,187,17,115,
606 99,153,0,157,120,60,110,20,241,31,208,13,188,231,110,84,115,44,23,144,41,
607 34,26,141,74,32,16,48,138,168,117,55,242,235,216,38,192,40,194,239,247,
608 111,72,17,171,10,56,114,228,136,0,210,216,216,152,51,232,196,196,132,236,
609 220,185,83,0,217,189,123,183,196,98,177,215,126,159,159,159,207,38,162,
610 198,234,80,133,172,7,88,66,44,22,227,192,129,3,140,141,141,81,87,87,199,
611 205,155,55,9,6,131,175,181,241,249,124,68,34,17,198,199,199,149,104,52,
612 138,170,170,197,192,231,138,162,140,97,177,8,71,5,204,207,207,19,14,135,
613 185,123,247,46,219,183,111,167,175,175,143,80,40,148,181,189,46,98,98,98,
614 194,40,226,111,210,34,178,255,57,79,28,19,240,236,217,51,154,154,154,184,
615 115,231,14,149,149,149,244,245,245,177,99,199,142,188,254,107,242,68,148,
616 144,22,241,0,56,199,58,68,56,34,96,105,105,137,150,150,22,250,251,251,41,
617 47,47,231,214,173,91,52,52,20,62,99,86,85,149,72,36,194,232,232,168,210,
618 218,218,138,207,231,123,23,248,66,81,148,251,164,69,84,175,181,70,37,143,
619 54,107,250,8,106,154,38,135,15,31,22,64,84,85,149,161,161,161,60,251,132,
620 213,137,197,98,210,218,218,42,170,170,234,31,203,228,90,69,252,10,124,70,
621 246,85,226,70,96,4,144,61,123,246,200,237,219,183,243,22,112,226,196,9,
622 1,164,180,180,84,250,251,251,45,11,111,38,194,231,243,25,69,84,1,197,192,
623 87,192,47,164,23,117,207,1,1,99,192,69,210,243,247,97,19,17,45,164,215,
624 254,244,5,81,41,42,42,146,203,151,47,175,42,224,228,201,147,2,200,150,45,
625 91,228,198,141,27,182,132,207,100,106,106,202,40,34,1,140,103,214,254,242,
626 24,7,42,204,4,232,135,46,34,8,204,153,156,64,84,85,93,209,127,103,10,232,
627 236,236,92,110,123,236,216,49,219,195,27,69,68,34,17,41,41,41,209,204,106,
628 127,121,124,155,75,128,126,140,229,56,129,92,187,118,205,84,128,207,231,
629 19,69,81,68,81,148,229,39,230,234,213,171,142,74,16,17,9,135,195,89,107,
630 7,38,193,166,94,32,30,143,19,10,133,24,28,28,164,190,190,30,77,211,104,
631 110,110,102,96,96,192,142,203,89,130,241,9,248,131,87,175,192,44,38,6,203,
632 202,202,100,122,122,218,244,9,240,251,253,50,60,60,44,34,34,35,35,35,82,
633 81,81,33,128,4,131,65,185,119,239,158,237,119,62,207,87,224,146,153,0,253,
634 221,207,124,50,154,49,249,8,246,246,246,174,184,112,182,185,192,208,208,
635 144,108,221,186,85,0,217,181,107,151,60,126,252,216,182,224,38,31,193,135,
636 38,225,31,98,248,8,174,214,13,126,10,252,5,200,222,189,123,101,96,96,192,
637 180,128,92,147,161,235,215,175,75,113,113,177,0,178,111,223,62,137,199,
638 227,118,6,55,118,131,95,2,131,192,111,64,39,224,55,6,180,109,32,148,73,
639 79,79,207,242,93,56,120,240,160,164,82,169,117,5,207,209,255,175,121,68,
640 104,171,0,145,87,99,3,64,142,30,61,186,174,224,86,140,0,29,23,160,105,218,
641 114,59,64,218,218,218,242,14,62,61,61,109,12,190,192,58,39,67,150,10,56,
642 126,252,184,4,2,1,9,135,195,57,131,164,82,41,105,106,106,146,64,32,32,219,
643 182,109,91,117,140,160,47,144,148,149,149,233,193,23,177,104,58,108,169,
644 0,171,201,17,220,178,5,145,98,171,78,100,37,241,120,156,11,23,46,16,141,
645 70,101,110,110,78,81,20,229,5,112,73,68,78,3,255,90,121,173,13,37,32,145,
646 72,112,254,252,121,179,224,109,192,63,118,92,115,67,8,208,131,183,183,183,
647 203,236,236,172,35,193,117,92,21,160,7,239,232,232,96,102,102,134,140,224,
648 223,0,143,156,168,193,21,1,201,100,146,139,23,47,114,230,204,25,153,156,
649 156,212,239,248,15,34,242,53,48,234,100,45,142,10,48,9,190,68,58,248,105,
650 224,129,147,181,232,56,34,64,15,126,246,236,89,121,250,244,233,134,8,174,
651 99,171,128,133,133,5,122,122,122,136,70,163,242,228,201,147,204,224,109,
652 192,125,59,175,109,7,86,108,145,121,35,119,134,232,120,155,164,200,34,224,
653 173,221,38,151,99,163,228,166,10,174,227,109,149,5,111,179,244,166,219,
654 46,95,232,56,64,3,126,6,218,128,63,173,47,103,99,179,31,248,196,237,34,
655 60,60,60,60,60,60,172,227,127,242,172,196,144,240,2,93,107,0,0,0,0,73,69,
656 78,68,174,66,96,130};
657 
658 static size_t xml_res_size_6 = 845;
659 static unsigned char xml_res_file_6[] = {
660 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
661 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
662 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
663 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
664 46,111,114,103,155,238,60,26,0,0,2,202,73,68,65,84,88,133,189,151,191,75,
665 91,81,20,199,63,231,249,226,139,162,160,208,66,210,116,180,160,67,113,176,
666 226,32,130,21,156,28,116,20,58,118,118,232,42,214,36,214,150,118,18,236,
667 127,80,42,56,198,210,77,16,161,237,32,209,193,14,254,192,14,29,140,9,88,
668 80,26,137,121,106,60,29,18,127,52,47,198,151,248,226,217,238,185,247,221,
669 239,135,115,223,61,231,92,81,85,220,152,124,252,101,113,112,56,0,12,3,29,
670 32,65,208,96,97,54,9,154,4,54,129,5,90,91,150,116,172,205,118,181,239,109,
671 0,242,110,45,200,169,78,34,188,0,154,93,209,66,26,101,14,159,76,233,120,
672 87,178,42,0,137,46,251,145,166,9,224,21,208,232,82,184,216,50,192,12,122,
673 52,173,225,254,172,107,0,137,198,3,136,196,128,158,42,133,139,109,5,213,
674 17,13,119,167,138,39,12,135,248,235,239,157,136,196,61,20,7,232,65,36,46,
675 111,214,158,58,244,174,71,64,38,190,5,209,92,156,186,250,16,102,189,135,
676 250,151,182,139,106,247,245,72,92,70,64,162,203,126,206,115,95,80,66,156,
677 157,192,217,73,45,0,30,35,18,147,232,178,223,1,128,77,4,120,118,57,174,
678 29,68,79,225,231,6,10,71,32,19,75,33,212,216,65,105,112,44,55,235,169,193,
679 113,100,48,165,77,199,187,146,249,8,156,27,145,146,226,80,171,72,52,114,
680 170,147,0,194,236,142,69,106,247,15,74,83,217,79,188,143,68,154,214,150,
681 135,6,169,196,224,173,226,80,139,72,52,115,112,56,96,130,142,252,231,181,
682 234,104,127,96,221,248,149,152,38,134,239,230,249,114,182,177,159,229,175,
683 157,187,238,26,54,65,218,225,42,23,116,6,26,248,58,250,164,236,70,150,101,
684 225,247,251,203,174,41,101,207,63,109,179,252,59,125,221,213,97,160,4,42,
685 221,200,182,109,178,217,146,169,189,66,147,160,129,104,197,0,222,65,104,
686 208,81,11,238,27,194,64,197,81,161,238,15,66,146,6,194,157,0,238,6,161,
687 73,19,116,11,232,189,112,173,167,142,25,252,188,93,21,136,152,245,101,175,
688 232,198,190,3,114,211,4,137,129,190,188,240,164,237,28,241,68,166,42,0,
689 200,84,154,49,23,12,2,161,69,132,163,42,21,157,230,62,99,166,105,109,89,
690 50,116,172,205,70,153,247,12,192,45,132,50,167,99,109,118,254,26,90,190,
691 48,194,241,61,66,100,240,201,20,20,26,18,13,247,238,161,204,122,10,80,30,
692 98,230,162,93,191,74,68,22,17,96,245,30,32,86,208,163,233,139,65,233,166,
693 84,9,121,14,146,191,29,55,55,165,0,58,221,151,4,134,16,18,158,3,228,78,
694 18,156,231,134,138,223,6,142,90,160,111,251,215,145,186,110,188,61,142,
695 85,164,174,91,35,61,63,139,39,74,22,35,157,238,75,98,209,7,124,184,211,
696 237,16,142,17,227,61,22,125,133,232,58,151,220,250,56,141,254,120,132,125,
697 26,69,24,117,213,186,229,133,143,80,230,177,124,97,13,247,238,149,93,90,
698 209,243,60,149,24,204,183,112,210,142,18,184,236,37,84,82,249,162,166,91,
699 32,49,2,161,69,183,207,243,127,112,231,61,10,138,240,143,199,0,0,0,0,73,
700 69,78,68,174,66,96,130};
701 
702 static size_t xml_res_size_7 = 1244;
703 static unsigned char xml_res_file_7[] = {
704 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
705 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
706 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
707 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
708 46,111,114,103,155,238,60,26,0,0,4,89,73,68,65,84,88,133,181,151,93,76,
709 91,101,24,199,127,207,161,165,5,193,208,32,210,2,83,230,72,216,98,252,64,
710 36,16,23,162,33,89,118,49,3,75,140,31,17,221,197,174,208,132,41,94,44,186,
711 32,208,73,102,188,218,148,59,19,99,162,33,89,116,78,70,162,162,219,8,6,
712 48,153,29,55,114,49,150,0,19,55,40,91,130,108,192,74,79,219,211,215,139,
713 150,66,219,211,210,18,247,191,122,63,158,243,60,191,243,158,247,60,239,
714 243,138,82,138,76,36,125,211,54,150,239,54,1,45,192,62,16,23,40,87,116,
715 214,11,202,11,92,3,46,224,40,26,86,237,85,122,70,126,183,3,144,83,19,46,
716 130,170,11,161,21,40,204,136,22,86,81,244,99,149,147,234,68,173,119,71,
717 0,226,30,177,35,5,157,64,7,144,159,97,224,68,249,128,211,168,181,94,213,
718 253,146,63,99,0,113,123,156,136,12,0,245,27,99,182,28,33,207,170,69,188,
719 6,195,4,140,204,62,93,84,87,80,234,176,234,174,91,76,156,208,146,130,127,
720 60,246,12,34,158,173,193,1,58,26,74,89,62,94,195,242,241,26,142,62,251,
721 72,54,193,1,234,17,241,200,39,19,79,165,5,144,206,81,23,225,208,79,132,
722 2,21,217,70,200,64,21,40,245,179,184,61,78,83,0,113,143,216,9,27,131,40,
723 202,9,5,32,20,120,0,12,84,32,50,32,238,17,123,18,0,58,61,192,243,177,254,
724 131,131,168,143,110,238,77,0,113,143,151,33,28,75,50,77,3,209,92,93,68,
725 91,109,9,109,181,37,20,230,230,100,11,209,33,167,38,92,0,22,0,244,160,27,
726 200,51,53,77,1,240,65,67,41,47,62,30,73,11,67,51,43,172,6,140,108,0,242,
727 9,170,46,224,29,139,244,77,219,16,222,32,221,95,21,10,16,10,164,78,108,
728 57,2,103,14,238,2,224,246,253,16,159,142,165,205,61,17,9,173,210,55,253,
729 190,133,197,249,3,40,10,182,179,55,130,1,252,126,63,118,187,61,105,206,
730 162,9,239,213,151,2,112,125,201,79,255,228,18,77,149,15,3,48,121,199,199,
731 132,215,103,230,178,144,229,187,77,22,80,135,183,199,141,72,215,51,74,239,
732 60,231,202,231,235,150,74,0,62,27,95,76,5,0,208,98,1,217,75,218,245,143,
733 168,198,153,31,131,232,122,161,24,71,225,102,118,30,62,82,29,107,63,225,
734 176,241,229,203,149,177,126,67,197,67,233,220,238,211,80,56,205,102,74,
735 11,172,113,125,239,90,48,214,206,215,140,184,205,89,86,184,105,107,213,
736 132,146,124,75,172,111,203,73,74,182,91,36,46,13,81,113,0,182,28,225,68,
737 163,139,201,182,39,105,125,186,56,54,126,115,37,254,111,208,117,29,191,
738 223,244,124,201,66,202,101,73,28,58,247,90,21,141,143,69,246,228,153,131,
739 187,152,187,167,51,54,183,134,32,73,143,111,236,9,179,141,153,169,52,148,
740 196,157,80,125,127,222,142,181,173,154,240,237,225,221,236,113,216,145,
741 228,248,49,136,157,175,132,120,53,132,56,128,223,102,86,232,159,92,138,
742 245,29,118,11,223,189,186,155,226,188,212,217,110,231,16,202,171,129,154,
743 74,28,254,232,242,60,11,171,155,223,124,143,195,206,187,117,143,166,117,
744 181,67,136,107,26,200,64,226,232,138,110,208,254,203,63,113,99,86,45,197,
745 55,216,6,194,179,112,63,221,35,23,52,156,229,23,17,214,18,103,46,223,88,
746 229,155,191,150,204,30,202,10,194,23,12,167,50,93,197,81,52,172,169,246,
747 42,29,197,89,51,139,15,47,221,226,143,155,73,108,89,67,152,74,209,175,218,
748 171,244,72,150,176,89,187,17,214,19,109,124,193,48,175,124,63,195,239,115,
749 171,255,55,132,15,171,156,132,104,61,160,186,247,47,160,248,194,204,114,
750 61,24,230,245,115,179,92,154,93,201,26,98,197,231,103,232,250,29,179,169,
751 211,27,229,250,102,158,180,209,3,92,53,179,246,135,194,188,121,126,150,
752 161,233,123,25,7,215,13,197,91,231,103,25,153,254,55,177,166,184,130,90,
753 235,221,232,196,149,229,210,57,234,66,25,30,20,229,102,78,173,154,240,85,
754 115,37,205,213,69,105,131,7,12,197,219,63,206,242,235,204,150,85,179,228,
755 130,37,247,22,74,213,109,45,207,227,78,10,213,219,232,5,14,33,204,155,57,
756 14,134,21,71,7,255,230,135,169,229,180,193,143,12,220,136,15,14,96,4,230,
757 9,27,135,18,239,6,230,23,147,206,81,23,97,99,144,173,69,234,22,105,2,133,
758 54,243,204,24,52,148,217,175,119,21,45,167,57,250,130,241,177,210,94,205,
759 116,122,16,142,161,82,212,139,219,73,88,7,237,115,114,195,238,172,174,102,
760 241,32,227,101,232,65,119,180,110,220,182,116,139,6,94,67,113,22,155,181,
761 91,117,239,95,72,107,154,213,245,124,113,254,64,164,132,147,189,40,156,
762 177,90,66,201,98,228,80,83,83,32,3,56,203,47,102,122,61,255,15,18,39,215,
763 228,219,192,187,72,0,0,0,0,73,69,78,68,174,66,96,130};
764 
765 static size_t xml_res_size_8 = 724;
766 static unsigned char xml_res_file_8[] = {
767 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,31,0,0,0,31,8,6,0,0,
768 0,31,174,22,57,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,
769 89,115,0,0,4,157,0,0,4,157,1,124,52,107,161,0,0,0,25,116,69,88,116,83,111,
770 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
771 111,114,103,155,238,60,26,0,0,2,81,73,68,65,84,72,137,189,151,61,104,19,
772 97,28,135,159,55,38,33,53,105,74,62,68,107,18,23,65,90,104,172,86,16,210,
773 162,131,20,69,164,186,170,69,45,10,130,5,113,112,42,136,100,8,214,118,112,
774 9,40,14,213,197,89,23,71,59,22,151,150,104,4,77,106,83,138,226,34,129,214,
775 80,228,114,185,228,28,108,74,130,249,120,239,114,241,7,55,220,189,31,207,
776 243,231,184,247,207,9,0,226,203,35,8,253,29,29,230,1,47,190,253,210,237,
777 167,147,241,100,65,102,190,29,128,114,201,129,221,238,235,20,30,35,237,
778 235,19,219,57,247,236,157,35,143,103,158,109,182,155,111,3,160,162,8,74,
779 197,78,217,0,140,137,143,193,9,117,105,237,118,60,30,148,131,3,148,75,160,
780 169,150,8,140,138,180,255,134,237,245,234,221,71,51,251,228,224,240,23,
781 110,149,0,105,223,21,237,109,182,149,128,237,159,39,22,10,196,248,228,155,
782 210,222,124,141,207,79,31,144,131,27,16,136,120,157,109,231,140,144,233,
783 155,80,22,179,141,4,26,195,37,4,246,187,29,188,191,53,64,191,199,33,33,
784 144,245,94,84,22,179,241,185,155,7,229,224,109,4,230,198,195,132,122,157,
785 36,206,132,218,194,1,142,147,245,94,42,46,101,18,137,235,187,11,90,195,
786 155,8,156,232,223,203,181,163,1,0,166,134,131,156,12,185,1,88,19,17,86,
787 24,100,133,65,114,132,89,39,84,119,121,217,238,141,150,55,62,92,152,125,
788 234,131,234,33,35,35,0,96,119,34,128,228,249,67,216,196,142,189,128,39,
789 103,35,156,122,153,225,158,126,95,102,183,32,197,202,97,96,185,125,229,
790 181,2,154,202,100,52,64,44,236,169,27,26,139,120,184,60,228,151,222,170,
791 26,121,56,208,35,52,30,142,6,26,142,205,143,135,113,59,12,109,103,12,126,
792 117,200,207,111,69,33,247,179,190,111,124,47,168,168,101,157,201,104,99,
793 177,102,145,123,231,59,89,72,229,89,72,229,25,8,246,144,154,30,198,229,
794 114,1,112,238,213,42,95,242,138,33,48,24,172,188,54,197,98,17,69,49,14,
795 172,141,161,202,27,9,8,33,76,175,55,93,121,53,138,162,160,155,236,5,29,
796 195,1,244,146,185,102,100,9,28,48,213,13,173,131,155,16,176,22,110,80,192,
797 122,184,1,129,238,192,37,5,186,7,151,16,232,46,188,141,64,247,225,45,4,
798 254,15,188,137,128,169,179,125,125,83,225,216,243,207,187,247,63,10,146,
799 223,118,21,190,199,110,30,174,150,117,54,182,76,254,94,105,42,84,202,182,
800 26,184,67,131,210,150,185,221,76,68,71,3,248,3,55,71,228,58,37,20,139,19,
801 0,0,0,0,73,69,78,68,174,66,96,130};
802 
803 static size_t xml_res_size_9 = 760;
804 static unsigned char xml_res_file_9[] = {
805 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
806 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
807 72,89,115,0,0,4,193,0,0,4,193,1,17,118,177,117,0,0,0,25,116,69,88,116,83,
808 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
809 46,111,114,103,155,238,60,26,0,0,2,117,73,68,65,84,88,133,197,214,79,72,
810 20,81,28,192,241,239,155,93,214,178,40,91,18,81,195,130,214,139,183,16,
811 194,91,167,194,72,187,104,183,82,59,88,10,5,18,29,236,80,237,46,81,65,183,
812 2,65,48,180,162,32,219,254,128,10,81,68,80,212,33,84,232,207,169,164,75,
813 127,212,245,79,165,228,238,204,238,204,235,16,171,107,234,250,230,79,245,
814 187,189,223,204,111,230,195,239,189,55,111,4,0,225,161,16,194,122,133,203,
815 40,20,223,56,99,117,221,62,30,238,109,85,173,241,3,224,179,124,88,108,114,
816 11,208,164,164,85,139,181,136,72,253,218,99,103,99,77,74,53,0,232,115,26,
817 41,221,237,251,1,240,97,209,34,238,53,118,68,234,174,171,3,0,204,20,94,
818 34,142,138,251,135,58,162,245,55,212,1,25,68,218,240,4,161,97,209,34,239,
819 30,236,142,212,246,170,3,224,55,192,35,132,16,146,70,250,15,244,68,107,
820 238,168,3,20,17,229,193,53,84,22,231,83,89,156,79,40,152,151,19,209,32,
821 7,234,123,34,53,49,117,128,2,226,202,222,50,6,155,43,24,108,174,224,114,
822 117,89,78,172,16,146,6,49,80,119,53,186,191,79,29,160,128,176,19,2,201,
823 97,250,106,186,163,181,253,234,128,191,128,104,162,111,223,173,232,158,
824 71,153,156,95,169,50,3,240,7,114,222,54,73,1,219,229,131,101,95,92,192,
825 108,118,106,119,225,133,19,161,137,83,213,35,106,0,69,132,137,198,71,74,
826 21,159,103,10,80,153,130,63,17,30,77,71,38,212,59,144,141,240,48,236,117,
827 32,11,97,232,201,255,8,0,82,134,65,50,233,30,97,127,10,178,66,215,221,31,
828 94,142,59,144,141,72,25,206,33,174,1,0,134,174,59,94,156,158,0,0,199,91,
829 212,59,128,67,132,173,69,88,178,33,192,145,29,155,1,8,5,23,190,136,229,
830 193,60,194,187,74,0,232,28,158,100,52,97,172,250,217,206,132,173,14,124,
831 157,49,216,89,186,142,182,170,34,182,110,92,248,7,216,86,144,71,91,85,17,
832 85,91,214,51,54,107,216,234,132,237,41,104,127,242,25,83,202,37,121,83,
833 74,78,62,254,196,252,21,69,132,109,192,155,241,4,55,223,78,47,201,95,123,
834 61,197,187,120,98,113,82,1,225,104,17,158,123,54,202,140,110,206,143,127,
835 36,77,206,63,31,93,254,230,85,16,142,0,241,159,41,46,189,28,159,31,95,124,
836 49,198,228,92,122,229,130,28,8,199,219,176,115,40,206,135,233,36,239,167,
837 146,116,13,79,172,94,176,2,194,241,89,96,152,146,211,79,191,96,73,72,89,
838 75,23,229,138,8,88,180,69,93,29,70,15,71,102,236,23,101,16,1,159,123,128,
839 227,72,27,32,165,182,0,48,53,19,172,239,255,22,33,76,128,95,176,208,9,84,
840 8,125,2,62,0,0,0,0,73,69,78,68,174,66,96,130};
841 
842 static size_t xml_res_size_10 = 1387;
843 static unsigned char xml_res_file_10[] = {
844 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
845 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
846 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
847 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
848 46,111,114,103,155,238,60,26,0,0,4,232,73,68,65,84,88,133,157,151,93,108,
849 84,69,20,128,191,217,237,222,187,109,183,116,55,180,208,165,11,180,6,161,
850 109,68,137,72,90,5,82,160,18,76,32,252,36,62,16,49,38,168,49,106,2,145,
851 24,35,82,161,187,88,8,241,15,8,250,64,162,79,136,33,18,21,80,49,4,45,148,
852 96,160,20,98,168,134,22,65,133,208,150,109,5,183,101,75,187,255,227,67,
853 183,187,221,191,123,47,158,100,30,102,206,153,51,223,189,103,230,156,25,
854 33,165,196,136,136,125,215,85,124,3,75,128,85,64,53,8,39,72,103,92,123,
855 27,228,109,160,19,56,138,195,222,34,55,204,8,26,242,171,7,32,118,94,114,
856 18,150,219,16,172,3,138,12,209,130,31,201,65,44,98,187,220,50,247,246,255,
857 2,16,158,211,86,132,237,93,96,19,80,144,205,198,97,53,227,11,68,181,252,
858 15,3,187,145,67,205,178,105,81,192,48,128,240,180,151,33,196,17,160,86,
859 203,251,129,53,149,28,187,58,192,225,43,62,45,51,128,54,164,92,45,155,230,
860 121,211,21,166,140,197,183,158,125,12,33,218,245,22,175,115,21,178,110,
861 246,68,62,88,58,21,107,94,134,155,116,169,69,136,118,241,222,165,217,154,
862 0,194,221,90,70,44,242,61,145,144,75,203,155,0,246,44,155,134,0,166,23,
863 43,188,245,212,100,61,0,0,23,82,30,23,158,246,178,172,0,194,115,69,33,36,
864 191,69,226,34,18,130,72,40,167,167,231,31,157,72,109,121,97,162,191,121,
865 190,19,215,4,197,24,132,16,71,132,231,180,53,3,128,96,127,35,80,151,232,
866 231,128,40,180,152,216,213,144,250,131,10,44,38,118,53,148,27,1,0,168,141,
867 111,238,36,128,104,60,225,68,240,102,134,105,22,136,45,11,157,76,41,178,
868 100,152,62,55,123,34,117,174,194,140,241,28,178,73,236,188,228,76,0,32,
869 21,15,146,236,179,199,65,56,172,102,26,42,39,208,121,39,245,68,141,68,98,
870 116,244,13,179,126,78,137,81,128,2,194,114,27,128,96,255,69,11,55,253,119,
871 145,58,73,38,79,25,109,64,133,93,229,239,141,201,13,125,185,111,152,57,
872 251,175,24,93,124,76,252,56,236,165,38,110,12,45,209,91,220,44,68,206,61,
873 161,57,71,91,138,240,13,44,49,33,99,43,115,89,168,102,193,27,117,147,249,
874 120,89,124,211,61,0,196,249,151,170,88,49,179,88,207,108,149,9,147,168,
875 206,166,89,57,203,78,219,203,213,184,235,167,80,164,154,147,138,72,8,25,
876 214,175,51,85,37,249,124,183,246,97,78,172,155,73,77,105,126,46,179,106,
877 193,59,167,186,128,89,99,35,53,165,249,188,255,180,139,5,211,108,9,171,
878 152,132,112,44,153,178,5,80,84,96,197,106,29,61,206,18,8,69,83,83,186,98,
879 22,140,5,33,18,147,124,218,222,143,187,181,151,129,148,218,33,174,9,182,
880 156,242,35,177,57,242,243,104,92,88,198,250,57,37,70,226,7,128,170,170,
881 9,8,35,114,103,56,66,99,75,15,159,253,250,15,241,239,25,74,73,197,6,175,
882 6,9,9,6,131,4,2,89,139,92,86,145,241,54,94,50,66,80,93,154,207,174,134,
883 114,234,167,39,15,70,182,16,40,230,228,95,82,84,21,147,69,77,113,60,62,
884 4,225,152,228,147,11,253,120,90,123,25,12,102,134,160,5,201,226,116,218,
885 229,51,139,105,94,92,78,165,93,229,155,46,31,47,30,189,145,208,77,43,86,
886 233,120,181,38,209,255,189,127,132,5,7,254,74,228,9,0,255,230,199,177,41,
887 38,126,188,62,200,166,19,183,184,122,55,235,159,58,147,71,76,118,34,68,
888 6,192,15,127,12,114,242,207,123,188,246,196,36,42,29,6,10,205,216,241,140,
889 67,116,222,25,193,221,218,203,241,107,131,90,179,58,243,16,166,99,32,95,
890 207,166,13,69,37,123,219,250,12,111,202,241,16,79,126,222,69,84,127,83,
891 29,53,81,97,107,65,224,215,178,50,224,40,21,34,18,50,50,199,143,195,222,
892 98,146,175,204,13,35,229,33,35,190,237,86,51,63,189,48,139,175,158,125,
893 136,80,84,38,90,133,93,225,236,250,42,246,60,51,53,5,66,83,36,7,229,134,
894 25,193,209,99,168,152,182,33,184,175,7,48,16,136,114,246,166,159,170,18,
895 43,138,89,36,154,77,49,243,200,164,124,190,252,237,223,164,177,54,196,48,
896 22,177,29,226,229,88,186,235,189,72,62,210,3,0,248,240,92,31,253,195,225,
897 140,241,175,187,124,92,232,73,251,134,220,16,187,199,174,235,201,68,164,
898 78,218,1,156,215,3,24,10,69,105,62,147,122,213,15,68,98,52,157,238,205,
899 62,33,19,162,13,57,212,60,214,73,0,200,166,154,16,138,88,131,160,91,15,
900 226,139,142,187,92,246,142,36,250,123,47,244,211,61,168,17,243,36,68,247,
901 232,245,60,249,70,72,77,197,238,122,47,176,2,65,143,22,64,76,194,219,63,
902 223,2,160,251,94,136,221,231,250,244,152,33,26,234,33,22,93,158,254,54,
903 200,184,208,203,29,139,46,35,204,243,128,139,90,254,206,119,223,231,112,
904 167,143,173,167,122,9,68,98,122,203,95,68,152,231,73,119,109,71,186,66,
905 251,105,22,196,141,96,35,146,172,5,221,110,53,167,149,215,116,39,140,128,
906 105,47,74,204,243,64,79,179,84,144,95,166,16,12,123,16,172,69,98,211,52,
907 78,46,60,132,228,16,170,165,73,54,205,207,177,59,13,2,36,12,247,93,87,241,
908 246,44,5,185,26,68,21,146,50,132,28,125,229,72,225,69,224,5,217,5,226,8,
909 101,229,39,141,62,207,255,3,52,228,253,72,11,53,84,78,0,0,0,0,73,69,78,
910 68,174,66,96,130};
911 
912 static size_t xml_res_size_11 = 834;
913 static unsigned char xml_res_file_11[] = {
914 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
915 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
916 72,89,115,0,0,4,193,0,0,4,193,1,17,118,177,117,0,0,0,25,116,69,88,116,83,
917 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
918 46,111,114,103,155,238,60,26,0,0,2,191,73,68,65,84,88,133,189,214,95,72,
919 20,65,28,192,241,239,236,237,221,94,137,217,147,82,113,15,161,16,249,24,
920 17,190,154,80,20,24,25,151,4,253,67,210,58,43,130,222,18,41,202,243,37,
921 162,151,144,34,178,68,138,186,176,212,254,19,189,20,5,62,4,41,81,4,82,25,
922 21,97,89,87,88,230,221,185,183,211,195,157,94,247,135,107,246,254,244,131,
923 101,102,118,118,126,243,97,119,102,88,33,165,68,28,123,86,133,176,158,144,
924 103,148,243,93,180,139,243,253,7,14,7,90,85,199,232,177,66,234,64,69,190,
925 0,13,139,125,244,249,186,58,164,190,255,200,213,22,181,49,0,145,223,26,
926 102,36,223,249,1,112,96,209,42,174,53,159,246,55,94,80,7,0,152,17,10,137,
927 240,113,189,233,172,223,219,171,14,40,48,66,195,162,133,129,29,231,58,54,
928 93,82,7,20,1,209,44,6,183,118,251,27,174,168,3,10,140,16,72,118,113,99,
929 75,143,127,67,159,58,160,8,136,38,110,121,123,253,245,3,234,128,2,35,0,
930 118,114,123,227,197,206,245,55,213,1,69,64,108,151,247,234,47,251,215,221,
931 153,109,11,41,37,162,253,113,53,50,250,50,235,72,221,21,187,178,132,3,11,
932 15,159,209,176,208,176,16,16,47,37,26,50,94,198,218,159,156,229,203,38,
933 218,234,70,117,101,250,236,91,200,130,136,162,241,142,69,106,249,34,66,
934 3,149,79,144,138,40,224,231,176,15,40,2,194,62,160,192,136,180,53,224,212,
935 4,1,111,165,210,96,167,203,133,203,112,207,181,79,14,141,243,224,237,100,
936 126,0,135,38,168,91,90,170,156,192,237,54,48,12,3,128,192,139,160,173,201,
937 51,2,66,166,197,194,227,195,54,179,252,123,139,42,3,114,138,148,45,186,
938 71,244,179,92,142,1,240,26,15,93,52,22,25,144,130,104,224,33,107,197,16,
939 0,143,88,65,151,180,1,16,128,167,204,200,217,33,156,130,121,97,1,102,34,
940 95,182,72,3,24,186,198,115,95,117,206,0,0,247,96,9,188,143,213,157,142,
941 4,70,9,96,90,146,158,145,175,121,1,214,4,67,84,154,96,232,16,149,217,159,
942 205,8,56,120,255,131,242,100,135,68,47,123,73,254,215,152,79,136,80,188,
943 94,163,143,240,67,212,38,245,183,177,143,51,114,115,102,128,221,112,203,
944 48,11,196,84,198,190,144,9,110,162,148,233,191,146,238,27,114,102,174,158,
945 219,81,108,35,66,38,132,237,172,1,93,19,116,214,46,86,158,192,19,172,99,
946 56,152,124,114,86,77,220,165,116,250,35,0,227,162,130,192,204,106,116,233,
947 64,215,29,0,60,37,177,200,51,2,124,43,203,149,1,224,141,95,127,69,223,27,
948 24,139,3,156,75,56,26,222,29,223,9,233,39,102,26,32,108,90,172,234,126,
949 101,3,144,30,167,126,78,81,19,175,79,207,68,19,29,25,126,106,210,0,18,24,
950 253,22,74,189,109,43,166,132,53,87,183,82,183,225,44,194,97,100,6,252,151,
951 48,35,16,141,106,9,128,196,4,190,20,42,127,187,108,213,79,136,109,2,96,
952 82,150,72,50,157,133,177,57,249,3,235,9,253,190,72,67,151,122,0,0,0,0,73,
953 69,78,68,174,66,96,130};
954 
955 static size_t xml_res_size_12 = 680;
956 static unsigned char xml_res_file_12[] = {
957 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
958 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
959 72,89,115,0,0,4,68,0,0,4,68,1,25,255,88,16,0,0,0,25,116,69,88,116,83,111,
960 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
961 111,114,103,155,238,60,26,0,0,2,37,73,68,65,84,88,133,189,151,63,104,19,
962 81,28,199,63,239,229,146,92,18,144,154,193,34,56,116,8,56,185,8,82,71,23,
963 55,65,11,130,21,92,116,23,255,141,34,37,155,163,131,142,130,147,224,160,
964 131,155,197,65,233,98,21,135,130,165,14,69,227,159,34,73,53,38,173,73,147,
965 188,196,231,164,189,36,191,94,238,206,75,190,112,144,247,126,47,191,247,
966 201,189,207,5,78,89,107,25,21,85,124,225,160,114,183,65,221,24,185,24,214,
967 81,246,140,189,117,108,53,192,90,84,31,64,81,77,13,46,184,203,124,246,186,
968 186,242,196,224,204,6,105,8,160,176,141,195,124,62,191,102,207,46,9,229,
969 38,11,182,243,119,160,61,155,187,104,126,14,94,167,244,203,141,48,155,3,
970 88,84,238,28,139,79,165,126,104,46,121,215,106,239,192,244,194,108,19,79,
971 28,239,160,105,32,11,36,19,187,115,105,12,179,188,11,221,248,144,170,132,
972 7,144,32,14,242,157,87,234,98,104,128,160,209,210,100,211,76,238,56,68,
973 128,73,66,236,62,134,69,229,214,59,236,120,139,239,153,225,180,115,15,18,
974 67,39,21,57,219,228,182,154,251,167,15,216,203,133,54,8,14,120,99,112,40,
975 155,44,224,198,9,177,143,234,87,5,5,192,231,8,250,73,90,208,235,198,5,208,
976 151,96,0,99,132,8,14,48,38,136,112,0,99,128,8,15,240,15,194,196,2,16,72,
977 237,66,222,101,102,42,53,52,175,83,46,218,73,138,223,89,219,220,225,83,
978 189,35,214,66,3,92,56,146,231,234,241,105,177,150,201,100,72,165,134,225,
979 174,61,251,194,157,229,114,60,0,15,86,126,240,188,180,181,103,61,145,116,
980 81,3,119,98,189,218,14,210,58,24,64,169,214,166,84,243,107,248,11,146,105,
981 72,200,199,225,151,104,18,74,49,237,72,98,254,151,132,82,246,18,243,219,
982 182,97,165,220,140,6,224,39,161,20,73,204,71,171,85,230,31,127,136,6,48,
983 74,66,41,131,98,86,26,242,159,87,76,18,74,9,38,102,124,18,74,9,32,102,236,
984 18,74,209,41,151,154,81,188,222,104,68,3,8,43,161,148,55,155,93,78,62,252,
985 24,13,32,138,132,131,169,183,126,67,175,55,228,196,24,37,244,137,22,63,
986 78,40,166,255,135,120,239,64,23,203,125,111,177,162,243,121,44,115,227,
987 228,81,126,175,231,234,230,210,81,108,239,109,236,187,166,201,216,133,19,
988 45,128,63,147,180,205,25,132,236,135,65,0,0,0,0,73,69,78,68,174,66,96,130};
989 
990 static size_t xml_res_size_13 = 708;
991 static unsigned char xml_res_file_13[] = {
992 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
993 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
994 72,89,115,0,0,5,163,0,0,5,163,1,164,52,119,130,0,0,0,25,116,69,88,116,83,
995 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
996 46,111,114,103,155,238,60,26,0,0,2,65,73,68,65,84,88,133,197,151,189,107,
997 19,113,24,199,63,207,229,146,212,40,173,118,16,117,112,208,69,16,28,10,
998 138,56,104,193,197,127,160,8,110,110,29,44,74,209,74,91,46,103,154,74,65,
999 240,101,17,58,184,72,55,157,116,18,234,34,138,155,131,130,173,98,21,193,
1000 183,56,136,73,91,95,146,92,238,113,136,74,122,36,185,203,93,94,158,237,
1001 126,207,243,251,62,159,251,253,158,223,155,168,42,161,45,43,7,113,249,142,
1002 173,43,97,37,140,240,217,1,225,16,6,75,204,200,13,50,50,216,125,0,48,129,
1003 56,194,89,12,86,200,202,56,25,73,116,15,64,137,213,124,109,3,174,98,176,
1004 204,140,140,116,7,160,58,2,94,219,131,112,135,172,60,229,178,28,246,19,
1005 16,111,17,22,44,57,153,48,152,218,100,18,164,58,183,3,59,155,248,21,88,
1006 32,198,4,83,250,213,23,96,117,90,78,40,220,3,18,73,19,250,234,253,95,56,
1007 43,0,105,246,113,147,17,173,212,5,88,75,203,17,215,101,17,37,245,207,217,
1008 102,8,16,94,160,156,193,210,199,27,0,242,147,114,64,12,30,1,91,189,125,
1009 218,14,81,5,89,160,194,4,182,230,36,63,205,94,148,39,192,142,70,241,29,
1010 129,128,85,148,81,67,148,219,205,146,3,20,29,248,237,180,53,121,25,152,
1011 39,197,125,83,133,254,32,245,94,252,11,208,134,145,120,136,203,24,182,190,
1012 130,250,235,184,83,16,31,81,198,73,235,221,218,198,150,165,66,64,148,80,
1013 174,147,34,203,121,253,225,117,6,149,121,143,203,241,255,16,37,232,51,112,
1014 137,49,138,114,177,73,191,7,8,231,176,244,117,163,128,160,0,229,129,57,
1015 125,231,109,116,50,242,205,172,191,153,63,71,185,64,90,23,253,132,35,157,
1016 5,191,202,184,158,213,241,9,56,141,203,80,144,228,16,162,6,106,77,133,74,
1017 209,1,129,181,164,201,21,92,174,97,235,207,86,52,162,45,42,165,4,220,114,
1018 4,43,105,105,46,140,68,36,128,254,56,243,216,234,70,209,136,118,31,136,
1019 152,60,58,64,27,44,232,20,36,11,147,50,228,23,52,176,139,151,140,105,177,
1020 19,0,187,49,120,230,23,180,158,99,255,22,88,106,5,160,231,83,208,123,0,
1021 169,222,215,122,7,224,192,41,224,109,207,0,6,103,245,67,60,193,81,224,77,
1022 79,0,0,82,182,126,142,11,199,68,104,120,108,118,20,0,32,53,171,95,98,38,
1023 195,34,44,119,19,96,195,62,176,249,146,230,214,51,50,92,41,51,39,66,75,
1024 143,76,0,195,36,223,106,159,63,132,231,183,174,19,196,144,63,0,0,0,0,73,
1025 69,78,68,174,66,96,130};
1026 
1027 static size_t xml_res_size_14 = 759;
1028 static unsigned char xml_res_file_14[] = {
1029 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1030 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1031 72,89,115,0,0,5,163,0,0,5,163,1,164,52,119,130,0,0,0,25,116,69,88,116,83,
1032 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1033 46,111,114,103,155,238,60,26,0,0,2,116,73,68,65,84,88,133,197,151,75,104,
1034 19,97,16,128,191,217,236,174,122,16,169,151,82,188,249,194,39,136,86,105,
1035 21,27,3,90,60,120,21,196,199,177,55,241,110,250,72,19,26,209,90,69,177,
1036 136,96,15,30,60,8,245,224,81,16,193,90,65,69,91,8,72,75,209,131,32,52,69,
1037 4,123,176,180,110,154,29,15,33,193,184,221,60,54,15,7,254,203,254,243,248,
1038 152,153,127,254,127,69,85,9,42,18,159,222,142,145,109,209,254,195,31,130,
1039 250,48,130,5,126,187,89,18,83,119,16,119,6,149,35,65,131,3,152,213,5,158,
1040 177,49,150,47,35,86,31,104,75,238,171,86,229,35,48,128,36,166,206,34,122,
1041 29,101,107,241,134,17,106,40,128,196,167,59,16,247,54,208,185,182,70,109,
1042 25,16,191,38,148,107,239,91,201,132,134,17,46,1,82,194,71,26,228,123,69,
1043 209,84,135,52,214,254,180,36,128,140,143,135,72,181,94,193,48,99,152,246,
1044 166,138,28,87,46,14,112,70,7,218,95,172,9,32,253,111,194,184,171,163,40,
1045 251,0,48,237,220,170,175,44,161,198,73,141,29,124,87,0,144,190,201,54,212,
1046 29,65,245,188,71,189,49,16,63,81,186,52,214,254,73,136,190,186,8,122,31,
1047 101,163,175,122,99,32,210,24,238,49,3,139,103,40,15,129,140,175,234,170,
1048 147,91,245,149,54,92,227,81,161,7,164,119,114,15,100,71,81,34,190,38,117,
1049 207,132,164,188,167,160,119,226,28,232,8,202,150,198,67,72,202,115,23,104,
1050 50,252,4,75,118,33,220,34,119,108,138,165,206,229,240,29,68,0,50,240,122,
1051 55,89,247,46,202,41,207,102,33,19,114,3,205,60,240,26,155,47,225,159,177,
1052 237,85,74,149,28,163,154,232,154,5,186,165,119,226,52,48,140,234,254,194,
1053 102,62,11,150,245,67,7,58,190,122,92,39,62,250,55,245,95,82,209,117,172,
1054 201,240,115,236,240,1,68,123,16,153,47,130,112,86,130,63,40,42,5,0,208,
1055 24,174,38,35,99,56,191,119,98,24,113,132,95,0,184,154,109,10,64,1,228,102,
1056 247,146,14,117,13,98,201,14,96,12,113,107,234,200,192,87,169,14,134,23,
1057 128,30,137,7,123,85,229,165,38,99,200,149,230,191,2,212,42,85,151,64,238,
1058 125,89,199,252,183,189,101,21,237,13,235,9,149,119,95,125,15,44,164,183,
1059 33,50,85,86,47,179,2,90,126,108,55,182,4,21,140,237,198,247,64,25,136,230,
1060 52,161,47,132,46,54,239,20,120,32,228,51,161,204,133,154,222,244,129,32,
1061 0,76,123,14,147,136,70,59,211,205,159,3,217,204,28,206,114,68,163,135,210,
1062 208,236,65,36,50,139,197,9,29,58,158,206,127,170,190,4,182,177,136,147,
1063 125,92,181,157,226,96,91,87,53,118,180,232,47,234,15,114,76,236,98,147,
1064 84,227,24,0,0,0,0,73,69,78,68,174,66,96,130};
1065 
1066 static size_t xml_res_size_15 = 1741;
1067 static unsigned char xml_res_file_15[] = {
1068 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
1069 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
1070 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
1071 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
1072 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
1073 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
1074 45,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
1075 120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,111,112,121,51,
1076 50,34,62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,105,116,109,
1077 97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,
1078 114,105,98,98,111,110,95,99,111,112,121,51,50,46,112,110,103,60,47,111,
1079 98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,
1080 115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,116,
1081 114,108,69,100,105,116,111,114,49,50,56,34,62,67,111,110,116,114,111,108,
1082 69,100,105,116,111,114,66,105,116,109,97,112,115,46,99,112,112,36,100,97,
1083 116,97,95,105,109,97,103,101,115,95,99,116,114,108,69,100,105,116,111,114,
1084 49,50,56,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,
1085 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,
1086 112,34,32,110,97,109,101,61,34,99,116,114,108,69,100,105,116,111,114,49,
1087 54,34,62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,105,116,109,
1088 97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,
1089 99,116,114,108,69,100,105,116,111,114,49,54,46,112,110,103,60,47,111,98,
1090 106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
1091 61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,116,114,
1092 108,69,100,105,116,111,114,50,53,54,34,62,67,111,110,116,114,111,108,69,
1093 100,105,116,111,114,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,
1094 97,95,105,109,97,103,101,115,95,99,116,114,108,69,100,105,116,111,114,50,
1095 53,54,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,
1096 106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,
1097 34,32,110,97,109,101,61,34,99,116,114,108,69,100,105,116,111,114,51,50,
1098 34,62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,105,116,109,
1099 97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,
1100 99,116,114,108,69,100,105,116,111,114,51,50,46,112,110,103,60,47,111,98,
1101 106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
1102 61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,116,114,
1103 108,69,100,105,116,111,114,54,52,34,62,67,111,110,116,114,111,108,69,100,
1104 105,116,111,114,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,
1105 95,105,109,97,103,101,115,95,99,116,114,108,69,100,105,116,111,114,54,52,
1106 46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,
1107 99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,
1108 97,109,101,61,34,100,101,108,101,116,101,51,50,34,62,67,111,110,116,114,
1109 111,108,69,100,105,116,111,114,66,105,116,109,97,112,115,46,99,112,112,
1110 36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,
1111 100,101,108,101,116,101,51,50,46,112,110,103,60,47,111,98,106,101,99,116,
1112 62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,
1113 66,105,116,109,97,112,34,32,110,97,109,101,61,34,100,114,97,103,51,50,34,
1114 62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,105,116,109,97,
1115 112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,
1116 105,98,98,111,110,95,100,114,97,103,51,50,46,112,110,103,60,47,111,98,106,
1117 101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,
1118 34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,101,120,112,
1119 51,50,34,62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,105,116,
1120 109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,
1121 95,114,105,98,98,111,110,95,101,120,112,51,50,46,112,110,103,60,47,111,
1122 98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,
1123 115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,105,
1124 109,112,51,50,34,62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,
1125 105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,
1126 101,115,95,114,105,98,98,111,110,95,105,109,112,51,50,46,112,110,103,60,
1127 47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,
1128 97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,
1129 34,109,111,118,101,51,50,34,62,67,111,110,116,114,111,108,69,100,105,116,
1130 111,114,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,
1131 109,97,103,101,115,95,114,105,98,98,111,110,95,109,111,118,101,51,50,46,
1132 112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,
1133 116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,
1134 97,109,101,61,34,110,101,119,51,50,34,62,67,111,110,116,114,111,108,69,
1135 100,105,116,111,114,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,
1136 97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,110,101,119,51,
1137 50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,
1138 101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,
1139 32,110,97,109,101,61,34,112,97,115,116,101,51,50,34,62,67,111,110,116,114,
1140 111,108,69,100,105,116,111,114,66,105,116,109,97,112,115,46,99,112,112,
1141 36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,
1142 112,97,115,116,101,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,
1143 10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,
1144 105,116,109,97,112,34,32,110,97,109,101,61,34,114,101,100,111,51,50,34,
1145 62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,105,116,109,97,
1146 112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,
1147 105,98,98,111,110,95,114,101,100,111,51,50,46,112,110,103,60,47,111,98,
1148 106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
1149 61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,117,110,
1150 100,111,51,50,34,62,67,111,110,116,114,111,108,69,100,105,116,111,114,66,
1151 105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,
1152 101,115,95,114,105,98,98,111,110,95,117,110,100,111,51,50,46,112,110,103,
1153 60,47,111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,
1154 62,10};
1155 
1156 void wxC870InitBitmapResources()
1157 {
1158 
1159  // Check for memory FS. If not present, load the handler:
1160  {
1161  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
1162  wxFileSystem fsys;
1163  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
1164  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
1165  if (f) delete f;
1166  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
1167  }
1168 
1169  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_copy32.png"), xml_res_file_0, xml_res_size_0, wxT("image/png"));
1170  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ctrlEditor128.png"), xml_res_file_1, xml_res_size_1, wxT("image/png"));
1171  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ctrlEditor16.png"), xml_res_file_2, xml_res_size_2, wxT("image/png"));
1172  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ctrlEditor256.png"), xml_res_file_3, xml_res_size_3, wxT("image/png"));
1173  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ctrlEditor32.png"), xml_res_file_4, xml_res_size_4, wxT("image/png"));
1174  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ctrlEditor64.png"), xml_res_file_5, xml_res_size_5, wxT("image/png"));
1175  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_delete32.png"), xml_res_file_6, xml_res_size_6, wxT("image/png"));
1176  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_drag32.png"), xml_res_file_7, xml_res_size_7, wxT("image/png"));
1177  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_exp32.png"), xml_res_file_8, xml_res_size_8, wxT("image/png"));
1178  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_imp32.png"), xml_res_file_9, xml_res_size_9, wxT("image/png"));
1179  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_move32.png"), xml_res_file_10, xml_res_size_10, wxT("image/png"));
1180  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_new32.png"), xml_res_file_11, xml_res_size_11, wxT("image/png"));
1181  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_paste32.png"), xml_res_file_12, xml_res_size_12, wxT("image/png"));
1182  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_redo32.png"), xml_res_file_13, xml_res_size_13, wxT("image/png"));
1183  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$data_images_ribbon_undo32.png"), xml_res_file_14, xml_res_size_14, wxT("image/png"));
1184  XRC_ADD_FILE(wxT("XRC_resource/ControlEditorBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_ControlEditorBitmaps.xrc"), xml_res_file_15, xml_res_size_15, wxT("text/xml"));
1185  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/ControlEditorBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_ControlEditorBitmaps.xrc"));
1186 }
+
+ + + + diff --git a/docs/doxygen/html/_control_element_8cpp_source.html b/docs/doxygen/html/_control_element_8cpp_source.html new file mode 100644 index 0000000..c2df7d8 --- /dev/null +++ b/docs/doxygen/html/_control_element_8cpp_source.html @@ -0,0 +1,99 @@ + + + + + + + +Project/ControlElement.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlElement.cpp
+
+
+
1 #include "ControlElement.h"
2 #ifdef USING_WX_3_0_X
3 #include "DegreesAndRadians.h"
4 #endif
5 
6 Node::Node(wxPoint2DDouble position, NodeType nodeType, double borderSize)
7 {
8  double totalRadius = m_radius + borderSize;
9  m_rect = wxRect2DDouble(position.m_x - totalRadius, position.m_y - totalRadius, totalRadius * 2, totalRadius * 2);
10  m_nodeType = nodeType;
11 
12  m_triPts.push_back(GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, m_radius));
13  m_triPts.push_back(GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, -m_radius));
14  m_triPts.push_back(GetPosition() + wxPoint2DDouble(-m_radius + 1, 0));
15 }
16 
17 Node::~Node() {}
18 void Node::SetPosition(wxPoint2DDouble position)
19 {
20  m_rect = wxRect2DDouble(position.m_x - m_rect.m_width / 2, position.m_y - m_rect.m_height / 2, m_rect.m_width,
21  m_rect.m_height);
22  m_triPts[0] = GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, m_radius);
23  m_triPts[1] = GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, -m_radius);
24  m_triPts[2] = GetPosition() + wxPoint2DDouble(-m_radius + 1, 0);
25 
26  // Rotate according to the angle (node rect center as reference)
27  if(m_angle != 0.0) RotateTriPt(m_angle);
28 }
29 
30 void Node::StartMove(wxPoint2DDouble position)
31 {
32  m_moveStartPt = position;
33  m_movePos = m_rect.GetPosition() - wxPoint2DDouble(-m_rect.m_width / 2, -m_rect.m_height / 2);
34 }
35 
36 void Node::Move(wxPoint2DDouble position) { SetPosition(m_movePos + position - m_moveStartPt); }
37 wxPoint2DDouble Node::GetPosition() const
38 {
39  return m_rect.GetPosition() + wxPoint2DDouble(m_rect.GetSize().GetWidth() / 2, m_rect.GetSize().GetHeight() / 2);
40 }
41 
42 void Node::RotateTriPt(double angle)
43 {
44  double radAngle = wxDegToRad(angle);
45  wxPoint2DDouble rectCenter =
46  m_rect.GetPosition() + wxPoint2DDouble(m_rect.GetSize().GetWidth() / 2.0, m_rect.GetSize().GetHeight() / 2.0);
47  m_triPts[0] = wxPoint2DDouble(std::cos(radAngle) * (m_triPts[0].m_x - rectCenter.m_x) -
48  std::sin(radAngle) * (m_triPts[0].m_y - rectCenter.m_y) + rectCenter.m_x,
49  std::sin(radAngle) * (m_triPts[0].m_x - rectCenter.m_x) +
50  std::cos(radAngle) * (m_triPts[0].m_y - rectCenter.m_y) + rectCenter.m_y);
51  m_triPts[1] = wxPoint2DDouble(std::cos(radAngle) * (m_triPts[1].m_x - rectCenter.m_x) -
52  std::sin(radAngle) * (m_triPts[1].m_y - rectCenter.m_y) + rectCenter.m_x,
53  std::sin(radAngle) * (m_triPts[1].m_x - rectCenter.m_x) +
54  std::cos(radAngle) * (m_triPts[1].m_y - rectCenter.m_y) + rectCenter.m_y);
55  m_triPts[2] = wxPoint2DDouble(std::cos(radAngle) * (m_triPts[2].m_x - rectCenter.m_x) -
56  std::sin(radAngle) * (m_triPts[2].m_y - rectCenter.m_y) + rectCenter.m_x,
57  std::sin(radAngle) * (m_triPts[2].m_x - rectCenter.m_x) +
58  std::cos(radAngle) * (m_triPts[2].m_y - rectCenter.m_y) + rectCenter.m_y);
59 }
60 
61 void Node::Rotate(bool clockwise)
62 {
63  if(clockwise)
64  m_angle += 90.0;
65  else
66  m_angle -= 90.0;
67  if(m_angle >= 360.0)
68  m_angle = 0.0;
69  else if(m_angle < 0)
70  m_angle = 270.0;
71 
72  // Update input triangle points.
73  m_triPts[0] = GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, m_radius);
74  m_triPts[1] = GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, -m_radius);
75  m_triPts[2] = GetPosition() + wxPoint2DDouble(-m_radius + 1, 0);
76 
77  // Rotate according to the angle (node rect center as reference)
78  if(m_angle != 0.0) RotateTriPt(m_angle);
79 }
80 
81 bool Node::Contains(wxPoint2DDouble position) const
82 {
83  if(m_connected) return false;
84  return m_rect.Contains(position);
85 }
86 
87 ControlElement::ControlElement(int id) : Element() { m_elementID = id; }
88 ControlElement::~ControlElement() {}
89 void ControlElement::DrawNodes() const
90 {
91  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
92  Node* node = *it;
93  DrawCircle(node->GetPosition(), node->GetRadius(), 10, GL_POLYGON);
94  if(node->GetNodeType() == Node::NODE_IN) {
95  DrawTriangle(node->GetInTrianglePts());
96  }
97  }
98 }
99 
100 void ControlElement::StartMove(wxPoint2DDouble position)
101 {
102  m_moveStartPt = position;
103  m_movePos = m_position;
104  for(int i = 0; i < (int)m_nodeList.size(); ++i) {
105  m_nodeList[i]->StartMove(position);
106  }
107 }
108 
109 void ControlElement::Move(wxPoint2DDouble position)
110 {
111  SetPosition(m_movePos + position - m_moveStartPt);
112  for(int i = 0; i < (int)m_nodeList.size(); ++i) {
113  m_nodeList[i]->Move(position);
114  }
115 }
116 
117 bool ControlElement::Solve(double input, double timeStep)
118 {
119  m_output = input;
120  return true;
121 }
122 
123 void ControlElement::ReplaceNode(Node* oldNode, Node* newNode)
124 {
125  for(unsigned int i = 0; i < m_nodeList.size(); i++) {
126  if(m_nodeList[i] == oldNode) m_nodeList[i] = newNode;
127  }
128 }
+ +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
+
+
+ + + + diff --git a/docs/doxygen/html/_control_element_8h_source.html b/docs/doxygen/html/_control_element_8h_source.html index 65a41ed..0ff6503 100644 --- a/docs/doxygen/html/_control_element_8h_source.html +++ b/docs/doxygen/html/_control_element_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ControlElement.h Source File +Project/ControlElement.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ControlElement.h
-
1 #ifndef CONTROLELEMENT_H
2 #define CONTROLELEMENT_H
3 
4 #include "Element.h"
5 
6 class Node
7 {
8  public:
9  enum NodeType { NODE_IN = 0, NODE_OUT };
10 
11  Node(wxPoint2DDouble position = wxPoint2DDouble(0, 0), NodeType nodeType = NODE_IN, double borderSize = 0.0);
12  ~Node();
13 
14  wxRect2DDouble GetRect() const { return m_rect; }
15  void SetRect(wxRect2DDouble rect) { m_rect = rect; }
16  wxPoint2DDouble GetPosition() const;
17  void SetPosition(wxPoint2DDouble position);
18 
19  NodeType GetNodeType() const { return m_nodeType; }
20  void SetNodeType(NodeType nodeType) { m_nodeType = nodeType; }
21  double GetRadius() const { return m_radius; }
22  std::vector<wxPoint2DDouble> GetInTrianglePts() const { return m_triPts; }
23  double GetAngle() const { return m_angle; }
24  void SetAngle(double angle) { m_angle = angle; }
25  void Rotate(bool clockwise = true);
26 
27  void RotateTriPt(double angle);
28 
29  void StartMove(wxPoint2DDouble position);
30  void Move(wxPoint2DDouble position);
31  bool Contains(wxPoint2DDouble position) const;
32 
33  bool IsConnected() const { return m_connected; }
34  void SetConnected(bool connected = true) { m_connected = connected; }
35  int GetID() const { return m_id; }
36  void SetID(int id) { m_id = id; }
37  protected:
38  int m_id = -1;
39 
40  wxRect2DDouble m_rect;
41  NodeType m_nodeType;
42 
43  bool m_connected = false;
44 
45  wxPoint2DDouble m_moveStartPt;
46  wxPoint2DDouble m_movePos;
47 
48  double m_radius = 3.0;
49  std::vector<wxPoint2DDouble> m_triPts;
50  double m_angle = 0.0;
51 };
52 
53 class ControlElement : public Element
54 {
55  public:
56  ControlElement(int id);
57  ~ControlElement();
58 
59  virtual void StartMove(wxPoint2DDouble position);
60  virtual void Move(wxPoint2DDouble position);
61 
62  void SetNodeList(std::vector<Node*> nodeList) { m_nodeList = nodeList; }
63  std::vector<Node*> GetNodeList() const { return m_nodeList; }
64  virtual void DrawNodes() const;
65  virtual void ReplaceNode(Node* oldNode, Node* newNode);
66  virtual void UpdateText() {}
67  virtual bool IsSolved() const { return m_solved; }
68  virtual void SetSolved(bool solved = true) { m_solved = solved; }
69  virtual bool Solve(double input, double timeStep);
70  virtual double GetOutput() const { return m_output; }
71  virtual void SetOutput(double output) { m_output = output; }
72  protected:
73  std::vector<Node*> m_nodeList;
74  bool m_solved = false;
75  double m_output = 0.0;
76 };
77 
78 #endif // CONTROLELEMENT_H
Definition: Element.h:88
-
Definition: ControlElement.h:6
+
1 #ifndef CONTROLELEMENT_H
2 #define CONTROLELEMENT_H
3 
4 #include "Element.h"
5 
6 class Node
7 {
8  public:
9  enum NodeType { NODE_IN = 0, NODE_OUT };
10 
11  Node(wxPoint2DDouble position = wxPoint2DDouble(0, 0), NodeType nodeType = NODE_IN, double borderSize = 0.0);
12  ~Node();
13 
14  wxRect2DDouble GetRect() const { return m_rect; }
15  void SetRect(wxRect2DDouble rect) { m_rect = rect; }
16  wxPoint2DDouble GetPosition() const;
17  void SetPosition(wxPoint2DDouble position);
18 
19  NodeType GetNodeType() const { return m_nodeType; }
20  void SetNodeType(NodeType nodeType) { m_nodeType = nodeType; }
21  double GetRadius() const { return m_radius; }
22  std::vector<wxPoint2DDouble> GetInTrianglePts() const { return m_triPts; }
23  double GetAngle() const { return m_angle; }
24  void SetAngle(double angle) { m_angle = angle; }
25  void Rotate(bool clockwise = true);
26 
27  void RotateTriPt(double angle);
28 
29  void StartMove(wxPoint2DDouble position);
30  void Move(wxPoint2DDouble position);
31  bool Contains(wxPoint2DDouble position) const;
32 
33  bool IsConnected() const { return m_connected; }
34  void SetConnected(bool connected = true) { m_connected = connected; }
35  int GetID() const { return m_id; }
36  void SetID(int id) { m_id = id; }
37  protected:
38  int m_id = -1;
39 
40  wxRect2DDouble m_rect;
41  NodeType m_nodeType;
42 
43  bool m_connected = false;
44 
45  wxPoint2DDouble m_moveStartPt;
46  wxPoint2DDouble m_movePos;
47 
48  double m_radius = 3.0;
49  std::vector<wxPoint2DDouble> m_triPts;
50  double m_angle = 0.0;
51 };
52 
53 class ControlElement : public Element
54 {
55  public:
56  ControlElement(int id);
57  ~ControlElement();
58 
59  virtual void StartMove(wxPoint2DDouble position);
60  virtual void Move(wxPoint2DDouble position);
61 
62  void SetNodeList(std::vector<Node*> nodeList) { m_nodeList = nodeList; }
63  std::vector<Node*> GetNodeList() const { return m_nodeList; }
64  virtual void DrawNodes() const;
65  virtual void ReplaceNode(Node* oldNode, Node* newNode);
66  virtual void UpdateText() {}
67  virtual bool IsSolved() const { return m_solved; }
68  virtual void SetSolved(bool solved = true) { m_solved = solved; }
69  virtual bool Solve(double input, double timeStep);
70  virtual double GetOutput() const { return m_output; }
71  virtual void SetOutput(double output) { m_output = output; }
72  protected:
73  std::vector<Node*> m_nodeList;
74  bool m_solved = false;
75  double m_output = 0.0;
76 };
77 
78 #endif // CONTROLELEMENT_H
+
Class to manage color of OpenGL.
-
Definition: ControlElement.h:53
+
+
- + diff --git a/docs/doxygen/html/_control_element_container_8cpp_source.html b/docs/doxygen/html/_control_element_container_8cpp_source.html new file mode 100644 index 0000000..8a32cf2 --- /dev/null +++ b/docs/doxygen/html/_control_element_container_8cpp_source.html @@ -0,0 +1,114 @@ + + + + + + + +Project/ControlElementContainer.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlElementContainer.cpp
+
+
+
1 #include "ControlElementContainer.h"
2 #include "ControlEditor.h"
3 #include "ControlElement.h"
4 
5 ControlElementContainer::ControlElementContainer() { ClearContainer(); }
6 ControlElementContainer::~ControlElementContainer() {}
7 void ControlElementContainer::FillContainer(ControlEditor* editor)
8 {
9  ClearContainer();
10  m_ctrlElementsList = editor->GetControlElementList();
11  m_cLineList = editor->GetConnectionLineList();
12  auto cElementList = editor->GetControlElementList();
13  for(auto it = cElementList.begin(), itEnd = cElementList.end(); it != itEnd; ++it) {
14  if(Constant* constant = dynamic_cast<Constant*>(*it)) {
15  m_constantList.push_back(constant);
16  } else if(Exponential* exponential = dynamic_cast<Exponential*>(*it)) {
17  m_exponentialList.push_back(exponential);
18  } else if(Gain* gain = dynamic_cast<Gain*>(*it)) {
19  m_gainList.push_back(gain);
20  } else if(IOControl* ioControl = dynamic_cast<IOControl*>(*it)) {
21  m_ioControlList.push_back(ioControl);
22  } else if(Limiter* limiter = dynamic_cast<Limiter*>(*it)) {
23  m_limiterList.push_back(limiter);
24  } else if(Multiplier* multiplier = dynamic_cast<Multiplier*>(*it)) {
25  m_multiplierList.push_back(multiplier);
26  } else if(RateLimiter* rateLimiter = dynamic_cast<RateLimiter*>(*it)) {
27  m_rateLimiterList.push_back(rateLimiter);
28  } else if(Sum* sum = dynamic_cast<Sum*>(*it)) {
29  m_sumList.push_back(sum);
30  } else if(TransferFunction* tf = dynamic_cast<TransferFunction*>(*it)) {
31  m_tfList.push_back(tf);
32  }
33  }
34 }
35 
36 void ControlElementContainer::ClearContainer()
37 {
38  m_cLineList.clear();
39  m_constantList.clear();
40  m_exponentialList.clear();
41  m_gainList.clear();
42  m_ioControlList.clear();
43  m_limiterList.clear();
44  m_multiplierList.clear();
45  m_rateLimiterList.clear();
46  m_sumList.clear();
47  m_tfList.clear();
48 }
49 
50 void ControlElementContainer::FillContainer(std::vector<ControlElement*> controlElementList,
51  std::vector<ConnectionLine*> connectionLineList)
52 {
53  ClearContainer();
54  m_ctrlElementsList = controlElementList;
55  m_cLineList = connectionLineList;
56 
57  for(auto it = controlElementList.begin(), itEnd = controlElementList.end(); it != itEnd; ++it) {
58  if(Constant* constant = dynamic_cast<Constant*>(*it)) {
59  m_constantList.push_back(constant);
60  } else if(Exponential* exponential = dynamic_cast<Exponential*>(*it)) {
61  m_exponentialList.push_back(exponential);
62  } else if(Gain* gain = dynamic_cast<Gain*>(*it)) {
63  m_gainList.push_back(gain);
64  } else if(IOControl* ioControl = dynamic_cast<IOControl*>(*it)) {
65  m_ioControlList.push_back(ioControl);
66  } else if(Limiter* limiter = dynamic_cast<Limiter*>(*it)) {
67  m_limiterList.push_back(limiter);
68  } else if(Multiplier* multiplier = dynamic_cast<Multiplier*>(*it)) {
69  m_multiplierList.push_back(multiplier);
70  } else if(RateLimiter* rateLimiter = dynamic_cast<RateLimiter*>(*it)) {
71  m_rateLimiterList.push_back(rateLimiter);
72  } else if(Sum* sum = dynamic_cast<Sum*>(*it)) {
73  m_sumList.push_back(sum);
74  } else if(TransferFunction* tf = dynamic_cast<TransferFunction*>(*it)) {
75  m_tfList.push_back(tf);
76  }
77  }
78 }
79 
80 void ControlElementContainer::GetContainerCopy(std::vector<ControlElement*>& controlElementList,
81  std::vector<ConnectionLine*>& connectionLineList)
82 {
83  controlElementList.clear();
84  connectionLineList.clear();
85 
86  // Copy connection lines
87  for(auto it = m_cLineList.begin(), itEnd = m_cLineList.end(); it != itEnd; ++it) {
88  ConnectionLine* copy = static_cast<ConnectionLine*>((*it)->GetCopy());
89  connectionLineList.push_back(copy);
90  }
91 
92  // Copy elements (exept connection line).
93  int nodeID = 0;
94  for(auto it = m_ctrlElementsList.begin(), itEnd = m_ctrlElementsList.end(); it != itEnd; ++it) {
95  Element* oldElement = *it;
96  ControlElement* copy = static_cast<ControlElement*>(oldElement->GetCopy());
97  controlElementList.push_back(copy);
98  // Copy nodes.
99  std::vector<Node*> nodeList = copy->GetNodeList();
100  std::vector<Node*> nodeListCopy;
101  for(auto itN = nodeList.begin(), itEndN = nodeList.end(); itN != itEndN; ++itN) {
102  Node* node = *itN;
103  node->SetID(nodeID);
104  Node* copyNode = new Node();
105  *copyNode = *node;
106  nodeListCopy.push_back(copyNode);
107  nodeID++;
108  }
109  copy->SetNodeList(nodeListCopy);
110 
111  // Replace children to copies.
112  auto childList = copy->GetChildList();
113  for(auto itC = childList.begin(), itEndC = childList.end(); itC != itEndC; ++itC) {
114  ConnectionLine* child = static_cast<ConnectionLine*>(*itC);
115  // Replace child's parent to copy.
116  for(auto itCL = connectionLineList.begin(), itEndCL = connectionLineList.end(); itCL != itEndCL; ++itCL) {
117  ConnectionLine* copyLine = *itCL;
118  if(copyLine->GetID() == child->GetID()) {
119  // Replace node.
120  nodeList = child->GetNodeList();
121  for(auto itN = nodeList.begin(), itEndN = nodeList.end(); itN != itEndN; ++itN) {
122  Node* node = *itN;
123  for(auto itCN = nodeListCopy.begin(), itEndCN = nodeListCopy.end(); itCN != itEndCN; ++itCN) {
124  Node* nodeCopy = *itCN;
125  if(node->GetID() == nodeCopy->GetID()) {
126  copyLine->ReplaceNode(node, nodeCopy);
127  break;
128  }
129  }
130  }
131  copyLine->ReplaceParent(oldElement, copy);
132  copy->ReplaceChild(child, copyLine);
133  }
134  }
135  }
136  }
137 }
+ +
Definition: Sum.h:9
+
Definition: Gain.h:11
+
virtual std::vector< Element * > GetChildList() const
Get the Child list.
Definition: Element.h:523
+ +
Definition: Limiter.h:8
+ +
virtual void ReplaceChild(Element *oldChild, Element *newChild)
Replace a child from the list.
Definition: Element.cpp:343
+ + + + + +
virtual int GetID() const
Get the element ID.
Definition: Element.h:270
+
virtual void ReplaceParent(Element *oldParent, Element *newParent)
Replace a parent.
Definition: Element.cpp:326
+ + +
virtual Element * GetCopy()
Get a the element copy.
Definition: Element.h:258
+
+
+ + + + diff --git a/docs/doxygen/html/_control_element_container_8h_source.html b/docs/doxygen/html/_control_element_container_8h_source.html index 71676d6..fe2c827 100644 --- a/docs/doxygen/html/_control_element_container_8h_source.html +++ b/docs/doxygen/html/_control_element_container_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ControlElementContainer.h Source File +Project/ControlElementContainer.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ControlElementContainer.h
-
1 #ifndef CONTROLELEMENTCONTAINER_H
2 #define CONTROLELEMENTCONTAINER_H
3 
4 #include <vector>
5 
6 class ControlEditor;
7 class ControlElement;
8 
9 #include "ConnectionLine.h"
10 #include "Constant.h"
11 #include "Exponential.h"
12 #include "Gain.h"
13 #include "IOControl.h"
14 #include "Limiter.h"
15 #include "Multiplier.h"
16 #include "RateLimiter.h"
17 #include "Sum.h"
18 #include "TransferFunction.h"
19 
21 {
22  public:
25 
26  virtual void FillContainer(ControlEditor* editor);
27  virtual void FillContainer(std::vector<ControlElement*> controlElementList,
28  std::vector<ConnectionLine*> connectionLineList);
29  virtual void GetContainerCopy(std::vector<ControlElement*>& controlElementList,
30  std::vector<ConnectionLine*>& connectionLineList);
31  virtual void ClearContainer();
32 
33  std::vector<ControlElement*> GetControlElementsList() const { return m_ctrlElementsList; }
34  std::vector<ConnectionLine*> GetConnectionLineList() const { return m_cLineList; }
35  std::vector<Constant*> GetConstantList() const { return m_constantList; }
36  std::vector<Exponential*> GetExponentialList() const { return m_exponentialList; }
37  std::vector<Gain*> GetGainList() const { return m_gainList; }
38  std::vector<IOControl*> GetIOControlList() const { return m_ioControlList; }
39  std::vector<Limiter*> GetLimiterList() const { return m_limiterList; }
40  std::vector<Multiplier*> GetMultiplierList() const { return m_multiplierList; }
41  std::vector<RateLimiter*> GetRateLimiterList() const { return m_rateLimiterList; }
42  std::vector<Sum*> GetSumList() const { return m_sumList; }
43  std::vector<TransferFunction*> GetTFList() const { return m_tfList; }
44  protected:
45  std::vector<ControlElement*> m_ctrlElementsList;
46  std::vector<Constant*> m_constantList;
47 
48  std::vector<ConnectionLine*> m_cLineList;
49  std::vector<Exponential*> m_exponentialList;
50  std::vector<Gain*> m_gainList;
51  std::vector<IOControl*> m_ioControlList;
52  std::vector<Limiter*> m_limiterList;
53  std::vector<Multiplier*> m_multiplierList;
54  std::vector<RateLimiter*> m_rateLimiterList;
55  std::vector<Sum*> m_sumList;
56  std::vector<TransferFunction*> m_tfList;
57 };
58 
59 #endif // CONTROLELEMENTCONTAINER_H
Definition: ControlElementContainer.h:20
-
Definition: ControlEditor.h:67
-
Definition: ControlElement.h:53
+
1 #ifndef CONTROLELEMENTCONTAINER_H
2 #define CONTROLELEMENTCONTAINER_H
3 
4 #include <vector>
5 
6 class ControlEditor;
7 class ControlElement;
8 
9 #include "ConnectionLine.h"
10 #include "Constant.h"
11 #include "Exponential.h"
12 #include "Gain.h"
13 #include "IOControl.h"
14 #include "Limiter.h"
15 #include "Multiplier.h"
16 #include "RateLimiter.h"
17 #include "Sum.h"
18 #include "TransferFunction.h"
19 
21 {
22  public:
25 
26  virtual void FillContainer(ControlEditor* editor);
27  virtual void FillContainer(std::vector<ControlElement*> controlElementList,
28  std::vector<ConnectionLine*> connectionLineList);
29  virtual void GetContainerCopy(std::vector<ControlElement*>& controlElementList,
30  std::vector<ConnectionLine*>& connectionLineList);
31  virtual void ClearContainer();
32 
33  std::vector<ControlElement*> GetControlElementsList() const { return m_ctrlElementsList; }
34  std::vector<ConnectionLine*> GetConnectionLineList() const { return m_cLineList; }
35  std::vector<Constant*> GetConstantList() const { return m_constantList; }
36  std::vector<Exponential*> GetExponentialList() const { return m_exponentialList; }
37  std::vector<Gain*> GetGainList() const { return m_gainList; }
38  std::vector<IOControl*> GetIOControlList() const { return m_ioControlList; }
39  std::vector<Limiter*> GetLimiterList() const { return m_limiterList; }
40  std::vector<Multiplier*> GetMultiplierList() const { return m_multiplierList; }
41  std::vector<RateLimiter*> GetRateLimiterList() const { return m_rateLimiterList; }
42  std::vector<Sum*> GetSumList() const { return m_sumList; }
43  std::vector<TransferFunction*> GetTFList() const { return m_tfList; }
44  protected:
45  std::vector<ControlElement*> m_ctrlElementsList;
46  std::vector<Constant*> m_constantList;
47 
48  std::vector<ConnectionLine*> m_cLineList;
49  std::vector<Exponential*> m_exponentialList;
50  std::vector<Gain*> m_gainList;
51  std::vector<IOControl*> m_ioControlList;
52  std::vector<Limiter*> m_limiterList;
53  std::vector<Multiplier*> m_multiplierList;
54  std::vector<RateLimiter*> m_rateLimiterList;
55  std::vector<Sum*> m_sumList;
56  std::vector<TransferFunction*> m_tfList;
57 };
58 
59 #endif // CONTROLELEMENTCONTAINER_H
+ +
+
- + diff --git a/docs/doxygen/html/_control_element_solver_8cpp_source.html b/docs/doxygen/html/_control_element_solver_8cpp_source.html new file mode 100644 index 0000000..0e517da --- /dev/null +++ b/docs/doxygen/html/_control_element_solver_8cpp_source.html @@ -0,0 +1,105 @@ + + + + + + + +Project/ControlElementSolver.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlElementSolver.cpp
+
+
+
1 #include "ControlElementSolver.h"
2 
3 #include "ControlElementContainer.h"
4 #include "ControlEditor.h"
5 #include "ConnectionLine.h"
6 #include "Constant.h"
7 #include "Exponential.h"
8 #include "Gain.h"
9 #include "IOControl.h"
10 #include "Limiter.h"
11 #include "Multiplier.h"
12 #include "RateLimiter.h"
13 #include "Sum.h"
14 #include "TransferFunction.h"
15 
16 ControlElementSolver::ControlElementSolver(ControlEditor* controlEditor,
17  double timeStep,
18  double integrationError,
19  bool startAllZero,
20  double input)
21 {
22  m_ctrlContainer = new ControlElementContainer();
23  m_ctrlContainer->FillContainer(controlEditor);
24  Initialize(controlEditor, timeStep, integrationError, startAllZero, input);
25 }
26 
27 ControlElementSolver::ControlElementSolver(ControlElementContainer* ctrlContainer,
28  double timeStep,
29  double integrationError,
30  bool startAllZero,
31  double input,
32  wxWindow* parent)
33 {
34  m_ctrlContainer = ctrlContainer;
35  Initialize(parent, timeStep, integrationError, startAllZero, input);
36 }
37 
38 void ControlElementSolver::Initialize(wxWindow* parent,
39  double timeStep,
40  double integrationError,
41  bool startAllZero,
42  double input)
43 {
44  // Check if the sistem have one input and one output
45  bool fail = false;
46  wxString failMessage = "";
47  auto ioList = m_ctrlContainer->GetIOControlList();
48  if(ioList.size() != 2) {
49  fail = true;
50  failMessage = _("The control system must have one input and one output.");
51  }
52  bool haveInput, haveOutput;
53  haveInput = haveOutput = false;
54  for(auto it = ioList.begin(), itEnd = ioList.end(); it != itEnd; ++it) {
55  IOControl* io = *it;
56  if(io->GetType() == Node::NODE_OUT) {
57  m_inputControl = io;
58  haveInput = true;
59  } else if(io->GetType() == Node::NODE_IN) {
60  m_outputControl = io;
61  haveOutput = true;
62  }
63  }
64  if(!fail && !haveInput) {
65  fail = true;
66  failMessage = _("There is no input in the control system.");
67  }
68  if(!fail && !haveOutput) {
69  fail = true;
70  failMessage = _("There is no output in the control system.");
71  }
72  if(!fail) {
73  if(m_inputControl->GetChildList().size() == 0) {
74  fail = true;
75  failMessage = _("Input not connected.");
76  }
77  }
78 
79  m_timeStep = timeStep;
80  m_integrationError = integrationError;
81  if(!fail) {
82  if(!InitializeValues(input, startAllZero)) {
83  fail = true;
84  failMessage = _("It was not possible to initialize the control system.");
85  }
86  }
87 
88  if(fail) {
89  wxMessageDialog msgDialog(parent, failMessage, _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
90  msgDialog.ShowModal();
91  } else {
92  m_isOK = true;
93  }
94 }
95 
96 bool ControlElementSolver::InitializeValues(double input, bool startAllZero)
97 {
98  // Reset Elements values
99  auto elementList = m_ctrlContainer->GetControlElementsList();
100  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) {
101  ControlElement* element = *it;
102  element->SetSolved(false);
103  element->SetOutput(0.0);
104  }
105  auto tfList = m_ctrlContainer->GetTFList();
106  for(auto it = tfList.begin(), itEnd = tfList.end(); it != itEnd; ++it) {
107  TransferFunction* tf = *it;
108  tf->CalculateSpaceState(100, m_integrationError);
109  }
110  auto connectionLineList = m_ctrlContainer->GetConnectionLineList();
111  for(auto it = connectionLineList.begin(), itEnd = connectionLineList.end(); it != itEnd; ++it) {
112  ConnectionLine* cLine = *it;
113  cLine->SetSolved(false);
114  cLine->SetValue(0.0);
115  }
116 
117  if(!startAllZero) {
118  double origTimeStep = m_timeStep;
119  double minStep = m_timeStep / 10;
120  double maxStep = m_timeStep * 10;
121  // Calculate the steady-state results according to the input.
122  double minError = 1e-7 * m_timeStep;
123  int maxIteration = 100 / m_timeStep;
124 
125  double prevSol = 0.0;
126  double currentSol = 1.0;
127  double error = 1.0;
128  double prevError = 1.0;
129  int numIt = 0;
130  while(error > minError) {
131  prevSol = currentSol;
132  prevError = error;
133  SolveNextStep(input);
134  currentSol = GetLastSolution();
135  numIt++;
136  error = std::abs(prevSol - currentSol);
137  if(std::abs(error - prevError) < 1e-1) {
138  if(m_timeStep < maxStep) {
139  m_timeStep *= 1.5;
140  }
141  } else if(std::abs(error - prevError) > 10) {
142  if(m_timeStep > minStep) {
143  m_timeStep /= 1.5;
144  }
145  }
146  if(numIt >= maxIteration) return false;
147  }
148  m_timeStep = origTimeStep;
149  m_solutions.clear();
150  }
151 
152  return true;
153 }
154 
155 void ControlElementSolver::SolveNextStep(double input)
156 {
157  // Set all elements as not solved
158  auto elementList = m_ctrlContainer->GetControlElementsList();
159  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) {
160  ControlElement* element = *it;
161  element->SetSolved(false);
162  }
163  auto connectionLineList = m_ctrlContainer->GetConnectionLineList();
164  for(auto it = connectionLineList.begin(), itEnd = connectionLineList.end(); it != itEnd; ++it) {
165  ConnectionLine* cLine = *it;
166  cLine->SetSolved(false);
167  }
168 
169  // Get first node and set input value on connected lines
170  ConnectionLine* firstConn = static_cast<ConnectionLine*>(m_inputControl->GetChildList()[0]);
171  m_inputControl->SetSolved();
172  firstConn->SetValue(input);
173  firstConn->SetSolved();
174  FillAllConnectedChildren(firstConn);
175 
176  // Set value to the connected lines in constants
177  auto constantList = m_ctrlContainer->GetConstantList();
178  for(auto it = constantList.begin(), itEnd = constantList.end(); it != itEnd; ++it) {
179  Constant* constant = *it;
180  if(constant->GetChildList().size() == 1) {
181  constant->SetSolved();
182  ConnectionLine* child = static_cast<ConnectionLine*>(constant->GetChildList()[0]);
183  child->SetValue(constant->GetValue());
184  child->SetSolved();
185  FillAllConnectedChildren(child);
186  }
187  }
188 
189  ConnectionLine* currentLine = firstConn;
190  while(currentLine) {
191  currentLine = SolveNextElement(currentLine);
192  }
193 
194  bool haveUnsolvedElement = true;
195  while(haveUnsolvedElement) {
196  haveUnsolvedElement = false;
197  // Get the solved line connected with unsolved element (elements not connected in the main branch).
198  for(auto it = connectionLineList.begin(), itEnd = connectionLineList.end(); it != itEnd; ++it) {
199  ConnectionLine* cLine = *it;
200  if(cLine->IsSolved()) {
201  auto parentList = cLine->GetParentList();
202  for(auto itP = parentList.begin(), itPEnd = parentList.end(); itP != itPEnd; ++itP) {
203  ControlElement* parent = static_cast<ControlElement*>(*itP);
204  if(!parent->IsSolved()) {
205  haveUnsolvedElement = true;
206  // Solve secondary branch.
207  currentLine = cLine;
208  while(currentLine) {
209  currentLine = SolveNextElement(currentLine);
210  }
211  break;
212  }
213  }
214  }
215  if(haveUnsolvedElement) break;
216  }
217  }
218 
219  // Set the control system step output.
220  if(m_outputControl->GetChildList().size() == 1) {
221  ConnectionLine* cLine = static_cast<ConnectionLine*>(m_outputControl->GetChildList()[0]);
222  m_solutions.push_back(cLine->GetValue());
223  } else
224  m_solutions.push_back(0.0);
225 }
226 
227 void ControlElementSolver::FillAllConnectedChildren(ConnectionLine* parent)
228 {
229  auto childList = parent->GetLineChildList();
230  for(auto it = childList.begin(), itEnd = childList.end(); it != itEnd; ++it) {
231  ConnectionLine* child = *it;
232  child->SetValue(parent->GetValue());
233  child->SetSolved();
234  FillAllConnectedChildren(child);
235  }
236 }
237 
238 ConnectionLine* ControlElementSolver::SolveNextElement(ConnectionLine* currentLine)
239 {
240  auto parentList = currentLine->GetParentList();
241  for(auto it = parentList.begin(), itEnd = parentList.end(); it != itEnd; ++it) {
242  ControlElement* element = static_cast<ControlElement*>(*it);
243  // Solve the unsolved parent.
244  if(!element->IsSolved()) {
245  if(!element->Solve(currentLine->GetValue(), m_timeStep)) return NULL;
246  element->SetSolved();
247 
248  // Get the output node (must have one or will result NULL).
249  Node* outNode = NULL;
250  auto nodeList = element->GetNodeList();
251  for(auto itN = nodeList.begin(), itNEnd = nodeList.end(); itN != itNEnd; ++itN) {
252  Node* node = *itN;
253  if(node->GetNodeType() == Node::NODE_OUT) outNode = node;
254  }
255  if(!outNode) return NULL;
256 
257  // Set connection line value associated with the output node.
258  auto childList = element->GetChildList();
259  for(auto itC = childList.begin(), itCEnd = childList.end(); itC != itCEnd; ++itC) {
260  ConnectionLine* cLine = static_cast<ConnectionLine*>(*itC);
261  if(!cLine->IsSolved()) { // Only check unsolved lines
262  // Check if the connection line have the output node on the list
263  auto lineNodeList = cLine->GetNodeList();
264  for(auto itCN = nodeList.begin(), itCNEnd = nodeList.end(); itCN != itCNEnd; ++itCN) {
265  Node* childNode = *itCN;
266  if(childNode == outNode) {
267  // Check if the line connect two elements, otherwise return NULL
268  if(cLine->GetType() != ConnectionLine::ELEMENT_ELEMENT) return NULL;
269 
270  // Set the connection line value and return it.
271  cLine->SetValue(element->GetOutput());
272  cLine->SetSolved();
273  FillAllConnectedChildren(cLine);
274  return cLine;
275  }
276  }
277  }
278  }
279  }
280  }
281  return NULL;
282 }
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
virtual std::vector< Element * > GetChildList() const
Get the Child list.
Definition: Element.h:523
+ + + + + + + + +
+
+ + + + diff --git a/docs/doxygen/html/_control_element_solver_8h_source.html b/docs/doxygen/html/_control_element_solver_8h_source.html index c2296c8..7b726bd 100644 --- a/docs/doxygen/html/_control_element_solver_8h_source.html +++ b/docs/doxygen/html/_control_element_solver_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ControlElementSolver.h Source File +Project/ControlElementSolver.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ControlElementSolver.h
-
1 #ifndef CONTROLELEMENTSOLVER_H
2 #define CONTROLELEMENTSOLVER_H
3 
4 #include <wx/window.h>
5 #include <vector>
6 
8 class ControlEditor;
9 class ConnectionLine;
10 class Constant;
11 class Exponential;
12 class Gain;
13 class IOControl;
14 class Limiter;
15 class Multiplier;
16 class RateLimiter;
17 class Sum;
18 class TransferFunction;
19 
21 {
22  public:
24  ControlElementSolver(ControlEditor* controlEditor,
25  double timeStep = 1e-3,
26  double integrationError = 1e-3,
27  bool startAllZero = true,
28  double input = 0.0);
30  double timeStep = 1e-3,
31  double integrationError = 1e-3,
32  bool startAllZero = true,
33  double input = 0.0,
34  wxWindow* parent = NULL);
35  virtual ~ControlElementSolver() {}
36  virtual bool InitializeValues(double input, bool startAllZero);
37  virtual void SolveNextStep(double input);
38  virtual std::vector<double> GetSolutions() { return m_solutions; }
39  virtual double GetLastSolution() { return m_solutions[m_solutions.size() - 1]; }
40  virtual bool IsOK() const { return m_isOK; }
41  protected:
42  void Initialize(wxWindow* parent, double timeStep, double integrationError, bool startAllZero, double input);
43  void FillAllConnectedChildren(ConnectionLine* parent);
44  ConnectionLine* SolveNextElement(ConnectionLine* currentLine);
45 
46  ControlElementContainer* m_ctrlContainer = NULL;
47  double m_timeStep;
48  double m_integrationError;
49  std::vector<double> m_solutions;
50  bool m_isOK = false;
51 
52  IOControl* m_inputControl = NULL;
53  IOControl* m_outputControl = NULL;
54 };
55 
56 #endif // CONTROLELEMENTSOLVER_H
Definition: Multiplier.h:8
-
Definition: ControlElementSolver.h:20
-
Definition: Sum.h:9
-
Definition: Gain.h:11
-
Definition: Limiter.h:8
-
Definition: IOControl.h:11
-
Definition: Exponential.h:8
-
Definition: RateLimiter.h:8
-
Definition: ControlElementContainer.h:20
-
Definition: ConnectionLine.h:6
-
Definition: TransferFunction.h:11
-
Definition: ControlEditor.h:67
-
Definition: Constant.h:11
+
1 #ifndef CONTROLELEMENTSOLVER_H
2 #define CONTROLELEMENTSOLVER_H
3 
4 #include <wx/window.h>
5 #include <vector>
6 
8 class ControlEditor;
9 class ConnectionLine;
10 class Constant;
11 class Exponential;
12 class Gain;
13 class IOControl;
14 class Limiter;
15 class Multiplier;
16 class RateLimiter;
17 class Sum;
18 class TransferFunction;
19 
21 {
22  public:
24  ControlElementSolver(ControlEditor* controlEditor,
25  double timeStep = 1e-3,
26  double integrationError = 1e-3,
27  bool startAllZero = true,
28  double input = 0.0);
30  double timeStep = 1e-3,
31  double integrationError = 1e-3,
32  bool startAllZero = true,
33  double input = 0.0,
34  wxWindow* parent = NULL);
35  virtual ~ControlElementSolver() {}
36  virtual bool InitializeValues(double input, bool startAllZero);
37  virtual void SolveNextStep(double input);
38  virtual std::vector<double> GetSolutions() { return m_solutions; }
39  virtual double GetLastSolution() { return m_solutions[m_solutions.size() - 1]; }
40  virtual bool IsOK() const { return m_isOK; }
41  protected:
42  void Initialize(wxWindow* parent, double timeStep, double integrationError, bool startAllZero, double input);
43  void FillAllConnectedChildren(ConnectionLine* parent);
44  ConnectionLine* SolveNextElement(ConnectionLine* currentLine);
45 
46  ControlElementContainer* m_ctrlContainer = NULL;
47  double m_timeStep;
48  double m_integrationError;
49  std::vector<double> m_solutions;
50  bool m_isOK = false;
51 
52  IOControl* m_inputControl = NULL;
53  IOControl* m_outputControl = NULL;
54 };
55 
56 #endif // CONTROLELEMENTSOLVER_H
+ +
Definition: Sum.h:9
+
Definition: Gain.h:11
+
Definition: Limiter.h:8
+ + + + + + + +
+
- + diff --git a/docs/doxygen/html/_control_system_test_8cpp_source.html b/docs/doxygen/html/_control_system_test_8cpp_source.html new file mode 100644 index 0000000..8140cad --- /dev/null +++ b/docs/doxygen/html/_control_system_test_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/ControlSystemTest.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlSystemTest.cpp
+
+
+
1 #include "ControlSystemTest.h"
2 #include "ControlEditor.h"
3 
4 ControlSystemTest::ControlSystemTest(ControlEditor* parent,
5  int* inputType,
6  double* startTime,
7  double* slope,
8  double* timeStep,
9  double* simTime)
10  : ControlSystemTestBase(parent)
11 {
12  SetSize(GetBestSize());
13 
14  m_inputType = inputType;
15  m_startTime = startTime;
16  m_slope = slope;
17  m_timeStep = timeStep;
18  m_simTime = simTime;
19 
20  m_choiceInput->SetSelection(*m_inputType);
21  m_textCtrlStartTime->SetValue(wxString::FromDouble(*m_startTime));
22  m_textCtrlSlope->SetValue(wxString::FromDouble(*m_slope));
23  m_textCtrlTimeStep->SetValue(wxString::FromDouble(*m_timeStep));
24  m_textCtrlSimTime->SetValue(wxString::FromDouble(*m_simTime));
25 }
26 
27 ControlSystemTest::~ControlSystemTest() {}
28 void ControlSystemTest::OnRunButtonClick(wxCommandEvent& event)
29 {
30  int inputType;
31  double startTime, slope, timeStep, simTime;
32 
33  inputType = m_choiceInput->GetSelection();
34 
35  if(!m_textCtrlStartTime->GetValue().ToDouble(&startTime)) {
36  wxMessageDialog msgDialog(this, _("Value entered incorrectly in the field \"Start time\"."), _("Error"),
37  wxOK | wxCENTRE | wxICON_ERROR);
38  msgDialog.ShowModal();
39  return;
40  }
41 
42  if(!m_textCtrlSlope->GetValue().ToDouble(&slope)) {
43  wxMessageDialog msgDialog(this, _("Value entered incorrectly in the field \"Slope\"."), _("Error"),
44  wxOK | wxCENTRE | wxICON_ERROR);
45  msgDialog.ShowModal();
46  return;
47  }
48 
49  if(!m_textCtrlTimeStep->GetValue().ToDouble(&timeStep)) {
50  wxMessageDialog msgDialog(this, _("Value entered incorrectly in the field \"Time step\"."), _("Error"),
51  wxOK | wxCENTRE | wxICON_ERROR);
52  msgDialog.ShowModal();
53  return;
54  }
55 
56  if(!m_textCtrlSimTime->GetValue().ToDouble(&simTime)) {
57  wxMessageDialog msgDialog(this, _("Value entered incorrectly in the field \"Simulation time\"."), _("Error"),
58  wxOK | wxCENTRE | wxICON_ERROR);
59  msgDialog.ShowModal();
60  return;
61  }
62 
63  *m_inputType = inputType;
64  *m_startTime = startTime;
65  *m_slope = slope;
66  *m_timeStep = timeStep;
67  *m_simTime = simTime;
68 
69  EndModal(wxID_OK);
70 }
+ +
+
+ + + + diff --git a/docs/doxygen/html/_control_system_test_8h_source.html b/docs/doxygen/html/_control_system_test_8h_source.html index 45868b0..b0fb533 100644 --- a/docs/doxygen/html/_control_system_test_8h_source.html +++ b/docs/doxygen/html/_control_system_test_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ControlSystemTest.h Source File +Project/ControlSystemTest.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ControlSystemTest.h
-
1 #ifndef CONTROLSYSTEMTEST_H
2 #define CONTROLSYSTEMTEST_H
3 
4 #include "ControlEditorBase.h"
5 
6 class ControlEditor;
7 
9 {
10 public:
11  ControlSystemTest(ControlEditor* parent, int* inputType, double* startTime, double* slope, double* timeStep, double* simTime);
12  virtual ~ControlSystemTest();
13 
14 protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnRunButtonClick(wxCommandEvent& event);
17  int* m_inputType = NULL;
18  double* m_startTime = NULL;
19  double* m_slope = NULL;
20  double* m_timeStep = NULL;
21  double* m_simTime = NULL;
22 };
23 #endif // CONTROLSYSTEMTEST_H
Definition: ControlEditorBase.h:95
-
Definition: ControlEditor.h:67
-
Definition: ControlSystemTest.h:8
+
1 #ifndef CONTROLSYSTEMTEST_H
2 #define CONTROLSYSTEMTEST_H
3 
4 #include "ControlEditorBase.h"
5 
6 class ControlEditor;
7 
9 {
10 public:
11  ControlSystemTest(ControlEditor* parent, int* inputType, double* startTime, double* slope, double* timeStep, double* simTime);
12  virtual ~ControlSystemTest();
13 
14 protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnRunButtonClick(wxCommandEvent& event);
17  int* m_inputType = NULL;
18  double* m_startTime = NULL;
19  double* m_slope = NULL;
20  double* m_timeStep = NULL;
21  double* m_simTime = NULL;
22 };
23 #endif // CONTROLSYSTEMTEST_H
+ +
+
- + diff --git a/docs/doxygen/html/_data_report_8cpp_source.html b/docs/doxygen/html/_data_report_8cpp_source.html new file mode 100644 index 0000000..92ba0e9 --- /dev/null +++ b/docs/doxygen/html/_data_report_8cpp_source.html @@ -0,0 +1,114 @@ + + + + + + + +Project/DataReport.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
DataReport.cpp
+
+
+
1 #include "DataReport.h"
2 #include "Workspace.h"
3 #include "ElectricCalculation.h"
4 
5 DataReport::DataReport(wxWindow* parent, Workspace* workspace) : DataReportBase(parent)
6 {
7  m_workspace = workspace;
8 
9  m_headerColour = wxColour(150, 150, 150);
10  m_offlineColour = wxColour(100, 100, 100);
11  m_oddRowColour = wxColour(220, 220, 220);
12  m_evenRowColour = wxColour(255, 255, 255);
13 
14  CreateGrids();
15  SetHeaders();
16  FillValues();
17 
18  SetRowsColours(m_gridPowerFlow);
19  SetRowsColours(m_gridPFBuses);
20  SetRowsColours(m_gridPFBranches);
21  SetRowsColours(m_gridFault, 2);
22  SetRowsColours(m_gridFaultBuses, 2);
23  SetRowsColours(m_gridFaultBranches, 2);
24  SetRowsColours(m_gridFaultGenerators, 2);
25 
26  Layout();
27 }
28 
29 DataReport::~DataReport() {}
30 void DataReport::CreateGrids()
31 {
32  wxFont headerFont = m_gridPowerFlow->GetLabelFont();
33  headerFont.SetWeight(wxFONTWEIGHT_BOLD);
34 
35  ElectricCalculation eCalc;
36  eCalc.GetElementsFromList(m_workspace->GetElementList());
37  auto lineList = eCalc.GetLineList();
38  auto transformerList = eCalc.GetTransformerList();
39  auto busList = eCalc.GetBusList();
40  auto generatorList = eCalc.GetSyncGeneratorList();
41 
42  // Power Flow
43  // Header
44  m_gridPowerFlow->AppendCols(7);
45  m_gridPowerFlow->AppendRows();
46  m_gridPowerFlow->HideColLabels();
47  m_gridPowerFlow->HideRowLabels();
48  for(int i = 0; i < 7; ++i) {
49  m_gridPowerFlow->SetCellBackgroundColour(0, i, m_headerColour);
50  m_gridPowerFlow->SetCellFont(0, i, headerFont);
51  }
52  m_gridPowerFlow->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
53  // Values
54  m_gridPowerFlow->AppendRows((lineList.size() + transformerList.size()) * 2);
55  m_gridPowerFlow->AutoSize();
56 
57  // Power Flow buses
58  // Header
59  m_gridPFBuses->AppendCols(6);
60  m_gridPFBuses->AppendRows();
61  m_gridPFBuses->HideColLabels();
62  m_gridPFBuses->HideRowLabels();
63  for(int i = 0; i < 6; ++i) {
64  m_gridPFBuses->SetCellBackgroundColour(0, i, m_headerColour);
65  m_gridPFBuses->SetCellFont(0, i, headerFont);
66  }
67  m_gridPFBuses->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
68  // Values
69  m_gridPFBuses->AppendRows(busList.size());
70  m_gridPFBuses->AutoSize();
71 
72  // Power flow branches
73  // Header
74  m_gridPFBranches->AppendCols(10);
75  m_gridPFBranches->AppendRows(1);
76  m_gridPFBranches->HideColLabels();
77  m_gridPFBranches->HideRowLabels();
78  for(int i = 0; i < 10; ++i) {
79  m_gridPFBranches->SetCellBackgroundColour(0, i, m_headerColour);
80  m_gridPFBranches->SetCellFont(0, i, headerFont);
81  }
82  m_gridPFBranches->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
83  // Values
84  m_gridPFBranches->AppendRows(lineList.size() + transformerList.size());
85  m_gridPFBranches->AutoSize();
86 
87  // Fault
88  // Header
89  m_gridFault->AppendCols(7);
90  m_gridFault->AppendRows(2);
91  m_gridFault->HideColLabels();
92  m_gridFault->HideRowLabels();
93  for(int i = 0; i < 2; ++i) {
94  for(int j = 0; j < 7; ++j) {
95  m_gridFault->SetCellBackgroundColour(i, j, m_headerColour);
96  m_gridFault->SetCellFont(i, j, headerFont);
97  }
98  }
99  m_gridFault->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
100  m_gridFault->SetCellSize(0, 0, 2, 1);
101  m_gridFault->SetCellSize(0, 1, 1, 2);
102  m_gridFault->SetCellSize(0, 3, 1, 2);
103  m_gridFault->SetCellSize(0, 5, 1, 2);
104  // Values
105  for(auto it = busList.begin(), itEnd = busList.end(); it != itEnd; ++it) {
106  Bus* bus = *it;
107  if(bus->GetElectricalData().hasFault) m_gridFault->AppendRows();
108  }
109  m_gridFault->AutoSize();
110 
111  // Fault buses
112  // Header
113  m_gridFaultBuses->AppendCols(7);
114  m_gridFaultBuses->AppendRows(2);
115  m_gridFaultBuses->HideColLabels();
116  m_gridFaultBuses->HideRowLabels();
117  for(int i = 0; i < 2; ++i) {
118  for(int j = 0; j < 7; ++j) {
119  m_gridFaultBuses->SetCellBackgroundColour(i, j, m_headerColour);
120  m_gridFaultBuses->SetCellFont(i, j, headerFont);
121  }
122  }
123  m_gridFaultBuses->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
124  m_gridFaultBuses->SetCellSize(0, 0, 2, 1);
125  m_gridFaultBuses->SetCellSize(0, 1, 1, 2);
126  m_gridFaultBuses->SetCellSize(0, 3, 1, 2);
127  m_gridFaultBuses->SetCellSize(0, 5, 1, 2);
128  // Values
129  m_gridFaultBuses->AppendRows(busList.size());
130  m_gridFaultBuses->AutoSize();
131 
132  // Fault branches
133  // Header
134  m_gridFaultBranches->AppendCols(11);
135  m_gridFaultBranches->AppendRows(2);
136  m_gridFaultBranches->HideColLabels();
137  m_gridFaultBranches->HideRowLabels();
138  for(int i = 0; i < 2; ++i) {
139  for(int j = 0; j < 11; ++j) {
140  m_gridFaultBranches->SetCellBackgroundColour(i, j, m_headerColour);
141  m_gridFaultBranches->SetCellFont(i, j, headerFont);
142  }
143  }
144  m_gridFaultBranches->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
145  m_gridFaultBranches->SetCellSize(0, 0, 2, 1);
146  m_gridFaultBranches->SetCellSize(0, 1, 2, 1);
147  m_gridFaultBranches->SetCellSize(0, 2, 2, 1);
148  m_gridFaultBranches->SetCellSize(0, 3, 2, 1);
149  m_gridFaultBranches->SetCellSize(0, 10, 2, 1);
150  m_gridFaultBranches->SetCellSize(0, 4, 1, 2);
151  m_gridFaultBranches->SetCellSize(0, 6, 1, 2);
152  m_gridFaultBranches->SetCellSize(0, 8, 1, 2);
153  // Values
154  m_gridFaultBranches->AppendRows((lineList.size() + transformerList.size()) * 2);
155  m_gridFaultBranches->AutoSize();
156 
157  // Fault generators
158  // Header
159  m_gridFaultGenerators->AppendCols(7);
160  m_gridFaultGenerators->AppendRows(2);
161  m_gridFaultGenerators->HideColLabels();
162  m_gridFaultGenerators->HideRowLabels();
163  for(int i = 0; i < 2; ++i) {
164  for(int j = 0; j < 7; ++j) {
165  m_gridFaultGenerators->SetCellBackgroundColour(i, j, m_headerColour);
166  m_gridFaultGenerators->SetCellFont(i, j, headerFont);
167  }
168  }
169  m_gridFaultGenerators->SetDefaultCellAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
170  m_gridFaultGenerators->SetCellSize(0, 0, 2, 1);
171  m_gridFaultGenerators->SetCellSize(0, 1, 1, 2);
172  m_gridFaultGenerators->SetCellSize(0, 3, 1, 2);
173  m_gridFaultGenerators->SetCellSize(0, 5, 1, 2);
174  // Values
175  m_gridFaultGenerators->AppendRows(generatorList.size());
176  m_gridFaultGenerators->AutoSize();
177 }
178 
179 void DataReport::SetHeaders()
180 {
181  // Headers choices fill
182  wxString omega = static_cast<wxString>(L'\u03A9');
183 
184  m_voltageChoices.Add(_("Voltage (p.u.)"));
185  m_voltageChoices.Add(_("Voltage (V)"));
186  m_voltageChoices.Add(_("Voltage (kV)"));
187 
188  m_activePowerChoices.Add(_("Active Power (p.u.)"));
189  m_activePowerChoices.Add(_("Active Power (W)"));
190  m_activePowerChoices.Add(_("Active Power (kW)"));
191  m_activePowerChoices.Add(_("Active Power (MW)"));
192 
193  m_reactivePowerChoices.Add(_("Reactive Power (p.u.)"));
194  m_reactivePowerChoices.Add(_("Reactive Power (VAr)"));
195  m_reactivePowerChoices.Add(_("Reactive Power (kVAr)"));
196  m_reactivePowerChoices.Add(_("Reactive Power (MVAr)"));
197 
198  m_resistanceChoices.Add(_("R (p.u.)"));
199  m_resistanceChoices.Add(_("R (") + omega + wxT(")"));
200 
201  m_indReactanceChoices.Add(_("XL (p.u.)"));
202  m_indReactanceChoices.Add(_("XL (") + omega + wxT(")"));
203 
204  m_capSusceptanceChoices.Add(_("B (p.u.)"));
205  m_capSusceptanceChoices.Add(_("B (S)"));
206 
207  m_currentChoices.Add(_("Current (p.u.)"));
208  m_currentChoices.Add(_("Current (A)"));
209  m_currentChoices.Add(_("Current (kA)"));
210 
211  // Power flow
212  m_gridPowerFlow->SetCellValue(0, 0, _("Type"));
213  m_gridPowerFlow->SetCellValue(0, 1, _("Name"));
214  m_gridPowerFlow->SetCellValue(0, 2, _("From"));
215  m_gridPowerFlow->SetCellValue(0, 3, _("To"));
216  m_gridPowerFlow->SetCellEditor(0, 4, new wxGridCellChoiceEditor(m_activePowerChoices));
217  m_gridPowerFlow->SetCellValue(0, 4, m_activePowerChoices[3]);
218  m_gridPowerFlow->SetCellEditor(0, 5, new wxGridCellChoiceEditor(m_reactivePowerChoices));
219  m_gridPowerFlow->SetCellValue(0, 5, m_reactivePowerChoices[3]);
220  m_gridPowerFlow->SetCellValue(0, 6, _("Online"));
221 
222  // Power flow buses
223  m_gridPFBuses->SetCellValue(0, 0, _("Name"));
224  m_gridPFBuses->SetCellValue(0, 1, _("Type"));
225  m_gridPFBuses->SetCellEditor(0, 2, new wxGridCellChoiceEditor(m_voltageChoices));
226  m_gridPFBuses->SetCellValue(0, 2, m_voltageChoices[0]);
227  m_gridPFBuses->SetCellValue(0, 3, _("Angle"));
228  m_gridPFBuses->SetCellEditor(0, 4, new wxGridCellChoiceEditor(m_activePowerChoices));
229  m_gridPFBuses->SetCellValue(0, 4, m_activePowerChoices[3]);
230  m_gridPFBuses->SetCellEditor(0, 5, new wxGridCellChoiceEditor(m_reactivePowerChoices));
231  m_gridPFBuses->SetCellValue(0, 5, m_reactivePowerChoices[3]);
232 
233  // Power flow branches
234  m_gridPFBranches->SetCellValue(0, 0, _("Type"));
235  m_gridPFBranches->SetCellValue(0, 1, _("Name"));
236  m_gridPFBranches->SetCellValue(0, 2, _("From"));
237  m_gridPFBranches->SetCellValue(0, 3, _("To"));
238  m_gridPFBranches->SetCellEditor(0, 4, new wxGridCellChoiceEditor(m_resistanceChoices));
239  m_gridPFBranches->SetCellValue(0, 4, m_resistanceChoices[0]);
240  m_gridPFBranches->SetCellEditor(0, 5, new wxGridCellChoiceEditor(m_indReactanceChoices));
241  m_gridPFBranches->SetCellValue(0, 5, m_indReactanceChoices[0]);
242  m_gridPFBranches->SetCellEditor(0, 6, new wxGridCellChoiceEditor(m_capSusceptanceChoices));
243  m_gridPFBranches->SetCellValue(0, 6, m_capSusceptanceChoices[0]);
244  m_gridPFBranches->SetCellValue(0, 7, _("TAP"));
245  m_gridPFBranches->SetCellValue(0, 8, _("Phase Shift"));
246  m_gridPFBranches->SetCellValue(0, 9, _("Online"));
247 
248  // Fault
249  m_gridFault->SetCellValue(0, 0, _("Fault bus name"));
250  m_gridFault->SetCellValue(0, 1, _("Phase A"));
251  m_gridFault->SetCellValue(0, 3, _("Phase B"));
252  m_gridFault->SetCellValue(0, 5, _("Phase C"));
253  m_gridFault->SetCellEditor(1, 1, new wxGridCellChoiceEditor(m_currentChoices));
254  m_gridFault->SetCellValue(1, 1, m_currentChoices[1]);
255  m_gridFault->SetCellValue(1, 2, _("Angle"));
256  m_gridFault->SetCellEditor(1, 3, new wxGridCellChoiceEditor(m_currentChoices));
257  m_gridFault->SetCellValue(1, 3, m_currentChoices[1]);
258  m_gridFault->SetCellValue(1, 4, _("Angle"));
259  m_gridFault->SetCellEditor(1, 5, new wxGridCellChoiceEditor(m_currentChoices));
260  m_gridFault->SetCellValue(1, 5, m_currentChoices[1]);
261  m_gridFault->SetCellValue(1, 6, _("Angle"));
262 
263  // Fault buses
264  m_gridFaultBuses->SetCellValue(0, 0, _("Name"));
265  m_gridFaultBuses->SetCellValue(0, 1, _("Phase A"));
266  m_gridFaultBuses->SetCellValue(0, 3, _("Phase B"));
267  m_gridFaultBuses->SetCellValue(0, 5, _("Phase C"));
268  m_gridFaultBuses->SetCellEditor(1, 1, new wxGridCellChoiceEditor(m_voltageChoices));
269  m_gridFaultBuses->SetCellValue(1, 1, m_voltageChoices[0]);
270  m_gridFaultBuses->SetCellValue(1, 2, _("Angle"));
271  m_gridFaultBuses->SetCellEditor(1, 3, new wxGridCellChoiceEditor(m_voltageChoices));
272  m_gridFaultBuses->SetCellValue(1, 3, m_voltageChoices[0]);
273  m_gridFaultBuses->SetCellValue(1, 4, _("Angle"));
274  m_gridFaultBuses->SetCellEditor(1, 5, new wxGridCellChoiceEditor(m_voltageChoices));
275  m_gridFaultBuses->SetCellValue(1, 5, m_voltageChoices[0]);
276  m_gridFaultBuses->SetCellValue(1, 6, _("Angle"));
277 
278  // Fault branches
279  m_gridFaultBranches->SetCellValue(0, 0, _("Type"));
280  m_gridFaultBranches->SetCellValue(0, 1, _("Name"));
281  m_gridFaultBranches->SetCellValue(0, 2, _("From"));
282  m_gridFaultBranches->SetCellValue(0, 3, _("To"));
283  m_gridFaultBranches->SetCellValue(0, 4, _("Phase A"));
284  m_gridFaultBranches->SetCellValue(0, 6, _("Phase B"));
285  m_gridFaultBranches->SetCellValue(0, 8, _("Phase C"));
286  m_gridFaultBranches->SetCellValue(0, 10, _("Online"));
287  m_gridFaultBranches->SetCellEditor(1, 4, new wxGridCellChoiceEditor(m_currentChoices));
288  m_gridFaultBranches->SetCellValue(1, 4, m_currentChoices[1]);
289  m_gridFaultBranches->SetCellValue(1, 5, _("Angle"));
290  m_gridFaultBranches->SetCellEditor(1, 6, new wxGridCellChoiceEditor(m_currentChoices));
291  m_gridFaultBranches->SetCellValue(1, 6, m_currentChoices[1]);
292  m_gridFaultBranches->SetCellValue(1, 7, _("Angle"));
293  m_gridFaultBranches->SetCellEditor(1, 8, new wxGridCellChoiceEditor(m_currentChoices));
294  m_gridFaultBranches->SetCellValue(1, 8, m_currentChoices[1]);
295  m_gridFaultBranches->SetCellValue(1, 9, _("Angle"));
296 
297  // Fault generators
298  m_gridFaultGenerators->SetCellValue(0, 0, _("Name"));
299  m_gridFaultGenerators->SetCellValue(0, 1, _("Phase A"));
300  m_gridFaultGenerators->SetCellValue(0, 3, _("Phase B"));
301  m_gridFaultGenerators->SetCellValue(0, 5, _("Phase C"));
302  m_gridFaultGenerators->SetCellEditor(1, 1, new wxGridCellChoiceEditor(m_currentChoices));
303  m_gridFaultGenerators->SetCellValue(1, 1, m_currentChoices[1]);
304  m_gridFaultGenerators->SetCellValue(1, 2, _("Angle"));
305  m_gridFaultGenerators->SetCellEditor(1, 3, new wxGridCellChoiceEditor(m_currentChoices));
306  m_gridFaultGenerators->SetCellValue(1, 3, m_currentChoices[1]);
307  m_gridFaultGenerators->SetCellValue(1, 4, _("Angle"));
308  m_gridFaultGenerators->SetCellEditor(1, 5, new wxGridCellChoiceEditor(m_currentChoices));
309  m_gridFaultGenerators->SetCellValue(1, 5, m_currentChoices[1]);
310  m_gridFaultGenerators->SetCellValue(1, 6, _("Angle"));
311 }
312 
313 void DataReport::FillValues(GridSelection gridToFill)
314 {
315  m_changingValues = true;
316  ElectricCalculation eCalc;
317  eCalc.GetElementsFromList(m_workspace->GetElementList());
318 
319  double basePower = m_workspace->GetProperties()->GetSimulationPropertiesData().basePower;
320  switch(m_workspace->GetProperties()->GetSimulationPropertiesData().basePowerUnit) {
321  case UNIT_kVA: {
322  basePower *= 1e3;
323  } break;
324  case UNIT_MVA: {
325  basePower *= 1e6;
326  } break;
327  default:
328  break;
329  }
330 
331  int rowNumber = 1;
332  auto lineList = eCalc.GetLineList();
333  auto transformerList = eCalc.GetTransformerList();
334  auto busList = eCalc.GetBusList();
335  auto generatorList = eCalc.GetSyncGeneratorList();
336 
337  // Power Flow
338  if(gridToFill == GRID_ALL || gridToFill == GRID_PF) {
339  double kActivePower = 1.0;
340  if(m_gridPowerFlow->GetCellValue(0, 4) == m_activePowerChoices[1])
341  kActivePower = basePower;
342  else if(m_gridPowerFlow->GetCellValue(0, 4) == m_activePowerChoices[2])
343  kActivePower = basePower / 1e3;
344  else if(m_gridPowerFlow->GetCellValue(0, 4) == m_activePowerChoices[3])
345  kActivePower = basePower / 1e6;
346 
347  double kReactivePower = 1.0;
348  if(m_gridPowerFlow->GetCellValue(0, 5) == m_reactivePowerChoices[1])
349  kReactivePower = basePower;
350  else if(m_gridPowerFlow->GetCellValue(0, 5) == m_reactivePowerChoices[2])
351  kReactivePower = basePower / 1e3;
352  else if(m_gridPowerFlow->GetCellValue(0, 5) == m_reactivePowerChoices[3])
353  kReactivePower = basePower / 1e6;
354 
355  for(auto it = lineList.begin(), itEnd = lineList.end(); it != itEnd; ++it) {
356  Line* line = *it;
357 
358  wxString busName1 = "-";
359  if(line->GetParentList()[0])
360  busName1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().name;
361  wxString busName2 = "-";
362  if(line->GetParentList()[1])
363  busName2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().name;
364 
365  wxString isOnline = _("Yes");
366  wxColour textColour = m_gridPowerFlow->GetDefaultCellTextColour();
367  if(!line->IsOnline()) {
368  isOnline = _("No");
369  textColour = m_offlineColour;
370  }
371  for(int i = 0; i < 2; ++i) {
372  for(int j = 0; j < 7; ++j) {
373  m_gridPowerFlow->SetCellTextColour(rowNumber + i, j, textColour);
374  }
375  }
376 
377  m_gridPowerFlow->SetCellValue(rowNumber, 9, isOnline);
378  auto data = line->GetPUElectricalData(basePower);
379 
380  m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Line"));
381  m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
382  m_gridPowerFlow->SetCellValue(rowNumber, 2, busName1);
383  m_gridPowerFlow->SetCellValue(rowNumber, 3, busName2);
384  m_gridPowerFlow->SetCellValue(rowNumber, 4,
385  line->StringFromDouble(std::real(data.powerFlow[0]) * kActivePower));
386  m_gridPowerFlow->SetCellValue(rowNumber, 5,
387  line->StringFromDouble(std::imag(data.powerFlow[0]) * kReactivePower));
388  m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
389  rowNumber++;
390 
391  m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Line"));
392  m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
393  m_gridPowerFlow->SetCellValue(rowNumber, 2, busName2);
394  m_gridPowerFlow->SetCellValue(rowNumber, 3, busName1);
395  m_gridPowerFlow->SetCellValue(rowNumber, 4,
396  line->StringFromDouble(std::real(data.powerFlow[1]) * kActivePower));
397  m_gridPowerFlow->SetCellValue(rowNumber, 5,
398  line->StringFromDouble(std::imag(data.powerFlow[1]) * kReactivePower));
399  m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
400  rowNumber++;
401  }
402 
403  for(auto it = transformerList.begin(), itEnd = transformerList.end(); it != itEnd; ++it) {
404  Transformer* transformer = *it;
405  auto data = transformer->GetPUElectricalData(basePower);
406 
407  wxString busName1 = "-";
408  if(transformer->GetParentList()[0])
409  busName1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().name;
410  wxString busName2 = "-";
411  if(transformer->GetParentList()[1])
412  busName2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().name;
413 
414  wxString isOnline = _("Yes");
415  wxColour textColour = m_gridPowerFlow->GetDefaultCellTextColour();
416  if(!transformer->IsOnline()) {
417  isOnline = _("No");
418  textColour = m_offlineColour;
419  }
420  for(int i = 0; i < 2; ++i) {
421  for(int j = 0; j < 7; ++j) {
422  m_gridPowerFlow->SetCellTextColour(rowNumber + i, j, textColour);
423  }
424  }
425 
426  m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Transformer"));
427  m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
428  m_gridPowerFlow->SetCellValue(rowNumber, 2, busName1);
429  m_gridPowerFlow->SetCellValue(rowNumber, 3, busName2);
430  m_gridPowerFlow->SetCellValue(rowNumber, 4,
431  transformer->StringFromDouble(std::real(data.powerFlow[0]) * kActivePower));
432  m_gridPowerFlow->SetCellValue(rowNumber, 5,
433  transformer->StringFromDouble(std::imag(data.powerFlow[0]) * kReactivePower));
434  m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
435  rowNumber++;
436 
437  m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Transformer"));
438  m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
439  m_gridPowerFlow->SetCellValue(rowNumber, 2, busName2);
440  m_gridPowerFlow->SetCellValue(rowNumber, 3, busName1);
441  m_gridPowerFlow->SetCellValue(rowNumber, 4,
442  transformer->StringFromDouble(std::real(data.powerFlow[1]) * kActivePower));
443  m_gridPowerFlow->SetCellValue(rowNumber, 5,
444  transformer->StringFromDouble(std::imag(data.powerFlow[1]) * kReactivePower));
445  m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
446  rowNumber++;
447  }
448  m_gridPowerFlow->AutoSize();
449  }
450 
451  // Power Flow buses
452  if(gridToFill == GRID_ALL || gridToFill == GRID_PFBUSES) {
453  double kActivePower = 1.0;
454  if(m_gridPFBuses->GetCellValue(0, 4) == m_activePowerChoices[1])
455  kActivePower = basePower;
456  else if(m_gridPFBuses->GetCellValue(0, 4) == m_activePowerChoices[2])
457  kActivePower = basePower / 1e3;
458  else if(m_gridPFBuses->GetCellValue(0, 4) == m_activePowerChoices[3])
459  kActivePower = basePower / 1e6;
460 
461  double kReactivePower = 1.0;
462  if(m_gridPFBuses->GetCellValue(0, 5) == m_reactivePowerChoices[1])
463  kReactivePower = basePower;
464  else if(m_gridPFBuses->GetCellValue(0, 5) == m_reactivePowerChoices[2])
465  kReactivePower = basePower / 1e3;
466  else if(m_gridPFBuses->GetCellValue(0, 5) == m_reactivePowerChoices[3])
467  kReactivePower = basePower / 1e6;
468 
469  rowNumber = 1;
470  for(auto it = busList.begin(), itEnd = busList.end(); it != itEnd; ++it) {
471  Bus* bus = *it;
472  auto data = bus->GetElectricalData();
473 
474  double vb = std::abs(data.nominalVoltage);
475  if(data.nominalVoltageUnit == UNIT_kV) vb *= 1e3;
476  double kVoltage = 1.0;
477  if(m_gridPFBuses->GetCellValue(0, 2) == m_voltageChoices[1])
478  kVoltage = vb;
479  else if(m_gridPFBuses->GetCellValue(0, 2) == m_voltageChoices[2])
480  kVoltage = vb / 1e3;
481 
482  m_gridPFBuses->SetCellValue(rowNumber, 0, data.name);
483  wxString busTypeString = "";
484  switch(data.busType) {
485  case BUS_SLACK: {
486  busTypeString = _("Slack");
487  } break;
488  case BUS_PV: {
489  busTypeString = _("PV");
490  } break;
491  case BUS_PQ: {
492  busTypeString = _("PQ");
493  } break;
494  }
495  m_gridPFBuses->SetCellValue(rowNumber, 1, busTypeString);
496  m_gridPFBuses->SetCellValue(rowNumber, 2, bus->StringFromDouble(std::abs(data.voltage) * kVoltage));
497  m_gridPFBuses->SetCellValue(rowNumber, 3, bus->StringFromDouble(wxRadToDeg(std::arg(data.voltage))));
498  m_gridPFBuses->SetCellValue(rowNumber, 4, bus->StringFromDouble(std::real(data.power) * kActivePower));
499  m_gridPFBuses->SetCellValue(rowNumber, 5, bus->StringFromDouble(std::imag(data.power) * kReactivePower));
500  rowNumber++;
501  }
502  m_gridPFBuses->AutoSize();
503  }
504 
505  // Power flow branches
506  if(gridToFill == GRID_ALL || gridToFill == GRID_PFBRANCHES) {
507  rowNumber = 1;
508  for(auto it = lineList.begin(), itEnd = lineList.end(); it != itEnd; ++it) {
509  Line* line = *it;
510  auto data = line->GetPUElectricalData(basePower);
511 
512  double vb = data.nominalVoltage;
513  if(data.nominalVoltageUnit == UNIT_kV) vb *= 1e3;
514  double zb = (vb * vb) / basePower;
515 
516  wxString busName1 = "-";
517  if(line->GetParentList()[0])
518  busName1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().name;
519  wxString busName2 = "-";
520  if(line->GetParentList()[1])
521  busName2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().name;
522  wxString isOnline = _("Yes");
523  wxColour textColour = m_gridPFBranches->GetDefaultCellTextColour();
524  if(!line->IsOnline()) {
525  isOnline = _("No");
526  textColour = m_offlineColour;
527  }
528  for(int j = 0; j < 10; ++j) {
529  m_gridPFBranches->SetCellTextColour(rowNumber, j, textColour);
530  }
531 
532  m_gridPFBranches->SetCellValue(rowNumber, 0, _("Line"));
533  m_gridPFBranches->SetCellValue(rowNumber, 1, data.name);
534 
535  m_gridPFBranches->SetCellValue(rowNumber, 2, busName1);
536  m_gridPFBranches->SetCellValue(rowNumber, 3, busName2);
537 
538  double k = 1.0;
539  if(m_gridPFBranches->GetCellValue(0, 4) == m_resistanceChoices[1]) k = zb;
540  m_gridPFBranches->SetCellValue(rowNumber, 4, line->StringFromDouble(data.resistance * k));
541  k = 1.0;
542  if(m_gridPFBranches->GetCellValue(0, 5) == m_indReactanceChoices[1]) k = zb;
543  m_gridPFBranches->SetCellValue(rowNumber, 5, line->StringFromDouble(data.indReactance * k));
544  k = 1.0;
545  if(m_gridPFBranches->GetCellValue(0, 6) == m_capSusceptanceChoices[1]) k = zb;
546  m_gridPFBranches->SetCellValue(rowNumber, 6, line->StringFromDouble(data.capSusceptance / k));
547  m_gridPFBranches->SetCellValue(rowNumber, 7, "-");
548  m_gridPFBranches->SetCellValue(rowNumber, 8, "-");
549  m_gridPFBranches->SetCellValue(rowNumber, 9, isOnline);
550  rowNumber++;
551  }
552  for(auto it = transformerList.begin(), itEnd = transformerList.end(); it != itEnd; ++it) {
553  Transformer* transformer = *it;
554  auto data = transformer->GetPUElectricalData(basePower);
555 
556  double vb = 0.0;
557  if(data.baseVoltage == 0) {
558  vb = data.primaryNominalVoltage;
559  if(data.primaryNominalVoltageUnit == UNIT_kV) vb *= 1e3;
560  } else {
561  vb = data.secondaryNominalVoltage;
562  if(data.secondaryNominalVoltageUnit == UNIT_kV) vb *= 1e3;
563  }
564  double zb = (vb * vb) / basePower;
565 
566  wxString busName1 = "-";
567  if(transformer->GetParentList()[0])
568  busName1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().name;
569  wxString busName2 = "-";
570  if(transformer->GetParentList()[1])
571  busName2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().name;
572 
573  wxString isOnline = _("Yes");
574  wxColour textColour = m_gridPFBranches->GetDefaultCellTextColour();
575  if(!transformer->IsOnline()) {
576  isOnline = _("No");
577  textColour = m_offlineColour;
578  }
579  for(int j = 0; j < 10; ++j) {
580  m_gridPFBranches->SetCellTextColour(rowNumber, j, textColour);
581  }
582 
583  m_gridPFBranches->SetCellValue(rowNumber, 0, _("Transformer"));
584  m_gridPFBranches->SetCellValue(rowNumber, 1, data.name);
585  m_gridPFBranches->SetCellValue(rowNumber, 2, busName1);
586  m_gridPFBranches->SetCellValue(rowNumber, 3, busName2);
587 
588  double k = 1.0;
589  if(m_gridPFBranches->GetCellValue(0, 4) == m_resistanceChoices[1]) k = zb;
590  m_gridPFBranches->SetCellValue(rowNumber, 4, transformer->StringFromDouble(data.resistance * k));
591  k = 1.0;
592  if(m_gridPFBranches->GetCellValue(0, 5) == m_indReactanceChoices[1]) k = zb;
593  m_gridPFBranches->SetCellValue(rowNumber, 5, transformer->StringFromDouble(data.indReactance * k));
594  m_gridPFBranches->SetCellValue(rowNumber, 6, "-");
595  m_gridPFBranches->SetCellValue(rowNumber, 7, transformer->StringFromDouble(data.turnsRatio));
596  m_gridPFBranches->SetCellValue(rowNumber, 8, transformer->StringFromDouble(data.phaseShift));
597  m_gridPFBranches->SetCellValue(rowNumber, 9, isOnline);
598  rowNumber++;
599  }
600  m_gridPFBranches->AutoSize();
601  }
602 
603  // Fault
604  if(gridToFill == GRID_ALL || gridToFill == GRID_FAULT) {
605  rowNumber = 2;
606  for(auto it = busList.begin(), itEnd = busList.end(); it != itEnd; ++it) {
607  Bus* bus = *it;
608  auto data = bus->GetElectricalData();
609  if(data.hasFault) {
610  double vb = bus->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
611  double ib = basePower / (std::sqrt(3.0) * vb);
612 
613  m_gridFault->SetCellValue(rowNumber, 0, data.name);
614 
615  double kCurrent = 1.0;
616  if(m_gridFault->GetCellValue(1, 1) == m_currentChoices[1]) {
617  kCurrent = ib;
618  } else if(m_gridFault->GetCellValue(1, 1) == m_currentChoices[2]) {
619  kCurrent = ib / 1e3;
620  }
621  m_gridFault->SetCellValue(rowNumber, 1,
622  bus->StringFromDouble(std::abs(data.faultCurrent[0]) * kCurrent));
623 
624  m_gridFault->SetCellValue(rowNumber, 2,
625  bus->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0]))));
626 
627  kCurrent = 1.0;
628  if(m_gridFault->GetCellValue(1, 3) == m_currentChoices[1]) {
629  kCurrent = ib;
630  } else if(m_gridFault->GetCellValue(1, 3) == m_currentChoices[2]) {
631  kCurrent = ib / 1e3;
632  }
633  m_gridFault->SetCellValue(rowNumber, 3,
634  bus->StringFromDouble(std::abs(data.faultCurrent[1]) * kCurrent));
635 
636  m_gridFault->SetCellValue(rowNumber, 4,
637  bus->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1]))));
638 
639  kCurrent = 1.0;
640  if(m_gridFault->GetCellValue(1, 5) == m_currentChoices[1]) {
641  kCurrent = ib;
642  } else if(m_gridFault->GetCellValue(1, 5) == m_currentChoices[2]) {
643  kCurrent = ib / 1e3;
644  }
645  m_gridFault->SetCellValue(rowNumber, 5,
646  bus->StringFromDouble(std::abs(data.faultCurrent[2]) * kCurrent));
647 
648  m_gridFault->SetCellValue(rowNumber, 6,
649  bus->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[2]))));
650 
651  rowNumber++;
652  }
653  }
654  m_gridFault->AutoSize();
655  }
656 
657  // Fault buses
658  if(gridToFill == GRID_ALL || gridToFill == GRID_FAULTBUSES) {
659  rowNumber = 2;
660  for(auto it = busList.begin(), itEnd = busList.end(); it != itEnd; ++it) {
661  Bus* bus = *it;
662  auto data = bus->GetElectricalData();
663  double vb = bus->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
664 
665  m_gridFaultBuses->SetCellValue(rowNumber, 0, data.name);
666  double kVoltage = 1.0;
667  if(m_gridFaultBuses->GetCellValue(1, 1) == m_voltageChoices[1]) {
668  kVoltage = vb;
669  } else if(m_gridFaultBuses->GetCellValue(1, 1) == m_voltageChoices[2]) {
670  kVoltage = vb / 1e3;
671  }
672  m_gridFaultBuses->SetCellValue(rowNumber, 1,
673  bus->StringFromDouble(std::abs(data.faultVoltage[0]) * kVoltage));
674  m_gridFaultBuses->SetCellValue(rowNumber, 2,
675  bus->StringFromDouble(wxRadToDeg(std::arg(data.faultVoltage[0]))));
676 
677  kVoltage = 1.0;
678  if(m_gridFaultBuses->GetCellValue(1, 3) == m_voltageChoices[1]) {
679  kVoltage = vb;
680  } else if(m_gridFaultBuses->GetCellValue(1, 3) == m_voltageChoices[2]) {
681  kVoltage = vb / 1e3;
682  }
683  m_gridFaultBuses->SetCellValue(rowNumber, 3,
684  bus->StringFromDouble(std::abs(data.faultVoltage[1]) * kVoltage));
685  m_gridFaultBuses->SetCellValue(rowNumber, 4,
686  bus->StringFromDouble(wxRadToDeg(std::arg(data.faultVoltage[1]))));
687 
688  kVoltage = 1.0;
689  if(m_gridFaultBuses->GetCellValue(1, 5) == m_voltageChoices[1]) {
690  kVoltage = vb;
691  } else if(m_gridFaultBuses->GetCellValue(1, 5) == m_voltageChoices[2]) {
692  kVoltage = vb / 1e3;
693  }
694  m_gridFaultBuses->SetCellValue(rowNumber, 5,
695  bus->StringFromDouble(std::abs(data.faultVoltage[2]) * kVoltage));
696  m_gridFaultBuses->SetCellValue(rowNumber, 6,
697  bus->StringFromDouble(wxRadToDeg(std::arg(data.faultVoltage[2]))));
698 
699  rowNumber++;
700  }
701  m_gridFaultBuses->AutoSize();
702  }
703 
704  // Fault branches
705  if(gridToFill == GRID_ALL || gridToFill == GRID_FAULTBRANCHES) {
706  rowNumber = 2;
707  for(auto it = lineList.begin(), itEnd = lineList.end(); it != itEnd; ++it) {
708  Line* line = *it;
709  auto data = line->GetPUElectricalData(basePower);
710 
711  double vb = line->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
712  double ib = basePower / (std::sqrt(3.0) * vb);
713 
714  wxString busName1 = "-";
715  if(line->GetParentList()[0])
716  busName1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().name;
717  wxString busName2 = "-";
718  if(line->GetParentList()[1])
719  busName2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().name;
720 
721  wxString isOnline = _("Yes");
722  wxColour textColour = m_gridFaultBranches->GetDefaultCellTextColour();
723  if(!line->IsOnline()) {
724  isOnline = _("No");
725  textColour = m_offlineColour;
726  }
727  for(int i = 0; i < 2; ++i) {
728  for(int j = 0; j < 11; ++j) {
729  m_gridFaultBranches->SetCellTextColour(rowNumber + i, j, textColour);
730  }
731  }
732 
733  m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Line"));
734  m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
735  m_gridFaultBranches->SetCellValue(rowNumber, 2, busName1);
736  m_gridFaultBranches->SetCellValue(rowNumber, 3, busName2);
737 
738  double kCurrent = 1.0;
739  if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
740  kCurrent = ib;
741  } else if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
742  kCurrent = ib / 1e3;
743  }
744  m_gridFaultBranches->SetCellValue(rowNumber, 4,
745  line->StringFromDouble(std::abs(data.faultCurrent[0][0]) * kCurrent));
746  m_gridFaultBranches->SetCellValue(rowNumber, 5,
747  line->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][0]))));
748  kCurrent = 1.0;
749  if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
750  kCurrent = ib;
751  } else if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
752  kCurrent = ib / 1e3;
753  }
754  m_gridFaultBranches->SetCellValue(rowNumber, 6,
755  line->StringFromDouble(std::abs(data.faultCurrent[0][1]) * kCurrent));
756  m_gridFaultBranches->SetCellValue(rowNumber, 7,
757  line->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][1]))));
758  kCurrent = 1.0;
759  if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
760  kCurrent = ib;
761  } else if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
762  kCurrent = ib / 1e3;
763  }
764  m_gridFaultBranches->SetCellValue(rowNumber, 8,
765  line->StringFromDouble(std::abs(data.faultCurrent[0][2]) * kCurrent));
766  m_gridFaultBranches->SetCellValue(rowNumber, 9,
767  line->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][2]))));
768  m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
769  rowNumber++;
770 
771  m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Line"));
772  m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
773  m_gridFaultBranches->SetCellValue(rowNumber, 2, busName2);
774  m_gridFaultBranches->SetCellValue(rowNumber, 3, busName1);
775  kCurrent = 1.0;
776  if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
777  kCurrent = ib;
778  } else if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
779  kCurrent = ib / 1e3;
780  }
781  m_gridFaultBranches->SetCellValue(rowNumber, 4,
782  line->StringFromDouble(std::abs(data.faultCurrent[1][0]) * kCurrent));
783  m_gridFaultBranches->SetCellValue(rowNumber, 5,
784  line->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][0]))));
785  kCurrent = 1.0;
786  if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
787  kCurrent = ib;
788  } else if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
789  kCurrent = ib / 1e3;
790  }
791  m_gridFaultBranches->SetCellValue(rowNumber, 6,
792  line->StringFromDouble(std::abs(data.faultCurrent[1][1]) * kCurrent));
793  m_gridFaultBranches->SetCellValue(rowNumber, 7,
794  line->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][1]))));
795  kCurrent = 1.0;
796  if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
797  kCurrent = ib;
798  } else if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
799  kCurrent = ib / 1e3;
800  }
801  m_gridFaultBranches->SetCellValue(rowNumber, 8,
802  line->StringFromDouble(std::abs(data.faultCurrent[1][2]) * kCurrent));
803  m_gridFaultBranches->SetCellValue(rowNumber, 9,
804  line->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][2]))));
805  m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
806  rowNumber++;
807  }
808 
809  for(auto it = transformerList.begin(), itEnd = transformerList.end(); it != itEnd; ++it) {
810  Transformer* transformer = *it;
811  auto data = transformer->GetPUElectricalData(basePower);
812 
813  double vb = transformer->GetValueFromUnit(data.primaryNominalVoltage, data.primaryNominalVoltageUnit);
814  double ibp = basePower / (std::sqrt(3.0) * vb);
815  vb = transformer->GetValueFromUnit(data.secondaryNominalVoltage, data.secondaryNominalVoltageUnit);
816  double ibs = basePower / (std::sqrt(3.0) * vb);
817 
818  wxString busName1 = "-";
819  if(transformer->GetParentList()[0])
820  busName1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().name;
821  wxString busName2 = "-";
822  if(transformer->GetParentList()[1])
823  busName2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().name;
824 
825  wxString isOnline = _("Yes");
826  wxColour textColour = m_gridFaultBranches->GetDefaultCellTextColour();
827  if(!transformer->IsOnline()) {
828  isOnline = _("No");
829  textColour = m_offlineColour;
830  }
831  for(int i = 0; i < 2; ++i) {
832  for(int j = 0; j < 11; ++j) {
833  m_gridFaultBranches->SetCellTextColour(rowNumber + i, j, textColour);
834  }
835  }
836 
837  m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Transformer"));
838  m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
839  m_gridFaultBranches->SetCellValue(rowNumber, 2, busName1);
840  m_gridFaultBranches->SetCellValue(rowNumber, 3, busName2);
841 
842  double kCurrent = 1.0;
843  if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
844  kCurrent = ibp;
845  } else if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
846  kCurrent = ibp / 1e3;
847  }
848  m_gridFaultBranches->SetCellValue(
849  rowNumber, 4, transformer->StringFromDouble(std::abs(data.faultCurrent[0][0]) * kCurrent));
850  m_gridFaultBranches->SetCellValue(
851  rowNumber, 5, transformer->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][0]))));
852  kCurrent = 1.0;
853  if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
854  kCurrent = ibp;
855  } else if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
856  kCurrent = ibp / 1e3;
857  }
858  m_gridFaultBranches->SetCellValue(
859  rowNumber, 6, transformer->StringFromDouble(std::abs(data.faultCurrent[0][1]) * kCurrent));
860  m_gridFaultBranches->SetCellValue(
861  rowNumber, 7, transformer->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][1]))));
862  kCurrent = 1.0;
863  if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
864  kCurrent = ibp;
865  } else if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
866  kCurrent = ibp / 1e3;
867  }
868  m_gridFaultBranches->SetCellValue(
869  rowNumber, 8, transformer->StringFromDouble(std::abs(data.faultCurrent[0][2]) * kCurrent));
870  m_gridFaultBranches->SetCellValue(
871  rowNumber, 9, transformer->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][2]))));
872  m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
873  rowNumber++;
874 
875  m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Transformer"));
876  m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
877  m_gridFaultBranches->SetCellValue(rowNumber, 2, busName2);
878  m_gridFaultBranches->SetCellValue(rowNumber, 3, busName1);
879  kCurrent = 1.0;
880  if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
881  kCurrent = ibs;
882  } else if(m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
883  kCurrent = ibs / 1e3;
884  }
885  m_gridFaultBranches->SetCellValue(
886  rowNumber, 4, transformer->StringFromDouble(std::abs(data.faultCurrent[1][0]) * kCurrent));
887  m_gridFaultBranches->SetCellValue(
888  rowNumber, 5, transformer->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][0]))));
889  kCurrent = 1.0;
890  if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
891  kCurrent = ibs;
892  } else if(m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
893  kCurrent = ibs / 1e3;
894  }
895  m_gridFaultBranches->SetCellValue(
896  rowNumber, 6, transformer->StringFromDouble(std::abs(data.faultCurrent[1][1]) * kCurrent));
897  m_gridFaultBranches->SetCellValue(
898  rowNumber, 7, transformer->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][1]))));
899  kCurrent = 1.0;
900  if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
901  kCurrent = ibs;
902  } else if(m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
903  kCurrent = ibs / 1e3;
904  }
905  m_gridFaultBranches->SetCellValue(
906  rowNumber, 8, transformer->StringFromDouble(std::abs(data.faultCurrent[1][2]) * kCurrent));
907  m_gridFaultBranches->SetCellValue(
908  rowNumber, 9, transformer->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][2]))));
909  m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
910  rowNumber++;
911  }
912 
913  m_gridFaultBranches->AutoSize();
914  }
915 
916  // Fault generators
917  if(gridToFill == GRID_ALL || gridToFill == GRID_FAULTGENERATORS) {
918  rowNumber = 2;
919  for(auto it = generatorList.begin(), itEnd = generatorList.end(); it != itEnd; ++it) {
920  SyncGenerator* generator = *it;
921  auto data = generator->GetPUElectricalData(basePower);
922  double vb = generator->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
923  double ib = basePower / (std::sqrt(3.0) * vb);
924 
925  m_gridFaultGenerators->SetCellValue(rowNumber, 0, data.name);
926 
927  double kCurrent = 1.0;
928  if(m_gridFaultGenerators->GetCellValue(1, 1) == m_currentChoices[1])
929  kCurrent = ib;
930  else if(m_gridFaultGenerators->GetCellValue(1, 1) == m_currentChoices[2])
931  kCurrent = ib / 1e3;
932  m_gridFaultGenerators->SetCellValue(rowNumber, 1,
933  generator->StringFromDouble(std::abs(data.faultCurrent[0]) * kCurrent));
934  m_gridFaultGenerators->SetCellValue(
935  rowNumber, 2, generator->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0]))));
936 
937  kCurrent = 1.0;
938  if(m_gridFaultGenerators->GetCellValue(1, 3) == m_currentChoices[1])
939  kCurrent = ib;
940  else if(m_gridFaultGenerators->GetCellValue(1, 3) == m_currentChoices[2])
941  kCurrent = ib / 1e3;
942  m_gridFaultGenerators->SetCellValue(rowNumber, 3,
943  generator->StringFromDouble(std::abs(data.faultCurrent[1]) * kCurrent));
944  m_gridFaultGenerators->SetCellValue(
945  rowNumber, 4, generator->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1]))));
946 
947  kCurrent = 1.0;
948  if(m_gridFaultGenerators->GetCellValue(1, 5) == m_currentChoices[1])
949  kCurrent = ib;
950  else if(m_gridFaultGenerators->GetCellValue(1, 5) == m_currentChoices[2])
951  kCurrent = ib / 1e3;
952  m_gridFaultGenerators->SetCellValue(rowNumber, 5,
953  generator->StringFromDouble(std::abs(data.faultCurrent[2]) * kCurrent));
954  m_gridFaultGenerators->SetCellValue(
955  rowNumber, 6, generator->StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[2]))));
956 
957  rowNumber++;
958  }
959  m_gridFaultGenerators->AutoSize();
960  }
961  m_changingValues = false;
962 }
963 
964 void DataReport::SetRowsColours(wxGrid* grid, int rowStart)
965 {
966  for(int i = rowStart; i < grid->GetNumberRows(); ++i) {
967  wxGridCellAttr* attr = grid->GetOrCreateCellAttr(i, 0);
968  if((i - rowStart) % 2 == 0)
969  attr->SetBackgroundColour(m_evenRowColour);
970  else
971  attr->SetBackgroundColour(m_oddRowColour);
972  grid->SetRowAttr(i, attr);
973  }
974 }
975 
976 void DataReport::OnPFBusGridChanged(wxGridEvent& event)
977 {
978  if(!m_changingValues) FillValues(GRID_PFBUSES);
979 }
980 void DataReport::OnFaulrGridChanged(wxGridEvent& event)
981 {
982  if(!m_changingValues) FillValues(GRID_FAULT);
983 }
984 void DataReport::OnFaultBranchesGridChanged(wxGridEvent& event)
985 {
986  if(!m_changingValues) FillValues(GRID_FAULTBRANCHES);
987 }
988 void DataReport::OnFaultBusesGridChanged(wxGridEvent& event)
989 {
990  if(!m_changingValues) FillValues(GRID_FAULTBUSES);
991 }
992 void DataReport::OnFaultGeneratorsGridChanged(wxGridEvent& event)
993 {
994  if(!m_changingValues) FillValues(GRID_FAULTGENERATORS);
995 }
996 void DataReport::OnPFBranchesGridChanged(wxGridEvent& event)
997 {
998  if(!m_changingValues) FillValues(GRID_PFBRANCHES);
999 }
1000 void DataReport::OnPowerFlowGridChanged(wxGridEvent& event)
1001 {
1002  if(!m_changingValues) FillValues(GRID_PF);
1003 }
const std::vector< Transformer * > GetTransformerList() const
Get the transformers of the system (use GetElementsFromList first).
+
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
Base class of electric calculations, with general methods.
+ + +
const std::vector< Bus * > GetBusList() const
Get the buses of the system (use GetElementsFromList first).
+
const std::vector< SyncGenerator * > GetSyncGeneratorList() const
Get the synchronous generators of the system (use GetElementsFromList first).
+
Definition: Bus.h:45
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+ +
Definition: Line.h:35
+ +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+
virtual void GetElementsFromList(std::vector< Element *> elementList)
Separate the power elements from a generic list.
+ + + +
const std::vector< Line * > GetLineList() const
Get the lines of the system (use GetElementsFromList first).
+ +
+
+ + + + diff --git a/docs/doxygen/html/_data_report_8h_source.html b/docs/doxygen/html/_data_report_8h_source.html index b02c1f4..263b45a 100644 --- a/docs/doxygen/html/_data_report_8h_source.html +++ b/docs/doxygen/html/_data_report_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/DataReport.h Source File +Project/DataReport.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
DataReport.h
-
1 #ifndef DATAREPORT_H
2 #define DATAREPORT_H
3 
4 #include "DataReportBase.h"
5 
6 class Workspace;
8 
9 class DataReport : public DataReportBase
10 {
11  public:
12  enum GridSelection {
13  GRID_ALL = 0,
14  GRID_PF,
15  GRID_PFBUSES,
16  GRID_PFBRANCHES,
17  GRID_FAULT,
18  GRID_FAULTBUSES,
19  GRID_FAULTBRANCHES,
20  GRID_FAULTGENERATORS,
21  };
22 
23  DataReport(wxWindow* parent, Workspace* workspace);
24  virtual ~DataReport();
25 
26  virtual void SetHeaders();
27  virtual void CreateGrids();
28  virtual void FillValues(GridSelection gridToFill = GRID_ALL);
29  virtual void SetRowsColours(wxGrid* grid, int rowStart = 1);
30 
31  protected:
32  virtual void OnFaulrGridChanged(wxGridEvent& event);
33  virtual void OnFaultBranchesGridChanged(wxGridEvent& event);
34  virtual void OnFaultBusesGridChanged(wxGridEvent& event);
35  virtual void OnFaultGeneratorsGridChanged(wxGridEvent& event);
36  virtual void OnPFBranchesGridChanged(wxGridEvent& event);
37  virtual void OnPowerFlowGridChanged(wxGridEvent& event);
38  virtual void OnPFBusGridChanged(wxGridEvent& event);
39  Workspace* m_workspace = NULL;
40  bool m_changingValues = false;
41 
42  // Headers choices
43  wxArrayString m_voltageChoices;
44  wxArrayString m_activePowerChoices;
45  wxArrayString m_reactivePowerChoices;
46  wxArrayString m_resistanceChoices;
47  wxArrayString m_indReactanceChoices;
48  wxArrayString m_capSusceptanceChoices;
49  wxArrayString m_currentChoices;
50 
51  // Colors
52  wxColour m_headerColour;
53  wxColour m_offlineColour;
54  wxColour m_oddRowColour;
55  wxColour m_evenRowColour;
56 };
57 #endif // DATAREPORT_H
Definition: DataReportBase.h:38
-
Definition: DataReport.h:9
-
Definition: ElectricCalculation.h:49
-
Definition: Workspace.h:56
+
1 #ifndef DATAREPORT_H
2 #define DATAREPORT_H
3 
4 #include "DataReportBase.h"
5 
6 class Workspace;
8 
9 class DataReport : public DataReportBase
10 {
11  public:
12  enum GridSelection {
13  GRID_ALL = 0,
14  GRID_PF,
15  GRID_PFBUSES,
16  GRID_PFBRANCHES,
17  GRID_FAULT,
18  GRID_FAULTBUSES,
19  GRID_FAULTBRANCHES,
20  GRID_FAULTGENERATORS,
21  };
22 
23  DataReport(wxWindow* parent, Workspace* workspace);
24  virtual ~DataReport();
25 
26  virtual void SetHeaders();
27  virtual void CreateGrids();
28  virtual void FillValues(GridSelection gridToFill = GRID_ALL);
29  virtual void SetRowsColours(wxGrid* grid, int rowStart = 1);
30 
31  protected:
32  virtual void OnFaulrGridChanged(wxGridEvent& event);
33  virtual void OnFaultBranchesGridChanged(wxGridEvent& event);
34  virtual void OnFaultBusesGridChanged(wxGridEvent& event);
35  virtual void OnFaultGeneratorsGridChanged(wxGridEvent& event);
36  virtual void OnPFBranchesGridChanged(wxGridEvent& event);
37  virtual void OnPowerFlowGridChanged(wxGridEvent& event);
38  virtual void OnPFBusGridChanged(wxGridEvent& event);
39  Workspace* m_workspace = NULL;
40  bool m_changingValues = false;
41 
42  // Headers choices
43  wxArrayString m_voltageChoices;
44  wxArrayString m_activePowerChoices;
45  wxArrayString m_reactivePowerChoices;
46  wxArrayString m_resistanceChoices;
47  wxArrayString m_indReactanceChoices;
48  wxArrayString m_capSusceptanceChoices;
49  wxArrayString m_currentChoices;
50 
51  // Colors
52  wxColour m_headerColour;
53  wxColour m_offlineColour;
54  wxColour m_oddRowColour;
55  wxColour m_evenRowColour;
56 };
57 #endif // DATAREPORT_H
+ + +
+
- + diff --git a/docs/doxygen/html/_data_report_base_8cpp_source.html b/docs/doxygen/html/_data_report_base_8cpp_source.html new file mode 100644 index 0000000..08e8eeb --- /dev/null +++ b/docs/doxygen/html/_data_report_base_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/DataReportBase.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
DataReportBase.cpp
+
+
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: DataReport.wxcp
4 // Do not modify this file by hand!
6 
7 #include "DataReportBase.h"
8 
9 
10 // Declare the bitmap loading function
11 extern void wxC6A63InitBitmapResources();
12 
13 static bool bBitmapLoaded = false;
14 
15 
16 DataReportBase::DataReportBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
17  : wxFrame(parent, id, title, pos, size, style)
18 {
19  if ( !bBitmapLoaded ) {
20  // We need to initialise the default bitmap handler
21  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
22  wxC6A63InitBitmapResources();
23  bBitmapLoaded = true;
24  }
25  // Set icon(s) to the application/dialog
26  wxIconBundle app_icons;
27  {
28  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart16"));
29  wxIcon icn;
30  icn.CopyFromBitmap(iconBmp);
31  app_icons.AddIcon( icn );
32  }
33  {
34  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart32"));
35  wxIcon icn;
36  icn.CopyFromBitmap(iconBmp);
37  app_icons.AddIcon( icn );
38  }
39  {
40  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart64"));
41  wxIcon icn;
42  icn.CopyFromBitmap(iconBmp);
43  app_icons.AddIcon( icn );
44  }
45  {
46  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart128"));
47  wxIcon icn;
48  icn.CopyFromBitmap(iconBmp);
49  app_icons.AddIcon( icn );
50  }
51  {
52  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("chart256"));
53  wxIcon icn;
54  icn.CopyFromBitmap(iconBmp);
55  app_icons.AddIcon( icn );
56  }
57  SetIcons( app_icons );
58 
59 
60  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
61  this->SetSizer(boxSizerLvl1_1);
62 
63  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxHORIZONTAL);
64 
65  boxSizerLvl1_1->Add(boxSizerLvl2_1, 1, wxEXPAND, WXC_FROM_DIP(5));
66 
67  m_notebookDataReport = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
68  m_notebookDataReport->SetName(wxT("m_notebookDataReport"));
69 
70  boxSizerLvl2_1->Add(m_notebookDataReport, 1, wxEXPAND, WXC_FROM_DIP(5));
71 
72  m_panelPowerFlowData = new wxPanel(m_notebookDataReport, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookDataReport, wxSize(-1,-1)), wxTAB_TRAVERSAL);
73  m_notebookDataReport->AddPage(m_panelPowerFlowData, _("Power flow data"), false);
74 
75  wxBoxSizer* boxSizerLvl3_1 = new wxBoxSizer(wxVERTICAL);
76  m_panelPowerFlowData->SetSizer(boxSizerLvl3_1);
77 
78  m_notebookPowerFlow = new wxNotebook(m_panelPowerFlowData, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelPowerFlowData, wxSize(-1,-1)), wxBK_LEFT|wxBK_DEFAULT);
79  m_notebookPowerFlow->SetName(wxT("m_notebookPowerFlow"));
80 
81  boxSizerLvl3_1->Add(m_notebookPowerFlow, 1, wxEXPAND, WXC_FROM_DIP(5));
82 
83  m_panelPowerFlow = new wxPanel(m_notebookPowerFlow, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookPowerFlow, wxSize(-1,-1)), wxTAB_TRAVERSAL);
84  m_notebookPowerFlow->AddPage(m_panelPowerFlow, _("Power flow"), false);
85 
86  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
87  m_panelPowerFlow->SetSizer(boxSizerLvl4_1);
88 
89  m_gridPowerFlow = new wxGrid(m_panelPowerFlow, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelPowerFlow, wxSize(-1,-1)), wxWANTS_CHARS);
90  m_gridPowerFlow->CreateGrid(0, 0);
91  m_gridPowerFlow->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
92  m_gridPowerFlow->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
93  #if wxVERSION_NUMBER >= 2904
94  m_gridPowerFlow->UseNativeColHeader(true);
95  #endif
96  m_gridPowerFlow->EnableEditing(true);
97 
98  boxSizerLvl4_1->Add(m_gridPowerFlow, 1, wxEXPAND, WXC_FROM_DIP(5));
99 
100  m_panelPFBuses = new wxPanel(m_notebookPowerFlow, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookPowerFlow, wxSize(-1,-1)), wxTAB_TRAVERSAL);
101  m_notebookPowerFlow->AddPage(m_panelPFBuses, _("Buses"), false);
102 
103  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
104  m_panelPFBuses->SetSizer(boxSizerLvl4_2);
105 
106  m_gridPFBuses = new wxGrid(m_panelPFBuses, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelPFBuses, wxSize(-1,-1)), wxWANTS_CHARS);
107  m_gridPFBuses->CreateGrid(0, 0);
108  m_gridPFBuses->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
109  m_gridPFBuses->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
110  #if wxVERSION_NUMBER >= 2904
111  m_gridPFBuses->UseNativeColHeader(true);
112  #endif
113  m_gridPFBuses->EnableEditing(true);
114 
115  boxSizerLvl4_2->Add(m_gridPFBuses, 1, wxEXPAND, WXC_FROM_DIP(5));
116 
117  m_panelPFBranches = new wxPanel(m_notebookPowerFlow, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookPowerFlow, wxSize(-1,-1)), wxTAB_TRAVERSAL);
118  m_notebookPowerFlow->AddPage(m_panelPFBranches, _("Branches"), false);
119 
120  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
121  m_panelPFBranches->SetSizer(boxSizerLvl4_3);
122 
123  m_gridPFBranches = new wxGrid(m_panelPFBranches, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelPFBranches, wxSize(-1,-1)), wxWANTS_CHARS);
124  m_gridPFBranches->CreateGrid(0, 0);
125  m_gridPFBranches->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
126  m_gridPFBranches->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
127  #if wxVERSION_NUMBER >= 2904
128  m_gridPFBranches->UseNativeColHeader(true);
129  #endif
130  m_gridPFBranches->EnableEditing(true);
131 
132  boxSizerLvl4_3->Add(m_gridPFBranches, 1, wxEXPAND, WXC_FROM_DIP(5));
133 
134  m_panelFaultData = new wxPanel(m_notebookDataReport, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookDataReport, wxSize(-1,-1)), wxTAB_TRAVERSAL);
135  m_notebookDataReport->AddPage(m_panelFaultData, _("Fault data"), false);
136 
137  wxBoxSizer* boxSizerLvl3_2 = new wxBoxSizer(wxVERTICAL);
138  m_panelFaultData->SetSizer(boxSizerLvl3_2);
139 
140  m_notebookFault = new wxNotebook(m_panelFaultData, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelFaultData, wxSize(-1,-1)), wxBK_LEFT|wxBK_DEFAULT);
141  m_notebookFault->SetName(wxT("m_notebookFault"));
142 
143  boxSizerLvl3_2->Add(m_notebookFault, 1, wxEXPAND, WXC_FROM_DIP(5));
144 
145  m_panelFault = new wxPanel(m_notebookFault, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookFault, wxSize(-1,-1)), wxTAB_TRAVERSAL);
146  m_notebookFault->AddPage(m_panelFault, _("Fault"), false);
147 
148  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
149  m_panelFault->SetSizer(boxSizerLvl4_4);
150 
151  m_gridFault = new wxGrid(m_panelFault, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), wxWANTS_CHARS);
152  m_gridFault->CreateGrid(0, 0);
153  m_gridFault->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
154  m_gridFault->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
155  #if wxVERSION_NUMBER >= 2904
156  m_gridFault->UseNativeColHeader(true);
157  #endif
158  m_gridFault->EnableEditing(true);
159 
160  boxSizerLvl4_4->Add(m_gridFault, 1, wxEXPAND, WXC_FROM_DIP(5));
161 
162  m_panelFaultBuses = new wxPanel(m_notebookFault, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookFault, wxSize(-1,-1)), wxTAB_TRAVERSAL);
163  m_notebookFault->AddPage(m_panelFaultBuses, _("Buses"), false);
164 
165  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxVERTICAL);
166  m_panelFaultBuses->SetSizer(boxSizerLvl4_5);
167 
168  m_gridFaultBuses = new wxGrid(m_panelFaultBuses, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelFaultBuses, wxSize(-1,-1)), wxWANTS_CHARS);
169  m_gridFaultBuses->CreateGrid(0, 0);
170  m_gridFaultBuses->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
171  m_gridFaultBuses->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
172  #if wxVERSION_NUMBER >= 2904
173  m_gridFaultBuses->UseNativeColHeader(true);
174  #endif
175  m_gridFaultBuses->EnableEditing(true);
176 
177  boxSizerLvl4_5->Add(m_gridFaultBuses, 1, wxEXPAND, WXC_FROM_DIP(5));
178 
179  m_panelFaultBranches = new wxPanel(m_notebookFault, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookFault, wxSize(-1,-1)), wxTAB_TRAVERSAL);
180  m_notebookFault->AddPage(m_panelFaultBranches, _("Branches"), false);
181 
182  wxBoxSizer* boxSizerLvl4_6 = new wxBoxSizer(wxVERTICAL);
183  m_panelFaultBranches->SetSizer(boxSizerLvl4_6);
184 
185  m_gridFaultBranches = new wxGrid(m_panelFaultBranches, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelFaultBranches, wxSize(-1,-1)), wxWANTS_CHARS);
186  m_gridFaultBranches->CreateGrid(0, 0);
187  m_gridFaultBranches->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
188  m_gridFaultBranches->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
189  #if wxVERSION_NUMBER >= 2904
190  m_gridFaultBranches->UseNativeColHeader(true);
191  #endif
192  m_gridFaultBranches->EnableEditing(true);
193 
194  boxSizerLvl4_6->Add(m_gridFaultBranches, 1, wxEXPAND, WXC_FROM_DIP(5));
195 
196  m_panelFaultGenerators = new wxPanel(m_notebookFault, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebookFault, wxSize(-1,-1)), wxTAB_TRAVERSAL);
197  m_notebookFault->AddPage(m_panelFaultGenerators, _("Generators"), false);
198 
199  wxBoxSizer* boxSizerLvl4_118 = new wxBoxSizer(wxVERTICAL);
200  m_panelFaultGenerators->SetSizer(boxSizerLvl4_118);
201 
202  m_gridFaultGenerators = new wxGrid(m_panelFaultGenerators, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelFaultGenerators, wxSize(-1,-1)), wxWANTS_CHARS);
203  m_gridFaultGenerators->CreateGrid(0, 0);
204  m_gridFaultGenerators->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
205  m_gridFaultGenerators->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
206  #if wxVERSION_NUMBER >= 2904
207  m_gridFaultGenerators->UseNativeColHeader(true);
208  #endif
209  m_gridFaultGenerators->EnableEditing(true);
210 
211  boxSizerLvl4_118->Add(m_gridFaultGenerators, 1, wxEXPAND, WXC_FROM_DIP(5));
212 
213 
214  #if wxVERSION_NUMBER >= 2900
215  if(!wxPersistenceManager::Get().Find(m_notebookDataReport)){
216  wxPersistenceManager::Get().RegisterAndRestore(m_notebookDataReport);
217  } else {
218  wxPersistenceManager::Get().Restore(m_notebookDataReport);
219  }
220  #endif
221 
222  #if wxVERSION_NUMBER >= 2900
223  if(!wxPersistenceManager::Get().Find(m_notebookPowerFlow)){
224  wxPersistenceManager::Get().RegisterAndRestore(m_notebookPowerFlow);
225  } else {
226  wxPersistenceManager::Get().Restore(m_notebookPowerFlow);
227  }
228  #endif
229 
230  #if wxVERSION_NUMBER >= 2900
231  if(!wxPersistenceManager::Get().Find(m_notebookFault)){
232  wxPersistenceManager::Get().RegisterAndRestore(m_notebookFault);
233  } else {
234  wxPersistenceManager::Get().Restore(m_notebookFault);
235  }
236  #endif
237 
238  SetName(wxT("DataReportBase"));
239  SetMinClientSize(wxSize(500,300));
240  SetSize(-1,-1);
241  if (GetSizer()) {
242  GetSizer()->Fit(this);
243  }
244  if(GetParent()) {
245  CentreOnParent(wxBOTH);
246  } else {
247  CentreOnScreen(wxBOTH);
248  }
249 #if wxVERSION_NUMBER >= 2900
250  if(!wxPersistenceManager::Get().Find(this)) {
251  wxPersistenceManager::Get().RegisterAndRestore(this);
252  } else {
253  wxPersistenceManager::Get().Restore(this);
254  }
255 #endif
256  // Connect events
257  m_gridPowerFlow->Connect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnPowerFlowGridChanged), NULL, this);
258  m_gridPFBuses->Connect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnPFBusGridChanged), NULL, this);
259  m_gridPFBranches->Connect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnPFBranchesGridChanged), NULL, this);
260  m_gridFault->Connect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaulrGridChanged), NULL, this);
261  m_gridFaultBuses->Connect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaultBusesGridChanged), NULL, this);
262  m_gridFaultBranches->Connect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaultBranchesGridChanged), NULL, this);
263  m_gridFaultGenerators->Connect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaultGeneratorsGridChanged), NULL, this);
264 
265 }
266 
267 DataReportBase::~DataReportBase()
268 {
269  m_gridPowerFlow->Disconnect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnPowerFlowGridChanged), NULL, this);
270  m_gridPFBuses->Disconnect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnPFBusGridChanged), NULL, this);
271  m_gridPFBranches->Disconnect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnPFBranchesGridChanged), NULL, this);
272  m_gridFault->Disconnect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaulrGridChanged), NULL, this);
273  m_gridFaultBuses->Disconnect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaultBusesGridChanged), NULL, this);
274  m_gridFaultBranches->Disconnect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaultBranchesGridChanged), NULL, this);
275  m_gridFaultGenerators->Disconnect(wxEVT_GRID_CELL_CHANGED, wxGridEventHandler(DataReportBase::OnFaultGeneratorsGridChanged), NULL, this);
276 
277 }
+
+ + + + diff --git a/docs/doxygen/html/_data_report_base_8h_source.html b/docs/doxygen/html/_data_report_base_8h_source.html index f89db52..6b9e79a 100644 --- a/docs/doxygen/html/_data_report_base_8h_source.html +++ b/docs/doxygen/html/_data_report_base_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/DataReportBase.h Source File +Project/DataReportBase.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
DataReportBase.h
-
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: DataReport.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_DATAREPORT_BASE_CLASSES_H
8 #define _PSP_PROJECT_DATAREPORT_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/notebook.h>
18 #include <wx/panel.h>
19 #include <wx/imaglist.h>
20 #include <wx/grid.h>
21 #if wxVERSION_NUMBER >= 2900
22 #include <wx/persist.h>
23 #include <wx/persist/toplevel.h>
24 #include <wx/persist/bookctrl.h>
25 #include <wx/persist/treebook.h>
26 #endif
27 
28 #ifdef WXC_FROM_DIP
29 #undef WXC_FROM_DIP
30 #endif
31 #if wxVERSION_NUMBER >= 3100
32 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
33 #else
34 #define WXC_FROM_DIP(x) x
35 #endif
36 
37 
38 class DataReportBase : public wxFrame
39 {
40 protected:
41  wxNotebook* m_notebookDataReport;
42  wxPanel* m_panelPowerFlowData;
43  wxNotebook* m_notebookPowerFlow;
44  wxPanel* m_panelPowerFlow;
45  wxGrid* m_gridPowerFlow;
46  wxPanel* m_panelPFBuses;
47  wxGrid* m_gridPFBuses;
48  wxPanel* m_panelPFBranches;
49  wxGrid* m_gridPFBranches;
50  wxPanel* m_panelFaultData;
51  wxNotebook* m_notebookFault;
52  wxPanel* m_panelFault;
53  wxGrid* m_gridFault;
54  wxPanel* m_panelFaultBuses;
55  wxGrid* m_gridFaultBuses;
56  wxPanel* m_panelFaultBranches;
57  wxGrid* m_gridFaultBranches;
58  wxPanel* m_panelFaultGenerators;
59  wxGrid* m_gridFaultGenerators;
60 
61 protected:
62  virtual void OnPowerFlowGridChanged(wxGridEvent& event) { event.Skip(); }
63  virtual void OnPFBusGridChanged(wxGridEvent& event) { event.Skip(); }
64  virtual void OnPFBranchesGridChanged(wxGridEvent& event) { event.Skip(); }
65  virtual void OnFaulrGridChanged(wxGridEvent& event) { event.Skip(); }
66  virtual void OnFaultBusesGridChanged(wxGridEvent& event) { event.Skip(); }
67  virtual void OnFaultBranchesGridChanged(wxGridEvent& event) { event.Skip(); }
68  virtual void OnFaultGeneratorsGridChanged(wxGridEvent& event) { event.Skip(); }
69 
70 public:
71  wxGrid* GetGridPowerFlow() { return m_gridPowerFlow; }
72  wxPanel* GetPanelPowerFlow() { return m_panelPowerFlow; }
73  wxGrid* GetGridPFBuses() { return m_gridPFBuses; }
74  wxPanel* GetPanelPFBuses() { return m_panelPFBuses; }
75  wxGrid* GetGridPFBranches() { return m_gridPFBranches; }
76  wxPanel* GetPanelPFBranches() { return m_panelPFBranches; }
77  wxNotebook* GetNotebookPowerFlow() { return m_notebookPowerFlow; }
78  wxPanel* GetPanelPowerFlowData() { return m_panelPowerFlowData; }
79  wxGrid* GetGridFault() { return m_gridFault; }
80  wxPanel* GetPanelFault() { return m_panelFault; }
81  wxGrid* GetGridFaultBuses() { return m_gridFaultBuses; }
82  wxPanel* GetPanelFaultBuses() { return m_panelFaultBuses; }
83  wxGrid* GetGridFaultBranches() { return m_gridFaultBranches; }
84  wxPanel* GetPanelFaultBranches() { return m_panelFaultBranches; }
85  wxGrid* GetGridFaultGenerators() { return m_gridFaultGenerators; }
86  wxPanel* GetPanelFaultGenerators() { return m_panelFaultGenerators; }
87  wxNotebook* GetNotebookFault() { return m_notebookFault; }
88  wxPanel* GetPanelFaultData() { return m_panelFaultData; }
89  wxNotebook* GetNotebookDataReport() { return m_notebookDataReport; }
90  DataReportBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Data report"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_FRAME_STYLE);
91  virtual ~DataReportBase();
92 };
93 
94 #endif
Definition: DataReportBase.h:38
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: DataReport.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_DATAREPORT_BASE_CLASSES_H
8 #define _PSP_PROJECT_DATAREPORT_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/notebook.h>
18 #include <wx/panel.h>
19 #include <wx/imaglist.h>
20 #include <wx/grid.h>
21 #if wxVERSION_NUMBER >= 2900
22 #include <wx/persist.h>
23 #include <wx/persist/toplevel.h>
24 #include <wx/persist/bookctrl.h>
25 #include <wx/persist/treebook.h>
26 #endif
27 
28 #ifdef WXC_FROM_DIP
29 #undef WXC_FROM_DIP
30 #endif
31 #if wxVERSION_NUMBER >= 3100
32 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
33 #else
34 #define WXC_FROM_DIP(x) x
35 #endif
36 
37 
38 class DataReportBase : public wxFrame
39 {
40 protected:
41  wxNotebook* m_notebookDataReport;
42  wxPanel* m_panelPowerFlowData;
43  wxNotebook* m_notebookPowerFlow;
44  wxPanel* m_panelPowerFlow;
45  wxGrid* m_gridPowerFlow;
46  wxPanel* m_panelPFBuses;
47  wxGrid* m_gridPFBuses;
48  wxPanel* m_panelPFBranches;
49  wxGrid* m_gridPFBranches;
50  wxPanel* m_panelFaultData;
51  wxNotebook* m_notebookFault;
52  wxPanel* m_panelFault;
53  wxGrid* m_gridFault;
54  wxPanel* m_panelFaultBuses;
55  wxGrid* m_gridFaultBuses;
56  wxPanel* m_panelFaultBranches;
57  wxGrid* m_gridFaultBranches;
58  wxPanel* m_panelFaultGenerators;
59  wxGrid* m_gridFaultGenerators;
60 
61 protected:
62  virtual void OnPowerFlowGridChanged(wxGridEvent& event) { event.Skip(); }
63  virtual void OnPFBusGridChanged(wxGridEvent& event) { event.Skip(); }
64  virtual void OnPFBranchesGridChanged(wxGridEvent& event) { event.Skip(); }
65  virtual void OnFaulrGridChanged(wxGridEvent& event) { event.Skip(); }
66  virtual void OnFaultBusesGridChanged(wxGridEvent& event) { event.Skip(); }
67  virtual void OnFaultBranchesGridChanged(wxGridEvent& event) { event.Skip(); }
68  virtual void OnFaultGeneratorsGridChanged(wxGridEvent& event) { event.Skip(); }
69 
70 public:
71  wxGrid* GetGridPowerFlow() { return m_gridPowerFlow; }
72  wxPanel* GetPanelPowerFlow() { return m_panelPowerFlow; }
73  wxGrid* GetGridPFBuses() { return m_gridPFBuses; }
74  wxPanel* GetPanelPFBuses() { return m_panelPFBuses; }
75  wxGrid* GetGridPFBranches() { return m_gridPFBranches; }
76  wxPanel* GetPanelPFBranches() { return m_panelPFBranches; }
77  wxNotebook* GetNotebookPowerFlow() { return m_notebookPowerFlow; }
78  wxPanel* GetPanelPowerFlowData() { return m_panelPowerFlowData; }
79  wxGrid* GetGridFault() { return m_gridFault; }
80  wxPanel* GetPanelFault() { return m_panelFault; }
81  wxGrid* GetGridFaultBuses() { return m_gridFaultBuses; }
82  wxPanel* GetPanelFaultBuses() { return m_panelFaultBuses; }
83  wxGrid* GetGridFaultBranches() { return m_gridFaultBranches; }
84  wxPanel* GetPanelFaultBranches() { return m_panelFaultBranches; }
85  wxGrid* GetGridFaultGenerators() { return m_gridFaultGenerators; }
86  wxPanel* GetPanelFaultGenerators() { return m_panelFaultGenerators; }
87  wxNotebook* GetNotebookFault() { return m_notebookFault; }
88  wxPanel* GetPanelFaultData() { return m_panelFaultData; }
89  wxNotebook* GetNotebookDataReport() { return m_notebookDataReport; }
90  DataReportBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Data report"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_FRAME_STYLE);
91  virtual ~DataReportBase();
92 };
93 
94 #endif
+
- + diff --git a/docs/doxygen/html/_data_report_bitmaps_8cpp_source.html b/docs/doxygen/html/_data_report_bitmaps_8cpp_source.html new file mode 100644 index 0000000..4062e94 --- /dev/null +++ b/docs/doxygen/html/_data_report_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/DataReportBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
DataReportBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 3278;
25 static unsigned char xml_res_file_0[] = {
26 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,
27 0,0,195,62,97,203,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
28 72,89,115,0,0,21,211,0,0,21,211,1,251,209,60,11,0,0,0,25,116,69,88,116,
29 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
30 101,46,111,114,103,155,238,60,26,0,0,12,75,73,68,65,84,120,156,237,157,
31 121,116,21,213,25,192,127,55,9,33,33,160,64,136,85,64,212,82,168,162,162,
32 30,212,163,7,212,138,130,27,214,106,177,5,165,81,17,194,86,15,160,213,138,
33 138,68,20,42,10,138,11,178,184,69,80,118,227,82,177,238,90,197,189,173,
34 82,80,4,142,82,203,81,34,88,1,129,188,240,150,220,254,17,34,9,121,239,101,
35 238,125,119,150,100,238,239,63,242,230,155,249,14,243,155,111,230,125,247,
36 206,187,130,73,31,74,178,178,176,132,147,44,98,17,168,174,246,59,15,139,
37 79,100,33,37,86,130,240,82,83,251,173,4,161,101,223,205,223,74,16,74,234,
38 63,253,89,9,66,71,78,131,191,236,149,160,251,193,237,24,126,226,65,142,
39 118,178,112,245,15,124,82,81,105,58,55,139,7,52,20,0,64,74,58,231,199,25,
40 127,114,17,217,217,217,141,238,100,85,69,196,10,208,68,73,221,0,144,146,
41 221,187,119,147,72,36,60,76,199,226,53,105,59,64,210,74,16,40,218,178,147,
42 92,98,70,247,217,104,11,208,74,16,28,238,22,247,179,65,92,194,88,177,152,
43 150,68,141,236,211,81,15,216,74,224,63,135,179,153,98,86,208,133,10,102,
44 50,131,117,98,32,37,60,67,14,153,157,19,199,131,0,86,2,127,41,21,243,234,
45 149,255,195,216,204,92,49,149,245,226,18,74,120,134,108,244,190,186,43,
46 141,2,213,74,16,143,199,181,14,102,209,163,27,155,184,156,191,37,253,236,
47 8,190,101,174,152,202,106,49,136,98,86,40,139,160,60,12,40,165,164,178,
48 178,210,74,224,33,147,196,188,70,75,253,81,108,228,9,81,202,191,247,138,
49 144,229,80,4,173,113,96,43,129,119,28,197,70,6,241,138,227,237,123,236,
50 21,225,53,49,198,209,246,218,19,1,172,4,222,80,42,230,105,221,223,223,164,
51 151,163,237,50,154,9,82,43,129,180,15,134,174,112,52,95,49,144,55,148,227,
52 254,199,129,220,39,7,59,218,54,227,169,64,82,74,226,123,34,80,109,37,48,
53 205,100,230,56,190,151,215,101,6,67,248,145,2,71,219,26,154,11,38,33,86,
54 101,37,48,200,9,172,227,98,241,150,114,220,247,180,229,65,249,59,199,219,
55 155,155,12,40,173,4,38,185,77,204,69,32,149,227,166,201,43,216,73,43,199,
56 219,155,157,13,106,37,48,66,47,214,50,128,149,202,113,21,20,242,16,3,149,
57 98,204,79,7,182,18,100,204,237,98,142,246,213,95,73,158,82,140,59,243,193,
58 173,4,218,156,202,106,206,227,61,229,184,205,116,96,46,151,40,199,185,247,
59 66,128,149,64,139,201,204,209,138,155,194,80,34,180,84,142,115,247,141,
60 16,43,129,18,189,89,197,217,226,35,229,184,77,252,140,71,228,69,90,199,
61 116,255,149,32,43,129,99,238,96,182,86,220,20,134,178,135,92,173,88,111,
62 222,9,179,18,52,74,95,241,49,191,18,255,84,142,251,154,67,120,92,94,168,
63 125,92,239,94,10,148,18,162,182,99,152,138,73,242,97,173,184,201,114,24,
64 81,90,104,31,215,251,183,66,173,4,13,56,135,247,57,93,124,162,28,247,37,
65 157,153,207,5,25,29,219,159,215,130,173,4,245,40,69,255,234,143,211,248,
66 180,253,116,248,247,94,120,52,2,9,59,148,124,1,43,57,69,172,86,142,219,
67 192,161,44,228,220,140,143,239,239,15,3,196,170,66,47,193,36,161,119,245,
68 79,146,35,50,190,250,193,111,1,32,212,18,252,70,188,197,73,124,174,28,247,
69 57,71,176,132,126,70,114,240,95,0,8,165,4,2,201,36,205,123,127,169,44,161,
70 218,208,169,11,134,0,16,58,9,126,43,222,224,120,214,43,199,173,161,43,79,
71 211,215,88,30,193,17,0,66,35,65,22,213,76,228,81,173,216,137,140,52,118,
72 245,215,228,18,52,66,32,193,239,121,149,158,108,80,142,251,23,71,242,156,
73 60,195,104,46,193,19,0,154,181,4,217,84,51,81,232,93,253,147,40,65,34,140,
74 230,147,252,247,1,130,64,172,10,200,131,236,250,41,150,240,12,125,196,167,
75 188,207,177,188,39,143,99,13,93,73,4,212,227,100,92,198,75,28,197,70,229,
76 184,143,228,209,188,192,105,198,243,9,174,0,80,79,130,150,68,121,80,220,
77 205,48,158,5,224,15,188,8,2,118,147,207,167,116,103,165,60,158,119,57,142,
78 247,57,150,239,105,235,111,222,41,200,166,154,155,197,99,90,177,183,50,
79 194,112,54,53,4,91,0,128,88,21,93,216,78,121,206,77,244,98,109,131,143,
80 11,136,208,155,85,244,22,171,0,144,8,214,114,56,15,113,41,179,228,165,94,
81 103,155,150,98,86,240,75,190,86,142,123,79,246,228,101,78,117,33,163,160,
82 62,3,212,161,143,248,148,215,227,67,233,153,104,120,242,147,33,144,244,
83 96,35,211,120,128,131,248,193,229,236,156,211,130,56,183,104,222,251,111,
84 101,164,225,108,246,17,88,1,4,146,113,98,17,207,113,29,69,108,163,50,6,
85 49,133,241,163,2,34,252,137,39,221,75,80,145,171,248,43,63,231,27,229,184,
86 149,242,120,94,231,36,23,50,170,33,144,2,180,161,146,5,226,86,74,169,255,
87 94,156,170,4,163,197,242,64,84,129,150,68,181,239,253,55,139,209,134,179,
88 169,79,224,4,232,198,38,94,21,163,83,206,139,87,145,160,128,8,215,137,167,
89 12,102,167,199,48,241,28,93,168,80,142,123,77,158,204,219,242,4,23,50,218,
90 71,160,4,56,159,119,121,93,140,226,200,70,30,148,84,36,24,195,50,95,171,
91 64,30,81,110,164,76,43,118,50,195,204,38,147,132,64,8,144,77,53,165,204,
92 227,41,49,145,3,216,237,40,198,169,4,126,87,129,17,162,156,206,108,81,142,
93 123,73,158,202,59,184,123,245,67,0,4,40,100,7,79,115,3,227,196,34,229,183,
94 97,156,74,224,87,21,200,35,202,245,204,215,138,45,165,196,112,54,201,241,
95 85,128,19,89,203,59,98,184,214,108,216,90,156,72,224,215,55,130,49,98,41,
96 157,216,170,28,247,130,236,195,135,28,227,66,70,13,241,77,128,65,188,204,
97 11,98,60,29,53,254,131,246,199,137,4,94,127,35,40,32,194,13,44,80,142,147,
98 8,38,51,220,133,140,146,227,185,0,45,137,114,191,152,206,28,113,39,121,
99 236,49,182,223,198,36,240,250,89,224,26,150,104,9,247,44,103,240,49,61,
100 92,200,40,57,158,10,208,137,45,188,200,88,138,89,225,202,254,43,99,16,77,
101 35,129,87,207,2,173,169,228,90,177,80,57,78,34,184,77,122,115,239,175,197,
102 51,1,206,228,31,188,45,74,232,37,190,48,178,191,84,195,162,145,52,18,120,
103 85,5,198,177,136,34,182,41,199,45,231,44,86,209,205,133,140,82,227,186,
104 0,181,45,221,229,226,207,20,178,195,200,62,215,208,149,115,121,128,72,138,
105 119,225,211,73,224,118,21,56,144,93,140,215,184,250,171,201,226,118,121,
106 181,11,25,165,199,85,1,90,19,161,140,219,26,180,116,51,97,25,103,211,79,
107 206,226,67,121,116,218,119,226,82,73,80,64,132,107,81,63,65,78,25,207,66,
108 218,243,163,114,220,98,250,179,154,95,184,144,81,122,92,19,160,27,155,120,
109 77,140,226,34,241,119,35,251,139,147,77,41,37,12,151,55,255,244,30,252,
110 125,12,74,89,5,32,181,4,127,20,75,93,169,2,109,217,201,88,177,88,57,46,
111 225,211,213,15,46,9,224,180,165,235,148,173,180,227,98,121,55,51,247,251,
112 237,187,239,104,79,25,3,210,198,38,147,192,173,42,112,189,88,64,91,118,
113 42,199,61,201,249,124,193,225,198,243,113,130,81,1,116,90,186,141,241,129,
114 60,150,211,228,195,41,219,162,51,229,224,180,85,0,146,75,96,186,10,20,178,
115 131,107,88,162,28,151,32,139,169,242,42,99,121,168,98,76,128,76,90,186,
116 169,40,99,0,191,102,6,21,20,166,220,198,73,21,128,134,18,20,16,97,188,88,
117 100,34,77,0,110,16,243,105,131,250,186,73,101,92,200,122,186,24,203,67,
118 21,35,2,116,97,51,111,137,145,25,181,116,235,82,69,46,163,229,141,140,147,
119 215,57,122,247,221,73,21,128,134,18,232,54,107,246,167,136,109,140,102,
120 185,114,92,140,28,166,200,161,25,31,63,19,140,8,112,189,152,207,161,26,
121 227,221,201,248,138,78,156,37,31,98,33,231,56,142,113,90,5,160,190,4,166,
122 170,192,4,202,104,173,113,245,63,202,69,108,164,99,198,199,207,4,35,2,228,
123 102,184,108,73,45,175,200,83,232,43,103,243,25,93,149,99,157,86,1,168,47,
124 65,166,85,224,16,190,103,132,40,87,142,139,210,130,105,242,10,237,227,154,
125 194,247,225,96,168,233,234,205,148,131,25,196,20,182,211,70,107,31,42,85,
126 0,246,73,144,105,21,152,64,25,173,168,82,142,155,199,197,252,135,67,180,
127 143,107,10,223,5,216,73,43,134,48,153,82,50,127,227,117,166,28,76,149,194,
128 111,229,213,74,160,91,5,58,178,149,97,226,89,229,184,42,114,185,83,94,169,
129 28,231,6,190,10,176,134,174,156,46,31,102,133,236,99,100,127,223,209,158,
130 50,233,188,10,64,141,4,45,18,122,85,96,162,120,148,124,141,17,205,217,114,
131 32,223,80,164,28,231,6,190,9,176,132,126,244,147,179,140,63,4,205,68,173,
132 10,64,141,4,37,137,165,116,96,187,227,152,195,216,204,80,158,87,77,143,
133 74,242,184,139,98,229,56,183,240,92,128,218,150,238,8,121,147,214,79,155,
134 54,70,5,133,202,85,0,32,59,86,201,216,132,243,9,28,183,136,199,180,86,241,
135 156,37,47,77,219,215,240,26,79,5,72,213,210,53,205,189,92,166,92,5,0,174,
136 142,47,165,40,209,248,12,165,218,69,28,85,217,77,62,211,25,162,28,231,38,
137 158,9,208,88,75,215,36,58,207,2,0,173,168,98,84,236,73,72,164,191,178,247,
138 95,196,209,41,247,49,136,45,180,87,142,115,19,79,4,112,210,210,53,141,110,
139 21,24,41,202,233,16,251,14,226,201,215,230,77,183,136,99,58,118,209,202,
140 245,202,167,131,171,2,168,182,116,77,162,218,23,168,165,21,85,140,102,89,
141 141,0,73,36,112,178,136,99,50,238,225,50,182,210,78,57,206,109,92,19,64,
142 167,165,107,26,213,190,64,45,35,69,121,205,55,130,253,36,232,206,127,149,
143 22,113,172,101,7,173,3,121,245,131,75,2,100,210,210,53,73,5,133,218,85,
144 96,148,216,59,184,83,71,130,219,197,108,173,153,77,51,184,156,109,28,160,
145 28,231,5,70,5,48,209,210,53,141,118,21,160,124,95,95,32,30,165,71,124,157,
146 235,139,56,250,129,49,1,76,182,116,77,162,91,5,10,136,236,171,2,192,132,
147 248,92,98,113,245,171,127,186,116,190,136,163,31,24,57,83,203,101,95,78,
148 147,143,24,107,233,154,102,166,28,68,149,198,138,26,35,40,167,61,63,210,
149 147,13,12,16,43,169,138,195,30,133,31,47,219,74,59,30,196,249,34,142,126,
150 96,68,128,87,57,37,16,35,91,169,168,160,3,79,104,244,5,90,19,97,140,88,
151 202,77,226,241,159,102,57,169,72,112,151,44,102,151,194,34,142,126,16,156,
152 90,237,50,247,50,88,171,10,140,97,57,231,240,65,189,191,57,145,64,103,17,
153 71,63,8,141,0,186,85,32,143,61,73,231,56,54,38,129,206,34,142,126,16,26,
154 1,64,191,59,152,138,84,18,232,46,226,232,7,161,18,160,130,66,158,144,153,
155 173,177,179,63,201,36,208,93,196,209,15,66,37,0,152,175,2,80,95,130,76,
156 22,113,244,131,208,9,224,70,21,128,125,18,100,178,136,163,31,132,78,0,112,
157 167,10,0,108,136,31,204,227,177,204,23,114,242,146,80,10,80,65,33,243,57,
158 223,248,126,167,201,98,162,241,234,148,67,201,65,36,148,2,0,220,35,47,55,
159 90,5,54,210,145,197,244,175,249,71,138,161,228,32,18,90,1,76,87,129,105,
160 178,184,254,50,110,77,68,130,208,10,0,230,170,192,151,116,98,57,103,55,
161 252,160,9,72,16,106,1,76,85,129,191,200,171,82,47,226,24,112,9,66,45,0,
162 100,94,5,190,224,48,202,57,51,253,70,1,150,32,244,2,84,80,200,2,121,158,
163 118,252,157,242,74,103,243,31,2,42,65,232,5,128,154,190,128,78,243,230,
164 51,186,242,60,167,59,15,8,160,4,86,0,224,91,138,152,47,213,159,5,166,226,
165 240,234,175,75,192,36,176,2,236,101,6,67,148,158,5,86,209,157,23,101,111,
166 189,131,5,72,130,224,175,26,230,17,21,20,114,164,92,70,91,118,57,218,126,
167 7,173,51,91,196,177,86,128,28,127,199,13,172,0,117,216,78,27,111,103,51,
168 7,64,2,123,11,240,27,159,111,7,86,128,32,224,163,4,86,128,160,224,147,4,
169 86,128,32,17,143,66,204,220,34,26,78,176,2,4,141,68,204,83,9,172,0,65,196,
170 67,9,172,0,65,197,35,9,172,0,65,198,3,9,172,0,65,199,101,9,172,0,77,1,23,
171 37,176,2,52,21,92,146,192,10,208,148,112,65,2,43,64,83,195,176,4,41,71,
172 3,115,178,156,15,117,182,201,205,166,168,192,14,44,122,135,132,236,4,162,
173 133,179,249,11,219,171,18,68,19,201,151,241,73,121,214,142,57,40,223,113,
174 58,211,251,119,102,122,255,206,142,183,183,152,33,55,55,151,252,252,198,
175 207,211,185,79,173,231,229,47,147,175,101,104,111,1,77,152,104,52,74,36,
176 18,201,104,31,86,128,38,78,166,18,88,1,154,1,209,104,148,202,74,245,69,
177 171,192,10,208,108,136,197,98,90,18,88,1,154,17,58,18,88,1,154,25,170,18,
178 88,1,154,33,42,18,88,1,154,41,78,37,176,2,52,99,156,72,144,178,19,248,252,
179 186,29,180,207,115,214,222,149,134,86,11,183,184,195,87,91,146,119,1,1,
180 4,19,222,180,103,47,12,100,231,64,139,134,63,93,107,111,1,97,33,17,135,
181 88,195,53,142,173,0,97,34,137,4,86,128,176,177,159,4,86,128,48,82,71,2,
182 59,139,35,172,36,226,64,21,255,7,181,153,56,45,184,129,88,206,0,0,0,0,73,
183 69,78,68,174,66,96,130};
184 
185 static size_t xml_res_size_1 = 560;
186 static unsigned char xml_res_file_1[] = {
187 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,
188 0,31,243,255,97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
189 72,89,115,0,0,2,186,0,0,2,186,1,219,5,165,194,0,0,0,25,116,69,88,116,83,
190 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
191 46,111,114,103,155,238,60,26,0,0,1,173,73,68,65,84,56,141,149,147,63,72,
192 28,65,28,133,191,209,185,91,148,104,226,33,130,160,32,92,115,136,141,145,
193 112,130,85,42,17,141,40,241,76,229,191,78,33,54,169,44,130,70,16,212,11,
194 8,130,162,156,26,8,4,133,96,170,84,73,8,136,49,218,120,133,34,8,162,22,
195 34,68,137,133,38,81,55,187,115,55,22,114,171,203,90,172,175,154,249,189,
196 121,31,143,97,70,24,111,86,117,121,241,67,182,79,76,76,149,230,190,202,
197 42,123,32,88,235,8,19,46,48,124,135,6,196,12,79,89,191,6,0,152,166,137,
198 86,150,175,112,5,123,244,51,75,139,248,126,3,0,72,219,22,248,128,12,137,
199 41,108,36,195,186,203,13,0,174,1,202,34,136,125,103,184,138,109,26,89,38,
200 161,155,57,164,232,14,0,80,157,74,178,147,122,198,174,104,38,143,11,151,
201 55,40,18,152,4,25,166,211,153,185,0,221,124,226,51,175,200,86,151,148,168,
202 67,94,138,143,142,23,101,139,122,86,152,162,133,95,20,122,1,175,197,28,
203 35,98,130,36,17,158,232,247,252,180,35,244,170,15,78,139,65,145,224,156,
204 28,226,186,221,213,202,1,52,240,131,25,221,68,163,30,227,136,66,70,69,39,
205 185,234,140,158,212,2,53,108,80,203,26,147,196,56,38,228,2,200,204,162,
206 143,94,166,41,119,140,175,58,74,146,8,221,106,158,58,86,249,43,115,121,
207 171,219,60,23,235,52,88,210,85,30,51,78,7,33,254,80,169,54,25,179,99,156,
208 240,200,115,70,122,38,183,244,133,106,190,17,165,148,35,198,213,115,192,
209 2,25,244,15,0,136,233,145,155,77,230,161,221,130,200,236,44,1,64,73,94,
210 128,255,62,63,147,144,32,2,6,7,103,22,178,52,63,0,192,98,107,216,87,56,
211 35,195,48,120,252,110,23,185,114,240,143,23,139,251,252,190,176,81,105,
212 125,47,200,254,105,154,43,206,33,140,175,150,245,39,228,0,0,0,0,73,69,78,
213 68,174,66,96,130};
214 
215 static size_t xml_res_size_2 = 6410;
216 static unsigned char xml_res_file_2[] = {
217 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0,
218 92,114,168,102,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,
219 89,115,0,0,43,165,0,0,43,165,1,137,102,26,50,0,0,0,25,116,69,88,116,83,
220 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
221 46,111,114,103,155,238,60,26,0,0,24,135,73,68,65,84,120,156,237,221,105,
222 120,85,213,185,192,241,255,10,73,152,81,68,20,84,174,181,22,171,32,85,107,
223 181,173,15,125,180,74,65,64,133,130,85,164,14,113,66,172,94,161,106,69,
224 171,64,64,173,120,169,138,67,85,16,209,160,12,82,172,114,11,181,181,150,
225 58,161,60,90,43,215,214,129,50,22,28,65,40,40,25,200,25,214,253,16,3,9,
226 156,36,103,88,251,221,211,251,251,210,199,152,179,223,45,37,255,189,206,
227 201,58,251,24,38,189,153,2,138,80,74,197,78,17,181,213,126,159,131,82,202,
228 39,69,164,147,104,4,148,138,167,186,165,127,58,165,17,80,42,134,118,63,
229 247,215,8,40,21,59,141,95,252,211,8,40,21,43,123,191,250,175,17,80,42,54,
230 50,255,250,79,35,160,84,44,52,253,251,255,250,8,88,43,120,58,74,41,73,205,
231 111,0,74,167,32,81,163,17,80,42,162,90,222,1,168,17,80,42,178,178,219,2,
232 172,17,80,42,146,138,179,254,206,250,8,148,180,161,67,235,86,180,47,105,
233 229,244,68,118,166,210,108,171,73,57,61,166,82,170,121,217,7,0,118,69,96,
234 226,143,122,114,253,73,221,156,158,200,31,87,111,103,224,220,85,78,143,
235 169,148,106,94,238,239,2,76,167,72,212,84,99,245,233,128,82,161,151,215,
236 219,128,211,169,36,85,85,85,26,1,165,66,46,239,251,0,36,147,26,1,165,194,
237 174,160,27,129,104,4,148,10,183,130,239,4,164,17,80,42,188,156,220,10,76,
238 35,160,212,222,78,53,111,114,32,91,253,62,141,102,57,187,23,96,50,153,164,
239 178,178,82,35,160,20,208,158,106,230,113,11,107,205,16,238,53,119,209,141,
240 45,126,159,82,70,78,111,6,154,74,165,52,2,74,1,99,152,207,1,108,165,29,
241 53,92,195,124,86,155,31,115,175,185,43,112,43,2,231,119,3,214,8,168,184,
242 235,68,37,215,153,39,27,125,173,61,213,187,66,48,133,7,232,204,23,62,157,
243 93,99,158,220,14,92,35,160,226,108,44,243,216,175,137,31,240,14,84,49,206,
244 84,240,111,115,38,83,120,128,125,249,82,248,236,26,243,236,243,0,52,2,42,
245 142,246,97,7,99,205,188,22,191,175,227,87,33,88,99,134,82,206,12,246,97,
246 135,192,217,237,205,211,15,4,209,8,168,184,185,142,57,57,45,239,247,227,
247 11,38,154,71,118,133,160,19,149,30,158,221,222,60,255,68,32,141,128,138,
248 139,46,108,103,76,22,87,255,166,30,91,31,130,113,166,130,182,236,116,124,
249 118,153,137,124,36,152,70,64,197,193,245,230,201,130,175,224,251,179,141,
250 41,60,192,122,115,22,227,76,5,109,168,117,116,118,153,137,125,38,160,70,
251 64,69,217,254,108,227,42,22,56,59,222,1,108,101,10,15,240,47,51,140,49,
252 102,190,103,33,16,253,80,80,141,128,138,170,113,166,130,142,84,57,63,110,
253 15,62,99,26,119,177,210,12,103,140,153,79,107,199,33,16,255,84,96,141,128,
254 138,154,110,108,225,103,44,244,116,198,127,241,41,211,184,139,119,205,185,
255 92,200,18,12,110,126,126,124,249,88,112,141,128,138,146,27,121,156,118,
256 212,136,204,58,156,15,185,208,44,193,98,156,28,207,151,0,128,70,64,69,67,
257 119,62,103,148,121,70,116,230,100,46,119,118,44,223,2,0,26,1,21,126,55,
258 51,75,236,87,118,0,127,226,251,188,108,143,115,118,60,95,3,0,26,1,21,94,
259 61,248,140,203,204,34,209,153,229,14,175,254,16,128,0,64,93,4,106,170,171,
260 244,115,7,84,168,220,98,30,117,254,170,124,115,22,219,190,44,183,125,156,
261 30,51,16,1,0,72,167,82,144,208,207,34,84,225,112,40,159,80,198,98,209,153,
262 46,159,251,215,11,76,0,0,72,167,53,2,42,20,38,152,153,148,146,16,155,247,
263 172,61,133,55,233,229,252,184,193,10,0,104,4,84,224,29,206,135,92,200,18,
264 177,121,22,195,36,15,174,254,16,196,0,128,70,64,5,218,4,51,147,98,228,62,
265 198,110,33,167,177,130,35,60,57,118,48,3,0,26,1,21,72,61,217,200,72,254,
266 40,54,47,77,17,183,217,75,60,59,126,112,3,0,117,17,168,213,8,168,224,152,
267 100,166,139,94,253,159,226,71,188,67,79,207,142,31,236,0,0,88,141,128,10,
268 134,94,172,227,92,254,44,54,47,69,17,183,218,75,61,157,17,252,0,128,70,
269 64,5,66,185,153,65,17,105,177,121,115,24,200,251,28,230,233,140,112,4,0,
270 52,2,202,87,71,179,134,225,44,21,155,151,162,136,95,217,139,61,159,19,158,
271 0,128,70,64,249,230,86,30,22,189,250,87,112,6,43,57,212,243,57,225,10,0,
272 104,4,148,184,111,243,1,67,204,75,98,243,18,20,115,187,135,175,252,55,20,
273 190,0,64,131,8,200,21,89,197,215,36,166,59,187,1,71,54,102,217,179,88,203,
274 193,34,179,194,25,0,248,42,2,53,26,1,229,169,239,152,247,25,108,150,137,
275 205,171,165,132,41,148,137,205,11,111,0,64,35,160,60,119,27,15,137,94,253,
276 31,177,67,89,79,119,177,121,225,14,0,104,4,148,103,78,50,239,48,128,215,
277 197,230,213,80,42,122,245,135,40,4,0,52,2,202,19,147,121,88,116,222,195,
278 12,231,67,14,16,157,25,141,0,128,70,64,57,213,215,172,224,52,222,20,155,
279 87,67,41,83,237,5,98,243,234,69,39,0,160,17,80,206,220,198,67,162,243,30,
280 224,28,62,166,171,232,76,136,90,0,64,35,160,10,214,207,188,193,201,252,
281 93,108,94,37,109,125,185,250,67,20,3,0,26,1,85,144,9,204,20,157,119,63,
282 231,178,137,253,68,103,214,139,102,0,64,35,160,242,114,186,121,157,31,240,
283 182,216,188,29,180,227,110,59,82,108,222,158,162,27,0,208,8,168,156,149,
284 51,67,116,222,61,118,36,155,233,44,58,179,161,104,7,0,52,2,42,107,103,242,
285 10,223,229,159,98,243,182,211,129,105,156,39,54,47,147,232,7,0,52,2,170,
286 69,6,203,120,35,251,220,255,110,251,83,182,210,73,116,230,158,226,17,0,
287 208,8,168,102,13,229,37,78,224,61,177,121,219,232,200,125,156,43,54,175,
288 41,241,9,0,104,4,84,70,6,203,68,35,251,220,127,170,189,128,109,116,20,157,
289 153,73,188,2,0,26,1,181,151,159,240,23,142,97,149,216,188,45,236,195,253,
290 1,184,250,67,28,3,0,26,1,181,75,17,105,110,49,143,138,206,188,147,139,248,
291 146,118,162,51,155,18,207,0,128,70,64,1,48,130,231,233,195,106,177,121,
292 155,233,204,67,118,184,216,188,150,196,55,0,160,17,136,185,86,164,25,47,
293 124,245,191,131,50,118,4,228,234,15,113,15,0,104,4,98,236,124,254,192,145,
294 172,23,155,247,9,251,51,221,14,19,155,151,13,13,0,104,4,98,168,21,105,126,
295 105,30,19,157,249,43,123,49,85,180,17,157,217,18,13,64,61,141,64,172,148,
296 241,123,142,96,131,216,188,143,233,202,163,12,17,155,151,45,13,64,67,26,
297 129,88,40,33,41,126,245,191,213,94,74,53,173,69,103,102,67,3,176,39,141,
298 64,228,93,202,34,190,206,71,98,243,54,208,141,89,156,37,54,47,23,26,128,
299 76,244,115,7,34,171,148,4,227,76,133,232,204,201,246,50,106,41,17,157,153,
300 45,13,64,83,172,213,8,68,208,40,158,225,107,124,34,54,111,61,221,121,130,
301 65,98,243,114,165,1,104,142,70,32,82,218,80,43,126,245,47,183,163,2,123,
302 245,7,13,64,203,52,2,145,113,165,89,200,33,108,18,155,183,138,30,204,97,
303 160,216,188,124,104,0,178,81,31,129,180,70,32,172,218,178,147,235,121,82,
304 116,102,185,29,69,146,86,162,51,115,165,1,200,150,181,144,208,8,132,213,
305 213,102,1,7,177,89,108,222,123,28,198,124,250,139,205,203,151,6,32,23,26,
306 129,80,106,79,181,248,213,127,146,29,69,58,4,63,94,193,63,195,160,201,35,
307 2,39,154,119,185,136,197,162,59,207,212,110,215,152,167,56,128,173,98,243,
308 254,193,55,88,200,169,98,243,10,81,236,247,9,132,82,125,4,74,218,66,81,
309 243,13,29,197,51,220,207,84,74,77,2,128,47,104,207,27,182,55,203,56,134,
310 183,56,138,87,56,54,16,119,134,137,170,14,84,241,115,230,138,206,44,39,
311 28,87,127,208,0,228,175,133,8,180,161,150,251,205,84,46,227,217,70,95,239,
312 68,37,253,204,27,244,227,13,0,82,20,177,146,67,121,149,99,89,102,235,162,
313 240,30,135,97,49,34,255,25,81,119,45,115,233,202,127,196,230,189,205,55,
314 121,198,158,34,54,175,80,26,128,66,52,17,129,30,124,198,66,198,113,34,239,
315 182,120,136,86,164,233,197,58,122,177,142,81,230,25,0,62,165,11,127,179,
316 71,241,22,71,241,170,169,11,67,16,247,145,7,221,62,236,96,172,153,39,58,
317 115,162,189,34,84,241,214,0,20,106,143,8,244,55,203,153,203,45,116,97,123,
318 222,135,236,198,22,206,48,175,114,6,175,2,80,107,74,248,187,61,146,229,
319 230,104,94,179,223,226,105,78,13,205,18,211,79,215,49,135,206,124,33,54,
320 239,77,122,177,152,190,98,243,92,208,191,69,46,88,139,73,84,113,131,125,
321 156,63,48,166,160,31,254,76,74,73,240,61,243,15,198,50,143,5,230,38,206,
322 102,169,211,227,71,81,23,182,51,70,175,254,45,210,0,56,208,129,106,42,152,
323 200,205,137,223,136,252,138,112,162,153,65,17,250,171,200,230,92,199,147,
324 116,162,82,108,222,235,244,225,57,78,18,155,231,138,6,160,64,61,217,200,
325 11,230,74,206,226,101,172,133,202,4,164,60,254,217,236,197,58,93,5,52,99,
326 127,182,113,181,89,32,58,115,2,163,69,231,185,162,1,40,192,32,150,177,212,
327 140,230,72,254,189,235,107,82,17,208,85,64,211,198,153,10,58,82,37,54,111,
328 25,199,240,130,61,81,108,158,75,26,128,60,20,147,162,156,25,204,49,227,
329 51,254,69,147,136,128,174,2,50,235,198,22,126,198,66,209,153,183,112,165,
330 232,60,151,52,0,57,234,202,127,120,150,235,25,107,230,97,176,77,126,159,
331 68,4,38,152,71,116,21,176,135,113,166,130,118,212,136,205,91,106,79,224,
332 69,123,188,216,60,215,52,0,57,56,150,149,44,53,63,163,175,89,145,213,247,
333 123,29,129,222,172,213,85,64,3,221,249,156,43,248,157,232,204,73,230,114,
334 209,121,174,105,0,178,84,198,98,158,55,255,77,15,62,205,233,113,94,71,64,
335 95,11,216,237,102,102,209,150,157,98,243,254,196,247,121,217,30,39,54,207,
336 11,26,128,22,180,161,150,251,204,175,153,102,238,162,148,68,94,199,240,
337 50,2,189,88,199,112,93,5,208,131,207,184,204,44,18,157,89,78,184,175,254,
338 160,1,104,214,193,108,98,9,99,184,144,37,5,31,203,203,8,76,212,215,2,184,
339 153,89,180,166,86,108,222,18,250,178,220,246,17,155,231,21,13,64,19,250,
340 154,21,188,104,70,115,188,249,192,217,49,189,138,64,111,214,198,122,21,
341 112,40,159,112,177,249,189,232,204,73,54,252,87,127,208,0,236,197,96,185,
342 142,57,44,226,58,79,222,69,230,85,4,38,152,153,177,93,5,140,55,143,230,
343 253,244,44,31,139,56,153,55,233,37,54,207,75,26,128,6,58,80,77,133,41,103,
344 188,153,73,43,15,127,152,188,136,192,209,172,137,229,42,224,112,62,228,
345 34,22,139,205,179,24,202,237,40,177,121,94,211,0,124,165,225,150,94,9,94,
346 68,32,142,175,5,76,48,51,41,38,37,54,239,105,123,42,43,56,66,108,158,215,
347 52,0,100,222,210,43,193,117,4,226,246,90,64,79,54,50,146,63,138,205,75,
348 83,196,173,92,42,54,79,66,172,3,80,76,138,219,205,67,77,110,233,149,224,
349 58,2,227,205,163,177,89,5,148,155,25,162,87,255,5,244,227,29,122,138,205,
350 147,16,219,0,116,97,59,11,25,199,85,44,104,118,75,175,4,151,17,232,195,
351 106,134,153,191,22,126,160,128,235,197,58,70,240,188,216,188,20,69,76,182,
352 151,137,205,147,18,203,0,28,203,74,94,52,163,57,197,188,229,247,169,236,
353 82,31,129,164,131,8,148,19,253,221,129,229,194,59,32,231,114,58,239,115,
354 152,216,60,41,177,11,64,190,91,122,37,88,11,85,14,34,208,155,181,145,94,
355 5,72,255,198,35,69,17,183,219,75,196,230,73,138,77,0,92,108,233,149,224,
356 42,2,81,94,5,220,202,195,162,255,109,21,156,193,74,14,21,155,39,41,22,1,
357 112,185,165,87,130,139,8,68,117,21,240,109,62,96,136,121,73,108,94,130,
358 226,200,94,253,33,6,1,240,98,75,175,4,23,17,136,226,42,96,18,211,69,95,
359 180,125,140,51,89,203,193,98,243,164,69,54,0,6,203,88,51,207,179,45,189,
360 18,10,141,64,111,214,242,99,94,116,122,78,126,58,158,247,25,108,150,137,
361 205,171,165,132,41,182,76,108,158,31,34,25,128,250,45,189,229,204,240,116,
362 75,175,132,66,35,48,201,76,143,204,42,224,118,243,144,232,213,255,17,59,
363 148,117,28,36,54,207,15,145,11,192,145,172,231,69,51,74,108,75,111,62,82,
364 57,254,177,23,18,129,168,172,2,78,50,239,48,128,215,197,230,213,80,202,
365 29,92,44,54,207,47,145,10,192,32,150,241,103,115,21,223,224,67,191,79,37,
366 35,139,225,97,134,243,115,123,109,238,143,45,32,2,81,88,5,76,230,97,209,
367 121,211,237,48,62,162,171,232,76,63,68,34,0,173,72,55,123,151,222,32,216,
368 65,91,202,152,200,141,246,106,230,48,144,213,28,146,243,49,242,141,64,216,
369 87,1,125,205,10,78,227,77,177,121,53,148,50,149,11,197,230,249,41,244,1,
370 232,194,118,158,230,134,22,239,210,235,167,213,28,66,63,251,32,139,236,
371 201,64,221,83,128,123,236,79,243,58,86,190,17,8,243,42,224,86,43,123,245,
372 127,128,115,98,113,245,135,144,7,32,136,91,122,247,244,156,61,137,83,237,
373 195,124,192,215,26,125,125,62,253,243,90,5,64,126,17,8,235,42,160,159,121,
374 67,244,255,223,74,218,50,213,94,32,54,207,111,161,13,64,144,183,244,66,
375 221,85,190,156,81,140,228,54,190,160,125,198,127,159,239,42,0,242,139,64,
376 24,87,1,19,152,41,58,239,126,206,101,19,251,137,206,244,83,232,2,208,58,
377 4,91,122,183,176,15,103,219,59,153,102,207,107,246,211,98,11,89,5,64,238,
378 17,232,205,90,134,10,238,162,43,212,233,230,117,126,192,219,98,243,118,
379 208,142,187,237,72,177,121,65,16,170,0,28,204,38,254,16,240,45,189,255,
380 199,17,252,208,78,231,175,124,167,197,239,45,116,21,0,95,189,139,176,54,
381 251,8,76,34,60,171,128,114,102,136,206,187,199,142,100,51,157,69,103,250,
382 45,52,1,8,195,150,222,249,244,103,128,189,143,13,28,152,211,99,10,89,5,
383 212,203,54,2,71,179,38,20,171,128,51,204,43,124,151,127,138,205,219,78,
384 7,166,113,158,216,188,160,8,124,0,194,176,165,119,39,165,140,177,215,51,
385 218,222,68,13,173,115,122,172,139,85,64,189,108,35,16,244,85,128,193,138,
386 63,247,191,135,145,108,165,147,232,204,32,8,116,0,194,176,165,247,99,186,
387 50,216,78,163,130,193,121,31,99,62,253,89,227,232,13,39,149,181,144,104,
388 225,46,89,65,95,5,12,229,37,78,224,61,177,121,219,232,200,189,118,132,216,
389 188,32,9,108,0,164,239,210,155,143,101,28,195,41,118,58,127,227,168,130,
390 142,227,114,21,0,117,47,12,182,20,129,160,174,2,12,150,137,70,246,185,255,
391 84,123,1,219,232,40,58,51,40,2,25,128,65,44,227,47,230,74,241,187,244,102,
392 171,126,75,239,16,123,23,155,28,189,104,52,143,1,206,86,1,208,114,4,130,
393 186,10,56,155,191,112,12,171,196,230,109,97,31,238,231,92,177,121,65,19,
394 168,0,52,220,210,219,137,74,191,79,39,163,134,91,122,147,180,114,118,92,
395 215,171,0,104,57,2,65,91,5,20,145,102,188,121,84,116,230,255,216,11,249,
396 146,118,162,51,131,36,48,1,40,37,25,186,45,189,174,185,94,5,64,243,17,56,
397 154,53,12,9,208,83,172,17,60,79,31,86,139,205,219,76,103,30,228,108,177,
398 121,65,20,152,0,156,104,222,13,229,150,94,151,188,88,5,64,243,17,152,108,
399 100,239,175,215,148,86,62,92,253,239,160,140,29,49,190,250,67,128,2,208,
400 134,157,126,159,66,70,45,109,233,117,205,139,85,0,52,29,129,160,172,2,126,
401 202,115,28,201,122,177,121,159,176,63,211,237,48,177,121,65,21,152,0,4,
402 81,182,91,122,93,242,106,21,0,77,71,192,239,85,64,43,210,220,108,102,137,
403 206,188,131,50,170,104,35,58,51,136,52,0,77,200,101,75,175,107,94,173,2,
404 32,115,4,252,94,5,148,241,123,142,96,131,216,188,143,233,202,76,59,84,108,
405 94,144,105,0,50,200,103,75,175,75,41,138,152,230,225,155,82,50,69,192,175,
406 85,64,9,73,126,105,30,19,157,121,171,189,148,234,28,119,108,70,149,6,160,
407 129,66,182,244,186,54,159,254,172,167,187,103,199,223,51,2,126,173,2,46,
408 49,255,203,215,249,72,108,222,6,186,49,139,179,196,230,5,157,6,224,43,46,
409 182,244,186,148,160,152,187,236,249,158,206,216,51,2,19,204,35,162,191,
410 130,45,37,193,141,60,46,54,15,234,174,254,181,148,136,206,12,50,13,0,238,
411 182,244,186,230,245,42,0,26,71,224,88,254,37,250,169,59,163,120,134,175,
412 241,137,216,188,245,116,103,118,64,2,31,20,177,14,128,23,91,122,93,146,
413 88,5,64,227,8,76,68,102,21,208,134,90,198,153,10,207,231,52,84,110,71,233,
414 213,127,15,177,13,128,87,91,122,93,147,88,5,192,238,8,72,173,2,70,243,52,
415 135,176,201,243,57,245,86,209,131,57,12,20,155,23,22,177,12,128,215,91,
416 122,93,146,90,5,192,238,8,120,189,10,104,203,78,126,97,158,240,236,248,
417 153,76,178,163,2,29,122,191,196,46,0,139,236,201,156,98,103,120,186,165,
418 215,181,249,244,231,223,116,19,153,85,149,128,222,41,111,87,1,87,241,91,
419 14,98,179,103,199,223,211,251,28,198,124,250,139,205,11,147,216,4,160,126,
420 75,111,25,19,217,65,91,191,79,39,39,146,171,0,168,139,192,205,169,25,158,
421 172,2,218,83,45,126,245,47,183,163,114,254,56,182,184,136,197,159,138,31,
422 91,122,93,155,199,0,145,215,2,234,245,76,172,226,204,244,82,231,199,189,
423 198,60,197,1,108,117,126,220,166,188,203,215,89,200,169,98,243,194,38,242,
424 1,240,115,75,175,75,9,138,185,219,163,247,8,52,229,23,137,153,152,148,187,
425 91,175,119,160,138,159,51,215,217,241,178,49,129,209,164,163,255,215,60,
426 111,145,254,147,241,123,75,175,107,210,171,128,62,172,102,96,98,41,164,
427 146,78,142,119,45,115,69,111,236,250,54,223,228,25,123,138,216,188,48,138,
428 100,0,130,180,165,215,37,63,86,1,55,154,10,76,162,26,10,92,9,236,195,14,
429 198,154,121,142,206,42,59,19,237,21,161,125,202,39,37,114,1,8,218,150,94,
430 215,164,87,1,223,98,21,3,121,13,18,59,11,138,192,181,102,14,157,249,194,
431 225,153,53,239,45,142,98,49,125,197,230,133,85,164,2,16,212,45,189,46,249,
432 182,10,192,230,29,129,125,249,146,107,120,202,131,51,107,218,120,59,90,
433 175,254,89,136,68,0,130,190,165,215,181,121,12,16,219,23,0,13,86,1,144,
434 87,4,110,96,54,251,242,165,7,103,150,217,235,244,225,57,78,18,155,23,102,
435 161,15,64,88,182,244,186,84,183,10,144,219,23,0,13,86,1,144,83,4,246,103,
436 27,87,155,5,30,158,217,222,38,48,90,116,94,152,133,58,0,97,218,210,235,
437 218,92,63,87,1,144,117,4,110,96,54,29,169,242,240,204,26,91,198,49,188,
438 96,79,20,155,23,118,161,13,128,196,93,122,131,204,247,85,0,180,24,129,110,
439 108,225,42,243,91,129,51,219,237,22,174,20,157,23,118,161,11,64,138,34,
440 166,216,139,196,238,210,27,100,126,172,2,78,55,175,55,254,98,51,17,24,103,
441 42,104,71,141,192,153,213,89,106,79,224,69,123,188,216,188,40,8,85,0,234,
442 183,244,78,161,76,95,225,197,159,85,192,77,60,190,247,123,4,50,68,160,59,
443 159,115,5,191,19,60,51,152,100,46,23,157,23,5,161,9,64,84,182,244,186,22,
444 136,85,0,236,21,129,95,154,199,104,43,248,89,15,127,226,251,188,108,143,
445 19,155,23,21,161,8,64,212,182,244,186,148,160,216,179,207,17,104,74,198,
446 85,0,236,138,64,15,62,227,114,158,21,61,167,114,244,234,159,143,64,7,32,
447 170,91,122,93,155,195,233,193,88,5,0,36,118,50,46,53,147,214,212,138,157,
448 207,18,250,178,220,246,17,155,23,37,129,13,64,212,183,244,186,20,164,85,
449 64,15,62,227,156,228,18,106,155,249,84,98,215,38,115,153,220,176,136,9,
450 100,0,226,176,165,215,181,160,172,2,110,48,179,41,37,65,117,2,145,8,60,
451 107,79,225,13,219,219,251,65,17,21,152,0,108,176,221,99,183,165,215,165,
452 32,172,2,14,227,99,70,240,252,174,127,246,58,2,22,195,36,125,238,95,144,
453 192,4,96,21,135,48,132,95,199,106,75,175,107,115,56,157,13,194,171,128,
454 1,44,223,245,207,227,204,108,74,104,124,239,0,47,35,240,59,126,200,10,142,
455 240,230,224,49,17,152,0,88,12,47,219,111,251,125,26,161,230,199,59,5,111,
456 50,117,171,128,195,249,136,179,121,33,227,247,120,17,129,52,69,76,182,250,
457 220,191,80,129,9,128,114,67,250,181,128,99,248,23,3,88,206,141,230,113,
458 138,105,250,167,220,117,4,22,208,143,119,232,233,238,128,49,165,1,136,24,
459 63,94,11,184,195,60,192,112,90,190,129,104,117,2,118,58,184,187,88,138,
460 34,38,89,125,238,239,130,6,32,130,164,87,1,135,241,113,214,31,45,94,147,
461 44,60,2,115,57,61,182,111,2,115,77,3,16,65,9,138,153,198,72,191,79,163,
462 73,133,68,32,69,17,183,219,75,220,158,80,140,105,0,34,234,73,59,80,116,
463 21,144,171,124,35,48,155,193,172,228,80,247,39,20,83,26,128,136,10,250,
464 42,0,114,143,64,130,98,110,179,151,122,119,66,49,164,1,136,176,160,175,
465 2,32,183,8,60,198,153,172,229,96,111,79,40,102,52,0,17,22,134,85,0,100,
466 23,129,4,197,76,177,101,34,231,19,39,26,128,136,123,210,14,20,221,29,152,
467 175,150,34,240,8,67,89,199,65,114,39,20,19,26,128,136,75,80,204,52,123,
468 158,223,167,145,149,166,34,80,67,41,119,216,139,229,79,40,6,52,0,49,240,
469 4,131,66,177,10,128,204,17,152,110,135,241,33,7,248,115,66,17,167,1,136,
470 129,48,173,2,160,113,4,106,40,101,42,23,250,123,66,17,166,1,136,137,48,
471 173,2,96,119,4,126,99,207,225,35,186,250,125,58,145,165,1,136,137,176,173,
472 2,0,182,38,219,112,103,114,132,223,167,17,105,26,128,24,9,219,42,96,58,
473 195,216,156,108,15,73,185,251,11,198,141,6,32,70,194,180,10,168,164,45,
474 191,177,63,169,251,135,100,173,70,192,35,26,128,152,9,203,42,224,65,206,
475 230,115,246,221,253,5,141,128,39,52,0,49,147,160,152,123,9,246,243,234,
476 47,104,207,131,245,87,255,134,52,2,206,105,0,98,104,182,29,28,232,85,192,
477 131,252,132,255,208,49,243,191,212,8,56,165,1,136,161,32,175,2,182,211,
478 129,135,236,240,230,191,73,35,224,140,6,32,166,130,186,10,184,207,142,96,
479 59,29,90,254,70,141,128,19,26,128,152,10,226,42,96,43,157,152,206,176,236,
480 31,160,17,40,152,6,32,198,130,182,10,184,215,158,199,14,218,230,246,32,
481 141,64,65,52,0,49,22,164,85,192,38,58,243,8,67,243,123,176,70,32,111,26,
482 128,152,123,194,14,98,99,0,86,1,247,218,17,84,209,38,255,3,104,4,242,162,
483 1,136,185,90,74,184,215,250,187,10,248,148,46,204,98,72,225,7,210,8,228,
484 76,3,160,152,141,191,171,128,123,24,73,53,173,221,28,76,35,144,19,13,128,
485 242,117,21,240,41,251,83,97,7,187,61,168,70,32,107,26,0,5,248,183,10,152,
486 202,249,212,184,186,250,55,164,17,200,138,6,64,1,117,171,128,105,194,191,
487 17,216,72,55,158,176,131,188,27,160,17,104,145,6,64,237,34,253,27,129,169,
488 246,124,106,41,241,118,136,70,160,89,26,0,181,139,228,107,1,27,232,198,
489 124,250,139,204,34,89,11,137,157,50,179,66,70,3,160,26,145,122,45,96,138,
490 45,243,254,234,223,80,42,161,17,200,64,3,160,26,169,165,132,251,56,215,
491 211,25,107,56,152,5,244,243,116,70,70,26,129,189,104,0,212,94,42,236,96,
492 79,87,1,119,218,50,146,180,242,236,248,205,210,8,52,82,236,247,9,168,224,
493 169,165,132,65,118,26,93,216,214,236,247,181,50,150,142,84,230,124,252,
494 87,56,46,223,83,115,35,149,168,251,223,18,15,126,253,24,50,26,0,149,209,
495 70,14,100,35,7,54,255,77,86,230,92,60,161,17,0,244,41,128,138,51,125,58,
496 160,1,80,49,23,243,8,104,0,148,138,113,4,52,0,74,65,108,35,160,1,80,170,
497 94,12,35,160,1,80,170,161,152,69,64,3,160,212,158,98,20,1,13,128,82,153,
498 196,36,2,26,0,165,154,18,131,8,104,0,148,106,78,42,1,137,26,191,207,194,
499 51,26,0,165,90,146,74,70,54,2,26,0,165,178,17,209,8,104,0,148,202,86,4,
500 35,160,1,80,42,23,17,139,128,6,64,169,92,69,40,2,26,0,165,242,17,145,8,
501 104,0,148,202,87,4,34,160,1,80,170,16,33,143,128,6,64,169,66,133,56,2,26,
502 0,165,92,8,105,4,52,0,74,185,18,194,8,104,0,148,114,41,100,17,208,0,40,
503 229,90,136,34,160,1,80,202,11,169,36,212,86,251,125,22,45,210,0,40,229,
504 149,116,42,240,17,208,0,40,229,165,128,71,64,3,160,148,215,2,28,1,13,128,
505 82,18,2,26,1,13,128,82,82,2,24,129,188,62,29,184,93,137,251,110,116,40,
506 109,69,175,174,109,157,31,87,169,160,49,69,80,212,218,237,223,245,205,85,
507 73,62,221,145,200,249,113,121,5,224,184,238,237,243,121,88,179,190,119,
508 72,123,94,187,228,72,231,199,85,42,136,138,139,139,105,223,222,221,207,
509 209,61,203,63,227,218,231,55,230,252,56,125,10,160,148,15,146,201,36,149,
510 149,149,126,159,134,6,64,41,191,4,33,2,26,0,165,124,228,119,4,52,0,74,249,
511 172,62,2,214,90,241,217,26,0,165,2,32,153,76,82,85,85,37,30,1,13,128,82,
512 1,225,71,4,52,0,74,5,136,116,4,52,0,74,5,140,100,4,52,0,74,5,144,84,4,52,
513 0,74,5,148,68,4,52,0,74,5,152,215,17,208,0,40,21,112,94,70,64,3,160,84,
514 8,120,21,1,13,128,82,33,225,69,4,52,0,74,133,136,235,8,104,0,148,10,25,
515 151,239,29,208,0,40,21,66,169,84,202,73,4,52,0,74,133,148,139,8,104,0,148,
516 10,177,66,35,144,87,0,94,219,248,101,94,195,148,82,238,165,82,41,106,107,
517 170,32,143,8,24,110,90,154,170,187,79,105,246,218,151,22,121,114,103,96,
518 165,84,126,170,18,105,42,147,64,73,91,48,38,235,199,229,117,87,224,202,
519 218,52,149,181,233,124,30,170,148,242,82,162,58,167,8,232,101,92,169,40,
520 73,167,235,34,144,229,211,1,13,128,82,81,147,67,4,52,0,74,69,81,150,17,
521 208,0,40,21,85,89,68,64,3,160,84,148,181,16,1,13,128,82,81,215,76,4,52,
522 0,74,197,65,19,17,208,0,40,21,23,25,34,160,1,80,42,78,246,136,128,6,64,
523 169,184,105,16,1,13,128,82,113,244,85,4,254,31,121,241,55,153,214,40,101,
524 56,0,0,0,0,73,69,78,68,174,66,96,130};
525 
526 static size_t xml_res_size_3 = 987;
527 static unsigned char xml_res_file_3[] = {
528 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
529 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
530 72,89,115,0,0,5,98,0,0,5,98,1,172,97,92,156,0,0,0,25,116,69,88,116,83,111,
531 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
532 111,114,103,155,238,60,26,0,0,3,88,73,68,65,84,88,133,197,151,123,104,141,
533 97,24,192,127,239,217,185,76,10,209,140,105,229,210,92,74,174,115,89,91,
534 20,139,134,48,127,80,194,220,134,63,8,145,63,196,54,119,43,33,252,97,182,
535 154,40,162,200,106,214,148,132,153,68,211,102,180,37,119,25,67,238,235,
536 236,59,231,59,123,253,113,182,119,59,190,239,59,151,156,195,243,215,251,
537 60,207,251,188,207,239,125,222,219,247,9,242,238,74,226,28,252,47,177,227,
538 213,72,238,233,100,250,144,62,0,220,122,253,147,151,223,180,127,6,96,3,
539 24,213,219,70,81,86,18,165,243,6,50,105,64,247,152,36,74,166,153,25,226,
540 158,57,0,128,219,237,198,227,241,196,36,57,192,78,81,194,53,54,80,69,46,
541 233,212,25,1,58,32,218,116,111,212,147,15,162,137,229,148,3,144,33,106,
542 25,79,131,57,0,128,207,211,10,122,116,43,145,39,138,113,160,3,240,142,4,
543 138,88,96,13,0,248,1,162,4,145,194,91,150,82,161,244,253,114,37,26,206,
544 16,0,81,132,200,19,197,196,209,6,192,27,250,81,194,188,0,191,53,64,20,32,
545 134,243,138,197,92,83,250,94,185,10,15,129,119,78,112,128,63,32,250,243,
546 57,34,128,2,113,10,91,251,236,95,146,196,105,230,24,250,132,6,0,156,122,
547 11,39,244,125,52,137,44,62,136,153,28,17,135,67,198,140,228,57,11,185,174,
548 244,61,114,53,94,236,145,3,36,241,137,10,177,145,37,190,43,104,58,36,242,
549 133,77,156,39,85,52,4,141,219,69,17,2,9,192,51,146,57,195,108,211,126,65,
550 1,50,68,45,183,196,90,82,219,207,109,171,14,154,255,52,145,47,139,45,227,
551 198,240,148,108,113,179,19,70,230,226,179,72,101,9,176,94,92,160,140,45,
552 36,240,85,217,170,25,173,32,230,136,170,128,11,165,171,116,157,125,35,3,
553 57,199,76,75,88,3,128,11,141,82,177,139,189,156,84,199,199,131,131,77,114,
554 11,179,229,81,106,25,166,32,242,133,177,10,169,162,129,185,226,118,39,140,
555 204,165,45,72,161,13,158,29,162,148,108,110,42,189,137,4,178,56,166,118,
556 240,65,153,3,248,151,99,134,94,197,56,26,3,226,119,115,82,181,159,48,152,
557 139,100,90,38,55,5,72,226,147,106,87,49,150,41,242,20,53,114,184,178,85,
558 146,70,29,67,21,196,118,189,72,249,210,168,39,139,187,74,47,96,77,208,217,
559 155,2,116,200,113,22,49,95,30,226,51,189,12,190,66,185,76,181,51,125,119,
560 24,163,63,6,2,103,95,71,10,151,228,180,160,201,77,1,126,208,157,28,10,216,
561 41,215,89,238,220,10,210,121,68,138,210,183,249,74,72,215,31,144,41,238,
562 43,91,190,92,139,68,68,14,176,77,110,160,76,78,13,25,88,72,103,21,102,81,
563 205,81,223,1,90,219,143,104,13,35,40,35,244,24,166,0,94,194,251,62,172,
564 144,233,60,102,136,210,83,120,139,166,251,247,69,190,92,19,214,24,166,0,
565 225,138,68,80,72,142,193,94,173,143,224,170,62,49,246,0,0,229,50,131,39,
566 93,170,0,176,159,21,17,189,162,198,215,33,2,145,8,246,176,138,173,156,5,
567 224,5,3,184,33,39,248,157,29,0,118,167,69,116,20,0,0,42,101,26,149,164,
568 153,59,195,128,248,171,37,8,75,66,44,71,236,1,66,64,216,1,122,184,226,148,
569 97,100,223,110,124,215,124,49,225,176,57,156,216,28,46,0,30,190,111,225,
570 99,139,238,7,24,218,59,94,117,218,60,57,145,205,147,19,99,2,0,224,114,185,
571 136,143,143,39,251,226,51,174,52,126,251,251,77,24,169,104,90,224,127,167,
572 29,224,114,227,87,117,107,127,248,229,229,135,167,45,230,32,53,239,90,1,
573 225,7,168,111,118,83,223,236,142,121,82,131,216,157,252,6,173,114,47,95,
574 172,143,154,9,0,0,0,0,73,69,78,68,174,66,96,130};
575 
576 static size_t xml_res_size_4 = 1881;
577 static unsigned char xml_res_file_4[] = {
578 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,64,0,0,0,64,8,6,0,0,
579 0,170,105,113,222,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
580 72,89,115,0,0,10,233,0,0,10,233,1,253,117,206,211,0,0,0,25,116,69,88,116,
581 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
582 101,46,111,114,103,155,238,60,26,0,0,6,214,73,68,65,84,120,156,229,155,
583 121,108,84,69,28,199,63,211,61,186,96,57,228,80,17,84,130,136,8,65,140,
584 26,60,162,81,84,98,168,128,130,130,45,32,10,4,80,140,114,41,90,64,40,162,
585 65,81,20,8,162,128,66,41,8,114,40,209,152,200,81,4,131,9,40,136,26,84,136,
586 86,228,16,139,128,96,45,236,118,119,223,238,248,199,186,237,110,119,222,
587 219,247,246,173,108,91,190,255,237,252,126,111,102,222,103,102,126,115,
588 188,89,193,212,29,18,135,147,243,85,89,4,43,33,164,101,186,30,25,83,22,
589 192,249,12,161,186,239,7,43,153,114,123,59,114,59,54,139,115,216,118,176,
590 130,73,159,31,61,215,245,58,103,138,27,252,151,93,16,226,198,139,179,113,
591 185,92,85,105,199,206,4,207,121,165,236,202,73,136,16,89,72,68,82,223,172,
592 154,9,94,175,151,96,176,238,189,116,172,158,20,107,217,43,242,232,79,9,
593 2,105,232,155,0,0,234,54,4,15,1,158,165,152,206,28,96,141,40,224,123,49,
594 208,16,132,18,0,212,93,8,163,89,75,107,78,84,253,238,66,41,107,68,1,59,
595 196,48,186,242,75,130,191,46,0,136,64,8,105,117,7,194,5,248,152,40,138,
596 149,182,235,217,79,5,13,19,210,13,1,0,248,125,62,8,213,13,8,79,177,154,
597 139,57,165,180,21,209,139,3,180,78,72,79,10,0,128,160,191,214,67,200,193,
598 203,120,177,82,105,11,226,100,166,28,170,180,153,3,0,181,30,194,88,86,209,
599 146,211,74,219,98,30,224,55,46,85,218,204,3,128,90,11,161,9,103,24,167,
600 211,250,126,220,186,173,15,86,1,64,173,132,48,142,149,52,227,31,165,109,
601 33,253,248,157,139,116,159,181,14,0,106,21,132,166,84,48,70,124,160,180,
602 85,226,102,150,28,98,248,124,106,0,160,214,64,120,134,21,52,165,66,105,
603 123,75,14,224,40,45,13,159,79,29,0,100,28,66,115,202,121,90,167,245,207,
604 210,128,215,120,36,105,30,246,0,64,70,33,76,20,197,52,194,171,180,205,151,
605 3,248,147,102,74,91,172,236,3,128,140,64,104,193,223,140,102,157,210,118,
606 134,134,188,193,64,83,249,164,7,0,36,64,184,75,236,162,3,135,211,150,125,
607 77,21,136,34,114,116,90,127,174,204,227,184,137,214,135,26,231,1,182,21,
608 244,227,33,192,91,206,55,24,198,39,32,224,36,77,217,65,23,118,202,46,44,
609 163,87,210,160,100,70,173,56,201,19,58,173,95,78,14,179,25,100,58,175,180,
610 2,184,148,19,20,107,211,184,93,236,3,71,36,173,5,127,211,155,237,244,22,
611 219,233,196,1,6,203,25,182,203,41,160,136,6,248,149,182,57,50,159,211,52,
612 54,157,87,218,134,64,119,118,179,93,140,224,70,246,225,11,66,32,148,232,
613 147,199,38,58,114,208,86,57,109,56,206,8,177,94,105,59,77,99,222,52,57,
614 246,163,178,13,64,32,25,199,74,214,137,231,104,78,121,85,186,10,130,131,
615 48,47,136,247,108,149,55,137,165,120,8,40,109,179,25,68,57,57,150,242,179,
616 5,160,17,94,150,139,169,76,19,139,113,16,78,176,171,32,60,108,163,23,92,
617 65,25,195,197,199,74,219,73,154,50,79,230,89,206,51,101,0,87,113,132,205,
618 98,52,189,248,210,208,175,38,4,7,97,38,139,37,41,149,57,69,44,193,141,122,
619 186,125,157,193,202,3,143,100,74,9,192,253,226,11,182,138,81,116,228,144,
620 41,255,154,16,242,217,200,213,38,159,141,170,29,71,121,148,79,149,182,227,
621 52,99,190,28,96,41,191,168,44,1,112,16,166,144,69,20,49,157,28,124,134,
622 190,171,233,193,100,249,68,213,111,95,16,252,90,117,62,83,44,198,130,23,
623 196,187,184,80,127,188,121,85,14,225,44,13,44,229,23,149,105,0,205,41,231,
624 67,38,50,86,172,50,60,106,214,112,80,200,72,70,201,73,44,162,31,135,185,
625 164,202,86,169,85,67,200,103,163,233,88,208,158,35,12,230,51,165,237,24,
626 205,121,135,7,205,190,70,130,76,1,232,202,207,108,21,143,115,167,248,198,
627 208,175,140,22,228,202,121,204,145,249,64,228,40,106,46,241,129,41,10,193,
628 74,44,40,20,139,112,162,152,87,129,153,242,49,188,120,76,229,163,82,82,
629 0,109,56,206,70,241,52,151,115,204,208,111,7,215,114,167,92,200,215,116,
630 138,75,47,150,247,197,245,2,168,134,96,166,23,116,224,48,121,108,82,218,
631 202,104,193,98,250,38,123,5,67,37,5,112,29,63,227,209,89,117,69,85,68,47,
632 250,200,217,202,221,151,170,23,64,4,130,166,37,239,5,47,138,119,148,83,
633 44,192,12,134,227,35,219,240,249,100,178,181,14,56,75,3,134,201,169,140,
634 149,19,8,26,172,170,85,189,0,34,16,250,105,250,51,66,103,14,208,159,45,
635 74,219,97,46,97,137,236,147,90,197,99,148,50,128,82,218,112,183,92,192,
636 71,116,79,234,27,196,89,21,23,18,108,90,152,231,67,139,149,182,233,98,33,
637 89,58,173,255,146,28,142,31,183,249,10,235,40,37,0,27,228,205,220,45,223,
638 102,63,109,77,63,179,156,92,101,47,0,232,163,109,166,131,86,26,151,214,
639 133,82,250,178,77,233,127,136,86,44,227,62,211,101,27,201,18,0,137,96,142,
640 204,103,32,47,91,94,115,235,197,2,136,204,8,227,67,75,65,171,94,227,191,
641 196,219,186,173,95,40,71,18,192,165,180,89,149,105,0,167,104,204,67,242,
642 21,10,25,73,56,197,145,179,92,230,114,68,167,23,244,167,132,171,180,95,
643 65,11,112,3,251,232,45,182,43,253,74,185,140,21,244,76,169,124,149,146,
644 190,73,5,13,217,75,123,186,203,133,108,161,155,173,194,2,184,152,171,179,
645 97,113,16,102,130,88,1,90,128,169,161,5,186,139,173,233,114,4,90,244,176,
646 33,13,74,10,224,43,58,211,67,206,231,144,78,203,89,213,114,122,114,84,231,
647 67,69,127,74,200,99,35,119,104,59,171,86,140,177,218,79,91,86,113,111,90,
648 234,17,85,82,0,149,100,83,105,115,174,141,149,31,183,238,129,165,131,48,
649 11,196,172,72,185,49,203,230,168,166,203,17,132,210,120,140,9,233,60,20,
650 181,32,163,88,16,27,248,98,33,252,72,59,214,112,79,218,235,146,17,0,70,
651 177,160,166,162,16,166,201,81,41,7,95,35,101,4,0,64,49,250,189,160,166,
652 246,104,237,88,175,221,250,191,212,35,99,0,172,244,130,25,12,39,172,105,
653 113,235,132,116,41,99,0,192,120,70,136,234,91,121,53,27,228,45,145,31,90,
654 32,237,16,50,10,192,143,155,57,168,247,8,81,205,20,67,227,47,60,166,25,
655 66,70,1,0,20,203,92,221,94,176,75,118,98,147,188,41,209,144,70,8,25,191,
656 39,239,199,205,24,38,112,155,252,46,46,189,17,94,214,136,30,232,158,190,
657 69,1,56,237,237,8,51,14,0,160,68,118,163,68,181,204,54,190,229,154,22,8,
658 25,31,2,182,101,115,56,212,125,0,96,11,66,253,0,0,41,67,168,63,0,32,37,
659 8,245,11,0,88,134,80,255,0,128,37,8,113,211,224,21,77,18,247,253,215,180,
660 244,48,163,187,250,158,109,109,151,211,157,141,211,29,255,78,123,202,188,
661 172,250,161,250,70,121,28,128,86,57,137,203,130,43,47,244,240,84,183,212,
662 63,61,101,90,217,217,217,120,60,213,245,127,127,239,95,113,0,234,231,16,
663 136,145,223,239,199,231,211,255,146,93,239,1,0,4,2,1,93,8,181,98,41,124,
664 46,20,8,168,131,98,28,128,221,101,94,92,89,241,255,181,243,6,195,156,170,
665 84,127,154,174,123,58,203,79,127,84,198,165,8,10,182,38,219,114,212,63,
666 57,92,224,138,204,14,231,69,12,72,80,40,24,185,218,203,121,20,3,18,244,
667 223,189,230,127,1,145,119,128,141,62,61,149,199,0,0,0,0,73,69,78,68,174,
668 66,96,130};
669 
670 static size_t xml_res_size_5 = 626;
671 static unsigned char xml_res_file_5[] = {
672 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
673 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
674 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
675 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
676 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
677 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
678 45,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
679 120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,104,97,114,116,
680 49,50,56,34,62,68,97,116,97,82,101,112,111,114,116,66,105,116,109,97,112,
681 115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,99,104,
682 97,114,116,49,50,56,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,
683 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
684 109,97,112,34,32,110,97,109,101,61,34,99,104,97,114,116,49,54,34,62,68,
685 97,116,97,82,101,112,111,114,116,66,105,116,109,97,112,115,46,99,112,112,
686 36,100,97,116,97,95,105,109,97,103,101,115,95,99,104,97,114,116,49,54,46,
687 112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,
688 116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,
689 97,109,101,61,34,99,104,97,114,116,50,53,54,34,62,68,97,116,97,82,101,112,
690 111,114,116,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,
691 105,109,97,103,101,115,95,99,104,97,114,116,50,53,54,46,112,110,103,60,
692 47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,
693 97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,
694 34,99,104,97,114,116,51,50,34,62,68,97,116,97,82,101,112,111,114,116,66,
695 105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,
696 101,115,95,99,104,97,114,116,51,50,46,112,110,103,60,47,111,98,106,101,
697 99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,
698 119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,99,104,97,114,
699 116,54,52,34,62,68,97,116,97,82,101,112,111,114,116,66,105,116,109,97,112,
700 115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,99,104,
701 97,114,116,54,52,46,112,110,103,60,47,111,98,106,101,99,116,62,10,60,47,
702 114,101,115,111,117,114,99,101,62,10};
703 
704 void wxC6A63InitBitmapResources()
705 {
706 
707  // Check for memory FS. If not present, load the handler:
708  {
709  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
710  wxFileSystem fsys;
711  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
712  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
713  if (f) delete f;
714  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
715  }
716 
717  XRC_ADD_FILE(wxT("XRC_resource/DataReportBitmaps.cpp$data_images_chart128.png"), xml_res_file_0, xml_res_size_0, wxT("image/png"));
718  XRC_ADD_FILE(wxT("XRC_resource/DataReportBitmaps.cpp$data_images_chart16.png"), xml_res_file_1, xml_res_size_1, wxT("image/png"));
719  XRC_ADD_FILE(wxT("XRC_resource/DataReportBitmaps.cpp$data_images_chart256.png"), xml_res_file_2, xml_res_size_2, wxT("image/png"));
720  XRC_ADD_FILE(wxT("XRC_resource/DataReportBitmaps.cpp$data_images_chart32.png"), xml_res_file_3, xml_res_size_3, wxT("image/png"));
721  XRC_ADD_FILE(wxT("XRC_resource/DataReportBitmaps.cpp$data_images_chart64.png"), xml_res_file_4, xml_res_size_4, wxT("image/png"));
722  XRC_ADD_FILE(wxT("XRC_resource/DataReportBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_DataReportBitmaps.xrc"), xml_res_file_5, xml_res_size_5, wxT("text/xml"));
723  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/DataReportBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_DataReportBitmaps.xrc"));
724 }
+
+ + + + diff --git a/docs/doxygen/html/_degrees_and_radians_8h_source.html b/docs/doxygen/html/_degrees_and_radians_8h_source.html index 77aee90..6f71d87 100644 --- a/docs/doxygen/html/_degrees_and_radians_8h_source.html +++ b/docs/doxygen/html/_degrees_and_radians_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/DegreesAndRadians.h Source File +Project/DegreesAndRadians.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
DegreesAndRadians.h
1 #ifndef DEGREESANDRADIANS_H
2 #define DEGREESANDRADIANS_H
3 
4 #include<wx/math.h>
5 
6 // Convert between degrees and radians.
7 inline double wxDegToRad(double deg) { return (deg * M_PI) / 180.0; }
8 inline double wxRadToDeg(double rad) { return (rad * 180.0) / M_PI; }
9 
10 #endif // DEGREESANDRADIANS_H
+ - + diff --git a/docs/doxygen/html/_electric_calculation_8cpp_source.html b/docs/doxygen/html/_electric_calculation_8cpp_source.html new file mode 100644 index 0000000..2d2e8ef --- /dev/null +++ b/docs/doxygen/html/_electric_calculation_8cpp_source.html @@ -0,0 +1,136 @@ + + + + + + + +Project/ElectricCalculation.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ElectricCalculation.cpp
+
+
+
1 #include "ElectricCalculation.h"
2 #ifdef USING_WX_3_0_X
3 #include "DegreesAndRadians.h"
4 #endif
5 
8 void ElectricCalculation::GetElementsFromList(std::vector<Element*> elementList)
9 {
10  m_powerElementList.clear();
11  m_busList.clear();
12  m_capacitorList.clear();
13  m_indMotorList.clear();
14  m_inductorList.clear();
15  m_lineList.clear();
16  m_loadList.clear();
17  m_syncGeneratorList.clear();
18  m_syncMotorList.clear();
19  m_transformerList.clear();
20  // TODO: Bad design?
21  for(auto it = elementList.begin(); it != elementList.end(); it++) {
22  Element* element = *it;
23  m_powerElementList.push_back(static_cast<PowerElement*>(element));
24 
25  if(Bus* bus = dynamic_cast<Bus*>(element))
26  m_busList.push_back(bus);
27  else if(Capacitor* capacitor = dynamic_cast<Capacitor*>(element))
28  m_capacitorList.push_back(capacitor);
29  else if(IndMotor* indMotor = dynamic_cast<IndMotor*>(element))
30  m_indMotorList.push_back(indMotor);
31  else if(Inductor* inductor = dynamic_cast<Inductor*>(element))
32  m_inductorList.push_back(inductor);
33  else if(Line* line = dynamic_cast<Line*>(element))
34  m_lineList.push_back(line);
35  else if(Load* load = dynamic_cast<Load*>(element))
36  m_loadList.push_back(load);
37  else if(SyncGenerator* syncGenerator = dynamic_cast<SyncGenerator*>(element))
38  m_syncGeneratorList.push_back(syncGenerator);
39  else if(SyncMotor* syncMotor = dynamic_cast<SyncMotor*>(element))
40  m_syncMotorList.push_back(syncMotor);
41  else if(Transformer* transformer = dynamic_cast<Transformer*>(element))
42  m_transformerList.push_back(transformer);
43  }
44 
45  // Set buses numbers
46  int busNumber = 0;
47  for(auto itb = m_busList.begin(); itb != m_busList.end(); itb++) {
48  Bus* bus = *itb;
49  BusElectricalData data = bus->GetElectricalData();
50  data.number = busNumber;
51  bus->SetElectricalData(data);
52  busNumber++;
53  }
54 }
55 
56 bool ElectricCalculation::GetYBus(std::vector<std::vector<std::complex<double> > >& yBus,
57  double systemPowerBase,
58  YBusSequence sequence,
59  bool includeSyncMachines,
60  bool allLoadsAsImpedances)
61 {
62  if(m_busList.size() == 0) return false;
63 
64  // Clear and fill with zeros the Ybus
65  yBus.clear();
66  for(int i = 0; i < (int)m_busList.size(); i++) {
67  std::vector<std::complex<double> > line;
68  for(int j = 0; j < (int)m_busList.size(); j++) {
69  line.push_back(std::complex<double>(0.0, 0.0));
70  }
71  yBus.push_back(line);
72  }
73 
74  // Set buses numbers
75  int busNumber = 0;
76  for(auto itb = m_busList.begin(); itb != m_busList.end(); itb++) {
77  Bus* bus = *itb;
78  BusElectricalData data = bus->GetElectricalData();
79  data.number = busNumber;
80  bus->SetElectricalData(data);
81  busNumber++;
82  }
83 
84  // Load
85  for(auto it = m_loadList.begin(), itEnd = m_loadList.end(); it != itEnd; ++it) {
86  Load* load = *it;
87  if(load->IsOnline()) {
88  int n = static_cast<Bus*>(load->GetParentList()[0])->GetElectricalData().number;
89  LoadElectricalData data = load->GetPUElectricalData(systemPowerBase);
90  if(data.loadType == CONST_IMPEDANCE || allLoadsAsImpedances) {
91  std::complex<double> yLoad = std::complex<double>(data.activePower, -data.reactivePower);
92  if(allLoadsAsImpedances) {
93  std::complex<double> v = static_cast<Bus*>(load->GetParentList()[0])->GetElectricalData().voltage;
94  yLoad /= (std::abs(v) * std::abs(v));
95  }
96  yBus[n][n] += yLoad;
97  }
98  }
99  }
100 
101  // Capacitor
102  for(auto it = m_capacitorList.begin(), itEnd = m_capacitorList.end(); it != itEnd; ++it) {
103  Capacitor* capacitor = *it;
104  if(capacitor->IsOnline()) {
105  int n = static_cast<Bus*>(capacitor->GetParentList()[0])->GetElectricalData().number;
106  CapacitorElectricalData data = capacitor->GetPUElectricalData(systemPowerBase);
107  yBus[n][n] += std::complex<double>(0.0, data.reactivePower);
108  }
109  }
110 
111  // Inductor
112  for(auto it = m_inductorList.begin(), itEnd = m_inductorList.end(); it != itEnd; ++it) {
113  Inductor* inductor = *it;
114  if(inductor->IsOnline()) {
115  int n = static_cast<Bus*>(inductor->GetParentList()[0])->GetElectricalData().number;
116  InductorElectricalData data = inductor->GetPUElectricalData(systemPowerBase);
117  yBus[n][n] += std::complex<double>(0.0, -data.reactivePower);
118  }
119  }
120 
121  // Power line
122  for(auto it = m_lineList.begin(), itEnd = m_lineList.end(); it != itEnd; ++it) {
123  Line* line = *it;
124  if(line->IsOnline()) {
125  LineElectricalData data = line->GetPUElectricalData(systemPowerBase);
126 
127  int n1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().number;
128  int n2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().number;
129 
130  switch(sequence) {
131  case POSITIVE_SEQ:
132  case NEGATIVE_SEQ: {
133  yBus[n1][n2] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
134  yBus[n2][n1] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
135 
136  yBus[n1][n1] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
137  yBus[n2][n2] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
138 
139  yBus[n1][n1] += std::complex<double>(0.0, data.capSusceptance / 2.0);
140  yBus[n2][n2] += std::complex<double>(0.0, data.capSusceptance / 2.0);
141  } break;
142  case ZERO_SEQ: {
143  yBus[n1][n2] -= 1.0 / std::complex<double>(data.zeroResistance, data.zeroIndReactance);
144  yBus[n2][n1] -= 1.0 / std::complex<double>(data.zeroResistance, data.zeroIndReactance);
145 
146  yBus[n1][n1] += 1.0 / std::complex<double>(data.zeroResistance, data.zeroIndReactance);
147  yBus[n2][n2] += 1.0 / std::complex<double>(data.zeroResistance, data.zeroIndReactance);
148 
149  yBus[n1][n1] += std::complex<double>(0.0, data.zeroCapSusceptance / 2.0);
150  yBus[n2][n2] += std::complex<double>(0.0, data.zeroCapSusceptance / 2.0);
151  }
152  }
153  }
154  }
155 
156  // Transformer
157  for(auto it = m_transformerList.begin(), itEnd = m_transformerList.end(); it != itEnd; ++it) {
158  Transformer* transformer = *it;
159 
160  if(transformer->IsOnline()) {
161  TransformerElectricalData data = transformer->GetPUElectricalData(systemPowerBase);
162 
163  int n1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().number;
164  int n2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().number;
165 
166  // If the transformer have nominal turns ratio (1.0) and no phase shifting, it will be modelled as series
167  // impedance.
168  if(data.turnsRatio == 1.0 && data.phaseShift == 0.0 && sequence != ZERO_SEQ) {
169  yBus[n1][n2] += -1.0 / std::complex<double>(data.resistance, data.indReactance);
170  yBus[n2][n1] += -1.0 / std::complex<double>(data.resistance, data.indReactance);
171 
172  yBus[n1][n1] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
173  yBus[n2][n2] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
174  }
175  // If the transformer have no-nominal turn ratio and/or phase shifting, it will be modelled in a different
176  // way (see references).
177  //[Ref. 1: Elementos de analise de sistemas de potencia - Stevenson - pg. 232]
178  //[Ref. 2: http://www.ee.washington.edu/research/real/Library/Reports/Tap_Adjustments_in_AC_Load_Flows.pdf]
179  //[Ref. 3: http://www.columbia.edu/~dano/courses/power/notes/power/andersson1.pdf]
180  else if(sequence != ZERO_SEQ) {
181  // Complex turns ratio
182  double radPhaseShift = wxDegToRad(data.phaseShift);
183  std::complex<double> a = std::complex<double>(data.turnsRatio * std::cos(radPhaseShift),
184  -data.turnsRatio * std::sin(radPhaseShift));
185 
186  // Transformer admitance
187  std::complex<double> y = 1.0 / std::complex<double>(data.resistance, data.indReactance);
188 
189  if(sequence == POSITIVE_SEQ) {
190  yBus[n1][n1] += y / std::pow(std::abs(a), 2.0);
191  yBus[n1][n2] += -(y / std::conj(a));
192  yBus[n2][n1] += -(y / a);
193  yBus[n2][n2] += y;
194  } else if(sequence == NEGATIVE_SEQ) {
195  yBus[n1][n1] += y / std::pow(std::abs(a), 2.0);
196  yBus[n1][n2] += -(y / a);
197  yBus[n2][n1] += -(y / std::conj(a));
198  yBus[n2][n2] += y;
199  }
200  } else if(sequence == ZERO_SEQ) {
201  switch(data.connection) {
202  case GWYE_GWYE: {
203  std::complex<double> y =
204  1.0 /
205  std::complex<double>(
206  data.zeroResistance + 3.0 * (data.primaryGrndResistance + data.secondaryGrndResistance),
207  data.zeroIndReactance +
208  3.0 * (data.primaryGrndReactance + data.secondaryGrndReactance));
209  std::complex<double> a = std::complex<double>(data.turnsRatio, 0.0);
210 
211  yBus[n1][n1] += y / (a * a);
212  yBus[n1][n2] += -(y / a);
213  yBus[n2][n1] += -(y / a);
214  yBus[n2][n2] += y;
215  } break;
216  case DELTA_GWYE: {
217  std::complex<double> y =
218  1.0 / std::complex<double>(data.zeroResistance + 3.0 * (data.secondaryGrndResistance),
219  data.zeroIndReactance + 3.0 * (data.secondaryGrndReactance));
220  yBus[n2][n2] += y;
221  break;
222  }
223  case GWYE_DELTA: {
224  std::complex<double> y =
225  1.0 / std::complex<double>(data.zeroResistance + 3.0 * (data.primaryGrndResistance),
226  data.zeroIndReactance + 3.0 * (data.primaryGrndReactance));
227  yBus[n1][n1] += y;
228  break;
229  }
230  default:
231  break;
232  }
233  }
234  }
235  }
236 
237  if(includeSyncMachines) {
238  // Synchronous generator
239  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
240  SyncGenerator* syncGenerator = *it;
241  if(syncGenerator->IsOnline()) {
242  int n = static_cast<Bus*>(syncGenerator->GetParentList()[0])->GetElectricalData().number;
243  SyncGeneratorElectricalData data = syncGenerator->GetPUElectricalData(systemPowerBase);
244  switch(sequence) {
245  case POSITIVE_SEQ: {
246  yBus[n][n] += 1.0 / std::complex<double>(data.positiveResistance, data.positiveReactance);
247  } break;
248  case NEGATIVE_SEQ: {
249  yBus[n][n] += 1.0 / std::complex<double>(data.negativeResistance, data.negativeReactance);
250  } break;
251  case ZERO_SEQ: {
252  if(data.groundNeutral) {
253  yBus[n][n] += 1.0 / std::complex<double>(data.zeroResistance + 3.0 * data.groundResistance,
254  data.zeroReactance + 3.0 * data.groundReactance);
255  }
256  } break;
257  }
258  }
259  }
260  // Synchronous motor
261  for(auto it = m_syncMotorList.begin(), itEnd = m_syncMotorList.end(); it != itEnd; ++it) {
262  SyncMotor* syncMotor = *it;
263  if(syncMotor->IsOnline()) {
264  int n = static_cast<Bus*>(syncMotor->GetParentList()[0])->GetElectricalData().number;
265  SyncMotorElectricalData data = syncMotor->GetPUElectricalData(systemPowerBase);
266  switch(sequence) {
267  case POSITIVE_SEQ: {
268  yBus[n][n] += 1.0 / std::complex<double>(data.positiveResistance, data.positiveReactance);
269  } break;
270  case NEGATIVE_SEQ: {
271  yBus[n][n] += 1.0 / std::complex<double>(data.negativeResistance, data.negativeReactance);
272  } break;
273  case ZERO_SEQ: {
274  if(data.groundNeutral) {
275  yBus[n][n] += 1.0 / std::complex<double>(data.zeroResistance + 3.0 * data.groundResistance,
276  data.zeroReactance + 3.0 * data.groundReactance);
277  }
278  } break;
279  }
280  }
281  }
282  }
283 
284  return true;
285 }
286 
287 void ElectricCalculation::UpdateElementsPowerFlow(std::vector<std::complex<double> > voltage,
288  std::vector<std::complex<double> > power,
289  std::vector<BusType> busType,
290  std::vector<ReactiveLimits> reactiveLimit,
291  double systemPowerBase)
292 {
293  double zeroLimit = 1e-4;
294  for(unsigned int i = 0; i < reactiveLimit.size(); ++i) {
295  if(reactiveLimit[i].maxLimit > -zeroLimit && reactiveLimit[i].maxLimit < zeroLimit)
296  reactiveLimit[i].maxLimit = zeroLimit;
297  if(reactiveLimit[i].minLimit > -zeroLimit && reactiveLimit[i].minLimit < zeroLimit)
298  reactiveLimit[i].minLimit = zeroLimit;
299  }
300  for(unsigned int i = 0; i < power.size(); ++i) {
301  if(std::real(power[i]) > -zeroLimit && std::real(power[i]) < zeroLimit)
302  power[i] = std::complex<double>(0.0, std::imag(power[i]));
303  if(std::imag(power[i]) > -zeroLimit && std::imag(power[i]) < zeroLimit)
304  power[i] = std::complex<double>(std::real(power[i]), 0.0);
305  }
306  // Buses
307  for(int i = 0; i < (int)m_busList.size(); i++) {
308  Bus* bus = m_busList[i];
309  BusElectricalData data = bus->GetElectricalData();
310  data.voltage = voltage[i];
311  data.power = power[i];
312  data.busType = busType[i];
313  bus->SetElectricalData(data);
314  }
315 
316  // Power line
317  for(int i = 0; i < (int)m_lineList.size(); i++) {
318  Line* line = m_lineList[i];
319  if(line->IsOnline()) {
320  int n1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().number;
321  int n2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().number;
322 
323  LineElectricalData data = line->GetElectricalData();
324  std::complex<double> v1 = voltage[n1];
325  std::complex<double> v2 = voltage[n2];
326 
327  data.current[0] = (v1 - v2) / std::complex<double>(data.resistance, data.indReactance) +
328  v1 * std::complex<double>(0.0, data.capSusceptance / 2.0);
329  data.current[1] = (v2 - v1) / std::complex<double>(data.resistance, data.indReactance) +
330  v2 * std::complex<double>(0.0, data.capSusceptance / 2.0);
331 
332  data.powerFlow[0] = v1 * std::conj(data.current[0]);
333  data.powerFlow[1] = v2 * std::conj(data.current[1]);
334 
335  if(data.powerFlow[0].real() > data.powerFlow[1].real())
337  else
339 
340  line->SetElectricalData(data);
341  }
342  }
343 
344  // Transformer
345  for(int i = 0; i < (int)m_transformerList.size(); i++) {
346  Transformer* transformer = m_transformerList[i];
347  if(transformer->IsOnline()) {
348  TransformerElectricalData data = transformer->GetElectricalData();
349  int n1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().number;
350  int n2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().number;
351  std::complex<double> v1 = voltage[n1]; // Primary voltage
352  std::complex<double> v2 = voltage[n2]; // Secondary voltage
353 
354  // Transformer admitance
355  std::complex<double> y = 1.0 / std::complex<double>(data.resistance, data.indReactance);
356 
357  if(data.turnsRatio == 1.0 && data.phaseShift == 0.0) {
358  data.current[0] = (v1 - v2) * y;
359  data.current[1] = (v2 - v1) * y;
360  } else {
361  double radPS = wxDegToRad(data.phaseShift);
362  std::complex<double> a =
363  std::complex<double>(data.turnsRatio * std::cos(radPS), -data.turnsRatio * std::sin(radPS));
364 
365  data.current[0] = v1 * (y / std::pow(std::abs(a), 2)) - v2 * (y / std::conj(a));
366  data.current[1] = -v1 * (y / a) + v2 * y;
367  }
368 
369  data.powerFlow[0] = v1 * std::conj(data.current[0]);
370  data.powerFlow[1] = v2 * std::conj(data.current[1]);
371 
372  if(data.powerFlow[0].real() > data.powerFlow[1].real())
374  else
376 
377  transformer->SetElectricaData(data);
378  }
379  }
380 
381  // Synchronous machines
382  for(int i = 0; i < (int)m_busList.size(); i++) {
383  Bus* bus = m_busList[i];
384  BusElectricalData data = bus->GetElectricalData();
385 
386  // Get the synchronous machines connected and calculate the load power on the bus.
387  std::vector<SyncGenerator*> syncGeneratorsOnBus;
388  std::vector<SyncMotor*> syncMotorsOnBus;
389  std::complex<double> loadPower(0.0, 0.0);
390 
391  for(auto itsg = m_syncGeneratorList.begin(); itsg != m_syncGeneratorList.end(); itsg++) {
392  SyncGenerator* syncGenerator = *itsg;
393  if(bus == syncGenerator->GetParentList()[0] && syncGenerator->IsOnline())
394  syncGeneratorsOnBus.push_back(syncGenerator);
395  }
396  for(auto itsm = m_syncMotorList.begin(); itsm != m_syncMotorList.end(); itsm++) {
397  SyncMotor* syncMotor = *itsm;
398  if(bus == syncMotor->GetParentList()[0] && syncMotor->IsOnline()) {
399  syncMotorsOnBus.push_back(syncMotor);
400  SyncMotorElectricalData childData = syncMotor->GetPUElectricalData(systemPowerBase);
401  loadPower += std::complex<double>(childData.activePower, 0.0);
402  }
403  }
404  for(auto itlo = m_loadList.begin(); itlo != m_loadList.end(); itlo++) {
405  Load* load = *itlo;
406  if(bus == load->GetParentList()[0] && load->IsOnline()) {
407  LoadElectricalData childData = load->GetPUElectricalData(systemPowerBase);
408  if(childData.loadType == CONST_POWER)
409  loadPower += std::complex<double>(childData.activePower, childData.reactivePower);
410 
411  if(childData.activePower >= 0.0)
413  else
415  }
416  }
417  for(auto itim = m_indMotorList.begin(); itim != m_indMotorList.end(); itim++) {
418  IndMotor* indMotor = *itim;
419  if(bus == indMotor->GetParentList()[0] && indMotor->IsOnline()) {
420  IndMotorElectricalData childData = indMotor->GetPUElectricalData(systemPowerBase);
421  loadPower += std::complex<double>(childData.activePower, childData.reactivePower);
422 
423  if(childData.activePower >= 0.0)
425  else
426  indMotor->SetPowerFlowDirection(PF_TO_BUS);
427  }
428  }
429 
430  // Set the sync generator power
431  for(auto itsg = syncGeneratorsOnBus.begin(); itsg != syncGeneratorsOnBus.end(); itsg++) {
432  SyncGenerator* generator = *itsg;
433  if(generator->IsOnline()) {
434  SyncGeneratorElectricalData childData = generator->GetElectricalData();
435 
436  if(busType[i] == BUS_SLACK) {
437  double activePower =
438  (power[i].real() + loadPower.real()) * systemPowerBase / (double)(syncGeneratorsOnBus.size());
439 
440  switch(childData.activePowerUnit) {
441  case UNIT_PU: {
442  activePower /= systemPowerBase;
443  } break;
444  case UNIT_kW: {
445  activePower /= 1e3;
446  } break;
447  case UNIT_MW: {
448  activePower /= 1e6;
449  } break;
450  default:
451  break;
452  }
453 
454  childData.activePower = activePower;
455  }
456  if(busType[i] == BUS_PV || busType[i] == BUS_SLACK) {
457  // double reactivePower = (power[i].imag() + loadPower.imag()) * systemPowerBase /
458  // (double)(syncGeneratorsOnBus.size() + syncMotorsOnBus.size());
459  SyncGeneratorElectricalData childData_PU = generator->GetPUElectricalData(systemPowerBase);
460 
461  double reactivePower = (power[i].imag() + loadPower.imag()) * systemPowerBase;
462 
463  if(reactiveLimit[i].limitReached == RL_MAX_REACHED)
464  reactivePower *= (childData_PU.maxReactive / reactiveLimit[i].maxLimit);
465 
466  else if(reactiveLimit[i].limitReached == RL_MIN_REACHED)
467  reactivePower *= (childData_PU.minReactive / reactiveLimit[i].minLimit);
468 
469  else
470  reactivePower /= (double)(syncGeneratorsOnBus.size() + syncMotorsOnBus.size());
471 
472  switch(childData.reactivePowerUnit) {
473  case UNIT_PU: {
474  reactivePower /= systemPowerBase;
475  } break;
476  case UNIT_kVAr: {
477  reactivePower /= 1e3;
478  } break;
479  case UNIT_MVAr: {
480  reactivePower /= 1e6;
481  } break;
482  default:
483  break;
484  }
485  childData.reactivePower = reactivePower;
486  }
487 
488  if(childData.activePower >= 0.0)
489  generator->SetPowerFlowDirection(PF_TO_BUS);
490  else
492 
493  generator->SetElectricalData(childData);
494  }
495  }
496 
497  // Set the sync motor reactive power
498  double exceededReactive = 0.0;
499  int numMachines = syncGeneratorsOnBus.size() + syncMotorsOnBus.size();
500  for(auto itsm = syncMotorsOnBus.begin(); itsm != syncMotorsOnBus.end(); itsm++) {
501  SyncMotor* syncMotor = *itsm;
502  SyncMotorElectricalData childData = syncMotor->GetElectricalData();
503 
504  bool reachedMachineLimit = false;
505 
506  if(busType[i] == BUS_PV || busType[i] == BUS_SLACK) {
507  // double reactivePower = (power[i].imag() + loadPower.imag()) * systemPowerBase /
508  // (double)(syncGeneratorsOnBus.size() + syncMotorsOnBus.size());
509 
510  SyncMotorElectricalData childData_PU = syncMotor->GetPUElectricalData(systemPowerBase);
511 
512  double reactivePower = power[i].imag() + loadPower.imag();
513 
514  // Bus reachd maximum reactive limit.
515  if(reactiveLimit[i].limitReached == RL_MAX_REACHED)
516  reactivePower *= (childData_PU.maxReactive / reactiveLimit[i].maxLimit);
517  // Bus reached minimum reactive limit.
518  else if(reactiveLimit[i].limitReached == RL_MIN_REACHED)
519  reactivePower *= (childData_PU.minReactive / reactiveLimit[i].minLimit);
520  // Bus didn't reach any limits
521  else {
522  reactivePower /= (double)(numMachines);
523  if(childData_PU.haveMaxReactive && (reactivePower > childData_PU.maxReactive)) {
524  exceededReactive += reactivePower - childData_PU.maxReactive;
525  reactivePower = childData_PU.maxReactive;
526  reachedMachineLimit = true;
527  } else if(childData_PU.haveMinReactive && (reactivePower < childData_PU.minReactive)) {
528  exceededReactive += reactivePower - childData_PU.minReactive;
529  reactivePower = childData_PU.minReactive;
530  reachedMachineLimit = true;
531  } else if((!childData_PU.haveMaxReactive && reactiveLimit[i].limitReached == RL_MAX_REACHED) ||
532  (!childData_PU.haveMinReactive && reactiveLimit[i].limitReached == RL_MIN_REACHED) ||
533  (!childData_PU.haveMaxReactive && !childData_PU.haveMaxReactive)) {
534  reactivePower += exceededReactive;
535  exceededReactive = 0.0;
536  }
537  }
538 
539  reactivePower *= systemPowerBase;
540 
541  switch(childData.reactivePowerUnit) {
542  case UNIT_PU: {
543  reactivePower /= systemPowerBase;
544  } break;
545  case UNIT_kVAr: {
546  reactivePower /= 1e3;
547  } break;
548  case UNIT_MVAr: {
549  reactivePower /= 1e6;
550  } break;
551  default:
552  break;
553  }
554  childData.reactivePower = reactivePower;
555  }
556 
557  if(childData.activePower > 0.0)
559  else
560  syncMotor->SetPowerFlowDirection(PF_TO_BUS);
561 
562  syncMotor->SetElectricalData(childData);
563 
564  if(reachedMachineLimit) {
565  syncMotorsOnBus.erase(itsm);
566  itsm = syncMotorsOnBus.begin();
567  }
568  }
569  }
570 }
571 
572 bool ElectricCalculation::InvertMatrix(std::vector<std::vector<std::complex<double> > > matrix,
573  std::vector<std::vector<std::complex<double> > >& inverse)
574 {
575  int order = static_cast<int>(matrix.size());
576 
577  inverse.clear();
578  // Fill the inverse matrix with identity.
579  for(int i = 0; i < order; ++i) {
580  std::vector<std::complex<double> > line;
581  for(int j = 0; j < order; ++j) {
582  line.push_back(i == j ? std::complex<double>(1.0, 0.0) : std::complex<double>(0.0, 0.0));
583  }
584  inverse.push_back(line);
585  }
586 
587  // Check if a main diagonal value of the matrix is zero, if one is zero, try a linear combination to remove it.
588  for(int i = 0; i < order; ++i) {
589  for(int j = 0; j < order; ++j) {
590  if(i == j && matrix[i][j] == std::complex<double>(0.0, 0.0)) {
591  int row = 0;
592  while(row < order) {
593  if(matrix[row][j] != std::complex<double>(0.0, 0.0)) {
594  for(int k = 0; k < order; ++k) {
595  matrix[i][k] += matrix[row][k];
596  inverse[i][k] += inverse[row][k];
597  }
598  break;
599  }
600  row++;
601  }
602  // If all line values are zero, the matrix is singular and the solution is impossible.
603  if(row == order) return false;
604  }
605  }
606  }
607 
608  // Linear combinations are made in both matrices, the goal is the input matrix become the identity. The final result
609  // have two matrices: the identity and the inverse of the input.
610  for(int i = 0; i < order; ++i) {
611  for(int j = 0; j < order; ++j) {
612  if(i != j) {
613  if(matrix[i][i] == std::complex<double>(0.0, 0.0)) return false;
614 
615  std::complex<double> factor = matrix[j][i] / matrix[i][i];
616  for(int k = 0; k < order; ++k) {
617  matrix[j][k] -= factor * matrix[i][k];
618  inverse[j][k] -= factor * inverse[i][k];
619  }
620  }
621  }
622  }
623  // Main diagonal calculation.
624  for(int i = 0; i < order; ++i) {
625  for(int j = 0; j < order; ++j) {
626  if(i == j) {
627  if(matrix[i][j] == std::complex<double>(0.0, 0.0)) return false;
628 
629  std::complex<double> factor = (matrix[i][j] - std::complex<double>(1.0, 0.0)) / matrix[i][j];
630  for(int k = 0; k < order; ++k) {
631  matrix[j][k] -= factor * matrix[i][k];
632  inverse[j][k] -= factor * inverse[i][k];
633  }
634  }
635  }
636  }
637 
638  return true;
639 }
640 
641 void ElectricCalculation::ABCtoDQ0(std::complex<double> complexValue, double angle, double& dValue, double& qValue)
642 {
643  dValue = -std::real(complexValue) * std::sin(angle) + std::imag(complexValue) * std::cos(angle);
644  qValue = std::real(complexValue) * std::cos(angle) + std::imag(complexValue) * std::sin(angle);
645 }
646 
647 void ElectricCalculation::DQ0toABC(double dValue, double qValue, double angle, std::complex<double>& complexValue)
648 {
649  double real = qValue * std::cos(angle) - dValue * std::sin(angle);
650  double imag = qValue * std::sin(angle) + dValue * std::cos(angle);
651  complexValue = std::complex<double>(real, imag);
652 }
653 
654 std::vector<std::complex<double> > ElectricCalculation::GaussianElimination(
655  std::vector<std::vector<std::complex<double> > > matrix,
656  std::vector<std::complex<double> > array)
657 {
658  //[Ref] http://pt.wikipedia.org/wiki/Elimina%C3%A7%C3%A3o_de_Gauss
659 
660  std::vector<std::complex<double> > solution;
661 
662  std::vector<std::vector<std::complex<double> > > triangMatrix;
663  triangMatrix.resize(matrix.size());
664  for(unsigned int i = 0; i < matrix.size(); i++) {
665  triangMatrix[i].resize(matrix.size());
666  }
667 
668  for(unsigned int i = 0; i < matrix.size(); i++) {
669  solution.push_back(array[i]);
670  }
671 
672  for(unsigned int i = 0; i < matrix.size(); i++) {
673  for(unsigned int j = 0; j < matrix.size(); j++) {
674  triangMatrix[i][j] = matrix[i][j];
675  }
676  }
677 
678  for(unsigned int k = 0; k < matrix.size(); k++) {
679  unsigned int k1 = k + 1;
680  for(unsigned int i = k; i < matrix.size(); i++) {
681  if(triangMatrix[i][k] != std::complex<double>(0.0, 0.0)) {
682  for(unsigned int j = k1; j < matrix.size(); j++) {
683  triangMatrix[i][j] = triangMatrix[i][j] / triangMatrix[i][k];
684  }
685  solution[i] = solution[i] / triangMatrix[i][k];
686  }
687  }
688  for(unsigned int i = k1; i < matrix.size(); i++) {
689  if(triangMatrix[i][k] != std::complex<double>(0.0, 0.0)) {
690  for(unsigned int j = k1; j < matrix.size(); j++) {
691  triangMatrix[i][j] -= triangMatrix[k][j];
692  }
693  solution[i] -= solution[k];
694  }
695  }
696  }
697  for(unsigned int i = matrix.size() - 2; i >= 0; i--) {
698  for(unsigned int j = matrix.size() - 1; j >= i + 1; j--) {
699  solution[i] -= triangMatrix[i][j] * solution[j];
700  }
701  }
702 
703  return solution;
704 }
705 
706 Machines::SyncMachineModel ElectricCalculation::GetMachineModel(SyncGenerator* generator)
707 {
708  auto data = generator->GetElectricalData();
709  if(data.transTd0 != 0.0) {
710  if(data.transTq0 != 0.0) {
711  if(data.subTd0 != 0.0 || data.subTq0 != 0.0) {
712  return Machines::SM_MODEL_5;
713  }
714  return Machines::SM_MODEL_3;
715  } else {
716  if(data.subTd0 != 0.0 || data.subTq0 != 0.0) {
717  return Machines::SM_MODEL_4;
718  }
719  return Machines::SM_MODEL_2;
720  }
721  }
722 
723  return Machines::SM_MODEL_1;
724 }
725 
726 std::vector<std::complex<double> > ElectricCalculation::ComplexMatrixTimesVector(
727  std::vector<std::vector<std::complex<double> > > matrix,
728  std::vector<std::complex<double> > vector)
729 {
730  std::vector<std::complex<double> > solution;
731  for(unsigned int i = 0; i < matrix.size(); i++) {
732  solution.push_back(std::complex<double>(0.0, 0.0));
733 
734  for(unsigned int j = 0; j < matrix.size(); j++) {
735  solution[i] += matrix[i][j] * vector[j];
736  }
737  }
738 
739  return solution;
740 }
741 
742 void ElectricCalculation::GetLUDecomposition(std::vector<std::vector<std::complex<double> > > matrix,
743  std::vector<std::vector<std::complex<double> > >& matrixL,
744  std::vector<std::vector<std::complex<double> > >& matrixU)
745 {
746  // Doolittle method
747  // [Ref] http://www3.nd.edu/~zxu2/acms40390F11/Alg-LU-Crout.pdf
748  // [Ref] http://www.engr.colostate.edu/~thompson/hPage/CourseMat/Tutorials/CompMethods/doolittle.pdf
749 
750  int size = static_cast<int>(matrix.size()); // Decomposed matrix size.
751 
752  // Set upper and lower matrices sizes.
753  matrixL.resize(size);
754  matrixU.resize(size);
755  for(int i = 0; i < size; i++) {
756  matrixL[i].resize(size);
757  matrixU[i].resize(size);
758  }
759 
760  // First row of upper matrix and first column of lower matrix.
761  for(int i = 0; i < size; i++) {
762  matrixU[0][i] = matrix[0][i];
763  matrixL[i][0] = matrix[i][0] / matrixU[0][0];
764  }
765 
766  // Lower matrix main diagonal.
767  for(int i = 1; i < size; i++) {
768  matrixL[i][i] = std::complex<double>(1.0, 0.0);
769  }
770 
771  for(int i = 1; i < size - 1; i++) {
772  // Upper matrix main diagonal.
773  matrixU[i][i] = matrix[i][i];
774  for(int k = 0; k < i; k++) {
775  matrixU[i][i] -= matrixL[i][k] * matrixU[k][i];
776  }
777 
778  // Others elements of upper matrix
779  for(int j = i + 1; j < size; j++) {
780  matrixU[i][j] = matrix[i][j];
781  for(int k = 0; k < i; k++) {
782  matrixU[i][j] -= matrixL[i][k] * matrixU[k][j];
783  }
784  }
785 
786  // Lower matrix elements
787  for(int j = i + 1; j < size; j++) {
788  matrixL[j][i] = matrix[j][i];
789  for(int k = 0; k < i; k++) {
790  matrixL[j][i] -= matrixL[j][k] * matrixU[k][i];
791  }
792  matrixL[j][i] = matrixL[j][i] / matrixU[i][i];
793  }
794  }
795 
796  // Last element of upper matrix.
797  matrixU[size - 1][size - 1] = matrix[size - 1][size - 1];
798  for(int k = 0; k < size - 1; k++) {
799  matrixU[size - 1][size - 1] -= matrixL[size - 1][k] * matrixU[k][size - 1];
800  }
801 }
802 
803 std::vector<std::complex<double> > ElectricCalculation::LUEvaluate(std::vector<std::vector<std::complex<double> > > u,
804  std::vector<std::vector<std::complex<double> > > l,
805  std::vector<std::complex<double> > b)
806 {
807  int size = static_cast<int>(b.size());
808  std::vector<std::complex<double> > x;
809  std::vector<std::complex<double> > y;
810  x.resize(size);
811  y.resize(size);
812 
813  // Forward
814  for(int i = 0; i < size; i++) {
815  y[i] = b[i];
816  for(int j = 0; j < i; j++) {
817  y[i] -= l[i][j] * y[j];
818  }
819  y[i] /= l[i][i];
820  }
821  // Backward
822  for(int i = size - 1; i >= 0; i--) {
823  x[i] = y[i];
824  for(int j = i + 1; j < size; j++) {
825  x[i] -= u[i][j] * x[j];
826  }
827  x[i] /= u[i][i];
828  }
829  return x;
830 }
+ + +
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: PowerElement.h:170
+
Base class of electric calculations, with general methods.
+ + + + + + + +
Definition: Bus.h:45
+
~ElectricCalculation()
Destructor.
+
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: Machines.cpp:250
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
+ +
virtual bool InvertMatrix(std::vector< std::vector< std::complex< double > > > matrix, std::vector< std::vector< std::complex< double > > > &inverse)
Invert a matrix.
+
Definition: Line.h:35
+
Definition: Load.h:23
+ + + +
virtual bool GetYBus(std::vector< std::vector< std::complex< double > > > &yBus, double systemPowerBase, YBusSequence sequence=POSITIVE_SEQ, bool includeSyncMachines=false, bool allLoadsAsImpedances=false)
Get the admittance matrix from the list of elements (use GetElementsFromList first).
+
virtual void UpdateElementsPowerFlow(std::vector< std::complex< double > > voltage, std::vector< std::complex< double > > power, std::vector< BusType > busType, std::vector< ReactiveLimits > reactiveLimit, double systemPowerBase)
Update the elements after the power flow calculation.
+ + + +
ElectricCalculation()
Constructor.
+ + + + +
virtual void GetElementsFromList(std::vector< Element *> elementList)
Separate the power elements from a generic list.
+ +
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: Line.cpp:429
+ + + +
+
+ + + + diff --git a/docs/doxygen/html/_electric_calculation_8h.html b/docs/doxygen/html/_electric_calculation_8h.html index acd6669..60d6a2b 100644 --- a/docs/doxygen/html/_electric_calculation_8h.html +++ b/docs/doxygen/html/_electric_calculation_8h.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ElectricCalculation.h File Reference +Project/ElectricCalculation.h File Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Classes | @@ -125,12 +136,18 @@ Enumerations

Detailed Description

Base class of electric calculations, with general methods.

+ +

Definition in file ElectricCalculation.h.

+
- + diff --git a/docs/doxygen/html/_electric_calculation_8h.js b/docs/doxygen/html/_electric_calculation_8h.js new file mode 100644 index 0000000..2f68283 --- /dev/null +++ b/docs/doxygen/html/_electric_calculation_8h.js @@ -0,0 +1,23 @@ +var _electric_calculation_8h = +[ + [ "ReactiveLimits", "struct_reactive_limits.html", "struct_reactive_limits" ], + [ "ElectricCalculation", "class_electric_calculation.html", "class_electric_calculation" ], + [ "BusType", "_electric_calculation_8h.html#a5e19c75c2809d2f27eb33a29d1971b46", [ + [ "BUS_SLACK", "_electric_calculation_8h.html#a5e19c75c2809d2f27eb33a29d1971b46a502b94576742ccd5df46407ac01bbcd6", null ], + [ "BUS_PV", "_electric_calculation_8h.html#a5e19c75c2809d2f27eb33a29d1971b46a82584a6aa91d3c5104441f8de8635923", null ], + [ "BUS_PQ", "_electric_calculation_8h.html#a5e19c75c2809d2f27eb33a29d1971b46ad34e8d84ffe84ee6201c93fd25a1db83", null ] + ] ], + [ "ReactiveLimitsType", "_electric_calculation_8h.html#aa48d3d150889a89c491c9792ca3bc8a5", [ + [ "RL_UNLIMITED", "_electric_calculation_8h.html#aa48d3d150889a89c491c9792ca3bc8a5af7f144f6e36ccb2e09f39f5b9df6ef18", null ], + [ "RL_LIMITED", "_electric_calculation_8h.html#aa48d3d150889a89c491c9792ca3bc8a5ab5a1a790b2ca08fc88022b3064974bbb", null ], + [ "RL_UNLIMITED_SOURCE", "_electric_calculation_8h.html#aa48d3d150889a89c491c9792ca3bc8a5afe82ead3835d251dfa6f0e453465caec", null ], + [ "RL_MAX_REACHED", "_electric_calculation_8h.html#aa48d3d150889a89c491c9792ca3bc8a5a44cfc2c558ec78c54440a7ca4648ffdf", null ], + [ "RL_MIN_REACHED", "_electric_calculation_8h.html#aa48d3d150889a89c491c9792ca3bc8a5a733a0e8704a7a915b09f3d05e2a4bc44", null ], + [ "RL_NONE_REACHED", "_electric_calculation_8h.html#aa48d3d150889a89c491c9792ca3bc8a5a9635d4cfa6b2fc11d090759fbb3f1eff", null ] + ] ], + [ "YBusSequence", "_electric_calculation_8h.html#a73321f98d9ea4582f9de005ef5ed8594", [ + [ "POSITIVE_SEQ", "_electric_calculation_8h.html#a73321f98d9ea4582f9de005ef5ed8594a0144b06216b82fd068983a2852d0a932", null ], + [ "NEGATIVE_SEQ", "_electric_calculation_8h.html#a73321f98d9ea4582f9de005ef5ed8594a1e62759b7c2cceb121f3888cd0581579", null ], + [ "ZERO_SEQ", "_electric_calculation_8h.html#a73321f98d9ea4582f9de005ef5ed8594a5e496f6aa3a618c364e3ca1b7e01a15e", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/_electric_calculation_8h_source.html b/docs/doxygen/html/_electric_calculation_8h_source.html index 6e89f17..388a08f 100644 --- a/docs/doxygen/html/_electric_calculation_8h_source.html +++ b/docs/doxygen/html/_electric_calculation_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ElectricCalculation.h Source File +Project/ElectricCalculation.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ElectricCalculation.h
-Go to the documentation of this file.
1 #ifndef ELECTRICCALCULATION_H
2 #define ELECTRICCALCULATION_H
3 
4 #include <vector>
5 #include <complex>
6 
7 #include "Element.h"
8 #include "PowerElement.h"
9 #include "Bus.h"
10 #include "Capacitor.h"
11 #include "IndMotor.h"
12 #include "Inductor.h"
13 #include "Line.h"
14 #include "Load.h"
15 #include "SyncGenerator.h"
16 #include "SyncMotor.h"
17 #include "Transformer.h"
18 
19 #include "PropertiesData.h"
20 
21 enum BusType { BUS_SLACK = 0, BUS_PV, BUS_PQ };
22 
23 enum ReactiveLimitsType {
24  RL_UNLIMITED = 0, // The bus can generate any ammount of reactive power.
25  RL_LIMITED, // The bus reactive power generation is limited.
26  RL_UNLIMITED_SOURCE, // The bus have at least one source of infinite reative power.
27  RL_MAX_REACHED, // Max limit reached
28  RL_MIN_REACHED, // Min limit reached
29  RL_NONE_REACHED // No limits reached
30 };
31 
32 enum YBusSequence { POSITIVE_SEQ = 0, NEGATIVE_SEQ, ZERO_SEQ };
33 
35  double maxLimit = 0.0;
36  double minLimit = 0.0;
37  ReactiveLimitsType maxLimitType = RL_UNLIMITED;
38  ReactiveLimitsType minLimitType = RL_UNLIMITED;
39  ReactiveLimitsType limitReached = RL_NONE_REACHED;
40 };
41 
50 {
51  public:
56 
61 
66  virtual void GetElementsFromList(std::vector<Element*> elementList);
67 
76  virtual bool GetYBus(std::vector<std::vector<std::complex<double> > >& yBus,
77  double systemPowerBase,
78  YBusSequence sequence = POSITIVE_SEQ,
79  bool includeSyncMachines = false,
80  bool allLoadsAsImpedances = false);
81 
88  virtual bool InvertMatrix(std::vector<std::vector<std::complex<double> > > matrix,
89  std::vector<std::vector<std::complex<double> > >& inverse);
90 
99  virtual void UpdateElementsPowerFlow(std::vector<std::complex<double> > voltage,
100  std::vector<std::complex<double> > power,
101  std::vector<BusType> busType,
102  std::vector<ReactiveLimits> reactiveLimit,
103  double systemPowerBase);
104 
105  void ABCtoDQ0(std::complex<double> complexValue, double angle, double& dValue, double& qValue);
106  void DQ0toABC(double dValue, double qValue, double angle, std::complex<double>& complexValue);
107 
108  std::vector<std::complex<double> > GaussianElimination(std::vector<std::vector<std::complex<double> > > matrix,
109  std::vector<std::complex<double> > array);
110 
111  Machines::SyncMachineModel GetMachineModel(SyncGenerator* generator);
112 
113  std::vector<std::complex<double> > ComplexMatrixTimesVector(std::vector<std::vector<std::complex<double> > > matrix,
114  std::vector<std::complex<double> > vector);
115 
116  void GetLUDecomposition(std::vector<std::vector<std::complex<double> > > matrix,
117  std::vector<std::vector<std::complex<double> > >& matrixL,
118  std::vector<std::vector<std::complex<double> > >& matrixU);
119 
120  std::vector<std::complex<double> > LUEvaluate(std::vector<std::vector<std::complex<double> > > u,
121  std::vector<std::vector<std::complex<double> > > l,
122  std::vector<std::complex<double> > b);
123 
128  const std::vector<Bus*> GetBusList() const { return m_busList; }
133  const std::vector<Capacitor*> GetCapacitorList() const { return m_capacitorList; }
138  const std::vector<IndMotor*> GetIndMotorList() const { return m_indMotorList; }
143  const std::vector<Inductor*> GetInductorList() const { return m_inductorList; }
148  const std::vector<Line*> GetLineList() const { return m_lineList; }
153  const std::vector<Load*> GetLoadList() const { return m_loadList; }
158  const std::vector<SyncGenerator*> GetSyncGeneratorList() const { return m_syncGeneratorList; }
163  const std::vector<SyncMotor*> GetSyncMotorList() const { return m_syncMotorList; }
168  const std::vector<Transformer*> GetTransformerList() const { return m_transformerList; }
169  protected:
170  std::vector<PowerElement*> m_powerElementList;
171  std::vector<Bus*> m_busList;
172  std::vector<Capacitor*> m_capacitorList;
173  std::vector<IndMotor*> m_indMotorList;
174  std::vector<Inductor*> m_inductorList;
175  std::vector<Line*> m_lineList;
176  std::vector<Load*> m_loadList;
177  std::vector<SyncGenerator*> m_syncGeneratorList;
178  std::vector<SyncMotor*> m_syncMotorList;
179  std::vector<Transformer*> m_transformerList;
180 };
181 
182 #endif // ELECTRICCALCULATION_H
const std::vector< Transformer * > GetTransformerList() const
Get the transformers of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:168
-
const std::vector< IndMotor * > GetIndMotorList() const
Get the induction motors of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:138
-
Definition: ElectricCalculation.h:34
-
Definition: SyncGenerator.h:110
-
const std::vector< Bus * > GetBusList() const
Get the buses of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:128
-
const std::vector< SyncGenerator * > GetSyncGeneratorList() const
Get the synchronous generators of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:158
-
const std::vector< Inductor * > GetInductorList() const
Get the inductors of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:143
+Go to the documentation of this file.
1 #ifndef ELECTRICCALCULATION_H
2 #define ELECTRICCALCULATION_H
3 
4 #include <vector>
5 #include <complex>
6 
7 #include "Element.h"
8 #include "PowerElement.h"
9 #include "Bus.h"
10 #include "Capacitor.h"
11 #include "IndMotor.h"
12 #include "Inductor.h"
13 #include "Line.h"
14 #include "Load.h"
15 #include "SyncGenerator.h"
16 #include "SyncMotor.h"
17 #include "Transformer.h"
18 
19 #include "PropertiesData.h"
20 
21 enum BusType { BUS_SLACK = 0, BUS_PV, BUS_PQ };
22 
23 enum ReactiveLimitsType {
24  RL_UNLIMITED = 0, // The bus can generate any ammount of reactive power.
25  RL_LIMITED, // The bus reactive power generation is limited.
26  RL_UNLIMITED_SOURCE, // The bus have at least one source of infinite reative power.
27  RL_MAX_REACHED, // Max limit reached
28  RL_MIN_REACHED, // Min limit reached
29  RL_NONE_REACHED // No limits reached
30 };
31 
32 enum YBusSequence { POSITIVE_SEQ = 0, NEGATIVE_SEQ, ZERO_SEQ };
33 
35  double maxLimit = 0.0;
36  double minLimit = 0.0;
37  ReactiveLimitsType maxLimitType = RL_UNLIMITED;
38  ReactiveLimitsType minLimitType = RL_UNLIMITED;
39  ReactiveLimitsType limitReached = RL_NONE_REACHED;
40 };
41 
50 {
51  public:
56 
61 
66  virtual void GetElementsFromList(std::vector<Element*> elementList);
67 
76  virtual bool GetYBus(std::vector<std::vector<std::complex<double> > >& yBus,
77  double systemPowerBase,
78  YBusSequence sequence = POSITIVE_SEQ,
79  bool includeSyncMachines = false,
80  bool allLoadsAsImpedances = false);
81 
88  virtual bool InvertMatrix(std::vector<std::vector<std::complex<double> > > matrix,
89  std::vector<std::vector<std::complex<double> > >& inverse);
90 
99  virtual void UpdateElementsPowerFlow(std::vector<std::complex<double> > voltage,
100  std::vector<std::complex<double> > power,
101  std::vector<BusType> busType,
102  std::vector<ReactiveLimits> reactiveLimit,
103  double systemPowerBase);
104 
105  void ABCtoDQ0(std::complex<double> complexValue, double angle, double& dValue, double& qValue);
106  void DQ0toABC(double dValue, double qValue, double angle, std::complex<double>& complexValue);
107 
108  std::vector<std::complex<double> > GaussianElimination(std::vector<std::vector<std::complex<double> > > matrix,
109  std::vector<std::complex<double> > array);
110 
111  Machines::SyncMachineModel GetMachineModel(SyncGenerator* generator);
112 
113  std::vector<std::complex<double> > ComplexMatrixTimesVector(std::vector<std::vector<std::complex<double> > > matrix,
114  std::vector<std::complex<double> > vector);
115 
116  void GetLUDecomposition(std::vector<std::vector<std::complex<double> > > matrix,
117  std::vector<std::vector<std::complex<double> > >& matrixL,
118  std::vector<std::vector<std::complex<double> > >& matrixU);
119 
120  std::vector<std::complex<double> > LUEvaluate(std::vector<std::vector<std::complex<double> > > u,
121  std::vector<std::vector<std::complex<double> > > l,
122  std::vector<std::complex<double> > b);
123 
128  const std::vector<Bus*> GetBusList() const { return m_busList; }
133  const std::vector<Capacitor*> GetCapacitorList() const { return m_capacitorList; }
138  const std::vector<IndMotor*> GetIndMotorList() const { return m_indMotorList; }
143  const std::vector<Inductor*> GetInductorList() const { return m_inductorList; }
148  const std::vector<Line*> GetLineList() const { return m_lineList; }
153  const std::vector<Load*> GetLoadList() const { return m_loadList; }
158  const std::vector<SyncGenerator*> GetSyncGeneratorList() const { return m_syncGeneratorList; }
163  const std::vector<SyncMotor*> GetSyncMotorList() const { return m_syncMotorList; }
168  const std::vector<Transformer*> GetTransformerList() const { return m_transformerList; }
169  protected:
170  std::vector<PowerElement*> m_powerElementList;
171  std::vector<Bus*> m_busList;
172  std::vector<Capacitor*> m_capacitorList;
173  std::vector<IndMotor*> m_indMotorList;
174  std::vector<Inductor*> m_inductorList;
175  std::vector<Line*> m_lineList;
176  std::vector<Load*> m_loadList;
177  std::vector<SyncGenerator*> m_syncGeneratorList;
178  std::vector<SyncMotor*> m_syncMotorList;
179  std::vector<Transformer*> m_transformerList;
180 };
181 
182 #endif // ELECTRICCALCULATION_H
const std::vector< Transformer * > GetTransformerList() const
Get the transformers of the system (use GetElementsFromList first).
+
const std::vector< IndMotor * > GetIndMotorList() const
Get the induction motors of the system (use GetElementsFromList first).
+ + +
const std::vector< Bus * > GetBusList() const
Get the buses of the system (use GetElementsFromList first).
+
const std::vector< SyncGenerator * > GetSyncGeneratorList() const
Get the synchronous generators of the system (use GetElementsFromList first).
+
const std::vector< Inductor * > GetInductorList() const
Get the inductors of the system (use GetElementsFromList first).
Class to manage color of OpenGL.
-
const std::vector< Capacitor * > GetCapacitorList() const
Get the capacitors of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:133
-
const std::vector< Load * > GetLoadList() const
Get the loads of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:153
+
const std::vector< Capacitor * > GetCapacitorList() const
Get the capacitors of the system (use GetElementsFromList first).
+
const std::vector< Load * > GetLoadList() const
Get the loads of the system (use GetElementsFromList first).
Switching data of power elements.
-
const std::vector< SyncMotor * > GetSyncMotorList() const
Get the synchronous motors of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:163
-
Definition: ElectricCalculation.h:49
-
const std::vector< Line * > GetLineList() const
Get the lines of the system (use GetElementsFromList first).
Definition: ElectricCalculation.h:148
+
const std::vector< SyncMotor * > GetSyncMotorList() const
Get the synchronous motors of the system (use GetElementsFromList first).
+ +
const std::vector< Line * > GetLineList() const
Get the lines of the system (use GetElementsFromList first).
+
- + diff --git a/docs/doxygen/html/_electromechanical_8cpp_source.html b/docs/doxygen/html/_electromechanical_8cpp_source.html new file mode 100644 index 0000000..b947f03 --- /dev/null +++ b/docs/doxygen/html/_electromechanical_8cpp_source.html @@ -0,0 +1,128 @@ + + + + + + + +Project/Electromechanical.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Electromechanical.cpp
+
+
+
1 #include "Electromechanical.h"
2 #include "ControlElementSolver.h"
3 
4 Electromechanical::Electromechanical(wxWindow* parent, std::vector<Element*> elementList, SimulationData data)
5 {
6  m_parent = parent;
7  GetElementsFromList(elementList);
8  SetEventTimeList();
9 
10  m_powerSystemBase = GetPowerValue(data.basePower, data.basePowerUnit);
11  m_systemFreq = data.stabilityFrequency;
12  m_simTime = data.stabilitySimulationTime;
13  m_timeStep = data.timeStep;
14  m_tolerance = data.stabilityTolerance;
15  m_maxIterations = data.stabilityMaxIterations;
16 
17  m_ctrlTimeStepMultiplier = 1.0 / static_cast<double>(data.controlTimeStepRatio);
18 
19  m_plotTime = data.plotTime;
20  m_useCOI = data.useCOI;
21 }
22 
23 Electromechanical::~Electromechanical() {}
24 bool Electromechanical::RunStabilityCalculation()
25 {
26  wxProgressDialog pbd(_("Running simulation"), _("Initializing..."), 100, m_parent,
27  wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_CAN_ABORT | wxPD_SMOOTH);
28 
29  SetSyncMachinesModel();
30 
31  // Calculate the admittance matrix with the synchronous machines.
32  if(!GetYBus(m_yBus, m_powerSystemBase, POSITIVE_SEQ, false, true)) {
33  m_errorMsg = _("It was not possible to build the admittance matrix.");
34  return false;
35  }
36  InsertSyncMachinesOnYBus();
37  GetLUDecomposition(m_yBus, m_yBusL, m_yBusU);
38 
39  // Get buses voltages.
40  m_vBus.clear();
41  m_vBus.resize(m_busList.size());
42  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
43  Bus* bus = *it;
44  auto data = bus->GetElectricalData();
45  m_vBus[data.number] = data.voltage;
46  }
47 
48  // Calculate injected currents
49  m_iBus = ComplexMatrixTimesVector(m_yBus, m_vBus);
50  for(unsigned int i = 0; i < m_iBus.size(); ++i) {
51  if(std::abs(m_iBus[i]) < 1e-5) m_iBus[i] = std::complex<double>(0.0, 0.0);
52  }
53 
54  if(!InitializeDynamicElements()) return false;
55 
56  double pbdTime = m_plotTime;
57  double currentTime = 0.0;
58  double currentPlotTime = 0.0;
59  double currentPbdTime = 0.0;
60  while(currentTime < m_simTime) {
61  if(HasEvent(currentTime)) {
62  SetEvent(currentTime);
63  GetLUDecomposition(m_yBus, m_yBusL, m_yBusU);
64  }
65 
66  if(currentPlotTime >= m_plotTime || currentTime == 0.0) {
67  m_timeVector.push_back(currentTime);
68  SaveData();
69  currentPlotTime = 0.0;
70  }
71 
72  if(currentPbdTime > pbdTime) {
73  if(!pbd.Update((currentTime / m_simTime) * 100, wxString::Format("Time = %.2fs", currentTime))) {
74  m_errorMsg = wxString::Format(_("Simulation cancelled at %.2fs."), currentTime);
75  pbd.Update(100);
76  return false;
77  }
78  currentPbdTime = 0.0;
79  }
80 
81  if(!SolveSynchronousMachines()) return false;
82 
83  currentTime += m_timeStep;
84  currentPlotTime += m_timeStep;
85  currentPbdTime += m_timeStep;
86  }
87  return true;
88 }
89 
90 void Electromechanical::SetEventTimeList()
91 {
92  // Fault
93  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
94  Bus* bus = *it;
95  auto data = bus->GetElectricalData();
96  if(data.stabHasFault) {
97  m_eventTimeList.push_back(data.stabFaultTime);
98  m_eventOccurrenceList.push_back(false);
99  m_eventTimeList.push_back(data.stabFaultTime + data.stabFaultLength);
100  m_eventOccurrenceList.push_back(false);
101  }
102  }
103  // Switching
104  for(auto it = m_powerElementList.begin(), itEnd = m_powerElementList.end(); it != itEnd; ++it) {
105  PowerElement* element = *it;
106  SwitchingData swData = element->GetSwitchingData();
107  for(unsigned int i = 0; i < swData.swTime.size(); ++i) {
108  m_eventTimeList.push_back(swData.swTime[i]);
109  m_eventOccurrenceList.push_back(false);
110  }
111  }
112 }
113 
114 bool Electromechanical::HasEvent(double currentTime)
115 {
116  for(unsigned int i = 0; i < m_eventTimeList.size(); ++i) {
117  if(!m_eventOccurrenceList[i]) {
118  if(EventTrigger(m_eventTimeList[i], currentTime)) {
119  m_eventOccurrenceList[i] = true;
120  return true;
121  }
122  }
123  }
124  return false;
125 }
126 
127 void Electromechanical::SetEvent(double currentTime)
128 {
129  // Fault
130  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
131  Bus* bus = *it;
132  auto data = bus->GetElectricalData();
133  if(data.stabHasFault) {
134  int n = data.number;
135 
136  // Insert fault
137  if(EventTrigger(data.stabFaultTime, currentTime)) {
138  double r, x;
139  r = data.stabFaultResistance;
140  x = data.stabFaultReactance;
141  if(x < 1e-5) x = 1e-5;
142  m_yBus[n][n] += std::complex<double>(1.0, 0.0) / std::complex<double>(r, x);
143  }
144 
145  // Remove fault
146  else if(EventTrigger(data.stabFaultTime + data.stabFaultLength, currentTime)) {
147  double r, x;
148  r = data.stabFaultResistance;
149  x = data.stabFaultReactance;
150  if(x < 1e-5) x = 1e-5;
151  m_yBus[n][n] -= std::complex<double>(1.0, 0.0) / std::complex<double>(r, x);
152  }
153  }
154  }
155 
156  // SyncGenerator switching
157  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
158  SyncGenerator* generator = *it;
159  auto swData = generator->GetSwitchingData();
160  for(unsigned int i = 0; i < swData.swType.size(); ++i) {
161  if(EventTrigger(swData.swTime[i], currentTime)) {
162  // Remove machine (only connected machines)
163  if(swData.swType[i] == SW_REMOVE && generator->IsOnline()) {
164  generator->SetOnline(false);
165  int n = static_cast<Bus*>(generator->GetParentList()[0])->GetElectricalData().number;
166  m_yBus[n][n] -= GetSyncMachineAdmittance(generator);
167  }
168 
169  // Insert machine (only disconnected machines)
170  if(swData.swType[i] == SW_INSERT && !generator->IsOnline() && generator->GetParentList().size() == 1) {
171  if(generator->SetOnline(true)) {
172  int n = static_cast<Bus*>(generator->GetParentList()[0])->GetElectricalData().number;
173  m_yBus[n][n] += GetSyncMachineAdmittance(generator);
174  }
175  }
176  }
177  }
178  }
179 
180  // Load switching
181  for(auto it = m_loadList.begin(), itEnd = m_loadList.end(); it != itEnd; ++it) {
182  Load* load = *it;
183  auto swData = load->GetSwitchingData();
184  for(unsigned int i = 0; i < swData.swType.size(); ++i) {
185  if(EventTrigger(swData.swTime[i], currentTime)) {
186  // Remove load (only connected loads)
187  if(swData.swType[i] == SW_REMOVE && load->IsOnline()) {
188  load->SetOnline(false);
189  auto data = load->GetPUElectricalData(m_powerSystemBase);
190  Bus* parentBus = static_cast<Bus*>(load->GetParentList()[0]);
191  int n = parentBus->GetElectricalData().number;
192  std::complex<double> v = parentBus->GetElectricalData().voltage;
193  m_yBus[n][n] -= std::complex<double>(data.activePower, -data.reactivePower) / (v * v);
194  }
195 
196  // Insert load (only disconnected load)
197  if(swData.swType[i] == SW_INSERT && !load->IsOnline() && load->GetParentList().size() == 1) {
198  if(load->SetOnline(true)) {
199  auto data = load->GetPUElectricalData(m_powerSystemBase);
200  Bus* parentBus = static_cast<Bus*>(load->GetParentList()[0]);
201  int n = parentBus->GetElectricalData().number;
202  std::complex<double> v = parentBus->GetElectricalData().voltage;
203  m_yBus[n][n] += std::complex<double>(data.activePower, -data.reactivePower) / (v * v);
204  }
205  }
206  }
207  }
208  }
209 
210  // Line switching
211  for(auto it = m_lineList.begin(), itEnd = m_lineList.end(); it != itEnd; ++it) {
212  Line* line = *it;
213  auto swData = line->GetSwitchingData();
214  for(unsigned int i = 0; i < swData.swType.size(); ++i) {
215  if(EventTrigger(swData.swTime[i], currentTime)) {
216  // Remove line (only connected lines)
217  if(swData.swType[i] == SW_REMOVE && line->IsOnline()) {
218  line->SetOnline(false);
219  auto data = line->GetElectricalData();
220 
221  int n1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().number;
222  int n2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().number;
223 
224  m_yBus[n1][n2] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
225  m_yBus[n2][n1] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
226 
227  m_yBus[n1][n1] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
228  m_yBus[n2][n2] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
229 
230  m_yBus[n1][n1] -= std::complex<double>(0.0, data.capSusceptance / 2.0);
231  m_yBus[n2][n2] -= std::complex<double>(0.0, data.capSusceptance / 2.0);
232  }
233 
234  // Insert line (only disconnected lines)
235  if(swData.swType[i] == SW_INSERT && !line->IsOnline() && line->GetParentList().size() == 2) {
236  if(line->SetOnline(true)) {
237  auto data = line->GetElectricalData();
238 
239  int n1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().number;
240  int n2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().number;
241 
242  m_yBus[n1][n2] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
243  m_yBus[n2][n1] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
244 
245  m_yBus[n1][n1] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
246  m_yBus[n2][n2] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
247 
248  m_yBus[n1][n1] += std::complex<double>(0.0, data.capSusceptance / 2.0);
249  m_yBus[n2][n2] += std::complex<double>(0.0, data.capSusceptance / 2.0);
250  }
251  }
252  }
253  }
254  }
255 
256  // Transformer switching
257  for(auto it = m_transformerList.begin(), itEnd = m_transformerList.end(); it != itEnd; ++it) {
258  Transformer* transformer = *it;
259  auto swData = transformer->GetSwitchingData();
260  for(unsigned int i = 0; i < swData.swType.size(); ++i) {
261  if(EventTrigger(swData.swTime[i], currentTime)) {
262  // Remove transformer (only connected transformers)
263  if(swData.swType[i] == SW_REMOVE && transformer->IsOnline()) {
264  transformer->SetOnline(false);
265  auto data = transformer->GetElectricalData();
266 
267  int n1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().number;
268  int n2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().number;
269 
270  if(data.turnsRatio == 1.0 && data.phaseShift == 0.0) {
271  m_yBus[n1][n2] -= -1.0 / std::complex<double>(data.resistance, data.indReactance);
272  m_yBus[n2][n1] -= -1.0 / std::complex<double>(data.resistance, data.indReactance);
273 
274  m_yBus[n1][n1] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
275  m_yBus[n2][n2] -= 1.0 / std::complex<double>(data.resistance, data.indReactance);
276  } else {
277  // Complex turns ratio
278  double radPhaseShift = wxDegToRad(data.phaseShift);
279  std::complex<double> a = std::complex<double>(data.turnsRatio * std::cos(radPhaseShift),
280  -data.turnsRatio * std::sin(radPhaseShift));
281 
282  // Transformer admitance
283  std::complex<double> y = 1.0 / std::complex<double>(data.resistance, data.indReactance);
284  m_yBus[n1][n1] -= y / std::pow(std::abs(a), 2.0);
285  m_yBus[n1][n2] -= -(y / std::conj(a));
286  m_yBus[n2][n1] -= -(y / a);
287  m_yBus[n2][n2] -= y;
288  }
289  }
290 
291  // Insert transformer (only disconnected transformers)
292  if(swData.swType[i] == SW_INSERT && !transformer->IsOnline() &&
293  transformer->GetParentList().size() == 2) {
294  if(transformer->SetOnline(true)) {
295  auto data = transformer->GetElectricalData();
296 
297  int n1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().number;
298  int n2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().number;
299 
300  if(data.turnsRatio == 1.0 && data.phaseShift == 0.0) {
301  m_yBus[n1][n2] += -1.0 / std::complex<double>(data.resistance, data.indReactance);
302  m_yBus[n2][n1] += -1.0 / std::complex<double>(data.resistance, data.indReactance);
303 
304  m_yBus[n1][n1] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
305  m_yBus[n2][n2] += 1.0 / std::complex<double>(data.resistance, data.indReactance);
306  } else {
307  // Complex turns ratio
308  double radPhaseShift = wxDegToRad(data.phaseShift);
309  std::complex<double> a = std::complex<double>(data.turnsRatio * std::cos(radPhaseShift),
310  -data.turnsRatio * std::sin(radPhaseShift));
311 
312  // Transformer admitance
313  std::complex<double> y = 1.0 / std::complex<double>(data.resistance, data.indReactance);
314  m_yBus[n1][n1] += y / std::pow(std::abs(a), 2.0);
315  m_yBus[n1][n2] += -(y / std::conj(a));
316  m_yBus[n2][n1] += -(y / a);
317  m_yBus[n2][n2] += y;
318  }
319  }
320  }
321  }
322  }
323  }
324 
325  // Capacitor switching
326  for(auto it = m_capacitorList.begin(), itEnd = m_capacitorList.end(); it != itEnd; ++it) {
327  Capacitor* capacitor = *it;
328  auto swData = capacitor->GetSwitchingData();
329  for(unsigned int i = 0; i < swData.swType.size(); ++i) {
330  if(EventTrigger(swData.swTime[i], currentTime)) {
331  // Remove capacitor (only connected capacitors)
332  if(swData.swType[i] == SW_REMOVE && capacitor->IsOnline()) {
333  capacitor->SetOnline(false);
334  auto data = capacitor->GetPUElectricalData(m_powerSystemBase);
335  int n = static_cast<Bus*>(capacitor->GetParentList()[0])->GetElectricalData().number;
336  m_yBus[n][n] -= std::complex<double>(0.0, data.reactivePower);
337  }
338 
339  // Insert capacitor (only disconnected capacitors)
340  if(swData.swType[i] == SW_INSERT && !capacitor->IsOnline() && capacitor->GetParentList().size() == 1) {
341  if(capacitor->SetOnline(true)) {
342  auto data = capacitor->GetPUElectricalData(m_powerSystemBase);
343  int n = static_cast<Bus*>(capacitor->GetParentList()[0])->GetElectricalData().number;
344  m_yBus[n][n] += std::complex<double>(0.0, data.reactivePower);
345  }
346  }
347  }
348  }
349  }
350 
351  // Inductor switching
352  for(auto it = m_inductorList.begin(), itEnd = m_inductorList.end(); it != itEnd; ++it) {
353  Inductor* inductor = *it;
354  auto swData = inductor->GetSwitchingData();
355  for(unsigned int i = 0; i < swData.swType.size(); ++i) {
356  if(EventTrigger(swData.swTime[i], currentTime)) {
357  // Remove inductor (only connected inductors)
358  if(swData.swType[i] == SW_REMOVE && inductor->IsOnline()) {
359  inductor->SetOnline(false);
360  auto data = inductor->GetPUElectricalData(m_powerSystemBase);
361  int n = static_cast<Bus*>(inductor->GetParentList()[0])->GetElectricalData().number;
362  m_yBus[n][n] -= std::complex<double>(0.0, -data.reactivePower);
363  }
364 
365  // Insert inductor (only disconnected inductors)
366  if(swData.swType[i] == SW_INSERT && !inductor->IsOnline() && inductor->GetParentList().size() == 1) {
367  if(inductor->SetOnline(true)) {
368  auto data = inductor->GetPUElectricalData(m_powerSystemBase);
369  int n = static_cast<Bus*>(inductor->GetParentList()[0])->GetElectricalData().number;
370  m_yBus[n][n] += std::complex<double>(0.0, -data.reactivePower);
371  }
372  }
373  }
374  }
375  }
376 }
377 
378 void Electromechanical::InsertSyncMachinesOnYBus()
379 {
380  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
381  SyncGenerator* generator = *it;
382  if(generator->IsOnline()) {
383  auto data = generator->GetElectricalData();
384  int n = static_cast<Bus*>(generator->GetParentList()[0])->GetElectricalData().number;
385  m_yBus[n][n] += GetSyncMachineAdmittance(generator);
386  }
387  }
388 }
389 
390 bool Electromechanical::EventTrigger(double eventTime, double currentTime)
391 {
392  return (((eventTime - m_timeStep) < currentTime) && (eventTime >= currentTime));
393 }
394 
395 std::complex<double> Electromechanical::GetSyncMachineAdmittance(SyncGenerator* generator)
396 {
397  auto data = generator->GetElectricalData();
398  double k = 1.0; // Power base change factor.
399  if(data.useMachineBase) {
400  double oldBase = GetPowerValue(data.nominalPower, data.nominalPowerUnit);
401  k = m_powerSystemBase / oldBase;
402  }
403 
404  double xd = 0.0;
405  double xq = 0.0;
406  double ra = data.armResistance * k;
407 
408  switch(data.model) {
409  case Machines::SM_MODEL_1: {
410  xq = data.transXd * k;
411  xd = xq;
412  } break;
413  case Machines::SM_MODEL_2: {
414  xd = data.transXd * k;
415  xq = data.transXq * k;
416  if(xq == 0.0) {
417  xq = data.syncXq * k;
418  if(xq == 0.0) {
419  xq = data.syncXd * k;
420  }
421  }
422  } break;
423  case Machines::SM_MODEL_3: {
424  xd = data.transXd * k;
425  xq = data.transXq * k;
426  if(xq == 0.0) xq = xd;
427  } break;
428  case Machines::SM_MODEL_4:
429  case Machines::SM_MODEL_5: {
430  xd = data.subXd * k;
431  xq = data.subXq * k;
432  if(xd == 0.0) xd = xq;
433  if(xq == 0.0) xq = xd;
434  } break;
435  }
436  double xdq = 0.5 * (xd + xq);
437  return (std::complex<double>(ra, -xdq) / std::complex<double>(ra * ra + xd * xq, 0.0));
438 }
439 
440 bool Electromechanical::InitializeDynamicElements()
441 {
442  // Buses
443  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
444  Bus* bus = *it;
445  auto data = bus->GetElectricalData();
446  data.stabVoltageVector.clear();
447  bus->SetElectricalData(data);
448  }
449  // Synchronous generators
450  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
451  SyncGenerator* syncGenerator = *it;
452  auto dataPU = syncGenerator->GetPUElectricalData(m_powerSystemBase);
453  auto data = syncGenerator->GetElectricalData();
454  if(syncGenerator->IsOnline()) {
455  double k = 1.0; // Power base change factor.
456  if(data.useMachineBase) {
457  double oldBase = GetPowerValue(data.nominalPower, data.nominalPowerUnit);
458  k = m_powerSystemBase / oldBase;
459  }
460  data.terminalVoltage = static_cast<Bus*>(syncGenerator->GetParentList()[0])->GetElectricalData().voltage;
461 
462  std::complex<double> conjS(dataPU.activePower, -dataPU.reactivePower);
463  std::complex<double> conjV = std::conj(data.terminalVoltage);
464  std::complex<double> ia = conjS / conjV;
465 
466  double xd = data.syncXd * k;
467  double xq = data.syncXq * k;
468  double ra = data.armResistance * k;
469 
470  if(data.model == Machines::SM_MODEL_1) {
471  xq = data.transXd * k;
472  xd = xq;
473  } else if(data.syncXq == 0.0)
474  xq = data.syncXd * k;
475 
476  // Initialize state variables
477  std::complex<double> eq0 = data.terminalVoltage + std::complex<double>(ra, xq) * ia;
478  data.delta = std::arg(eq0);
479 
480  double fi0 = std::arg(ia);
481  double id0, iq0;
482  // ABCtoDQ0(ia, data.delta - fi0, id0, iq0);
483  iq0 = std::abs(ia) * std::cos(data.delta - fi0);
484  id0 = -std::abs(ia) * std::sin(data.delta - fi0);
485 
486  data.initialFieldVoltage = std::abs(eq0) - (xd - xq) * id0;
487  data.fieldVoltage = data.initialFieldVoltage;
488  data.pm = std::real((data.terminalVoltage * std::conj(ia)) + (std::abs(ia) * std::abs(ia) * ra));
489  data.speed = 2.0 * M_PI * m_systemFreq;
490 
491  data.pe = data.pm;
492  data.electricalPower = std::complex<double>(dataPU.activePower, dataPU.reactivePower);
493 
494  // Variables to extrapolate.
495  data.oldIq = iq0;
496  data.oldId = id0;
497  data.oldPe = data.pe;
498 
499  switch(data.model) {
500  case Machines::SM_MODEL_1: {
501  // double tranXd = data.transXd * k;
502 
503  // data.tranEq = data.initialFieldVoltage + (xd - tranXd) * id0;
504  data.tranEq = std::abs(eq0);
505 
506  data.tranEd = 0.0;
507  data.subEq = 0.0;
508  data.subEd = 0.0;
509  } break;
510  case Machines::SM_MODEL_2: {
511  double tranXd = data.transXd * k;
512 
513  data.tranEq = data.initialFieldVoltage + (xd - tranXd) * id0;
514  data.tranEd = 0.0;
515  data.subEd = 0.0;
516  data.subEq = 0.0;
517  } break;
518  case Machines::SM_MODEL_3: {
519  double tranXd = data.transXd * k;
520  double tranXq = data.transXq * k;
521  if(tranXq == 0.0) tranXq = tranXd;
522 
523  data.tranEq = data.initialFieldVoltage + (xd - tranXd) * id0;
524  data.tranEd = -(xq - tranXq) * iq0;
525 
526  data.subEd = 0.0;
527  data.subEq = 0.0;
528  } break;
529  case Machines::SM_MODEL_4: {
530  double tranXd = data.transXd * k;
531  double subXd = data.subXd * k;
532  double subXq = data.subXq * k;
533  if(subXd == 0.0) subXd = subXq;
534  if(subXq == 0.0) subXq = subXd;
535 
536  data.tranEq = data.initialFieldVoltage + (xd - tranXd) * id0;
537  data.tranEd = 0.0;
538  data.subEq = data.tranEq + (tranXd - subXd) * id0;
539  data.subEd = -(xq - subXq) * iq0;
540  } break;
541  case Machines::SM_MODEL_5: {
542  double tranXd = data.transXd * k;
543  double tranXq = data.transXq * k;
544  double subXd = data.subXd * k;
545  double subXq = data.subXq * k;
546  if(subXd == 0.0) subXd = subXq;
547  if(subXq == 0.0) subXq = subXd;
548 
549  data.tranEq = data.initialFieldVoltage + (xd - tranXd) * id0;
550  data.tranEd = -(xq - tranXq) * iq0;
551  data.subEq = data.tranEq + (tranXd - subXd) * id0;
552  data.subEd = data.tranEd - (tranXq - subXq) * iq0;
553  } break;
554  default:
555  break;
556  }
557 
558  // Initialize controllers
559  if(data.useAVR) {
560  if(data.avrSolver) delete data.avrSolver;
561  data.avrSolver = new ControlElementSolver(data.avr, m_timeStep * m_ctrlTimeStepMultiplier, m_tolerance,
562  false, std::abs(data.terminalVoltage), m_parent);
563  if(!data.avrSolver->IsOK()) {
564  m_errorMsg = _("Error on initializate the AVR of \"") + data.name + _("\".");
565  syncGenerator->SetElectricalData(data);
566  return false;
567  }
568  }
569  if(data.useSpeedGovernor) {
570  if(data.speedGovSolver) delete data.speedGovSolver;
571  data.speedGovSolver = new ControlElementSolver(data.speedGov, m_timeStep * m_ctrlTimeStepMultiplier,
572  m_tolerance, false, data.speed, m_parent);
573  if(!data.speedGovSolver->IsOK()) {
574  m_errorMsg = _("Error on initializate the speed governor of \"") + data.name + _("\".");
575  syncGenerator->SetElectricalData(data);
576  return false;
577  }
578  }
579  } else {
580  // Initialize open circuit machine.
581  }
582  // Reset plot data
583  data.terminalVoltageVector.clear();
584  data.electricalPowerVector.clear();
585  data.mechanicalPowerVector.clear();
586  data.freqVector.clear();
587  data.fieldVoltageVector.clear();
588  data.deltaVector.clear();
589 
590  syncGenerator->SetElectricalData(data);
591  }
592  CalculateReferenceSpeed();
593  return true;
594 }
595 
596 void Electromechanical::CalculateMachinesCurrents()
597 {
598  // Reset injected currents vector
599  for(unsigned int i = 0; i < m_iBus.size(); ++i) m_iBus[i] = std::complex<double>(0.0, 0.0);
600 
601  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
602  SyncGenerator* syncGenerator = *it;
603  auto data = syncGenerator->GetElectricalData();
604  if(syncGenerator->IsOnline()) {
605  double k = 1.0; // Power base change factor.
606  if(data.useMachineBase) {
607  double oldBase = GetPowerValue(data.nominalPower, data.nominalPowerUnit);
608  k = m_powerSystemBase / oldBase;
609  }
610 
611  double xd = 0.0;
612  double xq = 0.0;
613  double ra = data.armResistance * k;
614  int n = static_cast<Bus*>(syncGenerator->GetParentList()[0])->GetElectricalData().number;
615  std::complex<double> e = std::complex<double>(0.0, 0.0);
616  std::complex<double> v = m_vBus[n];
617  std::complex<double> iInj = m_iBus[n];
618  double xdq = 0.0;
619 
620  switch(data.model) {
621  case Machines::SM_MODEL_1: {
622  DQ0toABC(data.tranEd, data.tranEq, data.delta, e);
623  xq = data.transXd * k;
624  xd = xq;
625  } break;
626  case Machines::SM_MODEL_2: {
627  DQ0toABC(data.tranEd, data.tranEq, data.delta, e);
628  xd = data.transXd * k;
629  xq = data.transXq * k;
630  if(xq == 0.0) {
631  xq = data.syncXq * k;
632  if(xq == 0.0) {
633  xq = data.syncXd * k;
634  }
635  }
636  } break;
637  case Machines::SM_MODEL_3: {
638  DQ0toABC(data.tranEd, data.tranEq, data.delta, e);
639  xd = data.transXd * k;
640  xq = data.transXq * k;
641  if(xq == 0.0) xq = xd;
642  } break;
643  case Machines::SM_MODEL_4:
644  case Machines::SM_MODEL_5: {
645  DQ0toABC(data.subEd, data.subEq, data.delta, e);
646  xd = data.subXd * k;
647  xq = data.subXq * k;
648  if(xd == 0.0) xd = xq;
649  if(xq == 0.0) xq = xd;
650  } break;
651  }
652  xdq = 0.5 * (xd + xq);
653 
654  std::complex<double> y0 = std::complex<double>(ra, -xdq) / std::complex<double>(ra * ra + xd * xq, 0.0);
655  std::complex<double> iUnadj = y0 * e;
656 
657  std::complex<double> iAdj =
658  std::complex<double>(0.0, -((0.5 * (xq - xd)) / (ra * ra + xd * xq))) * (std::conj(e) - std::conj(v));
659  iAdj = iAdj * std::cos(2.0 * data.delta) + iAdj * std::complex<double>(0.0, std::sin(2.0 * data.delta));
660 
661  iInj = iUnadj + iAdj;
662 
663  m_iBus[n] += iInj;
664 
665  std::complex<double> iMachine = iInj - y0 * v;
666 
667  data.electricalPower = v * std::conj(iMachine);
668  } else {
669  data.electricalPower = std::complex<double>(0.0, 0.0);
670  }
671 
672  syncGenerator->SetElectricalData(data);
673  }
674 }
675 
676 void Electromechanical::CalculateIntegrationConstants(SyncGenerator* syncGenerator, double id, double iq, double k)
677 {
678  CalculateReferenceSpeed();
679  auto data = syncGenerator->GetElectricalData();
680 
681  double syncXd, syncXq, transXd, transXq, subXd, subXq;
682  syncXd = data.syncXd * k;
683  syncXq = data.syncXq * k;
684  transXd = data.transXd * k;
685  transXq = data.transXq * k;
686  subXd = data.subXd * k;
687  subXq = data.subXq * k;
688 
689  if(syncXq == 0.0) syncXq = syncXd;
690  if(transXq == 0.0) transXq = transXd;
691  if(subXd == 0.0) subXd = subXq;
692  if(subXq == 0.0) subXq = subXd;
693 
694  double transTd0, transTq0, subTd0, subTq0;
695  transTd0 = data.transTd0;
696  transTq0 = data.transTq0;
697  subTd0 = data.subTd0;
698  subTq0 = data.subTq0;
699 
700  if(subTd0 == 0.0) subTd0 = subTq0;
701  if(subTq0 == 0.0) subTq0 = subTd0;
702 
703  // Speed
704  data.icSpeed.m = m_timeStep / ((4.0f * data.inertia / m_refSpeed) / k + m_timeStep * data.damping * k);
705  data.icSpeed.c = (1.0f - 2.0f * data.icSpeed.m * data.damping * k) * data.speed +
706  data.icSpeed.m * (data.pm - data.pe + 2.0f * m_refSpeed * data.damping * k);
707 
708  // Delta
709  data.icDelta.m = 0.5f * m_timeStep;
710  data.icDelta.c = data.delta + data.icDelta.m * (data.speed - 2.0f * m_refSpeed);
711 
712  // Eq'
713  if(data.model == Machines::SM_MODEL_2 || data.model == Machines::SM_MODEL_3 || data.model == Machines::SM_MODEL_4 ||
714  data.model == Machines::SM_MODEL_5) {
715  data.icTranEq.m = m_timeStep / (2.0f * transTd0 + m_timeStep);
716  data.icTranEq.c = (1.0f - 2.0 * data.icTranEq.m) * data.tranEq +
717  data.icTranEq.m * (data.fieldVoltage + (syncXd - transXd) * id);
718  }
719 
720  // Ed'
721  if(data.model == Machines::SM_MODEL_3 || data.model == Machines::SM_MODEL_4 || data.model == Machines::SM_MODEL_5) {
722  data.icTranEd.m = m_timeStep / (2.0f * transTq0 + m_timeStep);
723  data.icTranEd.c = (1.0f - 2.0f * data.icTranEd.m) * data.tranEd - data.icTranEd.m * (syncXq - transXq) * iq;
724  }
725 
726  // Eq''
727  if(data.model == Machines::SM_MODEL_4 || data.model == Machines::SM_MODEL_5) {
728  data.icSubEq.m = m_timeStep / (2.0f * subTd0 + m_timeStep);
729  data.icSubEq.c =
730  (1.0f - 2.0f * data.icSubEq.m) * data.subEq + data.icSubEq.m * (data.tranEq + (transXd - subXd) * id);
731  }
732  // Ed''
733  if(data.model == Machines::SM_MODEL_4) {
734  data.icSubEd.m = m_timeStep / (2.0f * subTq0 + m_timeStep);
735  data.icSubEd.c = (1.0f - 2.0f * data.icSubEd.m) * data.subEd - data.icSubEd.m * (syncXq - subXq) * iq;
736  }
737  if(data.model == Machines::SM_MODEL_5) {
738  data.icSubEd.m = m_timeStep / (2.0f * subTq0 + m_timeStep);
739  data.icSubEd.c =
740  (1.0f - 2.0f * data.icSubEd.m) * data.subEd + data.icSubEd.m * (data.tranEd - (transXq - subXq) * iq);
741  }
742 
743  syncGenerator->SetElectricalData(data);
744 }
745 
746 bool Electromechanical::SolveSynchronousMachines()
747 {
748  // CalculateMachinesCurrents();
749  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
750  SyncGenerator* syncGenerator = *it;
751  auto data = syncGenerator->GetElectricalData();
752 
753  if(syncGenerator->IsOnline()) {
754  int n = static_cast<Bus*>(syncGenerator->GetParentList()[0])->GetElectricalData().number;
755  double id, iq, pe;
756 
757  pe = data.pe;
758 
759  double k = 1.0; // Power base change factor.
760  if(data.useMachineBase) {
761  double oldBase = GetPowerValue(data.nominalPower, data.nominalPowerUnit);
762  k = m_powerSystemBase / oldBase;
763  }
764 
765  std::complex<double> iMachine = std::conj(data.electricalPower) / std::conj(m_vBus[n]);
766 
767  ABCtoDQ0(iMachine, data.delta, id, iq);
768 
769  // Calculate integration constants.
770  CalculateIntegrationConstants(syncGenerator, id, iq, k);
771 
772  CalculateSyncMachineNonIntVariables(syncGenerator, id, iq, pe, k);
773  // Extrapolate nonintegrable variables.
774  id = 2.0 * id - data.oldId;
775  iq = 2.0 * iq - data.oldIq;
776  pe = 2.0 * pe - data.oldPe;
777 
778  CalculateSyncMachineIntVariables(syncGenerator, id, iq, pe, k);
779  } else {
780  CalculateIntegrationConstants(syncGenerator, 0.0f, 0.0f);
781  }
782  }
783 
784  m_wError = 0;
785 
786  double error = 1.0;
787  int iterations = 0;
788  while(error > m_tolerance) {
789  error = 0.0;
790 
791  // Calculate the injected currents.
792  CalculateMachinesCurrents();
793 
794  // Calculate the buses voltages.
795  m_vBus = LUEvaluate(m_yBusU, m_yBusL, m_iBus);
796 
797  // Solve machine equations.
798  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
799  SyncGenerator* syncGenerator = *it;
800 
801  auto data = syncGenerator->GetElectricalData();
802 
803  double id, iq, pe;
804  double k = 1.0; // Power base change factor.
805  if(data.useMachineBase) {
806  double oldBase = GetPowerValue(data.nominalPower, data.nominalPowerUnit);
807  k = m_powerSystemBase / oldBase;
808  }
809 
810  CalculateSyncMachineNonIntVariables(syncGenerator, id, iq, pe, k);
811 
812  double genError = CalculateSyncMachineIntVariables(syncGenerator, id, iq, pe, k);
813 
814  if(genError > error) error = genError;
815  }
816 
817  ++iterations;
818 
819  if(iterations > m_maxIterations) {
820  m_errorMsg = _("Impossible to solve the synchronous generators.\nCheck the system parameters and/or "
821  "decrease the time step.");
822  return false;
823  }
824  }
825  m_numIt = iterations;
826 
827  // Solve controllers.
828  int ctrlRatio = static_cast<int>(1 / m_ctrlTimeStepMultiplier);
829  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
830  SyncGenerator* syncGenerator = *it;
831  auto data = syncGenerator->GetElectricalData();
832  if(data.useAVR && data.avrSolver) {
833  for(int i = 0; i < ctrlRatio; ++i) data.avrSolver->SolveNextStep(std::abs(data.terminalVoltage));
834  data.fieldVoltage = data.initialFieldVoltage + data.avrSolver->GetLastSolution();
835  }
836 
837  if(data.useSpeedGovernor && data.speedGovSolver) {
838  for(int i = 0; i < ctrlRatio; ++i) data.speedGovSolver->SolveNextStep(data.speed);
839  data.pm = data.speedGovSolver->GetLastSolution();
840  }
841  syncGenerator->SetElectricalData(data);
842  }
843 
844  return true;
845 }
846 
847 double Electromechanical::GetPowerValue(double value, ElectricalUnit unit)
848 {
849  switch(unit) {
850  case UNIT_PU: {
851  return value;
852  } break;
853  case UNIT_VA: {
854  return value;
855  } break;
856  case UNIT_kVA: {
857  return value * 1e3;
858  } break;
859  case UNIT_MVA: {
860  return value * 1e6;
861  } break;
862  case UNIT_W: {
863  return value;
864  } break;
865  case UNIT_kW: {
866  return value * 1e3;
867  } break;
868  case UNIT_MW: {
869  return value * 1e6;
870  } break;
871  case UNIT_VAr: {
872  return value;
873  } break;
874  case UNIT_kVAr: {
875  return value * 1e3;
876  } break;
877  case UNIT_MVAr: {
878  return value * 1e6;
879  } break;
880  default: {
881  return 0.0;
882  } break;
883  }
884  return 0.0;
885 }
886 
887 void Electromechanical::SaveData()
888 {
889  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
890  SyncGenerator* syncGenerator = *it;
891  auto data = syncGenerator->GetElectricalData();
892  if(data.plotSyncMachine) {
893  data.terminalVoltageVector.push_back(data.terminalVoltage);
894  data.electricalPowerVector.push_back(data.electricalPower);
895  data.mechanicalPowerVector.push_back(data.pm);
896  data.freqVector.push_back(data.speed / (2.0f * M_PI));
897  data.fieldVoltageVector.push_back(data.fieldVoltage);
898  data.deltaVector.push_back(wxRadToDeg(data.delta));
899  syncGenerator->SetElectricalData(data);
900  }
901  }
902  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
903  Bus* bus = *it;
904  auto data = bus->GetElectricalData();
905  if(data.plotBus) {
906  data.stabVoltageVector.push_back(m_vBus[data.number]);
907  bus->SetElectricalData(data);
908  }
909  }
910 
911  m_wErrorVector.push_back(m_wError);
912  m_numItVector.push_back(m_numIt);
913 }
914 
915 void Electromechanical::SetSyncMachinesModel()
916 {
917  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
918  SyncGenerator* syncGenerator = *it;
919  auto data = syncGenerator->GetElectricalData();
920  data.model = GetMachineModel(syncGenerator);
921  syncGenerator->SetElectricalData(data);
922  }
923 }
924 
925 void Electromechanical::CalculateSyncMachineNonIntVariables(SyncGenerator* syncGenerator,
926  double& id,
927  double& iq,
928  double& pe,
929  double k)
930 {
931  auto data = syncGenerator->GetElectricalData();
932  int n = static_cast<Bus*>(syncGenerator->GetParentList()[0])->GetElectricalData().number;
933 
934  if(syncGenerator->IsOnline()) {
935  data.terminalVoltage = m_vBus[n];
936  }
937 
938  double vd, vq;
939  ABCtoDQ0(data.terminalVoltage, data.delta, vd, vq);
940 
941  if(syncGenerator->IsOnline()) {
942  std::complex<double> iMachine = std::conj(data.electricalPower) / std::conj(m_vBus[n]);
943  ABCtoDQ0(iMachine, data.delta, id, iq);
944 
945  pe = id * vd + iq * vq + (id * id + iq * iq) * data.armResistance * k;
946  } else {
947  pe = id = iq = 0.0f;
948  }
949  data.pe = pe;
950  data.oldId = id;
951  data.oldIq = iq;
952  syncGenerator->SetElectricalData(data);
953 }
954 
955 double Electromechanical::CalculateSyncMachineIntVariables(SyncGenerator* syncGenerator,
956  double id,
957  double iq,
958  double pe,
959  double k)
960 {
961  double error = 0.0;
962  auto data = syncGenerator->GetElectricalData();
963 
964  // Mechanical differential equations.
965  double w = data.icSpeed.c + data.icSpeed.m * (data.pm - pe);
966  error = std::max(error, std::abs(data.speed - w) / m_refSpeed);
967 
968  m_wError += std::abs(data.speed - w) / m_refSpeed;
969 
970  double delta = data.icDelta.c + data.icDelta.m * w;
971  error = std::max(error, std::abs(data.delta - delta));
972 
973  data.speed = w;
974  data.delta = delta;
975 
976  // Electrical differential equations
977  switch(data.model) {
978  case Machines::SM_MODEL_1: {
979  // There is no differential equations.
980  } break;
981  case Machines::SM_MODEL_2: {
982  double tranEq =
983  data.icTranEq.c + data.icTranEq.m * (data.fieldVoltage + (data.syncXd * k - data.transXd * k) * id);
984  error = std::max(error, std::abs(data.tranEq - tranEq));
985 
986  data.tranEq = tranEq;
987  } break;
988  case Machines::SM_MODEL_3: {
989  double syncXd, syncXq, transXd, transXq;
990  syncXd = data.syncXd * k;
991  syncXq = data.syncXq * k;
992  transXd = data.transXd * k;
993  transXq = data.transXq * k;
994  if(syncXq == 0.0) syncXq = syncXd;
995  if(transXq == 0.0) transXq = transXd;
996 
997  double tranEq = data.icTranEq.c + data.icTranEq.m * (data.fieldVoltage + (syncXd - transXd) * id);
998  error = std::max(error, std::abs(data.tranEq - tranEq));
999 
1000  double tranEd = data.icTranEd.c - data.icTranEd.m * (syncXq - transXq) * iq;
1001  error = std::max(error, std::abs(data.tranEd - tranEd));
1002 
1003  data.tranEq = tranEq;
1004  data.tranEd = tranEd;
1005 
1006  if(!syncGenerator->IsOnline()) {
1007  std::complex<double> e;
1008  DQ0toABC(data.tranEd, data.tranEq, data.delta, e);
1009  data.terminalVoltage = e;
1010  }
1011  } break;
1012  case Machines::SM_MODEL_4: {
1013  double syncXd, syncXq, transXd, subXd, subXq;
1014  syncXd = data.syncXd * k;
1015  syncXq = data.syncXq * k;
1016  transXd = data.transXd * k;
1017  subXd = data.subXd * k;
1018  subXq = data.subXq * k;
1019  if(syncXq == 0.0) syncXq = syncXd;
1020  if(subXd == 0.0) subXd = subXq;
1021  if(subXq == 0.0) subXq = subXd;
1022 
1023  double tranEq = data.icTranEq.c + data.icTranEq.m * (data.fieldVoltage + (syncXd - transXd) * id);
1024  error = std::max(error, std::abs(data.tranEq - tranEq));
1025 
1026  double subEq = data.icSubEq.c + data.icSubEq.m * (tranEq + (transXd - subXd) * id);
1027  error = std::max(error, std::abs(data.subEq - subEq));
1028 
1029  double subEd = data.icSubEd.c - data.icSubEd.m * (syncXq - subXq) * iq;
1030  error = std::max(error, std::abs(data.subEd - subEd));
1031 
1032  data.tranEq = tranEq;
1033  data.subEq = subEq;
1034  data.subEd = subEd;
1035  } break;
1036  case Machines::SM_MODEL_5: {
1037  double syncXd, syncXq, transXd, transXq, subXd, subXq;
1038  syncXd = data.syncXd * k;
1039  syncXq = data.syncXq * k;
1040  transXd = data.transXd * k;
1041  transXq = data.transXq * k;
1042  subXd = data.subXd * k;
1043  subXq = data.subXq * k;
1044  if(syncXq == 0.0) syncXq = syncXd;
1045  if(transXq == 0.0) transXq = transXd;
1046  if(subXd == 0.0) subXd = subXq;
1047  if(subXq == 0.0) subXq = subXd;
1048 
1049  double tranEq = data.icTranEq.c + data.icTranEq.m * (data.fieldVoltage + (syncXd - transXd) * id);
1050  error = std::max(error, std::abs(data.tranEq - tranEq));
1051 
1052  double tranEd = data.icTranEd.c - data.icTranEd.m * (syncXq - transXq) * iq;
1053  error = std::max(error, std::abs(data.tranEd - tranEd));
1054 
1055  double subEq = data.icSubEq.c + data.icSubEq.m * (tranEq + (transXd - subXd) * id);
1056  error = std::max(error, std::abs(data.subEq - subEq));
1057 
1058  double subEd = data.icSubEd.c + data.icSubEd.m * (tranEd - (transXq - subXq) * iq);
1059  error = std::max(error, std::abs(data.subEd - subEd));
1060 
1061  data.tranEq = tranEq;
1062  data.tranEd = tranEd;
1063  data.subEq = subEq;
1064  data.subEd = subEd;
1065  } break;
1066  }
1067 
1068  syncGenerator->SetElectricalData(data);
1069  return error;
1070 }
1071 
1072 void Electromechanical::CalculateReferenceSpeed()
1073 {
1074  if(m_useCOI) {
1075  double sumHW = 0.0;
1076  double sumH = 0.0;
1077  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
1078  SyncGenerator* syncGenerator = *it;
1079  if(syncGenerator->IsOnline()) {
1080  auto data = syncGenerator->GetElectricalData();
1081  double k = 1.0; // Power base change factor.
1082  if(data.useMachineBase) {
1083  double oldBase = GetPowerValue(data.nominalPower, data.nominalPowerUnit);
1084  k = m_powerSystemBase / oldBase;
1085  }
1086  sumH += data.inertia / k;
1087  sumHW += data.inertia * data.speed / k;
1088  }
1089  }
1090  m_refSpeed = sumHW / sumH;
1091  } else {
1092  m_refSpeed = 2.0 * M_PI * m_systemFreq;
1093  }
1094 }
std::vector< double > swTime
Definition: PowerElement.h:78
+ +
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
bool SetOnline(bool online=true)
Set if the element is online or offline.
Definition: Element.cpp:218
+ + +
std::vector< SwitchingType > swType
Definition: PowerElement.h:77
+
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + + +
Definition: Bus.h:45
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+ + + + + +
Definition: Line.h:35
+
Definition: Load.h:23
+ +
virtual bool GetYBus(std::vector< std::vector< std::complex< double > > > &yBus, double systemPowerBase, YBusSequence sequence=POSITIVE_SEQ, bool includeSyncMachines=false, bool allLoadsAsImpedances=false)
Get the admittance matrix from the list of elements (use GetElementsFromList first).
+
virtual SwitchingData GetSwitchingData()
Returns the switching data of the element.
Definition: PowerElement.h:165
+ + + + + +
virtual void GetElementsFromList(std::vector< Element *> elementList)
Separate the power elements from a generic list.
+ + + + +
+
+ + + + diff --git a/docs/doxygen/html/_electromechanical_8h_source.html b/docs/doxygen/html/_electromechanical_8h_source.html index a6bdcd1..a5569d8 100644 --- a/docs/doxygen/html/_electromechanical_8h_source.html +++ b/docs/doxygen/html/_electromechanical_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Electromechanical.h Source File +Project/Electromechanical.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Electromechanical.h
-
1 #ifndef ELECTROMECHANICAL_H
2 #define ELECTROMECHANICAL_H
3 
4 #include "ElectricCalculation.h"
5 
6 #include <wx/progdlg.h>
7 
9 
11 {
12  public:
13  Electromechanical(wxWindow* parent, std::vector<Element*> elementList, SimulationData data);
15 
16  bool RunStabilityCalculation();
17  wxString GetErrorMessage() const { return m_errorMsg; }
18  std::vector<double> GetTimeVector() const { return m_timeVector; }
19  std::vector<double> m_wErrorVector;
20  std::vector<double> m_deltaErrorVector;
21  std::vector<double> m_transEdErrorVector;
22  std::vector<double> m_transEqErrorVector;
23  std::vector<double> m_numItVector;
24 
25  protected:
26  void SetEventTimeList();
27  bool HasEvent(double currentTime);
28  void SetEvent(double currentTime);
29  inline bool EventTrigger(double eventTime, double currentTime);
30 
31  double GetPowerValue(double value, ElectricalUnit unit);
32 
33  void InsertSyncMachinesOnYBus();
34  std::complex<double> GetSyncMachineAdmittance(SyncGenerator* generator);
35  bool InitializeDynamicElements();
36  void CalculateMachinesCurrents();
37  void CalculateIntegrationConstants(SyncGenerator* syncGenerator, double id, double iq, double k = 1.0);
38  bool SolveSynchronousMachines();
39  void SetSyncMachinesModel();
40  double CalculateSyncMachineIntVariables(SyncGenerator* syncGenerator, double id, double iq, double pe, double k = 1.0);
41  void CalculateSyncMachineNonIntVariables(SyncGenerator* syncGenerator, double& id, double& iq, double& pe, double k = 1.0);
42  void CalculateReferenceSpeed();
43 
44  void SaveData();
45 
46  wxWindow* m_parent = NULL;
47  wxString m_errorMsg = _("Unknown error");
48 
49  double m_systemFreq = 60.0;
50  double m_refSpeed = 2.0 * M_PI * 60.0;
51  bool m_useCOI = false;
52 
53  std::vector<std::vector<std::complex<double> > > m_yBus;
54  std::vector<std::vector<std::complex<double> > > m_yBusU;
55  std::vector<std::vector<std::complex<double> > > m_yBusL;
56 
57  std::vector<std::complex<double> > m_vBus;
58  std::vector<std::complex<double> > m_iBus;
59 
60  double m_powerSystemBase = 100e6;
61  double m_simTime = 10.0;
62  double m_plotTime = 1e-2;
63  double m_timeStep = 1e-2;
64  double m_ctrlTimeStepMultiplier = 0.1;
65  double m_tolerance = 1e-8;
66  int m_maxIterations = 100;
67 
68  std::vector<double> m_eventTimeList;
69  std::vector<bool> m_eventOccurrenceList;
70 
71  std::vector<double> m_timeVector;
72 
73  // tests
74  double m_wError = 0.0;
75  double m_numIt = 0;
76 };
77 
78 #endif // ELECTROMECHANICAL_H
Definition: ControlElementSolver.h:20
+
1 #ifndef ELECTROMECHANICAL_H
2 #define ELECTROMECHANICAL_H
3 
4 #include "ElectricCalculation.h"
5 
6 #include <wx/progdlg.h>
7 
9 
11 {
12  public:
13  Electromechanical(wxWindow* parent, std::vector<Element*> elementList, SimulationData data);
15 
16  bool RunStabilityCalculation();
17  wxString GetErrorMessage() const { return m_errorMsg; }
18  std::vector<double> GetTimeVector() const { return m_timeVector; }
19  std::vector<double> m_wErrorVector;
20  std::vector<double> m_deltaErrorVector;
21  std::vector<double> m_transEdErrorVector;
22  std::vector<double> m_transEqErrorVector;
23  std::vector<double> m_numItVector;
24 
25  protected:
26  void SetEventTimeList();
27  bool HasEvent(double currentTime);
28  void SetEvent(double currentTime);
29  inline bool EventTrigger(double eventTime, double currentTime);
30 
31  double GetPowerValue(double value, ElectricalUnit unit);
32 
33  void InsertSyncMachinesOnYBus();
34  std::complex<double> GetSyncMachineAdmittance(SyncGenerator* generator);
35  bool InitializeDynamicElements();
36  void CalculateMachinesCurrents();
37  void CalculateIntegrationConstants(SyncGenerator* syncGenerator, double id, double iq, double k = 1.0);
38  bool SolveSynchronousMachines();
39  void SetSyncMachinesModel();
40  double CalculateSyncMachineIntVariables(SyncGenerator* syncGenerator, double id, double iq, double pe, double k = 1.0);
41  void CalculateSyncMachineNonIntVariables(SyncGenerator* syncGenerator, double& id, double& iq, double& pe, double k = 1.0);
42  void CalculateReferenceSpeed();
43 
44  void SaveData();
45 
46  wxWindow* m_parent = NULL;
47  wxString m_errorMsg = _("Unknown error");
48 
49  double m_systemFreq = 60.0;
50  double m_refSpeed = 2.0 * M_PI * 60.0;
51  bool m_useCOI = false;
52 
53  std::vector<std::vector<std::complex<double> > > m_yBus;
54  std::vector<std::vector<std::complex<double> > > m_yBusU;
55  std::vector<std::vector<std::complex<double> > > m_yBusL;
56 
57  std::vector<std::complex<double> > m_vBus;
58  std::vector<std::complex<double> > m_iBus;
59 
60  double m_powerSystemBase = 100e6;
61  double m_simTime = 10.0;
62  double m_plotTime = 1e-2;
63  double m_timeStep = 1e-2;
64  double m_ctrlTimeStepMultiplier = 0.1;
65  double m_tolerance = 1e-8;
66  int m_maxIterations = 100;
67 
68  std::vector<double> m_eventTimeList;
69  std::vector<bool> m_eventOccurrenceList;
70 
71  std::vector<double> m_timeVector;
72 
73  // tests
74  double m_wError = 0.0;
75  double m_numIt = 0;
76 };
77 
78 #endif // ELECTROMECHANICAL_H
Base class of electric calculations, with general methods.
-
Definition: SyncGenerator.h:110
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PropertiesData.h:11
-
Definition: Electromechanical.h:10
-
Definition: ElectricCalculation.h:49
+ +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + +
+
- + diff --git a/docs/doxygen/html/_element_8cpp_source.html b/docs/doxygen/html/_element_8cpp_source.html new file mode 100644 index 0000000..0349888 --- /dev/null +++ b/docs/doxygen/html/_element_8cpp_source.html @@ -0,0 +1,127 @@ + + + + + + + +Project/Element.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Element.cpp
+
+
+
1 #include "Element.h"
2 #ifdef USING_WX_3_0_X
3 #include "DegreesAndRadians.h"
4 #endif
5 
6 Element::Element() { m_selectionColour.SetRGBA(0.0, 0.5, 1.0, 0.5); }
7 
9 
10 void Element::SetPosition(const wxPoint2DDouble position)
11 {
12  m_position = position;
13  m_rect = wxRect2DDouble(m_position.m_x - m_width / 2.0 - m_borderSize,
14  m_position.m_y - m_height / 2.0 - m_borderSize, m_width + 2.0 * m_borderSize, m_height + 2.0 * m_borderSize);
15 }
16 
17 void Element::DrawCircle(wxPoint2DDouble position, double radius, int numSegments, GLenum mode) const
18 {
19  glBegin(mode);
20  for(int i = 0; i < numSegments; i++) {
21  double theta = 2.0 * 3.1415926 * double(i) / double(numSegments);
22  glVertex2f(radius * std::cos(theta) + position.m_x, radius * std::sin(theta) + position.m_y);
23  }
24  glEnd();
25 }
26 
27 void Element::DrawArc(wxPoint2DDouble position,
28  double radius,
29  double initAngle,
30  double finalAngle,
31  int numSegments,
32  GLenum mode) const
33 {
34  double initAngRad = wxDegToRad(initAngle);
35  double finalAngRad = wxDegToRad(finalAngle);
36  glBegin(mode);
37  for(int i = 0; i <= numSegments; i++) {
38  double theta = initAngRad + (finalAngRad - initAngRad) * double(i) / double(numSegments);
39  glVertex2f(radius * std::cos(theta) + position.m_x, radius * std::sin(theta) + position.m_y);
40  }
41  glEnd();
42 }
43 
44 void Element::DrawTriangle(std::vector<wxPoint2DDouble> points, GLenum mode) const
45 {
46  glBegin(mode);
47  for(int i = 0; i < 3; i++) {
48  glVertex2d(points[i].m_x, points[i].m_y);
49  }
50  glEnd();
51 }
52 
53 void Element::DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode) const
54 {
55  glBegin(mode); // TODO: GL_QUADS é obsoleto (OpenGL 3.0+), encontrar outra solução.
56  glVertex2d(position.m_x - width / 2.0, position.m_y - height / 2.0);
57  glVertex2d(position.m_x - width / 2.0, position.m_y + height / 2.0);
58  glVertex2d(position.m_x + width / 2.0, position.m_y + height / 2.0);
59  glVertex2d(position.m_x + width / 2.0, position.m_y - height / 2.0);
60  glEnd();
61 }
62 
63 void Element::DrawRectangle(wxPoint2DDouble* points, GLenum mode) const
64 {
65  glBegin(mode); // TODO: GL_QUADS é obsoleto (OpenGL 3.0+), encontrar outra solução.
66  glVertex2d(points[0].m_x, points[0].m_y);
67  glVertex2d(points[1].m_x, points[1].m_y);
68  glVertex2d(points[2].m_x, points[2].m_y);
69  glVertex2d(points[3].m_x, points[3].m_y);
70  glEnd();
71 }
72 
73 void Element::DrawLine(std::vector<wxPoint2DDouble> points, GLenum mode) const
74 {
75  glBegin(mode);
76  for(auto it = points.begin(); it != points.end(); ++it) {
77  glVertex2d((*it).m_x, (*it).m_y);
78  }
79  glEnd();
80 }
81 
82 void Element::DrawPickbox(wxPoint2DDouble position) const
83 {
84  glLineWidth(1.0);
85  glColor4d(1.0, 1.0, 1.0, 0.8);
86  DrawRectangle(position, 8.0, 8.0);
87  glColor4d(0.0, 0.0, 0.0, 1.0);
88  DrawRectangle(position, 8.0, 8.0, GL_LINE_LOOP);
89 }
90 
91 wxPoint2DDouble Element::RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees) const
92 {
93  double radAngle = angle;
94  if(degrees) radAngle = wxDegToRad(angle);
95  return wxPoint2DDouble(std::cos(radAngle) * (pointToRotate.m_x - m_position.m_x) -
96  std::sin(radAngle) * (pointToRotate.m_y - m_position.m_y) + m_position.m_x,
97  std::sin(radAngle) * (pointToRotate.m_x - m_position.m_x) +
98  std::cos(radAngle) * (pointToRotate.m_y - m_position.m_y) + m_position.m_y);
99 }
100 
101 void Element::StartMove(wxPoint2DDouble position)
102 {
103  this->m_moveStartPt = position;
104  this->m_movePos = m_position;
105 }
106 
107 void Element::Move(wxPoint2DDouble position) { SetPosition(m_movePos + position - m_moveStartPt); }
108 
109 wxPoint2DDouble Element::WorldToScreen(wxPoint2DDouble translation, double scale, double offsetX, double offsetY) const
110 {
111  return wxPoint2DDouble(m_position.m_x + offsetX + translation.m_x, m_position.m_y + offsetY + translation.m_y) *
112  scale;
113 }
114 
115 wxPoint2DDouble Element::WorldToScreen(wxPoint2DDouble position,
116  wxPoint2DDouble translation,
117  double scale,
118  double offsetX,
119  double offsetY) const
120 {
121  return wxPoint2DDouble(position.m_x + offsetX + translation.m_x, position.m_y + offsetY + translation.m_y) * scale;
122 }
123 
124 void Element::DrawPoint(wxPoint2DDouble position, double size) const
125 {
126  glPointSize(size);
127  glBegin(GL_POINTS);
128  glVertex2d(position.m_x, position.m_y);
129  glEnd();
130 }
131 
132 bool Element::RotatedRectanglesIntersects(wxRect2DDouble rect1,
133  wxRect2DDouble rect2,
134  double angle1,
135  double angle2) const
136 {
137  wxPoint2DDouble rect1Corners[4] = { rect1.GetLeftTop(), rect1.GetLeftBottom(), rect1.GetRightBottom(),
138  rect1.GetRightTop() };
139  wxPoint2DDouble rect2Corners[4] = { rect2.GetLeftTop(), rect2.GetLeftBottom(), rect2.GetRightBottom(),
140  rect2.GetRightTop() };
141  wxPoint2DDouble rect1Center(rect1.m_x + rect1.m_width / 2.0, rect1.m_y + rect1.m_height / 2.0);
142  wxPoint2DDouble rect2Center(rect2.m_x + rect2.m_width / 2.0, rect2.m_y + rect2.m_height / 2.0);
143 
144  // Rotate the corners.
145  double radAngle1 = wxDegToRad(angle1);
146  double radAngle2 = wxDegToRad(angle2);
147 
148  for(int i = 0; i < 4; i++) {
149  rect1Corners[i] = wxPoint2DDouble(std::cos(radAngle1) * (rect1Corners[i].m_x - rect1Center.m_x) -
150  std::sin(radAngle1) * (rect1Corners[i].m_y - rect1Center.m_y) + rect1Center.m_x,
151  std::sin(radAngle1) * (rect1Corners[i].m_x - rect1Center.m_x) +
152  std::cos(radAngle1) * (rect1Corners[i].m_y - rect1Center.m_y) + rect1Center.m_y);
153 
154  rect2Corners[i] = wxPoint2DDouble(std::cos(radAngle2) * (rect2Corners[i].m_x - rect2Center.m_x) -
155  std::sin(radAngle2) * (rect2Corners[i].m_y - rect2Center.m_y) + rect2Center.m_x,
156  std::sin(radAngle2) * (rect2Corners[i].m_x - rect2Center.m_x) +
157  std::cos(radAngle2) * (rect2Corners[i].m_y - rect2Center.m_y) + rect2Center.m_y);
158  }
159 
160  //[Ref] http://www.gamedev.net/page/resources/_/technical/game-programming/2d-rotated-rectangle-collision-r2604
161 
162  // Find the rectangles axis to project
163  wxPoint2DDouble axis[4] = { rect1Corners[3] - rect1Corners[0], rect1Corners[3] - rect1Corners[2],
164  rect2Corners[3] - rect2Corners[0], rect2Corners[3] - rect2Corners[2] };
165 
166  // Calculate the projected points to each axis
167  wxPoint2DDouble rect1ProjPts[4][4]; // [axis][corner]
168  wxPoint2DDouble rect2ProjPts[4][4]; // [axis][corner]
169  for(int i = 0; i < 4; i++) {
170  double den = axis[i].m_x * axis[i].m_x + axis[i].m_y * axis[i].m_y;
171  for(int j = 0; j < 4; j++) {
172  double m_rectProj = (rect1Corners[j].m_x * axis[i].m_x + rect1Corners[j].m_y * axis[i].m_y) / den;
173  double rectProj = (rect2Corners[j].m_x * axis[i].m_x + rect2Corners[j].m_y * axis[i].m_y) / den;
174 
175  rect1ProjPts[i][j] = wxPoint2DDouble(m_rectProj * axis[i].m_x, m_rectProj * axis[i].m_y);
176  rect2ProjPts[i][j] = wxPoint2DDouble(rectProj * axis[i].m_x, rectProj * axis[i].m_y);
177  }
178  }
179 
180  // Calculate the scalar value to identify the max and min values on projections
181  double rect1Scalar[4][4]; //[axis][corner]
182  double rect2Scalar[4][4]; //[axis][corner]
183  for(int i = 0; i < 4; i++) {
184  for(int j = 0; j < 4; j++) {
185  rect1Scalar[i][j] = rect1ProjPts[i][j].m_x * axis[i].m_x + rect1ProjPts[i][j].m_y * axis[i].m_y;
186  rect2Scalar[i][j] = rect2ProjPts[i][j].m_x * axis[i].m_x + rect2ProjPts[i][j].m_y * axis[i].m_y;
187  }
188  }
189  // Identify the max and min scalar values
190  double rect1Min[4];
191  double rect1Max[4];
192  double rect2Min[4];
193  double rect2Max[4];
194 
195  for(int i = 0; i < 4; i++) {
196  rect1Max[i] = rect1Scalar[i][0];
197  rect2Max[i] = rect2Scalar[i][0];
198  rect1Min[i] = rect1Scalar[i][0];
199  rect2Min[i] = rect2Scalar[i][0];
200 
201  for(int j = 1; j < 4; j++) {
202  if(rect1Max[i] < rect1Scalar[i][j]) rect1Max[i] = rect1Scalar[i][j];
203  if(rect2Max[i] < rect2Scalar[i][j]) rect2Max[i] = rect2Scalar[i][j];
204 
205  if(rect1Min[i] > rect1Scalar[i][j]) rect1Min[i] = rect1Scalar[i][j];
206  if(rect2Min[i] > rect2Scalar[i][j]) rect2Min[i] = rect2Scalar[i][j];
207  }
208  }
209 
210  // Check if any segment don't overlap
211  for(int i = 0; i < 4; i++) {
212  if(!(rect2Min[i] <= rect1Max[i] && rect2Max[i] >= rect1Min[i])) return false;
213  }
214 
215  return true;
216 }
217 
218 bool Element::SetOnline(bool online)
219 {
220  // Check if any parent is null.
221  for(auto it = m_parentList.begin(); it != m_parentList.end(); it++) {
222  if(!(*it)) return false;
223  }
224  m_online = online;
225  return true;
226 }
227 
228 void Element::GeneralMenuItens(wxMenu& menu)
229 {
230  wxMenuItem* clockItem = new wxMenuItem(&menu, ID_ROTATE_CLOCK, _("Rotate clockwise"));
231  clockItem->SetBitmap(wxImage("..\\data\\images\\menu\\rotateClock16.png"));
232  menu.Append(clockItem);
233 
234  wxMenuItem* counterClockItem = new wxMenuItem(&menu, ID_ROTATE_COUNTERCLOCK, _("Rotate counter-clockwise"));
235  counterClockItem->SetBitmap(wxImage("..\\data\\images\\menu\\rotateCounterClock16.png"));
236  menu.Append(counterClockItem);
237 
238  wxMenuItem* deleteItem = new wxMenuItem(&menu, ID_DELETE, _("Delete"));
239  deleteItem->SetBitmap(wxImage("..\\data\\images\\menu\\delete16.png"));
240  menu.Append(deleteItem);
241 }
242 
243 void Element::CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const
244 {
245  // Check rect corners boundaries.
246 
247  // Get rectangle corners
248  wxPoint2DDouble rectCorner[4] = { m_rect.GetLeftTop(), m_rect.GetLeftBottom(), m_rect.GetRightBottom(),
249  m_rect.GetRightTop() };
250  // Rotate corners.
251  for(int i = 0; i < 4; ++i) {
252  rectCorner[i] = RotateAtPosition(rectCorner[i], m_angle);
253  }
254  leftUp = rectCorner[0];
255  rightBottom = rectCorner[0];
256  for(int i = 1; i < 4; ++i) {
257  if(rectCorner[i].m_x < leftUp.m_x) leftUp.m_x = rectCorner[i].m_x;
258  if(rectCorner[i].m_y < leftUp.m_y) leftUp.m_y = rectCorner[i].m_y;
259  if(rectCorner[i].m_x > rightBottom.m_x) rightBottom.m_x = rectCorner[i].m_x;
260  if(rectCorner[i].m_y > rightBottom.m_y) rightBottom.m_y = rectCorner[i].m_y;
261  }
262 
263  // Check points list boundaries.
264  for(int i = 0; i < (int)m_pointList.size(); i++) {
265  if(m_pointList[i].m_x < leftUp.m_x) leftUp.m_x = m_pointList[i].m_x;
266  if(m_pointList[i].m_y < leftUp.m_y) leftUp.m_y = m_pointList[i].m_y;
267  if(m_pointList[i].m_x > rightBottom.m_x) rightBottom.m_x = m_pointList[i].m_x;
268  if(m_pointList[i].m_y > rightBottom.m_y) rightBottom.m_y = m_pointList[i].m_y;
269  }
270 }
271 
272 bool Element::DoubleFromString(wxWindow* parent, wxString strValue, double& value, wxString errorMsg)
273 {
274  double dValue = 0.0;
275 
276  if(!strValue.ToDouble(&dValue)) {
277  wxMessageDialog msgDialog(parent, errorMsg, _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
278  msgDialog.ShowModal();
279  return false;
280  }
281 
282  value = dValue;
283  return true;
284 }
285 
286 bool Element::IntFromString(wxWindow* parent, wxString strValue, int& value, wxString errorMsg)
287 {
288  long int iValue = 0;
289 
290  if(!strValue.ToLong(&iValue)) {
291  wxMessageDialog msgDialog(parent, errorMsg, _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
292  msgDialog.ShowModal();
293  return false;
294  }
295 
296  value = iValue;
297  return true;
298 }
299 
300 wxString Element::StringFromDouble(double value, int minDecimal)
301 {
302  wxString str = wxString::FromCDouble(value, 13);
303  int cutNumber = 0;
304  int numDecimal = 0;
305  bool foundCut = false;
306  for(int i = (int)str.length() - 1; i >= 0; i--) {
307  if(str[i] != '0' && !foundCut) {
308  cutNumber = i;
309  foundCut = true;
310  }
311  if(str[i] == '.') {
312  numDecimal = i;
313  break;
314  }
315  }
316 
317  wxString formatedStr = "";
318  if(cutNumber - numDecimal > minDecimal)
319  formatedStr = wxString::FromDouble(value, cutNumber - numDecimal);
320  else
321  formatedStr = wxString::FromDouble(value, minDecimal);
322 
323  return formatedStr;
324 }
325 
326 void Element::ReplaceParent(Element* oldParent, Element* newParent)
327 {
328  for(int i = 0; i < (int)m_parentList.size(); i++) {
329  if(m_parentList[i] == oldParent) m_parentList[i] = newParent;
330  }
331 }
332 
333 void Element::AddChild(Element* child) { m_childList.push_back(child); }
334 
336 {
337  for(auto it = m_childList.begin(); it != m_childList.end(); ++it) {
338  Element* element = *it;
339  if(element == child) m_childList.erase(it--);
340  }
341 }
342 
343 void Element::ReplaceChild(Element* oldChild, Element* newChild)
344 {
345  for(int i = 0; i < (int)m_childList.size(); i++) {
346  if(m_childList[i] == oldChild) m_childList[i] = newChild;
347  }
348 }
349 
350 void OpenGLColour::SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
351 {
352  rgba[0] = red;
353  rgba[1] = green;
354  rgba[2] = blue;
355  rgba[3] = alpha;
356 }
357 
358 OpenGLColour::OpenGLColour() { SetRGBA(1.0, 1.0, 1.0, 1.0); }
359 
360 OpenGLColour::OpenGLColour(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
361 {
362  SetRGBA(red, green, blue, alpha);
363 }
364 
365 double Element::PointToLineDistance(wxPoint2DDouble point, int* segmentNumber) const
366 {
367  //[Ref] http://geomalgorithms.com/a02-_lines.html
368  double distance = 100.0; // Big initial distance.
369  wxPoint2DDouble p0 = point;
370 
371  for(int i = 1; i < (int)m_pointList.size() - 2; i++) {
372  double d = 0.0;
373 
374  wxPoint2DDouble p1 = m_pointList[i];
375  wxPoint2DDouble p2 = m_pointList[i + 1];
376 
377  wxPoint2DDouble v = p2 - p1;
378  wxPoint2DDouble w = p0 - p1;
379 
380  double c1 = w.m_x * v.m_x + w.m_y * v.m_y;
381  double c2 = v.m_x * v.m_x + v.m_y * v.m_y;
382 
383  if(c1 <= 0.0) {
384  d = std::sqrt(std::pow(p0.m_y - p1.m_y, 2) + std::pow(p0.m_x - p1.m_x, 2));
385  } else if(c2 <= c1) {
386  d = std::sqrt(std::pow(p0.m_y - p2.m_y, 2) + std::pow(p0.m_x - p2.m_x, 2));
387  } else {
388  d = std::abs((p2.m_y - p1.m_y) * p0.m_x - (p2.m_x - p1.m_x) * p0.m_y + p2.m_x * p1.m_y - p2.m_y * p1.m_x) /
389  std::sqrt(std::pow(p2.m_y - p1.m_y, 2) + std::pow(p2.m_x - p1.m_x, 2));
390  }
391  if(d < distance) {
392  distance = d;
393  if(segmentNumber) *segmentNumber = i;
394  }
395  }
396 
397  return distance;
398 }
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Element.cpp:107
+ +
virtual void DrawTriangle(std::vector< wxPoint2DDouble > points, GLenum mode=GL_TRIANGLES) const
Draw a triangle.
Definition: Element.cpp:44
+
virtual void DrawLine(std::vector< wxPoint2DDouble > points, GLenum mode=GL_LINE_STRIP) const
Draw line.
Definition: Element.cpp:73
+
virtual wxPoint2DDouble WorldToScreen(wxPoint2DDouble translation, double scale, double offsetX=0.0, double offsetY=0.0) const
Convert the element position to screen position.
Definition: Element.cpp:109
+
bool SetOnline(bool online=true)
Set if the element is online or offline.
Definition: Element.cpp:218
+
static bool DoubleFromString(wxWindow *parent, wxString strValue, double &value, wxString errorMsg)
Get a double value from a string. Show a error message if the conversion fail.
Definition: Element.cpp:272
+ +
void SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
Set the colour in RGBA. The colour values must be between 0.0 and 1.0.
Definition: Element.cpp:350
+
virtual void RemoveChild(Element *child)
Remove a child from the list.
Definition: Element.cpp:335
+
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
virtual void CalculateBoundaries(wxPoint2DDouble &leftUp, wxPoint2DDouble &rightBottom) const
Calculate the element boundaries.
Definition: Element.cpp:243
+
virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode=GL_QUADS) const
Draw rectangle.
Definition: Element.cpp:53
+
Class to manage color of OpenGL.
+
virtual void GeneralMenuItens(wxMenu &menu)
Insert general itens to context menu.
Definition: Element.cpp:228
+
virtual void ReplaceChild(Element *oldChild, Element *newChild)
Replace a child from the list.
Definition: Element.cpp:343
+
static bool IntFromString(wxWindow *parent, wxString strValue, int &value, wxString errorMsg)
Convert a string to int. Show a error message if the conversion fail.
Definition: Element.cpp:286
+
OpenGLColour()
Default construnctor. Use SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)...
Definition: Element.cpp:358
+
void SetPosition(const wxPoint2DDouble position)
Set the element position and update the rectangle.
Definition: Element.cpp:10
+ +
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+
virtual void DrawPoint(wxPoint2DDouble position, double size) const
Draw a point.
Definition: Element.cpp:124
+
virtual void DrawPickbox(wxPoint2DDouble position) const
Draw pickbox.
Definition: Element.cpp:82
+ +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+
virtual void ReplaceParent(Element *oldParent, Element *newParent)
Replace a parent.
Definition: Element.cpp:326
+
virtual double PointToLineDistance(wxPoint2DDouble point, int *segmentNumber=NULL) const
Calculate the distance between a line (formed by point list) and a point.
Definition: Element.cpp:365
+
Element()
Constructor.
Definition: Element.cpp:6
+
virtual void DrawCircle(wxPoint2DDouble position, double radius, int numSegments, GLenum mode=GL_LINE_LOOP) const
Draw a circle.
Definition: Element.cpp:17
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Element.cpp:101
+
virtual ~Element()
Destructor.
Definition: Element.cpp:8
+
virtual bool RotatedRectanglesIntersects(wxRect2DDouble rect1, wxRect2DDouble rect2, double angle1, double angle2) const
Check if two roteted rectangles intersect.
Definition: Element.cpp:132
+
+
+ + + + diff --git a/docs/doxygen/html/_element_8h.html b/docs/doxygen/html/_element_8h.html index c2a8092..1c75bf8 100644 --- a/docs/doxygen/html/_element_8h.html +++ b/docs/doxygen/html/_element_8h.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Element.h File Reference +Project/Element.h File Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Classes | @@ -121,6 +132,8 @@ Enumerations

Detailed Description

Class to manage color of OpenGL.

+ +

Definition in file Element.h.

Enumeration Type Documentation

◆ ContextMenuID

@@ -150,6 +163,8 @@ Enumerations +

Definition at line 32 of file Element.h.

+
@@ -182,14 +197,20 @@ Enumerations +

Definition at line 18 of file Element.h.

+ + - + diff --git a/docs/doxygen/html/_element_8h.js b/docs/doxygen/html/_element_8h.js new file mode 100644 index 0000000..27d7c92 --- /dev/null +++ b/docs/doxygen/html/_element_8h.js @@ -0,0 +1,22 @@ +var _element_8h = +[ + [ "OpenGLColour", "class_open_g_l_colour.html", "class_open_g_l_colour" ], + [ "Element", "class_element.html", "class_element" ], + [ "ContextMenuID", "_element_8h.html#a0a9284bee7d4ad748c4a740fdeb3f049", [ + [ "ID_EDIT_ELEMENT", "_element_8h.html#a0a9284bee7d4ad748c4a740fdeb3f049ad3186b31000d6bac43a0a20725e26b42", null ], + [ "ID_LINE_ADD_NODE", "_element_8h.html#a0a9284bee7d4ad748c4a740fdeb3f049af05f38a3b3fea5d6da036dce48e9d960", null ], + [ "ID_LINE_REMOVE_NODE", "_element_8h.html#a0a9284bee7d4ad748c4a740fdeb3f049a1a8f8c62fc201993f6a605ff06314803", null ], + [ "ID_ROTATE_CLOCK", "_element_8h.html#a0a9284bee7d4ad748c4a740fdeb3f049a9d58b2fe374676b88029d401da0d77a8", null ], + [ "ID_ROTATE_COUNTERCLOCK", "_element_8h.html#a0a9284bee7d4ad748c4a740fdeb3f049adeee9ba1a6f37ff0622ca94a52e40551", null ], + [ "ID_DELETE", "_element_8h.html#a0a9284bee7d4ad748c4a740fdeb3f049a80c989d88bc686137e96564dfad6166a", null ] + ] ], + [ "PickboxID", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316", [ + [ "ID_PB_NONE", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316a2efa051c0a3f23f2324cef5bc930f433", null ], + [ "ID_PB_RIGHT", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316af6c9b66260adb71ded1407f62d5eceb0", null ], + [ "ID_PB_LEFT", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316aa8b70955f3c623a35fb64e0d95531721", null ], + [ "ID_PB_RIGHT_BOTTOM", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316a982b811b9fa895eb15a3f8400ffa385d", null ], + [ "ID_PB_RIGHT_TOP", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316a34118762cdb912e35698c4550edf470c", null ], + [ "ID_PB_LEFT_BOTTOM", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316aa962fdbb47309de8b6f16025e2d46b2f", null ], + [ "ID_PB_LEFT_TOP", "_element_8h.html#a7b88da333c092757d91d7492dfa8e316a49b276646725b598a6b3a24ee74e8afb", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/_element_8h_source.html b/docs/doxygen/html/_element_8h_source.html index e2f5cba..1196910 100644 --- a/docs/doxygen/html/_element_8h_source.html +++ b/docs/doxygen/html/_element_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Element.h Source File +Project/Element.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Element.h
-Go to the documentation of this file.
1 #ifndef ELEMENT_H
2 #define ELEMENT_H
3 
4 #include <wx/msgdlg.h>
5 #include <wx/geometry.h>
6 #include <wx/cursor.h>
7 #include <wx/menu.h>
8 #include <GL/gl.h>
9 
10 #include <complex>
11 
12 //#include <wx/log.h>
13 
18 enum PickboxID {
19  ID_PB_NONE = 0,
26 };
27 
39 };
40 
49 {
50 public:
54  OpenGLColour();
55 
63  OpenGLColour(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
64 
68  virtual ~OpenGLColour() {}
69 
77  void SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
78 
83  const GLdouble* GetRGBA() const { return rgba; }
84 protected:
85  GLdouble rgba[4];
86 };
87 
88 class Element
89 {
90 public:
94  Element();
95 
99  virtual ~Element();
100 
105  void SetDragging(bool dragging = true) { m_dragging = dragging; }
106 
111  void SetHeight(double height) { m_height = height; }
112 
117  void SetPosition(const wxPoint2DDouble position);
118 
123  void SetSelected(bool selected = true) { m_selected = selected; }
124 
129  void SetWidth(double width) { m_width = width; }
130 
135  void SetAngle(double angle) { m_angle = angle; }
136 
141  void ShowPickbox(bool showPickbox = true) { m_showPickbox = showPickbox; }
142 
147  void SetBorderSize(double borderSize) { m_borderSize = borderSize; }
148 
153  bool SetOnline(bool online = true);
154 
159  virtual void SetPointList(std::vector<wxPoint2DDouble> pointList) { m_pointList = pointList; }
160 
165  wxRect2DDouble GetRect() const { return m_rect; }
166 
171  wxPoint2DDouble GetPosition() const { return m_position; }
172 
177  bool IsDragging() const { return m_dragging; }
178 
183  double GetHeight() const { return m_height; }
184 
189  bool IsSelected() const { return m_selected; }
190 
195  double GetWidth() const { return m_width; }
196 
201  double GetAngle() const { return m_angle; }
202 
207  double GetRotationAngle() const { return m_rotationAngle; }
208 
213  bool IsPickboxShown() const { return m_showPickbox; }
214 
219  bool IsOnline() const { return m_online; }
220 
225  virtual std::vector<wxPoint2DDouble> GetPointList() const { return m_pointList; }
226 
234  virtual bool AddParent(Element* parent, wxPoint2DDouble position) { return false; }
235 
240  virtual void AddParent(Element* parent) { m_parentList.push_back(parent); }
241 
246  virtual bool Contains(wxPoint2DDouble position) const = 0;
247 
252  virtual bool Intersects(wxRect2DDouble rect) const = 0;
253 
258  virtual Element* GetCopy() { return NULL; }
259 
264  virtual void SetID(int id) { m_elementID = id; }
265 
270  virtual int GetID() const { return m_elementID; }
271 
276  virtual void AddChild(Element* child);
277 
282  virtual void RemoveChild(Element* child);
283 
289  virtual void ReplaceChild(Element* oldChild, Element* newChild);
290 
295  virtual wxString GetTipText() const { return wxEmptyString; }
296 
302  virtual void Draw(wxPoint2DDouble translation, double scale) const {}
303 
308  virtual void Rotate(bool clockwise = true) {}
309 
315  virtual bool GetContextMenu(wxMenu& menu) { return false; }
316 
321  virtual void AddPoint(wxPoint2DDouble point) {}
322 
327  virtual void StartMove(wxPoint2DDouble position);
328 
334  virtual void Move(wxPoint2DDouble position);
335 
341  virtual void MoveNode(Element* parent, wxPoint2DDouble position) {}
342 
348  virtual bool NodeContains(wxPoint2DDouble position) { return false; }
349 
353  virtual void UpdateNodes() {}
354 
361  virtual bool SetNodeParent(Element* parent) { return false; }
362 
367  virtual void RemoveParent(Element* parent) {}
368 
374  virtual void ReplaceParent(Element* oldParent, Element* newParent);
375 
381  virtual void RotateNode(Element* parent, bool clockwise = true) {}
382 
389  virtual bool PickboxContains(wxPoint2DDouble position) { return false; }
390 
395  virtual void MovePickbox(wxPoint2DDouble position) {}
396 
401  virtual wxCursor GetBestPickboxCursor() const { return wxCURSOR_ARROW; }
402 
406  virtual void ResetPickboxes() { m_activePickboxID = ID_PB_NONE; }
407 
411  virtual void ResetNodes() { m_activeNodeID = 0; }
412 
420  virtual wxPoint2DDouble
421  WorldToScreen(wxPoint2DDouble translation, double scale, double offsetX = 0.0, double offsetY = 0.0) const;
422 
431  virtual wxPoint2DDouble WorldToScreen(wxPoint2DDouble position,
432  wxPoint2DDouble translation,
433  double scale,
434  double offsetX = 0.0,
435  double offsetY = 0.0) const;
436 
444  virtual bool
445  RotatedRectanglesIntersects(wxRect2DDouble rect1, wxRect2DDouble rect2, double angle1, double angle2) const;
446 
454  virtual void DrawCircle(wxPoint2DDouble position, double radius, int numSegments, GLenum mode = GL_LINE_LOOP) const;
455  virtual void DrawArc(wxPoint2DDouble position,
456  double radius,
457  double initAngle,
458  double finalAngle,
459  int numSegments,
460  GLenum mode = GL_LINE_LOOP) const;
461 
469  virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode = GL_QUADS) const;
470 
476  virtual void DrawRectangle(wxPoint2DDouble* points, GLenum mode = GL_QUADS) const;
477 
483  virtual void DrawTriangle(std::vector<wxPoint2DDouble> points, GLenum mode = GL_TRIANGLES) const;
484 
490  virtual void DrawPoint(wxPoint2DDouble position, double size) const;
491 
497  virtual void DrawLine(std::vector<wxPoint2DDouble> points, GLenum mode = GL_LINE_STRIP) const;
498 
503  virtual void DrawPickbox(wxPoint2DDouble position) const;
504 
511  virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees = true) const;
512 
517  virtual std::vector<Element*> GetParentList() const { return m_parentList; }
518 
523  virtual std::vector<Element*> GetChildList() const { return m_childList; }
524 
525  // virtual wxPoint2DDouble GetMoveStartPosition() const { return m_moveStartPt; }
526  // virtual wxPoint2DDouble GetMovePosition() const { return m_movePos; }
527 
533  virtual void CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const;
534 
539  virtual void GeneralMenuItens(wxMenu& menu);
540 
547  virtual bool ShowForm(wxWindow* parent, Element* element) { return false; }
548 
556  static bool DoubleFromString(wxWindow* parent, wxString strValue, double& value, wxString errorMsg);
557 
565  static bool IntFromString(wxWindow* parent, wxString strValue, int& value, wxString errorMsg);
566 
572  static wxString StringFromDouble(double value, int minDecimal = 1);
573 
580  virtual double PointToLineDistance(wxPoint2DDouble point, int* segmentNumber = NULL) const;
581 
582 protected:
583  int m_elementID = 0;
584  std::vector<Element*> m_parentList;
585  std::vector<Element*> m_childList;
586 
587  wxRect2DDouble m_rect;
588  wxPoint2DDouble m_position;
589  double m_width = 0.0;
590  double m_height = 0.0;
591  double m_angle = 0.0;
592  double m_borderSize = 2.0;
593  double m_rotationAngle = 45.0;
594  double m_switchSize = 10.0;
595 
596  std::vector<wxRect2DDouble> m_switchRect;
597 
598  bool m_selected = false;
599  bool m_dragging = false;
600  bool m_showPickbox = false;
601 
602  int m_activePickboxID = ID_PB_NONE;
603  int m_activeNodeID = 0;
604 
605  std::vector<wxPoint2DDouble> m_pointList;
606  std::vector<wxPoint2DDouble> m_movePts;
607 
608  wxPoint2DDouble m_moveStartPt;
609  wxPoint2DDouble m_movePos;
610 
611  bool m_online = true;
612 
613  OpenGLColour m_selectionColour;
614 };
615 
616 #endif // ELEMENT_H
double GetAngle() const
Get the element angle.
Definition: Element.h:201
-
void ShowPickbox(bool showPickbox=true)
Set if the pickbox is shown.
Definition: Element.h:141
-
virtual void AddPoint(wxPoint2DDouble point)
Add point to the list of points that connect the element to the bus.
Definition: Element.h:321
-
Definition: Element.h:88
-
void SetSelected(bool selected=true)
Set element selection.
Definition: Element.h:123
-
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
-
void SetWidth(double width)
Set element width.
Definition: Element.h:129
-
virtual std::vector< Element * > GetChildList() const
Get the Child list.
Definition: Element.h:523
-
virtual void ResetPickboxes()
Remove the pickboxes.
Definition: Element.h:406
-
Definition: Element.h:33
-
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Element.h:348
-
ContextMenuID
ID of contex menu itens.
Definition: Element.h:32
-
virtual bool PickboxContains(wxPoint2DDouble position)
Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be c...
Definition: Element.h:389
-
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Element.h:353
-
virtual void SetPointList(std::vector< wxPoint2DDouble > pointList)
Set the list of points that connect the element to the bus.
Definition: Element.h:159
-
Definition: Element.h:37
-
void SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
Set the colour in RGBA. The colour values must be between 0.0 and 1.0.
Definition: Element.cpp:350
-
virtual void MoveNode(Element *parent, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Element.h:341
-
Definition: Element.h:22
-
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Element.h:234
-
Definition: Element.h:34
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Element.h:302
-
bool IsPickboxShown() const
Checks if the pickbox is shown.
Definition: Element.h:213
-
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
-
wxRect2DDouble GetRect() const
Get the element rectangle.
Definition: Element.h:165
-
OpenGLColour()
Default construnctor. Use SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)...
Definition: Element.cpp:358
-
void SetAngle(double angle)
Set element angle.
Definition: Element.h:135
-
double GetWidth() const
Get the element width.
Definition: Element.h:195
-
virtual wxString GetTipText() const
Get the tip text.
Definition: Element.h:295
-
virtual ~OpenGLColour()
Destructor.
Definition: Element.h:68
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Element.h:308
-
Definition: Element.h:38
-
Definition: Element.h:25
-
Definition: Element.h:23
-
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Element.h:315
-
double GetHeight() const
Get the element height.
Definition: Element.h:183
-
virtual std::vector< wxPoint2DDouble > GetPointList() const
Get the list of points that connect the element to bus.
Definition: Element.h:225
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Element.h:547
-
virtual void AddParent(Element *parent)
Add a parent to the element.
Definition: Element.h:240
-
virtual void MovePickbox(wxPoint2DDouble position)
Move the pickbox.
Definition: Element.h:395
-
Definition: Element.h:36
-
Definition: Element.h:35
-
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Element.h:401
-
void SetBorderSize(double borderSize)
Set the size of the border (shown in selected elements).
Definition: Element.h:147
-
PickboxID
ID of the pickbox.
Definition: Element.h:18
-
bool IsSelected() const
Checks if the element is selected.
Definition: Element.h:189
-
Definition: Element.h:48
-
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Element.h:381
-
Definition: Element.h:21
-
Definition: Element.h:24
-
virtual void SetID(int id)
Set the element ID.
Definition: Element.h:264
-
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Element.h:361
-
virtual int GetID() const
Get the element ID.
Definition: Element.h:270
-
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Element.h:367
-
Definition: Element.h:20
-
bool IsDragging() const
Checks if the element is being dragged.
Definition: Element.h:177
-
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
-
virtual void ResetNodes()
Remove the active nodes.
Definition: Element.h:411
-
void SetDragging(bool dragging=true)
Set if the element are being dragged.
Definition: Element.h:105
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Element.h:258
-
double GetRotationAngle() const
Get the angle of rotation.
Definition: Element.h:207
-
void SetHeight(double height)
Set element height.
Definition: Element.h:111
-
Definition: Element.h:19
-
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+Go to the documentation of this file.
1 #ifndef ELEMENT_H
2 #define ELEMENT_H
3 
4 #include <wx/msgdlg.h>
5 #include <wx/geometry.h>
6 #include <wx/cursor.h>
7 #include <wx/menu.h>
8 #include <GL/gl.h>
9 
10 #include <complex>
11 
12 //#include <wx/log.h>
13 
18 enum PickboxID {
19  ID_PB_NONE = 0,
26 };
27 
39 };
40 
49 {
50 public:
54  OpenGLColour();
55 
63  OpenGLColour(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
64 
68  virtual ~OpenGLColour() {}
69 
77  void SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha);
78 
83  const GLdouble* GetRGBA() const { return rgba; }
84 protected:
85  GLdouble rgba[4];
86 };
87 
88 class Element
89 {
90 public:
94  Element();
95 
99  virtual ~Element();
100 
105  void SetDragging(bool dragging = true) { m_dragging = dragging; }
106 
111  void SetHeight(double height) { m_height = height; }
112 
117  void SetPosition(const wxPoint2DDouble position);
118 
123  void SetSelected(bool selected = true) { m_selected = selected; }
124 
129  void SetWidth(double width) { m_width = width; }
130 
135  void SetAngle(double angle) { m_angle = angle; }
136 
141  void ShowPickbox(bool showPickbox = true) { m_showPickbox = showPickbox; }
142 
147  void SetBorderSize(double borderSize) { m_borderSize = borderSize; }
148 
153  bool SetOnline(bool online = true);
154 
159  virtual void SetPointList(std::vector<wxPoint2DDouble> pointList) { m_pointList = pointList; }
160 
165  wxRect2DDouble GetRect() const { return m_rect; }
166 
171  wxPoint2DDouble GetPosition() const { return m_position; }
172 
177  bool IsDragging() const { return m_dragging; }
178 
183  double GetHeight() const { return m_height; }
184 
189  bool IsSelected() const { return m_selected; }
190 
195  double GetWidth() const { return m_width; }
196 
201  double GetAngle() const { return m_angle; }
202 
207  double GetRotationAngle() const { return m_rotationAngle; }
208 
213  bool IsPickboxShown() const { return m_showPickbox; }
214 
219  bool IsOnline() const { return m_online; }
220 
225  virtual std::vector<wxPoint2DDouble> GetPointList() const { return m_pointList; }
226 
234  virtual bool AddParent(Element* parent, wxPoint2DDouble position) { return false; }
235 
240  virtual void AddParent(Element* parent) { m_parentList.push_back(parent); }
241 
246  virtual bool Contains(wxPoint2DDouble position) const = 0;
247 
252  virtual bool Intersects(wxRect2DDouble rect) const = 0;
253 
258  virtual Element* GetCopy() { return NULL; }
259 
264  virtual void SetID(int id) { m_elementID = id; }
265 
270  virtual int GetID() const { return m_elementID; }
271 
276  virtual void AddChild(Element* child);
277 
282  virtual void RemoveChild(Element* child);
283 
289  virtual void ReplaceChild(Element* oldChild, Element* newChild);
290 
295  virtual wxString GetTipText() const { return wxEmptyString; }
296 
302  virtual void Draw(wxPoint2DDouble translation, double scale) const {}
303 
308  virtual void Rotate(bool clockwise = true) {}
309 
315  virtual bool GetContextMenu(wxMenu& menu) { return false; }
316 
321  virtual void AddPoint(wxPoint2DDouble point) {}
322 
327  virtual void StartMove(wxPoint2DDouble position);
328 
334  virtual void Move(wxPoint2DDouble position);
335 
341  virtual void MoveNode(Element* parent, wxPoint2DDouble position) {}
342 
348  virtual bool NodeContains(wxPoint2DDouble position) { return false; }
349 
353  virtual void UpdateNodes() {}
354 
361  virtual bool SetNodeParent(Element* parent) { return false; }
362 
367  virtual void RemoveParent(Element* parent) {}
368 
374  virtual void ReplaceParent(Element* oldParent, Element* newParent);
375 
381  virtual void RotateNode(Element* parent, bool clockwise = true) {}
382 
389  virtual bool PickboxContains(wxPoint2DDouble position) { return false; }
390 
395  virtual void MovePickbox(wxPoint2DDouble position) {}
396 
401  virtual wxCursor GetBestPickboxCursor() const { return wxCURSOR_ARROW; }
402 
406  virtual void ResetPickboxes() { m_activePickboxID = ID_PB_NONE; }
407 
411  virtual void ResetNodes() { m_activeNodeID = 0; }
412 
420  virtual wxPoint2DDouble
421  WorldToScreen(wxPoint2DDouble translation, double scale, double offsetX = 0.0, double offsetY = 0.0) const;
422 
431  virtual wxPoint2DDouble WorldToScreen(wxPoint2DDouble position,
432  wxPoint2DDouble translation,
433  double scale,
434  double offsetX = 0.0,
435  double offsetY = 0.0) const;
436 
444  virtual bool
445  RotatedRectanglesIntersects(wxRect2DDouble rect1, wxRect2DDouble rect2, double angle1, double angle2) const;
446 
454  virtual void DrawCircle(wxPoint2DDouble position, double radius, int numSegments, GLenum mode = GL_LINE_LOOP) const;
455  virtual void DrawArc(wxPoint2DDouble position,
456  double radius,
457  double initAngle,
458  double finalAngle,
459  int numSegments,
460  GLenum mode = GL_LINE_LOOP) const;
461 
469  virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode = GL_QUADS) const;
470 
476  virtual void DrawRectangle(wxPoint2DDouble* points, GLenum mode = GL_QUADS) const;
477 
483  virtual void DrawTriangle(std::vector<wxPoint2DDouble> points, GLenum mode = GL_TRIANGLES) const;
484 
490  virtual void DrawPoint(wxPoint2DDouble position, double size) const;
491 
497  virtual void DrawLine(std::vector<wxPoint2DDouble> points, GLenum mode = GL_LINE_STRIP) const;
498 
503  virtual void DrawPickbox(wxPoint2DDouble position) const;
504 
511  virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees = true) const;
512 
517  virtual std::vector<Element*> GetParentList() const { return m_parentList; }
518 
523  virtual std::vector<Element*> GetChildList() const { return m_childList; }
524 
525  // virtual wxPoint2DDouble GetMoveStartPosition() const { return m_moveStartPt; }
526  // virtual wxPoint2DDouble GetMovePosition() const { return m_movePos; }
527 
533  virtual void CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const;
534 
539  virtual void GeneralMenuItens(wxMenu& menu);
540 
547  virtual bool ShowForm(wxWindow* parent, Element* element) { return false; }
548 
556  static bool DoubleFromString(wxWindow* parent, wxString strValue, double& value, wxString errorMsg);
557 
565  static bool IntFromString(wxWindow* parent, wxString strValue, int& value, wxString errorMsg);
566 
572  static wxString StringFromDouble(double value, int minDecimal = 1);
573 
580  virtual double PointToLineDistance(wxPoint2DDouble point, int* segmentNumber = NULL) const;
581 
582 protected:
583  int m_elementID = 0;
584  std::vector<Element*> m_parentList;
585  std::vector<Element*> m_childList;
586 
587  wxRect2DDouble m_rect;
588  wxPoint2DDouble m_position;
589  double m_width = 0.0;
590  double m_height = 0.0;
591  double m_angle = 0.0;
592  double m_borderSize = 2.0;
593  double m_rotationAngle = 45.0;
594  double m_switchSize = 10.0;
595 
596  std::vector<wxRect2DDouble> m_switchRect;
597 
598  bool m_selected = false;
599  bool m_dragging = false;
600  bool m_showPickbox = false;
601 
602  int m_activePickboxID = ID_PB_NONE;
603  int m_activeNodeID = 0;
604 
605  std::vector<wxPoint2DDouble> m_pointList;
606  std::vector<wxPoint2DDouble> m_movePts;
607 
608  wxPoint2DDouble m_moveStartPt;
609  wxPoint2DDouble m_movePos;
610 
611  bool m_online = true;
612 
613  OpenGLColour m_selectionColour;
614 };
615 
616 #endif // ELEMENT_H
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+
void ShowPickbox(bool showPickbox=true)
Set if the pickbox is shown.
Definition: Element.h:141
+
virtual void AddPoint(wxPoint2DDouble point)
Add point to the list of points that connect the element to the bus.
Definition: Element.h:321
+ +
void SetSelected(bool selected=true)
Set element selection.
Definition: Element.h:123
+
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
void SetWidth(double width)
Set element width.
Definition: Element.h:129
+
virtual std::vector< Element * > GetChildList() const
Get the Child list.
Definition: Element.h:523
+
virtual void ResetPickboxes()
Remove the pickboxes.
Definition: Element.h:406
+ +
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Element.h:348
+
ContextMenuID
ID of contex menu itens.
Definition: Element.h:32
+
virtual bool PickboxContains(wxPoint2DDouble position)
Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be c...
Definition: Element.h:389
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Element.h:353
+
virtual void SetPointList(std::vector< wxPoint2DDouble > pointList)
Set the list of points that connect the element to the bus.
Definition: Element.h:159
+ +
void SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
Set the colour in RGBA. The colour values must be between 0.0 and 1.0.
Definition: Element.cpp:350
+
virtual void MoveNode(Element *parent, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Element.h:341
+ +
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Element.h:234
+ +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Element.h:302
+
bool IsPickboxShown() const
Checks if the pickbox is shown.
Definition: Element.h:213
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+
wxRect2DDouble GetRect() const
Get the element rectangle.
Definition: Element.h:165
+
OpenGLColour()
Default construnctor. Use SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)...
Definition: Element.cpp:358
+
void SetAngle(double angle)
Set element angle.
Definition: Element.h:135
+
double GetWidth() const
Get the element width.
Definition: Element.h:195
+
virtual wxString GetTipText() const
Get the tip text.
Definition: Element.h:295
+
virtual ~OpenGLColour()
Destructor.
Definition: Element.h:68
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Element.h:308
+ + + +
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Element.h:315
+
double GetHeight() const
Get the element height.
Definition: Element.h:183
+
virtual std::vector< wxPoint2DDouble > GetPointList() const
Get the list of points that connect the element to bus.
Definition: Element.h:225
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Element.h:547
+
virtual void AddParent(Element *parent)
Add a parent to the element.
Definition: Element.h:240
+
virtual void MovePickbox(wxPoint2DDouble position)
Move the pickbox.
Definition: Element.h:395
+ + +
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Element.h:401
+
void SetBorderSize(double borderSize)
Set the size of the border (shown in selected elements).
Definition: Element.h:147
+
PickboxID
ID of the pickbox.
Definition: Element.h:18
+
bool IsSelected() const
Checks if the element is selected.
Definition: Element.h:189
+ +
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Element.h:381
+ + +
virtual void SetID(int id)
Set the element ID.
Definition: Element.h:264
+
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Element.h:361
+
virtual int GetID() const
Get the element ID.
Definition: Element.h:270
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Element.h:367
+ +
bool IsDragging() const
Checks if the element is being dragged.
Definition: Element.h:177
+
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+
virtual void ResetNodes()
Remove the active nodes.
Definition: Element.h:411
+
void SetDragging(bool dragging=true)
Set if the element are being dragged.
Definition: Element.h:105
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Element.h:258
+
double GetRotationAngle() const
Get the angle of rotation.
Definition: Element.h:207
+
void SetHeight(double height)
Set element height.
Definition: Element.h:111
+ +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
- + diff --git a/docs/doxygen/html/_element_data_object_8cpp_source.html b/docs/doxygen/html/_element_data_object_8cpp_source.html new file mode 100644 index 0000000..b0398a6 --- /dev/null +++ b/docs/doxygen/html/_element_data_object_8cpp_source.html @@ -0,0 +1,99 @@ + + + + + + + +Project/ElementDataObject.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ElementDataObject.cpp
+
+
+
1 #include "ElementDataObject.h"
2 
3 ElementDataObject::ElementDataObject()
4  : wxDataObjectSimple(wxDataFormat("PSPCopy"))
5 {
6  m_elementsLists = new ElementsLists();
7 }
8 
9 ElementDataObject::ElementDataObject(std::vector<Element*> elementList)
10  : wxDataObjectSimple(wxDataFormat("PSPCopy"))
11 {
12  m_elementsLists = new ElementsLists();
13  if(elementList.size() > 0) {
14  // Separate buses (parents) from the rest of the elements (childs).
15  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) {
16  Element* copy = (*it)->GetCopy();
17  if(copy) {
18  if(Bus* bus = dynamic_cast<Bus*>(copy))
19  m_elementsLists->parentList.push_back(bus);
20  else
21  m_elementsLists->elementList.push_back(copy);
22  }
23  }
24  }
25 }
26 
27 ElementDataObject::~ElementDataObject() {}
28 size_t ElementDataObject::GetDataSize() const { return sizeof(void*); }
29 bool ElementDataObject::GetDataHere(void* buf) const
30 {
31  *(ElementsLists**)buf = m_elementsLists;
32  return true;
33 }
34 
35 bool ElementDataObject::SetData(size_t len, const void* buf)
36 {
37  m_elementsLists = *(ElementsLists**)buf;
38  return true;
39 }
+ +
Definition: Bus.h:45
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Element.h:258
+
+
+ + + + diff --git a/docs/doxygen/html/_element_data_object_8h_source.html b/docs/doxygen/html/_element_data_object_8h_source.html index fc1d8d1..21262d3 100644 --- a/docs/doxygen/html/_element_data_object_8h_source.html +++ b/docs/doxygen/html/_element_data_object_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ElementDataObject.h Source File +Project/ElementDataObject.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ElementDataObject.h
-
1 #ifndef ELEMENTDATAOBJECT_H
2 #define ELEMENTDATAOBJECT_H
3 
4 #include "Workspace.h"
5 #include <wx/dataobj.h>
6 
7 struct ElementsLists {
8  std::vector<Element*> elementList;
9  std::vector<Bus*> parentList;
10 };
11 
12 class ElementDataObject : public wxDataObjectSimple
13 {
14 public:
16  ElementDataObject(std::vector<Element*> elementList);
18 
19  size_t GetDataSize() const override;
20  bool GetDataHere(void* buf) const override;
21  bool SetData(size_t len, const void* buf) override;
22 
23  ElementsLists* GetElementsLists() { return m_elementsLists; }
24 
25 protected:
26  ElementsLists* m_elementsLists = NULL;
27 };
28 
29 #endif // ELEMENTDATAOBJECT_H
Definition: ElementDataObject.h:7
-
Definition: ElementDataObject.h:12
+
1 #ifndef ELEMENTDATAOBJECT_H
2 #define ELEMENTDATAOBJECT_H
3 
4 #include "Workspace.h"
5 #include <wx/dataobj.h>
6 
7 struct ElementsLists {
8  std::vector<Element*> elementList;
9  std::vector<Bus*> parentList;
10 };
11 
12 class ElementDataObject : public wxDataObjectSimple
13 {
14 public:
16  ElementDataObject(std::vector<Element*> elementList);
18 
19  size_t GetDataSize() const override;
20  bool GetDataHere(void* buf) const override;
21  bool SetData(size_t len, const void* buf) override;
22 
23  ElementsLists* GetElementsLists() { return m_elementsLists; }
24 
25 protected:
26  ElementsLists* m_elementsLists = NULL;
27 };
28 
29 #endif // ELEMENTDATAOBJECT_H
+
+
- + diff --git a/docs/doxygen/html/_element_form_8cpp_source.html b/docs/doxygen/html/_element_form_8cpp_source.html new file mode 100644 index 0000000..13f6153 --- /dev/null +++ b/docs/doxygen/html/_element_form_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/ElementForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ElementForm.cpp
+
+
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ElementForm.wxcp
4 // Do not modify this file by hand!
6 
7 #include "ElementForm.h"
8 
9 
10 // Declare the bitmap loading function
11 extern void wxC9EE9InitBitmapResources();
12 
13 static bool bBitmapLoaded = false;
14 
15 
16 BusFormBase::BusFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
17  : wxDialog(parent, id, title, pos, size, style)
18 {
19  if ( !bBitmapLoaded ) {
20  // We need to initialise the default bitmap handler
21  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
22  wxC9EE9InitBitmapResources();
23  bBitmapLoaded = true;
24  }
25 
26  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
27  this->SetSizer(boxSizerLvl1_1);
28 
29  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
30  m_notebook->SetName(wxT("m_notebook"));
31 
32  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
33 
34  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
35  m_notebook->AddPage(m_panelGeneral, _("General"), false);
36 
37  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
38  m_panelGeneral->SetSizer(boxSizerLvl2_1);
39 
40  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
41 
42  boxSizerLvl2_1->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
43 
44  m_textCtrlName = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
45  #if wxVERSION_NUMBER >= 3000
46  m_textCtrlName->SetHint(wxT(""));
47  #endif
48 
49  boxSizerLvl2_1->Add(m_textCtrlName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
50  m_textCtrlName->SetMinSize(wxSize(300,-1));
51 
52  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
53 
54  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
55 
56  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
57 
58  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
59 
60  m_staticTextNomVoltage = new wxStaticText(m_panelGeneral, wxID_ANY, _("Rated voltage"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
61 
62  boxSizerLvl4_1->Add(m_staticTextNomVoltage, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
63 
64  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
65 
66  boxSizerLvl4_1->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
67 
68  m_textCtrlNomVoltage = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
69  #if wxVERSION_NUMBER >= 3000
70  m_textCtrlNomVoltage->SetHint(wxT(""));
71  #endif
72 
73  boxSizerLvl5_1->Add(m_textCtrlNomVoltage, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
74 
75  wxArrayString m_choiceNomVoltageArr;
76  m_choiceNomVoltageArr.Add(wxT("V"));
77  m_choiceNomVoltageArr.Add(wxT("kV"));
78  m_choiceNomVoltage = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceNomVoltageArr, 0);
79  m_choiceNomVoltage->SetSelection(1);
80 
81  boxSizerLvl5_1->Add(m_choiceNomVoltage, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
82 
83  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
84 
85  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
86 
87  m_checkBoxCtrlVoltage = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Controlled voltage"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
88  m_checkBoxCtrlVoltage->SetValue(false);
89 
90  boxSizerLvl4_2->Add(m_checkBoxCtrlVoltage, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
91 
92  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
93 
94  boxSizerLvl4_2->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
95 
96  m_textCtrlCtrlVoltage = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
97  #if wxVERSION_NUMBER >= 3000
98  m_textCtrlCtrlVoltage->SetHint(wxT(""));
99  #endif
100 
101  boxSizerLvl5_2->Add(m_textCtrlCtrlVoltage, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
102 
103  wxArrayString m_choiceCtrlVoltageArr;
104  m_choiceCtrlVoltageArr.Add(wxT("p.u."));
105  m_choiceCtrlVoltageArr.Add(wxT("kV"));
106  m_choiceCtrlVoltage = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceCtrlVoltageArr, 0);
107  m_choiceCtrlVoltage->SetSelection(0);
108 
109  boxSizerLvl5_2->Add(m_choiceCtrlVoltage, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
110 
111  m_checkBoxSlackBus = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Slack Bus"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
112  m_checkBoxSlackBus->SetValue(false);
113 
114  boxSizerLvl2_1->Add(m_checkBoxSlackBus, 0, wxALL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
115 
116  m_panelFault = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
117  m_notebook->AddPage(m_panelFault, _("Fault"), false);
118 
119  wxBoxSizer* boxSizerLvl2_2 = new wxBoxSizer(wxVERTICAL);
120  m_panelFault->SetSizer(boxSizerLvl2_2);
121 
122  m_checkBoxFault = new wxCheckBox(m_panelFault, wxID_ANY, _("Insert fault in the bus"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
123  m_checkBoxFault->SetValue(false);
124 
125  boxSizerLvl2_2->Add(m_checkBoxFault, 0, wxALL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
126 
127  wxGridSizer* gridSizerLvl3_2 = new wxGridSizer(0, 2, 0, 0);
128 
129  boxSizerLvl2_2->Add(gridSizerLvl3_2, 0, wxEXPAND, WXC_FROM_DIP(5));
130 
131  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
132 
133  gridSizerLvl3_2->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
134 
135  m_staticTextFaultType = new wxStaticText(m_panelFault, wxID_ANY, _("Fault type"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
136 
137  boxSizerLvl4_3->Add(m_staticTextFaultType, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
138 
139  wxArrayString m_choiceFaultTypeArr;
140  m_choiceFaultTypeArr.Add(wxT("Three-phase"));
141  m_choiceFaultTypeArr.Add(wxT("Line-to-line"));
142  m_choiceFaultTypeArr.Add(wxT("Double line-to-ground"));
143  m_choiceFaultTypeArr.Add(wxT("Line-to-ground"));
144  m_choiceFaultType = new wxChoice(m_panelFault, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), m_choiceFaultTypeArr, 0);
145  m_choiceFaultType->SetSelection(0);
146 
147  boxSizerLvl4_3->Add(m_choiceFaultType, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
148 
149  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
150 
151  gridSizerLvl3_2->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
152 
153  m_staticTextFaultPlace = new wxStaticText(m_panelFault, wxID_ANY, _("Fault place"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
154 
155  boxSizerLvl4_4->Add(m_staticTextFaultPlace, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
156 
157  wxArrayString m_choiceFaultPlaceArr;
158  m_choiceFaultPlaceArr.Add(wxT("Line A"));
159  m_choiceFaultPlaceArr.Add(wxT("Line B"));
160  m_choiceFaultPlaceArr.Add(wxT("Line C"));
161  m_choiceFaultPlace = new wxChoice(m_panelFault, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), m_choiceFaultPlaceArr, 0);
162  m_choiceFaultPlace->SetSelection(0);
163 
164  boxSizerLvl4_4->Add(m_choiceFaultPlace, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
165 
166  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxVERTICAL);
167 
168  gridSizerLvl3_2->Add(boxSizerLvl4_5, 0, wxEXPAND, WXC_FROM_DIP(5));
169 
170  m_staticTextFaultResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Fault resistance (R)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
171 
172  boxSizerLvl4_5->Add(m_staticTextFaultResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
173 
174  wxBoxSizer* boxSizerLvl5_3 = new wxBoxSizer(wxHORIZONTAL);
175 
176  boxSizerLvl4_5->Add(boxSizerLvl5_3, 0, wxEXPAND, WXC_FROM_DIP(5));
177 
178  m_textCtrlFaultResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
179  #if wxVERSION_NUMBER >= 3000
180  m_textCtrlFaultResistance->SetHint(wxT(""));
181  #endif
182 
183  boxSizerLvl5_3->Add(m_textCtrlFaultResistance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
184 
185  m_staticTextPU_1 = new wxStaticText(m_panelFault, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
186 
187  boxSizerLvl5_3->Add(m_staticTextPU_1, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
188 
189  wxBoxSizer* boxSizerLvl4_6 = new wxBoxSizer(wxVERTICAL);
190 
191  gridSizerLvl3_2->Add(boxSizerLvl4_6, 0, wxEXPAND, WXC_FROM_DIP(5));
192 
193  m_staticTextReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Fault reactance (Xl)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
194 
195  boxSizerLvl4_6->Add(m_staticTextReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
196 
197  wxBoxSizer* boxSizerLvl5_4 = new wxBoxSizer(wxHORIZONTAL);
198 
199  boxSizerLvl4_6->Add(boxSizerLvl5_4, 0, wxEXPAND, WXC_FROM_DIP(5));
200 
201  m_textCtrlFaultReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
202  #if wxVERSION_NUMBER >= 3000
203  m_textCtrlFaultReactance->SetHint(wxT(""));
204  #endif
205 
206  boxSizerLvl5_4->Add(m_textCtrlFaultReactance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
207 
208  m_staticTextPU_2 = new wxStaticText(m_panelFault, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
209 
210  boxSizerLvl5_4->Add(m_staticTextPU_2, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
211 
212  m_panelStability = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
213  m_notebook->AddPage(m_panelStability, _("Stability"), false);
214 
215  wxBoxSizer* boxSizerLvl2_3 = new wxBoxSizer(wxVERTICAL);
216  m_panelStability->SetSizer(boxSizerLvl2_3);
217 
218  m_checkBoxPlotData = new wxCheckBox(m_panelStability, wxID_ANY, _("Plot bus data"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
219  m_checkBoxPlotData->SetValue(false);
220 
221  boxSizerLvl2_3->Add(m_checkBoxPlotData, 0, wxALL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
222 
223  m_checkBoxStabFault = new wxCheckBox(m_panelStability, wxID_ANY, _("Insert fault in the bus"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
224  m_checkBoxStabFault->SetValue(false);
225 
226  boxSizerLvl2_3->Add(m_checkBoxStabFault, 0, wxALL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
227 
228  wxGridSizer* gridSizerLvl3_3 = new wxGridSizer(0, 2, 0, 0);
229 
230  boxSizerLvl2_3->Add(gridSizerLvl3_3, 0, wxEXPAND, WXC_FROM_DIP(5));
231 
232  wxBoxSizer* boxSizerLvl4_7 = new wxBoxSizer(wxVERTICAL);
233 
234  gridSizerLvl3_3->Add(boxSizerLvl4_7, 0, wxEXPAND, WXC_FROM_DIP(5));
235 
236  m_staticTextStabFaultTime = new wxStaticText(m_panelStability, wxID_ANY, _("Time"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
237 
238  boxSizerLvl4_7->Add(m_staticTextStabFaultTime, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
239 
240  wxBoxSizer* boxSizerLvl5_5 = new wxBoxSizer(wxHORIZONTAL);
241 
242  boxSizerLvl4_7->Add(boxSizerLvl5_5, 0, wxEXPAND, WXC_FROM_DIP(5));
243 
244  m_textCtrlStabFaultTime = new wxTextCtrl(m_panelStability, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
245  #if wxVERSION_NUMBER >= 3000
246  m_textCtrlStabFaultTime->SetHint(wxT(""));
247  #endif
248 
249  boxSizerLvl5_5->Add(m_textCtrlStabFaultTime, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
250 
251  m_staticTextS_1 = new wxStaticText(m_panelStability, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
252 
253  boxSizerLvl5_5->Add(m_staticTextS_1, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
254 
255  wxBoxSizer* boxSizerLvl4_8 = new wxBoxSizer(wxVERTICAL);
256 
257  gridSizerLvl3_3->Add(boxSizerLvl4_8, 0, wxEXPAND, WXC_FROM_DIP(5));
258 
259  m_staticTextStabFaultLength = new wxStaticText(m_panelStability, wxID_ANY, _("Fault length"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
260 
261  boxSizerLvl4_8->Add(m_staticTextStabFaultLength, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
262 
263  wxBoxSizer* boxSizerLvl5_6 = new wxBoxSizer(wxHORIZONTAL);
264 
265  boxSizerLvl4_8->Add(boxSizerLvl5_6, 0, wxEXPAND, WXC_FROM_DIP(5));
266 
267  m_textCtrlStabFaultLength = new wxTextCtrl(m_panelStability, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
268  #if wxVERSION_NUMBER >= 3000
269  m_textCtrlStabFaultLength->SetHint(wxT(""));
270  #endif
271 
272  boxSizerLvl5_6->Add(m_textCtrlStabFaultLength, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
273 
274  m_staticTextS_2 = new wxStaticText(m_panelStability, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
275 
276  boxSizerLvl5_6->Add(m_staticTextS_2, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
277 
278  wxBoxSizer* boxSizerLvl4_9 = new wxBoxSizer(wxVERTICAL);
279 
280  gridSizerLvl3_3->Add(boxSizerLvl4_9, 0, wxEXPAND, WXC_FROM_DIP(5));
281 
282  m_staticTextStabFaultResistance = new wxStaticText(m_panelStability, wxID_ANY, _("Fault resistance (R)"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
283 
284  boxSizerLvl4_9->Add(m_staticTextStabFaultResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
285 
286  wxBoxSizer* boxSizerLvl5_7 = new wxBoxSizer(wxHORIZONTAL);
287 
288  boxSizerLvl4_9->Add(boxSizerLvl5_7, 0, wxEXPAND, WXC_FROM_DIP(5));
289 
290  m_textCtrlStabFaultResistance = new wxTextCtrl(m_panelStability, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
291  #if wxVERSION_NUMBER >= 3000
292  m_textCtrlStabFaultResistance->SetHint(wxT(""));
293  #endif
294 
295  boxSizerLvl5_7->Add(m_textCtrlStabFaultResistance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
296 
297  m_staticTextPU_3 = new wxStaticText(m_panelStability, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
298 
299  boxSizerLvl5_7->Add(m_staticTextPU_3, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
300 
301  wxBoxSizer* boxSizerLvl4_10 = new wxBoxSizer(wxVERTICAL);
302 
303  gridSizerLvl3_3->Add(boxSizerLvl4_10, 0, wxEXPAND, WXC_FROM_DIP(5));
304 
305  m_staticTextStabFaultReactance = new wxStaticText(m_panelStability, wxID_ANY, _("Fault reactance (Xl)"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
306 
307  boxSizerLvl4_10->Add(m_staticTextStabFaultReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
308 
309  wxBoxSizer* boxSizerLvl5_8 = new wxBoxSizer(wxHORIZONTAL);
310 
311  boxSizerLvl4_10->Add(boxSizerLvl5_8, 0, wxEXPAND, WXC_FROM_DIP(5));
312 
313  m_textCtrlStabFaultReactance = new wxTextCtrl(m_panelStability, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
314  #if wxVERSION_NUMBER >= 3000
315  m_textCtrlStabFaultReactance->SetHint(wxT(""));
316  #endif
317 
318  boxSizerLvl5_8->Add(m_textCtrlStabFaultReactance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
319 
320  m_staticTextPU_4 = new wxStaticText(m_panelStability, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
321 
322  boxSizerLvl5_8->Add(m_staticTextPU_4, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
323 
324  wxBoxSizer* boxSizerOkCancel = new wxBoxSizer(wxHORIZONTAL);
325 
326  boxSizerLvl1_1->Add(boxSizerOkCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
327 
328  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
329 
330  boxSizerOkCancel->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
331 
332  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
333 
334  boxSizerOkCancel->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
335 
336 
337  #if wxVERSION_NUMBER >= 2900
338  if(!wxPersistenceManager::Get().Find(m_notebook)){
339  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
340  } else {
341  wxPersistenceManager::Get().Restore(m_notebook);
342  }
343  #endif
344 
345  SetName(wxT("BusFormBase"));
346  SetSize(-1,-1);
347  if (GetSizer()) {
348  GetSizer()->Fit(this);
349  }
350  if(GetParent()) {
351  CentreOnParent(wxVERTICAL);
352  } else {
353  CentreOnScreen(wxVERTICAL);
354  }
355 #if wxVERSION_NUMBER >= 2900
356  if(!wxPersistenceManager::Get().Find(this)) {
357  wxPersistenceManager::Get().RegisterAndRestore(this);
358  } else {
359  wxPersistenceManager::Get().Restore(this);
360  }
361 #endif
362  // Connect events
363  m_choiceNomVoltage->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(BusFormBase::OnNominalVoltageChoice), NULL, this);
364  m_checkBoxCtrlVoltage->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(BusFormBase::OnControlledVoltageClick), NULL, this);
365  m_checkBoxFault->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(BusFormBase::OnInsertFaultClick), NULL, this);
366  m_choiceFaultType->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(BusFormBase::OnFaultTypeChoice), NULL, this);
367  m_checkBoxStabFault->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(BusFormBase::OnInsertStabFaultClick), NULL, this);
368  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BusFormBase::OnButtonOKClick), NULL, this);
369  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BusFormBase::OnButtonCancelClick), NULL, this);
370 
371 }
372 
373 BusFormBase::~BusFormBase()
374 {
375  m_choiceNomVoltage->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(BusFormBase::OnNominalVoltageChoice), NULL, this);
376  m_checkBoxCtrlVoltage->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(BusFormBase::OnControlledVoltageClick), NULL, this);
377  m_checkBoxFault->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(BusFormBase::OnInsertFaultClick), NULL, this);
378  m_choiceFaultType->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(BusFormBase::OnFaultTypeChoice), NULL, this);
379  m_checkBoxStabFault->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(BusFormBase::OnInsertStabFaultClick), NULL, this);
380  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BusFormBase::OnButtonOKClick), NULL, this);
381  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BusFormBase::OnButtonCancelClick), NULL, this);
382 
383 }
384 
385 SyncMachineFormBase::SyncMachineFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
386  : wxDialog(parent, id, title, pos, size, style)
387 {
388  if ( !bBitmapLoaded ) {
389  // We need to initialise the default bitmap handler
390  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
391  wxC9EE9InitBitmapResources();
392  bBitmapLoaded = true;
393  }
394 
395  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
396  this->SetSizer(boxSizerLvl1_1);
397 
398  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
399  m_notebook->SetName(wxT("m_notebook"));
400 
401  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
402 
403  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
404  m_notebook->AddPage(m_panelGeneral, _("General"), false);
405 
406  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
407  m_panelGeneral->SetSizer(boxSizerLvl2_1);
408 
409  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
410 
411  boxSizerLvl2_1->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
412 
413  m_textCtrlName = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
414  #if wxVERSION_NUMBER >= 3000
415  m_textCtrlName->SetHint(wxT(""));
416  #endif
417 
418  boxSizerLvl2_1->Add(m_textCtrlName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
419  m_textCtrlName->SetMinSize(wxSize(300,-1));
420 
421  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
422 
423  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
424 
425  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxVERTICAL);
426 
427  gridSizerLvl3_1->Add(boxSizerLvl4_5, 0, wxEXPAND, WXC_FROM_DIP(5));
428 
429  m_staticTextNominalPower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Rated power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
430 
431  boxSizerLvl4_5->Add(m_staticTextNominalPower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
432 
433  wxBoxSizer* boxSizerLvl5_5 = new wxBoxSizer(wxHORIZONTAL);
434 
435  boxSizerLvl4_5->Add(boxSizerLvl5_5, 0, wxEXPAND, WXC_FROM_DIP(5));
436 
437  m_textCtrlnominalPower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
438  #if wxVERSION_NUMBER >= 3000
439  m_textCtrlnominalPower->SetHint(wxT(""));
440  #endif
441 
442  boxSizerLvl5_5->Add(m_textCtrlnominalPower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
443 
444  wxArrayString m_choiceNominalPowerArr;
445  m_choiceNominalPowerArr.Add(wxT("VA"));
446  m_choiceNominalPowerArr.Add(wxT("kVA"));
447  m_choiceNominalPowerArr.Add(wxT("MVA"));
448  m_choiceNominalPower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceNominalPowerArr, 0);
449  m_choiceNominalPower->SetSelection(2);
450 
451  boxSizerLvl5_5->Add(m_choiceNominalPower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
452 
453  gridSizerLvl3_1->Add(0, 0, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
454 
455  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
456 
457  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
458 
459  m_staticTextActivePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Active power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
460 
461  boxSizerLvl4_1->Add(m_staticTextActivePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
462 
463  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
464 
465  boxSizerLvl4_1->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
466 
467  m_textCtrlActivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
468  #if wxVERSION_NUMBER >= 3000
469  m_textCtrlActivePower->SetHint(wxT(""));
470  #endif
471 
472  boxSizerLvl5_1->Add(m_textCtrlActivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
473 
474  wxArrayString m_choiceActivePowerArr;
475  m_choiceActivePowerArr.Add(wxT("p.u."));
476  m_choiceActivePowerArr.Add(wxT("W"));
477  m_choiceActivePowerArr.Add(wxT("kW"));
478  m_choiceActivePowerArr.Add(wxT("MW"));
479  m_choiceActivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceActivePowerArr, 0);
480  m_choiceActivePower->SetSelection(3);
481 
482  boxSizerLvl5_1->Add(m_choiceActivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
483 
484  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
485 
486  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
487 
488  m_staticTextReactivePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Reactive power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
489 
490  boxSizerLvl4_2->Add(m_staticTextReactivePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
491 
492  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
493 
494  boxSizerLvl4_2->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
495 
496  m_textCtrlReactivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
497  #if wxVERSION_NUMBER >= 3000
498  m_textCtrlReactivePower->SetHint(wxT(""));
499  #endif
500 
501  boxSizerLvl5_2->Add(m_textCtrlReactivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
502 
503  wxArrayString m_choiceReactivePowerArr;
504  m_choiceReactivePowerArr.Add(wxT("p.u."));
505  m_choiceReactivePowerArr.Add(wxT("VAr"));
506  m_choiceReactivePowerArr.Add(wxT("kVAr"));
507  m_choiceReactivePowerArr.Add(wxT("MVAr"));
508  m_choiceReactivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceReactivePowerArr, 0);
509  m_choiceReactivePower->SetSelection(3);
510 
511  boxSizerLvl5_2->Add(m_choiceReactivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
512 
513  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
514 
515  gridSizerLvl3_1->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
516 
517  m_checkBoxMaxReactive = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Max reactive power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
518  m_checkBoxMaxReactive->SetValue(false);
519 
520  boxSizerLvl4_3->Add(m_checkBoxMaxReactive, 0, wxALL, WXC_FROM_DIP(5));
521 
522  wxBoxSizer* boxSizerLvl5_3 = new wxBoxSizer(wxHORIZONTAL);
523 
524  boxSizerLvl4_3->Add(boxSizerLvl5_3, 0, wxEXPAND, WXC_FROM_DIP(5));
525 
526  m_textCtrlMaxRectivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
527  #if wxVERSION_NUMBER >= 3000
528  m_textCtrlMaxRectivePower->SetHint(wxT(""));
529  #endif
530 
531  boxSizerLvl5_3->Add(m_textCtrlMaxRectivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
532 
533  wxArrayString m_choiceMaxRectivePowerArr;
534  m_choiceMaxRectivePowerArr.Add(wxT("p.u."));
535  m_choiceMaxRectivePowerArr.Add(wxT("VAr"));
536  m_choiceMaxRectivePowerArr.Add(wxT("kVAr"));
537  m_choiceMaxRectivePowerArr.Add(wxT("MVAr"));
538  m_choiceMaxRectivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceMaxRectivePowerArr, 0);
539  m_choiceMaxRectivePower->SetSelection(3);
540 
541  boxSizerLvl5_3->Add(m_choiceMaxRectivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
542 
543  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
544 
545  gridSizerLvl3_1->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
546 
547  m_checkBoxMinReactive = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Min reactive power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
548  m_checkBoxMinReactive->SetValue(false);
549 
550  boxSizerLvl4_4->Add(m_checkBoxMinReactive, 0, wxALL, WXC_FROM_DIP(5));
551 
552  wxBoxSizer* boxSizerLvl5_4 = new wxBoxSizer(wxHORIZONTAL);
553 
554  boxSizerLvl4_4->Add(boxSizerLvl5_4, 0, wxEXPAND, WXC_FROM_DIP(5));
555 
556  m_textCtrlMinRectivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
557  #if wxVERSION_NUMBER >= 3000
558  m_textCtrlMinRectivePower->SetHint(wxT(""));
559  #endif
560 
561  boxSizerLvl5_4->Add(m_textCtrlMinRectivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
562 
563  wxArrayString m_choiceMinRectivePowerArr;
564  m_choiceMinRectivePowerArr.Add(wxT("p.u."));
565  m_choiceMinRectivePowerArr.Add(wxT("VAr"));
566  m_choiceMinRectivePowerArr.Add(wxT("kVAr"));
567  m_choiceMinRectivePowerArr.Add(wxT("MVAr"));
568  m_choiceMinRectivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceMinRectivePowerArr, 0);
569  m_choiceMinRectivePower->SetSelection(3);
570 
571  boxSizerLvl5_4->Add(m_choiceMinRectivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
572 
573  m_checkBoxUseMachinePower = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Use machine rated power as base"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
574  m_checkBoxUseMachinePower->SetValue(false);
575 
576  boxSizerLvl2_1->Add(m_checkBoxUseMachinePower, 0, wxALL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
577 
578  m_panelFault = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
579  m_notebook->AddPage(m_panelFault, _("Fault"), false);
580 
581  wxBoxSizer* boxSizerLvl2_2 = new wxBoxSizer(wxVERTICAL);
582  m_panelFault->SetSizer(boxSizerLvl2_2);
583 
584  wxStaticBoxSizer* staticBoxSizerLvl3_1 = new wxStaticBoxSizer( new wxStaticBox(m_panelFault, wxID_ANY, _("Sequence impedances (p.u.)")), wxVERTICAL);
585 
586  boxSizerLvl2_2->Add(staticBoxSizerLvl3_1, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
587 
588  wxGridSizer* gridSizerLvl4_2 = new wxGridSizer(0, 2, 0, 0);
589 
590  staticBoxSizerLvl3_1->Add(gridSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
591 
592  wxBoxSizer* boxSizerLvl5_6 = new wxBoxSizer(wxVERTICAL);
593 
594  gridSizerLvl4_2->Add(boxSizerLvl5_6, 0, wxEXPAND, WXC_FROM_DIP(5));
595 
596  m_staticTextPosResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Positive resistance (R1)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
597 
598  boxSizerLvl5_6->Add(m_staticTextPosResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
599 
600  m_textCtrlPosResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
601  #if wxVERSION_NUMBER >= 3000
602  m_textCtrlPosResistance->SetHint(wxT(""));
603  #endif
604 
605  boxSizerLvl5_6->Add(m_textCtrlPosResistance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
606 
607  wxBoxSizer* boxSizerLvl5_7 = new wxBoxSizer(wxVERTICAL);
608 
609  gridSizerLvl4_2->Add(boxSizerLvl5_7, 0, wxEXPAND, WXC_FROM_DIP(5));
610 
611  m_staticTextPosReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Positive reactance (X1)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
612 
613  boxSizerLvl5_7->Add(m_staticTextPosReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
614 
615  m_textCtrlPosReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
616  #if wxVERSION_NUMBER >= 3000
617  m_textCtrlPosReactance->SetHint(wxT(""));
618  #endif
619 
620  boxSizerLvl5_7->Add(m_textCtrlPosReactance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
621 
622  wxBoxSizer* boxSizerLvl5_8 = new wxBoxSizer(wxVERTICAL);
623 
624  gridSizerLvl4_2->Add(boxSizerLvl5_8, 0, wxEXPAND, WXC_FROM_DIP(5));
625 
626  m_staticTextNegResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Negative resistance (R2)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
627 
628  boxSizerLvl5_8->Add(m_staticTextNegResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
629 
630  m_textCtrlNegResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
631  #if wxVERSION_NUMBER >= 3000
632  m_textCtrlNegResistance->SetHint(wxT(""));
633  #endif
634 
635  boxSizerLvl5_8->Add(m_textCtrlNegResistance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
636 
637  wxBoxSizer* boxSizerLvl5_9 = new wxBoxSizer(wxVERTICAL);
638 
639  gridSizerLvl4_2->Add(boxSizerLvl5_9, 0, wxEXPAND, WXC_FROM_DIP(5));
640 
641  m_staticTextNegReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Negative reactance (X2)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
642 
643  boxSizerLvl5_9->Add(m_staticTextNegReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
644 
645  m_textCtrlNegReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
646  #if wxVERSION_NUMBER >= 3000
647  m_textCtrlNegReactance->SetHint(wxT(""));
648  #endif
649 
650  boxSizerLvl5_9->Add(m_textCtrlNegReactance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
651 
652  wxBoxSizer* boxSizerLvl5_10 = new wxBoxSizer(wxVERTICAL);
653 
654  gridSizerLvl4_2->Add(boxSizerLvl5_10, 0, wxEXPAND, WXC_FROM_DIP(5));
655 
656  m_staticTextZeroResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Zero resistance (R0)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
657 
658  boxSizerLvl5_10->Add(m_staticTextZeroResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
659 
660  m_textCtrlZeroResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
661  #if wxVERSION_NUMBER >= 3000
662  m_textCtrlZeroResistance->SetHint(wxT(""));
663  #endif
664 
665  boxSizerLvl5_10->Add(m_textCtrlZeroResistance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
666 
667  wxBoxSizer* boxSizerLvl5_11 = new wxBoxSizer(wxVERTICAL);
668 
669  gridSizerLvl4_2->Add(boxSizerLvl5_11, 0, wxEXPAND, WXC_FROM_DIP(5));
670 
671  m_staticTextZeroReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Zero reactance (X0)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
672 
673  boxSizerLvl5_11->Add(m_staticTextZeroReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
674 
675  m_textCtrlZeroReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
676  #if wxVERSION_NUMBER >= 3000
677  m_textCtrlZeroReactance->SetHint(wxT(""));
678  #endif
679 
680  boxSizerLvl5_11->Add(m_textCtrlZeroReactance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
681 
682  wxGridSizer* gridSizerLvl3_3 = new wxGridSizer(0, 2, 0, 0);
683 
684  boxSizerLvl2_2->Add(gridSizerLvl3_3, 0, wxEXPAND, WXC_FROM_DIP(5));
685 
686  wxBoxSizer* boxSizerLvl4_12 = new wxBoxSizer(wxVERTICAL);
687 
688  gridSizerLvl3_3->Add(boxSizerLvl4_12, 0, wxEXPAND, WXC_FROM_DIP(5));
689 
690  m_staticTextGrdResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Ground resistance (p.u.)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
691 
692  boxSizerLvl4_12->Add(m_staticTextGrdResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
693 
694  m_textCtrlGrdResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
695  #if wxVERSION_NUMBER >= 3000
696  m_textCtrlGrdResistance->SetHint(wxT(""));
697  #endif
698 
699  boxSizerLvl4_12->Add(m_textCtrlGrdResistance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
700 
701  wxBoxSizer* boxSizerLvl4_13 = new wxBoxSizer(wxVERTICAL);
702 
703  gridSizerLvl3_3->Add(boxSizerLvl4_13, 0, wxEXPAND, WXC_FROM_DIP(5));
704 
705  m_staticTextGrdReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Ground reactance (p.u.)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
706 
707  boxSizerLvl4_13->Add(m_staticTextGrdReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
708 
709  m_textCtrlGrdReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
710  #if wxVERSION_NUMBER >= 3000
711  m_textCtrlGrdReactance->SetHint(wxT(""));
712  #endif
713 
714  boxSizerLvl4_13->Add(m_textCtrlGrdReactance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
715 
716  m_checkBoxGroundNeutral = new wxCheckBox(m_panelFault, wxID_ANY, _("Grounded neutral"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
717  m_checkBoxGroundNeutral->SetValue(true);
718 
719  boxSizerLvl2_2->Add(m_checkBoxGroundNeutral, 0, wxALL, WXC_FROM_DIP(5));
720 
721  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
722 
723  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
724 
725  m_buttonStab = new wxButton(this, wxID_ANY, _("Stability"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
726 
727  boxSizerBottomButtons->Add(m_buttonStab, 0, wxALL|wxALIGN_LEFT, WXC_FROM_DIP(5));
728 
729  boxSizerBottomButtons->Add(0, 0, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
730 
731  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
732 
733  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
734 
735  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
736 
737  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
738 
739 
740  #if wxVERSION_NUMBER >= 2900
741  if(!wxPersistenceManager::Get().Find(m_notebook)){
742  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
743  } else {
744  wxPersistenceManager::Get().Restore(m_notebook);
745  }
746  #endif
747 
748  SetName(wxT("SyncMachineFormBase"));
749  SetSize(-1,-1);
750  if (GetSizer()) {
751  GetSizer()->Fit(this);
752  }
753  if(GetParent()) {
754  CentreOnParent(wxBOTH);
755  } else {
756  CentreOnScreen(wxBOTH);
757  }
758 #if wxVERSION_NUMBER >= 2900
759  if(!wxPersistenceManager::Get().Find(this)) {
760  wxPersistenceManager::Get().RegisterAndRestore(this);
761  } else {
762  wxPersistenceManager::Get().Restore(this);
763  }
764 #endif
765  // Connect events
766  m_checkBoxMaxReactive->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnCheckMaxReactive), NULL, this);
767  m_checkBoxMinReactive->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnCheckMinReactive), NULL, this);
768  m_buttonStab->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnStabilityButtonClick), NULL, this);
769  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnOKButtonClick), NULL, this);
770  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnCancelButtonClick), NULL, this);
771 
772 }
773 
774 SyncMachineFormBase::~SyncMachineFormBase()
775 {
776  m_checkBoxMaxReactive->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnCheckMaxReactive), NULL, this);
777  m_checkBoxMinReactive->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnCheckMinReactive), NULL, this);
778  m_buttonStab->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnStabilityButtonClick), NULL, this);
779  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnOKButtonClick), NULL, this);
780  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SyncMachineFormBase::OnCancelButtonClick), NULL, this);
781 
782 }
783 
784 GeneratorStabFormBase::GeneratorStabFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
785  : wxDialog(parent, id, title, pos, size, style)
786 {
787  if ( !bBitmapLoaded ) {
788  // We need to initialise the default bitmap handler
789  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
790  wxC9EE9InitBitmapResources();
791  bBitmapLoaded = true;
792  }
793 
794  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
795  this->SetSizer(boxSizerLvl1_1);
796 
797  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
798 
799  boxSizerLvl1_1->Add(boxSizerLvl2_1, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
800 
801  m_checkBoxPlotSyncMachine = new wxCheckBox(this, wxID_ANY, _("Plot synchronous machine data"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
802  m_checkBoxPlotSyncMachine->SetValue(false);
803 
804  boxSizerLvl2_1->Add(m_checkBoxPlotSyncMachine, 0, wxALL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
805 
806  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
807 
808  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
809 
810  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
811 
812  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
813 
814  m_staticTextInertia = new wxStaticText(this, wxID_ANY, _("Inertia (H)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
815 
816  boxSizerLvl4_1->Add(m_staticTextInertia, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
817 
818  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
819 
820  boxSizerLvl4_1->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
821 
822  m_textCtrlInertia = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
823  #if wxVERSION_NUMBER >= 3000
824  m_textCtrlInertia->SetHint(wxT(""));
825  #endif
826 
827  boxSizerLvl5_1->Add(m_textCtrlInertia, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
828 
829  m_staticTextS_1 = new wxStaticText(this, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
830 
831  boxSizerLvl5_1->Add(m_staticTextS_1, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
832 
833  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
834 
835  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
836 
837  m_staticTextDamping = new wxStaticText(this, wxID_ANY, _("Damping factor"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
838 
839  boxSizerLvl4_2->Add(m_staticTextDamping, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
840 
841  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
842 
843  boxSizerLvl4_2->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
844 
845  m_textCtrlDamping = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
846  #if wxVERSION_NUMBER >= 3000
847  m_textCtrlDamping->SetHint(wxT(""));
848  #endif
849 
850  boxSizerLvl5_2->Add(m_textCtrlDamping, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
851 
852  m_staticTextPU_1 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
853 
854  boxSizerLvl5_2->Add(m_staticTextPU_1, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
855 
856  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
857 
858  gridSizerLvl3_1->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
859 
860  m_checkBoxUseAVR = new wxCheckBox(this, wxID_ANY, _("Use AVR"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
861  m_checkBoxUseAVR->SetValue(false);
862 
863  boxSizerLvl4_3->Add(m_checkBoxUseAVR, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
864 
865  m_buttonEditAVR = new wxButton(this, wxID_ANY, _("Edit AVR"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
866 
867  boxSizerLvl4_3->Add(m_buttonEditAVR, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
868 
869  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
870 
871  gridSizerLvl3_1->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
872 
873  m_checkBoxUseSG = new wxCheckBox(this, wxID_ANY, _("Use speed governor"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
874  m_checkBoxUseSG->SetValue(false);
875 
876  boxSizerLvl4_4->Add(m_checkBoxUseSG, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
877 
878  m_buttonEditSG = new wxButton(this, wxID_ANY, _("Edit speed governor"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
879 
880  boxSizerLvl4_4->Add(m_buttonEditSG, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
881 
882  m_staticLine_1 = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxLI_HORIZONTAL);
883 
884  boxSizerLvl2_1->Add(m_staticLine_1, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
885 
886  wxGridSizer* gridSizerLvl3_2 = new wxGridSizer(0, 2, 0, 0);
887 
888  boxSizerLvl2_1->Add(gridSizerLvl3_2, 1, wxEXPAND, WXC_FROM_DIP(5));
889 
890  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxVERTICAL);
891 
892  gridSizerLvl3_2->Add(boxSizerLvl4_5, 0, wxEXPAND, WXC_FROM_DIP(5));
893 
894  m_staticTextRa = new wxStaticText(this, wxID_ANY, _("Armature resistance (Ra)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
895 
896  boxSizerLvl4_5->Add(m_staticTextRa, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
897 
898  wxBoxSizer* boxSizerLvl5_3 = new wxBoxSizer(wxHORIZONTAL);
899 
900  boxSizerLvl4_5->Add(boxSizerLvl5_3, 0, wxEXPAND, WXC_FROM_DIP(5));
901 
902  m_textCtrlRa = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
903  #if wxVERSION_NUMBER >= 3000
904  m_textCtrlRa->SetHint(wxT(""));
905  #endif
906 
907  boxSizerLvl5_3->Add(m_textCtrlRa, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
908 
909  m_staticTextPU_2 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
910 
911  boxSizerLvl5_3->Add(m_staticTextPU_2, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
912 
913  wxBoxSizer* boxSizerLvl4_6 = new wxBoxSizer(wxVERTICAL);
914 
915  gridSizerLvl3_2->Add(boxSizerLvl4_6, 0, wxEXPAND, WXC_FROM_DIP(5));
916 
917  m_staticTextXp = new wxStaticText(this, wxID_ANY, _("Potier reactance (Xp)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
918 
919  boxSizerLvl4_6->Add(m_staticTextXp, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
920 
921  wxBoxSizer* boxSizerLvl5_14 = new wxBoxSizer(wxHORIZONTAL);
922 
923  boxSizerLvl4_6->Add(boxSizerLvl5_14, 0, wxEXPAND, WXC_FROM_DIP(5));
924 
925  m_textCtrlXp = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
926  #if wxVERSION_NUMBER >= 3000
927  m_textCtrlXp->SetHint(wxT(""));
928  #endif
929 
930  boxSizerLvl5_14->Add(m_textCtrlXp, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
931 
932  m_staticTextPU_9 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
933 
934  boxSizerLvl5_14->Add(m_staticTextPU_9, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
935 
936  wxBoxSizer* boxSizerLvl4_7 = new wxBoxSizer(wxVERTICAL);
937 
938  gridSizerLvl3_2->Add(boxSizerLvl4_7, 0, wxEXPAND, WXC_FROM_DIP(5));
939 
940  m_staticTextSat = new wxStaticText(this, wxID_ANY, _("Saturation factor"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
941 
942  boxSizerLvl4_7->Add(m_staticTextSat, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
943 
944  wxBoxSizer* boxSizerLvl5_15 = new wxBoxSizer(wxHORIZONTAL);
945 
946  boxSizerLvl4_7->Add(boxSizerLvl5_15, 0, wxEXPAND, WXC_FROM_DIP(5));
947 
948  m_textCtrlSat = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
949  #if wxVERSION_NUMBER >= 3000
950  m_textCtrlSat->SetHint(wxT(""));
951  #endif
952 
953  boxSizerLvl5_15->Add(m_textCtrlSat, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
954 
955  m_staticTextPU_10 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
956 
957  boxSizerLvl5_15->Add(m_staticTextPU_10, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
958 
959  wxStaticBoxSizer* staticBoxSizerSyncronous = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Syncronous")), wxVERTICAL);
960 
961  boxSizerLvl2_1->Add(staticBoxSizerSyncronous, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
962 
963  wxGridSizer* gridSizerLvl4_3 = new wxGridSizer(0, 2, 0, 0);
964 
965  staticBoxSizerSyncronous->Add(gridSizerLvl4_3, 1, wxEXPAND, WXC_FROM_DIP(5));
966 
967  wxBoxSizer* boxSizerLvl5_4 = new wxBoxSizer(wxVERTICAL);
968 
969  gridSizerLvl4_3->Add(boxSizerLvl5_4, 0, wxEXPAND, WXC_FROM_DIP(5));
970 
971  m_staticTextSyncXd = new wxStaticText(this, wxID_ANY, _("Direct-axis reactance (Xd)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
972 
973  boxSizerLvl5_4->Add(m_staticTextSyncXd, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
974 
975  wxBoxSizer* boxSizerLvl6_1 = new wxBoxSizer(wxHORIZONTAL);
976 
977  boxSizerLvl5_4->Add(boxSizerLvl6_1, 0, wxEXPAND, WXC_FROM_DIP(5));
978 
979  m_textCtrlSyncXd = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
980  #if wxVERSION_NUMBER >= 3000
981  m_textCtrlSyncXd->SetHint(wxT(""));
982  #endif
983 
984  boxSizerLvl6_1->Add(m_textCtrlSyncXd, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
985 
986  m_staticTextPU_3 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
987 
988  boxSizerLvl6_1->Add(m_staticTextPU_3, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
989 
990  wxBoxSizer* boxSizerLvl5_5 = new wxBoxSizer(wxVERTICAL);
991 
992  gridSizerLvl4_3->Add(boxSizerLvl5_5, 0, wxEXPAND, WXC_FROM_DIP(5));
993 
994  m_staticTextSyncXq = new wxStaticText(this, wxID_ANY, _("Quadrature-axis reactance (Xq)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
995 
996  boxSizerLvl5_5->Add(m_staticTextSyncXq, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
997 
998  wxBoxSizer* boxSizerLvl6_2 = new wxBoxSizer(wxHORIZONTAL);
999 
1000  boxSizerLvl5_5->Add(boxSizerLvl6_2, 0, wxEXPAND, WXC_FROM_DIP(5));
1001 
1002  m_textCtrlSyncXq = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1003  #if wxVERSION_NUMBER >= 3000
1004  m_textCtrlSyncXq->SetHint(wxT(""));
1005  #endif
1006 
1007  boxSizerLvl6_2->Add(m_textCtrlSyncXq, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1008 
1009  m_staticTextPU_4 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1010 
1011  boxSizerLvl6_2->Add(m_staticTextPU_4, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1012 
1013  wxStaticBoxSizer* staticBoxSizerTransient = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Transient")), wxVERTICAL);
1014 
1015  boxSizerLvl2_1->Add(staticBoxSizerTransient, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1016 
1017  wxGridSizer* gridSizerLvl4_4 = new wxGridSizer(0, 2, 0, 0);
1018 
1019  staticBoxSizerTransient->Add(gridSizerLvl4_4, 1, wxEXPAND, WXC_FROM_DIP(5));
1020 
1021  wxBoxSizer* boxSizerLvl5_6 = new wxBoxSizer(wxVERTICAL);
1022 
1023  gridSizerLvl4_4->Add(boxSizerLvl5_6, 0, wxEXPAND, WXC_FROM_DIP(5));
1024 
1025  m_staticTextTranXd = new wxStaticText(this, wxID_ANY, _("Direct-axis reactance (X'd)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1026 
1027  boxSizerLvl5_6->Add(m_staticTextTranXd, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1028 
1029  wxBoxSizer* boxSizerLvl6_3 = new wxBoxSizer(wxHORIZONTAL);
1030 
1031  boxSizerLvl5_6->Add(boxSizerLvl6_3, 0, wxEXPAND, WXC_FROM_DIP(5));
1032 
1033  m_textCtrlTranXd = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1034  #if wxVERSION_NUMBER >= 3000
1035  m_textCtrlTranXd->SetHint(wxT(""));
1036  #endif
1037 
1038  boxSizerLvl6_3->Add(m_textCtrlTranXd, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1039 
1040  m_staticTextPU_5 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1041 
1042  boxSizerLvl6_3->Add(m_staticTextPU_5, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1043 
1044  wxBoxSizer* boxSizerLvl5_7 = new wxBoxSizer(wxVERTICAL);
1045 
1046  gridSizerLvl4_4->Add(boxSizerLvl5_7, 0, wxEXPAND, WXC_FROM_DIP(5));
1047 
1048  m_staticTextTranXq = new wxStaticText(this, wxID_ANY, _("Quadrature-axis reactance (X'q)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1049 
1050  boxSizerLvl5_7->Add(m_staticTextTranXq, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1051 
1052  wxBoxSizer* boxSizerLvl6_4 = new wxBoxSizer(wxHORIZONTAL);
1053 
1054  boxSizerLvl5_7->Add(boxSizerLvl6_4, 0, wxEXPAND, WXC_FROM_DIP(5));
1055 
1056  m_textCtrlTranXq = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1057  #if wxVERSION_NUMBER >= 3000
1058  m_textCtrlTranXq->SetHint(wxT(""));
1059  #endif
1060 
1061  boxSizerLvl6_4->Add(m_textCtrlTranXq, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1062 
1063  m_staticTextPU_6 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1064 
1065  boxSizerLvl6_4->Add(m_staticTextPU_6, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1066 
1067  wxBoxSizer* boxSizerLvl5_8 = new wxBoxSizer(wxVERTICAL);
1068 
1069  gridSizerLvl4_4->Add(boxSizerLvl5_8, 0, wxEXPAND, WXC_FROM_DIP(5));
1070 
1071  m_staticTextTranTd0 = new wxStaticText(this, wxID_ANY, _("Direct-axis time constant (T'd0)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1072 
1073  boxSizerLvl5_8->Add(m_staticTextTranTd0, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1074 
1075  wxBoxSizer* boxSizerLvl6_5 = new wxBoxSizer(wxHORIZONTAL);
1076 
1077  boxSizerLvl5_8->Add(boxSizerLvl6_5, 0, wxEXPAND, WXC_FROM_DIP(5));
1078 
1079  m_textCtrlTranTd0 = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1080  #if wxVERSION_NUMBER >= 3000
1081  m_textCtrlTranTd0->SetHint(wxT(""));
1082  #endif
1083 
1084  boxSizerLvl6_5->Add(m_textCtrlTranTd0, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1085 
1086  m_staticTextS_2 = new wxStaticText(this, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1087 
1088  boxSizerLvl6_5->Add(m_staticTextS_2, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1089 
1090  wxBoxSizer* boxSizerLvl5_9 = new wxBoxSizer(wxVERTICAL);
1091 
1092  gridSizerLvl4_4->Add(boxSizerLvl5_9, 0, wxEXPAND, WXC_FROM_DIP(5));
1093 
1094  m_staticTextTranTq0 = new wxStaticText(this, wxID_ANY, _("Quadrature-axis time constant (T'q0)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1095 
1096  boxSizerLvl5_9->Add(m_staticTextTranTq0, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1097 
1098  wxBoxSizer* boxSizerLvl6_6 = new wxBoxSizer(wxHORIZONTAL);
1099 
1100  boxSizerLvl5_9->Add(boxSizerLvl6_6, 0, wxEXPAND, WXC_FROM_DIP(5));
1101 
1102  m_textCtrlTranTq0 = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1103  #if wxVERSION_NUMBER >= 3000
1104  m_textCtrlTranTq0->SetHint(wxT(""));
1105  #endif
1106 
1107  boxSizerLvl6_6->Add(m_textCtrlTranTq0, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1108 
1109  m_staticTextS_3 = new wxStaticText(this, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1110 
1111  boxSizerLvl6_6->Add(m_staticTextS_3, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1112 
1113  wxStaticBoxSizer* staticBoxSizerSubtransient = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Sub-transient")), wxVERTICAL);
1114 
1115  boxSizerLvl2_1->Add(staticBoxSizerSubtransient, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1116 
1117  wxGridSizer* gridSizerLvl4_5 = new wxGridSizer(0, 2, 0, 0);
1118 
1119  staticBoxSizerSubtransient->Add(gridSizerLvl4_5, 1, wxEXPAND, WXC_FROM_DIP(5));
1120 
1121  wxBoxSizer* boxSizerLvl5_10 = new wxBoxSizer(wxVERTICAL);
1122 
1123  gridSizerLvl4_5->Add(boxSizerLvl5_10, 0, wxEXPAND, WXC_FROM_DIP(5));
1124 
1125  m_staticTextSubXd = new wxStaticText(this, wxID_ANY, _("Direct-axis reactance (X''d)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1126 
1127  boxSizerLvl5_10->Add(m_staticTextSubXd, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1128 
1129  wxBoxSizer* boxSizerLvl6_7 = new wxBoxSizer(wxHORIZONTAL);
1130 
1131  boxSizerLvl5_10->Add(boxSizerLvl6_7, 0, wxEXPAND, WXC_FROM_DIP(5));
1132 
1133  m_textCtrlSubXd = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1134  #if wxVERSION_NUMBER >= 3000
1135  m_textCtrlSubXd->SetHint(wxT(""));
1136  #endif
1137 
1138  boxSizerLvl6_7->Add(m_textCtrlSubXd, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1139 
1140  m_staticTextPU_7 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1141 
1142  boxSizerLvl6_7->Add(m_staticTextPU_7, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1143 
1144  wxBoxSizer* boxSizerLvl5_11 = new wxBoxSizer(wxVERTICAL);
1145 
1146  gridSizerLvl4_5->Add(boxSizerLvl5_11, 0, wxEXPAND, WXC_FROM_DIP(5));
1147 
1148  m_staticTextSubXq = new wxStaticText(this, wxID_ANY, _("Quadrature-axis reactance (X''q)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1149 
1150  boxSizerLvl5_11->Add(m_staticTextSubXq, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1151 
1152  wxBoxSizer* boxSizerLvl6_8 = new wxBoxSizer(wxHORIZONTAL);
1153 
1154  boxSizerLvl5_11->Add(boxSizerLvl6_8, 0, wxEXPAND, WXC_FROM_DIP(5));
1155 
1156  m_textCtrlSubXq = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1157  #if wxVERSION_NUMBER >= 3000
1158  m_textCtrlSubXq->SetHint(wxT(""));
1159  #endif
1160 
1161  boxSizerLvl6_8->Add(m_textCtrlSubXq, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1162 
1163  m_staticTextPU_8 = new wxStaticText(this, wxID_ANY, _("p.u."), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1164 
1165  boxSizerLvl6_8->Add(m_staticTextPU_8, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1166 
1167  wxBoxSizer* boxSizerLvl5_12 = new wxBoxSizer(wxVERTICAL);
1168 
1169  gridSizerLvl4_5->Add(boxSizerLvl5_12, 0, wxEXPAND, WXC_FROM_DIP(5));
1170 
1171  m_staticTextSubTd0 = new wxStaticText(this, wxID_ANY, _("Direct-axis time constant (T''d0)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1172 
1173  boxSizerLvl5_12->Add(m_staticTextSubTd0, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1174 
1175  wxBoxSizer* boxSizerLvl6_9 = new wxBoxSizer(wxHORIZONTAL);
1176 
1177  boxSizerLvl5_12->Add(boxSizerLvl6_9, 0, wxEXPAND, WXC_FROM_DIP(5));
1178 
1179  m_textCtrlSubTd0 = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1180  #if wxVERSION_NUMBER >= 3000
1181  m_textCtrlSubTd0->SetHint(wxT(""));
1182  #endif
1183 
1184  boxSizerLvl6_9->Add(m_textCtrlSubTd0, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1185 
1186  m_staticTextS_4 = new wxStaticText(this, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1187 
1188  boxSizerLvl6_9->Add(m_staticTextS_4, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1189 
1190  wxBoxSizer* boxSizerLvl5_13 = new wxBoxSizer(wxVERTICAL);
1191 
1192  gridSizerLvl4_5->Add(boxSizerLvl5_13, 0, wxEXPAND, WXC_FROM_DIP(5));
1193 
1194  m_staticTextSubTq0 = new wxStaticText(this, wxID_ANY, _("Quadrature-axis time constant (T''q0)"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1195 
1196  boxSizerLvl5_13->Add(m_staticTextSubTq0, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1197 
1198  wxBoxSizer* boxSizerLvl6_10 = new wxBoxSizer(wxHORIZONTAL);
1199 
1200  boxSizerLvl5_13->Add(boxSizerLvl6_10, 0, wxEXPAND, WXC_FROM_DIP(5));
1201 
1202  m_textCtrlSubTq0 = new wxTextCtrl(this, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1203  #if wxVERSION_NUMBER >= 3000
1204  m_textCtrlSubTq0->SetHint(wxT(""));
1205  #endif
1206 
1207  boxSizerLvl6_10->Add(m_textCtrlSubTq0, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1208 
1209  m_staticTextS_5 = new wxStaticText(this, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1210 
1211  boxSizerLvl6_10->Add(m_staticTextS_5, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1212 
1213  wxBoxSizer* boxSizerVDivider = new wxBoxSizer(wxVERTICAL);
1214 
1215  boxSizerLvl2_1->Add(boxSizerVDivider, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1216 
1217  wxBoxSizer* boxSizerSection_2 = new wxBoxSizer(wxVERTICAL);
1218 
1219  boxSizerVDivider->Add(boxSizerSection_2, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1220 
1221  wxBoxSizer* boxSizerSection_1 = new wxBoxSizer(wxVERTICAL);
1222 
1223  boxSizerVDivider->Add(boxSizerSection_1, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1224 
1225  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
1226 
1227  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1228 
1229  m_buttonSwitching = new wxButton(this, wxID_ANY, _("Switching"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1230 
1231  boxSizerBottomButtons->Add(m_buttonSwitching, 0, wxALL|wxALIGN_LEFT, WXC_FROM_DIP(5));
1232 
1233  boxSizerBottomButtons->Add(0, 0, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1234 
1235  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1236 
1237  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
1238 
1239  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1240 
1241  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
1242 
1243  SetName(wxT("GeneratorStabFormBase"));
1244  SetSize(-1,-1);
1245  if (GetSizer()) {
1246  GetSizer()->Fit(this);
1247  }
1248  if(GetParent()) {
1249  CentreOnParent(wxBOTH);
1250  } else {
1251  CentreOnScreen(wxBOTH);
1252  }
1253 #if wxVERSION_NUMBER >= 2900
1254  if(!wxPersistenceManager::Get().Find(this)) {
1255  wxPersistenceManager::Get().RegisterAndRestore(this);
1256  } else {
1257  wxPersistenceManager::Get().Restore(this);
1258  }
1259 #endif
1260  // Connect events
1261  m_checkBoxUseAVR->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::UseAVRClick), NULL, this);
1262  m_buttonEditAVR->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnEditAVRButtonClick), NULL, this);
1263  m_checkBoxUseSG->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::UseSGClick), NULL, this);
1264  m_buttonEditSG->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnSpeedGovernorButtonClick), NULL, this);
1265  m_buttonSwitching->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnSwitchingButtonClick), NULL, this);
1266  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnOKButtonClick), NULL, this);
1267  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnCancelButtonClick), NULL, this);
1268 
1269 }
1270 
1271 GeneratorStabFormBase::~GeneratorStabFormBase()
1272 {
1273  m_checkBoxUseAVR->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::UseAVRClick), NULL, this);
1274  m_buttonEditAVR->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnEditAVRButtonClick), NULL, this);
1275  m_checkBoxUseSG->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::UseSGClick), NULL, this);
1276  m_buttonEditSG->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnSpeedGovernorButtonClick), NULL, this);
1277  m_buttonSwitching->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnSwitchingButtonClick), NULL, this);
1278  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnOKButtonClick), NULL, this);
1279  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneratorStabFormBase::OnCancelButtonClick), NULL, this);
1280 
1281 }
1282 
1283 LineFormBase::LineFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
1284  : wxDialog(parent, id, title, pos, size, style)
1285 {
1286  if ( !bBitmapLoaded ) {
1287  // We need to initialise the default bitmap handler
1288  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
1289  wxC9EE9InitBitmapResources();
1290  bBitmapLoaded = true;
1291  }
1292 
1293  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
1294  this->SetSizer(boxSizerLvl1_1);
1295 
1296  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
1297  m_notebook->SetName(wxT("m_notebook"));
1298 
1299  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
1300 
1301  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
1302  m_notebook->AddPage(m_panelGeneral, _("General"), false);
1303 
1304  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
1305  m_panelGeneral->SetSizer(boxSizerLvl2_1);
1306 
1307  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1308 
1309  boxSizerLvl2_1->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1310 
1311  m_textCtrlName = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1312  #if wxVERSION_NUMBER >= 3000
1313  m_textCtrlName->SetHint(wxT(""));
1314  #endif
1315 
1316  boxSizerLvl2_1->Add(m_textCtrlName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1317  m_textCtrlName->SetMinSize(wxSize(300,-1));
1318 
1319  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
1320 
1321  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
1322 
1323  wxBoxSizer* boxSizerLvl4_9 = new wxBoxSizer(wxVERTICAL);
1324 
1325  gridSizerLvl3_1->Add(boxSizerLvl4_9, 0, wxEXPAND, WXC_FROM_DIP(5));
1326 
1327  m_staticTextNominalVoltage = new wxStaticText(m_panelGeneral, wxID_ANY, _("Rated voltage"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1328 
1329  boxSizerLvl4_9->Add(m_staticTextNominalVoltage, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1330 
1331  m_staticTextNominalVoltageValue = new wxStaticText(m_panelGeneral, wxID_ANY, _("138 kV"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1332  wxFont m_staticTextNominalVoltageValueFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
1333  m_staticTextNominalVoltageValueFont.SetWeight(wxFONTWEIGHT_BOLD);
1334  m_staticTextNominalVoltageValue->SetFont(m_staticTextNominalVoltageValueFont);
1335 
1336  boxSizerLvl4_9->Add(m_staticTextNominalVoltageValue, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1337 
1338  wxBoxSizer* boxSizerLvl4_8 = new wxBoxSizer(wxVERTICAL);
1339 
1340  gridSizerLvl3_1->Add(boxSizerLvl4_8, 0, wxEXPAND, WXC_FROM_DIP(5));
1341 
1342  m_staticTextNominalPower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Rated power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1343 
1344  boxSizerLvl4_8->Add(m_staticTextNominalPower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1345 
1346  wxBoxSizer* boxSizerLvl5_5 = new wxBoxSizer(wxHORIZONTAL);
1347 
1348  boxSizerLvl4_8->Add(boxSizerLvl5_5, 0, wxEXPAND, WXC_FROM_DIP(5));
1349 
1350  m_textCtrlNominalPower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1351  #if wxVERSION_NUMBER >= 3000
1352  m_textCtrlNominalPower->SetHint(wxT(""));
1353  #endif
1354 
1355  boxSizerLvl5_5->Add(m_textCtrlNominalPower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1356 
1357  wxArrayString m_choiceNominalPowerArr;
1358  m_choiceNominalPowerArr.Add(wxT("VA"));
1359  m_choiceNominalPowerArr.Add(wxT("kVA"));
1360  m_choiceNominalPowerArr.Add(wxT("MVA"));
1361  m_choiceNominalPower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceNominalPowerArr, 0);
1362  m_choiceNominalPower->SetSelection(2);
1363 
1364  boxSizerLvl5_5->Add(m_choiceNominalPower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
1365 
1366  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
1367 
1368  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
1369 
1370  m_staticTextResistance = new wxStaticText(m_panelGeneral, wxID_ANY, _("Resistance (R)"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1371 
1372  boxSizerLvl4_1->Add(m_staticTextResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1373 
1374  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
1375 
1376  boxSizerLvl4_1->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
1377 
1378  m_textCtrlResistance = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1379  #if wxVERSION_NUMBER >= 3000
1380  m_textCtrlResistance->SetHint(wxT(""));
1381  #endif
1382 
1383  boxSizerLvl5_1->Add(m_textCtrlResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1384 
1385  wxArrayString m_choiceResistanceArr;
1386  m_choiceResistanceArr.Add(wxT("p.u."));
1387  m_choiceResistanceArr.Add(wxT("Ohm"));
1388  m_choiceResistanceArr.Add(wxT("Ohm/km"));
1389  m_choiceResistance = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceResistanceArr, 0);
1390  m_choiceResistance->SetSelection(0);
1391 
1392  boxSizerLvl5_1->Add(m_choiceResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
1393 
1394  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
1395 
1396  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
1397 
1398  m_staticTextReactance = new wxStaticText(m_panelGeneral, wxID_ANY, _("Indutive reactance (XL)"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1399 
1400  boxSizerLvl4_2->Add(m_staticTextReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1401 
1402  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
1403 
1404  boxSizerLvl4_2->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
1405 
1406  m_textCtrlReactance = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1407  #if wxVERSION_NUMBER >= 3000
1408  m_textCtrlReactance->SetHint(wxT(""));
1409  #endif
1410 
1411  boxSizerLvl5_2->Add(m_textCtrlReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1412 
1413  wxArrayString m_choiceReactanceArr;
1414  m_choiceReactanceArr.Add(wxT("p.u."));
1415  m_choiceReactanceArr.Add(wxT("Ohm"));
1416  m_choiceReactanceArr.Add(wxT("Ohm/km"));
1417  m_choiceReactance = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceReactanceArr, 0);
1418  m_choiceReactance->SetSelection(0);
1419 
1420  boxSizerLvl5_2->Add(m_choiceReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
1421 
1422  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
1423 
1424  gridSizerLvl3_1->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
1425 
1426  m_staticTextSusceptance = new wxStaticText(m_panelGeneral, wxID_ANY, _("Capacitive susceptance (B)"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1427 
1428  boxSizerLvl4_3->Add(m_staticTextSusceptance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1429 
1430  wxBoxSizer* boxSizerLvl5_3 = new wxBoxSizer(wxHORIZONTAL);
1431 
1432  boxSizerLvl4_3->Add(boxSizerLvl5_3, 0, wxEXPAND, WXC_FROM_DIP(5));
1433 
1434  m_textCtrlSusceptance = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1435  #if wxVERSION_NUMBER >= 3000
1436  m_textCtrlSusceptance->SetHint(wxT(""));
1437  #endif
1438 
1439  boxSizerLvl5_3->Add(m_textCtrlSusceptance, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1440 
1441  wxArrayString m_choiceSusceptanceArr;
1442  m_choiceSusceptanceArr.Add(wxT("p.u."));
1443  m_choiceSusceptanceArr.Add(wxT("S"));
1444  m_choiceSusceptanceArr.Add(wxT("S/km"));
1445  m_choiceSusceptance = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceSusceptanceArr, 0);
1446  m_choiceSusceptance->SetSelection(0);
1447 
1448  boxSizerLvl5_3->Add(m_choiceSusceptance, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
1449 
1450  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
1451 
1452  gridSizerLvl3_1->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
1453 
1454  m_staticTextLineSize = new wxStaticText(m_panelGeneral, wxID_ANY, _("Line size"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1455 
1456  boxSizerLvl4_4->Add(m_staticTextLineSize, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1457 
1458  wxBoxSizer* boxSizerLvl5_4 = new wxBoxSizer(wxHORIZONTAL);
1459 
1460  boxSizerLvl4_4->Add(boxSizerLvl5_4, 0, wxEXPAND, WXC_FROM_DIP(5));
1461 
1462  m_textCtrlLineSize = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1463  #if wxVERSION_NUMBER >= 3000
1464  m_textCtrlLineSize->SetHint(wxT(""));
1465  #endif
1466 
1467  boxSizerLvl5_4->Add(m_textCtrlLineSize, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1468 
1469  m_staticTextKM = new wxStaticText(m_panelGeneral, wxID_ANY, _("km"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1470 
1471  boxSizerLvl5_4->Add(m_staticTextKM, 0, wxALL, WXC_FROM_DIP(5));
1472 
1473  m_checkUseLinePower = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Use line rated power as base"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1474  m_checkUseLinePower->SetValue(false);
1475 
1476  boxSizerLvl2_1->Add(m_checkUseLinePower, 0, wxALL, WXC_FROM_DIP(5));
1477 
1478  m_panelFault = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
1479  m_notebook->AddPage(m_panelFault, _("Fault"), false);
1480 
1481  wxBoxSizer* boxSizerLvl2_2 = new wxBoxSizer(wxVERTICAL);
1482  m_panelFault->SetSizer(boxSizerLvl2_2);
1483 
1484  wxStaticBoxSizer* staticBoxSizerZeroImpSeq = new wxStaticBoxSizer( new wxStaticBox(m_panelFault, wxID_ANY, _("Zero-sequence impedances (p.u.)")), wxVERTICAL);
1485 
1486  boxSizerLvl2_2->Add(staticBoxSizerZeroImpSeq, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1487 
1488  wxGridSizer* gridSizerLvl3_2 = new wxGridSizer(0, 2, 0, 0);
1489 
1490  staticBoxSizerZeroImpSeq->Add(gridSizerLvl3_2, 0, wxEXPAND, WXC_FROM_DIP(5));
1491 
1492  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxVERTICAL);
1493 
1494  gridSizerLvl3_2->Add(boxSizerLvl4_5, 0, wxEXPAND, WXC_FROM_DIP(5));
1495 
1496  m_staticTextZeroResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Resistance (R0)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1497 
1498  boxSizerLvl4_5->Add(m_staticTextZeroResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1499 
1500  m_textCtrlZeroResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1501  #if wxVERSION_NUMBER >= 3000
1502  m_textCtrlZeroResistance->SetHint(wxT(""));
1503  #endif
1504 
1505  boxSizerLvl4_5->Add(m_textCtrlZeroResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1506 
1507  wxBoxSizer* boxSizerLvl4_6 = new wxBoxSizer(wxVERTICAL);
1508 
1509  gridSizerLvl3_2->Add(boxSizerLvl4_6, 0, wxEXPAND, WXC_FROM_DIP(5));
1510 
1511  m_staticTextZeroReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Indutive reactance (X0)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1512 
1513  boxSizerLvl4_6->Add(m_staticTextZeroReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1514 
1515  m_textCtrlZeroReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1516  #if wxVERSION_NUMBER >= 3000
1517  m_textCtrlZeroReactance->SetHint(wxT(""));
1518  #endif
1519 
1520  boxSizerLvl4_6->Add(m_textCtrlZeroReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1521 
1522  wxBoxSizer* boxSizerLvl4_7 = new wxBoxSizer(wxVERTICAL);
1523 
1524  gridSizerLvl3_2->Add(boxSizerLvl4_7, 0, wxEXPAND, WXC_FROM_DIP(5));
1525 
1526  m_staticTextZeroSusceptance = new wxStaticText(m_panelFault, wxID_ANY, _("Capacitive susceptance (B0)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1527 
1528  boxSizerLvl4_7->Add(m_staticTextZeroSusceptance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1529 
1530  m_textCtrlZeroSusceptance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1531  #if wxVERSION_NUMBER >= 3000
1532  m_textCtrlZeroSusceptance->SetHint(wxT(""));
1533  #endif
1534 
1535  boxSizerLvl4_7->Add(m_textCtrlZeroSusceptance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1536 
1537  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
1538 
1539  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1540 
1541  m_buttonStability = new wxButton(this, wxID_ANY, _("Stability"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1542 
1543  boxSizerBottomButtons->Add(m_buttonStability, 0, wxALL|wxALIGN_LEFT, WXC_FROM_DIP(5));
1544 
1545  boxSizerBottomButtons->Add(0, 0, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1546 
1547  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1548 
1549  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
1550 
1551  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1552 
1553  boxSizerBottomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
1554 
1555 
1556  #if wxVERSION_NUMBER >= 2900
1557  if(!wxPersistenceManager::Get().Find(m_notebook)){
1558  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
1559  } else {
1560  wxPersistenceManager::Get().Restore(m_notebook);
1561  }
1562  #endif
1563 
1564  SetName(wxT("LineFormBase"));
1565  SetSize(-1,-1);
1566  if (GetSizer()) {
1567  GetSizer()->Fit(this);
1568  }
1569  if(GetParent()) {
1570  CentreOnParent(wxBOTH);
1571  } else {
1572  CentreOnScreen(wxBOTH);
1573  }
1574 #if wxVERSION_NUMBER >= 2900
1575  if(!wxPersistenceManager::Get().Find(this)) {
1576  wxPersistenceManager::Get().RegisterAndRestore(this);
1577  } else {
1578  wxPersistenceManager::Get().Restore(this);
1579  }
1580 #endif
1581  // Connect events
1582  m_buttonStability->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LineFormBase::OnStabilityButtonClick), NULL, this);
1583  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LineFormBase::OnOKButtonClick), NULL, this);
1584  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LineFormBase::OnCancelButtonClick), NULL, this);
1585 
1586 }
1587 
1588 LineFormBase::~LineFormBase()
1589 {
1590  m_buttonStability->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LineFormBase::OnStabilityButtonClick), NULL, this);
1591  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LineFormBase::OnOKButtonClick), NULL, this);
1592  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LineFormBase::OnCancelButtonClick), NULL, this);
1593 
1594 }
1595 
1596 TransformerFormBase::TransformerFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
1597  : wxDialog(parent, id, title, pos, size, style)
1598 {
1599  if ( !bBitmapLoaded ) {
1600  // We need to initialise the default bitmap handler
1601  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
1602  wxC9EE9InitBitmapResources();
1603  bBitmapLoaded = true;
1604  }
1605 
1606  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
1607  this->SetSizer(boxSizerLvl1_1);
1608 
1609  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
1610  m_notebook->SetName(wxT("m_notebook"));
1611 
1612  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
1613 
1614  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
1615  m_notebook->AddPage(m_panelGeneral, _("General"), false);
1616 
1617  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
1618  m_panelGeneral->SetSizer(boxSizerLvl2_1);
1619 
1620  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1621 
1622  boxSizerLvl2_1->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1623 
1624  m_textCtrlName = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1625  #if wxVERSION_NUMBER >= 3000
1626  m_textCtrlName->SetHint(wxT(""));
1627  #endif
1628 
1629  boxSizerLvl2_1->Add(m_textCtrlName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1630  m_textCtrlName->SetMinSize(wxSize(300,-1));
1631 
1632  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
1633 
1634  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
1635 
1636  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
1637 
1638  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
1639 
1640  m_staticTextNominalVoltage = new wxStaticText(m_panelGeneral, wxID_ANY, _("Rated voltage"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1641 
1642  boxSizerLvl4_1->Add(m_staticTextNominalVoltage, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1643 
1644  m_staticTextNominalVoltageValue = new wxStaticText(m_panelGeneral, wxID_ANY, _("138 kV / 138 kV"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1645  wxFont m_staticTextNominalVoltageValueFont = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
1646  m_staticTextNominalVoltageValueFont.SetWeight(wxFONTWEIGHT_BOLD);
1647  m_staticTextNominalVoltageValue->SetFont(m_staticTextNominalVoltageValueFont);
1648 
1649  boxSizerLvl4_1->Add(m_staticTextNominalVoltageValue, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1650 
1651  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxVERTICAL);
1652 
1653  gridSizerLvl3_1->Add(boxSizerLvl4_5, 0, wxEXPAND, WXC_FROM_DIP(5));
1654 
1655  m_staticTextBaseVoltage = new wxStaticText(m_panelGeneral, wxID_ANY, _("Base voltage"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1656 
1657  boxSizerLvl4_5->Add(m_staticTextBaseVoltage, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1658 
1659  wxArrayString m_choiceBaseVoltageArr;
1660  m_choiceBaseVoltageArr.Add(wxT("138 kV"));
1661  m_choiceBaseVoltageArr.Add(wxT("138 kV"));
1662  m_choiceBaseVoltage = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceBaseVoltageArr, 0);
1663  m_choiceBaseVoltage->SetSelection(0);
1664 
1665  boxSizerLvl4_5->Add(m_choiceBaseVoltage, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
1666 
1667  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
1668 
1669  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
1670 
1671  m_staticTextNominalPower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Rated power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1672 
1673  boxSizerLvl4_2->Add(m_staticTextNominalPower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1674 
1675  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
1676 
1677  boxSizerLvl4_2->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
1678 
1679  m_textCtrlNominalPower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1680  #if wxVERSION_NUMBER >= 3000
1681  m_textCtrlNominalPower->SetHint(wxT(""));
1682  #endif
1683 
1684  boxSizerLvl5_1->Add(m_textCtrlNominalPower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1685 
1686  wxArrayString m_choiceNominalPowerArr;
1687  m_choiceNominalPowerArr.Add(wxT("VA"));
1688  m_choiceNominalPowerArr.Add(wxT("kVA"));
1689  m_choiceNominalPowerArr.Add(wxT("MVA"));
1690  m_choiceNominalPower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceNominalPowerArr, 0);
1691  m_choiceNominalPower->SetSelection(2);
1692 
1693  boxSizerLvl5_1->Add(m_choiceNominalPower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
1694 
1695  gridSizerLvl3_1->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
1696 
1697  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
1698 
1699  gridSizerLvl3_1->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
1700 
1701  m_staticTextResistance = new wxStaticText(m_panelGeneral, wxID_ANY, _("Resistance (R)"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1702 
1703  boxSizerLvl4_3->Add(m_staticTextResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1704 
1705  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
1706 
1707  boxSizerLvl4_3->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
1708 
1709  m_textCtrlResistance = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1710  #if wxVERSION_NUMBER >= 3000
1711  m_textCtrlResistance->SetHint(wxT(""));
1712  #endif
1713 
1714  boxSizerLvl5_2->Add(m_textCtrlResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1715 
1716  wxArrayString m_choiceResistanceArr;
1717  m_choiceResistanceArr.Add(wxT("p.u."));
1718  m_choiceResistanceArr.Add(wxT("Ohm"));
1719  m_choiceResistance = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceResistanceArr, 0);
1720  m_choiceResistance->SetSelection(0);
1721 
1722  boxSizerLvl5_2->Add(m_choiceResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
1723 
1724  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
1725 
1726  gridSizerLvl3_1->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
1727 
1728  m_staticTextReactance = new wxStaticText(m_panelGeneral, wxID_ANY, _("Indutive reactance (XL)"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1729 
1730  boxSizerLvl4_4->Add(m_staticTextReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1731 
1732  wxBoxSizer* boxSizerLvl5_3 = new wxBoxSizer(wxHORIZONTAL);
1733 
1734  boxSizerLvl4_4->Add(boxSizerLvl5_3, 0, wxEXPAND, WXC_FROM_DIP(5));
1735 
1736  m_textCtrlReactance = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1737  #if wxVERSION_NUMBER >= 3000
1738  m_textCtrlReactance->SetHint(wxT(""));
1739  #endif
1740 
1741  boxSizerLvl5_3->Add(m_textCtrlReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1742 
1743  wxArrayString m_choiceReactanceArr;
1744  m_choiceReactanceArr.Add(wxT("p.u."));
1745  m_choiceReactanceArr.Add(wxT("Ohm"));
1746  m_choiceReactance = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceReactanceArr, 0);
1747  m_choiceReactance->SetSelection(0);
1748 
1749  boxSizerLvl5_3->Add(m_choiceReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
1750 
1751  m_staticLine_1 = new wxStaticLine(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), wxLI_HORIZONTAL);
1752 
1753  boxSizerLvl2_1->Add(m_staticLine_1, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1754 
1755  wxBoxSizer* boxSizerLvl3_1 = new wxBoxSizer(wxVERTICAL);
1756 
1757  boxSizerLvl2_1->Add(boxSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
1758 
1759  m_staticTextConnection = new wxStaticText(m_panelGeneral, wxID_ANY, _("Connection"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1760 
1761  boxSizerLvl3_1->Add(m_staticTextConnection, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1762 
1763  wxArrayString m_choiceConnectionArr;
1764  m_choiceConnectionArr.Add(wxT("Grounded Wye - Grounded Wye"));
1765  m_choiceConnectionArr.Add(wxT("Wye - Grounded Wye"));
1766  m_choiceConnectionArr.Add(wxT("Grounded Wye - Wye"));
1767  m_choiceConnectionArr.Add(wxT("Wye - Wye"));
1768  m_choiceConnectionArr.Add(wxT("Delta - Grounded Wye"));
1769  m_choiceConnectionArr.Add(wxT("Delta - Wye"));
1770  m_choiceConnectionArr.Add(wxT("Grounded Wye - Delta"));
1771  m_choiceConnectionArr.Add(wxT("Wye - Delta"));
1772  m_choiceConnectionArr.Add(wxT("Delta - Delta"));
1773  m_choiceConnection = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceConnectionArr, 0);
1774  m_choiceConnection->SetSelection(0);
1775 
1776  boxSizerLvl3_1->Add(m_choiceConnection, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
1777 
1778  wxGridSizer* gridSizerLvl3_2 = new wxGridSizer(0, 2, 0, 0);
1779 
1780  boxSizerLvl2_1->Add(gridSizerLvl3_2, 0, wxEXPAND, WXC_FROM_DIP(5));
1781 
1782  wxBoxSizer* boxSizerLvl4_6 = new wxBoxSizer(wxVERTICAL);
1783 
1784  gridSizerLvl3_2->Add(boxSizerLvl4_6, 0, wxEXPAND, WXC_FROM_DIP(5));
1785 
1786  m_staticTextTurnsRatio = new wxStaticText(m_panelGeneral, wxID_ANY, _("Turns ratio"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1787 
1788  boxSizerLvl4_6->Add(m_staticTextTurnsRatio, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1789 
1790  m_textCtrlTurnRatio = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1791  #if wxVERSION_NUMBER >= 3000
1792  m_textCtrlTurnRatio->SetHint(wxT(""));
1793  #endif
1794 
1795  boxSizerLvl4_6->Add(m_textCtrlTurnRatio, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1796 
1797  wxBoxSizer* boxSizerLvl4_7 = new wxBoxSizer(wxVERTICAL);
1798 
1799  gridSizerLvl3_2->Add(boxSizerLvl4_7, 0, wxEXPAND, WXC_FROM_DIP(5));
1800 
1801  m_staticTextPhaseShift = new wxStaticText(m_panelGeneral, wxID_ANY, _("Phase shift"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1802 
1803  boxSizerLvl4_7->Add(m_staticTextPhaseShift, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1804 
1805  wxBoxSizer* boxSizerLvl5_4 = new wxBoxSizer(wxHORIZONTAL);
1806 
1807  boxSizerLvl4_7->Add(boxSizerLvl5_4, 0, wxEXPAND, WXC_FROM_DIP(5));
1808 
1809  m_textCtrlPhaseShift = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1810  #if wxVERSION_NUMBER >= 3000
1811  m_textCtrlPhaseShift->SetHint(wxT(""));
1812  #endif
1813 
1814  boxSizerLvl5_4->Add(m_textCtrlPhaseShift, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1815 
1816  m_staticTextDeg = new wxStaticText(m_panelGeneral, wxID_ANY, _("degrees"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1817 
1818  boxSizerLvl5_4->Add(m_staticTextDeg, 0, wxALL, WXC_FROM_DIP(5));
1819 
1820  m_checkUseTransformerPower = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Use transformer rated power as base"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
1821  m_checkUseTransformerPower->SetValue(false);
1822 
1823  boxSizerLvl2_1->Add(m_checkUseTransformerPower, 0, wxALL, WXC_FROM_DIP(5));
1824 
1825  m_panelFault = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
1826  m_notebook->AddPage(m_panelFault, _("Fault"), false);
1827 
1828  wxBoxSizer* boxSizerLvl2_2 = new wxBoxSizer(wxVERTICAL);
1829  m_panelFault->SetSizer(boxSizerLvl2_2);
1830 
1831  wxStaticBoxSizer* staticBoxSizerZeroImpSeq = new wxStaticBoxSizer( new wxStaticBox(m_panelFault, wxID_ANY, _("Zero-sequence impedances (p.u.)")), wxVERTICAL);
1832 
1833  boxSizerLvl2_2->Add(staticBoxSizerZeroImpSeq, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1834 
1835  wxGridSizer* gridSizerLvl3_3 = new wxGridSizer(0, 2, 0, 0);
1836 
1837  staticBoxSizerZeroImpSeq->Add(gridSizerLvl3_3, 0, wxEXPAND, WXC_FROM_DIP(5));
1838 
1839  wxBoxSizer* boxSizerLvl4_8 = new wxBoxSizer(wxVERTICAL);
1840 
1841  gridSizerLvl3_3->Add(boxSizerLvl4_8, 0, wxEXPAND, WXC_FROM_DIP(5));
1842 
1843  m_staticTextZeroResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Resistance (R0)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1844 
1845  boxSizerLvl4_8->Add(m_staticTextZeroResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1846 
1847  m_textCtrlZeroResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1848  #if wxVERSION_NUMBER >= 3000
1849  m_textCtrlZeroResistance->SetHint(wxT(""));
1850  #endif
1851 
1852  boxSizerLvl4_8->Add(m_textCtrlZeroResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1853 
1854  wxBoxSizer* boxSizerLvl4_9 = new wxBoxSizer(wxVERTICAL);
1855 
1856  gridSizerLvl3_3->Add(boxSizerLvl4_9, 0, wxEXPAND, WXC_FROM_DIP(5));
1857 
1858  m_staticTextZeroReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Indutive reactance (X0)"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1859 
1860  boxSizerLvl4_9->Add(m_staticTextZeroReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1861 
1862  m_textCtrlZeroReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1863  #if wxVERSION_NUMBER >= 3000
1864  m_textCtrlZeroReactance->SetHint(wxT(""));
1865  #endif
1866 
1867  boxSizerLvl4_9->Add(m_textCtrlZeroReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1868 
1869  wxStaticBoxSizer* staticBoxSizerGroundImpedances = new wxStaticBoxSizer( new wxStaticBox(m_panelFault, wxID_ANY, _("Ground impedances (p.u.)")), wxVERTICAL);
1870 
1871  boxSizerLvl2_2->Add(staticBoxSizerGroundImpedances, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1872 
1873  wxGridSizer* gridSizerLvl3_4 = new wxGridSizer(0, 2, 0, 0);
1874 
1875  staticBoxSizerGroundImpedances->Add(gridSizerLvl3_4, 0, wxEXPAND, WXC_FROM_DIP(5));
1876 
1877  wxBoxSizer* boxSizerLvl4_10 = new wxBoxSizer(wxVERTICAL);
1878 
1879  gridSizerLvl3_4->Add(boxSizerLvl4_10, 0, wxEXPAND, WXC_FROM_DIP(5));
1880 
1881  m_staticTextPrimResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Primary resistance"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1882 
1883  boxSizerLvl4_10->Add(m_staticTextPrimResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1884 
1885  m_textCtrlPrimResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1886  #if wxVERSION_NUMBER >= 3000
1887  m_textCtrlPrimResistance->SetHint(wxT(""));
1888  #endif
1889 
1890  boxSizerLvl4_10->Add(m_textCtrlPrimResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1891 
1892  wxBoxSizer* boxSizerLvl4_11 = new wxBoxSizer(wxVERTICAL);
1893 
1894  gridSizerLvl3_4->Add(boxSizerLvl4_11, 0, wxEXPAND, WXC_FROM_DIP(5));
1895 
1896  m_staticTextPrimReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Primary reactance"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1897 
1898  boxSizerLvl4_11->Add(m_staticTextPrimReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1899 
1900  m_textCtrlPrimReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1901  #if wxVERSION_NUMBER >= 3000
1902  m_textCtrlPrimReactance->SetHint(wxT(""));
1903  #endif
1904 
1905  boxSizerLvl4_11->Add(m_textCtrlPrimReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1906 
1907  wxBoxSizer* boxSizerLvl4_12 = new wxBoxSizer(wxVERTICAL);
1908 
1909  gridSizerLvl3_4->Add(boxSizerLvl4_12, 0, wxEXPAND, WXC_FROM_DIP(5));
1910 
1911  m_staticTextSecResistance = new wxStaticText(m_panelFault, wxID_ANY, _("Secondary resistance"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1912 
1913  boxSizerLvl4_12->Add(m_staticTextSecResistance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1914 
1915  m_textCtrlSecResistance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1916  #if wxVERSION_NUMBER >= 3000
1917  m_textCtrlSecResistance->SetHint(wxT(""));
1918  #endif
1919 
1920  boxSizerLvl4_12->Add(m_textCtrlSecResistance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1921 
1922  wxBoxSizer* boxSizerLvl4_13 = new wxBoxSizer(wxVERTICAL);
1923 
1924  gridSizerLvl3_4->Add(boxSizerLvl4_13, 0, wxEXPAND, WXC_FROM_DIP(5));
1925 
1926  m_staticTextSecReactance = new wxStaticText(m_panelFault, wxID_ANY, _("Secondary reactance"), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1927 
1928  boxSizerLvl4_13->Add(m_staticTextSecReactance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1929 
1930  m_textCtrlSecReactance = new wxTextCtrl(m_panelFault, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelFault, wxSize(-1,-1)), 0);
1931  #if wxVERSION_NUMBER >= 3000
1932  m_textCtrlSecReactance->SetHint(wxT(""));
1933  #endif
1934 
1935  boxSizerLvl4_13->Add(m_textCtrlSecReactance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
1936 
1937  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
1938 
1939  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1940 
1941  m_buttonStability = new wxButton(this, wxID_ANY, _("Stability"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1942 
1943  boxSizerBottomButtons->Add(m_buttonStability, 0, wxALL|wxALIGN_LEFT, WXC_FROM_DIP(5));
1944 
1945  boxSizerBottomButtons->Add(0, 0, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
1946 
1947  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1948 
1949  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
1950 
1951  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
1952 
1953  boxSizerBottomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
1954 
1955 
1956  #if wxVERSION_NUMBER >= 2900
1957  if(!wxPersistenceManager::Get().Find(m_notebook)){
1958  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
1959  } else {
1960  wxPersistenceManager::Get().Restore(m_notebook);
1961  }
1962  #endif
1963 
1964  SetName(wxT("TransformerFormBase"));
1965  SetSize(-1,-1);
1966  if (GetSizer()) {
1967  GetSizer()->Fit(this);
1968  }
1969  if(GetParent()) {
1970  CentreOnParent(wxBOTH);
1971  } else {
1972  CentreOnScreen(wxBOTH);
1973  }
1974 #if wxVERSION_NUMBER >= 2900
1975  if(!wxPersistenceManager::Get().Find(this)) {
1976  wxPersistenceManager::Get().RegisterAndRestore(this);
1977  } else {
1978  wxPersistenceManager::Get().Restore(this);
1979  }
1980 #endif
1981  // Connect events
1982  m_buttonStability->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransformerFormBase::OnStabilityButtonClick), NULL, this);
1983  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransformerFormBase::OnOKButtonClick), NULL, this);
1984  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransformerFormBase::OnCancelButtonClick), NULL, this);
1985 
1986 }
1987 
1988 TransformerFormBase::~TransformerFormBase()
1989 {
1990  m_buttonStability->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransformerFormBase::OnStabilityButtonClick), NULL, this);
1991  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransformerFormBase::OnOKButtonClick), NULL, this);
1992  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransformerFormBase::OnCancelButtonClick), NULL, this);
1993 
1994 }
1995 
1996 LoadFormBase::LoadFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
1997  : wxDialog(parent, id, title, pos, size, style)
1998 {
1999  if ( !bBitmapLoaded ) {
2000  // We need to initialise the default bitmap handler
2001  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2002  wxC9EE9InitBitmapResources();
2003  bBitmapLoaded = true;
2004  }
2005 
2006  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2007  this->SetSizer(boxSizerLvl1_1);
2008 
2009  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
2010  m_notebook->SetName(wxT("m_notebook"));
2011 
2012  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
2013 
2014  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
2015  m_notebook->AddPage(m_panelGeneral, _("General"), false);
2016 
2017  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
2018  m_panelGeneral->SetSizer(boxSizerLvl2_1);
2019 
2020  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2021 
2022  boxSizerLvl2_1->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2023 
2024  m_textCtrlName = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2025  #if wxVERSION_NUMBER >= 3000
2026  m_textCtrlName->SetHint(wxT(""));
2027  #endif
2028 
2029  boxSizerLvl2_1->Add(m_textCtrlName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2030  m_textCtrlName->SetMinSize(wxSize(300,-1));
2031 
2032  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
2033 
2034  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2035 
2036  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
2037 
2038  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2039 
2040  m_staticTextActivePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Active power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2041 
2042  boxSizerLvl4_1->Add(m_staticTextActivePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2043 
2044  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
2045 
2046  boxSizerLvl4_1->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2047 
2048  m_textCtrlActivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2049  #if wxVERSION_NUMBER >= 3000
2050  m_textCtrlActivePower->SetHint(wxT(""));
2051  #endif
2052 
2053  boxSizerLvl5_1->Add(m_textCtrlActivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2054 
2055  wxArrayString m_choiceActivePowerArr;
2056  m_choiceActivePowerArr.Add(wxT("p.u."));
2057  m_choiceActivePowerArr.Add(wxT("W"));
2058  m_choiceActivePowerArr.Add(wxT("kW"));
2059  m_choiceActivePowerArr.Add(wxT("MW"));
2060  m_choiceActivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceActivePowerArr, 0);
2061  m_choiceActivePower->SetSelection(3);
2062 
2063  boxSizerLvl5_1->Add(m_choiceActivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
2064 
2065  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
2066 
2067  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
2068 
2069  m_staticTextReactivePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Reactive power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2070 
2071  boxSizerLvl4_2->Add(m_staticTextReactivePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2072 
2073  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
2074 
2075  boxSizerLvl4_2->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
2076 
2077  m_textCtrlReactivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2078  #if wxVERSION_NUMBER >= 3000
2079  m_textCtrlReactivePower->SetHint(wxT(""));
2080  #endif
2081 
2082  boxSizerLvl5_2->Add(m_textCtrlReactivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2083 
2084  wxArrayString m_choiceReactivePowerArr;
2085  m_choiceReactivePowerArr.Add(wxT("p.u."));
2086  m_choiceReactivePowerArr.Add(wxT("VAr"));
2087  m_choiceReactivePowerArr.Add(wxT("kVAr"));
2088  m_choiceReactivePowerArr.Add(wxT("MVAr"));
2089  m_choiceReactivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceReactivePowerArr, 0);
2090  m_choiceReactivePower->SetSelection(3);
2091 
2092  boxSizerLvl5_2->Add(m_choiceReactivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
2093 
2094  m_staticTextType = new wxStaticText(m_panelGeneral, wxID_ANY, _("Load type"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2095 
2096  boxSizerLvl2_1->Add(m_staticTextType, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2097 
2098  wxArrayString m_choiceTypeArr;
2099  m_choiceTypeArr.Add(wxT("Constant power"));
2100  m_choiceTypeArr.Add(wxT("Constant impedance"));
2101  m_choiceType = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceTypeArr, 0);
2102  m_choiceType->SetSelection(0);
2103 
2104  boxSizerLvl2_1->Add(m_choiceType, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
2105 
2106  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
2107 
2108  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2109 
2110  m_buttonStabButton = new wxButton(this, wxID_ANY, _("Stability"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2111 
2112  boxSizerBottomButtons->Add(m_buttonStabButton, 0, wxALL|wxALIGN_LEFT, WXC_FROM_DIP(5));
2113 
2114  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
2115 
2116  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2117 
2118  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2119 
2120  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2121 
2122  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2123 
2124 
2125  #if wxVERSION_NUMBER >= 2900
2126  if(!wxPersistenceManager::Get().Find(m_notebook)){
2127  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
2128  } else {
2129  wxPersistenceManager::Get().Restore(m_notebook);
2130  }
2131  #endif
2132 
2133  SetName(wxT("LoadFormBase"));
2134  SetSize(-1,-1);
2135  if (GetSizer()) {
2136  GetSizer()->Fit(this);
2137  }
2138  if(GetParent()) {
2139  CentreOnParent(wxBOTH);
2140  } else {
2141  CentreOnScreen(wxBOTH);
2142  }
2143 #if wxVERSION_NUMBER >= 2900
2144  if(!wxPersistenceManager::Get().Find(this)) {
2145  wxPersistenceManager::Get().RegisterAndRestore(this);
2146  } else {
2147  wxPersistenceManager::Get().Restore(this);
2148  }
2149 #endif
2150  // Connect events
2151  m_buttonStabButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LoadFormBase::OnStabilityButtonClick), NULL, this);
2152  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LoadFormBase::OnOnButtonClick), NULL, this);
2153  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LoadFormBase::OnCancelButtonClick), NULL, this);
2154 
2155 }
2156 
2157 LoadFormBase::~LoadFormBase()
2158 {
2159  m_buttonStabButton->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LoadFormBase::OnStabilityButtonClick), NULL, this);
2160  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LoadFormBase::OnOnButtonClick), NULL, this);
2161  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LoadFormBase::OnCancelButtonClick), NULL, this);
2162 
2163 }
2164 
2165 ReactiveShuntElementFormBase::ReactiveShuntElementFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
2166  : wxDialog(parent, id, title, pos, size, style)
2167 {
2168  if ( !bBitmapLoaded ) {
2169  // We need to initialise the default bitmap handler
2170  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2171  wxC9EE9InitBitmapResources();
2172  bBitmapLoaded = true;
2173  }
2174 
2175  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2176  this->SetSizer(boxSizerLvl1_1);
2177 
2178  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
2179  m_notebook->SetName(wxT("m_notebook"));
2180 
2181  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
2182 
2183  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
2184  m_notebook->AddPage(m_panelGeneral, _("General"), false);
2185 
2186  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
2187  m_panelGeneral->SetSizer(boxSizerLvl2_1);
2188 
2189  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2190 
2191  boxSizerLvl2_1->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2192 
2193  m_textCtrlName = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2194  #if wxVERSION_NUMBER >= 3000
2195  m_textCtrlName->SetHint(wxT(""));
2196  #endif
2197 
2198  boxSizerLvl2_1->Add(m_textCtrlName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2199  m_textCtrlName->SetMinSize(wxSize(300,-1));
2200 
2201  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
2202 
2203  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2204 
2205  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
2206 
2207  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
2208 
2209  m_staticTextReactivePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Reactive power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2210 
2211  boxSizerLvl4_2->Add(m_staticTextReactivePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2212 
2213  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
2214 
2215  boxSizerLvl4_2->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
2216 
2217  m_textCtrlReactivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2218  #if wxVERSION_NUMBER >= 3000
2219  m_textCtrlReactivePower->SetHint(wxT(""));
2220  #endif
2221 
2222  boxSizerLvl5_2->Add(m_textCtrlReactivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2223 
2224  wxArrayString m_choiceReactivePowerArr;
2225  m_choiceReactivePowerArr.Add(wxT("p.u."));
2226  m_choiceReactivePowerArr.Add(wxT("VAr"));
2227  m_choiceReactivePowerArr.Add(wxT("kVAr"));
2228  m_choiceReactivePowerArr.Add(wxT("MVAr"));
2229  m_choiceReactivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceReactivePowerArr, 0);
2230  m_choiceReactivePower->SetSelection(3);
2231 
2232  boxSizerLvl5_2->Add(m_choiceReactivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
2233 
2234  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
2235 
2236  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2237 
2238  m_buttonStabButton = new wxButton(this, wxID_ANY, _("Stability"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2239 
2240  boxSizerBottomButtons->Add(m_buttonStabButton, 0, wxALL|wxALIGN_LEFT, WXC_FROM_DIP(5));
2241 
2242  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
2243 
2244  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2245 
2246  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2247 
2248  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2249 
2250  boxSizerBottomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2251 
2252 
2253  #if wxVERSION_NUMBER >= 2900
2254  if(!wxPersistenceManager::Get().Find(m_notebook)){
2255  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
2256  } else {
2257  wxPersistenceManager::Get().Restore(m_notebook);
2258  }
2259  #endif
2260 
2261  SetName(wxT("ReactiveShuntElementFormBase"));
2262  SetSize(-1,-1);
2263  if (GetSizer()) {
2264  GetSizer()->Fit(this);
2265  }
2266  if(GetParent()) {
2267  CentreOnParent(wxBOTH);
2268  } else {
2269  CentreOnScreen(wxBOTH);
2270  }
2271 #if wxVERSION_NUMBER >= 2900
2272  if(!wxPersistenceManager::Get().Find(this)) {
2273  wxPersistenceManager::Get().RegisterAndRestore(this);
2274  } else {
2275  wxPersistenceManager::Get().Restore(this);
2276  }
2277 #endif
2278  // Connect events
2279  m_buttonStabButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ReactiveShuntElementFormBase::OnStabilityButtonClick), NULL, this);
2280  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ReactiveShuntElementFormBase::OnOKButtonClick), NULL, this);
2281  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ReactiveShuntElementFormBase::OnCancelButtonClick), NULL, this);
2282 
2283 }
2284 
2285 ReactiveShuntElementFormBase::~ReactiveShuntElementFormBase()
2286 {
2287  m_buttonStabButton->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ReactiveShuntElementFormBase::OnStabilityButtonClick), NULL, this);
2288  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ReactiveShuntElementFormBase::OnOKButtonClick), NULL, this);
2289  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ReactiveShuntElementFormBase::OnCancelButtonClick), NULL, this);
2290 
2291 }
2292 
2293 SwitchingFormBase::SwitchingFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
2294  : wxDialog(parent, id, title, pos, size, style)
2295 {
2296  if ( !bBitmapLoaded ) {
2297  // We need to initialise the default bitmap handler
2298  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2299  wxC9EE9InitBitmapResources();
2300  bBitmapLoaded = true;
2301  }
2302 
2303  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2304  this->SetSizer(boxSizerLvl1_1);
2305 
2306  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxHORIZONTAL);
2307 
2308  boxSizerLvl1_1->Add(boxSizerLvl2_1, 0, wxALL, WXC_FROM_DIP(5));
2309 
2310  wxBoxSizer* boxSizerLvl3_1 = new wxBoxSizer(wxVERTICAL);
2311 
2312  boxSizerLvl2_1->Add(boxSizerLvl3_1, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2313 
2314  wxArrayString m_pgMgrSwitchingsPropArr;
2315  wxUnusedVar(m_pgMgrSwitchingsPropArr);
2316  wxArrayInt m_pgMgrSwitchingsPropIntArr;
2317  wxUnusedVar(m_pgMgrSwitchingsPropIntArr);
2318  m_pgMgrSwitchingsProp = new wxPropertyGridManager(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxPG_STATIC_LAYOUT|wxPG_SPLITTER_AUTO_CENTER|wxPG_BOLD_MODIFIED);
2319 
2320  boxSizerLvl3_1->Add(m_pgMgrSwitchingsProp, 1, wxALL, WXC_FROM_DIP(5));
2321 
2322  m_pgPropTitle = m_pgMgrSwitchingsProp->Append( new wxPropertyCategory( _("Switching properties") ) );
2323  m_pgPropTitle->SetHelpString(wxT(""));
2324 
2325  m_pgMgrSwitchingsPropArr.Clear();
2326  m_pgMgrSwitchingsPropIntArr.Clear();
2327  m_pgMgrSwitchingsPropArr.Add(_("Insert"));
2328  m_pgMgrSwitchingsPropArr.Add(_("Remove"));
2329  m_pgPropType = m_pgMgrSwitchingsProp->Append( new wxEnumProperty( _("Type"), wxPG_LABEL, m_pgMgrSwitchingsPropArr, m_pgMgrSwitchingsPropIntArr, 0) );
2330  m_pgPropType->SetHelpString(wxT(""));
2331 
2332  m_pgPropTime = m_pgMgrSwitchingsProp->Append( new wxFloatProperty( _("Time (s)"), wxPG_LABEL, 0) );
2333  m_pgPropTime->SetHelpString(wxT(""));
2334  m_pgMgrSwitchingsProp->SetMinSize(wxSize(150,-1));
2335 
2336  wxBoxSizer* boxSizerLvl3_3 = new wxBoxSizer(wxVERTICAL);
2337 
2338  boxSizerLvl2_1->Add(boxSizerLvl3_3, 0, wxALL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2339 
2340  m_buttonInsert = new wxButton(this, wxID_ANY, _("Add"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2341 
2342  boxSizerLvl3_3->Add(m_buttonInsert, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2343 
2344  m_buttonRemove = new wxButton(this, wxID_ANY, _("Remove"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2345 
2346  boxSizerLvl3_3->Add(m_buttonRemove, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2347 
2348  m_buttonUp = new wxButton(this, wxID_ANY, _("Up"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2349 
2350  boxSizerLvl3_3->Add(m_buttonUp, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2351 
2352  m_buttonDown = new wxButton(this, wxID_ANY, _("Down"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2353 
2354  boxSizerLvl3_3->Add(m_buttonDown, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2355 
2356  wxBoxSizer* boxSizerLvl3_2 = new wxBoxSizer(wxVERTICAL);
2357 
2358  boxSizerLvl2_1->Add(boxSizerLvl3_2, 0, wxALL, WXC_FROM_DIP(5));
2359 
2360  m_staticTextSwList = new wxStaticText(this, wxID_ANY, _("Switching list"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2361 
2362  boxSizerLvl3_2->Add(m_staticTextSwList, 0, wxLEFT|wxRIGHT|wxTOP, WXC_FROM_DIP(5));
2363 
2364  m_listCtrlSwitchings = new wxListCtrl(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxLC_REPORT);
2365 
2366  boxSizerLvl3_2->Add(m_listCtrlSwitchings, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
2367 
2368  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
2369 
2370  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2371 
2372  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2373 
2374  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2375 
2376  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2377 
2378  boxSizerBottomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2379 
2380  SetName(wxT("SwitchingFormBase"));
2381  SetSize(-1,-1);
2382  if (GetSizer()) {
2383  GetSizer()->Fit(this);
2384  }
2385  if(GetParent()) {
2386  CentreOnParent(wxBOTH);
2387  } else {
2388  CentreOnScreen(wxBOTH);
2389  }
2390 #if wxVERSION_NUMBER >= 2900
2391  if(!wxPersistenceManager::Get().Find(this)) {
2392  wxPersistenceManager::Get().RegisterAndRestore(this);
2393  } else {
2394  wxPersistenceManager::Get().Restore(this);
2395  }
2396 #endif
2397  // Connect events
2398  m_pgMgrSwitchingsProp->Connect(wxEVT_PG_CHANGED, wxPropertyGridEventHandler(SwitchingFormBase::OnChangeProperties), NULL, this);
2399  m_buttonInsert->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnInsertButtonClick), NULL, this);
2400  m_buttonRemove->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnRemoveButtonClick), NULL, this);
2401  m_buttonUp->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnUpButtonClick), NULL, this);
2402  m_buttonDown->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnDownButtonClick), NULL, this);
2403  m_listCtrlSwitchings->Connect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(SwitchingFormBase::OnSelectItem), NULL, this);
2404  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnOKButtonClick), NULL, this);
2405  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnCancelButtonClick), NULL, this);
2406 
2407 }
2408 
2409 SwitchingFormBase::~SwitchingFormBase()
2410 {
2411  m_pgMgrSwitchingsProp->Disconnect(wxEVT_PG_CHANGED, wxPropertyGridEventHandler(SwitchingFormBase::OnChangeProperties), NULL, this);
2412  m_buttonInsert->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnInsertButtonClick), NULL, this);
2413  m_buttonRemove->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnRemoveButtonClick), NULL, this);
2414  m_buttonUp->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnUpButtonClick), NULL, this);
2415  m_buttonDown->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnDownButtonClick), NULL, this);
2416  m_listCtrlSwitchings->Disconnect(wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler(SwitchingFormBase::OnSelectItem), NULL, this);
2417  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnOKButtonClick), NULL, this);
2418  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SwitchingFormBase::OnCancelButtonClick), NULL, this);
2419 
2420 }
2421 
2422 IndMotorFormBase::IndMotorFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
2423  : wxDialog(parent, id, title, pos, size, style)
2424 {
2425  if ( !bBitmapLoaded ) {
2426  // We need to initialise the default bitmap handler
2427  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2428  wxC9EE9InitBitmapResources();
2429  bBitmapLoaded = true;
2430  }
2431 
2432  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2433  this->SetSizer(boxSizerLvl1_1);
2434 
2435  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
2436  m_notebook->SetName(wxT("m_notebook"));
2437 
2438  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
2439 
2440  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
2441  m_notebook->AddPage(m_panelGeneral, _("General"), false);
2442 
2443  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
2444  m_panelGeneral->SetSizer(boxSizerLvl2_1);
2445 
2446  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2447 
2448  boxSizerLvl2_1->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2449 
2450  m_textCtrlName = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2451  #if wxVERSION_NUMBER >= 3000
2452  m_textCtrlName->SetHint(wxT(""));
2453  #endif
2454 
2455  boxSizerLvl2_1->Add(m_textCtrlName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2456  m_textCtrlName->SetMinSize(wxSize(300,-1));
2457 
2458  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 2, 0, 0);
2459 
2460  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2461 
2462  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
2463 
2464  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2465 
2466  m_staticTextActivePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Active power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2467 
2468  boxSizerLvl4_1->Add(m_staticTextActivePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2469 
2470  wxBoxSizer* boxSizerLvl5_1 = new wxBoxSizer(wxHORIZONTAL);
2471 
2472  boxSizerLvl4_1->Add(boxSizerLvl5_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2473 
2474  m_textCtrlActivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2475  #if wxVERSION_NUMBER >= 3000
2476  m_textCtrlActivePower->SetHint(wxT(""));
2477  #endif
2478 
2479  boxSizerLvl5_1->Add(m_textCtrlActivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2480 
2481  wxArrayString m_choiceActivePowerArr;
2482  m_choiceActivePowerArr.Add(wxT("p.u."));
2483  m_choiceActivePowerArr.Add(wxT("W"));
2484  m_choiceActivePowerArr.Add(wxT("kW"));
2485  m_choiceActivePowerArr.Add(wxT("MW"));
2486  m_choiceActivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceActivePowerArr, 0);
2487  m_choiceActivePower->SetSelection(3);
2488 
2489  boxSizerLvl5_1->Add(m_choiceActivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
2490 
2491  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
2492 
2493  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
2494 
2495  m_staticTextReactivePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Reactive power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2496 
2497  boxSizerLvl4_2->Add(m_staticTextReactivePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2498 
2499  wxBoxSizer* boxSizerLvl5_2 = new wxBoxSizer(wxHORIZONTAL);
2500 
2501  boxSizerLvl4_2->Add(boxSizerLvl5_2, 0, wxEXPAND, WXC_FROM_DIP(5));
2502 
2503  m_textCtrlReactivePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2504  #if wxVERSION_NUMBER >= 3000
2505  m_textCtrlReactivePower->SetHint(wxT(""));
2506  #endif
2507 
2508  boxSizerLvl5_2->Add(m_textCtrlReactivePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2509 
2510  wxArrayString m_choiceReactivePowerArr;
2511  m_choiceReactivePowerArr.Add(wxT("p.u."));
2512  m_choiceReactivePowerArr.Add(wxT("VAr"));
2513  m_choiceReactivePowerArr.Add(wxT("kVAr"));
2514  m_choiceReactivePowerArr.Add(wxT("MVAr"));
2515  m_choiceReactivePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceReactivePowerArr, 0);
2516  m_choiceReactivePower->SetSelection(3);
2517 
2518  boxSizerLvl5_2->Add(m_choiceReactivePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
2519 
2520  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
2521 
2522  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2523 
2524  m_buttonStabButton = new wxButton(this, wxID_ANY, _("Stability"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2525 
2526  boxSizerBottomButtons->Add(m_buttonStabButton, 0, wxALL|wxALIGN_LEFT, WXC_FROM_DIP(5));
2527 
2528  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
2529 
2530  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2531 
2532  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2533 
2534  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2535 
2536  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2537 
2538 
2539  #if wxVERSION_NUMBER >= 2900
2540  if(!wxPersistenceManager::Get().Find(m_notebook)){
2541  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
2542  } else {
2543  wxPersistenceManager::Get().Restore(m_notebook);
2544  }
2545  #endif
2546 
2547  SetName(wxT("IndMotorFormBase"));
2548  SetSize(-1,-1);
2549  if (GetSizer()) {
2550  GetSizer()->Fit(this);
2551  }
2552  if(GetParent()) {
2553  CentreOnParent(wxBOTH);
2554  } else {
2555  CentreOnScreen(wxBOTH);
2556  }
2557 #if wxVERSION_NUMBER >= 2900
2558  if(!wxPersistenceManager::Get().Find(this)) {
2559  wxPersistenceManager::Get().RegisterAndRestore(this);
2560  } else {
2561  wxPersistenceManager::Get().Restore(this);
2562  }
2563 #endif
2564  // Connect events
2565  m_buttonStabButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IndMotorFormBase::OnStabilityButtonClick), NULL, this);
2566  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IndMotorFormBase::OnOKButtonClick), NULL, this);
2567  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IndMotorFormBase::OnCancelButtonClick), NULL, this);
2568 
2569 }
2570 
2571 IndMotorFormBase::~IndMotorFormBase()
2572 {
2573  m_buttonStabButton->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IndMotorFormBase::OnStabilityButtonClick), NULL, this);
2574  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IndMotorFormBase::OnOKButtonClick), NULL, this);
2575  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IndMotorFormBase::OnCancelButtonClick), NULL, this);
2576 
2577 }
2578 
2579 TextFormBase::TextFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
2580  : wxDialog(parent, id, title, pos, size, style)
2581 {
2582  if ( !bBitmapLoaded ) {
2583  // We need to initialise the default bitmap handler
2584  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2585  wxC9EE9InitBitmapResources();
2586  bBitmapLoaded = true;
2587  }
2588 
2589  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2590  this->SetSizer(boxSizerLvl1_1);
2591 
2592  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
2593  m_notebook->SetName(wxT("m_notebook"));
2594 
2595  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
2596 
2597  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
2598  m_notebook->AddPage(m_panelGeneral, _("General"), false);
2599 
2600  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
2601  m_panelGeneral->SetSizer(boxSizerLvl2_1);
2602 
2603  wxGridSizer* gridSizerLvl3_1 = new wxGridSizer(0, 3, 0, 0);
2604 
2605  boxSizerLvl2_1->Add(gridSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2606 
2607  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxVERTICAL);
2608 
2609  gridSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
2610 
2611  m_staticTextElement = new wxStaticText(m_panelGeneral, wxID_ANY, _("Element"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2612 
2613  boxSizerLvl4_1->Add(m_staticTextElement, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2614 
2615  wxArrayString m_choiceElementArr;
2616  m_choiceElementArr.Add(wxT("Bus"));
2617  m_choiceElementArr.Add(wxT("Generator"));
2618  m_choiceElementArr.Add(wxT("Line"));
2619  m_choiceElementArr.Add(wxT("Transformer"));
2620  m_choiceElementArr.Add(wxT("Load"));
2621  m_choiceElementArr.Add(wxT("Capacitor"));
2622  m_choiceElementArr.Add(wxT("Inductor"));
2623  m_choiceElementArr.Add(wxT("Synchronous compensator"));
2624  m_choiceElementArr.Add(wxT("Induction motor"));
2625  m_choiceElement = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceElementArr, 0);
2626 
2627  boxSizerLvl4_1->Add(m_choiceElement, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
2628 
2629  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
2630 
2631  gridSizerLvl3_1->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
2632 
2633  m_staticTextName = new wxStaticText(m_panelGeneral, wxID_ANY, _("Element name"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2634 
2635  boxSizerLvl4_2->Add(m_staticTextName, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2636 
2637  wxArrayString m_choiceNameArr;
2638  m_choiceName = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceNameArr, 0);
2639 
2640  boxSizerLvl4_2->Add(m_choiceName, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
2641 
2642  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
2643 
2644  gridSizerLvl3_1->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
2645 
2646  m_staticTextType = new wxStaticText(m_panelGeneral, wxID_ANY, _("Text type"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2647 
2648  boxSizerLvl4_3->Add(m_staticTextType, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2649 
2650  wxArrayString m_choiceTextTypeArr;
2651  m_choiceTextType = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceTextTypeArr, 0);
2652 
2653  boxSizerLvl4_3->Add(m_choiceTextType, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
2654 
2655  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
2656 
2657  gridSizerLvl3_1->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
2658 
2659  m_staticTextFromBus = new wxStaticText(m_panelGeneral, wxID_ANY, _("From bus"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2660 
2661  boxSizerLvl4_4->Add(m_staticTextFromBus, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2662 
2663  wxArrayString m_choiceTextFromBusArr;
2664  m_choiceTextFromBus = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceTextFromBusArr, 0);
2665 
2666  boxSizerLvl4_4->Add(m_choiceTextFromBus, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
2667 
2668  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxVERTICAL);
2669 
2670  gridSizerLvl3_1->Add(boxSizerLvl4_5, 0, wxEXPAND, WXC_FROM_DIP(5));
2671 
2672  m_staticTextToBus = new wxStaticText(m_panelGeneral, wxID_ANY, _("To bus"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2673 
2674  boxSizerLvl4_5->Add(m_staticTextToBus, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2675 
2676  wxArrayString m_choiceTextToBusArr;
2677  m_choiceTextToBus = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceTextToBusArr, 0);
2678 
2679  boxSizerLvl4_5->Add(m_choiceTextToBus, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
2680 
2681  wxBoxSizer* boxSizerLvl4_6 = new wxBoxSizer(wxVERTICAL);
2682 
2683  gridSizerLvl3_1->Add(boxSizerLvl4_6, 0, wxEXPAND, WXC_FROM_DIP(5));
2684 
2685  m_staticTextUnit = new wxStaticText(m_panelGeneral, wxID_ANY, _("Unit"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2686 
2687  boxSizerLvl4_6->Add(m_staticTextUnit, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2688 
2689  wxArrayString m_choiceTextUnitArr;
2690  m_choiceTextUnit = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceTextUnitArr, 0);
2691 
2692  boxSizerLvl4_6->Add(m_choiceTextUnit, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
2693 
2694  wxBoxSizer* boxSizerLvl3_2 = new wxBoxSizer(wxHORIZONTAL);
2695 
2696  boxSizerLvl2_1->Add(boxSizerLvl3_2, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2697 
2698  m_staticTextDecimal = new wxStaticText(m_panelGeneral, wxID_ANY, _("Decimal places:"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2699 
2700  boxSizerLvl3_2->Add(m_staticTextDecimal, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2701 
2702  m_textCtrlDecimal = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT("2"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), wxTE_PROCESS_ENTER);
2703  #if wxVERSION_NUMBER >= 3000
2704  m_textCtrlDecimal->SetHint(wxT(""));
2705  #endif
2706 
2707  boxSizerLvl3_2->Add(m_textCtrlDecimal, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2708 
2709  boxSizerLvl3_2->Add(0, 0, 0, wxALL, WXC_FROM_DIP(5));
2710 
2711  m_staticTextPreview = new wxStaticText(m_panelGeneral, wxID_ANY, _("Preview:"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2712 
2713  boxSizerLvl3_2->Add(m_staticTextPreview, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2714 
2715  m_textCtrlPreview = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), wxTE_CENTRE);
2716  #if wxVERSION_NUMBER >= 3000
2717  m_textCtrlPreview->SetHint(wxT(""));
2718  #endif
2719 
2720  boxSizerLvl3_2->Add(m_textCtrlPreview, 1, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2721 
2722  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
2723 
2724  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2725 
2726  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
2727 
2728  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2729 
2730  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2731 
2732  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2733 
2734  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2735 
2736 
2737  #if wxVERSION_NUMBER >= 2900
2738  if(!wxPersistenceManager::Get().Find(m_notebook)){
2739  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
2740  } else {
2741  wxPersistenceManager::Get().Restore(m_notebook);
2742  }
2743  #endif
2744 
2745  SetName(wxT("TextFormBase"));
2746  SetSize(-1,-1);
2747  if (GetSizer()) {
2748  GetSizer()->Fit(this);
2749  }
2750  if(GetParent()) {
2751  CentreOnParent(wxBOTH);
2752  } else {
2753  CentreOnScreen(wxBOTH);
2754  }
2755 #if wxVERSION_NUMBER >= 2900
2756  if(!wxPersistenceManager::Get().Find(this)) {
2757  wxPersistenceManager::Get().RegisterAndRestore(this);
2758  } else {
2759  wxPersistenceManager::Get().Restore(this);
2760  }
2761 #endif
2762  // Connect events
2763  m_choiceElement->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnElementChoiceSelected), NULL, this);
2764  m_choiceName->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnNameChoiceSelected), NULL, this);
2765  m_choiceTextType->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnTypeChoiceSelected), NULL, this);
2766  m_choiceTextFromBus->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnFromBusChoiceSelected), NULL, this);
2767  m_choiceTextToBus->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnToBusChoiceSelected), NULL, this);
2768  m_choiceTextUnit->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnUnitChoiceSelected), NULL, this);
2769  m_textCtrlDecimal->Connect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(TextFormBase::OnTextEnter), NULL, this);
2770  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TextFormBase::OnOKButtonClick), NULL, this);
2771  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TextFormBase::OnCancelButtonClick), NULL, this);
2772 
2773 }
2774 
2775 TextFormBase::~TextFormBase()
2776 {
2777  m_choiceElement->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnElementChoiceSelected), NULL, this);
2778  m_choiceName->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnNameChoiceSelected), NULL, this);
2779  m_choiceTextType->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnTypeChoiceSelected), NULL, this);
2780  m_choiceTextFromBus->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnFromBusChoiceSelected), NULL, this);
2781  m_choiceTextToBus->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnToBusChoiceSelected), NULL, this);
2782  m_choiceTextUnit->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(TextFormBase::OnUnitChoiceSelected), NULL, this);
2783  m_textCtrlDecimal->Disconnect(wxEVT_COMMAND_TEXT_ENTER, wxCommandEventHandler(TextFormBase::OnTextEnter), NULL, this);
2784  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TextFormBase::OnOKButtonClick), NULL, this);
2785  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TextFormBase::OnCancelButtonClick), NULL, this);
2786 
2787 }
2788 
2789 TransferFunctionFormBase::TransferFunctionFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
2790  : wxDialog(parent, id, title, pos, size, style)
2791 {
2792  if ( !bBitmapLoaded ) {
2793  // We need to initialise the default bitmap handler
2794  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2795  wxC9EE9InitBitmapResources();
2796  bBitmapLoaded = true;
2797  }
2798 
2799  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2800  this->SetSizer(boxSizerLvl1_1);
2801 
2802  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
2803  m_notebook->SetName(wxT("m_notebook"));
2804 
2805  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
2806 
2807  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
2808  m_notebook->AddPage(m_panelGeneral, _("General"), false);
2809 
2810  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
2811  m_panelGeneral->SetSizer(boxSizerLvl2_1);
2812 
2813  m_staticTextNumerator = new wxStaticText(m_panelGeneral, wxID_ANY, _("Numerator parameters"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2814 
2815  boxSizerLvl2_1->Add(m_staticTextNumerator, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2816 
2817  m_textCtrlNumerator = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2818  #if wxVERSION_NUMBER >= 3000
2819  m_textCtrlNumerator->SetHint(wxT(""));
2820  #endif
2821 
2822  boxSizerLvl2_1->Add(m_textCtrlNumerator, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2823  m_textCtrlNumerator->SetMinSize(wxSize(300,-1));
2824 
2825  m_staticTextDenominator = new wxStaticText(m_panelGeneral, wxID_ANY, _("Denominator parameters"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2826 
2827  boxSizerLvl2_1->Add(m_staticTextDenominator, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2828 
2829  m_textCtrlDenominator = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2830  #if wxVERSION_NUMBER >= 3000
2831  m_textCtrlDenominator->SetHint(wxT(""));
2832  #endif
2833 
2834  boxSizerLvl2_1->Add(m_textCtrlDenominator, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2835  m_textCtrlDenominator->SetMinSize(wxSize(300,-1));
2836 
2837  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
2838 
2839  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2840 
2841  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
2842 
2843  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2844 
2845  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2846 
2847  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2848 
2849  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2850 
2851 
2852  #if wxVERSION_NUMBER >= 2900
2853  if(!wxPersistenceManager::Get().Find(m_notebook)){
2854  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
2855  } else {
2856  wxPersistenceManager::Get().Restore(m_notebook);
2857  }
2858  #endif
2859 
2860  SetName(wxT("TransferFunctionFormBase"));
2861  SetSize(-1,-1);
2862  if (GetSizer()) {
2863  GetSizer()->Fit(this);
2864  }
2865  if(GetParent()) {
2866  CentreOnParent(wxBOTH);
2867  } else {
2868  CentreOnScreen(wxBOTH);
2869  }
2870 #if wxVERSION_NUMBER >= 2900
2871  if(!wxPersistenceManager::Get().Find(this)) {
2872  wxPersistenceManager::Get().RegisterAndRestore(this);
2873  } else {
2874  wxPersistenceManager::Get().Restore(this);
2875  }
2876 #endif
2877  // Connect events
2878  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransferFunctionFormBase::OnOKClick), NULL, this);
2879  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransferFunctionFormBase::OnCancelClick), NULL, this);
2880 
2881 }
2882 
2883 TransferFunctionFormBase::~TransferFunctionFormBase()
2884 {
2885  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransferFunctionFormBase::OnOKClick), NULL, this);
2886  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TransferFunctionFormBase::OnCancelClick), NULL, this);
2887 
2888 }
2889 
2890 SumFormBase::SumFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
2891  : wxDialog(parent, id, title, pos, size, style)
2892 {
2893  if ( !bBitmapLoaded ) {
2894  // We need to initialise the default bitmap handler
2895  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2896  wxC9EE9InitBitmapResources();
2897  bBitmapLoaded = true;
2898  }
2899 
2900  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2901  this->SetSizer(boxSizerLvl1_1);
2902 
2903  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
2904  m_notebook->SetName(wxT("m_notebook"));
2905 
2906  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
2907 
2908  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
2909  m_notebook->AddPage(m_panelGeneral, _("General"), false);
2910 
2911  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
2912  m_panelGeneral->SetSizer(boxSizerLvl2_1);
2913 
2914  m_staticTextSigns = new wxStaticText(m_panelGeneral, wxID_ANY, _("Signs"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2915 
2916  boxSizerLvl2_1->Add(m_staticTextSigns, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2917 
2918  m_textCtrlSigns = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
2919  #if wxVERSION_NUMBER >= 3000
2920  m_textCtrlSigns->SetHint(wxT(""));
2921  #endif
2922 
2923  boxSizerLvl2_1->Add(m_textCtrlSigns, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
2924  m_textCtrlSigns->SetMinSize(wxSize(300,-1));
2925 
2926  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
2927 
2928  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
2929 
2930  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
2931 
2932  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2933 
2934  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2935 
2936  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
2937 
2938  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
2939 
2940 
2941  #if wxVERSION_NUMBER >= 2900
2942  if(!wxPersistenceManager::Get().Find(m_notebook)){
2943  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
2944  } else {
2945  wxPersistenceManager::Get().Restore(m_notebook);
2946  }
2947  #endif
2948 
2949  SetName(wxT("SumFormBase"));
2950  SetSize(-1,-1);
2951  if (GetSizer()) {
2952  GetSizer()->Fit(this);
2953  }
2954  if(GetParent()) {
2955  CentreOnParent(wxBOTH);
2956  } else {
2957  CentreOnScreen(wxBOTH);
2958  }
2959 #if wxVERSION_NUMBER >= 2900
2960  if(!wxPersistenceManager::Get().Find(this)) {
2961  wxPersistenceManager::Get().RegisterAndRestore(this);
2962  } else {
2963  wxPersistenceManager::Get().Restore(this);
2964  }
2965 #endif
2966  // Connect events
2967  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnOKClick), NULL, this);
2968  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnCancelClick), NULL, this);
2969 
2970 }
2971 
2972 SumFormBase::~SumFormBase()
2973 {
2974  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnOKClick), NULL, this);
2975  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SumFormBase::OnCancelClick), NULL, this);
2976 
2977 }
2978 
2979 LimiterFormBase::LimiterFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
2980  : wxDialog(parent, id, title, pos, size, style)
2981 {
2982  if ( !bBitmapLoaded ) {
2983  // We need to initialise the default bitmap handler
2984  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
2985  wxC9EE9InitBitmapResources();
2986  bBitmapLoaded = true;
2987  }
2988 
2989  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
2990  this->SetSizer(boxSizerLvl1_1);
2991 
2992  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
2993  m_notebook->SetName(wxT("m_notebook"));
2994 
2995  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
2996 
2997  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
2998  m_notebook->AddPage(m_panelGeneral, _("General"), false);
2999 
3000  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
3001  m_panelGeneral->SetSizer(boxSizerLvl2_1);
3002 
3003  m_staticTextUpLimiter = new wxStaticText(m_panelGeneral, wxID_ANY, _("Upper limit"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3004 
3005  boxSizerLvl2_1->Add(m_staticTextUpLimiter, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3006 
3007  m_textCtrlUpLimit = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3008  #if wxVERSION_NUMBER >= 3000
3009  m_textCtrlUpLimit->SetHint(wxT(""));
3010  #endif
3011 
3012  boxSizerLvl2_1->Add(m_textCtrlUpLimit, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3013  m_textCtrlUpLimit->SetMinSize(wxSize(100,-1));
3014 
3015  m_staticTextLowLimit = new wxStaticText(m_panelGeneral, wxID_ANY, _("Lower limit"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3016 
3017  boxSizerLvl2_1->Add(m_staticTextLowLimit, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3018 
3019  m_textCtrlLowLimit = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3020  #if wxVERSION_NUMBER >= 3000
3021  m_textCtrlLowLimit->SetHint(wxT(""));
3022  #endif
3023 
3024  boxSizerLvl2_1->Add(m_textCtrlLowLimit, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3025  m_textCtrlLowLimit->SetMinSize(wxSize(100,-1));
3026 
3027  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
3028 
3029  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
3030 
3031  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
3032 
3033  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3034 
3035  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3036 
3037  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3038 
3039  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3040 
3041 
3042  #if wxVERSION_NUMBER >= 2900
3043  if(!wxPersistenceManager::Get().Find(m_notebook)){
3044  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
3045  } else {
3046  wxPersistenceManager::Get().Restore(m_notebook);
3047  }
3048  #endif
3049 
3050  SetName(wxT("LimiterFormBase"));
3051  SetSize(-1,-1);
3052  if (GetSizer()) {
3053  GetSizer()->Fit(this);
3054  }
3055  if(GetParent()) {
3056  CentreOnParent(wxBOTH);
3057  } else {
3058  CentreOnScreen(wxBOTH);
3059  }
3060 #if wxVERSION_NUMBER >= 2900
3061  if(!wxPersistenceManager::Get().Find(this)) {
3062  wxPersistenceManager::Get().RegisterAndRestore(this);
3063  } else {
3064  wxPersistenceManager::Get().Restore(this);
3065  }
3066 #endif
3067  // Connect events
3068  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LimiterFormBase::OnOKButtonClick), NULL, this);
3069  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LimiterFormBase::OnCancelButtonClick), NULL, this);
3070 
3071 }
3072 
3073 LimiterFormBase::~LimiterFormBase()
3074 {
3075  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LimiterFormBase::OnOKButtonClick), NULL, this);
3076  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(LimiterFormBase::OnCancelButtonClick), NULL, this);
3077 
3078 }
3079 
3080 RateLimiterFormBase::RateLimiterFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
3081  : wxDialog(parent, id, title, pos, size, style)
3082 {
3083  if ( !bBitmapLoaded ) {
3084  // We need to initialise the default bitmap handler
3085  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
3086  wxC9EE9InitBitmapResources();
3087  bBitmapLoaded = true;
3088  }
3089 
3090  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
3091  this->SetSizer(boxSizerLvl1_1);
3092 
3093  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
3094  m_notebook->SetName(wxT("m_notebook"));
3095 
3096  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
3097 
3098  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
3099  m_notebook->AddPage(m_panelGeneral, _("General"), false);
3100 
3101  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
3102  m_panelGeneral->SetSizer(boxSizerLvl2_1);
3103 
3104  m_staticTextUpLimiter = new wxStaticText(m_panelGeneral, wxID_ANY, _("Upper limit"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3105 
3106  boxSizerLvl2_1->Add(m_staticTextUpLimiter, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3107 
3108  m_textCtrlUpLimit = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3109  #if wxVERSION_NUMBER >= 3000
3110  m_textCtrlUpLimit->SetHint(wxT(""));
3111  #endif
3112 
3113  boxSizerLvl2_1->Add(m_textCtrlUpLimit, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3114  m_textCtrlUpLimit->SetMinSize(wxSize(100,-1));
3115 
3116  m_staticTextLowLimit = new wxStaticText(m_panelGeneral, wxID_ANY, _("Lower limit"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3117 
3118  boxSizerLvl2_1->Add(m_staticTextLowLimit, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3119 
3120  m_textCtrlLowLimit = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3121  #if wxVERSION_NUMBER >= 3000
3122  m_textCtrlLowLimit->SetHint(wxT(""));
3123  #endif
3124 
3125  boxSizerLvl2_1->Add(m_textCtrlLowLimit, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3126  m_textCtrlLowLimit->SetMinSize(wxSize(100,-1));
3127 
3128  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
3129 
3130  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
3131 
3132  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
3133 
3134  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3135 
3136  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3137 
3138  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3139 
3140  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3141 
3142 
3143  #if wxVERSION_NUMBER >= 2900
3144  if(!wxPersistenceManager::Get().Find(m_notebook)){
3145  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
3146  } else {
3147  wxPersistenceManager::Get().Restore(m_notebook);
3148  }
3149  #endif
3150 
3151  SetName(wxT("RateLimiterFormBase"));
3152  SetSize(-1,-1);
3153  if (GetSizer()) {
3154  GetSizer()->Fit(this);
3155  }
3156  if(GetParent()) {
3157  CentreOnParent(wxBOTH);
3158  } else {
3159  CentreOnScreen(wxBOTH);
3160  }
3161 #if wxVERSION_NUMBER >= 2900
3162  if(!wxPersistenceManager::Get().Find(this)) {
3163  wxPersistenceManager::Get().RegisterAndRestore(this);
3164  } else {
3165  wxPersistenceManager::Get().Restore(this);
3166  }
3167 #endif
3168  // Connect events
3169  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(RateLimiterFormBase::OnOKButtonClick), NULL, this);
3170  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(RateLimiterFormBase::OnCancelButtonClick), NULL, this);
3171 
3172 }
3173 
3174 RateLimiterFormBase::~RateLimiterFormBase()
3175 {
3176  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(RateLimiterFormBase::OnOKButtonClick), NULL, this);
3177  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(RateLimiterFormBase::OnCancelButtonClick), NULL, this);
3178 
3179 }
3180 
3181 ExponentialFormBase::ExponentialFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
3182  : wxDialog(parent, id, title, pos, size, style)
3183 {
3184  if ( !bBitmapLoaded ) {
3185  // We need to initialise the default bitmap handler
3186  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
3187  wxC9EE9InitBitmapResources();
3188  bBitmapLoaded = true;
3189  }
3190 
3191  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
3192  this->SetSizer(boxSizerLvl1_1);
3193 
3194  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
3195  m_notebook->SetName(wxT("m_notebook"));
3196 
3197  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
3198 
3199  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
3200  m_notebook->AddPage(m_panelGeneral, _("General"), false);
3201 
3202  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
3203  m_panelGeneral->SetSizer(boxSizerLvl2_1);
3204 
3205  m_staticTextExp = new wxStaticText(m_panelGeneral, wxID_ANY, _("y = A.eB.x"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), wxALIGN_CENTRE);
3206 
3207  boxSizerLvl2_1->Add(m_staticTextExp, 1, wxLEFT|wxRIGHT|wxTOP|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3208 
3209  m_staticTextAValue = new wxStaticText(m_panelGeneral, wxID_ANY, _("A value"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3210 
3211  boxSizerLvl2_1->Add(m_staticTextAValue, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3212 
3213  m_textCtrlAValue = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3214  #if wxVERSION_NUMBER >= 3000
3215  m_textCtrlAValue->SetHint(wxT(""));
3216  #endif
3217 
3218  boxSizerLvl2_1->Add(m_textCtrlAValue, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3219  m_textCtrlAValue->SetMinSize(wxSize(100,-1));
3220 
3221  m_staticTextBValue = new wxStaticText(m_panelGeneral, wxID_ANY, _("B value"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3222 
3223  boxSizerLvl2_1->Add(m_staticTextBValue, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3224 
3225  m_textCtrlBValue = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3226  #if wxVERSION_NUMBER >= 3000
3227  m_textCtrlBValue->SetHint(wxT(""));
3228  #endif
3229 
3230  boxSizerLvl2_1->Add(m_textCtrlBValue, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3231  m_textCtrlBValue->SetMinSize(wxSize(100,-1));
3232 
3233  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
3234 
3235  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
3236 
3237  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
3238 
3239  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3240 
3241  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3242 
3243  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3244 
3245  boxSizerBottomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3246 
3247 
3248  #if wxVERSION_NUMBER >= 2900
3249  if(!wxPersistenceManager::Get().Find(m_notebook)){
3250  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
3251  } else {
3252  wxPersistenceManager::Get().Restore(m_notebook);
3253  }
3254  #endif
3255 
3256  SetName(wxT("ExponentialFormBase"));
3257  SetSize(-1,-1);
3258  if (GetSizer()) {
3259  GetSizer()->Fit(this);
3260  }
3261  if(GetParent()) {
3262  CentreOnParent(wxBOTH);
3263  } else {
3264  CentreOnScreen(wxBOTH);
3265  }
3266 #if wxVERSION_NUMBER >= 2900
3267  if(!wxPersistenceManager::Get().Find(this)) {
3268  wxPersistenceManager::Get().RegisterAndRestore(this);
3269  } else {
3270  wxPersistenceManager::Get().Restore(this);
3271  }
3272 #endif
3273  // Connect events
3274  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ExponentialFormBase::OnOKButtonClick), NULL, this);
3275  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ExponentialFormBase::OnCancelButtonClick), NULL, this);
3276 
3277 }
3278 
3279 ExponentialFormBase::~ExponentialFormBase()
3280 {
3281  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ExponentialFormBase::OnOKButtonClick), NULL, this);
3282  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ExponentialFormBase::OnCancelButtonClick), NULL, this);
3283 
3284 }
3285 
3286 ConstantFormBase::ConstantFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
3287  : wxDialog(parent, id, title, pos, size, style)
3288 {
3289  if ( !bBitmapLoaded ) {
3290  // We need to initialise the default bitmap handler
3291  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
3292  wxC9EE9InitBitmapResources();
3293  bBitmapLoaded = true;
3294  }
3295 
3296  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
3297  this->SetSizer(boxSizerLvl1_1);
3298 
3299  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
3300  m_notebook->SetName(wxT("m_notebook"));
3301 
3302  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
3303 
3304  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
3305  m_notebook->AddPage(m_panelGeneral, _("General"), false);
3306 
3307  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
3308  m_panelGeneral->SetSizer(boxSizerLvl2_1);
3309 
3310  m_staticTextValue = new wxStaticText(m_panelGeneral, wxID_ANY, _("Constant value"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3311 
3312  boxSizerLvl2_1->Add(m_staticTextValue, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3313 
3314  m_textCtrlValue = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3315  #if wxVERSION_NUMBER >= 3000
3316  m_textCtrlValue->SetHint(wxT(""));
3317  #endif
3318 
3319  boxSizerLvl2_1->Add(m_textCtrlValue, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3320  m_textCtrlValue->SetMinSize(wxSize(100,-1));
3321 
3322  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
3323 
3324  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
3325 
3326  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
3327 
3328  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3329 
3330  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3331 
3332  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3333 
3334  boxSizerBottomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3335 
3336 
3337  #if wxVERSION_NUMBER >= 2900
3338  if(!wxPersistenceManager::Get().Find(m_notebook)){
3339  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
3340  } else {
3341  wxPersistenceManager::Get().Restore(m_notebook);
3342  }
3343  #endif
3344 
3345  SetName(wxT("ConstantFormBase"));
3346  SetSize(-1,-1);
3347  if (GetSizer()) {
3348  GetSizer()->Fit(this);
3349  }
3350  if(GetParent()) {
3351  CentreOnParent(wxBOTH);
3352  } else {
3353  CentreOnScreen(wxBOTH);
3354  }
3355 #if wxVERSION_NUMBER >= 2900
3356  if(!wxPersistenceManager::Get().Find(this)) {
3357  wxPersistenceManager::Get().RegisterAndRestore(this);
3358  } else {
3359  wxPersistenceManager::Get().Restore(this);
3360  }
3361 #endif
3362  // Connect events
3363  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ConstantFormBase::OnOKButtonClick), NULL, this);
3364  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ConstantFormBase::OnCancelButtonClick), NULL, this);
3365 
3366 }
3367 
3368 ConstantFormBase::~ConstantFormBase()
3369 {
3370  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ConstantFormBase::OnOKButtonClick), NULL, this);
3371  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(ConstantFormBase::OnCancelButtonClick), NULL, this);
3372 
3373 }
3374 
3375 GainFormBase::GainFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
3376  : wxDialog(parent, id, title, pos, size, style)
3377 {
3378  if ( !bBitmapLoaded ) {
3379  // We need to initialise the default bitmap handler
3380  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
3381  wxC9EE9InitBitmapResources();
3382  bBitmapLoaded = true;
3383  }
3384 
3385  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
3386  this->SetSizer(boxSizerLvl1_1);
3387 
3388  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
3389  m_notebook->SetName(wxT("m_notebook"));
3390 
3391  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
3392 
3393  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
3394  m_notebook->AddPage(m_panelGeneral, _("General"), false);
3395 
3396  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
3397  m_panelGeneral->SetSizer(boxSizerLvl2_1);
3398 
3399  m_staticTextValue = new wxStaticText(m_panelGeneral, wxID_ANY, _("Gain value"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3400 
3401  boxSizerLvl2_1->Add(m_staticTextValue, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3402 
3403  m_textCtrlValue = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3404  #if wxVERSION_NUMBER >= 3000
3405  m_textCtrlValue->SetHint(wxT(""));
3406  #endif
3407 
3408  boxSizerLvl2_1->Add(m_textCtrlValue, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
3409  m_textCtrlValue->SetMinSize(wxSize(100,-1));
3410 
3411  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
3412 
3413  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
3414 
3415  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
3416 
3417  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3418 
3419  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3420 
3421  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3422 
3423  boxSizerBottomButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3424 
3425 
3426  #if wxVERSION_NUMBER >= 2900
3427  if(!wxPersistenceManager::Get().Find(m_notebook)){
3428  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
3429  } else {
3430  wxPersistenceManager::Get().Restore(m_notebook);
3431  }
3432  #endif
3433 
3434  SetName(wxT("GainFormBase"));
3435  SetSize(-1,-1);
3436  if (GetSizer()) {
3437  GetSizer()->Fit(this);
3438  }
3439  if(GetParent()) {
3440  CentreOnParent(wxBOTH);
3441  } else {
3442  CentreOnScreen(wxBOTH);
3443  }
3444 #if wxVERSION_NUMBER >= 2900
3445  if(!wxPersistenceManager::Get().Find(this)) {
3446  wxPersistenceManager::Get().RegisterAndRestore(this);
3447  } else {
3448  wxPersistenceManager::Get().Restore(this);
3449  }
3450 #endif
3451  // Connect events
3452  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GainFormBase::OnOKButtonClick), NULL, this);
3453  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GainFormBase::OnCancelButtonClick), NULL, this);
3454 
3455 }
3456 
3457 GainFormBase::~GainFormBase()
3458 {
3459  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GainFormBase::OnOKButtonClick), NULL, this);
3460  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GainFormBase::OnCancelButtonClick), NULL, this);
3461 
3462 }
3463 
3464 IOControlFormBase::IOControlFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
3465  : wxDialog(parent, id, title, pos, size, style)
3466 {
3467  if ( !bBitmapLoaded ) {
3468  // We need to initialise the default bitmap handler
3469  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
3470  wxC9EE9InitBitmapResources();
3471  bBitmapLoaded = true;
3472  }
3473 
3474  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
3475  this->SetSizer(boxSizerLvl1_1);
3476 
3477  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
3478  m_notebook->SetName(wxT("m_notebook"));
3479 
3480  boxSizerLvl1_1->Add(m_notebook, 1, wxEXPAND, WXC_FROM_DIP(5));
3481 
3482  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
3483  m_notebook->AddPage(m_panelGeneral, _("General"), false);
3484 
3485  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
3486  m_panelGeneral->SetSizer(boxSizerLvl2_1);
3487 
3488  m_checkBoxInput = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Input"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3489  m_checkBoxInput->SetValue(false);
3490 
3491  boxSizerLvl2_1->Add(m_checkBoxInput, 0, wxLEFT|wxRIGHT|wxTOP, WXC_FROM_DIP(5));
3492 
3493  wxArrayString m_choiceInputArr;
3494  m_choiceInput = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceInputArr, 0);
3495 
3496  boxSizerLvl2_1->Add(m_choiceInput, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
3497 
3498  m_checkBoxOutput = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Output"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
3499  m_checkBoxOutput->SetValue(false);
3500 
3501  boxSizerLvl2_1->Add(m_checkBoxOutput, 0, wxLEFT|wxRIGHT|wxTOP, WXC_FROM_DIP(5));
3502 
3503  wxArrayString m_choiceOutputArr;
3504  m_choiceOutput = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceOutputArr, 0);
3505 
3506  boxSizerLvl2_1->Add(m_choiceOutput, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
3507 
3508  wxBoxSizer* boxSizerBottomButtons = new wxBoxSizer(wxHORIZONTAL);
3509 
3510  boxSizerLvl1_1->Add(boxSizerBottomButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
3511 
3512  boxSizerBottomButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
3513 
3514  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3515 
3516  boxSizerBottomButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3517 
3518  m_ButtonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
3519 
3520  boxSizerBottomButtons->Add(m_ButtonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
3521 
3522 
3523  #if wxVERSION_NUMBER >= 2900
3524  if(!wxPersistenceManager::Get().Find(m_notebook)){
3525  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
3526  } else {
3527  wxPersistenceManager::Get().Restore(m_notebook);
3528  }
3529  #endif
3530 
3531  SetName(wxT("IOControlFormBase"));
3532  SetSize(-1,-1);
3533  if (GetSizer()) {
3534  GetSizer()->Fit(this);
3535  }
3536  if(GetParent()) {
3537  CentreOnParent(wxBOTH);
3538  } else {
3539  CentreOnScreen(wxBOTH);
3540  }
3541 #if wxVERSION_NUMBER >= 2900
3542  if(!wxPersistenceManager::Get().Find(this)) {
3543  wxPersistenceManager::Get().RegisterAndRestore(this);
3544  } else {
3545  wxPersistenceManager::Get().Restore(this);
3546  }
3547 #endif
3548  // Connect events
3549  m_checkBoxInput->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(IOControlFormBase::OnInputChecked), NULL, this);
3550  m_checkBoxOutput->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(IOControlFormBase::OnOutputChecked), NULL, this);
3551  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IOControlFormBase::OnOKButtonClick), NULL, this);
3552  m_ButtonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IOControlFormBase::OnCancelButtonClick), NULL, this);
3553 
3554 }
3555 
3556 IOControlFormBase::~IOControlFormBase()
3557 {
3558  m_checkBoxInput->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(IOControlFormBase::OnInputChecked), NULL, this);
3559  m_checkBoxOutput->Disconnect(wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler(IOControlFormBase::OnOutputChecked), NULL, this);
3560  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IOControlFormBase::OnOKButtonClick), NULL, this);
3561  m_ButtonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(IOControlFormBase::OnCancelButtonClick), NULL, this);
3562 
3563 }
+
+ + + + diff --git a/docs/doxygen/html/_element_form_8h_source.html b/docs/doxygen/html/_element_form_8h_source.html index 69cd619..2442fd5 100644 --- a/docs/doxygen/html/_element_form_8h_source.html +++ b/docs/doxygen/html/_element_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ElementForm.h Source File +Project/ElementForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ElementForm.h
-
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ElementForm.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_ELEMENTFORM_BASE_CLASSES_H
8 #define _PSP_PROJECT_ELEMENTFORM_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/dialog.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/notebook.h>
18 #include <wx/panel.h>
19 #include <wx/imaglist.h>
20 #include <wx/stattext.h>
21 #include <wx/textctrl.h>
22 #include <wx/choice.h>
23 #include <wx/arrstr.h>
24 #include <wx/checkbox.h>
25 #include <wx/button.h>
26 #include <wx/statbox.h>
27 #include <wx/statline.h>
28 #include <wx/propgrid/manager.h>
29 #include <wx/propgrid/property.h>
30 #include <wx/propgrid/advprops.h>
31 #include <wx/listctrl.h>
32 #if wxVERSION_NUMBER >= 2900
33 #include <wx/persist.h>
34 #include <wx/persist/toplevel.h>
35 #include <wx/persist/bookctrl.h>
36 #include <wx/persist/treebook.h>
37 #endif
38 
39 #ifdef WXC_FROM_DIP
40 #undef WXC_FROM_DIP
41 #endif
42 #if wxVERSION_NUMBER >= 3100
43 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
44 #else
45 #define WXC_FROM_DIP(x) x
46 #endif
47 
48 
49 class BusFormBase : public wxDialog
50 {
51 protected:
52  wxNotebook* m_notebook;
53  wxPanel* m_panelGeneral;
54  wxStaticText* m_staticTextName;
55  wxTextCtrl* m_textCtrlName;
56  wxStaticText* m_staticTextNomVoltage;
57  wxTextCtrl* m_textCtrlNomVoltage;
58  wxChoice* m_choiceNomVoltage;
59  wxCheckBox* m_checkBoxCtrlVoltage;
60  wxTextCtrl* m_textCtrlCtrlVoltage;
61  wxChoice* m_choiceCtrlVoltage;
62  wxCheckBox* m_checkBoxSlackBus;
63  wxPanel* m_panelFault;
64  wxCheckBox* m_checkBoxFault;
65  wxStaticText* m_staticTextFaultType;
66  wxChoice* m_choiceFaultType;
67  wxStaticText* m_staticTextFaultPlace;
68  wxChoice* m_choiceFaultPlace;
69  wxStaticText* m_staticTextFaultResistance;
70  wxTextCtrl* m_textCtrlFaultResistance;
71  wxStaticText* m_staticTextPU_1;
72  wxStaticText* m_staticTextReactance;
73  wxTextCtrl* m_textCtrlFaultReactance;
74  wxStaticText* m_staticTextPU_2;
75  wxPanel* m_panelStability;
76  wxCheckBox* m_checkBoxPlotData;
77  wxCheckBox* m_checkBoxStabFault;
78  wxStaticText* m_staticTextStabFaultTime;
79  wxTextCtrl* m_textCtrlStabFaultTime;
80  wxStaticText* m_staticTextS_1;
81  wxStaticText* m_staticTextStabFaultLength;
82  wxTextCtrl* m_textCtrlStabFaultLength;
83  wxStaticText* m_staticTextS_2;
84  wxStaticText* m_staticTextStabFaultResistance;
85  wxTextCtrl* m_textCtrlStabFaultResistance;
86  wxStaticText* m_staticTextPU_3;
87  wxStaticText* m_staticTextStabFaultReactance;
88  wxTextCtrl* m_textCtrlStabFaultReactance;
89  wxStaticText* m_staticTextPU_4;
90  wxButton* m_buttonOK;
91  wxButton* m_ButtonCancel;
92 
93 protected:
94  virtual void OnNominalVoltageChoice(wxCommandEvent& event) { event.Skip(); }
95  virtual void OnControlledVoltageClick(wxCommandEvent& event) { event.Skip(); }
96  virtual void OnInsertFaultClick(wxCommandEvent& event) { event.Skip(); }
97  virtual void OnFaultTypeChoice(wxCommandEvent& event) { event.Skip(); }
98  virtual void OnInsertStabFaultClick(wxCommandEvent& event) { event.Skip(); }
99  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
100  virtual void OnButtonCancelClick(wxCommandEvent& event) { event.Skip(); }
101 
102 public:
103  wxStaticText* GetStaticTextName() { return m_staticTextName; }
104  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
105  wxStaticText* GetStaticTextNomVoltage() { return m_staticTextNomVoltage; }
106  wxTextCtrl* GetTextCtrlNomVoltage() { return m_textCtrlNomVoltage; }
107  wxChoice* GetChoiceNomVoltage() { return m_choiceNomVoltage; }
108  wxCheckBox* GetCheckBoxCtrlVoltage() { return m_checkBoxCtrlVoltage; }
109  wxTextCtrl* GetTextCtrlCtrlVoltage() { return m_textCtrlCtrlVoltage; }
110  wxChoice* GetChoiceCtrlVoltage() { return m_choiceCtrlVoltage; }
111  wxCheckBox* GetCheckBoxSlackBus() { return m_checkBoxSlackBus; }
112  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
113  wxCheckBox* GetCheckBoxFault() { return m_checkBoxFault; }
114  wxStaticText* GetStaticTextFaultType() { return m_staticTextFaultType; }
115  wxChoice* GetChoiceFaultType() { return m_choiceFaultType; }
116  wxStaticText* GetStaticTextFaultPlace() { return m_staticTextFaultPlace; }
117  wxChoice* GetChoiceFaultPlace() { return m_choiceFaultPlace; }
118  wxStaticText* GetStaticTextFaultResistance() { return m_staticTextFaultResistance; }
119  wxTextCtrl* GetTextCtrlFaultResistance() { return m_textCtrlFaultResistance; }
120  wxStaticText* GetStaticTextPU_1() { return m_staticTextPU_1; }
121  wxStaticText* GetStaticTextReactance() { return m_staticTextReactance; }
122  wxTextCtrl* GetTextCtrlFaultReactance() { return m_textCtrlFaultReactance; }
123  wxStaticText* GetStaticTextPU_2() { return m_staticTextPU_2; }
124  wxPanel* GetPanelFault() { return m_panelFault; }
125  wxCheckBox* GetCheckBoxPlotData() { return m_checkBoxPlotData; }
126  wxCheckBox* GetCheckBoxStabFault() { return m_checkBoxStabFault; }
127  wxStaticText* GetStaticTextStabFaultTime() { return m_staticTextStabFaultTime; }
128  wxTextCtrl* GetTextCtrlStabFaultTime() { return m_textCtrlStabFaultTime; }
129  wxStaticText* GetStaticTextS_1() { return m_staticTextS_1; }
130  wxStaticText* GetStaticTextStabFaultLength() { return m_staticTextStabFaultLength; }
131  wxTextCtrl* GetTextCtrlStabFaultLength() { return m_textCtrlStabFaultLength; }
132  wxStaticText* GetStaticTextS_2() { return m_staticTextS_2; }
133  wxStaticText* GetStaticTextStabFaultResistance() { return m_staticTextStabFaultResistance; }
134  wxTextCtrl* GetTextCtrlStabFaultResistance() { return m_textCtrlStabFaultResistance; }
135  wxStaticText* GetStaticTextPU_3() { return m_staticTextPU_3; }
136  wxStaticText* GetStaticTextStabFaultReactance() { return m_staticTextStabFaultReactance; }
137  wxTextCtrl* GetTextCtrlStabFaultReactance() { return m_textCtrlStabFaultReactance; }
138  wxStaticText* GetStaticTextPU_4() { return m_staticTextPU_4; }
139  wxPanel* GetPanelStability() { return m_panelStability; }
140  wxNotebook* GetNotebook() { return m_notebook; }
141  wxButton* GetButtonOK() { return m_buttonOK; }
142  wxButton* GetButtonCancel() { return m_ButtonCancel; }
143  BusFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bus"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
144  virtual ~BusFormBase();
145 };
146 
147 
148 class SyncMachineFormBase : public wxDialog
149 {
150 protected:
151  wxNotebook* m_notebook;
152  wxPanel* m_panelGeneral;
153  wxStaticText* m_staticTextName;
154  wxTextCtrl* m_textCtrlName;
155  wxStaticText* m_staticTextNominalPower;
156  wxTextCtrl* m_textCtrlnominalPower;
157  wxChoice* m_choiceNominalPower;
158  wxStaticText* m_staticTextActivePower;
159  wxTextCtrl* m_textCtrlActivePower;
160  wxChoice* m_choiceActivePower;
161  wxStaticText* m_staticTextReactivePower;
162  wxTextCtrl* m_textCtrlReactivePower;
163  wxChoice* m_choiceReactivePower;
164  wxCheckBox* m_checkBoxMaxReactive;
165  wxTextCtrl* m_textCtrlMaxRectivePower;
166  wxChoice* m_choiceMaxRectivePower;
167  wxCheckBox* m_checkBoxMinReactive;
168  wxTextCtrl* m_textCtrlMinRectivePower;
169  wxChoice* m_choiceMinRectivePower;
170  wxCheckBox* m_checkBoxUseMachinePower;
171  wxPanel* m_panelFault;
172  wxStaticText* m_staticTextPosResistance;
173  wxTextCtrl* m_textCtrlPosResistance;
174  wxStaticText* m_staticTextPosReactance;
175  wxTextCtrl* m_textCtrlPosReactance;
176  wxStaticText* m_staticTextNegResistance;
177  wxTextCtrl* m_textCtrlNegResistance;
178  wxStaticText* m_staticTextNegReactance;
179  wxTextCtrl* m_textCtrlNegReactance;
180  wxStaticText* m_staticTextZeroResistance;
181  wxTextCtrl* m_textCtrlZeroResistance;
182  wxStaticText* m_staticTextZeroReactance;
183  wxTextCtrl* m_textCtrlZeroReactance;
184  wxStaticText* m_staticTextGrdResistance;
185  wxTextCtrl* m_textCtrlGrdResistance;
186  wxStaticText* m_staticTextGrdReactance;
187  wxTextCtrl* m_textCtrlGrdReactance;
188  wxCheckBox* m_checkBoxGroundNeutral;
189  wxButton* m_buttonStab;
190  wxButton* m_buttonOK;
191  wxButton* m_ButtonCancel;
192 
193 protected:
194  virtual void OnCheckMaxReactive(wxCommandEvent& event) { event.Skip(); }
195  virtual void OnCheckMinReactive(wxCommandEvent& event) { event.Skip(); }
196  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
197  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
198  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
199 
200 public:
201  wxStaticText* GetStaticTextName() { return m_staticTextName; }
202  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
203  wxStaticText* GetStaticTextNominalPower() { return m_staticTextNominalPower; }
204  wxTextCtrl* GetTextCtrlnominalPower() { return m_textCtrlnominalPower; }
205  wxChoice* GetChoiceNominalPower() { return m_choiceNominalPower; }
206  wxStaticText* GetStaticTextActivePower() { return m_staticTextActivePower; }
207  wxTextCtrl* GetTextCtrlActivePower() { return m_textCtrlActivePower; }
208  wxChoice* GetChoiceActivePower() { return m_choiceActivePower; }
209  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
210  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
211  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
212  wxCheckBox* GetCheckBoxMaxReactive() { return m_checkBoxMaxReactive; }
213  wxTextCtrl* GetTextCtrlMaxRectivePower() { return m_textCtrlMaxRectivePower; }
214  wxChoice* GetChoiceMaxRectivePower() { return m_choiceMaxRectivePower; }
215  wxCheckBox* GetCheckBoxMinReactive() { return m_checkBoxMinReactive; }
216  wxTextCtrl* GetTextCtrlMinRectivePower() { return m_textCtrlMinRectivePower; }
217  wxChoice* GetChoiceMinRectivePower() { return m_choiceMinRectivePower; }
218  wxCheckBox* GetCheckBoxUseMachinePower() { return m_checkBoxUseMachinePower; }
219  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
220  wxStaticText* GetStaticTextPosResistance() { return m_staticTextPosResistance; }
221  wxTextCtrl* GetTextCtrlPosResistance() { return m_textCtrlPosResistance; }
222  wxStaticText* GetStaticTextPosReactance() { return m_staticTextPosReactance; }
223  wxTextCtrl* GetTextCtrlPosReactance() { return m_textCtrlPosReactance; }
224  wxStaticText* GetStaticTextNegResistance() { return m_staticTextNegResistance; }
225  wxTextCtrl* GetTextCtrlNegResistance() { return m_textCtrlNegResistance; }
226  wxStaticText* GetStaticTextNegReactance() { return m_staticTextNegReactance; }
227  wxTextCtrl* GetTextCtrlNegReactance() { return m_textCtrlNegReactance; }
228  wxStaticText* GetStaticTextZeroResistance() { return m_staticTextZeroResistance; }
229  wxTextCtrl* GetTextCtrlZeroResistance() { return m_textCtrlZeroResistance; }
230  wxStaticText* GetStaticTextZeroReactance() { return m_staticTextZeroReactance; }
231  wxTextCtrl* GetTextCtrlZeroReactance() { return m_textCtrlZeroReactance; }
232  wxStaticText* GetStaticTextGrdResistance() { return m_staticTextGrdResistance; }
233  wxTextCtrl* GetTextCtrlGrdResistance() { return m_textCtrlGrdResistance; }
234  wxStaticText* GetStaticTextGrdReactance() { return m_staticTextGrdReactance; }
235  wxTextCtrl* GetTextCtrlGrdReactance() { return m_textCtrlGrdReactance; }
236  wxCheckBox* GetCheckBoxGroundNeutral() { return m_checkBoxGroundNeutral; }
237  wxPanel* GetPanelFault() { return m_panelFault; }
238  wxNotebook* GetNotebook() { return m_notebook; }
239  wxButton* GetButtonStab() { return m_buttonStab; }
240  wxButton* GetButtonOK() { return m_buttonOK; }
241  wxButton* GetButtonCancel() { return m_ButtonCancel; }
242  SyncMachineFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Generator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
243  virtual ~SyncMachineFormBase();
244 };
245 
246 
247 class GeneratorStabFormBase : public wxDialog
248 {
249 protected:
250  wxCheckBox* m_checkBoxPlotSyncMachine;
251  wxStaticText* m_staticTextInertia;
252  wxTextCtrl* m_textCtrlInertia;
253  wxStaticText* m_staticTextS_1;
254  wxStaticText* m_staticTextDamping;
255  wxTextCtrl* m_textCtrlDamping;
256  wxStaticText* m_staticTextPU_1;
257  wxCheckBox* m_checkBoxUseAVR;
258  wxButton* m_buttonEditAVR;
259  wxCheckBox* m_checkBoxUseSG;
260  wxButton* m_buttonEditSG;
261  wxStaticLine* m_staticLine_1;
262  wxStaticText* m_staticTextRa;
263  wxTextCtrl* m_textCtrlRa;
264  wxStaticText* m_staticTextPU_2;
265  wxStaticText* m_staticTextXp;
266  wxTextCtrl* m_textCtrlXp;
267  wxStaticText* m_staticTextPU_9;
268  wxStaticText* m_staticTextSat;
269  wxTextCtrl* m_textCtrlSat;
270  wxStaticText* m_staticTextPU_10;
271  wxStaticText* m_staticTextSyncXd;
272  wxTextCtrl* m_textCtrlSyncXd;
273  wxStaticText* m_staticTextPU_3;
274  wxStaticText* m_staticTextSyncXq;
275  wxTextCtrl* m_textCtrlSyncXq;
276  wxStaticText* m_staticTextPU_4;
277  wxStaticText* m_staticTextTranXd;
278  wxTextCtrl* m_textCtrlTranXd;
279  wxStaticText* m_staticTextPU_5;
280  wxStaticText* m_staticTextTranXq;
281  wxTextCtrl* m_textCtrlTranXq;
282  wxStaticText* m_staticTextPU_6;
283  wxStaticText* m_staticTextTranTd0;
284  wxTextCtrl* m_textCtrlTranTd0;
285  wxStaticText* m_staticTextS_2;
286  wxStaticText* m_staticTextTranTq0;
287  wxTextCtrl* m_textCtrlTranTq0;
288  wxStaticText* m_staticTextS_3;
289  wxStaticText* m_staticTextSubXd;
290  wxTextCtrl* m_textCtrlSubXd;
291  wxStaticText* m_staticTextPU_7;
292  wxStaticText* m_staticTextSubXq;
293  wxTextCtrl* m_textCtrlSubXq;
294  wxStaticText* m_staticTextPU_8;
295  wxStaticText* m_staticTextSubTd0;
296  wxTextCtrl* m_textCtrlSubTd0;
297  wxStaticText* m_staticTextS_4;
298  wxStaticText* m_staticTextSubTq0;
299  wxTextCtrl* m_textCtrlSubTq0;
300  wxStaticText* m_staticTextS_5;
301  wxButton* m_buttonSwitching;
302  wxButton* m_buttonOK;
303  wxButton* m_ButtonCancel;
304 
305 protected:
306  virtual void UseAVRClick(wxCommandEvent& event) { event.Skip(); }
307  virtual void OnEditAVRButtonClick(wxCommandEvent& event) { event.Skip(); }
308  virtual void UseSGClick(wxCommandEvent& event) { event.Skip(); }
309  virtual void OnSpeedGovernorButtonClick(wxCommandEvent& event) { event.Skip(); }
310  virtual void OnSwitchingButtonClick(wxCommandEvent& event) { event.Skip(); }
311  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
312  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
313 
314 public:
315  wxCheckBox* GetCheckBoxPlotSyncMachine() { return m_checkBoxPlotSyncMachine; }
316  wxStaticText* GetStaticTextInertia() { return m_staticTextInertia; }
317  wxTextCtrl* GetTextCtrlInertia() { return m_textCtrlInertia; }
318  wxStaticText* GetStaticTextS_1() { return m_staticTextS_1; }
319  wxStaticText* GetStaticTextDamping() { return m_staticTextDamping; }
320  wxTextCtrl* GetTextCtrlDamping() { return m_textCtrlDamping; }
321  wxStaticText* GetStaticTextPU_1() { return m_staticTextPU_1; }
322  wxCheckBox* GetCheckBoxUseAVR() { return m_checkBoxUseAVR; }
323  wxButton* GetButtonEditAVR() { return m_buttonEditAVR; }
324  wxCheckBox* GetCheckBoxUseSG() { return m_checkBoxUseSG; }
325  wxButton* GetButtonEditSG() { return m_buttonEditSG; }
326  wxStaticLine* GetStaticLine_1() { return m_staticLine_1; }
327  wxStaticText* GetStaticTextRa() { return m_staticTextRa; }
328  wxTextCtrl* GetTextCtrlRa() { return m_textCtrlRa; }
329  wxStaticText* GetStaticTextPU_2() { return m_staticTextPU_2; }
330  wxStaticText* GetStaticTextXp() { return m_staticTextXp; }
331  wxTextCtrl* GetTextCtrlXp() { return m_textCtrlXp; }
332  wxStaticText* GetStaticTextPU_9() { return m_staticTextPU_9; }
333  wxStaticText* GetStaticTextSat() { return m_staticTextSat; }
334  wxTextCtrl* GetTextCtrlSat() { return m_textCtrlSat; }
335  wxStaticText* GetStaticTextPU_10() { return m_staticTextPU_10; }
336  wxStaticText* GetStaticTextSyncXd() { return m_staticTextSyncXd; }
337  wxTextCtrl* GetTextCtrlSyncXd() { return m_textCtrlSyncXd; }
338  wxStaticText* GetStaticTextPU_3() { return m_staticTextPU_3; }
339  wxStaticText* GetStaticTextSyncXq() { return m_staticTextSyncXq; }
340  wxTextCtrl* GetTextCtrlSyncXq() { return m_textCtrlSyncXq; }
341  wxStaticText* GetStaticTextPU_4() { return m_staticTextPU_4; }
342  wxStaticText* GetStaticTextTranXd() { return m_staticTextTranXd; }
343  wxTextCtrl* GetTextCtrlTranXd() { return m_textCtrlTranXd; }
344  wxStaticText* GetStaticTextPU_5() { return m_staticTextPU_5; }
345  wxStaticText* GetStaticTextTranXq() { return m_staticTextTranXq; }
346  wxTextCtrl* GetTextCtrlTranXq() { return m_textCtrlTranXq; }
347  wxStaticText* GetStaticTextPU_6() { return m_staticTextPU_6; }
348  wxStaticText* GetStaticTextTranTd0() { return m_staticTextTranTd0; }
349  wxTextCtrl* GetTextCtrlTranTd0() { return m_textCtrlTranTd0; }
350  wxStaticText* GetStaticTextS_2() { return m_staticTextS_2; }
351  wxStaticText* GetStaticTextTranTq0() { return m_staticTextTranTq0; }
352  wxTextCtrl* GetTextCtrlTranTq0() { return m_textCtrlTranTq0; }
353  wxStaticText* GetStaticTextS_3() { return m_staticTextS_3; }
354  wxStaticText* GetStaticTextSubXd() { return m_staticTextSubXd; }
355  wxTextCtrl* GetTextCtrlSubXd() { return m_textCtrlSubXd; }
356  wxStaticText* GetStaticTextPU_7() { return m_staticTextPU_7; }
357  wxStaticText* GetStaticTextSubXq() { return m_staticTextSubXq; }
358  wxTextCtrl* GetTextCtrlSubXq() { return m_textCtrlSubXq; }
359  wxStaticText* GetStaticTextPU_8() { return m_staticTextPU_8; }
360  wxStaticText* GetStaticTextSubTd0() { return m_staticTextSubTd0; }
361  wxTextCtrl* GetTextCtrlSubTd0() { return m_textCtrlSubTd0; }
362  wxStaticText* GetStaticTextS_4() { return m_staticTextS_4; }
363  wxStaticText* GetStaticTextSubTq0() { return m_staticTextSubTq0; }
364  wxTextCtrl* GetTextCtrlSubTq0() { return m_textCtrlSubTq0; }
365  wxStaticText* GetStaticTextS_5() { return m_staticTextS_5; }
366  wxButton* GetButtonSwitching() { return m_buttonSwitching; }
367  wxButton* GetButtonOK() { return m_buttonOK; }
368  wxButton* GetButtonCancel() { return m_ButtonCancel; }
369  GeneratorStabFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Generator: Stability"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
370  virtual ~GeneratorStabFormBase();
371 };
372 
373 
374 class LineFormBase : public wxDialog
375 {
376 protected:
377  wxNotebook* m_notebook;
378  wxPanel* m_panelGeneral;
379  wxStaticText* m_staticTextName;
380  wxTextCtrl* m_textCtrlName;
381  wxStaticText* m_staticTextNominalVoltage;
382  wxStaticText* m_staticTextNominalVoltageValue;
383  wxStaticText* m_staticTextNominalPower;
384  wxTextCtrl* m_textCtrlNominalPower;
385  wxChoice* m_choiceNominalPower;
386  wxStaticText* m_staticTextResistance;
387  wxTextCtrl* m_textCtrlResistance;
388  wxChoice* m_choiceResistance;
389  wxStaticText* m_staticTextReactance;
390  wxTextCtrl* m_textCtrlReactance;
391  wxChoice* m_choiceReactance;
392  wxStaticText* m_staticTextSusceptance;
393  wxTextCtrl* m_textCtrlSusceptance;
394  wxChoice* m_choiceSusceptance;
395  wxStaticText* m_staticTextLineSize;
396  wxTextCtrl* m_textCtrlLineSize;
397  wxStaticText* m_staticTextKM;
398  wxCheckBox* m_checkUseLinePower;
399  wxPanel* m_panelFault;
400  wxStaticText* m_staticTextZeroResistance;
401  wxTextCtrl* m_textCtrlZeroResistance;
402  wxStaticText* m_staticTextZeroReactance;
403  wxTextCtrl* m_textCtrlZeroReactance;
404  wxStaticText* m_staticTextZeroSusceptance;
405  wxTextCtrl* m_textCtrlZeroSusceptance;
406  wxButton* m_buttonStability;
407  wxButton* m_buttonOK;
408  wxButton* m_buttonCancel;
409 
410 protected:
411  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
412  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
413  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
414 
415 public:
416  wxStaticText* GetStaticTextName() { return m_staticTextName; }
417  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
418  wxStaticText* GetStaticTextNominalVoltage() { return m_staticTextNominalVoltage; }
419  wxStaticText* GetStaticTextNominalVoltageValue() { return m_staticTextNominalVoltageValue; }
420  wxStaticText* GetStaticTextNominalPower() { return m_staticTextNominalPower; }
421  wxTextCtrl* GetTextCtrlNominalPower() { return m_textCtrlNominalPower; }
422  wxChoice* GetChoiceNominalPower() { return m_choiceNominalPower; }
423  wxStaticText* GetStaticTextResistance() { return m_staticTextResistance; }
424  wxTextCtrl* GetTextCtrlResistance() { return m_textCtrlResistance; }
425  wxChoice* GetChoiceResistance() { return m_choiceResistance; }
426  wxStaticText* GetStaticTextReactance() { return m_staticTextReactance; }
427  wxTextCtrl* GetTextCtrlReactance() { return m_textCtrlReactance; }
428  wxChoice* GetChoiceReactance() { return m_choiceReactance; }
429  wxStaticText* GetStaticTextSusceptance() { return m_staticTextSusceptance; }
430  wxTextCtrl* GetTextCtrlSusceptance() { return m_textCtrlSusceptance; }
431  wxChoice* GetChoiceSusceptance() { return m_choiceSusceptance; }
432  wxStaticText* GetStaticTextLineSize() { return m_staticTextLineSize; }
433  wxTextCtrl* GetTextCtrlLineSize() { return m_textCtrlLineSize; }
434  wxStaticText* GetStaticTextKM() { return m_staticTextKM; }
435  wxCheckBox* GetCheckUseLinePower() { return m_checkUseLinePower; }
436  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
437  wxStaticText* GetStaticTextZeroResistance() { return m_staticTextZeroResistance; }
438  wxTextCtrl* GetTextCtrlZeroResistance() { return m_textCtrlZeroResistance; }
439  wxStaticText* GetStaticTextZeroReactance() { return m_staticTextZeroReactance; }
440  wxTextCtrl* GetTextCtrlZeroReactance() { return m_textCtrlZeroReactance; }
441  wxStaticText* GetStaticTextZeroSusceptance() { return m_staticTextZeroSusceptance; }
442  wxTextCtrl* GetTextCtrlZeroSusceptance() { return m_textCtrlZeroSusceptance; }
443  wxPanel* GetPanelFault() { return m_panelFault; }
444  wxNotebook* GetNotebook() { return m_notebook; }
445  wxButton* GetButtonStability() { return m_buttonStability; }
446  wxButton* GetButtonOK() { return m_buttonOK; }
447  wxButton* GetButtonCancel() { return m_buttonCancel; }
448  LineFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Line"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
449  virtual ~LineFormBase();
450 };
451 
452 
453 class TransformerFormBase : public wxDialog
454 {
455 protected:
456  wxNotebook* m_notebook;
457  wxPanel* m_panelGeneral;
458  wxStaticText* m_staticTextName;
459  wxTextCtrl* m_textCtrlName;
460  wxStaticText* m_staticTextNominalVoltage;
461  wxStaticText* m_staticTextNominalVoltageValue;
462  wxStaticText* m_staticTextBaseVoltage;
463  wxChoice* m_choiceBaseVoltage;
464  wxStaticText* m_staticTextNominalPower;
465  wxTextCtrl* m_textCtrlNominalPower;
466  wxChoice* m_choiceNominalPower;
467  wxStaticText* m_staticTextResistance;
468  wxTextCtrl* m_textCtrlResistance;
469  wxChoice* m_choiceResistance;
470  wxStaticText* m_staticTextReactance;
471  wxTextCtrl* m_textCtrlReactance;
472  wxChoice* m_choiceReactance;
473  wxStaticLine* m_staticLine_1;
474  wxStaticText* m_staticTextConnection;
475  wxChoice* m_choiceConnection;
476  wxStaticText* m_staticTextTurnsRatio;
477  wxTextCtrl* m_textCtrlTurnRatio;
478  wxStaticText* m_staticTextPhaseShift;
479  wxTextCtrl* m_textCtrlPhaseShift;
480  wxStaticText* m_staticTextDeg;
481  wxCheckBox* m_checkUseTransformerPower;
482  wxPanel* m_panelFault;
483  wxStaticText* m_staticTextZeroResistance;
484  wxTextCtrl* m_textCtrlZeroResistance;
485  wxStaticText* m_staticTextZeroReactance;
486  wxTextCtrl* m_textCtrlZeroReactance;
487  wxStaticText* m_staticTextPrimResistance;
488  wxTextCtrl* m_textCtrlPrimResistance;
489  wxStaticText* m_staticTextPrimReactance;
490  wxTextCtrl* m_textCtrlPrimReactance;
491  wxStaticText* m_staticTextSecResistance;
492  wxTextCtrl* m_textCtrlSecResistance;
493  wxStaticText* m_staticTextSecReactance;
494  wxTextCtrl* m_textCtrlSecReactance;
495  wxButton* m_buttonStability;
496  wxButton* m_buttonOK;
497  wxButton* m_buttonCancel;
498 
499 protected:
500  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
501  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
502  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
503 
504 public:
505  wxStaticText* GetStaticTextName() { return m_staticTextName; }
506  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
507  wxStaticText* GetStaticTextNominalVoltage() { return m_staticTextNominalVoltage; }
508  wxStaticText* GetStaticTextNominalVoltageValue() { return m_staticTextNominalVoltageValue; }
509  wxStaticText* GetStaticTextBaseVoltage() { return m_staticTextBaseVoltage; }
510  wxChoice* GetChoiceBaseVoltage() { return m_choiceBaseVoltage; }
511  wxStaticText* GetStaticTextNominalPower() { return m_staticTextNominalPower; }
512  wxTextCtrl* GetTextCtrlNominalPower() { return m_textCtrlNominalPower; }
513  wxChoice* GetChoiceNominalPower() { return m_choiceNominalPower; }
514  wxStaticText* GetStaticTextResistance() { return m_staticTextResistance; }
515  wxTextCtrl* GetTextCtrlResistance() { return m_textCtrlResistance; }
516  wxChoice* GetChoiceResistance() { return m_choiceResistance; }
517  wxStaticText* GetStaticTextReactance() { return m_staticTextReactance; }
518  wxTextCtrl* GetTextCtrlReactance() { return m_textCtrlReactance; }
519  wxChoice* GetChoiceReactance() { return m_choiceReactance; }
520  wxStaticLine* GetStaticLine_1() { return m_staticLine_1; }
521  wxStaticText* GetStaticTextConnection() { return m_staticTextConnection; }
522  wxChoice* GetChoiceConnection() { return m_choiceConnection; }
523  wxStaticText* GetStaticTextTurnsRatio() { return m_staticTextTurnsRatio; }
524  wxTextCtrl* GetTextCtrlTurnRatio() { return m_textCtrlTurnRatio; }
525  wxStaticText* GetStaticTextPhaseShift() { return m_staticTextPhaseShift; }
526  wxTextCtrl* GetTextCtrlPhaseShift() { return m_textCtrlPhaseShift; }
527  wxStaticText* GetStaticTextDeg() { return m_staticTextDeg; }
528  wxCheckBox* GetCheckUseTransformerPower() { return m_checkUseTransformerPower; }
529  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
530  wxStaticText* GetStaticTextZeroResistance() { return m_staticTextZeroResistance; }
531  wxTextCtrl* GetTextCtrlZeroResistance() { return m_textCtrlZeroResistance; }
532  wxStaticText* GetStaticTextZeroReactance() { return m_staticTextZeroReactance; }
533  wxTextCtrl* GetTextCtrlZeroReactance() { return m_textCtrlZeroReactance; }
534  wxStaticText* GetStaticTextPrimResistance() { return m_staticTextPrimResistance; }
535  wxTextCtrl* GetTextCtrlPrimResistance() { return m_textCtrlPrimResistance; }
536  wxStaticText* GetStaticTextPrimReactance() { return m_staticTextPrimReactance; }
537  wxTextCtrl* GetTextCtrlPrimReactance() { return m_textCtrlPrimReactance; }
538  wxStaticText* GetStaticTextSecResistance() { return m_staticTextSecResistance; }
539  wxTextCtrl* GetTextCtrlSecResistance() { return m_textCtrlSecResistance; }
540  wxStaticText* GetStaticTextSecReactance() { return m_staticTextSecReactance; }
541  wxTextCtrl* GetTextCtrlSecReactance() { return m_textCtrlSecReactance; }
542  wxPanel* GetPanelFault() { return m_panelFault; }
543  wxNotebook* GetNotebook() { return m_notebook; }
544  wxButton* GetButtonStability() { return m_buttonStability; }
545  wxButton* GetButtonOK() { return m_buttonOK; }
546  wxButton* GetButtonCancel() { return m_buttonCancel; }
547  TransformerFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Transformer"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
548  virtual ~TransformerFormBase();
549 };
550 
551 
552 class LoadFormBase : public wxDialog
553 {
554 protected:
555  wxNotebook* m_notebook;
556  wxPanel* m_panelGeneral;
557  wxStaticText* m_staticTextName;
558  wxTextCtrl* m_textCtrlName;
559  wxStaticText* m_staticTextActivePower;
560  wxTextCtrl* m_textCtrlActivePower;
561  wxChoice* m_choiceActivePower;
562  wxStaticText* m_staticTextReactivePower;
563  wxTextCtrl* m_textCtrlReactivePower;
564  wxChoice* m_choiceReactivePower;
565  wxStaticText* m_staticTextType;
566  wxChoice* m_choiceType;
567  wxButton* m_buttonStabButton;
568  wxButton* m_buttonOK;
569  wxButton* m_ButtonCancel;
570 
571 protected:
572  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
573  virtual void OnOnButtonClick(wxCommandEvent& event) { event.Skip(); }
574  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
575 
576 public:
577  wxStaticText* GetStaticTextName() { return m_staticTextName; }
578  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
579  wxStaticText* GetStaticTextActivePower() { return m_staticTextActivePower; }
580  wxTextCtrl* GetTextCtrlActivePower() { return m_textCtrlActivePower; }
581  wxChoice* GetChoiceActivePower() { return m_choiceActivePower; }
582  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
583  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
584  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
585  wxStaticText* GetStaticTextType() { return m_staticTextType; }
586  wxChoice* GetChoiceType() { return m_choiceType; }
587  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
588  wxNotebook* GetNotebook() { return m_notebook; }
589  wxButton* GetButtonStabButton() { return m_buttonStabButton; }
590  wxButton* GetButtonOK() { return m_buttonOK; }
591  wxButton* GetButtonCancel() { return m_ButtonCancel; }
592  LoadFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Load"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
593  virtual ~LoadFormBase();
594 };
595 
596 
597 class ReactiveShuntElementFormBase : public wxDialog
598 {
599 protected:
600  wxNotebook* m_notebook;
601  wxPanel* m_panelGeneral;
602  wxStaticText* m_staticTextName;
603  wxTextCtrl* m_textCtrlName;
604  wxStaticText* m_staticTextReactivePower;
605  wxTextCtrl* m_textCtrlReactivePower;
606  wxChoice* m_choiceReactivePower;
607  wxButton* m_buttonStabButton;
608  wxButton* m_buttonOK;
609  wxButton* m_buttonCancel;
610 
611 protected:
612  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
613  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
614  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
615 
616 public:
617  wxStaticText* GetStaticTextName() { return m_staticTextName; }
618  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
619  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
620  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
621  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
622  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
623  wxNotebook* GetNotebook() { return m_notebook; }
624  wxButton* GetButtonStabButton() { return m_buttonStabButton; }
625  wxButton* GetButtonOK() { return m_buttonOK; }
626  wxButton* GetButtonCancel() { return m_buttonCancel; }
627  ReactiveShuntElementFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Reactive shunt element"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
628  virtual ~ReactiveShuntElementFormBase();
629 };
630 
631 
632 class SwitchingFormBase : public wxDialog
633 {
634 protected:
635  wxPropertyGridManager* m_pgMgrSwitchingsProp;
636  wxPGProperty* m_pgPropTitle;
637  wxPGProperty* m_pgPropType;
638  wxPGProperty* m_pgPropTime;
639  wxButton* m_buttonInsert;
640  wxButton* m_buttonRemove;
641  wxButton* m_buttonUp;
642  wxButton* m_buttonDown;
643  wxStaticText* m_staticTextSwList;
644  wxListCtrl* m_listCtrlSwitchings;
645  wxButton* m_buttonOK;
646  wxButton* m_buttonCancel;
647 
648 protected:
649  virtual void OnChangeProperties(wxPropertyGridEvent& event) { event.Skip(); }
650  virtual void OnInsertButtonClick(wxCommandEvent& event) { event.Skip(); }
651  virtual void OnRemoveButtonClick(wxCommandEvent& event) { event.Skip(); }
652  virtual void OnUpButtonClick(wxCommandEvent& event) { event.Skip(); }
653  virtual void OnDownButtonClick(wxCommandEvent& event) { event.Skip(); }
654  virtual void OnSelectItem(wxListEvent& event) { event.Skip(); }
655  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
656  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
657 
658 public:
659  wxPropertyGridManager* GetPgMgrSwitchingsProp() { return m_pgMgrSwitchingsProp; }
660  wxButton* GetButtonInsert() { return m_buttonInsert; }
661  wxButton* GetButtonRemove() { return m_buttonRemove; }
662  wxButton* GetButtonUp() { return m_buttonUp; }
663  wxButton* GetButtonDown() { return m_buttonDown; }
664  wxStaticText* GetStaticTextSwList() { return m_staticTextSwList; }
665  wxListCtrl* GetListCtrlSwitchings() { return m_listCtrlSwitchings; }
666  wxButton* GetButtonOK() { return m_buttonOK; }
667  wxButton* GetButtonCancel() { return m_buttonCancel; }
668  SwitchingFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Switching"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
669  virtual ~SwitchingFormBase();
670 };
671 
672 
673 class IndMotorFormBase : public wxDialog
674 {
675 protected:
676  wxNotebook* m_notebook;
677  wxPanel* m_panelGeneral;
678  wxStaticText* m_staticTextName;
679  wxTextCtrl* m_textCtrlName;
680  wxStaticText* m_staticTextActivePower;
681  wxTextCtrl* m_textCtrlActivePower;
682  wxChoice* m_choiceActivePower;
683  wxStaticText* m_staticTextReactivePower;
684  wxTextCtrl* m_textCtrlReactivePower;
685  wxChoice* m_choiceReactivePower;
686  wxButton* m_buttonStabButton;
687  wxButton* m_buttonOK;
688  wxButton* m_ButtonCancel;
689 
690 protected:
691  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
692  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
693  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
694 
695 public:
696  wxStaticText* GetStaticTextName() { return m_staticTextName; }
697  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
698  wxStaticText* GetStaticTextActivePower() { return m_staticTextActivePower; }
699  wxTextCtrl* GetTextCtrlActivePower() { return m_textCtrlActivePower; }
700  wxChoice* GetChoiceActivePower() { return m_choiceActivePower; }
701  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
702  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
703  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
704  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
705  wxNotebook* GetNotebook() { return m_notebook; }
706  wxButton* GetButtonStabButton() { return m_buttonStabButton; }
707  wxButton* GetButtonOK() { return m_buttonOK; }
708  wxButton* GetButtonCancel() { return m_ButtonCancel; }
709  IndMotorFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Motor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
710  virtual ~IndMotorFormBase();
711 };
712 
713 
714 class TextFormBase : public wxDialog
715 {
716 protected:
717  wxNotebook* m_notebook;
718  wxPanel* m_panelGeneral;
719  wxStaticText* m_staticTextElement;
720  wxChoice* m_choiceElement;
721  wxStaticText* m_staticTextName;
722  wxChoice* m_choiceName;
723  wxStaticText* m_staticTextType;
724  wxChoice* m_choiceTextType;
725  wxStaticText* m_staticTextFromBus;
726  wxChoice* m_choiceTextFromBus;
727  wxStaticText* m_staticTextToBus;
728  wxChoice* m_choiceTextToBus;
729  wxStaticText* m_staticTextUnit;
730  wxChoice* m_choiceTextUnit;
731  wxStaticText* m_staticTextDecimal;
732  wxTextCtrl* m_textCtrlDecimal;
733  wxStaticText* m_staticTextPreview;
734  wxTextCtrl* m_textCtrlPreview;
735  wxButton* m_buttonOK;
736  wxButton* m_ButtonCancel;
737 
738 protected:
739  virtual void OnElementChoiceSelected(wxCommandEvent& event) { event.Skip(); }
740  virtual void OnNameChoiceSelected(wxCommandEvent& event) { event.Skip(); }
741  virtual void OnTypeChoiceSelected(wxCommandEvent& event) { event.Skip(); }
742  virtual void OnFromBusChoiceSelected(wxCommandEvent& event) { event.Skip(); }
743  virtual void OnToBusChoiceSelected(wxCommandEvent& event) { event.Skip(); }
744  virtual void OnUnitChoiceSelected(wxCommandEvent& event) { event.Skip(); }
745  virtual void OnTextEnter(wxCommandEvent& event) { event.Skip(); }
746  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
747  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
748 
749 public:
750  wxStaticText* GetStaticTextElement() { return m_staticTextElement; }
751  wxChoice* GetChoiceElement() { return m_choiceElement; }
752  wxStaticText* GetStaticTextName() { return m_staticTextName; }
753  wxChoice* GetChoiceName() { return m_choiceName; }
754  wxStaticText* GetStaticTextType() { return m_staticTextType; }
755  wxChoice* GetChoiceTextType() { return m_choiceTextType; }
756  wxStaticText* GetStaticTextFromBus() { return m_staticTextFromBus; }
757  wxChoice* GetChoiceTextFromBus() { return m_choiceTextFromBus; }
758  wxStaticText* GetStaticTextToBus() { return m_staticTextToBus; }
759  wxChoice* GetChoiceTextToBus() { return m_choiceTextToBus; }
760  wxStaticText* GetStaticTextUnit() { return m_staticTextUnit; }
761  wxChoice* GetChoiceTextUnit() { return m_choiceTextUnit; }
762  wxStaticText* GetStaticTextDecimal() { return m_staticTextDecimal; }
763  wxTextCtrl* GetTextCtrlDecimal() { return m_textCtrlDecimal; }
764  wxStaticText* GetStaticTextPreview() { return m_staticTextPreview; }
765  wxTextCtrl* GetTextCtrlPreview() { return m_textCtrlPreview; }
766  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
767  wxNotebook* GetNotebook() { return m_notebook; }
768  wxButton* GetButtonOK() { return m_buttonOK; }
769  wxButton* GetButtonCancel() { return m_ButtonCancel; }
770  TextFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
771  virtual ~TextFormBase();
772 };
773 
774 
775 class TransferFunctionFormBase : public wxDialog
776 {
777 protected:
778  wxNotebook* m_notebook;
779  wxPanel* m_panelGeneral;
780  wxStaticText* m_staticTextNumerator;
781  wxTextCtrl* m_textCtrlNumerator;
782  wxStaticText* m_staticTextDenominator;
783  wxTextCtrl* m_textCtrlDenominator;
784  wxButton* m_buttonOK;
785  wxButton* m_ButtonCancel;
786 
787 protected:
788  virtual void OnOKClick(wxCommandEvent& event) { event.Skip(); }
789  virtual void OnCancelClick(wxCommandEvent& event) { event.Skip(); }
790 
791 public:
792  wxStaticText* GetStaticTextNumerator() { return m_staticTextNumerator; }
793  wxTextCtrl* GetTextCtrlNumerator() { return m_textCtrlNumerator; }
794  wxStaticText* GetStaticTextDenominator() { return m_staticTextDenominator; }
795  wxTextCtrl* GetTextCtrlDenominator() { return m_textCtrlDenominator; }
796  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
797  wxNotebook* GetNotebook() { return m_notebook; }
798  wxButton* GetButtonOK() { return m_buttonOK; }
799  wxButton* GetButtonCancel() { return m_ButtonCancel; }
800  TransferFunctionFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Transfer function"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
801  virtual ~TransferFunctionFormBase();
802 };
803 
804 
805 class SumFormBase : public wxDialog
806 {
807 protected:
808  wxNotebook* m_notebook;
809  wxPanel* m_panelGeneral;
810  wxStaticText* m_staticTextSigns;
811  wxTextCtrl* m_textCtrlSigns;
812  wxButton* m_buttonOK;
813  wxButton* m_ButtonCancel;
814 
815 protected:
816  virtual void OnOKClick(wxCommandEvent& event) { event.Skip(); }
817  virtual void OnCancelClick(wxCommandEvent& event) { event.Skip(); }
818 
819 public:
820  wxStaticText* GetStaticTextSigns() { return m_staticTextSigns; }
821  wxTextCtrl* GetTextCtrlSigns() { return m_textCtrlSigns; }
822  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
823  wxNotebook* GetNotebook() { return m_notebook; }
824  wxButton* GetButtonOK() { return m_buttonOK; }
825  wxButton* GetButtonCancel() { return m_ButtonCancel; }
826  SumFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Sum"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
827  virtual ~SumFormBase();
828 };
829 
830 
831 class LimiterFormBase : public wxDialog
832 {
833 protected:
834  wxNotebook* m_notebook;
835  wxPanel* m_panelGeneral;
836  wxStaticText* m_staticTextUpLimiter;
837  wxTextCtrl* m_textCtrlUpLimit;
838  wxStaticText* m_staticTextLowLimit;
839  wxTextCtrl* m_textCtrlLowLimit;
840  wxButton* m_buttonOK;
841  wxButton* m_ButtonCancel;
842 
843 protected:
844  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
845  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
846 
847 public:
848  wxStaticText* GetStaticTextUpLimiter() { return m_staticTextUpLimiter; }
849  wxTextCtrl* GetTextCtrlUpLimit() { return m_textCtrlUpLimit; }
850  wxStaticText* GetStaticTextLowLimit() { return m_staticTextLowLimit; }
851  wxTextCtrl* GetTextCtrlLowLimit() { return m_textCtrlLowLimit; }
852  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
853  wxNotebook* GetNotebook() { return m_notebook; }
854  wxButton* GetButtonOK() { return m_buttonOK; }
855  wxButton* GetButtonCancel() { return m_ButtonCancel; }
856  LimiterFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Limiter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
857  virtual ~LimiterFormBase();
858 };
859 
860 
861 class RateLimiterFormBase : public wxDialog
862 {
863 protected:
864  wxNotebook* m_notebook;
865  wxPanel* m_panelGeneral;
866  wxStaticText* m_staticTextUpLimiter;
867  wxTextCtrl* m_textCtrlUpLimit;
868  wxStaticText* m_staticTextLowLimit;
869  wxTextCtrl* m_textCtrlLowLimit;
870  wxButton* m_buttonOK;
871  wxButton* m_ButtonCancel;
872 
873 protected:
874  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
875  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
876 
877 public:
878  wxStaticText* GetStaticTextUpLimiter() { return m_staticTextUpLimiter; }
879  wxTextCtrl* GetTextCtrlUpLimit() { return m_textCtrlUpLimit; }
880  wxStaticText* GetStaticTextLowLimit() { return m_staticTextLowLimit; }
881  wxTextCtrl* GetTextCtrlLowLimit() { return m_textCtrlLowLimit; }
882  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
883  wxNotebook* GetNotebook() { return m_notebook; }
884  wxButton* GetButtonOK() { return m_buttonOK; }
885  wxButton* GetButtonCancel() { return m_ButtonCancel; }
886  RateLimiterFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Rate limiter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
887  virtual ~RateLimiterFormBase();
888 };
889 
890 
891 class ExponentialFormBase : public wxDialog
892 {
893 protected:
894  wxNotebook* m_notebook;
895  wxPanel* m_panelGeneral;
896  wxStaticText* m_staticTextExp;
897  wxStaticText* m_staticTextAValue;
898  wxTextCtrl* m_textCtrlAValue;
899  wxStaticText* m_staticTextBValue;
900  wxTextCtrl* m_textCtrlBValue;
901  wxButton* m_buttonOK;
902  wxButton* m_buttonCancel;
903 
904 protected:
905  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
906  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
907 
908 public:
909  wxStaticText* GetStaticTextExp() { return m_staticTextExp; }
910  wxStaticText* GetStaticTextAValue() { return m_staticTextAValue; }
911  wxTextCtrl* GetTextCtrlAValue() { return m_textCtrlAValue; }
912  wxStaticText* GetStaticTextBValue() { return m_staticTextBValue; }
913  wxTextCtrl* GetTextCtrlBValue() { return m_textCtrlBValue; }
914  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
915  wxNotebook* GetNotebook() { return m_notebook; }
916  wxButton* GetButtonOK() { return m_buttonOK; }
917  wxButton* GetButtonCancel() { return m_buttonCancel; }
918  ExponentialFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Exponential"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
919  virtual ~ExponentialFormBase();
920 };
921 
922 
923 class ConstantFormBase : public wxDialog
924 {
925 protected:
926  wxNotebook* m_notebook;
927  wxPanel* m_panelGeneral;
928  wxStaticText* m_staticTextValue;
929  wxTextCtrl* m_textCtrlValue;
930  wxButton* m_buttonOK;
931  wxButton* m_buttonCancel;
932 
933 protected:
934  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
935  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
936 
937 public:
938  wxStaticText* GetStaticTextValue() { return m_staticTextValue; }
939  wxTextCtrl* GetTextCtrlValue() { return m_textCtrlValue; }
940  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
941  wxNotebook* GetNotebook() { return m_notebook; }
942  wxButton* GetButtonOK() { return m_buttonOK; }
943  wxButton* GetButtonCancel() { return m_buttonCancel; }
944  ConstantFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Constant"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
945  virtual ~ConstantFormBase();
946 };
947 
948 
949 class GainFormBase : public wxDialog
950 {
951 protected:
952  wxNotebook* m_notebook;
953  wxPanel* m_panelGeneral;
954  wxStaticText* m_staticTextValue;
955  wxTextCtrl* m_textCtrlValue;
956  wxButton* m_buttonOK;
957  wxButton* m_buttonCancel;
958 
959 protected:
960  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
961  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
962 
963 public:
964  wxStaticText* GetStaticTextValue() { return m_staticTextValue; }
965  wxTextCtrl* GetTextCtrlValue() { return m_textCtrlValue; }
966  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
967  wxNotebook* GetNotebook() { return m_notebook; }
968  wxButton* GetButtonOK() { return m_buttonOK; }
969  wxButton* GetButtonCancel() { return m_buttonCancel; }
970  GainFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Gain"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
971  virtual ~GainFormBase();
972 };
973 
974 
975 class IOControlFormBase : public wxDialog
976 {
977 protected:
978  wxNotebook* m_notebook;
979  wxPanel* m_panelGeneral;
980  wxCheckBox* m_checkBoxInput;
981  wxChoice* m_choiceInput;
982  wxCheckBox* m_checkBoxOutput;
983  wxChoice* m_choiceOutput;
984  wxButton* m_buttonOK;
985  wxButton* m_ButtonCancel;
986 
987 protected:
988  virtual void OnInputChecked(wxCommandEvent& event) { event.Skip(); }
989  virtual void OnOutputChecked(wxCommandEvent& event) { event.Skip(); }
990  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
991  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
992 
993 public:
994  wxCheckBox* GetCheckBoxInput() { return m_checkBoxInput; }
995  wxChoice* GetChoiceInput() { return m_choiceInput; }
996  wxCheckBox* GetCheckBoxOutput() { return m_checkBoxOutput; }
997  wxChoice* GetChoiceOutput() { return m_choiceOutput; }
998  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
999  wxNotebook* GetNotebook() { return m_notebook; }
1000  wxButton* GetButtonOK() { return m_buttonOK; }
1001  wxButton* GetButtonCancel() { return m_ButtonCancel; }
1002  IOControlFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Input / Output"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
1003  virtual ~IOControlFormBase();
1004 };
1005 
1006 #endif
Definition: ElementForm.h:975
-
Definition: ElementForm.h:374
-
Definition: ElementForm.h:148
-
Definition: ElementForm.h:597
-
Definition: ElementForm.h:673
-
Definition: ElementForm.h:49
-
Definition: ElementForm.h:632
-
Definition: ElementForm.h:891
-
Definition: ElementForm.h:949
-
Definition: ElementForm.h:453
-
Definition: ElementForm.h:831
-
Definition: ElementForm.h:775
-
Definition: ElementForm.h:923
-
Definition: ElementForm.h:861
-
Definition: ElementForm.h:247
-
Definition: ElementForm.h:552
-
Definition: ElementForm.h:805
-
Definition: ElementForm.h:714
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: ElementForm.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_ELEMENTFORM_BASE_CLASSES_H
8 #define _PSP_PROJECT_ELEMENTFORM_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/dialog.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/notebook.h>
18 #include <wx/panel.h>
19 #include <wx/imaglist.h>
20 #include <wx/stattext.h>
21 #include <wx/textctrl.h>
22 #include <wx/choice.h>
23 #include <wx/arrstr.h>
24 #include <wx/checkbox.h>
25 #include <wx/button.h>
26 #include <wx/statbox.h>
27 #include <wx/statline.h>
28 #include <wx/propgrid/manager.h>
29 #include <wx/propgrid/property.h>
30 #include <wx/propgrid/advprops.h>
31 #include <wx/listctrl.h>
32 #if wxVERSION_NUMBER >= 2900
33 #include <wx/persist.h>
34 #include <wx/persist/toplevel.h>
35 #include <wx/persist/bookctrl.h>
36 #include <wx/persist/treebook.h>
37 #endif
38 
39 #ifdef WXC_FROM_DIP
40 #undef WXC_FROM_DIP
41 #endif
42 #if wxVERSION_NUMBER >= 3100
43 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
44 #else
45 #define WXC_FROM_DIP(x) x
46 #endif
47 
48 
49 class BusFormBase : public wxDialog
50 {
51 protected:
52  wxNotebook* m_notebook;
53  wxPanel* m_panelGeneral;
54  wxStaticText* m_staticTextName;
55  wxTextCtrl* m_textCtrlName;
56  wxStaticText* m_staticTextNomVoltage;
57  wxTextCtrl* m_textCtrlNomVoltage;
58  wxChoice* m_choiceNomVoltage;
59  wxCheckBox* m_checkBoxCtrlVoltage;
60  wxTextCtrl* m_textCtrlCtrlVoltage;
61  wxChoice* m_choiceCtrlVoltage;
62  wxCheckBox* m_checkBoxSlackBus;
63  wxPanel* m_panelFault;
64  wxCheckBox* m_checkBoxFault;
65  wxStaticText* m_staticTextFaultType;
66  wxChoice* m_choiceFaultType;
67  wxStaticText* m_staticTextFaultPlace;
68  wxChoice* m_choiceFaultPlace;
69  wxStaticText* m_staticTextFaultResistance;
70  wxTextCtrl* m_textCtrlFaultResistance;
71  wxStaticText* m_staticTextPU_1;
72  wxStaticText* m_staticTextReactance;
73  wxTextCtrl* m_textCtrlFaultReactance;
74  wxStaticText* m_staticTextPU_2;
75  wxPanel* m_panelStability;
76  wxCheckBox* m_checkBoxPlotData;
77  wxCheckBox* m_checkBoxStabFault;
78  wxStaticText* m_staticTextStabFaultTime;
79  wxTextCtrl* m_textCtrlStabFaultTime;
80  wxStaticText* m_staticTextS_1;
81  wxStaticText* m_staticTextStabFaultLength;
82  wxTextCtrl* m_textCtrlStabFaultLength;
83  wxStaticText* m_staticTextS_2;
84  wxStaticText* m_staticTextStabFaultResistance;
85  wxTextCtrl* m_textCtrlStabFaultResistance;
86  wxStaticText* m_staticTextPU_3;
87  wxStaticText* m_staticTextStabFaultReactance;
88  wxTextCtrl* m_textCtrlStabFaultReactance;
89  wxStaticText* m_staticTextPU_4;
90  wxButton* m_buttonOK;
91  wxButton* m_ButtonCancel;
92 
93 protected:
94  virtual void OnNominalVoltageChoice(wxCommandEvent& event) { event.Skip(); }
95  virtual void OnControlledVoltageClick(wxCommandEvent& event) { event.Skip(); }
96  virtual void OnInsertFaultClick(wxCommandEvent& event) { event.Skip(); }
97  virtual void OnFaultTypeChoice(wxCommandEvent& event) { event.Skip(); }
98  virtual void OnInsertStabFaultClick(wxCommandEvent& event) { event.Skip(); }
99  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
100  virtual void OnButtonCancelClick(wxCommandEvent& event) { event.Skip(); }
101 
102 public:
103  wxStaticText* GetStaticTextName() { return m_staticTextName; }
104  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
105  wxStaticText* GetStaticTextNomVoltage() { return m_staticTextNomVoltage; }
106  wxTextCtrl* GetTextCtrlNomVoltage() { return m_textCtrlNomVoltage; }
107  wxChoice* GetChoiceNomVoltage() { return m_choiceNomVoltage; }
108  wxCheckBox* GetCheckBoxCtrlVoltage() { return m_checkBoxCtrlVoltage; }
109  wxTextCtrl* GetTextCtrlCtrlVoltage() { return m_textCtrlCtrlVoltage; }
110  wxChoice* GetChoiceCtrlVoltage() { return m_choiceCtrlVoltage; }
111  wxCheckBox* GetCheckBoxSlackBus() { return m_checkBoxSlackBus; }
112  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
113  wxCheckBox* GetCheckBoxFault() { return m_checkBoxFault; }
114  wxStaticText* GetStaticTextFaultType() { return m_staticTextFaultType; }
115  wxChoice* GetChoiceFaultType() { return m_choiceFaultType; }
116  wxStaticText* GetStaticTextFaultPlace() { return m_staticTextFaultPlace; }
117  wxChoice* GetChoiceFaultPlace() { return m_choiceFaultPlace; }
118  wxStaticText* GetStaticTextFaultResistance() { return m_staticTextFaultResistance; }
119  wxTextCtrl* GetTextCtrlFaultResistance() { return m_textCtrlFaultResistance; }
120  wxStaticText* GetStaticTextPU_1() { return m_staticTextPU_1; }
121  wxStaticText* GetStaticTextReactance() { return m_staticTextReactance; }
122  wxTextCtrl* GetTextCtrlFaultReactance() { return m_textCtrlFaultReactance; }
123  wxStaticText* GetStaticTextPU_2() { return m_staticTextPU_2; }
124  wxPanel* GetPanelFault() { return m_panelFault; }
125  wxCheckBox* GetCheckBoxPlotData() { return m_checkBoxPlotData; }
126  wxCheckBox* GetCheckBoxStabFault() { return m_checkBoxStabFault; }
127  wxStaticText* GetStaticTextStabFaultTime() { return m_staticTextStabFaultTime; }
128  wxTextCtrl* GetTextCtrlStabFaultTime() { return m_textCtrlStabFaultTime; }
129  wxStaticText* GetStaticTextS_1() { return m_staticTextS_1; }
130  wxStaticText* GetStaticTextStabFaultLength() { return m_staticTextStabFaultLength; }
131  wxTextCtrl* GetTextCtrlStabFaultLength() { return m_textCtrlStabFaultLength; }
132  wxStaticText* GetStaticTextS_2() { return m_staticTextS_2; }
133  wxStaticText* GetStaticTextStabFaultResistance() { return m_staticTextStabFaultResistance; }
134  wxTextCtrl* GetTextCtrlStabFaultResistance() { return m_textCtrlStabFaultResistance; }
135  wxStaticText* GetStaticTextPU_3() { return m_staticTextPU_3; }
136  wxStaticText* GetStaticTextStabFaultReactance() { return m_staticTextStabFaultReactance; }
137  wxTextCtrl* GetTextCtrlStabFaultReactance() { return m_textCtrlStabFaultReactance; }
138  wxStaticText* GetStaticTextPU_4() { return m_staticTextPU_4; }
139  wxPanel* GetPanelStability() { return m_panelStability; }
140  wxNotebook* GetNotebook() { return m_notebook; }
141  wxButton* GetButtonOK() { return m_buttonOK; }
142  wxButton* GetButtonCancel() { return m_ButtonCancel; }
143  BusFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bus"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
144  virtual ~BusFormBase();
145 };
146 
147 
148 class SyncMachineFormBase : public wxDialog
149 {
150 protected:
151  wxNotebook* m_notebook;
152  wxPanel* m_panelGeneral;
153  wxStaticText* m_staticTextName;
154  wxTextCtrl* m_textCtrlName;
155  wxStaticText* m_staticTextNominalPower;
156  wxTextCtrl* m_textCtrlnominalPower;
157  wxChoice* m_choiceNominalPower;
158  wxStaticText* m_staticTextActivePower;
159  wxTextCtrl* m_textCtrlActivePower;
160  wxChoice* m_choiceActivePower;
161  wxStaticText* m_staticTextReactivePower;
162  wxTextCtrl* m_textCtrlReactivePower;
163  wxChoice* m_choiceReactivePower;
164  wxCheckBox* m_checkBoxMaxReactive;
165  wxTextCtrl* m_textCtrlMaxRectivePower;
166  wxChoice* m_choiceMaxRectivePower;
167  wxCheckBox* m_checkBoxMinReactive;
168  wxTextCtrl* m_textCtrlMinRectivePower;
169  wxChoice* m_choiceMinRectivePower;
170  wxCheckBox* m_checkBoxUseMachinePower;
171  wxPanel* m_panelFault;
172  wxStaticText* m_staticTextPosResistance;
173  wxTextCtrl* m_textCtrlPosResistance;
174  wxStaticText* m_staticTextPosReactance;
175  wxTextCtrl* m_textCtrlPosReactance;
176  wxStaticText* m_staticTextNegResistance;
177  wxTextCtrl* m_textCtrlNegResistance;
178  wxStaticText* m_staticTextNegReactance;
179  wxTextCtrl* m_textCtrlNegReactance;
180  wxStaticText* m_staticTextZeroResistance;
181  wxTextCtrl* m_textCtrlZeroResistance;
182  wxStaticText* m_staticTextZeroReactance;
183  wxTextCtrl* m_textCtrlZeroReactance;
184  wxStaticText* m_staticTextGrdResistance;
185  wxTextCtrl* m_textCtrlGrdResistance;
186  wxStaticText* m_staticTextGrdReactance;
187  wxTextCtrl* m_textCtrlGrdReactance;
188  wxCheckBox* m_checkBoxGroundNeutral;
189  wxButton* m_buttonStab;
190  wxButton* m_buttonOK;
191  wxButton* m_ButtonCancel;
192 
193 protected:
194  virtual void OnCheckMaxReactive(wxCommandEvent& event) { event.Skip(); }
195  virtual void OnCheckMinReactive(wxCommandEvent& event) { event.Skip(); }
196  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
197  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
198  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
199 
200 public:
201  wxStaticText* GetStaticTextName() { return m_staticTextName; }
202  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
203  wxStaticText* GetStaticTextNominalPower() { return m_staticTextNominalPower; }
204  wxTextCtrl* GetTextCtrlnominalPower() { return m_textCtrlnominalPower; }
205  wxChoice* GetChoiceNominalPower() { return m_choiceNominalPower; }
206  wxStaticText* GetStaticTextActivePower() { return m_staticTextActivePower; }
207  wxTextCtrl* GetTextCtrlActivePower() { return m_textCtrlActivePower; }
208  wxChoice* GetChoiceActivePower() { return m_choiceActivePower; }
209  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
210  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
211  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
212  wxCheckBox* GetCheckBoxMaxReactive() { return m_checkBoxMaxReactive; }
213  wxTextCtrl* GetTextCtrlMaxRectivePower() { return m_textCtrlMaxRectivePower; }
214  wxChoice* GetChoiceMaxRectivePower() { return m_choiceMaxRectivePower; }
215  wxCheckBox* GetCheckBoxMinReactive() { return m_checkBoxMinReactive; }
216  wxTextCtrl* GetTextCtrlMinRectivePower() { return m_textCtrlMinRectivePower; }
217  wxChoice* GetChoiceMinRectivePower() { return m_choiceMinRectivePower; }
218  wxCheckBox* GetCheckBoxUseMachinePower() { return m_checkBoxUseMachinePower; }
219  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
220  wxStaticText* GetStaticTextPosResistance() { return m_staticTextPosResistance; }
221  wxTextCtrl* GetTextCtrlPosResistance() { return m_textCtrlPosResistance; }
222  wxStaticText* GetStaticTextPosReactance() { return m_staticTextPosReactance; }
223  wxTextCtrl* GetTextCtrlPosReactance() { return m_textCtrlPosReactance; }
224  wxStaticText* GetStaticTextNegResistance() { return m_staticTextNegResistance; }
225  wxTextCtrl* GetTextCtrlNegResistance() { return m_textCtrlNegResistance; }
226  wxStaticText* GetStaticTextNegReactance() { return m_staticTextNegReactance; }
227  wxTextCtrl* GetTextCtrlNegReactance() { return m_textCtrlNegReactance; }
228  wxStaticText* GetStaticTextZeroResistance() { return m_staticTextZeroResistance; }
229  wxTextCtrl* GetTextCtrlZeroResistance() { return m_textCtrlZeroResistance; }
230  wxStaticText* GetStaticTextZeroReactance() { return m_staticTextZeroReactance; }
231  wxTextCtrl* GetTextCtrlZeroReactance() { return m_textCtrlZeroReactance; }
232  wxStaticText* GetStaticTextGrdResistance() { return m_staticTextGrdResistance; }
233  wxTextCtrl* GetTextCtrlGrdResistance() { return m_textCtrlGrdResistance; }
234  wxStaticText* GetStaticTextGrdReactance() { return m_staticTextGrdReactance; }
235  wxTextCtrl* GetTextCtrlGrdReactance() { return m_textCtrlGrdReactance; }
236  wxCheckBox* GetCheckBoxGroundNeutral() { return m_checkBoxGroundNeutral; }
237  wxPanel* GetPanelFault() { return m_panelFault; }
238  wxNotebook* GetNotebook() { return m_notebook; }
239  wxButton* GetButtonStab() { return m_buttonStab; }
240  wxButton* GetButtonOK() { return m_buttonOK; }
241  wxButton* GetButtonCancel() { return m_ButtonCancel; }
242  SyncMachineFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Generator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
243  virtual ~SyncMachineFormBase();
244 };
245 
246 
247 class GeneratorStabFormBase : public wxDialog
248 {
249 protected:
250  wxCheckBox* m_checkBoxPlotSyncMachine;
251  wxStaticText* m_staticTextInertia;
252  wxTextCtrl* m_textCtrlInertia;
253  wxStaticText* m_staticTextS_1;
254  wxStaticText* m_staticTextDamping;
255  wxTextCtrl* m_textCtrlDamping;
256  wxStaticText* m_staticTextPU_1;
257  wxCheckBox* m_checkBoxUseAVR;
258  wxButton* m_buttonEditAVR;
259  wxCheckBox* m_checkBoxUseSG;
260  wxButton* m_buttonEditSG;
261  wxStaticLine* m_staticLine_1;
262  wxStaticText* m_staticTextRa;
263  wxTextCtrl* m_textCtrlRa;
264  wxStaticText* m_staticTextPU_2;
265  wxStaticText* m_staticTextXp;
266  wxTextCtrl* m_textCtrlXp;
267  wxStaticText* m_staticTextPU_9;
268  wxStaticText* m_staticTextSat;
269  wxTextCtrl* m_textCtrlSat;
270  wxStaticText* m_staticTextPU_10;
271  wxStaticText* m_staticTextSyncXd;
272  wxTextCtrl* m_textCtrlSyncXd;
273  wxStaticText* m_staticTextPU_3;
274  wxStaticText* m_staticTextSyncXq;
275  wxTextCtrl* m_textCtrlSyncXq;
276  wxStaticText* m_staticTextPU_4;
277  wxStaticText* m_staticTextTranXd;
278  wxTextCtrl* m_textCtrlTranXd;
279  wxStaticText* m_staticTextPU_5;
280  wxStaticText* m_staticTextTranXq;
281  wxTextCtrl* m_textCtrlTranXq;
282  wxStaticText* m_staticTextPU_6;
283  wxStaticText* m_staticTextTranTd0;
284  wxTextCtrl* m_textCtrlTranTd0;
285  wxStaticText* m_staticTextS_2;
286  wxStaticText* m_staticTextTranTq0;
287  wxTextCtrl* m_textCtrlTranTq0;
288  wxStaticText* m_staticTextS_3;
289  wxStaticText* m_staticTextSubXd;
290  wxTextCtrl* m_textCtrlSubXd;
291  wxStaticText* m_staticTextPU_7;
292  wxStaticText* m_staticTextSubXq;
293  wxTextCtrl* m_textCtrlSubXq;
294  wxStaticText* m_staticTextPU_8;
295  wxStaticText* m_staticTextSubTd0;
296  wxTextCtrl* m_textCtrlSubTd0;
297  wxStaticText* m_staticTextS_4;
298  wxStaticText* m_staticTextSubTq0;
299  wxTextCtrl* m_textCtrlSubTq0;
300  wxStaticText* m_staticTextS_5;
301  wxButton* m_buttonSwitching;
302  wxButton* m_buttonOK;
303  wxButton* m_ButtonCancel;
304 
305 protected:
306  virtual void UseAVRClick(wxCommandEvent& event) { event.Skip(); }
307  virtual void OnEditAVRButtonClick(wxCommandEvent& event) { event.Skip(); }
308  virtual void UseSGClick(wxCommandEvent& event) { event.Skip(); }
309  virtual void OnSpeedGovernorButtonClick(wxCommandEvent& event) { event.Skip(); }
310  virtual void OnSwitchingButtonClick(wxCommandEvent& event) { event.Skip(); }
311  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
312  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
313 
314 public:
315  wxCheckBox* GetCheckBoxPlotSyncMachine() { return m_checkBoxPlotSyncMachine; }
316  wxStaticText* GetStaticTextInertia() { return m_staticTextInertia; }
317  wxTextCtrl* GetTextCtrlInertia() { return m_textCtrlInertia; }
318  wxStaticText* GetStaticTextS_1() { return m_staticTextS_1; }
319  wxStaticText* GetStaticTextDamping() { return m_staticTextDamping; }
320  wxTextCtrl* GetTextCtrlDamping() { return m_textCtrlDamping; }
321  wxStaticText* GetStaticTextPU_1() { return m_staticTextPU_1; }
322  wxCheckBox* GetCheckBoxUseAVR() { return m_checkBoxUseAVR; }
323  wxButton* GetButtonEditAVR() { return m_buttonEditAVR; }
324  wxCheckBox* GetCheckBoxUseSG() { return m_checkBoxUseSG; }
325  wxButton* GetButtonEditSG() { return m_buttonEditSG; }
326  wxStaticLine* GetStaticLine_1() { return m_staticLine_1; }
327  wxStaticText* GetStaticTextRa() { return m_staticTextRa; }
328  wxTextCtrl* GetTextCtrlRa() { return m_textCtrlRa; }
329  wxStaticText* GetStaticTextPU_2() { return m_staticTextPU_2; }
330  wxStaticText* GetStaticTextXp() { return m_staticTextXp; }
331  wxTextCtrl* GetTextCtrlXp() { return m_textCtrlXp; }
332  wxStaticText* GetStaticTextPU_9() { return m_staticTextPU_9; }
333  wxStaticText* GetStaticTextSat() { return m_staticTextSat; }
334  wxTextCtrl* GetTextCtrlSat() { return m_textCtrlSat; }
335  wxStaticText* GetStaticTextPU_10() { return m_staticTextPU_10; }
336  wxStaticText* GetStaticTextSyncXd() { return m_staticTextSyncXd; }
337  wxTextCtrl* GetTextCtrlSyncXd() { return m_textCtrlSyncXd; }
338  wxStaticText* GetStaticTextPU_3() { return m_staticTextPU_3; }
339  wxStaticText* GetStaticTextSyncXq() { return m_staticTextSyncXq; }
340  wxTextCtrl* GetTextCtrlSyncXq() { return m_textCtrlSyncXq; }
341  wxStaticText* GetStaticTextPU_4() { return m_staticTextPU_4; }
342  wxStaticText* GetStaticTextTranXd() { return m_staticTextTranXd; }
343  wxTextCtrl* GetTextCtrlTranXd() { return m_textCtrlTranXd; }
344  wxStaticText* GetStaticTextPU_5() { return m_staticTextPU_5; }
345  wxStaticText* GetStaticTextTranXq() { return m_staticTextTranXq; }
346  wxTextCtrl* GetTextCtrlTranXq() { return m_textCtrlTranXq; }
347  wxStaticText* GetStaticTextPU_6() { return m_staticTextPU_6; }
348  wxStaticText* GetStaticTextTranTd0() { return m_staticTextTranTd0; }
349  wxTextCtrl* GetTextCtrlTranTd0() { return m_textCtrlTranTd0; }
350  wxStaticText* GetStaticTextS_2() { return m_staticTextS_2; }
351  wxStaticText* GetStaticTextTranTq0() { return m_staticTextTranTq0; }
352  wxTextCtrl* GetTextCtrlTranTq0() { return m_textCtrlTranTq0; }
353  wxStaticText* GetStaticTextS_3() { return m_staticTextS_3; }
354  wxStaticText* GetStaticTextSubXd() { return m_staticTextSubXd; }
355  wxTextCtrl* GetTextCtrlSubXd() { return m_textCtrlSubXd; }
356  wxStaticText* GetStaticTextPU_7() { return m_staticTextPU_7; }
357  wxStaticText* GetStaticTextSubXq() { return m_staticTextSubXq; }
358  wxTextCtrl* GetTextCtrlSubXq() { return m_textCtrlSubXq; }
359  wxStaticText* GetStaticTextPU_8() { return m_staticTextPU_8; }
360  wxStaticText* GetStaticTextSubTd0() { return m_staticTextSubTd0; }
361  wxTextCtrl* GetTextCtrlSubTd0() { return m_textCtrlSubTd0; }
362  wxStaticText* GetStaticTextS_4() { return m_staticTextS_4; }
363  wxStaticText* GetStaticTextSubTq0() { return m_staticTextSubTq0; }
364  wxTextCtrl* GetTextCtrlSubTq0() { return m_textCtrlSubTq0; }
365  wxStaticText* GetStaticTextS_5() { return m_staticTextS_5; }
366  wxButton* GetButtonSwitching() { return m_buttonSwitching; }
367  wxButton* GetButtonOK() { return m_buttonOK; }
368  wxButton* GetButtonCancel() { return m_ButtonCancel; }
369  GeneratorStabFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Generator: Stability"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
370  virtual ~GeneratorStabFormBase();
371 };
372 
373 
374 class LineFormBase : public wxDialog
375 {
376 protected:
377  wxNotebook* m_notebook;
378  wxPanel* m_panelGeneral;
379  wxStaticText* m_staticTextName;
380  wxTextCtrl* m_textCtrlName;
381  wxStaticText* m_staticTextNominalVoltage;
382  wxStaticText* m_staticTextNominalVoltageValue;
383  wxStaticText* m_staticTextNominalPower;
384  wxTextCtrl* m_textCtrlNominalPower;
385  wxChoice* m_choiceNominalPower;
386  wxStaticText* m_staticTextResistance;
387  wxTextCtrl* m_textCtrlResistance;
388  wxChoice* m_choiceResistance;
389  wxStaticText* m_staticTextReactance;
390  wxTextCtrl* m_textCtrlReactance;
391  wxChoice* m_choiceReactance;
392  wxStaticText* m_staticTextSusceptance;
393  wxTextCtrl* m_textCtrlSusceptance;
394  wxChoice* m_choiceSusceptance;
395  wxStaticText* m_staticTextLineSize;
396  wxTextCtrl* m_textCtrlLineSize;
397  wxStaticText* m_staticTextKM;
398  wxCheckBox* m_checkUseLinePower;
399  wxPanel* m_panelFault;
400  wxStaticText* m_staticTextZeroResistance;
401  wxTextCtrl* m_textCtrlZeroResistance;
402  wxStaticText* m_staticTextZeroReactance;
403  wxTextCtrl* m_textCtrlZeroReactance;
404  wxStaticText* m_staticTextZeroSusceptance;
405  wxTextCtrl* m_textCtrlZeroSusceptance;
406  wxButton* m_buttonStability;
407  wxButton* m_buttonOK;
408  wxButton* m_buttonCancel;
409 
410 protected:
411  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
412  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
413  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
414 
415 public:
416  wxStaticText* GetStaticTextName() { return m_staticTextName; }
417  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
418  wxStaticText* GetStaticTextNominalVoltage() { return m_staticTextNominalVoltage; }
419  wxStaticText* GetStaticTextNominalVoltageValue() { return m_staticTextNominalVoltageValue; }
420  wxStaticText* GetStaticTextNominalPower() { return m_staticTextNominalPower; }
421  wxTextCtrl* GetTextCtrlNominalPower() { return m_textCtrlNominalPower; }
422  wxChoice* GetChoiceNominalPower() { return m_choiceNominalPower; }
423  wxStaticText* GetStaticTextResistance() { return m_staticTextResistance; }
424  wxTextCtrl* GetTextCtrlResistance() { return m_textCtrlResistance; }
425  wxChoice* GetChoiceResistance() { return m_choiceResistance; }
426  wxStaticText* GetStaticTextReactance() { return m_staticTextReactance; }
427  wxTextCtrl* GetTextCtrlReactance() { return m_textCtrlReactance; }
428  wxChoice* GetChoiceReactance() { return m_choiceReactance; }
429  wxStaticText* GetStaticTextSusceptance() { return m_staticTextSusceptance; }
430  wxTextCtrl* GetTextCtrlSusceptance() { return m_textCtrlSusceptance; }
431  wxChoice* GetChoiceSusceptance() { return m_choiceSusceptance; }
432  wxStaticText* GetStaticTextLineSize() { return m_staticTextLineSize; }
433  wxTextCtrl* GetTextCtrlLineSize() { return m_textCtrlLineSize; }
434  wxStaticText* GetStaticTextKM() { return m_staticTextKM; }
435  wxCheckBox* GetCheckUseLinePower() { return m_checkUseLinePower; }
436  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
437  wxStaticText* GetStaticTextZeroResistance() { return m_staticTextZeroResistance; }
438  wxTextCtrl* GetTextCtrlZeroResistance() { return m_textCtrlZeroResistance; }
439  wxStaticText* GetStaticTextZeroReactance() { return m_staticTextZeroReactance; }
440  wxTextCtrl* GetTextCtrlZeroReactance() { return m_textCtrlZeroReactance; }
441  wxStaticText* GetStaticTextZeroSusceptance() { return m_staticTextZeroSusceptance; }
442  wxTextCtrl* GetTextCtrlZeroSusceptance() { return m_textCtrlZeroSusceptance; }
443  wxPanel* GetPanelFault() { return m_panelFault; }
444  wxNotebook* GetNotebook() { return m_notebook; }
445  wxButton* GetButtonStability() { return m_buttonStability; }
446  wxButton* GetButtonOK() { return m_buttonOK; }
447  wxButton* GetButtonCancel() { return m_buttonCancel; }
448  LineFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Line"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
449  virtual ~LineFormBase();
450 };
451 
452 
453 class TransformerFormBase : public wxDialog
454 {
455 protected:
456  wxNotebook* m_notebook;
457  wxPanel* m_panelGeneral;
458  wxStaticText* m_staticTextName;
459  wxTextCtrl* m_textCtrlName;
460  wxStaticText* m_staticTextNominalVoltage;
461  wxStaticText* m_staticTextNominalVoltageValue;
462  wxStaticText* m_staticTextBaseVoltage;
463  wxChoice* m_choiceBaseVoltage;
464  wxStaticText* m_staticTextNominalPower;
465  wxTextCtrl* m_textCtrlNominalPower;
466  wxChoice* m_choiceNominalPower;
467  wxStaticText* m_staticTextResistance;
468  wxTextCtrl* m_textCtrlResistance;
469  wxChoice* m_choiceResistance;
470  wxStaticText* m_staticTextReactance;
471  wxTextCtrl* m_textCtrlReactance;
472  wxChoice* m_choiceReactance;
473  wxStaticLine* m_staticLine_1;
474  wxStaticText* m_staticTextConnection;
475  wxChoice* m_choiceConnection;
476  wxStaticText* m_staticTextTurnsRatio;
477  wxTextCtrl* m_textCtrlTurnRatio;
478  wxStaticText* m_staticTextPhaseShift;
479  wxTextCtrl* m_textCtrlPhaseShift;
480  wxStaticText* m_staticTextDeg;
481  wxCheckBox* m_checkUseTransformerPower;
482  wxPanel* m_panelFault;
483  wxStaticText* m_staticTextZeroResistance;
484  wxTextCtrl* m_textCtrlZeroResistance;
485  wxStaticText* m_staticTextZeroReactance;
486  wxTextCtrl* m_textCtrlZeroReactance;
487  wxStaticText* m_staticTextPrimResistance;
488  wxTextCtrl* m_textCtrlPrimResistance;
489  wxStaticText* m_staticTextPrimReactance;
490  wxTextCtrl* m_textCtrlPrimReactance;
491  wxStaticText* m_staticTextSecResistance;
492  wxTextCtrl* m_textCtrlSecResistance;
493  wxStaticText* m_staticTextSecReactance;
494  wxTextCtrl* m_textCtrlSecReactance;
495  wxButton* m_buttonStability;
496  wxButton* m_buttonOK;
497  wxButton* m_buttonCancel;
498 
499 protected:
500  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
501  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
502  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
503 
504 public:
505  wxStaticText* GetStaticTextName() { return m_staticTextName; }
506  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
507  wxStaticText* GetStaticTextNominalVoltage() { return m_staticTextNominalVoltage; }
508  wxStaticText* GetStaticTextNominalVoltageValue() { return m_staticTextNominalVoltageValue; }
509  wxStaticText* GetStaticTextBaseVoltage() { return m_staticTextBaseVoltage; }
510  wxChoice* GetChoiceBaseVoltage() { return m_choiceBaseVoltage; }
511  wxStaticText* GetStaticTextNominalPower() { return m_staticTextNominalPower; }
512  wxTextCtrl* GetTextCtrlNominalPower() { return m_textCtrlNominalPower; }
513  wxChoice* GetChoiceNominalPower() { return m_choiceNominalPower; }
514  wxStaticText* GetStaticTextResistance() { return m_staticTextResistance; }
515  wxTextCtrl* GetTextCtrlResistance() { return m_textCtrlResistance; }
516  wxChoice* GetChoiceResistance() { return m_choiceResistance; }
517  wxStaticText* GetStaticTextReactance() { return m_staticTextReactance; }
518  wxTextCtrl* GetTextCtrlReactance() { return m_textCtrlReactance; }
519  wxChoice* GetChoiceReactance() { return m_choiceReactance; }
520  wxStaticLine* GetStaticLine_1() { return m_staticLine_1; }
521  wxStaticText* GetStaticTextConnection() { return m_staticTextConnection; }
522  wxChoice* GetChoiceConnection() { return m_choiceConnection; }
523  wxStaticText* GetStaticTextTurnsRatio() { return m_staticTextTurnsRatio; }
524  wxTextCtrl* GetTextCtrlTurnRatio() { return m_textCtrlTurnRatio; }
525  wxStaticText* GetStaticTextPhaseShift() { return m_staticTextPhaseShift; }
526  wxTextCtrl* GetTextCtrlPhaseShift() { return m_textCtrlPhaseShift; }
527  wxStaticText* GetStaticTextDeg() { return m_staticTextDeg; }
528  wxCheckBox* GetCheckUseTransformerPower() { return m_checkUseTransformerPower; }
529  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
530  wxStaticText* GetStaticTextZeroResistance() { return m_staticTextZeroResistance; }
531  wxTextCtrl* GetTextCtrlZeroResistance() { return m_textCtrlZeroResistance; }
532  wxStaticText* GetStaticTextZeroReactance() { return m_staticTextZeroReactance; }
533  wxTextCtrl* GetTextCtrlZeroReactance() { return m_textCtrlZeroReactance; }
534  wxStaticText* GetStaticTextPrimResistance() { return m_staticTextPrimResistance; }
535  wxTextCtrl* GetTextCtrlPrimResistance() { return m_textCtrlPrimResistance; }
536  wxStaticText* GetStaticTextPrimReactance() { return m_staticTextPrimReactance; }
537  wxTextCtrl* GetTextCtrlPrimReactance() { return m_textCtrlPrimReactance; }
538  wxStaticText* GetStaticTextSecResistance() { return m_staticTextSecResistance; }
539  wxTextCtrl* GetTextCtrlSecResistance() { return m_textCtrlSecResistance; }
540  wxStaticText* GetStaticTextSecReactance() { return m_staticTextSecReactance; }
541  wxTextCtrl* GetTextCtrlSecReactance() { return m_textCtrlSecReactance; }
542  wxPanel* GetPanelFault() { return m_panelFault; }
543  wxNotebook* GetNotebook() { return m_notebook; }
544  wxButton* GetButtonStability() { return m_buttonStability; }
545  wxButton* GetButtonOK() { return m_buttonOK; }
546  wxButton* GetButtonCancel() { return m_buttonCancel; }
547  TransformerFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Transformer"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
548  virtual ~TransformerFormBase();
549 };
550 
551 
552 class LoadFormBase : public wxDialog
553 {
554 protected:
555  wxNotebook* m_notebook;
556  wxPanel* m_panelGeneral;
557  wxStaticText* m_staticTextName;
558  wxTextCtrl* m_textCtrlName;
559  wxStaticText* m_staticTextActivePower;
560  wxTextCtrl* m_textCtrlActivePower;
561  wxChoice* m_choiceActivePower;
562  wxStaticText* m_staticTextReactivePower;
563  wxTextCtrl* m_textCtrlReactivePower;
564  wxChoice* m_choiceReactivePower;
565  wxStaticText* m_staticTextType;
566  wxChoice* m_choiceType;
567  wxButton* m_buttonStabButton;
568  wxButton* m_buttonOK;
569  wxButton* m_ButtonCancel;
570 
571 protected:
572  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
573  virtual void OnOnButtonClick(wxCommandEvent& event) { event.Skip(); }
574  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
575 
576 public:
577  wxStaticText* GetStaticTextName() { return m_staticTextName; }
578  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
579  wxStaticText* GetStaticTextActivePower() { return m_staticTextActivePower; }
580  wxTextCtrl* GetTextCtrlActivePower() { return m_textCtrlActivePower; }
581  wxChoice* GetChoiceActivePower() { return m_choiceActivePower; }
582  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
583  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
584  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
585  wxStaticText* GetStaticTextType() { return m_staticTextType; }
586  wxChoice* GetChoiceType() { return m_choiceType; }
587  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
588  wxNotebook* GetNotebook() { return m_notebook; }
589  wxButton* GetButtonStabButton() { return m_buttonStabButton; }
590  wxButton* GetButtonOK() { return m_buttonOK; }
591  wxButton* GetButtonCancel() { return m_ButtonCancel; }
592  LoadFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Load"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
593  virtual ~LoadFormBase();
594 };
595 
596 
597 class ReactiveShuntElementFormBase : public wxDialog
598 {
599 protected:
600  wxNotebook* m_notebook;
601  wxPanel* m_panelGeneral;
602  wxStaticText* m_staticTextName;
603  wxTextCtrl* m_textCtrlName;
604  wxStaticText* m_staticTextReactivePower;
605  wxTextCtrl* m_textCtrlReactivePower;
606  wxChoice* m_choiceReactivePower;
607  wxButton* m_buttonStabButton;
608  wxButton* m_buttonOK;
609  wxButton* m_buttonCancel;
610 
611 protected:
612  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
613  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
614  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
615 
616 public:
617  wxStaticText* GetStaticTextName() { return m_staticTextName; }
618  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
619  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
620  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
621  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
622  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
623  wxNotebook* GetNotebook() { return m_notebook; }
624  wxButton* GetButtonStabButton() { return m_buttonStabButton; }
625  wxButton* GetButtonOK() { return m_buttonOK; }
626  wxButton* GetButtonCancel() { return m_buttonCancel; }
627  ReactiveShuntElementFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Reactive shunt element"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
628  virtual ~ReactiveShuntElementFormBase();
629 };
630 
631 
632 class SwitchingFormBase : public wxDialog
633 {
634 protected:
635  wxPropertyGridManager* m_pgMgrSwitchingsProp;
636  wxPGProperty* m_pgPropTitle;
637  wxPGProperty* m_pgPropType;
638  wxPGProperty* m_pgPropTime;
639  wxButton* m_buttonInsert;
640  wxButton* m_buttonRemove;
641  wxButton* m_buttonUp;
642  wxButton* m_buttonDown;
643  wxStaticText* m_staticTextSwList;
644  wxListCtrl* m_listCtrlSwitchings;
645  wxButton* m_buttonOK;
646  wxButton* m_buttonCancel;
647 
648 protected:
649  virtual void OnChangeProperties(wxPropertyGridEvent& event) { event.Skip(); }
650  virtual void OnInsertButtonClick(wxCommandEvent& event) { event.Skip(); }
651  virtual void OnRemoveButtonClick(wxCommandEvent& event) { event.Skip(); }
652  virtual void OnUpButtonClick(wxCommandEvent& event) { event.Skip(); }
653  virtual void OnDownButtonClick(wxCommandEvent& event) { event.Skip(); }
654  virtual void OnSelectItem(wxListEvent& event) { event.Skip(); }
655  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
656  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
657 
658 public:
659  wxPropertyGridManager* GetPgMgrSwitchingsProp() { return m_pgMgrSwitchingsProp; }
660  wxButton* GetButtonInsert() { return m_buttonInsert; }
661  wxButton* GetButtonRemove() { return m_buttonRemove; }
662  wxButton* GetButtonUp() { return m_buttonUp; }
663  wxButton* GetButtonDown() { return m_buttonDown; }
664  wxStaticText* GetStaticTextSwList() { return m_staticTextSwList; }
665  wxListCtrl* GetListCtrlSwitchings() { return m_listCtrlSwitchings; }
666  wxButton* GetButtonOK() { return m_buttonOK; }
667  wxButton* GetButtonCancel() { return m_buttonCancel; }
668  SwitchingFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Switching"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
669  virtual ~SwitchingFormBase();
670 };
671 
672 
673 class IndMotorFormBase : public wxDialog
674 {
675 protected:
676  wxNotebook* m_notebook;
677  wxPanel* m_panelGeneral;
678  wxStaticText* m_staticTextName;
679  wxTextCtrl* m_textCtrlName;
680  wxStaticText* m_staticTextActivePower;
681  wxTextCtrl* m_textCtrlActivePower;
682  wxChoice* m_choiceActivePower;
683  wxStaticText* m_staticTextReactivePower;
684  wxTextCtrl* m_textCtrlReactivePower;
685  wxChoice* m_choiceReactivePower;
686  wxButton* m_buttonStabButton;
687  wxButton* m_buttonOK;
688  wxButton* m_ButtonCancel;
689 
690 protected:
691  virtual void OnStabilityButtonClick(wxCommandEvent& event) { event.Skip(); }
692  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
693  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
694 
695 public:
696  wxStaticText* GetStaticTextName() { return m_staticTextName; }
697  wxTextCtrl* GetTextCtrlName() { return m_textCtrlName; }
698  wxStaticText* GetStaticTextActivePower() { return m_staticTextActivePower; }
699  wxTextCtrl* GetTextCtrlActivePower() { return m_textCtrlActivePower; }
700  wxChoice* GetChoiceActivePower() { return m_choiceActivePower; }
701  wxStaticText* GetStaticTextReactivePower() { return m_staticTextReactivePower; }
702  wxTextCtrl* GetTextCtrlReactivePower() { return m_textCtrlReactivePower; }
703  wxChoice* GetChoiceReactivePower() { return m_choiceReactivePower; }
704  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
705  wxNotebook* GetNotebook() { return m_notebook; }
706  wxButton* GetButtonStabButton() { return m_buttonStabButton; }
707  wxButton* GetButtonOK() { return m_buttonOK; }
708  wxButton* GetButtonCancel() { return m_ButtonCancel; }
709  IndMotorFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Motor"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
710  virtual ~IndMotorFormBase();
711 };
712 
713 
714 class TextFormBase : public wxDialog
715 {
716 protected:
717  wxNotebook* m_notebook;
718  wxPanel* m_panelGeneral;
719  wxStaticText* m_staticTextElement;
720  wxChoice* m_choiceElement;
721  wxStaticText* m_staticTextName;
722  wxChoice* m_choiceName;
723  wxStaticText* m_staticTextType;
724  wxChoice* m_choiceTextType;
725  wxStaticText* m_staticTextFromBus;
726  wxChoice* m_choiceTextFromBus;
727  wxStaticText* m_staticTextToBus;
728  wxChoice* m_choiceTextToBus;
729  wxStaticText* m_staticTextUnit;
730  wxChoice* m_choiceTextUnit;
731  wxStaticText* m_staticTextDecimal;
732  wxTextCtrl* m_textCtrlDecimal;
733  wxStaticText* m_staticTextPreview;
734  wxTextCtrl* m_textCtrlPreview;
735  wxButton* m_buttonOK;
736  wxButton* m_ButtonCancel;
737 
738 protected:
739  virtual void OnElementChoiceSelected(wxCommandEvent& event) { event.Skip(); }
740  virtual void OnNameChoiceSelected(wxCommandEvent& event) { event.Skip(); }
741  virtual void OnTypeChoiceSelected(wxCommandEvent& event) { event.Skip(); }
742  virtual void OnFromBusChoiceSelected(wxCommandEvent& event) { event.Skip(); }
743  virtual void OnToBusChoiceSelected(wxCommandEvent& event) { event.Skip(); }
744  virtual void OnUnitChoiceSelected(wxCommandEvent& event) { event.Skip(); }
745  virtual void OnTextEnter(wxCommandEvent& event) { event.Skip(); }
746  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
747  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
748 
749 public:
750  wxStaticText* GetStaticTextElement() { return m_staticTextElement; }
751  wxChoice* GetChoiceElement() { return m_choiceElement; }
752  wxStaticText* GetStaticTextName() { return m_staticTextName; }
753  wxChoice* GetChoiceName() { return m_choiceName; }
754  wxStaticText* GetStaticTextType() { return m_staticTextType; }
755  wxChoice* GetChoiceTextType() { return m_choiceTextType; }
756  wxStaticText* GetStaticTextFromBus() { return m_staticTextFromBus; }
757  wxChoice* GetChoiceTextFromBus() { return m_choiceTextFromBus; }
758  wxStaticText* GetStaticTextToBus() { return m_staticTextToBus; }
759  wxChoice* GetChoiceTextToBus() { return m_choiceTextToBus; }
760  wxStaticText* GetStaticTextUnit() { return m_staticTextUnit; }
761  wxChoice* GetChoiceTextUnit() { return m_choiceTextUnit; }
762  wxStaticText* GetStaticTextDecimal() { return m_staticTextDecimal; }
763  wxTextCtrl* GetTextCtrlDecimal() { return m_textCtrlDecimal; }
764  wxStaticText* GetStaticTextPreview() { return m_staticTextPreview; }
765  wxTextCtrl* GetTextCtrlPreview() { return m_textCtrlPreview; }
766  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
767  wxNotebook* GetNotebook() { return m_notebook; }
768  wxButton* GetButtonOK() { return m_buttonOK; }
769  wxButton* GetButtonCancel() { return m_ButtonCancel; }
770  TextFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Text"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
771  virtual ~TextFormBase();
772 };
773 
774 
775 class TransferFunctionFormBase : public wxDialog
776 {
777 protected:
778  wxNotebook* m_notebook;
779  wxPanel* m_panelGeneral;
780  wxStaticText* m_staticTextNumerator;
781  wxTextCtrl* m_textCtrlNumerator;
782  wxStaticText* m_staticTextDenominator;
783  wxTextCtrl* m_textCtrlDenominator;
784  wxButton* m_buttonOK;
785  wxButton* m_ButtonCancel;
786 
787 protected:
788  virtual void OnOKClick(wxCommandEvent& event) { event.Skip(); }
789  virtual void OnCancelClick(wxCommandEvent& event) { event.Skip(); }
790 
791 public:
792  wxStaticText* GetStaticTextNumerator() { return m_staticTextNumerator; }
793  wxTextCtrl* GetTextCtrlNumerator() { return m_textCtrlNumerator; }
794  wxStaticText* GetStaticTextDenominator() { return m_staticTextDenominator; }
795  wxTextCtrl* GetTextCtrlDenominator() { return m_textCtrlDenominator; }
796  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
797  wxNotebook* GetNotebook() { return m_notebook; }
798  wxButton* GetButtonOK() { return m_buttonOK; }
799  wxButton* GetButtonCancel() { return m_ButtonCancel; }
800  TransferFunctionFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Transfer function"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
801  virtual ~TransferFunctionFormBase();
802 };
803 
804 
805 class SumFormBase : public wxDialog
806 {
807 protected:
808  wxNotebook* m_notebook;
809  wxPanel* m_panelGeneral;
810  wxStaticText* m_staticTextSigns;
811  wxTextCtrl* m_textCtrlSigns;
812  wxButton* m_buttonOK;
813  wxButton* m_ButtonCancel;
814 
815 protected:
816  virtual void OnOKClick(wxCommandEvent& event) { event.Skip(); }
817  virtual void OnCancelClick(wxCommandEvent& event) { event.Skip(); }
818 
819 public:
820  wxStaticText* GetStaticTextSigns() { return m_staticTextSigns; }
821  wxTextCtrl* GetTextCtrlSigns() { return m_textCtrlSigns; }
822  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
823  wxNotebook* GetNotebook() { return m_notebook; }
824  wxButton* GetButtonOK() { return m_buttonOK; }
825  wxButton* GetButtonCancel() { return m_ButtonCancel; }
826  SumFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Sum"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
827  virtual ~SumFormBase();
828 };
829 
830 
831 class LimiterFormBase : public wxDialog
832 {
833 protected:
834  wxNotebook* m_notebook;
835  wxPanel* m_panelGeneral;
836  wxStaticText* m_staticTextUpLimiter;
837  wxTextCtrl* m_textCtrlUpLimit;
838  wxStaticText* m_staticTextLowLimit;
839  wxTextCtrl* m_textCtrlLowLimit;
840  wxButton* m_buttonOK;
841  wxButton* m_ButtonCancel;
842 
843 protected:
844  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
845  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
846 
847 public:
848  wxStaticText* GetStaticTextUpLimiter() { return m_staticTextUpLimiter; }
849  wxTextCtrl* GetTextCtrlUpLimit() { return m_textCtrlUpLimit; }
850  wxStaticText* GetStaticTextLowLimit() { return m_staticTextLowLimit; }
851  wxTextCtrl* GetTextCtrlLowLimit() { return m_textCtrlLowLimit; }
852  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
853  wxNotebook* GetNotebook() { return m_notebook; }
854  wxButton* GetButtonOK() { return m_buttonOK; }
855  wxButton* GetButtonCancel() { return m_ButtonCancel; }
856  LimiterFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Limiter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
857  virtual ~LimiterFormBase();
858 };
859 
860 
861 class RateLimiterFormBase : public wxDialog
862 {
863 protected:
864  wxNotebook* m_notebook;
865  wxPanel* m_panelGeneral;
866  wxStaticText* m_staticTextUpLimiter;
867  wxTextCtrl* m_textCtrlUpLimit;
868  wxStaticText* m_staticTextLowLimit;
869  wxTextCtrl* m_textCtrlLowLimit;
870  wxButton* m_buttonOK;
871  wxButton* m_ButtonCancel;
872 
873 protected:
874  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
875  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
876 
877 public:
878  wxStaticText* GetStaticTextUpLimiter() { return m_staticTextUpLimiter; }
879  wxTextCtrl* GetTextCtrlUpLimit() { return m_textCtrlUpLimit; }
880  wxStaticText* GetStaticTextLowLimit() { return m_staticTextLowLimit; }
881  wxTextCtrl* GetTextCtrlLowLimit() { return m_textCtrlLowLimit; }
882  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
883  wxNotebook* GetNotebook() { return m_notebook; }
884  wxButton* GetButtonOK() { return m_buttonOK; }
885  wxButton* GetButtonCancel() { return m_ButtonCancel; }
886  RateLimiterFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Rate limiter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
887  virtual ~RateLimiterFormBase();
888 };
889 
890 
891 class ExponentialFormBase : public wxDialog
892 {
893 protected:
894  wxNotebook* m_notebook;
895  wxPanel* m_panelGeneral;
896  wxStaticText* m_staticTextExp;
897  wxStaticText* m_staticTextAValue;
898  wxTextCtrl* m_textCtrlAValue;
899  wxStaticText* m_staticTextBValue;
900  wxTextCtrl* m_textCtrlBValue;
901  wxButton* m_buttonOK;
902  wxButton* m_buttonCancel;
903 
904 protected:
905  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
906  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
907 
908 public:
909  wxStaticText* GetStaticTextExp() { return m_staticTextExp; }
910  wxStaticText* GetStaticTextAValue() { return m_staticTextAValue; }
911  wxTextCtrl* GetTextCtrlAValue() { return m_textCtrlAValue; }
912  wxStaticText* GetStaticTextBValue() { return m_staticTextBValue; }
913  wxTextCtrl* GetTextCtrlBValue() { return m_textCtrlBValue; }
914  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
915  wxNotebook* GetNotebook() { return m_notebook; }
916  wxButton* GetButtonOK() { return m_buttonOK; }
917  wxButton* GetButtonCancel() { return m_buttonCancel; }
918  ExponentialFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Exponential"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
919  virtual ~ExponentialFormBase();
920 };
921 
922 
923 class ConstantFormBase : public wxDialog
924 {
925 protected:
926  wxNotebook* m_notebook;
927  wxPanel* m_panelGeneral;
928  wxStaticText* m_staticTextValue;
929  wxTextCtrl* m_textCtrlValue;
930  wxButton* m_buttonOK;
931  wxButton* m_buttonCancel;
932 
933 protected:
934  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
935  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
936 
937 public:
938  wxStaticText* GetStaticTextValue() { return m_staticTextValue; }
939  wxTextCtrl* GetTextCtrlValue() { return m_textCtrlValue; }
940  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
941  wxNotebook* GetNotebook() { return m_notebook; }
942  wxButton* GetButtonOK() { return m_buttonOK; }
943  wxButton* GetButtonCancel() { return m_buttonCancel; }
944  ConstantFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Constant"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
945  virtual ~ConstantFormBase();
946 };
947 
948 
949 class GainFormBase : public wxDialog
950 {
951 protected:
952  wxNotebook* m_notebook;
953  wxPanel* m_panelGeneral;
954  wxStaticText* m_staticTextValue;
955  wxTextCtrl* m_textCtrlValue;
956  wxButton* m_buttonOK;
957  wxButton* m_buttonCancel;
958 
959 protected:
960  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
961  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
962 
963 public:
964  wxStaticText* GetStaticTextValue() { return m_staticTextValue; }
965  wxTextCtrl* GetTextCtrlValue() { return m_textCtrlValue; }
966  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
967  wxNotebook* GetNotebook() { return m_notebook; }
968  wxButton* GetButtonOK() { return m_buttonOK; }
969  wxButton* GetButtonCancel() { return m_buttonCancel; }
970  GainFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Gain"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
971  virtual ~GainFormBase();
972 };
973 
974 
975 class IOControlFormBase : public wxDialog
976 {
977 protected:
978  wxNotebook* m_notebook;
979  wxPanel* m_panelGeneral;
980  wxCheckBox* m_checkBoxInput;
981  wxChoice* m_choiceInput;
982  wxCheckBox* m_checkBoxOutput;
983  wxChoice* m_choiceOutput;
984  wxButton* m_buttonOK;
985  wxButton* m_ButtonCancel;
986 
987 protected:
988  virtual void OnInputChecked(wxCommandEvent& event) { event.Skip(); }
989  virtual void OnOutputChecked(wxCommandEvent& event) { event.Skip(); }
990  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
991  virtual void OnCancelButtonClick(wxCommandEvent& event) { event.Skip(); }
992 
993 public:
994  wxCheckBox* GetCheckBoxInput() { return m_checkBoxInput; }
995  wxChoice* GetChoiceInput() { return m_choiceInput; }
996  wxCheckBox* GetCheckBoxOutput() { return m_checkBoxOutput; }
997  wxChoice* GetChoiceOutput() { return m_choiceOutput; }
998  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
999  wxNotebook* GetNotebook() { return m_notebook; }
1000  wxButton* GetButtonOK() { return m_buttonOK; }
1001  wxButton* GetButtonCancel() { return m_ButtonCancel; }
1002  IOControlFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Input / Output"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
1003  virtual ~IOControlFormBase();
1004 };
1005 
1006 #endif
+ + + + + + + + + + + + + + + + +
+
- + diff --git a/docs/doxygen/html/_element_form_bitmaps_8cpp_source.html b/docs/doxygen/html/_element_form_bitmaps_8cpp_source.html new file mode 100644 index 0000000..fa76242 --- /dev/null +++ b/docs/doxygen/html/_element_form_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/ElementFormBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ElementFormBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 137;
25 static unsigned char xml_res_file_0[] = {
26 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
27 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
28 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
29 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
30 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
31 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
32 45,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
33 
34 void wxC9EE9InitBitmapResources()
35 {
36 
37  // Check for memory FS. If not present, load the handler:
38  {
39  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
40  wxFileSystem fsys;
41  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
42  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
43  if (f) delete f;
44  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
45  }
46 
47  XRC_ADD_FILE(wxT("XRC_resource/ElementFormBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_ElementFormBitmaps.xrc"), xml_res_file_0, xml_res_size_0, wxT("text/xml"));
48  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/ElementFormBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_ElementFormBitmaps.xrc"));
49 }
+
+ + + + diff --git a/docs/doxygen/html/_element_plot_data_8cpp_source.html b/docs/doxygen/html/_element_plot_data_8cpp_source.html new file mode 100644 index 0000000..4504e14 --- /dev/null +++ b/docs/doxygen/html/_element_plot_data_8cpp_source.html @@ -0,0 +1,96 @@ + + + + + + + +Project/ElementPlotData.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ElementPlotData.cpp
+
+
+
1 #include "ElementPlotData.h"
2 
3 ElementPlotData::ElementPlotData(wxString name, CurveType curveType)
4 {
5  m_name = name;
6  m_curveType = curveType;
7 }
8 
9 ElementPlotData::~ElementPlotData() {}
10 void ElementPlotData::AddData(std::vector<double> values, wxString name)
11 {
12  PlotData* data = new PlotData();
13  data->SetName(name);
14  data->SetValues(values);
15  data->SetPlot(false);
16  data->SetAxis(0);
17  data->SetColour(*wxBLACK);
18  data->SetPenType(wxPENSTYLE_SOLID);
19  data->SetThick(2);
20 
21  m_elementData.push_back(data);
22 }
+
+
+ + + + diff --git a/docs/doxygen/html/_element_plot_data_8h_source.html b/docs/doxygen/html/_element_plot_data_8h_source.html index b1a0ece..5fd31cf 100644 --- a/docs/doxygen/html/_element_plot_data_8h_source.html +++ b/docs/doxygen/html/_element_plot_data_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ElementPlotData.h Source File +Project/ElementPlotData.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ElementPlotData.h
-
1 #ifndef ELEMENTPLOTDATA_H
2 #define ELEMENTPLOTDATA_H
3 
4 #include <wx/treectrl.h>
5 #include <wx/colour.h>
6 #include <wx/pen.h>
7 
8 #include <vector>
9 
10 class PlotData : public wxTreeItemData
11 {
12  public:
13  PlotData() {}
14  ~PlotData() {}
15  void SetAxis(int axis) { m_axis = axis; }
16  void SetColour(const wxColour& colour) { m_colour = colour; }
17  void SetName(const wxString& name) { m_name = name; }
18  void SetPenType(const wxPenStyle& penType) { m_penType = penType; }
19  void SetPlot(bool plot) { m_plot = plot; }
20  void SetThick(int thick) { m_thick = thick; }
21  void SetValues(const std::vector<double>& values) { m_values = values; }
22  int GetAxis() const { return m_axis; }
23  wxColour GetColour() const { return m_colour; }
24  wxString GetName() const { return m_name; }
25  wxPenStyle GetPenType() const { return m_penType; }
26  bool IsPlot() const { return m_plot; }
27  int GetThick() const { return m_thick; }
28  std::vector<double> GetValues() const { return m_values; }
29  protected:
30  std::vector<double> m_values;
31  wxString m_name;
32  bool m_plot;
33  wxColour m_colour;
34  int m_thick;
35  wxPenStyle m_penType;
36  int m_axis;
37 };
38 
40 {
41  public:
42  enum CurveType {
43  CT_BUS = 0,
44  CT_SYNC_GENERATOR,
45  CT_SYNC_COMPENSATOR,
46  CT_TRANSFORMER,
47  CT_LINE,
48  CT_IND_MOTOR,
49  CT_SHUNT_INDUCTOR,
50  CT_SHUNT_CAPACITOR,
51  CT_LOAD,
52  CT_TEST,
53  NUM_ELEMENTS,
54  CT_TIME
55  };
56  ElementPlotData() {};
57  ElementPlotData(wxString name, CurveType curveType);
58  ~ElementPlotData();
59 
60  wxString GetName() const { return m_name; }
61  void SetName(wxString name) { m_name = name; }
62  CurveType GetCurveType() const { return m_curveType; }
63  void SetCurveType(CurveType type) { m_curveType = type; }
64  PlotData* GetPlotData(int index) const { return m_elementData[index]; }
65  void AddData(std::vector<double> values, wxString name);
66 
67  int GetElementDataNumber() const { return static_cast<int>(m_elementData.size()); }
68  std::vector<double> GetValues(int index) const { return m_elementData[index]->GetValues(); }
69  void SetValues(int index, std::vector<double> values) { m_elementData[index]->SetValues(values); }
70  void SetPlot(int index, bool plot = true) { m_elementData[index]->SetPlot(plot); }
71  wxString GetDataName(int index) const { return m_elementData[index]->GetName(); }
72  void SetDataName(int index, wxString name) { m_elementData[index]->SetName(name); }
73  wxColour GetColour(int index) const { return m_elementData[index]->GetColour(); }
74  void SetColour(int index, wxColour colour) { m_elementData[index]->SetColour(colour); }
75  int GetThick(int index) const { return m_elementData[index]->GetThick(); }
76  void SetThick(int index, int thick) { m_elementData[index]->SetThick(thick); }
77  wxPenStyle GetPenType(int index) const { return m_elementData[index]->GetPenType(); }
78  void SetPenType(int index, wxPenStyle penType) { m_elementData[index]->SetPenType(penType); }
79  int GetAxis(int index) const { return m_elementData[index]->GetAxis(); }
80  void SetAxis(int index, int axis) { m_elementData[index]->SetAxis(axis); }
81  protected:
82  wxString m_name;
83  CurveType m_curveType;
84  std::vector<PlotData*> m_elementData;
85 };
86 
87 #endif // ELEMENTPLOTDATA_H
Definition: ElementPlotData.h:39
-
Definition: ElementPlotData.h:10
+
1 #ifndef ELEMENTPLOTDATA_H
2 #define ELEMENTPLOTDATA_H
3 
4 #include <wx/treectrl.h>
5 #include <wx/colour.h>
6 #include <wx/pen.h>
7 
8 #include <vector>
9 
10 class PlotData : public wxTreeItemData
11 {
12  public:
13  PlotData() {}
14  ~PlotData() {}
15  void SetAxis(int axis) { m_axis = axis; }
16  void SetColour(const wxColour& colour) { m_colour = colour; }
17  void SetName(const wxString& name) { m_name = name; }
18  void SetPenType(const wxPenStyle& penType) { m_penType = penType; }
19  void SetPlot(bool plot) { m_plot = plot; }
20  void SetThick(int thick) { m_thick = thick; }
21  void SetValues(const std::vector<double>& values) { m_values = values; }
22  int GetAxis() const { return m_axis; }
23  wxColour GetColour() const { return m_colour; }
24  wxString GetName() const { return m_name; }
25  wxPenStyle GetPenType() const { return m_penType; }
26  bool IsPlot() const { return m_plot; }
27  int GetThick() const { return m_thick; }
28  std::vector<double> GetValues() const { return m_values; }
29  protected:
30  std::vector<double> m_values;
31  wxString m_name;
32  bool m_plot;
33  wxColour m_colour;
34  int m_thick;
35  wxPenStyle m_penType;
36  int m_axis;
37 };
38 
40 {
41  public:
42  enum CurveType {
43  CT_BUS = 0,
44  CT_SYNC_GENERATOR,
45  CT_SYNC_COMPENSATOR,
46  CT_TRANSFORMER,
47  CT_LINE,
48  CT_IND_MOTOR,
49  CT_SHUNT_INDUCTOR,
50  CT_SHUNT_CAPACITOR,
51  CT_LOAD,
52  CT_TEST,
53  NUM_ELEMENTS,
54  CT_TIME
55  };
56  ElementPlotData() {};
57  ElementPlotData(wxString name, CurveType curveType);
58  ~ElementPlotData();
59 
60  wxString GetName() const { return m_name; }
61  void SetName(wxString name) { m_name = name; }
62  CurveType GetCurveType() const { return m_curveType; }
63  void SetCurveType(CurveType type) { m_curveType = type; }
64  PlotData* GetPlotData(int index) const { return m_elementData[index]; }
65  void AddData(std::vector<double> values, wxString name);
66 
67  int GetElementDataNumber() const { return static_cast<int>(m_elementData.size()); }
68  std::vector<double> GetValues(int index) const { return m_elementData[index]->GetValues(); }
69  void SetValues(int index, std::vector<double> values) { m_elementData[index]->SetValues(values); }
70  void SetPlot(int index, bool plot = true) { m_elementData[index]->SetPlot(plot); }
71  wxString GetDataName(int index) const { return m_elementData[index]->GetName(); }
72  void SetDataName(int index, wxString name) { m_elementData[index]->SetName(name); }
73  wxColour GetColour(int index) const { return m_elementData[index]->GetColour(); }
74  void SetColour(int index, wxColour colour) { m_elementData[index]->SetColour(colour); }
75  int GetThick(int index) const { return m_elementData[index]->GetThick(); }
76  void SetThick(int index, int thick) { m_elementData[index]->SetThick(thick); }
77  wxPenStyle GetPenType(int index) const { return m_elementData[index]->GetPenType(); }
78  void SetPenType(int index, wxPenStyle penType) { m_elementData[index]->SetPenType(penType); }
79  int GetAxis(int index) const { return m_elementData[index]->GetAxis(); }
80  void SetAxis(int index, int axis) { m_elementData[index]->SetAxis(axis); }
81  protected:
82  wxString m_name;
83  CurveType m_curveType;
84  std::vector<PlotData*> m_elementData;
85 };
86 
87 #endif // ELEMENTPLOTDATA_H
+
+
- + diff --git a/docs/doxygen/html/_exponential_8cpp_source.html b/docs/doxygen/html/_exponential_8cpp_source.html new file mode 100644 index 0000000..86690cb --- /dev/null +++ b/docs/doxygen/html/_exponential_8cpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +Project/Exponential.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Exponential.cpp
+
+
+
1 #include "Exponential.h"
2 #include "ExponentialForm.h"
3 
4 Exponential::Exponential(int id) : ControlElement(id)
5 {
6  m_width = m_height = 36.0;
7  Node* nodeIn = new Node(m_position + wxPoint2DDouble(-18, 0), Node::NODE_IN, m_borderSize);
8  nodeIn->StartMove(m_position);
9  Node* nodeOut = new Node(m_position + wxPoint2DDouble(18, 0), Node::NODE_OUT, m_borderSize);
10  nodeOut->SetAngle(180.0);
11  nodeOut->StartMove(m_position);
12  m_nodeList.push_back(nodeIn);
13  m_nodeList.push_back(nodeOut);
14 }
15 
16 Exponential::~Exponential() {}
17 void Exponential::Draw(wxPoint2DDouble translation, double scale) const
18 {
19  glLineWidth(1.0);
20  if(m_selected) {
21  glColor4dv(m_selectionColour.GetRGBA());
22  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
23  DrawRectangle(m_position, m_width + borderSize, m_height + borderSize);
24  }
25  glColor4d(1.0, 1.0, 1.0, 1.0);
26  DrawRectangle(m_position, m_width, m_height);
27  glColor4d(0.0, 0.0, 0.0, 1.0);
28  DrawRectangle(m_position, m_width, m_height, GL_LINE_LOOP);
29 
30  // Plot symbol.
31  std::vector<wxPoint2DDouble> axis;
32  axis.push_back(m_position + wxPoint2DDouble(-13, 13));
33  axis.push_back(m_position + wxPoint2DDouble(13, 13));
34  axis.push_back(m_position + wxPoint2DDouble(-13, -13));
35  axis.push_back(m_position + wxPoint2DDouble(-13, 13));
36  DrawLine(axis, GL_LINES);
37 
38  glLineWidth(2.0);
39  std::vector<wxPoint2DDouble> expSymbol;
40  expSymbol.push_back(m_position + wxPoint2DDouble(-13, 13));
41  expSymbol.push_back(m_position + wxPoint2DDouble(-6, 13));
42  expSymbol.push_back(m_position + wxPoint2DDouble(2, 12));
43  expSymbol.push_back(m_position + wxPoint2DDouble(4, 11));
44  expSymbol.push_back(m_position + wxPoint2DDouble(6, 10));
45  expSymbol.push_back(m_position + wxPoint2DDouble(8, 7));
46  expSymbol.push_back(m_position + wxPoint2DDouble(11, -1));
47  expSymbol.push_back(m_position + wxPoint2DDouble(12, -7));
48  expSymbol.push_back(m_position + wxPoint2DDouble(13, -13));
49  glColor4d(0.0, 0.3, 1.0, 1.0);
50  DrawLine(expSymbol);
51 
52  glColor4d(0.0, 0.0, 0.0, 1.0);
53  DrawNodes();
54 }
55 
56 bool Exponential::ShowForm(wxWindow* parent, Element* element)
57 {
58  ExponentialForm* form = new ExponentialForm(parent, this);
59  if(form->ShowModal() == wxID_OK) {
60  form->Destroy();
61  return true;
62  }
63  form->Destroy();
64  return false;
65 }
66 
67 void Exponential::Rotate(bool clockwise)
68 {
69  if(clockwise)
70  m_angle += 90.0;
71  else
72  m_angle -= 90.0;
73  if(m_angle >= 360.0)
74  m_angle = 0.0;
75  else if(m_angle < 0)
76  m_angle = 270.0;
77 
78  UpdatePoints();
79 
80  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
81  Node* node = *it;
82  node->Rotate(clockwise);
83  }
84 }
85 
86 void Exponential::UpdatePoints()
87 {
88  if(m_angle == 0.0) {
89  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-18, 0));
90  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(18, 0));
91  } else if(m_angle == 90.0) {
92  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, -18));
93  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, 18));
94  } else if(m_angle == 180.0) {
95  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(18, 0));
96  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-18, 0));
97  } else if(m_angle == 270.0) {
98  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, 18));
99  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -18));
100  }
101 }
102 
103 void Exponential::GetValues(double& aValue, double& bValue)
104 {
105  aValue = m_aValue;
106  bValue = m_bValue;
107 }
108 
109 void Exponential::SetValues(double aValue, double bValue)
110 {
111  m_aValue = aValue;
112  m_bValue = bValue;
113 }
114 
115 bool Exponential::Solve(double input, double timeStep)
116 {
117  m_output = m_aValue * std::exp(m_bValue * input);
118  return true;
119 }
120 
122 {
123  Exponential* copy = new Exponential(m_elementID);
124  *copy = *this;
125  return copy;
126 }
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Exponential.cpp:67
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Exponential.cpp:56
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Exponential.cpp:17
+
virtual Element * GetCopy()
Get a the element copy.
+ + + +
+
+ + + + diff --git a/docs/doxygen/html/_exponential_8h_source.html b/docs/doxygen/html/_exponential_8h_source.html index e934622..350a5f2 100644 --- a/docs/doxygen/html/_exponential_8h_source.html +++ b/docs/doxygen/html/_exponential_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Exponential.h Source File +Project/Exponential.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Exponential.h
-
1 #ifndef EXPONENTIAL_H
2 #define EXPONENTIAL_H
3 
4 #include "ControlElement.h"
5 
6 class ExponentialForm;
7 
8 class Exponential : public ControlElement
9 {
10 public:
11  Exponential(int id);
12  ~Exponential();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element);
18  virtual void Rotate(bool clockwise = true);
19 
20  virtual void UpdatePoints();
21 
22  virtual void GetValues(double& aValue, double &bValue);
23  virtual void SetValues(double aValue, double bValue);
24 
25  virtual bool Solve(double input, double timeStep);
26 
27  virtual Element* GetCopy();
28 
29 protected:
30  double m_aValue = 0.001;
31  double m_bValue = 5.0;
32 
33 };
34 
35 #endif // EXPONENTIAL_H
Definition: Element.h:88
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Exponential.h:15
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Exponential.cpp:67
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Exponential.cpp:56
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Exponential.cpp:17
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Exponential.cpp:121
-
Definition: Exponential.h:8
-
Definition: ExponentialForm.h:7
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Exponential.h:16
-
Definition: ControlElement.h:53
+
1 #ifndef EXPONENTIAL_H
2 #define EXPONENTIAL_H
3 
4 #include "ControlElement.h"
5 
6 class ExponentialForm;
7 
8 class Exponential : public ControlElement
9 {
10 public:
11  Exponential(int id);
12  ~Exponential();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element);
18  virtual void Rotate(bool clockwise = true);
19 
20  virtual void UpdatePoints();
21 
22  virtual void GetValues(double& aValue, double &bValue);
23  virtual void SetValues(double aValue, double bValue);
24 
25  virtual bool Solve(double input, double timeStep);
26 
27  virtual Element* GetCopy();
28 
29 protected:
30  double m_aValue = 0.001;
31  double m_bValue = 5.0;
32 
33 };
34 
35 #endif // EXPONENTIAL_H
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Exponential.h:15
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Exponential.cpp:67
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Exponential.cpp:56
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Exponential.cpp:17
+
virtual Element * GetCopy()
Get a the element copy.
+ + +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Exponential.h:16
+
+
- + diff --git a/docs/doxygen/html/_exponential_form_8cpp_source.html b/docs/doxygen/html/_exponential_form_8cpp_source.html new file mode 100644 index 0000000..6b497a0 --- /dev/null +++ b/docs/doxygen/html/_exponential_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/ExponentialForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ExponentialForm.cpp
+
+
+
1 #include "ExponentialForm.h"
2 #include "Exponential.h"
3 
4 ExponentialForm::ExponentialForm(wxWindow* parent, Exponential* exponential) : ExponentialFormBase(parent)
5 {
6  SetSize(GetBestSize());
7 
8  wxString expSymbol = wxString::FromUTF8("\xF0\x9D\x91\x92");
9  wxString superscriptCapitalB = wxString::FromUTF8("\xE1\xB4\xAE");
10  wxString superscriptSmallX = wxString::FromUTF8("\xCB\xA3");
11  m_staticTextExp->SetLabel("y = A" + expSymbol + superscriptCapitalB + superscriptSmallX);
12 
13  wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
14  font.SetPointSize(14);
15  m_staticTextExp->SetFont(font);
16 
17  m_parent = parent;
18  m_exponential = exponential;
19 
20  double a, b;
21  m_exponential->GetValues(a, b);
22  m_textCtrlAValue->SetValue(m_exponential->StringFromDouble(a));
23  m_textCtrlBValue->SetValue(m_exponential->StringFromDouble(b));
24 
25  SetInitialSize();
26  Layout();
27 }
28 
29 ExponentialForm::~ExponentialForm() {}
30 void ExponentialForm::OnOKButtonClick(wxCommandEvent& event)
31 {
32  if(ValidateData()) EndModal(wxID_OK);
33 }
34 
35 bool ExponentialForm::ValidateData()
36 {
37  double a, b;
38  if(!m_exponential->DoubleFromString(this, m_textCtrlAValue->GetValue(), a,
39  _("Value entered incorrectly in the field \"A value\".")))
40  return false;
41  if(!m_exponential->DoubleFromString(this, m_textCtrlBValue->GetValue(), b,
42  _("Value entered incorrectly in the field \"B value\".")))
43  return false;
44  m_exponential->SetValues(a, b);
45  return true;
46 }
+ +
+
+ + + + diff --git a/docs/doxygen/html/_exponential_form_8h_source.html b/docs/doxygen/html/_exponential_form_8h_source.html index 39550c7..0cda755 100644 --- a/docs/doxygen/html/_exponential_form_8h_source.html +++ b/docs/doxygen/html/_exponential_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ExponentialForm.h Source File +Project/ExponentialForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ExponentialForm.h
-
1 #ifndef EXPONENTIALFORM_H
2 #define EXPONENTIALFORM_H
3 #include "ElementForm.h"
4 
5 class Exponential;
6 
8 {
9  public:
10  ExponentialForm(wxWindow* parent, Exponential* exponential);
11  virtual ~ExponentialForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  Exponential* m_exponential = NULL;
20 };
21 #endif // EXPONENTIALFORM_H
Definition: ElementForm.h:891
-
Definition: Exponential.h:8
-
Definition: ExponentialForm.h:7
+
1 #ifndef EXPONENTIALFORM_H
2 #define EXPONENTIALFORM_H
3 #include "ElementForm.h"
4 
5 class Exponential;
6 
8 {
9  public:
10  ExponentialForm(wxWindow* parent, Exponential* exponential);
11  virtual ~ExponentialForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  Exponential* m_exponential = NULL;
20 };
21 #endif // EXPONENTIALFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_fault_8cpp_source.html b/docs/doxygen/html/_fault_8cpp_source.html new file mode 100644 index 0000000..58e07a3 --- /dev/null +++ b/docs/doxygen/html/_fault_8cpp_source.html @@ -0,0 +1,121 @@ + + + + + + + +Project/Fault.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Fault.cpp
+
+
+
1 #include "Fault.h"
2 #ifdef USING_WX_3_0_X
3 #include "DegreesAndRadians.h"
4 #endif
5 
7 Fault::Fault(std::vector<Element*> elementList) { GetElementsFromList(elementList); }
9 bool Fault::RunFaultCalculation(double systemPowerBase)
10 {
11  m_systemPowerBase = systemPowerBase;
12  int numberOfBuses = static_cast<int>(m_busList.size());
13  if(numberOfBuses == 0) {
14  m_errorMsg = _("There is no buses in the system.");
15  return false;
16  }
17 
18  // Get adimittance matrices.
19  std::vector<std::vector<std::complex<double> > > yBusPos;
20  GetYBus(yBusPos, systemPowerBase, POSITIVE_SEQ, true);
21  std::vector<std::vector<std::complex<double> > > yBusNeg;
22  GetYBus(yBusNeg, systemPowerBase, NEGATIVE_SEQ, true);
23  std::vector<std::vector<std::complex<double> > > yBusZero;
24  GetYBus(yBusZero, systemPowerBase, ZERO_SEQ, true);
25 
26  // Calculate the impedance matrices.
27  if(!InvertMatrix(yBusPos, m_zBusPos)) {
28  m_errorMsg = _("Fail to invert the positive sequence admittance matrix.");
29  return false;
30  }
31  if(!InvertMatrix(yBusNeg, m_zBusNeg)) {
32  m_errorMsg = _("Fail to invert the negative sequence admittance matrix.");
33  return false;
34  }
35  if(!InvertMatrix(yBusZero, m_zBusZero)) {
36  m_errorMsg = _("Fail to invert the zero sequence admittance matrix.");
37  return false;
38  }
39 
40  // Pre-fault voltages (power flow solution).
41  std::vector<std::complex<double> > preFaultVoltages;
42  preFaultVoltages.resize(m_busList.size());
43 
44  // Get fault parameters.
45  int fNumber = -1;
47  FaultData fLocation = FAULT_LINE_A;
48  std::complex<double> fImpedance = std::complex<double>(0.0, 0.0);
49  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
50  Bus* bus = *it;
51  BusElectricalData data = bus->GetElectricalData();
52  preFaultVoltages[data.number] = data.voltage;
53  if(data.hasFault) {
54  fNumber = data.number;
55  fType = data.faultType;
56  fLocation = data.faultLocation;
57  fImpedance = std::complex<double>(data.faultResistance, data.faultReactance);
58  }
59  }
60 
61  if(fNumber == -1) {
62  m_errorMsg = _("There is no fault in the system.");
63  return false;
64  }
65 
66  // Fault calculation.
67  std::complex<double> fCurrentPos = std::complex<double>(0.0, 0.0);
68  std::complex<double> fCurrentNeg = std::complex<double>(0.0, 0.0);
69  std::complex<double> fCurrentZero = std::complex<double>(0.0, 0.0);
70 
71  std::complex<double> preFaultVoltage = preFaultVoltages[fNumber];
72  std::complex<double> a = std::complex<double>(-0.5, 0.866025403784);
73  std::complex<double> a2 = std::complex<double>(-0.5, -0.866025403784);
74 
75  switch(fType) {
76  case FAULT_THREEPHASE: {
77  fCurrentPos = preFaultVoltage / (m_zBusPos[fNumber][fNumber] + fImpedance);
78  } break;
79  case FAULT_2LINE: {
80  fCurrentPos = preFaultVoltage / (m_zBusPos[fNumber][fNumber] + m_zBusNeg[fNumber][fNumber] + fImpedance);
81 
82  switch(fLocation) {
83  case FAULT_LINE_A: {
84  fCurrentNeg = -a2 * fCurrentPos;
85  } break;
86  case FAULT_LINE_B: {
87  fCurrentNeg = -fCurrentPos;
88  } break;
89  case FAULT_LINE_C: {
90  fCurrentNeg = -a * fCurrentPos;
91  } break;
92  default:
93  break;
94  }
95  } break;
96  case FAULT_2LINE_GROUND: {
97  std::complex<double> z1 = m_zBusPos[fNumber][fNumber];
98  std::complex<double> z2 = m_zBusNeg[fNumber][fNumber];
99  std::complex<double> z0 = m_zBusZero[fNumber][fNumber];
100  std::complex<double> zf_3 = std::complex<double>(3.0, 0.0) * fImpedance;
101 
102  fCurrentPos = (preFaultVoltage * (z2 + z0 + zf_3)) / (z1 * z2 + z2 * z0 + z2 * zf_3 + z1 * z0 + z1 * zf_3);
103 
104  switch(fLocation) {
105  case FAULT_LINE_A: {
106  fCurrentNeg = -a2 * ((preFaultVoltage - z1 * fCurrentPos) / z2);
107  fCurrentZero = -a * ((preFaultVoltage - z1 * fCurrentPos) / (z0 + zf_3));
108  } break;
109  case FAULT_LINE_B: {
110  fCurrentNeg = -((preFaultVoltage - z1 * fCurrentPos) / z2);
111  fCurrentZero = -((preFaultVoltage - z1 * fCurrentPos) / (z0 + zf_3));
112  } break;
113  case FAULT_LINE_C: {
114  fCurrentNeg = -a * ((preFaultVoltage - z1 * fCurrentPos) / z2);
115  fCurrentZero = -a2 * ((preFaultVoltage - z1 * fCurrentPos) / (z0 + zf_3));
116  } break;
117  default:
118  break;
119  }
120  } break;
121  case FAULT_LINE_GROUND: {
122  fCurrentPos =
123  preFaultVoltage / (m_zBusPos[fNumber][fNumber] + m_zBusNeg[fNumber][fNumber] +
124  m_zBusZero[fNumber][fNumber] + std::complex<double>(3.0, 0.0) * fImpedance);
125  switch(fLocation) {
126  case FAULT_LINE_A: {
127  fCurrentNeg = fCurrentPos;
128  fCurrentZero = fCurrentPos;
129  } break;
130  case FAULT_LINE_B: {
131  fCurrentNeg = a * fCurrentPos;
132  fCurrentZero = a2 * fCurrentPos;
133  } break;
134  case FAULT_LINE_C: {
135  fCurrentNeg = a2 * fCurrentPos;
136  fCurrentZero = a * fCurrentPos;
137  } break;
138  default:
139  break;
140  }
141  } break;
142  default:
143  break;
144  }
145 
146  // Convert sequence currents to ABC. [Iabc] = [A]*[I012]
147  m_fCurrentA = fCurrentZero + fCurrentPos + fCurrentNeg;
148  m_fCurrentB = fCurrentZero + a2 * fCurrentPos + a * fCurrentNeg;
149  m_fCurrentC = fCurrentZero + a * fCurrentPos + a2 * fCurrentNeg;
150 
151  // Pos-fault voltages calculation
152  m_posFaultVoltagePos.clear();
153  m_posFaultVoltageNeg.clear();
154  m_posFaultVoltageZero.clear();
155  m_posFaultVoltageA.clear();
156  m_posFaultVoltageB.clear();
157  m_posFaultVoltageC.clear();
158 
159  for(int i = 0; i < numberOfBuses; ++i) {
160  m_posFaultVoltagePos.push_back(preFaultVoltages[i] - m_zBusPos[i][fNumber] * fCurrentPos);
161  m_posFaultVoltageNeg.push_back(-m_zBusNeg[i][fNumber] * fCurrentNeg);
162  m_posFaultVoltageZero.push_back(-m_zBusZero[i][fNumber] * fCurrentZero);
163 
164  // V012 -> Vabc
165  m_posFaultVoltageA.push_back(m_posFaultVoltageZero[i] + m_posFaultVoltagePos[i] + m_posFaultVoltageNeg[i]);
166  m_posFaultVoltageB.push_back(m_posFaultVoltageZero[i] + a2 * m_posFaultVoltagePos[i] +
167  a * m_posFaultVoltageNeg[i]);
168  m_posFaultVoltageC.push_back(m_posFaultVoltageZero[i] + a * m_posFaultVoltagePos[i] +
169  a2 * m_posFaultVoltageNeg[i]);
170  }
171 
172  UpdateElementsFault(systemPowerBase);
173  return true;
174 }
175 
176 void Fault::UpdateElementsFault(double systemPowerBase)
177 {
178  std::complex<double> a = std::complex<double>(-0.5, 0.866025403784);
179  std::complex<double> a2 = std::complex<double>(-0.5, -0.866025403784);
180 
181  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
182  Bus* bus = *it;
183  auto data = bus->GetElectricalData();
184  if(data.hasFault) {
185  data.faultCurrent[0] = m_fCurrentA;
186  data.faultCurrent[1] = m_fCurrentB;
187  data.faultCurrent[2] = m_fCurrentC;
188  } else {
189  data.faultCurrent[0] = data.faultCurrent[1] = data.faultCurrent[2] = std::complex<double>(0.0, 0.0);
190  }
191  data.faultVoltage[0] = m_posFaultVoltageA[data.number];
192  data.faultVoltage[1] = m_posFaultVoltageB[data.number];
193  data.faultVoltage[2] = m_posFaultVoltageC[data.number];
194  bus->SetElectricalData(data);
195  }
196 
197  for(auto it = m_lineList.begin(), itEnd = m_lineList.end(); it != itEnd; ++it) {
198  Line* line = *it;
199  if(line->IsOnline()) {
200  int n1 = static_cast<Bus*>(line->GetParentList()[0])->GetElectricalData().number;
201  int n2 = static_cast<Bus*>(line->GetParentList()[1])->GetElectricalData().number;
202  auto data = line->GetElectricalData();
203  auto puData = line->GetPUElectricalData(m_systemPowerBase);
204  std::complex<double> vPos[2] = {m_posFaultVoltagePos[n1], m_posFaultVoltagePos[n2]};
205  std::complex<double> vNeg[2] = {m_posFaultVoltageNeg[n1], m_posFaultVoltageNeg[n2]};
206  std::complex<double> vZero[2] = {m_posFaultVoltageZero[n1], m_posFaultVoltageZero[n2]};
207  std::complex<double> zPos(puData.resistance, puData.indReactance);
208  std::complex<double> bPos(0.0, puData.capSusceptance / 2.0);
209  std::complex<double> zZero(puData.zeroResistance, puData.zeroIndReactance);
210  std::complex<double> bZero(0.0, puData.zeroCapSusceptance / 2.0);
211 
212  std::complex<double> lineCurrentPos[2];
213  std::complex<double> lineCurrentNeg[2];
214  std::complex<double> lineCurrentZero[2];
215 
216  lineCurrentPos[0] = ((vPos[0] - vPos[1]) / zPos) + (vPos[0] * bPos);
217  lineCurrentNeg[0] = ((vNeg[0] - vNeg[1]) / zPos) + (vNeg[0] * bPos);
218  lineCurrentZero[0] = ((vZero[0] - vZero[1]) / zZero) + (vZero[0] * bZero);
219  lineCurrentPos[1] = ((vPos[1] - vPos[0]) / zPos) + (vPos[1] * bPos);
220  lineCurrentNeg[1] = ((vNeg[1] - vNeg[0]) / zPos) + (vNeg[1] * bPos);
221  lineCurrentZero[1] = ((vZero[1] - vZero[0]) / zZero) + (vZero[1] * bZero);
222 
223  data.faultCurrent[0][0] = lineCurrentZero[0] + lineCurrentPos[0] + lineCurrentNeg[0];
224  data.faultCurrent[0][1] = lineCurrentZero[0] + a2 * lineCurrentPos[0] + a * lineCurrentNeg[0];
225  data.faultCurrent[0][2] = lineCurrentZero[0] + a * lineCurrentPos[0] + a2 * lineCurrentNeg[0];
226  data.faultCurrent[1][0] = lineCurrentZero[1] + lineCurrentPos[1] + lineCurrentNeg[1];
227  data.faultCurrent[1][1] = lineCurrentZero[1] + a2 * lineCurrentPos[1] + a * lineCurrentNeg[1];
228  data.faultCurrent[1][2] = lineCurrentZero[1] + a * lineCurrentPos[1] + a2 * lineCurrentNeg[1];
229 
230  line->SetElectricalData(data);
231  }
232  }
233 
234  for(auto it = m_transformerList.begin(), itEnd = m_transformerList.end(); it != itEnd; ++it) {
235  Transformer* transformer = *it;
236  if(transformer->IsOnline()) {
237  int n1 = static_cast<Bus*>(transformer->GetParentList()[0])->GetElectricalData().number;
238  int n2 = static_cast<Bus*>(transformer->GetParentList()[1])->GetElectricalData().number;
239  auto data = transformer->GetElectricalData();
240  auto puData = transformer->GetPUElectricalData(m_systemPowerBase);
241 
242  std::complex<double> vPos[2] = {m_posFaultVoltagePos[n1], m_posFaultVoltagePos[n2]};
243  std::complex<double> vNeg[2] = {m_posFaultVoltageNeg[n1], m_posFaultVoltageNeg[n2]};
244  std::complex<double> vZero[2] = {m_posFaultVoltageZero[n1], m_posFaultVoltageZero[n2]};
245  std::complex<double> zPos(puData.resistance, puData.indReactance);
246  std::complex<double> zZero(puData.zeroResistance, puData.zeroIndReactance);
247 
248  std::complex<double> transformerCurrentPos[2];
249  std::complex<double> transformerCurrentNeg[2];
250  std::complex<double> transformerCurrentZero[2];
251 
252  if(data.turnsRatio == 1.0 && data.phaseShift == 0.0) {
253  transformerCurrentPos[0] = (vPos[0] - vPos[1]) / zPos;
254  transformerCurrentNeg[0] = (vNeg[0] - vNeg[1]) / zPos;
255  transformerCurrentZero[0] = (vZero[0] - vZero[1]) / zZero;
256  transformerCurrentPos[1] = (vPos[1] - vPos[0]) / zPos;
257  transformerCurrentNeg[1] = (vNeg[1] - vNeg[0]) / zPos;
258  transformerCurrentZero[1] = (vZero[1] - vZero[0]) / zZero;
259  } else {
260  double radPhaseShift = wxDegToRad(data.phaseShift);
261  std::complex<double> t = std::complex<double>(data.turnsRatio * std::cos(radPhaseShift),
262  -data.turnsRatio * std::sin(radPhaseShift));
263 
264  transformerCurrentPos[0] =
265  vPos[0] * (1.0 / (std::pow(std::abs(t), 2.0) * zPos)) - vPos[1] * (1.0 / (std::conj(t) * zPos));
266  transformerCurrentNeg[0] =
267  vNeg[0] * (1.0 / (std::pow(std::abs(t), 2.0) * zPos)) - vNeg[1] * (1.0 / (t * zPos));
268 
269  transformerCurrentPos[1] = -vPos[0] * (1.0 / (t * zPos)) + vPos[1] / zPos;
270  transformerCurrentNeg[1] = -vNeg[0] * (1.0 / (std::conj(t) * zPos)) + vNeg[1] / zPos;
271  }
272 
273  switch(data.connection) {
274  case GWYE_GWYE: {
275  transformerCurrentZero[0] = (vZero[0] - vZero[1]) / zZero;
276  transformerCurrentZero[1] = (vZero[1] - vZero[0]) / zZero;
277  break;
278  }
279  case GWYE_DELTA: {
280  transformerCurrentZero[0] = vZero[0] / zZero;
281  transformerCurrentZero[1] = std::complex<double>(0.0, 0.0);
282  break;
283  }
284  case DELTA_GWYE: {
285  transformerCurrentZero[0] = std::complex<double>(0.0, 0.0);
286  transformerCurrentZero[1] = vZero[1] / zZero;
287  break;
288  }
289  default: {
290  transformerCurrentZero[0] = std::complex<double>(0.0, 0.0);
291  transformerCurrentZero[1] = std::complex<double>(0.0, 0.0);
292  break;
293  }
294  }
295 
296  data.faultCurrent[0][0] = transformerCurrentZero[0] + transformerCurrentPos[0] + transformerCurrentNeg[0];
297  data.faultCurrent[0][1] =
298  transformerCurrentZero[0] + a2 * transformerCurrentPos[0] + a * transformerCurrentNeg[0];
299  data.faultCurrent[0][2] =
300  transformerCurrentZero[0] + a * transformerCurrentPos[0] + a2 * transformerCurrentNeg[0];
301  data.faultCurrent[1][0] = transformerCurrentZero[1] + transformerCurrentPos[1] + transformerCurrentNeg[1];
302  data.faultCurrent[1][1] =
303  transformerCurrentZero[1] + a2 * transformerCurrentPos[1] + a * transformerCurrentNeg[1];
304  data.faultCurrent[1][2] =
305  transformerCurrentZero[1] + a * transformerCurrentPos[1] + a2 * transformerCurrentNeg[1];
306 
307  transformer->SetElectricaData(data);
308  }
309  }
310 
311  for(auto it = m_syncGeneratorList.begin(), itEnd = m_syncGeneratorList.end(); it != itEnd; ++it) {
312  SyncGenerator* syncGenerator = *it;
313  if(syncGenerator->IsOnline()) {
314  Bus* bus = static_cast<Bus*>(syncGenerator->GetParentList()[0]);
315  int n = bus->GetElectricalData().number;
316  std::complex<double> v = bus->GetElectricalData().voltage; // Pre-fault voltage.
317  auto data = syncGenerator->GetElectricalData();
318  auto puData = syncGenerator->GetPUElectricalData(m_systemPowerBase);
319 
320  std::complex<double> vPos = m_posFaultVoltagePos[n];
321  std::complex<double> vNeg = m_posFaultVoltageNeg[n];
322  std::complex<double> vZero = m_posFaultVoltageZero[n];
323 
324  std::complex<double> zPos(puData.positiveResistance, puData.positiveReactance);
325  std::complex<double> zNeg(puData.negativeResistance, puData.negativeReactance);
326  std::complex<double> zZero(puData.zeroResistance + 3.0 * puData.groundResistance,
327  puData.zeroReactance + 3.0 * puData.groundReactance);
328 
329  // Internal voltage
330  std::complex<double> i = std::complex<double>(puData.activePower, -puData.reactivePower) / std::conj(v);
331  std::complex<double> e = v + zPos * i;
332 
333  std::complex<double> syncGeneratorCurrentPos = (e - vPos) / zPos;
334  std::complex<double> syncGeneratorCurrentNeg = (-vNeg) / zNeg;
335  std::complex<double> syncGeneratorCurrentZero(0.0, 0.0);
336  if(data.groundNeutral) syncGeneratorCurrentZero = (-vZero) / zZero;
337 
338  data.faultCurrent[0] = syncGeneratorCurrentZero + syncGeneratorCurrentPos + syncGeneratorCurrentNeg;
339  data.faultCurrent[1] =
340  syncGeneratorCurrentZero + a2 * syncGeneratorCurrentPos + a * syncGeneratorCurrentNeg;
341  data.faultCurrent[2] =
342  syncGeneratorCurrentZero + a * syncGeneratorCurrentPos + a2 * syncGeneratorCurrentNeg;
343 
344  syncGenerator->SetElectricalData(data);
345  }
346  }
347 
348  for(auto it = m_syncMotorList.begin(), itEnd = m_syncMotorList.end(); it != itEnd; ++it) {
349  SyncMotor* syncMotor = *it;
350  if(syncMotor->IsOnline()) {
351  Bus* bus = static_cast<Bus*>(syncMotor->GetParentList()[0]);
352  int n = bus->GetElectricalData().number;
353  std::complex<double> v = bus->GetElectricalData().voltage; // Pre-fault voltage.
354  auto data = syncMotor->GetElectricalData();
355  auto puData = syncMotor->GetPUElectricalData(m_systemPowerBase);
356 
357  std::complex<double> vPos = m_posFaultVoltagePos[n];
358  std::complex<double> vNeg = m_posFaultVoltageNeg[n];
359  std::complex<double> vZero = m_posFaultVoltageZero[n];
360 
361  std::complex<double> zPos(puData.positiveResistance, puData.positiveReactance);
362  std::complex<double> zNeg(puData.negativeResistance, puData.negativeReactance);
363  std::complex<double> zZero(puData.zeroResistance + 3.0 * puData.groundResistance,
364  puData.zeroReactance + 3.0 * puData.groundReactance);
365 
366  std::complex<double> syncGeneratorCurrentPos = (v - vPos) / zPos;
367  std::complex<double> syncGeneratorCurrentNeg = (-vNeg) / zNeg;
368  std::complex<double> syncGeneratorCurrentZero(0.0, 0.0);
369  if(data.groundNeutral) syncGeneratorCurrentZero = (-vZero) / zZero;
370 
371  data.faultCurrent[0] = syncGeneratorCurrentZero + syncGeneratorCurrentPos + syncGeneratorCurrentNeg;
372  data.faultCurrent[1] =
373  syncGeneratorCurrentZero + a2 * syncGeneratorCurrentPos + a * syncGeneratorCurrentNeg;
374  data.faultCurrent[2] =
375  syncGeneratorCurrentZero + a * syncGeneratorCurrentPos + a2 * syncGeneratorCurrentNeg;
376 
377  syncMotor->SetElectricalData(data);
378  }
379  }
380 }
381 
382 bool Fault::RunSCPowerCalcutation(double systemPowerBase)
383 {
384  // Get adimittance matrix.
385  std::vector<std::vector<std::complex<double> > > yBusPos;
386  GetYBus(yBusPos, systemPowerBase, POSITIVE_SEQ, true);
387 
388  // Calculate the impedance matrix.
389  if(!InvertMatrix(yBusPos, m_zBusPos)) {
390  m_errorMsg = _("Fail to invert the positive sequence admittance matrix.");
391  return false;
392  }
393 
394  // Set the SC power.
395  for(auto it = m_busList.begin(), itEnd = m_busList.end(); it != itEnd; ++it) {
396  Bus* bus = *it;
397  auto data = bus->GetElectricalData();
398  int n = data.number;
399  data.scPower = 1.0 / std::abs(m_zBusPos[n][n]);
400  bus->SetElectricalData(data);
401  }
402 
403  return true;
404 }
+ +
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
FaultData
Information about fault (type and location).
Definition: PowerElement.h:38
+ + +
Definition: Bus.h:45
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+
virtual bool RunFaultCalculation(double systemPowerBase)
Calculate the fault of the system. Return true if was possible the calculation.
Definition: Fault.cpp:9
+ +
Fault()
Default contructor. Use GetElementsFromList(std::vector<Element*> elementList).
Definition: Fault.cpp:6
+ + +
Calculate the fault of the system and update the elements data.
+
virtual bool InvertMatrix(std::vector< std::vector< std::complex< double > > > matrix, std::vector< std::vector< std::complex< double > > > &inverse)
Invert a matrix.
+
Definition: Line.h:35
+
virtual bool GetYBus(std::vector< std::vector< std::complex< double > > > &yBus, double systemPowerBase, YBusSequence sequence=POSITIVE_SEQ, bool includeSyncMachines=false, bool allLoadsAsImpedances=false)
Get the admittance matrix from the list of elements (use GetElementsFromList first).
+ + +
virtual bool RunSCPowerCalcutation(double systemPowerBase)
Calculate the short-circuit power of the system. Return true if was possible the calculation.
Definition: Fault.cpp:382
+
~Fault()
Destructor.
Definition: Fault.cpp:8
+ +
virtual void GetElementsFromList(std::vector< Element *> elementList)
Separate the power elements from a generic list.
+ +
virtual void UpdateElementsFault(double systemPowerBase)
Update the data of the elements.
Definition: Fault.cpp:176
+ +
+
+ + + + diff --git a/docs/doxygen/html/_fault_8h.html b/docs/doxygen/html/_fault_8h.html index 4ba4364..be38470 100644 --- a/docs/doxygen/html/_fault_8h.html +++ b/docs/doxygen/html/_fault_8h.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Fault.h File Reference +Project/Fault.h File Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
@@ -85,12 +96,18 @@ Classes

Detailed Description

Calculate the fault of the system and update the elements data.

+ +

Definition in file Fault.h.

+ - + diff --git a/docs/doxygen/html/_fault_8h_source.html b/docs/doxygen/html/_fault_8h_source.html index 5a8c2b3..9180c35 100644 --- a/docs/doxygen/html/_fault_8h_source.html +++ b/docs/doxygen/html/_fault_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Fault.h Source File +Project/Fault.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Fault.h
Go to the documentation of this file.
1 #ifndef FAULT_H
2 #define FAULT_H
3 
4 #include "ElectricCalculation.h"
13 class Fault : public ElectricCalculation
14 {
15 public:
20  Fault(std::vector<Element*> elementList);
21 
25  Fault();
26 
30  ~Fault();
31 
36  virtual bool RunFaultCalculation(double systemPowerBase);
37 
42  virtual bool RunSCPowerCalcutation(double systemPowerBase);
43 
48  virtual void UpdateElementsFault(double systemPowerBase);
49 
54  virtual wxString GetErrorMessage() { return m_errorMsg; }
55 
56 protected:
57  wxString m_errorMsg = "";
58 
59  double m_systemPowerBase;
60 
61  std::vector<std::vector<std::complex<double> > > m_zBusPos;
62  std::vector<std::vector<std::complex<double> > > m_zBusNeg;
63  std::vector<std::vector<std::complex<double> > > m_zBusZero;
64 
65  std::vector<std::complex<double> > m_posFaultVoltagePos;
66  std::vector<std::complex<double> > m_posFaultVoltageNeg;
67  std::vector<std::complex<double> > m_posFaultVoltageZero;
68 
69  std::complex<double> m_fCurrentA;
70  std::complex<double> m_fCurrentB;
71  std::complex<double> m_fCurrentC;
72 
73  std::vector<std::complex<double> > m_posFaultVoltageA;
74  std::vector<std::complex<double> > m_posFaultVoltageB;
75  std::vector<std::complex<double> > m_posFaultVoltageC;
76 };
77 
78 #endif // FAULT_H
Base class of electric calculations, with general methods.
-
virtual wxString GetErrorMessage()
Get the error message generated in RunFaultCalculation(double systemPowerBase).
Definition: Fault.h:54
-
virtual bool RunFaultCalculation(double systemPowerBase)
Calculate the fault of the system. Return true if was possible the calculation.
Definition: Fault.cpp:9
-
Fault()
Default contructor. Use GetElementsFromList(std::vector<Element*> elementList).
Definition: Fault.cpp:6
-
Definition: Fault.h:13
-
virtual bool RunSCPowerCalcutation(double systemPowerBase)
Calculate the short-circuit power of the system. Return true if was possible the calculation.
Definition: Fault.cpp:382
-
~Fault()
Destructor.
Definition: Fault.cpp:8
-
Definition: ElectricCalculation.h:49
-
virtual void UpdateElementsFault(double systemPowerBase)
Update the data of the elements.
Definition: Fault.cpp:176
+
virtual wxString GetErrorMessage()
Get the error message generated in RunFaultCalculation(double systemPowerBase).
Definition: Fault.h:54
+
virtual bool RunFaultCalculation(double systemPowerBase)
Calculate the fault of the system. Return true if was possible the calculation.
Definition: Fault.cpp:9
+
Fault()
Default contructor. Use GetElementsFromList(std::vector<Element*> elementList).
Definition: Fault.cpp:6
+
Definition: Fault.h:13
+
virtual bool RunSCPowerCalcutation(double systemPowerBase)
Calculate the short-circuit power of the system. Return true if was possible the calculation.
Definition: Fault.cpp:382
+
~Fault()
Destructor.
Definition: Fault.cpp:8
+ +
virtual void UpdateElementsFault(double systemPowerBase)
Update the data of the elements.
Definition: Fault.cpp:176
+ - + diff --git a/docs/doxygen/html/_file_handing_8cpp_source.html b/docs/doxygen/html/_file_handing_8cpp_source.html new file mode 100644 index 0000000..fc4c6fe --- /dev/null +++ b/docs/doxygen/html/_file_handing_8cpp_source.html @@ -0,0 +1,190 @@ + + + + + + + +Project/FileHanding.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
FileHanding.cpp
+
+
+
1 #include "FileHanding.h"
2 
3 FileHanding::~FileHanding() {}
4 FileHanding::FileHanding(Workspace* workspace) { m_workspace = workspace; }
5 FileHanding::FileHanding(ControlEditor* controlEditor) { m_controlEditor = controlEditor; }
6 FileHanding::FileHanding() {}
7 void FileHanding::SaveProject(wxFileName path)
8 {
9  // Erase the file (if exists or not) and write the initial data
10  std::ofstream writeProjectsFile(path.GetFullPath());
11  writeProjectsFile.close();
12 
13  rapidxml::xml_document<> doc;
14  rapidxml::file<> xmlFile(path.GetFullPath().mb_str());
15  doc.parse<0>(xmlFile.data());
16 
17  rapidxml::xml_node<>* decl = doc.allocate_node(rapidxml::node_declaration);
18  rapidxml::xml_attribute<>* ver = doc.allocate_attribute("version", "1.0");
19  rapidxml::xml_attribute<>* encoding = doc.allocate_attribute("encoding", "utf-8");
20  decl->append_attribute(ver);
21  decl->append_attribute(encoding);
22  doc.append_node(decl);
23 
24  rapidxml::xml_node<>* rootNode = doc.allocate_node(rapidxml::node_element, "Project");
25  doc.append_node(rootNode);
26 
27  rapidxml::xml_node<>* projectNameNode = AppendNode(doc, rootNode, "Name");
28  SetNodeValue(doc, projectNameNode, path.GetName());
29 
30  auto elementsNode = AppendNode(doc, rootNode, "Elements");
31 
32  // Save all the data
33  ElectricCalculation allElements;
34  allElements.GetElementsFromList(m_workspace->GetElementList());
35 
36  //{ Buses
37  auto busesNode = AppendNode(doc, elementsNode, "BusList");
38  auto busList = allElements.GetBusList();
39  for(int i = 0; i < (int)busList.size(); i++) {
40  Bus* bus = busList[i];
41  auto busNode = AppendNode(doc, busesNode, "Bus");
42  SetNodeAttribute(doc, busNode, "ID", i);
43  auto cadProp = AppendNode(doc, busNode, "CADProperties");
44  auto position = AppendNode(doc, cadProp, "Position");
45  auto posX = AppendNode(doc, position, "X");
46  SetNodeValue(doc, posX, bus->GetPosition().m_x);
47  auto posY = AppendNode(doc, position, "Y");
48  SetNodeValue(doc, posY, bus->GetPosition().m_y);
49  auto size = AppendNode(doc, cadProp, "Size");
50  auto width = AppendNode(doc, size, "Width");
51  SetNodeValue(doc, width, bus->GetWidth());
52  auto height = AppendNode(doc, size, "Height");
53  SetNodeValue(doc, height, bus->GetHeight());
54  auto angle = AppendNode(doc, cadProp, "Angle");
55  SetNodeValue(doc, angle, bus->GetAngle());
56 
57  BusElectricalData data = bus->GetElectricalData();
58  auto electricalProp = AppendNode(doc, busNode, "ElectricalProperties");
59  auto name = AppendNode(doc, electricalProp, "Name");
60  SetNodeValue(doc, name, data.name);
61  auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage");
62  SetNodeValue(doc, nominalVoltage, data.nominalVoltage);
63  SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit);
64  auto isVoltageControlled = AppendNode(doc, electricalProp, "IsVoltageControlled");
65  SetNodeValue(doc, isVoltageControlled, data.isVoltageControlled);
66  auto controlledVoltage = AppendNode(doc, electricalProp, "ControlledVoltage");
67  SetNodeValue(doc, controlledVoltage, data.controlledVoltage);
68  SetNodeAttribute(doc, controlledVoltage, "Choice", data.controlledVoltageUnitChoice);
69  auto slackBus = AppendNode(doc, electricalProp, "SlackBus");
70  SetNodeValue(doc, slackBus, data.slackBus);
71 
72  auto fault = AppendNode(doc, electricalProp, "Fault");
73  auto hasFault = AppendNode(doc, fault, "HasFault");
74  SetNodeValue(doc, hasFault, data.hasFault);
75  auto faultType = AppendNode(doc, fault, "Type");
76  SetNodeValue(doc, faultType, data.faultType);
77  auto faultLocation = AppendNode(doc, fault, "Location");
78  SetNodeValue(doc, faultLocation, data.faultLocation);
79  auto faultResistance = AppendNode(doc, fault, "Resistance");
80  SetNodeValue(doc, faultResistance, data.faultResistance);
81  auto faultReactance = AppendNode(doc, fault, "Reactance");
82  SetNodeValue(doc, faultReactance, data.faultReactance);
83 
84  auto stability = AppendNode(doc, electricalProp, "Stability");
85  auto plotBus = AppendNode(doc, stability, "Plot");
86  SetNodeValue(doc, plotBus, data.plotBus);
87  auto stabHasFault = AppendNode(doc, stability, "HasFault");
88  SetNodeValue(doc, stabHasFault, data.stabHasFault);
89  auto stabFaultTime = AppendNode(doc, stability, "FaultTime");
90  SetNodeValue(doc, stabFaultTime, data.stabFaultTime);
91  auto stabFaultLength = AppendNode(doc, stability, "FaultLength");
92  SetNodeValue(doc, stabFaultLength, data.stabFaultLength);
93  auto stabFaultResistance = AppendNode(doc, stability, "FaultResistance");
94  SetNodeValue(doc, stabFaultResistance, data.stabFaultResistance);
95  auto stabFaultReactance = AppendNode(doc, stability, "FaultReactance");
96  SetNodeValue(doc, stabFaultReactance, data.stabFaultReactance);
97 
98  data.number = i;
99  bus->SetElectricalData(data);
100  } //}
101 
102  //{ Capacitor
103  auto capacitorsNode = AppendNode(doc, elementsNode, "CapacitorList");
104  auto capacitorList = allElements.GetCapacitorList();
105  for(int i = 0; i < (int)capacitorList.size(); i++) {
106  Capacitor* capacitor = capacitorList[i];
107  auto capacitorNode = AppendNode(doc, capacitorsNode, "Capacitor");
108  SetNodeAttribute(doc, capacitorNode, "ID", i);
109  auto cadProp = AppendNode(doc, capacitorNode, "CADProperties");
110  auto position = AppendNode(doc, cadProp, "Position");
111  auto posX = AppendNode(doc, position, "X");
112  SetNodeValue(doc, posX, capacitor->GetPosition().m_x);
113  auto posY = AppendNode(doc, position, "Y");
114  SetNodeValue(doc, posY, capacitor->GetPosition().m_y);
115  auto size = AppendNode(doc, cadProp, "Size");
116  auto width = AppendNode(doc, size, "Width");
117  SetNodeValue(doc, width, capacitor->GetWidth());
118  auto height = AppendNode(doc, size, "Height");
119  SetNodeValue(doc, height, capacitor->GetHeight());
120  auto angle = AppendNode(doc, cadProp, "Angle");
121  SetNodeValue(doc, angle, capacitor->GetAngle());
122  auto nodePos = AppendNode(doc, cadProp, "NodePosition");
123  auto nodePosX = AppendNode(doc, nodePos, "X");
124  SetNodeValue(doc, nodePosX, capacitor->GetPointList()[0].m_x);
125  auto nodePosY = AppendNode(doc, nodePos, "Y");
126  SetNodeValue(doc, nodePosY, capacitor->GetPointList()[0].m_y);
127  auto parentID = AppendNode(doc, cadProp, "ParentID");
128  Bus* parent = static_cast<Bus*>(capacitor->GetParentList()[0]);
129  if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number);
130 
131  CapacitorElectricalData data = capacitor->GetElectricalData();
132  auto electricalProp = AppendNode(doc, capacitorNode, "ElectricalProperties");
133  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
134  SetNodeValue(doc, isOnline, capacitor->IsOnline());
135  auto name = AppendNode(doc, electricalProp, "Name");
136  SetNodeValue(doc, name, data.name);
137  auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower");
138  SetNodeValue(doc, reactivePower, data.reactivePower);
139  SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
140 
141  auto switchingList = AppendNode(doc, electricalProp, "SwitchingList");
142  SwitchingData swData = capacitor->GetSwitchingData();
143  for(int j = 0; j < (int)swData.swType.size(); j++) {
144  auto switching = AppendNode(doc, switchingList, "Switching");
145  SetNodeAttribute(doc, switching, "ID", j);
146  auto swType = AppendNode(doc, switching, "Type");
147  SetNodeValue(doc, swType, swData.swType[j]);
148  auto swTime = AppendNode(doc, switching, "Time");
149  SetNodeValue(doc, swTime, swData.swTime[j]);
150  }
151  } //}
152 
153  //{ IndMotor
154  auto indMotorsNode = AppendNode(doc, elementsNode, "IndMotorList");
155  auto indMotorList = allElements.GetIndMotorList();
156  for(int i = 0; i < (int)indMotorList.size(); i++) {
157  IndMotor* indMotor = indMotorList[i];
158  auto indMotorNode = AppendNode(doc, indMotorsNode, "IndMotor");
159  SetNodeAttribute(doc, indMotorNode, "ID", i);
160  auto cadProp = AppendNode(doc, indMotorNode, "CADProperties");
161  auto position = AppendNode(doc, cadProp, "Position");
162  auto posX = AppendNode(doc, position, "X");
163  SetNodeValue(doc, posX, indMotor->GetPosition().m_x);
164  auto posY = AppendNode(doc, position, "Y");
165  SetNodeValue(doc, posY, indMotor->GetPosition().m_y);
166  auto size = AppendNode(doc, cadProp, "Size");
167  auto width = AppendNode(doc, size, "Width");
168  SetNodeValue(doc, width, indMotor->GetWidth());
169  auto height = AppendNode(doc, size, "Height");
170  SetNodeValue(doc, height, indMotor->GetHeight());
171  auto angle = AppendNode(doc, cadProp, "Angle");
172  SetNodeValue(doc, angle, indMotor->GetAngle());
173  auto nodePos = AppendNode(doc, cadProp, "NodePosition");
174  auto nodePosX = AppendNode(doc, nodePos, "X");
175  SetNodeValue(doc, nodePosX, indMotor->GetPointList()[0].m_x);
176  auto nodePosY = AppendNode(doc, nodePos, "Y");
177  SetNodeValue(doc, nodePosY, indMotor->GetPointList()[0].m_y);
178  auto parentID = AppendNode(doc, cadProp, "ParentID");
179  Bus* parent = static_cast<Bus*>(indMotor->GetParentList()[0]);
180  if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number);
181 
182  IndMotorElectricalData data = indMotor->GetElectricalData();
183  auto electricalProp = AppendNode(doc, indMotorNode, "ElectricalProperties");
184  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
185  SetNodeValue(doc, isOnline, indMotor->IsOnline());
186  auto name = AppendNode(doc, electricalProp, "Name");
187  SetNodeValue(doc, name, data.name);
188  auto activePower = AppendNode(doc, electricalProp, "ActivePower");
189  SetNodeValue(doc, activePower, data.activePower);
190  SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit);
191  auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower");
192  SetNodeValue(doc, reactivePower, data.reactivePower);
193  SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
194  } //}
195 
196  //{ Inductor
197  auto inductorsNode = AppendNode(doc, elementsNode, "InductorList");
198  auto inductorList = allElements.GetInductorList();
199  for(int i = 0; i < (int)inductorList.size(); i++) {
200  Inductor* inductor = inductorList[i];
201  auto inductorNode = AppendNode(doc, inductorsNode, "Inductor");
202  SetNodeAttribute(doc, inductorNode, "ID", i);
203  auto cadProp = AppendNode(doc, inductorNode, "CADProperties");
204  auto position = AppendNode(doc, cadProp, "Position");
205  auto posX = AppendNode(doc, position, "X");
206  SetNodeValue(doc, posX, inductor->GetPosition().m_x);
207  auto posY = AppendNode(doc, position, "Y");
208  SetNodeValue(doc, posY, inductor->GetPosition().m_y);
209  auto size = AppendNode(doc, cadProp, "Size");
210  auto width = AppendNode(doc, size, "Width");
211  SetNodeValue(doc, width, inductor->GetWidth());
212  auto height = AppendNode(doc, size, "Height");
213  SetNodeValue(doc, height, inductor->GetHeight());
214  auto angle = AppendNode(doc, cadProp, "Angle");
215  SetNodeValue(doc, angle, inductor->GetAngle());
216  auto nodePos = AppendNode(doc, cadProp, "NodePosition");
217  auto nodePosX = AppendNode(doc, nodePos, "X");
218  SetNodeValue(doc, nodePosX, inductor->GetPointList()[0].m_x);
219  auto nodePosY = AppendNode(doc, nodePos, "Y");
220  SetNodeValue(doc, nodePosY, inductor->GetPointList()[0].m_y);
221  auto parentID = AppendNode(doc, cadProp, "ParentID");
222  Bus* parent = static_cast<Bus*>(inductor->GetParentList()[0]);
223  if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number);
224 
225  InductorElectricalData data = inductor->GetElectricalData();
226  auto electricalProp = AppendNode(doc, inductorNode, "ElectricalProperties");
227  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
228  SetNodeValue(doc, isOnline, inductor->IsOnline());
229  auto name = AppendNode(doc, electricalProp, "Name");
230  SetNodeValue(doc, name, data.name);
231  auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower");
232  SetNodeValue(doc, reactivePower, data.reactivePower);
233  SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
234 
235  auto switchingList = AppendNode(doc, electricalProp, "SwitchingList");
236  SwitchingData swData = inductor->GetSwitchingData();
237  for(int j = 0; j < (int)swData.swType.size(); j++) {
238  auto switching = AppendNode(doc, switchingList, "Switching");
239  SetNodeAttribute(doc, switching, "ID", j);
240  auto swType = AppendNode(doc, switching, "Type");
241  SetNodeValue(doc, swType, swData.swType[j]);
242  auto swTime = AppendNode(doc, switching, "Time");
243  SetNodeValue(doc, swTime, swData.swTime[j]);
244  }
245  } //}
246 
247  //{ Line
248  auto linesNode = AppendNode(doc, elementsNode, "LineList");
249  auto lineList = allElements.GetLineList();
250  for(int i = 0; i < (int)lineList.size(); i++) {
251  Line* line = lineList[i];
252  auto lineNode = AppendNode(doc, linesNode, "Line");
253  SetNodeAttribute(doc, lineNode, "ID", i);
254  auto cadProp = AppendNode(doc, lineNode, "CADProperties");
255  auto nodeList = AppendNode(doc, cadProp, "NodeList");
256  auto ptList = line->GetPointList();
257  int nodeID = 0;
258  for(int j = 0; j < (int)ptList.size(); j++) {
259  if((j != 1) && (j != (int)ptList.size() - 2)) {
260  auto nodePos = AppendNode(doc, nodeList, "Node");
261  SetNodeAttribute(doc, nodePos, "ID", nodeID);
262  auto nodePosX = AppendNode(doc, nodePos, "X");
263  SetNodeValue(doc, nodePosX, ptList[j].m_x);
264  auto nodePosY = AppendNode(doc, nodePos, "Y");
265  SetNodeValue(doc, nodePosY, ptList[j].m_y);
266  nodeID++;
267  }
268  }
269 
270  auto parentIDList = AppendNode(doc, cadProp, "ParentIDList");
271  for(int j = 0; j < (int)line->GetParentList().size(); j++) {
272  Bus* parent = static_cast<Bus*>(line->GetParentList()[j]);
273  if(parent) {
274  auto parentID = AppendNode(doc, parentIDList, "ParentID");
275  SetNodeAttribute(doc, parentID, "ID", j);
276  SetNodeValue(doc, parentID, parent->GetElectricalData().number);
277  }
278  }
279 
280  LineElectricalData data = line->GetElectricalData();
281  auto electricalProp = AppendNode(doc, lineNode, "ElectricalProperties");
282  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
283  SetNodeValue(doc, isOnline, line->IsOnline());
284  auto name = AppendNode(doc, electricalProp, "Name");
285  SetNodeValue(doc, name, data.name);
286  auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage");
287  SetNodeValue(doc, nominalVoltage, data.nominalVoltage);
288  SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit);
289  auto nominalPower = AppendNode(doc, electricalProp, "NominalPower");
290  SetNodeValue(doc, nominalPower, data.nominalPower);
291  SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
292  auto resistance = AppendNode(doc, electricalProp, "Resistance");
293  SetNodeValue(doc, resistance, data.resistance);
294  SetNodeAttribute(doc, resistance, "UnitID", data.resistanceUnit);
295  auto indReactance = AppendNode(doc, electricalProp, "IndReactance");
296  SetNodeValue(doc, indReactance, data.indReactance);
297  SetNodeAttribute(doc, indReactance, "UnitID", data.indReactanceUnit);
298  auto capSusceptance = AppendNode(doc, electricalProp, "CapSusceptance");
299  SetNodeValue(doc, capSusceptance, data.capSusceptance);
300  SetNodeAttribute(doc, capSusceptance, "UnitID", data.capSusceptanceUnit);
301  auto lineSize = AppendNode(doc, electricalProp, "LineSize");
302  SetNodeValue(doc, lineSize, data.lineSize);
303  auto useLinePower = AppendNode(doc, electricalProp, "UseLinePower");
304  SetNodeValue(doc, useLinePower, data.useLinePower);
305 
306  auto fault = AppendNode(doc, electricalProp, "Fault");
307  auto zeroResistance = AppendNode(doc, fault, "ZeroResistance");
308  SetNodeValue(doc, zeroResistance, data.zeroResistance);
309  auto zeroIndReactance = AppendNode(doc, fault, "ZeroIndReactance");
310  SetNodeValue(doc, zeroIndReactance, data.zeroIndReactance);
311  auto zeroCapSusceptance = AppendNode(doc, fault, "ZeroCapSusceptance");
312  SetNodeValue(doc, zeroCapSusceptance, data.zeroCapSusceptance);
313 
314  auto switchingList = AppendNode(doc, electricalProp, "SwitchingList");
315  SwitchingData swData = line->GetSwitchingData();
316  for(int j = 0; j < (int)swData.swType.size(); j++) {
317  auto switching = AppendNode(doc, switchingList, "Switching");
318  SetNodeAttribute(doc, switching, "ID", j);
319  auto swType = AppendNode(doc, switching, "Type");
320  SetNodeValue(doc, swType, swData.swType[j]);
321  auto swTime = AppendNode(doc, switching, "Time");
322  SetNodeValue(doc, swTime, swData.swTime[j]);
323  }
324  } //}
325 
326  //{ Load
327  auto loadsNode = AppendNode(doc, elementsNode, "LoadList");
328  auto loadList = allElements.GetLoadList();
329  for(int i = 0; i < (int)loadList.size(); i++) {
330  Load* load = loadList[i];
331  auto loadNode = AppendNode(doc, loadsNode, "Load");
332  SetNodeAttribute(doc, loadNode, "ID", i);
333  auto cadProp = AppendNode(doc, loadNode, "CADProperties");
334  auto position = AppendNode(doc, cadProp, "Position");
335  auto posX = AppendNode(doc, position, "X");
336  SetNodeValue(doc, posX, load->GetPosition().m_x);
337  auto posY = AppendNode(doc, position, "Y");
338  SetNodeValue(doc, posY, load->GetPosition().m_y);
339  auto size = AppendNode(doc, cadProp, "Size");
340  auto width = AppendNode(doc, size, "Width");
341  SetNodeValue(doc, width, load->GetWidth());
342  auto height = AppendNode(doc, size, "Height");
343  SetNodeValue(doc, height, load->GetHeight());
344  auto angle = AppendNode(doc, cadProp, "Angle");
345  SetNodeValue(doc, angle, load->GetAngle());
346  auto nodePos = AppendNode(doc, cadProp, "NodePosition");
347  auto nodePosX = AppendNode(doc, nodePos, "X");
348  SetNodeValue(doc, nodePosX, load->GetPointList()[0].m_x);
349  auto nodePosY = AppendNode(doc, nodePos, "Y");
350  SetNodeValue(doc, nodePosY, load->GetPointList()[0].m_y);
351  auto parentID = AppendNode(doc, cadProp, "ParentID");
352  Bus* parent = static_cast<Bus*>(load->GetParentList()[0]);
353  if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number);
354 
355  LoadElectricalData data = load->GetElectricalData();
356  auto electricalProp = AppendNode(doc, loadNode, "ElectricalProperties");
357  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
358  SetNodeValue(doc, isOnline, load->IsOnline());
359  auto name = AppendNode(doc, electricalProp, "Name");
360  SetNodeValue(doc, name, data.name);
361  auto activePower = AppendNode(doc, electricalProp, "ActivePower");
362  SetNodeValue(doc, activePower, data.activePower);
363  SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit);
364  auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower");
365  SetNodeValue(doc, reactivePower, data.reactivePower);
366  SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
367  auto loadType = AppendNode(doc, electricalProp, "LoadType");
368  SetNodeValue(doc, loadType, data.loadType);
369 
370  auto switchingList = AppendNode(doc, electricalProp, "SwitchingList");
371  SwitchingData swData = load->GetSwitchingData();
372  for(int j = 0; j < (int)swData.swType.size(); j++) {
373  auto switching = AppendNode(doc, switchingList, "Switching");
374  SetNodeAttribute(doc, switching, "ID", j);
375  auto swType = AppendNode(doc, switching, "Type");
376  SetNodeValue(doc, swType, swData.swType[j]);
377  auto swTime = AppendNode(doc, switching, "Time");
378  SetNodeValue(doc, swTime, swData.swTime[j]);
379  }
380  } //}
381 
382  //{ SyncGenerator
383  auto syncGeneratorsNode = AppendNode(doc, elementsNode, "SyncGeneratorList");
384  auto syncGeneratorList = allElements.GetSyncGeneratorList();
385  for(int i = 0; i < (int)syncGeneratorList.size(); i++) {
386  SyncGenerator* syncGenerator = syncGeneratorList[i];
387  auto syncGeneratorNode = AppendNode(doc, syncGeneratorsNode, "SyncGenerator");
388  SetNodeAttribute(doc, syncGeneratorNode, "ID", i);
389  auto cadProp = AppendNode(doc, syncGeneratorNode, "CADProperties");
390  auto position = AppendNode(doc, cadProp, "Position");
391  auto posX = AppendNode(doc, position, "X");
392  SetNodeValue(doc, posX, syncGenerator->GetPosition().m_x);
393  auto posY = AppendNode(doc, position, "Y");
394  SetNodeValue(doc, posY, syncGenerator->GetPosition().m_y);
395  auto size = AppendNode(doc, cadProp, "Size");
396  auto width = AppendNode(doc, size, "Width");
397  SetNodeValue(doc, width, syncGenerator->GetWidth());
398  auto height = AppendNode(doc, size, "Height");
399  SetNodeValue(doc, height, syncGenerator->GetHeight());
400  auto angle = AppendNode(doc, cadProp, "Angle");
401  SetNodeValue(doc, angle, syncGenerator->GetAngle());
402  auto nodePos = AppendNode(doc, cadProp, "NodePosition");
403  auto nodePosX = AppendNode(doc, nodePos, "X");
404  SetNodeValue(doc, nodePosX, syncGenerator->GetPointList()[0].m_x);
405  auto nodePosY = AppendNode(doc, nodePos, "Y");
406  SetNodeValue(doc, nodePosY, syncGenerator->GetPointList()[0].m_y);
407  auto parentID = AppendNode(doc, cadProp, "ParentID");
408  Bus* parent = static_cast<Bus*>(syncGenerator->GetParentList()[0]);
409  if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number);
410 
411  SyncGeneratorElectricalData data = syncGenerator->GetElectricalData();
412  auto electricalProp = AppendNode(doc, syncGeneratorNode, "ElectricalProperties");
413  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
414  SetNodeValue(doc, isOnline, syncGenerator->IsOnline());
415  auto name = AppendNode(doc, electricalProp, "Name");
416  SetNodeValue(doc, name, data.name);
417  auto nominalPower = AppendNode(doc, electricalProp, "NominalPower");
418  SetNodeValue(doc, nominalPower, data.nominalPower);
419  SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
420  auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage");
421  SetNodeValue(doc, nominalVoltage, data.nominalVoltage);
422  SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit);
423  auto activePower = AppendNode(doc, electricalProp, "ActivePower");
424  SetNodeValue(doc, activePower, data.activePower);
425  SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit);
426  auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower");
427  SetNodeValue(doc, reactivePower, data.reactivePower);
428  SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
429  auto haveMaxReactive = AppendNode(doc, electricalProp, "HaveMaxReactive");
430  SetNodeValue(doc, haveMaxReactive, data.haveMaxReactive);
431  auto maxReactive = AppendNode(doc, electricalProp, "MaxReactive");
432  SetNodeValue(doc, maxReactive, data.maxReactive);
433  SetNodeAttribute(doc, maxReactive, "UnitID", data.maxReactiveUnit);
434  auto haveMinReactive = AppendNode(doc, electricalProp, "HaveMinReactive");
435  SetNodeValue(doc, haveMinReactive, data.haveMinReactive);
436  auto minReactive = AppendNode(doc, electricalProp, "MinReactive");
437  SetNodeValue(doc, minReactive, data.minReactive);
438  SetNodeAttribute(doc, minReactive, "UnitID", data.minReactiveUnit);
439  auto useMachineBase = AppendNode(doc, electricalProp, "UseMachineBase");
440  SetNodeValue(doc, useMachineBase, data.useMachineBase);
441 
442  auto fault = AppendNode(doc, electricalProp, "Fault");
443  auto positiveResistance = AppendNode(doc, fault, "PositiveResistance");
444  SetNodeValue(doc, positiveResistance, data.positiveResistance);
445  auto positiveReactance = AppendNode(doc, fault, "PositiveReactance");
446  SetNodeValue(doc, positiveReactance, data.positiveReactance);
447  auto negativeResistance = AppendNode(doc, fault, "NegativeResistance");
448  SetNodeValue(doc, negativeResistance, data.negativeResistance);
449  auto negativeReactance = AppendNode(doc, fault, "NegativeReactance");
450  SetNodeValue(doc, negativeReactance, data.negativeReactance);
451  auto zeroResistance = AppendNode(doc, fault, "ZeroResistance");
452  SetNodeValue(doc, zeroResistance, data.zeroResistance);
453  auto zeroReactance = AppendNode(doc, fault, "ZeroReactance");
454  SetNodeValue(doc, zeroReactance, data.zeroReactance);
455  auto groundResistance = AppendNode(doc, fault, "GroundResistance");
456  SetNodeValue(doc, groundResistance, data.groundResistance);
457  auto groundReactance = AppendNode(doc, fault, "GroundReactance");
458  SetNodeValue(doc, groundReactance, data.groundReactance);
459  auto groundNeutral = AppendNode(doc, fault, "GroundNeutral");
460  SetNodeValue(doc, groundNeutral, data.groundNeutral);
461 
462  auto stability = AppendNode(doc, electricalProp, "Stability");
463  auto plotSyncMachine = AppendNode(doc, stability, "PlotSyncMachine");
464  SetNodeValue(doc, plotSyncMachine, data.plotSyncMachine);
465  auto inertia = AppendNode(doc, stability, "Inertia");
466  SetNodeValue(doc, inertia, data.inertia);
467  auto damping = AppendNode(doc, stability, "Damping");
468  SetNodeValue(doc, damping, data.damping);
469  auto useAVR = AppendNode(doc, stability, "UseAVR");
470  SetNodeValue(doc, useAVR, data.useAVR);
471  auto useSpeedGovernor = AppendNode(doc, stability, "UseSpeedGovernor");
472  SetNodeValue(doc, useSpeedGovernor, data.useSpeedGovernor);
473  auto armResistance = AppendNode(doc, stability, "ArmResistance");
474  SetNodeValue(doc, armResistance, data.armResistance);
475  auto potierReactance = AppendNode(doc, stability, "PotierReactance");
476  SetNodeValue(doc, potierReactance, data.potierReactance);
477  auto satFactor = AppendNode(doc, stability, "SatFactor");
478  SetNodeValue(doc, satFactor, data.satFactor);
479  auto syncXd = AppendNode(doc, stability, "SyncXd");
480  SetNodeValue(doc, syncXd, data.syncXd);
481  auto syncXq = AppendNode(doc, stability, "SyncXq");
482  SetNodeValue(doc, syncXq, data.syncXq);
483  auto transXd = AppendNode(doc, stability, "TransXd");
484  SetNodeValue(doc, transXd, data.transXd);
485  auto transXq = AppendNode(doc, stability, "TransXq");
486  SetNodeValue(doc, transXq, data.transXq);
487  auto transTd0 = AppendNode(doc, stability, "TransTd0");
488  SetNodeValue(doc, transTd0, data.transTd0);
489  auto transTq0 = AppendNode(doc, stability, "TransTq0");
490  SetNodeValue(doc, transTq0, data.transTq0);
491  auto subXd = AppendNode(doc, stability, "SubXd");
492  SetNodeValue(doc, subXd, data.subXd);
493  auto subXq = AppendNode(doc, stability, "SubXq");
494  SetNodeValue(doc, subXq, data.subXq);
495  auto subTd0 = AppendNode(doc, stability, "SubTd0");
496  SetNodeValue(doc, subTd0, data.subTd0);
497  auto subTq0 = AppendNode(doc, stability, "SubTq0");
498  SetNodeValue(doc, subTq0, data.subTq0);
499 
500  auto avr = AppendNode(doc, stability, "AVR");
501  if(data.avr) SaveControlElements(doc, avr, data.avr);
502 
503  auto speedGov = AppendNode(doc, stability, "SpeedGovernor");
504  if(data.speedGov) SaveControlElements(doc, speedGov, data.speedGov);
505 
506  auto switchingList = AppendNode(doc, electricalProp, "SwitchingList");
507  SwitchingData swData = syncGenerator->GetSwitchingData();
508  for(int j = 0; j < (int)swData.swType.size(); j++) {
509  auto switching = AppendNode(doc, switchingList, "Switching");
510  SetNodeAttribute(doc, switching, "ID", j);
511  auto swType = AppendNode(doc, switching, "Type");
512  SetNodeValue(doc, swType, swData.swType[j]);
513  auto swTime = AppendNode(doc, switching, "Time");
514  SetNodeValue(doc, swTime, swData.swTime[j]);
515  }
516  } //}
517 
518  //{ SyncMotor
519  auto syncMotorsNode = AppendNode(doc, elementsNode, "SyncMotorList");
520  auto syncMotorList = allElements.GetSyncMotorList();
521  for(int i = 0; i < (int)syncMotorList.size(); i++) {
522  SyncMotor* syncMotor = syncMotorList[i];
523  auto syncMotorNode = AppendNode(doc, syncMotorsNode, "SyncMotor");
524  SetNodeAttribute(doc, syncMotorNode, "ID", i);
525  auto cadProp = AppendNode(doc, syncMotorNode, "CADProperties");
526  auto position = AppendNode(doc, cadProp, "Position");
527  auto posX = AppendNode(doc, position, "X");
528  SetNodeValue(doc, posX, syncMotor->GetPosition().m_x);
529  auto posY = AppendNode(doc, position, "Y");
530  SetNodeValue(doc, posY, syncMotor->GetPosition().m_y);
531  auto size = AppendNode(doc, cadProp, "Size");
532  auto width = AppendNode(doc, size, "Width");
533  SetNodeValue(doc, width, syncMotor->GetWidth());
534  auto height = AppendNode(doc, size, "Height");
535  SetNodeValue(doc, height, syncMotor->GetHeight());
536  auto angle = AppendNode(doc, cadProp, "Angle");
537  SetNodeValue(doc, angle, syncMotor->GetAngle());
538  auto nodePos = AppendNode(doc, cadProp, "NodePosition");
539  auto nodePosX = AppendNode(doc, nodePos, "X");
540  SetNodeValue(doc, nodePosX, syncMotor->GetPointList()[0].m_x);
541  auto nodePosY = AppendNode(doc, nodePos, "Y");
542  SetNodeValue(doc, nodePosY, syncMotor->GetPointList()[0].m_y);
543  auto parentID = AppendNode(doc, cadProp, "ParentID");
544  Bus* parent = static_cast<Bus*>(syncMotor->GetParentList()[0]);
545  if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number);
546 
547  SyncMotorElectricalData data = syncMotor->GetElectricalData();
548  auto electricalProp = AppendNode(doc, syncMotorNode, "ElectricalProperties");
549  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
550  SetNodeValue(doc, isOnline, syncMotor->IsOnline());
551  auto name = AppendNode(doc, electricalProp, "Name");
552  SetNodeValue(doc, name, data.name);
553  auto nominalPower = AppendNode(doc, electricalProp, "NominalPower");
554  SetNodeValue(doc, nominalPower, data.nominalPower);
555  SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
556  // auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage");
557  // SetNodeValue(doc, nominalVoltage, data.nominalVoltage);
558  // SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit);
559  auto activePower = AppendNode(doc, electricalProp, "ActivePower");
560  SetNodeValue(doc, activePower, data.activePower);
561  SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit);
562  auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower");
563  SetNodeValue(doc, reactivePower, data.reactivePower);
564  SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
565  auto haveMaxReactive = AppendNode(doc, electricalProp, "HaveMaxReactive");
566  SetNodeValue(doc, haveMaxReactive, data.haveMaxReactive);
567  auto maxReactive = AppendNode(doc, electricalProp, "MaxReactive");
568  SetNodeValue(doc, maxReactive, data.maxReactive);
569  SetNodeAttribute(doc, maxReactive, "UnitID", data.maxReactiveUnit);
570  auto haveMinReactive = AppendNode(doc, electricalProp, "HaveMinReactive");
571  SetNodeValue(doc, haveMinReactive, data.haveMinReactive);
572  auto minReactive = AppendNode(doc, electricalProp, "MinReactive");
573  SetNodeValue(doc, minReactive, data.minReactive);
574  SetNodeAttribute(doc, minReactive, "UnitID", data.minReactiveUnit);
575  auto useMachineBase = AppendNode(doc, electricalProp, "UseMachineBase");
576  SetNodeValue(doc, useMachineBase, data.useMachineBase);
577 
578  auto fault = AppendNode(doc, electricalProp, "Fault");
579  auto positiveResistance = AppendNode(doc, fault, "PositiveResistance");
580  SetNodeValue(doc, positiveResistance, data.positiveResistance);
581  auto positiveReactance = AppendNode(doc, fault, "PositiveReactance");
582  SetNodeValue(doc, positiveReactance, data.positiveReactance);
583  auto negativeResistance = AppendNode(doc, fault, "NegativeResistance");
584  SetNodeValue(doc, negativeResistance, data.negativeResistance);
585  auto negativeReactance = AppendNode(doc, fault, "NegativeReactance");
586  SetNodeValue(doc, negativeReactance, data.negativeReactance);
587  auto zeroResistance = AppendNode(doc, fault, "ZeroResistance");
588  SetNodeValue(doc, zeroResistance, data.zeroResistance);
589  auto zeroReactance = AppendNode(doc, fault, "ZeroReactance");
590  SetNodeValue(doc, zeroReactance, data.zeroReactance);
591  auto groundResistance = AppendNode(doc, fault, "GroundResistance");
592  SetNodeValue(doc, groundResistance, data.groundResistance);
593  auto groundReactance = AppendNode(doc, fault, "GroundReactance");
594  SetNodeValue(doc, groundReactance, data.groundReactance);
595  auto groundNeutral = AppendNode(doc, fault, "GroundNeutral");
596  SetNodeValue(doc, groundNeutral, data.groundNeutral);
597 
598  // To future use...
599  /*auto stability = AppendNode(doc, electricalProp, "Stability");
600  auto plotSyncMachine = AppendNode(doc, stability, "PlotSyncMotor");
601  SetNodeValue(doc, plotSyncMachine, data.plotSyncMachine);
602  auto inertia = AppendNode(doc, stability, "Inertia");
603  SetNodeValue(doc, inertia, data.inertia);
604  auto damping = AppendNode(doc, stability, "Damping");
605  SetNodeValue(doc, damping, data.damping);
606  auto useAVR = AppendNode(doc, stability, "UseAVR");
607  SetNodeValue(doc, useAVR, data.useAVR);
608  auto armResistance = AppendNode(doc, stability, "ArmResistance");
609  SetNodeValue(doc, armResistance, data.armResistance);
610  auto potierReactance = AppendNode(doc, stability, "PotierReactance");
611  SetNodeValue(doc, potierReactance, data.potierReactance);
612  auto satFactor = AppendNode(doc, stability, "SatFactor");
613  SetNodeValue(doc, satFactor, data.satFactor);
614  auto syncXd = AppendNode(doc, stability, "SyncXd");
615  SetNodeValue(doc, syncXd, data.syncXd);
616  auto syncXq = AppendNode(doc, stability, "SyncXq");
617  SetNodeValue(doc, syncXq, data.syncXq);
618  auto transXd = AppendNode(doc, stability, "TransXd");
619  SetNodeValue(doc, transXd, data.transXd);
620  auto transXq = AppendNode(doc, stability, "TransXq");
621  SetNodeValue(doc, transXq, data.transXq);
622  auto transTd0 = AppendNode(doc, stability, "TransTd0");
623  SetNodeValue(doc, transTd0, data.transTd0);
624  auto transTq0 = AppendNode(doc, stability, "TransTq0");
625  SetNodeValue(doc, transTq0, data.transTq0);
626  auto subXd = AppendNode(doc, stability, "SubXd");
627  SetNodeValue(doc, subXd, data.subXd);
628  auto subXq = AppendNode(doc, stability, "SubXq");
629  SetNodeValue(doc, subXq, data.subXq);
630  auto subTd0 = AppendNode(doc, stability, "SubTd0");
631  SetNodeValue(doc, subTd0, data.subTd0);
632  auto subTq0 = AppendNode(doc, stability, "SubTq0");
633  SetNodeValue(doc, subTq0, data.subTq0);
634 
635  auto switchingList = AppendNode(doc, electricalProp, "SwitchingList");
636  SwitchingData swData = syncGenerator->GetSwitchingData();
637  for(int j = 0; j < (int)swData.swType.size(); j++) {
638  auto switching = AppendNode(doc, switchingList, "Switching");
639  SetNodeAttribute(doc, switching, "ID", j);
640  auto swType = AppendNode(doc, switching, "Type");
641  SetNodeValue(doc, swType, swData.swType[j]);
642  auto swTime = AppendNode(doc, switching, "Time");
643  SetNodeValue(doc, swTime, swData.swTime[j]);
644  }*/
645  } //}
646 
647  //{ Transfomer
648  auto transformersNode = AppendNode(doc, elementsNode, "TransformerList");
649  auto transformerList = allElements.GetTransformerList();
650  for(int i = 0; i < (int)transformerList.size(); i++) {
651  Transformer* transfomer = transformerList[i];
652  auto transformerNode = AppendNode(doc, transformersNode, "Transfomer");
653  SetNodeAttribute(doc, transformerNode, "ID", i);
654  auto cadProp = AppendNode(doc, transformerNode, "CADProperties");
655  auto position = AppendNode(doc, cadProp, "Position");
656  auto posX = AppendNode(doc, position, "X");
657  SetNodeValue(doc, posX, transfomer->GetPosition().m_x);
658  auto posY = AppendNode(doc, position, "Y");
659  SetNodeValue(doc, posY, transfomer->GetPosition().m_y);
660  auto size = AppendNode(doc, cadProp, "Size");
661  auto width = AppendNode(doc, size, "Width");
662  SetNodeValue(doc, width, transfomer->GetWidth());
663  auto height = AppendNode(doc, size, "Height");
664  SetNodeValue(doc, height, transfomer->GetHeight());
665  auto angle = AppendNode(doc, cadProp, "Angle");
666  SetNodeValue(doc, angle, transfomer->GetAngle());
667  auto nodeList = AppendNode(doc, cadProp, "NodeList");
668  auto nodePos1 = AppendNode(doc, nodeList, "Node");
669  SetNodeAttribute(doc, nodePos1, "ID", 0);
670  auto nodePosX1 = AppendNode(doc, nodePos1, "X");
671  SetNodeValue(doc, nodePosX1, transfomer->GetPointList()[0].m_x);
672  auto nodePosY1 = AppendNode(doc, nodePos1, "Y");
673  SetNodeValue(doc, nodePosY1, transfomer->GetPointList()[0].m_y);
674  auto nodePos2 = AppendNode(doc, nodeList, "Node");
675  SetNodeAttribute(doc, nodePos2, "ID", 1);
676  auto nodePosX2 = AppendNode(doc, nodePos2, "X");
677  SetNodeValue(doc, nodePosX2, transfomer->GetPointList()[transfomer->GetPointList().size() - 1].m_x);
678  auto nodePosY2 = AppendNode(doc, nodePos2, "Y");
679  SetNodeValue(doc, nodePosY2, transfomer->GetPointList()[transfomer->GetPointList().size() - 1].m_y);
680 
681  auto parentIDList = AppendNode(doc, cadProp, "ParentIDList");
682  for(int j = 0; j < (int)transfomer->GetParentList().size(); j++) {
683  Bus* parent = static_cast<Bus*>(transfomer->GetParentList()[j]);
684  if(parent) {
685  auto parentID = AppendNode(doc, parentIDList, "ParentID");
686  SetNodeAttribute(doc, parentID, "ID", j);
687  SetNodeValue(doc, parentID, parent->GetElectricalData().number);
688  }
689  }
690 
691  TransformerElectricalData data = transfomer->GetElectricalData();
692  auto electricalProp = AppendNode(doc, transformerNode, "ElectricalProperties");
693  auto isOnline = AppendNode(doc, electricalProp, "IsOnline");
694  SetNodeValue(doc, isOnline, transfomer->IsOnline());
695  auto name = AppendNode(doc, electricalProp, "Name");
696  SetNodeValue(doc, name, data.name);
697  auto primaryNominalVoltage = AppendNode(doc, electricalProp, "PrimaryNominalVoltage");
698  SetNodeValue(doc, primaryNominalVoltage, data.primaryNominalVoltage);
699  SetNodeAttribute(doc, primaryNominalVoltage, "UnitID", data.primaryNominalVoltageUnit);
700  auto secondaryNominalVoltage = AppendNode(doc, electricalProp, "SecondaryNominalVoltage");
701  SetNodeValue(doc, secondaryNominalVoltage, data.secondaryNominalVoltage);
702  SetNodeAttribute(doc, secondaryNominalVoltage, "UnitID", data.secondaryNominalVoltageUnit);
703  auto nominalPower = AppendNode(doc, electricalProp, "NominalPower");
704  SetNodeValue(doc, nominalPower, data.nominalPower);
705  SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
706  auto resistance = AppendNode(doc, electricalProp, "Resistance");
707  SetNodeValue(doc, resistance, data.resistance);
708  SetNodeAttribute(doc, resistance, "UnitID", data.resistanceUnit);
709  auto indReactance = AppendNode(doc, electricalProp, "IndReactance");
710  SetNodeValue(doc, indReactance, data.indReactance);
711  SetNodeAttribute(doc, indReactance, "UnitID", data.indReactanceUnit);
712  auto connection = AppendNode(doc, electricalProp, "Connection");
713  SetNodeValue(doc, connection, data.connection);
714  auto turnsRatio = AppendNode(doc, electricalProp, "TurnsRatio");
715  SetNodeValue(doc, turnsRatio, data.turnsRatio);
716  auto phaseShift = AppendNode(doc, electricalProp, "PhaseShift");
717  SetNodeValue(doc, phaseShift, data.phaseShift);
718  auto useTransformerPower = AppendNode(doc, electricalProp, "UseTransfomerPower");
719  SetNodeValue(doc, useTransformerPower, data.useTransformerPower);
720 
721  auto fault = AppendNode(doc, electricalProp, "Fault");
722  auto zeroResistance = AppendNode(doc, fault, "ZeroResistance");
723  SetNodeValue(doc, zeroResistance, data.zeroResistance);
724  auto zeroIndReactance = AppendNode(doc, fault, "ZeroIndReactance");
725  SetNodeValue(doc, zeroIndReactance, data.zeroIndReactance);
726  auto primaryGrndResistance = AppendNode(doc, fault, "PrimaryGrndResistance");
727  SetNodeValue(doc, primaryGrndResistance, data.primaryGrndResistance);
728  auto primaryGrndReactance = AppendNode(doc, fault, "PrimaryGrndReactance");
729  SetNodeValue(doc, primaryGrndReactance, data.primaryGrndReactance);
730  auto secondaryGrndResistance = AppendNode(doc, fault, "SecondaryGrndResistance");
731  SetNodeValue(doc, secondaryGrndResistance, data.secondaryGrndResistance);
732  auto secondaryGrndReactance = AppendNode(doc, fault, "SecondaryGrndReactance");
733  SetNodeValue(doc, secondaryGrndReactance, data.secondaryGrndReactance);
734 
735  auto switchingList = AppendNode(doc, electricalProp, "SwitchingList");
736  SwitchingData swData = transfomer->GetSwitchingData();
737  for(int j = 0; j < (int)swData.swType.size(); j++) {
738  auto switching = AppendNode(doc, switchingList, "Switching");
739  SetNodeAttribute(doc, switching, "ID", j);
740  auto swType = AppendNode(doc, switching, "Type");
741  SetNodeValue(doc, swType, swData.swType[j]);
742  auto swTime = AppendNode(doc, switching, "Time");
743  SetNodeValue(doc, swTime, swData.swTime[j]);
744  }
745  } //}
746 
747  //{ Text
748  auto textsNode = AppendNode(doc, elementsNode, "TextList");
749  auto textList = m_workspace->GetTextList();
750  for(int i = 0; i < (int)textList.size(); i++) {
751  Text* text = textList[i];
752  auto textNode = AppendNode(doc, textsNode, "Text");
753  SetNodeAttribute(doc, textNode, "ID", i);
754  auto cadProp = AppendNode(doc, textNode, "CADProperties");
755  auto position = AppendNode(doc, cadProp, "Position");
756  auto posX = AppendNode(doc, position, "X");
757  SetNodeValue(doc, posX, text->GetPosition().m_x);
758  auto posY = AppendNode(doc, position, "Y");
759  SetNodeValue(doc, posY, text->GetPosition().m_y);
760  auto size = AppendNode(doc, cadProp, "Size");
761  auto width = AppendNode(doc, size, "Width");
762  SetNodeValue(doc, width, text->GetWidth());
763  auto height = AppendNode(doc, size, "Height");
764  SetNodeValue(doc, height, text->GetHeight());
765  auto angle = AppendNode(doc, cadProp, "Angle");
766  SetNodeValue(doc, angle, text->GetAngle());
767  auto textProperties = AppendNode(doc, textNode, "TextProperties");
768  auto elementType = AppendNode(doc, textProperties, "ElementType");
769  SetNodeValue(doc, elementType, text->GetElementType());
770  auto elementNumber = AppendNode(doc, textProperties, "ElementNumber");
771  SetNodeValue(doc, elementNumber, text->GetElementNumber());
772  auto dataType = AppendNode(doc, textProperties, "DataType");
773  SetNodeValue(doc, dataType, text->GetDataType());
774  auto dataUnit = AppendNode(doc, textProperties, "DataUnit");
775  SetNodeValue(doc, dataUnit, text->GetUnit());
776  auto direction = AppendNode(doc, textProperties, "Direction");
777  SetNodeValue(doc, direction, text->GetDirection());
778  auto decimalPlaces = AppendNode(doc, textProperties, "DecimalPlaces");
779  SetNodeValue(doc, decimalPlaces, text->GetDecimalPlaces());
780  }
781  //}
782 
783  std::ofstream writeXML(path.GetFullPath());
784  writeXML << doc;
785  writeXML.close();
786 }
787 
788 bool FileHanding::OpenProject(wxFileName path)
789 {
790  rapidxml::xml_document<> doc;
791  rapidxml::file<> xmlFile(path.GetFullPath().mb_str());
792 
793  doc.parse<0>(xmlFile.data());
794 
795  auto projectNode = doc.first_node("Project");
796  if(!projectNode) return false;
797  auto nameNode = projectNode->first_node("Name");
798  if(!nameNode) return false;
799  m_workspace->SetName(nameNode->value());
800 
801  // Open elements
802  auto elementsNode = projectNode->first_node("Elements");
803  if(!elementsNode) return false;
804  std::vector<Element*> elementList;
805  // Save lists individually to get parents
806  std::vector<Bus*> busList;
807  std::vector<Capacitor*> capacitorList;
808  std::vector<IndMotor*> indMotorList;
809  std::vector<Inductor*> inductorList;
810  std::vector<Line*> lineList;
811  std::vector<Load*> loadList;
812  std::vector<SyncGenerator*> syncGeneratorList;
813  std::vector<SyncMotor*> syncMotorList;
814  std::vector<Transformer*> transformerList;
815  std::vector<Text*> textList;
816 
817  //{ Bus
818  auto busListNode = elementsNode->first_node("BusList");
819  if(!busListNode) return false;
820  auto busNode = busListNode->first_node("Bus");
821  while(busNode) {
822  auto cadPropNode = busNode->first_node("CADProperties");
823  if(!cadPropNode) return false;
824 
825  auto position = cadPropNode->first_node("Position");
826  double posX = GetNodeValueDouble(position, "X");
827  double posY = GetNodeValueDouble(position, "Y");
828  Bus* bus = new Bus(wxPoint2DDouble(posX, posY));
829 
830  auto size = cadPropNode->first_node("Size");
831  double width = GetNodeValueDouble(size, "Width");
832  double height = GetNodeValueDouble(size, "Height");
833  double angle = GetNodeValueDouble(cadPropNode, "Angle");
834  bus->SetWidth(width);
835  bus->SetHeight(height);
836  bus->SetPosition(bus->GetPosition()); // Update bus rectangle.
837  int numRot = angle / bus->GetRotationAngle();
838  bool clockwise = true;
839  if(numRot < 0) {
840  numRot = std::abs(numRot);
841  clockwise = false;
842  }
843  for(int i = 0; i < numRot; i++) bus->Rotate(clockwise);
844 
845  BusElectricalData data = bus->GetElectricalData();
846  auto electricalProp = busNode->first_node("ElectricalProperties");
847  if(!electricalProp) return false;
848 
849  data.name = electricalProp->first_node("Name")->value();
850  data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage");
851  data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID");
852  data.isVoltageControlled = GetNodeValueInt(electricalProp, "IsVoltageControlled");
853  data.controlledVoltage = GetNodeValueDouble(electricalProp, "ControlledVoltage");
854  data.controlledVoltageUnitChoice = GetAttributeValueInt(electricalProp, "ControlledVoltage", "Choice");
855  data.slackBus = GetNodeValueInt(electricalProp, "SlackBus");
856  auto fault = electricalProp->first_node("Fault");
857  data.hasFault = GetNodeValueInt(fault, "HasFault");
858  data.faultType = (FaultData)GetNodeValueInt(fault, "Type");
859  data.faultLocation = (FaultData)GetNodeValueInt(fault, "Location");
860  data.faultResistance = GetNodeValueDouble(fault, "Resistance");
861  data.faultReactance = GetNodeValueDouble(fault, "Reactance");
862  auto stability = electricalProp->first_node("Stability");
863  data.plotBus = GetNodeValueInt(stability, "Plot");
864  data.stabHasFault = GetNodeValueInt(stability, "HasFault");
865  data.stabFaultTime = GetNodeValueDouble(stability, "FaultTime");
866  data.stabFaultLength = GetNodeValueDouble(stability, "FaultLength");
867  data.stabFaultResistance = GetNodeValueDouble(stability, "FaultResistance");
868  data.stabFaultReactance = GetNodeValueDouble(stability, "FaultReactance");
869 
870  bus->SetElectricalData(data);
871 
872  if(data.stabHasFault) bus->SetDynamicEvent(true);
873 
874  elementList.push_back(bus);
875  busList.push_back(bus);
876  busNode = busNode->next_sibling("Bus");
877  } //}
878 
879  //{ Capacitor
880  auto capacitorListNode = elementsNode->first_node("CapacitorList");
881  if(!capacitorListNode) return false;
882  auto capacitorNode = capacitorListNode->first_node("Capacitor");
883  while(capacitorNode) {
884  Capacitor* capacitor = new Capacitor();
885 
886  auto cadPropNode = capacitorNode->first_node("CADProperties");
887  if(!cadPropNode) return false;
888 
889  auto position = cadPropNode->first_node("Position");
890  double posX = GetNodeValueDouble(position, "X");
891  double posY = GetNodeValueDouble(position, "Y");
892  auto size = cadPropNode->first_node("Size");
893  double width = GetNodeValueDouble(size, "Width");
894  double height = GetNodeValueDouble(size, "Height");
895  double angle = GetNodeValueDouble(cadPropNode, "Angle");
896  auto nodePosition = cadPropNode->first_node("NodePosition");
897  double nodePosX = GetNodeValueDouble(nodePosition, "X");
898  double nodePosY = GetNodeValueDouble(nodePosition, "Y");
899  int parentID = GetNodeValueInt(cadPropNode, "ParentID");
900  if(parentID == -1) {
901  // If the element has no parent, create a temporary one, remove and delete.
902  Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
903  capacitor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
904  capacitor->StartMove(capacitor->GetPosition());
905  capacitor->Move(wxPoint2DDouble(posX, posY));
906  capacitor->RemoveParent(parent);
907  delete parent;
908  } else {
909  Bus* parent = busList[parentID];
910  capacitor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
911  capacitor->StartMove(capacitor->GetPosition());
912  capacitor->Move(wxPoint2DDouble(posX, posY));
913  }
914  capacitor->SetWidth(width);
915  capacitor->SetHeight(height);
916 
917  int numRot = angle / capacitor->GetRotationAngle();
918  bool clockwise = true;
919  if(numRot < 0) {
920  numRot = std::abs(numRot);
921  clockwise = false;
922  }
923  for(int i = 0; i < numRot; i++) capacitor->Rotate(clockwise);
924 
925  auto electricalProp = capacitorNode->first_node("ElectricalProperties");
926  if(!electricalProp) return false;
927 
928  capacitor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
929  CapacitorElectricalData data = capacitor->GetElectricalData();
930  data.name = electricalProp->first_node("Name")->value();
931  data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower");
932  data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
933 
934  SwitchingData swData;
935  auto switchingList = electricalProp->first_node("SwitchingList");
936  if(!switchingList) return false;
937  auto swNode = switchingList->first_node("Switching");
938  while(swNode) {
939  swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type"));
940  swData.swTime.push_back(GetNodeValueDouble(swNode, "Time"));
941  swNode = swNode->next_sibling("Switching");
942  }
943  capacitor->SetSwitchingData(swData);
944 
945  capacitor->SetElectricalData(data);
946 
947  if(swData.swTime.size() != 0) capacitor->SetDynamicEvent(true);
948 
949  elementList.push_back(capacitor);
950  capacitorList.push_back(capacitor);
951  capacitorNode = capacitorNode->next_sibling("Capacitor");
952  } //}
953 
954  //{ IndMotor
955  auto indMotorListNode = elementsNode->first_node("IndMotorList");
956  if(!indMotorListNode) return false;
957  auto indMotorNode = indMotorListNode->first_node("IndMotor");
958  while(indMotorNode) {
959  IndMotor* indMotor = new IndMotor();
960 
961  auto cadPropNode = indMotorNode->first_node("CADProperties");
962  if(!cadPropNode) return false;
963 
964  auto position = cadPropNode->first_node("Position");
965  double posX = GetNodeValueDouble(position, "X");
966  double posY = GetNodeValueDouble(position, "Y");
967  auto size = cadPropNode->first_node("Size");
968  double width = GetNodeValueDouble(size, "Width");
969  double height = GetNodeValueDouble(size, "Height");
970  double angle = GetNodeValueDouble(cadPropNode, "Angle");
971  auto nodePosition = cadPropNode->first_node("NodePosition");
972  double nodePosX = GetNodeValueDouble(nodePosition, "X");
973  double nodePosY = GetNodeValueDouble(nodePosition, "Y");
974  int parentID = GetNodeValueInt(cadPropNode, "ParentID");
975  if(parentID == -1) {
976  // If the element has no parent, create a temporary one, remove and delete.
977  Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
978  indMotor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
979  indMotor->StartMove(indMotor->GetPosition());
980  indMotor->Move(wxPoint2DDouble(posX, posY));
981  indMotor->RemoveParent(parent);
982  delete parent;
983  } else {
984  Bus* parent = busList[parentID];
985  indMotor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
986  indMotor->StartMove(indMotor->GetPosition());
987  indMotor->Move(wxPoint2DDouble(posX, posY));
988  }
989  indMotor->SetWidth(width);
990  indMotor->SetHeight(height);
991 
992  int numRot = angle / indMotor->GetRotationAngle();
993  bool clockwise = true;
994  if(numRot < 0) {
995  numRot = std::abs(numRot);
996  clockwise = false;
997  }
998  for(int i = 0; i < numRot; i++) indMotor->Rotate(clockwise);
999 
1000  auto electricalProp = indMotorNode->first_node("ElectricalProperties");
1001  if(!electricalProp) return false;
1002 
1003  indMotor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
1004  IndMotorElectricalData data = indMotor->GetElectricalData();
1005  data.name = electricalProp->first_node("Name")->value();
1006  data.activePower = GetNodeValueDouble(electricalProp, "ActivePower");
1007  data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID");
1008  data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower");
1009  data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
1010 
1011  indMotor->SetElectricalData(data);
1012  elementList.push_back(indMotor);
1013  indMotorList.push_back(indMotor);
1014  indMotorNode = indMotorNode->next_sibling("IndMotor");
1015  } //}
1016 
1017  //{ Inductor
1018  auto inductorListNode = elementsNode->first_node("InductorList");
1019  if(!inductorListNode) return false;
1020  auto inductorNode = inductorListNode->first_node("Inductor");
1021  while(inductorNode) {
1022  Inductor* inductor = new Inductor();
1023 
1024  auto cadPropNode = inductorNode->first_node("CADProperties");
1025  if(!cadPropNode) return false;
1026 
1027  auto position = cadPropNode->first_node("Position");
1028  double posX = GetNodeValueDouble(position, "X");
1029  double posY = GetNodeValueDouble(position, "Y");
1030  auto size = cadPropNode->first_node("Size");
1031  double width = GetNodeValueDouble(size, "Width");
1032  double height = GetNodeValueDouble(size, "Height");
1033  double angle = GetNodeValueDouble(cadPropNode, "Angle");
1034  auto nodePosition = cadPropNode->first_node("NodePosition");
1035  double nodePosX = GetNodeValueDouble(nodePosition, "X");
1036  double nodePosY = GetNodeValueDouble(nodePosition, "Y");
1037  int parentID = GetNodeValueInt(cadPropNode, "ParentID");
1038  if(parentID == -1) {
1039  // If the element has no parent, create a temporary one, remove and delete.
1040  Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
1041  inductor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1042  inductor->StartMove(inductor->GetPosition());
1043  inductor->Move(wxPoint2DDouble(posX, posY));
1044  inductor->RemoveParent(parent);
1045  delete parent;
1046  } else {
1047  Bus* parent = busList[parentID];
1048  inductor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1049  inductor->StartMove(inductor->GetPosition());
1050  inductor->Move(wxPoint2DDouble(posX, posY));
1051  }
1052  inductor->SetWidth(width);
1053  inductor->SetHeight(height);
1054 
1055  int numRot = angle / inductor->GetRotationAngle();
1056  bool clockwise = true;
1057  if(numRot < 0) {
1058  numRot = std::abs(numRot);
1059  clockwise = false;
1060  }
1061  for(int i = 0; i < numRot; i++) inductor->Rotate(clockwise);
1062 
1063  auto electricalProp = inductorNode->first_node("ElectricalProperties");
1064  if(!electricalProp) return false;
1065 
1066  inductor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
1067  InductorElectricalData data = inductor->GetElectricalData();
1068  data.name = electricalProp->first_node("Name")->value();
1069  data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower");
1070  data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
1071 
1072  SwitchingData swData;
1073  auto switchingList = electricalProp->first_node("SwitchingList");
1074  if(!switchingList) return false;
1075  auto swNode = switchingList->first_node("Switching");
1076  while(swNode) {
1077  swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type"));
1078  swData.swTime.push_back(GetNodeValueDouble(swNode, "Time"));
1079  swNode = swNode->next_sibling("Switching");
1080  }
1081  inductor->SetSwitchingData(swData);
1082 
1083  inductor->SetElectricalData(data);
1084 
1085  if(swData.swTime.size() != 0) inductor->SetDynamicEvent(true);
1086 
1087  elementList.push_back(inductor);
1088  inductorList.push_back(inductor);
1089  inductorNode = inductorNode->next_sibling("Inductor");
1090  } //}
1091 
1092  //{ Line
1093  auto lineListNode = elementsNode->first_node("LineList");
1094  if(!lineListNode) return false;
1095  auto lineNode = lineListNode->first_node("Line");
1096  while(lineNode) {
1097  Line* line = new Line();
1098 
1099  auto cadPropNode = lineNode->first_node("CADProperties");
1100  if(!cadPropNode) return false;
1101 
1102  // Get nodes points
1103  std::vector<wxPoint2DDouble> ptsList;
1104  auto nodePosList = cadPropNode->first_node("NodeList");
1105  if(!nodePosList) return false;
1106  auto nodePos = nodePosList->first_node("Node");
1107  while(nodePos) {
1108  double nodePosX = GetNodeValueDouble(nodePos, "X");
1109  double nodePosY = GetNodeValueDouble(nodePos, "Y");
1110  ptsList.push_back(wxPoint2DDouble(nodePosX, nodePosY));
1111  nodePos = nodePos->next_sibling("Node");
1112  }
1113 
1114  // Get parents IDs
1115  auto parentIDList = cadPropNode->first_node("ParentIDList");
1116  if(!parentIDList) return false;
1117  auto parentNode = parentIDList->first_node("ParentID");
1118  long parentID[2] = {-1, -1};
1119  while(parentNode) {
1120  long index = 0;
1121  wxString(parentNode->first_attribute("ID")->value()).ToLong(&index);
1122  wxString(parentNode->value()).ToCLong(&parentID[index]);
1123  parentNode = parentNode->next_sibling("ParentID");
1124  }
1125 
1126  // Set parents (if have)
1127  Bus *parent1, *parent2;
1128  if(parentID[0] == -1) {
1129  parent1 = new Bus(ptsList[0]);
1130  line->AddParent(parent1, ptsList[0]);
1131  } else {
1132  parent1 = busList[parentID[0]];
1133  line->AddParent(parent1, ptsList[0]);
1134  }
1135  if(parentID[1] == -1) {
1136  parent2 = new Bus(ptsList[ptsList.size() - 1]);
1137  line->AddParent(parent2, ptsList[ptsList.size() - 1]);
1138  } else {
1139  parent2 = busList[parentID[1]];
1140  line->AddParent(parent2, ptsList[ptsList.size() - 1]);
1141  }
1142 
1143  // Add the others nodes (if have)
1144  std::vector<wxPoint2DDouble> midPts;
1145  for(int i = 1; i < (int)ptsList.size() - 1; i++) midPts.push_back(ptsList[i]);
1146  std::vector<wxPoint2DDouble> edgesPts = line->GetPointList();
1147  edgesPts.insert(edgesPts.begin() + 2, midPts.begin(), midPts.end());
1148  line->SetPointList(edgesPts);
1149 
1150  if(parentID[0] == -1) {
1151  line->RemoveParent(parent1);
1152  delete parent1;
1153  }
1154  if(parentID[1] == -1) {
1155  line->RemoveParent(parent2);
1156  delete parent2;
1157  }
1158 
1159  auto electricalProp = lineNode->first_node("ElectricalProperties");
1160  if(!electricalProp) return false;
1161 
1162  line->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
1163  LineElectricalData data = line->GetElectricalData();
1164  data.name = electricalProp->first_node("Name")->value();
1165  data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage");
1166  data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID");
1167  data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower");
1168  data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
1169  data.resistance = GetNodeValueDouble(electricalProp, "Resistance");
1170  data.resistanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "Resistance", "UnitID");
1171  data.indReactance = GetNodeValueDouble(electricalProp, "IndReactance");
1172  data.indReactanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "IndReactance", "UnitID");
1173  data.capSusceptance = GetNodeValueDouble(electricalProp, "CapSusceptance");
1174  data.capSusceptanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "CapSusceptance", "UnitID");
1175  data.lineSize = GetNodeValueDouble(electricalProp, "LineSize");
1176  data.useLinePower = GetNodeValueInt(electricalProp, "UseLinePower");
1177 
1178  auto fault = electricalProp->first_node("Fault");
1179  data.zeroResistance = GetNodeValueDouble(fault, "ZeroResistance");
1180  data.zeroIndReactance = GetNodeValueDouble(fault, "ZeroIndReactance");
1181  data.zeroCapSusceptance = GetNodeValueDouble(fault, "ZeroCapSusceptance");
1182 
1183  SwitchingData swData;
1184  auto switchingList = electricalProp->first_node("SwitchingList");
1185  if(!switchingList) return false;
1186  auto swNode = switchingList->first_node("Switching");
1187  while(swNode) {
1188  swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type"));
1189  swData.swTime.push_back(GetNodeValueDouble(swNode, "Time"));
1190  swNode = swNode->next_sibling("Switching");
1191  }
1192  line->SetSwitchingData(swData);
1193 
1194  line->SetElectricalData(data);
1195 
1196  if(swData.swTime.size() != 0) line->SetDynamicEvent(true);
1197 
1198  elementList.push_back(line);
1199  lineList.push_back(line);
1200  lineNode = lineNode->next_sibling("Line");
1201  } //}
1202 
1203  //{ Load
1204  auto loadListNode = elementsNode->first_node("LoadList");
1205  if(!loadListNode) return false;
1206  auto loadNode = loadListNode->first_node("Load");
1207  while(loadNode) {
1208  Load* load = new Load();
1209 
1210  auto cadPropNode = loadNode->first_node("CADProperties");
1211  if(!cadPropNode) return false;
1212 
1213  auto position = cadPropNode->first_node("Position");
1214  double posX = GetNodeValueDouble(position, "X");
1215  double posY = GetNodeValueDouble(position, "Y");
1216  auto size = cadPropNode->first_node("Size");
1217  double width = GetNodeValueDouble(size, "Width");
1218  double height = GetNodeValueDouble(size, "Height");
1219  double angle = GetNodeValueDouble(cadPropNode, "Angle");
1220  auto nodePosition = cadPropNode->first_node("NodePosition");
1221  double nodePosX = GetNodeValueDouble(nodePosition, "X");
1222  double nodePosY = GetNodeValueDouble(nodePosition, "Y");
1223  int parentID = GetNodeValueInt(cadPropNode, "ParentID");
1224  if(parentID == -1) {
1225  // If the element has no parent, create a temporary one, remove and delete.
1226  Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
1227  load->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1228  load->StartMove(load->GetPosition());
1229  load->Move(wxPoint2DDouble(posX, posY));
1230  load->RemoveParent(parent);
1231  delete parent;
1232  } else {
1233  Bus* parent = busList[parentID];
1234  load->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1235  load->StartMove(load->GetPosition());
1236  load->Move(wxPoint2DDouble(posX, posY));
1237  }
1238  load->SetWidth(width);
1239  load->SetHeight(height);
1240 
1241  int numRot = angle / load->GetRotationAngle();
1242  bool clockwise = true;
1243  if(numRot < 0) {
1244  numRot = std::abs(numRot);
1245  clockwise = false;
1246  }
1247  for(int i = 0; i < numRot; i++) load->Rotate(clockwise);
1248 
1249  auto electricalProp = loadNode->first_node("ElectricalProperties");
1250  if(!electricalProp) return false;
1251 
1252  load->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
1253  LoadElectricalData data = load->GetElectricalData();
1254  data.name = electricalProp->first_node("Name")->value();
1255  data.activePower = GetNodeValueDouble(electricalProp, "ActivePower");
1256  data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID");
1257  data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower");
1258  data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
1259  data.loadType = (LoadType)GetNodeValueInt(electricalProp, "LoadType");
1260 
1261  SwitchingData swData;
1262  auto switchingList = electricalProp->first_node("SwitchingList");
1263  if(!switchingList) return false;
1264  auto swNode = switchingList->first_node("Switching");
1265  while(swNode) {
1266  swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type"));
1267  swData.swTime.push_back(GetNodeValueDouble(swNode, "Time"));
1268  swNode = swNode->next_sibling("Switching");
1269  }
1270  load->SetSwitchingData(swData);
1271 
1272  load->SetElectricalData(data);
1273 
1274  if(swData.swTime.size() != 0) load->SetDynamicEvent(true);
1275 
1276  elementList.push_back(load);
1277  loadList.push_back(load);
1278  loadNode = loadNode->next_sibling("Load");
1279  } //}
1280 
1281  //{ SyncGenerator
1282  auto syncGeneratorListNode = elementsNode->first_node("SyncGeneratorList");
1283  if(!syncGeneratorListNode) return false;
1284  auto syncGeneratorNode = syncGeneratorListNode->first_node("SyncGenerator");
1285  while(syncGeneratorNode) {
1286  SyncGenerator* syncGenerator = new SyncGenerator();
1287 
1288  auto cadPropNode = syncGeneratorNode->first_node("CADProperties");
1289  if(!cadPropNode) return false;
1290 
1291  auto position = cadPropNode->first_node("Position");
1292  double posX = GetNodeValueDouble(position, "X");
1293  double posY = GetNodeValueDouble(position, "Y");
1294  auto size = cadPropNode->first_node("Size");
1295  double width = GetNodeValueDouble(size, "Width");
1296  double height = GetNodeValueDouble(size, "Height");
1297  double angle = GetNodeValueDouble(cadPropNode, "Angle");
1298  auto nodePosition = cadPropNode->first_node("NodePosition");
1299  double nodePosX = GetNodeValueDouble(nodePosition, "X");
1300  double nodePosY = GetNodeValueDouble(nodePosition, "Y");
1301  int parentID = GetNodeValueInt(cadPropNode, "ParentID");
1302  if(parentID == -1) {
1303  // If the element has no parent, create a temporary one, remove and delete.
1304  Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
1305  syncGenerator->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1306  syncGenerator->StartMove(syncGenerator->GetPosition());
1307  syncGenerator->Move(wxPoint2DDouble(posX, posY));
1308  syncGenerator->RemoveParent(parent);
1309  delete parent;
1310  } else {
1311  Bus* parent = busList[parentID];
1312  syncGenerator->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1313  syncGenerator->StartMove(syncGenerator->GetPosition());
1314  syncGenerator->Move(wxPoint2DDouble(posX, posY));
1315  }
1316  syncGenerator->SetWidth(width);
1317  syncGenerator->SetHeight(height);
1318 
1319  int numRot = angle / syncGenerator->GetRotationAngle();
1320  bool clockwise = true;
1321  if(numRot < 0) {
1322  numRot = std::abs(numRot);
1323  clockwise = false;
1324  }
1325  for(int i = 0; i < numRot; i++) syncGenerator->Rotate(clockwise);
1326 
1327  auto electricalProp = syncGeneratorNode->first_node("ElectricalProperties");
1328  if(!electricalProp) return false;
1329 
1330  syncGenerator->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
1331  SyncGeneratorElectricalData data = syncGenerator->GetElectricalData();
1332  data.name = electricalProp->first_node("Name")->value();
1333  data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower");
1334  data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
1335  data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage");
1336  data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID");
1337  data.activePower = GetNodeValueDouble(electricalProp, "ActivePower");
1338  data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID");
1339  data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower");
1340  data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
1341  data.haveMaxReactive = GetNodeValueInt(electricalProp, "HaveMaxReactive");
1342  data.maxReactive = GetNodeValueDouble(electricalProp, "MaxReactive");
1343  data.maxReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MaxReactive", "UnitID");
1344  data.haveMinReactive = GetNodeValueInt(electricalProp, "HaveMinReactive");
1345  data.minReactive = GetNodeValueDouble(electricalProp, "MinReactive");
1346  data.minReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MinReactive", "UnitID");
1347  data.useMachineBase = GetNodeValueInt(electricalProp, "UseMachineBase");
1348 
1349  auto fault = electricalProp->first_node("Fault");
1350  if(!fault) return false;
1351  data.positiveResistance = GetNodeValueDouble(fault, "PositiveResistance");
1352  data.positiveReactance = GetNodeValueDouble(fault, "PositiveReactance");
1353  data.negativeResistance = GetNodeValueDouble(fault, "NegativeResistance");
1354  data.negativeReactance = GetNodeValueDouble(fault, "NegativeReactance");
1355  data.zeroResistance = GetNodeValueDouble(fault, "ZeroResistance");
1356  data.zeroReactance = GetNodeValueDouble(fault, "ZeroReactance");
1357  data.groundResistance = GetNodeValueDouble(fault, "GroundResistance");
1358  data.groundReactance = GetNodeValueDouble(fault, "GroundReactance");
1359  data.groundNeutral = GetNodeValueInt(fault, "GroundNeutral");
1360 
1361  auto stability = electricalProp->first_node("Stability");
1362  if(!stability) return false;
1363  data.plotSyncMachine = GetNodeValueInt(stability, "PlotSyncMachine");
1364  data.inertia = GetNodeValueDouble(stability, "Inertia");
1365  data.damping = GetNodeValueDouble(stability, "Damping");
1366  data.useAVR = GetNodeValueInt(stability, "UseAVR");
1367  data.useSpeedGovernor = GetNodeValueInt(stability, "UseSpeedGovernor");
1368  data.armResistance = GetNodeValueDouble(stability, "ArmResistance");
1369  data.potierReactance = GetNodeValueDouble(stability, "PotierReactance");
1370  data.satFactor = GetNodeValueDouble(stability, "SatFactor");
1371  data.syncXd = GetNodeValueDouble(stability, "SyncXd");
1372  data.syncXq = GetNodeValueDouble(stability, "SyncXq");
1373  data.transXd = GetNodeValueDouble(stability, "TransXd");
1374  data.transXq = GetNodeValueDouble(stability, "TransXq");
1375  data.transTd0 = GetNodeValueDouble(stability, "TransTd0");
1376  data.transTq0 = GetNodeValueDouble(stability, "TransTq0");
1377  data.subXd = GetNodeValueDouble(stability, "SubXd");
1378  data.subXq = GetNodeValueDouble(stability, "SubXq");
1379  data.subTd0 = GetNodeValueDouble(stability, "SubTd0");
1380  data.subTq0 = GetNodeValueDouble(stability, "SubTq0");
1381 
1382  auto avr = stability->first_node("AVR");
1383  if(!avr) return false;
1384  if(!OpenControlElements(doc, avr, data.avr)) return false;
1385 
1386  auto speedGov = stability->first_node("SpeedGovernor");
1387  if(!speedGov) return false;
1388  if(!OpenControlElements(doc, speedGov, data.speedGov)) return false;
1389 
1390  SwitchingData swData;
1391  auto switchingList = electricalProp->first_node("SwitchingList");
1392  if(!switchingList) return false;
1393  auto swNode = switchingList->first_node("Switching");
1394  while(swNode) {
1395  swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type"));
1396  swData.swTime.push_back(GetNodeValueDouble(swNode, "Time"));
1397  swNode = swNode->next_sibling("Switching");
1398  }
1399  syncGenerator->SetSwitchingData(swData);
1400 
1401  syncGenerator->SetElectricalData(data);
1402 
1403  if(swData.swTime.size() != 0) syncGenerator->SetDynamicEvent(true);
1404 
1405  elementList.push_back(syncGenerator);
1406  syncGeneratorList.push_back(syncGenerator);
1407  syncGeneratorNode = syncGeneratorNode->next_sibling("SyncGenerator");
1408  } //}
1409 
1410  //{ SyncMotor
1411  auto syncMotorListNode = elementsNode->first_node("SyncMotorList");
1412  if(!syncMotorListNode) return false;
1413  auto syncMotorNode = syncMotorListNode->first_node("SyncMotor");
1414  while(syncMotorNode) {
1415  SyncMotor* syncMotor = new SyncMotor();
1416 
1417  auto cadPropNode = syncMotorNode->first_node("CADProperties");
1418  if(!cadPropNode) return false;
1419 
1420  auto position = cadPropNode->first_node("Position");
1421  double posX = GetNodeValueDouble(position, "X");
1422  double posY = GetNodeValueDouble(position, "Y");
1423  auto size = cadPropNode->first_node("Size");
1424  double width = GetNodeValueDouble(size, "Width");
1425  double height = GetNodeValueDouble(size, "Height");
1426  double angle = GetNodeValueDouble(cadPropNode, "Angle");
1427  auto nodePosition = cadPropNode->first_node("NodePosition");
1428  double nodePosX = GetNodeValueDouble(nodePosition, "X");
1429  double nodePosY = GetNodeValueDouble(nodePosition, "Y");
1430  int parentID = GetNodeValueInt(cadPropNode, "ParentID");
1431  if(parentID == -1) {
1432  // If the element has no parent, create a temporary one, remove and delete.
1433  Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
1434  syncMotor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1435  syncMotor->StartMove(syncMotor->GetPosition());
1436  syncMotor->Move(wxPoint2DDouble(posX, posY));
1437  syncMotor->RemoveParent(parent);
1438  delete parent;
1439  } else {
1440  Bus* parent = busList[parentID];
1441  syncMotor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
1442  syncMotor->StartMove(syncMotor->GetPosition());
1443  syncMotor->Move(wxPoint2DDouble(posX, posY));
1444  }
1445  syncMotor->SetWidth(width);
1446  syncMotor->SetHeight(height);
1447 
1448  int numRot = angle / syncMotor->GetRotationAngle();
1449  bool clockwise = true;
1450  if(numRot < 0) {
1451  numRot = std::abs(numRot);
1452  clockwise = false;
1453  }
1454  for(int i = 0; i < numRot; i++) syncMotor->Rotate(clockwise);
1455 
1456  auto electricalProp = syncMotorNode->first_node("ElectricalProperties");
1457  if(!electricalProp) return false;
1458 
1459  syncMotor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
1460  SyncMotorElectricalData data = syncMotor->GetElectricalData();
1461  data.name = electricalProp->first_node("Name")->value();
1462  data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower");
1463  data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
1464  // data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage");
1465  // data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID");
1466  data.activePower = GetNodeValueDouble(electricalProp, "ActivePower");
1467  data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID");
1468  data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower");
1469  data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
1470  data.haveMaxReactive = GetNodeValueInt(electricalProp, "HaveMaxReactive");
1471  data.maxReactive = GetNodeValueDouble(electricalProp, "MaxReactive");
1472  data.maxReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MaxReactive", "UnitID");
1473  data.haveMinReactive = GetNodeValueInt(electricalProp, "HaveMinReactive");
1474  data.minReactive = GetNodeValueDouble(electricalProp, "MinReactive");
1475  data.minReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MinReactive", "UnitID");
1476  data.useMachineBase = GetNodeValueInt(electricalProp, "UseMachineBase");
1477 
1478  auto fault = electricalProp->first_node("Fault");
1479  if(!fault) return false;
1480  data.positiveResistance = GetNodeValueDouble(fault, "PositiveResistance");
1481  data.positiveReactance = GetNodeValueDouble(fault, "PositiveReactance");
1482  data.negativeResistance = GetNodeValueDouble(fault, "NegativeResistance");
1483  data.negativeReactance = GetNodeValueDouble(fault, "NegativeReactance");
1484  data.zeroResistance = GetNodeValueDouble(fault, "ZeroResistance");
1485  data.zeroReactance = GetNodeValueDouble(fault, "ZeroReactance");
1486  data.groundResistance = GetNodeValueDouble(fault, "GroundResistance");
1487  data.groundReactance = GetNodeValueDouble(fault, "GroundReactance");
1488  data.groundNeutral = GetNodeValueInt(fault, "GroundNeutral");
1489 
1490  /*SwitchingData swData;
1491  auto switchingList = electricalProp->first_node("SwitchingList");
1492  if(!switchingList) return false;
1493  auto swNode = switchingList->first_node("Switching");
1494  while(swNode) {
1495  swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type"));
1496  swData.swTime.push_back(GetNodeValueDouble(swNode, "Time"));
1497  swNode = swNode->next_sibling("Switching");
1498  }
1499  syncMotor->SetSwitchingData(swData);*/
1500 
1501  syncMotor->SetElectricalData(data);
1502  elementList.push_back(syncMotor);
1503  syncMotorList.push_back(syncMotor);
1504  syncMotorNode = syncMotorNode->next_sibling("SyncMotor");
1505  } //}
1506 
1507  //{ Transformer
1508  auto transformerListNode = elementsNode->first_node("TransformerList");
1509  if(!transformerListNode) return false;
1510  auto transfomerNode = transformerListNode->first_node("Transfomer");
1511  while(transfomerNode) {
1512  Transformer* transformer = new Transformer();
1513 
1514  auto cadPropNode = transfomerNode->first_node("CADProperties");
1515  if(!cadPropNode) return false;
1516 
1517  auto position = cadPropNode->first_node("Position");
1518  double posX = GetNodeValueDouble(position, "X");
1519  double posY = GetNodeValueDouble(position, "Y");
1520  auto size = cadPropNode->first_node("Size");
1521  double width = GetNodeValueDouble(size, "Width");
1522  double height = GetNodeValueDouble(size, "Height");
1523  double angle = GetNodeValueDouble(cadPropNode, "Angle");
1524 
1525  // Get nodes points
1526  std::vector<wxPoint2DDouble> ptsList;
1527  auto nodePosList = cadPropNode->first_node("NodeList");
1528  if(!nodePosList) return false;
1529  auto nodePos = nodePosList->first_node("Node");
1530  while(nodePos) {
1531  double nodePosX = GetNodeValueDouble(nodePos, "X");
1532  double nodePosY = GetNodeValueDouble(nodePos, "Y");
1533  ptsList.push_back(wxPoint2DDouble(nodePosX, nodePosY));
1534  nodePos = nodePos->next_sibling("Node");
1535  }
1536 
1537  // Get parents IDs
1538  auto parentIDList = cadPropNode->first_node("ParentIDList");
1539  if(!parentIDList) return false;
1540  auto parentNode = parentIDList->first_node("ParentID");
1541  long parentID[2] = {-1, -1};
1542  while(parentNode) {
1543  long index = 0;
1544  wxString(parentNode->first_attribute("ID")->value()).ToLong(&index);
1545  wxString(parentNode->value()).ToCLong(&parentID[index]);
1546  parentNode = parentNode->next_sibling("ParentID");
1547  }
1548 
1549  // Set parents (if have)
1550  Bus *parent1, *parent2;
1551  if(parentID[0] == -1) {
1552  parent1 = new Bus(ptsList[0]);
1553  transformer->AddParent(parent1, ptsList[0]);
1554  } else {
1555  parent1 = busList[parentID[0]];
1556  transformer->AddParent(parent1, ptsList[0]);
1557  }
1558  if(parentID[1] == -1) {
1559  parent2 = new Bus(ptsList[ptsList.size() - 1]);
1560  transformer->AddParent(parent2, ptsList[ptsList.size() - 1]);
1561  } else {
1562  parent2 = busList[parentID[1]];
1563  transformer->AddParent(parent2, ptsList[ptsList.size() - 1]);
1564  }
1565 
1566  transformer->StartMove(transformer->GetPosition());
1567  transformer->Move(wxPoint2DDouble(posX, posY));
1568 
1569  if(parentID[0] == -1) {
1570  transformer->RemoveParent(parent1);
1571  delete parent1;
1572  }
1573  if(parentID[1] == -1) {
1574  transformer->RemoveParent(parent2);
1575  delete parent2;
1576  }
1577 
1578  transformer->SetWidth(width);
1579  transformer->SetHeight(height);
1580 
1581  int numRot = angle / transformer->GetRotationAngle();
1582  bool clockwise = true;
1583  if(numRot < 0) {
1584  numRot = std::abs(numRot);
1585  clockwise = false;
1586  }
1587  for(int i = 0; i < numRot; i++) transformer->Rotate(clockwise);
1588 
1589  auto electricalProp = transfomerNode->first_node("ElectricalProperties");
1590  if(!electricalProp) return false;
1591 
1592  transformer->SetOnline(GetNodeValueInt(electricalProp, "IsOnline"));
1593  TransformerElectricalData data = transformer->GetElectricalData();
1594  data.name = electricalProp->first_node("Name")->value();
1595  data.primaryNominalVoltage = GetNodeValueDouble(electricalProp, "PrimaryNominalVoltage");
1596  data.primaryNominalVoltageUnit =
1597  (ElectricalUnit)GetAttributeValueInt(electricalProp, "PrimaryNominalVoltage", "UnitID");
1598  data.secondaryNominalVoltage = GetNodeValueDouble(electricalProp, "SecondaryNominalVoltage");
1599  data.secondaryNominalVoltageUnit =
1600  (ElectricalUnit)GetAttributeValueInt(electricalProp, "SecondaryNominalVoltage", "UnitID");
1601  data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower");
1602  data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
1603  data.resistance = GetNodeValueDouble(electricalProp, "Resistance");
1604  data.resistanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "Resistance", "UnitID");
1605  data.indReactance = GetNodeValueDouble(electricalProp, "IndReactance");
1606  data.indReactanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "IndReactance", "UnitID");
1607  data.connection = (TransformerConnection)GetNodeValueInt(electricalProp, "Connection");
1608  data.turnsRatio = GetNodeValueDouble(electricalProp, "TurnsRatio");
1609  data.phaseShift = GetNodeValueDouble(electricalProp, "PhaseShift");
1610  data.useTransformerPower = GetNodeValueInt(electricalProp, "UseTransfomerPower");
1611 
1612  auto fault = electricalProp->first_node("Fault");
1613  data.zeroResistance = GetNodeValueDouble(fault, "ZeroResistance");
1614  data.zeroIndReactance = GetNodeValueDouble(fault, "ZeroIndReactance");
1615  data.primaryGrndResistance = GetNodeValueDouble(fault, "PrimaryGrndResistance");
1616  data.primaryGrndReactance = GetNodeValueDouble(fault, "PrimaryGrndReactance");
1617  data.secondaryGrndResistance = GetNodeValueDouble(fault, "SecondaryGrndResistance");
1618  data.secondaryGrndReactance = GetNodeValueDouble(fault, "SecondaryGrndReactance");
1619 
1620  SwitchingData swData;
1621  auto switchingList = electricalProp->first_node("SwitchingList");
1622  if(!switchingList) return false;
1623  auto swNode = switchingList->first_node("Switching");
1624  while(swNode) {
1625  swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type"));
1626  swData.swTime.push_back(GetNodeValueDouble(swNode, "Time"));
1627  swNode = swNode->next_sibling("Switching");
1628  }
1629  transformer->SetSwitchingData(swData);
1630 
1631  transformer->SetElectricaData(data);
1632 
1633  if(swData.swTime.size() != 0) transformer->SetDynamicEvent(true);
1634 
1635  elementList.push_back(transformer);
1636  transformerList.push_back(transformer);
1637  transfomerNode = transfomerNode->next_sibling("Transfomer");
1638  } //}
1639 
1640  m_workspace->SetElementList(elementList);
1641 
1642  //{ Text
1643  auto textListNode = elementsNode->first_node("TextList");
1644  if(!textListNode) return false;
1645  auto textNode = textListNode->first_node("Text");
1646  while(textNode) {
1647  auto cadPropNode = textNode->first_node("CADProperties");
1648  if(!cadPropNode) return false;
1649 
1650  auto position = cadPropNode->first_node("Position");
1651  double posX = GetNodeValueDouble(position, "X");
1652  double posY = GetNodeValueDouble(position, "Y");
1653  auto size = cadPropNode->first_node("Size");
1654  double width = GetNodeValueDouble(size, "Width");
1655  double height = GetNodeValueDouble(size, "Height");
1656  double angle = GetNodeValueDouble(cadPropNode, "Angle");
1657 
1658  Text* text = new Text(wxPoint2DDouble(posX, posY));
1659 
1660  text->SetWidth(width);
1661  text->SetHeight(height);
1662 
1663  auto textProperties = textNode->first_node("TextProperties");
1664  if(!textProperties) return false;
1665 
1666  text->SetElementType((ElementType)GetNodeValueDouble(textProperties, "ElementType"));
1667  text->SetDataType((DataType)GetNodeValueDouble(textProperties, "DataType"));
1668  text->SetUnit((ElectricalUnit)GetNodeValueDouble(textProperties, "DataUnit"));
1669  text->SetDirection(GetNodeValueDouble(textProperties, "Direction"));
1670  text->SetDecimalPlaces(GetNodeValueDouble(textProperties, "DecimalPlaces"));
1671 
1672  text->SetElementNumber(GetNodeValueInt(textProperties, "ElementNumber"));
1673  switch(text->GetElementType()) {
1674  case TYPE_NONE:
1675  break;
1676  case TYPE_BUS: {
1677  Bus* bus = busList[text->GetElementNumber()];
1678  text->SetElement(bus);
1679  } break;
1680  case TYPE_CAPACITOR: {
1681  Capacitor* capacitor = capacitorList[text->GetElementNumber()];
1682  text->SetElement(capacitor);
1683  } break;
1684  case TYPE_IND_MOTOR: {
1685  IndMotor* indMotor = indMotorList[text->GetElementNumber()];
1686  text->SetElement(indMotor);
1687  } break;
1688  case TYPE_INDUCTOR: {
1689  Inductor* inductor = inductorList[text->GetElementNumber()];
1690  text->SetElement(inductor);
1691  } break;
1692  case TYPE_LINE: {
1693  Line* line = lineList[text->GetElementNumber()];
1694  text->SetElement(line);
1695  } break;
1696  case TYPE_LOAD: {
1697  Load* load = loadList[text->GetElementNumber()];
1698  text->SetElement(load);
1699  } break;
1700  case TYPE_SYNC_GENERATOR: {
1701  SyncGenerator* syncGenerator = syncGeneratorList[text->GetElementNumber()];
1702  text->SetElement(syncGenerator);
1703  } break;
1704  case TYPE_SYNC_MOTOR: {
1705  SyncMotor* syncMotor = syncMotorList[text->GetElementNumber()];
1706  text->SetElement(syncMotor);
1707  } break;
1708  case TYPE_TRANSFORMER: {
1709  Transformer* transformer = transformerList[text->GetElementNumber()];
1710  text->SetElement(transformer);
1711  } break;
1712  }
1713 
1714  int numRot = angle / text->GetRotationAngle();
1715  bool clockwise = true;
1716  if(numRot < 0) {
1717  numRot = std::abs(numRot);
1718  clockwise = false;
1719  }
1720  for(int i = 0; i < numRot; i++) text->Rotate(clockwise);
1721 
1722  textList.push_back(text);
1723  textNode = textNode->next_sibling("Text");
1724  } //}
1725 
1726  m_workspace->SetTextList(textList);
1727  return true;
1728 }
1729 
1730 void FileHanding::SaveControl(wxFileName path)
1731 {
1732  // Same process present in SaveProject():
1733  std::ofstream writeProjectsFile(path.GetFullPath());
1734  writeProjectsFile.close();
1735 
1736  rapidxml::xml_document<> doc;
1737  rapidxml::file<> xmlFile(path.GetFullPath().mb_str());
1738  doc.parse<0>(xmlFile.data());
1739 
1740  rapidxml::xml_node<>* decl = doc.allocate_node(rapidxml::node_declaration);
1741  rapidxml::xml_attribute<>* ver = doc.allocate_attribute("version", "1.0");
1742  rapidxml::xml_attribute<>* encoding = doc.allocate_attribute("encoding", "utf-8");
1743  decl->append_attribute(ver);
1744  decl->append_attribute(encoding);
1745  doc.append_node(decl);
1746 
1747  rapidxml::xml_node<>* rootNode = doc.allocate_node(rapidxml::node_element, "Control");
1748  doc.append_node(rootNode);
1749 
1750  rapidxml::xml_node<>* projectNameNode = AppendNode(doc, rootNode, "Name");
1751  SetNodeValue(doc, projectNameNode, path.GetName());
1752 
1753  auto elementsNode = AppendNode(doc, rootNode, "ControlElements");
1754  SaveControlElements(doc, elementsNode);
1755  std::ofstream writeXML(path.GetFullPath());
1756  writeXML << doc;
1757  writeXML.close();
1758 }
1759 
1760 bool FileHanding::OpenControl(wxFileName path,
1761  std::vector<ControlElement*>& ctrlElementList,
1762  std::vector<ConnectionLine*>& ctrlConnectionList)
1763 {
1764  rapidxml::xml_document<> doc;
1765  rapidxml::file<> xmlFile(path.GetFullPath().mb_str());
1766 
1767  doc.parse<0>(xmlFile.data());
1768 
1769  auto projectNode = doc.first_node("Control");
1770  if(!projectNode) return false;
1771  // auto nameNode = projectNode->first_node("Name");
1772  // if(!nameNode) return false;
1773  // m_controlEditor->SetName(nameNode->value());
1774 
1775  // Open elements
1776  auto elementsNode = projectNode->first_node("ControlElements");
1777  if(!elementsNode) return false;
1778 
1779  // auto elementsNode = AppendNode(doc, rootNode, "ControlElements");
1780  ControlElementContainer* ctrlElementContainer = new ControlElementContainer();
1781  if(!OpenControlElements(doc, elementsNode, ctrlElementContainer)) return false;
1782  ctrlElementList = ctrlElementContainer->GetControlElementsList();
1783  ctrlConnectionList = ctrlElementContainer->GetConnectionLineList();
1784  return true;
1785 }
1786 
1787 void FileHanding::SaveControlElements(rapidxml::xml_document<>& doc,
1788  rapidxml::xml_node<>* elementsNode,
1789  ControlElementContainer* ctrlContainer)
1790 {
1791  if(!ctrlContainer) {
1792  ctrlContainer = new ControlElementContainer();
1793  ctrlContainer->FillContainer(m_controlEditor);
1794  }
1795 
1796  //{ Constant
1797  auto constsNode = AppendNode(doc, elementsNode, "ConstantList");
1798  auto constList = ctrlContainer->GetConstantList();
1799  for(auto it = constList.begin(), itEnd = constList.end(); it != itEnd; ++it) {
1800  Constant* constant = *it;
1801  auto constNode = AppendNode(doc, constsNode, "Constant");
1802  SetNodeAttribute(doc, constNode, "ID", constant->GetID());
1803  auto cadProp = AppendNode(doc, constNode, "CADProperties");
1804  auto position = AppendNode(doc, cadProp, "Position");
1805  auto posX = AppendNode(doc, position, "X");
1806  SetNodeValue(doc, posX, constant->GetPosition().m_x);
1807  auto posY = AppendNode(doc, position, "Y");
1808  SetNodeValue(doc, posY, constant->GetPosition().m_y);
1809  auto size = AppendNode(doc, cadProp, "Size");
1810  auto width = AppendNode(doc, size, "Width");
1811  SetNodeValue(doc, width, constant->GetWidth());
1812  auto height = AppendNode(doc, size, "Height");
1813  SetNodeValue(doc, height, constant->GetHeight());
1814  auto angle = AppendNode(doc, cadProp, "Angle");
1815  SetNodeValue(doc, angle, constant->GetAngle());
1816 
1817  // Nodes
1818  auto nodeList = AppendNode(doc, constNode, "NodeList");
1819  SaveControlNodes(doc, nodeList, constant->GetNodeList());
1820 
1821  // Control properties
1822  auto value = AppendNode(doc, constNode, "Value");
1823  SetNodeValue(doc, value, constant->GetValue());
1824  } //}
1825 
1826  //{ Exponential
1827  auto expsNode = AppendNode(doc, elementsNode, "ExponentialList");
1828  auto expList = ctrlContainer->GetExponentialList();
1829  for(auto it = expList.begin(), itEnd = expList.end(); it != itEnd; ++it) {
1830  Exponential* exponential = *it;
1831  auto expNode = AppendNode(doc, expsNode, "Exponential");
1832  SetNodeAttribute(doc, expNode, "ID", exponential->GetID());
1833  auto cadProp = AppendNode(doc, expNode, "CADProperties");
1834  auto position = AppendNode(doc, cadProp, "Position");
1835  auto posX = AppendNode(doc, position, "X");
1836  SetNodeValue(doc, posX, exponential->GetPosition().m_x);
1837  auto posY = AppendNode(doc, position, "Y");
1838  SetNodeValue(doc, posY, exponential->GetPosition().m_y);
1839  auto size = AppendNode(doc, cadProp, "Size");
1840  auto width = AppendNode(doc, size, "Width");
1841  SetNodeValue(doc, width, exponential->GetWidth());
1842  auto height = AppendNode(doc, size, "Height");
1843  SetNodeValue(doc, height, exponential->GetHeight());
1844  auto angle = AppendNode(doc, cadProp, "Angle");
1845  SetNodeValue(doc, angle, exponential->GetAngle());
1846 
1847  // Nodes
1848  auto nodeList = AppendNode(doc, expNode, "NodeList");
1849  SaveControlNodes(doc, nodeList, exponential->GetNodeList());
1850 
1851  // Control properties
1852  double a, b;
1853  exponential->GetValues(a, b);
1854  auto value = AppendNode(doc, expNode, "Value");
1855  auto aValue = AppendNode(doc, value, "A");
1856  SetNodeValue(doc, aValue, a);
1857  auto bValue = AppendNode(doc, value, "B");
1858  SetNodeValue(doc, bValue, b);
1859  } //}
1860 
1861  //{ Gain
1862  auto gainsNode = AppendNode(doc, elementsNode, "GainList");
1863  auto gainList = ctrlContainer->GetGainList();
1864  for(auto it = gainList.begin(), itEnd = gainList.end(); it != itEnd; ++it) {
1865  Gain* gain = *it;
1866  auto gainNode = AppendNode(doc, gainsNode, "Gain");
1867  SetNodeAttribute(doc, gainNode, "ID", gain->GetID());
1868  auto cadProp = AppendNode(doc, gainNode, "CADProperties");
1869  auto position = AppendNode(doc, cadProp, "Position");
1870  auto posX = AppendNode(doc, position, "X");
1871  SetNodeValue(doc, posX, gain->GetPosition().m_x);
1872  auto posY = AppendNode(doc, position, "Y");
1873  SetNodeValue(doc, posY, gain->GetPosition().m_y);
1874  auto size = AppendNode(doc, cadProp, "Size");
1875  auto width = AppendNode(doc, size, "Width");
1876  SetNodeValue(doc, width, gain->GetWidth());
1877  auto height = AppendNode(doc, size, "Height");
1878  SetNodeValue(doc, height, gain->GetHeight());
1879  auto angle = AppendNode(doc, cadProp, "Angle");
1880  SetNodeValue(doc, angle, gain->GetAngle());
1881 
1882  // Nodes
1883  auto nodeList = AppendNode(doc, gainNode, "NodeList");
1884  SaveControlNodes(doc, nodeList, gain->GetNodeList());
1885 
1886  // Control properties
1887  auto value = AppendNode(doc, gainNode, "Value");
1888  SetNodeValue(doc, value, gain->GetValue());
1889  } //}
1890 
1891  //{ IO
1892  auto iosNode = AppendNode(doc, elementsNode, "IOList");
1893  auto ioList = ctrlContainer->GetIOControlList();
1894  for(auto it = ioList.begin(), itEnd = ioList.end(); it != itEnd; ++it) {
1895  IOControl* io = *it;
1896  auto ioNode = AppendNode(doc, iosNode, "IO");
1897  SetNodeAttribute(doc, ioNode, "ID", io->GetID());
1898  auto cadProp = AppendNode(doc, ioNode, "CADProperties");
1899  auto position = AppendNode(doc, cadProp, "Position");
1900  auto posX = AppendNode(doc, position, "X");
1901  SetNodeValue(doc, posX, io->GetPosition().m_x);
1902  auto posY = AppendNode(doc, position, "Y");
1903  SetNodeValue(doc, posY, io->GetPosition().m_y);
1904  auto size = AppendNode(doc, cadProp, "Size");
1905  auto width = AppendNode(doc, size, "Width");
1906  SetNodeValue(doc, width, io->GetWidth());
1907  auto height = AppendNode(doc, size, "Height");
1908  SetNodeValue(doc, height, io->GetHeight());
1909  auto angle = AppendNode(doc, cadProp, "Angle");
1910  SetNodeValue(doc, angle, io->GetAngle());
1911 
1912  // Nodes
1913  auto nodeList = AppendNode(doc, ioNode, "NodeList");
1914  SaveControlNodes(doc, nodeList, io->GetNodeList());
1915 
1916  // Control properties
1917  auto value = AppendNode(doc, ioNode, "Value");
1918  SetNodeValue(doc, value, io->GetValue());
1919  auto ioFlags = AppendNode(doc, ioNode, "IOFlags");
1920  SetNodeValue(doc, ioFlags, io->GetIOFlags());
1921  } //}
1922 
1923  //{ Limiter
1924  auto limitersNode = AppendNode(doc, elementsNode, "LimiterList");
1925  auto limiterList = ctrlContainer->GetLimiterList();
1926  for(auto it = limiterList.begin(), itEnd = limiterList.end(); it != itEnd; ++it) {
1927  Limiter* limiter = *it;
1928  auto limiterNode = AppendNode(doc, limitersNode, "Limiter");
1929  SetNodeAttribute(doc, limiterNode, "ID", limiter->GetID());
1930  auto cadProp = AppendNode(doc, limiterNode, "CADProperties");
1931  auto position = AppendNode(doc, cadProp, "Position");
1932  auto posX = AppendNode(doc, position, "X");
1933  SetNodeValue(doc, posX, limiter->GetPosition().m_x);
1934  auto posY = AppendNode(doc, position, "Y");
1935  SetNodeValue(doc, posY, limiter->GetPosition().m_y);
1936  auto size = AppendNode(doc, cadProp, "Size");
1937  auto width = AppendNode(doc, size, "Width");
1938  SetNodeValue(doc, width, limiter->GetWidth());
1939  auto height = AppendNode(doc, size, "Height");
1940  SetNodeValue(doc, height, limiter->GetHeight());
1941  auto angle = AppendNode(doc, cadProp, "Angle");
1942  SetNodeValue(doc, angle, limiter->GetAngle());
1943 
1944  // Nodes
1945  auto nodeList = AppendNode(doc, limiterNode, "NodeList");
1946  SaveControlNodes(doc, nodeList, limiter->GetNodeList());
1947 
1948  // Control properties
1949  auto upLimit = AppendNode(doc, limiterNode, "UpperLimit");
1950  SetNodeValue(doc, upLimit, limiter->GetUpLimit());
1951  auto lowLimit = AppendNode(doc, limiterNode, "LowerLimit");
1952  SetNodeValue(doc, lowLimit, limiter->GetLowLimit());
1953  } //}
1954 
1955  //{ Multiplier
1956  auto multipliersNode = AppendNode(doc, elementsNode, "MultiplierList");
1957  auto multiplierList = ctrlContainer->GetMultiplierList();
1958  for(auto it = multiplierList.begin(), itEnd = multiplierList.end(); it != itEnd; ++it) {
1959  Multiplier* multiplier = *it;
1960  auto multiplierNode = AppendNode(doc, multipliersNode, "Multiplier");
1961  SetNodeAttribute(doc, multiplierNode, "ID", multiplier->GetID());
1962  auto cadProp = AppendNode(doc, multiplierNode, "CADProperties");
1963  auto position = AppendNode(doc, cadProp, "Position");
1964  auto posX = AppendNode(doc, position, "X");
1965  SetNodeValue(doc, posX, multiplier->GetPosition().m_x);
1966  auto posY = AppendNode(doc, position, "Y");
1967  SetNodeValue(doc, posY, multiplier->GetPosition().m_y);
1968  auto size = AppendNode(doc, cadProp, "Size");
1969  auto width = AppendNode(doc, size, "Width");
1970  SetNodeValue(doc, width, multiplier->GetWidth());
1971  auto height = AppendNode(doc, size, "Height");
1972  SetNodeValue(doc, height, multiplier->GetHeight());
1973  auto angle = AppendNode(doc, cadProp, "Angle");
1974  SetNodeValue(doc, angle, multiplier->GetAngle());
1975 
1976  // Nodes
1977  auto nodeList = AppendNode(doc, multiplierNode, "NodeList");
1978  SaveControlNodes(doc, nodeList, multiplier->GetNodeList());
1979  } //}
1980 
1981  //{ Rate limiter
1982  auto rateLimitersNode = AppendNode(doc, elementsNode, "RateLimiterList");
1983  auto rateLimiterList = ctrlContainer->GetRateLimiterList();
1984  for(auto it = rateLimiterList.begin(), itEnd = rateLimiterList.end(); it != itEnd; ++it) {
1985  RateLimiter* rateLimiter = *it;
1986  auto rateLimiterNode = AppendNode(doc, rateLimitersNode, "RateLimiter");
1987  SetNodeAttribute(doc, rateLimiterNode, "ID", rateLimiter->GetID());
1988  auto cadProp = AppendNode(doc, rateLimiterNode, "CADProperties");
1989  auto position = AppendNode(doc, cadProp, "Position");
1990  auto posX = AppendNode(doc, position, "X");
1991  SetNodeValue(doc, posX, rateLimiter->GetPosition().m_x);
1992  auto posY = AppendNode(doc, position, "Y");
1993  SetNodeValue(doc, posY, rateLimiter->GetPosition().m_y);
1994  auto size = AppendNode(doc, cadProp, "Size");
1995  auto width = AppendNode(doc, size, "Width");
1996  SetNodeValue(doc, width, rateLimiter->GetWidth());
1997  auto height = AppendNode(doc, size, "Height");
1998  SetNodeValue(doc, height, rateLimiter->GetHeight());
1999  auto angle = AppendNode(doc, cadProp, "Angle");
2000  SetNodeValue(doc, angle, rateLimiter->GetAngle());
2001 
2002  // Nodes
2003  auto nodeList = AppendNode(doc, rateLimiterNode, "NodeList");
2004  SaveControlNodes(doc, nodeList, rateLimiter->GetNodeList());
2005 
2006  // Control properties
2007  auto upLimit = AppendNode(doc, rateLimiterNode, "UpperLimit");
2008  SetNodeValue(doc, upLimit, rateLimiter->GetUpLimit());
2009  auto lowLimit = AppendNode(doc, rateLimiterNode, "LowerLimit");
2010  SetNodeValue(doc, lowLimit, rateLimiter->GetLowLimit());
2011  } //}
2012 
2013  //{ Sum
2014  auto sumsNode = AppendNode(doc, elementsNode, "SumList");
2015  auto sumList = ctrlContainer->GetSumList();
2016  for(auto it = sumList.begin(), itEnd = sumList.end(); it != itEnd; ++it) {
2017  Sum* sum = *it;
2018  auto sumNode = AppendNode(doc, sumsNode, "Sum");
2019  SetNodeAttribute(doc, sumNode, "ID", sum->GetID());
2020  auto cadProp = AppendNode(doc, sumNode, "CADProperties");
2021  auto position = AppendNode(doc, cadProp, "Position");
2022  auto posX = AppendNode(doc, position, "X");
2023  SetNodeValue(doc, posX, sum->GetPosition().m_x);
2024  auto posY = AppendNode(doc, position, "Y");
2025  SetNodeValue(doc, posY, sum->GetPosition().m_y);
2026  auto size = AppendNode(doc, cadProp, "Size");
2027  auto width = AppendNode(doc, size, "Width");
2028  SetNodeValue(doc, width, sum->GetWidth());
2029  auto height = AppendNode(doc, size, "Height");
2030  SetNodeValue(doc, height, sum->GetHeight());
2031  auto angle = AppendNode(doc, cadProp, "Angle");
2032  SetNodeValue(doc, angle, sum->GetAngle());
2033 
2034  // Nodes
2035  auto nodeList = AppendNode(doc, sumNode, "NodeList");
2036  SaveControlNodes(doc, nodeList, sum->GetNodeList());
2037 
2038  // Control properties
2039  auto signsNode = AppendNode(doc, sumNode, "Signs");
2040  auto signs = sum->GetSignalList();
2041  for(int i = 0; i < (int)signs.size(); ++i) {
2042  auto value = AppendNode(doc, signsNode, "Value");
2043  SetNodeValue(doc, value, static_cast<int>(signs[i]));
2044  }
2045 
2046  } //}
2047 
2048  //{ Transfer function
2049  auto tfsNode = AppendNode(doc, elementsNode, "TransferFunctionList");
2050  auto tfList = ctrlContainer->GetTFList();
2051  for(auto it = tfList.begin(), itEnd = tfList.end(); it != itEnd; ++it) {
2052  TransferFunction* tf = *it;
2053  auto tfNode = AppendNode(doc, tfsNode, "TransferFunction");
2054  SetNodeAttribute(doc, tfNode, "ID", tf->GetID());
2055  auto cadProp = AppendNode(doc, tfNode, "CADProperties");
2056  auto position = AppendNode(doc, cadProp, "Position");
2057  auto posX = AppendNode(doc, position, "X");
2058  SetNodeValue(doc, posX, tf->GetPosition().m_x);
2059  auto posY = AppendNode(doc, position, "Y");
2060  SetNodeValue(doc, posY, tf->GetPosition().m_y);
2061  auto size = AppendNode(doc, cadProp, "Size");
2062  auto width = AppendNode(doc, size, "Width");
2063  SetNodeValue(doc, width, tf->GetWidth());
2064  auto height = AppendNode(doc, size, "Height");
2065  SetNodeValue(doc, height, tf->GetHeight());
2066  auto angle = AppendNode(doc, cadProp, "Angle");
2067  SetNodeValue(doc, angle, tf->GetAngle());
2068 
2069  // Nodes
2070  auto nodeList = AppendNode(doc, tfNode, "NodeList");
2071  SaveControlNodes(doc, nodeList, tf->GetNodeList());
2072 
2073  // Control properties
2074  auto numeratorNode = AppendNode(doc, tfNode, "Numerator");
2075  auto numerator = tf->GetNumerator();
2076  for(int i = 0; i < (int)numerator.size(); ++i) {
2077  auto value = AppendNode(doc, numeratorNode, "Value");
2078  SetNodeValue(doc, value, numerator[i]);
2079  }
2080  auto denominatorNode = AppendNode(doc, tfNode, "Denominator");
2081  auto denominator = tf->GetDenominator();
2082  for(int i = 0; i < (int)denominator.size(); ++i) {
2083  auto value = AppendNode(doc, denominatorNode, "Value");
2084  SetNodeValue(doc, value, denominator[i]);
2085  }
2086  } //}
2087 
2088  //{ Connection line
2089  auto cLinesNode = AppendNode(doc, elementsNode, "ConnectionList");
2090  auto connLineList = ctrlContainer->GetConnectionLineList();
2091  for(auto it = connLineList.begin(), itEnd = connLineList.end(); it != itEnd; ++it) {
2092  ConnectionLine* cLine = *it;
2093  auto cLineNode = AppendNode(doc, cLinesNode, "Connection");
2094  SetNodeAttribute(doc, cLineNode, "ID", cLine->GetID());
2095 
2096  // CAD properties
2097  auto cadProp = AppendNode(doc, cLineNode, "CADProperties");
2098  auto offset = AppendNode(doc, cadProp, "Offset");
2099  SetNodeValue(doc, offset, cLine->GetOffset());
2100 
2101  // Parent list
2102  auto parentsNode = AppendNode(doc, cLineNode, "ParentList");
2103  auto parentList = cLine->GetParentList();
2104  int nodeIndex = 0;
2105  for(auto itP = parentList.begin(), itPEnd = parentList.end(); itP != itPEnd; ++itP) {
2106  Element* parent = *itP;
2107  auto parentNode = AppendNode(doc, parentsNode, "Parent");
2108  auto elementID = AppendNode(doc, parentNode, "ElementID");
2109  SetNodeValue(doc, elementID, parent->GetID());
2110  auto nodeID = AppendNode(doc, parentNode, "NodeID");
2111  SetNodeValue(doc, nodeID, cLine->GetNodeList()[nodeIndex]->GetID());
2112  nodeIndex++;
2113  }
2114 
2115  auto parentLine = AppendNode(doc, cLineNode, "ParentLine");
2116  if(cLine->GetParentLine()) {
2117  ConnectionLine* parent = cLine->GetParentLine();
2118  SetNodeAttribute(doc, parentLine, "ID", parent->GetID());
2119  } else {
2120  SetNodeAttribute(doc, parentLine, "ID", -1);
2121  }
2122  } //}
2123 }
2124 
2125 bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc,
2126  rapidxml::xml_node<>* elementsNode,
2127  ControlElementContainer* ctrlContainer)
2128 {
2129  std::vector<ControlElement*> elementList;
2130  std::vector<ConnectionLine*> connectionList;
2131 
2132  //{ Constant
2133  auto constListNode = elementsNode->first_node("ConstantList");
2134  if(!constListNode) return false;
2135  auto constNode = constListNode->first_node("Constant");
2136  while(constNode) {
2137  int id = GetAttributeValueInt(constNode, "ID");
2138  Constant* constant = new Constant(id);
2139 
2140  auto cadPropNode = constNode->first_node("CADProperties");
2141  if(!cadPropNode) return false;
2142 
2143  auto position = cadPropNode->first_node("Position");
2144  double posX = GetNodeValueDouble(position, "X");
2145  double posY = GetNodeValueDouble(position, "Y");
2146  auto size = cadPropNode->first_node("Size");
2147  double width = GetNodeValueDouble(size, "Width");
2148  double height = GetNodeValueDouble(size, "Height");
2149  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2150 
2151  double value = GetNodeValueDouble(constNode, "Value");
2152 
2153  constant->SetWidth(width);
2154  constant->SetHeight(height);
2155  constant->SetAngle(angle);
2156  constant->SetPosition(wxPoint2DDouble(posX, posY));
2157  constant->StartMove(constant->GetPosition());
2158 
2159  constant->SetValue(value);
2160 
2161  std::vector<Node*> nodeVector;
2162  if(!OpenControlNodeList(constNode, nodeVector)) return false;
2163 
2164  constant->SetNodeList(nodeVector);
2165  constant->UpdatePoints();
2166  elementList.push_back(constant);
2167 
2168  constNode = constNode->next_sibling("Constant");
2169  } //}
2170 
2171  //{ Exponential
2172  auto expListNode = elementsNode->first_node("ExponentialList");
2173  if(!expListNode) return false;
2174  auto expNode = expListNode->first_node("Exponential");
2175  while(expNode) {
2176  int id = GetAttributeValueInt(expNode, "ID");
2177  Exponential* exponential = new Exponential(id);
2178 
2179  auto cadPropNode = expNode->first_node("CADProperties");
2180  if(!cadPropNode) return false;
2181 
2182  auto position = cadPropNode->first_node("Position");
2183  double posX = GetNodeValueDouble(position, "X");
2184  double posY = GetNodeValueDouble(position, "Y");
2185  auto size = cadPropNode->first_node("Size");
2186  double width = GetNodeValueDouble(size, "Width");
2187  double height = GetNodeValueDouble(size, "Height");
2188  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2189 
2190  auto value = expNode->first_node("Value");
2191  double a = GetNodeValueDouble(value, "A");
2192  double b = GetNodeValueDouble(value, "B");
2193 
2194  exponential->SetWidth(width);
2195  exponential->SetHeight(height);
2196  exponential->SetAngle(angle);
2197  exponential->SetPosition(wxPoint2DDouble(posX, posY));
2198  exponential->StartMove(exponential->GetPosition());
2199 
2200  exponential->SetValues(a, b);
2201 
2202  std::vector<Node*> nodeVector;
2203  if(!OpenControlNodeList(expNode, nodeVector)) return false;
2204 
2205  exponential->SetNodeList(nodeVector);
2206  exponential->UpdatePoints();
2207  elementList.push_back(exponential);
2208 
2209  expNode = expNode->next_sibling("Exponential");
2210  } //}
2211 
2212  //{ Gain
2213  auto gainListNode = elementsNode->first_node("GainList");
2214  if(!gainListNode) return false;
2215  auto gainNode = gainListNode->first_node("Gain");
2216  while(gainNode) {
2217  int id = GetAttributeValueInt(gainNode, "ID");
2218  Gain* gain = new Gain(id);
2219 
2220  auto cadPropNode = gainNode->first_node("CADProperties");
2221  if(!cadPropNode) return false;
2222 
2223  auto position = cadPropNode->first_node("Position");
2224  double posX = GetNodeValueDouble(position, "X");
2225  double posY = GetNodeValueDouble(position, "Y");
2226  auto size = cadPropNode->first_node("Size");
2227  double width = GetNodeValueDouble(size, "Width");
2228  double height = GetNodeValueDouble(size, "Height");
2229  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2230 
2231  double value = GetNodeValueDouble(gainNode, "Value");
2232 
2233  gain->SetWidth(width);
2234  gain->SetHeight(height);
2235  gain->SetAngle(angle);
2236  gain->SetPosition(wxPoint2DDouble(posX, posY));
2237  gain->SetValue(value);
2238  gain->StartMove(gain->GetPosition());
2239 
2240  std::vector<Node*> nodeVector;
2241  if(!OpenControlNodeList(gainNode, nodeVector)) return false;
2242 
2243  gain->SetNodeList(nodeVector);
2244  gain->UpdatePoints();
2245  elementList.push_back(gain);
2246 
2247  gainNode = gainNode->next_sibling("Gain");
2248  }
2249  //}
2250 
2251  //{ IO
2252  auto ioListNode = elementsNode->first_node("IOList");
2253  if(!ioListNode) return false;
2254  auto ioNode = ioListNode->first_node("IO");
2255  while(ioNode) {
2256  int id = GetAttributeValueInt(ioNode, "ID");
2257 
2258  auto cadPropNode = ioNode->first_node("CADProperties");
2259  if(!cadPropNode) return false;
2260 
2261  auto position = cadPropNode->first_node("Position");
2262  double posX = GetNodeValueDouble(position, "X");
2263  double posY = GetNodeValueDouble(position, "Y");
2264  auto size = cadPropNode->first_node("Size");
2265  double width = GetNodeValueDouble(size, "Width");
2266  double height = GetNodeValueDouble(size, "Height");
2267  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2268 
2269  std::vector<Node*> nodeVector;
2270  if(!OpenControlNodeList(ioNode, nodeVector)) return false;
2271 
2272  IOControl::IOFlags value = static_cast<IOControl::IOFlags>(GetNodeValueInt(ioNode, "Value"));
2273  int ioFlags = GetNodeValueInt(ioNode, "IOFlags");
2274 
2275  IOControl* io = new IOControl(ioFlags, id);
2276 
2277  io->SetWidth(width);
2278  io->SetHeight(height);
2279  io->SetAngle(angle);
2280  io->SetPosition(wxPoint2DDouble(posX, posY));
2281  io->SetValue(value);
2282  io->StartMove(io->GetPosition());
2283  io->SetNodeList(nodeVector);
2284  io->UpdatePoints();
2285  elementList.push_back(io);
2286 
2287  ioNode = ioNode->next_sibling("IO");
2288  }
2289  //}
2290 
2291  //{ Limiter
2292  auto limiterListNode = elementsNode->first_node("LimiterList");
2293  if(!limiterListNode) return false;
2294  auto limiterNode = limiterListNode->first_node("Limiter");
2295  while(limiterNode) {
2296  int id = GetAttributeValueInt(limiterNode, "ID");
2297  Limiter* limiter = new Limiter(id);
2298 
2299  auto cadPropNode = limiterNode->first_node("CADProperties");
2300  if(!cadPropNode) return false;
2301 
2302  auto position = cadPropNode->first_node("Position");
2303  double posX = GetNodeValueDouble(position, "X");
2304  double posY = GetNodeValueDouble(position, "Y");
2305  auto size = cadPropNode->first_node("Size");
2306  double width = GetNodeValueDouble(size, "Width");
2307  double height = GetNodeValueDouble(size, "Height");
2308  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2309 
2310  double upLimit = GetNodeValueDouble(limiterNode, "UpperLimit");
2311  double lowLimit = GetNodeValueDouble(limiterNode, "LowerLimit");
2312 
2313  std::vector<Node*> nodeVector;
2314  if(!OpenControlNodeList(limiterNode, nodeVector)) return false;
2315 
2316  limiter->SetWidth(width);
2317  limiter->SetHeight(height);
2318  limiter->SetAngle(angle);
2319  limiter->SetPosition(wxPoint2DDouble(posX, posY));
2320  limiter->SetUpLimit(upLimit);
2321  limiter->SetLowLimit(lowLimit);
2322 
2323  limiter->StartMove(limiter->GetPosition());
2324  limiter->SetNodeList(nodeVector);
2325  limiter->UpdatePoints();
2326  elementList.push_back(limiter);
2327 
2328  limiterNode = limiterNode->next_sibling("Limiter");
2329  }
2330  //}
2331 
2332  //{ Multiplier
2333  auto multiplierListNode = elementsNode->first_node("MultiplierList");
2334  if(!multiplierListNode) return false;
2335  auto multiplierNode = multiplierListNode->first_node("Multiplier");
2336  while(multiplierNode) {
2337  int id = GetAttributeValueInt(multiplierNode, "ID");
2338  Multiplier* multiplier = new Multiplier(id);
2339 
2340  auto cadPropNode = multiplierNode->first_node("CADProperties");
2341  if(!cadPropNode) return false;
2342 
2343  auto position = cadPropNode->first_node("Position");
2344  double posX = GetNodeValueDouble(position, "X");
2345  double posY = GetNodeValueDouble(position, "Y");
2346  auto size = cadPropNode->first_node("Size");
2347  double width = GetNodeValueDouble(size, "Width");
2348  double height = GetNodeValueDouble(size, "Height");
2349  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2350 
2351  std::vector<Node*> nodeVector;
2352  if(!OpenControlNodeList(multiplierNode, nodeVector)) return false;
2353 
2354  multiplier->SetWidth(width);
2355  multiplier->SetHeight(height);
2356  multiplier->SetAngle(angle);
2357  multiplier->SetPosition(wxPoint2DDouble(posX, posY));
2358 
2359  multiplier->StartMove(multiplier->GetPosition());
2360  multiplier->SetNodeList(nodeVector);
2361  multiplier->UpdatePoints();
2362  elementList.push_back(multiplier);
2363 
2364  multiplierNode = multiplierNode->next_sibling("Multiplier");
2365  }
2366  //}
2367 
2368  //{ Rate limiter
2369  auto rateLimiterListNode = elementsNode->first_node("RateLimiterList");
2370  if(!rateLimiterListNode) return false;
2371  auto rateLimiterNode = rateLimiterListNode->first_node("RateLimiter");
2372  while(rateLimiterNode) {
2373  int id = GetAttributeValueInt(rateLimiterNode, "ID");
2374  RateLimiter* limiter = new RateLimiter(id);
2375 
2376  auto cadPropNode = rateLimiterNode->first_node("CADProperties");
2377  if(!cadPropNode) return false;
2378 
2379  auto position = cadPropNode->first_node("Position");
2380  double posX = GetNodeValueDouble(position, "X");
2381  double posY = GetNodeValueDouble(position, "Y");
2382  auto size = cadPropNode->first_node("Size");
2383  double width = GetNodeValueDouble(size, "Width");
2384  double height = GetNodeValueDouble(size, "Height");
2385  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2386 
2387  double upLimit = GetNodeValueDouble(rateLimiterNode, "UpperLimit");
2388  double lowLimit = GetNodeValueDouble(rateLimiterNode, "LowerLimit");
2389 
2390  std::vector<Node*> nodeVector;
2391  if(!OpenControlNodeList(rateLimiterNode, nodeVector)) return false;
2392 
2393  limiter->SetWidth(width);
2394  limiter->SetHeight(height);
2395  limiter->SetAngle(angle);
2396  limiter->SetPosition(wxPoint2DDouble(posX, posY));
2397  limiter->SetUpLimit(upLimit);
2398  limiter->SetLowLimit(lowLimit);
2399 
2400  limiter->StartMove(limiter->GetPosition());
2401  limiter->SetNodeList(nodeVector);
2402  limiter->UpdatePoints();
2403  elementList.push_back(limiter);
2404 
2405  rateLimiterNode = rateLimiterNode->next_sibling("RateLimiter");
2406  }
2407  //}
2408 
2409  //{ Sum
2410  auto sumListNode = elementsNode->first_node("SumList");
2411  if(!sumListNode) return false;
2412  auto sumNode = sumListNode->first_node("Sum");
2413  while(sumNode) {
2414  int id = GetAttributeValueInt(sumNode, "ID");
2415  Sum* sum = new Sum(id);
2416 
2417  auto cadPropNode = sumNode->first_node("CADProperties");
2418  if(!cadPropNode) return false;
2419 
2420  auto position = cadPropNode->first_node("Position");
2421  double posX = GetNodeValueDouble(position, "X");
2422  double posY = GetNodeValueDouble(position, "Y");
2423  auto size = cadPropNode->first_node("Size");
2424  double width = GetNodeValueDouble(size, "Width");
2425  double height = GetNodeValueDouble(size, "Height");
2426  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2427 
2428  std::vector<Sum::Signal> signs;
2429  auto signsNode = sumNode->first_node("Signs");
2430  auto sign = signsNode->first_node("Value");
2431  while(sign) {
2432  long value;
2433  wxString(sign->value()).ToCLong(&value);
2434  signs.push_back(static_cast<Sum::Signal>(value));
2435  sign = sign->next_sibling("Value");
2436  }
2437  sum->SetSignalList(signs);
2438 
2439  std::vector<Node*> nodeVector;
2440  if(!OpenControlNodeList(sumNode, nodeVector)) return false;
2441 
2442  sum->SetWidth(width);
2443  sum->SetHeight(height);
2444  sum->SetAngle(angle);
2445  sum->SetPosition(wxPoint2DDouble(posX, posY));
2446 
2447  sum->StartMove(sum->GetPosition());
2448  sum->SetNodeList(nodeVector);
2449  sum->UpdatePoints();
2450  elementList.push_back(sum);
2451 
2452  sumNode = sumNode->next_sibling("Sum");
2453  }
2454  //}
2455 
2456  //{ Transfer function
2457  auto tfListNode = elementsNode->first_node("TransferFunctionList");
2458  if(!tfListNode) return false;
2459  auto tfNode = tfListNode->first_node("TransferFunction");
2460  while(tfNode) {
2461  int id = GetAttributeValueInt(tfNode, "ID");
2462  TransferFunction* tf = new TransferFunction(id);
2463 
2464  auto cadPropNode = tfNode->first_node("CADProperties");
2465  if(!cadPropNode) return false;
2466 
2467  auto position = cadPropNode->first_node("Position");
2468  double posX = GetNodeValueDouble(position, "X");
2469  double posY = GetNodeValueDouble(position, "Y");
2470  auto size = cadPropNode->first_node("Size");
2471  double width = GetNodeValueDouble(size, "Width");
2472  double height = GetNodeValueDouble(size, "Height");
2473  double angle = GetNodeValueDouble(cadPropNode, "Angle");
2474 
2475  std::vector<double> numerator, denominator;
2476  auto numeratorNode = tfNode->first_node("Numerator");
2477  auto nValue = numeratorNode->first_node("Value");
2478  while(nValue) {
2479  double value = 0.0;
2480  wxString(nValue->value()).ToCDouble(&value);
2481  numerator.push_back(value);
2482  nValue = nValue->next_sibling("Value");
2483  }
2484  auto denominatorNode = tfNode->first_node("Denominator");
2485  auto dValue = denominatorNode->first_node("Value");
2486  while(dValue) {
2487  double value = 0.0;
2488  wxString(dValue->value()).ToCDouble(&value);
2489  denominator.push_back(value);
2490  dValue = dValue->next_sibling("Value");
2491  }
2492 
2493  std::vector<Node*> nodeVector;
2494  if(!OpenControlNodeList(tfNode, nodeVector)) return false;
2495 
2496  tf->SetWidth(width);
2497  tf->SetHeight(height);
2498  tf->SetAngle(angle);
2499  tf->SetPosition(wxPoint2DDouble(posX, posY));
2500 
2501  tf->SetNumerator(numerator);
2502  tf->SetDenominator(denominator);
2503 
2504  tf->StartMove(tf->GetPosition());
2505  tf->SetNodeList(nodeVector);
2506 
2507  tf->UpdateTFText();
2508 
2509  elementList.push_back(tf);
2510 
2511  tfNode = tfNode->next_sibling("TransferFunction");
2512  }
2513  //}
2514 
2515  // Connection line
2516  auto connectionListNode = elementsNode->first_node("ConnectionList");
2517  if(!connectionListNode) return false;
2518  auto connNode = connectionListNode->first_node("Connection");
2519  while(connNode) {
2520  ConnectionLine* cLine = NULL;
2521  int id = GetAttributeValueInt(connNode, "ID");
2522 
2523  auto cadPropNode = connNode->first_node("CADProperties");
2524  if(!cadPropNode) return false;
2525  double offset = GetNodeValueDouble(cadPropNode, "Offset");
2526 
2527  auto parentList = connNode->first_node("ParentList");
2528  if(!parentList) return false;
2529 
2530  auto parentNode = parentList->first_node("Parent");
2531  bool firstNode = true;
2532  while(parentNode) {
2533  int elementID = GetNodeValueInt(parentNode, "ElementID");
2534  int nodeID = GetNodeValueInt(parentNode, "NodeID");
2535 
2536  ControlElement* element = GetControlElementFromID(elementList, elementID);
2537  Node* node = element->GetNodeList()[nodeID];
2538 
2539  if(firstNode) cLine = new ConnectionLine(node, id);
2540  cLine->AddParent(element);
2541  element->AddChild(cLine);
2542  if(!firstNode) cLine->AppendNode(node, element);
2543 
2544  if(firstNode) firstNode = false;
2545  parentNode = parentNode->next_sibling("Parent");
2546  }
2547 
2548  auto parentLine = connNode->first_node("ParentLine");
2549  if(!parentLine) return false;
2550  int parentLineID = GetAttributeValueInt(parentLine, "ID");
2551  if(parentLineID != -1) {
2552  for(auto it = connectionList.begin(), itEnd = connectionList.end(); it != itEnd; ++it) {
2553  ConnectionLine* parent = *it;
2554  if(parent->GetID() == parentLineID) {
2555  cLine->SetParentLine(parent);
2556  parent->AddChild(cLine);
2557  }
2558  }
2559  }
2560 
2561  cLine->SetOffset(offset);
2562  cLine->UpdatePoints();
2563  connectionList.push_back(cLine);
2564  connNode = connNode->next_sibling("Connection");
2565  }
2566  ctrlContainer->FillContainer(elementList, connectionList);
2567  return true;
2568 }
2569 
2570 void FileHanding::SaveControlNodes(rapidxml::xml_document<>& doc,
2571  rapidxml::xml_node<>* nodesN,
2572  std::vector<Node*> nodeList)
2573 {
2574  int id = 0;
2575  for(auto it = nodeList.begin(), itEnd = nodeList.end(); it != itEnd; ++it) {
2576  Node* node = *it;
2577  node->SetID(id);
2578  auto nodeN = AppendNode(doc, nodesN, "Node");
2579  SetNodeAttribute(doc, nodeN, "ID", id);
2580  auto nodePosition = AppendNode(doc, nodeN, "Position");
2581  auto posNodeX = AppendNode(doc, nodePosition, "X");
2582  SetNodeValue(doc, posNodeX, node->GetPosition().m_x);
2583  auto posNodeY = AppendNode(doc, nodePosition, "Y");
2584  SetNodeValue(doc, posNodeY, node->GetPosition().m_y);
2585  auto angle = AppendNode(doc, nodeN, "Angle");
2586  SetNodeValue(doc, angle, node->GetAngle());
2587  auto nodeType = AppendNode(doc, nodeN, "Type");
2588  SetNodeValue(doc, nodeType, node->GetNodeType());
2589  id++;
2590  }
2591 }
2592 
2593 ControlElement* FileHanding::GetControlElementFromID(std::vector<ControlElement*> elementList, int id)
2594 {
2595  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) {
2596  ControlElement* element = *it;
2597  if(element->GetID() == id) return element;
2598  }
2599  return NULL;
2600 }
2601 
2602 bool FileHanding::OpenControlNodeList(rapidxml::xml_node<>* elementNode, std::vector<Node*>& nodeVector)
2603 {
2604  auto nodeList = elementNode->first_node("NodeList");
2605  if(!nodeList) return false;
2606  auto nodeN = nodeList->first_node("Node");
2607  while(nodeN) {
2608  auto nodePosition = nodeN->first_node("Position");
2609  double nodePosX = GetNodeValueDouble(nodePosition, "X");
2610  double nodePosY = GetNodeValueDouble(nodePosition, "Y");
2611  double nodeAngle = GetNodeValueDouble(nodeN, "Angle");
2612  Node::NodeType nodeType = (Node::NodeType)GetNodeValueInt(nodeN, "Type");
2613  Node* node = new Node(wxPoint2DDouble(nodePosX, nodePosY), nodeType, 2.0);
2614  node->SetAngle(nodeAngle);
2615  nodeVector.push_back(node);
2616  nodeN = nodeN->next_sibling("Node");
2617  }
2618  return true;
2619 }
2620 
2621 rapidxml::xml_node<>* FileHanding::AppendNode(rapidxml::xml_document<>& doc,
2622  rapidxml::xml_node<>* parentNode,
2623  const char* name,
2624  rapidxml::node_type nodeType)
2625 {
2626  rapidxml::xml_node<>* node = doc.allocate_node(nodeType, name);
2627  parentNode->append_node(node);
2628  return node;
2629 }
2630 
2631 void FileHanding::SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, wxString value)
2632 {
2633  node->value(doc.allocate_string(value.mb_str()));
2634 }
2635 
2636 void FileHanding::SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, int value)
2637 {
2638  node->value(doc.allocate_string(wxString::Format("%d", value).mb_str()));
2639 }
2640 
2641 void FileHanding::SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, double value)
2642 {
2643  node->value(doc.allocate_string(wxString::FromCDouble(value, 13).mb_str()));
2644 }
2645 
2646 void FileHanding::SetNodeAttribute(rapidxml::xml_document<>& doc,
2647  rapidxml::xml_node<>* node,
2648  const char* atrName,
2649  wxString value)
2650 {
2651  node->append_attribute(doc.allocate_attribute(atrName, doc.allocate_string(value.mb_str())));
2652 }
2653 
2654 void FileHanding::SetNodeAttribute(rapidxml::xml_document<>& doc,
2655  rapidxml::xml_node<>* node,
2656  const char* atrName,
2657  int value)
2658 {
2659  node->append_attribute(
2660  doc.allocate_attribute(atrName, doc.allocate_string(wxString::Format("%d", value).mb_str())));
2661 }
2662 
2663 void FileHanding::SetNodeAttribute(rapidxml::xml_document<>& doc,
2664  rapidxml::xml_node<>* node,
2665  const char* atrName,
2666  double value)
2667 {
2668  node->append_attribute(
2669  doc.allocate_attribute(atrName, doc.allocate_string(wxString::FromCDouble(value, 13).mb_str())));
2670 }
2671 
2672 double FileHanding::GetNodeValueDouble(rapidxml::xml_node<>* parent, const char* nodeName)
2673 {
2674  double dValue = 0.0;
2675  if(parent) {
2676  auto node = parent->first_node(nodeName);
2677  if(node) wxString(node->value()).ToCDouble(&dValue);
2678  }
2679  return dValue;
2680 }
2681 
2682 int FileHanding::GetNodeValueInt(rapidxml::xml_node<>* parent, const char* nodeName)
2683 {
2684  long iValue = -1;
2685  if(parent) {
2686  auto node = parent->first_node(nodeName);
2687  if(node) wxString(node->value()).ToCLong(&iValue);
2688  }
2689  return (int)iValue;
2690 }
2691 
2692 int FileHanding::GetAttributeValueInt(rapidxml::xml_node<>* parent, const char* nodeName, const char* atrName)
2693 {
2694  long iValue = -1;
2695  if(parent) {
2696  auto node = parent->first_node(nodeName);
2697  if(node) {
2698  auto atr = node->first_attribute(atrName);
2699  if(atr) wxString(atr->value()).ToCLong(&iValue);
2700  }
2701  }
2702  return (int)iValue;
2703 }
2704 
2705 int FileHanding::GetAttributeValueInt(rapidxml::xml_node<>* node, const char* atrName)
2706 {
2707  long intValue;
2708  auto atr = node->first_attribute(atrName);
2709  if(!atr) return false;
2710  wxString(atr->value()).ToCLong(&intValue);
2711  return (int)intValue;
2712 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+
Definition: Text.h:48
+ +
std::vector< double > swTime
Definition: PowerElement.h:78
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Machines.cpp:129
+ + +
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Branch.cpp:90
+ +
const std::vector< Transformer * > GetTransformerList() const
Get the transformers of the system (use GetElementsFromList first).
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Text.cpp:145
+
Definition: Sum.h:9
+
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+
void SetWidth(double width)
Set element width.
Definition: Element.h:129
+
Definition: Gain.h:11
+
FaultData
Information about fault (type and location).
Definition: PowerElement.h:38
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Capacitor.cpp:98
+ +
const std::vector< IndMotor * > GetIndMotorList() const
Get the induction motors of the system (use GetElementsFromList first).
+
bool SetOnline(bool online=true)
Set if the element is online or offline.
Definition: Element.cpp:218
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Shunt.cpp:57
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Load.cpp:104
+
Definition: Limiter.h:8
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Inductor.cpp:96
+ + +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Machines.cpp:94
+
const std::vector< Bus * > GetBusList() const
Get the buses of the system (use GetElementsFromList first).
+ +
std::vector< SwitchingType > swType
Definition: PowerElement.h:77
+
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ +
virtual void SetDynamicEvent(bool dynEvent=true)
Set if the power element have dynamic event.
Definition: PowerElement.h:191
+
const std::vector< SyncGenerator * > GetSyncGeneratorList() const
Get the synchronous generators of the system (use GetElementsFromList first).
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
+
const std::vector< Inductor * > GetInductorList() const
Get the inductors of the system (use GetElementsFromList first).
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Element.h:234
+
Definition: Bus.h:45
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Inductor.cpp:7
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+ +
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Shunt.cpp:15
+ +
void SetAngle(double angle)
Set element angle.
Definition: Element.h:135
+
double GetWidth() const
Get the element width.
Definition: Element.h:195
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Line.cpp:119
+
void SetPosition(const wxPoint2DDouble position)
Set the element position and update the rectangle.
Definition: Element.cpp:10
+
const std::vector< Capacitor * > GetCapacitorList() const
Get the capacitors of the system (use GetElementsFromList first).
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Machines.cpp:8
+
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+
Definition: Line.h:35
+
Definition: Load.h:23
+
double GetHeight() const
Get the element height.
Definition: Element.h:183
+
virtual std::vector< wxPoint2DDouble > GetPointList() const
Get the list of points that connect the element to bus.
Definition: Element.h:225
+ + + +
const std::vector< Load * > GetLoadList() const
Get the loads of the system (use GetElementsFromList first).
+ + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Machines.cpp:215
+
virtual void SetPointList(std::vector< wxPoint2DDouble > pointList)
Set the list of points that connect the element to the bus.
Definition: Line.cpp:472
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Bus.cpp:167
+
virtual SwitchingData GetSwitchingData()
Returns the switching data of the element.
Definition: PowerElement.h:165
+ +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Shunt.cpp:50
+
SwitchingType
Type of switching.
Definition: PowerElement.h:52
+ + + +
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Transformer.cpp:22
+
const std::vector< SyncMotor * > GetSyncMotorList() const
Get the synchronous motors of the system (use GetElementsFromList first).
+
virtual int GetID() const
Get the element ID.
Definition: Element.h:270
+ +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Load.cpp:6
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Machines.cpp:148
+
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+ +
virtual void GetElementsFromList(std::vector< Element *> elementList)
Separate the power elements from a generic list.
+ + + + + +
virtual void SetSwitchingData(SwitchingData data)
Set the switching data of the element.
Definition: PowerElement.h:160
+
double GetRotationAngle() const
Get the angle of rotation.
Definition: Element.h:207
+
const std::vector< Line * > GetLineList() const
Get the lines of the system (use GetElementsFromList first).
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Capacitor.cpp:7
+ +
void SetHeight(double height)
Set element height.
Definition: Element.h:111
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_file_handing_8h_source.html b/docs/doxygen/html/_file_handing_8h_source.html index 61a4c34..4465e32 100644 --- a/docs/doxygen/html/_file_handing_8h_source.html +++ b/docs/doxygen/html/_file_handing_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/FileHanding.h Source File +Project/FileHanding.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
FileHanding.h
-
1 #ifndef FILEHANDING_H
2 #define FILEHANDING_H
3 
4 #include <wx/string.h>
5 #include <fstream>
6 #include <sstream>
7 
8 #include "Workspace.h"
9 #include "ControlEditor.h"
10 #include "ControlElementContainer.h"
11 #include "ElectricCalculation.h"
12 #include "Text.h"
13 
14 #include "rapidXML/rapidxml.hpp"
15 // Modified: http://stackoverflow.com/questions/14113923/rapidxml-print-header-has-undefined-methods
16 #include "rapidXML/rapidxml_print.hpp"
17 #include "rapidXML/rapidxml_utils.hpp"
18 
20 {
21 public:
22  FileHanding();
23  FileHanding(Workspace* workspace);
24  FileHanding(ControlEditor* controlEditor);
25  ~FileHanding();
26 
27  void SetWorkspace(Workspace* workspace) { m_workspace = workspace; }
28  void SetControlEditor(ControlEditor* controlEditor) { m_controlEditor = controlEditor; }
29 
30  void SaveProject(wxFileName path);
31  bool OpenProject(wxFileName path);
32 
33  void SaveControl(wxFileName path);
34  bool OpenControl(wxFileName path, std::vector<ControlElement*>& ctrlElementList, std::vector<ConnectionLine*>& ctrlConnectionList);
35 
36  void SaveControlElements(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* elementsNode, ControlElementContainer* ctrlContainer = NULL);
37  bool OpenControlElements(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* elementsNode, ControlElementContainer* ctrlContainer = NULL);
38 
39 protected:
40  Workspace* m_workspace = NULL;
41  ControlEditor* m_controlEditor = NULL;
42 
43  rapidxml::xml_node<>* AppendNode(rapidxml::xml_document<>& doc,
44  rapidxml::xml_node<>* parentNode,
45  const char* name,
46  rapidxml::node_type nodeType = rapidxml::node_element);
47  void SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, wxString value);
48  void SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, int value);
49  void SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, double value);
50  void SetNodeAttribute(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, const char* atrName, wxString value);
51  void SetNodeAttribute(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, const char* atrName, int value);
52  void SetNodeAttribute(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, const char* atrName, double value);
53  double GetNodeValueDouble(rapidxml::xml_node<>* parent, const char* nodeName);
54  int GetNodeValueInt(rapidxml::xml_node<>* parent, const char* nodeName);
55  int GetAttributeValueInt(rapidxml::xml_node<>* parent, const char* nodeName, const char* atrName);
56  int GetAttributeValueInt(rapidxml::xml_node<>* node, const char* atrName);
57 
58  void SaveControlNodes(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* nodesN, std::vector<Node*> nodeList);
59  ControlElement* GetControlElementFromID(std::vector<ControlElement*> elementList, int id);
60  bool OpenControlNodeList(rapidxml::xml_node<>* elementNode, std::vector<Node*>& nodeVector);
61 };
62 
63 #endif // FILEHANDING_H
Definition: FileHanding.h:19
+
1 #ifndef FILEHANDING_H
2 #define FILEHANDING_H
3 
4 #include <wx/string.h>
5 #include <fstream>
6 #include <sstream>
7 
8 #include "Workspace.h"
9 #include "ControlEditor.h"
10 #include "ControlElementContainer.h"
11 #include "ElectricCalculation.h"
12 #include "Text.h"
13 
14 #include "rapidXML/rapidxml.hpp"
15 // Modified: http://stackoverflow.com/questions/14113923/rapidxml-print-header-has-undefined-methods
16 #include "rapidXML/rapidxml_print.hpp"
17 #include "rapidXML/rapidxml_utils.hpp"
18 
20 {
21 public:
22  FileHanding();
23  FileHanding(Workspace* workspace);
24  FileHanding(ControlEditor* controlEditor);
25  ~FileHanding();
26 
27  void SetWorkspace(Workspace* workspace) { m_workspace = workspace; }
28  void SetControlEditor(ControlEditor* controlEditor) { m_controlEditor = controlEditor; }
29 
30  void SaveProject(wxFileName path);
31  bool OpenProject(wxFileName path);
32 
33  void SaveControl(wxFileName path);
34  bool OpenControl(wxFileName path, std::vector<ControlElement*>& ctrlElementList, std::vector<ConnectionLine*>& ctrlConnectionList);
35 
36  void SaveControlElements(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* elementsNode, ControlElementContainer* ctrlContainer = NULL);
37  bool OpenControlElements(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* elementsNode, ControlElementContainer* ctrlContainer = NULL);
38 
39 protected:
40  Workspace* m_workspace = NULL;
41  ControlEditor* m_controlEditor = NULL;
42 
43  rapidxml::xml_node<>* AppendNode(rapidxml::xml_document<>& doc,
44  rapidxml::xml_node<>* parentNode,
45  const char* name,
46  rapidxml::node_type nodeType = rapidxml::node_element);
47  void SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, wxString value);
48  void SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, int value);
49  void SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, double value);
50  void SetNodeAttribute(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, const char* atrName, wxString value);
51  void SetNodeAttribute(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, const char* atrName, int value);
52  void SetNodeAttribute(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, const char* atrName, double value);
53  double GetNodeValueDouble(rapidxml::xml_node<>* parent, const char* nodeName);
54  int GetNodeValueInt(rapidxml::xml_node<>* parent, const char* nodeName);
55  int GetAttributeValueInt(rapidxml::xml_node<>* parent, const char* nodeName, const char* atrName);
56  int GetAttributeValueInt(rapidxml::xml_node<>* node, const char* atrName);
57 
58  void SaveControlNodes(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* nodesN, std::vector<Node*> nodeList);
59  ControlElement* GetControlElementFromID(std::vector<ControlElement*> elementList, int id);
60  bool OpenControlNodeList(rapidxml::xml_node<>* elementNode, std::vector<Node*>& nodeVector);
61 };
62 
63 #endif // FILEHANDING_H
Base class of electric calculations, with general methods.
-
Definition: ControlElementContainer.h:20
-
Definition: ControlEditor.h:67
-
Definition: ControlElement.h:53
-
Definition: Workspace.h:56
+ + + +
+
- + diff --git a/docs/doxygen/html/_gain_8cpp_source.html b/docs/doxygen/html/_gain_8cpp_source.html new file mode 100644 index 0000000..949111b --- /dev/null +++ b/docs/doxygen/html/_gain_8cpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Project/Gain.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Gain.cpp
+
+
+
1 #include "Gain.h"
2 #include "GainForm.h"
3 
4 Gain::Gain(int id) : ControlElement(id)
5 {
6  m_triPts.resize(3);
7  SetValue(m_value);
8  Node* nodeIn = new Node(m_position + wxPoint2DDouble(-m_width / 2, 0), Node::NODE_IN, m_borderSize);
9  nodeIn->StartMove(m_position);
10  Node* nodeOut = new Node(m_position + wxPoint2DDouble(m_width / 2, 0), Node::NODE_OUT, m_borderSize);
11  nodeOut->SetAngle(180.0);
12  nodeOut->StartMove(m_position);
13  m_nodeList.push_back(nodeIn);
14  m_nodeList.push_back(nodeOut);
15 }
16 
17 Gain::~Gain() {}
18 void Gain::Draw(wxPoint2DDouble translation, double scale) const
19 {
20  if(m_selected) {
21  glColor4dv(m_selectionColour.GetRGBA());
22  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
23  std::vector<wxPoint2DDouble> m_triSelectedPts;
24  if(m_angle == 0.0) {
25  m_triSelectedPts.push_back(m_triPts[0] - wxPoint2DDouble(borderSize / 2, borderSize / 1.5));
26  m_triSelectedPts.push_back(m_triPts[1] - wxPoint2DDouble(borderSize / 2, -borderSize / 1.5));
27  m_triSelectedPts.push_back(m_triPts[2] - wxPoint2DDouble(-borderSize, 0));
28  } else if(m_angle == 90.0) {
29  m_triSelectedPts.push_back(m_triPts[0] - wxPoint2DDouble(borderSize / 1.5, borderSize / 2));
30  m_triSelectedPts.push_back(m_triPts[1] - wxPoint2DDouble(-borderSize / 1.5, borderSize / 2));
31  m_triSelectedPts.push_back(m_triPts[2] - wxPoint2DDouble(0, -borderSize));
32  } else if(m_angle == 180.0) {
33  m_triSelectedPts.push_back(m_triPts[0] - wxPoint2DDouble(borderSize, 0));
34  m_triSelectedPts.push_back(m_triPts[1] - wxPoint2DDouble(-borderSize / 2, borderSize / 1.5));
35  m_triSelectedPts.push_back(m_triPts[2] - wxPoint2DDouble(-borderSize / 2, -borderSize / 1.5));
36  } else if(m_angle == 270.0) {
37  m_triSelectedPts.push_back(m_triPts[0] - wxPoint2DDouble(0, borderSize));
38  m_triSelectedPts.push_back(m_triPts[1] - wxPoint2DDouble(-borderSize / 1.5, -borderSize / 2));
39  m_triSelectedPts.push_back(m_triPts[2] - wxPoint2DDouble(borderSize / 1.5, -borderSize / 2));
40  }
41  DrawTriangle(m_triSelectedPts);
42  }
43  glLineWidth(1.0);
44  glColor4d(1.0, 1.0, 1.0, 1.0);
45  DrawTriangle(m_triPts);
46  glColor4d(0.0, 0.0, 0.0, 1.0);
47  DrawTriangle(m_triPts, GL_LINE_LOOP);
48 
49  // Plot number.
50  glEnable(GL_TEXTURE_2D);
51  glColor4d(0.0, 0.0, 0.0, 1.0);
52  m_glStringValue->bind();
53  if(m_angle == 0.0)
54  m_glStringValue->render(m_position.m_x - m_width / 2 + m_glStringValue->getWidth() / 2 + 2 + m_borderSize,
55  m_position.m_y);
56  else if(m_angle == 90.0)
57  m_glStringValue->render(m_position.m_x,
58  m_position.m_y - m_height / 2 + m_glStringValue->getheight() / 2 + 2 + m_borderSize);
59  else if(m_angle == 180.0)
60  m_glStringValue->render(m_position.m_x + m_width / 2 - m_glStringValue->getWidth() / 2 - 2 - m_borderSize,
61  m_position.m_y);
62  else if(m_angle == 270.0)
63  m_glStringValue->render(m_position.m_x,
64  m_position.m_y + m_height / 2 - m_glStringValue->getheight() / 2 - 2 - m_borderSize);
65  glDisable(GL_TEXTURE_2D);
66 
67  glColor4d(0.0, 0.0, 0.0, 1.0);
68  DrawNodes();
69 }
70 
71 bool Gain::ShowForm(wxWindow* parent, Element* element)
72 {
73  GainForm* form = new GainForm(parent, this);
74  if(form->ShowModal() == wxID_OK) {
75  form->Destroy();
76  return true;
77  }
78  form->Destroy();
79  return false;
80 }
81 
82 void Gain::Rotate(bool clockwise)
83 {
84  if(clockwise)
85  m_angle += 90.0;
86  else
87  m_angle -= 90.0;
88  if(m_angle >= 360.0)
89  m_angle = 0.0;
90  else if(m_angle < 0)
91  m_angle = 270.0;
92 
93  UpdatePoints();
94 
95  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
96  Node* node = *it;
97  node->Rotate(clockwise);
98  }
99 }
100 
101 void Gain::SetValue(double value)
102 {
103  m_value = value;
104  wxString text = "";
105  if(std::abs(m_value) > 1e3 || std::abs(m_value) < 1e-3)
106  text = wxString::Format("%g", m_value);
107  else
108  text = StringFromDouble(m_value);
109 
110  wxFont font(m_fontSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
111  wxScreenDC dc;
112 
113  if(m_glStringValue) {
114  delete m_glStringValue;
115  m_glStringValue = NULL;
116  }
117  m_glStringValue = new wxGLString(text);
118  m_glStringValue->setFont(font);
119  m_glStringValue->consolidate(&dc);
120 
121  m_width = m_glStringValue->getWidth() + 18 + 2 * m_borderSize;
122  m_height = m_glStringValue->getheight() + 18 + 2 * m_borderSize;
123 
124  if(m_width > m_height)
125  m_height = m_width;
126  else
127  m_width = m_height;
128 
129  SetPosition(m_position); // Update rectangle.
130 
131  UpdatePoints();
132 }
133 
134 void Gain::UpdatePoints()
135 {
136  if(m_nodeList.size() != 0) {
137  if(m_angle == 0.0) {
138  m_triPts[0] = m_rect.GetLeftTop() + wxPoint2DDouble(m_borderSize, m_borderSize);
139  m_triPts[1] = m_rect.GetLeftBottom() + wxPoint2DDouble(m_borderSize, -m_borderSize);
140  m_triPts[2] = m_position + wxPoint2DDouble(m_width / 2 - m_borderSize, 0);
141  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
142  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(m_width / 2 - 2, 0));
143  } else if(m_angle == 90.0) {
144  m_triPts[0] = m_rect.GetLeftTop() + wxPoint2DDouble(m_borderSize, m_borderSize);
145  m_triPts[1] = m_rect.GetRightTop() + wxPoint2DDouble(-m_borderSize, m_borderSize);
146  m_triPts[2] = m_position + wxPoint2DDouble(0, m_height / 2 - m_borderSize);
147  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
148  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2 - 2));
149  } else if(m_angle == 180.0) {
150  m_triPts[0] = m_position + wxPoint2DDouble(-m_width / 2 + m_borderSize, 0);
151  m_triPts[1] = m_rect.GetRightTop() + wxPoint2DDouble(-m_borderSize, m_borderSize);
152  m_triPts[2] = m_rect.GetRightBottom() + wxPoint2DDouble(-m_borderSize, -m_borderSize);
153  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
154  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2 + 2, 0));
155  } else if(m_angle == 270.0) {
156  m_triPts[0] = m_position + wxPoint2DDouble(0, -m_height / 2 + m_borderSize);
157  m_triPts[1] = m_rect.GetRightBottom() + wxPoint2DDouble(-m_borderSize, -m_borderSize);
158  m_triPts[2] = m_rect.GetLeftBottom() + wxPoint2DDouble(m_borderSize, -m_borderSize);
159  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
160  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2 + 2));
161  }
162  }
163 }
164 
165 void Gain::Move(wxPoint2DDouble position)
166 {
167  SetPosition(m_movePos + position - m_moveStartPt);
168  UpdatePoints();
169 }
170 
171 bool Gain::Solve(double input, double timeStep)
172 {
173  m_output = input * m_value;
174  return true;
175 }
176 
178 {
179  Gain* copy = new Gain(m_elementID);
180  *copy = *this;
181  m_glStringValue = NULL;
182  SetValue(m_value);
183  return copy;
184 }
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Gain.cpp:165
+ +
Definition: Gain.h:11
+ +
virtual Element * GetCopy()
Get a the element copy.
Definition: Gain.cpp:177
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Gain.cpp:71
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Gain.cpp:82
+ +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Gain.cpp:18
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_gain_8h_source.html b/docs/doxygen/html/_gain_8h_source.html index 26ed5a0..580e98f 100644 --- a/docs/doxygen/html/_gain_8h_source.html +++ b/docs/doxygen/html/_gain_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Gain.h Source File +Project/Gain.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Gain.h
-
1 #ifndef GAIN_H
2 #define GAIN_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
9 class GainForm;
10 
11 class Gain : public ControlElement
12 {
13  public:
14  Gain(int id);
15  ~Gain();
16 
17  virtual void Draw(wxPoint2DDouble translation, double scale) const;
18  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
19  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
20  virtual bool ShowForm(wxWindow* parent, Element* element);
21  virtual void Rotate(bool clockwise = true);
22  virtual void Move(wxPoint2DDouble position);
23  virtual void UpdateText() { SetValue(m_value); }
24  virtual void SetValue(double value);
25  virtual double GetValue() const { return m_value; }
26  virtual void UpdatePoints();
27 
28  virtual bool Solve(double input, double timeStep);
29 
30  virtual Element* GetCopy();
31 
32  protected:
33  double m_value = 1.0;
34 
35  wxGLString* m_glStringValue = NULL;
36  int m_fontSize = 10;
37 
38  std::vector<wxPoint2DDouble> m_triPts;
39 };
40 
41 #endif // GAIN_H
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Gain.cpp:165
-
Definition: Element.h:88
-
Definition: Gain.h:11
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Gain.cpp:177
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Gain.h:19
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Gain.cpp:71
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Gain.cpp:82
-
Definition: GainForm.h:7
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Gain.h:18
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Gain.cpp:18
-
Definition: ControlElement.h:53
-
Definition: wxGLString.h:77
+
1 #ifndef GAIN_H
2 #define GAIN_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
9 class GainForm;
10 
11 class Gain : public ControlElement
12 {
13  public:
14  Gain(int id);
15  ~Gain();
16 
17  virtual void Draw(wxPoint2DDouble translation, double scale) const;
18  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
19  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
20  virtual bool ShowForm(wxWindow* parent, Element* element);
21  virtual void Rotate(bool clockwise = true);
22  virtual void Move(wxPoint2DDouble position);
23  virtual void UpdateText() { SetValue(m_value); }
24  virtual void SetValue(double value);
25  virtual double GetValue() const { return m_value; }
26  virtual void UpdatePoints();
27 
28  virtual bool Solve(double input, double timeStep);
29 
30  virtual Element* GetCopy();
31 
32  protected:
33  double m_value = 1.0;
34 
35  wxGLString* m_glStringValue = NULL;
36  int m_fontSize = 10;
37 
38  std::vector<wxPoint2DDouble> m_triPts;
39 };
40 
41 #endif // GAIN_H
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Gain.cpp:165
+ +
Definition: Gain.h:11
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Gain.cpp:177
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Gain.h:19
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Gain.cpp:71
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Gain.cpp:82
+ +
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Gain.h:18
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Gain.cpp:18
+ +
+
- + diff --git a/docs/doxygen/html/_gain_form_8cpp_source.html b/docs/doxygen/html/_gain_form_8cpp_source.html new file mode 100644 index 0000000..edd34a7 --- /dev/null +++ b/docs/doxygen/html/_gain_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/GainForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
GainForm.cpp
+
+
+
1 #include "GainForm.h"
2 #include "Gain.h"
3 
4 GainForm::GainForm(wxWindow* parent, Gain* gain) : GainFormBase(parent)
5 {
6  SetSize(GetBestSize());
7 
8  m_parent = parent;
9  m_gain = gain;
10 
11  m_textCtrlValue->SetValue(m_gain->StringFromDouble(m_gain->GetValue()));
12 }
13 
14 GainForm::~GainForm() {}
15 void GainForm::OnOKButtonClick(wxCommandEvent& event)
16 {
17  if(ValidateData()) EndModal(wxID_OK);
18 }
19 
20 bool GainForm::ValidateData()
21 {
22  double value;
23  if(!m_gain->DoubleFromString(this, m_textCtrlValue->GetValue(), value,
24  _("Value entered incorrectly in the field \"Gain value\".")))
25  return false;
26 
27  m_gain->SetValue(value);
28  return true;
29 }
Definition: Gain.h:11
+ +
+
+ + + + diff --git a/docs/doxygen/html/_gain_form_8h_source.html b/docs/doxygen/html/_gain_form_8h_source.html index d6dfff1..0338739 100644 --- a/docs/doxygen/html/_gain_form_8h_source.html +++ b/docs/doxygen/html/_gain_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/GainForm.h Source File +Project/GainForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
GainForm.h
-
1 #ifndef GAINFORM_H
2 #define GAINFORM_H
3 #include "ElementForm.h"
4 
5 class Gain;
6 
7 class GainForm : public GainFormBase
8 {
9  public:
10  GainForm(wxWindow* parent, Gain* gain);
11  virtual ~GainForm();
12 
13  virtual bool ValidateData();
14 
15  protected:
16  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
17  virtual void OnOKButtonClick(wxCommandEvent& event);
18 
19  wxWindow* m_parent;
20  Gain* m_gain;
21 };
22 #endif // GAINFORM_H
Definition: Gain.h:11
-
Definition: ElementForm.h:949
-
Definition: GainForm.h:7
+
1 #ifndef GAINFORM_H
2 #define GAINFORM_H
3 #include "ElementForm.h"
4 
5 class Gain;
6 
7 class GainForm : public GainFormBase
8 {
9  public:
10  GainForm(wxWindow* parent, Gain* gain);
11  virtual ~GainForm();
12 
13  virtual bool ValidateData();
14 
15  protected:
16  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
17  virtual void OnOKButtonClick(wxCommandEvent& event);
18 
19  wxWindow* m_parent;
20  Gain* m_gain;
21 };
22 #endif // GAINFORM_H
Definition: Gain.h:11
+ +
+
- + diff --git a/docs/doxygen/html/_general_properties_form_8cpp_source.html b/docs/doxygen/html/_general_properties_form_8cpp_source.html new file mode 100644 index 0000000..2bd4ef8 --- /dev/null +++ b/docs/doxygen/html/_general_properties_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/GeneralPropertiesForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
GeneralPropertiesForm.cpp
+
+
+
1 #include "GeneralPropertiesForm.h"
2 #include "PropertiesData.h"
3 
4 GeneralPropertiesForm::GeneralPropertiesForm(wxWindow* parent, PropertiesData* properties)
6 {
7  m_properties = properties;
8  auto data = m_properties->GetGeneralPropertiesData();
9 
10  // Clear the choices and rebuild to set the correct translations.
11  m_choiceLanguage->Clear();
12  m_choiceLanguage->Insert(_("English"), 0);
13  m_choiceLanguage->Insert(_("Portuguese"), 1);
14  m_choiceTheme->Clear();
15  m_choiceTheme->Insert(_("Light"), 0);
16  m_choiceTheme->Insert(_("Dark"), 1);
17 
18  switch(data.language) {
19  case wxLANGUAGE_ENGLISH: {
20  m_choiceLanguage->SetSelection(0);
21  } break;
22  case wxLANGUAGE_PORTUGUESE_BRAZILIAN: {
23  m_choiceLanguage->SetSelection(1);
24  } break;
25  default: {
26  m_choiceLanguage->SetSelection(wxNOT_FOUND);
27  } break;
28  }
29  switch(data.theme) {
30  case THEME_LIGHT: {
31  m_choiceTheme->SetSelection(0);
32  } break;
33  case THEME_DARK: {
34  m_choiceTheme->SetSelection(1);
35  } break;
36  }
37 }
38 
39 GeneralPropertiesForm::~GeneralPropertiesForm() {}
40 void GeneralPropertiesForm::OnButtonOKClick(wxCommandEvent& event)
41 {
42  if(ValidateData()) EndModal(wxID_OK);
43 }
44 
45 bool GeneralPropertiesForm::ValidateData()
46 {
47  auto data = m_properties->GetGeneralPropertiesData();
48  auto checkData = m_properties->GetGeneralPropertiesData();
49  bool hasChanges = false;
50 
51  wxTextFile file("config.ini");
52  if(!file.Create()) {
53  if(!file.Open()) {
54  // Fail to access the file.
55  wxMessageDialog msgDialog(this,
56  _("It was not possible to access the init file.\nThe settings won't be applied."),
57  _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
58  msgDialog.ShowModal();
59  }
60  file.Clear();
61  }
62 
63  wxString line = "lang=";
64  switch(m_choiceLanguage->GetSelection()) {
65  case 0: {
66  line += "en";
67  data.language = wxLANGUAGE_ENGLISH;
68  } break;
69  case 1: {
70  line += "pt-br";
71  data.language = wxLANGUAGE_PORTUGUESE_BRAZILIAN;
72  } break;
73  }
74  file.AddLine(line);
75  if(data.language != checkData.language) hasChanges = true;
76 
77  line = "theme=";
78  switch(m_choiceTheme->GetSelection()) {
79  case 0: {
80  line += "light";
81  data.theme = THEME_LIGHT;
82  } break;
83  case 1: {
84  line += "dark";
85  data.theme = THEME_DARK;
86  } break;
87  }
88  file.AddLine(line);
89  if(data.theme != checkData.theme) hasChanges = true;
90 
91  file.Write();
92  file.Close();
93 
94  if(hasChanges) {
95  wxMessageDialog msgDialog(this, _("The application must be restarted to settings changes be applied."),
96  _("Info"), wxOK | wxCENTRE | wxICON_INFORMATION);
97  msgDialog.ShowModal();
98  }
99  m_properties->SetGeneralPropertiesData(data);
100  return true;
101 }
+ +
+
+ + + + diff --git a/docs/doxygen/html/_general_properties_form_8h_source.html b/docs/doxygen/html/_general_properties_form_8h_source.html index b2c3b1e..e3c19d7 100644 --- a/docs/doxygen/html/_general_properties_form_8h_source.html +++ b/docs/doxygen/html/_general_properties_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/GeneralPropertiesForm.h Source File +Project/GeneralPropertiesForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
GeneralPropertiesForm.h
-
1 #ifndef GENERALPROPERTIESFORM_H
2 #define GENERALPROPERTIESFORM_H
3 
4 #include "PropertiesForm.h"
5 
6 #include <wx/textfile.h>
7 #include <wx/msgdlg.h>
8 
9 class PropertiesData;
10 
12 {
13 public:
14  GeneralPropertiesForm(wxWindow* parent, PropertiesData* properties);
15  virtual ~GeneralPropertiesForm();
16 
17 protected:
18  virtual void OnButtonCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
19  virtual void OnButtonOKClick(wxCommandEvent& event);
20  virtual bool ValidateData();
21 
22  PropertiesData* m_properties = NULL;
23 };
24 #endif // GENERALPROPERTIESFORM_H
Definition: PropertiesData.h:40
-
Definition: GeneralPropertiesForm.h:11
-
Definition: PropertiesForm.h:48
+
1 #ifndef GENERALPROPERTIESFORM_H
2 #define GENERALPROPERTIESFORM_H
3 
4 #include "PropertiesForm.h"
5 
6 #include <wx/textfile.h>
7 #include <wx/msgdlg.h>
8 
9 class PropertiesData;
10 
12 {
13 public:
14  GeneralPropertiesForm(wxWindow* parent, PropertiesData* properties);
15  virtual ~GeneralPropertiesForm();
16 
17 protected:
18  virtual void OnButtonCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
19  virtual void OnButtonOKClick(wxCommandEvent& event);
20  virtual bool ValidateData();
21 
22  PropertiesData* m_properties = NULL;
23 };
24 #endif // GENERALPROPERTIESFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_generator_stab_form_8cpp_source.html b/docs/doxygen/html/_generator_stab_form_8cpp_source.html new file mode 100644 index 0000000..d1cfb97 --- /dev/null +++ b/docs/doxygen/html/_generator_stab_form_8cpp_source.html @@ -0,0 +1,102 @@ + + + + + + + +Project/GeneratorStabForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
GeneratorStabForm.cpp
+
+
+
1 #include "GeneratorStabForm.h"
2 #include "SwitchingForm.h"
3 #include "SyncGenerator.h"
4 #include "ControlEditor.h"
5 #include "ControlElementContainer.h"
6 
7 GeneratorStabForm::GeneratorStabForm(wxWindow* parent, SyncGenerator* syncGenerator) : GeneratorStabFormBase(parent)
8 {
9  SetSize(GetBestSize());
10  m_syncGenerator = syncGenerator;
11  m_parent = parent;
12 
13  SyncGeneratorElectricalData data = syncGenerator->GetElectricalData();
14 
15  m_checkBoxPlotSyncMachine->SetValue(data.plotSyncMachine);
16 
17  m_textCtrlInertia->SetValue(SyncGenerator::StringFromDouble(data.inertia));
18  m_textCtrlDamping->SetValue(SyncGenerator::StringFromDouble(data.damping));
19 
20  m_checkBoxUseAVR->SetValue(data.useAVR);
21  m_buttonEditAVR->Enable(data.useAVR);
22 
23  m_checkBoxUseSG->SetValue(data.useSpeedGovernor);
24  m_buttonEditSG->Enable(data.useSpeedGovernor);
25 
26  m_textCtrlRa->SetValue(SyncGenerator::StringFromDouble(data.armResistance));
27  m_textCtrlXp->SetValue(SyncGenerator::StringFromDouble(data.potierReactance));
28  m_textCtrlSat->SetValue(SyncGenerator::StringFromDouble(data.satFactor));
29 
30  m_textCtrlSyncXd->SetValue(SyncGenerator::StringFromDouble(data.syncXd));
31  m_textCtrlSyncXq->SetValue(SyncGenerator::StringFromDouble(data.syncXq));
32 
33  m_textCtrlTranXd->SetValue(SyncGenerator::StringFromDouble(data.transXd));
34  m_textCtrlTranXq->SetValue(SyncGenerator::StringFromDouble(data.transXq));
35  m_textCtrlTranTd0->SetValue(SyncGenerator::StringFromDouble(data.transTd0));
36  m_textCtrlTranTq0->SetValue(SyncGenerator::StringFromDouble(data.transTq0));
37 
38  m_textCtrlSubXd->SetValue(SyncGenerator::StringFromDouble(data.subXd));
39  m_textCtrlSubXq->SetValue(SyncGenerator::StringFromDouble(data.subXq));
40  m_textCtrlSubTd0->SetValue(SyncGenerator::StringFromDouble(data.subTd0));
41  m_textCtrlSubTq0->SetValue(SyncGenerator::StringFromDouble(data.subTq0));
42 }
43 
44 GeneratorStabForm::~GeneratorStabForm() {}
45 void GeneratorStabForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
46 void GeneratorStabForm::OnEditAVRButtonClick(wxCommandEvent& event)
47 {
48  SyncGeneratorElectricalData data = m_syncGenerator->GetElectricalData();
49  if(!data.avr) {
50  data.avr = new ControlElementContainer();
51  m_syncGenerator->SetElectricalData(data);
52  }
53  ControlEditor* cEditor = new ControlEditor(m_parent, IOControl::IN_TERMINAL_VOLTAGE | IOControl::OUT_FIELD_VOLTAGE);
54  cEditor->SetElementsList(data.avr->GetControlElementsList());
55  cEditor->SetConnectionsList(data.avr->GetConnectionLineList());
56  cEditor->SetControlContainer(data.avr);
57  cEditor->Show();
58 }
59 
60 void GeneratorStabForm::OnOKButtonClick(wxCommandEvent& event)
61 {
62  if(ValidateData()) EndModal(wxID_OK);
63 }
64 
65 void GeneratorStabForm::OnSpeedGovernorButtonClick(wxCommandEvent& event)
66 {
67  SyncGeneratorElectricalData data = m_syncGenerator->GetElectricalData();
68  if(!data.speedGov) {
69  data.speedGov = new ControlElementContainer();
70  m_syncGenerator->SetElectricalData(data);
71  }
72  ControlEditor* cEditor = new ControlEditor(m_parent, IOControl::IN_VELOCITY | IOControl::OUT_MEC_POWER);
73  cEditor->SetElementsList(data.speedGov->GetControlElementsList());
74  cEditor->SetConnectionsList(data.speedGov->GetConnectionLineList());
75  cEditor->SetControlContainer(data.speedGov);
76  cEditor->Show();
77 }
78 
79 void GeneratorStabForm::OnSwitchingButtonClick(wxCommandEvent& event)
80 {
81  if(ValidateData()) {
82  SwitchingForm swForm(m_parent, m_syncGenerator);
83  swForm.SetTitle(_("Synchronous generator: Switching"));
84  swForm.ShowModal();
85  EndModal(wxID_OK);
86  }
87 }
88 
89 bool GeneratorStabForm::ValidateData()
90 {
91  SyncGeneratorElectricalData data = m_syncGenerator->GetElectricalData();
92 
93  data.plotSyncMachine = m_checkBoxPlotSyncMachine->GetValue();
94 
95  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlInertia->GetValue(), data.inertia,
96  _("Value entered incorrectly in the field \"Inertia\".")))
97  return false;
98 
99  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlDamping->GetValue(), data.damping,
100  _("Value entered incorrectly in the field \"Damping factor\".")))
101  return false;
102 
103  data.useAVR = m_checkBoxUseAVR->GetValue();
104  data.useSpeedGovernor = m_checkBoxUseSG->GetValue();
105 
106  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlRa->GetValue(), data.armResistance,
107  _("Value entered incorrectly in the field \"Armature resistance\".")))
108  return false;
109 
110  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlXp->GetValue(), data.potierReactance,
111  _("Value entered incorrectly in the field \"Potier reactance\".")))
112  return false;
113 
114  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlSat->GetValue(), data.satFactor,
115  _("Value entered incorrectly in the field \"Saturation factor\".")))
116  return false;
117 
118  if(!m_syncGenerator->DoubleFromString(
119  m_parent, m_textCtrlSyncXd->GetValue(), data.syncXd,
120  _("Value entered incorrectly in the field \"Synchronous direct-axis reactance\".")))
121  return false;
122 
123  if(!m_syncGenerator->DoubleFromString(
124  m_parent, m_textCtrlSyncXq->GetValue(), data.syncXq,
125  _("Value entered incorrectly in the field \"Synchronous quadrature-axis reactance\".")))
126  return false;
127 
128  if(!m_syncGenerator->DoubleFromString(
129  m_parent, m_textCtrlTranXd->GetValue(), data.transXd,
130  _("Value entered incorrectly in the field \"Transitory direct-axis reactance\".")))
131  return false;
132 
133  if(!m_syncGenerator->DoubleFromString(
134  m_parent, m_textCtrlTranXq->GetValue(), data.transXq,
135  _("Value entered incorrectly in the field \"Transitory quadrature-axis reactance\".")))
136  return false;
137 
138  if(!m_syncGenerator->DoubleFromString(
139  m_parent, m_textCtrlTranTd0->GetValue(), data.transTd0,
140  _("Value entered incorrectly in the field \"Transitory direct-axis time constant\".")))
141  return false;
142 
143  if(!m_syncGenerator->DoubleFromString(
144  m_parent, m_textCtrlTranTq0->GetValue(), data.transTq0,
145  _("Value entered incorrectly in the field \"Transitory quadrature-axis time constant\".")))
146  return false;
147 
148  if(!m_syncGenerator->DoubleFromString(
149  m_parent, m_textCtrlSubXd->GetValue(), data.subXd,
150  _("Value entered incorrectly in the field \"Subtransitory direct-axis reactance\".")))
151  return false;
152 
153  if(!m_syncGenerator->DoubleFromString(
154  m_parent, m_textCtrlSubXq->GetValue(), data.subXq,
155  _("Value entered incorrectly in the field \"Subtransitory quadrature-axis reactance\".")))
156  return false;
157 
158  if(!m_syncGenerator->DoubleFromString(
159  m_parent, m_textCtrlSubTd0->GetValue(), data.subTd0,
160  _("Value entered incorrectly in the field \"Subtransitory direct-axis time constant\".")))
161  return false;
162 
163  if(!m_syncGenerator->DoubleFromString(
164  m_parent, m_textCtrlSubTq0->GetValue(), data.subTq0,
165  _("Value entered incorrectly in the field \"Subtransitory quadrature-axis time constant\".")))
166  return false;
167 
168  m_syncGenerator->SetElectricalData(data);
169 
170  return true;
171 }
172 void GeneratorStabForm::UseAVRClick(wxCommandEvent& event) { m_buttonEditAVR->Enable(m_checkBoxUseAVR->GetValue()); }
173 void GeneratorStabForm::UseSGClick(wxCommandEvent& event) { m_buttonEditSG->Enable(m_checkBoxUseSG->GetValue()); }
+ + + + + +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+
+
+ + + + diff --git a/docs/doxygen/html/_generator_stab_form_8h_source.html b/docs/doxygen/html/_generator_stab_form_8h_source.html index 316d9f3..37dd358 100644 --- a/docs/doxygen/html/_generator_stab_form_8h_source.html +++ b/docs/doxygen/html/_generator_stab_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/GeneratorStabForm.h Source File +Project/GeneratorStabForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
GeneratorStabForm.h
-
1 #ifndef GENERATORSTABFORM_H
2 #define GENERATORSTABFORM_H
3 
4 #include "ElementForm.h"
5 
6 class SwitchingForm;
7 class SyncGenerator;
8 class ControlEditor;
10 
12 {
13  public:
14  GeneratorStabForm(wxWindow* parent, SyncGenerator* syncGenerator);
15  virtual ~GeneratorStabForm();
16 
17  protected:
18  virtual void UseAVRClick(wxCommandEvent& event);
19  virtual void UseSGClick(wxCommandEvent& event);
20  virtual void OnCancelButtonClick(wxCommandEvent& event);
21  virtual void OnEditAVRButtonClick(wxCommandEvent& event);
22  virtual void OnOKButtonClick(wxCommandEvent& event);
23  virtual void OnSpeedGovernorButtonClick(wxCommandEvent& event);
24  virtual void OnSwitchingButtonClick(wxCommandEvent& event);
25 
26  virtual bool ValidateData();
27 
28  SyncGenerator* m_syncGenerator = NULL;
29  wxWindow* m_parent = NULL;
30 };
31 #endif // GENERATORSTABFORM_H
Definition: SwitchingForm.h:8
-
Definition: SyncGenerator.h:110
-
Definition: GeneratorStabForm.h:11
-
Definition: ControlElementContainer.h:20
-
Definition: ElementForm.h:247
-
Definition: ControlEditor.h:67
+
1 #ifndef GENERATORSTABFORM_H
2 #define GENERATORSTABFORM_H
3 
4 #include "ElementForm.h"
5 
6 class SwitchingForm;
7 class SyncGenerator;
8 class ControlEditor;
10 
12 {
13  public:
14  GeneratorStabForm(wxWindow* parent, SyncGenerator* syncGenerator);
15  virtual ~GeneratorStabForm();
16 
17  protected:
18  virtual void UseAVRClick(wxCommandEvent& event);
19  virtual void UseSGClick(wxCommandEvent& event);
20  virtual void OnCancelButtonClick(wxCommandEvent& event);
21  virtual void OnEditAVRButtonClick(wxCommandEvent& event);
22  virtual void OnOKButtonClick(wxCommandEvent& event);
23  virtual void OnSpeedGovernorButtonClick(wxCommandEvent& event);
24  virtual void OnSwitchingButtonClick(wxCommandEvent& event);
25 
26  virtual bool ValidateData();
27 
28  SyncGenerator* m_syncGenerator = NULL;
29  wxWindow* m_parent = NULL;
30 };
31 #endif // GENERATORSTABFORM_H
+ + + + +
+
- + diff --git a/docs/doxygen/html/_graphical_element_8cpp_source.html b/docs/doxygen/html/_graphical_element_8cpp_source.html new file mode 100644 index 0000000..65f4972 --- /dev/null +++ b/docs/doxygen/html/_graphical_element_8cpp_source.html @@ -0,0 +1,96 @@ + + + + + + + +Project/GraphicalElement.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
GraphicalElement.cpp
+
+
+
1 #include "GraphicalElement.h"
2 
3 GraphicalElement::GraphicalElement() : Element()
4 {
5 }
6 
7 GraphicalElement::~GraphicalElement()
8 {
9 }
10 
+
+
+ + + + diff --git a/docs/doxygen/html/_graphical_element_8h_source.html b/docs/doxygen/html/_graphical_element_8h_source.html index ce200a5..67bc3f5 100644 --- a/docs/doxygen/html/_graphical_element_8h_source.html +++ b/docs/doxygen/html/_graphical_element_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/GraphicalElement.h Source File +Project/GraphicalElement.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
GraphicalElement.h
-
1 #ifndef GRAPHICALELEMENT_H
2 #define GRAPHICALELEMENT_H
3 
4 #include "Element.h"
5 
6 class GraphicalElement : public Element
7 {
8 public:
11 
12 };
13 
14 #endif // GRAPHICALELEMENT_H
Definition: GraphicalElement.h:6
-
Definition: Element.h:88
+
1 #ifndef GRAPHICALELEMENT_H
2 #define GRAPHICALELEMENT_H
3 
4 #include "Element.h"
5 
6 class GraphicalElement : public Element
7 {
8 public:
11 
12 };
13 
14 #endif // GRAPHICALELEMENT_H
+
Class to manage color of OpenGL.
+
- + diff --git a/docs/doxygen/html/_i_o_control_8cpp_source.html b/docs/doxygen/html/_i_o_control_8cpp_source.html new file mode 100644 index 0000000..17d92f7 --- /dev/null +++ b/docs/doxygen/html/_i_o_control_8cpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Project/IOControl.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IOControl.cpp
+
+
+
1 #include "IOControl.h"
2 #include "IOControlForm.h"
3 
4 IOControl::IOControl(int ioFlags, int id) : ControlElement(id)
5 {
6  m_ioFlags = ioFlags;
7 
8  Node* node = new Node(m_position, Node::NODE_IN, m_borderSize);
9  m_nodeList.push_back(node);
10 
11  if(ioFlags & IN_TERMINAL_VOLTAGE)
12  SetValue(IN_TERMINAL_VOLTAGE);
13  else if(ioFlags & IN_VELOCITY)
14  SetValue(IN_VELOCITY);
15  node->StartMove(m_position);
16 }
17 
18 IOControl::~IOControl() {}
19 void IOControl::Draw(wxPoint2DDouble translation, double scale) const
20 {
21  std::vector<wxPoint2DDouble> pts;
22  if(m_angle == 0.0) {
23  pts.push_back(m_rect.GetLeftTop() + wxPoint2DDouble(m_borderSize, m_borderSize));
24  pts.push_back(m_rect.GetRightTop() + wxPoint2DDouble(-m_borderSize - 10, m_borderSize));
25  pts.push_back(m_position + wxPoint2DDouble(m_width / 2 - m_borderSize, 0));
26  pts.push_back(m_rect.GetRightBottom() + wxPoint2DDouble(-m_borderSize - 10, -m_borderSize));
27  pts.push_back(m_rect.GetLeftBottom() + wxPoint2DDouble(m_borderSize, -m_borderSize));
28  } else if(m_angle == 90.0) {
29  pts.push_back(m_rect.GetLeftTop() + wxPoint2DDouble(m_borderSize, m_borderSize));
30  pts.push_back(m_rect.GetRightTop() + wxPoint2DDouble(-m_borderSize, m_borderSize));
31  pts.push_back(m_rect.GetRightBottom() + wxPoint2DDouble(-m_borderSize, -m_borderSize - 10));
32  pts.push_back(m_position + wxPoint2DDouble(0, m_height / 2 - m_borderSize));
33  pts.push_back(m_rect.GetLeftBottom() + wxPoint2DDouble(m_borderSize, -m_borderSize - 10));
34  } else if(m_angle == 180.0) {
35  pts.push_back(m_rect.GetLeftTop() + wxPoint2DDouble(m_borderSize + 10, m_borderSize));
36  pts.push_back(m_rect.GetRightTop() + wxPoint2DDouble(-m_borderSize, m_borderSize));
37  pts.push_back(m_rect.GetRightBottom() + wxPoint2DDouble(-m_borderSize, -m_borderSize));
38  pts.push_back(m_rect.GetLeftBottom() + wxPoint2DDouble(m_borderSize + 10, -m_borderSize));
39  pts.push_back(m_position + wxPoint2DDouble(-m_width / 2 + m_borderSize, 0));
40  } else if(m_angle == 270.0) {
41  pts.push_back(m_position + wxPoint2DDouble(0, -m_height / 2 + m_borderSize));
42  pts.push_back(m_rect.GetRightTop() + wxPoint2DDouble(-m_borderSize, m_borderSize + 10));
43  pts.push_back(m_rect.GetRightBottom() + wxPoint2DDouble(-m_borderSize, -m_borderSize));
44  pts.push_back(m_rect.GetLeftBottom() + wxPoint2DDouble(m_borderSize, -m_borderSize));
45  pts.push_back(m_rect.GetLeftTop() + wxPoint2DDouble(m_borderSize, m_borderSize + 10));
46  }
47 
48  if(m_selected) {
49  glColor4dv(m_selectionColour.GetRGBA());
50  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
51  std::vector<wxPoint2DDouble> selPts = pts;
52  if(m_angle == 0.0) {
53  selPts[0] += wxPoint2DDouble(-borderSize / 2, -borderSize / 2);
54  selPts[1] += wxPoint2DDouble(borderSize / 2, -borderSize / 2);
55  selPts[2] += wxPoint2DDouble(1.5 * borderSize / 2, 0);
56  selPts[3] += wxPoint2DDouble(borderSize / 2, borderSize / 2);
57  selPts[4] += wxPoint2DDouble(-borderSize / 2, borderSize / 2);
58  } else if(m_angle == 90.0) {
59  selPts[0] += wxPoint2DDouble(-borderSize / 2, -borderSize / 2);
60  selPts[1] += wxPoint2DDouble(borderSize / 2, -borderSize / 2);
61  selPts[2] += wxPoint2DDouble(borderSize / 2, borderSize / 2);
62  selPts[3] += wxPoint2DDouble(0, 1.5 * borderSize / 2);
63  selPts[4] += wxPoint2DDouble(-borderSize / 2, borderSize / 2);
64  } else if(m_angle == 180.0) {
65  selPts[0] += wxPoint2DDouble(-borderSize / 2, -borderSize / 2);
66  selPts[1] += wxPoint2DDouble(borderSize / 2, -borderSize / 2);
67  selPts[2] += wxPoint2DDouble(borderSize / 2, borderSize / 2);
68  selPts[3] += wxPoint2DDouble(-borderSize / 2, borderSize / 2);
69  selPts[4] += wxPoint2DDouble(-1.5 * borderSize / 2, 0);
70  } else if(m_angle == 270.0) {
71  selPts[0] += wxPoint2DDouble(0, -1.5 * borderSize / 2);
72  selPts[1] += wxPoint2DDouble(borderSize / 2, -borderSize / 2);
73  selPts[2] += wxPoint2DDouble(borderSize / 2, borderSize / 2);
74  selPts[3] += wxPoint2DDouble(-borderSize / 2, borderSize / 2);
75  selPts[4] += wxPoint2DDouble(-borderSize / 2, -borderSize / 2);
76  }
77  DrawLine(selPts, GL_POLYGON);
78  }
79  glLineWidth(1.0);
80  glColor4d(1.0, 1.0, 1.0, 1.0);
81  DrawLine(pts, GL_POLYGON);
82  glColor4d(0.0, 0.0, 0.0, 1.0);
83  DrawLine(pts, GL_LINE_LOOP);
84 
85  // Plot number.
86  glEnable(GL_TEXTURE_2D);
87  glColor4d(0.0, 0.0, 0.0, 1.0);
88  m_glStringValue->bind();
89  if(m_angle == 0.0) {
90  m_glStringValue->render(m_position.m_x - 5, m_position.m_y);
91  } else if(m_angle == 90.0) {
92  m_glStringValue->render(m_position.m_x, m_position.m_y - 5);
93  } else if(m_angle == 180.0) {
94  m_glStringValue->render(m_position.m_x + 5, m_position.m_y);
95  } else if(m_angle == 270.0) {
96  m_glStringValue->render(m_position.m_x, m_position.m_y + 5);
97  }
98 
99  glDisable(GL_TEXTURE_2D);
100 
101  glColor4d(0.0, 0.0, 0.0, 1.0);
102  DrawNodes();
103 }
104 
105 bool IOControl::ShowForm(wxWindow* parent, Element* element)
106 {
107  IOControlForm* form = new IOControlForm(parent, this);
108  if(form->ShowModal() == wxID_OK) {
109  form->Destroy();
110  return true;
111  }
112  form->Destroy();
113  return false;
114 }
115 
116 void IOControl::Rotate(bool clockwise)
117 {
118  if(clockwise)
119  m_angle += 90.0;
120  else
121  m_angle -= 90.0;
122  if(m_angle >= 360.0)
123  m_angle = 0.0;
124  else if(m_angle < 0)
125  m_angle = 270.0;
126 
127  UpdatePoints();
128 
129  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
130  Node* node = *it;
131  node->Rotate(clockwise);
132  }
133 }
134 
135 wxString IOControl::GenerateText()
136 {
137  wxString omega = wxString::FromUTF8("\xCF\x89");
138 
139  switch(m_value) {
140  case IN_TERMINAL_VOLTAGE: {
141  m_ioNodeType = Node::NODE_OUT;
142  return _("Vt");
143  } break;
144  case IN_VELOCITY: {
145  m_ioNodeType = Node::NODE_OUT;
146  return omega;
147  } break;
148  case IN_ACTIVE_POWER: {
149  m_ioNodeType = Node::NODE_OUT;
150  return _("Pe");
151  } break;
152  case IN_REACTIVE_POWER: {
153  m_ioNodeType = Node::NODE_OUT;
154  return _("Qe");
155  } break;
156  case OUT_FIELD_VOLTAGE: {
157  m_ioNodeType = Node::NODE_IN;
158  return _("Vf");
159  } break;
160  case OUT_MEC_POWER: {
161  m_ioNodeType = Node::NODE_IN;
162  return _("Pm");
163  } break;
164  }
165  return "";
166 }
167 
168 void IOControl::SetValue(IOFlags value)
169 {
170  m_value = value;
171  wxString text = GenerateText();
172 
173  wxFont font(m_fontSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
174  wxScreenDC dc;
175 
176  if(m_glStringValue) {
177  delete m_glStringValue;
178  m_glStringValue = NULL;
179  }
180  m_glStringValue = new wxGLString(text);
181  m_glStringValue->setFont(font);
182  m_glStringValue->consolidate(&dc);
183 
184  m_width = m_glStringValue->getWidth() + 10 + 2 * m_borderSize;
185  m_height = m_glStringValue->getheight() + 10 + 2 * m_borderSize;
186 
187  SetPosition(m_position); // Update rectangle.
188 
189  UpdatePoints();
190 }
191 
192 void IOControl::UpdatePoints()
193 {
194  if(m_nodeList.size() != 0) {
195  Node* node = m_nodeList[0];
196  if(node->GetNodeType() != m_ioNodeType) {
197  // Rotate 180 degrees
198  node->Rotate();
199  node->Rotate();
200  }
201  node->SetNodeType(m_ioNodeType);
202  if(m_angle == 0.0) {
203  if(m_ioNodeType == Node::NODE_IN)
204  node->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
205  else
206  node->SetPosition(m_position + wxPoint2DDouble(m_width / 2 - 2, 0));
207  } else if(m_angle == 90.0) {
208  if(m_ioNodeType == Node::NODE_IN)
209  node->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
210  else
211  node->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2 - 2));
212  } else if(m_angle == 180.0) {
213  if(m_ioNodeType == Node::NODE_IN)
214  node->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
215  else
216  node->SetPosition(m_position + wxPoint2DDouble(2 - m_width / 2, 0));
217  } else if(m_angle == 270.0) {
218  if(m_ioNodeType == Node::NODE_IN)
219  node->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
220  else
221  node->SetPosition(m_position + wxPoint2DDouble(0, 2 - m_height / 2));
222  }
223  }
224 }
225 
227 {
228  IOControl* copy = new IOControl(m_ioFlags, m_elementID);
229  *copy = *this;
230  m_glStringValue = NULL;
231  SetValue(m_value);
232  return copy;
233 }
+
virtual void DrawLine(std::vector< wxPoint2DDouble > points, GLenum mode=GL_LINE_STRIP) const
Draw line.
Definition: Element.cpp:73
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: IOControl.cpp:116
+ +
virtual Element * GetCopy()
Get a the element copy.
Definition: IOControl.cpp:226
+
void SetPosition(const wxPoint2DDouble position)
Set the element position and update the rectangle.
Definition: Element.cpp:10
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: IOControl.cpp:105
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: IOControl.cpp:19
+ + + +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
+
+ + + + diff --git a/docs/doxygen/html/_i_o_control_8h_source.html b/docs/doxygen/html/_i_o_control_8h_source.html index 2604347..ca39450 100644 --- a/docs/doxygen/html/_i_o_control_8h_source.html +++ b/docs/doxygen/html/_i_o_control_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/IOControl.h Source File +Project/IOControl.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
IOControl.h
-
1 #ifndef IOCONTROL_H
2 #define IOCONTROL_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
9 class IOControlForm;
10 
11 class IOControl : public ControlElement
12 {
13  public:
14  enum IOFlags {
15  IN_TERMINAL_VOLTAGE = 1 << 0,
16  IN_VELOCITY = 1 << 1,
17  IN_ACTIVE_POWER = 1 << 2,
18  IN_REACTIVE_POWER = 1 << 3,
19  OUT_FIELD_VOLTAGE = 1 << 4,
20  OUT_MEC_POWER = 1 << 5
21  };
22 
23  IOControl(int ioFlags, int id);
24  ~IOControl();
25 
26  virtual void Draw(wxPoint2DDouble translation, double scale) const;
27  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
28  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
29  virtual bool ShowForm(wxWindow* parent, Element* element);
30  virtual void Rotate(bool clockwise = true);
31  virtual void UpdateText() { SetValue(m_value); }
32  virtual wxString GenerateText();
33  virtual void UpdatePoints();
34 
35  virtual IOFlags GetValue() const { return m_value; }
36  virtual void SetValue(IOFlags value);
37  virtual int GetIOFlags() const { return m_ioFlags; }
38  virtual Node::NodeType GetType() { return m_ioNodeType; }
39 
40  virtual Element* GetCopy();
41  protected:
42  IOFlags m_value;
43  int m_ioFlags;
44 
45  Node::NodeType m_ioNodeType = Node::NODE_IN;
46 
47  wxGLString* m_glStringValue = NULL;
48  int m_fontSize = 10;
49 };
50 
51 #endif // IOCONTROL_H
Definition: Element.h:88
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: IOControl.h:27
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: IOControl.cpp:116
-
Definition: IOControl.h:11
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: IOControl.h:28
-
virtual Element * GetCopy()
Get a the element copy.
Definition: IOControl.cpp:226
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: IOControl.cpp:105
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: IOControl.cpp:19
-
Definition: IOControlForm.h:7
-
Definition: ControlElement.h:53
-
Definition: wxGLString.h:77
+
1 #ifndef IOCONTROL_H
2 #define IOCONTROL_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
9 class IOControlForm;
10 
11 class IOControl : public ControlElement
12 {
13  public:
14  enum IOFlags {
15  IN_TERMINAL_VOLTAGE = 1 << 0,
16  IN_VELOCITY = 1 << 1,
17  IN_ACTIVE_POWER = 1 << 2,
18  IN_REACTIVE_POWER = 1 << 3,
19  OUT_FIELD_VOLTAGE = 1 << 4,
20  OUT_MEC_POWER = 1 << 5
21  };
22 
23  IOControl(int ioFlags, int id);
24  ~IOControl();
25 
26  virtual void Draw(wxPoint2DDouble translation, double scale) const;
27  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
28  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
29  virtual bool ShowForm(wxWindow* parent, Element* element);
30  virtual void Rotate(bool clockwise = true);
31  virtual void UpdateText() { SetValue(m_value); }
32  virtual wxString GenerateText();
33  virtual void UpdatePoints();
34 
35  virtual IOFlags GetValue() const { return m_value; }
36  virtual void SetValue(IOFlags value);
37  virtual int GetIOFlags() const { return m_ioFlags; }
38  virtual Node::NodeType GetType() { return m_ioNodeType; }
39 
40  virtual Element* GetCopy();
41  protected:
42  IOFlags m_value;
43  int m_ioFlags;
44 
45  Node::NodeType m_ioNodeType = Node::NODE_IN;
46 
47  wxGLString* m_glStringValue = NULL;
48  int m_fontSize = 10;
49 };
50 
51 #endif // IOCONTROL_H
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: IOControl.h:27
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: IOControl.cpp:116
+ +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: IOControl.h:28
+
virtual Element * GetCopy()
Get a the element copy.
Definition: IOControl.cpp:226
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: IOControl.cpp:105
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: IOControl.cpp:19
+ + +
+
- + diff --git a/docs/doxygen/html/_i_o_control_form_8cpp_source.html b/docs/doxygen/html/_i_o_control_form_8cpp_source.html new file mode 100644 index 0000000..83a9425 --- /dev/null +++ b/docs/doxygen/html/_i_o_control_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/IOControlForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IOControlForm.cpp
+
+
+
1 #include "IOControlForm.h"
2 
3 IOControlForm::IOControlForm(wxWindow* parent, IOControl* ioControl) : IOControlFormBase(parent)
4 {
5  SetSize(GetBestSize());
6 
7  m_parent = parent;
8  m_ioControl = ioControl;
9 
10  int ioFlags = m_ioControl->GetIOFlags();
11  int inChoiceNumber = -1;
12  int outChoiceNumber = -1;
13 
14  if(ioFlags & IOControl::IN_TERMINAL_VOLTAGE) {
15  m_choiceInput->Append(_("Terminal voltage"));
16  m_inputFlags.push_back(IOControl::IN_TERMINAL_VOLTAGE);
17  if(m_ioControl->GetValue() == IOControl::IN_TERMINAL_VOLTAGE) inChoiceNumber = (int)m_inputFlags.size() - 1;
18  }
19  if(ioFlags & IOControl::IN_VELOCITY) {
20  m_choiceInput->Append(_("Velocity"));
21  m_inputFlags.push_back(IOControl::IN_VELOCITY);
22  if(m_ioControl->GetValue() == IOControl::IN_VELOCITY) inChoiceNumber = (int)m_inputFlags.size() - 1;
23  }
24  if(ioFlags & IOControl::IN_ACTIVE_POWER) {
25  m_choiceInput->Append(_("Active power"));
26  m_inputFlags.push_back(IOControl::IN_ACTIVE_POWER);
27  if(m_ioControl->GetValue() == IOControl::IN_ACTIVE_POWER) inChoiceNumber = (int)m_inputFlags.size() - 1;
28  }
29  if(ioFlags & IOControl::IN_REACTIVE_POWER) {
30  m_choiceInput->Append(_("Reactive power"));
31  m_inputFlags.push_back(IOControl::IN_REACTIVE_POWER);
32  if(m_ioControl->GetValue() == IOControl::IN_REACTIVE_POWER) inChoiceNumber = (int)m_inputFlags.size() - 1;
33  }
34  if(ioFlags & IOControl::OUT_FIELD_VOLTAGE) {
35  m_choiceOutput->Append(_("Field voltage"));
36  m_outputFlags.push_back(IOControl::OUT_FIELD_VOLTAGE);
37  if(m_ioControl->GetValue() == IOControl::OUT_FIELD_VOLTAGE) outChoiceNumber = (int)m_outputFlags.size() - 1;
38  }
39  if(ioFlags & IOControl::OUT_MEC_POWER) {
40  m_choiceOutput->Append(_("Mechanical power"));
41  m_outputFlags.push_back(IOControl::OUT_MEC_POWER);
42  if(m_ioControl->GetValue() == IOControl::OUT_MEC_POWER) outChoiceNumber = (int)m_outputFlags.size() - 1;
43  }
44 
45  if(inChoiceNumber != -1) {
46  m_choiceInput->SetSelection(inChoiceNumber);
47  m_checkBoxInput->SetValue(true);
48  m_checkBoxOutput->SetValue(false);
49  m_choiceOutput->Enable(false);
50  } else {
51  m_choiceOutput->SetSelection(outChoiceNumber);
52  m_checkBoxInput->SetValue(false);
53  m_checkBoxOutput->SetValue(true);
54  m_choiceInput->Enable(false);
55  }
56 }
57 
58 IOControlForm::~IOControlForm() {}
59 void IOControlForm::OnOKButtonClick(wxCommandEvent& event)
60 {
61  if(ValidateData()) EndModal(wxID_OK);
62 }
63 
64 bool IOControlForm::ValidateData()
65 {
66  if(m_checkBoxInput->GetValue() && m_choiceInput->GetSelection() != -1) {
67  m_ioControl->SetValue(m_inputFlags[m_choiceInput->GetSelection()]);
68  return true;
69  } else if(m_checkBoxOutput->GetValue() && m_choiceOutput->GetSelection() != -1) {
70  m_ioControl->SetValue(m_outputFlags[m_choiceOutput->GetSelection()]);
71  return true;
72  }
73 
74  return false;
75 }
76 
77 void IOControlForm::OnInputChecked(wxCommandEvent& event)
78 {
79  m_checkBoxInput->SetValue(true);
80  m_checkBoxOutput->SetValue(false);
81  m_choiceOutput->Enable(false);
82  m_choiceInput->Enable(true);
83 }
84 
85 void IOControlForm::OnOutputChecked(wxCommandEvent& event)
86 {
87  m_checkBoxOutput->SetValue(true);
88  m_checkBoxInput->SetValue(false);
89  m_choiceOutput->Enable(true);
90  m_choiceInput->Enable(false);
91 }
+ +
+
+ + + + diff --git a/docs/doxygen/html/_i_o_control_form_8h_source.html b/docs/doxygen/html/_i_o_control_form_8h_source.html index 32f8731..6953fcf 100644 --- a/docs/doxygen/html/_i_o_control_form_8h_source.html +++ b/docs/doxygen/html/_i_o_control_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/IOControlForm.h Source File +Project/IOControlForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
IOControlForm.h
-
1 #ifndef IOCONTROLFORM_H
2 #define IOCONTROLFORM_H
3 
4 #include "ElementForm.h"
5 #include "IOControl.h"
6 
8 {
9  public:
10  IOControlForm(wxWindow* parent, IOControl* ioControl);
11  virtual ~IOControlForm();
12 
13  virtual bool ValidateData();
14 
15  protected:
16  virtual void OnInputChecked(wxCommandEvent& event);
17  virtual void OnOutputChecked(wxCommandEvent& event);
18  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
19  virtual void OnOKButtonClick(wxCommandEvent& event);
20 
21  wxWindow* m_parent;
22  IOControl* m_ioControl;
23 
24  std::vector<IOControl::IOFlags> m_inputFlags;
25  std::vector<IOControl::IOFlags> m_outputFlags;
26 };
27 #endif // IOCONTROLFORM_H
Definition: ElementForm.h:975
-
Definition: IOControl.h:11
-
Definition: IOControlForm.h:7
+
1 #ifndef IOCONTROLFORM_H
2 #define IOCONTROLFORM_H
3 
4 #include "ElementForm.h"
5 #include "IOControl.h"
6 
8 {
9  public:
10  IOControlForm(wxWindow* parent, IOControl* ioControl);
11  virtual ~IOControlForm();
12 
13  virtual bool ValidateData();
14 
15  protected:
16  virtual void OnInputChecked(wxCommandEvent& event);
17  virtual void OnOutputChecked(wxCommandEvent& event);
18  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
19  virtual void OnOKButtonClick(wxCommandEvent& event);
20 
21  wxWindow* m_parent;
22  IOControl* m_ioControl;
23 
24  std::vector<IOControl::IOFlags> m_inputFlags;
25  std::vector<IOControl::IOFlags> m_outputFlags;
26 };
27 #endif // IOCONTROLFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_ind_motor_8cpp_source.html b/docs/doxygen/html/_ind_motor_8cpp_source.html new file mode 100644 index 0000000..1f7573f --- /dev/null +++ b/docs/doxygen/html/_ind_motor_8cpp_source.html @@ -0,0 +1,114 @@ + + + + + + + +Project/IndMotor.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IndMotor.cpp
+
+
+
1 #include "IndMotorForm.h"
2 #include "IndMotor.h"
3 
4 IndMotor::IndMotor()
5  : Machines()
6 {
7 }
8 IndMotor::IndMotor(wxString name)
9  : Machines()
10 {
11  m_electricalData.name = name;
12 }
13 IndMotor::~IndMotor() {}
14 void IndMotor::DrawSymbol() const
15 {
16  std::vector<wxPoint2DDouble> mPts;
17  mPts.push_back(wxPoint2DDouble(-10, 13) + m_position);
18  mPts.push_back(wxPoint2DDouble(-10, -13) + m_position);
19  mPts.push_back(wxPoint2DDouble(0, 2) + m_position);
20  mPts.push_back(wxPoint2DDouble(10, -13) + m_position);
21  mPts.push_back(wxPoint2DDouble(10, 13) + m_position);
22  DrawLine(mPts);
23 }
24 
25 bool IndMotor::GetContextMenu(wxMenu& menu)
26 {
27  menu.Append(ID_EDIT_ELEMENT, _("Edit induction motor"));
28  GeneralMenuItens(menu);
29  return true;
30 }
31 
32 bool IndMotor::ShowForm(wxWindow* parent, Element* element)
33 {
34  IndMotorForm* indMotorForm = new IndMotorForm(parent, this);
35  if(indMotorForm->ShowModal() == wxID_OK) {
36  indMotorForm->Destroy();
37  return true;
38  }
39  indMotorForm->Destroy();
40  return false;
41 }
42 
43 IndMotorElectricalData IndMotor::GetPUElectricalData(double systemPowerBase)
44 {
45  IndMotorElectricalData data = m_electricalData;
46 
47  switch(data.activePowerUnit) {
48  case UNIT_W: {
49  data.activePower = data.activePower / systemPowerBase;
50  data.activePowerUnit = UNIT_PU;
51  } break;
52  case UNIT_kW: {
53  data.activePower = (data.activePower * 1e3) / systemPowerBase;
54  data.activePowerUnit = UNIT_PU;
55  } break;
56  case UNIT_MW: {
57  data.activePower = (data.activePower * 1e6) / systemPowerBase;
58  data.activePowerUnit = UNIT_PU;
59  } break;
60  default:
61  break;
62  }
63  switch(data.reactivePowerUnit) {
64  case UNIT_VAr: {
65  data.reactivePower = data.reactivePower / systemPowerBase;
66  data.reactivePowerUnit = UNIT_PU;
67  } break;
68  case UNIT_kVAr: {
69  data.reactivePower = (data.reactivePower * 1e3) / systemPowerBase;
70  data.reactivePowerUnit = UNIT_PU;
71  } break;
72  case UNIT_MVAr: {
73  data.reactivePower = (data.reactivePower * 1e6) / systemPowerBase;
74  data.reactivePowerUnit = UNIT_PU;
75  } break;
76  default:
77  break;
78  }
79 
80  return data;
81 }
82 
84 {
85  IndMotor* copy = new IndMotor();
86  *copy = *this;
87  return copy;
88 }
89 
90 wxString IndMotor::GetTipText() const
91 {
92  wxString tipText = m_electricalData.name;
93  tipText += "\n";
94  double activePower = m_electricalData.activePower;
95  if(!m_online) activePower = 0.0;
96  tipText += _("\nP = ") + wxString::FromDouble(activePower, 5);
97  switch(m_electricalData.activePowerUnit) {
98  case UNIT_PU: {
99  tipText += _(" p.u.");
100  } break;
101  case UNIT_W: {
102  tipText += _(" W");
103  } break;
104  case UNIT_kW: {
105  tipText += _(" kW");
106  } break;
107  case UNIT_MW: {
108  tipText += _(" MW");
109  } break;
110  default:
111  break;
112  }
113  double reactivePower = m_electricalData.reactivePower;
114  if(!m_online) reactivePower = 0.0;
115  tipText += _("\nQ = ") + wxString::FromDouble(reactivePower, 5);
116  switch(m_electricalData.reactivePowerUnit) {
117  case UNIT_PU: {
118  tipText += _(" p.u.");
119  } break;
120  case UNIT_VAr: {
121  tipText += _(" VAr");
122  } break;
123  case UNIT_kVAr: {
124  tipText += _(" kVAr");
125  } break;
126  case UNIT_MVAr: {
127  tipText += _(" MVAr");
128  } break;
129  default:
130  break;
131  }
132 
133  return tipText;
134 }
+ +
virtual void DrawLine(std::vector< wxPoint2DDouble > points, GLenum mode=GL_LINE_STRIP) const
Draw line.
Definition: Element.cpp:73
+ +
virtual wxString GetTipText() const
Get the tip text.
Definition: IndMotor.cpp:90
+ + +
virtual void GeneralMenuItens(wxMenu &menu)
Insert general itens to context menu.
Definition: Element.cpp:228
+ + + +
virtual Element * GetCopy()
Get a the element copy.
Definition: IndMotor.cpp:83
+ + + + +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: IndMotor.cpp:32
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: IndMotor.cpp:25
+ +
+
+ + + + diff --git a/docs/doxygen/html/_ind_motor_8h_source.html b/docs/doxygen/html/_ind_motor_8h_source.html index 0967dd7..3dd48aa 100644 --- a/docs/doxygen/html/_ind_motor_8h_source.html +++ b/docs/doxygen/html/_ind_motor_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/IndMotor.h Source File +Project/IndMotor.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
IndMotor.h
-
1 #ifndef INDMOTOR_H
2 #define INDMOTOR_H
3 
4 #include "Machines.h"
5 
6 class IndMotorForm;
7 
9 {
10  wxString name;
11  double activePower = 100.0;
12  ElectricalUnit activePowerUnit = UNIT_MW;
13  double reactivePower = 0.0;
14  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
15 };
16 
17 class IndMotor : public Machines
18 {
19  public:
20  IndMotor();
21  IndMotor(wxString name);
22  ~IndMotor();
23 
24  virtual Element* GetCopy();
25  virtual void DrawSymbol() const;
26  virtual bool GetContextMenu(wxMenu& menu);
27  virtual wxString GetTipText() const;
28  virtual bool ShowForm(wxWindow* parent, Element* element);
29  virtual IndMotorElectricalData GetElectricalData() { return m_electricalData; }
30  virtual IndMotorElectricalData GetPUElectricalData(double systemPowerBase);
31  virtual void SetElectricalData(IndMotorElectricalData electricalData) { m_electricalData = electricalData; }
32  protected:
33  IndMotorElectricalData m_electricalData;
34 };
35 
36 #endif // INDMOTOR_H
Definition: IndMotor.h:8
-
Definition: Element.h:88
-
Definition: PowerElement.h:19
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:25
-
Definition: IndMotor.h:17
-
Definition: Machines.h:9
-
Definition: IndMotorForm.h:7
+
1 #ifndef INDMOTOR_H
2 #define INDMOTOR_H
3 
4 #include "Machines.h"
5 
6 class IndMotorForm;
7 
9 {
10  wxString name;
11  double activePower = 100.0;
12  ElectricalUnit activePowerUnit = UNIT_MW;
13  double reactivePower = 0.0;
14  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
15 };
16 
17 class IndMotor : public Machines
18 {
19  public:
20  IndMotor();
21  IndMotor(wxString name);
22  ~IndMotor();
23 
24  virtual Element* GetCopy();
25  virtual void DrawSymbol() const;
26  virtual bool GetContextMenu(wxMenu& menu);
27  virtual wxString GetTipText() const;
28  virtual bool ShowForm(wxWindow* parent, Element* element);
29  virtual IndMotorElectricalData GetElectricalData() { return m_electricalData; }
30  virtual IndMotorElectricalData GetPUElectricalData(double systemPowerBase);
31  virtual void SetElectricalData(IndMotorElectricalData electricalData) { m_electricalData = electricalData; }
32  protected:
33  IndMotorElectricalData m_electricalData;
34 };
35 
36 #endif // INDMOTOR_H
+ + +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + + +
+
- + diff --git a/docs/doxygen/html/_ind_motor_form_8cpp_source.html b/docs/doxygen/html/_ind_motor_form_8cpp_source.html new file mode 100644 index 0000000..5734317 --- /dev/null +++ b/docs/doxygen/html/_ind_motor_form_8cpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Project/IndMotorForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IndMotorForm.cpp
+
+
+
1 #include "IndMotorForm.h"
2 #include "IndMotor.h"
3 
4 IndMotorForm::IndMotorForm(wxWindow* parent, IndMotor* indMotor) : IndMotorFormBase(parent)
5 {
6  SetSize(GetBestSize());
7  m_buttonStabButton->Enable(false);
8  IndMotorElectricalData data = indMotor->GetElectricalData();
9 
10  m_textCtrlName->SetValue(data.name);
11 
12  m_textCtrlActivePower->SetValue(IndMotor::StringFromDouble(data.activePower));
13  switch(data.activePowerUnit) {
14  case UNIT_PU: {
15  m_choiceActivePower->SetSelection(0);
16  } break;
17  case UNIT_W: {
18  m_choiceActivePower->SetSelection(1);
19  } break;
20  case UNIT_kW: {
21  m_choiceActivePower->SetSelection(2);
22  } break;
23  case UNIT_MW: {
24  m_choiceActivePower->SetSelection(3);
25  } break;
26  default:
27  break;
28  }
29 
30  m_textCtrlReactivePower->SetValue(IndMotor::StringFromDouble(data.reactivePower));
31  switch(data.reactivePowerUnit) {
32  case UNIT_PU: {
33  m_choiceReactivePower->SetSelection(0);
34  } break;
35  case UNIT_VAr: {
36  m_choiceReactivePower->SetSelection(1);
37  } break;
38  case UNIT_kVAr: {
39  m_choiceReactivePower->SetSelection(2);
40  } break;
41  case UNIT_MVAr: {
42  m_choiceReactivePower->SetSelection(3);
43  } break;
44  default:
45  break;
46  }
47 
48  m_parent = parent;
49  m_indMotor = indMotor;
50 }
51 
52 IndMotorForm::~IndMotorForm() {}
53 void IndMotorForm::OnOKButtonClick(wxCommandEvent& event)
54 {
55  if(ValidateData()) EndModal(wxID_OK);
56 }
57 void IndMotorForm::OnStabilityButtonClick(wxCommandEvent& event)
58 {
59  // TODO: Induction motor stability form
60 }
61 
62 bool IndMotorForm::ValidateData()
63 {
65 
66  data.name = m_textCtrlName->GetValue();
67 
68  if(!m_indMotor->DoubleFromString(m_parent, m_textCtrlActivePower->GetValue(), data.activePower,
69  _("Value entered incorrectly in the field \"Active power\".")))
70  return false;
71  switch(m_choiceActivePower->GetSelection()) {
72  case 0: {
73  data.activePowerUnit = UNIT_PU;
74  } break;
75  case 1: {
76  data.activePowerUnit = UNIT_W;
77  } break;
78  case 2: {
79  data.activePowerUnit = UNIT_kW;
80  } break;
81  case 3: {
82  data.activePowerUnit = UNIT_MW;
83  } break;
84  }
85 
86  if(!m_indMotor->DoubleFromString(m_parent, m_textCtrlReactivePower->GetValue(), data.reactivePower,
87  _("Value entered incorrectly in the field \"Reactive power\".")))
88  return false;
89  switch(m_choiceReactivePower->GetSelection()) {
90  case 0: {
91  data.reactivePowerUnit = UNIT_PU;
92  } break;
93  case 1: {
94  data.reactivePowerUnit = UNIT_VAr;
95  } break;
96  case 2: {
97  data.reactivePowerUnit = UNIT_kVAr;
98  } break;
99  case 3: {
100  data.reactivePowerUnit = UNIT_MVAr;
101  } break;
102  }
103 
104  m_indMotor->SetElectricalData(data);
105  return true;
106 }
+ + + + + + + + +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ +
+
+ + + + diff --git a/docs/doxygen/html/_ind_motor_form_8h_source.html b/docs/doxygen/html/_ind_motor_form_8h_source.html index 73d9616..bc4ed71 100644 --- a/docs/doxygen/html/_ind_motor_form_8h_source.html +++ b/docs/doxygen/html/_ind_motor_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/IndMotorForm.h Source File +Project/IndMotorForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
IndMotorForm.h
-
1 #ifndef INDMOTORFORM_H
2 #define INDMOTORFORM_H
3 #include "ElementForm.h"
4 
5 class IndMotor;
6 
8 {
9  public:
10  IndMotorForm(wxWindow* parent, IndMotor* indMotor);
11  virtual ~IndMotorForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17  virtual void OnStabilityButtonClick(wxCommandEvent& event);
18 
19  wxWindow* m_parent = NULL;
20  IndMotor* m_indMotor = NULL;
21 };
22 #endif // INDMOTORFORM_H
Definition: ElementForm.h:673
-
Definition: IndMotor.h:17
-
Definition: IndMotorForm.h:7
+
1 #ifndef INDMOTORFORM_H
2 #define INDMOTORFORM_H
3 #include "ElementForm.h"
4 
5 class IndMotor;
6 
8 {
9  public:
10  IndMotorForm(wxWindow* parent, IndMotor* indMotor);
11  virtual ~IndMotorForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17  virtual void OnStabilityButtonClick(wxCommandEvent& event);
18 
19  wxWindow* m_parent = NULL;
20  IndMotor* m_indMotor = NULL;
21 };
22 #endif // INDMOTORFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_inductor_8cpp_source.html b/docs/doxygen/html/_inductor_8cpp_source.html new file mode 100644 index 0000000..4507756 --- /dev/null +++ b/docs/doxygen/html/_inductor_8cpp_source.html @@ -0,0 +1,121 @@ + + + + + + + +Project/Inductor.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Inductor.cpp
+
+
+
1 #include "ReactiveShuntElementForm.h"
2 #include "Inductor.h"
3 
4 Inductor::Inductor() : Shunt() {}
5 Inductor::Inductor(wxString name) : Shunt() { m_electricalData.name = name; }
6 Inductor::~Inductor() {}
7 bool Inductor::AddParent(Element* parent, wxPoint2DDouble position)
8 {
9  if(parent) {
10  m_parentList.push_back(parent);
11  parent->AddChild(this);
12  wxPoint2DDouble parentPt =
13  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
14  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
15  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
16 
17  m_position = parentPt + wxPoint2DDouble(0.0, 100.0); // Shifts the position to the down of the bus.
18  m_width = 20.0;
19  m_height = 70.0;
20  m_rect = wxRect2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y - m_height / 2.0, m_width, m_height);
21 
22  m_pointList.push_back(parentPt);
23  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
24  m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -m_height / 2.0 - 10.0));
25  m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -m_height / 2.0));
26 
27  m_inserted = true;
28 
29  wxRect2DDouble genRect(0, 0, 0, 0);
30  m_switchRect.push_back(genRect); // Push a general rectangle.
31  UpdateSwitches();
32 
33  return true;
34  }
35  return false;
36 }
37 
38 void Inductor::Draw(wxPoint2DDouble translation, double scale) const
39 {
40  OpenGLColour elementColour;
41  if(m_online) {
42  if(m_dynEvent)
43  elementColour = m_dynamicEventColour;
44  else
45  elementColour = m_onlineElementColour;
46  } else
47  elementColour = m_offlineElementColour;
48 
49  if(m_inserted) {
50  if(m_selected) {
51  glLineWidth(1.5 + m_borderSize * 2.0);
52  glColor4dv(m_selectionColour.GetRGBA());
53 
54  DrawLine(m_pointList);
55 
56  glPushMatrix();
57  glTranslated(m_position.m_x, m_position.m_y, 0.0);
58  glRotated(m_angle, 0.0, 0.0, 1.0);
59  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
60 
61  DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 10.0), 10, 45, 270, 30, GL_LINE_STRIP);
62  DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 25.0), 10, 45, 315, 30, GL_LINE_STRIP);
63  DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 40.0), 10, 90, 315, 30, GL_LINE_STRIP);
64 
65  DrawGround(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 50.0));
66 
67  glPopMatrix();
68 
69  // Draw node selection.
70  DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
71  }
72  // Draw Load (layer 2).
73  glLineWidth(1.5);
74  glColor4dv(elementColour.GetRGBA());
75  DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
76  DrawLine(m_pointList);
77 
78  DrawSwitches();
79 
80  glPushMatrix();
81  glTranslated(m_position.m_x, m_position.m_y, 0.0);
82  glRotated(m_angle, 0.0, 0.0, 1.0);
83  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
84 
85  glColor4dv(elementColour.GetRGBA());
86  DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 10.0), 10, 45, 270, 10, GL_LINE_STRIP);
87  DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 25.0), 10, 45, 315, 10, GL_LINE_STRIP);
88  DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 40.0), 10, 90, 315, 10, GL_LINE_STRIP);
89 
90  DrawGround(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 50.0));
91 
92  glPopMatrix();
93  }
94 }
95 
96 void Inductor::Rotate(bool clockwise)
97 {
98  double rotAngle = m_rotationAngle;
99  if(!clockwise) rotAngle = -m_rotationAngle;
100 
101  m_angle += rotAngle;
102  if(m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
103  m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle);
104  m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle);
105  UpdateSwitchesPosition();
106 }
107 
108 bool Inductor::GetContextMenu(wxMenu& menu)
109 {
110  menu.Append(ID_EDIT_ELEMENT, _("Edit Inductor"));
111  GeneralMenuItens(menu);
112  return true;
113 }
114 
115 bool Inductor::Contains(wxPoint2DDouble position) const
116 {
117  wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
118  return m_rect.Contains(ptR);
119 }
120 
121 bool Inductor::Intersects(wxRect2DDouble rect) const { return RotatedRectanglesIntersects(m_rect, rect, m_angle, 0.0); }
122 bool Inductor::ShowForm(wxWindow* parent, Element* element)
123 {
124  ReactiveShuntElementForm* capacitorForm = new ReactiveShuntElementForm(parent, this);
125  capacitorForm->SetTitle(_("Inductor"));
126  if(capacitorForm->ShowModal() == wxID_OK) {
127  capacitorForm->Destroy();
128  return true;
129  }
130  capacitorForm->Destroy();
131  return false;
132 }
133 
134 InductorElectricalData Inductor::GetPUElectricalData(double systemPowerBase)
135 {
136  InductorElectricalData data = m_electricalData;
137  switch(data.reactivePowerUnit) {
138  case UNIT_VAr: {
139  data.reactivePower = data.reactivePower / systemPowerBase;
140  data.reactivePowerUnit = UNIT_PU;
141  } break;
142  case UNIT_kVAr: {
143  data.reactivePower = (data.reactivePower * 1e3) / systemPowerBase;
144  data.reactivePowerUnit = UNIT_PU;
145  } break;
146  case UNIT_MVAr: {
147  data.reactivePower = (data.reactivePower * 1e6) / systemPowerBase;
148  data.reactivePowerUnit = UNIT_PU;
149  } break;
150  default:
151  break;
152  }
153 
154  return data;
155 }
156 
158 {
159  Inductor* copy = new Inductor();
160  *copy = *this;
161  return copy;
162 }
163 
164 wxString Inductor::GetTipText() const
165 {
166  wxString tipText = m_electricalData.name;
167 
168  // TODO: Avoid reactive power calculation.
169  double reactivePower = m_electricalData.reactivePower;
170  if(!m_online)
171  reactivePower = 0.0;
172  else {
173  std::complex<double> v = static_cast<Bus*>(m_parentList[0])->GetElectricalData().voltage;
174  reactivePower *= std::pow(std::abs(v), 2);
175  }
176  tipText += "\n";
177  tipText += _("\nQ = ") + wxString::FromDouble(reactivePower, 5);
178  switch(m_electricalData.reactivePowerUnit) {
179  case UNIT_PU: {
180  tipText += _(" p.u.");
181  } break;
182  case UNIT_VAr: {
183  tipText += _(" VAr");
184  } break;
185  case UNIT_kVAr: {
186  tipText += _(" kVAr");
187  } break;
188  case UNIT_MVAr: {
189  tipText += _(" MVAr");
190  } break;
191  default:
192  break;
193  }
194 
195  return tipText;
196 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Inductor.cpp:122
+ + +
virtual wxString GetTipText() const
Get the tip text.
Definition: Inductor.cpp:164
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Inductor.cpp:115
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Inductor.cpp:96
+ +
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Inductor.cpp:157
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Inductor.cpp:108
+ +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Inductor.cpp:38
+
Definition: Bus.h:45
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Inductor.cpp:7
+ +
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+ + + +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Inductor.cpp:121
+
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+ +
Definition: Shunt.h:7
+ +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
+
+ + + + diff --git a/docs/doxygen/html/_inductor_8h_source.html b/docs/doxygen/html/_inductor_8h_source.html index a803fe8..6d18f07 100644 --- a/docs/doxygen/html/_inductor_8h_source.html +++ b/docs/doxygen/html/_inductor_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Inductor.h Source File +Project/Inductor.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Inductor.h
-
1 #ifndef INDUCTOR_H
2 #define INDUCTOR_H
3 
4 #include "Shunt.h"
5 
7 
9  wxString name;
10  double reactivePower = 100.0;
11  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
12 };
13 
14 class Inductor : public Shunt
15 {
16  public:
17  Inductor();
18  Inductor(wxString name);
19  ~Inductor();
20 
21  virtual Element* GetCopy();
22  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
23  virtual void Draw(wxPoint2DDouble translation, double scale) const;
24  virtual bool Contains(wxPoint2DDouble position) const;
25  virtual bool Intersects(wxRect2DDouble rect) const;
26  virtual void Rotate(bool clockwise = true);
27  virtual bool GetContextMenu(wxMenu& menu);
28  virtual wxString GetTipText() const;
29  virtual bool ShowForm(wxWindow* parent, Element* element);
30  virtual InductorElectricalData GetElectricalData() { return m_electricalData; }
31  virtual InductorElectricalData GetPUElectricalData(double systemPowerBase);
32  virtual void SetElectricalData(InductorElectricalData electricalData) { m_electricalData = electricalData; }
33  protected:
34  InductorElectricalData m_electricalData;
35 };
36 
37 #endif // INDUCTOR_H
Definition: Element.h:88
-
Definition: Inductor.h:8
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:25
-
Definition: Inductor.h:14
-
Definition: Shunt.h:7
-
Definition: ReactiveShuntElementForm.h:10
+
1 #ifndef INDUCTOR_H
2 #define INDUCTOR_H
3 
4 #include "Shunt.h"
5 
7 
9  wxString name;
10  double reactivePower = 100.0;
11  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
12 };
13 
14 class Inductor : public Shunt
15 {
16  public:
17  Inductor();
18  Inductor(wxString name);
19  ~Inductor();
20 
21  virtual Element* GetCopy();
22  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
23  virtual void Draw(wxPoint2DDouble translation, double scale) const;
24  virtual bool Contains(wxPoint2DDouble position) const;
25  virtual bool Intersects(wxRect2DDouble rect) const;
26  virtual void Rotate(bool clockwise = true);
27  virtual bool GetContextMenu(wxMenu& menu);
28  virtual wxString GetTipText() const;
29  virtual bool ShowForm(wxWindow* parent, Element* element);
30  virtual InductorElectricalData GetElectricalData() { return m_electricalData; }
31  virtual InductorElectricalData GetPUElectricalData(double systemPowerBase);
32  virtual void SetElectricalData(InductorElectricalData electricalData) { m_electricalData = electricalData; }
33  protected:
34  InductorElectricalData m_electricalData;
35 };
36 
37 #endif // INDUCTOR_H
+ +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + +
Definition: Shunt.h:7
+
+
- + diff --git a/docs/doxygen/html/_limiter_8cpp_source.html b/docs/doxygen/html/_limiter_8cpp_source.html new file mode 100644 index 0000000..1d2e80a --- /dev/null +++ b/docs/doxygen/html/_limiter_8cpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +Project/Limiter.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Limiter.cpp
+
+
+
1 #include "Limiter.h"
2 #include "LimiterForm.h"
3 
4 Limiter::Limiter(int id) : ControlElement(id)
5 {
6  m_width = m_height = 36.0;
7  Node* nodeIn = new Node(m_position + wxPoint2DDouble(-18, 0), Node::NODE_IN, m_borderSize);
8  nodeIn->StartMove(m_position);
9  Node* nodeOut = new Node(m_position + wxPoint2DDouble(18, 0), Node::NODE_OUT, m_borderSize);
10  nodeOut->SetAngle(180.0);
11  nodeOut->StartMove(m_position);
12  m_nodeList.push_back(nodeIn);
13  m_nodeList.push_back(nodeOut);
14 }
15 
16 Limiter::~Limiter() {}
17 void Limiter::Draw(wxPoint2DDouble translation, double scale) const
18 {
19  glLineWidth(1.0);
20  if(m_selected) {
21  glColor4dv(m_selectionColour.GetRGBA());
22  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
23  DrawRectangle(m_position, m_width + borderSize, m_height + borderSize);
24  }
25  glColor4d(1.0, 1.0, 1.0, 1.0);
26  DrawRectangle(m_position, m_width, m_height);
27  glColor4d(0.0, 0.0, 0.0, 1.0);
28  DrawRectangle(m_position, m_width, m_height, GL_LINE_LOOP);
29 
30  // Plot symbol.
31  glLineWidth(2.0);
32  std::vector<wxPoint2DDouble> limSymbol;
33  limSymbol.push_back(m_position + wxPoint2DDouble(10, -10));
34  limSymbol.push_back(m_position + wxPoint2DDouble(2, -10));
35  limSymbol.push_back(m_position + wxPoint2DDouble(-2, 10));
36  limSymbol.push_back(m_position + wxPoint2DDouble(-10, 10));
37  glColor4d(0.0, 0.3, 1.0, 1.0);
38  DrawLine(limSymbol);
39 
40  glColor4d(0.0, 0.0, 0.0, 1.0);
41  DrawNodes();
42 }
43 
44 bool Limiter::ShowForm(wxWindow* parent, Element* element)
45 {
46  LimiterForm* limiter = new LimiterForm(parent, this);
47  if(limiter->ShowModal() == wxID_OK) {
48  limiter->Destroy();
49  return true;
50  }
51  limiter->Destroy();
52  return false;
53 }
54 
55 void Limiter::Rotate(bool clockwise)
56 {
57  if(clockwise)
58  m_angle += 90.0;
59  else
60  m_angle -= 90.0;
61  if(m_angle >= 360.0)
62  m_angle = 0.0;
63  else if(m_angle < 0)
64  m_angle = 270.0;
65 
66  UpdatePoints();
67 
68  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
69  Node* node = *it;
70  node->Rotate(clockwise);
71  }
72 }
73 
74 void Limiter::UpdatePoints()
75 {
76  if(m_angle == 0.0) {
77  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-18, 0));
78  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(18, 0));
79  } else if(m_angle == 90.0) {
80  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, -18));
81  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, 18));
82  } else if(m_angle == 180.0) {
83  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(18, 0));
84  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-18, 0));
85  } else if(m_angle == 270.0) {
86  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, 18));
87  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -18));
88  }
89 }
90 
91 bool Limiter::Solve(double input, double timeStep)
92 {
93  m_output = input;
94  if(m_output > m_upLimit) m_output = m_upLimit;
95  else if(m_output < m_lowLimit) m_output = m_lowLimit;
96 
97  return true;
98 }
99 
101 {
102  Limiter* copy = new Limiter(m_elementID);
103  *copy = *this;
104  return copy;
105 }
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Limiter.cpp:17
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Limiter.cpp:100
+ + +
Definition: Limiter.h:8
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Limiter.cpp:55
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Limiter.cpp:44
+
+
+ + + + diff --git a/docs/doxygen/html/_limiter_8h_source.html b/docs/doxygen/html/_limiter_8h_source.html index ee59de7..b0b4665 100644 --- a/docs/doxygen/html/_limiter_8h_source.html +++ b/docs/doxygen/html/_limiter_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Limiter.h Source File +Project/Limiter.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Limiter.h
-
1 #ifndef LIMITER_H
2 #define LIMITER_H
3 
4 #include "ControlElement.h"
5 
6 class LimiterForm;
7 
8 class Limiter : public ControlElement
9 {
10 public:
11  Limiter(int id);
12  ~Limiter();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element);
18  virtual void Rotate(bool clockwise = true);
19  virtual bool Solve(double input, double timeStep);
20 
21  virtual void UpdatePoints();
22 
23  double GetUpLimit() const { return m_upLimit; }
24  double GetLowLimit() const { return m_lowLimit; }
25 
26  void SetUpLimit(double upLimit) { m_upLimit = upLimit; }
27  void SetLowLimit(double lowLimit) { m_lowLimit = lowLimit; }
28 
29  virtual Element* GetCopy();
30 
31 protected:
32  double m_upLimit = 5.0;
33  double m_lowLimit = -5.0;
34 };
35 
36 #endif // LIMITER_H
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Limiter.cpp:17
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Limiter.cpp:100
-
Definition: Element.h:88
-
Definition: Limiter.h:8
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Limiter.h:15
-
Definition: LimiterForm.h:7
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Limiter.h:16
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Limiter.cpp:55
-
Definition: ControlElement.h:53
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Limiter.cpp:44
+
1 #ifndef LIMITER_H
2 #define LIMITER_H
3 
4 #include "ControlElement.h"
5 
6 class LimiterForm;
7 
8 class Limiter : public ControlElement
9 {
10 public:
11  Limiter(int id);
12  ~Limiter();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element);
18  virtual void Rotate(bool clockwise = true);
19  virtual bool Solve(double input, double timeStep);
20 
21  virtual void UpdatePoints();
22 
23  double GetUpLimit() const { return m_upLimit; }
24  double GetLowLimit() const { return m_lowLimit; }
25 
26  void SetUpLimit(double upLimit) { m_upLimit = upLimit; }
27  void SetLowLimit(double lowLimit) { m_lowLimit = lowLimit; }
28 
29  virtual Element* GetCopy();
30 
31 protected:
32  double m_upLimit = 5.0;
33  double m_lowLimit = -5.0;
34 };
35 
36 #endif // LIMITER_H
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Limiter.cpp:17
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Limiter.cpp:100
+ +
Definition: Limiter.h:8
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Limiter.h:15
+ +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Limiter.h:16
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Limiter.cpp:55
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Limiter.cpp:44
+
- + diff --git a/docs/doxygen/html/_limiter_form_8cpp_source.html b/docs/doxygen/html/_limiter_form_8cpp_source.html new file mode 100644 index 0000000..87c5182 --- /dev/null +++ b/docs/doxygen/html/_limiter_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/LimiterForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
LimiterForm.cpp
+
+
+
1 #include "LimiterForm.h"
2 #include "Limiter.h"
3 
4 LimiterForm::LimiterForm(wxWindow* parent, Limiter* limiter) : LimiterFormBase(parent)
5 {
6  SetSize(GetBestSize());
7 
8  m_limiter = limiter;
9  m_parent = parent;
10 
11  m_textCtrlUpLimit->SetValue(m_limiter->StringFromDouble(m_limiter->GetUpLimit()));
12  m_textCtrlLowLimit->SetValue(m_limiter->StringFromDouble(m_limiter->GetLowLimit()));
13 }
14 
15 LimiterForm::~LimiterForm() {}
16 void LimiterForm::OnOKButtonClick(wxCommandEvent& event)
17 {
18  if(ValidateData()) EndModal(wxID_OK);
19 }
20 
21 bool LimiterForm::ValidateData()
22 {
23  double upLimit;
24  double lowLimit;
25 
26  if(!m_limiter->DoubleFromString(this, m_textCtrlUpLimit->GetValue(), upLimit,
27  _("Value entered incorrectly in the field \"Upper limit\".")))
28  return false;
29  if(!m_limiter->DoubleFromString(this, m_textCtrlLowLimit->GetValue(), lowLimit,
30  _("Value entered incorrectly in the field \"Lower limit\".")))
31  return false;
32 
33  m_limiter->SetUpLimit(upLimit);
34  m_limiter->SetLowLimit(lowLimit);
35  return true;
36 }
Definition: Limiter.h:8
+ +
+
+ + + + diff --git a/docs/doxygen/html/_limiter_form_8h_source.html b/docs/doxygen/html/_limiter_form_8h_source.html index 427b6ff..6f04e2b 100644 --- a/docs/doxygen/html/_limiter_form_8h_source.html +++ b/docs/doxygen/html/_limiter_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/LimiterForm.h Source File +Project/LimiterForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
LimiterForm.h
-
1 #ifndef LIMITERFORM_H
2 #define LIMITERFORM_H
3 #include "ElementForm.h"
4 
5 class Limiter;
6 
8 {
9  public:
10  LimiterForm(wxWindow* parent, Limiter* limiter);
11  virtual ~LimiterForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  Limiter* m_limiter = NULL;
20 };
21 #endif // LIMITERFORM_H
Definition: Limiter.h:8
-
Definition: ElementForm.h:831
-
Definition: LimiterForm.h:7
+
1 #ifndef LIMITERFORM_H
2 #define LIMITERFORM_H
3 #include "ElementForm.h"
4 
5 class Limiter;
6 
8 {
9  public:
10  LimiterForm(wxWindow* parent, Limiter* limiter);
11  virtual ~LimiterForm();
12  virtual bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  Limiter* m_limiter = NULL;
20 };
21 #endif // LIMITERFORM_H
Definition: Limiter.h:8
+ +
+
- + diff --git a/docs/doxygen/html/_line_8cpp_source.html b/docs/doxygen/html/_line_8cpp_source.html new file mode 100644 index 0000000..8aed852 --- /dev/null +++ b/docs/doxygen/html/_line_8cpp_source.html @@ -0,0 +1,139 @@ + + + + + + + +Project/Line.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Line.cpp
+
+
+
1 #include "Line.h"
2 
3 Line::Line() : Branch()
4 {
5  for(int i = 0; i < 2; i++) {
6  for(int j = 0; j < 3; j++) {
7  m_electricalData.faultCurrent[i][j] = std::complex<double>(0.0, 0.0);
8  }
9  }
10 }
11 
12 Line::Line(wxString name) : Branch()
13 {
14  for(int i = 0; i < 2; i++) {
15  for(int j = 0; j < 3; j++) {
16  m_electricalData.faultCurrent[i][j] = std::complex<double>(0.0, 0.0);
17  }
18  }
19  m_electricalData.name = name;
20 }
21 Line::~Line() {}
22 bool Line::Contains(wxPoint2DDouble position) const
23 {
24  if(PointToLineDistance(position) < 5.0) {
25  return true;
26  }
27  return false;
28 }
29 
30 void Line::Draw(wxPoint2DDouble translation, double scale) const
31 {
32  OpenGLColour elementColour;
33  if(m_online) {
34  if(m_dynEvent)
35  elementColour = m_dynamicEventColour;
36  else
37  elementColour = m_onlineElementColour;
38 
39  } else
40  elementColour = m_offlineElementColour;
41 
42  std::vector<wxPoint2DDouble> pointList = m_pointList;
43  if(!m_inserted && pointList.size() > 0) {
44  wxPoint2DDouble secondPoint = m_position;
45  if(pointList.size() > 2) {
46  secondPoint = pointList[2];
47  }
48  pointList[1] = GetSwitchPoint(m_parentList[0], pointList[0], secondPoint);
49  pointList.push_back(m_position);
50  }
51 
52  // Line selected (Layer 1).
53  if(m_selected) {
54  glLineWidth(1.5 + m_borderSize * 2.0);
55  glColor4dv(m_selectionColour.GetRGBA());
56  DrawLine(pointList);
57 
58  // Draw nodes selection.
59  if(pointList.size() > 0) {
60  DrawCircle(pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
61  if(m_inserted) {
62  DrawCircle(pointList[pointList.size() - 1], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
63  }
64  }
65  }
66 
67  // Draw line (Layer 2)
68  glLineWidth(1.5);
69  glColor4dv(elementColour.GetRGBA());
70  DrawLine(pointList);
71 
72  if(m_inserted) {
73  DrawSwitches();
74  DrawPowerFlowPts();
75  }
76 
77  // Draw nodes.
78  if(pointList.size() > 0) {
79  glColor4dv(elementColour.GetRGBA());
80  DrawCircle(pointList[0], 5.0, 10, GL_POLYGON);
81  if(m_inserted) {
82  DrawCircle(pointList[pointList.size() - 1], 5.0, 10, GL_POLYGON);
83  }
84  }
85 
86  // Draw pickboxes (Layer 3).
87  if(m_showPickbox) {
88  glPushMatrix();
89  glLoadIdentity();
90 
91  for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
92  DrawPickbox(WorldToScreen(m_pointList[i], translation, scale));
93  }
94 
95  glPopMatrix();
96  }
97 }
98 
99 void Line::Move(wxPoint2DDouble position)
100 {
101  if(!m_parentList[0]) {
102  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
103  UpdateSwitchesPosition();
104  UpdatePowerFlowArrowsPosition();
105  }
106  if(!m_parentList[1]) {
107  m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
108  UpdateSwitchesPosition();
109  UpdatePowerFlowArrowsPosition();
110  }
111 
112  if(!m_parentList[0] && !m_parentList[1]) {
113  for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
114  m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
115  }
116  }
117 }
118 
119 bool Line::AddParent(Element* parent, wxPoint2DDouble position)
120 {
121  if(parent) {
122  // First bus.
123  if(m_parentList.size() == 0) {
124  m_position = position;
125  m_parentList.push_back(parent);
126  parent->AddChild(this);
127  wxPoint2DDouble parentPt =
128  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
129  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
130  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
131  m_pointList.push_back(parentPt); // First point
132  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
133 
134  wxRect2DDouble genRect(0, 0, 0, 0);
135  m_switchRect.push_back(genRect);
136  UpdateSwitches();
137 
138  Bus* parentBus = static_cast<Bus*>(parent);
139  m_electricalData.nominalVoltage = parentBus->GetElectricalData().nominalVoltage;
140  m_electricalData.nominalVoltageUnit = parentBus->GetElectricalData().nominalVoltageUnit;
141 
142  return false;
143  }
144  // Second bus.
145  else if(parent != m_parentList[0]) {
146  Bus* parentBus = static_cast<Bus*>(parent);
147  if(m_electricalData.nominalVoltage != parentBus->GetElectricalData().nominalVoltage ||
148  m_electricalData.nominalVoltageUnit != parentBus->GetElectricalData().nominalVoltageUnit) {
149  wxMessageDialog msgDialog(NULL, _("Unable to connect two buses with different nominal voltages.\n"
150  "Use a transformer or edit the bus properties."),
151  _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
152  msgDialog.ShowModal();
153  return false;
154  }
155 
156  m_parentList.push_back(parent);
157  parent->AddChild(this);
158  wxPoint2DDouble parentPt =
159  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
160  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
161  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
162 
163  // Set first switch point.
164  wxPoint2DDouble secondPoint = parentPt;
165  if(m_pointList.size() > 2) {
166  secondPoint = m_pointList[2];
167  }
168  m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], secondPoint);
169 
170  // Set the second switch point.
171  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_pointList[m_pointList.size() - 1]));
172 
173  m_pointList.push_back(parentPt); // Last point.
174 
175  wxRect2DDouble genRect(0, 0, 0, 0);
176  m_switchRect.push_back(genRect);
177  UpdateSwitches();
178 
179  m_inserted = true;
180  UpdatePowerFlowArrowsPosition();
181  return true;
182  }
183  }
184  return false;
185 }
186 bool Line::Intersects(wxRect2DDouble rect) const
187 {
188  for(auto it = m_pointList.begin(); it != m_pointList.end(); ++it) {
189  if(rect.Contains(*it)) return true;
190  }
191  return false;
192 }
193 void Line::MovePickbox(wxPoint2DDouble position)
194 {
195  if(m_activePickboxID == ID_PB_NONE) return;
196 
197  for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
198  if(m_activePickboxID == i) {
199  m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
200  UpdateSwitchesPosition();
201  UpdatePowerFlowArrowsPosition();
202  }
203  }
204 }
205 bool Line::PickboxContains(wxPoint2DDouble position)
206 {
207  for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
208  wxRect2DDouble rect(m_pointList[i].m_x - 5.0, m_pointList[i].m_y - 5.0, 10.0, 10.0);
209  if(rect.Contains(position)) {
210  m_activePickboxID = i;
211  return true;
212  }
213  }
214  return false;
215 }
216 
217 void Line::AddPoint(wxPoint2DDouble point)
218 {
219  if(m_parentList.size() != 0) {
220  m_pointList.push_back(point);
221  }
222 }
223 
224 void Line::StartMove(wxPoint2DDouble position)
225 {
226  m_moveStartPt = position;
227  m_movePts = m_pointList;
228 }
229 
230 void Line::MoveNode(Element* parent, wxPoint2DDouble position)
231 {
232  if(parent) {
233  // First bus.
234  if(parent == m_parentList[0]) {
235  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
236  }
237  // Second bus.
238  else if(parent == m_parentList[1]) {
239  m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
240  }
241 
242  // If the line is selected, move all the points, except the switches and buses points.
243  if(m_selected) {
244  for(int i = 2; i < (int)m_pointList.size() - 1; i++) {
245  m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
246  }
247  }
248  } else {
249  // If parent is setted to NULL for the firts time, remove the parent child
250  if(m_activeNodeID == 1) {
251  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
252  if(m_parentList[0]) {
253  m_parentList[0]->RemoveChild(this);
254  m_parentList[0] = NULL;
255  m_online = false;
256  }
257  } else if(m_activeNodeID == 2) {
258  m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
259  if(m_parentList[1]) {
260  m_parentList[1]->RemoveChild(this);
261  m_parentList[1] = NULL;
262  m_online = false;
263  }
264  }
265  }
266 
267  // Recalculate switches positions
268  UpdateSwitchesPosition();
269  UpdatePowerFlowArrowsPosition();
270 }
271 
272 bool Line::GetContextMenu(wxMenu& menu)
273 {
274  menu.Append(ID_EDIT_ELEMENT, _("Edit line"));
275  if(m_activePickboxID == ID_PB_NONE) {
276  wxMenuItem* addNodeItem = new wxMenuItem(&menu, ID_LINE_ADD_NODE, _("Insert node"));
277  addNodeItem->SetBitmap(wxImage("..\\data\\images\\menu\\addNode16.png"));
278  menu.Append(addNodeItem);
279  } else {
280  wxMenuItem* addNodeItem = new wxMenuItem(&menu, ID_LINE_REMOVE_NODE, _("Remove node"));
281  addNodeItem->SetBitmap(wxImage("..\\data\\images\\menu\\removeNode16.png"));
282  menu.Append(addNodeItem);
283  }
284  wxMenuItem* deleteItem = new wxMenuItem(&menu, ID_DELETE, _("Delete"));
285  deleteItem->SetBitmap(wxImage("..\\data\\images\\menu\\delete16.png"));
286  menu.Append(deleteItem);
287  return true;
288 }
289 
290 void Line::RemoveNode(wxPoint2DDouble point)
291 {
292  if(PickboxContains(point)) {
293  for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
294  if(m_activePickboxID == i) {
295  m_pointList.erase(m_pointList.begin() + i);
296  break;
297  }
298  }
299  }
300  UpdateSwitchesPosition();
301  UpdatePowerFlowArrowsPosition();
302 }
303 
304 void Line::AddNode(wxPoint2DDouble point)
305 {
306  int segmentNumber = 0;
307  PointToLineDistance(point, &segmentNumber);
308  if(segmentNumber > 0 && segmentNumber < (int)m_pointList.size() - 2) {
309  m_pointList.insert(m_pointList.begin() + segmentNumber + 1, point);
310  }
311  UpdateSwitchesPosition();
312  UpdatePowerFlowArrowsPosition();
313 }
314 
315 void Line::CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const
316 {
317  if(m_pointList.size() > 0) {
318  // Check points list boundaries.
319  leftUp = m_pointList[0];
320  rightBottom = m_pointList[0];
321  for(int i = 1; i < (int)m_pointList.size(); i++) {
322  if(m_pointList[i].m_x < leftUp.m_x) leftUp.m_x = m_pointList[i].m_x;
323  if(m_pointList[i].m_y < leftUp.m_y) leftUp.m_y = m_pointList[i].m_y;
324  if(m_pointList[i].m_x > rightBottom.m_x) rightBottom.m_x = m_pointList[i].m_x;
325  if(m_pointList[i].m_y > rightBottom.m_y) rightBottom.m_y = m_pointList[i].m_y;
326  }
327  }
328 }
329 
330 bool Line::ShowForm(wxWindow* parent, Element* element)
331 {
332  LineForm* lineForm = new LineForm(parent, this);
333  if(lineForm->ShowModal() == wxID_OK) {
334  lineForm->Destroy();
335  return true;
336  }
337  lineForm->Destroy();
338  return false;
339 }
340 
341 void Line::SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit)
342 {
343  if(nominalVoltage.size() > 0) {
344  m_electricalData.nominalVoltage = nominalVoltage[0];
345  m_electricalData.nominalVoltageUnit = nominalVoltageUnit[0];
346  }
347 }
348 
350 {
351  if(m_activeNodeID == 1 && parent == m_parentList[0]) return false;
352  if(m_activeNodeID == 2 && parent == m_parentList[1]) return false;
353 
354  if(parent && m_activeNodeID != 0) {
355  wxRect2DDouble nodeRect(0, 0, 0, 0);
356  if(m_activeNodeID == 1) {
357  nodeRect = wxRect2DDouble(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
358  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
359  }
360  if(m_activeNodeID == 2) {
361  nodeRect = wxRect2DDouble(m_pointList[m_pointList.size() - 1].m_x - 5.0 - m_borderSize,
362  m_pointList[m_pointList.size() - 1].m_y - 5.0 - m_borderSize,
363  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
364  }
365 
366  if(parent->Intersects(nodeRect)) {
367  // If the line has no parents set the new rated voltage, otherwise check if it's not connecting
368  // two different voltages buses
369  Bus* parentBus = static_cast<Bus*>(parent);
370  if(!m_parentList[0] && !m_parentList[1]) {
371  m_electricalData.nominalVoltage = parentBus->GetElectricalData().nominalVoltage;
372  m_electricalData.nominalVoltageUnit = parentBus->GetElectricalData().nominalVoltageUnit;
373  } else if(m_electricalData.nominalVoltage != parentBus->GetElectricalData().nominalVoltage ||
374  m_electricalData.nominalVoltageUnit != parentBus->GetElectricalData().nominalVoltageUnit) {
375  wxMessageDialog msgDialog(NULL, _("Unable to connect two buses with different nominal voltages.\n"
376  "Use a transformer or edit the bus properties."),
377  _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
378  msgDialog.ShowModal();
379  m_activeNodeID = 0;
380  return false;
381  }
382 
383  if(m_activeNodeID == 1) {
384  // Check if the user is trying to connect the same bus.
385  if(m_parentList[1] == parent) {
386  m_activeNodeID = 0;
387  return false;
388  }
389 
390  m_parentList[0] = parent;
391 
392  // Centralize the node on bus.
393  wxPoint2DDouble parentPt = parent->RotateAtPosition(
394  m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
395  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
396  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
397  m_pointList[0] = parentPt;
398 
399  UpdateSwitchesPosition();
400  UpdatePowerFlowArrowsPosition();
401  return true;
402  }
403  if(m_activeNodeID == 2) {
404  if(m_parentList[0] == parent) {
405  m_activeNodeID = 0;
406  return false;
407  }
408 
409  m_parentList[1] = parent;
410 
411  wxPoint2DDouble parentPt =
412  parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], -parent->GetAngle());
413  parentPt.m_y = parent->GetPosition().m_y;
414  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
415  m_pointList[m_pointList.size() - 1] = parentPt;
416 
417  UpdateSwitchesPosition();
418  UpdatePowerFlowArrowsPosition();
419  return true;
420  }
421  } else {
422  if(m_activeNodeID == 1) m_parentList[0] = NULL;
423  if(m_activeNodeID == 2) m_parentList[1] = NULL;
424  }
425  }
426  return false;
427 }
428 
430 {
431  m_pfDirection = pfDirection;
432  UpdatePowerFlowArrowsPosition();
433 }
434 
435 void Line::UpdatePowerFlowArrowsPosition()
436 {
437  std::vector<wxPoint2DDouble> edges;
438  switch(m_pfDirection) {
439  case PF_NONE: {
440  m_powerFlowArrow.clear();
441  } break;
442  case PF_BUS1_TO_BUS2: {
443  for(int i = 1; i < (int)m_pointList.size() - 1; i++) {
444  edges.push_back(m_pointList[i]);
445  }
446  } break;
447  case PF_BUS2_TO_BUS1: {
448  for(int i = (int)m_pointList.size() - 2; i > 0; i--) {
449  edges.push_back(m_pointList[i]);
450  }
451  } break;
452  default:
453  break;
454  }
455  CalculatePowerFlowPts(edges);
456 }
457 
458 void Line::RotateNode(Element* parent, bool clockwise)
459 {
460  double rotAngle = m_rotationAngle;
461  if(!clockwise) rotAngle = -m_rotationAngle;
462 
463  if(parent == m_parentList[0]) {
464  m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
465  } else if(parent == m_parentList[1]) {
466  m_pointList[m_pointList.size() - 1] = parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], rotAngle);
467  }
468  UpdateSwitchesPosition();
469  UpdatePowerFlowArrowsPosition();
470 }
471 
472 void Line::SetPointList(std::vector<wxPoint2DDouble> pointList)
473 {
474  m_pointList = pointList;
475  UpdateSwitchesPosition();
476  UpdatePowerFlowArrowsPosition();
477 }
478 
480 {
481  Line* copy = new Line();
482  *copy = *this;
483  return copy;
484 }
485 
486 wxString Line::GetTipText() const
487 {
488  wxString tipText = m_electricalData.name;
489 
490  if(m_online) {
491  tipText += "\n";
492  int busNumber[2];
493  busNumber[0] = static_cast<Bus*>(m_parentList[0])->GetElectricalData().number + 1;
494  busNumber[1] = static_cast<Bus*>(m_parentList[1])->GetElectricalData().number + 1;
495 
496  tipText += _("\nP") + wxString::Format("(%d-%d) = ", busNumber[0], busNumber[1]) +
497  wxString::FromDouble(m_electricalData.powerFlow[0].real(), 5) + _(" p.u.");
498  tipText += _("\nQ") + wxString::Format("(%d-%d) = ", busNumber[0], busNumber[1]) +
499  wxString::FromDouble(m_electricalData.powerFlow[0].imag(), 5) + _(" p.u.");
500  tipText += _("\nP") + wxString::Format("(%d-%d) = ", busNumber[1], busNumber[0]) +
501  wxString::FromDouble(m_electricalData.powerFlow[1].real(), 5) + _(" p.u.");
502  tipText += _("\nQ") + wxString::Format("(%d-%d) = ", busNumber[1], busNumber[0]) +
503  wxString::FromDouble(m_electricalData.powerFlow[1].imag(), 5) + _(" p.u.");
504  }
505 
506  return tipText;
507 }
508 
509 LineElectricalData Line::GetPUElectricalData(double systemBasePower)
510 {
511  LineElectricalData data = m_electricalData;
512  double lineBasePower = GetValueFromUnit(data.nominalPower, data.nominalPowerUnit);
513  double baseVoltage = GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
514  double systemBaseImpedance = (baseVoltage * baseVoltage) / systemBasePower;
515  double lineBaseImpedance = (baseVoltage * baseVoltage) / lineBasePower;
516 
517  // Resistance
518  double r = data.resistance;
519  if(data.resistanceUnit == UNIT_OHM_km) r *= data.lineSize;
520  if(data.resistanceUnit == UNIT_PU) {
521  if(data.useLinePower) data.resistance = (r * lineBaseImpedance) / systemBaseImpedance;
522  } else {
523  data.resistance = r / systemBaseImpedance;
524  }
525  data.resistanceUnit = UNIT_PU;
526 
527  // Inductive reactance
528  double x = data.indReactance;
529  if(data.indReactanceUnit == UNIT_OHM_km) x *= data.lineSize;
530  if(data.indReactanceUnit == UNIT_PU) {
531  if(data.useLinePower) data.indReactance = (x * lineBaseImpedance) / systemBaseImpedance;
532  } else {
533  data.indReactance = x / systemBaseImpedance;
534  }
535  data.indReactanceUnit = UNIT_PU;
536 
537  // Capacitive susceptance
538  double b = data.capSusceptance;
539  if(data.capSusceptanceUnit == UNIT_OHM_km) b *= data.lineSize;
540  if(data.capSusceptanceUnit == UNIT_PU) {
541  if(data.useLinePower) data.capSusceptance = (b * lineBaseImpedance) / systemBaseImpedance;
542  } else {
543  data.capSusceptance = b / systemBaseImpedance;
544  }
545  data.capSusceptanceUnit = UNIT_PU;
546 
547  // Fault
548 
549  // Zero seq. resistance
550  double r0 = data.zeroResistance;
551  if(data.useLinePower) data.zeroResistance = (r0 * lineBaseImpedance) / systemBaseImpedance;
552 
553  // Zero seq. ind. reactance
554  double x0 = data.zeroIndReactance;
555  if(data.useLinePower) data.zeroIndReactance = (x0 * lineBaseImpedance) / systemBaseImpedance;
556 
557  // Zero seq. cap. susceptance
558  double b0 = data.zeroCapSusceptance;
559  if(data.useLinePower) data.zeroCapSusceptance = (b0 * lineBaseImpedance) / systemBaseImpedance;
560 
561  if(!m_online) {
562  data.powerFlow[0] = std::complex<double>(0,0);
563  data.powerFlow[1] = std::complex<double>(0,0);
564  data.faultCurrent[0][0] = std::complex<double>(0,0);
565  data.faultCurrent[0][1] = std::complex<double>(0,0);
566  data.faultCurrent[0][2] = std::complex<double>(0,0);
567  data.faultCurrent[1][0] = std::complex<double>(0,0);
568  data.faultCurrent[1][1] = std::complex<double>(0,0);
569  data.faultCurrent[1][2] = std::complex<double>(0,0);
570  }
571 
572  return data;
573 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+ +
virtual void MovePickbox(wxPoint2DDouble position)
Move the pickbox.
Definition: Line.cpp:193
+ + +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Line.cpp:224
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Line.cpp:22
+
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Line.cpp:349
+
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
virtual void MoveNode(Element *parent, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Line.cpp:230
+
virtual bool Intersects(wxRect2DDouble rect) const =0
Check if the element&#39;s rect intersects other rect.
+ + +
virtual bool PickboxContains(wxPoint2DDouble position)
Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be c...
Definition: Line.cpp:205
+
Definition: Bus.h:45
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Line.cpp:119
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Line.cpp:330
+
virtual void CalculateBoundaries(wxPoint2DDouble &leftUp, wxPoint2DDouble &rightBottom) const
Calculate the element boundaries.
Definition: Line.cpp:315
+ + +
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Line.cpp:99
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Line.cpp:30
+
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+
Definition: Line.h:35
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Line.cpp:458
+ + + +
virtual void SetPointList(std::vector< wxPoint2DDouble > pointList)
Set the list of points that connect the element to the bus.
Definition: Line.cpp:472
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Line.cpp:186
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Line.cpp:272
+ +
virtual void SetNominalVoltage(std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
Set nominal voltage of the element.
Definition: Line.cpp:341
+ +
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Line.cpp:479
+
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+ +
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: Line.cpp:429
+
virtual void AddPoint(wxPoint2DDouble point)
Add point to the list of points that connect the element to the bus.
Definition: Line.cpp:217
+
virtual wxString GetTipText() const
Get the tip text.
Definition: Line.cpp:486
+ +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
Definition: Branch.h:7
+
+
+ + + + diff --git a/docs/doxygen/html/_line_8h_source.html b/docs/doxygen/html/_line_8h_source.html index 505a290..8cb1183 100644 --- a/docs/doxygen/html/_line_8h_source.html +++ b/docs/doxygen/html/_line_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Line.h Source File +Project/Line.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Line.h
-
1 #ifndef LINE_H
2 #define LINE_H
3 
4 #include "LineForm.h"
5 #include "Branch.h"
6 
8  // General
9  wxString name = "";
10  double nominalVoltage = 138.0;
11  ElectricalUnit nominalVoltageUnit = UNIT_kV;
12  double nominalPower = 100.0;
13  ElectricalUnit nominalPowerUnit = UNIT_MVA;
14  double resistance = 0.0;
15  ElectricalUnit resistanceUnit = UNIT_PU;
16  double indReactance = 1.0;
17  ElectricalUnit indReactanceUnit = UNIT_PU;
18  double capSusceptance = 0.0;
19  ElectricalUnit capSusceptanceUnit = UNIT_PU;
20  double lineSize = 100.0;
21  bool useLinePower = false;
22 
23  // Power flow (p.u.)
24  std::complex<double> current[2] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0)};
25  std::complex<double> powerFlow[2] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0)};
26 
27  // Fault
28  double zeroResistance = 0.0;
29  double zeroIndReactance = 1.0;
30  double zeroCapSusceptance = 0.0;
31  // p.u. fault data
32  std::complex<double> faultCurrent[2][3];
33 };
34 
35 class Line : public Branch
36 {
37  public:
38  Line();
39  Line(wxString name);
40  ~Line();
41  virtual bool Contains(wxPoint2DDouble position) const;
42  virtual void Draw(wxPoint2DDouble translation, double scale) const;
43  virtual void Move(wxPoint2DDouble position);
44  virtual void StartMove(wxPoint2DDouble position);
45  virtual void MoveNode(Element* parent, wxPoint2DDouble position);
46  virtual bool SetNodeParent(Element* parent);
47  virtual wxCursor GetBestPickboxCursor() const { return wxCURSOR_SIZING; }
48  virtual Element* GetCopy();
49  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
50  virtual bool Intersects(wxRect2DDouble rect) const;
51  virtual void MovePickbox(wxPoint2DDouble position);
52  virtual bool PickboxContains(wxPoint2DDouble position);
53  virtual void AddPoint(wxPoint2DDouble point);
54  virtual bool GetContextMenu(wxMenu& menu);
55  virtual wxString GetTipText() const;
56  virtual void RemoveNode(wxPoint2DDouble point);
57  virtual void AddNode(wxPoint2DDouble point);
58  virtual void RotateNode(Element* parent, bool clockwise = true);
59  virtual void CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const;
60  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection);
61  virtual bool ShowForm(wxWindow* parent, Element* element);
62  virtual LineElectricalData GetElectricalData() const { return m_electricalData; }
63  virtual LineElectricalData GetPUElectricalData(double systemBasePower);
64  virtual void SetElectricalData(LineElectricalData electricalData) { m_electricalData = electricalData; }
65  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
66  virtual void SetPointList(std::vector<wxPoint2DDouble> pointList);
67 
68  protected:
69  void UpdatePowerFlowArrowsPosition();
70  LineElectricalData m_electricalData;
71 };
72 
73 #endif // LINE_H
Definition: Element.h:88
-
Definition: PowerElement.h:14
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:12
-
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Line.h:47
-
Definition: PowerElement.h:22
-
Definition: Line.h:35
-
Definition: Line.h:7
-
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
-
Definition: Branch.h:7
+
1 #ifndef LINE_H
2 #define LINE_H
3 
4 #include "LineForm.h"
5 #include "Branch.h"
6 
8  // General
9  wxString name = "";
10  double nominalVoltage = 138.0;
11  ElectricalUnit nominalVoltageUnit = UNIT_kV;
12  double nominalPower = 100.0;
13  ElectricalUnit nominalPowerUnit = UNIT_MVA;
14  double resistance = 0.0;
15  ElectricalUnit resistanceUnit = UNIT_PU;
16  double indReactance = 1.0;
17  ElectricalUnit indReactanceUnit = UNIT_PU;
18  double capSusceptance = 0.0;
19  ElectricalUnit capSusceptanceUnit = UNIT_PU;
20  double lineSize = 100.0;
21  bool useLinePower = false;
22 
23  // Power flow (p.u.)
24  std::complex<double> current[2] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0)};
25  std::complex<double> powerFlow[2] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0)};
26 
27  // Fault
28  double zeroResistance = 0.0;
29  double zeroIndReactance = 1.0;
30  double zeroCapSusceptance = 0.0;
31  // p.u. fault data
32  std::complex<double> faultCurrent[2][3];
33 };
34 
35 class Line : public Branch
36 {
37  public:
38  Line();
39  Line(wxString name);
40  ~Line();
41  virtual bool Contains(wxPoint2DDouble position) const;
42  virtual void Draw(wxPoint2DDouble translation, double scale) const;
43  virtual void Move(wxPoint2DDouble position);
44  virtual void StartMove(wxPoint2DDouble position);
45  virtual void MoveNode(Element* parent, wxPoint2DDouble position);
46  virtual bool SetNodeParent(Element* parent);
47  virtual wxCursor GetBestPickboxCursor() const { return wxCURSOR_SIZING; }
48  virtual Element* GetCopy();
49  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
50  virtual bool Intersects(wxRect2DDouble rect) const;
51  virtual void MovePickbox(wxPoint2DDouble position);
52  virtual bool PickboxContains(wxPoint2DDouble position);
53  virtual void AddPoint(wxPoint2DDouble point);
54  virtual bool GetContextMenu(wxMenu& menu);
55  virtual wxString GetTipText() const;
56  virtual void RemoveNode(wxPoint2DDouble point);
57  virtual void AddNode(wxPoint2DDouble point);
58  virtual void RotateNode(Element* parent, bool clockwise = true);
59  virtual void CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const;
60  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection);
61  virtual bool ShowForm(wxWindow* parent, Element* element);
62  virtual LineElectricalData GetElectricalData() const { return m_electricalData; }
63  virtual LineElectricalData GetPUElectricalData(double systemBasePower);
64  virtual void SetElectricalData(LineElectricalData electricalData) { m_electricalData = electricalData; }
65  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
66  virtual void SetPointList(std::vector<wxPoint2DDouble> pointList);
67 
68  protected:
69  void UpdatePowerFlowArrowsPosition();
70  LineElectricalData m_electricalData;
71 };
72 
73 #endif // LINE_H
+ +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ +
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Line.h:47
+ +
Definition: Line.h:35
+ +
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
+
Definition: Branch.h:7
+
- + diff --git a/docs/doxygen/html/_line_form_8cpp_source.html b/docs/doxygen/html/_line_form_8cpp_source.html new file mode 100644 index 0000000..fc58f23 --- /dev/null +++ b/docs/doxygen/html/_line_form_8cpp_source.html @@ -0,0 +1,110 @@ + + + + + + + +Project/LineForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
LineForm.cpp
+
+
+
1 #include "LineForm.h"
2 #include "SwitchingForm.h"
3 #include "Line.h"
4 
5 LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent)
6 {
7  SetSize(GetBestSize());
8  m_choiceResistance->SetString(1, L'\u03A9');
9  m_choiceResistance->SetString(2, (wxString)L'\u03A9' + "/km");
10  m_choiceResistance->SetInitialSize();
11  m_textCtrlResistance->SetInitialSize();
12 
13  m_choiceReactance->SetString(1, L'\u03A9');
14  m_choiceReactance->SetString(2, (wxString)L'\u03A9' + "/km");
15  m_choiceReactance->SetInitialSize();
16  m_textCtrlReactance->SetInitialSize();
17 
18  ReplaceStaticTextLabelChar(m_staticTextZeroResistance, L'\u2080');
19  ReplaceStaticTextLabelChar(m_staticTextZeroReactance, L'\u2080');
20  ReplaceStaticTextLabelChar(m_staticTextZeroSusceptance, L'\u2080');
21 
22  SetSize(GetBestSize());
23  Layout();
24  m_parent = parent;
25  m_line = line;
26 
27  LineElectricalData data = line->GetElectricalData();
28 
29  m_textCtrlName->SetValue(data.name);
30 
31  wxString nominalVoltageStr = Line::StringFromDouble(data.nominalVoltage);
32  switch(data.nominalVoltageUnit) {
33  case UNIT_V: {
34  nominalVoltageStr += " V";
35  } break;
36  case UNIT_kV: {
37  nominalVoltageStr += " kV";
38  } break;
39  default:
40  break;
41  }
42  m_staticTextNominalVoltageValue->SetLabel(nominalVoltageStr);
43 
44  m_textCtrlNominalPower->SetValue(Line::StringFromDouble(data.nominalPower));
45  switch(data.nominalPowerUnit) {
46  case UNIT_VA: {
47  m_choiceNominalPower->SetSelection(0);
48  } break;
49  case UNIT_kVA: {
50  m_choiceNominalPower->SetSelection(1);
51  } break;
52  case UNIT_MVA: {
53  m_choiceNominalPower->SetSelection(2);
54  } break;
55  default:
56  break;
57  }
58 
59  m_textCtrlResistance->SetValue(Line::StringFromDouble(data.resistance));
60  switch(data.resistanceUnit) {
61  case UNIT_PU: {
62  m_choiceResistance->SetSelection(0);
63  } break;
64  case UNIT_OHM: {
65  m_choiceResistance->SetSelection(1);
66  } break;
67  case UNIT_OHM_km: {
68  m_choiceResistance->SetSelection(2);
69  } break;
70  default:
71  break;
72  }
73 
74  m_textCtrlReactance->SetValue(Line::StringFromDouble(data.indReactance));
75  switch(data.indReactanceUnit) {
76  case UNIT_PU: {
77  m_choiceReactance->SetSelection(0);
78  } break;
79  case UNIT_OHM: {
80  m_choiceReactance->SetSelection(1);
81  } break;
82  case UNIT_OHM_km: {
83  m_choiceReactance->SetSelection(2);
84  } break;
85  default:
86  break;
87  }
88 
89  m_textCtrlSusceptance->SetValue(Line::StringFromDouble(data.capSusceptance));
90  switch(data.capSusceptanceUnit) {
91  case UNIT_PU: {
92  m_choiceSusceptance->SetSelection(0);
93  } break;
94  case UNIT_S: {
95  m_choiceSusceptance->SetSelection(1);
96  } break;
97  case UNIT_S_km: {
98  m_choiceSusceptance->SetSelection(2);
99  } break;
100  default:
101  break;
102  }
103 
104  m_textCtrlLineSize->SetValue(Line::StringFromDouble(data.lineSize));
105  m_checkUseLinePower->SetValue(data.useLinePower);
106 
107  m_textCtrlZeroResistance->SetValue(Line::StringFromDouble(data.zeroResistance));
108  m_textCtrlZeroReactance->SetValue(Line::StringFromDouble(data.zeroIndReactance));
109  m_textCtrlZeroSusceptance->SetValue(Line::StringFromDouble(data.zeroCapSusceptance));
110 }
111 
112 LineForm::~LineForm() {}
113 void LineForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
114 void LineForm::OnOKButtonClick(wxCommandEvent& event)
115 {
116  if(ValidateData()) EndModal(wxID_OK);
117 }
118 
119 void LineForm::OnStabilityButtonClick(wxCommandEvent& event)
120 {
121  if(ValidateData()) {
122  SwitchingForm swForm(m_parent, m_line);
123  swForm.SetTitle(_("Line: Switching"));
124  swForm.ShowModal();
125  EndModal(wxID_OK);
126  }
127 }
128 
129 void LineForm::ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newChar)
130 {
131  wxString label = staticText->GetLabel();
132  label[label.length() - 2] = newChar;
133  staticText->SetLabel(label);
134 }
135 
136 bool LineForm::ValidateData()
137 {
138  LineElectricalData data = m_line->GetElectricalData();
139 
140  data.name = m_textCtrlName->GetValue();
141 
142  if(!m_line->DoubleFromString(m_parent, m_textCtrlNominalPower->GetValue(), data.nominalPower,
143  _("Value entered incorrectly in the field \"Nominal power\".")))
144  return false;
145  switch(m_choiceNominalPower->GetSelection()) {
146  case 0: {
147  data.nominalPowerUnit = UNIT_VA;
148  } break;
149  case 1: {
150  data.nominalPowerUnit = UNIT_kVA;
151  } break;
152  case 2: {
153  data.nominalPowerUnit = UNIT_MVA;
154  } break;
155  }
156 
157  if(!m_line->DoubleFromString(m_parent, m_textCtrlResistance->GetValue(), data.resistance,
158  _("Value entered incorrectly in the field \"Resistance\".")))
159  return false;
160  switch(m_choiceResistance->GetSelection()) {
161  case 0: {
162  data.resistanceUnit = UNIT_PU;
163  } break;
164  case 1: {
165  data.resistanceUnit = UNIT_OHM;
166  } break;
167  case 2: {
168  data.resistanceUnit = UNIT_OHM_km;
169  } break;
170  }
171 
172  if(!m_line->DoubleFromString(m_parent, m_textCtrlReactance->GetValue(), data.indReactance,
173  _("Value entered incorrectly in the field \"Indutive Reactance\".")))
174  return false;
175  switch(m_choiceReactance->GetSelection()) {
176  case 0: {
177  data.indReactanceUnit = UNIT_PU;
178  } break;
179  case 1: {
180  data.indReactanceUnit = UNIT_OHM;
181  } break;
182  case 2: {
183  data.indReactanceUnit = UNIT_OHM_km;
184  } break;
185  }
186 
187  if(!m_line->DoubleFromString(m_parent, m_textCtrlSusceptance->GetValue(), data.capSusceptance,
188  _("Value entered incorrectly in the field \"Capacitive Susceptance\".")))
189  return false;
190  switch(m_choiceSusceptance->GetSelection()) {
191  case 0: {
192  data.capSusceptanceUnit = UNIT_PU;
193  } break;
194  case 1: {
195  data.capSusceptanceUnit = UNIT_S;
196  } break;
197  case 2: {
198  data.capSusceptanceUnit = UNIT_S_km;
199  } break;
200  }
201 
202  if(!m_line->DoubleFromString(m_parent, m_textCtrlLineSize->GetValue(), data.lineSize,
203  _("Value entered incorrectly in the field \"Line size\".")))
204  return false;
205 
206  data.useLinePower = m_checkUseLinePower->GetValue();
207 
208  if(!m_line->DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance,
209  _("Value entered incorrectly in the field \"Zero-sequence resistance\".")))
210  return false;
211  if(!m_line->DoubleFromString(m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroIndReactance,
212  _("Value entered incorrectly in the field \"Zero-sequence indutive reactance\".")))
213  return false;
214  if(!m_line->DoubleFromString(m_parent, m_textCtrlZeroSusceptance->GetValue(), data.zeroCapSusceptance,
215  _("Value entered incorrectly in the field \"Zero-sequence capacitive susceptance\".")))
216  return false;
217 
218  m_line->SetElectricalData(data);
219 
220  return true;
221 }
+ + + + + + + + +
Definition: Line.h:35
+ +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ + + +
+
+ + + + diff --git a/docs/doxygen/html/_line_form_8h_source.html b/docs/doxygen/html/_line_form_8h_source.html index a8d6a43..e46c193 100644 --- a/docs/doxygen/html/_line_form_8h_source.html +++ b/docs/doxygen/html/_line_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/LineForm.h Source File +Project/LineForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
LineForm.h
-
1 #ifndef LINEFORM_H
2 #define LINEFORM_H
3 #include "ElementForm.h"
4 
5 class Line;
6 class SwitchingForm;
7 
8 class LineForm : public LineFormBase
9 {
10 public:
11  LineForm(wxWindow* parent, Line* line);
12  virtual ~LineForm();
13 protected:
14  virtual void OnCancelButtonClick(wxCommandEvent& event);
15  virtual void OnOKButtonClick(wxCommandEvent& event);
16  virtual void OnStabilityButtonClick(wxCommandEvent& event);
17  virtual void ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newChar);
18  virtual bool ValidateData();
19 
20  wxWindow* m_parent = NULL;
21  Line* m_line = NULL;
22 
23 };
24 #endif // LINEFORM_H
Definition: LineForm.h:8
-
Definition: SwitchingForm.h:8
-
Definition: ElementForm.h:374
-
Definition: Line.h:35
+
1 #ifndef LINEFORM_H
2 #define LINEFORM_H
3 #include "ElementForm.h"
4 
5 class Line;
6 class SwitchingForm;
7 
8 class LineForm : public LineFormBase
9 {
10 public:
11  LineForm(wxWindow* parent, Line* line);
12  virtual ~LineForm();
13 protected:
14  virtual void OnCancelButtonClick(wxCommandEvent& event);
15  virtual void OnOKButtonClick(wxCommandEvent& event);
16  virtual void OnStabilityButtonClick(wxCommandEvent& event);
17  virtual void ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newChar);
18  virtual bool ValidateData();
19 
20  wxWindow* m_parent = NULL;
21  Line* m_line = NULL;
22 
23 };
24 #endif // LINEFORM_H
+ + +
Definition: Line.h:35
+
- + diff --git a/docs/doxygen/html/_load_8cpp_source.html b/docs/doxygen/html/_load_8cpp_source.html new file mode 100644 index 0000000..3af0f86 --- /dev/null +++ b/docs/doxygen/html/_load_8cpp_source.html @@ -0,0 +1,123 @@ + + + + + + + +Project/Load.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Load.cpp
+
+
+
1 #include "Load.h"
2 
3 Load::Load() : Shunt() {}
4 Load::Load(wxString name) : Shunt() { m_electricalData.name = name; }
5 Load::~Load() {}
6 bool Load::AddParent(Element* parent, wxPoint2DDouble position)
7 {
8  if(parent) {
9  m_parentList.push_back(parent);
10  parent->AddChild(this);
11  wxPoint2DDouble parentPt =
12  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
13  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
14  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
15 
16  m_position = parentPt + wxPoint2DDouble(0.0, 100.0); // Shifts the position to the down of the bus.
17  m_width = m_height = 20.0;
18  m_rect = wxRect2DDouble(m_position.m_x - 10.0, m_position.m_y - 10.0, m_width, m_height);
19 
20  m_pointList.push_back(parentPt);
21  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
22  m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -20.0));
23  m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -10.0));
24 
25  m_triangPts.push_back(wxPoint2DDouble(-m_width / 2.0, -m_height / 2.0));
26  m_triangPts.push_back(wxPoint2DDouble(m_width / 2.0, -m_height / 2.0));
27  m_triangPts.push_back(wxPoint2DDouble(0.0, m_height / 2.0));
28 
29  m_inserted = true;
30 
31  wxRect2DDouble genRect(0, 0, 0, 0);
32  m_switchRect.push_back(genRect); // Push a general rectangle.
33  UpdateSwitches();
34  m_pfDirection = PF_TO_ELEMENT;
35  UpdatePowerFlowArrowsPosition();
36 
37  return true;
38  }
39  return false;
40 }
41 
42 void Load::Draw(wxPoint2DDouble translation, double scale) const
43 {
44  OpenGLColour elementColour;
45  if(m_online) {
46  if(m_dynEvent)
47  elementColour = m_dynamicEventColour;
48  else
49  elementColour = m_onlineElementColour;
50  } else
51  elementColour = m_offlineElementColour;
52 
53  if(m_inserted) {
54  // Draw Selection (layer 1).
55  if(m_selected) {
56  glLineWidth(1.5 + m_borderSize * 2.0);
57  glColor4dv(m_selectionColour.GetRGBA());
58  std::vector<wxPoint2DDouble> selTriangPts;
59  selTriangPts.push_back(m_triangPts[0] + m_position +
60  wxPoint2DDouble(-m_borderSize / scale, -m_borderSize / scale));
61  selTriangPts.push_back(m_triangPts[1] + m_position +
62  wxPoint2DDouble(m_borderSize / scale, -m_borderSize / scale));
63  selTriangPts.push_back(m_triangPts[2] + m_position + wxPoint2DDouble(0.0, m_borderSize / scale));
64 
65  glPushMatrix();
66  glTranslated(m_position.m_x, m_position.m_y, 0.0);
67  glRotated(m_angle, 0.0, 0.0, 1.0);
68  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
69  DrawTriangle(selTriangPts);
70  glPopMatrix();
71 
72  DrawLine(m_pointList);
73 
74  // Draw node selection.
75  DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
76  }
77 
78  // Draw Load (layer 2).
79  glLineWidth(1.5);
80 
81  // Draw node.
82  glColor4dv(elementColour.GetRGBA());
83  DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
84 
85  DrawLine(m_pointList);
86 
87  DrawSwitches();
88  DrawPowerFlowPts();
89 
90  std::vector<wxPoint2DDouble> triangPts;
91  for(int i = 0; i < 3; i++) {
92  triangPts.push_back(m_triangPts[i] + m_position);
93  }
94  glPushMatrix();
95  glTranslated(m_position.m_x, m_position.m_y, 0.0);
96  glRotated(m_angle, 0.0, 0.0, 1.0);
97  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
98  glColor4dv(elementColour.GetRGBA());
99  DrawTriangle(triangPts);
100  glPopMatrix();
101  }
102 }
103 
104 void Load::Rotate(bool clockwise)
105 {
106  double rotAngle = m_rotationAngle;
107  if(!clockwise) rotAngle = -m_rotationAngle;
108 
109  m_angle += rotAngle;
110  if(m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
111  m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle);
112  m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle);
113  UpdateSwitchesPosition();
114  UpdatePowerFlowArrowsPosition();
115 }
116 
117 bool Load::GetContextMenu(wxMenu& menu)
118 {
119  menu.Append(ID_EDIT_ELEMENT, _("Edit Load"));
120  GeneralMenuItens(menu);
121  return true;
122 }
123 
124 bool Load::ShowForm(wxWindow* parent, Element* element)
125 {
126  LoadForm* loadForm = new LoadForm(parent, this);
127  if(loadForm->ShowModal() == wxID_OK) {
128  loadForm->Destroy();
129  return true;
130  }
131  loadForm->Destroy();
132  return false;
133 }
134 
135 LoadElectricalData Load::GetPUElectricalData(double systemPowerBase)
136 {
137  LoadElectricalData data = m_electricalData;
138  switch(data.activePowerUnit) {
139  case UNIT_W: {
140  data.activePower = data.activePower / systemPowerBase;
141  data.activePowerUnit = UNIT_PU;
142  } break;
143  case UNIT_kW: {
144  data.activePower = (data.activePower * 1e3) / systemPowerBase;
145  data.activePowerUnit = UNIT_PU;
146  } break;
147  case UNIT_MW: {
148  data.activePower = (data.activePower * 1e6) / systemPowerBase;
149  data.activePowerUnit = UNIT_PU;
150  } break;
151  default:
152  break;
153  }
154  switch(data.reactivePowerUnit) {
155  case UNIT_VAr: {
156  data.reactivePower = data.reactivePower / systemPowerBase;
157  data.reactivePowerUnit = UNIT_PU;
158  } break;
159  case UNIT_kVAr: {
160  data.reactivePower = (data.reactivePower * 1e3) / systemPowerBase;
161  data.reactivePowerUnit = UNIT_PU;
162  } break;
163  case UNIT_MVAr: {
164  data.reactivePower = (data.reactivePower * 1e6) / systemPowerBase;
165  data.reactivePowerUnit = UNIT_PU;
166  } break;
167  default:
168  break;
169  }
170 
171  return data;
172 }
173 
175 {
176  Load* copy = new Load();
177  *copy = *this;
178  return copy;
179 }
180 
181 wxString Load::GetTipText() const
182 {
183  wxString tipText = m_electricalData.name;
184 
185  // TODO: Avoid power calculation.
186  double activePower = m_electricalData.activePower;
187  double reactivePower = m_electricalData.reactivePower;
188  if(!m_online) {
189  activePower = 0.0;
190  reactivePower = 0.0;
191  }
192  if(m_online && m_electricalData.loadType == CONST_IMPEDANCE) {
193  std::complex<double> v = static_cast<Bus*>(m_parentList[0])->GetElectricalData().voltage;
194  reactivePower *= std::pow(std::abs(v), 2);
195  activePower *= std::pow(std::abs(v), 2);
196  }
197  tipText += "\n";
198  tipText += _("\nP = ") + wxString::FromDouble(activePower, 5);
199  switch(m_electricalData.activePowerUnit) {
200  case UNIT_PU: {
201  tipText += _(" p.u.");
202  } break;
203  case UNIT_W: {
204  tipText += _(" W");
205  } break;
206  case UNIT_kW: {
207  tipText += _(" kW");
208  } break;
209  case UNIT_MW: {
210  tipText += _(" MW");
211  } break;
212  default:
213  break;
214  }
215  tipText += _("\nQ = ") + wxString::FromDouble(reactivePower, 5);
216  switch(m_electricalData.reactivePowerUnit) {
217  case UNIT_PU: {
218  tipText += _(" p.u.");
219  } break;
220  case UNIT_VAr: {
221  tipText += _(" VAr");
222  } break;
223  case UNIT_kVAr: {
224  tipText += _(" kVAr");
225  } break;
226  case UNIT_MVAr: {
227  tipText += _(" MVAr");
228  } break;
229  default:
230  break;
231  }
232 
233  return tipText;
234 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+ + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Load.cpp:104
+ +
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+ + + +
Definition: Bus.h:45
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Load.cpp:174
+ +
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Load.cpp:117
+
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+
Definition: Load.h:23
+ +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Load.cpp:42
+ + + + +
virtual wxString GetTipText() const
Get the tip text.
Definition: Load.cpp:181
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Load.cpp:6
+
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+
Definition: Shunt.h:7
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Load.cpp:124
+
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
+
+ + + + diff --git a/docs/doxygen/html/_load_8h_source.html b/docs/doxygen/html/_load_8h_source.html index 0466773..20889b5 100644 --- a/docs/doxygen/html/_load_8h_source.html +++ b/docs/doxygen/html/_load_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Load.h Source File +Project/Load.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Load.h
-
1 #ifndef LOAD_H
2 #define LOAD_H
3 
4 #include "LoadForm.h"
5 #include "Shunt.h"
6 
7 enum LoadType
8 {
9  CONST_POWER = 0,
10  CONST_IMPEDANCE
11 };
12 
14 {
15  wxString name;
16  double activePower = 100.0;
17  ElectricalUnit activePowerUnit = UNIT_MW;
18  double reactivePower = 0.0;
19  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
20  LoadType loadType = CONST_POWER;
21 };
22 
23 class Load : public Shunt
24 {
25  public:
26  Load();
27  Load(wxString name);
28  ~Load();
29 
30  virtual Element* GetCopy();
31  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
32  virtual void Draw(wxPoint2DDouble translation, double scale) const;
33  virtual void Rotate(bool clockwise = true);
34  virtual bool GetContextMenu(wxMenu& menu);
35  virtual wxString GetTipText() const;
36  virtual bool ShowForm(wxWindow* parent, Element* element);
37  LoadElectricalData GetElectricalData() { return m_electricalData; }
38  LoadElectricalData GetPUElectricalData(double systemPowerBase);
39  void SetElectricalData(LoadElectricalData electricalData) { m_electricalData = electricalData; }
40 
41  protected:
42  std::vector<wxPoint2DDouble> m_triangPts;
43  LoadElectricalData m_electricalData;
44 };
45 
46 #endif // LOAD_H
Definition: Element.h:88
-
Definition: PowerElement.h:19
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:25
-
Definition: Load.h:23
-
Definition: Load.h:13
-
Definition: Shunt.h:7
+
1 #ifndef LOAD_H
2 #define LOAD_H
3 
4 #include "LoadForm.h"
5 #include "Shunt.h"
6 
7 enum LoadType
8 {
9  CONST_POWER = 0,
10  CONST_IMPEDANCE
11 };
12 
14 {
15  wxString name;
16  double activePower = 100.0;
17  ElectricalUnit activePowerUnit = UNIT_MW;
18  double reactivePower = 0.0;
19  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
20  LoadType loadType = CONST_POWER;
21 };
22 
23 class Load : public Shunt
24 {
25  public:
26  Load();
27  Load(wxString name);
28  ~Load();
29 
30  virtual Element* GetCopy();
31  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
32  virtual void Draw(wxPoint2DDouble translation, double scale) const;
33  virtual void Rotate(bool clockwise = true);
34  virtual bool GetContextMenu(wxMenu& menu);
35  virtual wxString GetTipText() const;
36  virtual bool ShowForm(wxWindow* parent, Element* element);
37  LoadElectricalData GetElectricalData() { return m_electricalData; }
38  LoadElectricalData GetPUElectricalData(double systemPowerBase);
39  void SetElectricalData(LoadElectricalData electricalData) { m_electricalData = electricalData; }
40 
41  protected:
42  std::vector<wxPoint2DDouble> m_triangPts;
43  LoadElectricalData m_electricalData;
44 };
45 
46 #endif // LOAD_H
+ +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ +
Definition: Load.h:23
+ +
Definition: Shunt.h:7
+
- + diff --git a/docs/doxygen/html/_load_form_8cpp_source.html b/docs/doxygen/html/_load_form_8cpp_source.html new file mode 100644 index 0000000..970b47c --- /dev/null +++ b/docs/doxygen/html/_load_form_8cpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +Project/LoadForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
LoadForm.cpp
+
+
+
1 #include "LoadForm.h"
2 #include "SwitchingForm.h"
3 #include "Load.h"
4 
5 LoadForm::LoadForm(wxWindow* parent, Load* load) : LoadFormBase(parent)
6 {
7  SetSize(GetBestSize());
8  LoadElectricalData data = load->GetElectricalData();
9 
10  m_textCtrlName->SetValue(data.name);
11 
12  m_textCtrlActivePower->SetValue(Load::StringFromDouble(data.activePower));
13  switch(data.activePowerUnit) {
14  case UNIT_PU: {
15  m_choiceActivePower->SetSelection(0);
16  } break;
17  case UNIT_W: {
18  m_choiceActivePower->SetSelection(1);
19  } break;
20  case UNIT_kW: {
21  m_choiceActivePower->SetSelection(2);
22  } break;
23  case UNIT_MW: {
24  m_choiceActivePower->SetSelection(3);
25  } break;
26  default:
27  break;
28  }
29 
30  m_textCtrlReactivePower->SetValue(Load::StringFromDouble(data.reactivePower));
31  switch(data.reactivePowerUnit) {
32  case UNIT_PU: {
33  m_choiceReactivePower->SetSelection(0);
34  } break;
35  case UNIT_VAr: {
36  m_choiceReactivePower->SetSelection(1);
37  } break;
38  case UNIT_kVAr: {
39  m_choiceReactivePower->SetSelection(2);
40  } break;
41  case UNIT_MVAr: {
42  m_choiceReactivePower->SetSelection(3);
43  } break;
44  default:
45  break;
46  }
47 
48  switch(data.loadType) {
49  case CONST_POWER: {
50  m_choiceType->SetSelection(0);
51  } break;
52  case CONST_IMPEDANCE: {
53  m_choiceType->SetSelection(1);
54  } break;
55  }
56 
57  m_parent = parent;
58  m_load = load;
59 }
60 
61 LoadForm::~LoadForm() {}
62 void LoadForm::OnOnButtonClick(wxCommandEvent& event)
63 {
64  if(ValidateData()) EndModal(wxID_OK);
65 }
66 
67 void LoadForm::OnStabilityButtonClick(wxCommandEvent& event)
68 {
69  if(ValidateData()) {
70  SwitchingForm swForm(m_parent, m_load);
71  swForm.SetTitle(_("Load: Switching"));
72  swForm.ShowModal();
73  EndModal(wxID_OK);
74  }
75 }
76 
77 bool LoadForm::ValidateData()
78 {
79  LoadElectricalData data;
80 
81  data.name = m_textCtrlName->GetValue();
82 
83  if(!m_load->DoubleFromString(m_parent, m_textCtrlActivePower->GetValue(), data.activePower,
84  _("Value entered incorrectly in the field \"Active power\".")))
85  return false;
86  switch(m_choiceActivePower->GetSelection()) {
87  case 0: {
88  data.activePowerUnit = UNIT_PU;
89  } break;
90  case 1: {
91  data.activePowerUnit = UNIT_W;
92  } break;
93  case 2: {
94  data.activePowerUnit = UNIT_kW;
95  } break;
96  case 3: {
97  data.activePowerUnit = UNIT_MW;
98  } break;
99  }
100 
101  if(!m_load->DoubleFromString(m_parent, m_textCtrlReactivePower->GetValue(), data.reactivePower,
102  _("Value entered incorrectly in the field \"Reactive power\".")))
103  return false;
104  switch(m_choiceReactivePower->GetSelection()) {
105  case 0: {
106  data.reactivePowerUnit = UNIT_PU;
107  } break;
108  case 1: {
109  data.reactivePowerUnit = UNIT_VAr;
110  } break;
111  case 2: {
112  data.reactivePowerUnit = UNIT_kVAr;
113  } break;
114  case 3: {
115  data.reactivePowerUnit = UNIT_MVAr;
116  } break;
117  }
118 
119  switch(m_choiceType->GetSelection()) {
120  case 0: {
121  data.loadType = CONST_POWER;
122  } break;
123  case 1: {
124  data.loadType = CONST_IMPEDANCE;
125  } break;
126  }
127 
128  m_load->SetElectricalData(data);
129  return true;
130 }
+ + + + +
Definition: Load.h:23
+ + + + +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ +
+
+ + + + diff --git a/docs/doxygen/html/_load_form_8h_source.html b/docs/doxygen/html/_load_form_8h_source.html index 98b0546..4bee1f7 100644 --- a/docs/doxygen/html/_load_form_8h_source.html +++ b/docs/doxygen/html/_load_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/LoadForm.h Source File +Project/LoadForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
LoadForm.h
-
1 #ifndef LOADFORM_H
2 #define LOADFORM_H
3 #include "ElementForm.h"
4 
5 class Load;
6 class SwitchingForm;
7 
8 class LoadForm : public LoadFormBase
9 {
10  public:
11  LoadForm(wxWindow* parent, Load* load);
12  virtual ~LoadForm();
13 
14  virtual bool ValidateData();
15 
16  protected:
17  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
18  virtual void OnOnButtonClick(wxCommandEvent& event);
19  virtual void OnStabilityButtonClick(wxCommandEvent& event);
20 
21  wxWindow* m_parent = NULL;
22  Load* m_load = NULL;
23 };
24 #endif // LOADFORM_H
Definition: SwitchingForm.h:8
-
Definition: Load.h:23
-
Definition: ElementForm.h:552
-
Definition: LoadForm.h:8
+
1 #ifndef LOADFORM_H
2 #define LOADFORM_H
3 #include "ElementForm.h"
4 
5 class Load;
6 class SwitchingForm;
7 
8 class LoadForm : public LoadFormBase
9 {
10  public:
11  LoadForm(wxWindow* parent, Load* load);
12  virtual ~LoadForm();
13 
14  virtual bool ValidateData();
15 
16  protected:
17  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
18  virtual void OnOnButtonClick(wxCommandEvent& event);
19  virtual void OnStabilityButtonClick(wxCommandEvent& event);
20 
21  wxWindow* m_parent = NULL;
22  Load* m_load = NULL;
23 };
24 #endif // LOADFORM_H
+
Definition: Load.h:23
+ +
+
- + diff --git a/docs/doxygen/html/_machines_8cpp_source.html b/docs/doxygen/html/_machines_8cpp_source.html new file mode 100644 index 0000000..04d4cfc --- /dev/null +++ b/docs/doxygen/html/_machines_8cpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +Project/Machines.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Machines.cpp
+
+
+
1 #include "Machines.h"
2 
3 #include "ControlElementContainer.h"
4 #include "ControlElementSolver.h"
5 
6 Machines::Machines() : PowerElement() {}
7 Machines::~Machines() {}
8 bool Machines::AddParent(Element* parent, wxPoint2DDouble position)
9 {
10  if(parent) {
11  m_parentList.push_back(parent);
12  parent->AddChild(this);
13  wxPoint2DDouble parentPt =
14  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
15  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
16  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
17 
18  m_position = parentPt + wxPoint2DDouble(-100.0, 0.0); // Shifts the position to the left of the bus.
19  m_width = m_height = 50.0;
20  m_rect = wxRect2DDouble(m_position.m_x - 25.0, m_position.m_y - 25.0, m_width, m_height);
21 
22  m_pointList.push_back(parentPt);
23  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
24  m_pointList.push_back(m_position + wxPoint2DDouble(35.0, 0.0));
25  m_pointList.push_back(m_position + wxPoint2DDouble(25.0, 0.0));
26  m_inserted = true;
27 
28  wxRect2DDouble genRect(0, 0, 0, 0);
29  m_switchRect.push_back(genRect); // Push a general rectangle.
30  UpdateSwitches();
31  UpdatePowerFlowArrowsPosition();
32  return true;
33  }
34  return false;
35 }
36 
37 void Machines::Draw(wxPoint2DDouble translation, double scale) const
38 {
39  OpenGLColour elementColour;
40  if(m_online) {
41  if(m_dynEvent)
42  elementColour = m_dynamicEventColour;
43  else
44  elementColour = m_onlineElementColour;
45  } else
46  elementColour = m_offlineElementColour;
47 
48  if(m_inserted) {
49  // Draw Selection (layer 1).
50  if(m_selected) {
51  glLineWidth(1.5 + m_borderSize * 2.0);
52  glColor4dv(m_selectionColour.GetRGBA());
53  DrawCircle(m_position, 25.0 + (m_borderSize + 1.5) / scale, 20, GL_POLYGON);
54  DrawLine(m_pointList);
55 
56  // Draw node selection.
57  DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
58  }
59 
60  // Draw Machines (layer 2).
61  glLineWidth(1.5);
62 
63  // Draw node.
64  glColor4dv(elementColour.GetRGBA());
65  DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
66 
67  DrawLine(m_pointList);
68 
69  DrawSwitches();
70  DrawPowerFlowPts();
71 
72  glColor4d(1.0, 1.0, 1.0, 1.0);
73  DrawCircle(m_position, 25.0, 20, GL_POLYGON);
74 
75  glColor4dv(elementColour.GetRGBA());
76  DrawCircle(m_position, 25.0, 20);
77 
78  // Draw machine symbol.
79  glLineWidth(2.0);
80  DrawSymbol();
81  }
82 }
83 
84 void Machines::UpdateSwitchesPosition()
85 {
86  if(m_parentList[0]) {
87  m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], m_pointList[2]);
88  } else {
89  m_pointList[1] = m_pointList[0];
90  }
91  UpdateSwitches();
92 }
93 
94 void Machines::Move(wxPoint2DDouble position)
95 {
96  SetPosition(m_movePos + position - m_moveStartPt);
97  for(int i = 2; i < (int)m_pointList.size(); i++) {
98  m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
99  }
100  if(!m_parentList[0]) {
101  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
102  }
103  UpdateSwitchesPosition();
104  UpdatePowerFlowArrowsPosition();
105 }
106 
107 void Machines::MoveNode(Element* element, wxPoint2DDouble position)
108 {
109  if(element) {
110  if(element == m_parentList[0]) {
111  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
112  }
113  } else {
114  if(m_activeNodeID == 1) {
115  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
116  if(m_parentList[0]) {
117  m_parentList[0]->RemoveChild(this);
118  m_parentList[0] = NULL;
119  m_online = false;
120  }
121  }
122  }
123 
124  // Recalculate switches positions
125  UpdateSwitchesPosition();
126  UpdatePowerFlowArrowsPosition();
127 }
128 
129 void Machines::StartMove(wxPoint2DDouble position)
130 {
131  m_moveStartPt = position;
132  m_movePts = m_pointList;
133  m_movePos = m_position;
134 }
135 
136 void Machines::RotateNode(Element* parent, bool clockwise)
137 {
138  double rotAngle = m_rotationAngle;
139  if(!clockwise) rotAngle = -m_rotationAngle;
140 
141  if(parent == m_parentList[0]) {
142  m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
143  UpdateSwitchesPosition();
144  UpdatePowerFlowArrowsPosition();
145  }
146 }
147 
149 {
150  if(parent == m_parentList[0]) {
151  m_parentList[0] = NULL;
152  m_online = false;
153  UpdateSwitchesPosition();
154  UpdatePowerFlowArrowsPosition();
155  }
156 }
157 
158 bool Machines::NodeContains(wxPoint2DDouble position)
159 {
160  wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
161  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
162 
163  if(nodeRect.Contains(position)) {
164  m_activeNodeID = 1;
165  return true;
166  }
167 
168  m_activeNodeID = 0;
169  return false;
170 }
171 
173 {
174  if(parent && m_activeNodeID != 0) {
175  wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
176  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
177 
178  if(parent->Intersects(nodeRect)) {
179  m_parentList[0] = parent;
180 
181  // Centralize the node on bus.
182  wxPoint2DDouble parentPt =
183  parent->RotateAtPosition(m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
184  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
185  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
186  m_pointList[0] = parentPt;
187 
188  UpdateSwitchesPosition();
189  UpdatePowerFlowArrowsPosition();
190  return true;
191  } else {
192  m_parentList[0] = NULL;
193  m_online = false;
194  }
195  }
196  return false;
197 }
198 
200 {
201  if(m_parentList[0]) {
202  wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
203  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
204 
205  if(!m_parentList[0]->Intersects(nodeRect)) {
206  m_parentList[0]->RemoveChild(this);
207  m_parentList[0] = NULL;
208  m_online = false;
209  UpdateSwitchesPosition();
210  UpdatePowerFlowArrowsPosition();
211  }
212  }
213 }
214 
215 void Machines::Rotate(bool clockwise)
216 {
217  double rotAngle = m_rotationAngle;
218  if(!clockwise) rotAngle = -m_rotationAngle;
219 
220  m_angle += rotAngle;
221  if(m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
222  m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle);
223  m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle);
224  UpdateSwitchesPosition();
225  UpdatePowerFlowArrowsPosition();
226 }
227 
228 void Machines::UpdatePowerFlowArrowsPosition()
229 {
230  std::vector<wxPoint2DDouble> edges;
231  switch(m_pfDirection) {
232  case PF_NONE: {
233  m_powerFlowArrow.clear();
234  } break;
235  case PF_TO_BUS: {
236  edges.push_back(m_pointList[2]);
237  edges.push_back(m_pointList[1]);
238  } break;
239  case PF_TO_ELEMENT: {
240  edges.push_back(m_pointList[1]);
241  edges.push_back(m_pointList[2]);
242  } break;
243  default:
244  break;
245  }
246 
247  CalculatePowerFlowPts(edges);
248 }
249 
251 {
252  m_pfDirection = pfDirection;
253  UpdatePowerFlowArrowsPosition();
254 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Machines.cpp:129
+ +
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Machines.cpp:94
+
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
virtual bool Intersects(wxRect2DDouble rect) const =0
Check if the element&#39;s rect intersects other rect.
+
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Machines.cpp:158
+ +
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: Machines.cpp:250
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Machines.cpp:136
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Machines.cpp:8
+
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Machines.cpp:172
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Machines.cpp:199
+
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Machines.cpp:215
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Machines.cpp:37
+ + + +
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Machines.cpp:148
+ +
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+
virtual void MoveNode(Element *element, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Machines.cpp:107
+
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
+
+ + + + diff --git a/docs/doxygen/html/_machines_8h_source.html b/docs/doxygen/html/_machines_8h_source.html index 2e0b9e8..c77e3f6 100644 --- a/docs/doxygen/html/_machines_8h_source.html +++ b/docs/doxygen/html/_machines_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Machines.h Source File +Project/Machines.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Machines.h
-
1 #ifndef MACHINES_H
2 #define MACHINES_H
3 
4 #include "PowerElement.h"
5 
8 
9 class Machines : public PowerElement
10 {
11  public:
12  enum SyncMachineModel { SM_MODEL_1 = 0, SM_MODEL_2, SM_MODEL_3, SM_MODEL_4, SM_MODEL_5 };
13 
14  Machines();
15  ~Machines();
16 
17  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
18  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
19  virtual void Draw(wxPoint2DDouble translation, double scale) const;
20  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
21  virtual void Move(wxPoint2DDouble position);
22  virtual void MoveNode(Element* element, wxPoint2DDouble position);
23  virtual void StartMove(wxPoint2DDouble position);
24  virtual void RotateNode(Element* parent, bool clockwise = true);
25  virtual void RemoveParent(Element* parent);
26  virtual bool NodeContains(wxPoint2DDouble position);
27  virtual bool SetNodeParent(Element* parent);
28  virtual void UpdateNodes();
29  virtual void Rotate(bool clockwise = true);
30  virtual void DrawSymbol() const {}
31  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection);
32 
33  protected:
34  void UpdateSwitchesPosition();
35  void UpdatePowerFlowArrowsPosition();
36  bool m_inserted = false;
37 };
38 
39 #endif // MACHINES_H
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Machines.h:18
-
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Machines.cpp:129
-
Definition: Element.h:88
-
Definition: ControlElementSolver.h:20
-
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Machines.cpp:94
-
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Machines.cpp:158
-
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: Machines.cpp:250
-
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Machines.cpp:136
-
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Machines.cpp:8
-
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Machines.cpp:172
-
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Machines.cpp:199
-
Definition: ControlElementContainer.h:20
+
1 #ifndef MACHINES_H
2 #define MACHINES_H
3 
4 #include "PowerElement.h"
5 
8 
9 class Machines : public PowerElement
10 {
11  public:
12  enum SyncMachineModel { SM_MODEL_1 = 0, SM_MODEL_2, SM_MODEL_3, SM_MODEL_4, SM_MODEL_5 };
13 
14  Machines();
15  ~Machines();
16 
17  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
18  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
19  virtual void Draw(wxPoint2DDouble translation, double scale) const;
20  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
21  virtual void Move(wxPoint2DDouble position);
22  virtual void MoveNode(Element* element, wxPoint2DDouble position);
23  virtual void StartMove(wxPoint2DDouble position);
24  virtual void RotateNode(Element* parent, bool clockwise = true);
25  virtual void RemoveParent(Element* parent);
26  virtual bool NodeContains(wxPoint2DDouble position);
27  virtual bool SetNodeParent(Element* parent);
28  virtual void UpdateNodes();
29  virtual void Rotate(bool clockwise = true);
30  virtual void DrawSymbol() const {}
31  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection);
32 
33  protected:
34  void UpdateSwitchesPosition();
35  void UpdatePowerFlowArrowsPosition();
36  bool m_inserted = false;
37 };
38 
39 #endif // MACHINES_H
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Machines.h:18
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Machines.cpp:129
+ + +
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Machines.cpp:94
+
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Machines.cpp:158
+
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: Machines.cpp:250
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Machines.cpp:136
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Machines.cpp:8
+
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Machines.cpp:172
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Machines.cpp:199
+
Switching data of power elements.
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Machines.cpp:215
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Machines.cpp:37
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Machines.h:20
-
Definition: Machines.h:9
-
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
-
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Machines.cpp:148
-
Definition: PowerElement.h:100
-
virtual void MoveNode(Element *element, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Machines.cpp:107
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Machines.cpp:215
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Machines.cpp:37
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Machines.h:20
+ +
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Machines.cpp:148
+ +
virtual void MoveNode(Element *element, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Machines.cpp:107
+
- + diff --git a/docs/doxygen/html/_main_frame_8cpp_source.html b/docs/doxygen/html/_main_frame_8cpp_source.html new file mode 100644 index 0000000..d05d21b --- /dev/null +++ b/docs/doxygen/html/_main_frame_8cpp_source.html @@ -0,0 +1,120 @@ + + + + + + + +Project/MainFrame.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MainFrame.cpp
+
+
+
1 #include "MainFrame.h"
2 #include "ArtMetro.h"
3 #include "Workspace.h"
4 #include "Bus.h"
5 #include "Line.h"
6 #include "Transformer.h"
7 #include "SyncGenerator.h"
8 #include "IndMotor.h"
9 #include "SyncMotor.h"
10 #include "Load.h"
11 #include "Inductor.h"
12 #include "Capacitor.h"
13 #include "FileHanding.h"
14 #include "GeneralPropertiesForm.h"
15 #include "SimulationsSettingsForm.h"
16 #include "PropertiesData.h"
17 #include "ChartView.h"
18 #include "DataReport.h"
19 #include "AboutForm.h"
20 
21 MainFrame::MainFrame() : MainFrameBase(NULL) {}
22 MainFrame::MainFrame(wxWindow* parent, wxLocale* locale, PropertiesData* initProperties) : MainFrameBase(parent)
23 {
24  m_locale = locale;
25  m_generalProperties = initProperties;
26 
27  Init();
28 }
29 
30 MainFrame::~MainFrame()
31 {
32  // if(m_artMetro) delete m_artMetro;
33  if(m_addElementsMenu) {
34  m_addElementsMenu->Disconnect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainFrame::OnAddElementsClick),
35  NULL, this);
36  delete m_addElementsMenu;
37  }
38  if(m_locale) delete m_locale;
39  if(m_generalProperties) delete m_generalProperties;
40 }
41 
42 void MainFrame::Init()
43 {
44  this->SetSize(800, 600);
45 
46  CreateAddElementsMenu();
47 
48  EnableCurrentProjectRibbon(false);
49 
50  m_artMetro = new wxRibbonMetroArtProvider();
51  m_ribbonBar->SetArtProvider(m_artMetro);
52  m_ribbonBar->Realize();
53 
54  this->Layout();
55 }
56 
57 void MainFrame::EnableCurrentProjectRibbon(bool enable)
58 {
59  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_ADDELEMENT, enable);
60  m_ribbonButtonBarReports->EnableButton(ID_RIBBON_CHARTS, enable);
61  m_ribbonButtonBarCProject->EnableButton(ID_RIBBON_CLOSE, enable);
62  m_ribbonButtonBarClipboard->EnableButton(ID_RIBBON_COPY, enable);
63  m_ribbonButtonBarReports->EnableButton(ID_RIBBON_DATAREPORT, enable);
64  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_DELETE, enable);
65  m_ribbonButtonBarContinuous->EnableButton(ID_RIBBON_DISABLESOL, enable);
66  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_DRAG, enable);
67  m_ribbonButtonBarContinuous->EnableButton(ID_RIBBON_ENABLESOL, enable);
68  m_ribbonButtonBarSimulations->EnableButton(ID_RIBBON_FAULT, enable);
69  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_FIT, enable);
70  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_MOVE, enable);
71  m_ribbonButtonBarClipboard->EnableButton(ID_RIBBON_PASTE, enable);
72  m_ribbonButtonBarSimulations->EnableButton(ID_RIBBON_POWERFLOW, enable);
73  m_ribbonButtonBarClipboard->EnableButton(ID_RIBBON_REDO, enable);
74  m_ribbonButtonBarContinuous->EnableButton(ID_RIBBON_RESETVOLT, enable);
75  m_ribbonButtonBarSimulations->EnableButton(ID_RIBBON_RUNSTAB, enable);
76  m_ribbonButtonBarCProject->EnableButton(ID_RIBBON_SAVE, enable);
77  m_ribbonButtonBarCProject->EnableButton(ID_RIBBON_SAVEAS, enable);
78  m_ribbonButtonBarSimulations->EnableButton(ID_RIBBON_SCPOWER, enable);
79  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_PROJSETTINGS, enable);
80  m_ribbonButtonBarReports->EnableButton(ID_RIBBON_SNAPSHOT, enable);
81  m_ribbonButtonBarSimulations->EnableButton(ID_RIBBON_SIMULSETTINGS, enable);
82  m_ribbonButtonBarClipboard->EnableButton(ID_RIBBON_UNDO, enable);
83  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_ROTATEC, enable);
84  m_ribbonButtonBarCircuit->EnableButton(ID_RIBBON_ROTATECC, enable);
85 }
86 
87 void MainFrame::CreateAddElementsMenu()
88 {
89  m_addElementsMenu = new wxMenu();
90 
91  wxMenuItem* busElement =
92  new wxMenuItem(m_addElementsMenu, ID_ADDMENU_BUS, _("&Bus\tB"), _("Adds a bus at the circuit"));
93  // busElement->SetBitmap(wxArtProvider::GetBitmap(wxART_WARNING));
94  wxMenuItem* lineElement =
95  new wxMenuItem(m_addElementsMenu, ID_ADDMENU_LINE, _("&Line\tL"), _("Adds a power line at the circuit"));
96  wxMenuItem* transformerElement = new wxMenuItem(m_addElementsMenu, ID_ADDMENU_TRANSFORMER, _("&Transformer\tT"),
97  _("Adds a transformer at the circuit"));
98  wxMenuItem* generatorElement = new wxMenuItem(m_addElementsMenu, ID_ADDMENU_GENERATOR, _("&Generator\tG"),
99  _("Adds a generator at the circuit"));
100  wxMenuItem* indMotorElement = new wxMenuItem(m_addElementsMenu, ID_ADDMENU_INDMOTOR, _("&Induction motor\tI"),
101  _("Adds an induction motor at the circuit"));
102  wxMenuItem* syncCompElement =
103  new wxMenuItem(m_addElementsMenu, ID_ADDMENU_SYNCCOMP, _("&Synchronous compensator \tK"),
104  _("Adds an induction motor at the circuit"));
105  wxMenuItem* loadElement =
106  new wxMenuItem(m_addElementsMenu, ID_ADDMENU_LOAD, _("&Load\tShift-L"), _("Adds a load at the circuit"));
107  wxMenuItem* capacitorElement = new wxMenuItem(m_addElementsMenu, ID_ADDMENU_CAPACITOR, _("&Capacitor\tShift-C"),
108  _("Adds a shunt capacitor at the circuit"));
109  wxMenuItem* inductorElement = new wxMenuItem(m_addElementsMenu, ID_ADDMENU_INDUCTOR, _("&Inductor\tShift-I"),
110  _("Adds a shunt inductor at the circuit"));
111 
112  m_addElementsMenu->Append(busElement);
113  m_addElementsMenu->Append(lineElement);
114  m_addElementsMenu->Append(transformerElement);
115  m_addElementsMenu->Append(generatorElement);
116  m_addElementsMenu->Append(indMotorElement);
117  m_addElementsMenu->Append(syncCompElement);
118  m_addElementsMenu->Append(loadElement);
119  m_addElementsMenu->Append(capacitorElement);
120  m_addElementsMenu->Append(inductorElement);
121 
122  m_addElementsMenu->Bind(wxEVT_COMMAND_MENU_SELECTED, &MainFrame::OnAddElementsClick, this);
123 }
124 
125 void MainFrame::OnNewClick(wxRibbonButtonBarEvent& event)
126 {
127  EnableCurrentProjectRibbon();
128 
129  Workspace* newWorkspace =
130  new Workspace(this, wxString::Format(_("New project %d"), m_projectNumber), this->GetStatusBar());
131  m_workspaceList.push_back(newWorkspace);
132 
133  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_DISABLESOL, true);
134  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_ENABLESOL, false);
135 
136  m_auiNotebook->AddPage(newWorkspace, newWorkspace->GetName(), true);
137  newWorkspace->Redraw();
138  m_projectNumber++;
139 }
140 
141 void MainFrame::OnAboutClick(wxRibbonButtonBarEvent& event)
142 {
143  AboutForm about(this);
144  about.ShowModal();
145 }
146 
147 void MainFrame::OnAddElementDropdown(wxRibbonButtonBarEvent& event) { event.PopupMenu(m_addElementsMenu); }
148 void MainFrame::OnChartsClick(wxRibbonButtonBarEvent& event)
149 {
150  if(Workspace* workspace = dynamic_cast<Workspace*>(m_auiNotebook->GetCurrentPage())) {
151  std::vector<ElementPlotData> plotDataList;
152  auto elementList = workspace->GetElementList();
153  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) {
154  if(PowerElement* powerElement = dynamic_cast<PowerElement*>(*it)) {
155  ElementPlotData plotData;
156  if(powerElement->GetPlotData(plotData)) plotDataList.push_back(plotData);
157  }
158  }
159  ChartView* cView = new ChartView(workspace, plotDataList, workspace->GetStabilityTimeVector());
160  cView->Show();
161  }
162 }
163 
164 void MainFrame::OnCloseClick(wxRibbonButtonBarEvent& event) {}
165 void MainFrame::OnCopyClick(wxRibbonButtonBarEvent& event) {}
166 void MainFrame::OnDataReportClick(wxRibbonButtonBarEvent& event)
167 {
168  if(Workspace* workspace = dynamic_cast<Workspace*>(m_auiNotebook->GetCurrentPage())) {
169  DataReport* dataReport = new DataReport(workspace, workspace);
170  dataReport->Show();
171  }
172 }
173 void MainFrame::OnDeleteClick(wxRibbonButtonBarEvent& event)
174 {
175  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
176  if(workspace) {
177  workspace->DeleteSelectedElements();
178  }
179 }
180 void MainFrame::OnDisableSolutionClick(wxRibbonButtonBarEvent& event)
181 {
182  if(Workspace* workspace = dynamic_cast<Workspace*>(m_auiNotebook->GetCurrentPage())) {
183  workspace->SetContinuousCalculationActive(false);
184  }
185  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_DISABLESOL, true);
186  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_ENABLESOL, false);
187 }
188 
189 void MainFrame::OnDragClick(wxRibbonButtonBarEvent& event) {}
190 void MainFrame::OnEnableSolutionClick(wxRibbonButtonBarEvent& event)
191 {
192  if(Workspace* workspace = dynamic_cast<Workspace*>(m_auiNotebook->GetCurrentPage())) {
193  workspace->SetContinuousCalculationActive(true);
194  workspace->RunStaticStudies();
195  }
196  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_ENABLESOL, true);
197  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_DISABLESOL, false);
198 }
199 
200 void MainFrame::OnExpImpClick(wxRibbonButtonBarEvent& event) {}
201 void MainFrame::OnFaultClick(wxRibbonButtonBarEvent& event)
202 {
203  if(Workspace* workspace = dynamic_cast<Workspace*>(m_auiNotebook->GetCurrentPage())) {
204  workspace->RunFault();
205  }
206 }
207 
208 void MainFrame::OnFitClick(wxRibbonButtonBarEvent& event)
209 {
210  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
211  if(workspace) {
212  workspace->Fit();
213  }
214 }
215 
216 void MainFrame::OnMoveClick(wxRibbonButtonBarEvent& event)
217 {
218  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
219  if(workspace) {
220  auto elementList = workspace->GetAllElements();
221  // Calculate the average position of selected elements.
222  wxPoint2DDouble averagePos(0, 0);
223  int numSelElements = 0;
224  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) {
225  Element* element = *it;
226  if(element->IsSelected()) {
227  averagePos += element->GetPosition();
228  numSelElements++;
229  }
230  }
231  averagePos = wxPoint2DDouble(averagePos.m_x / double(numSelElements), averagePos.m_y / double(numSelElements));
232  // Set the move position to the average of selected elements.
233  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) {
234  Element* element = *it;
235  if(element->IsSelected()) {
236  element->StartMove(averagePos);
237  }
238  }
239  workspace->SetWorkspaceMode(Workspace::MODE_MOVE_ELEMENT);
240  }
241 }
242 
243 void MainFrame::OnOpenClick(wxRibbonButtonBarEvent& event)
244 {
245  wxFileDialog openFileDialog(this, _("Open PSP file"), "", "", "PSP files (*.psp)|*.psp",
246  wxFD_OPEN | wxFD_FILE_MUST_EXIST);
247  if(openFileDialog.ShowModal() == wxID_CANCEL) return;
248 
249  wxFileName fileName(openFileDialog.GetPath());
250 
251  EnableCurrentProjectRibbon();
252  Workspace* newWorkspace = new Workspace(this, _("Open project"), this->GetStatusBar());
253 
254  FileHanding fileHandling(newWorkspace);
255  if(fileHandling.OpenProject(fileName)) {
256  newWorkspace->SetSavedPath(fileName);
257 
258  m_workspaceList.push_back(newWorkspace);
259 
260  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_DISABLESOL, true);
261  m_ribbonButtonBarContinuous->ToggleButton(ID_RIBBON_ENABLESOL, false);
262 
263  m_auiNotebook->AddPage(newWorkspace, newWorkspace->GetName(), true);
264  m_auiNotebook->Layout();
265  newWorkspace->Redraw();
266  newWorkspace->SetJustOpened(true);
267  m_projectNumber++;
268  } else {
269  wxMessageDialog msgDialog(this, _("It was not possible to open the selected file."), _("Error"),
270  wxOK | wxCENTRE | wxICON_ERROR);
271  msgDialog.ShowModal();
272  delete newWorkspace;
273  }
274 }
275 
276 void MainFrame::OnPSPGuideClick(wxRibbonButtonBarEvent& event) {}
277 void MainFrame::OnPasteClick(wxRibbonButtonBarEvent& event) {}
278 void MainFrame::OnPowerFlowClick(wxRibbonButtonBarEvent& event)
279 {
280  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
281  if(workspace) {
282  workspace->RunPowerFlow();
283  }
284 }
285 
286 void MainFrame::OnRedoClick(wxRibbonButtonBarEvent& event) {}
287 void MainFrame::OnResetVoltagesClick(wxRibbonButtonBarEvent& event) {}
288 void MainFrame::OnRunStabilityClick(wxRibbonButtonBarEvent& event)
289 {
290  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
291  if(workspace) {
292  workspace->RunStability();
293  }
294 }
295 
296 void MainFrame::OnSCPowerClick(wxRibbonButtonBarEvent& event)
297 {
298  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
299  if(workspace) {
300  workspace->RunSCPower();
301  }
302 }
303 
304 void MainFrame::OnSaveAsClick(wxRibbonButtonBarEvent& event)
305 {
306  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
307  if(workspace) {
308  FileHanding fileHandling(workspace);
309 
310  wxFileDialog saveFileDialog(this, _("Save PSP file"), "", "", "PSP files (*.psp)|*.psp",
311  wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
312  if(saveFileDialog.ShowModal() == wxID_CANCEL) return;
313 
314  fileHandling.SaveProject(saveFileDialog.GetPath());
315  wxFileName fileName(saveFileDialog.GetPath());
316  workspace->SetName(fileName.GetName());
317  m_auiNotebook->SetPageText(m_auiNotebook->GetPageIndex(workspace), workspace->GetName());
318  workspace->SetSavedPath(fileName);
319  }
320 }
321 
322 void MainFrame::OnSaveClick(wxRibbonButtonBarEvent& event)
323 {
324  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
325  if(workspace) {
326  FileHanding fileHandling(workspace);
327 
328  if(workspace->GetSavedPath().IsOk()) {
329  fileHandling.SaveProject(workspace->GetSavedPath());
330  } else {
331  wxFileDialog saveFileDialog(this, _("Save PSP file"), "", "", "PSP files (*.psp)|*.psp",
332  wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
333  if(saveFileDialog.ShowModal() == wxID_CANCEL) return;
334 
335  fileHandling.SaveProject(saveFileDialog.GetPath());
336  wxFileName fileName(saveFileDialog.GetPath());
337  workspace->SetName(fileName.GetName());
338  m_auiNotebook->SetPageText(m_auiNotebook->GetPageIndex(workspace), workspace->GetName());
339  workspace->SetSavedPath(fileName);
340  }
341  }
342 }
343 
344 void MainFrame::OnSnapshotClick(wxRibbonButtonBarEvent& event) {}
345 void MainFrame::OnUndoClick(wxRibbonButtonBarEvent& event) {}
346 void MainFrame::OnAddElementsClick(wxCommandEvent& event)
347 {
348  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
349 
350  if(workspace) {
351  if(workspace->GetWorkspaceMode() != Workspace::MODE_INSERT) {
352  auto elementList = workspace->GetElementList();
353  wxString statusBarText = "";
354  bool newElement = false;
355 
356  switch(event.GetId()) {
357  case ID_ADDMENU_BUS: {
358  Bus* newBus = new Bus(wxPoint2DDouble(0, 0),
359  wxString::Format(_("Bus %d"), workspace->GetElementNumber(ID_BUS)));
360  workspace->IncrementElementNumber(ID_BUS);
361  elementList.push_back(newBus);
362  statusBarText = _("Insert Bus: Click to insert, ESC to cancel.");
363  newElement = true;
364  } break;
365  case ID_ADDMENU_LINE: {
366  Line* newLine = new Line(wxString::Format(_("Line %d"), workspace->GetElementNumber(ID_LINE)));
367  elementList.push_back(newLine);
368  workspace->IncrementElementNumber(ID_LINE);
369  statusBarText = _("Insert Line: Click on two buses, ESC to cancel.");
370  newElement = true;
371  } break;
372  case ID_ADDMENU_TRANSFORMER: {
373  Transformer* newTransformer = new Transformer(
374  wxString::Format(_("Transformer %d"), workspace->GetElementNumber(ID_TRANSFORMER)));
375  workspace->IncrementElementNumber(ID_TRANSFORMER);
376  elementList.push_back(newTransformer);
377  statusBarText = _("Insert Transformer: Click on two buses, ESC to cancel.");
378  newElement = true;
379  } break;
380  case ID_ADDMENU_GENERATOR: {
381  SyncGenerator* newGenerator = new SyncGenerator(
382  wxString::Format(_("Generator %d"), workspace->GetElementNumber(ID_SYNCGENERATOR)));
383  workspace->IncrementElementNumber(ID_SYNCGENERATOR);
384  elementList.push_back(newGenerator);
385  statusBarText = _("Insert Generator: Click on a buses, ESC to cancel.");
386  newElement = true;
387  } break;
388  case ID_ADDMENU_LOAD: {
389  Load* newLoad = new Load(wxString::Format(_("Load %d"), workspace->GetElementNumber(ID_LOAD)));
390  workspace->IncrementElementNumber(ID_LOAD);
391  elementList.push_back(newLoad);
392  statusBarText = _("Insert Load: Click on a buses, ESC to cancel.");
393  newElement = true;
394  } break;
395  case ID_ADDMENU_CAPACITOR: {
396  Capacitor* newCapacitor =
397  new Capacitor(wxString::Format(_("Capacitor %d"), workspace->GetElementNumber(ID_CAPACITOR)));
398  workspace->IncrementElementNumber(ID_CAPACITOR);
399  elementList.push_back(newCapacitor);
400  statusBarText = _("Insert Capacitor: Click on a buses, ESC to cancel.");
401  newElement = true;
402  } break;
403  case ID_ADDMENU_INDUCTOR: {
404  Inductor* newInductor =
405  new Inductor(wxString::Format(_("Inductor %d"), workspace->GetElementNumber(ID_INDUCTOR)));
406  workspace->IncrementElementNumber(ID_INDUCTOR);
407  elementList.push_back(newInductor);
408  statusBarText = _("Insert Inductor: Click on a buses, ESC to cancel.");
409  newElement = true;
410  } break;
411  case ID_ADDMENU_INDMOTOR: {
412  IndMotor* newIndMotor = new IndMotor(
413  wxString::Format(_("Induction motor %d"), workspace->GetElementNumber(ID_INDMOTOR)));
414  workspace->IncrementElementNumber(ID_INDMOTOR);
415  elementList.push_back(newIndMotor);
416  statusBarText = _("Insert Induction Motor: Click on a buses, ESC to cancel.");
417  newElement = true;
418  } break;
419  case ID_ADDMENU_SYNCCOMP: {
420  SyncMotor* newSyncCondenser = new SyncMotor(
421  wxString::Format(_("Synchronous condenser %d"), workspace->GetElementNumber(ID_SYNCMOTOR)));
422  workspace->IncrementElementNumber(ID_SYNCMOTOR);
423  elementList.push_back(newSyncCondenser);
424  statusBarText = _("Insert Synchronous Condenser: Click on a buses, ESC to cancel.");
425  newElement = true;
426  } break;
427  }
428  if(newElement) {
429  workspace->SetElementList(elementList);
430  workspace->SetWorkspaceMode(Workspace::MODE_INSERT);
431  workspace->SetStatusBarText(statusBarText);
432  workspace->Redraw();
433  }
434  }
435  }
436 }
437 void MainFrame::NotebookPageClosed(wxAuiNotebookEvent& event)
438 {
439  if(m_auiNotebook->GetPageCount() == 0) EnableCurrentProjectRibbon(false);
440 }
441 
442 void MainFrame::NotebookPageClosing(wxAuiNotebookEvent& event)
443 {
444  auto it = m_workspaceList.begin();
445  while(it != m_workspaceList.end()) {
446  if(*it == m_auiNotebook->GetCurrentPage()) {
447  m_workspaceList.erase(it);
448  break;
449  }
450  it++;
451  }
452  event.Skip();
453 }
454 
455 void MainFrame::OnRotClockClick(wxRibbonButtonBarEvent& event)
456 {
457  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
458  if(workspace) {
459  workspace->RotateSelectedElements();
460  }
461 }
462 
463 void MainFrame::OnRotCounterClockClick(wxRibbonButtonBarEvent& event)
464 {
465  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
466  if(workspace) {
467  workspace->RotateSelectedElements(false);
468  }
469 }
470 
471 void MainFrame::OnGeneralSettingsClick(wxRibbonButtonBarEvent& event)
472 {
473  GeneralPropertiesForm genPropForm(this, m_generalProperties);
474  genPropForm.SetInitialSize();
475  genPropForm.ShowModal();
476 }
477 
478 void MainFrame::OnSimulationSettingsClick(wxRibbonButtonBarEvent& event)
479 {
480  Workspace* workspace = static_cast<Workspace*>(m_auiNotebook->GetCurrentPage());
481  if(workspace) {
482  SimulationsSettingsForm simulSettingsForm(this, workspace->GetProperties());
483  simulSettingsForm.SetInitialSize();
484  simulSettingsForm.ShowModal();
485  }
486 }
+ + + + + +
Definition: Bus.h:45
+ + +
Definition: Line.h:35
+
Definition: Load.h:23
+ + + + +
bool IsSelected() const
Checks if the element is selected.
Definition: Element.h:189
+ + +
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Element.cpp:101
+ +
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+ + + + +
+
+ + + + diff --git a/docs/doxygen/html/_main_frame_8h_source.html b/docs/doxygen/html/_main_frame_8h_source.html index 7e66be0..fa817a0 100644 --- a/docs/doxygen/html/_main_frame_8h_source.html +++ b/docs/doxygen/html/_main_frame_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/MainFrame.h Source File +Project/MainFrame.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
MainFrame.h
-
1 #ifndef MAINFRAME_H
2 #define MAINFRAME_H
3 
4 #include <wx/menu.h>
5 #include <wx/msgdlg.h>
6 #include <wx/filedlg.h>
7 
8 #include "MainFrameBase.h"
9 
10 class MainFrameBase;
12 class Workspace;
13 class FileHanding;
16 class PropertiesData;
17 class ChartView;
18 class DataReport;
19 class AboutForm;
20 
21 enum {
22  ID_ADDMENU_BUS = 20000,
23  ID_ADDMENU_LINE,
24  ID_ADDMENU_TRANSFORMER,
25  ID_ADDMENU_GENERATOR,
26  ID_ADDMENU_LOAD,
27  ID_ADDMENU_CAPACITOR,
28  ID_ADDMENU_INDUCTOR,
29  ID_ADDMENU_INDMOTOR,
30  ID_ADDMENU_SYNCCOMP
31 };
32 
33 class MainFrame : public MainFrameBase
34 {
35  public:
36  MainFrame();
37  MainFrame(wxWindow* parent, wxLocale* locale, PropertiesData* initProperties);
38  ~MainFrame();
39 
40  protected:
41  virtual void OnGeneralSettingsClick(wxRibbonButtonBarEvent& event);
42  virtual void OnSimulationSettingsClick(wxRibbonButtonBarEvent& event);
43  virtual void OnRotClockClick(wxRibbonButtonBarEvent& event);
44  virtual void OnRotCounterClockClick(wxRibbonButtonBarEvent& event);
45  virtual void NotebookPageClosed(wxAuiNotebookEvent& event);
46  virtual void NotebookPageClosing(wxAuiNotebookEvent& event);
47  virtual void OnAboutClick(wxRibbonButtonBarEvent& event);
48  virtual void OnAddElementDropdown(wxRibbonButtonBarEvent& event);
49  virtual void OnChartsClick(wxRibbonButtonBarEvent& event);
50  virtual void OnCloseClick(wxRibbonButtonBarEvent& event);
51  virtual void OnCopyClick(wxRibbonButtonBarEvent& event);
52  virtual void OnDataReportClick(wxRibbonButtonBarEvent& event);
53  virtual void OnDeleteClick(wxRibbonButtonBarEvent& event);
54  virtual void OnDisableSolutionClick(wxRibbonButtonBarEvent& event);
55  virtual void OnDragClick(wxRibbonButtonBarEvent& event);
56  virtual void OnEnableSolutionClick(wxRibbonButtonBarEvent& event);
57  virtual void OnExitClick(wxRibbonButtonBarEvent& event) { this->Close(); };
58  virtual void OnExpImpClick(wxRibbonButtonBarEvent& event);
59  virtual void OnFaultClick(wxRibbonButtonBarEvent& event);
60  virtual void OnFitClick(wxRibbonButtonBarEvent& event);
61  virtual void OnMoveClick(wxRibbonButtonBarEvent& event);
62  virtual void OnOpenClick(wxRibbonButtonBarEvent& event);
63  virtual void OnPSPGuideClick(wxRibbonButtonBarEvent& event);
64  virtual void OnPasteClick(wxRibbonButtonBarEvent& event);
65  virtual void OnPowerFlowClick(wxRibbonButtonBarEvent& event);
66  virtual void OnRedoClick(wxRibbonButtonBarEvent& event);
67  virtual void OnResetVoltagesClick(wxRibbonButtonBarEvent& event);
68  virtual void OnRunStabilityClick(wxRibbonButtonBarEvent& event);
69  virtual void OnSCPowerClick(wxRibbonButtonBarEvent& event);
70  virtual void OnSaveAsClick(wxRibbonButtonBarEvent& event);
71  virtual void OnSaveClick(wxRibbonButtonBarEvent& event);
72  virtual void OnSnapshotClick(wxRibbonButtonBarEvent& event);
73  virtual void OnUndoClick(wxRibbonButtonBarEvent& event);
74  virtual void OnNewClick(wxRibbonButtonBarEvent& event);
75 
76  protected:
77  std::vector<Workspace*> m_workspaceList;
78  int m_projectNumber = 1;
79 
80  wxRibbonMetroArtProvider* m_artMetro = NULL;
81  wxMenu* m_addElementsMenu = NULL;
82  wxLocale* m_locale = NULL;
83  PropertiesData* m_generalProperties = NULL;
84 
85  void Init();
86  void EnableCurrentProjectRibbon(bool enable = true);
87  void CreateAddElementsMenu();
88 
89  void OnAddElementsClick(wxCommandEvent& event);
90 };
91 
92 #endif // MAINFRAME_H
Definition: PropertiesData.h:40
-
Definition: MainFrameBase.h:41
-
Definition: FileHanding.h:19
-
Definition: GeneralPropertiesForm.h:11
-
Definition: MainFrame.h:33
-
Definition: ArtMetro.h:28
-
Definition: ChartView.h:16
-
Definition: SimulationsSettingsForm.h:8
-
Definition: DataReport.h:9
-
Definition: AboutForm.h:7
-
Definition: Workspace.h:56
+
1 #ifndef MAINFRAME_H
2 #define MAINFRAME_H
3 
4 #include <wx/menu.h>
5 #include <wx/msgdlg.h>
6 #include <wx/filedlg.h>
7 
8 #include "MainFrameBase.h"
9 
10 class MainFrameBase;
12 class Workspace;
13 class FileHanding;
16 class PropertiesData;
17 class ChartView;
18 class DataReport;
19 class AboutForm;
20 
21 enum {
22  ID_ADDMENU_BUS = 20000,
23  ID_ADDMENU_LINE,
24  ID_ADDMENU_TRANSFORMER,
25  ID_ADDMENU_GENERATOR,
26  ID_ADDMENU_LOAD,
27  ID_ADDMENU_CAPACITOR,
28  ID_ADDMENU_INDUCTOR,
29  ID_ADDMENU_INDMOTOR,
30  ID_ADDMENU_SYNCCOMP
31 };
32 
33 class MainFrame : public MainFrameBase
34 {
35  public:
36  MainFrame();
37  MainFrame(wxWindow* parent, wxLocale* locale, PropertiesData* initProperties);
38  ~MainFrame();
39 
40  protected:
41  virtual void OnGeneralSettingsClick(wxRibbonButtonBarEvent& event);
42  virtual void OnSimulationSettingsClick(wxRibbonButtonBarEvent& event);
43  virtual void OnRotClockClick(wxRibbonButtonBarEvent& event);
44  virtual void OnRotCounterClockClick(wxRibbonButtonBarEvent& event);
45  virtual void NotebookPageClosed(wxAuiNotebookEvent& event);
46  virtual void NotebookPageClosing(wxAuiNotebookEvent& event);
47  virtual void OnAboutClick(wxRibbonButtonBarEvent& event);
48  virtual void OnAddElementDropdown(wxRibbonButtonBarEvent& event);
49  virtual void OnChartsClick(wxRibbonButtonBarEvent& event);
50  virtual void OnCloseClick(wxRibbonButtonBarEvent& event);
51  virtual void OnCopyClick(wxRibbonButtonBarEvent& event);
52  virtual void OnDataReportClick(wxRibbonButtonBarEvent& event);
53  virtual void OnDeleteClick(wxRibbonButtonBarEvent& event);
54  virtual void OnDisableSolutionClick(wxRibbonButtonBarEvent& event);
55  virtual void OnDragClick(wxRibbonButtonBarEvent& event);
56  virtual void OnEnableSolutionClick(wxRibbonButtonBarEvent& event);
57  virtual void OnExitClick(wxRibbonButtonBarEvent& event) { this->Close(); };
58  virtual void OnExpImpClick(wxRibbonButtonBarEvent& event);
59  virtual void OnFaultClick(wxRibbonButtonBarEvent& event);
60  virtual void OnFitClick(wxRibbonButtonBarEvent& event);
61  virtual void OnMoveClick(wxRibbonButtonBarEvent& event);
62  virtual void OnOpenClick(wxRibbonButtonBarEvent& event);
63  virtual void OnPSPGuideClick(wxRibbonButtonBarEvent& event);
64  virtual void OnPasteClick(wxRibbonButtonBarEvent& event);
65  virtual void OnPowerFlowClick(wxRibbonButtonBarEvent& event);
66  virtual void OnRedoClick(wxRibbonButtonBarEvent& event);
67  virtual void OnResetVoltagesClick(wxRibbonButtonBarEvent& event);
68  virtual void OnRunStabilityClick(wxRibbonButtonBarEvent& event);
69  virtual void OnSCPowerClick(wxRibbonButtonBarEvent& event);
70  virtual void OnSaveAsClick(wxRibbonButtonBarEvent& event);
71  virtual void OnSaveClick(wxRibbonButtonBarEvent& event);
72  virtual void OnSnapshotClick(wxRibbonButtonBarEvent& event);
73  virtual void OnUndoClick(wxRibbonButtonBarEvent& event);
74  virtual void OnNewClick(wxRibbonButtonBarEvent& event);
75 
76  protected:
77  std::vector<Workspace*> m_workspaceList;
78  int m_projectNumber = 1;
79 
80  wxRibbonMetroArtProvider* m_artMetro = NULL;
81  wxMenu* m_addElementsMenu = NULL;
82  wxLocale* m_locale = NULL;
83  PropertiesData* m_generalProperties = NULL;
84 
85  void Init();
86  void EnableCurrentProjectRibbon(bool enable = true);
87  void CreateAddElementsMenu();
88 
89  void OnAddElementsClick(wxCommandEvent& event);
90 };
91 
92 #endif // MAINFRAME_H
+ + + + + + + + + +
+
- + diff --git a/docs/doxygen/html/_main_frame_base_8cpp_source.html b/docs/doxygen/html/_main_frame_base_8cpp_source.html new file mode 100644 index 0000000..765635a --- /dev/null +++ b/docs/doxygen/html/_main_frame_base_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/MainFrameBase.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MainFrameBase.cpp
+
+
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: MainFrame.wxcp
4 // Do not modify this file by hand!
6 
7 #include "MainFrameBase.h"
8 
9 
10 // Declare the bitmap loading function
11 extern void wxC9ED9InitBitmapResources();
12 
13 static bool bBitmapLoaded = false;
14 
15 
16 MainFrameBase::MainFrameBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
17  : wxFrame(parent, id, title, pos, size, style)
18 {
19  if ( !bBitmapLoaded ) {
20  // We need to initialise the default bitmap handler
21  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
22  wxC9ED9InitBitmapResources();
23  bBitmapLoaded = true;
24  }
25  // Set icon(s) to the application/dialog
26  wxIconBundle app_icons;
27  {
28  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("logo16"));
29  wxIcon icn;
30  icn.CopyFromBitmap(iconBmp);
31  app_icons.AddIcon( icn );
32  }
33  {
34  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("logo32"));
35  wxIcon icn;
36  icn.CopyFromBitmap(iconBmp);
37  app_icons.AddIcon( icn );
38  }
39  {
40  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("logo64"));
41  wxIcon icn;
42  icn.CopyFromBitmap(iconBmp);
43  app_icons.AddIcon( icn );
44  }
45  {
46  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("logo128"));
47  wxIcon icn;
48  icn.CopyFromBitmap(iconBmp);
49  app_icons.AddIcon( icn );
50  }
51  {
52  wxBitmap iconBmp = wxXmlResource::Get()->LoadBitmap(wxT("logo256"));
53  wxIcon icn;
54  icn.CopyFromBitmap(iconBmp);
55  app_icons.AddIcon( icn );
56  }
57  SetIcons( app_icons );
58 
59 
60  wxBoxSizer* boxSizer_lvl_1_1 = new wxBoxSizer(wxVERTICAL);
61  this->SetSizer(boxSizer_lvl_1_1);
62 
63  wxBoxSizer* boxSizer_lvl_2_1 = new wxBoxSizer(wxVERTICAL);
64 
65  boxSizer_lvl_1_1->Add(boxSizer_lvl_2_1, 0, wxEXPAND, WXC_FROM_DIP(5));
66 
67  m_ribbonBar = new wxRibbonBar(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxRIBBON_BAR_DEFAULT_STYLE);
68  m_ribbonBar->SetArtProvider(new wxRibbonDefaultArtProvider);
69 
70  boxSizer_lvl_2_1->Add(m_ribbonBar, 0, wxEXPAND, WXC_FROM_DIP(5));
71 
72  m_ribbonPageFile = new wxRibbonPage(m_ribbonBar, wxID_ANY, _("File"), wxNullBitmap, 0);
73  m_ribbonPageFile->SetToolTip(_("File"));
74  m_ribbonBar->SetActivePage( m_ribbonPageFile );
75 
76  m_ribbonPanelProjects = new wxRibbonPanel(m_ribbonPageFile, wxID_ANY, _("Projects"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageFile, wxSize(-1,-1)), wxRIBBON_PANEL_NO_AUTO_MINIMISE|wxRIBBON_PANEL_DEFAULT_STYLE);
77  m_ribbonPanelProjects->SetToolTip(_("Projects"));
78 
79  m_ribbonButtonBarProjects = new wxRibbonButtonBar(m_ribbonPanelProjects, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelProjects, wxSize(-1,-1)), 0);
80  m_ribbonButtonBarProjects->SetToolTip(_("Projects"));
81 
82  m_ribbonButtonBarProjects->AddButton(ID_RIBBON_NEW, _("New"), wxXmlResource::Get()->LoadBitmap(wxT("new32")), _("Create new project"), wxRIBBON_BUTTON_NORMAL);
83 
84  m_ribbonButtonBarProjects->AddButton(ID_RIBBON_OPEN, _("Open"), wxXmlResource::Get()->LoadBitmap(wxT("open32")), _("Open saved project"), wxRIBBON_BUTTON_NORMAL);
85 
86  m_ribbonButtonBarProjects->AddButton(ID_RIBBON_GENSETTINGS, _("General Settings"), wxXmlResource::Get()->LoadBitmap(wxT("settings32")), _("Opens a dialog to set the main settings of the program"), wxRIBBON_BUTTON_NORMAL);
87 
88  m_ribbonButtonBarProjects->AddButton(ID_RIBBON_EXIT, _("Exit"), wxXmlResource::Get()->LoadBitmap(wxT("exit32")), _("Closes the application"), wxRIBBON_BUTTON_NORMAL);
89  m_ribbonButtonBarProjects->Realize();
90 
91  m_ribbonPanelCProject = new wxRibbonPanel(m_ribbonPageFile, wxID_ANY, _("Current project"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageFile, wxSize(-1,-1)), wxRIBBON_PANEL_NO_AUTO_MINIMISE|wxRIBBON_PANEL_DEFAULT_STYLE);
92  m_ribbonPanelCProject->SetToolTip(_("Current project"));
93 
94  m_ribbonButtonBarCProject = new wxRibbonButtonBar(m_ribbonPanelCProject, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelCProject, wxSize(-1,-1)), 0);
95 
96  m_ribbonButtonBarCProject->AddButton(ID_RIBBON_SAVE, _("Save"), wxXmlResource::Get()->LoadBitmap(wxT("save32")), _("Save the current project"), wxRIBBON_BUTTON_NORMAL);
97 
98  m_ribbonButtonBarCProject->AddButton(ID_RIBBON_SAVEAS, _("Save As..."), wxXmlResource::Get()->LoadBitmap(wxT("saveAs32")), _("Save as the current project"), wxRIBBON_BUTTON_NORMAL);
99 
100  m_ribbonButtonBarCProject->AddButton(ID_RIBBON_CLOSE, _("Close"), wxXmlResource::Get()->LoadBitmap(wxT("close32")), _("Close the current project"), wxRIBBON_BUTTON_NORMAL);
101  m_ribbonButtonBarCProject->Realize();
102 
103  m_ribbonPanelHelp = new wxRibbonPanel(m_ribbonPageFile, wxID_ANY, _("Help"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageFile, wxSize(-1,-1)), wxRIBBON_PANEL_NO_AUTO_MINIMISE|wxRIBBON_PANEL_DEFAULT_STYLE);
104  m_ribbonPanelHelp->SetToolTip(_("Help"));
105 
106  m_ribbonButtonBarHelp = new wxRibbonButtonBar(m_ribbonPanelHelp, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelHelp, wxSize(-1,-1)), 0);
107  m_ribbonButtonBarHelp->SetToolTip(_("Help"));
108 
109  m_ribbonButtonBarHelp->AddButton(ID_RIBBON_GUIDE, _("PSP-UFU Guide"), wxXmlResource::Get()->LoadBitmap(wxT("guide32")), _("Open PSP-UFU Guide"), wxRIBBON_BUTTON_NORMAL);
110 
111  m_ribbonButtonBarHelp->AddButton(ID_RIBBON_ABOUT, _("About..."), wxXmlResource::Get()->LoadBitmap(wxT("about32")), _("About PSP-UFU"), wxRIBBON_BUTTON_NORMAL);
112  m_ribbonButtonBarHelp->Realize();
113 
114  m_ribbonPageTools = new wxRibbonPage(m_ribbonBar, wxID_ANY, _("Tools"), wxNullBitmap, 0);
115  m_ribbonPageTools->SetToolTip(_("Tools"));
116 
117  m_ribbonPanelClipboard = new wxRibbonPanel(m_ribbonPageTools, wxID_ANY, _("Clipboard"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageTools, wxSize(-1,-1)), wxRIBBON_PANEL_NO_AUTO_MINIMISE|wxRIBBON_PANEL_DEFAULT_STYLE);
118  m_ribbonPanelClipboard->SetToolTip(_("Clipboard"));
119 
120  m_ribbonButtonBarClipboard = new wxRibbonButtonBar(m_ribbonPanelClipboard, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelClipboard, wxSize(-1,-1)), 0);
121  m_ribbonButtonBarClipboard->SetToolTip(_("Clipboard"));
122 
123  m_ribbonButtonBarClipboard->AddButton(ID_RIBBON_COPY, _("Copy"), wxXmlResource::Get()->LoadBitmap(wxT("copy32")), _("Copies the selected elements"), wxRIBBON_BUTTON_NORMAL);
124 
125  m_ribbonButtonBarClipboard->AddButton(ID_RIBBON_PASTE, _("Paste"), wxXmlResource::Get()->LoadBitmap(wxT("paste32")), _("Pastes the elements from clipboard"), wxRIBBON_BUTTON_NORMAL);
126 
127  m_ribbonButtonBarClipboard->AddButton(ID_RIBBON_UNDO, _("Undo"), wxXmlResource::Get()->LoadBitmap(wxT("undo32")), _("Undoes the last action"), wxRIBBON_BUTTON_NORMAL);
128 
129  m_ribbonButtonBarClipboard->AddButton(ID_RIBBON_REDO, _("Redo"), wxXmlResource::Get()->LoadBitmap(wxT("redo32")), _("Redoes the last undo action"), wxRIBBON_BUTTON_NORMAL);
130  m_ribbonButtonBarClipboard->Realize();
131 
132  m_ribbonPanelCircuit = new wxRibbonPanel(m_ribbonPageTools, wxID_ANY, _("Circuit"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageTools, wxSize(-1,-1)), wxRIBBON_PANEL_NO_AUTO_MINIMISE|wxRIBBON_PANEL_DEFAULT_STYLE);
133  m_ribbonPanelCircuit->SetToolTip(_("Circuit"));
134 
135  m_ribbonButtonBarCircuit = new wxRibbonButtonBar(m_ribbonPanelCircuit, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelCircuit, wxSize(-1,-1)), 0);
136  m_ribbonButtonBarCircuit->SetToolTip(_("Circuit"));
137 
138  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_ADDELEMENT, _("Add Element"), wxXmlResource::Get()->LoadBitmap(wxT("add32")), _("Add a new element in the project"), wxRIBBON_BUTTON_DROPDOWN);
139 
140  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_DRAG, _("Drag"), wxXmlResource::Get()->LoadBitmap(wxT("drag32")), _("Drag all the elements"), wxRIBBON_BUTTON_NORMAL);
141 
142  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_MOVE, _("Move"), wxXmlResource::Get()->LoadBitmap(wxT("move32")), _("Move the selected elements"), wxRIBBON_BUTTON_NORMAL);
143 
144  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_DELETE, _("Delete"), wxXmlResource::Get()->LoadBitmap(wxT("delete32")), _("Removes all selected elements"), wxRIBBON_BUTTON_NORMAL);
145 
146  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_FIT, _("Fit"), wxXmlResource::Get()->LoadBitmap(wxT("fit32")), _("Applies the drag and zoom tools to show all elements in workspace"), wxRIBBON_BUTTON_NORMAL);
147 
148  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_ROTATEC, _("Rotate Clockwise"), wxXmlResource::Get()->LoadBitmap(wxT("rotateClock32")), _("Rotate clockwise"), wxRIBBON_BUTTON_NORMAL);
149 
150  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_ROTATECC, _("Rotate Counter-clockwise"), wxXmlResource::Get()->LoadBitmap(wxT("rotateCounterClock32")), _("Rotate the selected elements counter-clockwise"), wxRIBBON_BUTTON_NORMAL);
151 
152  m_ribbonButtonBarCircuit->AddButton(ID_RIBBON_PROJSETTINGS, _("Project Settings"), wxXmlResource::Get()->LoadBitmap(wxT("settings32")), _("Opens a dialog to set the main settings of the current project"), wxRIBBON_BUTTON_NORMAL);
153  m_ribbonButtonBarCircuit->Realize();
154 
155  m_ribbonPanelReports = new wxRibbonPanel(m_ribbonPageTools, wxID_ANY, _("Reports"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageTools, wxSize(-1,-1)), wxRIBBON_PANEL_NO_AUTO_MINIMISE|wxRIBBON_PANEL_DEFAULT_STYLE);
156  m_ribbonPanelReports->SetToolTip(_("Reports"));
157 
158  m_ribbonButtonBarReports = new wxRibbonButtonBar(m_ribbonPanelReports, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelReports, wxSize(-1,-1)), 0);
159 
160  m_ribbonButtonBarReports->AddButton(ID_RIBBON_DATAREPORT, _("Data Report"), wxXmlResource::Get()->LoadBitmap(wxT("dataReport32")), _("Opens a data report"), wxRIBBON_BUTTON_NORMAL);
161 
162  m_ribbonButtonBarReports->AddButton(ID_RIBBON_CHARTS, _("Charts"), wxXmlResource::Get()->LoadBitmap(wxT("chart32")), _("Open the charts"), wxRIBBON_BUTTON_NORMAL);
163 
164  m_ribbonButtonBarReports->AddButton(ID_RIBBON_SNAPSHOT, _("Snapshot"), wxXmlResource::Get()->LoadBitmap(wxT("snap32")), _("Capture a snapshot of the circuit"), wxRIBBON_BUTTON_NORMAL);
165  m_ribbonButtonBarReports->Realize();
166 
167  m_ribbonPageSimulation = new wxRibbonPage(m_ribbonBar, wxID_ANY, _("Simulation"), wxNullBitmap, 0);
168  m_ribbonPageSimulation->SetToolTip(_("Simulation"));
169 
170  m_ribbonPanelContinuous = new wxRibbonPanel(m_ribbonPageSimulation, wxID_ANY, _("Continuous"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageSimulation, wxSize(-1,-1)), wxRIBBON_PANEL_DEFAULT_STYLE);
171  m_ribbonPanelContinuous->SetToolTip(_("Continuous"));
172 
173  m_ribbonButtonBarContinuous = new wxRibbonButtonBar(m_ribbonPanelContinuous, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelContinuous, wxSize(-1,-1)), 0);
174 
175  m_ribbonButtonBarContinuous->AddButton(ID_RIBBON_ENABLESOL, _("Enable Solution"), wxXmlResource::Get()->LoadBitmap(wxT("playStopped32")), _("Enables the power flow and fault (if exists) calculations after any circuit change"), wxRIBBON_BUTTON_TOGGLE);
176 
177  m_ribbonButtonBarContinuous->AddButton(ID_RIBBON_DISABLESOL, _("Disable Solution"), wxXmlResource::Get()->LoadBitmap(wxT("pauseStopped32")), _("Disables the power flow and fault calculations after any circuit changes"), wxRIBBON_BUTTON_TOGGLE);
178 
179  m_ribbonButtonBarContinuous->AddButton(ID_RIBBON_RESETVOLT, _("Reset Voltages"), wxXmlResource::Get()->LoadBitmap(wxT("reset32")), _("Reset all voltages to initial state"), wxRIBBON_BUTTON_NORMAL);
180  m_ribbonButtonBarContinuous->Realize();
181 
182  m_ribbonPanelSimulations = new wxRibbonPanel(m_ribbonPageSimulation, wxID_ANY, _("Simulations"), wxNullBitmap, wxDefaultPosition, wxDLG_UNIT(m_ribbonPageSimulation, wxSize(-1,-1)), wxRIBBON_PANEL_NO_AUTO_MINIMISE|wxRIBBON_PANEL_DEFAULT_STYLE);
183  m_ribbonPanelSimulations->SetToolTip(_("Simulations"));
184 
185  m_ribbonButtonBarSimulations = new wxRibbonButtonBar(m_ribbonPanelSimulations, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_ribbonPanelSimulations, wxSize(-1,-1)), 0);
186  m_ribbonButtonBarSimulations->SetToolTip(_("Simulations"));
187 
188  m_ribbonButtonBarSimulations->AddButton(ID_RIBBON_POWERFLOW, _("Power Flow"), wxXmlResource::Get()->LoadBitmap(wxT("powerFLow32")), _("Calculate the circuit power flow"), wxRIBBON_BUTTON_NORMAL);
189 
190  m_ribbonButtonBarSimulations->AddButton(ID_RIBBON_RUNSTAB, _("Run Stability"), wxXmlResource::Get()->LoadBitmap(wxT("playStopped32")), _("Run the stability calculations"), wxRIBBON_BUTTON_NORMAL);
191 
192  m_ribbonButtonBarSimulations->AddButton(ID_RIBBON_FAULT, _("Fault"), wxXmlResource::Get()->LoadBitmap(wxT("fault32")), _("Calculate the circuit fault (if exists)"), wxRIBBON_BUTTON_NORMAL);
193 
194  m_ribbonButtonBarSimulations->AddButton(ID_RIBBON_SCPOWER, _("Short-Circuit Power"), wxXmlResource::Get()->LoadBitmap(wxT("faultPower32")), _("Calculate the short-circuit power in all buses"), wxRIBBON_BUTTON_NORMAL);
195 
196  m_ribbonButtonBarSimulations->AddButton(ID_RIBBON_SIMULSETTINGS, _("Simulation Settings"), wxXmlResource::Get()->LoadBitmap(wxT("settings32")), _("Opens a dialog to set the settings of the simulations"), wxRIBBON_BUTTON_NORMAL);
197  m_ribbonButtonBarSimulations->Realize();
198  m_ribbonBar->Realize();
199  wxBoxSizer* boxSizer_lvl_2_2 = new wxBoxSizer(wxVERTICAL);
200 
201  boxSizer_lvl_1_1->Add(boxSizer_lvl_2_2, 1, wxEXPAND, WXC_FROM_DIP(5));
202 
203  m_auiNotebook = new wxAuiNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxAUI_NB_DEFAULT_STYLE|wxBK_DEFAULT);
204  m_auiNotebook->SetName(wxT("m_auiNotebook"));
205 
206  boxSizer_lvl_2_2->Add(m_auiNotebook, 1, wxEXPAND, WXC_FROM_DIP(5));
207 
208  m_statusBar = new wxStatusBar(this, wxID_ANY, wxSTB_DEFAULT_STYLE);
209  m_statusBar->SetFieldsCount(4);
210  this->SetStatusBar(m_statusBar);
211 
212 
213  #if wxVERSION_NUMBER >= 2900
214  if(!wxPersistenceManager::Get().Find(m_auiNotebook)){
215  wxPersistenceManager::Get().RegisterAndRestore(m_auiNotebook);
216  } else {
217  wxPersistenceManager::Get().Restore(m_auiNotebook);
218  }
219  #endif
220 
221  SetName(wxT("MainFrameBase"));
222  SetSize(800,600);
223  if (GetSizer()) {
224  GetSizer()->Fit(this);
225  }
226  if(GetParent()) {
227  CentreOnParent(wxBOTH);
228  } else {
229  CentreOnScreen(wxBOTH);
230  }
231 #if wxVERSION_NUMBER >= 2900
232  if(!wxPersistenceManager::Get().Find(this)) {
233  wxPersistenceManager::Get().RegisterAndRestore(this);
234  } else {
235  wxPersistenceManager::Get().Restore(this);
236  }
237 #endif
238  // Connect events
239  m_ribbonButtonBarProjects->Connect(ID_RIBBON_NEW, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnNewClick), NULL, this);
240  m_ribbonButtonBarProjects->Connect(ID_RIBBON_OPEN, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnOpenClick), NULL, this);
241  m_ribbonButtonBarProjects->Connect(ID_RIBBON_GENSETTINGS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnGeneralSettingsClick), NULL, this);
242  m_ribbonButtonBarProjects->Connect(ID_RIBBON_EXIT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnExitClick), NULL, this);
243  m_ribbonButtonBarCProject->Connect(ID_RIBBON_SAVE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSaveClick), NULL, this);
244  m_ribbonButtonBarCProject->Connect(ID_RIBBON_SAVEAS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSaveAsClick), NULL, this);
245  m_ribbonButtonBarCProject->Connect(ID_RIBBON_CLOSE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnCloseClick), NULL, this);
246  m_ribbonButtonBarHelp->Connect(ID_RIBBON_GUIDE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnPSPGuideClick), NULL, this);
247  m_ribbonButtonBarHelp->Connect(ID_RIBBON_ABOUT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnAboutClick), NULL, this);
248  m_ribbonButtonBarClipboard->Connect(ID_RIBBON_COPY, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnCopyClick), NULL, this);
249  m_ribbonButtonBarClipboard->Connect(ID_RIBBON_PASTE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnPasteClick), NULL, this);
250  m_ribbonButtonBarClipboard->Connect(ID_RIBBON_UNDO, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnUndoClick), NULL, this);
251  m_ribbonButtonBarClipboard->Connect(ID_RIBBON_REDO, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRedoClick), NULL, this);
252  m_ribbonButtonBarCircuit->Connect(ID_RIBBON_ADDELEMENT, wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnAddElementDropdown), NULL, this);
253  m_ribbonButtonBarCircuit->Connect(ID_RIBBON_DRAG, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDragClick), NULL, this);
254  m_ribbonButtonBarCircuit->Connect(ID_RIBBON_MOVE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnMoveClick), NULL, this);
255  m_ribbonButtonBarCircuit->Connect(ID_RIBBON_DELETE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDeleteClick), NULL, this);
256  m_ribbonButtonBarCircuit->Connect(ID_RIBBON_FIT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnFitClick), NULL, this);
257  m_ribbonButtonBarCircuit->Connect(ID_RIBBON_ROTATEC, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRotClockClick), NULL, this);
258  m_ribbonButtonBarCircuit->Connect(ID_RIBBON_ROTATECC, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRotCounterClockClick), NULL, this);
259  m_ribbonButtonBarReports->Connect(ID_RIBBON_DATAREPORT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDataReportClick), NULL, this);
260  m_ribbonButtonBarReports->Connect(ID_RIBBON_CHARTS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnChartsClick), NULL, this);
261  m_ribbonButtonBarReports->Connect(ID_RIBBON_SNAPSHOT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSnapshotClick), NULL, this);
262  m_ribbonButtonBarContinuous->Connect(ID_RIBBON_ENABLESOL, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnEnableSolutionClick), NULL, this);
263  m_ribbonButtonBarContinuous->Connect(ID_RIBBON_DISABLESOL, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDisableSolutionClick), NULL, this);
264  m_ribbonButtonBarContinuous->Connect(ID_RIBBON_RESETVOLT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnResetVoltagesClick), NULL, this);
265  m_ribbonButtonBarSimulations->Connect(ID_RIBBON_POWERFLOW, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnPowerFlowClick), NULL, this);
266  m_ribbonButtonBarSimulations->Connect(ID_RIBBON_RUNSTAB, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRunStabilityClick), NULL, this);
267  m_ribbonButtonBarSimulations->Connect(ID_RIBBON_FAULT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnFaultClick), NULL, this);
268  m_ribbonButtonBarSimulations->Connect(ID_RIBBON_SCPOWER, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSCPowerClick), NULL, this);
269  m_ribbonButtonBarSimulations->Connect(ID_RIBBON_SIMULSETTINGS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSimulationSettingsClick), NULL, this);
270  m_auiNotebook->Connect(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, wxAuiNotebookEventHandler(MainFrameBase::NotebookPageClosing), NULL, this);
271  m_auiNotebook->Connect(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, wxAuiNotebookEventHandler(MainFrameBase::NotebookPageClosed), NULL, this);
272 
273 }
274 
275 MainFrameBase::~MainFrameBase()
276 {
277  m_ribbonButtonBarProjects->Disconnect(ID_RIBBON_NEW, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnNewClick), NULL, this);
278  m_ribbonButtonBarProjects->Disconnect(ID_RIBBON_OPEN, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnOpenClick), NULL, this);
279  m_ribbonButtonBarProjects->Disconnect(ID_RIBBON_GENSETTINGS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnGeneralSettingsClick), NULL, this);
280  m_ribbonButtonBarProjects->Disconnect(ID_RIBBON_EXIT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnExitClick), NULL, this);
281  m_ribbonButtonBarCProject->Disconnect(ID_RIBBON_SAVE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSaveClick), NULL, this);
282  m_ribbonButtonBarCProject->Disconnect(ID_RIBBON_SAVEAS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSaveAsClick), NULL, this);
283  m_ribbonButtonBarCProject->Disconnect(ID_RIBBON_CLOSE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnCloseClick), NULL, this);
284  m_ribbonButtonBarHelp->Disconnect(ID_RIBBON_GUIDE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnPSPGuideClick), NULL, this);
285  m_ribbonButtonBarHelp->Disconnect(ID_RIBBON_ABOUT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnAboutClick), NULL, this);
286  m_ribbonButtonBarClipboard->Disconnect(ID_RIBBON_COPY, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnCopyClick), NULL, this);
287  m_ribbonButtonBarClipboard->Disconnect(ID_RIBBON_PASTE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnPasteClick), NULL, this);
288  m_ribbonButtonBarClipboard->Disconnect(ID_RIBBON_UNDO, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnUndoClick), NULL, this);
289  m_ribbonButtonBarClipboard->Disconnect(ID_RIBBON_REDO, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRedoClick), NULL, this);
290  m_ribbonButtonBarCircuit->Disconnect(ID_RIBBON_ADDELEMENT, wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnAddElementDropdown), NULL, this);
291  m_ribbonButtonBarCircuit->Disconnect(ID_RIBBON_DRAG, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDragClick), NULL, this);
292  m_ribbonButtonBarCircuit->Disconnect(ID_RIBBON_MOVE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnMoveClick), NULL, this);
293  m_ribbonButtonBarCircuit->Disconnect(ID_RIBBON_DELETE, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDeleteClick), NULL, this);
294  m_ribbonButtonBarCircuit->Disconnect(ID_RIBBON_FIT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnFitClick), NULL, this);
295  m_ribbonButtonBarCircuit->Disconnect(ID_RIBBON_ROTATEC, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRotClockClick), NULL, this);
296  m_ribbonButtonBarCircuit->Disconnect(ID_RIBBON_ROTATECC, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRotCounterClockClick), NULL, this);
297  m_ribbonButtonBarReports->Disconnect(ID_RIBBON_DATAREPORT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDataReportClick), NULL, this);
298  m_ribbonButtonBarReports->Disconnect(ID_RIBBON_CHARTS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnChartsClick), NULL, this);
299  m_ribbonButtonBarReports->Disconnect(ID_RIBBON_SNAPSHOT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSnapshotClick), NULL, this);
300  m_ribbonButtonBarContinuous->Disconnect(ID_RIBBON_ENABLESOL, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnEnableSolutionClick), NULL, this);
301  m_ribbonButtonBarContinuous->Disconnect(ID_RIBBON_DISABLESOL, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnDisableSolutionClick), NULL, this);
302  m_ribbonButtonBarContinuous->Disconnect(ID_RIBBON_RESETVOLT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnResetVoltagesClick), NULL, this);
303  m_ribbonButtonBarSimulations->Disconnect(ID_RIBBON_POWERFLOW, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnPowerFlowClick), NULL, this);
304  m_ribbonButtonBarSimulations->Disconnect(ID_RIBBON_RUNSTAB, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnRunStabilityClick), NULL, this);
305  m_ribbonButtonBarSimulations->Disconnect(ID_RIBBON_FAULT, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnFaultClick), NULL, this);
306  m_ribbonButtonBarSimulations->Disconnect(ID_RIBBON_SCPOWER, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSCPowerClick), NULL, this);
307  m_ribbonButtonBarSimulations->Disconnect(ID_RIBBON_SIMULSETTINGS, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEventHandler(MainFrameBase::OnSimulationSettingsClick), NULL, this);
308  m_auiNotebook->Disconnect(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, wxAuiNotebookEventHandler(MainFrameBase::NotebookPageClosing), NULL, this);
309  m_auiNotebook->Disconnect(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, wxAuiNotebookEventHandler(MainFrameBase::NotebookPageClosed), NULL, this);
310 
311 }
+
+ + + + diff --git a/docs/doxygen/html/_main_frame_base_8h_source.html b/docs/doxygen/html/_main_frame_base_8h_source.html index bfa7f30..231d222 100644 --- a/docs/doxygen/html/_main_frame_base_8h_source.html +++ b/docs/doxygen/html/_main_frame_base_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/MainFrameBase.h Source File +Project/MainFrameBase.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
MainFrameBase.h
-
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: MainFrame.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_MAINFRAME_BASE_CLASSES_H
8 #define _PSP_PROJECT_MAINFRAME_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/ribbon/bar.h>
18 #include <wx/ribbon/art.h>
19 #include <wx/ribbon/page.h>
20 #include <wx/ribbon/panel.h>
21 #include <wx/ribbon/buttonbar.h>
22 #include <wx/aui/auibook.h>
23 #include <wx/statusbr.h>
24 #if wxVERSION_NUMBER >= 2900
25 #include <wx/persist.h>
26 #include <wx/persist/toplevel.h>
27 #include <wx/persist/bookctrl.h>
28 #include <wx/persist/treebook.h>
29 #endif
30 
31 #ifdef WXC_FROM_DIP
32 #undef WXC_FROM_DIP
33 #endif
34 #if wxVERSION_NUMBER >= 3100
35 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
36 #else
37 #define WXC_FROM_DIP(x) x
38 #endif
39 
40 
41 class MainFrameBase : public wxFrame
42 {
43 public:
44  enum {
45  ID_RIBBON_ABOUT = 10001,
46  ID_RIBBON_ADDELEMENT = 10002,
47  ID_RIBBON_CHARTS = 10003,
48  ID_RIBBON_CLOSE = 10004,
49  ID_RIBBON_COPY = 10005,
50  ID_RIBBON_DATAREPORT = 10006,
51  ID_RIBBON_DELETE = 10007,
52  ID_RIBBON_DISABLESOL = 10008,
53  ID_RIBBON_DRAG = 10009,
54  ID_RIBBON_ENABLESOL = 10010,
55  ID_RIBBON_EXIT = 10011,
56  ID_RIBBON_FAULT = 10012,
57  ID_RIBBON_FIT = 10013,
58  ID_RIBBON_GENSETTINGS = 10014,
59  ID_RIBBON_GUIDE = 10015,
60  ID_RIBBON_MOVE = 10016,
61  ID_RIBBON_NEW = 10017,
62  ID_RIBBON_OPEN = 10018,
63  ID_RIBBON_PASTE = 10019,
64  ID_RIBBON_POWERFLOW = 10020,
65  ID_RIBBON_PROJSETTINGS = 10021,
66  ID_RIBBON_REDO = 10022,
67  ID_RIBBON_RESETVOLT = 10023,
68  ID_RIBBON_ROTATEC = 10024,
69  ID_RIBBON_ROTATECC = 10025,
70  ID_RIBBON_RUNSTAB = 10026,
71  ID_RIBBON_SAVE = 10027,
72  ID_RIBBON_SAVEAS = 10028,
73  ID_RIBBON_SCPOWER = 10029,
74  ID_RIBBON_SIMULSETTINGS = 10030,
75  ID_RIBBON_SNAPSHOT = 10031,
76  ID_RIBBON_UNDO = 10032,
77  };
78 protected:
79  wxRibbonBar* m_ribbonBar;
80  wxRibbonPage* m_ribbonPageFile;
81  wxRibbonPanel* m_ribbonPanelProjects;
82  wxRibbonButtonBar* m_ribbonButtonBarProjects;
83  wxRibbonPanel* m_ribbonPanelCProject;
84  wxRibbonButtonBar* m_ribbonButtonBarCProject;
85  wxRibbonPanel* m_ribbonPanelHelp;
86  wxRibbonButtonBar* m_ribbonButtonBarHelp;
87  wxRibbonPage* m_ribbonPageTools;
88  wxRibbonPanel* m_ribbonPanelClipboard;
89  wxRibbonButtonBar* m_ribbonButtonBarClipboard;
90  wxRibbonPanel* m_ribbonPanelCircuit;
91  wxRibbonButtonBar* m_ribbonButtonBarCircuit;
92  wxRibbonPanel* m_ribbonPanelReports;
93  wxRibbonButtonBar* m_ribbonButtonBarReports;
94  wxRibbonPage* m_ribbonPageSimulation;
95  wxRibbonPanel* m_ribbonPanelContinuous;
96  wxRibbonButtonBar* m_ribbonButtonBarContinuous;
97  wxRibbonPanel* m_ribbonPanelSimulations;
98  wxRibbonButtonBar* m_ribbonButtonBarSimulations;
99  wxAuiNotebook* m_auiNotebook;
100  wxStatusBar* m_statusBar;
101 
102 protected:
103  virtual void OnNewClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
104  virtual void OnOpenClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
105  virtual void OnGeneralSettingsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
106  virtual void OnExitClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
107  virtual void OnSaveClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
108  virtual void OnSaveAsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
109  virtual void OnCloseClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
110  virtual void OnPSPGuideClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
111  virtual void OnAboutClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
112  virtual void OnCopyClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
113  virtual void OnPasteClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
114  virtual void OnUndoClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
115  virtual void OnRedoClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
116  virtual void OnAddElementDropdown(wxRibbonButtonBarEvent& event) { event.Skip(); }
117  virtual void OnDragClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
118  virtual void OnMoveClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
119  virtual void OnDeleteClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
120  virtual void OnFitClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
121  virtual void OnRotClockClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
122  virtual void OnRotCounterClockClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
123  virtual void OnDataReportClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
124  virtual void OnChartsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
125  virtual void OnSnapshotClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
126  virtual void OnEnableSolutionClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
127  virtual void OnDisableSolutionClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
128  virtual void OnResetVoltagesClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
129  virtual void OnPowerFlowClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
130  virtual void OnRunStabilityClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
131  virtual void OnFaultClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
132  virtual void OnSCPowerClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
133  virtual void OnSimulationSettingsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
134  virtual void NotebookPageClosing(wxAuiNotebookEvent& event) { event.Skip(); }
135  virtual void NotebookPageClosed(wxAuiNotebookEvent& event) { event.Skip(); }
136 
137 public:
138  wxRibbonBar* GetRibbonBar() { return m_ribbonBar; }
139  wxAuiNotebook* GetAuiNotebook() { return m_auiNotebook; }
140  wxStatusBar* GetStatusBar() { return m_statusBar; }
141  MainFrameBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PSP-UFU"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(800,600), long style = wxCAPTION|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxCLOSE_BOX);
142  virtual ~MainFrameBase();
143 };
144 
145 #endif
Definition: MainFrameBase.h:41
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: MainFrame.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_MAINFRAME_BASE_CLASSES_H
8 #define _PSP_PROJECT_MAINFRAME_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/frame.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/ribbon/bar.h>
18 #include <wx/ribbon/art.h>
19 #include <wx/ribbon/page.h>
20 #include <wx/ribbon/panel.h>
21 #include <wx/ribbon/buttonbar.h>
22 #include <wx/aui/auibook.h>
23 #include <wx/statusbr.h>
24 #if wxVERSION_NUMBER >= 2900
25 #include <wx/persist.h>
26 #include <wx/persist/toplevel.h>
27 #include <wx/persist/bookctrl.h>
28 #include <wx/persist/treebook.h>
29 #endif
30 
31 #ifdef WXC_FROM_DIP
32 #undef WXC_FROM_DIP
33 #endif
34 #if wxVERSION_NUMBER >= 3100
35 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
36 #else
37 #define WXC_FROM_DIP(x) x
38 #endif
39 
40 
41 class MainFrameBase : public wxFrame
42 {
43 public:
44  enum {
45  ID_RIBBON_ABOUT = 10001,
46  ID_RIBBON_ADDELEMENT = 10002,
47  ID_RIBBON_CHARTS = 10003,
48  ID_RIBBON_CLOSE = 10004,
49  ID_RIBBON_COPY = 10005,
50  ID_RIBBON_DATAREPORT = 10006,
51  ID_RIBBON_DELETE = 10007,
52  ID_RIBBON_DISABLESOL = 10008,
53  ID_RIBBON_DRAG = 10009,
54  ID_RIBBON_ENABLESOL = 10010,
55  ID_RIBBON_EXIT = 10011,
56  ID_RIBBON_FAULT = 10012,
57  ID_RIBBON_FIT = 10013,
58  ID_RIBBON_GENSETTINGS = 10014,
59  ID_RIBBON_GUIDE = 10015,
60  ID_RIBBON_MOVE = 10016,
61  ID_RIBBON_NEW = 10017,
62  ID_RIBBON_OPEN = 10018,
63  ID_RIBBON_PASTE = 10019,
64  ID_RIBBON_POWERFLOW = 10020,
65  ID_RIBBON_PROJSETTINGS = 10021,
66  ID_RIBBON_REDO = 10022,
67  ID_RIBBON_RESETVOLT = 10023,
68  ID_RIBBON_ROTATEC = 10024,
69  ID_RIBBON_ROTATECC = 10025,
70  ID_RIBBON_RUNSTAB = 10026,
71  ID_RIBBON_SAVE = 10027,
72  ID_RIBBON_SAVEAS = 10028,
73  ID_RIBBON_SCPOWER = 10029,
74  ID_RIBBON_SIMULSETTINGS = 10030,
75  ID_RIBBON_SNAPSHOT = 10031,
76  ID_RIBBON_UNDO = 10032,
77  };
78 protected:
79  wxRibbonBar* m_ribbonBar;
80  wxRibbonPage* m_ribbonPageFile;
81  wxRibbonPanel* m_ribbonPanelProjects;
82  wxRibbonButtonBar* m_ribbonButtonBarProjects;
83  wxRibbonPanel* m_ribbonPanelCProject;
84  wxRibbonButtonBar* m_ribbonButtonBarCProject;
85  wxRibbonPanel* m_ribbonPanelHelp;
86  wxRibbonButtonBar* m_ribbonButtonBarHelp;
87  wxRibbonPage* m_ribbonPageTools;
88  wxRibbonPanel* m_ribbonPanelClipboard;
89  wxRibbonButtonBar* m_ribbonButtonBarClipboard;
90  wxRibbonPanel* m_ribbonPanelCircuit;
91  wxRibbonButtonBar* m_ribbonButtonBarCircuit;
92  wxRibbonPanel* m_ribbonPanelReports;
93  wxRibbonButtonBar* m_ribbonButtonBarReports;
94  wxRibbonPage* m_ribbonPageSimulation;
95  wxRibbonPanel* m_ribbonPanelContinuous;
96  wxRibbonButtonBar* m_ribbonButtonBarContinuous;
97  wxRibbonPanel* m_ribbonPanelSimulations;
98  wxRibbonButtonBar* m_ribbonButtonBarSimulations;
99  wxAuiNotebook* m_auiNotebook;
100  wxStatusBar* m_statusBar;
101 
102 protected:
103  virtual void OnNewClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
104  virtual void OnOpenClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
105  virtual void OnGeneralSettingsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
106  virtual void OnExitClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
107  virtual void OnSaveClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
108  virtual void OnSaveAsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
109  virtual void OnCloseClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
110  virtual void OnPSPGuideClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
111  virtual void OnAboutClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
112  virtual void OnCopyClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
113  virtual void OnPasteClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
114  virtual void OnUndoClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
115  virtual void OnRedoClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
116  virtual void OnAddElementDropdown(wxRibbonButtonBarEvent& event) { event.Skip(); }
117  virtual void OnDragClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
118  virtual void OnMoveClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
119  virtual void OnDeleteClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
120  virtual void OnFitClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
121  virtual void OnRotClockClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
122  virtual void OnRotCounterClockClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
123  virtual void OnDataReportClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
124  virtual void OnChartsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
125  virtual void OnSnapshotClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
126  virtual void OnEnableSolutionClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
127  virtual void OnDisableSolutionClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
128  virtual void OnResetVoltagesClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
129  virtual void OnPowerFlowClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
130  virtual void OnRunStabilityClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
131  virtual void OnFaultClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
132  virtual void OnSCPowerClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
133  virtual void OnSimulationSettingsClick(wxRibbonButtonBarEvent& event) { event.Skip(); }
134  virtual void NotebookPageClosing(wxAuiNotebookEvent& event) { event.Skip(); }
135  virtual void NotebookPageClosed(wxAuiNotebookEvent& event) { event.Skip(); }
136 
137 public:
138  wxRibbonBar* GetRibbonBar() { return m_ribbonBar; }
139  wxAuiNotebook* GetAuiNotebook() { return m_auiNotebook; }
140  wxStatusBar* GetStatusBar() { return m_statusBar; }
141  MainFrameBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("PSP-UFU"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(800,600), long style = wxCAPTION|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxCLOSE_BOX);
142  virtual ~MainFrameBase();
143 };
144 
145 #endif
+
- + diff --git a/docs/doxygen/html/_main_frame_bitmaps_8cpp_source.html b/docs/doxygen/html/_main_frame_bitmaps_8cpp_source.html new file mode 100644 index 0000000..985d504 --- /dev/null +++ b/docs/doxygen/html/_main_frame_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/MainFrameBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MainFrameBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 875;
25 static unsigned char xml_res_file_0[] = {
26 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
27 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
28 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
29 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
30 46,111,114,103,155,238,60,26,0,0,2,232,73,68,65,84,88,133,197,151,59,72,
31 91,97,20,199,127,231,154,24,235,131,106,161,144,219,56,116,112,80,28,58,
32 88,177,69,4,17,92,42,168,163,208,173,157,58,88,112,45,106,140,136,180,147,
33 96,231,118,19,28,85,186,9,34,216,82,69,157,138,40,216,161,67,98,2,45,42,
34 24,53,15,147,211,33,137,154,24,147,155,135,237,31,238,240,61,207,239,126,
35 247,187,231,33,170,138,21,201,199,159,14,142,142,123,128,1,160,5,196,4,
36 53,147,163,126,80,63,176,11,44,210,80,191,162,195,77,97,75,251,230,3,144,
37 233,109,147,168,142,35,188,4,234,44,209,194,9,202,28,118,153,212,119,109,
38 254,162,0,196,179,90,133,212,142,2,35,64,181,69,195,153,58,3,102,208,224,
39 148,186,187,67,150,1,196,179,233,68,100,1,232,40,210,112,166,54,80,29,84,
40 119,123,32,47,128,140,125,125,130,189,234,11,208,120,219,110,206,90,59,
41 67,173,15,210,250,230,119,14,9,4,163,185,32,188,136,188,208,177,182,31,
42 183,2,200,232,154,137,198,54,169,168,116,97,171,188,117,167,103,141,53,
43 124,127,213,146,214,247,252,243,46,235,222,211,92,0,9,8,213,246,235,39,
44 97,92,26,247,172,86,17,143,45,161,184,184,136,192,69,36,223,102,197,168,
45 17,145,5,241,172,86,221,0,32,204,4,240,244,178,125,119,16,29,201,203,125,
46 5,32,163,43,46,132,183,55,166,222,29,196,136,76,111,155,0,54,0,226,198,
47 4,112,47,235,212,20,192,181,59,177,238,61,69,38,183,74,1,168,38,170,227,
48 192,27,97,118,223,65,192,251,7,165,54,231,18,91,37,185,46,102,17,58,161,
49 161,254,161,65,192,215,155,215,56,220,197,231,168,227,232,184,199,6,58,
50 104,121,73,18,160,213,188,207,167,254,199,105,67,175,151,126,177,243,251,
51 188,80,136,1,27,72,51,88,11,72,41,136,26,35,74,135,171,38,173,187,206,97,
52 220,178,32,167,90,12,20,103,161,171,244,34,66,40,148,213,181,23,40,49,13,
53 68,11,6,0,8,135,195,101,128,80,179,168,115,43,39,132,129,202,141,8,245,
54 239,32,196,111,32,148,4,144,130,136,71,45,37,64,25,82,191,1,186,87,42,0,
55 36,46,102,17,126,98,215,0,89,40,7,0,80,140,179,90,52,112,186,150,17,130,
56 255,1,226,132,134,250,21,67,135,155,194,40,243,101,3,176,10,161,204,233,
57 112,83,56,241,27,58,236,110,132,130,253,104,9,16,103,216,101,18,146,249,
58 128,186,59,15,80,102,203,10,144,27,98,38,149,174,95,57,34,7,19,64,73,65,
59 222,34,196,6,26,156,74,53,46,1,212,221,29,194,168,232,71,240,221,33,132,
60 55,145,158,95,213,8,105,174,88,167,186,252,64,95,62,136,243,168,178,127,
61 24,74,123,206,163,121,34,106,44,226,35,30,235,203,172,13,178,23,38,163,
62 107,38,241,216,18,215,147,212,210,180,133,81,209,159,124,193,52,101,13,
63 70,58,213,229,199,65,23,240,161,164,191,67,56,71,140,247,56,232,202,102,
64 28,172,20,167,158,111,143,8,71,61,8,67,150,82,183,132,225,32,202,60,14,
65 187,91,221,157,7,57,167,22,84,158,7,124,189,137,20,78,154,81,156,151,185,
66 132,74,32,17,212,116,15,100,1,167,107,217,106,121,254,23,223,163,88,99,
67 79,104,41,98,0,0,0,0,73,69,78,68,174,66,96,130};
68 
69 static size_t xml_res_size_1 = 1145;
70 static unsigned char xml_res_file_1[] = {
71 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
72 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
73 72,89,115,0,0,4,153,0,0,4,153,1,131,201,236,179,0,0,0,25,116,69,88,116,
74 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
75 101,46,111,114,103,155,238,60,26,0,0,3,246,73,68,65,84,88,133,229,151,91,
76 108,84,85,20,134,191,117,102,206,244,150,182,80,27,75,0,141,70,81,228,18,
77 193,64,140,141,198,7,37,68,95,72,144,242,128,198,120,41,15,106,8,150,72,
78 106,50,51,157,158,118,42,40,180,81,52,154,80,212,16,47,68,139,98,212,146,
79 244,193,56,65,5,17,138,24,163,196,164,177,36,21,20,52,157,222,152,94,102,
80 230,44,31,122,177,211,158,233,153,14,77,120,112,189,156,100,173,127,255,
81 255,191,247,94,103,239,115,68,85,185,150,97,92,83,117,192,59,231,140,150,
82 24,120,88,66,18,113,197,154,244,202,156,110,129,37,249,24,124,8,108,200,
83 0,253,21,54,143,207,221,10,88,178,0,225,11,96,141,11,50,142,16,36,192,43,
84 160,58,55,6,44,89,129,65,43,112,163,11,178,3,216,66,64,79,141,39,174,190,
85 9,235,100,29,6,223,185,138,11,7,177,89,77,240,63,113,184,218,38,172,151,
86 74,132,183,92,120,122,81,158,33,168,135,156,138,89,174,128,8,245,178,11,
87 104,118,17,63,129,205,42,106,156,197,113,25,236,28,150,228,98,112,16,216,
88 60,3,202,70,105,64,169,35,164,137,153,232,102,103,192,146,82,12,62,7,238,
89 153,1,213,133,193,99,248,245,88,38,148,153,159,3,97,185,29,165,21,184,101,
90 70,113,165,26,131,232,180,74,146,51,132,244,114,118,6,234,229,126,224,8,
91 48,63,51,183,41,17,5,94,32,168,239,56,21,221,13,88,98,32,108,64,200,73,
92 29,201,70,148,10,23,241,195,216,108,35,164,127,165,3,204,254,40,222,47,
93 102,207,121,26,243,125,108,243,121,210,162,46,34,60,71,64,63,115,163,155,
94 85,19,118,7,228,6,143,77,139,8,119,15,198,71,115,83,76,40,194,1,76,118,
95 82,173,189,153,112,102,108,160,47,40,235,61,202,251,8,165,227,185,41,38,
96 58,16,182,18,208,72,166,156,153,25,176,196,232,25,161,86,192,143,195,193,
97 53,24,39,129,210,228,155,71,45,85,58,56,27,113,87,3,253,181,82,106,199,
98 57,36,240,160,35,64,248,9,229,105,159,165,237,233,56,196,138,120,49,10,
99 239,64,245,54,148,223,88,214,121,78,43,42,146,19,245,116,77,216,95,35,229,
100 182,205,71,40,139,29,202,67,24,132,139,189,188,60,211,73,39,214,233,77,
101 99,119,69,233,164,244,37,84,159,213,208,218,79,211,26,232,241,203,14,129,
102 221,128,233,72,44,252,2,116,78,206,169,114,46,41,188,94,18,214,46,0,169,
103 59,93,5,52,1,236,44,95,192,163,43,75,248,224,231,110,246,28,31,123,35,133,
104 42,13,174,121,53,101,11,186,107,165,200,147,224,93,129,141,233,102,53,38,
105 182,28,88,62,70,20,49,132,166,162,48,95,194,232,108,196,58,185,12,241,236,
106 26,199,47,42,52,185,179,44,159,200,249,254,73,36,188,36,225,147,173,41,
107 6,100,136,121,134,143,70,160,17,192,78,242,36,80,233,224,97,68,132,22,85,
108 26,139,195,250,227,180,234,240,240,150,220,188,156,156,155,174,43,0,96,
109 126,158,119,226,185,180,52,23,128,206,232,112,222,112,210,216,148,182,7,
110 250,130,98,169,77,205,148,116,20,56,144,76,178,175,100,183,254,225,188,
111 62,32,254,175,143,174,93,88,240,208,183,91,87,225,243,249,28,49,171,247,
112 255,202,217,75,177,195,211,223,2,75,188,125,9,154,213,230,137,73,217,223,
113 197,224,181,193,33,222,46,219,163,87,210,9,79,132,26,49,91,161,103,32,70,
114 94,158,146,159,227,195,99,8,73,91,73,140,205,215,86,5,155,88,138,129,127,
115 170,165,208,244,242,9,176,14,64,132,227,10,77,197,38,71,8,169,93,228,170,
116 60,22,134,158,105,191,24,123,164,108,239,89,0,26,31,190,149,29,247,46,230,
117 141,83,151,121,190,173,107,18,78,218,39,12,196,44,89,104,154,28,101,180,
118 193,90,196,195,222,162,58,253,33,83,205,212,21,240,52,67,114,59,112,61,
119 64,124,120,144,145,145,145,169,168,63,49,125,239,25,0,3,126,89,145,72,208,
120 38,74,68,109,150,20,55,232,230,172,197,1,109,184,239,111,208,74,96,8,224,
121 251,11,87,120,243,68,23,223,116,78,124,38,196,80,125,74,95,92,25,149,104,
122 128,155,197,230,129,164,201,199,37,181,218,151,173,168,83,136,63,178,20,
123 216,7,148,163,20,32,12,224,205,61,134,225,219,174,161,187,58,32,155,235,
124 56,27,35,22,6,241,182,69,152,235,47,104,8,59,165,246,191,255,59,254,23,
125 116,158,121,223,246,238,101,75,0,0,0,0,73,69,78,68,174,66,96,130};
126 
127 static size_t xml_res_size_2 = 987;
128 static unsigned char xml_res_file_2[] = {
129 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
130 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
131 72,89,115,0,0,5,98,0,0,5,98,1,172,97,92,156,0,0,0,25,116,69,88,116,83,111,
132 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
133 111,114,103,155,238,60,26,0,0,3,88,73,68,65,84,88,133,197,151,123,104,141,
134 97,24,192,127,239,217,185,76,10,209,140,105,229,210,92,74,174,115,89,91,
135 20,139,134,48,127,80,194,220,134,63,8,145,63,196,54,119,43,33,252,97,182,
136 154,40,162,200,106,214,148,132,153,68,211,102,180,37,119,25,67,238,235,
137 236,59,231,59,123,253,113,182,119,59,190,239,59,151,156,195,243,215,251,
138 60,207,251,188,207,239,125,222,219,247,9,242,238,74,226,28,252,47,177,227,
139 213,72,238,233,100,250,144,62,0,220,122,253,147,151,223,180,127,6,96,3,
140 24,213,219,70,81,86,18,165,243,6,50,105,64,247,152,36,74,166,153,25,226,
141 158,57,0,128,219,237,198,227,241,196,36,57,192,78,81,194,53,54,80,69,46,
142 233,212,25,1,58,32,218,116,111,212,147,15,162,137,229,148,3,144,33,106,
143 25,79,131,57,0,128,207,211,10,122,116,43,145,39,138,113,160,3,240,142,4,
144 138,88,96,13,0,248,1,162,4,145,194,91,150,82,161,244,253,114,37,26,206,
145 16,0,81,132,200,19,197,196,209,6,192,27,250,81,194,188,0,191,53,64,20,32,
146 134,243,138,197,92,83,250,94,185,10,15,129,119,78,112,128,63,32,250,243,
147 57,34,128,2,113,10,91,251,236,95,146,196,105,230,24,250,132,6,0,156,122,
148 11,39,244,125,52,137,44,62,136,153,28,17,135,67,198,140,228,57,11,185,174,
149 244,61,114,53,94,236,145,3,36,241,137,10,177,145,37,190,43,104,58,36,242,
150 133,77,156,39,85,52,4,141,219,69,17,2,9,192,51,146,57,195,108,211,126,65,
151 1,50,68,45,183,196,90,82,219,207,109,171,14,154,255,52,145,47,139,45,227,
152 198,240,148,108,113,179,19,70,230,226,179,72,101,9,176,94,92,160,140,45,
153 36,240,85,217,170,25,173,32,230,136,170,128,11,165,171,116,157,125,35,3,
154 57,199,76,75,88,3,128,11,141,82,177,139,189,156,84,199,199,131,131,77,114,
155 11,179,229,81,106,25,166,32,242,133,177,10,169,162,129,185,226,118,39,140,
156 204,165,45,72,161,13,158,29,162,148,108,110,42,189,137,4,178,56,166,118,
157 240,65,153,3,248,151,99,134,94,197,56,26,3,226,119,115,82,181,159,48,152,
158 139,100,90,38,55,5,72,226,147,106,87,49,150,41,242,20,53,114,184,178,85,
159 146,70,29,67,21,196,118,189,72,249,210,168,39,139,187,74,47,96,77,208,217,
160 155,2,116,200,113,22,49,95,30,226,51,189,12,190,66,185,76,181,51,125,119,
161 24,163,63,6,2,103,95,71,10,151,228,180,160,201,77,1,126,208,157,28,10,216,
162 41,215,89,238,220,10,210,121,68,138,210,183,249,74,72,215,31,144,41,238,
163 43,91,190,92,139,68,68,14,176,77,110,160,76,78,13,25,88,72,103,21,102,81,
164 205,81,223,1,90,219,143,104,13,35,40,35,244,24,166,0,94,194,251,62,172,
165 144,233,60,102,136,210,83,120,139,166,251,247,69,190,92,19,214,24,166,0,
166 225,138,68,80,72,142,193,94,173,143,224,170,62,49,246,0,0,229,50,131,39,
167 93,170,0,176,159,21,17,189,162,198,215,33,2,145,8,246,176,138,173,156,5,
168 224,5,3,184,33,39,248,157,29,0,118,167,69,116,20,0,0,42,101,26,149,164,
169 153,59,195,128,248,171,37,8,75,66,44,71,236,1,66,64,216,1,122,184,226,148,
170 97,100,223,110,124,215,124,49,225,176,57,156,216,28,46,0,30,190,111,225,
171 99,139,238,7,24,218,59,94,117,218,60,57,145,205,147,19,99,2,0,224,114,185,
172 136,143,143,39,251,226,51,174,52,126,251,251,77,24,169,104,90,224,127,167,
173 29,224,114,227,87,117,107,127,248,229,229,135,167,45,230,32,53,239,90,1,
174 225,7,168,111,118,83,223,236,142,121,82,131,216,157,252,6,173,114,47,95,
175 172,143,154,9,0,0,0,0,73,69,78,68,174,66,96,130};
176 
177 static size_t xml_res_size_3 = 1135;
178 static unsigned char xml_res_file_3[] = {
179 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
180 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
181 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
182 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
183 46,111,114,103,155,238,60,26,0,0,3,236,73,68,65,84,88,133,173,151,77,72,
184 92,87,20,199,127,231,197,153,103,162,17,149,74,103,50,74,160,12,24,75,74,
185 41,81,92,4,33,45,180,16,99,73,150,45,5,55,237,198,20,23,133,172,196,102,
186 156,212,126,65,105,32,33,205,42,155,130,36,75,83,219,44,18,48,66,82,218,
187 84,67,104,41,73,138,18,8,126,204,72,165,150,204,24,157,55,58,167,139,153,
188 209,241,205,123,111,94,180,255,221,123,231,204,251,255,230,222,123,238,
189 61,87,84,21,63,146,139,51,38,203,255,190,5,156,4,218,64,194,160,225,66,
190 52,1,154,0,30,1,215,105,168,31,215,254,104,198,215,119,43,1,200,23,247,
191 195,100,245,44,194,7,192,126,95,180,144,66,25,33,32,231,116,224,72,98,71,
192 0,18,159,168,70,106,7,129,79,128,125,62,141,237,122,14,156,71,211,195,26,
193 59,182,230,27,64,226,147,33,68,70,129,206,29,26,219,117,15,213,83,26,235,
194 72,218,3,70,153,249,167,119,95,71,100,242,127,52,7,232,68,100,82,62,187,
195 255,154,39,128,12,222,9,147,91,255,137,117,171,217,158,88,27,44,99,117,
196 149,75,110,51,170,55,36,62,25,114,4,144,248,68,53,185,141,31,80,34,172,
197 91,176,110,109,38,245,181,55,241,240,244,97,162,141,102,69,243,104,163,
198 201,195,211,135,233,107,111,114,134,16,25,149,248,68,117,25,0,25,134,128,
199 246,205,231,2,68,95,123,19,151,186,15,210,82,23,228,118,111,171,39,68,180,
200 209,228,118,111,43,45,117,65,46,117,31,116,131,232,44,44,238,252,31,87,
201 85,100,112,60,130,26,211,40,123,75,51,63,124,227,37,46,190,27,101,111,245,
202 38,48,115,207,44,222,252,254,47,102,254,217,94,230,69,243,230,186,224,230,
203 59,5,62,190,241,148,203,83,127,219,33,158,83,37,81,29,56,146,200,143,64,
204 206,24,114,50,255,230,157,22,172,76,134,181,181,173,10,106,118,24,9,39,
205 115,0,1,183,145,216,71,86,207,230,115,46,76,155,36,231,150,80,106,139,209,
206 154,160,193,111,31,181,17,217,191,245,65,211,52,169,118,24,9,192,209,188,
207 84,179,207,44,94,253,238,79,210,86,174,244,117,138,134,250,38,97,96,162,
208 7,213,49,251,143,94,105,48,249,241,253,40,7,60,32,146,233,44,0,161,218,
209 128,171,185,219,148,21,212,109,128,158,114,138,60,89,206,208,115,117,134,
210 133,212,86,53,100,108,211,17,170,13,236,198,28,224,164,1,114,200,45,234,
211 7,98,23,230,0,109,6,74,200,43,99,39,16,62,205,1,9,27,136,122,2,148,66,44,
212 174,100,43,66,36,211,89,159,230,0,26,246,191,191,58,200,239,116,120,201,
213 64,165,236,132,178,171,88,17,47,215,148,47,56,167,133,89,105,199,220,146,
214 36,12,4,79,0,167,114,172,4,225,180,89,57,75,19,6,232,227,221,152,239,18,
215 226,145,1,50,186,83,243,197,149,172,231,194,244,1,113,221,32,20,185,133,
216 144,46,125,91,19,52,24,171,96,190,144,178,56,62,50,205,241,145,105,207,
217 18,109,174,11,50,222,219,234,212,35,164,104,168,31,55,180,63,154,65,185,
218 86,26,89,177,114,124,251,203,34,110,237,234,66,202,162,231,234,12,79,150,
219 51,21,247,9,5,190,188,155,176,159,3,160,140,104,127,52,147,199,50,3,49,
220 132,213,210,248,149,7,75,156,185,57,91,6,81,106,94,148,27,196,234,218,154,
221 251,113,28,144,115,80,104,72,52,118,116,1,229,130,61,203,14,225,100,238,
222 6,161,64,255,216,12,151,127,157,47,203,5,206,23,219,245,173,137,49,25,2,
223 166,220,32,230,61,204,237,16,243,41,139,51,55,103,185,242,96,9,123,123,
224 7,220,67,211,195,197,135,109,109,185,12,222,9,163,27,147,40,17,251,199,
225 107,130,6,43,246,121,116,145,99,110,85,16,170,130,115,168,118,148,182,231,
226 219,150,166,14,119,37,128,19,8,101,227,230,215,220,53,119,195,154,39,183,
227 113,194,126,55,40,171,13,253,252,216,239,200,158,14,28,166,99,23,154,66,
228 246,116,232,80,231,31,246,128,227,97,164,195,93,9,76,186,128,175,237,213,
229 241,66,18,86,17,227,43,76,186,10,163,91,158,82,241,114,26,255,249,0,153,
230 108,28,225,189,210,190,177,130,113,26,229,26,102,32,166,177,163,11,158,
231 169,47,116,61,79,206,191,157,111,225,228,16,74,104,179,151,80,73,230,15,
232 53,125,12,50,74,40,114,203,239,245,252,63,36,46,60,68,215,168,12,225,0,
233 0,0,0,73,69,78,68,174,66,96,130};
234 
235 static size_t xml_res_size_4 = 745;
236 static unsigned char xml_res_file_4[] = {
237 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
238 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
239 72,89,115,0,0,5,74,0,0,5,74,1,26,195,117,109,0,0,0,25,116,69,88,116,83,
240 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
241 46,111,114,103,155,238,60,26,0,0,2,102,73,68,65,84,88,133,197,150,75,72,
242 84,97,20,199,127,103,102,156,33,74,90,132,74,11,117,81,11,55,209,46,40,
243 92,70,16,173,130,137,220,4,81,164,102,20,61,209,76,131,102,132,80,202,116,
244 72,68,72,138,194,136,202,6,162,218,84,20,49,6,69,155,22,46,196,213,140,
245 211,131,194,77,77,249,184,119,230,107,49,134,58,119,30,247,53,117,224,194,
246 229,255,125,247,156,31,255,115,248,238,39,74,41,114,67,66,31,166,128,245,
247 134,5,19,177,153,25,105,33,58,122,246,226,237,78,51,251,125,5,244,26,187,
248 0,62,210,28,151,123,231,7,122,210,158,147,93,99,29,165,246,123,236,20,41,
249 21,1,52,218,212,131,246,193,80,211,149,255,2,0,224,71,163,77,198,207,68,
250 66,251,251,77,1,200,133,215,143,165,243,85,66,186,99,113,144,74,171,5,79,
251 51,102,208,42,208,105,147,241,83,67,225,125,131,37,1,80,108,4,169,37,173,
252 215,161,207,91,118,230,170,12,112,142,59,6,221,71,154,22,162,39,134,67,
253 193,235,197,1,86,134,174,129,190,96,149,129,62,137,112,128,103,121,33,154,
254 37,122,108,36,28,28,54,7,224,0,162,83,110,18,99,171,65,247,146,225,8,209,
255 214,27,225,189,35,230,0,28,64,52,242,145,23,108,99,134,26,146,84,243,137,
256 42,62,83,197,87,54,176,155,137,230,222,240,193,107,127,247,22,58,7,86,67,
257 0,248,2,150,32,118,242,158,30,14,211,173,90,243,45,111,111,95,122,49,55,
258 108,54,157,232,98,148,203,50,84,116,143,249,105,183,9,209,193,45,250,36,
259 82,112,189,116,11,114,33,32,111,59,166,168,71,80,75,15,8,217,127,140,160,
260 8,242,146,36,213,68,104,114,8,80,4,162,65,61,180,156,10,236,30,197,186,
261 6,250,162,173,79,221,1,128,44,128,11,16,206,126,70,46,64,24,102,96,77,133,
262 135,254,93,181,150,146,60,79,204,241,104,250,183,59,0,62,143,208,88,183,
263 206,82,146,169,217,249,172,19,62,191,115,128,159,11,105,182,12,79,90,78,
264 180,156,209,26,132,187,23,18,27,51,225,254,141,200,34,132,161,5,107,253,
265 30,238,7,55,57,98,120,19,79,209,251,110,214,84,59,202,118,39,52,235,132,
266 193,129,95,139,25,246,220,157,118,15,2,138,58,81,62,7,86,66,20,113,162,
267 252,0,37,32,12,45,168,12,120,121,123,168,193,81,189,137,153,20,173,79,226,
268 171,197,180,150,65,72,226,245,43,132,47,5,1,244,140,34,150,72,57,2,152,
269 252,62,103,20,85,38,165,46,237,168,207,149,13,0,115,90,134,163,79,227,185,
270 114,217,226,223,204,64,145,88,118,64,152,69,201,183,178,85,18,249,145,79,
271 254,3,152,12,212,147,138,121,230,178,0,0,0,0,73,69,78,68,174,66,96,130};
272 
273 static size_t xml_res_size_5 = 1105;
274 static unsigned char xml_res_file_5[] = {
275 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
276 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
277 72,89,115,0,0,4,193,0,0,4,193,1,17,118,177,117,0,0,0,25,116,69,88,116,83,
278 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
279 46,111,114,103,155,238,60,26,0,0,3,206,73,68,65,84,88,133,197,151,93,108,
280 20,85,20,199,127,119,102,187,187,109,193,74,181,216,210,168,169,65,173,
281 196,151,242,160,24,155,96,48,49,82,131,41,31,17,130,209,218,20,4,34,145,
282 7,77,144,144,106,96,137,190,245,69,227,55,26,44,105,37,212,66,169,2,9,24,
283 19,163,201,38,16,27,67,35,148,98,67,49,41,173,197,110,107,183,237,204,206,
284 236,92,31,216,46,59,221,153,217,169,149,250,127,185,59,247,158,115,238,
285 47,231,158,115,103,86,72,41,17,251,126,89,138,176,126,98,142,90,76,76,236,
286 21,7,219,95,111,252,122,135,95,159,192,205,65,6,128,123,220,140,138,136,
287 51,198,130,156,193,20,44,94,227,232,246,15,246,203,192,206,183,143,108,
288 245,3,160,0,144,152,84,48,19,182,133,39,184,192,97,209,72,143,88,207,117,
289 241,172,159,88,0,168,88,236,16,109,91,62,140,188,240,133,31,251,64,250,
290 87,10,32,20,128,125,124,202,155,162,25,21,11,0,157,32,0,29,27,151,178,32,
291 168,114,110,96,130,182,139,49,206,15,76,184,66,108,231,155,250,79,34,27,
292 212,109,141,109,117,94,0,138,237,201,76,112,36,249,6,187,197,161,244,230,
293 153,42,10,171,172,170,88,200,238,39,75,137,54,84,242,238,170,114,130,170,
294 112,9,108,177,149,99,47,127,182,127,221,97,223,0,245,162,147,167,204,40,
295 154,233,229,114,83,170,16,236,169,46,227,199,87,42,201,83,220,33,182,136,
296 227,47,126,30,89,219,154,19,160,132,24,7,248,8,0,221,196,23,4,192,227,229,
297 133,188,179,114,137,235,186,64,210,64,199,166,47,35,207,31,245,4,88,33,
298 186,41,100,42,189,48,27,136,183,170,75,169,42,45,240,132,168,167,115,195,
299 161,200,154,99,174,0,203,185,148,229,232,23,66,21,130,218,202,59,115,218,
300 213,241,109,109,243,129,154,19,153,115,233,46,232,147,229,124,204,250,108,
301 47,3,36,65,80,189,131,63,182,164,48,117,128,222,122,73,158,90,211,18,89,
302 253,221,230,198,83,207,217,0,154,169,225,222,162,32,15,223,21,118,116,124,
303 38,47,72,113,126,192,113,13,160,170,172,128,97,22,81,33,79,160,96,161,96,
304 33,32,53,74,20,100,106,180,16,200,154,93,239,125,255,208,240,158,167,47,
305 219,34,62,186,56,159,214,117,15,184,110,18,10,57,87,59,192,192,184,65,18,
306 133,171,148,185,218,216,148,16,10,204,104,195,174,235,147,158,62,186,174,
307 163,105,154,227,218,57,151,75,41,151,108,25,24,140,27,92,27,211,185,175,
308 40,228,9,1,16,14,219,143,234,231,107,241,44,219,144,42,120,164,36,223,54,
309 247,251,136,206,120,34,233,12,0,176,247,135,1,154,107,43,60,169,103,66,
310 156,31,152,160,165,123,36,203,174,98,81,136,174,87,151,217,230,86,183,244,
311 114,250,202,88,250,89,153,233,212,217,51,74,251,165,152,39,192,52,132,166,
312 105,104,166,69,93,199,85,76,75,230,244,113,146,99,89,239,58,253,7,134,37,
313 217,184,172,216,211,185,255,175,56,59,207,12,242,219,176,115,93,248,81,
314 86,6,0,198,245,36,219,58,251,217,220,222,199,149,145,236,224,147,134,69,
315 107,247,8,43,14,94,228,236,229,27,204,124,149,207,70,238,141,13,156,236,
316 29,227,100,239,24,197,249,1,150,151,21,80,82,24,224,215,193,41,122,110,
317 104,36,101,70,202,167,1,2,193,255,22,96,90,35,83,38,103,251,254,246,54,
318 250,151,16,190,0,188,180,242,254,133,52,175,189,213,53,161,112,152,234,
319 175,250,232,117,56,186,219,2,144,167,10,238,8,101,188,40,164,129,98,249,
320 175,9,199,34,156,171,164,145,240,93,152,190,50,208,80,117,119,214,71,199,
321 131,239,95,64,79,122,244,190,153,64,250,128,240,5,16,84,21,123,154,1,33,
322 4,224,125,249,72,35,129,174,235,132,66,238,87,251,109,57,130,76,105,154,
323 150,190,186,255,23,128,92,16,115,238,130,217,64,56,105,94,50,144,9,97,25,
324 246,194,156,87,0,0,203,208,109,45,58,111,71,96,147,153,128,100,82,185,5,
325 32,49,129,63,221,236,187,134,38,242,154,162,67,182,94,50,45,25,7,232,31,
326 213,213,166,232,144,237,179,39,166,153,147,128,21,211,76,165,41,58,100,
327 251,195,208,63,170,79,1,201,212,158,252,3,254,199,112,135,4,100,254,30,
328 0,0,0,0,73,69,78,68,174,66,96,130};
329 
330 static size_t xml_res_size_6 = 845;
331 static unsigned char xml_res_file_6[] = {
332 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
333 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
334 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
335 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
336 46,111,114,103,155,238,60,26,0,0,2,202,73,68,65,84,88,133,189,151,191,75,
337 91,81,20,199,63,231,249,226,139,162,160,208,66,210,116,180,160,67,113,176,
338 226,32,130,21,156,28,116,20,58,118,118,232,42,214,36,214,150,118,18,236,
339 127,80,42,56,198,210,77,16,161,237,32,209,193,14,254,192,14,29,140,9,88,
340 80,26,137,121,106,60,29,18,127,52,47,198,151,248,226,217,238,185,247,221,
341 239,135,115,223,61,231,92,81,85,220,152,124,252,101,113,112,56,0,12,3,29,
342 32,65,208,96,97,54,9,154,4,54,129,5,90,91,150,116,172,205,118,181,239,109,
343 0,242,110,45,200,169,78,34,188,0,154,93,209,66,26,101,14,159,76,233,120,
344 87,178,42,0,137,46,251,145,166,9,224,21,208,232,82,184,216,50,192,12,122,
345 52,173,225,254,172,107,0,137,198,3,136,196,128,158,42,133,139,109,5,213,
346 17,13,119,167,138,39,12,135,248,235,239,157,136,196,61,20,7,232,65,36,46,
347 111,214,158,58,244,174,71,64,38,190,5,209,92,156,186,250,16,102,189,135,
348 250,151,182,139,106,247,245,72,92,70,64,162,203,126,206,115,95,80,66,156,
349 157,192,217,73,45,0,30,35,18,147,232,178,223,1,128,77,4,120,118,57,174,
350 29,68,79,225,231,6,10,71,32,19,75,33,212,216,65,105,112,44,55,235,169,193,
351 113,100,48,165,77,199,187,146,249,8,156,27,145,146,226,80,171,72,52,114,
352 170,147,0,194,236,142,69,106,247,15,74,83,217,79,188,143,68,154,214,150,
353 135,6,169,196,224,173,226,80,139,72,52,115,112,56,96,130,142,252,231,181,
354 234,104,127,96,221,248,149,152,38,134,239,230,249,114,182,177,159,229,175,
355 157,187,238,26,54,65,218,225,42,23,116,6,26,248,58,250,164,236,70,150,101,
356 225,247,251,203,174,41,101,207,63,109,179,252,59,125,221,213,97,160,4,42,
357 221,200,182,109,178,217,146,169,189,66,147,160,129,104,197,0,222,65,104,
358 208,81,11,238,27,194,64,197,81,161,238,15,66,146,6,194,157,0,238,6,161,
359 73,19,116,11,232,189,112,173,167,142,25,252,188,93,21,136,152,245,101,175,
360 232,198,190,3,114,211,4,137,129,190,188,240,164,237,28,241,68,166,42,0,
361 200,84,154,49,23,12,2,161,69,132,163,42,21,157,230,62,99,166,105,109,89,
362 50,116,172,205,70,153,247,12,192,45,132,50,167,99,109,118,254,26,90,190,
363 48,194,241,61,66,100,240,201,20,20,26,18,13,247,238,161,204,122,10,80,30,
364 98,230,162,93,191,74,68,22,17,96,245,30,32,86,208,163,233,139,65,233,166,
365 84,9,121,14,146,191,29,55,55,165,0,58,221,151,4,134,16,18,158,3,228,78,
366 18,156,231,134,138,223,6,142,90,160,111,251,215,145,186,110,188,61,142,
367 85,164,174,91,35,61,63,139,39,74,22,35,157,238,75,98,209,7,124,184,211,
368 237,16,142,17,227,61,22,125,133,232,58,151,220,250,56,141,254,120,132,125,
369 26,69,24,117,213,186,229,133,143,80,230,177,124,97,13,247,238,149,93,90,
370 209,243,60,149,24,204,183,112,210,142,18,184,236,37,84,82,249,162,166,91,
371 32,49,2,161,69,183,207,243,127,112,231,61,10,138,240,143,199,0,0,0,0,73,
372 69,78,68,174,66,96,130};
373 
374 static size_t xml_res_size_7 = 1244;
375 static unsigned char xml_res_file_7[] = {
376 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
377 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
378 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
379 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
380 46,111,114,103,155,238,60,26,0,0,4,89,73,68,65,84,88,133,181,151,93,76,
381 91,101,24,199,127,207,161,165,5,193,208,32,210,2,83,230,72,216,98,252,64,
382 36,16,23,162,33,89,118,49,3,75,140,31,17,221,197,174,208,132,41,94,44,186,
383 32,208,73,102,188,218,148,59,19,99,162,33,89,116,78,70,162,162,219,8,6,
384 48,153,29,55,114,49,150,0,19,55,40,91,130,108,192,74,79,219,211,215,139,
385 150,66,219,211,210,18,247,191,122,63,158,243,60,191,243,158,247,60,239,
386 243,138,82,138,76,36,125,211,54,150,239,54,1,45,192,62,16,23,40,87,116,
387 214,11,202,11,92,3,46,224,40,26,86,237,85,122,70,126,183,3,144,83,19,46,
388 130,170,11,161,21,40,204,136,22,86,81,244,99,149,147,234,68,173,119,71,
389 0,226,30,177,35,5,157,64,7,144,159,97,224,68,249,128,211,168,181,94,213,
390 253,146,63,99,0,113,123,156,136,12,0,245,27,99,182,28,33,207,170,69,188,
391 6,195,4,140,204,62,93,84,87,80,234,176,234,174,91,76,156,208,146,130,127,
392 60,246,12,34,158,173,193,1,58,26,74,89,62,94,195,242,241,26,142,62,251,
393 72,54,193,1,234,17,241,200,39,19,79,165,5,144,206,81,23,225,208,79,132,
394 2,21,217,70,200,64,21,40,245,179,184,61,78,83,0,113,143,216,9,27,131,40,
395 202,9,5,32,20,120,0,12,84,32,50,32,238,17,123,18,0,58,61,192,243,177,254,
396 131,131,168,143,110,238,77,0,113,143,151,33,28,75,50,77,3,209,92,93,68,
397 91,109,9,109,181,37,20,230,230,100,11,209,33,167,38,92,0,22,0,244,160,27,
398 200,51,53,77,1,240,65,67,41,47,62,30,73,11,67,51,43,172,6,140,108,0,242,
399 9,170,46,224,29,139,244,77,219,16,222,32,221,95,21,10,16,10,164,78,108,
400 57,2,103,14,238,2,224,246,253,16,159,142,165,205,61,17,9,173,210,55,253,
401 190,133,197,249,3,40,10,182,179,55,130,1,252,126,63,118,187,61,105,206,
402 162,9,239,213,151,2,112,125,201,79,255,228,18,77,149,15,3,48,121,199,199,
403 132,215,103,230,178,144,229,187,77,22,80,135,183,199,141,72,215,51,74,239,
404 60,231,202,231,235,150,74,0,62,27,95,76,5,0,208,98,1,217,75,218,245,143,
405 168,198,153,31,131,232,122,161,24,71,225,102,118,30,62,82,29,107,63,225,
406 176,241,229,203,149,177,126,67,197,67,233,220,238,211,80,56,205,102,74,
407 11,172,113,125,239,90,48,214,206,215,140,184,205,89,86,184,105,107,213,
408 132,146,124,75,172,111,203,73,74,182,91,36,46,13,81,113,0,182,28,225,68,
409 163,139,201,182,39,105,125,186,56,54,126,115,37,254,111,208,117,29,191,
410 223,244,124,201,66,202,101,73,28,58,247,90,21,141,143,69,246,228,153,131,
411 187,152,187,167,51,54,183,134,32,73,143,111,236,9,179,141,153,169,52,148,
412 196,157,80,125,127,222,142,181,173,154,240,237,225,221,236,113,216,145,
413 228,248,49,136,157,175,132,120,53,132,56,128,223,102,86,232,159,92,138,
414 245,29,118,11,223,189,186,155,226,188,212,217,110,231,16,202,171,129,154,
415 74,28,254,232,242,60,11,171,155,223,124,143,195,206,187,117,143,166,117,
416 181,67,136,107,26,200,64,226,232,138,110,208,254,203,63,113,99,86,45,197,
417 55,216,6,194,179,112,63,221,35,23,52,156,229,23,17,214,18,103,46,223,88,
418 229,155,191,150,204,30,202,10,194,23,12,167,50,93,197,81,52,172,169,246,
419 42,29,197,89,51,139,15,47,221,226,143,155,73,108,89,67,152,74,209,175,218,
420 171,244,72,150,176,89,187,17,214,19,109,124,193,48,175,124,63,195,239,115,
421 171,255,55,132,15,171,156,132,104,61,160,186,247,47,160,248,194,204,114,
422 61,24,230,245,115,179,92,154,93,201,26,98,197,231,103,232,250,29,179,169,
423 211,27,229,250,102,158,180,209,3,92,53,179,246,135,194,188,121,126,150,
424 161,233,123,25,7,215,13,197,91,231,103,25,153,254,55,177,166,184,130,90,
425 235,221,232,196,149,229,210,57,234,66,25,30,20,229,102,78,173,154,240,85,
426 115,37,205,213,69,105,131,7,12,197,219,63,206,242,235,204,150,85,179,228,
427 130,37,247,22,74,213,109,45,207,227,78,10,213,219,232,5,14,33,204,155,57,
428 14,134,21,71,7,255,230,135,169,229,180,193,143,12,220,136,15,14,96,4,230,
429 9,27,135,18,239,6,230,23,147,206,81,23,97,99,144,173,69,234,22,105,2,133,
430 54,243,204,24,52,148,217,175,119,21,45,167,57,250,130,241,177,210,94,205,
431 116,122,16,142,161,82,212,139,219,73,88,7,237,115,114,195,238,172,174,102,
432 241,32,227,101,232,65,119,180,110,220,182,116,139,6,94,67,113,22,155,181,
433 91,117,239,95,72,107,154,213,245,124,113,254,64,164,132,147,189,40,156,
434 177,90,66,201,98,228,80,83,83,32,3,56,203,47,102,122,61,255,15,18,39,215,
435 228,219,192,187,72,0,0,0,0,73,69,78,68,174,66,96,130};
436 
437 static size_t xml_res_size_8 = 1526;
438 static unsigned char xml_res_file_8[] = {
439 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
440 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
441 72,89,115,0,0,4,215,0,0,4,215,1,216,97,229,36,0,0,0,25,116,69,88,116,83,
442 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
443 46,111,114,103,155,238,60,26,0,0,5,115,73,68,65,84,88,133,157,151,109,76,
444 147,87,20,199,127,247,161,165,133,242,86,24,133,90,20,167,12,209,153,24,
445 163,130,219,98,64,151,185,76,167,160,217,204,140,155,38,206,15,91,148,17,
446 247,97,75,20,149,26,117,203,62,184,24,183,79,91,246,102,28,26,93,68,227,
447 116,175,164,6,231,27,113,217,116,190,163,78,3,130,50,40,138,212,182,180,
448 189,251,0,62,125,158,182,208,226,249,244,156,151,231,158,255,185,247,156,
449 115,207,21,82,74,18,33,177,179,197,132,187,103,14,80,9,76,4,97,7,105,31,
450 212,182,131,108,7,46,1,7,177,102,53,202,234,34,95,66,235,198,3,32,182,157,
451 181,211,47,55,34,88,6,164,39,132,22,122,145,236,198,40,54,203,117,211,218,
452 159,8,128,112,186,204,136,180,90,96,45,144,154,160,227,72,242,0,159,34,
453 31,110,145,155,42,188,9,3,16,206,230,124,132,104,0,202,134,90,249,253,153,
454 121,20,231,152,1,184,218,229,101,251,169,187,195,1,57,141,148,85,114,211,
455 140,142,184,0,196,134,227,83,48,154,15,3,5,195,173,232,90,49,129,242,194,
456 129,19,57,118,171,151,138,111,175,12,103,14,208,138,16,243,228,134,105,
457 231,181,66,69,231,188,182,201,78,40,240,35,1,191,206,121,150,57,41,222,
458 226,81,148,156,36,34,69,5,72,121,68,56,155,243,99,2,16,78,151,153,80,240,
459 16,18,7,1,63,4,252,0,148,23,166,115,121,245,100,86,77,125,42,97,231,11,
460 39,100,113,225,221,201,234,17,233,64,8,209,32,156,46,85,17,222,1,31,117,
461 192,116,149,15,248,89,57,57,131,223,222,42,38,207,98,228,179,121,133,76,
462 179,199,207,197,50,135,133,250,197,227,40,202,54,113,98,101,9,207,21,164,
463 69,153,12,38,119,24,128,168,109,116,32,120,79,107,245,194,152,52,62,153,
464 109,35,224,31,40,103,83,146,96,203,108,71,92,0,219,231,142,38,213,56,16,
465 87,78,138,129,223,151,23,51,255,153,204,72,179,181,98,219,89,187,10,128,
466 144,82,135,36,229,177,54,63,205,200,215,149,99,49,40,2,159,207,135,215,
467 235,101,223,69,55,75,246,223,136,11,160,114,111,11,39,91,31,170,124,138,
468 65,225,139,5,99,49,27,116,233,150,74,191,220,8,160,136,157,45,38,4,111,
469 104,181,53,101,54,108,169,70,149,175,255,187,131,37,123,46,209,235,15,198,
470 5,240,159,39,192,139,223,93,229,192,101,183,42,179,167,25,121,59,50,135,
471 4,203,196,206,22,147,66,71,219,75,72,210,194,114,88,84,98,85,237,174,117,
472 123,89,115,228,54,218,196,140,71,143,2,33,222,60,112,147,78,79,64,149,125,
473 240,124,62,70,69,87,25,233,184,123,230,40,32,171,180,210,153,163,45,228,
474 167,133,163,255,230,175,46,60,253,161,1,102,4,32,60,253,33,182,159,12,247,
475 157,49,153,201,172,152,146,19,105,86,169,128,40,209,74,22,107,162,151,64,
476 195,149,30,253,47,35,0,241,121,115,39,247,125,225,99,171,24,27,117,149,
477 76,52,32,209,53,134,23,159,206,80,191,207,180,245,209,246,32,134,179,128,
478 159,117,191,220,192,150,105,1,6,206,61,22,245,250,131,92,235,242,50,125,
479 212,128,93,150,217,16,97,33,236,6,132,204,71,211,141,253,193,48,115,167,
480 119,232,72,79,220,116,131,161,15,12,201,67,218,0,184,189,225,29,176,70,
481 117,84,105,87,34,36,244,104,182,44,26,113,4,37,112,28,110,111,120,119,98,
482 181,116,5,41,116,55,212,125,111,112,216,31,70,10,162,48,211,164,126,39,
483 39,69,198,43,218,21,4,58,0,61,190,48,226,241,86,19,150,228,168,77,74,24,
484 68,97,102,50,101,14,139,202,255,116,253,126,132,133,108,87,64,94,214,138,
485 254,184,29,238,98,25,166,36,86,77,205,141,15,96,8,16,175,79,202,214,241,
486 123,47,116,71,254,117,73,1,209,160,149,212,159,239,166,85,147,249,171,75,
487 115,35,219,104,66,32,242,44,70,170,75,109,170,170,245,129,95,23,220,32,
488 29,84,200,119,252,138,64,213,244,135,36,59,78,223,83,45,108,169,70,190,
489 92,80,56,34,16,22,17,224,240,210,34,198,100,134,43,100,223,69,55,17,179,
490 87,47,214,172,70,69,86,23,249,144,236,209,106,118,157,235,162,163,175,95,
491 229,95,45,206,226,208,210,34,114,82,227,84,5,144,110,74,226,171,249,14,
492 38,103,135,19,184,165,219,199,71,199,35,102,83,201,110,89,93,228,27,8,203,
493 100,220,132,224,209,99,157,55,16,162,230,232,109,188,129,144,106,95,58,
494 202,66,227,242,98,214,148,218,24,157,25,93,251,214,20,3,235,102,217,249,
495 231,157,103,121,121,124,134,122,139,118,122,2,188,242,253,85,221,189,0,
496 120,48,138,205,160,153,9,197,58,215,199,192,135,90,171,82,135,133,61,175,
497 141,35,59,70,63,248,179,195,195,191,61,62,172,102,3,86,179,129,226,28,147,
498 58,7,104,3,89,184,255,22,103,238,70,117,202,173,114,227,244,90,61,0,167,
499 203,140,143,38,180,83,17,80,148,109,230,135,37,227,116,245,156,8,117,244,
500 245,83,115,244,54,63,95,127,48,208,45,195,29,243,52,242,97,197,227,49,93,
501 55,21,139,218,38,59,50,216,140,68,55,250,228,90,12,212,148,230,81,85,146,
502 69,65,198,240,173,183,245,129,159,29,167,239,177,235,92,151,238,8,7,65,
503 180,34,229,12,237,120,30,61,150,175,119,77,1,14,35,163,199,114,1,76,119,
504 164,82,53,193,202,220,241,25,4,67,208,253,40,128,251,81,16,183,47,192,153,
505 182,62,234,207,119,211,31,138,241,216,17,180,98,76,153,47,235,202,206,233,
506 196,49,31,38,117,199,242,241,203,3,192,204,97,195,77,156,78,145,44,22,201,
507 186,242,168,135,73,204,226,150,117,229,29,152,108,229,8,156,8,122,159,216,
508 173,160,23,69,113,98,178,149,199,114,14,137,60,78,215,55,229,18,10,62,126,
509 156,90,135,53,14,147,27,201,110,148,164,205,114,235,172,206,97,215,79,248,
510 121,238,116,25,240,137,10,160,10,33,39,33,25,133,24,76,86,73,27,130,59,
511 72,113,17,104,192,36,93,114,83,69,236,41,37,130,254,7,30,131,25,159,192,
512 210,21,210,0,0,0,0,73,69,78,68,174,66,96,130};
513 
514 static size_t xml_res_size_9 = 901;
515 static unsigned char xml_res_file_9[] = {
516 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
517 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
518 72,89,115,0,0,4,86,0,0,4,86,1,47,21,139,83,0,0,0,25,116,69,88,116,83,111,
519 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
520 111,114,103,155,238,60,26,0,0,3,2,73,68,65,84,88,133,197,151,79,104,84,
521 87,20,198,127,223,157,63,4,212,133,165,45,81,17,4,221,184,80,193,81,84,
522 2,18,211,141,168,180,46,164,162,210,133,224,38,180,165,165,214,150,168,
523 201,248,26,141,10,198,162,210,170,180,139,226,194,65,227,66,52,102,97,33,
524 25,37,237,34,198,42,46,82,23,13,180,182,138,136,208,210,26,197,201,204,
525 61,93,132,166,29,230,223,155,113,108,14,220,205,185,223,251,190,239,157,
526 115,223,225,93,153,25,83,25,110,74,213,129,104,189,9,213,211,19,97,100,
527 94,19,40,196,203,233,79,213,179,5,10,70,166,227,198,82,152,54,132,128,15,
528 225,180,181,110,45,80,112,107,54,122,122,61,132,184,199,236,16,246,164,
529 201,246,38,70,235,210,2,117,14,45,65,145,43,192,156,10,200,251,192,59,150,
530 92,54,240,79,230,133,43,160,96,120,29,230,6,193,202,139,139,139,196,114,
531 75,172,35,49,240,223,244,11,85,64,159,13,191,139,56,6,68,202,192,158,33,
532 125,100,237,137,83,197,54,107,50,160,0,7,195,221,136,15,43,64,239,96,185,
533 45,214,177,98,164,20,160,106,3,58,114,103,26,46,115,22,227,205,178,64,179,
534 227,188,50,243,19,123,127,193,243,114,176,170,12,168,235,230,44,178,214,
535 11,44,45,163,252,8,211,118,75,46,239,11,197,25,118,14,40,248,97,49,242,
536 189,192,220,50,176,7,136,157,120,30,22,236,68,109,212,246,44,255,181,32,
537 29,78,252,198,90,164,243,192,140,10,208,217,24,41,148,151,203,32,59,192,
538 107,238,187,162,220,149,42,160,96,36,142,27,123,187,208,172,214,99,108,
539 170,96,232,123,156,219,97,123,151,254,88,146,191,218,81,172,158,158,8,183,
540 95,63,136,139,125,76,44,174,18,176,39,136,54,252,178,47,45,137,47,203,87,
541 141,1,5,233,70,50,118,14,211,106,0,162,241,137,149,7,162,15,175,86,75,38,
542 238,133,225,12,253,21,168,61,221,76,142,20,168,113,50,153,205,48,105,4,
543 30,35,125,96,237,137,179,97,57,33,228,40,86,219,181,54,60,223,2,141,5,155,
544 217,12,140,143,167,48,45,172,86,28,42,84,64,109,131,51,81,246,12,98,3,197,
545 59,245,27,208,106,157,171,122,171,21,174,104,64,29,131,9,148,189,0,204,
546 43,220,52,143,113,154,92,252,83,59,220,244,87,173,226,19,84,69,14,161,118,
547 247,183,162,200,81,204,26,74,60,119,3,49,148,151,49,126,199,249,175,109,
548 127,203,47,53,27,208,174,171,211,136,197,79,3,219,170,224,248,25,167,19,
549 140,71,191,170,165,26,249,45,136,69,22,35,159,6,210,19,9,183,17,99,125,
550 241,71,53,132,212,77,124,245,133,74,223,122,185,40,57,7,180,231,218,46,
551 240,135,176,188,159,203,28,78,151,240,190,219,186,214,20,29,173,213,70,
552 193,33,84,128,227,121,250,24,240,30,147,67,221,198,144,190,193,249,207,
553 173,179,101,180,30,194,69,13,40,72,55,144,81,10,216,56,145,208,125,188,
554 255,130,6,157,180,100,243,31,245,20,46,48,160,32,253,42,25,46,99,182,18,
555 113,27,69,143,18,203,166,44,185,38,251,50,132,243,12,168,189,127,62,62,
556 210,135,241,19,145,220,27,214,217,210,255,50,69,243,12,168,227,250,34,188,
557 219,140,217,91,214,213,124,247,255,18,254,55,246,13,52,152,25,83,181,234,
558 122,53,171,37,166,252,118,252,55,50,148,111,19,84,139,201,163,0,0,0,0,73,
559 69,78,68,174,66,96,130};
560 
561 static size_t xml_res_size_10 = 1300;
562 static unsigned char xml_res_file_10[] = {
563 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
564 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
565 72,89,115,0,0,4,86,0,0,4,86,1,47,21,139,83,0,0,0,25,116,69,88,116,83,111,
566 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
567 111,114,103,155,238,60,26,0,0,4,145,73,68,65,84,88,133,197,150,91,108,84,
568 101,20,133,191,125,230,204,76,97,166,247,86,10,233,133,114,177,96,40,208,
569 150,114,49,218,146,8,54,220,195,131,137,90,64,1,83,19,13,26,19,98,34,5,
570 38,133,40,42,151,26,35,137,10,82,18,49,98,171,134,7,124,64,3,148,8,21,83,
571 74,161,177,208,40,134,32,119,66,11,132,118,202,180,51,179,125,152,58,165,
572 117,166,119,116,39,231,225,236,181,207,90,235,172,252,255,57,191,168,42,
573 255,103,153,67,73,38,31,158,136,164,213,158,211,195,132,23,114,170,212,
574 133,127,200,13,200,187,213,41,248,236,7,17,38,135,25,185,132,178,236,97,
575 113,0,99,72,196,75,106,178,241,201,175,16,70,92,165,28,53,167,170,43,231,
576 120,119,104,208,9,200,166,234,69,136,124,13,56,66,192,45,160,107,212,53,
577 173,44,220,243,131,74,64,54,85,191,9,114,32,140,120,13,134,47,75,55,230,
578 134,21,7,144,129,236,2,169,168,176,112,62,189,20,88,19,2,86,148,173,140,
579 148,245,90,148,211,222,43,87,127,13,200,182,58,7,173,158,253,168,44,12,
580 1,95,7,93,174,27,115,15,247,153,175,63,6,164,164,118,20,226,59,8,100,133,
581 128,31,0,219,17,110,119,182,244,26,27,114,43,20,194,138,244,121,17,202,
582 150,218,68,12,239,103,168,97,0,103,59,4,38,2,182,142,145,8,160,248,33,169,
583 47,80,235,222,158,196,97,160,107,160,164,50,2,156,59,17,86,133,128,255,
584 68,141,34,117,101,31,233,19,87,191,215,64,201,233,113,136,126,11,58,165,
585 27,228,67,165,148,168,182,141,250,214,172,214,190,242,245,235,59,32,235,
586 142,62,135,105,223,141,105,139,234,6,213,161,254,213,234,154,126,170,63,
587 124,208,199,4,164,164,210,196,35,219,65,223,0,192,180,5,46,240,0,155,73,
588 146,15,251,178,229,66,85,175,9,200,250,67,41,248,237,21,160,51,130,77,111,
589 27,136,84,97,216,86,171,43,167,97,32,194,65,254,158,18,144,117,199,10,64,
590 247,1,9,33,224,11,152,86,63,166,221,143,82,133,161,59,116,67,110,253,144,
591 25,144,226,202,73,168,172,69,212,130,104,10,126,201,239,54,226,3,57,128,
592 61,98,155,186,102,156,236,175,112,175,6,30,50,146,131,114,16,72,10,52,104,
593 6,41,195,144,82,221,156,119,113,160,194,255,84,143,107,64,138,143,45,4,
594 246,3,14,132,43,168,124,130,175,253,83,125,127,206,189,193,10,247,106,64,
595 214,87,190,134,242,49,112,6,97,7,54,202,213,149,239,29,42,225,176,6,4,132,
596 119,142,190,135,200,19,40,207,232,150,217,199,134,90,180,171,94,121,185,
597 133,115,137,214,96,167,205,50,19,139,222,198,226,191,240,40,133,3,53,187,
598 205,228,76,194,74,148,93,157,77,31,120,9,92,131,169,206,143,85,248,210,
599 234,121,6,128,205,34,20,78,142,15,246,71,56,173,228,165,57,131,247,14,155,
600 193,220,49,81,88,13,233,242,252,130,199,163,153,63,62,26,128,148,104,27,
601 47,102,198,51,38,214,206,11,153,113,68,90,124,224,109,35,53,218,198,146,
602 140,24,0,172,134,240,210,148,120,70,56,58,3,55,198,197,71,12,223,185,32,
603 141,173,115,146,1,136,29,102,242,211,178,241,172,156,154,64,113,222,72,
604 0,142,172,200,160,96,92,20,95,46,77,239,98,192,149,55,138,61,139,71,51,
605 204,106,176,98,74,60,59,231,167,146,149,52,156,162,236,68,22,103,196,128,
606 183,141,215,179,226,40,24,27,48,185,100,66,12,101,75,210,89,51,253,177,
607 78,3,69,211,70,78,60,125,205,29,108,204,74,118,80,117,165,133,15,78,220,
608 100,118,90,20,169,209,118,124,126,88,251,227,21,102,38,59,177,72,215,20,
609 46,52,121,120,50,217,65,126,90,36,245,183,2,63,193,242,250,59,44,237,120,
610 235,249,233,118,246,213,222,0,96,245,212,4,182,85,221,96,85,86,2,102,71,
611 154,198,219,135,46,214,124,83,223,20,36,28,27,27,65,107,187,159,214,118,
612 63,233,177,54,198,198,218,112,123,3,71,121,139,64,162,179,235,198,57,254,
613 215,125,22,101,196,144,28,105,229,247,166,7,0,124,223,112,135,167,211,34,
614 153,59,38,10,85,229,151,139,141,164,56,133,252,209,145,236,61,219,136,187,
615 221,31,72,136,16,167,226,186,155,110,18,135,155,36,56,44,156,186,234,166,
616 238,86,43,9,195,44,68,152,6,247,60,62,110,220,239,250,211,251,249,114,51,
617 133,153,241,156,188,218,18,60,250,220,108,110,167,234,114,51,165,5,41,84,
618 156,191,131,2,133,19,156,92,191,235,102,207,226,209,120,253,202,171,217,
619 137,161,13,212,92,119,227,180,89,248,232,217,84,190,250,173,145,70,183,
620 151,147,87,91,56,188,60,131,221,181,183,187,143,243,71,163,135,166,86,47,
621 199,47,53,119,233,151,159,107,34,57,202,70,69,253,93,12,129,194,204,56,
622 94,254,174,129,153,159,215,241,84,89,3,121,105,78,158,159,20,151,36,172,
623 59,242,10,42,187,254,197,252,40,203,106,7,139,21,84,231,153,136,249,3,126,
624 223,156,255,212,64,155,7,34,172,62,240,214,13,232,80,58,148,245,55,64,124,
625 153,96,137,219,15,113,0,0,0,0,73,69,78,68,174,66,96,130};
626 
627 static size_t xml_res_size_11 = 1478;
628 static unsigned char xml_res_file_11[] = {
629 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
630 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
631 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
632 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
633 46,111,114,103,155,238,60,26,0,0,5,67,73,68,65,84,88,133,189,151,107,76,
634 147,87,24,199,127,231,173,109,81,122,67,141,180,192,40,55,47,36,35,91,156,
635 78,39,226,133,136,155,26,81,163,91,12,110,51,102,126,28,203,220,246,97,
636 51,6,196,17,178,237,139,137,38,155,95,252,176,11,9,155,139,81,54,99,2,198,
637 129,96,230,13,99,220,140,23,16,16,129,146,101,220,90,110,45,109,207,62,
638 148,150,94,177,24,179,127,242,38,237,251,156,115,158,223,121,159,115,206,
639 243,28,33,165,36,30,137,147,109,90,6,135,10,129,29,64,46,8,11,72,203,148,
640 213,6,210,6,220,7,206,147,100,186,44,75,115,156,113,141,251,44,0,81,213,
641 98,97,82,150,33,216,7,232,227,162,5,7,146,106,212,226,152,60,252,154,237,
642 185,0,68,69,67,2,66,119,4,56,4,204,139,211,113,184,198,128,227,200,145,
643 74,89,190,97,34,110,0,81,113,211,140,16,231,128,85,207,233,56,92,215,145,
644 114,167,44,95,217,23,110,80,194,95,108,251,233,222,186,52,163,246,246,11,
645 116,142,70,37,86,21,101,27,239,190,89,221,186,38,220,22,242,5,196,145,38,
646 75,170,78,117,187,245,227,229,230,118,135,228,82,187,157,75,29,118,26,59,
647 71,112,184,60,179,114,154,183,104,46,155,179,13,108,202,52,80,96,213,227,
648 149,146,249,223,220,233,118,123,188,43,131,191,68,0,64,84,52,36,224,164,
649 9,88,113,227,96,46,121,41,70,18,18,18,0,112,123,37,215,186,71,185,212,97,
650 231,151,123,3,220,255,55,106,56,89,111,213,115,224,213,133,108,206,54,96,
651 209,169,67,108,191,63,26,102,123,77,43,192,117,228,200,6,255,154,152,14,
652 129,147,163,192,10,128,198,39,14,156,78,39,19,19,62,71,115,20,193,218,116,
653 29,239,230,45,192,225,242,198,156,245,227,65,39,5,233,186,8,231,0,245,237,
654 195,254,159,171,166,22,55,1,0,81,113,53,5,193,71,254,151,87,186,70,124,
655 76,65,16,18,168,106,182,209,109,119,197,4,232,182,187,168,106,182,17,109,
656 95,213,183,219,131,255,30,18,85,45,150,0,0,206,201,10,36,115,3,0,79,28,
657 120,166,66,227,135,16,192,169,109,86,138,151,154,98,2,20,47,53,241,237,
658 86,43,34,10,88,88,216,230,49,41,203,0,20,113,178,77,139,96,111,176,117,
659 120,194,67,139,109,44,48,115,63,132,70,37,56,179,39,155,45,57,198,168,206,
660 207,236,201,70,163,154,118,239,255,18,97,179,247,73,176,79,156,108,211,
661 42,244,245,20,33,209,133,219,47,119,56,104,31,116,242,225,197,46,92,30,
662 25,128,24,119,123,233,31,119,135,180,85,4,188,151,183,32,196,185,203,35,
663 57,88,219,73,251,160,147,186,199,81,0,64,207,224,80,225,28,144,59,163,89,
664 207,61,24,226,135,187,253,244,218,93,12,140,187,249,126,71,38,118,251,24,
665 187,207,118,113,243,159,80,0,175,132,146,179,237,168,148,44,118,45,75,194,
666 229,145,188,253,235,99,106,31,14,81,215,110,103,52,246,22,222,33,56,220,
667 208,140,148,249,177,90,248,85,148,101,96,96,194,77,75,239,24,204,209,248,
668 158,48,169,21,193,79,187,50,169,254,123,128,218,135,67,207,26,18,224,138,
669 224,139,134,54,144,217,241,180,14,81,12,8,33,32,206,4,11,136,86,5,33,205,
670 179,118,14,224,118,249,158,48,197,239,28,64,90,34,114,193,139,128,152,141,
671 20,164,136,200,80,255,31,132,176,41,8,226,2,200,74,210,198,5,145,110,210,
672 178,41,211,16,39,128,180,41,32,31,68,51,229,167,235,72,49,248,22,217,150,
673 197,70,174,125,144,75,233,235,201,51,66,164,207,147,52,190,191,132,11,37,
674 139,3,39,102,154,65,67,238,194,132,88,189,238,171,40,56,224,5,74,194,45,
675 135,215,90,248,60,223,204,168,219,203,119,91,173,104,84,130,194,76,61,35,
676 147,94,110,244,140,70,140,148,102,212,114,97,111,38,86,163,22,173,70,205,
677 238,220,36,122,28,147,156,222,158,129,71,250,18,92,20,149,41,152,83,235,
678 17,140,132,91,10,51,245,100,152,180,156,120,43,61,228,132,43,91,151,66,
679 166,41,50,28,57,38,13,102,157,38,228,216,62,93,156,65,206,252,152,33,113,
680 144,100,186,172,200,210,28,39,146,154,96,203,203,139,230,146,156,232,75,
681 169,193,137,197,229,145,236,63,223,65,199,80,100,193,219,240,196,193,254,
682 243,29,33,199,182,191,239,234,180,68,244,26,85,104,7,73,181,44,205,113,
683 250,182,161,86,93,142,96,124,122,246,145,196,18,248,164,238,41,23,91,135,
684 35,108,126,93,108,29,230,80,221,211,144,4,6,190,122,98,125,70,72,186,25,
685 67,45,142,193,84,58,150,229,249,189,72,78,248,173,235,173,145,213,183,0,
686 62,123,35,57,176,48,163,41,197,160,225,211,213,201,129,153,7,67,132,133,
687 225,184,191,92,159,62,136,180,28,5,110,105,84,130,53,105,137,33,3,247,58,
688 92,84,255,213,207,151,87,108,140,205,80,27,234,213,10,63,223,27,228,207,
689 238,81,38,189,161,245,196,166,172,0,192,117,228,72,101,96,98,225,69,233,
690 70,107,226,221,31,119,102,44,108,238,26,165,161,211,206,31,157,14,30,246,
691 71,175,1,103,82,162,70,33,255,37,29,27,51,244,108,176,26,120,37,205,200,
692 146,83,143,108,221,195,206,229,81,139,82,191,54,157,190,179,182,177,115,
693 184,198,237,145,169,179,246,58,131,82,12,154,190,229,233,243,223,249,173,
694 100,89,83,240,251,232,23,147,35,77,22,188,158,90,166,138,212,23,160,91,
695 40,170,98,89,89,16,113,77,139,154,140,100,101,129,13,45,5,192,215,193,187,
696 99,214,18,140,35,148,175,208,82,16,205,57,196,115,57,173,184,154,130,115,
697 178,2,193,222,104,165,91,12,199,35,72,106,208,170,203,101,121,126,239,140,
698 77,103,117,61,239,235,41,242,149,112,98,25,18,115,160,150,144,162,207,151,
699 212,228,3,16,231,48,167,214,199,123,61,255,15,248,15,77,215,175,116,59,
700 39,0,0,0,0,73,69,78,68,174,66,96,130};
701 
702 static size_t xml_res_size_12 = 1284;
703 static unsigned char xml_res_file_12[] = {
704 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
705 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
706 72,89,115,0,0,3,177,0,0,3,177,1,245,131,237,73,0,0,0,25,116,69,88,116,83,
707 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
708 46,111,114,103,155,238,60,26,0,0,4,129,73,68,65,84,88,133,197,151,107,108,
709 20,85,20,199,127,103,186,219,37,32,15,151,64,43,72,128,240,8,193,15,154,
710 64,27,136,193,23,2,169,248,8,180,240,129,4,33,53,212,87,154,26,161,88,208,
711 166,79,48,60,67,44,10,129,136,40,106,20,17,98,37,40,2,109,125,68,194,163,
712 168,160,161,126,130,88,232,83,83,75,67,218,238,110,231,248,161,110,59,179,
713 51,179,93,36,134,147,76,50,247,204,153,243,255,159,115,238,61,247,94,81,
714 85,238,164,24,119,20,29,240,221,174,3,41,193,208,34,76,139,70,40,103,42,
715 61,72,2,232,55,229,86,74,32,37,23,38,35,230,34,96,33,48,1,72,165,55,136,
716 22,160,97,24,55,191,171,147,172,251,239,225,207,199,18,112,119,14,147,101,
717 9,17,144,77,181,195,233,98,7,162,43,189,108,70,209,70,37,171,153,37,151,
718 6,114,103,162,108,33,149,66,114,52,60,96,9,164,244,124,6,200,94,68,199,
719 122,217,76,227,42,199,36,143,137,52,12,228,174,1,97,57,133,90,21,85,120,
720 18,144,146,218,193,160,21,8,217,224,157,165,71,57,207,97,89,203,8,58,6,
721 2,175,196,71,54,235,244,47,171,210,123,21,116,117,108,163,39,148,29,207,
722 227,10,142,114,92,114,227,130,119,18,224,53,114,235,197,172,206,140,5,247,
723 36,32,235,106,230,34,60,79,36,4,145,144,243,59,74,153,236,102,191,148,224,
724 39,226,9,126,137,201,164,233,7,108,214,103,199,97,12,89,239,138,21,59,9,
725 165,248,219,187,8,235,175,40,227,251,148,190,228,222,7,8,16,98,159,148,
726 177,140,175,61,129,1,118,178,148,124,205,163,139,228,168,42,140,152,105,
727 90,152,254,139,213,206,153,129,144,110,181,129,3,209,76,140,164,157,147,
728 188,28,23,188,149,187,121,138,237,228,106,190,21,28,192,143,26,251,101,
729 79,173,223,22,176,53,3,178,254,212,72,72,106,194,101,114,78,226,58,95,248,
730 11,184,207,119,205,19,188,158,20,242,116,13,141,50,210,241,237,138,142,
731 165,153,32,40,207,104,209,204,202,168,222,14,36,198,34,212,9,62,155,139,
732 124,36,133,4,35,55,232,2,6,121,172,157,113,52,115,88,242,109,186,110,146,
733 41,215,108,54,177,34,26,242,98,192,131,128,202,188,88,167,126,34,76,164,
734 145,114,125,174,87,17,134,36,77,98,129,255,2,153,84,197,154,219,228,7,125,
735 128,85,188,78,29,19,172,81,206,183,218,196,100,64,198,17,51,41,195,248,
736 248,152,5,253,38,40,249,61,7,200,144,26,207,46,210,193,96,10,52,151,93,
737 100,162,206,45,33,85,246,212,250,53,103,70,216,73,64,53,37,94,68,65,110,
738 176,135,13,60,206,89,194,17,92,203,113,84,231,240,34,5,92,99,180,151,27,
739 161,53,52,26,184,238,36,16,71,102,114,153,253,82,194,189,52,247,233,186,
740 255,109,1,131,124,208,66,144,60,93,205,39,204,247,240,224,46,246,101,40,
741 210,236,102,148,195,17,142,73,158,13,220,74,226,221,72,6,211,245,96,162,
742 224,202,168,228,150,232,32,54,3,245,192,236,232,96,8,157,84,200,22,22,83,
743 237,234,233,15,82,121,133,87,169,10,167,129,38,39,154,207,166,104,253,193,
744 209,136,204,19,209,183,105,92,165,90,94,112,5,55,49,216,69,22,179,244,61,
745 170,52,173,87,233,209,182,157,162,223,88,71,49,147,208,60,2,73,187,150,
746 114,210,183,67,182,49,152,46,87,23,23,153,194,32,237,102,3,239,244,233,
747 154,9,242,126,228,73,26,25,211,215,182,221,241,229,176,117,104,223,11,42,
748 36,112,168,41,253,194,60,206,78,79,32,20,0,234,152,192,78,93,202,103,204,
749 165,59,218,122,45,123,71,140,252,76,170,164,91,75,96,203,64,91,35,83,103,
750 24,191,111,127,73,215,190,217,173,129,81,25,242,35,89,156,114,5,174,102,
751 38,111,179,132,147,154,238,252,24,45,133,157,68,24,49,87,106,78,122,216,
752 170,116,61,146,201,154,175,230,173,10,28,63,190,137,10,49,44,231,205,16,
753 126,62,103,46,59,53,139,223,152,228,74,204,38,214,76,136,22,105,97,90,169,
754 195,196,249,151,72,123,128,12,165,191,133,181,49,148,125,60,205,94,93,68,
755 19,206,141,198,83,250,51,241,19,230,205,141,174,28,109,163,10,9,180,55,
756 113,0,88,2,208,74,176,99,51,203,135,126,168,25,116,18,72,28,216,78,226,
757 12,134,185,76,139,31,113,61,185,244,149,224,70,177,4,9,83,169,240,32,202,
758 105,12,182,13,247,115,68,58,79,44,196,240,239,6,29,115,139,208,93,32,197,
759 4,30,222,98,191,55,184,16,248,187,80,38,26,202,151,10,151,5,182,14,43,215,
760 51,54,163,226,154,17,132,140,183,192,92,158,24,182,158,195,151,180,66,75,
761 31,186,60,144,165,180,191,193,20,53,201,84,131,79,71,148,233,149,184,198,
762 235,191,159,138,161,139,17,227,9,212,28,143,106,10,170,62,160,21,161,17,
763 164,6,53,14,177,113,206,105,141,119,148,182,113,61,72,146,170,242,95,31,
764 138,213,184,157,255,111,233,106,246,127,200,29,191,29,255,3,97,2,5,212,
765 74,24,35,58,0,0,0,0,73,69,78,68,174,66,96,130};
766 
767 static size_t xml_res_size_13 = 4246;
768 static unsigned char xml_res_file_13[] = {
769 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,
770 0,0,195,62,97,203,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
771 72,89,115,0,0,14,225,0,0,14,225,1,42,185,74,121,0,0,0,25,116,69,88,116,
772 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
773 101,46,111,114,103,155,238,60,26,0,0,16,19,73,68,65,84,120,156,237,157,
774 121,124,85,213,181,199,191,59,132,8,4,80,148,50,84,177,224,0,148,65,80,
775 47,90,30,141,19,60,169,15,11,143,62,16,73,2,69,10,18,17,1,193,16,16,238,
776 5,207,85,4,209,32,8,17,153,202,12,2,173,136,34,210,10,10,15,5,202,85,91,
777 193,9,113,194,135,50,137,3,243,144,172,247,199,137,150,33,195,61,211,221,
778 39,185,247,251,249,228,243,185,159,228,236,189,86,178,126,217,123,159,61,
779 172,173,68,132,4,241,75,146,110,7,18,232,37,33,128,56,39,33,128,56,39,33,
780 128,56,39,33,128,56,39,33,128,56,39,33,128,56,39,33,128,56,39,33,128,56,
781 39,33,128,56,39,89,183,3,186,80,70,164,18,80,21,168,12,28,3,14,75,40,112,
782 220,81,165,97,117,49,16,44,172,211,239,124,7,140,83,229,113,45,64,25,145,
783 100,160,81,225,87,195,51,62,215,3,170,1,169,20,45,254,211,192,17,224,16,
784 240,21,240,113,225,215,142,159,62,75,40,112,186,72,163,97,117,21,176,170,
785 208,158,223,217,8,100,18,148,47,203,141,0,148,17,105,6,180,3,218,2,55,99,
786 6,218,109,14,1,235,129,215,128,181,18,10,108,7,32,172,218,0,43,128,154,
787 30,216,116,147,124,32,12,60,74,80,242,1,202,180,0,148,17,105,3,244,4,58,
788 1,181,53,184,176,55,135,185,219,199,170,169,55,37,33,21,53,216,183,194,
789 23,64,6,65,121,235,204,111,150,57,1,40,35,114,37,208,3,200,4,174,212,233,
790 203,72,102,19,86,211,80,248,254,111,184,4,200,34,40,63,156,251,131,50,51,
791 8,84,70,164,1,102,243,149,14,40,157,190,84,228,52,207,169,177,220,195,75,
792 58,221,136,134,195,192,0,130,50,183,184,7,124,47,0,101,68,106,98,142,172,
793 179,128,20,205,238,112,17,135,248,139,202,225,54,182,234,118,165,52,182,
794 2,233,4,101,103,73,15,249,86,0,202,136,164,2,67,128,108,188,25,208,89,166,
795 1,95,179,74,13,230,215,124,174,219,149,146,40,0,158,0,66,4,229,84,105,15,
796 251,78,0,133,175,112,125,129,16,80,71,179,59,63,115,35,219,89,169,134,82,
797 139,131,186,93,41,137,221,64,79,130,178,46,218,2,190,154,9,84,70,164,51,
798 240,1,144,135,143,130,223,133,181,188,174,178,252,30,252,21,64,11,43,193,
799 7,159,180,0,202,136,84,192,108,182,134,232,246,229,92,134,49,143,113,106,
800 138,159,71,250,199,128,33,4,101,154,157,194,218,5,160,140,200,133,152,175,
801 41,191,211,237,203,153,36,147,79,158,26,71,95,86,232,118,165,36,254,5,116,
802 39,40,31,218,173,64,171,0,148,17,185,10,120,9,104,172,211,143,115,169,206,
803 17,150,169,225,220,206,102,221,174,20,135,0,147,129,28,130,114,194,73,69,
804 218,4,160,140,72,59,96,41,80,67,151,15,69,113,57,123,88,165,6,211,140,79,
805 117,187,82,28,251,128,94,4,101,181,27,149,105,25,4,42,35,50,0,88,141,207,
806 130,31,224,67,182,168,94,126,14,254,171,192,53,110,5,31,98,220,2,40,35,
807 82,17,120,6,232,23,75,187,209,208,137,245,44,82,163,168,130,179,21,97,143,
808 56,1,12,7,38,17,116,119,238,62,102,107,1,202,136,40,96,25,240,63,49,49,
809 104,129,7,89,196,147,106,18,73,20,232,118,165,40,62,196,156,209,251,167,
810 23,149,199,178,5,24,131,207,130,95,129,2,38,171,9,244,103,185,110,87,138,
811 99,58,240,32,65,57,234,149,129,152,140,1,148,17,233,130,57,159,239,27,170,
812 114,148,149,106,136,47,131,127,144,234,252,65,38,160,100,235,58,47,131,
813 15,49,232,2,148,17,105,9,188,9,84,241,212,144,5,46,101,63,171,212,32,90,
814 240,137,110,87,206,227,13,174,39,83,194,236,230,23,96,78,242,164,73,40,
815 240,182,87,246,60,21,128,50,34,181,48,87,165,46,247,204,136,69,90,178,131,
816 151,213,96,46,101,191,110,87,206,226,52,21,8,73,22,227,233,73,193,217,13,
817 243,110,32,32,161,192,30,47,236,122,38,0,101,68,82,128,117,64,27,79,12,
818 216,160,3,27,89,162,70,82,21,79,91,85,203,124,202,101,164,203,163,252,131,
819 166,197,61,178,5,184,197,241,166,213,34,240,114,12,240,44,62,10,254,0,150,
820 242,162,26,234,187,224,207,163,3,215,202,194,146,130,15,112,35,48,195,11,
821 251,158,180,0,202,136,12,4,38,185,94,177,13,146,40,32,87,77,100,16,75,116,
822 187,114,22,63,146,74,150,140,96,49,237,173,20,203,145,80,224,9,55,253,112,
823 93,0,202,136,92,134,185,141,90,251,222,248,84,142,177,72,141,162,35,27,
824 116,187,114,22,155,104,78,186,60,198,23,212,181,90,244,36,208,88,66,1,215,
825 118,164,120,209,5,60,130,15,130,95,151,3,172,87,253,124,21,252,124,146,
826 8,211,135,52,153,105,39,248,96,110,137,11,187,233,147,171,45,128,50,34,
827 77,129,247,208,188,209,164,57,59,89,165,6,83,143,189,58,221,56,139,93,212,
828 33,83,12,254,151,107,157,86,37,192,117,18,10,184,50,51,232,118,160,198,
829 121,80,167,37,218,179,137,141,170,143,175,130,191,140,118,180,144,69,110,
830 4,31,204,29,209,227,220,168,8,92,108,1,148,17,185,9,243,212,140,54,250,
831 241,87,166,168,39,72,38,95,167,27,63,115,132,202,12,148,135,152,77,71,47,
832 170,111,43,161,128,165,237,95,69,225,230,127,171,171,163,83,43,40,132,9,
833 106,18,211,212,227,190,9,254,219,252,154,235,100,129,87,193,7,24,95,184,
834 192,230,8,87,4,80,56,215,127,163,27,117,89,165,50,39,88,166,134,243,16,
835 11,116,152,63,15,65,49,129,30,180,150,217,236,240,118,2,52,0,116,117,90,
836 137,227,46,160,112,27,247,7,192,213,78,157,177,74,109,14,178,82,13,225,
837 6,222,143,181,233,34,249,134,154,244,148,71,120,141,27,98,101,242,19,160,
838 73,177,39,150,163,192,141,22,224,79,104,8,126,19,62,103,179,234,229,155,
839 224,191,68,26,215,200,226,88,6,31,204,191,123,31,39,21,184,33,128,254,46,
840 212,97,137,182,108,229,45,213,155,250,124,19,107,211,231,113,156,20,6,200,
841 48,58,74,46,7,184,72,135,11,142,254,254,142,186,0,101,68,174,193,220,154,
842 28,51,122,179,146,105,234,113,42,98,187,213,115,141,237,92,73,119,121,140,
843 237,122,15,41,131,57,47,240,174,157,130,78,91,128,158,14,203,71,141,66,
844 120,76,229,49,75,133,125,17,252,41,220,69,43,153,231,135,224,3,244,178,
845 91,208,118,11,80,120,154,231,43,176,55,167,105,133,74,156,100,142,26,67,
846 55,254,238,181,169,168,200,39,41,102,205,189,160,88,192,29,132,36,139,99,
847 92,80,220,99,7,128,95,74,40,80,234,97,208,115,113,178,39,240,86,98,16,252,
848 154,124,207,139,106,40,255,193,123,94,155,138,154,10,20,80,59,6,231,4,191,
849 164,46,89,50,130,87,105,93,218,163,53,129,246,192,203,86,109,56,233,2,254,
850 211,65,217,168,104,196,151,108,86,247,248,42,248,177,160,128,36,158,161,
851 27,205,100,73,52,193,255,9,91,241,112,210,2,220,230,160,108,169,220,204,
852 59,188,160,178,169,193,143,94,154,241,29,31,208,128,62,18,100,19,205,173,
853 22,181,21,15,91,99,128,194,3,157,223,2,21,236,24,45,141,30,188,194,76,245,
854 40,41,88,238,210,202,44,167,72,230,113,122,241,152,244,230,36,182,242,77,
855 9,80,91,66,1,75,155,29,237,118,1,55,227,81,240,199,168,233,204,83,163,227,
856 42,248,91,104,198,117,178,128,209,210,207,110,240,193,92,37,188,213,106,
857 33,187,93,192,77,54,203,149,72,123,54,81,159,111,152,203,157,94,84,79,11,
858 118,208,146,29,158,212,109,135,35,84,102,148,220,199,100,186,157,187,19,
859 216,46,55,97,30,184,141,26,187,2,104,102,179,92,137,172,161,53,107,36,234,
860 65,143,37,250,179,156,238,106,141,39,117,219,225,111,252,134,126,242,176,
861 221,157,65,197,209,196,106,1,187,2,240,213,121,254,146,168,202,81,166,171,
862 177,116,199,31,193,63,72,117,134,200,131,94,181,114,141,172,22,176,60,8,
863 84,70,164,10,102,254,57,173,185,250,162,161,9,159,179,92,229,248,38,171,
864 215,82,218,241,128,100,179,143,139,189,52,83,77,66,129,195,209,62,108,167,
865 5,104,68,25,8,126,58,175,50,93,141,37,149,99,186,93,97,55,191,160,191,12,
866 103,165,55,67,167,115,105,4,68,125,148,204,174,0,124,75,10,167,120,90,229,
867 114,159,15,14,125,10,138,233,116,102,152,12,228,71,82,99,101,246,106,60,
868 22,128,167,237,151,19,234,243,13,203,84,14,1,108,231,76,114,141,29,92,78,
869 95,25,197,6,119,54,130,90,225,18,43,15,219,121,247,168,106,163,140,231,
870 116,96,35,111,171,76,237,193,63,77,5,198,209,139,22,178,88,71,240,193,98,
871 86,85,59,45,128,175,4,80,129,2,12,53,141,17,204,209,158,203,239,29,26,243,
872 39,9,242,79,189,119,70,84,183,242,112,153,22,64,109,14,178,88,141,228,86,
873 34,90,253,56,198,5,140,145,123,121,138,76,242,245,39,95,141,143,22,32,141,
874 119,121,94,61,76,93,14,104,245,227,13,174,167,175,140,100,39,245,180,250,
875 113,6,158,183,0,218,201,102,62,99,213,84,173,103,0,126,160,42,217,50,136,
876 153,116,66,252,255,86,92,44,118,4,16,245,36,131,219,92,200,97,230,170,49,
877 116,210,123,0,137,21,220,194,253,50,140,175,205,52,46,126,195,210,250,121,
878 153,17,192,181,124,204,114,149,195,21,236,214,97,30,128,61,92,194,3,146,
879 205,114,218,106,243,33,10,14,89,121,216,206,136,37,230,2,232,195,10,222,
880 82,189,181,6,255,207,252,158,38,178,212,239,193,135,242,212,2,84,225,56,
881 121,106,60,127,180,190,213,205,53,62,227,82,238,149,145,172,165,149,54,
882 31,44,98,169,5,176,35,128,152,220,154,208,144,93,44,87,57,52,167,196,43,
883 111,60,35,159,36,38,209,157,160,100,113,148,74,90,124,176,201,183,86,30,
884 182,35,128,143,109,148,177,68,23,214,50,91,25,84,211,148,208,233,61,174,
885 166,143,140,98,171,245,229,117,63,96,41,249,161,93,1,8,30,172,8,86,228,
886 52,19,212,36,109,9,157,78,144,194,163,210,155,241,252,145,83,101,243,13,
887 25,44,254,131,218,221,20,250,5,240,43,203,5,75,224,50,246,177,84,13,167,
888 53,219,220,172,54,106,222,164,5,125,100,20,31,81,95,139,125,151,248,90,
889 66,129,75,173,20,176,59,111,249,145,205,114,69,114,59,155,121,87,101,104,
890 9,254,33,170,48,64,134,145,38,51,202,122,240,193,70,247,108,87,0,219,109,
891 150,59,199,120,1,163,153,193,106,53,136,154,124,239,70,149,150,88,197,111,
892 105,42,75,153,74,215,50,61,155,119,6,31,88,45,96,183,163,219,0,12,181,89,
893 22,48,143,124,45,84,65,45,247,242,236,167,6,131,101,8,139,252,117,79,149,
894 27,88,206,137,103,87,0,235,49,175,34,183,117,54,224,55,108,99,153,26,206,
895 101,236,179,105,222,62,11,249,29,131,101,168,174,179,252,94,34,192,235,
896 86,11,217,234,2,36,20,248,1,176,117,30,125,16,75,216,160,238,141,121,240,
897 119,81,135,255,146,73,100,74,184,60,6,31,224,125,171,167,130,192,217,106,
898 224,58,204,68,69,81,81,141,163,204,82,97,186,242,154,3,147,214,41,32,137,
899 60,186,48,66,238,231,176,127,174,44,240,2,91,41,227,156,236,94,136,250,
900 176,126,115,118,18,81,61,98,30,252,15,105,64,154,204,224,1,201,46,239,193,
901 7,11,241,56,19,39,2,120,29,74,79,210,211,147,85,108,86,247,208,144,93,14,
902 76,89,227,20,201,132,233,67,75,89,200,91,92,19,51,187,26,57,0,246,78,190,
903 56,205,17,244,36,197,188,13,84,226,36,147,213,132,152,95,189,122,146,138,
904 76,160,7,219,197,219,212,45,255,160,41,159,97,105,206,197,75,38,75,40,48,
905 200,78,65,167,243,157,243,40,66,0,87,176,155,229,42,135,107,189,95,54,56,
906 143,20,78,49,146,217,158,28,93,41,32,137,23,184,133,92,201,240,83,240,1,
907 230,216,45,232,70,162,200,127,193,191,219,217,78,172,103,142,122,132,139,
908 172,173,74,250,154,195,84,97,54,29,153,36,119,251,45,240,0,219,36,20,176,
909 221,207,185,177,226,145,7,76,75,38,159,177,106,42,217,204,119,161,74,127,
910 240,127,212,226,25,233,198,116,58,243,189,181,205,182,177,36,207,73,97,
911 55,4,48,171,30,123,115,22,170,96,131,52,123,83,3,190,227,29,26,147,43,25,
912 44,165,157,223,87,5,63,1,102,58,169,192,241,111,39,170,85,218,113,82,46,
913 174,196,73,167,85,105,69,80,188,204,111,201,149,12,222,224,122,221,238,
914 68,203,40,39,121,130,193,137,0,194,74,97,94,104,28,174,196,73,79,210,197,
915 196,130,99,92,192,92,238,100,162,164,123,157,221,219,109,34,152,119,49,
916 59,194,158,0,194,170,6,48,31,232,224,212,1,93,236,225,18,166,74,87,158,
917 165,11,223,114,161,110,119,236,144,35,161,128,227,179,112,246,222,2,194,
918 170,53,69,108,8,25,40,15,101,239,167,198,117,209,86,51,68,45,164,149,245,
919 21,76,71,108,227,42,114,37,131,69,180,119,146,144,73,55,107,36,20,112,101,
920 41,83,203,165,81,201,228,243,156,26,75,111,86,186,102,187,52,214,208,154,
921 167,36,131,191,235,185,215,194,77,92,189,52,202,139,123,3,103,1,189,139,
922 251,121,53,142,178,76,13,167,61,155,92,181,91,20,39,72,97,1,119,48,81,210,
923 121,159,43,60,183,23,35,22,74,40,144,233,86,101,94,188,227,140,6,186,83,
924 196,221,129,191,100,63,171,212,96,207,83,181,29,224,34,242,232,194,84,233,
925 234,117,62,158,88,115,18,8,186,89,97,204,174,142,109,202,103,172,86,3,61,
926 189,206,237,35,234,51,81,210,153,71,7,142,147,226,153,29,141,248,255,234,
927 216,159,43,62,163,43,184,149,8,47,168,108,46,244,232,80,209,58,90,145,43,
928 233,188,66,155,242,178,183,175,40,22,72,40,208,195,237,74,189,156,230,186,
929 15,104,148,201,234,54,179,84,216,245,212,175,167,72,102,9,183,147,43,25,
930 186,51,114,196,130,45,64,95,47,42,246,172,5,0,216,23,190,120,108,45,190,
931 27,225,102,157,223,81,157,231,248,3,207,200,93,126,61,158,237,54,187,129,
932 128,132,2,123,188,168,220,27,1,132,85,50,230,34,133,107,170,221,73,61,158,
933 150,238,204,225,78,142,232,191,155,58,86,28,3,210,36,20,136,58,237,155,
934 85,220,239,2,194,170,42,102,194,226,59,220,168,110,35,45,121,74,50,88,201,
935 77,110,37,84,46,75,220,227,101,240,193,109,1,132,85,29,96,21,16,245,108,
936 96,81,156,166,2,203,105,75,174,100,148,213,3,154,110,16,150,80,224,121,
937 175,141,184,39,128,176,106,2,188,130,131,51,131,63,146,202,12,58,51,89,
938 186,177,139,58,174,185,86,6,249,43,230,124,138,231,184,35,128,176,186,25,
939 88,1,246,54,220,127,73,93,38,201,221,204,228,191,57,84,254,119,239,150,
940 198,115,192,3,110,44,244,68,131,115,1,132,85,119,204,61,105,150,103,94,
941 182,208,140,92,201,224,47,220,230,135,252,122,186,57,13,60,40,161,192,148,
942 88,26,117,38,128,176,26,14,140,197,218,22,204,2,96,197,227,244,218,240,
943 176,220,63,26,168,225,200,135,242,193,119,192,93,18,10,196,246,224,4,246,
944 151,131,43,0,83,128,44,11,165,14,3,127,6,158,38,40,159,1,40,35,114,21,240,
945 18,101,232,2,10,15,248,8,248,189,132,2,90,114,225,88,23,64,88,165,2,207,
946 19,253,102,144,221,192,100,96,58,65,57,239,12,120,225,13,100,75,160,252,
947 29,213,141,130,87,129,187,11,207,90,106,193,154,0,194,170,54,230,237,148,
948 209,156,9,124,7,200,5,150,18,148,18,231,129,11,175,161,125,2,24,18,189,
949 51,101,158,92,96,152,132,2,250,210,157,98,69,0,97,213,24,88,13,37,166,209,
950 16,76,129,228,18,148,55,44,59,99,68,58,3,227,49,47,61,40,175,236,196,12,
951 252,11,186,29,129,104,5,16,86,105,192,139,20,63,96,59,6,204,197,236,223,
952 29,29,7,82,70,36,25,115,10,57,4,229,106,50,96,47,96,0,51,236,92,242,236,
953 21,165,11,32,172,186,97,6,183,168,171,171,247,0,83,129,103,9,138,165,252,
954 116,165,58,102,68,82,49,187,132,108,44,166,64,247,25,135,129,39,129,167,
955 172,92,230,20,43,74,22,64,88,101,99,54,201,231,190,230,109,3,38,2,139,8,
956 202,9,207,188,3,148,17,169,137,185,11,38,11,27,115,13,26,57,5,76,7,12,9,
957 5,98,159,10,37,74,138,22,128,249,154,55,25,232,127,206,79,214,96,246,239,
958 127,243,222,181,179,81,70,164,1,16,6,210,241,247,173,101,130,185,24,54,
959 82,66,129,79,117,59,83,26,231,11,32,172,170,0,139,129,142,133,223,57,1,
960 44,196,12,252,251,49,245,174,8,148,17,185,18,232,1,100,2,222,158,1,183,
961 198,231,192,2,96,190,132,2,150,178,117,234,228,108,1,132,85,45,204,137,
962 153,27,48,147,14,228,1,121,4,197,187,141,124,14,80,70,164,13,208,19,232,
963 4,212,214,224,194,94,204,193,241,124,224,205,88,205,223,187,201,191,5,16,
964 86,13,49,95,243,78,98,246,239,243,9,138,254,91,23,163,68,25,145,102,64,
965 59,160,45,230,237,230,94,12,28,15,97,102,72,123,13,88,43,161,128,43,249,
966 18,117,98,10,32,172,218,0,131,48,71,251,175,16,244,112,159,88,12,40,124,
967 149,108,84,248,213,240,140,207,245,48,133,145,74,209,235,32,167,129,35,
968 152,129,254,10,51,243,230,199,192,142,159,62,59,61,140,233,55,148,24,84,
969 6,126,69,80,92,77,255,234,119,148,17,169,132,121,1,86,101,204,121,140,195,
970 18,10,28,215,235,85,236,241,116,83,104,2,255,19,247,139,240,241,78,66,0,
971 113,78,66,0,113,78,66,0,113,78,66,0,113,78,66,0,113,78,66,0,113,78,66,0,
972 113,78,66,0,113,78,66,0,113,206,255,3,145,115,236,65,132,111,52,203,0,0,
973 0,0,73,69,78,68,174,66,96,130};
974 
975 static size_t xml_res_size_14 = 629;
976 static unsigned char xml_res_file_14[] = {
977 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,
978 0,31,243,255,97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
979 72,89,115,0,0,1,220,0,0,1,220,1,5,161,33,96,0,0,0,25,116,69,88,116,83,111,
980 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
981 111,114,103,155,238,60,26,0,0,1,242,73,68,65,84,56,141,165,147,77,72,84,
982 97,24,133,159,119,186,54,149,37,18,41,150,244,67,196,40,25,20,149,198,4,
983 81,230,162,69,5,133,171,104,149,43,9,23,206,40,69,53,57,78,152,68,145,182,
984 137,114,102,33,8,133,68,20,129,171,22,45,218,84,243,27,181,233,103,163,
985 130,69,24,58,57,193,224,204,120,223,22,54,247,50,215,217,249,237,190,195,
986 57,231,61,231,251,120,69,85,89,205,49,202,129,18,78,84,240,115,105,63,178,
987 166,25,81,183,65,33,150,230,228,209,74,205,214,151,16,93,188,89,97,32,161,
988 228,25,68,35,136,171,14,148,117,154,99,76,130,84,146,5,177,104,121,32,192,
989 18,19,37,6,114,43,126,7,225,106,241,94,195,60,175,164,7,47,159,45,206,12,
990 53,153,122,102,91,185,169,137,229,16,150,56,121,10,108,113,3,83,188,151,
991 75,37,226,8,231,240,232,139,77,66,236,144,221,2,16,16,48,35,69,240,56,73,
992 222,73,7,187,153,1,96,145,181,248,241,49,168,29,212,50,79,133,22,238,75,
993 232,99,181,157,96,32,238,1,182,3,120,152,198,207,19,162,52,241,155,106,
994 0,220,228,24,98,152,148,92,164,149,56,121,140,141,136,121,196,54,48,105,
995 41,78,255,198,14,218,185,203,39,221,195,22,210,86,252,151,156,96,175,62,
996 99,148,179,255,17,109,129,50,223,184,141,89,198,229,6,199,72,1,240,139,
997 205,116,113,133,231,218,230,164,98,27,184,136,98,66,27,49,158,74,128,90,
998 230,0,24,227,52,62,245,51,71,85,25,169,68,173,10,253,129,137,239,3,60,250,
999 243,90,186,44,113,134,13,52,48,197,32,15,105,100,210,169,254,139,186,62,
1000 88,6,193,225,144,123,90,183,246,134,57,191,220,14,225,45,7,185,206,101,
1001 58,185,198,23,118,57,134,211,163,193,3,105,187,194,2,139,35,114,123,95,
1002 30,163,240,152,118,227,129,94,224,43,59,203,118,70,25,215,190,195,97,203,
1003 75,135,88,79,134,123,8,63,48,24,145,92,194,139,152,17,160,206,33,93,0,237,
1004 214,190,230,209,146,48,218,143,7,152,36,168,57,11,116,44,19,166,70,169,
1005 42,164,212,231,205,174,120,202,213,174,243,63,218,64,171,61,237,173,51,
1006 184,0,0,0,0,73,69,78,68,174,66,96,130};
1007 
1008 static size_t xml_res_size_15 = 8746;
1009 static unsigned char xml_res_file_15[] = {
1010 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0,
1011 92,114,168,102,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,
1012 89,115,0,0,29,195,0,0,29,195,1,143,57,51,30,0,0,0,25,116,69,88,116,83,111,
1013 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
1014 111,114,103,155,238,60,26,0,0,32,0,73,68,65,84,120,156,237,221,119,156,
1015 21,213,253,255,241,215,89,122,85,65,20,137,198,96,137,104,84,44,87,69,68,
1016 141,68,163,81,137,141,208,33,248,165,4,27,8,168,128,112,47,113,174,216,
1017 34,75,81,64,5,73,104,34,136,10,9,98,204,207,24,34,134,162,99,37,177,43,
1018 26,18,107,0,165,10,46,123,126,127,204,34,11,46,176,229,206,124,206,220,
1019 249,60,31,15,30,88,118,231,188,197,251,249,236,153,118,142,177,214,162,
1020 148,74,166,2,233,0,74,41,57,218,0,148,74,48,109,0,74,37,152,54,0,165,18,
1021 76,27,128,82,9,166,13,64,169,4,211,6,160,84,130,105,3,80,42,193,180,1,40,
1022 149,96,218,0,148,74,48,109,0,74,37,152,54,0,165,18,76,27,128,82,9,166,13,
1023 64,169,4,211,6,160,84,130,105,3,80,42,193,180,1,40,149,96,218,0,148,74,
1024 48,109,0,74,37,152,54,0,165,18,76,27,128,82,9,86,93,58,128,82,123,149,53,
1025 77,129,166,210,49,242,208,58,210,246,99,109,0,9,98,60,191,0,168,15,52,40,
1026 249,181,227,175,1,54,0,27,75,126,223,0,108,180,153,84,177,68,206,239,100,
1027 205,249,192,60,96,63,209,28,249,231,255,1,61,0,140,238,11,16,127,198,243,
1028 107,0,71,2,199,0,45,74,126,63,2,104,200,206,98,111,0,212,173,224,161,55,
1029 179,179,33,108,0,214,3,31,2,239,148,252,122,27,248,192,102,82,223,86,253,
1030 191,98,55,89,211,11,120,0,157,165,230,210,54,96,56,48,154,116,80,248,218,
1031 0,98,196,120,126,125,160,37,59,139,188,116,177,75,21,74,17,176,138,160,
1032 25,148,110,12,175,219,76,106,67,133,143,150,53,6,24,5,12,203,97,70,5,239,
1033 2,157,73,219,87,74,255,67,109,0,14,51,158,95,27,104,13,156,7,180,5,78,39,
1034 62,63,17,139,0,31,120,174,228,215,82,155,73,109,217,235,119,100,77,109,
1035 96,26,208,33,244,116,201,50,21,232,79,218,110,218,253,95,104,3,112,72,201,
1036 84,254,12,118,22,252,153,64,45,209,80,185,179,21,88,206,206,134,176,98,
1037 151,83,135,172,105,2,44,32,248,111,86,185,241,21,208,151,180,125,108,79,
1038 95,160,13,64,152,241,252,70,64,71,224,50,160,13,80,79,54,81,100,54,1,47,
1039 0,11,158,54,253,95,190,136,101,179,9,78,101,84,110,44,1,186,145,182,255,
1040 222,219,23,105,3,16,96,60,191,38,112,9,208,189,228,247,154,178,137,228,
1041 252,148,151,121,194,220,204,1,84,252,114,129,42,211,118,224,54,224,14,210,
1042 118,251,190,190,56,46,231,147,121,193,120,126,43,130,219,47,29,129,70,194,
1043 113,196,245,224,41,38,155,81,212,36,247,55,17,18,234,35,160,43,105,187,
1044 180,188,223,160,13,32,100,198,243,155,19,252,164,239,6,28,45,28,199,25,
1045 183,153,7,201,48,69,58,70,62,153,13,92,67,218,126,93,145,111,210,6,16,18,
1046 227,249,199,19,220,115,237,128,62,114,253,157,154,124,203,84,227,209,149,
1047 63,75,71,201,23,27,129,235,72,219,233,149,249,102,109,0,57,102,60,255,84,
1048 96,4,193,69,61,35,28,199,41,141,88,207,124,115,19,103,243,170,116,148,124,
1049 241,18,208,133,180,125,191,178,7,208,6,144,35,198,243,207,34,40,252,139,
1050 164,179,184,232,40,86,179,200,12,224,104,86,75,71,201,7,197,192,61,64,134,
1051 180,173,210,5,20,109,0,85,100,60,255,103,4,133,255,83,225,40,206,106,195,
1052 107,204,55,55,209,152,10,157,158,170,178,253,23,232,65,218,62,151,139,131,
1053 105,3,168,36,227,249,41,96,28,193,147,122,106,15,58,243,12,191,55,30,181,
1054 216,38,29,37,31,204,7,122,147,182,107,114,117,64,109,0,21,100,60,255,0,
1055 224,14,160,47,122,113,111,175,70,240,48,158,121,16,131,62,107,82,69,91,
1056 128,65,164,237,3,185,62,176,54,128,114,50,158,111,128,158,192,221,64,19,
1057 217,52,110,171,65,17,15,153,81,244,100,161,116,148,124,240,6,193,75,60,
1058 111,134,113,112,109,0,229,96,60,191,37,48,17,157,238,239,211,254,108,224,
1059 9,115,11,231,225,75,71,201,7,227,129,91,72,219,173,97,13,160,13,96,47,140,
1060 231,55,4,60,224,122,160,154,112,28,231,53,231,19,22,153,1,180,224,35,233,
1061 40,113,247,5,112,53,105,187,40,236,129,180,1,236,129,241,252,43,129,9,232,
1062 114,84,229,210,138,149,252,209,12,166,9,235,164,163,196,221,51,192,175,
1063 73,219,207,163,24,76,27,192,110,140,231,215,2,70,3,215,73,103,137,139,95,
1064 241,44,211,205,72,106,235,149,254,170,216,70,176,8,202,152,29,171,245,68,
1065 65,27,64,41,198,243,143,4,230,0,167,74,103,137,139,33,76,227,78,51,65,175,
1066 244,87,205,59,4,23,250,34,127,68,82,27,64,9,227,249,237,129,41,232,2,148,
1067 229,82,157,237,76,50,119,209,155,249,210,81,226,110,50,112,35,105,187,89,
1068 98,240,196,55,0,157,242,87,92,67,54,49,207,12,225,2,86,72,71,137,179,117,
1069 64,31,210,246,113,201,16,137,110,0,58,229,175,184,195,249,148,167,204,141,
1070 252,132,15,165,163,196,217,223,129,238,164,173,248,139,17,137,125,146,205,
1071 120,126,59,224,101,180,248,203,45,197,91,44,55,87,107,241,87,94,17,193,
1072 123,35,109,93,40,126,72,232,12,192,120,126,111,130,53,231,245,222,126,57,
1073 93,206,98,102,153,52,117,249,70,58,74,92,173,34,120,117,119,185,116,144,
1074 210,18,55,3,48,158,63,156,224,194,139,22,127,57,13,98,22,143,155,33,90,
1075 252,149,55,11,56,201,181,226,135,4,205,0,74,182,197,26,71,240,84,159,42,
1076 135,106,20,115,159,249,29,215,48,79,58,74,92,109,0,174,37,109,103,74,7,
1077 217,147,68,52,128,146,85,120,103,160,27,78,148,91,3,54,51,199,12,227,23,
1078 148,123,125,73,181,171,21,4,83,126,167,47,152,228,253,41,128,241,252,6,
1079 192,34,180,248,203,237,80,190,96,137,233,173,197,95,57,197,4,175,139,183,
1080 113,189,248,33,207,103,0,198,243,15,2,158,6,78,145,206,18,23,39,243,14,
1081 11,205,64,154,241,165,116,148,56,250,15,193,237,189,197,210,65,202,43,111,
1082 103,0,37,197,255,2,90,252,229,118,41,75,88,98,250,104,241,87,206,147,64,
1083 203,56,21,63,228,233,12,160,100,218,255,52,186,14,127,185,221,192,28,198,
1084 152,66,170,81,44,29,37,110,54,3,3,73,219,135,164,131,84,70,222,53,128,146,
1085 71,123,231,163,63,249,203,165,128,98,198,152,49,244,231,81,233,40,113,244,
1086 26,193,133,190,183,164,131,84,86,94,53,128,146,91,125,51,9,118,214,85,251,
1087 80,143,45,204,54,195,105,199,18,233,40,177,98,49,88,204,184,2,138,135,132,
1088 185,90,79,20,242,237,26,192,4,160,189,116,136,56,56,132,255,241,188,233,
1089 171,197,95,65,159,211,136,139,237,56,170,217,21,117,227,94,252,144,71,13,
1090 192,120,254,111,129,126,210,57,226,224,68,222,99,133,233,201,41,188,45,
1091 29,37,86,158,166,53,39,218,217,252,153,51,1,250,24,207,207,74,103,170,170,
1092 188,216,30,220,120,254,181,4,63,253,213,62,92,196,50,230,154,161,52,64,
1093 228,245,243,88,218,74,77,134,218,235,25,71,39,236,247,119,123,187,222,102,
1094 82,177,253,236,197,190,1,24,207,191,10,152,75,30,205,102,194,210,143,199,
1095 185,223,220,163,87,250,43,224,45,154,211,217,142,226,245,61,223,80,42,6,
1096 58,216,76,74,244,189,254,202,138,117,3,48,158,255,99,130,87,122,235,75,
1097 103,113,89,1,197,220,109,238,227,38,156,125,36,221,73,15,114,37,131,236,
1098 64,54,83,123,95,95,186,17,56,213,102,82,239,70,16,43,167,98,219,0,140,231,
1099 215,6,150,3,45,165,179,184,172,14,91,153,105,210,92,201,223,164,163,196,
1100 198,90,26,210,219,166,121,178,98,219,61,190,14,180,178,153,84,172,94,153,
1101 140,243,180,121,12,90,252,123,117,48,107,89,108,126,163,197,95,1,139,57,
1102 149,150,118,118,69,139,31,130,207,226,152,220,39,10,87,44,103,0,198,243,
1103 59,130,62,185,178,55,199,177,138,69,102,0,135,243,169,116,148,88,40,162,
1104 26,25,219,143,187,233,65,113,213,126,46,118,178,153,212,156,92,229,10,91,
1105 236,26,128,241,252,163,8,206,251,27,74,103,113,213,249,188,200,60,51,132,
1106 253,216,40,29,37,22,62,224,80,186,216,219,121,145,159,228,226,112,235,9,
1107 174,7,188,159,139,131,133,45,86,167,0,37,143,249,206,69,139,127,143,122,
1108 177,128,69,102,128,22,127,57,205,224,98,78,182,179,114,85,252,16,124,54,
1109 231,150,124,86,157,23,171,6,64,176,124,247,201,210,33,92,100,176,220,97,
1110 38,48,197,220,78,13,138,164,227,56,111,61,245,232,106,179,244,176,183,177,
1111 129,186,185,62,252,201,4,159,85,231,197,230,20,160,100,175,190,88,222,107,
1112 13,91,109,182,49,205,140,164,3,207,74,71,137,133,229,156,64,23,123,59,171,
1113 104,22,246,80,87,217,76,234,137,176,7,169,138,88,52,128,146,93,122,223,
1114 65,55,234,252,158,38,172,99,129,25,204,153,172,148,142,226,188,98,10,184,
1115 131,171,185,205,246,161,40,154,53,97,63,3,142,177,153,212,250,40,6,171,
1116 140,184,156,2,100,209,226,255,158,99,248,152,229,230,106,45,254,114,88,
1117 205,193,156,103,31,32,109,251,69,85,252,16,124,102,157,126,95,192,249,25,
1118 128,241,252,147,0,31,93,198,123,23,63,229,101,158,48,183,112,0,206,254,
1119 112,113,198,227,180,165,143,29,206,58,153,107,199,219,129,148,205,164,94,
1120 147,24,124,95,156,110,0,198,243,13,176,20,104,37,157,197,37,61,120,138,
1121 201,102,20,53,249,86,58,138,211,54,83,155,1,118,48,83,184,92,58,202,114,
1122 160,181,205,164,156,43,54,215,79,1,122,161,197,191,139,219,204,131,76,51,
1123 191,213,226,223,135,87,57,134,83,236,76,23,138,31,130,207,112,47,233,16,
1124 101,113,118,6,96,60,191,49,193,133,191,198,210,89,92,80,147,111,153,106,
1125 60,186,242,103,233,40,78,179,24,198,208,133,97,246,58,182,81,67,58,78,105,
1126 107,8,46,8,174,145,14,82,154,203,75,130,221,133,22,63,0,141,88,207,124,
1127 115,19,103,243,170,116,20,167,125,70,99,126,109,127,203,95,220,156,52,54,
1128 38,248,76,247,145,14,82,154,147,51,0,227,249,173,8,206,253,191,183,250,
1129 66,210,28,197,106,22,153,1,28,141,19,155,201,58,107,17,103,209,211,142,
1130 228,75,14,144,142,178,55,150,224,90,128,51,123,4,186,122,13,96,28,90,252,
1131 180,225,53,150,155,171,181,248,247,98,43,53,25,96,7,115,137,29,235,122,
1132 241,67,240,153,30,39,29,162,52,231,26,128,241,252,159,3,167,75,231,144,
1133 214,153,103,120,214,92,71,99,190,150,142,226,172,55,105,206,233,246,15,
1134 140,167,147,116,148,138,56,189,228,51,238,4,231,26,0,48,66,58,128,180,17,
1135 60,204,44,147,166,22,219,164,163,56,107,18,237,73,217,25,188,17,207,189,
1136 95,156,249,140,59,117,13,192,120,254,217,192,243,210,57,164,212,160,136,
1137 135,204,40,122,178,80,58,138,179,214,176,31,189,108,154,5,156,43,29,165,
1138 170,206,177,153,148,248,154,236,174,205,0,156,233,140,81,219,159,13,60,
1139 99,110,208,226,223,139,231,56,141,19,237,236,124,40,126,112,228,179,238,
1140 204,12,192,120,254,105,192,139,210,57,36,52,231,19,22,153,1,180,224,35,
1141 233,40,78,250,150,234,164,109,63,126,71,247,170,174,214,227,154,211,109,
1142 38,245,146,100,0,151,254,52,135,75,7,144,208,138,149,172,48,61,181,248,
1143 247,224,125,14,227,44,251,48,119,243,235,124,43,126,112,224,51,239,196,
1144 12,192,120,254,9,4,171,170,38,234,214,223,175,120,150,233,102,36,181,245,
1145 98,95,153,166,113,41,215,219,155,217,152,251,5,59,92,97,129,150,54,147,
1146 18,123,157,211,149,150,122,43,9,43,254,33,76,99,142,185,85,139,191,12,95,
1147 83,159,206,118,20,61,237,200,124,46,126,8,62,243,183,138,6,144,158,1,24,
1148 207,111,14,188,143,59,205,40,84,213,217,206,36,115,23,189,153,47,29,197,
1149 73,75,57,145,174,246,118,62,226,16,233,40,81,41,6,142,178,153,212,42,137,
1150 193,93,40,186,238,184,145,35,116,13,217,196,34,51,64,139,191,12,219,41,
1151 192,163,55,231,216,201,73,42,126,8,62,251,221,37,7,151,214,77,58,64,20,
1152 126,200,103,44,53,255,199,5,172,144,142,226,156,127,211,148,243,236,3,140,
1153 180,191,97,187,19,31,201,200,137,213,128,232,159,118,201,75,63,177,124,
1154 148,171,34,82,188,197,10,211,147,159,240,161,116,20,231,60,198,249,180,
1155 180,143,176,36,217,139,61,31,93,82,11,145,147,110,183,61,132,199,15,221,
1156 229,44,230,239,166,47,77,113,234,53,112,113,155,168,67,47,155,166,131,189,
1157 147,175,104,32,29,199,5,34,181,32,118,17,208,120,126,77,224,83,160,145,
1158 72,128,8,12,98,22,191,51,227,41,208,237,184,119,241,10,45,232,108,71,241,
1159 46,63,148,142,226,146,181,192,33,54,147,138,244,182,144,228,12,224,18,242,
1160 180,248,171,81,204,68,115,55,163,205,88,45,254,82,44,134,123,233,198,153,
1161 118,170,22,255,247,53,34,168,137,72,73,174,8,36,118,229,51,76,13,216,204,
1162 28,51,140,95,176,84,58,138,115,214,83,143,179,121,141,231,77,95,233,40,
1163 161,248,156,70,220,108,7,84,165,185,117,7,158,204,97,164,125,18,57,5,48,
1164 158,223,136,96,250,95,51,242,193,67,116,40,95,176,208,220,72,75,222,147,
1165 142,162,34,54,141,75,25,100,7,178,182,106,75,143,111,35,56,13,88,155,163,
1166 88,251,36,117,10,208,145,60,43,254,147,121,135,21,166,167,22,127,194,124,
1167 196,33,92,104,239,163,167,29,89,213,226,135,160,38,58,230,32,86,185,73,
1168 53,128,203,132,198,13,197,165,44,97,137,233,67,51,190,148,142,162,34,82,
1169 76,1,99,233,204,241,118,78,174,23,33,141,180,54,34,63,5,48,158,95,3,88,
1170 7,212,139,116,224,144,220,192,28,198,152,66,170,233,197,190,196,248,39,
1171 71,210,219,142,96,5,199,135,113,248,77,192,1,54,147,138,100,227,7,137,25,
1172 192,25,228,65,241,23,80,204,88,51,154,241,230,94,45,254,132,216,70,13,70,
1173 218,223,112,138,157,25,86,241,67,80,27,103,132,117,240,221,73,220,5,104,
1174 43,48,102,78,213,99,11,179,205,112,218,33,190,162,147,138,200,50,78,160,
1175 151,77,243,22,205,163,24,174,45,240,66,20,3,73,204,0,98,221,0,14,225,127,
1176 60,111,250,106,241,39,196,70,234,210,223,222,68,27,59,37,170,226,135,8,
1177 107,36,210,107,0,198,243,235,16,156,255,215,138,108,208,28,58,145,247,88,
1178 104,6,114,24,159,75,71,81,17,120,154,214,244,179,195,248,119,244,59,211,
1179 111,37,184,14,176,37,236,129,162,158,1,180,38,166,197,127,17,203,120,193,
1180 244,214,226,79,128,255,177,63,221,108,150,139,237,56,137,226,135,160,70,
1181 90,71,49,80,212,13,32,150,211,255,126,60,206,66,115,35,13,216,44,29,69,
1182 133,236,17,46,226,56,59,151,89,92,36,29,37,146,90,137,250,34,96,172,26,
1183 64,1,197,220,109,238,227,38,102,74,71,81,33,91,205,193,244,179,195,88,196,
1184 89,210,81,118,136,164,86,34,187,6,96,60,191,1,193,27,79,46,239,72,252,157,
1185 58,108,101,166,73,115,37,127,147,142,162,66,100,49,76,164,61,195,236,245,
1186 108,112,107,253,193,34,160,145,205,164,54,132,57,72,148,197,216,50,226,
1187 241,170,164,41,107,152,108,175,96,50,87,72,71,169,148,38,172,99,180,25,
1188 75,19,214,73,71,113,214,219,252,136,222,118,4,255,160,165,116,148,178,84,
1189 39,168,153,80,111,7,70,89,144,45,34,28,171,202,86,209,140,85,52,147,142,
1190 81,41,173,121,131,41,38,171,197,191,7,223,82,157,187,249,53,183,219,255,
1191 99,171,219,175,164,180,32,143,26,192,49,17,142,149,88,3,121,132,123,204,
1192 120,170,179,93,58,138,147,94,226,56,122,217,52,43,57,74,58,74,121,132,94,
1193 51,218,0,242,68,67,54,49,213,120,92,197,115,210,81,156,180,153,218,140,
1194 176,215,48,158,78,113,90,120,52,175,26,64,172,78,1,226,228,68,222,99,158,
1195 25,194,209,172,150,142,226,164,103,57,157,190,118,120,28,79,233,66,175,
1196 153,72,238,2,148,188,1,184,153,24,93,4,140,139,158,44,100,162,185,139,58,
1197 108,149,142,226,156,117,52,100,144,29,200,31,184,84,58,74,101,21,1,117,
1198 195,124,51,48,170,130,60,50,194,177,18,161,54,219,184,223,220,67,47,22,
1199 72,71,113,210,99,156,207,13,246,102,62,143,247,178,147,213,9,106,231,237,
1200 48,7,136,130,78,255,115,232,72,254,195,60,51,132,147,120,87,58,138,115,
1201 62,161,9,215,218,33,44,224,92,233,40,185,210,130,16,27,64,84,87,67,244,
1202 2,96,142,92,193,98,94,54,221,181,248,119,99,49,60,196,21,28,103,231,230,
1203 83,241,67,200,181,19,213,12,64,27,64,21,85,103,59,119,153,251,25,172,143,
1204 37,127,207,123,28,70,31,59,130,191,115,138,116,148,48,228,69,3,56,34,162,
1205 113,242,82,51,190,100,142,185,149,54,188,38,29,197,41,69,84,99,52,221,248,
1206 173,237,203,55,110,63,208,83,21,161,214,78,84,13,160,202,203,165,38,85,
1207 91,94,98,182,25,193,65,68,182,82,116,44,188,66,11,122,219,17,188,154,255,
1208 147,203,80,107,39,170,6,160,155,191,85,144,193,114,43,191,231,54,243,160,
1209 174,57,88,202,22,106,241,91,219,151,66,186,82,68,53,233,56,81,8,181,118,
1210 180,1,56,168,17,235,153,97,50,92,204,63,164,163,56,101,49,167,210,199,14,
1211 231,125,14,147,142,18,37,109,0,73,114,26,111,242,152,25,202,225,124,42,
1212 29,197,25,95,83,159,155,237,0,166,112,25,22,35,29,39,106,161,214,78,232,
1213 79,2,26,207,47,0,125,51,165,60,174,101,30,99,76,33,53,137,100,73,248,88,
1214 152,207,79,185,206,222,194,39,52,145,142,34,169,154,205,164,66,57,15,140,
1215 98,6,80,63,130,49,98,173,30,91,152,108,70,209,153,103,164,163,56,227,51,
1216 26,115,131,189,153,121,252,76,58,138,11,234,3,235,195,56,112,20,13,64,167,
1217 255,123,113,28,171,152,103,134,112,44,171,164,163,56,227,247,180,99,176,
1218 189,145,117,122,243,104,135,6,104,3,200,63,93,248,51,15,153,59,168,71,232,
1219 171,63,199,194,135,252,128,190,118,56,127,229,52,233,40,174,9,173,134,244,
1220 20,64,64,77,190,101,172,41,228,26,230,73,71,113,194,118,10,24,71,103,210,
1221 182,31,155,169,45,29,199,69,161,213,144,206,0,34,118,56,159,242,152,25,
1222 202,105,188,41,29,197,9,111,112,52,189,237,8,94,226,56,233,40,46,139,245,
1223 12,64,149,184,132,23,152,110,70,210,40,156,211,185,88,217,74,77,178,182,
1224 23,247,208,131,111,245,99,40,38,138,63,249,80,151,53,142,131,106,20,227,
1225 153,7,24,198,31,48,68,187,29,187,139,94,224,36,250,216,225,188,205,143,
1226 164,163,196,69,104,53,20,69,3,216,24,193,24,206,58,152,181,204,54,195,57,
1227 15,95,58,138,184,13,212,101,168,189,129,73,92,149,196,7,122,170,34,180,
1228 26,210,25,64,136,206,230,85,30,53,195,105,198,151,210,81,196,61,69,27,174,
1229 177,67,89,205,193,210,81,226,40,214,51,128,68,54,128,155,152,201,157,230,
1230 254,196,47,207,253,37,7,48,192,14,102,54,23,74,71,137,179,88,55,128,68,
1231 157,2,236,199,70,254,96,110,227,114,22,75,71,17,55,147,95,112,163,29,204,
1232 26,246,147,142,18,119,161,213,80,84,171,2,111,2,183,54,94,11,195,73,188,
1233 203,60,51,132,35,249,143,116,20,81,31,115,8,253,236,48,254,204,153,210,
1234 81,242,193,102,155,73,213,11,235,224,81,173,9,152,247,167,1,189,153,207,
1235 50,115,117,162,139,191,152,2,238,163,35,199,219,71,181,248,115,39,47,54,
1236 7,221,0,249,121,245,167,14,91,153,104,238,162,39,11,165,163,136,122,147,
1237 230,244,182,105,150,113,130,116,148,124,147,55,13,32,239,28,205,106,30,
1238 55,183,112,2,239,75,71,17,179,141,26,220,73,79,238,176,87,179,141,26,210,
1239 113,242,81,94,52,128,188,123,244,237,42,158,99,170,241,104,200,38,233,40,
1240 98,86,112,60,189,108,154,127,233,154,175,97,10,181,118,162,186,6,240,97,
1241 68,227,132,174,6,69,140,49,133,204,51,67,18,91,252,155,168,195,141,118,
1242 48,173,237,195,90,252,225,11,181,118,162,154,1,188,19,209,56,161,58,148,
1243 47,152,99,134,209,154,55,164,163,136,121,134,51,233,103,135,241,17,135,
1244 72,71,73,138,80,107,71,27,64,57,93,192,10,102,153,52,77,88,39,29,69,196,
1245 26,246,99,144,29,200,116,46,145,142,146,52,121,209,0,66,219,219,44,108,
1246 5,20,51,130,169,140,52,147,41,72,232,242,220,115,184,128,254,246,38,190,
1247 136,247,70,155,113,21,106,237,68,213,0,62,32,216,234,56,86,239,125,54,230,
1248 107,102,153,52,23,178,76,58,138,136,255,112,16,215,218,161,252,137,179,
1249 165,163,36,85,17,65,237,132,38,146,139,128,37,251,155,199,106,209,187,51,
1250 248,39,175,154,174,137,44,126,139,97,18,237,249,137,157,171,197,47,107,
1251 85,73,237,132,38,202,159,200,111,3,71,71,56,94,165,221,192,28,70,155,177,
1252 212,160,72,58,74,228,222,225,112,250,216,225,44,225,100,233,40,42,130,83,
1253 231,40,27,192,59,64,187,8,199,171,176,6,108,102,138,201,210,129,103,165,
1254 163,68,174,136,106,220,67,15,60,219,155,173,249,187,209,102,220,132,126,
1255 241,60,234,6,224,172,227,249,128,121,102,8,199,240,177,116,148,200,189,
1256 204,177,244,178,105,94,143,199,4,45,73,242,170,1,56,123,39,160,59,139,120,
1257 192,220,73,93,190,145,142,18,169,45,212,34,99,251,49,134,46,108,143,236,
1258 153,48,85,1,121,117,10,240,58,142,221,9,168,197,54,198,155,123,233,203,
1259 147,210,81,34,247,28,167,209,215,222,202,7,28,42,29,69,149,173,136,160,
1260 102,66,21,201,122,0,223,13,230,249,203,128,86,145,13,184,23,205,249,132,
1261 121,102,8,167,184,59,49,9,197,87,52,224,38,59,128,135,185,76,58,138,218,
1262 187,229,54,147,10,253,157,234,168,231,125,207,69,60,94,153,218,177,132,
1263 87,76,183,196,21,255,19,156,199,177,246,49,45,254,120,136,164,86,18,213,
1264 0,170,81,204,93,230,126,22,152,193,236,159,159,111,40,151,233,83,14,228,
1265 42,123,15,87,217,123,248,140,198,210,113,84,249,68,82,43,81,159,143,47,
1266 5,182,2,181,34,30,151,166,172,225,81,115,43,231,242,74,212,67,139,154,194,
1267 229,220,108,251,243,149,110,208,20,39,91,9,106,37,116,145,206,0,108,38,
1268 181,5,88,30,229,152,0,231,242,10,175,154,174,137,42,254,15,56,148,182,118,
1269 18,125,236,112,45,254,248,89,94,82,43,161,147,184,247,19,217,105,128,193,
1270 50,132,105,252,213,92,67,83,214,68,53,172,168,237,20,240,59,186,115,130,
1271 125,148,191,145,146,142,163,42,39,178,26,145,184,37,247,28,112,91,216,131,
1272 236,207,6,166,155,145,180,99,73,216,67,57,227,53,126,76,111,59,130,151,
1273 57,86,58,138,170,154,188,110,0,43,128,77,64,104,75,29,159,194,219,204,51,
1274 67,104,206,39,97,13,225,148,111,168,137,103,251,240,59,186,83,68,53,233,
1275 56,170,106,54,17,212,72,36,34,63,5,40,121,187,233,133,176,142,255,27,158,
1276 96,169,233,149,152,226,127,158,147,105,105,103,115,39,61,181,248,243,195,
1277 11,97,191,1,88,154,212,83,121,11,32,183,123,69,213,229,27,30,48,119,210,
1278 157,69,185,60,172,179,214,83,143,33,246,6,30,228,74,221,104,51,191,44,136,
1279 114,48,169,7,192,231,0,219,114,117,176,99,248,152,23,205,175,19,83,252,
1280 127,228,28,142,179,143,241,128,238,178,155,111,182,17,212,70,100,68,26,
1281 128,205,164,214,2,79,229,226,88,29,120,22,223,244,224,39,249,179,240,240,
1282 30,125,65,35,58,218,59,185,204,142,230,191,52,145,142,163,114,239,169,146,
1283 218,136,140,228,43,96,51,170,242,205,53,40,98,188,185,151,57,102,24,245,
1284 217,156,171,76,206,154,198,165,28,107,31,99,46,231,75,71,81,225,169,82,
1285 77,84,134,228,155,121,79,1,107,161,226,43,77,30,198,231,60,102,134,114,
1286 6,255,204,125,42,7,125,202,129,236,207,6,166,26,79,58,74,149,173,176,199,
1287 243,32,87,178,150,134,210,81,92,147,179,89,113,69,68,250,54,224,247,6,247,
1288 252,137,192,53,21,249,158,11,89,198,44,147,166,49,95,135,148,74,229,90,
1289 49,5,44,224,28,70,219,110,252,131,150,210,113,92,53,201,102,82,215,70,61,
1290 168,244,187,249,211,41,103,3,40,160,152,145,102,50,35,152,154,216,229,185,
1291 227,102,19,117,248,61,237,24,107,59,235,186,3,251,54,93,98,80,209,25,0,
1292 128,241,252,119,217,199,98,161,77,88,199,44,147,230,130,232,158,143,80,
1293 85,240,95,154,112,191,237,192,131,92,201,58,157,234,151,199,123,54,147,
1294 250,177,196,192,210,51,0,128,153,236,229,209,224,214,188,193,92,51,148,
1295 31,240,101,132,145,84,101,188,202,49,20,218,174,204,225,2,190,117,226,163,
1296 21,27,51,165,6,118,225,255,210,12,96,36,101,220,145,24,200,35,220,109,238,
1297 75,228,242,220,113,97,49,44,226,44,70,219,174,250,242,81,229,20,35,112,
1298 245,127,7,241,83,0,0,227,249,179,129,78,59,254,190,33,155,152,106,60,174,
1299 114,99,1,33,85,134,45,212,98,58,151,48,214,118,230,109,126,36,29,39,206,
1300 30,181,153,84,103,169,193,93,152,1,0,220,1,116,4,204,137,188,199,60,51,
1301 132,163,89,45,157,73,149,225,115,26,49,193,254,138,73,180,231,127,236,47,
1302 29,39,238,44,193,103,95,140,19,51,0,0,227,249,243,123,178,240,178,137,230,
1303 46,234,176,85,58,142,218,205,191,56,130,66,219,149,89,92,164,27,135,228,
1304 206,2,155,73,93,46,25,192,141,25,64,214,212,254,216,52,53,63,228,51,233,
1305 36,106,55,127,161,21,133,182,11,207,16,250,2,181,73,52,74,58,128,252,12,
1306 32,107,142,4,230,1,39,201,6,81,59,108,165,38,143,112,33,99,108,23,86,114,
1307 148,116,156,124,245,23,155,73,229,244,141,216,202,144,157,1,100,205,229,
1308 192,31,128,253,68,115,40,0,214,176,31,147,104,207,4,251,43,93,61,56,124,
1309 183,75,7,0,169,6,144,53,213,129,59,129,155,68,198,87,187,120,151,31,50,
1310 198,118,97,26,151,178,37,250,5,155,147,104,137,205,164,156,88,171,46,250,
1311 6,144,53,205,8,222,121,110,19,249,216,106,23,139,57,149,66,219,149,133,
1312 180,209,117,5,162,229,196,79,127,136,250,26,64,214,180,5,102,3,7,69,55,
1313 168,42,237,91,170,51,151,243,41,180,93,121,133,22,210,113,146,232,69,155,
1314 73,157,33,29,98,135,232,102,0,89,115,10,112,45,176,108,95,95,250,57,141,
1315 14,88,206,9,231,132,29,169,45,47,209,32,1,107,9,64,176,39,224,67,92,193,
1316 120,219,73,23,19,145,99,129,1,210,33,74,147,191,11,176,7,198,243,39,3,189,
1317 195,56,118,1,197,140,53,133,220,16,237,234,75,34,62,228,7,140,179,157,152,
1318 202,47,217,72,93,233,56,73,55,197,102,82,125,164,67,148,230,198,115,0,101,
1319 27,10,92,1,185,189,28,93,135,173,60,98,70,112,57,139,115,121,88,231,44,
1320 229,68,70,219,110,204,231,92,138,69,23,126,82,37,214,16,124,166,157,226,
1321 236,12,0,192,120,126,111,96,114,174,142,119,32,95,241,39,51,136,86,172,
1322 204,213,33,157,178,157,2,158,160,45,163,109,87,86,112,188,116,28,181,171,
1323 62,54,147,154,34,29,98,119,46,207,0,0,30,6,122,1,173,170,122,160,163,88,
1324 205,211,102,0,71,229,225,59,6,27,168,203,20,46,103,188,237,196,71,28,34,
1325 29,71,125,223,114,130,207,178,115,156,158,1,0,24,207,63,9,240,161,242,187,
1326 94,180,98,37,127,50,131,56,144,175,114,23,204,1,255,166,41,227,109,71,166,
1327 112,57,95,83,95,58,142,42,219,118,32,101,51,169,215,164,131,148,197,249,
1328 6,0,96,60,127,28,208,191,50,223,123,5,139,153,101,70,228,213,11,70,47,113,
1329 28,133,182,43,243,248,153,238,6,228,190,241,54,147,114,234,202,127,105,
1330 174,159,2,236,144,6,58,0,77,43,242,77,253,121,148,49,102,76,94,172,33,88,
1331 76,1,127,228,28,10,109,23,150,112,178,116,28,85,62,159,17,124,118,157,21,
1332 139,25,0,128,241,252,43,129,199,203,245,181,88,238,53,227,24,196,172,144,
1333 83,133,111,51,181,191,91,88,243,125,14,147,142,163,42,230,42,155,73,61,
1334 33,29,98,111,98,211,0,0,140,231,223,15,92,183,183,175,169,205,54,102,152,
1335 12,237,249,107,68,169,194,241,73,169,133,53,117,13,253,88,154,96,51,169,
1336 235,165,67,236,75,92,78,1,118,24,12,180,134,178,231,192,141,249,154,5,102,
1337 48,103,241,122,180,169,114,232,117,142,166,208,118,229,81,126,206,54,106,
1338 72,199,81,149,243,42,193,103,213,121,177,154,1,0,24,207,63,10,120,25,118,
1339 253,177,120,4,255,229,105,211,159,31,243,111,153,96,85,96,49,60,77,107,
1340 10,109,87,254,202,105,210,113,84,213,172,7,78,181,153,212,251,210,65,202,
1341 35,118,13,0,192,120,126,71,224,209,29,127,127,26,111,178,208,12,228,32,
1342 34,221,87,177,202,190,161,38,51,184,152,49,182,11,111,209,92,58,142,202,
1343 141,78,54,147,138,205,51,230,177,108,0,0,198,243,39,1,253,218,177,132,71,
1344 205,173,212,229,27,233,72,229,246,5,141,152,104,219,51,145,246,124,201,
1345 1,210,113,84,238,60,96,51,169,10,109,117,39,45,110,215,0,74,27,120,11,211,
1346 47,189,195,76,56,180,90,76,110,243,189,73,115,198,216,46,204,228,98,190,
1347 209,133,53,243,205,235,192,64,233,16,21,21,207,6,144,53,198,26,110,131,
1348 120,108,56,247,44,167,51,218,118,227,25,90,233,194,27,249,105,35,208,193,
1349 102,82,241,153,134,150,136,95,3,200,154,90,4,235,8,118,218,199,87,138,218,
1350 70,13,102,115,33,133,182,11,111,236,125,235,67,21,111,197,64,79,155,73,
1351 189,43,29,164,50,226,213,0,178,230,0,96,62,16,250,98,33,149,181,150,134,
1352 223,45,172,249,41,7,74,199,81,225,235,111,51,169,114,61,160,230,162,248,
1353 52,128,172,57,28,120,26,56,86,58,74,89,222,227,176,239,22,214,220,76,109,
1354 233,56,42,26,183,219,76,106,130,116,136,170,136,199,93,128,96,57,177,167,
1355 168,224,187,0,81,120,158,147,25,109,187,177,144,54,186,240,70,178,76,182,
1356 153,84,95,233,16,85,229,254,12,32,107,126,1,204,5,119,222,119,45,162,26,
1357 115,185,128,66,219,133,151,221,156,144,168,112,205,7,98,117,187,111,79,
1358 220,158,1,100,77,31,96,34,142,52,170,175,169,207,67,92,193,125,182,35,171,
1359 57,88,58,142,146,177,4,248,121,28,175,248,151,197,221,6,144,53,183,3,195,
1360 165,99,0,172,162,25,227,108,103,30,214,133,53,147,110,37,112,142,205,164,
1361 242,102,101,25,39,126,178,238,34,107,106,0,83,129,110,210,81,150,113,2,
1362 133,182,43,79,114,30,219,245,252,62,233,86,1,23,229,83,241,131,107,13,32,
1363 107,246,3,158,0,218,74,69,216,78,1,79,114,30,133,182,43,203,56,65,42,134,
1364 114,203,74,130,226,255,68,58,72,174,185,211,0,178,230,48,96,17,200,44,103,
1365 187,145,186,60,204,47,25,103,59,179,138,102,18,17,148,155,150,0,191,204,
1366 183,159,252,59,184,209,0,178,166,37,65,241,71,94,121,171,57,152,251,108,
1367 71,30,226,10,93,88,83,237,110,62,208,57,95,46,248,149,69,190,1,100,205,
1368 207,129,121,64,131,40,135,125,153,99,41,180,93,152,203,5,186,176,166,42,
1369 203,100,224,26,155,73,109,151,14,18,38,217,6,144,53,87,3,15,69,152,163,
1370 120,37,71,189,123,189,189,165,197,243,186,176,166,218,179,219,109,38,229,
1371 244,98,158,185,34,119,105,59,107,70,18,92,237,143,162,248,55,3,147,128,
1372 22,39,164,223,59,246,121,78,238,67,176,94,187,82,165,21,3,215,39,165,248,
1373 65,226,57,128,172,169,78,240,83,255,234,8,70,251,20,152,0,76,34,109,119,
1374 89,46,200,120,126,59,96,6,176,95,4,57,148,251,54,18,188,213,23,219,23,123,
1375 42,35,218,6,144,53,13,8,206,247,127,30,242,72,111,0,133,192,108,210,118,
1376 219,158,190,200,120,254,145,192,28,224,212,144,243,40,183,189,78,240,62,
1377 127,44,95,233,173,138,232,26,64,214,52,35,184,210,223,50,164,17,44,240,
1378 12,48,154,180,125,182,188,223,100,60,191,22,48,154,125,44,55,174,242,214,
1379 3,192,192,124,190,210,191,55,209,52,128,172,57,158,160,248,195,216,217,
1380 226,27,96,38,48,134,180,125,179,178,7,49,158,223,30,152,130,158,18,36,197,
1381 122,160,111,156,22,240,12,67,248,13,32,107,218,18,60,221,151,235,194,250,
1382 146,224,69,161,137,164,237,23,185,56,160,158,18,36,198,171,4,83,254,88,
1383 44,221,29,166,112,27,64,214,116,35,184,210,159,203,29,46,222,2,198,0,51,
1384 72,219,156,79,219,244,148,32,239,77,0,6,219,76,42,127,118,139,173,130,240,
1385 26,64,214,12,7,110,207,225,17,255,74,112,97,239,105,210,225,159,183,148,
1386 236,69,56,1,7,23,33,81,149,242,25,112,157,235,123,245,69,45,247,13,32,184,
1387 205,55,17,232,147,131,163,109,35,216,0,164,144,180,141,124,191,47,227,249,
1388 13,1,15,184,30,244,113,193,152,218,78,208,200,211,54,147,90,47,29,198,53,
1389 185,109,0,89,83,159,96,245,158,95,84,241,72,107,129,7,129,251,73,91,241,
1390 55,176,140,231,183,36,104,106,173,165,179,168,10,89,78,240,56,239,107,210,
1391 65,92,149,187,6,144,53,77,9,214,237,59,165,10,71,121,31,24,11,252,158,180,
1392 221,156,147,92,57,98,60,223,0,61,129,187,129,38,178,105,212,62,172,1,134,
1393 2,15,219,76,202,209,21,111,220,144,155,6,144,53,199,18,172,216,123,120,
1394 37,143,176,132,224,252,254,143,164,173,211,219,252,24,207,63,0,184,3,232,
1395 139,228,163,212,170,44,22,120,24,24,106,51,169,53,210,97,226,160,234,13,
1396 32,107,206,33,120,109,178,162,155,220,21,17,60,21,88,72,218,190,84,181,
1397 16,209,51,158,159,2,198,161,167,5,174,120,17,24,96,51,169,229,210,65,226,
1398 164,106,13,32,107,58,17,236,210,83,171,2,223,181,158,224,85,203,241,164,
1399 109,252,246,242,222,141,241,252,159,1,35,128,159,10,71,73,170,37,4,111,
1400 239,253,69,58,72,28,85,190,1,100,205,45,192,93,80,238,205,238,62,2,198,
1401 3,83,72,219,13,149,27,212,93,198,243,207,34,104,4,23,73,103,73,136,191,
1402 16,20,254,18,233,32,113,86,241,6,144,53,213,128,251,40,255,186,232,43,8,
1403 30,172,121,130,180,205,251,87,112,141,231,159,74,208,8,46,163,252,205,81,
1404 149,143,5,254,8,140,178,153,84,236,78,27,93,84,177,6,144,53,117,9,238,203,
1405 183,219,199,87,22,19,92,23,24,77,218,46,173,116,186,24,51,158,127,60,193,
1406 178,230,29,208,139,133,85,85,76,112,123,249,14,155,73,173,148,14,147,79,
1407 202,223,0,178,230,32,96,33,112,218,94,190,106,35,193,163,191,227,72,219,
1408 15,171,156,46,15,24,207,111,14,116,39,88,230,92,183,9,174,152,247,8,94,
1409 244,154,97,51,169,85,210,97,242,81,249,26,64,214,252,152,224,54,223,17,
1410 123,248,138,255,18,156,223,63,68,218,230,229,234,169,185,96,60,191,21,208,
1411 3,232,8,52,18,142,227,170,181,4,47,100,77,215,43,250,225,219,119,3,200,
1412 154,179,128,5,64,227,50,254,237,43,4,247,239,231,146,182,223,230,60,93,
1413 158,50,158,95,19,184,132,96,102,112,9,80,83,54,145,184,109,4,15,145,205,
1414 0,158,178,153,212,30,23,113,81,185,181,247,6,144,53,237,9,254,167,148,222,
1415 239,218,18,156,10,20,146,182,139,195,12,151,4,198,243,27,17,204,8,43,148,
1416 13,189,0,0,1,155,73,68,65,84,46,3,218,0,245,100,19,69,102,19,240,2,193,
1417 15,151,57,54,147,90,187,143,175,87,33,216,115,3,200,154,65,192,189,236,
1418 188,146,189,5,152,70,176,240,70,226,150,78,138,130,241,252,26,192,25,192,
1419 121,4,187,35,157,73,197,158,177,112,217,86,130,103,243,159,43,249,181,194,
1420 102,82,58,107,20,246,253,6,144,53,5,4,239,219,247,47,249,39,159,177,115,
1421 97,77,125,188,50,66,198,243,107,19,60,105,184,163,33,156,142,244,82,238,
1422 229,87,4,248,236,44,248,165,54,147,218,34,27,73,237,110,215,6,144,53,117,
1423 128,89,192,21,192,63,9,206,239,31,33,109,117,241,4,7,24,207,175,79,176,
1424 166,98,11,224,152,82,191,31,129,92,99,40,34,216,56,243,109,224,157,146,
1425 95,111,3,175,219,76,42,239,30,248,202,55,59,27,64,214,28,72,240,144,197,
1426 122,130,243,123,125,180,50,38,74,78,29,142,228,251,77,161,33,193,142,75,
1427 59,126,85,116,111,243,205,192,134,82,191,214,3,31,178,107,161,127,160,83,
1428 249,248,10,26,64,214,28,74,112,159,250,79,164,237,191,164,67,169,112,24,
1429 207,47,0,234,179,179,33,236,248,107,8,10,124,35,59,139,125,163,205,164,
1430 156,126,51,83,85,221,142,6,80,157,180,45,146,14,163,148,138,86,244,59,3,
1431 41,165,156,161,207,168,43,149,96,218,0,148,74,48,109,0,74,37,152,54,0,165,
1432 18,76,27,128,82,9,166,13,64,169,4,211,6,160,84,130,105,3,80,42,193,180,
1433 1,40,149,96,218,0,148,74,48,109,0,74,37,152,54,0,165,18,76,27,128,82,9,
1434 166,13,64,169,4,211,6,160,84,130,105,3,80,42,193,180,1,40,149,96,218,0,
1435 148,74,48,109,0,74,37,152,54,0,165,18,76,27,128,82,9,246,255,1,12,204,192,
1436 135,186,54,132,175,0,0,0,0,73,69,78,68,174,66,96,130};
1437 
1438 static size_t xml_res_size_16 = 1184;
1439 static unsigned char xml_res_file_16[] = {
1440 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1441 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1442 72,89,115,0,0,3,184,0,0,3,184,1,3,78,7,200,0,0,0,25,116,69,88,116,83,111,
1443 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
1444 111,114,103,155,238,60,26,0,0,4,29,73,68,65,84,88,133,197,151,127,76,149,
1445 85,24,199,63,207,27,23,74,26,37,4,225,28,165,137,213,202,173,150,130,214,
1446 102,163,214,82,51,109,68,179,132,10,162,69,115,196,248,195,40,127,112,163,
1447 43,228,194,128,88,184,165,210,15,230,106,21,110,212,200,25,106,163,198,
1448 156,86,64,148,148,179,127,202,70,32,96,63,48,7,194,189,248,62,253,65,55,
1449 238,123,121,223,123,47,186,198,179,221,237,190,207,121,206,247,243,156,
1450 231,188,231,188,231,136,170,50,147,102,204,40,29,136,186,84,1,241,96,104,
1451 25,102,128,71,168,224,70,46,32,17,208,135,101,58,83,32,158,111,83,17,51,
1452 19,88,13,204,3,146,153,24,196,32,208,23,199,112,219,73,121,228,182,57,252,
1453 126,111,4,114,237,152,100,71,148,128,84,118,94,197,40,181,136,230,57,197,
1454 36,242,23,205,108,100,153,116,135,147,51,81,94,35,25,55,5,234,11,59,5,178,
1455 173,99,21,72,61,162,115,157,98,110,230,20,7,164,152,249,244,133,147,235,
1456 67,120,2,183,182,250,29,142,9,136,167,115,22,104,29,66,62,56,87,233,30,
1457 58,104,146,23,184,154,115,225,224,205,68,145,207,102,253,35,208,25,98,21,
1458 104,229,4,220,217,114,217,207,65,41,10,9,63,79,12,47,82,212,35,230,23,89,
1459 193,112,199,4,196,211,145,129,80,232,36,42,40,229,178,139,6,241,224,98,
1460 220,17,222,77,42,105,186,151,29,250,100,10,70,236,22,91,173,224,151,80,
1461 170,142,199,50,226,237,6,230,219,117,136,193,203,59,82,78,54,45,142,96,
1462 128,157,172,163,68,139,25,37,218,239,242,33,102,154,186,211,191,15,140,
1463 155,90,129,17,111,165,19,60,129,179,124,78,97,72,248,25,102,179,134,26,
1464 138,180,36,16,14,224,66,141,6,217,211,233,10,116,90,42,32,158,99,241,136,
1465 107,0,155,151,115,33,61,28,144,98,82,233,113,132,247,112,45,197,250,60,
1466 167,37,97,74,219,47,58,151,1,226,65,121,72,203,150,52,251,253,86,144,17,
1467 181,22,157,10,95,78,23,31,75,9,9,156,117,132,3,164,48,64,147,148,88,124,
1468 99,68,83,161,249,84,146,251,239,40,245,97,192,33,1,149,251,131,69,93,140,
1469 179,128,94,74,117,131,197,127,159,124,67,22,173,193,225,22,59,162,183,243,
1470 12,91,57,201,188,0,175,149,17,60,218,148,96,17,31,81,52,240,224,100,119,
1471 148,82,121,155,76,190,116,4,159,99,22,155,180,136,55,201,66,167,126,18,
1472 146,101,79,167,75,11,22,251,236,18,72,118,84,101,226,37,124,15,55,43,57,
1473 230,24,179,95,151,179,129,77,252,70,146,83,136,112,198,155,4,244,218,37,
1474 224,104,75,249,129,70,217,204,117,244,219,182,15,18,79,177,110,228,67,166,
1475 204,98,72,11,94,134,182,234,207,209,72,155,20,56,194,247,178,154,91,180,
1476 49,82,184,146,24,61,232,127,8,174,128,101,141,93,201,8,111,73,5,143,114,
1477 216,86,233,20,115,120,150,45,28,210,101,145,128,253,214,239,159,127,8,174,
1478 128,232,33,255,223,91,249,153,118,201,181,133,155,24,212,178,158,69,250,
1479 209,116,225,192,36,3,130,43,96,142,55,35,174,241,28,90,162,118,203,118,
1480 98,57,111,43,209,197,77,92,161,99,84,83,251,159,175,159,4,234,201,164,151,
1481 196,48,124,105,10,124,180,126,11,234,36,230,179,161,187,58,86,113,116,81,
1482 68,131,1,126,228,6,106,52,135,247,89,201,152,117,235,181,179,239,72,150,
1483 244,192,41,176,86,96,136,212,116,57,81,245,148,190,180,99,84,99,146,214,
1484 74,27,235,57,104,171,116,152,165,212,144,67,139,222,25,105,174,62,196,204,
1485 211,130,116,95,160,211,246,72,38,158,142,140,66,99,95,235,27,84,137,17,
1486 112,222,244,226,226,3,86,80,163,217,28,103,97,164,96,63,169,76,221,105,
1487 219,130,221,54,251,128,136,10,15,192,228,22,246,39,113,236,34,139,157,186,
1488 142,211,92,51,61,240,132,117,97,14,111,183,107,176,38,80,39,49,12,209,128,
1489 240,24,192,0,9,127,151,243,116,220,187,186,134,17,46,191,24,48,192,81,12,
1490 243,113,45,205,176,61,185,76,78,193,171,50,27,47,159,32,220,141,114,4,131,
1491 106,46,208,44,210,190,2,164,30,156,15,165,14,54,10,82,138,46,126,221,122,
1492 111,176,75,224,21,185,30,147,79,17,78,160,84,227,214,118,75,80,4,199,114,
1493 171,233,87,24,146,167,165,75,126,10,23,41,90,206,2,148,76,12,246,177,85,
1494 127,13,25,28,230,98,2,180,162,70,19,101,119,124,173,161,142,210,150,92,
1495 27,185,76,85,185,216,31,47,171,113,41,253,167,117,53,251,63,108,198,111,
1496 199,255,0,65,159,207,163,152,64,70,71,0,0,0,0,73,69,78,68,174,66,96,130};
1497 
1498 static size_t xml_res_size_17 = 2289;
1499 static unsigned char xml_res_file_17[] = {
1500 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,64,0,0,0,64,8,6,0,0,
1501 0,170,105,113,222,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1502 72,89,115,0,0,7,113,0,0,7,113,1,220,215,168,124,0,0,0,25,116,69,88,116,
1503 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
1504 101,46,111,114,103,155,238,60,26,0,0,8,110,73,68,65,84,120,156,237,155,
1505 107,112,85,213,21,128,191,117,115,243,144,132,71,176,76,32,8,82,7,173,80,
1506 80,30,137,72,43,51,22,181,128,32,216,34,157,129,96,69,6,4,6,121,8,33,64,
1507 32,185,220,148,240,208,18,148,135,1,4,170,128,4,10,177,72,35,181,101,202,
1508 67,104,25,26,34,237,48,60,44,148,210,210,6,4,66,0,109,200,243,174,254,128,
1509 84,72,238,57,247,156,115,15,102,58,248,205,228,71,238,94,107,237,181,214,
1510 89,103,159,125,246,222,71,84,149,187,25,79,67,59,208,208,124,147,128,134,
1511 118,160,161,185,235,19,224,109,200,206,5,4,255,158,104,245,61,89,110,42,
1512 232,23,47,66,63,60,68,184,236,194,81,249,58,158,2,50,255,112,11,170,171,
1513 251,163,146,4,146,8,154,8,36,2,45,129,72,224,10,72,49,162,197,4,40,6,57,
1514 131,167,230,99,2,143,29,212,24,105,76,37,91,128,103,92,116,73,129,69,36,
1515 144,126,199,18,32,115,15,125,7,101,16,202,64,160,39,14,110,183,7,248,87,
1516 201,94,25,235,185,143,207,227,93,116,237,28,202,75,100,234,78,0,215,19,
1517 32,254,67,157,16,22,0,253,195,177,147,204,49,182,203,20,90,82,226,146,103,
1518 0,20,224,101,36,51,245,98,237,15,174,141,1,146,125,160,53,213,145,89,8,
1519 35,8,115,112,253,17,123,216,32,25,52,194,124,104,176,65,57,48,141,12,93,
1520 86,183,193,149,10,144,172,67,211,0,63,112,79,184,182,166,240,62,111,200,
1521 18,60,4,194,246,235,38,71,129,161,100,232,145,96,141,97,85,128,248,247,
1522 196,64,236,26,68,134,133,99,7,32,130,0,75,121,131,113,178,53,92,83,183,
1523 242,54,113,164,242,154,94,55,18,112,92,1,226,63,156,136,212,108,3,146,157,
1524 122,87,75,99,202,216,44,51,233,199,31,195,53,85,75,9,194,72,102,235,246,
1525 80,130,142,42,224,230,64,247,59,160,149,19,253,91,185,143,11,20,200,100,
1526 30,229,100,184,166,106,217,69,128,23,241,105,177,21,97,219,131,149,204,
1527 63,220,2,161,0,23,130,239,202,103,28,148,17,174,4,95,133,151,77,252,112,
1528 7,1,158,177,26,60,216,76,128,172,42,138,164,170,58,31,184,223,182,135,117,
1529 24,32,251,216,39,163,73,228,98,104,225,16,156,162,13,223,215,53,12,213,
1530 236,190,66,97,95,59,186,246,42,224,60,203,65,122,217,210,9,194,4,217,204,
1531 54,82,137,197,112,108,178,204,123,12,160,171,110,160,144,142,0,30,132,60,
1532 153,251,105,7,171,250,150,7,65,201,42,124,25,100,173,67,63,1,240,16,96,
1533 177,44,102,34,155,194,49,3,192,85,226,24,167,51,200,163,79,144,86,57,73,
1534 124,211,206,58,161,125,69,104,159,44,32,254,99,113,32,243,109,123,121,11,
1535 177,92,103,155,164,186,18,252,1,58,211,69,55,26,4,15,160,15,114,165,116,
1536 130,21,91,214,110,1,41,75,5,18,44,250,87,143,86,92,226,19,121,133,231,216,
1537 231,212,4,0,1,60,252,76,71,209,75,87,115,38,212,24,172,146,46,11,142,132,
1538 124,135,8,153,0,241,23,182,4,82,45,123,89,135,71,56,201,65,25,65,55,78,
1539 56,53,1,192,89,18,248,1,43,200,100,12,53,214,174,91,60,149,229,179,66,9,
1540 89,176,36,62,32,214,74,143,117,233,43,7,216,47,163,104,195,231,78,212,255,
1541 199,86,125,138,71,117,35,159,104,87,155,154,242,170,248,139,218,154,73,
1542 152,38,64,150,158,138,70,24,110,179,87,0,198,146,79,1,147,105,76,153,19,
1543 117,0,202,136,97,180,206,98,8,11,40,165,137,19,19,209,136,190,104,38,96,
1544 62,19,44,189,210,27,136,179,211,163,135,0,175,179,148,169,178,193,142,90,
1545 61,20,97,29,253,137,227,58,147,201,179,172,119,137,102,108,164,15,129,175,
1546 174,237,64,32,219,72,222,244,49,40,254,67,185,8,99,173,118,126,15,21,108,
1547 32,131,31,203,110,171,42,174,146,71,31,38,233,84,46,114,219,216,167,120,
1548 165,181,166,119,63,23,76,199,176,2,4,4,97,160,213,206,19,184,204,118,166,
1549 240,152,28,181,238,177,75,156,37,129,113,58,131,143,120,34,88,179,80,163,
1550 207,1,171,130,53,26,223,2,254,162,174,8,137,86,28,104,206,53,86,202,60,
1551 162,169,228,47,60,24,82,62,150,114,218,115,214,138,105,83,20,33,151,193,
1552 204,208,9,124,65,35,51,193,1,216,78,128,4,58,128,88,114,228,50,77,120,94,
1553 127,110,73,182,19,127,35,95,210,44,201,154,113,130,118,140,102,22,251,181,
1554 139,21,113,195,169,177,201,83,64,44,93,125,59,252,148,143,56,40,35,120,
1555 136,127,58,182,81,133,151,108,29,73,23,125,223,106,240,128,113,37,27,39,
1556 64,173,149,191,21,98,168,100,149,100,243,158,204,9,107,157,239,144,118,
1557 32,73,215,49,155,113,84,16,101,71,181,145,44,44,106,26,172,193,228,49,40,
1558 137,55,150,207,195,227,1,254,205,86,153,78,87,62,115,108,163,140,24,50,
1559 25,195,155,12,179,58,11,172,79,149,36,2,87,235,254,108,108,77,52,236,10,
1560 24,196,94,62,149,225,97,5,255,123,146,233,172,155,88,164,195,157,7,15,16,
1561 168,9,26,207,29,217,26,243,82,195,60,150,51,77,214,59,182,81,74,19,82,117,
1562 18,107,173,63,137,29,97,156,0,149,98,196,254,45,144,200,69,54,201,44,122,
1563 113,216,177,83,249,244,230,85,77,227,60,247,58,182,81,15,79,68,208,101,
1564 50,147,10,176,190,174,86,75,111,41,100,35,179,73,224,178,93,85,0,206,241,
1565 45,198,235,116,126,197,147,142,244,77,137,12,30,143,201,60,0,203,9,16,148,
1566 116,249,5,126,86,18,225,112,67,99,53,207,51,77,39,114,133,198,142,244,67,
1567 80,166,211,187,215,27,0,33,100,5,132,158,8,53,231,26,235,201,228,89,254,
1568 224,200,179,83,180,225,21,77,103,55,73,142,244,45,98,120,49,77,198,0,207,
1569 241,80,99,64,50,199,216,34,51,184,159,160,239,25,166,212,224,33,71,83,240,
1570 49,134,235,68,219,214,183,201,113,163,6,227,231,138,175,251,97,76,50,55,
1571 94,182,176,95,70,57,10,254,207,60,68,15,125,151,52,38,126,29,193,115,115,
1572 31,35,40,134,9,80,80,148,122,91,75,113,148,145,39,179,88,198,235,68,81,
1573 101,203,143,114,162,72,103,60,201,186,142,34,227,233,185,219,40,17,242,
1574 107,163,70,243,121,128,176,29,190,90,15,232,200,223,201,151,52,30,230,140,
1575 109,47,206,208,138,73,164,242,87,109,107,249,77,240,31,180,114,163,66,10,
1576 141,214,2,32,84,2,226,155,237,162,244,202,151,64,92,10,31,179,82,230,57,
1577 222,204,104,199,57,62,100,106,200,113,85,17,10,120,130,69,58,156,19,180,
1578 115,212,87,29,76,55,72,77,231,150,58,161,125,69,28,215,243,114,101,1,27,
1579 36,195,149,157,28,35,202,136,33,87,95,224,97,221,202,64,205,97,47,221,220,
1580 48,91,129,154,79,71,205,43,192,47,237,74,60,145,61,236,222,235,118,56,207,
1581 189,44,227,39,172,208,193,148,16,244,133,45,12,116,153,250,146,76,223,189,
1582 77,86,132,164,57,66,90,148,84,29,47,212,142,17,167,105,253,221,186,34,109,
1583 57,79,79,130,30,188,8,201,17,218,147,163,41,108,164,15,149,68,58,178,17,
1584 130,82,162,98,12,23,67,107,177,180,55,40,254,99,113,72,217,41,110,217,29,
1585 74,146,227,20,48,217,214,180,87,17,126,171,143,147,67,10,59,233,97,89,207,
1586 17,162,211,52,35,57,228,50,149,165,247,75,245,117,252,18,116,102,237,255,
1587 3,100,31,123,24,99,57,248,10,162,88,195,32,58,233,102,250,177,228,206,7,
1588 143,156,164,89,252,82,75,146,118,142,200,72,86,209,170,49,146,63,122,57,
1589 11,45,205,249,47,18,79,46,131,89,174,67,184,64,115,203,253,132,201,53,60,
1590 158,199,117,118,55,195,217,223,173,216,88,15,16,169,18,239,101,47,213,33,
1591 37,143,243,109,22,235,48,214,243,44,229,246,150,174,194,37,128,50,212,106,
1592 240,96,53,1,126,137,34,130,181,94,170,83,204,196,118,105,50,139,36,133,
1593 223,232,247,80,139,43,202,46,51,67,125,73,59,236,40,132,190,5,22,74,83,
1594 42,249,0,232,29,172,185,10,47,121,244,33,71,83,44,237,9,220,65,150,106,
1595 102,210,68,187,74,230,21,144,45,109,80,118,0,157,234,54,5,144,171,43,244,
1596 133,178,108,94,110,85,76,11,187,253,186,73,53,162,147,52,35,249,109,39,
1597 202,198,21,224,151,71,240,176,3,104,93,167,229,20,194,155,196,240,174,252,
1598 103,119,141,91,7,37,29,82,2,50,68,51,187,59,222,140,12,158,128,185,242,
1599 52,74,62,220,182,39,189,15,33,135,26,182,227,211,219,30,1,110,30,149,181,
1600 193,159,80,134,170,47,233,116,56,70,234,39,32,75,94,66,120,135,27,231,248,
1601 171,129,173,64,14,25,90,104,106,200,197,195,210,33,56,13,154,78,102,242,
1602 47,213,133,141,139,219,19,48,87,50,80,178,128,171,40,171,81,150,224,83,
1603 91,251,88,110,29,151,15,194,37,208,185,104,108,174,250,58,86,186,101,244,
1604 70,2,252,226,37,130,21,40,79,1,111,17,205,26,210,244,139,176,12,187,240,
1605 193,4,232,5,84,10,128,15,105,82,181,83,95,235,233,250,235,168,232,28,226,
1606 136,96,42,1,142,209,129,15,24,162,53,174,119,18,206,39,51,62,247,206,205,
1607 7,69,23,210,88,85,105,136,63,84,133,57,187,99,26,170,127,85,117,255,147,
1608 153,255,55,238,250,239,6,191,73,64,67,59,208,208,220,245,9,248,47,129,162,
1609 138,91,51,247,7,138,0,0,0,0,73,69,78,68,174,66,96,130};
1610 
1611 static size_t xml_res_size_18 = 1387;
1612 static unsigned char xml_res_file_18[] = {
1613 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1614 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1615 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
1616 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1617 46,111,114,103,155,238,60,26,0,0,4,232,73,68,65,84,88,133,157,151,93,108,
1618 84,69,20,128,191,217,237,222,187,109,183,116,55,180,208,165,11,180,6,161,
1619 109,68,137,72,90,5,82,160,18,76,32,252,36,62,16,49,38,168,49,106,2,145,
1620 24,35,82,161,187,88,8,241,15,8,250,64,162,79,136,33,18,21,80,49,4,45,148,
1621 96,160,20,98,168,134,22,65,133,208,150,109,5,183,101,75,187,255,227,67,
1622 183,187,221,191,123,47,158,100,30,102,206,153,51,223,189,103,230,156,25,
1623 33,165,196,136,136,125,215,85,124,3,75,128,85,64,53,8,39,72,103,92,123,
1624 27,228,109,160,19,56,138,195,222,34,55,204,8,26,242,171,7,32,118,94,114,
1625 18,150,219,16,172,3,138,12,209,130,31,201,65,44,98,187,220,50,247,246,255,
1626 2,16,158,211,86,132,237,93,96,19,80,144,205,198,97,53,227,11,68,181,252,
1627 15,3,187,145,67,205,178,105,81,192,48,128,240,180,151,33,196,17,160,86,
1628 203,251,129,53,149,28,187,58,192,225,43,62,45,51,128,54,164,92,45,155,230,
1629 121,211,21,166,140,197,183,158,125,12,33,218,245,22,175,115,21,178,110,
1630 246,68,62,88,58,21,107,94,134,155,116,169,69,136,118,241,222,165,217,154,
1631 0,194,221,90,70,44,242,61,145,144,75,203,155,0,246,44,155,134,0,166,23,
1632 43,188,245,212,100,61,0,0,23,82,30,23,158,246,178,172,0,194,115,69,33,36,
1633 191,69,226,34,18,130,72,40,167,167,231,31,157,72,109,121,97,162,191,121,
1634 190,19,215,4,197,24,132,16,71,132,231,180,53,3,128,96,127,35,80,151,232,
1635 231,128,40,180,152,216,213,144,250,131,10,44,38,118,53,148,27,1,0,168,141,
1636 111,238,36,128,104,60,225,68,240,102,134,105,22,136,45,11,157,76,41,178,
1637 100,152,62,55,123,34,117,174,194,140,241,28,178,73,236,188,228,76,0,32,
1638 21,15,146,236,179,199,65,56,172,102,26,42,39,208,121,39,245,68,141,68,98,
1639 116,244,13,179,126,78,137,81,128,2,194,114,27,128,96,255,69,11,55,253,119,
1640 145,58,73,38,79,25,109,64,133,93,229,239,141,201,13,125,185,111,152,57,
1641 251,175,24,93,124,76,252,56,236,165,38,110,12,45,209,91,220,44,68,206,61,
1642 161,57,71,91,138,240,13,44,49,33,99,43,115,89,168,102,193,27,117,147,249,
1643 120,89,124,211,61,0,196,249,151,170,88,49,179,88,207,108,149,9,147,168,
1644 206,166,89,57,203,78,219,203,213,184,235,167,80,164,154,147,138,72,8,25,
1645 214,175,51,85,37,249,124,183,246,97,78,172,155,73,77,105,126,46,179,106,
1646 193,59,167,186,128,89,99,35,53,165,249,188,255,180,139,5,211,108,9,171,
1647 152,132,112,44,153,178,5,80,84,96,197,106,29,61,206,18,8,69,83,83,186,98,
1648 22,140,5,33,18,147,124,218,222,143,187,181,151,129,148,218,33,174,9,182,
1649 156,242,35,177,57,242,243,104,92,88,198,250,57,37,70,226,7,128,170,170,
1650 9,8,35,114,103,56,66,99,75,15,159,253,250,15,241,239,25,74,73,197,6,175,
1651 6,9,9,6,131,4,2,89,139,92,86,145,241,54,94,50,66,80,93,154,207,174,134,
1652 114,234,167,39,15,70,182,16,40,230,228,95,82,84,21,147,69,77,113,60,62,
1653 4,225,152,228,147,11,253,120,90,123,25,12,102,134,160,5,201,226,116,218,
1654 229,51,139,105,94,92,78,165,93,229,155,46,31,47,30,189,145,208,77,43,86,
1655 233,120,181,38,209,255,189,127,132,5,7,254,74,228,9,0,255,230,199,177,41,
1656 38,126,188,62,200,166,19,183,184,122,55,235,159,58,147,71,76,118,34,68,
1657 6,192,15,127,12,114,242,207,123,188,246,196,36,42,29,6,10,205,216,241,140,
1658 67,116,222,25,193,221,218,203,241,107,131,90,179,58,243,16,166,99,32,95,
1659 207,166,13,69,37,123,219,250,12,111,202,241,16,79,126,222,69,84,127,83,
1660 29,53,81,97,107,65,224,215,178,50,224,40,21,34,18,50,50,199,143,195,222,
1661 98,146,175,204,13,35,229,33,35,190,237,86,51,63,189,48,139,175,158,125,
1662 136,80,84,38,90,133,93,225,236,250,42,246,60,51,53,5,66,83,36,7,229,134,
1663 25,193,209,99,168,152,182,33,184,175,7,48,16,136,114,246,166,159,170,18,
1664 43,138,89,36,154,77,49,243,200,164,124,190,252,237,223,164,177,54,196,48,
1665 22,177,29,226,229,88,186,235,189,72,62,210,3,0,248,240,92,31,253,195,225,
1666 140,241,175,187,124,92,232,73,251,134,220,16,187,199,174,235,201,68,164,
1667 78,218,1,156,215,3,24,10,69,105,62,147,122,213,15,68,98,52,157,238,205,
1668 62,33,19,162,13,57,212,60,214,73,0,200,166,154,16,138,88,131,160,91,15,
1669 226,139,142,187,92,246,142,36,250,123,47,244,211,61,168,17,243,36,68,247,
1670 232,245,60,249,70,72,77,197,238,122,47,176,2,65,143,22,64,76,194,219,63,
1671 223,2,160,251,94,136,221,231,250,244,152,33,26,234,33,22,93,158,254,54,
1672 200,184,208,203,29,139,46,35,204,243,128,139,90,254,206,119,223,231,112,
1673 167,143,173,167,122,9,68,98,122,203,95,68,152,231,73,119,109,71,186,66,
1674 251,105,22,196,141,96,35,146,172,5,221,110,53,167,149,215,116,39,140,128,
1675 105,47,74,204,243,64,79,179,84,144,95,166,16,12,123,16,172,69,98,211,52,
1676 78,46,60,132,228,16,170,165,73,54,205,207,177,59,13,2,36,12,247,93,87,241,
1677 246,44,5,185,26,68,21,146,50,132,28,125,229,72,225,69,224,5,217,5,226,8,
1678 101,229,39,141,62,207,255,3,52,228,253,72,11,53,84,78,0,0,0,0,73,69,78,
1679 68,174,66,96,130};
1680 
1681 static size_t xml_res_size_19 = 834;
1682 static unsigned char xml_res_file_19[] = {
1683 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1684 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1685 72,89,115,0,0,4,193,0,0,4,193,1,17,118,177,117,0,0,0,25,116,69,88,116,83,
1686 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1687 46,111,114,103,155,238,60,26,0,0,2,191,73,68,65,84,88,133,189,214,95,72,
1688 20,65,28,192,241,239,236,237,221,94,137,217,147,82,113,15,161,16,249,24,
1689 17,190,154,80,20,24,25,151,4,253,67,210,58,43,130,222,18,41,202,243,37,
1690 162,151,144,34,178,68,138,186,176,212,254,19,189,20,5,62,4,41,81,4,82,25,
1691 21,97,89,87,88,230,221,185,183,211,195,157,94,247,135,107,246,254,244,131,
1692 101,102,118,118,126,243,97,119,102,88,33,165,68,28,123,86,133,176,158,144,
1693 103,148,243,93,180,139,243,253,7,14,7,90,85,199,232,177,66,234,64,69,190,
1694 0,13,139,125,244,249,186,58,164,190,255,200,213,22,181,49,0,145,223,26,
1695 102,36,223,249,1,112,96,209,42,174,53,159,246,55,94,80,7,0,152,17,10,137,
1696 240,113,189,233,172,223,219,171,14,40,48,66,195,162,133,129,29,231,58,54,
1697 93,82,7,20,1,209,44,6,183,118,251,27,174,168,3,10,140,16,72,118,113,99,
1698 75,143,127,67,159,58,160,8,136,38,110,121,123,253,245,3,234,128,2,35,0,
1699 118,114,123,227,197,206,245,55,213,1,69,64,108,151,247,234,47,251,215,221,
1700 153,109,11,41,37,162,253,113,53,50,250,50,235,72,221,21,187,178,132,3,11,
1701 15,159,209,176,208,176,16,16,47,37,26,50,94,198,218,159,156,229,203,38,
1702 218,234,70,117,101,250,236,91,200,130,136,162,241,142,69,106,249,34,66,
1703 3,149,79,144,138,40,224,231,176,15,40,2,194,62,160,192,136,180,53,224,212,
1704 4,1,111,165,210,96,167,203,133,203,112,207,181,79,14,141,243,224,237,100,
1705 126,0,135,38,168,91,90,170,156,192,237,54,48,12,3,128,192,139,160,173,201,
1706 51,2,66,166,197,194,227,195,54,179,252,123,139,42,3,114,138,148,45,186,
1707 71,244,179,92,142,1,240,26,15,93,52,22,25,144,130,104,224,33,107,197,16,
1708 0,143,88,65,151,180,1,16,128,167,204,200,217,33,156,130,121,97,1,102,34,
1709 95,182,72,3,24,186,198,115,95,117,206,0,0,247,96,9,188,143,213,157,142,
1710 4,70,9,96,90,146,158,145,175,121,1,214,4,67,84,154,96,232,16,149,217,159,
1711 205,8,56,120,255,131,242,100,135,68,47,123,73,254,215,152,79,136,80,188,
1712 94,163,143,240,67,212,38,245,183,177,143,51,114,115,102,128,221,112,203,
1713 48,11,196,84,198,190,144,9,110,162,148,233,191,146,238,27,114,102,174,158,
1714 219,81,108,35,66,38,132,237,172,1,93,19,116,214,46,86,158,192,19,172,99,
1715 56,152,124,114,86,77,220,165,116,250,35,0,227,162,130,192,204,106,116,233,
1716 64,215,29,0,60,37,177,200,51,2,124,43,203,149,1,224,141,95,127,69,223,27,
1717 24,139,3,156,75,56,26,222,29,223,9,233,39,102,26,32,108,90,172,234,126,
1718 101,3,144,30,167,126,78,81,19,175,79,207,68,19,29,25,126,106,210,0,18,24,
1719 253,22,74,189,109,43,166,132,53,87,183,82,183,225,44,194,97,100,6,252,151,
1720 48,35,16,141,106,9,128,196,4,190,20,42,127,187,108,213,79,136,109,2,96,
1721 82,150,72,50,157,133,177,57,249,3,235,9,253,190,72,67,151,122,0,0,0,0,73,
1722 69,78,68,174,66,96,130};
1723 
1724 static size_t xml_res_size_20 = 544;
1725 static unsigned char xml_res_file_20[] = {
1726 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1727 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1728 72,89,115,0,0,4,193,0,0,4,193,1,17,118,177,117,0,0,0,25,116,69,88,116,83,
1729 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1730 46,111,114,103,155,238,60,26,0,0,1,157,73,68,65,84,88,133,197,214,187,74,
1731 3,65,20,198,241,255,108,54,23,215,66,8,104,33,190,129,160,157,181,118,54,
1732 1,45,237,4,65,124,8,49,104,163,98,161,96,35,216,9,193,215,136,160,62,128,
1733 133,141,141,18,65,137,226,5,194,102,77,54,57,22,154,16,67,46,123,153,93,
1734 191,106,216,153,195,252,56,59,59,172,18,17,56,86,105,62,120,96,88,20,251,
1735 108,202,225,208,117,62,162,68,4,182,85,70,20,85,165,60,84,8,235,108,201,
1736 169,46,128,209,26,216,117,16,241,80,161,56,97,71,173,232,2,180,59,240,89,
1737 163,106,26,96,37,193,83,39,194,166,201,8,121,113,140,206,103,110,211,71,
1738 39,52,197,108,143,70,199,97,114,14,23,176,19,6,86,42,17,93,39,74,151,80,
1739 121,237,2,76,204,194,114,1,224,7,97,154,88,150,133,138,66,113,182,0,149,
1740 34,208,113,8,187,227,186,46,182,109,35,17,191,15,115,208,100,11,209,221,
1741 137,171,82,133,131,235,231,224,187,150,87,201,89,99,201,53,112,6,2,122,
1742 33,110,95,170,228,206,239,120,119,26,193,1,76,51,35,23,9,24,210,129,110,
1743 196,155,107,178,88,8,187,249,223,152,0,187,153,141,244,222,253,18,28,221,
1744 12,92,92,19,3,71,165,180,94,20,74,68,80,219,197,12,95,84,61,85,24,9,72,
1745 102,194,35,164,50,34,249,121,167,239,87,208,55,205,6,212,29,109,183,149,
1746 127,128,102,68,48,128,70,68,112,64,39,226,223,0,45,68,205,219,249,141,6,
1747 16,18,161,7,16,2,161,15,16,16,161,23,16,0,161,31,224,19,17,13,192,7,34,
1748 58,128,71,68,180,0,15,136,232,1,67,16,241,0,6,32,226,3,244,65,196,11,232,
1749 129,136,31,208,66,252,230,231,167,52,59,37,60,61,150,99,69,100,167,4,224,
1750 27,27,92,198,229,13,213,26,65,0,0,0,0,73,69,78,68,174,66,96,130};
1751 
1752 static size_t xml_res_size_21 = 680;
1753 static unsigned char xml_res_file_21[] = {
1754 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1755 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1756 72,89,115,0,0,4,68,0,0,4,68,1,25,255,88,16,0,0,0,25,116,69,88,116,83,111,
1757 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
1758 111,114,103,155,238,60,26,0,0,2,37,73,68,65,84,88,133,189,151,63,104,19,
1759 81,28,199,63,239,229,146,92,18,144,154,193,34,56,116,8,56,185,8,82,71,23,
1760 55,65,11,130,21,92,116,23,255,141,34,37,155,163,131,142,130,147,224,160,
1761 131,155,197,65,233,98,21,135,130,165,14,69,227,159,34,73,53,38,173,73,147,
1762 188,196,231,164,189,36,191,94,238,206,75,190,112,144,247,126,47,191,247,
1763 201,189,207,5,78,89,107,25,21,85,124,225,160,114,183,65,221,24,185,24,214,
1764 81,246,140,189,117,108,53,192,90,84,31,64,81,77,13,46,184,203,124,246,186,
1765 186,242,196,224,204,6,105,8,160,176,141,195,124,62,191,102,207,46,9,229,
1766 38,11,182,243,119,160,61,155,187,104,126,14,94,167,244,203,141,48,155,3,
1767 88,84,238,28,139,79,165,126,104,46,121,215,106,239,192,244,194,108,19,79,
1768 28,239,160,105,32,11,36,19,187,115,105,12,179,188,11,221,248,144,170,132,
1769 7,144,32,14,242,157,87,234,98,104,128,160,209,210,100,211,76,238,56,68,
1770 128,73,66,236,62,134,69,229,214,59,236,120,139,239,153,225,180,115,15,18,
1771 67,39,21,57,219,228,182,154,251,167,15,216,203,133,54,8,14,120,99,112,40,
1772 155,44,224,198,9,177,143,234,87,5,5,192,231,8,250,73,90,208,235,198,5,208,
1773 151,96,0,99,132,8,14,48,38,136,112,0,99,128,8,15,240,15,194,196,2,16,72,
1774 237,66,222,101,102,42,53,52,175,83,46,218,73,138,223,89,219,220,225,83,
1775 189,35,214,66,3,92,56,146,231,234,241,105,177,150,201,100,72,165,134,225,
1776 174,61,251,194,157,229,114,60,0,15,86,126,240,188,180,181,103,61,145,116,
1777 81,3,119,98,189,218,14,210,58,24,64,169,214,166,84,243,107,248,11,146,105,
1778 72,200,199,225,151,104,18,74,49,237,72,98,254,151,132,82,246,18,243,219,
1779 182,97,165,220,140,6,224,39,161,20,73,204,71,171,85,230,31,127,136,6,48,
1780 74,66,41,131,98,86,26,242,159,87,76,18,74,9,38,102,124,18,74,9,32,102,236,
1781 18,74,209,41,151,154,81,188,222,104,68,3,8,43,161,148,55,155,93,78,62,252,
1782 24,13,32,138,132,131,169,183,126,67,175,55,228,196,24,37,244,137,22,63,
1783 78,40,166,255,135,120,239,64,23,203,125,111,177,162,243,121,44,115,227,
1784 228,81,126,175,231,234,230,210,81,108,239,109,236,187,166,201,216,133,19,
1785 45,128,63,147,180,205,25,132,236,135,65,0,0,0,0,73,69,78,68,174,66,96,130};
1786 
1787 static size_t xml_res_size_22 = 934;
1788 static unsigned char xml_res_file_22[] = {
1789 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1790 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1791 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
1792 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1793 46,111,114,103,155,238,60,26,0,0,3,35,73,68,65,84,88,133,197,151,207,111,
1794 19,87,16,199,63,243,188,217,24,228,0,17,82,126,72,21,225,0,2,170,220,32,
1795 132,0,7,211,162,74,205,161,228,88,196,129,91,47,136,3,135,94,106,130,237,
1796 68,201,21,33,254,134,64,111,13,28,80,85,104,229,75,81,163,170,151,86,162,
1797 169,26,169,165,42,10,84,145,32,36,106,252,214,235,29,14,177,29,255,10,89,
1798 59,27,152,211,122,222,188,253,126,222,123,126,51,179,162,170,132,49,185,
1799 189,208,201,203,87,31,1,23,128,99,32,253,160,253,165,225,231,160,139,96,
1800 230,81,185,15,175,31,105,58,153,15,245,222,173,0,100,250,151,126,10,122,
1801 3,225,18,208,21,138,22,86,81,253,26,199,207,104,106,228,89,91,0,165,21,
1802 143,3,215,128,221,33,133,235,109,13,229,38,172,78,110,182,35,77,1,100,122,
1803 174,23,223,204,130,156,106,83,184,222,230,80,29,211,244,208,243,45,1,36,
1804 59,247,33,18,123,0,12,68,36,94,182,127,17,25,213,241,227,191,109,10,32,
1805 217,199,61,120,133,159,137,117,28,192,113,35,214,47,65,168,14,85,239,132,
1806 217,16,127,226,226,121,223,160,122,0,223,3,223,219,9,128,15,16,153,149,
1807 108,46,94,118,56,149,33,111,41,133,114,186,242,219,247,112,140,144,216,
1808 29,167,222,2,133,215,182,88,227,235,114,99,196,76,67,40,171,94,128,31,212,
1809 28,243,48,36,198,129,20,148,142,64,82,115,189,176,182,128,146,168,142,60,
1810 59,144,224,225,229,65,226,241,90,136,167,203,30,7,111,253,90,227,155,191,
1811 50,200,145,253,141,176,159,222,249,147,111,23,150,235,221,107,196,10,135,
1812 53,53,242,108,157,57,88,203,212,139,151,205,90,75,62,31,42,167,180,98,187,
1813 240,157,12,128,145,108,206,65,184,248,182,232,29,129,16,249,92,178,185,
1814 184,193,202,199,192,222,173,226,119,0,34,1,123,206,59,160,23,194,206,176,
1815 214,150,158,154,252,219,218,49,209,207,28,224,72,43,115,172,181,216,188,
1816 68,3,64,112,212,0,125,173,78,243,60,27,81,158,144,126,3,244,182,53,55,154,
1817 100,213,183,189,195,140,0,194,0,13,21,234,221,65,200,162,65,182,9,80,130,
1818 176,182,157,43,170,139,6,149,249,109,3,0,94,123,121,226,119,3,204,70,1,
1819 0,109,37,171,123,134,78,205,1,47,223,3,196,10,221,251,126,48,154,78,250,
1820 40,51,81,1,132,134,80,102,244,234,33,187,126,13,125,111,18,97,229,29,66,
1821 252,79,135,76,64,85,75,38,169,92,6,37,93,29,101,4,220,38,93,134,170,98,
1822 139,181,189,164,27,19,140,52,166,104,79,28,130,88,67,123,55,165,55,78,92,
1823 135,234,142,104,160,107,138,191,87,206,3,103,202,174,64,33,239,7,155,173,
1824 162,86,168,168,64,179,22,223,91,119,87,122,76,253,137,238,238,201,242,104,
1825 101,121,250,197,241,2,46,99,192,95,161,20,91,177,141,100,245,20,39,24,211,
1826 171,135,202,101,181,182,174,106,38,185,4,222,232,142,64,20,11,255,160,197,
1827 81,253,106,248,69,181,187,225,128,117,250,147,121,92,78,2,63,70,167,174,
1828 143,113,59,134,52,61,252,164,126,164,105,49,210,76,114,137,131,93,231,16,
1829 178,219,186,29,194,42,48,65,103,239,57,77,159,254,175,105,200,150,31,167,
1830 95,126,215,131,227,142,151,62,78,187,67,74,47,163,220,197,236,202,232,84,
1831 237,150,183,12,80,9,204,230,28,172,36,129,49,68,143,162,244,177,209,204,
1832 188,96,189,170,254,1,114,143,78,253,94,211,73,63,204,123,223,0,202,222,
1833 98,133,128,94,40,169,0,0,0,0,73,69,78,68,174,66,96,130};
1834 
1835 static size_t xml_res_size_23 = 1152;
1836 static unsigned char xml_res_file_23[] = {
1837 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1838 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1839 72,89,115,0,0,4,196,0,0,4,196,1,60,204,212,131,0,0,0,25,116,69,88,116,83,
1840 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1841 46,111,114,103,155,238,60,26,0,0,3,253,73,68,65,84,88,133,173,151,65,76,
1842 20,87,24,199,127,111,152,221,69,11,90,148,194,34,132,42,49,21,65,15,141,
1843 65,42,189,44,149,152,200,161,154,216,52,109,106,218,30,219,8,7,107,232,
1844 65,130,187,104,36,169,77,234,129,52,105,155,244,72,172,39,177,77,218,164,
1845 182,64,90,171,130,161,166,33,82,108,108,172,20,187,64,41,84,89,101,103,
1846 153,229,235,129,101,217,93,102,103,150,45,255,211,236,188,239,125,255,223,
1847 124,111,231,125,111,148,136,144,137,84,231,93,15,51,255,190,4,28,2,118,
1848 130,42,1,41,137,13,143,131,4,65,27,65,212,151,240,232,59,241,251,194,25,
1849 229,117,2,80,29,131,37,204,203,41,20,111,0,249,25,209,66,8,145,47,208,205,
1850 128,180,238,123,144,21,64,236,137,219,128,227,192,250,12,141,83,53,135,
1851 112,30,66,103,210,85,196,18,64,117,244,23,99,106,221,160,94,200,210,56,
1852 85,253,136,28,22,127,205,184,35,128,106,239,175,66,229,124,13,60,187,70,
1853 230,75,26,67,169,70,105,219,51,148,22,64,181,95,43,34,50,127,147,28,87,
1854 57,186,123,141,253,99,16,34,53,137,149,208,150,205,135,221,68,34,151,16,
1855 41,199,140,128,25,137,207,218,146,239,226,185,205,185,107,1,80,134,82,221,
1856 170,189,47,158,44,14,64,100,170,21,161,46,254,59,1,162,162,192,195,237,
1857 119,171,233,60,88,78,225,122,253,255,66,212,66,94,91,18,128,106,237,47,
1858 134,133,247,86,132,198,32,116,77,161,107,138,166,154,34,238,54,239,230,
1859 253,58,47,158,28,149,61,130,226,184,58,123,189,52,14,192,194,92,0,33,207,
1860 50,216,140,160,69,151,151,99,163,39,135,15,26,202,184,211,180,155,215,119,
1861 109,34,75,140,117,152,122,96,145,37,208,171,99,48,5,108,76,23,221,80,177,
1862 129,175,142,86,145,155,187,242,127,48,240,224,49,39,174,252,201,213,209,
1863 208,106,33,66,72,232,25,13,67,237,183,51,7,208,53,133,97,24,132,195,43,
1864 247,146,189,165,79,241,227,219,149,92,124,165,130,210,252,85,189,57,121,
1865 176,161,65,3,57,228,20,169,107,139,133,78,7,1,240,106,213,38,70,142,237,
1866 162,165,206,139,75,203,112,97,148,188,172,1,59,156,1,150,175,237,32,242,
1867 220,26,231,26,202,248,229,157,106,234,183,102,210,54,22,42,53,192,235,12,
1868 144,252,68,118,16,0,59,11,115,233,121,115,7,23,142,84,176,37,223,101,147,
1869 89,149,104,64,241,106,1,50,129,0,120,173,122,113,89,78,236,43,182,204,1,
1870 120,53,171,187,153,42,19,8,0,187,142,175,3,227,192,102,187,4,230,66,250,
1871 12,134,97,0,88,190,162,93,67,255,208,114,101,140,96,104,62,205,108,21,212,
1872 81,140,35,84,103,11,96,5,49,52,57,71,211,55,163,252,112,127,214,118,30,
1873 72,80,71,212,8,200,126,123,0,135,60,49,136,71,70,148,142,27,211,124,124,
1874 115,210,17,58,166,95,117,160,27,56,102,15,96,159,76,128,139,183,167,57,
1875 213,251,23,147,134,98,21,173,252,178,142,71,250,48,152,1,10,178,1,184,62,
1876 246,152,214,158,49,126,14,62,73,30,112,134,152,165,224,233,30,77,252,62,
1877 19,161,203,46,210,10,224,247,153,48,71,47,221,227,96,215,111,43,205,83,
1878 206,19,150,18,186,164,121,187,161,199,38,156,193,237,126,11,177,62,245,
1879 154,9,239,209,116,216,228,220,213,113,62,191,53,197,188,221,210,44,1,88,
1880 87,226,9,46,117,26,98,237,88,62,60,48,9,124,148,54,215,130,96,68,133,206,
1881 129,9,158,255,116,152,79,6,255,182,55,79,132,176,174,196,121,57,185,39,
1882 8,9,103,66,245,217,160,139,63,102,123,129,23,83,163,189,121,46,220,57,26,
1883 163,15,13,103,83,43,233,238,132,74,200,13,10,10,124,210,188,221,72,2,0,
1884 80,129,190,66,34,12,0,219,178,115,114,132,184,143,30,173,149,147,181,19,
1885 75,183,147,182,98,9,248,166,32,210,8,220,91,115,128,232,252,40,18,109,76,
1886 52,95,1,0,32,29,7,70,112,179,23,248,105,237,220,229,26,110,87,141,248,107,
1887 135,83,71,44,155,145,4,124,83,108,205,175,71,209,142,194,105,63,77,47,69,
1888 8,56,141,167,184,94,252,117,147,150,33,142,31,167,45,223,22,161,187,219,
1889 98,31,167,105,55,171,20,61,68,184,128,182,46,32,103,147,75,190,106,128,
1890 120,96,123,159,142,161,124,192,97,148,84,34,120,89,62,204,76,176,216,85,
1891 239,128,186,140,71,190,23,191,207,204,36,239,127,184,206,178,106,141,44,
1892 108,8,0,0,0,0,73,69,78,68,174,66,96,130};
1893 
1894 static size_t xml_res_size_24 = 637;
1895 static unsigned char xml_res_file_24[] = {
1896 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1897 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1898 72,89,115,0,0,6,40,0,0,6,40,1,59,154,118,221,0,0,0,25,116,69,88,116,83,
1899 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1900 46,111,114,103,155,238,60,26,0,0,1,250,73,68,65,84,88,133,237,151,191,107,
1901 212,96,24,199,63,79,46,119,189,90,184,201,193,31,187,5,7,57,255,128,162,
1902 14,66,55,71,65,144,34,232,162,130,131,58,28,5,53,151,156,83,55,113,237,
1903 230,225,84,112,40,66,135,20,58,116,170,168,8,138,184,168,224,15,112,234,
1904 116,73,239,146,199,161,173,151,228,114,114,105,211,166,195,125,167,228,
1905 155,188,249,126,242,62,111,158,36,162,170,20,41,163,208,244,49,192,81,0,
1906 16,26,238,38,200,68,220,45,45,106,107,230,118,174,65,214,198,51,132,91,
1907 9,219,51,119,194,227,0,26,84,242,12,223,38,160,60,144,195,17,40,193,232,
1908 0,182,44,225,200,108,113,0,80,71,121,141,45,43,88,114,238,208,1,182,2,202,
1909 59,155,151,49,120,139,35,139,88,114,234,208,0,188,30,166,31,68,198,41,55,
1910 48,248,130,45,22,11,50,117,224,0,10,166,215,133,173,32,102,31,3,30,209,
1911 225,51,77,185,122,160,0,40,38,64,103,16,2,224,52,194,75,108,113,177,228,
1912 108,22,0,51,213,21,206,200,188,123,51,106,253,17,179,90,214,30,187,16,0,
1913 149,210,192,200,75,161,33,31,214,237,250,202,117,154,175,190,114,210,235,
1914 95,83,166,73,121,241,10,141,85,143,148,6,145,212,111,153,165,138,31,243,
1915 38,203,169,16,0,252,226,56,15,244,30,109,254,251,228,250,251,106,68,67,
1916 202,145,73,67,74,32,235,24,210,142,90,37,13,22,80,170,105,16,208,159,137,
1917 16,9,215,56,239,206,209,92,254,46,39,250,37,80,174,129,206,140,6,160,250,
1918 73,237,11,207,163,214,230,124,207,129,65,128,4,196,170,17,234,221,139,143,
1919 223,124,252,150,188,167,230,70,29,24,17,32,77,66,47,109,17,109,31,226,167,
1920 215,229,97,229,137,182,211,207,24,174,145,215,128,64,47,233,41,116,16,158,
1921 250,21,166,107,173,236,225,144,97,6,66,37,144,232,174,240,98,2,26,147,142,
1922 254,216,75,112,102,128,127,51,32,184,166,114,127,202,209,119,251,9,222,
1923 11,192,123,224,78,205,209,229,60,130,51,3,212,90,122,37,207,224,93,21,254,
1924 69,100,130,250,32,113,87,233,230,158,164,116,145,68,47,7,79,198,191,102,
1925 99,128,162,1,254,2,87,167,156,99,57,199,119,147,0,0,0,0,73,69,78,68,174,
1926 66,96,130};
1927 
1928 static size_t xml_res_size_25 = 708;
1929 static unsigned char xml_res_file_25[] = {
1930 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1931 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1932 72,89,115,0,0,5,163,0,0,5,163,1,164,52,119,130,0,0,0,25,116,69,88,116,83,
1933 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1934 46,111,114,103,155,238,60,26,0,0,2,65,73,68,65,84,88,133,197,151,189,107,
1935 19,113,24,199,63,207,229,146,212,40,173,118,16,117,112,208,69,16,28,10,
1936 138,56,104,193,197,127,160,8,110,110,29,44,74,209,74,91,46,103,154,74,65,
1937 240,101,17,58,184,72,55,157,116,18,234,34,138,155,131,130,173,98,21,193,
1938 183,56,136,73,91,95,146,92,238,113,136,74,122,36,185,203,93,94,158,237,
1939 126,207,243,251,62,159,251,253,158,223,155,168,42,161,45,43,7,113,249,142,
1940 173,43,97,37,140,240,217,1,225,16,6,75,204,200,13,50,50,216,125,0,48,129,
1941 56,194,89,12,86,200,202,56,25,73,116,15,64,137,213,124,109,3,174,98,176,
1942 204,140,140,116,7,160,58,2,94,219,131,112,135,172,60,229,178,28,246,19,
1943 16,111,17,22,44,57,153,48,152,218,100,18,164,58,183,3,59,155,248,21,88,
1944 32,198,4,83,250,213,23,96,117,90,78,40,220,3,18,73,19,250,234,253,95,56,
1945 43,0,105,246,113,147,17,173,212,5,88,75,203,17,215,101,17,37,245,207,217,
1946 102,8,16,94,160,156,193,210,199,27,0,242,147,114,64,12,30,1,91,189,125,
1947 218,14,81,5,89,160,194,4,182,230,36,63,205,94,148,39,192,142,70,241,29,
1948 129,128,85,148,81,67,148,219,205,146,3,20,29,248,237,180,53,121,25,152,
1949 39,197,125,83,133,254,32,245,94,252,11,208,134,145,120,136,203,24,182,190,
1950 130,250,235,184,83,16,31,81,198,73,235,221,218,198,150,165,66,64,148,80,
1951 174,147,34,203,121,253,225,117,6,149,121,143,203,241,255,16,37,232,51,112,
1952 137,49,138,114,177,73,191,7,8,231,176,244,117,163,128,160,0,229,129,57,
1953 125,231,109,116,50,242,205,172,191,153,63,71,185,64,90,23,253,132,35,157,
1954 5,191,202,184,158,213,241,9,56,141,203,80,144,228,16,162,6,106,77,133,74,
1955 209,1,129,181,164,201,21,92,174,97,235,207,86,52,162,45,42,165,4,220,114,
1956 4,43,105,105,46,140,68,36,128,254,56,243,216,234,70,209,136,118,31,136,
1957 152,60,58,64,27,44,232,20,36,11,147,50,228,23,52,176,139,151,140,105,177,
1958 19,0,187,49,120,230,23,180,158,99,255,22,88,106,5,160,231,83,208,123,0,
1959 169,222,215,122,7,224,192,41,224,109,207,0,6,103,245,67,60,193,81,224,77,
1960 79,0,0,82,182,126,142,11,199,68,104,120,108,118,20,0,32,53,171,95,98,38,
1961 195,34,44,119,19,96,195,62,176,249,146,230,214,51,50,92,41,51,39,66,75,
1962 143,76,0,195,36,223,106,159,63,132,231,183,174,19,196,144,63,0,0,0,0,73,
1963 69,78,68,174,66,96,130};
1964 
1965 static size_t xml_res_size_26 = 915;
1966 static unsigned char xml_res_file_26[] = {
1967 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
1968 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
1969 72,89,115,0,0,4,109,0,0,4,109,1,125,26,147,5,0,0,0,25,116,69,88,116,83,
1970 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
1971 46,111,114,103,155,238,60,26,0,0,3,16,73,68,65,84,88,133,197,151,75,76,
1972 19,81,20,134,191,51,45,69,141,70,37,186,192,184,48,4,19,21,220,128,10,198,
1973 32,132,196,133,47,140,27,163,241,177,48,49,198,168,145,141,137,82,218,177,
1974 173,2,75,8,137,46,140,27,99,226,194,133,111,19,87,20,65,23,10,46,84,92,
1975 24,95,43,93,152,136,111,177,237,204,113,161,192,148,182,208,78,139,158,
1976 100,22,115,207,127,206,249,230,222,59,115,207,136,170,226,198,164,227,233,
1977 124,98,35,126,48,122,52,88,125,219,85,18,192,155,115,225,208,115,31,242,
1978 227,48,208,10,82,130,216,15,221,22,207,25,64,34,143,118,32,210,14,148,141,
1979 143,26,57,63,68,82,206,108,150,64,34,131,53,168,221,9,82,155,206,139,202,
1980 157,204,209,241,47,106,214,60,119,5,32,161,193,5,136,118,0,251,1,153,146,
1981 52,189,217,32,59,53,88,125,37,107,0,9,97,32,3,7,128,54,160,196,101,97,167,
1982 197,192,104,210,96,213,221,41,1,36,216,83,131,101,156,197,83,84,133,215,
1983 87,128,218,99,246,3,213,13,106,174,126,144,17,64,66,247,23,241,43,222,11,
1984 148,3,224,245,81,96,136,79,168,181,206,185,39,12,167,87,205,117,239,40,
1985 93,92,9,18,6,70,72,196,32,17,43,36,192,60,12,239,122,231,128,49,81,161,
1986 71,203,127,105,91,189,137,199,174,68,184,61,13,16,73,150,241,29,214,72,
1987 227,43,96,139,156,232,219,70,34,214,9,44,201,176,28,175,129,15,142,251,
1988 89,192,202,108,1,82,102,32,5,164,163,238,58,197,44,39,17,11,96,197,191,
1989 164,145,156,210,224,170,218,209,11,213,125,217,22,135,9,51,32,161,91,179,
1990 136,205,157,155,42,243,128,112,129,68,226,2,134,225,71,60,7,29,177,137,
1991 92,10,78,180,228,25,136,207,222,143,90,239,50,94,80,170,102,205,17,212,
1992 174,64,184,246,23,59,47,0,87,223,113,53,215,188,0,182,75,228,113,29,216,
1993 223,254,57,192,24,72,160,170,47,159,120,200,98,19,78,183,229,5,32,193,254,
1994 106,9,68,27,254,27,0,150,46,197,162,71,252,209,27,210,18,93,230,38,69,94,
1995 123,96,44,94,217,138,176,81,252,125,231,241,205,8,163,90,154,49,98,78,252,
1996 115,1,1,172,241,120,197,11,214,33,172,248,110,138,138,219,177,191,118,170,
1997 217,48,50,85,134,228,211,176,53,122,4,155,238,73,244,67,192,79,199,253,
1998 2,96,73,138,234,207,41,250,26,53,142,169,89,117,107,50,128,92,103,160,34,
1999 43,213,159,195,171,12,175,239,166,68,6,110,32,118,179,182,174,121,147,78,
2000 58,125,175,225,232,41,170,52,97,27,67,18,30,12,72,247,203,226,201,1,148,
2001 40,240,121,162,40,111,8,152,9,26,102,248,211,19,105,27,76,218,160,201,13,
2002 201,153,134,103,96,109,37,121,157,11,5,49,128,232,30,109,169,126,239,116,
2003 167,111,74,91,238,109,66,244,42,170,5,232,199,100,24,209,0,190,134,115,
2004 106,98,167,120,51,181,229,114,178,119,23,134,125,9,21,183,251,68,129,139,
2005 224,57,174,109,117,31,50,137,38,255,47,240,71,43,81,77,211,31,140,10,140,
2006 205,168,158,76,227,121,132,97,55,235,233,198,7,105,124,217,3,76,25,220,
2007 218,191,23,59,113,209,49,244,22,67,90,244,116,253,229,108,115,228,251,37,
2008 252,219,140,200,48,66,59,190,133,93,106,174,200,169,131,205,15,192,150,
2009 239,136,213,133,111,102,88,205,181,31,221,164,248,13,195,123,60,251,33,
2010 106,248,255,0,0,0,0,73,69,78,68,174,66,96,130};
2011 
2012 static size_t xml_res_size_27 = 1139;
2013 static unsigned char xml_res_file_27[] = {
2014 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
2015 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
2016 72,89,115,0,0,5,63,0,0,5,63,1,19,100,100,172,0,0,0,25,116,69,88,116,83,
2017 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
2018 46,111,114,103,155,238,60,26,0,0,3,240,73,68,65,84,88,133,197,151,105,104,
2019 92,85,20,199,127,231,189,89,226,130,173,68,91,148,182,81,16,23,90,16,67,
2020 6,53,16,237,88,63,196,74,49,69,237,7,23,4,69,106,5,133,32,196,36,109,153,
2021 219,44,141,130,40,42,162,45,8,34,181,197,20,75,145,10,130,202,196,170,165,
2022 38,197,5,219,88,233,7,169,180,136,138,154,72,200,100,250,150,227,135,201,
2023 50,153,119,103,156,73,90,60,48,204,155,179,253,255,247,222,243,206,153,
2024 11,139,145,151,143,92,68,207,72,247,98,82,56,139,34,240,207,18,23,165,159,
2025 158,99,157,255,15,129,186,156,11,128,234,0,61,35,29,11,73,33,53,121,155,
2026 99,171,112,194,187,80,167,25,209,6,84,150,131,222,60,109,85,224,25,50,169,
2027 55,206,63,1,51,220,138,35,237,40,119,83,121,215,20,216,66,38,181,235,252,
2028 16,232,251,166,129,32,120,19,184,167,218,132,192,36,49,185,142,173,77,191,
2029 86,227,28,43,107,49,195,173,4,193,30,160,190,6,240,28,208,86,45,56,128,
2030 107,213,118,14,109,36,56,119,0,213,75,113,203,115,44,145,60,200,3,100,82,
2031 31,87,27,0,182,243,220,62,212,130,232,62,32,78,224,129,151,47,182,250,8,
2032 7,129,135,112,221,107,208,96,229,180,62,7,108,32,211,244,81,45,224,80,122,
2033 4,38,187,148,60,123,128,228,172,46,240,10,223,241,228,97,52,216,66,230,
2034 182,209,89,91,255,209,229,248,228,128,251,200,164,62,169,21,28,74,119,32,
2035 79,31,232,170,136,87,224,237,66,39,214,97,138,192,1,188,208,91,12,56,20,
2036 191,5,29,217,21,196,56,133,82,55,223,69,247,178,51,253,8,34,186,80,144,
2037 74,50,183,3,46,155,163,224,252,76,82,54,95,40,112,40,174,1,145,251,209,
2038 18,28,113,123,48,119,76,92,40,240,57,2,29,217,21,168,222,84,98,27,35,81,
2039 191,215,22,164,6,103,210,231,201,139,147,172,3,38,9,217,47,25,106,126,3,
2040 96,230,8,28,214,68,44,226,124,134,89,125,206,22,52,238,243,129,23,242,214,
2041 148,199,131,40,143,33,28,210,94,186,22,78,64,194,107,163,166,96,52,170,
2042 131,241,110,238,37,164,13,32,239,195,148,63,109,80,118,104,63,87,213,74,
2043 160,112,4,110,44,65,16,206,183,132,50,110,11,8,225,214,226,1,146,159,38,
2044 80,23,35,142,79,35,88,142,194,140,172,193,161,185,36,209,17,76,234,120,
2045 129,64,168,97,36,72,244,18,27,1,81,206,150,142,176,34,18,103,108,49,136,
2046 108,68,181,167,36,209,227,192,241,194,17,168,156,182,68,93,111,203,165,
2047 73,222,135,40,80,222,231,40,33,63,88,9,192,13,209,68,250,7,204,212,128,
2048 203,143,22,214,107,81,141,140,235,203,13,99,161,203,122,148,17,20,5,60,
2049 28,14,198,160,77,12,209,157,52,234,0,107,35,250,152,124,15,197,157,176,
2050 107,232,180,165,13,111,96,32,125,168,204,170,248,219,176,116,98,156,252,
2051 202,87,200,149,243,193,140,172,71,34,117,241,11,153,84,3,20,119,66,13,163,
2052 64,34,59,24,28,180,143,108,10,187,81,25,92,29,132,190,136,94,101,112,230,
2053 113,142,128,200,235,80,82,140,170,141,124,187,108,126,241,212,34,193,87,
2054 189,192,45,37,218,16,120,59,74,96,32,125,18,113,14,68,217,106,23,219,14,
2055 183,215,12,222,153,125,14,207,235,194,143,244,178,247,48,77,39,103,126,
2056 204,47,50,243,229,213,228,189,81,96,73,36,161,56,239,146,136,183,99,154,
2057 255,170,8,220,245,105,61,184,175,2,15,207,234,98,137,194,7,198,113,189,
2058 213,108,107,62,107,39,0,208,253,249,38,52,216,7,98,251,247,59,6,206,59,
2059 56,236,39,30,14,99,210,133,14,96,78,36,240,126,111,68,101,19,202,19,160,
2060 151,69,34,221,132,18,75,180,97,82,31,206,91,151,117,21,157,217,231,17,94,
2061 168,184,82,193,7,249,13,21,129,240,74,32,94,214,87,81,92,167,131,254,59,
2062 95,138,166,41,39,91,179,79,17,242,90,197,196,213,137,135,208,206,206,180,
2063 245,194,82,249,94,176,125,168,5,95,119,3,55,46,8,90,57,69,60,246,40,189,
2064 45,95,151,115,249,239,155,145,57,145,192,251,243,105,194,224,89,192,50,
2065 53,173,114,6,135,23,137,47,219,93,110,164,87,79,96,150,136,58,76,102,211,
2066 184,210,138,112,59,42,13,136,94,129,50,133,72,14,229,39,144,239,32,56,72,
2067 50,253,5,70,162,109,217,34,255,2,107,225,84,76,2,118,23,86,0,0,0,0,73,69,
2068 78,68,174,66,96,130};
2069 
2070 static size_t xml_res_size_28 = 1110;
2071 static unsigned char xml_res_file_28[] = {
2072 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
2073 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
2074 72,89,115,0,0,5,59,0,0,5,59,1,236,153,227,190,0,0,0,25,116,69,88,116,83,
2075 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
2076 46,111,114,103,155,238,60,26,0,0,3,211,73,68,65,84,88,133,181,150,93,104,
2077 28,101,20,134,159,51,59,217,38,43,24,69,80,10,181,84,173,10,70,208,182,
2078 201,38,254,180,106,164,244,34,96,197,84,47,68,208,155,18,84,42,161,23,109,
2079 211,84,246,219,68,13,8,182,66,105,139,138,94,216,171,70,80,227,47,166,13,
2080 93,107,253,205,106,81,27,68,40,177,180,197,54,68,109,137,198,164,153,157,
2081 57,94,52,147,205,206,204,102,179,27,123,96,96,230,61,231,61,231,253,206,
2082 247,55,176,16,235,202,110,102,231,87,53,11,73,97,85,94,124,176,29,213,87,
2083 112,175,168,60,71,197,2,186,178,207,161,236,2,96,124,34,182,16,1,82,54,
2084 35,61,248,44,176,59,207,149,31,17,29,193,227,36,150,126,141,197,0,59,146,
2085 167,47,143,128,244,96,27,176,175,4,207,67,232,199,147,93,152,250,254,255,
2086 79,192,139,217,197,228,244,4,144,152,55,7,62,70,229,25,76,253,169,98,1,
2087 243,95,3,157,245,103,129,135,129,137,50,4,180,32,250,61,233,193,181,197,
2088 2,42,89,3,107,129,62,160,156,237,231,128,182,146,74,126,24,116,148,191,
2089 11,82,13,7,129,245,248,157,80,247,122,98,177,101,192,227,8,31,0,110,4,171,
2090 10,164,151,174,111,239,10,58,202,239,128,111,126,39,108,247,6,58,155,70,
2091 102,112,51,120,59,162,123,65,86,71,176,134,81,119,5,166,105,204,7,42,63,
2092 68,252,78,56,158,83,128,155,134,227,232,120,51,232,190,8,214,141,72,204,
2093 204,6,42,239,64,41,83,21,210,217,183,17,158,8,120,38,208,216,114,204,202,
2094 223,97,33,29,40,101,34,10,137,167,129,223,2,158,26,196,221,232,127,92,62,
2095 1,0,166,238,31,4,19,225,105,245,95,42,158,130,113,195,67,137,24,143,0,9,
2096 148,126,60,222,18,131,23,22,49,20,71,254,29,1,174,42,192,85,23,99,146,231,
2097 42,234,192,249,237,164,156,41,250,38,29,158,68,121,20,120,3,139,222,200,
2098 96,83,55,5,12,132,112,161,14,42,152,130,63,183,176,68,96,7,192,197,28,76,
2099 230,102,92,173,154,102,93,17,218,241,48,36,203,0,108,0,158,255,226,14,60,
2100 231,158,2,191,218,71,121,105,205,79,65,154,37,172,154,225,77,139,0,168,
2101 182,1,161,17,248,44,162,216,223,160,1,72,23,229,5,120,78,35,158,236,41,
2102 12,112,211,64,72,128,196,57,19,60,235,102,137,56,19,46,14,68,93,96,42,46,
2103 248,83,224,90,163,225,0,189,37,42,83,109,140,99,34,28,13,226,147,46,103,
2104 199,60,222,143,174,175,55,71,128,167,242,2,208,99,97,191,181,26,163,161,
2105 53,34,6,47,166,108,16,161,15,200,161,40,240,157,90,172,171,53,252,21,49,
2106 16,1,30,12,227,252,10,179,183,97,71,230,52,232,146,128,136,22,122,238,251,
2107 36,122,84,160,134,234,11,80,125,181,225,66,177,24,210,217,22,208,143,2,
2108 232,48,169,134,155,160,96,23,120,239,134,217,222,11,81,93,240,77,12,147,
2109 115,22,55,135,109,208,174,8,79,159,255,146,79,110,199,95,159,110,231,108,
2110 91,193,197,207,187,139,22,40,101,110,85,26,88,25,64,61,212,218,27,22,208,
2111 125,239,16,194,129,80,18,213,14,58,143,180,151,93,188,51,179,25,199,233,
2112 32,55,21,244,28,192,172,58,225,127,20,30,197,91,15,46,197,170,250,25,244,
2113 202,112,198,216,126,22,217,237,152,187,195,11,109,182,117,28,186,6,177,
2114 95,69,53,127,11,218,241,75,15,156,71,245,54,76,242,92,180,0,128,109,71,
2115 90,193,125,7,137,186,39,100,12,225,77,68,123,169,186,246,135,233,99,246,
2116 210,92,59,86,18,245,30,67,121,10,168,13,81,237,184,135,109,111,32,213,248,
2117 94,65,198,232,81,12,108,3,171,103,206,145,130,3,214,40,162,10,122,29,154,
2118 63,29,163,77,182,210,115,255,203,33,180,104,252,246,204,38,208,157,165,
2119 19,151,52,7,216,68,207,3,175,69,202,154,147,218,121,184,9,143,253,192,242,
2120 138,74,139,252,66,204,219,72,119,243,151,69,67,74,38,49,67,113,166,70,219,
2121 80,182,132,15,170,98,166,195,88,246,110,150,38,246,208,86,239,204,21,57,
2122 255,31,18,163,22,185,204,26,92,107,61,232,157,8,183,162,90,131,80,141,242,
2123 7,194,73,148,111,80,239,83,170,155,51,24,9,255,156,68,216,127,65,255,70,
2124 162,172,242,156,128,0,0,0,0,73,69,78,68,174,66,96,130};
2125 
2126 static size_t xml_res_size_29 = 555;
2127 static unsigned char xml_res_file_29[] = {
2128 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
2129 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
2130 72,89,115,0,0,5,137,0,0,5,137,1,109,104,157,250,0,0,0,25,116,69,88,116,
2131 83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,
2132 101,46,111,114,103,155,238,60,26,0,0,1,168,73,68,65,84,88,133,197,214,49,
2133 75,195,64,20,192,241,127,218,51,77,65,40,42,162,46,29,186,56,73,233,40,
2134 142,29,220,252,10,78,58,56,11,218,65,208,201,126,10,81,252,28,197,169,179,
2135 160,139,56,56,136,131,88,68,92,52,151,94,26,135,54,180,53,181,205,181,201,
2136 249,32,16,222,229,46,63,114,151,123,103,113,210,12,16,54,165,133,28,197,
2137 130,77,26,241,244,33,121,254,244,0,238,153,203,86,131,90,165,21,182,89,
2138 212,110,2,132,77,125,187,196,209,214,170,254,232,237,47,120,187,139,230,
2139 69,30,86,202,0,212,26,47,212,155,175,97,203,16,66,0,160,60,148,39,245,95,
2140 14,240,254,8,23,155,209,252,210,58,28,60,140,234,177,65,219,111,88,231,
2141 183,213,160,86,105,101,194,172,242,36,174,235,78,135,208,143,16,177,156,
2142 25,204,74,105,30,145,249,157,53,141,136,0,76,35,70,2,76,34,254,4,152,66,
2143 140,5,152,64,136,56,15,73,217,221,35,28,199,137,54,230,23,161,188,27,205,
2144 207,175,37,7,24,139,40,20,97,231,50,238,48,145,232,110,197,128,35,50,228,
2145 132,53,185,135,176,177,132,94,205,248,110,119,144,126,48,122,184,240,198,
2146 85,29,92,21,107,56,16,62,104,34,254,138,137,139,112,100,40,175,123,253,
2147 27,32,65,132,232,223,248,8,124,125,4,182,246,116,40,178,40,178,195,128,
2148 67,174,57,182,174,244,0,0,62,228,44,112,98,255,79,112,22,236,113,202,62,
2149 48,203,20,12,132,84,196,92,192,209,72,4,48,11,34,49,192,180,136,68,1,211,
2150 32,18,7,232,34,82,1,232,32,82,3,196,69,164,10,136,131,72,29,48,9,97,4,48,
2151 14,161,177,129,38,131,0,232,149,1,192,224,23,24,68,40,213,47,122,198,1,
2152 208,3,244,74,121,255,72,134,71,142,100,14,25,147,66,98,227,246,202,248,
2153 15,58,85,192,175,251,92,135,114,0,0,0,0,73,69,78,68,174,66,96,130};
2154 
2155 static size_t xml_res_size_30 = 743;
2156 static unsigned char xml_res_file_30[] = {
2157 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
2158 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
2159 72,89,115,0,0,5,186,0,0,5,186,1,27,237,141,201,0,0,0,25,116,69,88,116,83,
2160 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
2161 46,111,114,103,155,238,60,26,0,0,2,100,73,68,65,84,88,133,237,151,61,104,
2162 19,97,24,199,127,111,238,46,105,47,130,37,218,8,78,90,5,151,96,16,138,144,
2163 69,51,139,224,160,136,210,85,65,197,193,14,130,83,74,68,4,65,80,92,138,
2164 139,58,41,74,197,73,136,131,32,210,69,44,85,176,197,218,148,34,162,88,107,
2165 91,41,169,215,36,247,241,58,216,214,59,155,207,203,165,46,254,183,251,63,
2166 239,243,222,143,247,142,231,121,94,33,165,196,45,113,249,117,31,132,46,
2167 198,163,170,210,211,21,9,19,128,230,151,45,59,191,80,42,131,204,201,76,
2168 239,37,119,76,93,183,90,136,110,164,76,30,218,189,153,187,71,118,52,254,
2169 150,217,49,248,62,230,245,186,19,16,79,240,112,124,129,19,143,167,1,146,
2170 34,59,18,145,3,189,253,213,1,252,234,253,16,188,204,122,189,3,3,16,79,120,
2171 61,193,5,145,29,97,21,34,20,24,64,51,250,13,113,163,50,64,105,73,197,177,
2172 54,8,226,109,151,42,178,47,54,81,226,1,64,52,172,132,116,77,217,233,216,
2173 101,134,63,254,224,248,144,221,248,134,243,251,65,185,185,246,88,182,44,
2174 98,31,122,184,149,114,106,166,169,20,85,13,97,29,6,248,210,191,215,19,212,
2175 117,29,77,211,42,103,218,37,152,121,227,50,98,160,166,97,91,18,128,206,
2176 171,163,20,103,28,242,247,39,57,181,111,107,13,128,26,50,12,163,58,68,225,
2177 43,220,73,121,189,45,123,224,220,132,199,26,254,180,196,156,81,253,147,
2178 214,253,9,13,195,192,52,205,122,203,106,106,98,174,232,31,32,40,136,150,
2179 0,218,9,209,84,29,104,7,68,211,133,40,104,8,95,149,208,48,12,76,43,152,
2180 98,229,187,23,24,74,12,253,108,30,77,117,109,161,84,169,25,43,58,47,30,
2181 113,140,231,164,229,237,202,0,125,79,166,155,6,81,35,157,8,101,117,27,11,
2182 152,2,160,108,175,175,128,187,248,204,65,70,189,249,238,135,167,147,139,
2183 77,3,32,22,65,235,128,144,191,195,108,189,27,74,192,44,226,183,129,5,211,
2184 142,91,128,240,156,219,160,184,214,26,136,5,97,77,65,9,9,143,61,40,143,
2185 242,138,68,197,20,15,192,73,114,173,1,72,192,132,168,6,170,235,108,115,
2186 164,170,2,4,63,17,73,248,105,130,85,123,12,104,35,64,147,16,237,155,9,27,
2187 132,104,239,80,186,2,33,157,234,20,237,159,138,37,88,102,25,28,155,2,58,
2188 223,136,121,194,193,221,11,234,64,96,46,147,17,167,199,51,226,204,212,154,
2189 31,13,153,27,3,240,7,226,158,188,146,190,238,182,255,205,197,228,63,128,
2190 75,42,29,5,155,146,254,14,96,59,207,68,189,4,63,42,18,150,32,64,58,179,
2191 127,199,126,1,226,42,223,28,85,35,230,39,0,0,0,0,73,69,78,68,174,66,96,
2192 130};
2193 
2194 static size_t xml_res_size_31 = 1110;
2195 static unsigned char xml_res_file_31[] = {
2196 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
2197 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
2198 72,89,115,0,0,4,198,0,0,4,198,1,67,50,23,10,0,0,0,25,116,69,88,116,83,111,
2199 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
2200 111,114,103,155,238,60,26,0,0,3,211,73,68,65,84,88,133,181,151,77,108,84,
2201 85,20,199,127,231,205,180,99,75,90,153,6,91,208,82,67,44,73,149,88,173,
2202 118,106,92,64,23,26,67,217,24,53,22,141,113,225,74,131,214,68,91,52,148,
2203 143,9,177,104,68,36,49,152,70,13,38,117,225,71,74,82,54,13,2,146,128,138,
2204 11,27,170,80,148,64,196,16,107,83,105,196,78,117,106,103,94,233,123,199,
2205 197,56,227,76,231,190,233,188,166,158,228,109,206,61,231,127,126,185,247,
2206 220,123,223,21,85,197,175,73,207,208,26,92,235,211,92,39,49,221,217,220,
2207 230,87,43,232,187,58,128,74,4,184,47,215,7,178,123,120,133,70,239,189,230,
2208 71,202,90,20,128,75,147,209,47,238,93,126,165,22,7,96,201,221,102,0,235,
2209 255,7,144,215,135,87,161,180,24,7,213,53,251,11,233,21,219,132,178,251,
2210 204,131,136,244,130,174,93,32,242,39,84,183,104,180,249,132,111,0,233,62,
2211 245,5,200,44,34,31,179,162,228,176,190,116,127,66,246,141,44,99,198,126,
2212 11,228,57,64,138,162,5,5,125,143,242,208,86,237,106,252,91,246,141,44,35,
2213 113,253,97,112,159,68,41,209,93,145,141,121,0,178,237,203,199,17,237,207,
2214 18,153,198,10,124,69,105,217,157,192,234,34,11,207,183,49,132,31,80,54,
2215 0,229,255,225,233,99,26,141,12,100,0,228,192,229,16,191,141,93,2,110,205,
2216 147,8,150,166,190,165,181,43,132,151,223,174,29,245,118,170,9,199,127,125,
2217 197,88,28,96,110,54,245,45,173,173,33,22,123,25,210,7,145,37,53,20,234,
2218 197,52,64,214,76,84,134,2,52,173,76,205,234,247,87,103,248,203,118,124,
2219 50,200,77,144,221,3,221,39,187,65,122,40,212,104,193,82,170,42,202,233,
2220 221,84,71,251,186,170,76,160,2,253,63,78,178,229,200,40,147,137,185,133,
2221 42,59,160,157,186,43,242,78,14,0,128,108,255,250,9,212,233,3,66,166,204,
2222 112,89,144,111,159,109,100,109,117,165,81,121,244,207,89,154,62,184,80,
2223 0,66,166,81,221,172,209,230,35,105,79,206,65,164,123,214,127,134,59,183,
2224 195,11,253,237,135,106,169,14,41,201,100,210,56,94,119,99,41,189,155,234,
2225 188,210,65,180,51,187,120,30,64,42,72,170,76,185,21,161,0,143,52,132,1,
2226 176,109,219,19,162,125,93,21,149,161,128,25,192,149,91,230,187,242,1,172,
2227 192,61,166,220,198,154,178,156,230,240,130,16,200,52,103,190,182,54,47,
2228 12,224,97,166,77,98,219,54,182,109,23,21,235,101,249,0,174,243,157,41,240,
2229 252,68,194,40,156,76,38,115,32,20,56,123,117,198,92,205,149,51,11,3,136,
2230 53,101,202,141,219,14,135,46,76,26,117,179,33,62,57,255,135,247,153,32,
2231 58,158,239,202,222,134,59,78,63,141,235,124,8,90,98,202,95,126,67,128,211,
2232 207,52,80,91,105,62,154,127,183,45,90,250,46,19,75,122,1,16,199,213,118,
2233 141,70,142,166,93,153,25,144,109,39,119,226,206,125,228,85,28,96,42,233,
2234 176,190,239,18,3,23,99,57,203,161,192,192,197,24,45,239,159,35,54,157,240,
2235 74,7,165,2,145,65,121,109,248,197,76,93,85,69,182,159,122,23,229,121,239,
2236 204,124,171,8,5,104,172,41,3,96,100,34,65,60,123,218,139,185,192,148,253,
2237 26,109,238,76,221,5,174,78,32,197,94,245,41,139,219,14,223,140,78,155,7,
2238 13,119,71,158,137,94,131,244,18,220,188,122,47,240,139,47,130,133,172,240,
2239 45,122,133,112,120,127,6,64,59,234,109,84,182,206,11,154,194,178,14,131,
2240 142,45,30,194,30,71,221,99,64,238,190,84,237,210,142,122,59,3,0,160,111,
2241 180,30,2,78,0,131,168,180,179,170,118,165,246,108,120,20,39,126,7,234,28,
2242 68,125,156,47,138,162,206,65,156,120,131,70,91,54,82,94,90,141,200,83,136,
2243 14,130,30,75,255,13,129,159,159,210,174,227,109,132,66,7,80,189,173,112,
2244 32,63,115,221,121,65,247,62,112,180,96,156,95,128,76,194,171,159,215,18,
2245 44,31,65,53,156,63,40,253,186,167,117,179,31,61,223,239,2,125,179,109,12,
2246 200,59,82,255,29,29,242,171,183,184,151,145,234,57,15,53,179,127,201,1,
2247 44,49,94,88,4,57,235,87,106,113,175,99,113,134,192,154,183,12,50,169,209,
2248 86,95,47,99,128,127,0,231,244,140,94,3,164,35,138,0,0,0,0,73,69,78,68,174,
2249 66,96,130};
2250 
2251 static size_t xml_res_size_32 = 914;
2252 static unsigned char xml_res_file_32[] = {
2253 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
2254 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
2255 72,89,115,0,0,5,7,0,0,5,7,1,236,210,93,151,0,0,0,25,116,69,88,116,83,111,
2256 102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,
2257 111,114,103,155,238,60,26,0,0,3,15,73,68,65,84,88,133,237,151,93,72,83,
2258 97,24,199,127,239,230,218,102,26,36,125,104,17,20,102,102,73,162,105,41,
2259 70,22,66,209,85,55,65,5,82,4,121,147,150,125,42,6,65,69,132,4,101,23,65,
2260 16,20,81,65,17,20,131,40,251,162,46,42,40,115,73,177,18,179,32,178,154,
2261 105,68,31,150,231,52,207,222,46,206,113,31,109,122,206,50,240,34,255,55,
2262 123,207,115,254,123,158,223,158,243,188,123,55,33,165,100,36,101,27,209,
2263 234,163,0,64,146,21,147,216,223,210,0,212,37,148,89,200,13,114,79,209,105,
2264 51,219,136,119,96,196,1,146,68,253,157,101,224,72,29,212,225,74,214,176,
2265 145,69,162,187,85,138,2,177,207,251,101,72,143,8,126,23,236,190,251,18,
2266 73,214,160,38,187,3,28,206,4,171,91,86,187,249,16,106,1,253,53,2,34,9,141,
2267 92,94,83,196,11,0,30,51,7,31,153,244,99,79,152,192,210,46,64,11,128,128,
2268 212,36,141,195,162,145,10,154,112,163,70,89,250,112,114,142,21,236,144,
2269 219,248,78,114,76,10,27,65,118,113,150,12,241,137,131,114,3,221,164,25,
2270 113,139,42,237,111,161,89,91,77,37,158,152,226,0,110,84,42,241,240,76,172,
2271 161,140,39,49,247,151,226,165,65,28,163,134,11,108,22,23,67,113,75,29,200,
2272 228,61,151,68,29,174,126,21,5,112,205,88,4,243,214,193,148,66,221,240,161,
2273 5,158,157,129,206,251,76,199,79,147,216,66,158,60,79,7,211,66,57,222,146,
2274 142,68,32,144,188,145,25,161,184,233,16,218,8,114,77,212,80,140,15,16,176,
2275 244,0,206,210,173,184,220,127,180,89,6,225,209,81,184,181,19,144,60,32,
2276 143,197,242,4,193,136,38,103,209,73,58,159,184,71,254,64,168,221,244,17,
2277 172,229,166,81,28,200,223,8,69,85,168,191,2,40,138,18,109,20,54,40,222,
2278 14,133,155,0,40,229,41,235,185,26,101,233,96,90,100,113,227,3,154,168,76,
2279 120,245,133,123,60,148,237,13,197,85,85,141,133,0,40,111,0,183,62,96,229,
2280 162,217,44,189,57,64,62,237,250,34,163,16,198,140,141,186,23,23,98,76,10,
2281 76,93,8,64,33,109,195,3,112,163,50,147,119,250,197,164,220,184,158,184,
2282 16,147,243,0,152,197,91,146,137,211,37,171,0,125,56,249,74,138,126,241,
2283 227,227,160,62,85,85,81,213,136,173,217,235,7,224,11,169,252,196,245,247,
2284 0,0,173,100,235,139,174,214,33,125,138,162,132,33,252,250,220,180,144,99,
2285 150,222,28,192,203,108,125,209,211,6,175,174,155,67,248,46,67,183,190,107,
2286 154,153,59,124,128,147,114,37,223,48,134,239,230,214,80,123,227,170,215,
2287 143,114,165,10,85,131,175,164,112,92,174,26,62,128,159,9,212,203,106,163,
2288 64,23,156,42,129,231,23,32,24,8,155,130,1,61,118,170,4,122,187,80,2,176,
2289 165,191,134,247,76,52,5,48,63,142,13,29,19,135,168,160,41,28,176,59,195,
2290 59,163,219,7,90,120,8,207,177,130,106,89,171,159,160,118,199,80,105,45,
2291 28,199,134,170,101,45,183,89,192,17,209,72,26,223,244,130,198,176,13,232,
2292 51,227,216,46,183,225,97,137,30,8,24,80,67,64,88,6,0,240,176,132,7,50,143,
2293 229,60,100,190,104,163,192,248,146,122,66,54,94,153,195,13,138,233,97,124,
2294 244,155,76,32,44,63,130,97,43,254,227,48,63,140,254,153,2,106,248,215,85,
2295 132,196,232,127,195,255,30,224,55,133,61,15,69,51,241,172,123,0,0,0,0,73,
2296 69,78,68,174,66,96,130};
2297 
2298 static size_t xml_res_size_33 = 759;
2299 static unsigned char xml_res_file_33[] = {
2300 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,
2301 0,115,122,122,244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,
2302 72,89,115,0,0,5,163,0,0,5,163,1,164,52,119,130,0,0,0,25,116,69,88,116,83,
2303 111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99,97,112,101,
2304 46,111,114,103,155,238,60,26,0,0,2,116,73,68,65,84,88,133,197,151,75,104,
2305 19,97,16,128,191,217,236,174,122,16,169,151,82,188,249,194,39,136,86,105,
2306 21,27,3,90,60,120,21,196,199,177,55,241,110,250,72,19,26,209,90,69,177,
2307 136,96,15,30,60,8,245,224,81,16,193,90,65,69,91,8,72,75,209,131,32,52,69,
2308 4,123,176,180,110,154,29,15,33,193,184,221,60,54,15,7,254,203,254,243,248,
2309 152,153,127,254,127,69,85,9,42,18,159,222,142,145,109,209,254,195,31,130,
2310 250,48,130,5,126,187,89,18,83,119,16,119,6,149,35,65,131,3,152,213,5,158,
2311 177,49,150,47,35,86,31,104,75,238,171,86,229,35,48,128,36,166,206,34,122,
2312 29,101,107,241,134,17,106,40,128,196,167,59,16,247,54,208,185,182,70,109,
2313 25,16,191,38,148,107,239,91,201,132,134,17,46,1,82,194,71,26,228,123,69,
2314 209,84,135,52,214,254,180,36,128,140,143,135,72,181,94,193,48,99,152,246,
2315 166,138,28,87,46,14,112,70,7,218,95,172,9,32,253,111,194,184,171,163,40,
2316 251,0,48,237,220,170,175,44,161,198,73,141,29,124,87,0,144,190,201,54,212,
2317 29,65,245,188,71,189,49,16,63,81,186,52,214,254,73,136,190,186,8,122,31,
2318 101,163,175,122,99,32,210,24,238,49,3,139,103,40,15,129,140,175,234,170,
2319 147,91,245,149,54,92,227,81,161,7,164,119,114,15,100,71,81,34,190,38,117,
2320 207,132,164,188,167,160,119,226,28,232,8,202,150,198,67,72,202,115,23,104,
2321 50,252,4,75,118,33,220,34,119,108,138,165,206,229,240,29,68,0,50,240,122,
2322 55,89,247,46,202,41,207,102,33,19,114,3,205,60,240,26,155,47,225,159,177,
2323 237,85,74,149,28,163,154,232,154,5,186,165,119,226,52,48,140,234,254,194,
2324 102,62,11,150,245,67,7,58,190,122,92,39,62,250,55,245,95,82,209,117,172,
2325 201,240,115,236,240,1,68,123,16,153,47,130,112,86,130,63,40,42,5,0,208,
2326 24,174,38,35,99,56,191,119,98,24,113,132,95,0,184,154,109,10,64,1,228,102,
2327 247,146,14,117,13,98,201,14,96,12,113,107,234,200,192,87,169,14,134,23,
2328 128,30,137,7,123,85,229,165,38,99,200,149,230,191,2,212,42,85,151,64,238,
2329 125,89,199,252,183,189,101,21,237,13,235,9,149,119,95,125,15,44,164,183,
2330 33,50,85,86,47,179,2,90,126,108,55,182,4,21,140,237,198,247,64,25,136,230,
2331 52,161,47,132,46,54,239,20,120,32,228,51,161,204,133,154,222,244,129,32,
2332 0,76,123,14,147,136,70,59,211,205,159,3,217,204,28,206,114,68,163,135,210,
2333 208,236,65,36,50,139,197,9,29,58,158,206,127,170,190,4,182,177,136,147,
2334 125,92,181,157,226,96,91,87,53,118,180,232,47,234,15,114,76,236,98,147,
2335 84,227,24,0,0,0,0,73,69,78,68,174,66,96,130};
2336 
2337 static size_t xml_res_size_34 = 3670;
2338 static unsigned char xml_res_file_34[] = {
2339 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
2340 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
2341 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
2342 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
2343 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
2344 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
2345 45,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
2346 120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,97,98,111,117,116,
2347 51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,
2348 99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,
2349 111,110,95,97,98,111,117,116,51,50,46,112,110,103,60,47,111,98,106,101,
2350 99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,
2351 119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,97,100,100,51,
2352 50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,
2353 112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,
2354 110,95,97,100,100,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,
2355 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,
2356 116,109,97,112,34,32,110,97,109,101,61,34,99,104,97,114,116,51,50,34,62,
2357 77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,
2358 36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,
2359 99,104,97,114,116,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,
2360 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,
2361 116,109,97,112,34,32,110,97,109,101,61,34,99,108,111,115,101,51,50,34,62,
2362 77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,
2363 36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,
2364 99,108,111,115,101,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,
2365 10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,
2366 105,116,109,97,112,34,32,110,97,109,101,61,34,99,111,112,121,51,50,34,62,
2367 77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,
2368 36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,
2369 99,111,112,121,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,
2370 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
2371 109,97,112,34,32,110,97,109,101,61,34,100,97,116,97,82,101,112,111,114,
2372 116,51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,
2373 46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,
2374 98,111,110,95,100,97,116,97,82,101,112,111,114,116,51,50,46,112,110,103,
2375 60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,
2376 108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,
2377 61,34,100,101,108,101,116,101,51,50,34,62,77,97,105,110,70,114,97,109,101,
2378 66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,
2379 103,101,115,95,114,105,98,98,111,110,95,100,101,108,101,116,101,51,50,46,
2380 112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,
2381 116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,
2382 97,109,101,61,34,100,114,97,103,51,50,34,62,77,97,105,110,70,114,97,109,
2383 101,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,
2384 97,103,101,115,95,114,105,98,98,111,110,95,100,114,97,103,51,50,46,112,
2385 110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,
2386 32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,
2387 101,61,34,101,120,105,116,51,50,34,62,77,97,105,110,70,114,97,109,101,66,
2388 105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,
2389 101,115,95,114,105,98,98,111,110,95,101,120,105,116,51,50,46,112,110,103,
2390 60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,
2391 108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,
2392 61,34,102,97,117,108,116,51,50,34,62,77,97,105,110,70,114,97,109,101,66,
2393 105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,
2394 101,115,95,114,105,98,98,111,110,95,102,97,117,108,116,51,50,46,112,110,
2395 103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,
2396 99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,
2397 101,61,34,102,97,117,108,116,80,111,119,101,114,51,50,34,62,77,97,105,110,
2398 70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,
2399 97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,102,97,117,108,
2400 116,80,111,119,101,114,51,50,46,112,110,103,60,47,111,98,106,101,99,116,
2401 62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,
2402 66,105,116,109,97,112,34,32,110,97,109,101,61,34,102,105,116,51,50,34,62,
2403 77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,
2404 36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,
2405 102,105,116,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,
2406 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
2407 109,97,112,34,32,110,97,109,101,61,34,103,117,105,100,101,51,50,34,62,77,
2408 97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,
2409 100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,103,
2410 117,105,100,101,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,
2411 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,
2412 116,109,97,112,34,32,110,97,109,101,61,34,108,111,103,111,49,50,56,34,62,
2413 77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,
2414 36,100,97,116,97,95,105,109,97,103,101,115,95,108,111,103,111,49,50,56,
2415 46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,
2416 99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,
2417 97,109,101,61,34,108,111,103,111,49,54,34,62,77,97,105,110,70,114,97,109,
2418 101,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,
2419 97,103,101,115,95,108,111,103,111,49,54,46,112,110,103,60,47,111,98,106,
2420 101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,
2421 34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,108,111,103,
2422 111,50,53,54,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,
2423 115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,108,111,
2424 103,111,50,53,54,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,
2425 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
2426 109,97,112,34,32,110,97,109,101,61,34,108,111,103,111,51,50,34,62,77,97,
2427 105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,
2428 97,116,97,95,105,109,97,103,101,115,95,108,111,103,111,51,50,46,112,110,
2429 103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,
2430 99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,
2431 101,61,34,108,111,103,111,54,52,34,62,77,97,105,110,70,114,97,109,101,66,
2432 105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,
2433 101,115,95,108,111,103,111,54,52,46,112,110,103,60,47,111,98,106,101,99,
2434 116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
2435 120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,109,111,118,101,51,
2436 50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,
2437 112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,
2438 110,95,109,111,118,101,51,50,46,112,110,103,60,47,111,98,106,101,99,116,
2439 62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,
2440 66,105,116,109,97,112,34,32,110,97,109,101,61,34,110,101,119,51,50,34,62,
2441 77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,
2442 36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,
2443 110,101,119,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,
2444 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
2445 109,97,112,34,32,110,97,109,101,61,34,111,112,101,110,51,50,34,62,77,97,
2446 105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,
2447 97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,111,112,
2448 101,110,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,
2449 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,
2450 97,112,34,32,110,97,109,101,61,34,112,97,115,116,101,51,50,34,62,77,97,
2451 105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,
2452 97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,112,97,
2453 115,116,101,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,
2454 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
2455 109,97,112,34,32,110,97,109,101,61,34,112,97,117,115,101,83,116,111,112,
2456 112,101,100,51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,
2457 97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,
2458 114,105,98,98,111,110,95,112,97,117,115,101,83,116,111,112,112,101,100,
2459 51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,
2460 106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,
2461 34,32,110,97,109,101,61,34,112,108,97,121,83,116,111,112,112,101,100,51,
2462 50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,
2463 112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,
2464 110,95,112,108,97,121,83,116,111,112,112,101,100,51,50,46,112,110,103,60,
2465 47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,
2466 97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,
2467 34,112,111,119,101,114,70,76,111,119,51,50,34,62,77,97,105,110,70,114,97,
2468 109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,
2469 109,97,103,101,115,95,114,105,98,98,111,110,95,112,111,119,101,114,70,76,
2470 111,119,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,
2471 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,
2472 97,112,34,32,110,97,109,101,61,34,114,101,100,111,51,50,34,62,77,97,105,
2473 110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,97,
2474 116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,114,101,100,
2475 111,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,
2476 98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,97,
2477 112,34,32,110,97,109,101,61,34,114,101,115,101,116,51,50,34,62,77,97,105,
2478 110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,97,
2479 116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,114,101,115,
2480 101,116,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,
2481 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,
2482 97,112,34,32,110,97,109,101,61,34,114,111,116,97,116,101,67,108,111,99,
2483 107,51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,
2484 46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,
2485 98,111,110,95,114,111,116,97,116,101,67,108,111,99,107,51,50,46,112,110,
2486 103,60,47,111,98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,
2487 99,108,97,115,115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,
2488 101,61,34,114,111,116,97,116,101,67,111,117,110,116,101,114,67,108,111,
2489 99,107,51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,
2490 115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,
2491 98,98,111,110,95,114,111,116,97,116,101,67,111,117,110,116,101,114,67,108,
2492 111,99,107,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,
2493 60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,
2494 109,97,112,34,32,110,97,109,101,61,34,115,97,118,101,51,50,34,62,77,97,
2495 105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,100,
2496 97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,115,97,
2497 118,101,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,32,32,60,
2498 111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,116,109,
2499 97,112,34,32,110,97,109,101,61,34,115,97,118,101,65,115,51,50,34,62,77,
2500 97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,99,112,112,36,
2501 100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,111,110,95,115,
2502 97,118,101,65,115,51,50,46,112,110,103,60,47,111,98,106,101,99,116,62,10,
2503 32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,105,
2504 116,109,97,112,34,32,110,97,109,101,61,34,115,101,116,116,105,110,103,115,
2505 51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,46,
2506 99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,98,
2507 111,110,95,115,101,116,116,105,110,103,115,51,50,46,112,110,103,60,47,111,
2508 98,106,101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,
2509 115,61,34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,115,
2510 110,97,112,51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,
2511 112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,
2512 105,98,98,111,110,95,115,110,97,112,51,50,46,112,110,103,60,47,111,98,106,
2513 101,99,116,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,
2514 34,119,120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,117,110,100,
2515 111,51,50,34,62,77,97,105,110,70,114,97,109,101,66,105,116,109,97,112,115,
2516 46,99,112,112,36,100,97,116,97,95,105,109,97,103,101,115,95,114,105,98,
2517 98,111,110,95,117,110,100,111,51,50,46,112,110,103,60,47,111,98,106,101,
2518 99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
2519 
2520 void wxC9ED9InitBitmapResources()
2521 {
2522 
2523  // Check for memory FS. If not present, load the handler:
2524  {
2525  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
2526  wxFileSystem fsys;
2527  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
2528  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
2529  if (f) delete f;
2530  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
2531  }
2532 
2533  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_about32.png"), xml_res_file_0, xml_res_size_0, wxT("image/png"));
2534  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_add32.png"), xml_res_file_1, xml_res_size_1, wxT("image/png"));
2535  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_chart32.png"), xml_res_file_2, xml_res_size_2, wxT("image/png"));
2536  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_close32.png"), xml_res_file_3, xml_res_size_3, wxT("image/png"));
2537  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_copy32.png"), xml_res_file_4, xml_res_size_4, wxT("image/png"));
2538  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_dataReport32.png"), xml_res_file_5, xml_res_size_5, wxT("image/png"));
2539  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_delete32.png"), xml_res_file_6, xml_res_size_6, wxT("image/png"));
2540  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_drag32.png"), xml_res_file_7, xml_res_size_7, wxT("image/png"));
2541  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_exit32.png"), xml_res_file_8, xml_res_size_8, wxT("image/png"));
2542  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_fault32.png"), xml_res_file_9, xml_res_size_9, wxT("image/png"));
2543  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_faultPower32.png"), xml_res_file_10, xml_res_size_10, wxT("image/png"));
2544  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_fit32.png"), xml_res_file_11, xml_res_size_11, wxT("image/png"));
2545  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_guide32.png"), xml_res_file_12, xml_res_size_12, wxT("image/png"));
2546  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_logo128.png"), xml_res_file_13, xml_res_size_13, wxT("image/png"));
2547  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_logo16.png"), xml_res_file_14, xml_res_size_14, wxT("image/png"));
2548  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_logo256.png"), xml_res_file_15, xml_res_size_15, wxT("image/png"));
2549  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_logo32.png"), xml_res_file_16, xml_res_size_16, wxT("image/png"));
2550  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_logo64.png"), xml_res_file_17, xml_res_size_17, wxT("image/png"));
2551  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_move32.png"), xml_res_file_18, xml_res_size_18, wxT("image/png"));
2552  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_new32.png"), xml_res_file_19, xml_res_size_19, wxT("image/png"));
2553  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_open32.png"), xml_res_file_20, xml_res_size_20, wxT("image/png"));
2554  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_paste32.png"), xml_res_file_21, xml_res_size_21, wxT("image/png"));
2555  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_pauseStopped32.png"), xml_res_file_22, xml_res_size_22, wxT("image/png"));
2556  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_playStopped32.png"), xml_res_file_23, xml_res_size_23, wxT("image/png"));
2557  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_powerFLow32.png"), xml_res_file_24, xml_res_size_24, wxT("image/png"));
2558  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_redo32.png"), xml_res_file_25, xml_res_size_25, wxT("image/png"));
2559  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_reset32.png"), xml_res_file_26, xml_res_size_26, wxT("image/png"));
2560  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_rotateClock32.png"), xml_res_file_27, xml_res_size_27, wxT("image/png"));
2561  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_rotateCounterClock32.png"), xml_res_file_28, xml_res_size_28, wxT("image/png"));
2562  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_save32.png"), xml_res_file_29, xml_res_size_29, wxT("image/png"));
2563  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_saveAs32.png"), xml_res_file_30, xml_res_size_30, wxT("image/png"));
2564  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_settings32.png"), xml_res_file_31, xml_res_size_31, wxT("image/png"));
2565  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_snap32.png"), xml_res_file_32, xml_res_size_32, wxT("image/png"));
2566  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$data_images_ribbon_undo32.png"), xml_res_file_33, xml_res_size_33, wxT("image/png"));
2567  XRC_ADD_FILE(wxT("XRC_resource/MainFrameBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_MainFrameBitmaps.xrc"), xml_res_file_34, xml_res_size_34, wxT("text/xml"));
2568  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/MainFrameBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_MainFrameBitmaps.xrc"));
2569 }
+
+ + + + diff --git a/docs/doxygen/html/_multiplier_8cpp_source.html b/docs/doxygen/html/_multiplier_8cpp_source.html new file mode 100644 index 0000000..df9e87d --- /dev/null +++ b/docs/doxygen/html/_multiplier_8cpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +Project/Multiplier.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Multiplier.cpp
+
+
+
1 #include "Multiplier.h"
2 #include "ConnectionLine.h"
3 
4 Multiplier::Multiplier(int id) : ControlElement(id)
5 {
6  m_width = m_height = 36.0;
7  Node* nodeIn1 = new Node(m_position + wxPoint2DDouble(-18, -9), Node::NODE_IN, m_borderSize);
8  nodeIn1->StartMove(m_position);
9  Node* nodeIn2 = new Node(m_position + wxPoint2DDouble(-18, 9), Node::NODE_IN, m_borderSize);
10  nodeIn2->StartMove(m_position);
11  Node* nodeOut = new Node(m_position + wxPoint2DDouble(18, 0), Node::NODE_OUT, m_borderSize);
12  nodeOut->SetAngle(180.0);
13  nodeOut->StartMove(m_position);
14  m_nodeList.push_back(nodeIn1);
15  m_nodeList.push_back(nodeIn2);
16  m_nodeList.push_back(nodeOut);
17 }
18 
19 Multiplier::~Multiplier() {}
20 void Multiplier::Draw(wxPoint2DDouble translation, double scale) const
21 {
22  glLineWidth(1.0);
23  if(m_selected) {
24  glColor4dv(m_selectionColour.GetRGBA());
25  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
26  DrawRectangle(m_position, m_width + borderSize, m_height + borderSize);
27  }
28  glColor4d(1.0, 1.0, 1.0, 1.0);
29  DrawRectangle(m_position, m_width, m_height);
30  glColor4d(0.0, 0.0, 0.0, 1.0);
31  DrawRectangle(m_position, m_width, m_height, GL_LINE_LOOP);
32 
33  // Plot x.
34  glLineWidth(2.0);
35  std::vector<wxPoint2DDouble> xSymbol;
36  xSymbol.push_back(m_position + wxPoint2DDouble(-5, -5));
37  xSymbol.push_back(m_position + wxPoint2DDouble(5, 5));
38  xSymbol.push_back(m_position + wxPoint2DDouble(-5, 5));
39  xSymbol.push_back(m_position + wxPoint2DDouble(5, -5));
40  glColor4d(0.0, 0.3, 1.0, 1.0);
41  DrawLine(xSymbol, GL_LINES);
42 
43  glColor4d(0.0, 0.0, 0.0, 1.0);
44  DrawNodes();
45 }
46 
47 void Multiplier::Rotate(bool clockwise)
48 {
49  if(clockwise)
50  m_angle += 90.0;
51  else
52  m_angle -= 90.0;
53  if(m_angle >= 360.0)
54  m_angle = 0.0;
55  else if(m_angle < 0)
56  m_angle = 270.0;
57 
58  UpdatePoints();
59 
60  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
61  Node* node = *it;
62  node->Rotate(clockwise);
63  }
64 }
65 
66 void Multiplier::UpdatePoints()
67 {
68  if(m_angle == 0.0) {
69  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-18, -9));
70  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-18, 9));
71  m_nodeList[2]->SetPosition(m_position + wxPoint2DDouble(18, 0));
72  } else if(m_angle == 90.0) {
73  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(9, -18));
74  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-9, -18));
75  m_nodeList[2]->SetPosition(m_position + wxPoint2DDouble(0, 18));
76  } else if(m_angle == 180.0) {
77  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(18, 9));
78  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(18, -9));
79  m_nodeList[2]->SetPosition(m_position + wxPoint2DDouble(-18, 0));
80  } else if(m_angle == 270.0) {
81  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-9, 18));
82  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(9, 18));
83  m_nodeList[2]->SetPosition(m_position + wxPoint2DDouble(0, -18));
84  }
85 }
86 
87 bool Multiplier::Solve(double input, double timeStep)
88 {
89  std::vector<double> inputVector;
90  for(auto itN = m_nodeList.begin(), itNEnd = m_nodeList.end(); itN != itNEnd; ++itN) {
91  Node* node = *itN;
92  if(node->GetNodeType() != Node::NODE_OUT) {
93  if(!node->IsConnected()) {
94  inputVector.push_back(1.0);
95  } else {
96  for(auto itC = m_childList.begin(), itCEnd = m_childList.end(); itC != itCEnd; ++itC) {
97  ConnectionLine* cLine = static_cast<ConnectionLine*>(*itC);
98  auto nodeList = cLine->GetNodeList();
99  for(auto itCN = nodeList.begin(), itCNEnd = nodeList.end(); itCN != itCNEnd; ++itCN) {
100  Node* childNode = *itCN;
101  if(childNode == node) {
102  inputVector.push_back(cLine->GetValue());
103  break;
104  }
105  }
106  }
107  }
108  }
109  }
110 
111  m_output = 1.0;
112  for(unsigned int i = 0; i < inputVector.size(); ++i) {
113  m_output *= inputVector[i];
114  }
115 
116  return true;
117 }
118 
120 {
121  Multiplier* copy = new Multiplier(m_elementID);
122  *copy = *this;
123  return copy;
124 }
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Multiplier.cpp:47
+ +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Multiplier.cpp:20
+ + +
virtual Element * GetCopy()
Get a the element copy.
Definition: Multiplier.cpp:119
+
+
+ + + + diff --git a/docs/doxygen/html/_multiplier_8h_source.html b/docs/doxygen/html/_multiplier_8h_source.html index 0665dc6..55e5720 100644 --- a/docs/doxygen/html/_multiplier_8h_source.html +++ b/docs/doxygen/html/_multiplier_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Multiplier.h Source File +Project/Multiplier.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Multiplier.h
-
1 #ifndef MULTIPLIER_H
2 #define MULTIPLIER_H
3 
4 #include "ControlElement.h"
5 
6 class ConnectionLine;
7 
8 class Multiplier : public ControlElement
9 {
10  public:
11  Multiplier(int id);
12  ~Multiplier();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element) { return false; }
18  virtual void Rotate(bool clockwise = true);
19 
20  virtual void UpdatePoints();
21 
22  virtual bool Solve(double input, double timeStep);
23 
24  virtual Element* GetCopy();
25 };
26 
27 #endif // MULTIPLIER_H
Definition: Multiplier.h:8
-
Definition: Element.h:88
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Multiplier.cpp:47
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Multiplier.h:17
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Multiplier.h:15
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Multiplier.cpp:20
-
Definition: ConnectionLine.h:6
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Multiplier.h:16
-
Definition: ControlElement.h:53
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Multiplier.cpp:119
+
1 #ifndef MULTIPLIER_H
2 #define MULTIPLIER_H
3 
4 #include "ControlElement.h"
5 
6 class ConnectionLine;
7 
8 class Multiplier : public ControlElement
9 {
10  public:
11  Multiplier(int id);
12  ~Multiplier();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element) { return false; }
18  virtual void Rotate(bool clockwise = true);
19 
20  virtual void UpdatePoints();
21 
22  virtual bool Solve(double input, double timeStep);
23 
24  virtual Element* GetCopy();
25 };
26 
27 #endif // MULTIPLIER_H
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Multiplier.cpp:47
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Multiplier.h:17
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Multiplier.h:15
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Multiplier.cpp:20
+ +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Multiplier.h:16
+ +
virtual Element * GetCopy()
Get a the element copy.
Definition: Multiplier.cpp:119
+
- + diff --git a/docs/doxygen/html/_power_element_8cpp_source.html b/docs/doxygen/html/_power_element_8cpp_source.html new file mode 100644 index 0000000..3f7dfe0 --- /dev/null +++ b/docs/doxygen/html/_power_element_8cpp_source.html @@ -0,0 +1,122 @@ + + + + + + + +Project/PowerElement.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PowerElement.cpp
+
+
+
1 #include "PowerElement.h"
2 #ifdef USING_WX_3_0_X
3 #include "DegreesAndRadians.h"
4 #endif
5 
7 {
8  m_busColour.SetRGBA(0.0, 0.3, 1.0, 1.0);
9  m_onlineElementColour.SetRGBA(0.2, 0.2, 0.2, 1.0);
10  m_offlineElementColour.SetRGBA(0.5, 0.5, 0.5, 1.0);
11  m_closedSwitchColour.SetRGBA(0.0, 0.4, 0.0, 1.0);
12  m_openedSwitchColour.SetRGBA(1.0, 0.1, 0.1, 1.0);
13  m_powerFlowArrowColour.SetRGBA(1.0, 0.51, 0.0, 1.0);
14  m_dynamicEventColour.SetRGBA(1.0, 0.51, 0.0, 1.0);
15 }
16 
18 void PowerElement::SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit)
19 {
20 }
21 
22 wxPoint2DDouble PowerElement::GetSwitchPoint(Element* parent,
23  wxPoint2DDouble parentPoint,
24  wxPoint2DDouble secondPoint) const
25 {
26  double swLineSize = 25.0;
27  wxPoint2DDouble swPoint = wxPoint2DDouble(parentPoint.m_x, parentPoint.m_y - swLineSize);
28 
29  // Rotate the second point (to compare).
30  double angle = parent->GetAngle();
31 
32  secondPoint =
33  wxPoint2DDouble(std::cos(wxDegToRad(-angle)) * (secondPoint.m_x - parentPoint.m_x) -
34  std::sin(wxDegToRad(-angle)) * (secondPoint.m_y - parentPoint.m_y) + parentPoint.m_x,
35  std::sin(wxDegToRad(-angle)) * (secondPoint.m_x - parentPoint.m_x) +
36  std::cos(wxDegToRad(-angle)) * (secondPoint.m_y - parentPoint.m_y) + parentPoint.m_y);
37 
38  // Rotate
39  if(secondPoint.m_y > parentPoint.m_y) angle -= 180.0;
40  return wxPoint2DDouble(std::cos(wxDegToRad(angle)) * (swPoint.m_x - parentPoint.m_x) -
41  std::sin(wxDegToRad(angle)) * (swPoint.m_y - parentPoint.m_y) + parentPoint.m_x,
42  std::sin(wxDegToRad(angle)) * (swPoint.m_x - parentPoint.m_x) +
43  std::cos(wxDegToRad(angle)) * (swPoint.m_y - parentPoint.m_y) + parentPoint.m_y);
44 }
45 
46 bool PowerElement::SwitchesContains(wxPoint2DDouble position) const
47 {
48  for(int i = 0; i < (int)m_switchRect.size(); i++) {
49  if(m_parentList[i]) {
50  if(m_switchRect[i].Contains(position)) return true;
51  }
52  }
53  return false;
54 }
55 
57 {
58  // General method, to one switch only.
59  wxPoint2DDouble swCenter = wxPoint2DDouble((m_pointList[0].m_x + m_pointList[1].m_x) / 2.0,
60  (m_pointList[0].m_y + m_pointList[1].m_y) / 2.0);
61  m_switchRect[0] = wxRect2DDouble(swCenter.m_x - m_switchSize / 2.0, swCenter.m_y - m_switchSize / 2.0, m_switchSize,
62  m_switchSize);
63 }
64 
66 {
67  int i = 0;
68  for(auto it = m_parentList.begin(); it != m_parentList.end(); it++) {
69  Element* parent = *it;
70  if(parent) {
71  if(m_online) {
72  glColor4dv(m_closedSwitchColour.GetRGBA());
73  } else {
74  glColor4dv(m_openedSwitchColour.GetRGBA());
75  }
76 
77  glPushMatrix();
78  glTranslated(m_switchRect[i].GetPosition().m_x + m_switchSize / 2.0,
79  m_switchRect[i].GetPosition().m_y + m_switchSize / 2.0, 0.0);
80  glRotated(parent->GetAngle(), 0.0, 0.0, 1.0);
81  glTranslated(-m_switchRect[i].GetPosition().m_x - m_switchSize / 2.0,
82  -m_switchRect[i].GetPosition().m_y - m_switchSize / 2.0, 0.0);
83 
84  DrawRectangle(m_switchRect[i].GetPosition() + wxPoint2DDouble(m_switchSize / 2.0, m_switchSize / 2.0),
85  m_switchSize, m_switchSize);
86 
87  glPopMatrix();
88  }
89  i++;
90  }
91 }
92 
93 void PowerElement::CalculatePowerFlowPts(std::vector<wxPoint2DDouble> edges)
94 {
95  double arrowRate = 100.0; // One arrow to each "arrowRate" distance in pixels.
96 
97  if(edges.size() < 2) return;
98 
99  // Clear all power flow points
100  for(int i = 0; i < (int)m_powerFlowArrow.size(); i++) m_powerFlowArrow[i].clear();
101  m_powerFlowArrow.clear();
102 
103  for(int i = 1; i < (int)edges.size(); i++) {
104  wxPoint2DDouble pt1 = edges[i - 1];
105  wxPoint2DDouble pt2 = edges[i];
106 
107  double angle = std::atan2(pt2.m_y - pt1.m_y, pt2.m_x - pt1.m_x);
108 
109  wxPoint2DDouble rotPt2(
110  std::cos(-angle) * (pt2.m_x - pt1.m_x) - std::sin(-angle) * (pt2.m_y - pt1.m_y) + pt1.m_x,
111  std::sin(-angle) * (pt2.m_x - pt1.m_x) + std::cos(-angle) * (pt2.m_y - pt1.m_y) + pt1.m_y);
112 
113  int numArrows = std::abs(pt1.m_x - rotPt2.m_x) / arrowRate;
114  if(numArrows == 0) numArrows = 1;
115 
116  for(int i = 0; i < numArrows; i++) {
117  wxPoint2DDouble arrowCenter(pt1.m_x + ((rotPt2.m_x - pt1.m_x) / double(numArrows + 1)) * double(i + 1),
118  pt1.m_y + ((rotPt2.m_y - pt1.m_y) / double(numArrows + 1)) * double(i + 1));
119 
120  std::vector<wxPoint2DDouble> triPts;
121  triPts.push_back(arrowCenter + wxPoint2DDouble(5.0, 0.0));
122  triPts.push_back(arrowCenter + wxPoint2DDouble(-5.0, 5.0));
123  triPts.push_back(arrowCenter + wxPoint2DDouble(-5.0, -5.0));
124 
125  // Rotate back.
126  for(int i = 0; i < 3; i++) {
127  triPts[i] = wxPoint2DDouble(
128  std::cos(angle) * (triPts[i].m_x - pt1.m_x) - std::sin(angle) * (triPts[i].m_y - pt1.m_y) + pt1.m_x,
129  std::sin(angle) * (triPts[i].m_x - pt1.m_x) + std::cos(angle) * (triPts[i].m_y - pt1.m_y) +
130  pt1.m_y);
131  }
132  m_powerFlowArrow.push_back(triPts);
133  }
134  }
135 }
136 
138 {
139  if(m_online) {
140  glColor4dv(m_powerFlowArrowColour.GetRGBA());
141  for(int i = 0; i < (int)m_powerFlowArrow.size(); i++) {
142  DrawTriangle(m_powerFlowArrow[i]);
143  }
144  }
145 }
146 
147 double PowerElement::GetValueFromUnit(double value, ElectricalUnit valueUnit)
148 {
149  switch(valueUnit) {
150  case UNIT_kV:
151  case UNIT_kA:
152  case UNIT_kW:
153  case UNIT_kVA:
154  case UNIT_kVAr: {
155  return value * 1e3;
156  } break;
157  case UNIT_MW:
158  case UNIT_MVA:
159  case UNIT_MVAr: {
160  return value * 1e6;
161  }
162  default:
163  break;
164  }
165  return value;
166 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+ +
virtual void DrawTriangle(std::vector< wxPoint2DDouble > points, GLenum mode=GL_TRIANGLES) const
Draw a triangle.
Definition: Element.cpp:44
+
virtual void UpdateSwitches()
Update the switch position.
+
virtual void SetNominalVoltage(std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
Set nominal voltage of the element.
+
void SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)
Set the colour in RGBA. The colour values must be between 0.0 and 1.0.
Definition: Element.cpp:350
+ + +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+
virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode=GL_QUADS) const
Draw rectangle.
Definition: Element.cpp:53
+ + + + +
virtual void CalculatePowerFlowPts(std::vector< wxPoint2DDouble > edges)
Calculate the points of the power flow arrows.
+ +
virtual void DrawPowerFlowPts() const
Draw power flow arrows.
+
Switching data of power elements.
+
PowerElement()
Constructor.
Definition: PowerElement.cpp:6
+
~PowerElement()
Destructor.
+
virtual void DrawSwitches() const
Draw switch.
+
virtual bool SwitchesContains(wxPoint2DDouble position) const
Check if switch contains position.
+
virtual bool Contains(wxPoint2DDouble position) const =0
Checks if the element contains a position.
+
virtual wxPoint2DDouble GetSwitchPoint(Element *parent, wxPoint2DDouble parentPoint, wxPoint2DDouble secondPoint) const
Get the correct switch position.
+
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+ +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
+
+ + + + diff --git a/docs/doxygen/html/_power_element_8h.html b/docs/doxygen/html/_power_element_8h.html index a23b953..74ba2d8 100644 --- a/docs/doxygen/html/_power_element_8h.html +++ b/docs/doxygen/html/_power_element_8h.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/PowerElement.h File Reference +Project/PowerElement.h File Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Classes | @@ -154,6 +165,8 @@ Enumerations

Switching data of power elements.

Base class of power elements.

Integration constants to calculate dynamic elements through trapezoidal integration method.

+ +

Definition in file PowerElement.h.

Enumeration Type Documentation

◆ ElectricalUnit

@@ -211,6 +224,8 @@ Enumerations +

Definition at line 11 of file PowerElement.h.

+
@@ -243,6 +258,8 @@ Enumerations +

Definition at line 38 of file PowerElement.h.

+ @@ -271,6 +288,8 @@ Enumerations +

Definition at line 61 of file PowerElement.h.

+ @@ -293,14 +312,20 @@ Enumerations +

Definition at line 52 of file PowerElement.h.

+ + - + diff --git a/docs/doxygen/html/_power_element_8h.js b/docs/doxygen/html/_power_element_8h.js new file mode 100644 index 0000000..f333162 --- /dev/null +++ b/docs/doxygen/html/_power_element_8h.js @@ -0,0 +1,48 @@ +var _power_element_8h = +[ + [ "SwitchingData", "struct_switching_data.html", "struct_switching_data" ], + [ "IntegrationConstant", "struct_integration_constant.html", "struct_integration_constant" ], + [ "PowerElement", "class_power_element.html", "class_power_element" ], + [ "ElectricalUnit", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220cca", [ + [ "UNIT_PU", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaad22bbe1d526c8b9cac230fa6dca82b58", null ], + [ "UNIT_V", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa8cac20ac9e816437ad8487400bb9f027", null ], + [ "UNIT_kV", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa29f80755e4c0ce17e1e4481182e548da", null ], + [ "UNIT_A", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa2751885c0f17f3c2e4e8ea341f62dc9c", null ], + [ "UNIT_kA", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa81c9e03cb1e74d13cd9a1c928a38b392", null ], + [ "UNIT_W", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa1b7fe4f8de747aebfcbe3df2ec78279c", null ], + [ "UNIT_kW", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa6576f8a845540ae6439ec850ab4e7a6b", null ], + [ "UNIT_MW", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa0e44ebcb07116662322ee536abc0e990", null ], + [ "UNIT_VA", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaab199aa3533e82846acc8c78847d126c9", null ], + [ "UNIT_kVA", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaac27252874d11b1bc352981ad491802f5", null ], + [ "UNIT_MVA", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa0120ee2353bba9baf0151108a299f6ae", null ], + [ "UNIT_VAr", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa7f67491156c61b945c7a28a12d13740c", null ], + [ "UNIT_kVAr", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa13d53193dc339f40ca63ace836fc366d", null ], + [ "UNIT_MVAr", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaae578be70360e9692f38d175c5f709871", null ], + [ "UNIT_OHM", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaafdab9cc53a2b7b33ae61c568006d1cec", null ], + [ "UNIT_OHM_km", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa8a826e75d0d077b2174d7bb62fc8dad1", null ], + [ "UNIT_S", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa7c0341915f48c889a8885b72199f2a11", null ], + [ "UNIT_S_km", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaaf5ad31fee4a7f5843527be386033de65", null ], + [ "UNIT_DEGREE", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa2035461eacf2ebcf3274bc419ef327d3", null ], + [ "UNIT_RADIAN", "_power_element_8h.html#a398e3da742a726a8f2bacd8149220ccaa613165a3bff40fee33d02e7b730e3bb5", null ] + ] ], + [ "FaultData", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cb", [ + [ "FAULT_THREEPHASE", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cbac670e819e6d824b60cee62ca39ddc8d0", null ], + [ "FAULT_2LINE", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cbad44688f1ea0a010d3c0fd37870e46512", null ], + [ "FAULT_2LINE_GROUND", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cbaafad40a772b78232a91fe61d606a323e", null ], + [ "FAULT_LINE_GROUND", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cbaa8b6335aeec4befa68e4642a94026d0d", null ], + [ "FAULT_LINE_A", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cbad7f3fd44a6a841106ba66d1adbd53fdd", null ], + [ "FAULT_LINE_B", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cba6ab815fdf2ca1dc91c0dd3ec4c630245", null ], + [ "FAULT_LINE_C", "_power_element_8h.html#a41a50717b1a7ef4caa3c499c164fc2cba836a7abab9ade9c28512ea3ee0737315", null ] + ] ], + [ "PowerFlowDirection", "_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740", [ + [ "PF_NONE", "_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740aad1f68b93664b1917fafc7cf9b7537d3", null ], + [ "PF_TO_BUS", "_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740a2c1d794112edc994905b320596aba869", null ], + [ "PF_TO_ELEMENT", "_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740a5e06e77c5b3ee38885f0321cc0276b81", null ], + [ "PF_BUS1_TO_BUS2", "_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740ad4f3902fa2c8a1fbd48375c553d40523", null ], + [ "PF_BUS2_TO_BUS1", "_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740a76c5c56adeea68291ce8b63b8e6cd095", null ] + ] ], + [ "SwitchingType", "_power_element_8h.html#ae98a0d9ac1aab1d3a057854f5ebdca1b", [ + [ "SW_INSERT", "_power_element_8h.html#ae98a0d9ac1aab1d3a057854f5ebdca1bafd08c03e8d1218eaa3c5e8f69bb98ea7", null ], + [ "SW_REMOVE", "_power_element_8h.html#ae98a0d9ac1aab1d3a057854f5ebdca1baa0c70909536e1b1a2f638e13a7f7b776", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/_power_element_8h_source.html b/docs/doxygen/html/_power_element_8h_source.html index 49a5bab..05e571a 100644 --- a/docs/doxygen/html/_power_element_8h_source.html +++ b/docs/doxygen/html/_power_element_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/PowerElement.h Source File +Project/PowerElement.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
PowerElement.h
-Go to the documentation of this file.
1 #ifndef POWERELEMENT_H
2 #define POWERELEMENT_H
3 
4 #include "Element.h"
5 #include "ElementPlotData.h"
6 
12  UNIT_PU = 0,
32 };
33 
38 enum FaultData {
46 };
47 
53  SW_INSERT = 0,
55 };
56 
62  PF_NONE = 0,
67 };
68 
76 struct SwitchingData {
77  std::vector<SwitchingType> swType;
78  std::vector<double> swTime;
79 };
80 
89  double c;
90  double m;
91 };
92 
100 class PowerElement : public Element
101 {
102  public:
106  PowerElement();
110  ~PowerElement();
111 
118  virtual wxPoint2DDouble GetSwitchPoint(Element* parent,
119  wxPoint2DDouble parentPoint,
120  wxPoint2DDouble secondPoint) const;
121 
126  virtual bool SwitchesContains(wxPoint2DDouble position) const;
127 
131  virtual void UpdateSwitches();
132 
136  virtual void DrawSwitches() const;
137 
142  virtual void CalculatePowerFlowPts(std::vector<wxPoint2DDouble> edges);
143 
147  virtual void DrawPowerFlowPts() const;
148 
154  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
155 
160  virtual void SetSwitchingData(SwitchingData data) { m_swData = data; }
165  virtual SwitchingData GetSwitchingData() { return m_swData; }
170  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection) { m_pfDirection = pfDirection; }
175  virtual PowerFlowDirection GetPowerFlowDirection() const { return m_pfDirection; }
181  virtual bool GetPlotData(ElementPlotData& plotData) { return false; }
186  virtual bool HaveDynamicEvent() const { return m_dynEvent; }
191  virtual void SetDynamicEvent(bool dynEvent = true) { m_dynEvent = dynEvent; }
192  virtual double GetValueFromUnit(double value, ElectricalUnit valueUnit);
193 
194  protected:
195  SwitchingData m_swData;
196  std::vector<std::vector<wxPoint2DDouble> > m_powerFlowArrow;
197  PowerFlowDirection m_pfDirection = PF_NONE;
198 
199  OpenGLColour m_busColour;
200  OpenGLColour m_onlineElementColour;
201  OpenGLColour m_offlineElementColour;
202  OpenGLColour m_closedSwitchColour;
203  OpenGLColour m_openedSwitchColour;
204  OpenGLColour m_powerFlowArrowColour;
205  OpenGLColour m_dynamicEventColour;
206 
207  bool m_dynEvent = false;
208 };
209 
210 #endif // POWERELEMENT_H
Definition: PowerElement.h:26
-
Definition: PowerElement.h:45
-
std::vector< double > swTime
Definition: PowerElement.h:78
-
Definition: PowerElement.h:15
-
Definition: Element.h:88
-
Definition: PowerElement.h:42
-
Definition: PowerElement.h:13
-
Definition: PowerElement.h:30
-
FaultData
Information about fault (type and location).
Definition: PowerElement.h:38
-
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: PowerElement.h:170
-
virtual bool HaveDynamicEvent() const
Check if the power element have dynamic event.
Definition: PowerElement.h:186
-
Definition: PowerElement.h:19
-
Definition: PowerElement.h:14
-
std::vector< SwitchingType > swType
Definition: PowerElement.h:77
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:12
-
Definition: PowerElement.h:88
-
virtual void SetDynamicEvent(bool dynEvent=true)
Set if the power element have dynamic event.
Definition: PowerElement.h:191
-
Definition: PowerElement.h:54
-
Definition: PowerElement.h:64
+Go to the documentation of this file.
1 #ifndef POWERELEMENT_H
2 #define POWERELEMENT_H
3 
4 #include "Element.h"
5 #include "ElementPlotData.h"
6 
12  UNIT_PU = 0,
32 };
33 
38 enum FaultData {
46 };
47 
53  SW_INSERT = 0,
55 };
56 
62  PF_NONE = 0,
67 };
68 
76 struct SwitchingData {
77  std::vector<SwitchingType> swType;
78  std::vector<double> swTime;
79 };
80 
89  double c;
90  double m;
91 };
92 
100 class PowerElement : public Element
101 {
102  public:
106  PowerElement();
110  ~PowerElement();
111 
118  virtual wxPoint2DDouble GetSwitchPoint(Element* parent,
119  wxPoint2DDouble parentPoint,
120  wxPoint2DDouble secondPoint) const;
121 
126  virtual bool SwitchesContains(wxPoint2DDouble position) const;
127 
131  virtual void UpdateSwitches();
132 
136  virtual void DrawSwitches() const;
137 
142  virtual void CalculatePowerFlowPts(std::vector<wxPoint2DDouble> edges);
143 
147  virtual void DrawPowerFlowPts() const;
148 
154  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
155 
160  virtual void SetSwitchingData(SwitchingData data) { m_swData = data; }
165  virtual SwitchingData GetSwitchingData() { return m_swData; }
170  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection) { m_pfDirection = pfDirection; }
175  virtual PowerFlowDirection GetPowerFlowDirection() const { return m_pfDirection; }
181  virtual bool GetPlotData(ElementPlotData& plotData) { return false; }
186  virtual bool HaveDynamicEvent() const { return m_dynEvent; }
191  virtual void SetDynamicEvent(bool dynEvent = true) { m_dynEvent = dynEvent; }
192  virtual double GetValueFromUnit(double value, ElectricalUnit valueUnit);
193 
194  protected:
195  SwitchingData m_swData;
196  std::vector<std::vector<wxPoint2DDouble> > m_powerFlowArrow;
197  PowerFlowDirection m_pfDirection = PF_NONE;
198 
199  OpenGLColour m_busColour;
200  OpenGLColour m_onlineElementColour;
201  OpenGLColour m_offlineElementColour;
202  OpenGLColour m_closedSwitchColour;
203  OpenGLColour m_openedSwitchColour;
204  OpenGLColour m_powerFlowArrowColour;
205  OpenGLColour m_dynamicEventColour;
206 
207  bool m_dynEvent = false;
208 };
209 
210 #endif // POWERELEMENT_H
+ +
std::vector< double > swTime
Definition: PowerElement.h:78
+ + + + + +
FaultData
Information about fault (type and location).
Definition: PowerElement.h:38
+
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
Definition: PowerElement.h:170
+
virtual bool HaveDynamicEvent() const
Check if the power element have dynamic event.
Definition: PowerElement.h:186
+ + +
std::vector< SwitchingType > swType
Definition: PowerElement.h:77
+
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + +
virtual void SetDynamicEvent(bool dynEvent=true)
Set if the power element have dynamic event.
Definition: PowerElement.h:191
+ +
Class to manage color of OpenGL.
-
Definition: PowerElement.h:18
-
double m
Definition: PowerElement.h:90
-
virtual bool GetPlotData(ElementPlotData &plotData)
Fill the plot data.
Definition: PowerElement.h:181
-
Definition: PowerElement.h:76
-
Definition: PowerElement.h:43
-
Definition: ElementPlotData.h:39
-
Definition: PowerElement.h:22
-
Definition: PowerElement.h:16
-
Definition: PowerElement.h:40
-
Definition: PowerElement.h:27
-
Definition: PowerElement.h:25
-
Definition: PowerElement.h:39
-
double c
Definition: PowerElement.h:89
-
Definition: PowerElement.h:28
-
Definition: PowerElement.h:66
-
Definition: PowerElement.h:24
-
virtual PowerFlowDirection GetPowerFlowDirection() const
Return the direction of the power flow.
Definition: PowerElement.h:175
-
Definition: PowerElement.h:41
-
virtual SwitchingData GetSwitchingData()
Returns the switching data of the element.
Definition: PowerElement.h:165
-
Definition: PowerElement.h:63
-
SwitchingType
Type of switching.
Definition: PowerElement.h:52
-
Definition: PowerElement.h:62
-
Definition: PowerElement.h:23
-
Definition: Element.h:48
-
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
-
Definition: PowerElement.h:100
-
Definition: PowerElement.h:29
-
Definition: PowerElement.h:65
-
Definition: PowerElement.h:20
-
Definition: PowerElement.h:44
-
Definition: PowerElement.h:31
-
virtual void SetSwitchingData(SwitchingData data)
Set the switching data of the element.
Definition: PowerElement.h:160
-
Definition: PowerElement.h:53
-
Definition: PowerElement.h:21
-
Definition: PowerElement.h:17
+ + +
virtual bool GetPlotData(ElementPlotData &plotData)
Fill the plot data.
Definition: PowerElement.h:181
+ + + + + + + + + + + + + +
virtual PowerFlowDirection GetPowerFlowDirection() const
Return the direction of the power flow.
Definition: PowerElement.h:175
+ +
virtual SwitchingData GetSwitchingData()
Returns the switching data of the element.
Definition: PowerElement.h:165
+ +
SwitchingType
Type of switching.
Definition: PowerElement.h:52
+ + + +
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
+ + + + + + +
virtual void SetSwitchingData(SwitchingData data)
Set the switching data of the element.
Definition: PowerElement.h:160
+ + +
+
- + diff --git a/docs/doxygen/html/_power_flow_8cpp_source.html b/docs/doxygen/html/_power_flow_8cpp_source.html new file mode 100644 index 0000000..c71f6be --- /dev/null +++ b/docs/doxygen/html/_power_flow_8cpp_source.html @@ -0,0 +1,108 @@ + + + + + + + +Project/PowerFlow.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PowerFlow.cpp
+
+
+
1 #include "PowerFlow.h"
2 
3 PowerFlow::PowerFlow()
5 {
6 }
7 
8 PowerFlow::PowerFlow(std::vector<Element*> elementList)
10 {
11  GetElementsFromList(elementList);
12 }
13 
14 PowerFlow::~PowerFlow() {}
15 
16 bool PowerFlow::RunGaussSeidel(double systemPowerBase,
17  int maxIteration,
18  double error,
19  double initAngle,
20  double accFactor)
21 {
22  // Calculate the Ybus.
23  if(!GetYBus(m_yBus, systemPowerBase)) {
24  m_errorMsg = _("No buses found on the system.");
25  return false;
26  }
27 
28  // Number of buses on the system.
29  int numberOfBuses = static_cast<int>(m_busList.size());
30 
31  std::vector<BusType> busType; // Bus type
32  std::vector<std::complex<double> > voltage; // Voltage of buses
33  std::vector<std::complex<double> > power; // Injected power
34  std::vector<std::complex<double> > loadPower; // Only the load power
35  std::vector<ReactiveLimits> reactiveLimit; // Limit of reactive power on PV buses
36 
37  reactiveLimit.resize(numberOfBuses);
38 
39  int busNumber = 0;
40  for(auto itb = m_busList.begin(); itb != m_busList.end(); itb++) {
41  Bus* bus = *itb;
42  BusElectricalData data = bus->GetElectricalData();
43 
44  // Fill the bus type
45  if(data.slackBus) busType.push_back(BUS_SLACK);
46  // If the bus have controlled voltage, check if at least one synchronous machine is connected, then set the
47  // bus type.
48  else if(data.isVoltageControlled) {
49  bool hasSyncMachine = false;
50  // Synchronous generator
51  for(auto itsg = m_syncGeneratorList.begin(); itsg != m_syncGeneratorList.end(); itsg++) {
52  SyncGenerator* syncGenerator = *itsg;
53  if(bus == syncGenerator->GetParentList()[0] && syncGenerator->IsOnline()) hasSyncMachine = true;
54  }
55  // Synchronous motor
56  for(auto itsm = m_syncMotorList.begin(); itsm != m_syncMotorList.end(); itsm++) {
57  SyncMotor* syncMotor = *itsm;
58  if(bus == syncMotor->GetParentList()[0] && syncMotor->IsOnline()) hasSyncMachine = true;
59  }
60  if(hasSyncMachine)
61  busType.push_back(BUS_PV);
62  else
63  busType.push_back(BUS_PQ);
64  } else
65  busType.push_back(BUS_PQ);
66 
67  // Fill the voltages array
68  if(data.isVoltageControlled && busType[busNumber] != BUS_PQ) {
69  voltage.push_back(std::complex<double>(data.controlledVoltage, 0.0));
70  } else {
71  voltage.push_back(std::complex<double>(1.0, 0.0));
72  }
73 
74  // Fill the power array
75  power.push_back(std::complex<double>(0.0, 0.0)); // Initial value
76  loadPower.push_back(std::complex<double>(0.0, 0.0));
77 
78  // Synchronous generator
79  for(auto itsg = m_syncGeneratorList.begin(); itsg != m_syncGeneratorList.end(); itsg++) {
80  SyncGenerator* syncGenerator = *itsg;
81  if(syncGenerator->IsOnline()) {
82  if(bus == syncGenerator->GetParentList()[0]) {
83  SyncGeneratorElectricalData childData = syncGenerator->GetPUElectricalData(systemPowerBase);
84  power[busNumber] += std::complex<double>(childData.activePower, childData.reactivePower);
85 
86  if(busType[busNumber] == BUS_PV) {
87  if(childData.haveMaxReactive && reactiveLimit[busNumber].maxLimitType != RL_UNLIMITED_SOURCE) {
88  reactiveLimit[busNumber].maxLimitType = RL_LIMITED;
89  reactiveLimit[busNumber].maxLimit += childData.maxReactive;
90  } else if(!childData.haveMaxReactive)
91  reactiveLimit[busNumber].maxLimitType = RL_UNLIMITED_SOURCE;
92 
93  if(childData.haveMinReactive && reactiveLimit[busNumber].minLimitType != RL_UNLIMITED_SOURCE) {
94  reactiveLimit[busNumber].minLimitType = RL_LIMITED;
95  reactiveLimit[busNumber].minLimit += childData.minReactive;
96  } else if(!childData.haveMinReactive)
97  reactiveLimit[busNumber].minLimitType = RL_UNLIMITED_SOURCE;
98  }
99  }
100  }
101  }
102  // Synchronous motor
103  for(auto itsm = m_syncMotorList.begin(); itsm != m_syncMotorList.end(); itsm++) {
104  SyncMotor* syncMotor = *itsm;
105  if(syncMotor->IsOnline()) {
106  if(bus == syncMotor->GetParentList()[0]) {
107  SyncMotorElectricalData childData = syncMotor->GetPUElectricalData(systemPowerBase);
108  power[busNumber] += std::complex<double>(-childData.activePower, childData.reactivePower);
109  loadPower[busNumber] += std::complex<double>(-childData.activePower, 0.0);
110 
111  if(busType[busNumber] == BUS_PV) {
112  if(childData.haveMaxReactive && reactiveLimit[busNumber].maxLimitType != RL_UNLIMITED_SOURCE) {
113  reactiveLimit[busNumber].maxLimitType = RL_LIMITED;
114  reactiveLimit[busNumber].maxLimit += childData.maxReactive;
115  } else if(!childData.haveMaxReactive)
116  reactiveLimit[busNumber].maxLimitType = RL_UNLIMITED_SOURCE;
117 
118  if(childData.haveMinReactive && reactiveLimit[busNumber].minLimitType != RL_UNLIMITED_SOURCE) {
119  reactiveLimit[busNumber].minLimitType = RL_LIMITED;
120  reactiveLimit[busNumber].minLimit += childData.minReactive;
121  } else if(!childData.haveMinReactive)
122  reactiveLimit[busNumber].minLimitType = RL_UNLIMITED_SOURCE;
123  }
124  }
125  }
126  }
127  // Load
128  for(auto itl = m_loadList.begin(); itl != m_loadList.end(); itl++) {
129  Load* load = *itl;
130  if(load->IsOnline()) {
131  if(bus == load->GetParentList()[0]) {
132  LoadElectricalData childData = load->GetPUElectricalData(systemPowerBase);
133  if(childData.loadType == CONST_POWER) {
134  power[busNumber] += std::complex<double>(-childData.activePower, -childData.reactivePower);
135  loadPower[busNumber] += std::complex<double>(-childData.activePower, -childData.reactivePower);
136  }
137  }
138  }
139  }
140 
141  // Induction motor
142  for(auto itim = m_indMotorList.begin(); itim != m_indMotorList.end(); itim++) {
143  IndMotor* indMotor = *itim;
144  if(indMotor->IsOnline()) {
145  if(bus == indMotor->GetParentList()[0]) {
146  IndMotorElectricalData childData = indMotor->GetPUElectricalData(systemPowerBase);
147  power[busNumber] += std::complex<double>(-childData.activePower, -childData.reactivePower);
148  loadPower[busNumber] += std::complex<double>(-childData.activePower, -childData.reactivePower);
149  }
150  }
151  }
152 
153  busNumber++;
154  }
155 
156  // Check if have slack bus and if have generation on the slack bus
157  bool haveSlackBus = false;
158  bool slackBusHaveGeneration = false;
159  for(int i = 0; i < (int)busType.size(); i++) {
160  if(busType[i] == BUS_SLACK) {
161  auto itb = m_busList.begin();
162  std::advance(itb, i);
163  Bus* bus = *itb;
164 
165  for(auto itsg = m_syncGeneratorList.begin(); itsg != m_syncGeneratorList.end(); itsg++) {
166  SyncGenerator* syncGenerator = *itsg;
167  if(syncGenerator->IsOnline() && bus == syncGenerator->GetParentList()[0]) slackBusHaveGeneration = true;
168  }
169  haveSlackBus = true;
170  }
171  }
172  if(!haveSlackBus) {
173  m_errorMsg = _("There is no slack bus on the system.");
174  return false;
175  }
176  if(!slackBusHaveGeneration) {
177  m_errorMsg = _("The slack bus don't have generation.");
178  return false;
179  }
180 
181  // Gauss-Seidel method
182  std::vector<std::complex<double> > oldVoltage; // Old voltage array.
183  oldVoltage.resize(voltage.size());
184 
185  auto oldBusType = busType;
186 
187  int iteration = 0; // Current itaration number.
188 
189  while(true) {
190  // Reach the max number of iterations.
191  if(iteration >= maxIteration) {
192  m_errorMsg = _("The maximum number of iterations was reached.");
193  return false;
194  }
195 
196  // Update the old voltage array to current iteration values.
197  for(int i = 0; i < numberOfBuses; i++) oldVoltage[i] = voltage[i];
198 
199  double iterationError = 0.0;
200 
201  for(int i = 0; i < numberOfBuses; i++) {
202  if(busType[i] == BUS_PQ) {
203  std::complex<double> yeSum(0.0, 0.0);
204  for(int k = 0; k < numberOfBuses; k++) {
205  if(i != k) {
206  // Sum { Y[i,k] * E[k] } | k = 1->n; k diff i
207  yeSum += m_yBus[i][k] * voltage[k];
208  }
209  }
210 
211  // E[i] = (1/Y[i,i])*((P[i]-jQ[i])/E*[i] - Sum { Y[i,k] * E[k] (k diff i) })
212  std::complex<double> newVolt =
213  (1.0 / m_yBus[i][i]) * (std::conj(power[i]) / std::conj(voltage[i]) - yeSum);
214 
215  // Apply the acceleration factor.
216  newVolt = std::complex<double>(accFactor * (newVolt.real() - voltage[i].real()) + voltage[i].real(),
217  accFactor * (newVolt.imag() - voltage[i].imag()) + voltage[i].imag());
218 
219  voltage[i] = newVolt;
220  }
221  if(busType[i] == BUS_PV) {
222  std::complex<double> yeSum(0.0, 0.0);
223  for(int k = 0; k < numberOfBuses; k++) {
224  if(i != k) {
225  // Sum { Y[i,k] * E[k] } | k = 1->n; k diff i
226  yeSum += m_yBus[i][k] * voltage[k];
227  }
228  }
229  std::complex<double> yeSumT = yeSum + (m_yBus[i][i] * voltage[i]);
230 
231  // Q[i] = - Im( E*[i] * Sum { Y[i,k] * E[k] } )
232  std::complex<double> qCalc = std::conj(voltage[i]) * yeSumT;
233  power[i] = std::complex<double>(power[i].real(), -qCalc.imag());
234 
235  // E[i] = (1/Y[i,i])*((P[i]-jQ[i])/E*[i] - Sum { Y[i,k] * E[k] (k diff i) })
236  std::complex<double> newVolt =
237  (1.0 / m_yBus[i][i]) * (std::conj(power[i]) / std::conj(voltage[i]) - yeSum);
238 
239  // Apply the acceleration factor.
240  newVolt = std::complex<double>(accFactor * (newVolt.real() - voltage[i].real()) + voltage[i].real(),
241  accFactor * (newVolt.imag() - voltage[i].imag()) + voltage[i].imag());
242 
243  // Keep the same voltage magnitude.
244  voltage[i] = std::complex<double>(std::abs(voltage[i]) * std::cos(std::arg(newVolt)),
245  std::abs(voltage[i]) * std::sin(std::arg(newVolt)));
246  }
247 
248  double busError = std::max(
249  std::abs(voltage[i].real() - oldVoltage[i].real()), std::abs(voltage[i].imag() - oldVoltage[i].imag()));
250 
251  if(busError > iterationError) iterationError = busError;
252  }
253 
254  if(iterationError < error) {
255  bool limitReach = false;
256  for(int i = 0; i < numberOfBuses; i++) {
257  if(busType[i] == BUS_PV) {
258  if(reactiveLimit[i].maxLimitType == RL_LIMITED) {
259  if(power[i].imag() - loadPower[i].imag() > reactiveLimit[i].maxLimit) {
260  power[i] =
261  std::complex<double>(power[i].real(), reactiveLimit[i].maxLimit + loadPower[i].imag());
262  busType[i] = BUS_PQ;
263  reactiveLimit[i].limitReached = RL_MAX_REACHED;
264  limitReach = true;
265  }
266  }
267  if(reactiveLimit[i].minLimitType == RL_LIMITED) {
268  if(power[i].imag() - loadPower[i].imag() < reactiveLimit[i].minLimit) {
269  power[i] =
270  std::complex<double>(power[i].real(), reactiveLimit[i].minLimit + loadPower[i].imag());
271  busType[i] = BUS_PQ;
272  reactiveLimit[i].limitReached = RL_MIN_REACHED;
273  limitReach = true;
274  }
275  }
276  }
277  }
278  if(!limitReach) break;
279  }
280 
281  iteration++;
282  }
283 
284  // Adjust the power array.
285  // TODO: Only the slack bus??
286  for(int i = 0; i < numberOfBuses; i++) {
287  std::complex<double> sBus = std::complex<double>(0.0, 0.0);
288  for(int j = 0; j < numberOfBuses; j++) sBus += voltage[i] * std::conj(voltage[j]) * std::conj(m_yBus[i][j]);
289  power[i] = sBus;
290  }
291 
292  UpdateElementsPowerFlow(voltage, power, oldBusType, reactiveLimit, systemPowerBase);
293 
294  return true;
295 }
+ +
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+ + +
Definition: Bus.h:45
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+
Definition: Load.h:23
+ + + + + +
+
+ + + + diff --git a/docs/doxygen/html/_power_flow_8h_source.html b/docs/doxygen/html/_power_flow_8h_source.html index 0937b33..4a4a789 100644 --- a/docs/doxygen/html/_power_flow_8h_source.html +++ b/docs/doxygen/html/_power_flow_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/PowerFlow.h Source File +Project/PowerFlow.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
PowerFlow.h
-
1 #ifndef POWERFLOW_H
2 #define POWERFLOW_H
3 
4 #include "ElectricCalculation.h"
5 
6 #include <wx/string.h>
7 #include <wx/intl.h> //_()
8 
10 {
11 public:
12  PowerFlow();
13  PowerFlow(std::vector<Element*> elementList);
14  ~PowerFlow();
15  virtual bool RunGaussSeidel(double systemPowerBase = 100e6,
16  int maxIteration = 5000,
17  double error = 1e-6,
18  double initAngle = 0.0,
19  double accFactor = 1.0);
20 
21  virtual wxString GetErrorMessage() { return m_errorMsg; }
22 
23 protected:
24  std::vector<std::vector<std::complex<double> > > m_yBus;
25  wxString m_errorMsg = "";
26 };
27 
28 #endif // POWERFLOW_H
Definition: PowerFlow.h:9
+
1 #ifndef POWERFLOW_H
2 #define POWERFLOW_H
3 
4 #include "ElectricCalculation.h"
5 
6 #include <wx/string.h>
7 #include <wx/intl.h> //_()
8 
10 {
11 public:
12  PowerFlow();
13  PowerFlow(std::vector<Element*> elementList);
14  ~PowerFlow();
15  virtual bool RunGaussSeidel(double systemPowerBase = 100e6,
16  int maxIteration = 5000,
17  double error = 1e-6,
18  double initAngle = 0.0,
19  double accFactor = 1.0);
20 
21  virtual wxString GetErrorMessage() { return m_errorMsg; }
22 
23 protected:
24  std::vector<std::vector<std::complex<double> > > m_yBus;
25  wxString m_errorMsg = "";
26 };
27 
28 #endif // POWERFLOW_H
Base class of electric calculations, with general methods.
-
Definition: ElectricCalculation.h:49
+
+
- + diff --git a/docs/doxygen/html/_properties_data_8cpp_source.html b/docs/doxygen/html/_properties_data_8cpp_source.html new file mode 100644 index 0000000..4587081 --- /dev/null +++ b/docs/doxygen/html/_properties_data_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/PropertiesData.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PropertiesData.cpp
+
+
+
1 #include "PropertiesData.h"
2 
3 PropertiesData::PropertiesData()
4 {
5 }
6 
7 PropertiesData::~PropertiesData()
8 {
9 }
10 
+
+ + + + diff --git a/docs/doxygen/html/_properties_data_8h_source.html b/docs/doxygen/html/_properties_data_8h_source.html index f3c7b3e..440f405 100644 --- a/docs/doxygen/html/_properties_data_8h_source.html +++ b/docs/doxygen/html/_properties_data_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/PropertiesData.h Source File +Project/PropertiesData.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
PropertiesData.h
-
1 #ifndef PROPERTIESDATA_H
2 #define PROPERTIESDATA_H
3 
4 #include "wx/language.h"
5 #include "Element.h"
6 #include "PowerElement.h"
7 
8 enum PowerFlowMethod { GAUSS_SEIDEL = 0, NEWTON_RAPHSON };
9 enum GUITheme { THEME_LIGHT = 0, THEME_DARK };
10 
12  // General simulation data
13  double basePower = 100.0;
14  ElectricalUnit basePowerUnit = UNIT_MVA;
15  bool faultAfterPowerFlow = true;
16  bool scPowerAfterPowerFlow = true;
17 
18  // Power flow
19  PowerFlowMethod powerFlowMethod = GAUSS_SEIDEL;
20  double accFator = 1.0;
21  double powerFlowTolerance = 1e-7;
22  int powerFlowMaxIterations = 5000;
23 
24  // Stability
25  double stabilityFrequency = 60.0;
26  double timeStep = 1e-2;
27  double stabilitySimulationTime = 10.0;
28  double stabilityTolerance = 1e-8;
29  int stabilityMaxIterations = 100;
30  int controlTimeStepRatio = 10;
31  double plotTime = 1e-2;
32  bool useCOI = true;
33 };
34 
35 struct GeneralData {
36  wxLanguage language = wxLANGUAGE_ENGLISH;
37  GUITheme theme = THEME_LIGHT;
38 };
39 
41 {
42  public:
44  ~PropertiesData();
45 
46  SimulationData GetSimulationPropertiesData() const { return m_simulData; }
47  void SetSimulationPropertiesData(SimulationData simulationData) { m_simulData = simulationData; }
48  GeneralData GetGeneralPropertiesData() const { return m_genData; }
49  void SetGeneralPropertiesData(GeneralData generalData) { m_genData = generalData; }
50  protected:
51  SimulationData m_simulData;
52  GeneralData m_genData;
53 };
54 
55 #endif // PROPERTIESDATA_H
Definition: PropertiesData.h:40
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+
1 #ifndef PROPERTIESDATA_H
2 #define PROPERTIESDATA_H
3 
4 #include "wx/language.h"
5 #include "Element.h"
6 #include "PowerElement.h"
7 
8 enum PowerFlowMethod { GAUSS_SEIDEL = 0, NEWTON_RAPHSON };
9 enum GUITheme { THEME_LIGHT = 0, THEME_DARK };
10 
12  // General simulation data
13  double basePower = 100.0;
14  ElectricalUnit basePowerUnit = UNIT_MVA;
15  bool faultAfterPowerFlow = true;
16  bool scPowerAfterPowerFlow = true;
17 
18  // Power flow
19  PowerFlowMethod powerFlowMethod = GAUSS_SEIDEL;
20  double accFator = 1.0;
21  double powerFlowTolerance = 1e-7;
22  int powerFlowMaxIterations = 5000;
23 
24  // Stability
25  double stabilityFrequency = 60.0;
26  double timeStep = 1e-2;
27  double stabilitySimulationTime = 10.0;
28  double stabilityTolerance = 1e-8;
29  int stabilityMaxIterations = 100;
30  int controlTimeStepRatio = 10;
31  double plotTime = 1e-2;
32  bool useCOI = true;
33 };
34 
35 struct GeneralData {
36  wxLanguage language = wxLANGUAGE_ENGLISH;
37  GUITheme theme = THEME_LIGHT;
38 };
39 
41 {
42  public:
44  ~PropertiesData();
45 
46  SimulationData GetSimulationPropertiesData() const { return m_simulData; }
47  void SetSimulationPropertiesData(SimulationData simulationData) { m_simulData = simulationData; }
48  GeneralData GetGeneralPropertiesData() const { return m_genData; }
49  void SetGeneralPropertiesData(GeneralData generalData) { m_genData = generalData; }
50  protected:
51  SimulationData m_simulData;
52  GeneralData m_genData;
53 };
54 
55 #endif // PROPERTIESDATA_H
+
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
Class to manage color of OpenGL.
-
Definition: PropertiesData.h:11
-
Definition: PowerElement.h:22
+ +
Switching data of power elements.
-
Definition: PropertiesData.h:35
+
+
- + diff --git a/docs/doxygen/html/_properties_form_8cpp_source.html b/docs/doxygen/html/_properties_form_8cpp_source.html new file mode 100644 index 0000000..1751d84 --- /dev/null +++ b/docs/doxygen/html/_properties_form_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/PropertiesForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PropertiesForm.cpp
+
+
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: PropertiesForm.wxcp
4 // Do not modify this file by hand!
6 
7 #include "PropertiesForm.h"
8 
9 
10 // Declare the bitmap loading function
11 extern void wxCDAD0InitBitmapResources();
12 
13 static bool bBitmapLoaded = false;
14 
15 
16 GeneralPropertiesFormBase::GeneralPropertiesFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
17  : wxDialog(parent, id, title, pos, size, style)
18 {
19  if ( !bBitmapLoaded ) {
20  // We need to initialise the default bitmap handler
21  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
22  wxCDAD0InitBitmapResources();
23  bBitmapLoaded = true;
24  }
25 
26  wxBoxSizer* boxSizer_lvl1_1 = new wxBoxSizer(wxVERTICAL);
27  this->SetSizer(boxSizer_lvl1_1);
28 
29  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
30  m_notebook->SetName(wxT("m_notebook"));
31 
32  boxSizer_lvl1_1->Add(m_notebook, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
33 
34  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
35  m_notebook->AddPage(m_panelGeneral, _("General"), false);
36 
37  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
38  m_panelGeneral->SetSizer(boxSizerLvl2_1);
39 
40  wxBoxSizer* boxSizerLvl3_1 = new wxBoxSizer(wxVERTICAL);
41 
42  boxSizerLvl2_1->Add(boxSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
43 
44  m_staticTextLanguage = new wxStaticText(m_panelGeneral, wxID_ANY, _("Language"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
45 
46  boxSizerLvl3_1->Add(m_staticTextLanguage, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
47 
48  wxArrayString m_choiceLanguageArr;
49  m_choiceLanguageArr.Add(wxT("English"));
50  m_choiceLanguageArr.Add(wxT("Portuguese"));
51  m_choiceLanguage = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceLanguageArr, 0);
52  m_choiceLanguage->SetSelection(0);
53 
54  boxSizerLvl3_1->Add(m_choiceLanguage, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
55 
56  wxBoxSizer* boxSizerLvl3_2 = new wxBoxSizer(wxVERTICAL);
57 
58  boxSizerLvl2_1->Add(boxSizerLvl3_2, 0, wxEXPAND, WXC_FROM_DIP(5));
59 
60  m_staticTextTheme = new wxStaticText(m_panelGeneral, wxID_ANY, _("Theme"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
61 
62  boxSizerLvl3_2->Add(m_staticTextTheme, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
63 
64  wxArrayString m_choiceThemeArr;
65  m_choiceThemeArr.Add(wxT("Light"));
66  m_choiceThemeArr.Add(wxT("Dark"));
67  m_choiceTheme = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceThemeArr, 0);
68  m_choiceTheme->SetSelection(0);
69 
70  boxSizerLvl3_2->Add(m_choiceTheme, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
71 
72  wxBoxSizer* boxSizer_bottonButtons = new wxBoxSizer(wxHORIZONTAL);
73 
74  boxSizer_lvl1_1->Add(boxSizer_bottonButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
75 
76  boxSizer_bottonButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
77 
78  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
79 
80  boxSizer_bottonButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
81 
82  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
83 
84  boxSizer_bottonButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
85 
86 
87  #if wxVERSION_NUMBER >= 2900
88  if(!wxPersistenceManager::Get().Find(m_notebook)){
89  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
90  } else {
91  wxPersistenceManager::Get().Restore(m_notebook);
92  }
93  #endif
94 
95  SetName(wxT("GeneralPropertiesFormBase"));
96  SetSize(-1,-1);
97  if (GetSizer()) {
98  GetSizer()->Fit(this);
99  }
100  if(GetParent()) {
101  CentreOnParent(wxBOTH);
102  } else {
103  CentreOnScreen(wxBOTH);
104  }
105 #if wxVERSION_NUMBER >= 2900
106  if(!wxPersistenceManager::Get().Find(this)) {
107  wxPersistenceManager::Get().RegisterAndRestore(this);
108  } else {
109  wxPersistenceManager::Get().Restore(this);
110  }
111 #endif
112  // Connect events
113  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneralPropertiesFormBase::OnButtonOKClick), NULL, this);
114  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneralPropertiesFormBase::OnButtonCancelClick), NULL, this);
115 
116 }
117 
118 GeneralPropertiesFormBase::~GeneralPropertiesFormBase()
119 {
120  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneralPropertiesFormBase::OnButtonOKClick), NULL, this);
121  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GeneralPropertiesFormBase::OnButtonCancelClick), NULL, this);
122 
123 }
124 
125 SimulationsSettingsFormBase::SimulationsSettingsFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
126  : wxDialog(parent, id, title, pos, size, style)
127 {
128  if ( !bBitmapLoaded ) {
129  // We need to initialise the default bitmap handler
130  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
131  wxCDAD0InitBitmapResources();
132  bBitmapLoaded = true;
133  }
134 
135  wxBoxSizer* boxSizer_lvl1_1 = new wxBoxSizer(wxVERTICAL);
136  this->SetSizer(boxSizer_lvl1_1);
137 
138  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
139  m_notebook->SetName(wxT("m_notebook"));
140 
141  boxSizer_lvl1_1->Add(m_notebook, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
142 
143  m_panelGeneral = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
144  m_notebook->AddPage(m_panelGeneral, _("General"), false);
145 
146  wxBoxSizer* boxSizerLvl2_1 = new wxBoxSizer(wxVERTICAL);
147  m_panelGeneral->SetSizer(boxSizerLvl2_1);
148 
149  wxBoxSizer* boxSizerLvl3_1 = new wxBoxSizer(wxVERTICAL);
150 
151  boxSizerLvl2_1->Add(boxSizerLvl3_1, 0, wxEXPAND, WXC_FROM_DIP(5));
152 
153  m_staticTextBasePower = new wxStaticText(m_panelGeneral, wxID_ANY, _("Base power"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
154 
155  boxSizerLvl3_1->Add(m_staticTextBasePower, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
156 
157  wxBoxSizer* boxSizerLvl4_1 = new wxBoxSizer(wxHORIZONTAL);
158 
159  boxSizerLvl3_1->Add(boxSizerLvl4_1, 0, wxEXPAND, WXC_FROM_DIP(5));
160 
161  m_textCtrlbasePower = new wxTextCtrl(m_panelGeneral, wxID_ANY, wxT("100,0"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
162  #if wxVERSION_NUMBER >= 3000
163  m_textCtrlbasePower->SetHint(wxT(""));
164  #endif
165 
166  boxSizerLvl4_1->Add(m_textCtrlbasePower, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
167 
168  wxArrayString m_choiceBasePowerArr;
169  m_choiceBasePowerArr.Add(wxT("VA"));
170  m_choiceBasePowerArr.Add(wxT("kVA"));
171  m_choiceBasePowerArr.Add(wxT("MVA"));
172  m_choiceBasePower = new wxChoice(m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), m_choiceBasePowerArr, 0);
173  m_choiceBasePower->SetSelection(2);
174 
175  boxSizerLvl4_1->Add(m_choiceBasePower, 0, wxLEFT|wxRIGHT|wxBOTTOM, WXC_FROM_DIP(5));
176 
177  wxStaticBoxSizer* staticBoxSizerLvl3_2 = new wxStaticBoxSizer( new wxStaticBox(m_panelGeneral, wxID_ANY, _("Continuous calculation")), wxVERTICAL);
178 
179  boxSizerLvl2_1->Add(staticBoxSizerLvl3_2, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
180 
181  m_checkBoxFaultAfterPF = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Calculate fault after power flow"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
182  m_checkBoxFaultAfterPF->SetValue(true);
183 
184  staticBoxSizerLvl3_2->Add(m_checkBoxFaultAfterPF, 0, wxALL, WXC_FROM_DIP(5));
185 
186  m_checkBoxSCPowerAfterPF = new wxCheckBox(m_panelGeneral, wxID_ANY, _("Calculate short-circuit power after power flow"), wxDefaultPosition, wxDLG_UNIT(m_panelGeneral, wxSize(-1,-1)), 0);
187  m_checkBoxSCPowerAfterPF->SetValue(true);
188 
189  staticBoxSizerLvl3_2->Add(m_checkBoxSCPowerAfterPF, 0, wxALL, WXC_FROM_DIP(5));
190 
191  m_panelPF = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
192  m_notebook->AddPage(m_panelPF, _("Power flow"), false);
193 
194  wxBoxSizer* boxSizerLvl2_2 = new wxBoxSizer(wxVERTICAL);
195  m_panelPF->SetSizer(boxSizerLvl2_2);
196 
197  wxBoxSizer* boxSizerLvl3_3 = new wxBoxSizer(wxVERTICAL);
198 
199  boxSizerLvl2_2->Add(boxSizerLvl3_3, 0, wxEXPAND, WXC_FROM_DIP(5));
200 
201  m_staticTextPFMethod = new wxStaticText(m_panelPF, wxID_ANY, _("Solution method"), wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), 0);
202 
203  boxSizerLvl3_3->Add(m_staticTextPFMethod, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
204 
205  wxArrayString m_choicePFMethodArr;
206  m_choicePFMethodArr.Add(wxT("Gauss-Seidel"));
207  m_choicePFMethodArr.Add(wxT("Newton-Raphson"));
208  m_choicePFMethod = new wxChoice(m_panelPF, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), m_choicePFMethodArr, 0);
209  m_choicePFMethod->SetSelection(0);
210 
211  boxSizerLvl3_3->Add(m_choicePFMethod, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND, WXC_FROM_DIP(5));
212 
213  wxGridSizer* gridSizerLvl_3_4 = new wxGridSizer(0, 2, 0, 0);
214 
215  boxSizerLvl2_2->Add(gridSizerLvl_3_4, 0, wxEXPAND, WXC_FROM_DIP(5));
216 
217  wxBoxSizer* boxSizerLvl4_2 = new wxBoxSizer(wxVERTICAL);
218 
219  gridSizerLvl_3_4->Add(boxSizerLvl4_2, 0, wxEXPAND, WXC_FROM_DIP(5));
220 
221  m_staticTextAccFactor = new wxStaticText(m_panelPF, wxID_ANY, _("Acceleration factor"), wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), 0);
222 
223  boxSizerLvl4_2->Add(m_staticTextAccFactor, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
224 
225  m_textCtrlAccFactor = new wxTextCtrl(m_panelPF, wxID_ANY, wxT("1,0"), wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), 0);
226  #if wxVERSION_NUMBER >= 3000
227  m_textCtrlAccFactor->SetHint(wxT(""));
228  #endif
229 
230  boxSizerLvl4_2->Add(m_textCtrlAccFactor, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
231 
232  wxBoxSizer* boxSizerLvl4_3 = new wxBoxSizer(wxVERTICAL);
233 
234  gridSizerLvl_3_4->Add(boxSizerLvl4_3, 0, wxEXPAND, WXC_FROM_DIP(5));
235 
236  m_staticTextPFTolerance = new wxStaticText(m_panelPF, wxID_ANY, _("Tolerance"), wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), 0);
237 
238  boxSizerLvl4_3->Add(m_staticTextPFTolerance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
239 
240  m_textCtrlPFTolerance = new wxTextCtrl(m_panelPF, wxID_ANY, wxT("1e-7"), wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), 0);
241  #if wxVERSION_NUMBER >= 3000
242  m_textCtrlPFTolerance->SetHint(wxT(""));
243  #endif
244 
245  boxSizerLvl4_3->Add(m_textCtrlPFTolerance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
246 
247  wxBoxSizer* boxSizerLvl4_4 = new wxBoxSizer(wxVERTICAL);
248 
249  gridSizerLvl_3_4->Add(boxSizerLvl4_4, 0, wxEXPAND, WXC_FROM_DIP(5));
250 
251  m_staticTextPFMaxIterations = new wxStaticText(m_panelPF, wxID_ANY, _("Max. iterations"), wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), 0);
252 
253  boxSizerLvl4_4->Add(m_staticTextPFMaxIterations, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
254 
255  m_textCtrlPFMaxIterations = new wxTextCtrl(m_panelPF, wxID_ANY, wxT("5000"), wxDefaultPosition, wxDLG_UNIT(m_panelPF, wxSize(-1,-1)), 0);
256  #if wxVERSION_NUMBER >= 3000
257  m_textCtrlPFMaxIterations->SetHint(wxT(""));
258  #endif
259 
260  boxSizerLvl4_4->Add(m_textCtrlPFMaxIterations, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
261 
262  m_panelStability = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
263  m_notebook->AddPage(m_panelStability, _("Stability"), false);
264 
265  wxBoxSizer* boxSizerLvl2_232 = new wxBoxSizer(wxVERTICAL);
266  m_panelStability->SetSizer(boxSizerLvl2_232);
267 
268  wxGridSizer* gridSizerLvl_2_3 = new wxGridSizer(0, 2, 0, 0);
269 
270  boxSizerLvl2_232->Add(gridSizerLvl_2_3, 0, wxEXPAND, WXC_FROM_DIP(5));
271 
272  wxBoxSizer* boxSizerLvl3_6 = new wxBoxSizer(wxVERTICAL);
273 
274  gridSizerLvl_2_3->Add(boxSizerLvl3_6, 0, wxEXPAND, WXC_FROM_DIP(5));
275 
276  m_staticTextTimeStep = new wxStaticText(m_panelStability, wxID_ANY, _("Time step"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
277 
278  boxSizerLvl3_6->Add(m_staticTextTimeStep, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
279 
280  wxBoxSizer* boxSizerLvl4_6 = new wxBoxSizer(wxHORIZONTAL);
281 
282  boxSizerLvl3_6->Add(boxSizerLvl4_6, 0, wxEXPAND, WXC_FROM_DIP(5));
283 
284  m_textCtrlTimeStep = new wxTextCtrl(m_panelStability, wxID_ANY, wxT("0,01"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
285  #if wxVERSION_NUMBER >= 3000
286  m_textCtrlTimeStep->SetHint(wxT(""));
287  #endif
288 
289  boxSizerLvl4_6->Add(m_textCtrlTimeStep, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
290 
291  m_staticTextSec_1 = new wxStaticText(m_panelStability, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
292 
293  boxSizerLvl4_6->Add(m_staticTextSec_1, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
294 
295  wxBoxSizer* boxSizerLvl3_7 = new wxBoxSizer(wxVERTICAL);
296 
297  gridSizerLvl_2_3->Add(boxSizerLvl3_7, 0, wxEXPAND, WXC_FROM_DIP(5));
298 
299  m_staticTextTSimTime = new wxStaticText(m_panelStability, wxID_ANY, _("Simulation time"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
300 
301  boxSizerLvl3_7->Add(m_staticTextTSimTime, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
302 
303  wxBoxSizer* boxSizerLvl4_7 = new wxBoxSizer(wxHORIZONTAL);
304 
305  boxSizerLvl3_7->Add(boxSizerLvl4_7, 0, wxEXPAND, WXC_FROM_DIP(5));
306 
307  m_textCtrlSimTime = new wxTextCtrl(m_panelStability, wxID_ANY, wxT("10"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
308  #if wxVERSION_NUMBER >= 3000
309  m_textCtrlSimTime->SetHint(wxT(""));
310  #endif
311 
312  boxSizerLvl4_7->Add(m_textCtrlSimTime, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
313 
314  m_staticTextSec_2 = new wxStaticText(m_panelStability, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
315 
316  boxSizerLvl4_7->Add(m_staticTextSec_2, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
317 
318  wxBoxSizer* boxSizerLvl3_5 = new wxBoxSizer(wxVERTICAL);
319 
320  gridSizerLvl_2_3->Add(boxSizerLvl3_5, 0, wxEXPAND, WXC_FROM_DIP(5));
321 
322  m_staticTextFreq = new wxStaticText(m_panelStability, wxID_ANY, _("System frequency"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
323 
324  boxSizerLvl3_5->Add(m_staticTextFreq, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
325 
326  wxBoxSizer* boxSizerLvl4_5 = new wxBoxSizer(wxHORIZONTAL);
327 
328  boxSizerLvl3_5->Add(boxSizerLvl4_5, 0, wxEXPAND, WXC_FROM_DIP(5));
329 
330  m_textCtrlFreq = new wxTextCtrl(m_panelStability, wxID_ANY, wxT("60,0"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
331  #if wxVERSION_NUMBER >= 3000
332  m_textCtrlFreq->SetHint(wxT(""));
333  #endif
334 
335  boxSizerLvl4_5->Add(m_textCtrlFreq, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
336 
337  m_staticTextFreqUnit = new wxStaticText(m_panelStability, wxID_ANY, _("Hz"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
338 
339  boxSizerLvl4_5->Add(m_staticTextFreqUnit, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
340 
341  wxBoxSizer* boxSizerLvl3_8 = new wxBoxSizer(wxVERTICAL);
342 
343  gridSizerLvl_2_3->Add(boxSizerLvl3_8, 0, wxEXPAND, WXC_FROM_DIP(5));
344 
345  m_staticTextTStabTolerance = new wxStaticText(m_panelStability, wxID_ANY, _("Tolerance"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
346 
347  boxSizerLvl3_8->Add(m_staticTextTStabTolerance, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
348 
349  m_textCtrlStabTolerance = new wxTextCtrl(m_panelStability, wxID_ANY, wxT("1e-8"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
350  #if wxVERSION_NUMBER >= 3000
351  m_textCtrlStabTolerance->SetHint(wxT(""));
352  #endif
353 
354  boxSizerLvl3_8->Add(m_textCtrlStabTolerance, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
355 
356  wxBoxSizer* boxSizerLvl3_9 = new wxBoxSizer(wxVERTICAL);
357 
358  gridSizerLvl_2_3->Add(boxSizerLvl3_9, 0, wxEXPAND, WXC_FROM_DIP(5));
359 
360  m_staticTextTStabMaxIterations = new wxStaticText(m_panelStability, wxID_ANY, _("Max. Iterations"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
361 
362  boxSizerLvl3_9->Add(m_staticTextTStabMaxIterations, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
363 
364  m_textCtrlStabMaxIterations = new wxTextCtrl(m_panelStability, wxID_ANY, wxT("100"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
365  #if wxVERSION_NUMBER >= 3000
366  m_textCtrlStabMaxIterations->SetHint(wxT(""));
367  #endif
368 
369  boxSizerLvl3_9->Add(m_textCtrlStabMaxIterations, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
370 
371  wxBoxSizer* boxSizerLvl3_10 = new wxBoxSizer(wxVERTICAL);
372 
373  gridSizerLvl_2_3->Add(boxSizerLvl3_10, 0, wxEXPAND, WXC_FROM_DIP(5));
374 
375  m_staticTextCtrlStepRation = new wxStaticText(m_panelStability, wxID_ANY, _("Controls step ratio"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
376 
377  boxSizerLvl3_10->Add(m_staticTextCtrlStepRation, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
378 
379  m_textCtrlCtrlStepRatio = new wxTextCtrl(m_panelStability, wxID_ANY, wxT("10"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
380  #if wxVERSION_NUMBER >= 3000
381  m_textCtrlCtrlStepRatio->SetHint(wxT(""));
382  #endif
383 
384  boxSizerLvl3_10->Add(m_textCtrlCtrlStepRatio, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
385 
386  wxBoxSizer* boxSizerLvl3_11 = new wxBoxSizer(wxVERTICAL);
387 
388  gridSizerLvl_2_3->Add(boxSizerLvl3_11, 0, wxEXPAND, WXC_FROM_DIP(5));
389 
390  m_staticTextPrintTime = new wxStaticText(m_panelStability, wxID_ANY, _("Plot time"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
391 
392  boxSizerLvl3_11->Add(m_staticTextPrintTime, 0, wxLEFT|wxRIGHT|wxTOP|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
393 
394  wxBoxSizer* boxSizerLvl4_8 = new wxBoxSizer(wxHORIZONTAL);
395 
396  boxSizerLvl3_11->Add(boxSizerLvl4_8, 0, wxEXPAND, WXC_FROM_DIP(5));
397 
398  m_textCtrlPrintTime = new wxTextCtrl(m_panelStability, wxID_ANY, wxT("0,01"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
399  #if wxVERSION_NUMBER >= 3000
400  m_textCtrlPrintTime->SetHint(wxT(""));
401  #endif
402 
403  boxSizerLvl4_8->Add(m_textCtrlPrintTime, 1, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
404 
405  m_staticTextSec_4 = new wxStaticText(m_panelStability, wxID_ANY, _("s"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
406 
407  boxSizerLvl4_8->Add(m_staticTextSec_4, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxALIGN_CENTER_VERTICAL, WXC_FROM_DIP(5));
408 
409  m_checkBoxUseCOI = new wxCheckBox(m_panelStability, wxID_ANY, _("Use center of inertia as reference"), wxDefaultPosition, wxDLG_UNIT(m_panelStability, wxSize(-1,-1)), 0);
410  m_checkBoxUseCOI->SetValue(true);
411 
412  boxSizerLvl2_232->Add(m_checkBoxUseCOI, 0, wxALL, WXC_FROM_DIP(5));
413 
414  wxBoxSizer* boxSizer_bottonButtons = new wxBoxSizer(wxHORIZONTAL);
415 
416  boxSizer_lvl1_1->Add(boxSizer_bottonButtons, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
417 
418  boxSizer_bottonButtons->Add(0, 0, 1, wxALL, WXC_FROM_DIP(5));
419 
420  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
421 
422  boxSizer_bottonButtons->Add(m_buttonOK, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
423 
424  m_buttonCancel = new wxButton(this, wxID_ANY, _("Cancel"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
425 
426  boxSizer_bottonButtons->Add(m_buttonCancel, 0, wxALL|wxALIGN_RIGHT, WXC_FROM_DIP(5));
427 
428 
429  #if wxVERSION_NUMBER >= 2900
430  if(!wxPersistenceManager::Get().Find(m_notebook)){
431  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
432  } else {
433  wxPersistenceManager::Get().Restore(m_notebook);
434  }
435  #endif
436 
437  SetName(wxT("SimulationsSettingsFormBase"));
438  SetSize(-1,-1);
439  if (GetSizer()) {
440  GetSizer()->Fit(this);
441  }
442  if(GetParent()) {
443  CentreOnParent(wxBOTH);
444  } else {
445  CentreOnScreen(wxBOTH);
446  }
447 #if wxVERSION_NUMBER >= 2900
448  if(!wxPersistenceManager::Get().Find(this)) {
449  wxPersistenceManager::Get().RegisterAndRestore(this);
450  } else {
451  wxPersistenceManager::Get().Restore(this);
452  }
453 #endif
454  // Connect events
455  m_choicePFMethod->Connect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(SimulationsSettingsFormBase::OnPFMethodChoiceSelected), NULL, this);
456  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SimulationsSettingsFormBase::OnButtonOKClick), NULL, this);
457  m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SimulationsSettingsFormBase::OnButtonCancelClick), NULL, this);
458 
459 }
460 
461 SimulationsSettingsFormBase::~SimulationsSettingsFormBase()
462 {
463  m_choicePFMethod->Disconnect(wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler(SimulationsSettingsFormBase::OnPFMethodChoiceSelected), NULL, this);
464  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SimulationsSettingsFormBase::OnButtonOKClick), NULL, this);
465  m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(SimulationsSettingsFormBase::OnButtonCancelClick), NULL, this);
466 
467 }
468 
469 AboutFormBase::AboutFormBase(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style)
470  : wxDialog(parent, id, title, pos, size, style)
471 {
472  if ( !bBitmapLoaded ) {
473  // We need to initialise the default bitmap handler
474  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
475  wxCDAD0InitBitmapResources();
476  bBitmapLoaded = true;
477  }
478 
479  wxBoxSizer* boxSizerMain = new wxBoxSizer(wxVERTICAL);
480  this->SetSizer(boxSizerMain);
481 
482  m_notebook = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxBK_DEFAULT);
483  m_notebook->SetName(wxT("m_notebook"));
484 
485  boxSizerMain->Add(m_notebook, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
486 
487  m_panelLogo = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
488  m_notebook->AddPage(m_panelLogo, _("About"), false);
489 
490  wxBoxSizer* boxSizerLvl1_1 = new wxBoxSizer(wxVERTICAL);
491  m_panelLogo->SetSizer(boxSizerLvl1_1);
492 
493  m_staticBitmapLogo = new wxStaticBitmap(m_panelLogo, wxID_ANY, wxXmlResource::Get()->LoadBitmap(wxT("About2017")), wxDefaultPosition, wxDLG_UNIT(m_panelLogo, wxSize(-1,-1)), 0 );
494 
495  boxSizerLvl1_1->Add(m_staticBitmapLogo, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, WXC_FROM_DIP(5));
496 
497  m_panelCredits = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
498  m_notebook->AddPage(m_panelCredits, _("Credits"), false);
499 
500  wxBoxSizer* boxSizerLvl1_2 = new wxBoxSizer(wxVERTICAL);
501  m_panelCredits->SetSizer(boxSizerLvl1_2);
502 
503  m_gridCredits = new wxGrid(m_panelCredits, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_panelCredits, wxSize(-1,-1)), wxWANTS_CHARS);
504  m_gridCredits->CreateGrid(0, 0);
505  m_gridCredits->SetRowLabelAlignment(wxALIGN_RIGHT, wxALIGN_CENTRE);
506  m_gridCredits->SetColLabelAlignment(wxALIGN_CENTRE, wxALIGN_CENTRE);
507  #if wxVERSION_NUMBER >= 2904
508  m_gridCredits->UseNativeColHeader(true);
509  #endif
510  m_gridCredits->EnableEditing(false);
511 
512  boxSizerLvl1_2->Add(m_gridCredits, 1, wxEXPAND, WXC_FROM_DIP(5));
513 
514  m_panelLicense = new wxPanel(m_notebook, wxID_ANY, wxDefaultPosition, wxDLG_UNIT(m_notebook, wxSize(-1,-1)), wxTAB_TRAVERSAL);
515  m_notebook->AddPage(m_panelLicense, _("License"), false);
516 
517  wxBoxSizer* boxSizerLvl1_3 = new wxBoxSizer(wxVERTICAL);
518  m_panelLicense->SetSizer(boxSizerLvl1_3);
519 
520  m_richTextCtrlLicense = new wxRichTextCtrl(m_panelLicense, wxID_ANY, wxT(""), wxDefaultPosition, wxDLG_UNIT(m_panelLicense, wxSize(-1,-1)), wxTE_MULTILINE|wxTE_PROCESS_TAB|wxTE_PROCESS_ENTER|wxWANTS_CHARS);
521 
522  boxSizerLvl1_3->Add(m_richTextCtrlLicense, 1, wxALL|wxEXPAND, WXC_FROM_DIP(5));
523 
524  wxFlexGridSizer* flexGridSizer247 = new wxFlexGridSizer(2, 2, 0, 0);
525  flexGridSizer247->SetFlexibleDirection( wxBOTH );
526  flexGridSizer247->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
527  flexGridSizer247->AddGrowableCol(1);
528 
529  boxSizerMain->Add(flexGridSizer247, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5));
530 
531  m_staticTextVersionLabel = new wxStaticText(this, wxID_ANY, _("Version:"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
532 
533  flexGridSizer247->Add(m_staticTextVersionLabel, 0, wxALL, WXC_FROM_DIP(5));
534 
535  m_staticTextVersion = new wxStaticText(this, wxID_ANY, _("Alpha 2017w37a"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
536 
537  flexGridSizer247->Add(m_staticTextVersion, 0, wxALL, WXC_FROM_DIP(5));
538 
539  m_staticTextHome = new wxStaticText(this, wxID_ANY, _("Home page:"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
540 
541  flexGridSizer247->Add(m_staticTextHome, 0, wxALL, WXC_FROM_DIP(5));
542 
543  m_hyperLinkPSP = new wxHyperlinkCtrl(this, wxID_ANY, _("http://www.ndse.ufu.br/pspufu"), wxT("http://www.ndse.ufu.br/pspufu"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), wxHL_DEFAULT_STYLE);
544  m_hyperLinkPSP->SetNormalColour(wxColour(wxT("#0000FF")));
545  m_hyperLinkPSP->SetHoverColour(wxColour(wxT("#0000FF")));
546  m_hyperLinkPSP->SetVisitedColour(wxColour(wxT("#FF0000")));
547 
548  flexGridSizer247->Add(m_hyperLinkPSP, 0, wxALL, WXC_FROM_DIP(5));
549 
550  m_buttonOK = new wxButton(this, wxID_ANY, _("OK"), wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
551 
552  boxSizerMain->Add(m_buttonOK, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, WXC_FROM_DIP(5));
553 
554 
555  #if wxVERSION_NUMBER >= 2900
556  if(!wxPersistenceManager::Get().Find(m_notebook)){
557  wxPersistenceManager::Get().RegisterAndRestore(m_notebook);
558  } else {
559  wxPersistenceManager::Get().Restore(m_notebook);
560  }
561  #endif
562 
563  SetName(wxT("AboutFormBase"));
564  SetSize(-1,-1);
565  if (GetSizer()) {
566  GetSizer()->Fit(this);
567  }
568  if(GetParent()) {
569  CentreOnParent(wxBOTH);
570  } else {
571  CentreOnScreen(wxBOTH);
572  }
573 #if wxVERSION_NUMBER >= 2900
574  if(!wxPersistenceManager::Get().Find(this)) {
575  wxPersistenceManager::Get().RegisterAndRestore(this);
576  } else {
577  wxPersistenceManager::Get().Restore(this);
578  }
579 #endif
580  // Connect events
581  m_buttonOK->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AboutFormBase::OnOKButtonClick), NULL, this);
582 
583 }
584 
585 AboutFormBase::~AboutFormBase()
586 {
587  m_buttonOK->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(AboutFormBase::OnOKButtonClick), NULL, this);
588 
589 }
+
+ + + + diff --git a/docs/doxygen/html/_properties_form_8h_source.html b/docs/doxygen/html/_properties_form_8h_source.html index 5e1cc9e..c435aec 100644 --- a/docs/doxygen/html/_properties_form_8h_source.html +++ b/docs/doxygen/html/_properties_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/PropertiesForm.h Source File +Project/PropertiesForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
PropertiesForm.h
-
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: PropertiesForm.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_PROPERTIESFORM_BASE_CLASSES_H
8 #define _PSP_PROJECT_PROPERTIESFORM_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/dialog.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/notebook.h>
18 #include <wx/panel.h>
19 #include <wx/imaglist.h>
20 #include <wx/stattext.h>
21 #include <wx/choice.h>
22 #include <wx/arrstr.h>
23 #include <wx/button.h>
24 #include <wx/textctrl.h>
25 #include <wx/statbox.h>
26 #include <wx/checkbox.h>
27 #include <wx/statbmp.h>
28 #include <wx/grid.h>
29 #include <wx/richtext/richtextctrl.h>
30 #include <wx/hyperlink.h>
31 #if wxVERSION_NUMBER >= 2900
32 #include <wx/persist.h>
33 #include <wx/persist/toplevel.h>
34 #include <wx/persist/bookctrl.h>
35 #include <wx/persist/treebook.h>
36 #endif
37 
38 #ifdef WXC_FROM_DIP
39 #undef WXC_FROM_DIP
40 #endif
41 #if wxVERSION_NUMBER >= 3100
42 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
43 #else
44 #define WXC_FROM_DIP(x) x
45 #endif
46 
47 
48 class GeneralPropertiesFormBase : public wxDialog
49 {
50 protected:
51  wxNotebook* m_notebook;
52  wxPanel* m_panelGeneral;
53  wxStaticText* m_staticTextLanguage;
54  wxChoice* m_choiceLanguage;
55  wxStaticText* m_staticTextTheme;
56  wxChoice* m_choiceTheme;
57  wxButton* m_buttonOK;
58  wxButton* m_buttonCancel;
59 
60 protected:
61  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
62  virtual void OnButtonCancelClick(wxCommandEvent& event) { event.Skip(); }
63 
64 public:
65  wxStaticText* GetStaticTextLanguage() { return m_staticTextLanguage; }
66  wxChoice* GetChoiceLanguage() { return m_choiceLanguage; }
67  wxStaticText* GetStaticTextTheme() { return m_staticTextTheme; }
68  wxChoice* GetChoiceTheme() { return m_choiceTheme; }
69  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
70  wxNotebook* GetNotebook() { return m_notebook; }
71  wxButton* GetButtonOK() { return m_buttonOK; }
72  wxButton* GetButtonCancel() { return m_buttonCancel; }
73  GeneralPropertiesFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("General settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
74  virtual ~GeneralPropertiesFormBase();
75 };
76 
77 
78 class SimulationsSettingsFormBase : public wxDialog
79 {
80 protected:
81  wxNotebook* m_notebook;
82  wxPanel* m_panelGeneral;
83  wxStaticText* m_staticTextBasePower;
84  wxTextCtrl* m_textCtrlbasePower;
85  wxChoice* m_choiceBasePower;
86  wxCheckBox* m_checkBoxFaultAfterPF;
87  wxCheckBox* m_checkBoxSCPowerAfterPF;
88  wxPanel* m_panelPF;
89  wxStaticText* m_staticTextPFMethod;
90  wxChoice* m_choicePFMethod;
91  wxStaticText* m_staticTextAccFactor;
92  wxTextCtrl* m_textCtrlAccFactor;
93  wxStaticText* m_staticTextPFTolerance;
94  wxTextCtrl* m_textCtrlPFTolerance;
95  wxStaticText* m_staticTextPFMaxIterations;
96  wxTextCtrl* m_textCtrlPFMaxIterations;
97  wxPanel* m_panelStability;
98  wxStaticText* m_staticTextTimeStep;
99  wxTextCtrl* m_textCtrlTimeStep;
100  wxStaticText* m_staticTextSec_1;
101  wxStaticText* m_staticTextTSimTime;
102  wxTextCtrl* m_textCtrlSimTime;
103  wxStaticText* m_staticTextSec_2;
104  wxStaticText* m_staticTextFreq;
105  wxTextCtrl* m_textCtrlFreq;
106  wxStaticText* m_staticTextFreqUnit;
107  wxStaticText* m_staticTextTStabTolerance;
108  wxTextCtrl* m_textCtrlStabTolerance;
109  wxStaticText* m_staticTextTStabMaxIterations;
110  wxTextCtrl* m_textCtrlStabMaxIterations;
111  wxStaticText* m_staticTextCtrlStepRation;
112  wxTextCtrl* m_textCtrlCtrlStepRatio;
113  wxStaticText* m_staticTextPrintTime;
114  wxTextCtrl* m_textCtrlPrintTime;
115  wxStaticText* m_staticTextSec_4;
116  wxCheckBox* m_checkBoxUseCOI;
117  wxButton* m_buttonOK;
118  wxButton* m_buttonCancel;
119 
120 protected:
121  virtual void OnPFMethodChoiceSelected(wxCommandEvent& event) { event.Skip(); }
122  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
123  virtual void OnButtonCancelClick(wxCommandEvent& event) { event.Skip(); }
124 
125 public:
126  wxStaticText* GetStaticTextBasePower() { return m_staticTextBasePower; }
127  wxTextCtrl* GetTextCtrlbasePower() { return m_textCtrlbasePower; }
128  wxChoice* GetChoiceBasePower() { return m_choiceBasePower; }
129  wxCheckBox* GetCheckBoxFaultAfterPF() { return m_checkBoxFaultAfterPF; }
130  wxCheckBox* GetCheckBoxSCPowerAfterPF() { return m_checkBoxSCPowerAfterPF; }
131  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
132  wxStaticText* GetStaticTextPFMethod() { return m_staticTextPFMethod; }
133  wxChoice* GetChoicePFMethod() { return m_choicePFMethod; }
134  wxStaticText* GetStaticTextAccFactor() { return m_staticTextAccFactor; }
135  wxTextCtrl* GetTextCtrlAccFactor() { return m_textCtrlAccFactor; }
136  wxStaticText* GetStaticTextPFTolerance() { return m_staticTextPFTolerance; }
137  wxTextCtrl* GetTextCtrlPFTolerance() { return m_textCtrlPFTolerance; }
138  wxStaticText* GetStaticTextPFMaxIterations() { return m_staticTextPFMaxIterations; }
139  wxTextCtrl* GetTextCtrlPFMaxIterations() { return m_textCtrlPFMaxIterations; }
140  wxPanel* GetPanelPF() { return m_panelPF; }
141  wxStaticText* GetStaticTextTimeStep() { return m_staticTextTimeStep; }
142  wxTextCtrl* GetTextCtrlTimeStep() { return m_textCtrlTimeStep; }
143  wxStaticText* GetStaticTextSec_1() { return m_staticTextSec_1; }
144  wxStaticText* GetStaticTextTSimTime() { return m_staticTextTSimTime; }
145  wxTextCtrl* GetTextCtrlSimTime() { return m_textCtrlSimTime; }
146  wxStaticText* GetStaticTextSec_2() { return m_staticTextSec_2; }
147  wxStaticText* GetStaticTextFreq() { return m_staticTextFreq; }
148  wxTextCtrl* GetTextCtrlFreq() { return m_textCtrlFreq; }
149  wxStaticText* GetStaticTextFreqUnit() { return m_staticTextFreqUnit; }
150  wxStaticText* GetStaticTextTStabTolerance() { return m_staticTextTStabTolerance; }
151  wxTextCtrl* GetTextCtrlStabTolerance() { return m_textCtrlStabTolerance; }
152  wxStaticText* GetStaticTextTStabMaxIterations() { return m_staticTextTStabMaxIterations; }
153  wxTextCtrl* GetTextCtrlStabMaxIterations() { return m_textCtrlStabMaxIterations; }
154  wxStaticText* GetStaticTextCtrlStepRation() { return m_staticTextCtrlStepRation; }
155  wxTextCtrl* GetTextCtrlCtrlStepRatio() { return m_textCtrlCtrlStepRatio; }
156  wxStaticText* GetStaticTextPrintTime() { return m_staticTextPrintTime; }
157  wxTextCtrl* GetTextCtrlPrintTime() { return m_textCtrlPrintTime; }
158  wxStaticText* GetStaticTextSec_4() { return m_staticTextSec_4; }
159  wxCheckBox* GetCheckBoxUseCOI() { return m_checkBoxUseCOI; }
160  wxPanel* GetPanelStability() { return m_panelStability; }
161  wxNotebook* GetNotebook() { return m_notebook; }
162  wxButton* GetButtonOK() { return m_buttonOK; }
163  wxButton* GetButtonCancel() { return m_buttonCancel; }
164  SimulationsSettingsFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Simulation settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
165  virtual ~SimulationsSettingsFormBase();
166 };
167 
168 
169 class AboutFormBase : public wxDialog
170 {
171 protected:
172  wxNotebook* m_notebook;
173  wxPanel* m_panelLogo;
174  wxStaticBitmap* m_staticBitmapLogo;
175  wxPanel* m_panelCredits;
176  wxGrid* m_gridCredits;
177  wxPanel* m_panelLicense;
178  wxRichTextCtrl* m_richTextCtrlLicense;
179  wxStaticText* m_staticTextVersionLabel;
180  wxStaticText* m_staticTextVersion;
181  wxStaticText* m_staticTextHome;
182  wxHyperlinkCtrl* m_hyperLinkPSP;
183  wxButton* m_buttonOK;
184 
185 protected:
186  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
187 
188 public:
189  wxStaticBitmap* GetStaticBitmapLogo() { return m_staticBitmapLogo; }
190  wxPanel* GetPanelLogo() { return m_panelLogo; }
191  wxGrid* GetGridCredits() { return m_gridCredits; }
192  wxPanel* GetPanelCredits() { return m_panelCredits; }
193  wxRichTextCtrl* GetRichTextCtrlLicense() { return m_richTextCtrlLicense; }
194  wxPanel* GetPanelLicense() { return m_panelLicense; }
195  wxNotebook* GetNotebook() { return m_notebook; }
196  wxStaticText* GetStaticTextVersionLabel() { return m_staticTextVersionLabel; }
197  wxStaticText* GetStaticTextVersion() { return m_staticTextVersion; }
198  wxStaticText* GetStaticTextHome() { return m_staticTextHome; }
199  wxHyperlinkCtrl* GetHyperLinkPSP() { return m_hyperLinkPSP; }
200  wxButton* GetButtonOK() { return m_buttonOK; }
201  AboutFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About PSP-UFU"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
202  virtual ~AboutFormBase();
203 };
204 
205 #endif
Definition: PropertiesForm.h:78
-
Definition: PropertiesForm.h:169
-
Definition: PropertiesForm.h:48
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: PropertiesForm.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_PROPERTIESFORM_BASE_CLASSES_H
8 #define _PSP_PROJECT_PROPERTIESFORM_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/dialog.h>
14 #include <wx/iconbndl.h>
15 #include <wx/artprov.h>
16 #include <wx/sizer.h>
17 #include <wx/notebook.h>
18 #include <wx/panel.h>
19 #include <wx/imaglist.h>
20 #include <wx/stattext.h>
21 #include <wx/choice.h>
22 #include <wx/arrstr.h>
23 #include <wx/button.h>
24 #include <wx/textctrl.h>
25 #include <wx/statbox.h>
26 #include <wx/checkbox.h>
27 #include <wx/statbmp.h>
28 #include <wx/grid.h>
29 #include <wx/richtext/richtextctrl.h>
30 #include <wx/hyperlink.h>
31 #if wxVERSION_NUMBER >= 2900
32 #include <wx/persist.h>
33 #include <wx/persist/toplevel.h>
34 #include <wx/persist/bookctrl.h>
35 #include <wx/persist/treebook.h>
36 #endif
37 
38 #ifdef WXC_FROM_DIP
39 #undef WXC_FROM_DIP
40 #endif
41 #if wxVERSION_NUMBER >= 3100
42 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
43 #else
44 #define WXC_FROM_DIP(x) x
45 #endif
46 
47 
48 class GeneralPropertiesFormBase : public wxDialog
49 {
50 protected:
51  wxNotebook* m_notebook;
52  wxPanel* m_panelGeneral;
53  wxStaticText* m_staticTextLanguage;
54  wxChoice* m_choiceLanguage;
55  wxStaticText* m_staticTextTheme;
56  wxChoice* m_choiceTheme;
57  wxButton* m_buttonOK;
58  wxButton* m_buttonCancel;
59 
60 protected:
61  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
62  virtual void OnButtonCancelClick(wxCommandEvent& event) { event.Skip(); }
63 
64 public:
65  wxStaticText* GetStaticTextLanguage() { return m_staticTextLanguage; }
66  wxChoice* GetChoiceLanguage() { return m_choiceLanguage; }
67  wxStaticText* GetStaticTextTheme() { return m_staticTextTheme; }
68  wxChoice* GetChoiceTheme() { return m_choiceTheme; }
69  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
70  wxNotebook* GetNotebook() { return m_notebook; }
71  wxButton* GetButtonOK() { return m_buttonOK; }
72  wxButton* GetButtonCancel() { return m_buttonCancel; }
73  GeneralPropertiesFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("General settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
74  virtual ~GeneralPropertiesFormBase();
75 };
76 
77 
78 class SimulationsSettingsFormBase : public wxDialog
79 {
80 protected:
81  wxNotebook* m_notebook;
82  wxPanel* m_panelGeneral;
83  wxStaticText* m_staticTextBasePower;
84  wxTextCtrl* m_textCtrlbasePower;
85  wxChoice* m_choiceBasePower;
86  wxCheckBox* m_checkBoxFaultAfterPF;
87  wxCheckBox* m_checkBoxSCPowerAfterPF;
88  wxPanel* m_panelPF;
89  wxStaticText* m_staticTextPFMethod;
90  wxChoice* m_choicePFMethod;
91  wxStaticText* m_staticTextAccFactor;
92  wxTextCtrl* m_textCtrlAccFactor;
93  wxStaticText* m_staticTextPFTolerance;
94  wxTextCtrl* m_textCtrlPFTolerance;
95  wxStaticText* m_staticTextPFMaxIterations;
96  wxTextCtrl* m_textCtrlPFMaxIterations;
97  wxPanel* m_panelStability;
98  wxStaticText* m_staticTextTimeStep;
99  wxTextCtrl* m_textCtrlTimeStep;
100  wxStaticText* m_staticTextSec_1;
101  wxStaticText* m_staticTextTSimTime;
102  wxTextCtrl* m_textCtrlSimTime;
103  wxStaticText* m_staticTextSec_2;
104  wxStaticText* m_staticTextFreq;
105  wxTextCtrl* m_textCtrlFreq;
106  wxStaticText* m_staticTextFreqUnit;
107  wxStaticText* m_staticTextTStabTolerance;
108  wxTextCtrl* m_textCtrlStabTolerance;
109  wxStaticText* m_staticTextTStabMaxIterations;
110  wxTextCtrl* m_textCtrlStabMaxIterations;
111  wxStaticText* m_staticTextCtrlStepRation;
112  wxTextCtrl* m_textCtrlCtrlStepRatio;
113  wxStaticText* m_staticTextPrintTime;
114  wxTextCtrl* m_textCtrlPrintTime;
115  wxStaticText* m_staticTextSec_4;
116  wxCheckBox* m_checkBoxUseCOI;
117  wxButton* m_buttonOK;
118  wxButton* m_buttonCancel;
119 
120 protected:
121  virtual void OnPFMethodChoiceSelected(wxCommandEvent& event) { event.Skip(); }
122  virtual void OnButtonOKClick(wxCommandEvent& event) { event.Skip(); }
123  virtual void OnButtonCancelClick(wxCommandEvent& event) { event.Skip(); }
124 
125 public:
126  wxStaticText* GetStaticTextBasePower() { return m_staticTextBasePower; }
127  wxTextCtrl* GetTextCtrlbasePower() { return m_textCtrlbasePower; }
128  wxChoice* GetChoiceBasePower() { return m_choiceBasePower; }
129  wxCheckBox* GetCheckBoxFaultAfterPF() { return m_checkBoxFaultAfterPF; }
130  wxCheckBox* GetCheckBoxSCPowerAfterPF() { return m_checkBoxSCPowerAfterPF; }
131  wxPanel* GetPanelGeneral() { return m_panelGeneral; }
132  wxStaticText* GetStaticTextPFMethod() { return m_staticTextPFMethod; }
133  wxChoice* GetChoicePFMethod() { return m_choicePFMethod; }
134  wxStaticText* GetStaticTextAccFactor() { return m_staticTextAccFactor; }
135  wxTextCtrl* GetTextCtrlAccFactor() { return m_textCtrlAccFactor; }
136  wxStaticText* GetStaticTextPFTolerance() { return m_staticTextPFTolerance; }
137  wxTextCtrl* GetTextCtrlPFTolerance() { return m_textCtrlPFTolerance; }
138  wxStaticText* GetStaticTextPFMaxIterations() { return m_staticTextPFMaxIterations; }
139  wxTextCtrl* GetTextCtrlPFMaxIterations() { return m_textCtrlPFMaxIterations; }
140  wxPanel* GetPanelPF() { return m_panelPF; }
141  wxStaticText* GetStaticTextTimeStep() { return m_staticTextTimeStep; }
142  wxTextCtrl* GetTextCtrlTimeStep() { return m_textCtrlTimeStep; }
143  wxStaticText* GetStaticTextSec_1() { return m_staticTextSec_1; }
144  wxStaticText* GetStaticTextTSimTime() { return m_staticTextTSimTime; }
145  wxTextCtrl* GetTextCtrlSimTime() { return m_textCtrlSimTime; }
146  wxStaticText* GetStaticTextSec_2() { return m_staticTextSec_2; }
147  wxStaticText* GetStaticTextFreq() { return m_staticTextFreq; }
148  wxTextCtrl* GetTextCtrlFreq() { return m_textCtrlFreq; }
149  wxStaticText* GetStaticTextFreqUnit() { return m_staticTextFreqUnit; }
150  wxStaticText* GetStaticTextTStabTolerance() { return m_staticTextTStabTolerance; }
151  wxTextCtrl* GetTextCtrlStabTolerance() { return m_textCtrlStabTolerance; }
152  wxStaticText* GetStaticTextTStabMaxIterations() { return m_staticTextTStabMaxIterations; }
153  wxTextCtrl* GetTextCtrlStabMaxIterations() { return m_textCtrlStabMaxIterations; }
154  wxStaticText* GetStaticTextCtrlStepRation() { return m_staticTextCtrlStepRation; }
155  wxTextCtrl* GetTextCtrlCtrlStepRatio() { return m_textCtrlCtrlStepRatio; }
156  wxStaticText* GetStaticTextPrintTime() { return m_staticTextPrintTime; }
157  wxTextCtrl* GetTextCtrlPrintTime() { return m_textCtrlPrintTime; }
158  wxStaticText* GetStaticTextSec_4() { return m_staticTextSec_4; }
159  wxCheckBox* GetCheckBoxUseCOI() { return m_checkBoxUseCOI; }
160  wxPanel* GetPanelStability() { return m_panelStability; }
161  wxNotebook* GetNotebook() { return m_notebook; }
162  wxButton* GetButtonOK() { return m_buttonOK; }
163  wxButton* GetButtonCancel() { return m_buttonCancel; }
164  SimulationsSettingsFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Simulation settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
165  virtual ~SimulationsSettingsFormBase();
166 };
167 
168 
169 class AboutFormBase : public wxDialog
170 {
171 protected:
172  wxNotebook* m_notebook;
173  wxPanel* m_panelLogo;
174  wxStaticBitmap* m_staticBitmapLogo;
175  wxPanel* m_panelCredits;
176  wxGrid* m_gridCredits;
177  wxPanel* m_panelLicense;
178  wxRichTextCtrl* m_richTextCtrlLicense;
179  wxStaticText* m_staticTextVersionLabel;
180  wxStaticText* m_staticTextVersion;
181  wxStaticText* m_staticTextHome;
182  wxHyperlinkCtrl* m_hyperLinkPSP;
183  wxButton* m_buttonOK;
184 
185 protected:
186  virtual void OnOKButtonClick(wxCommandEvent& event) { event.Skip(); }
187 
188 public:
189  wxStaticBitmap* GetStaticBitmapLogo() { return m_staticBitmapLogo; }
190  wxPanel* GetPanelLogo() { return m_panelLogo; }
191  wxGrid* GetGridCredits() { return m_gridCredits; }
192  wxPanel* GetPanelCredits() { return m_panelCredits; }
193  wxRichTextCtrl* GetRichTextCtrlLicense() { return m_richTextCtrlLicense; }
194  wxPanel* GetPanelLicense() { return m_panelLicense; }
195  wxNotebook* GetNotebook() { return m_notebook; }
196  wxStaticText* GetStaticTextVersionLabel() { return m_staticTextVersionLabel; }
197  wxStaticText* GetStaticTextVersion() { return m_staticTextVersion; }
198  wxStaticText* GetStaticTextHome() { return m_staticTextHome; }
199  wxHyperlinkCtrl* GetHyperLinkPSP() { return m_hyperLinkPSP; }
200  wxButton* GetButtonOK() { return m_buttonOK; }
201  AboutFormBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About PSP-UFU"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(-1,-1), long style = wxDEFAULT_DIALOG_STYLE);
202  virtual ~AboutFormBase();
203 };
204 
205 #endif
+ +
+
- + diff --git a/docs/doxygen/html/_properties_form_bitmaps_8cpp_source.html b/docs/doxygen/html/_properties_form_bitmaps_8cpp_source.html new file mode 100644 index 0000000..6376d1d --- /dev/null +++ b/docs/doxygen/html/_properties_form_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/PropertiesFormBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PropertiesFormBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 52890;
25 static unsigned char xml_res_file_0[] = {
26 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,88,0,0,1,138,8,2,0,
27 0,0,95,26,168,50,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0,0,4,103,65,77,
28 65,0,0,177,143,11,252,97,5,0,0,0,9,112,72,89,115,0,0,14,195,0,0,14,195,
29 1,199,111,168,100,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,
30 0,112,97,105,110,116,46,110,101,116,32,52,46,48,46,49,55,51,110,159,99,
31 0,0,206,10,73,68,65,84,120,94,236,157,7,152,27,197,253,247,99,12,24,3,54,
32 152,222,59,9,157,80,67,239,161,5,18,146,208,33,148,208,75,32,188,127,106,
33 32,128,68,53,216,96,211,139,193,52,3,38,128,43,24,247,118,189,247,234,235,
34 189,247,94,244,126,78,51,90,214,187,146,78,39,223,233,86,210,124,159,121,
35 238,180,179,51,187,59,237,247,153,223,214,223,56,148,148,148,148,148,148,
36 194,88,10,132,193,167,238,30,25,148,148,148,44,165,30,215,216,84,195,51,
37 184,164,64,24,124,250,37,209,177,36,118,40,180,119,202,24,37,37,37,43,168,
38 190,81,142,205,159,226,100,140,210,24,105,112,80,134,81,145,255,32,108,
39 110,149,161,191,95,198,40,5,70,140,177,5,81,67,161,173,67,198,40,5,181,
40 58,58,135,198,81,75,171,163,183,87,198,40,5,169,234,27,228,216,92,28,35,
41 99,148,198,66,237,29,142,172,34,71,90,129,163,162,118,116,88,232,63,8,151,
42 39,56,126,137,31,10,12,96,165,64,74,129,48,196,180,169,108,104,28,173,76,
43 116,212,54,200,24,165,32,149,2,97,96,84,215,40,205,96,122,129,99,96,64,
44 70,110,137,252,7,225,66,103,123,19,154,154,101,140,82,96,164,64,24,98,202,
45 43,25,106,77,76,103,117,157,140,81,10,82,41,16,6,70,10,132,74,10,132,161,
46 38,5,194,144,145,2,97,96,164,64,168,164,64,24,106,82,32,12,25,41,16,6,70,
47 10,132,74,10,132,161,38,5,194,144,145,2,97,96,164,64,168,164,64,24,106,
48 82,32,12,25,41,16,6,70,10,132,74,10,132,161,38,5,194,144,145,2,97,96,164,
49 64,168,164,64,24,106,82,32,12,25,41,16,6,70,10,132,74,10,132,161,38,5,194,
50 144,145,2,97,96,164,64,168,164,64,24,106,82,32,12,25,41,16,6,70,10,132,
51 74,10,132,161,38,5,194,144,145,2,97,96,164,64,168,164,64,24,106,82,32,12,
52 25,41,16,6,70,10,132,74,10,132,161,38,5,194,144,145,2,97,96,164,64,168,
53 164,64,24,106,82,32,12,25,41,16,6,70,10,132,142,158,158,158,198,198,198,
54 134,134,134,254,112,253,254,147,2,97,136,73,129,48,100,164,64,24,24,133,
55 59,8,123,123,123,55,109,218,180,110,221,186,181,107,215,242,99,96,84,234,
56 32,216,164,64,24,98,82,32,12,25,41,16,6,70,225,14,194,214,214,214,168,168,
57 40,40,40,212,210,210,34,87,184,4,26,113,25,73,86,235,20,176,108,106,106,
58 98,177,175,175,79,166,240,44,210,136,140,5,5,5,249,249,249,252,96,251,237,
59 237,237,86,115,61,21,8,67,76,10,132,33,35,107,130,16,147,216,217,217,89,
60 87,87,87,85,85,149,155,155,203,95,12,93,87,87,151,92,237,89,56,30,36,171,
61 175,175,175,174,174,38,99,101,101,37,25,209,184,123,32,10,132,155,129,176,
62 177,177,81,174,112,170,163,163,35,51,51,51,50,50,146,52,144,140,102,43,
63 47,47,79,76,76,140,136,136,136,143,143,167,45,7,61,124,204,152,198,166,
64 153,201,40,82,242,187,162,162,162,180,180,52,38,38,134,24,226,201,43,147,
65 90,64,10,132,33,38,5,194,144,145,213,64,200,36,30,83,134,61,196,142,101,
66 101,101,49,197,103,17,247,128,69,68,60,22,85,38,221,92,160,14,94,70,71,
67 71,147,12,163,74,22,50,146,29,219,72,12,38,17,58,118,119,119,203,212,1,
68 87,184,131,144,169,77,122,122,58,237,135,104,21,25,235,68,96,81,81,81,114,
69 114,50,179,30,183,205,195,132,40,47,47,15,200,209,156,250,169,16,241,180,
70 49,192,99,179,248,127,102,82,146,128,29,145,145,62,65,2,43,120,135,10,132,
71 33,38,5,194,144,145,69,64,136,29,195,12,50,125,207,206,206,46,44,44,196,
72 226,153,79,137,225,237,53,53,53,37,37,37,193,54,126,104,150,141,31,181,
73 181,181,105,105,105,184,16,13,13,13,36,19,241,154,216,84,115,115,51,25,
74 217,56,86,215,151,147,109,163,46,117,179,204,80,251,181,59,165,53,64,77,
75 77,13,205,166,111,75,79,162,115,224,38,166,164,164,136,115,170,109,109,
76 109,52,39,156,27,214,217,7,192,204,143,216,75,106,106,234,184,52,188,94,
77 10,132,33,38,5,194,144,145,69,64,136,49,132,82,229,229,229,204,227,61,157,
78 6,19,194,238,145,24,103,0,97,63,49,110,57,57,57,248,12,141,141,141,222,
79 77,34,155,5,135,80,54,35,35,35,240,174,161,2,161,81,80,16,239,16,143,80,
80 46,251,32,218,56,54,54,150,140,113,113,113,56,248,222,59,138,94,244,170,
81 200,200,72,124,199,241,245,11,21,8,67,76,10,132,33,35,43,128,16,39,1,251,
82 230,246,252,150,39,97,208,240,11,75,75,75,161,32,4,245,125,174,207,46,192,
83 109,102,102,102,128,77,162,2,225,102,98,74,130,151,54,34,10,10,225,23,174,
84 93,187,182,172,172,76,46,251,172,174,174,174,132,132,132,146,146,18,223,
85 59,217,168,75,129,48,196,164,64,24,50,26,119,16,226,222,97,160,26,26,26,
86 228,178,207,98,150,31,19,19,51,82,167,2,225,56,226,23,226,30,232,47,57,
87 141,181,20,8,127,85,107,107,107,82,82,146,56,201,57,82,37,38,38,22,23,23,
88 243,215,15,167,158,30,195,126,43,42,42,228,114,192,165,64,24,98,82,32,12,
89 25,141,47,8,113,203,112,206,96,161,92,246,89,76,235,139,138,138,242,243,
90 243,225,25,78,130,140,245,89,226,206,154,188,188,60,239,103,83,71,81,10,
91 132,82,180,92,92,92,156,225,174,81,31,85,95,95,207,164,137,45,192,51,154,
92 95,198,142,68,226,70,172,192,159,25,23,82,32,12,49,41,16,134,140,198,23,
93 132,109,109,109,57,57,57,126,156,165,236,235,235,203,206,206,38,59,22,213,
94 191,243,156,100,129,163,126,156,156,243,79,10,132,82,117,117,117,25,25,
95 25,114,97,36,162,201,161,96,123,123,59,191,241,237,162,163,163,249,43,86,
96 249,46,54,2,68,75,75,75,199,229,4,169,2,97,136,73,129,48,100,52,142,32,
97 236,234,234,130,97,24,70,185,60,18,149,148,148,100,101,101,225,207,97,217,
98 210,210,210,252,115,48,112,10,113,40,3,99,18,21,8,135,68,131,49,127,241,
99 244,4,140,119,137,167,236,181,214,42,44,44,244,227,84,0,18,119,156,246,
100 244,244,200,229,0,74,129,48,196,164,64,24,50,26,71,16,138,123,0,253,56,
101 57,137,33,141,137,137,209,78,168,86,87,87,179,40,126,143,72,24,67,14,32,
102 48,87,10,3,10,194,161,9,66,127,159,33,104,171,22,71,118,45,142,108,35,52,
103 52,74,63,186,163,187,163,186,169,90,31,26,90,26,6,6,61,31,230,96,191,163,
104 215,159,90,235,237,237,205,203,203,243,3,66,240,15,255,189,166,166,70,46,
105 59,121,6,83,253,59,153,192,49,248,116,118,20,232,246,25,159,197,241,174,
106 182,206,182,162,234,34,125,168,109,170,21,240,230,80,87,199,212,255,18,
107 81,71,104,109,147,205,65,187,52,119,54,235,67,123,119,251,184,120,171,163,
108 35,142,220,213,211,66,67,189,125,189,45,157,45,134,54,146,235,134,64,216,
109 191,40,178,123,105,116,79,117,157,28,44,140,175,238,222,238,238,158,205,
110 130,88,165,52,238,162,117,12,146,43,134,64,136,97,28,178,138,75,162,101,
111 7,102,24,214,183,212,27,12,99,103,183,207,103,161,24,11,189,221,190,24,
112 251,132,132,132,250,250,122,185,48,18,53,55,55,199,199,199,203,5,167,117,
113 141,142,142,246,143,103,165,165,165,197,197,197,114,193,71,1,136,1,247,
114 230,215,208,255,25,17,90,85,215,53,14,46,139,237,89,20,217,147,81,48,168,
115 213,141,121,200,248,110,216,189,129,176,160,166,32,58,63,90,31,242,202,
116 243,104,87,113,58,120,205,186,24,241,122,151,204,204,60,168,64,124,94,85,
117 222,130,228,5,250,16,147,23,163,177,211,141,186,154,29,5,171,29,85,201,
118 142,238,145,185,54,52,82,70,70,134,31,244,26,58,200,188,60,26,94,46,59,
119 207,142,102,101,101,113,252,114,217,103,209,36,226,65,84,185,236,69,244,
120 227,210,228,161,98,118,182,250,104,223,169,121,67,77,166,20,167,244,15,
121 80,226,126,220,89,241,170,85,148,158,158,14,200,73,95,211,92,99,72,191,
122 33,119,67,79,239,56,120,171,163,163,254,94,71,101,186,163,42,197,225,187,
123 189,176,182,202,107,203,23,165,44,50,180,145,88,213,222,222,158,144,144,
124 182,102,93,252,218,245,241,121,249,133,162,87,55,181,54,69,230,70,174,203,
125 90,167,15,125,3,161,50,57,232,108,115,180,143,199,5,149,209,16,6,45,187,
126 34,59,161,40,65,31,90,58,134,110,217,99,90,156,153,153,43,198,230,154,245,
127 41,229,229,229,88,9,210,71,229,70,25,154,158,1,238,211,60,181,171,221,81,
128 149,238,40,140,28,170,49,175,162,219,196,197,197,249,119,146,12,199,192,
129 112,86,12,143,208,191,83,172,108,10,163,36,23,134,21,53,208,214,228,168,
130 72,118,52,253,234,153,232,181,62,123,189,190,255,111,204,217,88,223,60,
131 68,122,106,181,176,176,108,221,134,132,53,235,18,98,227,179,154,92,246,
132 60,34,55,66,159,158,80,89,231,235,217,62,111,32,76,42,77,50,180,95,74,65,
133 10,237,215,209,209,17,165,123,207,25,118,185,170,170,202,79,16,102,47,24,
134 10,121,63,59,106,243,135,234,197,55,65,50,255,64,72,13,130,112,253,69,65,
135 250,46,51,41,63,110,123,161,188,48,201,167,41,24,32,44,88,239,44,230,79,
136 142,154,92,71,203,240,89,60,129,176,165,165,101,253,250,245,178,222,157,
137 42,44,44,36,125,8,130,176,56,66,118,140,186,2,223,59,134,101,229,5,132,
138 177,177,177,178,45,215,174,165,113,133,1,98,192,255,148,246,147,33,189,
139 183,161,228,69,61,173,142,186,44,71,109,134,37,66,105,172,35,233,19,71,
140 252,7,142,156,101,142,26,211,90,115,104,200,119,12,140,236,108,202,88,11,
141 231,126,99,238,70,67,211,224,228,177,138,193,168,77,82,17,45,139,169,241,
142 19,132,12,222,234,194,161,254,159,189,208,145,187,116,88,16,178,35,232,
143 165,57,76,35,18,232,170,173,173,149,11,78,21,20,20,248,241,104,25,18,135,
144 225,147,95,209,211,229,40,207,116,228,254,52,84,192,250,114,25,185,185,
145 12,149,182,56,101,113,117,195,80,61,131,27,189,25,140,136,136,16,103,7,
146 151,164,45,49,100,41,174,242,213,61,253,13,62,141,39,197,108,138,49,108,
147 55,54,55,182,177,169,49,59,59,91,30,130,75,73,73,73,0,38,46,39,206,144,
148 126,73,226,146,236,220,108,86,25,68,69,23,21,21,85,20,102,73,16,138,144,
149 179,184,189,178,160,164,152,53,195,40,45,45,13,199,206,167,41,213,230,130,
150 157,201,201,201,250,151,6,209,102,169,169,169,122,52,250,174,146,146,146,
151 148,148,20,121,76,158,85,86,144,211,151,185,88,87,204,69,125,101,185,37,
152 67,175,245,150,202,201,201,193,43,133,199,204,233,132,214,38,173,53,212,
153 228,242,164,229,177,113,177,209,209,209,178,198,93,162,230,153,205,101,
154 23,102,27,210,175,72,91,81,90,94,90,29,156,170,171,170,24,40,88,247,107,
155 141,229,46,233,171,43,170,173,169,146,171,131,80,217,69,52,208,162,121,
156 241,11,231,68,45,126,123,227,146,153,235,150,190,182,230,167,149,185,181,
157 75,210,43,94,95,24,249,236,119,27,31,253,122,227,3,95,69,60,244,85,196,
158 75,63,165,206,75,170,250,38,177,112,250,154,21,175,174,254,233,245,181,
159 63,189,177,110,233,123,17,75,230,198,44,42,40,175,168,26,97,29,52,231,71,
160 245,127,122,150,195,62,193,97,255,77,176,133,9,189,111,29,222,153,248,85,
161 103,123,27,195,115,11,213,213,213,197,168,31,21,117,116,118,172,207,89,
162 111,24,110,149,13,149,236,5,107,32,135,165,75,152,202,252,130,124,204,160,
163 33,125,82,254,208,253,234,158,212,81,158,231,200,91,161,245,255,193,156,
164 197,181,133,57,114,157,7,97,15,225,174,31,38,17,118,98,67,12,19,122,40,
165 136,141,149,11,35,17,64,138,140,140,148,199,228,65,45,181,149,142,234,28,
166 71,206,82,173,128,61,229,67,167,214,204,50,84,26,83,201,130,178,2,226,177,
167 153,178,126,93,42,45,29,178,117,144,210,144,37,179,48,83,12,132,97,245,
168 155,161,87,235,120,208,250,12,99,123,47,77,88,154,191,41,159,214,221,176,
169 97,131,60,4,167,152,83,224,149,103,150,102,26,210,111,200,218,208,220,210,
170 220,102,18,133,97,230,219,88,85,164,213,133,163,96,163,163,190,176,167,
171 185,186,161,174,150,85,222,85,92,92,76,93,248,7,194,248,248,120,189,255,
172 39,64,232,223,93,191,128,144,170,96,50,37,15,203,131,26,107,171,6,133,71,
173 56,84,204,13,20,115,160,179,173,163,93,86,5,106,111,111,231,144,244,202,
174 175,204,55,212,100,98,65,34,35,141,173,201,26,119,137,177,87,94,94,158,
175 177,41,195,144,126,117,230,234,146,178,18,86,5,163,170,74,139,122,115,87,
176 254,218,55,74,18,250,234,139,171,42,202,228,234,32,81,105,89,89,108,118,
177 209,188,168,92,251,207,233,55,204,139,57,253,163,13,199,188,19,113,208,
178 155,81,187,189,22,179,227,203,177,219,189,20,183,141,61,110,130,45,254,
179 55,30,194,86,246,184,109,94,136,155,252,82,236,148,87,98,247,124,61,250,
180 176,217,145,39,189,21,125,201,135,177,247,125,151,244,250,242,204,5,241,
181 249,89,5,94,219,183,172,172,106,253,71,237,51,14,52,1,38,8,194,224,75,219,
182 53,205,191,189,56,105,149,115,162,56,10,202,205,205,77,28,37,197,39,198,
183 255,156,252,179,97,184,69,165,68,49,145,221,184,113,163,28,150,46,97,247,
184 171,107,170,215,101,174,51,164,79,45,76,245,98,55,122,155,171,29,117,155,
185 112,12,68,255,31,204,89,210,90,85,34,215,121,16,13,206,1,248,97,18,17,54,
186 4,43,36,23,156,106,104,104,240,207,35,100,162,16,21,21,133,199,38,15,203,
187 164,138,138,138,166,170,18,71,85,150,211,23,148,3,188,49,107,189,68,206,
188 230,50,84,218,194,228,133,81,105,81,196,155,39,28,248,226,212,128,25,132,
189 105,155,210,156,131,97,120,253,134,186,243,164,164,18,227,169,209,164,77,
190 73,204,32,168,38,188,81,121,8,206,83,163,148,144,244,126,157,26,93,56,212,
191 222,53,133,142,190,30,223,207,128,193,81,122,182,31,231,1,200,66,70,136,
192 34,151,93,32,132,61,114,217,103,81,94,154,132,130,203,101,47,162,6,74,98,
193 112,4,29,133,107,135,174,134,250,80,76,79,167,70,153,216,14,249,139,46,
194 81,243,248,214,28,73,77,147,251,83,163,67,173,24,140,162,51,20,69,12,213,
195 216,166,53,142,150,218,161,107,233,114,133,165,53,48,56,216,211,63,208,
196 222,211,159,90,221,241,242,198,202,51,62,201,218,233,213,196,237,95,78,
197 156,244,98,194,68,187,145,115,254,5,192,185,245,11,9,108,112,135,151,19,
198 119,153,158,120,229,215,121,115,147,235,42,90,122,58,123,7,122,251,229,
199 97,12,105,160,111,48,109,158,99,198,238,6,192,4,67,152,224,120,117,71,71,
200 236,91,3,61,29,140,214,209,18,51,96,70,250,168,168,179,171,115,67,206,6,
201 195,112,171,168,175,192,25,202,202,202,146,35,211,169,152,152,24,102,216,
202 126,158,26,101,109,127,239,16,48,48,143,48,99,184,83,163,16,72,156,137,
203 149,203,35,17,6,80,92,97,209,132,167,225,223,19,20,88,102,14,67,46,184,
204 147,232,158,67,165,107,174,117,228,46,25,178,255,217,11,7,91,27,68,188,
205 65,134,74,131,115,85,245,67,215,224,0,144,254,20,244,250,245,235,49,140,
206 196,47,73,117,115,106,212,185,165,225,229,207,53,66,122,21,147,172,213,
207 235,18,196,113,228,228,228,211,63,136,47,173,43,141,200,139,208,135,236,
208 178,108,204,183,220,156,89,189,29,142,154,188,161,147,197,35,148,232,115,
209 236,84,46,251,44,14,50,35,35,67,127,179,12,53,152,151,151,231,223,229,70,
210 142,65,60,143,56,140,0,118,253,38,71,219,8,94,122,84,221,92,29,83,16,163,
211 15,5,213,5,236,145,85,244,245,245,17,169,171,215,37,173,90,159,90,81,81,
212 35,142,188,190,165,126,77,230,26,125,72,40,72,8,230,107,132,125,142,234,
213 44,71,67,57,243,20,25,99,97,13,12,58,74,91,122,86,21,182,188,19,87,115,
214 243,143,5,135,191,157,182,213,40,97,207,199,0,26,79,250,40,243,223,191,
215 148,124,153,90,31,83,222,222,218,214,226,136,123,199,241,250,46,38,198,
216 88,62,188,180,141,227,203,63,58,74,35,100,205,90,82,94,174,17,182,182,182,
217 38,38,166,9,171,136,132,97,65,233,197,233,6,195,88,217,232,243,35,91,93,
218 29,206,187,198,134,57,101,197,94,152,34,251,119,179,12,94,90,102,102,166,
219 92,112,90,182,232,232,104,255,64,40,62,91,33,23,134,21,104,168,203,115,
220 20,71,58,218,221,223,114,104,168,100,64,40,174,17,82,88,160,179,206,121,
221 153,48,54,54,190,177,81,102,223,162,107,132,242,191,59,53,181,55,149,55,
222 148,235,131,184,105,71,104,113,100,247,146,136,102,66,83,179,244,204,56,
223 62,122,137,62,12,127,121,223,7,247,200,44,118,84,82,82,226,223,227,19,76,
224 118,244,87,134,219,156,239,98,16,140,25,145,192,112,81,81,17,19,49,185,
225 60,170,226,56,57,36,131,228,58,135,99,89,92,239,162,200,222,69,81,253,218,
226 115,132,84,72,103,119,167,62,116,245,12,77,145,228,234,224,211,224,208,
227 236,193,242,194,7,139,42,109,187,255,167,226,163,223,203,152,54,61,41,192,
228 252,51,135,137,47,36,28,61,115,125,194,7,215,58,94,222,206,200,24,235,135,
229 23,182,114,172,253,175,163,99,179,187,54,44,40,198,90,126,69,126,114,65,
230 178,62,52,182,72,108,212,212,246,173,220,80,188,130,16,89,77,74,98,112,
231 127,12,86,145,224,237,161,50,183,242,97,44,87,58,63,191,42,23,70,34,108,
232 96,84,84,148,230,87,224,197,70,70,70,250,119,181,8,231,82,255,112,154,79,
233 194,241,245,128,9,3,125,42,26,42,58,152,22,56,85,223,216,255,75,76,11,244,
234 201,220,212,173,153,138,134,246,134,250,246,122,125,232,246,249,161,35,
235 111,32,244,174,113,124,160,30,19,95,80,80,224,211,105,73,147,160,32,78,
236 161,198,21,184,232,223,3,245,85,85,85,129,127,231,186,144,122,160,126,28,
237 133,65,234,236,29,168,110,235,253,34,181,254,228,143,50,39,189,152,48,238,
238 252,211,194,110,182,149,159,219,254,212,111,223,202,200,24,139,7,16,248,
239 246,97,67,247,84,123,57,123,100,37,97,127,12,146,43,228,3,245,131,132,192,
240 63,80,223,220,220,28,27,27,235,135,123,64,22,64,168,1,108,211,166,77,27,
241 55,110,20,191,71,164,246,246,246,248,120,252,51,127,92,201,145,74,189,89,
242 70,138,74,199,7,247,227,236,40,8,20,119,184,240,187,171,171,139,174,227,
243 135,87,71,198,172,172,172,234,113,250,108,189,2,225,120,169,177,171,127,
244 126,70,195,205,63,22,236,243,70,138,1,66,227,27,38,216,226,254,96,155,187,
245 210,126,170,145,49,214,15,47,110,227,88,112,243,208,3,30,67,115,140,160,
246 215,248,190,107,52,221,249,202,108,61,152,125,84,69,69,5,206,28,230,20,
247 40,98,18,253,248,120,5,59,45,44,44,44,41,41,145,203,99,44,5,66,41,234,29,
248 167,208,191,79,64,136,153,11,173,158,146,146,226,31,204,154,154,154,162,
249 163,163,245,167,43,3,41,5,194,192,171,127,96,240,127,153,13,184,128,83,
250 94,77,50,64,200,10,225,20,219,231,57,246,3,7,131,238,49,137,25,187,59,82,
251 62,115,116,251,243,1,25,107,106,124,65,216,218,218,42,120,38,151,125,22,
252 206,64,82,82,18,252,171,114,126,126,220,191,45,144,209,191,187,117,252,
253 144,2,225,175,234,238,238,78,76,76,244,239,51,76,120,132,184,116,204,125,
254 252,152,61,181,57,223,50,26,152,51,0,110,165,64,24,72,53,116,246,45,201,
255 109,58,103,110,182,117,78,129,234,195,182,182,168,243,109,239,87,217,119,
256 53,50,198,226,225,197,173,29,31,28,239,40,222,224,203,213,175,32,210,248,
257 130,176,127,232,46,146,161,39,14,71,122,201,6,51,136,51,135,67,185,126,
258 253,122,63,46,21,177,187,178,178,161,167,155,252,32,168,127,82,32,220,76,
259 80,48,35,35,3,255,76,46,251,172,210,210,210,181,107,215,230,231,231,203,
260 101,159,197,156,139,238,226,199,30,71,81,10,132,129,81,125,103,223,59,113,
261 53,231,125,150,179,221,75,137,6,252,88,36,108,111,219,248,180,237,190,38,
262 251,20,35,102,44,30,94,155,230,88,243,140,163,213,159,59,59,44,174,241,
263 5,33,194,51,219,180,105,83,110,110,238,72,153,84,81,81,1,5,35,35,35,13,
264 207,20,14,43,118,148,231,212,24,221,57,232,86,10,132,70,137,179,148,35,
265 242,11,113,255,201,130,83,24,23,23,55,162,147,171,80,48,38,38,166,161,97,
266 232,169,23,25,53,30,82,32,12,128,178,235,58,207,254,52,219,178,8,20,225,
267 101,219,109,93,246,73,70,204,88,60,188,58,213,145,245,157,163,63,104,159,
268 237,241,170,113,7,33,26,112,126,50,30,249,126,237,6,203,182,113,227,70,
269 140,97,113,113,241,72,79,141,146,5,244,6,248,182,65,5,66,55,130,130,201,
270 201,201,180,71,119,183,183,215,141,211,45,58,157,175,216,142,143,143,23,
271 143,18,246,244,244,20,21,21,17,211,216,216,232,165,237,193,94,87,87,151,
272 184,158,236,199,101,228,81,151,2,225,216,105,96,208,81,220,212,253,226,
273 134,202,41,175,88,241,90,160,8,19,108,241,251,218,126,250,194,126,249,160,
274 129,49,22,15,47,77,114,124,125,153,163,62,71,214,117,40,202,10,32,68,88,
275 179,236,236,108,88,88,93,93,237,221,81,195,178,149,151,151,227,18,212,215,
276 215,99,33,17,84,99,177,172,172,204,251,5,63,118,129,49,36,49,134,81,24,
277 79,242,178,145,146,146,18,156,147,177,118,21,20,8,221,171,163,163,3,16,
278 38,37,37,9,170,49,193,17,68,164,61,160,35,139,120,129,57,57,57,249,206,
279 111,48,233,123,6,9,232,43,52,39,40,229,7,76,213,136,200,22,200,75,163,226,
280 245,199,198,198,150,150,150,250,113,107,242,88,72,129,112,140,212,221,55,
281 240,118,108,205,209,239,165,79,180,39,24,216,99,169,240,91,219,15,235,236,
282 39,246,219,39,26,73,99,229,240,234,20,71,204,155,142,174,113,187,178,30,
283 24,89,4,132,8,59,86,87,87,7,14,19,19,19,177,126,88,54,152,39,86,97,199,
284 248,93,91,91,155,153,153,137,221,195,25,208,191,24,4,158,145,0,147,136,
285 107,152,145,145,65,70,141,136,88,78,97,18,217,96,122,122,58,38,23,211,74,
286 122,86,97,72,177,144,226,213,155,17,17,17,254,61,219,230,187,20,8,61,138,
287 150,160,157,196,236,38,210,169,168,168,40,241,3,17,73,219,184,245,23,201,
288 136,160,96,74,74,138,76,173,19,8,100,114,68,207,32,141,204,48,222,82,32,
289 28,117,209,180,185,245,93,23,124,158,51,233,69,75,35,112,130,45,238,247,
290 182,121,5,246,125,131,233,6,209,23,38,56,62,56,206,81,17,239,8,153,207,
291 72,121,150,117,64,40,4,165,196,189,160,210,156,233,4,228,112,12,112,33,
292 220,90,54,34,155,155,155,221,102,132,115,185,185,185,176,83,159,145,29,
293 225,105,12,189,80,199,41,126,203,21,99,35,5,66,159,68,11,209,192,204,122,
294 218,218,218,152,194,140,136,97,76,127,152,4,225,56,178,5,242,202,88,43,
295 73,129,112,116,213,217,55,240,99,118,227,145,239,166,27,168,99,181,48,209,
296 22,251,87,219,107,165,246,61,141,164,177,114,120,117,7,199,194,91,29,205,
297 35,252,88,107,208,202,106,32,212,11,63,1,203,134,48,107,222,207,151,26,
298 68,98,60,63,50,98,81,61,157,21,195,198,230,229,229,73,12,174,93,139,67,
299 41,87,140,141,20,8,149,20,8,71,83,13,157,125,119,45,41,154,106,201,167,
300 3,245,97,43,91,236,99,246,135,106,237,59,27,73,99,229,240,206,225,67,159,
301 23,232,13,163,110,106,101,16,142,181,240,32,179,178,178,54,110,220,8,17,
302 199,250,129,66,5,66,37,247,32,100,70,102,144,92,161,228,65,3,131,131,229,
303 45,61,151,205,203,181,230,3,130,250,176,163,109,195,76,251,141,221,246,
304 109,140,164,177,108,120,113,27,199,156,83,29,53,233,244,75,89,221,225,161,
305 112,6,33,194,236,128,192,0,24,31,5,194,112,87,127,127,255,138,152,166,159,
306 55,150,16,154,154,37,9,219,187,218,51,202,51,244,161,168,182,200,219,119,
307 63,194,94,93,125,3,159,37,215,29,246,86,154,1,57,22,12,123,216,86,124,104,
308 255,107,48,81,112,230,94,142,245,118,71,215,120,62,107,59,94,10,115,16,
309 6,76,10,132,97,173,190,190,190,204,204,204,181,235,228,199,32,227,226,226,
310 196,41,136,154,102,247,223,35,20,185,148,204,154,21,83,109,253,211,161,
311 132,35,108,255,139,180,31,23,76,239,209,126,235,96,71,209,154,161,79,10,
312 132,165,20,8,3,35,5,194,176,86,71,71,71,116,116,180,160,160,80,126,254,
313 208,199,32,43,235,43,13,32,92,159,179,190,179,171,147,85,66,94,30,175,12,
314 55,181,116,247,63,183,174,220,250,167,67,9,191,183,205,75,182,255,206,72,
315 26,203,134,151,39,59,126,188,209,250,223,81,218,66,13,14,14,118,116,119,
316 180,116,181,232,131,246,189,185,250,134,129,69,145,61,132,37,209,161,127,
317 139,236,56,74,129,48,172,85,95,95,47,1,232,18,92,76,77,77,141,76,142,52,
318 128,112,89,202,178,228,180,100,86,9,101,103,103,143,232,62,177,80,85,99,
319 87,223,29,139,139,44,254,140,4,97,107,91,204,141,182,23,242,236,251,27,
320 97,99,217,240,230,126,142,196,15,29,61,35,123,59,87,48,170,215,243,135,
321 121,187,187,187,179,178,242,214,172,139,31,10,27,210,2,240,92,121,216,74,
322 129,48,172,101,246,8,115,115,115,135,222,13,81,87,110,24,153,235,178,215,
323 181,182,183,178,74,136,100,250,239,242,135,167,58,123,7,174,154,159,191,
324 205,11,86,167,224,68,91,204,253,182,39,26,236,83,141,176,177,108,248,252,
325 60,71,93,118,176,124,77,112,11,229,5,132,133,133,133,235,214,173,147,35,
326 115,237,218,248,248,248,177,190,121,50,108,165,64,24,214,234,235,235,203,
327 202,202,210,6,91,98,98,162,143,215,8,55,109,218,196,252,84,46,132,165,138,
328 154,186,255,248,101,238,4,19,117,172,22,166,218,214,253,219,246,255,58,
329 236,65,242,137,249,215,118,118,44,185,203,209,49,182,175,17,25,95,49,232,
330 202,203,203,139,93,42,40,44,88,153,190,210,48,220,178,10,179,160,96,76,
331 76,140,24,152,66,81,81,81,250,55,182,40,141,162,20,8,195,93,189,189,189,
332 203,163,107,151,111,44,35,180,180,202,231,253,155,219,154,179,202,178,244,
333 161,168,186,72,187,110,129,194,28,132,245,29,125,23,127,153,59,209,242,
334 215,5,247,179,45,253,198,126,113,175,125,107,35,111,172,24,38,56,230,156,
335 226,200,255,41,228,239,139,169,172,172,204,201,201,169,169,169,169,117,
336 170,178,170,114,117,230,106,3,8,115,75,114,171,171,171,147,147,147,37,3,
337 157,138,28,249,151,28,148,124,148,2,161,210,80,15,88,24,53,72,208,158,35,
338 28,28,28,28,24,28,208,7,195,197,137,112,6,97,103,239,192,159,191,201,183,
339 254,221,49,211,108,171,151,218,207,26,8,138,27,68,95,156,232,248,242,34,
340 71,83,113,56,60,38,88,234,148,92,240,122,106,148,81,166,63,53,154,148,148,
341 164,46,204,143,145,20,8,149,100,15,32,248,254,102,153,176,5,97,115,87,255,
342 237,139,138,44,254,18,237,173,108,177,167,217,62,141,177,31,109,228,141,
343 37,67,153,125,143,232,239,158,29,232,179,226,219,7,199,66,6,16,246,245,
344 245,37,22,38,226,20,234,67,93,243,208,201,97,86,149,149,213,172,94,151,
345 68,88,179,49,112,159,107,15,67,41,16,42,41,16,250,42,220,149,167,86,149,
346 77,122,201,234,119,199,92,106,155,93,104,223,39,40,222,163,29,105,63,238,
347 84,219,103,123,189,150,48,47,173,94,214,114,168,203,0,194,193,193,193,238,
348 158,238,142,174,14,125,208,61,62,225,88,28,217,75,88,18,163,30,88,26,67,
349 41,16,42,41,16,250,164,222,254,193,183,98,170,39,90,251,30,209,73,182,168,
350 171,108,175,183,216,119,48,240,198,130,161,195,190,221,44,219,13,83,108,
351 235,196,13,71,187,189,158,188,166,168,53,28,158,14,48,128,208,187,124,121,
352 160,126,96,96,0,223,81,72,124,195,200,15,137,141,132,237,243,193,10,132,
353 74,10,132,195,171,111,96,240,189,248,154,237,173,253,125,121,160,242,130,
354 237,142,206,96,248,196,124,166,253,224,219,109,207,110,103,139,212,31,255,
355 9,31,100,102,215,201,79,220,133,176,70,29,132,218,183,81,81,113,113,177,
356 31,215,17,161,96,121,121,57,217,139,138,138,44,242,145,212,0,75,129,80,
357 73,129,112,120,101,212,118,30,48,43,85,111,181,173,22,182,181,69,125,102,
358 191,162,203,190,173,1,57,86,11,253,246,173,190,178,95,122,184,237,199,9,
359 182,56,67,17,112,13,207,255,60,167,187,127,52,236,144,133,53,234,32,44,
360 41,41,129,133,221,221,221,93,93,93,89,89,89,13,13,13,114,133,207,34,99,
361 118,118,118,91,91,91,101,101,229,88,127,2,215,63,225,173,82,64,33,126,203,
362 216,17,106,232,44,180,243,139,81,230,247,18,88,26,132,29,29,29,5,46,209,
363 117,104,45,185,98,36,98,130,195,44,137,153,78,120,222,220,225,139,20,8,
364 189,171,181,167,255,226,175,114,13,86,219,58,1,162,28,100,91,188,220,126,
365 154,245,47,10,214,219,119,122,213,126,235,14,182,13,134,34,104,1,22,62,
366 186,162,180,167,63,148,207,144,142,58,8,177,111,108,176,165,165,133,33,
367 153,146,146,130,197,171,169,169,137,142,142,142,140,140,196,238,53,54,54,
368 38,37,37,49,96,89,149,150,150,6,50,49,167,17,17,17,171,87,175,214,44,106,
369 103,103,39,238,32,132,128,130,21,21,21,102,78,140,187,0,60,197,73,112,42,
370 35,35,195,191,251,134,202,202,202,98,99,99,19,19,19,235,235,141,23,164,
371 45,13,66,90,5,151,159,214,69,52,36,19,31,63,206,128,179,5,58,10,173,75,
372 85,250,125,2,125,188,196,1,211,120,148,29,21,22,22,250,215,252,76,244,196,
373 22,16,163,69,198,234,164,64,232,69,237,189,3,247,44,41,50,216,107,75,133,
374 83,108,159,71,217,143,181,248,99,18,28,222,106,251,41,23,218,222,51,59,
375 130,134,176,211,171,73,223,103,53,14,132,46,10,71,29,132,88,6,8,199,144,
376 4,102,201,201,201,140,113,224,199,223,230,230,230,244,244,116,160,200,95,
377 232,8,0,202,203,203,161,29,49,237,237,237,169,169,169,24,70,177,133,254,
378 254,126,232,136,133,204,204,204,36,210,154,32,172,173,149,111,157,165,188,
379 24,31,108,99,181,83,226,99,233,148,23,94,136,178,19,195,15,86,145,69,239,
380 62,82,33,44,98,81,153,31,24,202,104,117,16,2,63,113,196,20,30,183,157,223,
381 113,113,113,76,103,192,27,69,162,237,227,227,227,137,167,165,233,4,20,62,
382 38,38,134,181,148,83,108,1,137,194,211,240,164,9,186,75,193,244,90,102,
383 115,52,167,104,102,255,138,192,70,200,142,214,172,89,227,150,94,10,132,
384 158,68,215,251,40,177,118,135,151,173,123,105,240,34,219,187,229,246,61,
385 172,239,11,206,181,95,177,167,109,249,176,20,20,225,168,247,210,43,91,67,
386 246,74,213,168,131,144,173,225,226,96,27,97,67,94,94,30,147,126,44,6,118,
387 3,99,8,237,192,30,145,216,64,64,200,152,197,128,96,84,49,155,107,215,174,
388 213,64,136,136,199,65,36,49,46,163,53,65,136,51,231,124,207,113,42,176,
389 199,37,192,236,243,59,59,59,27,79,151,34,243,23,194,177,72,74,76,37,94,
390 35,200,32,1,201,228,38,156,167,70,153,10,80,15,36,144,81,46,89,29,132,235,
391 215,175,223,232,212,134,13,27,4,225,105,84,168,70,177,27,26,26,168,145,
392 214,214,86,166,0,76,100,48,247,84,4,29,130,233,0,205,172,191,228,75,27,
393 211,87,168,23,11,54,176,119,9,16,82,70,250,49,109,15,254,137,161,248,20,
394 83,76,118,40,44,164,39,1,156,163,151,83,106,170,133,181,44,234,11,203,111,
395 102,124,204,21,228,242,230,42,175,118,148,86,14,133,46,159,31,229,10,19,
396 16,102,213,118,254,238,157,116,131,153,182,72,216,218,22,115,189,253,197,
397 58,107,127,98,30,66,23,217,247,254,167,237,191,91,217,98,13,199,239,61,
398 92,54,47,183,165,59,52,239,96,116,114,208,87,16,118,247,200,177,89,246,
399 171,61,55,10,176,97,223,49,11,216,1,44,33,246,16,30,8,164,193,3,126,48,
400 240,177,129,2,132,152,11,76,10,38,2,72,104,14,3,107,177,39,100,39,198,143,
401 75,140,1,16,120,3,219,206,249,124,11,8,224,248,193,54,128,160,224,120,195,
402 212,0,9,40,69,110,110,46,228,99,66,64,49,41,8,102,202,224,224,146,11,75,
403 104,246,122,131,198,35,20,119,70,137,115,217,148,60,33,33,129,114,82,120,
404 156,98,90,23,200,81,120,168,64,15,16,83,6,226,197,70,168,29,0,73,221,233,
405 209,24,44,2,123,98,90,71,73,113,7,105,102,74,65,97,41,81,84,84,20,117,66,
406 121,169,22,166,8,204,12,232,1,84,5,105,68,231,232,232,248,213,191,163,54,
407 216,130,127,103,86,221,42,28,64,216,221,55,112,225,23,57,6,3,109,145,176,
408 189,109,227,75,246,219,45,254,30,109,40,248,189,253,130,223,219,230,77,
409 28,33,5,69,120,124,101,89,127,176,205,92,125,209,136,64,232,139,160,2,198,
410 29,134,33,120,134,197,3,126,88,9,246,130,101,0,111,24,82,113,145,5,11,128,
411 1,33,158,148,88,9,18,139,45,96,99,201,66,36,105,152,94,139,72,75,9,243,
412 37,142,150,67,229,248,41,17,38,8,22,80,112,1,66,129,0,98,4,35,49,131,148,
413 69,92,23,211,152,71,205,240,151,188,102,16,182,180,58,178,139,29,153,133,
414 142,202,186,161,243,64,91,46,255,65,216,220,38,131,230,151,136,35,166,120,
415 72,52,30,5,163,252,76,10,152,233,0,66,48,64,187,98,145,89,69,26,106,132,
416 90,64,144,67,3,33,120,0,18,84,141,161,228,65,33,131,71,72,1,5,248,105,254,
417 216,216,88,234,68,80,144,25,0,63,168,10,90,154,254,13,245,41,50,145,114,
418 43,14,7,147,68,106,82,244,131,81,81,200,131,144,190,50,43,166,122,107,75,
419 62,53,56,197,182,126,174,253,202,30,107,127,98,190,221,190,221,147,182,
420 7,57,84,195,193,251,30,14,156,149,154,86,19,130,239,82,97,216,34,185,48,
421 26,194,178,9,35,137,132,149,19,49,252,213,36,34,157,201,55,91,43,98,144,
422 22,41,151,45,38,64,8,234,176,57,152,119,126,99,220,240,16,64,29,134,8,79,
423 23,16,10,4,0,66,184,128,193,4,16,224,3,231,129,92,90,161,176,153,208,148,
424 196,218,12,64,19,73,112,4,9,163,85,1,254,131,208,44,138,77,73,48,235,224,
425 29,67,79,225,241,129,68,12,139,130,127,160,130,120,225,14,83,102,208,200,
426 90,106,71,248,127,240,3,40,34,34,41,63,105,196,150,131,69,148,14,239,86,
427 248,118,176,60,51,51,83,76,2,232,1,241,241,241,148,136,154,161,225,169,
428 1,138,76,98,166,117,98,42,68,145,245,32,164,222,208,40,246,242,144,7,97,
429 86,109,231,33,179,173,248,188,196,126,182,159,62,177,255,185,223,62,209,
430 0,30,235,132,1,251,86,169,246,195,110,176,189,184,181,45,198,112,240,35,
431 10,19,108,241,15,254,92,210,19,114,79,83,140,58,8,195,65,88,57,32,39,4,
432 11,49,101,205,205,205,252,102,222,207,44,159,223,136,72,140,18,118,146,
433 25,127,69,69,5,54,10,39,129,120,185,9,231,109,131,100,97,213,40,186,4,158,
434 52,154,32,132,91,56,64,136,178,97,229,41,167,136,1,114,16,142,223,252,37,
435 18,137,130,241,87,172,229,7,145,196,240,151,69,178,35,129,198,224,18,165,
436 142,140,140,100,238,3,246,152,206,192,123,252,66,126,196,197,197,225,41,
437 226,23,26,64,8,237,72,207,20,9,143,16,100,138,141,80,9,160,145,100,98,113,
438 84,20,218,32,236,233,31,124,120,89,137,5,95,40,122,166,109,78,156,253,40,
439 43,223,26,211,109,223,246,77,251,13,7,219,22,25,142,220,191,176,253,203,
440 137,63,102,53,202,86,9,21,41,16,134,131,70,19,132,74,8,222,195,117,33,65,
441 119,17,195,95,22,133,136,212,254,138,85,98,237,80,126,167,134,18,233,22,
442 183,92,161,13,194,212,234,142,41,175,88,235,78,209,9,182,184,83,108,159,
443 91,249,19,243,224,185,201,62,229,33,251,163,219,218,162,12,7,191,37,225,
444 192,89,169,117,29,86,188,106,229,183,20,8,195,65,10,132,97,161,16,6,97,
445 67,103,223,153,159,102,27,204,241,248,134,237,108,17,183,216,158,47,179,
446 239,97,96,143,117,66,159,125,226,82,251,89,167,218,62,51,28,249,150,7,252,
447 242,39,86,149,133,210,35,246,10,132,225,32,5,194,176,80,8,131,208,190,190,
448 194,82,247,200,76,178,69,61,107,187,199,202,239,209,238,179,111,253,156,
449 237,174,93,109,171,124,124,76,112,164,225,128,55,83,179,66,232,29,164,91,
450 8,194,126,231,109,240,237,186,79,213,247,246,246,102,103,103,111,216,176,
451 65,92,39,99,237,250,245,235,51,51,51,251,156,175,37,75,78,78,142,136,136,
452 16,119,81,144,184,173,173,173,160,160,128,44,34,175,210,24,73,129,48,44,
453 20,170,32,172,104,237,57,254,131,12,131,33,30,199,176,179,109,141,221,118,
454 7,164,49,176,199,34,97,208,62,33,199,126,224,101,182,89,254,61,32,225,123,
455 120,110,109,121,200,60,74,177,37,32,4,96,133,133,133,113,113,113,218,29,
456 0,168,166,166,166,184,184,184,177,177,49,49,49,177,179,179,147,4,93,93,
457 93,169,169,169,21,21,21,37,37,37,112,177,163,163,35,61,61,157,72,32,154,
458 155,155,155,148,148,164,191,97,2,64,18,47,238,183,144,81,206,72,254,18,
459 35,126,4,94,148,212,176,107,98,40,130,136,228,104,41,41,152,31,186,228,
460 227,188,17,68,44,178,138,69,113,167,136,51,211,184,105,139,64,88,95,95,
461 175,191,201,7,177,200,212,134,150,22,165,205,203,203,203,200,200,16,38,
462 152,72,86,177,72,60,245,66,147,231,228,228,136,186,80,26,107,133,42,8,191,
463 74,171,223,206,50,159,27,60,220,246,195,15,246,243,7,172,122,107,76,183,
464 125,219,79,108,127,62,218,54,127,140,28,65,125,216,253,245,228,252,134,
465 16,113,10,183,4,132,152,251,242,242,114,12,93,107,107,171,140,114,190,66,
466 83,60,41,40,104,135,169,196,108,2,66,208,136,255,7,63,200,69,22,86,145,
467 11,223,81,216,76,145,23,4,194,75,214,138,231,13,68,36,155,34,146,52,152,
468 211,170,170,170,192,179,16,127,23,168,235,203,200,145,80,58,142,19,204,
469 99,237,249,139,9,202,114,190,68,134,2,66,119,220,92,106,134,226,112,192,
470 196,147,120,124,89,232,39,8,105,60,138,29,25,25,73,163,202,40,231,3,3,81,
471 81,81,52,39,5,19,51,29,154,135,54,142,143,143,103,85,90,90,26,181,192,100,
472 71,52,91,126,126,62,44,244,187,135,89,68,148,133,18,81,27,114,217,25,67,
473 205,208,161,69,119,228,7,21,34,186,59,173,14,141,196,162,126,149,51,223,
474 216,42,36,65,56,48,56,120,150,101,174,14,238,101,251,37,210,126,92,191,
475 85,223,32,218,108,223,241,118,219,179,59,110,193,99,130,35,13,247,44,249,
476 245,125,96,65,173,45,1,161,24,245,88,66,61,36,216,26,46,4,246,1,199,64,
477 88,134,218,218,218,132,132,4,225,84,16,143,191,72,26,225,45,8,255,65,131,
478 4,20,1,141,36,192,150,110,220,184,81,68,146,18,115,138,201,197,22,1,24,
479 97,121,2,38,14,27,179,47,206,244,202,40,103,25,41,53,199,3,224,41,29,30,
480 17,71,46,158,169,192,57,102,21,139,20,28,94,82,28,76,19,9,32,162,204,60,
481 30,242,19,132,20,131,26,103,22,0,213,101,148,243,217,17,34,105,120,218,
482 143,150,22,147,20,26,9,46,138,199,42,169,41,22,105,39,18,144,152,150,163,
483 252,164,23,217,153,86,80,23,172,210,79,106,168,35,226,73,3,51,200,43,34,
484 45,34,42,129,246,214,159,184,160,105,57,120,218,94,188,76,142,38,7,255,
485 180,180,152,25,80,100,18,51,27,162,44,84,5,201,136,39,65,0,88,24,146,32,
486 92,146,219,100,48,190,227,18,182,182,197,156,105,155,99,217,27,68,123,237,
487 91,167,217,15,251,163,237,157,0,56,130,250,128,83,152,89,27,10,207,215,
488 51,198,145,92,24,185,220,130,80,120,132,120,117,218,216,103,132,18,47,224,
489 135,197,128,16,164,33,1,6,86,188,163,3,219,66,50,108,14,44,193,146,176,
490 217,149,43,87,178,72,228,248,130,144,99,64,88,51,61,8,41,2,252,195,48,98,
491 226,196,105,97,142,159,178,20,21,21,81,46,14,18,192,99,216,57,96,12,32,
492 71,206,42,34,69,94,81,99,192,21,145,94,20,28,197,198,198,226,60,128,18,
493 168,49,234,44,240,223,35,164,186,57,116,104,39,163,92,175,88,35,158,82,
494 137,119,1,240,155,34,209,72,172,74,73,73,161,0,44,82,108,138,135,93,166,
495 19,64,5,173,72,32,132,74,33,35,205,79,75,139,72,242,86,87,87,211,45,248,
496 17,24,231,201,71,81,3,180,37,199,79,185,52,16,82,22,14,158,162,137,57,29,
497 109,198,111,34,41,56,63,136,209,202,37,124,98,58,16,200,164,117,69,36,41,
498 73,64,21,81,129,218,252,128,178,3,78,106,146,58,244,187,6,66,15,132,245,
499 157,125,199,190,111,137,171,131,55,218,94,40,183,239,110,192,143,69,66,
500 155,125,251,231,237,119,237,109,91,102,56,230,0,132,137,47,36,60,179,166,
501 188,55,248,63,75,193,176,69,114,97,228,210,131,80,216,116,236,6,246,1,108,
502 224,72,0,3,172,40,118,64,24,73,204,2,182,2,123,66,74,178,176,200,218,184,
503 184,56,44,128,200,75,74,44,140,240,52,0,3,145,136,93,96,136,48,35,88,143,
504 156,156,28,108,133,72,28,72,121,7,33,135,132,121,23,30,48,197,164,248,84,
505 2,135,138,81,114,11,66,42,129,2,146,61,61,61,29,3,40,226,173,8,66,33,26,
506 216,45,8,203,202,202,168,5,126,96,127,169,32,202,67,97,40,51,173,72,25,
507 200,226,9,132,84,16,185,72,64,207,19,109,105,89,16,34,142,92,204,104,52,
508 16,10,176,17,73,89,104,87,90,148,82,176,72,183,224,47,61,152,57,14,224,
509 228,183,40,81,116,116,52,37,213,152,71,135,136,143,143,167,86,233,61,98,
510 38,129,168,40,81,75,212,36,227,65,68,142,84,161,7,194,143,18,107,183,27,
511 239,15,208,79,180,197,222,107,123,178,195,190,157,1,63,86,8,226,49,193,
512 191,219,166,111,107,139,54,28,118,192,194,113,239,103,148,183,140,231,133,
513 159,81,145,147,131,254,131,80,216,67,113,90,139,97,136,173,64,24,141,245,
514 235,215,51,156,69,36,191,5,255,24,227,107,215,174,101,17,70,10,115,135,
515 233,39,1,134,69,108,77,152,208,200,200,72,76,7,219,196,98,104,190,199,198,
516 141,27,177,45,24,79,17,169,101,9,140,12,32,196,184,113,36,88,57,72,6,209,
517 43,43,43,41,178,152,241,115,180,136,31,216,67,144,193,95,10,130,229,231,
518 152,157,89,135,64,136,241,36,23,70,143,181,20,71,196,3,66,34,131,0,132,
519 226,76,32,13,64,203,81,41,192,128,234,160,117,89,69,163,82,6,168,0,18,0,
520 27,29,139,181,164,161,192,162,82,144,72,47,106,129,223,34,146,223,36,166,
521 46,196,213,99,17,105,29,209,210,94,64,72,209,56,114,230,65,76,127,40,59,
522 49,52,57,179,54,74,68,171,211,69,88,164,199,139,83,7,136,196,130,121,164,
523 39,129,152,10,0,48,202,78,36,189,92,115,40,71,170,16,3,97,107,119,255,37,
524 227,253,233,221,157,109,107,94,183,223,108,205,55,136,114,84,11,236,231,
525 30,97,251,222,112,204,1,14,19,108,241,159,167,212,5,218,55,25,109,13,97,
526 112,52,110,101,96,56,99,247,183,208,130,99,97,48,146,126,219,129,177,147,
527 0,33,101,196,136,81,70,126,99,217,112,120,32,25,191,19,18,18,64,29,197,
528 199,226,49,197,231,55,127,197,5,35,76,19,96,211,159,24,3,1,96,130,120,224,
529 66,97,41,50,22,85,176,131,148,196,243,3,147,171,153,205,81,209,22,129,144,
530 242,96,241,57,68,74,5,168,177,251,148,13,71,30,107,78,129,113,110,112,128,
531 248,75,36,86,24,96,176,74,160,142,50,80,114,225,242,203,109,57,65,40,222,
532 70,70,57,97,30,211,40,129,79,166,63,73,73,73,2,132,64,148,186,147,25,44,
533 32,3,8,233,1,96,143,66,209,3,24,60,180,31,253,3,170,9,216,115,228,212,21,
534 85,193,4,2,40,130,58,210,83,57,90,37,144,128,69,26,94,204,21,72,76,164,
535 0,33,187,160,99,41,16,10,101,214,118,238,49,35,217,96,118,3,25,118,181,
536 173,90,96,63,175,219,190,173,129,64,86,8,141,246,169,247,217,158,216,197,
537 182,218,112,204,227,18,78,250,40,51,216,79,142,58,57,56,10,32,68,152,62,
538 49,168,253,22,150,4,174,88,208,37,224,168,48,92,148,14,115,7,210,248,129,
539 89,131,11,28,42,70,146,72,196,34,171,48,101,192,66,172,34,35,107,1,36,214,
540 73,243,136,132,47,36,78,43,146,134,69,12,41,107,197,118,176,129,192,69,
541 176,86,164,31,21,109,17,8,41,45,226,7,199,36,108,52,139,28,183,40,18,127,
542 249,45,22,137,23,139,34,189,182,86,252,22,2,132,144,149,18,106,217,69,188,
543 115,27,114,155,67,251,219,178,158,52,186,162,109,152,242,208,180,116,2,
544 209,150,204,98,64,35,222,27,176,167,57,65,56,163,136,162,145,18,23,16,4,
545 34,26,24,192,179,138,223,164,212,186,53,32,100,222,64,46,102,18,84,41,139,
546 52,57,127,217,5,41,163,163,163,169,100,18,147,87,164,247,93,33,6,194,15,
547 18,106,241,54,12,54,55,48,97,130,45,238,183,182,31,226,236,71,89,240,49,
548 9,14,41,213,126,248,169,182,207,198,250,49,65,223,195,4,123,124,92,197,
549 175,207,146,7,163,70,17,132,33,47,12,32,252,195,214,201,101,191,132,181,
550 199,145,208,28,196,192,104,139,64,168,73,144,64,46,248,43,44,53,83,3,185,
551 16,36,162,225,193,18,127,169,1,88,5,164,1,185,152,224,208,156,176,16,4,
552 34,98,72,0,195,248,13,204,88,69,94,210,224,249,49,217,17,155,66,194,35,
553 172,116,126,167,144,109,210,159,196,57,1,182,195,84,136,72,42,153,72,232,
554 40,51,248,172,80,2,33,179,170,83,62,206,52,24,220,128,133,243,108,31,36,
555 216,143,176,224,123,180,155,237,59,126,96,255,219,33,182,133,134,3,30,247,
556 112,231,226,34,43,205,93,71,44,5,194,0,11,139,135,221,195,144,202,229,128,
557 104,116,64,56,42,26,242,245,130,118,196,192,45,61,210,252,19,32,204,211,
558 61,79,50,138,10,37,16,70,149,182,77,28,143,119,170,225,11,222,102,127,174,
559 194,146,55,136,86,218,119,187,202,246,250,100,91,132,225,152,173,16,14,
560 127,59,45,168,111,153,81,32,12,7,89,8,132,74,104,140,166,2,33,3,194,129,
561 65,199,109,11,11,13,166,54,0,97,146,45,242,30,219,83,120,93,6,2,89,36,212,
562 216,167,37,217,127,151,104,63,34,192,97,189,253,196,231,237,119,121,255,
563 156,239,148,87,146,22,229,6,113,223,11,0,8,153,70,27,6,62,179,97,225,18,
564 17,207,15,33,34,197,34,233,69,50,165,209,146,2,97,88,40,100,64,184,169,
565 177,123,191,55,3,253,1,222,93,109,171,94,183,255,163,213,190,189,1,63,225,
566 28,6,236,91,69,218,143,187,214,246,10,83,4,67,117,153,195,191,127,41,237,
567 238,11,86,219,61,214,32,236,238,238,102,251,157,186,123,0,219,156,143,76,
568 228,58,223,188,209,213,213,197,239,252,252,252,196,196,68,146,53,59,63,
569 111,27,116,151,144,172,47,5,194,176,80,200,128,240,139,212,250,29,2,251,
570 233,65,40,248,163,253,188,94,171,190,71,123,92,194,160,125,194,91,246,107,
571 247,178,45,219,202,183,183,213,252,254,195,140,250,206,128,94,242,25,69,
572 57,57,56,86,32,236,112,222,88,30,31,31,175,191,55,164,164,164,164,162,162,
573 130,24,241,52,90,79,79,79,107,107,43,105,160,32,241,13,13,13,85,206,123,
574 245,101,106,165,209,208,88,129,16,231,189,182,182,150,14,164,191,197,81,
575 68,150,149,149,213,212,212,224,224,51,21,162,93,73,67,147,211,222,213,213,
576 213,172,85,13,60,22,10,13,16,246,15,14,254,223,138,210,9,118,163,157,29,
577 187,112,128,109,201,247,182,11,44,120,107,204,120,133,126,251,86,9,246,
578 35,47,181,189,229,35,2,69,216,230,133,132,224,125,221,154,147,131,99,8,
579 66,140,33,206,159,30,132,197,197,197,245,245,245,88,72,113,75,57,38,177,
580 188,188,156,72,236,39,241,233,233,233,252,149,73,131,68,152,247,184,205,
581 63,193,1,221,41,93,84,84,84,102,102,38,107,169,225,232,232,104,210,0,123,
582 74,23,27,27,11,236,101,210,128,104,172,64,136,243,46,30,36,79,78,78,214,
583 30,15,192,211,207,201,201,161,156,52,60,127,197,195,34,176,48,43,43,139,
584 148,162,177,183,240,214,91,75,9,246,20,22,22,210,162,218,253,47,116,110,
585 202,72,36,18,159,28,3,255,69,69,69,52,63,221,157,191,116,136,177,184,0,
586 16,26,32,108,238,10,220,115,244,19,108,113,151,219,102,37,217,127,103,32,
587 65,56,135,74,251,110,143,219,254,181,191,109,169,161,174,124,9,175,70,84,
588 202,86,12,54,57,57,56,86,32,100,212,99,28,176,132,122,16,50,84,147,146,
589 146,196,83,88,237,206,87,210,96,46,132,71,65,122,108,72,112,121,11,28,45,
590 62,238,198,141,27,245,32,196,232,229,231,231,83,22,202,69,217,197,179,227,
591 24,127,113,107,61,70,18,52,200,164,1,209,88,129,16,170,81,84,154,144,249,
592 139,118,70,187,211,249,90,88,12,61,245,2,6,104,126,220,124,98,104,114,24,
593 73,74,236,181,198,140,96,23,109,204,84,128,70,205,203,203,3,243,162,239,
594 138,57,29,142,111,66,66,2,253,128,226,147,134,170,200,200,200,160,30,40,
595 62,53,163,247,161,71,75,161,1,194,178,150,158,3,103,5,226,2,33,20,60,219,
596 246,113,153,125,207,65,19,12,194,51,224,19,167,218,15,63,209,246,229,214,
597 182,24,67,93,249,24,206,250,52,91,182,98,176,105,76,65,136,204,32,196,86,
598 136,7,165,48,11,128,1,179,137,231,64,140,92,29,108,130,229,152,184,248,
599 248,120,61,8,197,37,79,108,32,150,31,139,71,1,177,147,226,29,35,88,66,126,
600 232,47,154,6,64,99,5,66,204,46,38,30,28,26,62,213,132,104,114,252,66,106,
601 7,36,128,64,230,62,84,19,189,129,134,15,222,198,118,43,10,5,249,112,121,
602 41,160,126,18,71,195,227,4,211,197,1,36,94,32,109,79,135,160,151,16,73,
603 231,208,15,137,209,82,104,128,112,99,73,219,86,99,127,94,116,71,219,134,
604 91,108,207,55,218,167,24,96,16,158,1,4,22,217,247,121,217,126,219,206,182,
605 181,134,138,26,81,216,250,133,132,186,142,160,188,76,232,228,96,32,64,40,
606 248,199,95,126,131,7,204,99,106,106,42,107,49,17,194,169,144,25,130,74,
607 20,167,186,186,26,139,135,157,215,131,48,42,42,10,248,97,27,147,147,147,
608 249,11,23,73,134,25,12,176,35,168,105,12,111,150,161,240,120,60,76,106,
609 48,247,50,202,73,65,156,33,218,152,10,194,238,99,157,225,63,200,236,113,
610 189,165,44,148,68,25,233,226,244,0,186,178,140,114,70,194,69,237,114,55,
611 127,89,75,159,16,83,63,126,139,248,209,85,104,128,240,169,213,101,6,243,
612 58,234,97,7,219,134,55,108,55,182,91,242,61,218,227,18,230,219,47,58,222,
613 246,245,168,188,170,102,126,134,229,222,144,233,139,198,26,132,204,149,
614 107,107,107,113,3,196,164,25,22,98,7,176,27,216,4,49,39,198,144,194,197,
615 177,48,11,1,16,197,137,137,137,1,123,191,252,242,11,204,211,236,60,191,
616 197,107,70,40,38,213,43,78,147,194,11,10,62,46,37,29,43,16,82,66,124,62,
617 90,55,58,58,26,212,81,54,196,15,42,133,210,50,187,97,145,42,160,129,105,
618 236,80,5,33,162,115,211,204,120,198,148,87,196,136,9,32,157,155,223,68,
619 82,124,230,10,244,9,45,193,88,40,4,64,72,237,156,248,225,216,190,80,102,
620 138,109,221,199,246,191,244,219,39,26,96,16,134,1,71,176,220,190,199,237,
621 182,255,78,178,69,25,106,201,239,112,239,210,160,252,84,175,147,131,99,
622 8,66,36,198,190,32,34,60,16,49,44,58,87,14,105,76,141,195,88,11,139,135,
623 240,249,48,65,20,4,52,82,52,102,252,105,105,105,120,68,248,69,216,192,28,
624 231,39,153,48,140,56,9,50,91,96,53,86,32,196,191,201,203,203,203,206,206,
625 198,169,167,240,0,15,191,24,55,136,137,0,70,153,72,10,79,201,97,33,130,
626 19,250,86,15,13,81,34,104,71,217,233,220,154,255,135,168,25,166,63,76,17,
627 248,77,37,136,27,133,198,186,248,33,0,194,138,214,158,109,95,28,195,23,
628 202,108,103,139,124,192,246,248,66,251,185,139,236,231,140,105,88,108,63,
629 59,215,126,160,149,239,68,109,181,239,240,133,253,114,28,193,209,253,150,
630 239,233,159,100,181,247,6,223,48,15,0,8,53,1,12,249,43,228,132,149,195,
631 219,161,128,101,206,143,82,17,195,236,95,179,75,194,9,166,158,197,60,32,
632 240,26,195,83,163,20,27,163,143,137,135,1,120,129,20,152,66,18,131,192,
633 0,53,66,60,63,80,232,81,16,81,64,60,221,164,164,36,80,71,195,211,210,21,
634 206,79,86,65,71,154,92,92,12,96,30,180,110,221,58,145,102,76,47,14,135,
635 0,8,127,202,107,26,211,55,171,77,180,197,78,177,173,159,106,91,55,214,225,
636 47,182,153,101,246,61,44,11,194,108,251,65,151,217,102,239,96,219,96,168,
637 159,45,15,71,190,155,94,218,28,124,39,126,2,9,194,144,23,70,143,217,63,
638 214,79,46,91,70,99,8,66,189,160,2,146,11,97,35,166,2,224,13,210,211,252,
639 76,2,10,11,11,137,132,250,218,172,135,4,29,29,29,164,17,51,6,17,57,22,10,
640 1,16,206,136,170,10,192,157,50,99,26,118,180,109,248,151,237,209,78,251,
641 36,3,123,44,18,154,237,59,206,183,95,180,175,237,167,209,117,4,181,176,
642 223,155,41,169,213,91,250,62,222,192,75,129,48,28,20,32,16,42,1,63,113,
643 66,96,92,20,2,32,188,109,97,97,32,31,165,31,245,112,128,109,201,103,246,
644 63,117,89,149,130,17,246,227,175,180,189,225,247,211,17,190,132,169,175,
645 38,173,45,26,253,71,131,198,90,10,132,225,32,5,194,144,214,224,160,163,
646 187,147,80,93,148,223,209,80,59,244,187,55,40,223,87,48,48,56,120,250,156,
647 44,131,97,13,162,112,166,237,147,44,251,193,253,246,173,12,248,177,66,192,
648 67,181,219,238,216,205,182,114,140,28,65,45,224,208,255,144,245,235,135,
649 184,131,69,10,132,225,32,5,194,144,86,127,183,35,239,103,71,246,130,95,
650 67,121,188,92,21,84,170,237,232,61,242,221,116,131,97,13,138,48,201,22,
651 121,141,237,149,106,251,174,6,252,88,33,244,218,183,142,181,31,125,190,
652 237,131,173,2,245,33,223,153,81,85,253,193,246,197,250,198,198,198,252,
653 252,124,185,160,20,162,82,32,12,105,225,17,214,102,111,6,194,222,160,124,
654 76,37,189,166,243,128,128,188,83,102,116,195,65,182,197,31,217,175,178,
655 230,103,43,138,236,251,252,203,246,216,94,182,95,12,199,60,166,225,238,
656 37,69,221,253,65,2,194,129,1,71,75,157,163,177,170,179,44,187,62,43,194,
657 209,88,201,111,199,64,216,221,232,16,38,82,32,12,117,117,181,57,242,151,
658 75,10,214,14,221,173,19,140,90,93,216,178,219,235,201,6,171,106,241,112,
659 160,109,113,148,253,56,11,158,14,29,180,79,136,179,31,117,220,208,99,242,
660 99,120,69,208,109,184,232,139,156,142,32,122,130,162,174,204,145,187,212,
661 145,189,104,48,123,161,35,103,137,163,34,85,129,48,84,165,64,24,6,42,79,
662 24,162,32,56,236,147,111,63,15,58,125,159,213,184,99,96,191,190,180,37,
663 97,123,219,198,43,109,51,11,236,251,26,8,52,238,1,4,22,218,247,125,204,
664 254,144,47,31,17,28,139,112,196,187,233,173,61,193,195,146,190,94,199,166,
665 85,114,18,153,179,216,209,82,46,227,149,66,78,10,132,97,32,198,115,206,
666 66,71,93,206,208,153,210,224,212,87,105,245,219,189,20,28,32,156,98,91,
667 255,150,237,186,86,251,14,6,8,141,123,232,179,79,156,99,251,203,81,182,
668 249,163,242,190,52,255,194,190,111,164,180,116,7,149,83,213,84,37,65,88,
669 176,82,185,131,33,44,5,194,176,80,123,73,110,111,107,240,221,176,167,233,
670 147,164,186,109,198,242,105,250,81,9,91,217,226,246,181,253,180,220,126,
671 154,213,78,135,226,8,150,218,247,188,198,183,175,201,143,105,216,233,213,
672 164,230,224,2,97,127,159,163,40,106,8,132,173,234,163,240,161,44,5,194,
673 176,80,176,63,71,248,110,92,205,4,147,85,181,84,192,205,250,171,237,245,
674 108,251,65,6,8,141,123,168,179,239,252,169,253,202,99,108,223,26,14,120,
675 92,194,214,47,36,52,118,5,215,55,40,6,29,13,69,253,155,214,15,253,80,10,
676 93,41,16,134,133,130,26,132,88,160,25,81,85,6,147,106,169,176,173,45,234,
677 69,251,63,235,237,59,25,32,52,238,33,211,126,240,31,109,239,108,103,139,
678 48,28,240,56,134,242,214,32,187,111,185,171,165,177,172,64,61,62,17,226,
679 82,32,12,11,5,53,8,7,6,7,95,88,95,97,176,167,214,9,251,219,150,254,104,
680 63,191,207,74,223,172,24,180,255,166,201,62,229,125,251,223,118,182,173,
681 25,235,199,228,71,26,50,107,3,250,193,213,45,23,3,71,61,71,24,242,82,32,
682 12,11,5,53,8,251,6,6,159,92,53,230,95,34,244,35,108,101,139,189,204,54,
683 59,210,126,220,128,149,222,160,61,104,159,176,194,254,135,75,108,111,111,
684 99,139,54,28,176,21,66,100,233,232,127,119,122,76,165,64,24,14,82,32,12,
685 11,5,53,8,123,251,7,31,94,86,98,176,167,227,30,192,204,227,246,127,213,
686 218,167,25,56,52,190,161,217,190,227,195,182,255,219,213,182,202,106,142,
687 160,22,150,229,253,250,145,234,160,144,2,97,56,72,129,48,44,164,64,56,186,
688 97,47,219,47,175,217,254,209,99,223,198,192,161,113,12,157,246,73,49,246,
689 99,206,177,125,100,89,4,138,176,44,95,129,80,201,114,82,32,12,11,5,251,
690 169,209,167,86,91,229,212,232,86,182,216,63,218,222,137,176,31,63,104,66,
691 209,56,134,18,251,94,119,218,158,158,102,91,109,56,90,11,134,232,50,117,
692 106,84,201,114,82,32,12,11,169,155,101,70,37,224,108,93,105,155,89,101,
693 223,205,58,159,213,229,72,214,217,79,252,173,237,135,113,124,76,126,68,
694 33,75,221,44,163,100,61,41,16,134,133,130,26,132,131,14,199,204,232,106,
695 131,61,13,124,216,211,182,252,37,219,237,189,246,173,13,40,26,199,144,103,
696 223,255,1,219,227,219,218,162,12,135,106,229,80,17,108,143,79,40,16,134,
697 131,20,8,195,66,65,13,66,244,94,124,205,248,126,149,247,40,219,119,107,
698 236,39,91,135,130,237,246,201,51,109,55,253,206,246,125,192,190,160,52,
699 42,97,155,224,123,160,94,129,48,44,164,64,24,22,10,118,16,142,227,43,214,
700 182,182,197,252,197,54,163,218,190,139,69,78,135,14,216,183,42,181,239,
701 249,87,219,235,193,229,8,138,176,243,244,96,123,197,154,2,97,120,72,129,
702 48,44,20,236,32,156,55,78,47,221,158,106,91,247,148,253,129,38,251,20,3,
703 141,198,43,212,216,167,205,182,95,119,144,109,177,225,56,131,37,236,247,
704 102,176,189,116,91,129,48,60,164,64,24,22,10,118,16,142,203,103,152,142,
705 180,253,111,133,253,15,221,150,121,70,34,201,254,187,115,109,31,142,251,
706 139,179,183,36,28,25,92,159,97,114,74,129,48,28,164,64,24,22,10,118,16,
707 174,41,10,232,135,121,39,218,98,78,183,125,146,109,63,200,34,207,72,52,
708 216,167,190,100,187,125,7,219,6,139,191,121,124,216,240,199,47,115,131,
709 233,195,188,78,41,16,134,131,20,8,195,66,193,14,194,204,218,206,3,103,165,
710 26,172,234,24,133,93,109,171,158,178,61,80,109,223,197,64,163,113,9,61,
711 246,109,150,216,207,254,163,237,29,107,190,47,109,164,225,254,159,138,123,
712 250,131,236,51,14,10,132,225,32,5,194,176,80,176,131,176,190,163,239,168,
713 247,210,13,86,117,44,194,52,219,234,249,182,139,44,114,58,180,217,190,227,
714 61,182,167,118,9,134,199,228,125,12,111,68,87,245,7,219,215,161,21,8,195,
715 65,10,132,97,161,96,7,225,192,224,224,153,159,100,25,172,234,232,6,92,174,
716 147,108,95,198,219,143,50,208,104,92,66,187,125,242,90,251,73,28,143,225,
717 32,131,58,76,180,199,255,152,21,124,95,135,86,32,12,7,41,16,134,133,130,
718 29,132,232,174,37,69,99,247,40,33,20,252,183,237,255,85,218,119,51,0,105,
719 92,66,190,125,255,91,109,207,77,177,173,55,28,100,176,135,157,166,39,173,
720 47,110,149,205,25,60,82,32,12,7,41,16,134,133,66,0,132,51,163,170,182,26,
721 27,16,78,182,69,124,104,255,107,151,125,146,1,72,129,15,3,246,9,223,216,
722 47,222,215,246,83,176,188,47,109,68,97,191,55,83,83,171,131,236,253,106,
723 72,129,48,28,164,64,24,22,10,1,16,254,146,223,60,113,12,158,169,63,206,
724 246,245,26,251,73,227,254,176,60,8,204,178,31,116,175,237,169,160,126,58,
725 194,123,56,242,221,244,178,150,32,123,191,26,82,32,12,7,41,16,134,133,66,
726 0,132,181,237,189,147,94,28,77,16,78,180,197,220,105,127,122,147,125,191,
727 113,167,96,155,125,123,187,253,206,67,109,11,130,253,233,8,239,225,204,
728 79,179,58,251,130,236,217,9,164,64,24,14,82,32,12,11,133,0,8,7,29,142,83,
729 62,206,52,216,86,191,195,84,219,186,153,246,155,58,236,219,25,152,20,224,
730 208,111,159,88,102,223,227,10,219,27,91,219,98,12,71,24,122,225,129,159,
731 138,101,91,6,149,20,8,195,65,10,132,97,161,16,0,33,122,126,221,40,124,140,
732 9,175,235,120,219,215,223,218,47,238,179,79,52,96,41,192,161,198,62,237,
733 85,251,173,123,218,150,27,142,48,84,195,130,236,224,187,101,20,41,16,134,
734 131,20,8,195,66,161,1,194,152,178,246,137,91,118,191,204,68,91,236,245,
735 182,151,242,236,251,27,152,20,248,176,202,126,202,169,182,207,38,5,225,
736 139,179,253,11,219,188,144,208,212,25,100,47,87,19,82,32,12,7,41,16,134,
737 133,66,3,132,101,45,61,7,207,246,255,253,50,83,108,235,239,183,61,209,106,
738 223,222,192,164,0,7,28,193,255,218,238,217,49,228,158,142,240,30,206,253,
739 44,91,182,98,176,73,129,48,28,164,64,24,22,10,13,16,182,116,247,95,241,
740 117,158,193,194,250,18,38,216,226,142,182,205,255,214,254,199,126,251,86,
741 6,44,5,50,116,216,183,251,198,126,241,217,182,143,130,235,35,130,163,18,
742 102,199,84,203,86,12,54,41,16,134,131,20,8,195,66,161,1,194,129,193,193,
743 199,86,150,250,241,88,253,201,182,207,51,237,135,12,140,43,5,91,236,59,
744 220,97,123,102,170,109,157,225,216,194,33,108,243,66,66,78,93,240,61,65,
745 40,164,64,24,14,82,32,12,11,133,6,8,209,188,180,250,17,125,143,105,7,219,
746 134,123,109,79,182,141,235,233,80,28,193,133,246,115,15,179,253,104,56,
747 182,240,9,39,125,148,89,223,25,100,31,166,215,164,64,24,14,82,32,12,11,
748 133,12,8,203,90,122,124,255,12,197,158,182,229,159,218,175,28,223,103,36,
749 50,236,135,220,100,179,135,219,21,65,125,152,96,139,127,106,85,89,208,125,
750 116,66,147,2,97,56,72,129,48,44,20,50,32,196,154,254,115,113,145,193,212,
751 186,13,39,216,190,74,183,31,54,142,23,5,251,236,19,63,180,253,117,111,219,
752 178,173,108,113,134,99,11,171,48,245,213,164,37,185,65,220,247,20,8,195,
753 65,10,132,97,161,144,1,33,138,43,111,223,218,235,187,214,38,217,162,254,
754 102,123,173,196,190,151,129,76,129,12,61,246,109,222,180,223,112,178,237,
755 139,227,109,95,7,32,28,109,155,111,217,151,116,255,238,157,244,202,214,
756 94,217,120,65,40,5,194,112,144,2,97,88,40,148,64,56,48,56,120,238,220,108,
757 131,181,213,194,62,182,159,63,177,255,185,213,190,131,129,76,1,14,128,176,
758 202,190,107,0,66,165,125,183,165,246,51,255,98,155,177,147,109,173,161,
759 42,44,18,30,90,86,18,172,103,69,157,82,32,12,7,41,16,134,133,66,9,132,104,
760 78,82,173,249,181,156,19,108,113,7,216,150,172,177,159,60,190,207,72,4,
761 38,12,218,39,116,219,183,205,180,31,124,181,237,213,41,182,117,150,125,
762 30,99,43,123,124,82,85,135,108,182,224,148,2,97,56,72,129,48,44,20,98,32,
763 204,169,239,218,247,141,20,189,193,157,108,139,184,198,246,74,174,253,0,
764 3,48,66,50,224,8,126,99,191,24,4,82,106,125,37,88,48,156,61,55,123,32,168,
765 253,65,5,194,240,144,2,97,88,40,196,64,216,214,51,240,167,121,191,62,89,
766 63,201,22,249,154,237,31,45,227,125,58,52,0,161,218,190,235,115,182,187,
767 143,177,125,187,131,109,131,86,124,203,6,188,246,111,211,27,130,156,131,
768 10,132,97,33,5,194,176,80,136,129,16,125,146,84,55,249,165,196,173,156,
769 167,67,23,219,207,25,223,135,229,199,58,116,219,183,41,182,239,253,178,
770 253,246,125,109,63,7,209,91,105,78,248,48,179,162,53,248,62,64,104,144,
771 2,97,56,72,129,48,44,20,122,32,108,233,238,63,125,78,214,149,182,55,210,
772 237,135,142,251,7,5,199,46,180,218,183,255,217,126,198,189,182,39,247,177,
773 253,28,92,95,43,220,230,133,132,151,54,84,246,5,251,137,81,5,194,240,144,
774 2,97,88,40,244,64,232,24,232,203,90,240,76,131,125,170,129,28,161,20,22,
775 217,207,57,211,54,103,154,109,245,132,32,124,18,113,247,25,201,121,245,
776 93,178,177,130,89,10,132,225,32,5,194,176,80,168,129,176,165,204,241,227,
777 205,142,23,183,54,144,35,4,66,191,125,171,114,251,30,95,219,47,57,217,246,
778 69,48,242,79,11,15,45,43,145,141,21,228,82,32,12,7,41,16,134,133,66,7,132,
779 131,131,142,252,159,29,159,156,230,120,33,212,46,10,14,216,39,36,218,127,
780 247,136,237,145,223,219,230,109,99,139,54,112,37,184,194,126,111,166,150,
781 183,4,253,213,65,33,5,194,112,144,2,97,88,40,68,64,56,208,239,136,127,207,
782 49,99,119,3,66,66,32,100,219,15,186,205,246,220,46,182,85,19,67,226,11,
783 77,47,110,168,232,103,202,18,18,82,32,12,7,41,16,134,133,66,1,132,189,29,
784 142,152,89,142,55,247,115,204,216,77,31,250,95,219,173,206,190,179,31,97,
785 124,95,198,77,24,180,79,224,48,54,218,127,127,135,253,153,160,120,28,194,
786 199,112,200,236,180,156,144,184,58,40,164,64,24,14,82,32,12,11,133,2,8,
787 123,218,28,21,241,142,242,88,67,232,43,141,121,230,203,31,79,181,125,54,
788 162,112,133,237,13,156,48,3,153,2,25,64,224,12,219,77,167,219,62,217,49,
789 132,16,72,216,250,133,132,23,214,87,132,192,205,162,154,20,8,195,65,225,
790 5,194,193,205,37,99,71,174,45,204,30,120,133,218,205,50,155,43,171,182,
791 115,167,87,147,12,22,217,83,152,96,139,159,102,91,179,220,126,218,184,60,
792 122,216,103,159,88,111,223,105,186,237,150,125,108,63,7,251,133,64,183,
793 225,208,183,82,155,186,250,101,195,132,132,20,8,195,65,225,5,194,250,250,
794 250,194,194,194,162,162,162,226,226,226,234,234,234,190,62,127,62,22,218,
795 214,214,198,22,74,74,74,248,33,163,44,175,208,6,97,111,255,224,83,171,202,
796 188,127,146,66,132,173,108,177,167,217,62,141,179,31,101,224,83,0,66,183,
797 125,219,141,246,223,63,105,127,240,64,219,98,195,81,133,76,152,250,106,
798 210,242,77,205,178,85,66,69,10,132,225,160,240,2,97,65,65,1,8,4,96,173,
799 173,173,176,161,161,161,65,174,24,137,64,96,101,101,101,123,123,187,127,
800 28,29,23,133,54,8,209,166,198,238,195,223,78,51,216,101,115,56,215,246,
801 193,38,251,126,1,126,0,191,199,190,205,247,182,11,254,104,123,103,15,219,
802 242,16,254,54,33,174,246,19,43,203,152,148,200,38,9,21,41,16,134,131,194,
803 14,132,101,101,101,157,157,157,29,29,29,176,1,34,242,35,45,45,45,57,57,
804 25,79,177,185,185,153,30,79,26,254,162,170,170,170,210,210,82,86,197,199,
805 199,147,69,108,97,112,112,144,4,141,141,141,61,61,61,65,116,118,52,228,
806 65,72,75,188,23,95,179,141,103,167,112,91,91,244,223,108,175,5,242,125,
807 164,3,246,173,26,236,59,45,179,159,126,142,237,195,109,108,209,193,245,
808 94,24,63,194,193,179,211,50,106,229,48,9,37,5,17,8,153,154,167,167,167,
809 71,56,21,29,29,93,94,94,238,135,141,34,11,70,114,227,198,141,169,169,169,
810 65,52,215,223,66,133,29,8,83,82,82,4,231,232,49,45,45,45,32,13,191,16,7,
811 49,41,41,137,230,103,45,116,228,47,41,129,31,44,100,85,102,102,38,126,164,
812 216,194,192,192,0,224,204,205,205,21,104,9,22,22,134,60,8,81,79,255,224,
813 181,255,219,164,55,205,90,216,214,22,245,168,237,225,38,251,20,3,171,198,
814 40,244,219,183,74,181,31,246,138,253,182,83,108,159,135,198,227,16,190,
815 132,87,54,86,134,208,45,50,191,42,136,64,216,219,219,203,72,103,114,143,
816 93,234,234,234,74,76,76,228,119,127,127,63,241,136,72,204,23,108,35,134,
817 191,136,24,254,138,181,114,19,14,7,254,64,66,66,2,19,253,186,186,186,238,
818 238,110,25,27,234,10,59,16,194,54,122,3,93,1,182,85,84,84,180,183,183,199,
819 198,198,174,93,187,54,38,38,6,16,230,229,229,209,51,152,10,209,9,232,37,
820 76,169,152,25,173,88,177,130,238,37,55,225,112,208,195,216,2,195,131,236,
821 10,132,150,210,166,134,238,163,222,77,55,24,104,188,177,89,246,235,219,
822 237,147,13,184,26,163,80,96,223,247,118,219,179,251,219,150,134,228,189,
823 48,158,194,85,223,230,119,244,14,200,102,8,45,5,23,8,115,114,114,176,75,
824 76,238,43,43,43,147,147,147,177,102,216,180,184,184,56,236,27,147,126,86,
825 17,201,42,24,201,252,158,152,140,140,140,248,248,248,245,235,215,147,82,
826 108,132,52,133,133,133,108,1,151,32,88,236,219,150,43,236,64,8,219,152,
827 236,0,179,162,162,34,26,155,126,80,91,91,203,36,8,63,175,180,180,148,30,
828 47,64,200,42,34,133,215,136,255,71,70,177,5,122,6,171,152,40,213,215,215,
829 211,159,44,222,81,134,38,128,76,254,250,251,178,114,179,26,26,27,196,239,
830 16,238,220,148,108,110,114,221,212,87,19,53,3,189,187,109,197,151,246,203,
831 2,240,169,222,102,251,142,209,246,99,110,183,253,119,59,91,100,200,159,
832 5,53,132,19,62,204,168,12,254,175,76,120,82,112,129,16,147,133,77,3,135,
833 112,78,156,223,98,234,207,95,216,134,74,156,194,44,192,197,214,214,86,113,
834 210,11,103,32,50,50,18,131,38,54,130,97,196,24,178,5,204,32,14,165,136,
835 12,121,133,23,8,65,87,86,86,22,83,36,4,246,232,55,120,129,52,57,14,19,205,
836 15,17,153,13,225,44,210,99,232,37,192,146,1,64,74,254,146,76,108,1,138,
837 144,17,52,146,222,250,189,164,174,169,46,58,63,154,240,115,210,207,17,185,
838 17,252,72,45,73,165,128,114,117,40,170,171,111,224,153,53,229,194,64,139,
839 47,52,245,217,39,26,160,53,186,161,206,190,243,219,246,107,47,179,205,222,
840 217,182,70,99,67,248,132,221,94,79,94,190,169,57,36,79,138,10,5,227,169,
841 81,126,51,221,7,138,117,117,117,197,197,197,204,227,249,141,201,194,142,
842 65,62,140,24,94,32,246,13,16,178,10,69,71,71,107,32,196,190,177,17,96,73,
843 70,220,0,17,25,242,10,47,16,14,121,72,46,241,91,139,129,13,252,16,34,146,
844 69,225,54,241,67,91,59,148,223,41,126,139,72,185,108,97,149,215,149,47,
845 72,94,160,15,107,115,214,6,197,145,111,137,96,225,229,243,242,142,182,205,
846 79,183,31,58,48,150,55,136,182,217,183,127,215,118,205,225,182,31,240,2,
847 13,120,8,159,240,212,170,178,80,122,124,94,19,195,164,177,165,145,169,100,
848 86,97,86,102,126,38,63,8,29,157,150,158,251,234,65,8,195,18,18,18,152,220,
849 51,245,7,120,217,217,217,0,15,16,86,87,87,99,220,88,5,8,153,247,51,167,
850 111,110,110,94,183,110,157,6,66,50,226,11,82,124,178,224,74,138,200,144,
851 87,120,129,48,220,20,158,32,68,85,89,235,54,189,116,168,129,91,163,21,58,
852 237,147,50,237,135,188,97,191,225,32,219,162,112,59,11,170,15,19,236,241,
853 87,124,157,215,211,31,154,151,6,187,123,186,215,100,175,49,12,159,134,22,
854 127,30,184,10,152,152,160,67,175,40,167,226,226,226,240,101,241,11,1,33,
855 14,31,192,43,47,47,135,139,141,141,141,128,144,69,86,129,204,228,228,228,
856 196,196,196,146,146,18,13,132,136,100,108,33,47,47,47,28,108,133,144,2,
857 97,40,43,28,65,56,216,239,72,154,227,152,117,128,129,94,163,18,250,237,
858 19,151,218,207,186,218,246,234,126,182,159,12,84,8,195,112,214,167,217,
859 69,77,33,123,87,97,48,130,80,201,111,41,16,134,178,194,14,132,253,189,142,
860 152,217,142,233,59,25,0,182,133,97,208,62,1,47,112,149,253,148,51,108,159,
861 108,111,219,24,212,159,9,28,173,176,231,140,148,136,210,182,208,189,50,
862 168,64,24,94,82,32,12,101,133,23,8,187,155,29,27,95,118,188,186,163,1,99,
863 91,24,54,217,247,253,200,126,213,5,182,247,182,182,197,24,96,16,182,97,
864 191,55,83,23,231,134,248,211,56,10,132,97,165,144,5,97,95,95,95,81,81,81,
865 74,74,74,123,123,187,140,114,222,243,153,151,151,39,238,152,98,177,161,
866 161,33,41,41,73,188,127,129,244,249,249,249,172,202,205,205,5,21,36,200,
867 204,204,12,246,27,136,187,123,187,43,26,42,8,169,121,169,155,202,55,241,
868 163,182,165,86,220,7,20,106,106,171,118,124,127,173,227,165,109,13,24,243,
869 59,12,218,127,147,110,63,244,1,219,227,191,181,253,176,173,45,202,64,130,
870 112,14,248,130,75,243,154,66,247,25,28,41,5,194,176,82,104,130,16,91,95,
871 93,93,157,157,157,93,89,89,9,14,53,211,47,30,150,104,107,107,139,138,138,
872 2,144,201,201,201,245,245,245,208,142,223,144,15,70,246,246,246,14,12,12,
873 144,94,60,80,81,82,82,82,92,92,172,191,101,148,85,218,214,132,180,69,67,
874 252,22,202,185,159,209,217,32,219,201,223,148,223,216,216,40,151,67,79,
875 237,213,142,255,93,61,42,223,172,135,127,237,246,201,185,246,3,238,183,
876 63,190,147,109,109,8,191,26,212,191,48,249,165,196,25,81,85,33,243,209,
877 93,47,98,18,25,145,31,177,44,99,217,207,105,63,47,77,93,202,15,66,83,155,
878 229,252,96,131,149,96,17,123,165,63,235,51,100,71,156,105,248,75,60,18,
879 49,226,55,226,183,72,25,206,10,89,16,150,150,150,214,213,213,129,55,252,
880 60,188,61,17,95,88,88,8,26,233,40,192,175,162,162,2,40,146,0,218,129,189,
881 230,230,102,214,194,72,241,104,4,140,132,28,172,213,40,200,15,60,72,210,
882 192,75,18,139,72,84,85,85,213,227,84,77,77,141,30,153,126,11,24,179,23,
883 14,155,191,252,150,177,254,138,45,192,114,28,95,28,220,214,214,86,25,27,
884 58,26,116,148,69,57,62,63,207,192,51,255,66,141,125,218,215,246,75,174,
885 181,189,50,213,182,206,0,0,21,8,59,188,156,248,210,134,202,208,123,173,
886 182,39,245,245,15,189,126,140,185,50,243,200,158,222,30,126,91,141,25,216,
887 43,236,152,102,223,80,75,75,139,176,81,226,245,200,88,36,102,255,20,129,
888 35,199,106,97,85,80,83,83,19,150,13,163,135,48,11,44,138,188,225,172,208,
889 4,33,205,143,245,23,175,128,161,79,104,29,5,52,226,38,210,51,162,163,163,
890 33,98,110,110,46,157,6,40,166,167,167,131,49,224,199,15,214,210,227,215,
891 172,89,147,149,149,69,140,120,215,26,121,217,8,224,164,27,145,50,33,33,
892 65,99,94,90,90,26,14,37,98,203,250,30,105,22,57,186,186,135,9,45,45,109,
893 113,113,113,107,157,90,183,110,29,27,111,107,235,53,164,241,61,116,118,
894 13,208,215,217,142,216,96,100,100,100,101,101,181,33,205,136,130,229,230,
895 142,101,209,142,119,127,235,216,226,135,5,187,237,219,190,101,191,238,88,
896 219,55,83,108,235,13,214,95,5,17,182,127,57,241,237,216,234,238,190,208,
897 124,88,194,147,0,70,109,109,45,163,94,46,143,150,250,122,29,221,93,142,
898 94,255,95,199,35,192,150,152,152,136,201,98,22,46,34,153,193,99,208,48,
899 80,229,229,229,120,2,44,242,119,227,198,141,252,197,52,137,231,235,197,
900 75,69,88,133,109,4,129,68,98,187,68,246,112,86,200,130,80,60,25,99,0,33,
901 189,135,94,66,87,96,30,68,55,162,7,128,61,18,32,38,80,76,175,232,31,116,
902 122,226,215,175,95,47,102,91,226,146,33,121,217,72,65,65,1,93,135,141,71,
903 69,69,105,157,207,119,16,150,215,57,22,70,13,19,150,69,212,175,93,187,65,
904 112,75,232,151,136,58,67,26,223,195,146,200,14,185,21,151,86,175,79,88,
905 28,213,111,72,230,99,136,206,112,244,122,43,95,96,213,223,235,40,94,231,
906 120,115,95,3,210,70,20,122,237,91,23,218,247,125,195,126,227,129,182,197,
907 234,94,80,47,97,202,43,73,47,108,168,232,13,230,7,231,153,134,142,40,244,
908 15,12,217,10,236,128,24,56,76,34,177,24,134,52,126,4,71,127,159,163,177,
909 204,145,191,210,145,189,208,81,184,214,209,94,63,48,48,104,72,227,54,24,
910 132,41,107,109,109,5,120,216,46,205,22,49,131,199,70,117,116,116,96,142,
911 152,1,19,223,216,216,8,246,176,99,164,199,160,97,187,96,97,70,70,6,63,16,
912 222,66,81,81,17,63,68,118,168,15,71,153,253,227,39,240,91,68,178,53,178,
913 147,70,60,131,40,34,67,79,33,123,106,20,218,209,204,112,139,158,161,181,
914 52,93,7,193,188,152,152,24,26,88,184,140,116,11,144,217,210,210,194,42,
915 82,10,40,10,82,130,73,250,147,200,14,228,240,8,217,44,25,241,8,5,29,145,
916 56,183,64,23,97,110,53,44,8,23,68,13,19,86,172,207,16,3,79,211,242,141,
917 149,134,52,190,135,95,134,176,186,153,86,175,139,91,28,217,99,72,230,99,
918 136,74,183,12,8,251,58,29,145,175,57,94,219,197,0,54,223,67,143,125,155,
919 101,246,211,239,178,61,125,152,237,71,117,33,208,123,56,244,173,180,111,
920 211,27,6,130,249,74,82,103,143,35,33,111,100,33,41,187,9,95,74,14,27,167,
921 98,99,99,19,115,123,12,201,70,26,26,54,213,59,178,23,232,67,89,65,151,33,
922 141,219,208,97,122,98,19,43,167,1,79,196,0,66,22,5,8,153,208,99,163,72,
923 131,1,132,100,34,1,120,99,190,142,185,19,191,97,36,116,20,171,16,25,49,
924 98,88,197,170,170,42,10,43,34,177,138,208,145,77,1,93,102,6,34,50,244,20,
925 154,32,68,116,5,218,114,205,154,53,226,220,38,72,163,201,233,49,17,17,17,
926 203,151,47,167,43,128,55,58,205,138,21,43,104,123,154,25,16,210,239,87,
927 175,94,45,102,79,80,16,183,143,24,126,176,200,6,129,28,233,215,173,91,199,
928 54,153,28,209,141,196,9,7,58,205,202,149,43,153,67,177,150,93,208,183,60,
929 225,208,23,16,254,178,177,98,237,90,57,9,21,90,18,209,106,72,227,123,88,
930 20,217,45,183,226,210,170,245,137,11,162,6,13,201,124,12,22,2,33,20,124,
931 121,123,3,219,124,14,19,74,103,157,122,137,237,237,157,108,107,149,23,56,
932 108,216,253,245,228,21,5,45,193,254,14,181,150,14,99,103,30,46,12,174,216,
933 80,32,199,140,78,63,71,52,153,82,142,44,180,101,172,53,128,176,62,173,208,
934 144,198,109,104,118,119,254,210,12,66,189,71,40,102,240,26,8,89,11,5,197,
935 75,183,89,4,120,169,169,169,194,184,9,145,49,55,55,23,55,0,123,136,161,
936 19,115,125,5,194,144,18,60,19,87,143,253,22,120,163,75,109,201,133,101,
937 186,159,225,146,155,57,180,182,245,38,37,37,139,81,71,95,100,90,215,217,
938 213,111,72,51,130,208,53,64,39,214,78,239,224,7,183,180,180,25,211,140,
939 36,140,191,87,208,94,235,88,254,136,137,109,62,132,23,38,14,157,71,253,
940 230,10,71,193,74,199,64,223,7,9,181,187,189,150,108,48,250,42,232,195,4,
941 123,252,225,111,167,173,42,12,133,215,46,143,28,132,76,73,203,197,168,209,
942 235,231,136,22,67,178,145,6,176,103,0,97,73,82,157,33,141,219,224,29,132,
943 240,12,206,129,43,113,141,16,242,49,77,23,144,19,32,100,85,94,94,94,102,
944 102,38,89,68,122,102,240,172,18,219,17,18,30,161,184,142,152,146,146,66,
945 22,140,30,233,115,114,114,248,75,98,182,12,68,5,32,67,76,225,2,66,90,84,
946 204,131,252,22,217,113,4,233,43,114,121,204,196,161,210,137,241,92,153,
947 130,121,114,46,125,23,189,150,169,159,184,15,104,11,167,2,227,175,214,138,
948 33,146,189,184,181,17,114,195,134,183,15,115,68,78,119,84,37,59,250,93,
949 115,231,254,193,159,243,155,143,125,63,195,96,253,85,16,97,235,23,18,110,
950 252,161,32,167,78,94,40,10,118,245,245,59,42,26,70,22,74,171,134,30,178,
951 146,0,116,138,65,84,94,215,103,72,54,210,208,83,223,184,25,8,11,35,90,27,
952 123,13,105,220,6,183,39,99,186,187,187,129,19,86,2,182,137,231,196,152,
953 241,67,172,161,9,180,107,176,139,107,123,164,132,103,8,112,194,57,172,89,
954 125,125,189,97,90,47,64,136,215,72,246,174,174,46,224,199,214,48,32,197,
955 197,197,228,226,111,75,75,11,241,248,136,122,63,50,52,20,46,32,28,21,5,
956 160,249,217,5,162,183,197,198,197,210,191,135,22,28,91,180,83,231,246,134,
957 30,38,17,51,68,36,87,4,153,6,29,45,229,142,57,167,140,236,97,65,144,57,
958 235,0,71,252,187,142,174,38,188,64,185,37,151,168,137,250,142,190,191,124,
959 147,55,209,158,96,192,64,152,135,109,95,76,120,108,101,89,91,79,8,78,252,
960 71,36,248,177,113,227,198,117,235,214,109,216,176,1,79,75,59,3,185,101,
961 26,116,244,116,56,138,35,134,40,88,188,209,209,179,165,83,13,49,162,113,
962 7,153,55,139,1,14,228,144,88,139,68,36,63,68,188,144,62,94,147,56,53,10,
963 255,12,9,68,22,36,98,144,51,121,72,73,129,208,66,162,135,149,212,149,100,
964 148,102,164,22,165,174,76,90,153,94,146,206,239,250,230,95,223,10,63,82,
965 117,247,116,179,5,66,116,118,116,116,78,52,63,114,202,115,58,186,130,237,
966 93,57,131,3,142,226,245,142,247,143,54,114,206,75,152,190,147,99,222,165,
967 142,132,247,28,29,195,212,94,115,87,255,147,171,202,118,123,93,157,38,29,
968 10,19,108,241,199,188,151,254,67,86,99,8,127,95,112,68,194,145,194,73,218,
969 242,19,51,70,117,180,56,242,126,150,191,71,67,152,142,45,63,99,9,233,197,
970 83,209,114,57,156,164,64,104,33,49,231,138,222,20,109,120,171,83,81,117,
971 145,92,61,114,53,181,53,25,182,182,60,125,121,107,71,176,61,86,159,179,
972 200,249,53,9,223,30,22,124,109,154,227,167,251,134,158,47,236,254,245,165,
973 7,222,213,211,63,184,161,184,245,247,31,168,211,164,241,127,159,159,159,
974 91,223,165,40,136,218,59,219,27,91,26,107,26,106,226,211,227,235,154,234,
975 248,221,214,209,182,229,206,80,115,91,51,155,106,172,41,107,204,90,58,244,
976 163,165,145,24,185,78,105,252,20,238,32,28,242,243,157,146,203,78,25,98,
977 244,139,250,223,163,46,5,66,163,250,123,29,137,31,58,94,241,225,6,209,23,
978 183,113,204,216,221,177,248,14,71,125,174,249,44,232,176,162,69,55,53,118,
979 95,62,47,111,135,87,18,13,108,8,147,176,251,235,201,211,35,42,59,195,236,
980 121,121,79,98,140,103,149,101,45,74,89,68,88,152,188,80,252,200,174,200,
981 222,242,177,191,50,107,165,216,218,162,228,5,226,71,126,121,112,124,254,
982 62,180,21,214,32,20,183,165,20,20,20,84,85,85,1,33,17,201,143,242,242,242,
983 194,194,194,122,231,123,137,58,59,59,139,156,234,234,234,234,233,233,97,
984 85,101,101,229,24,177,80,129,112,51,245,119,59,54,190,52,252,55,149,94,
985 218,214,49,247,76,71,196,171,142,250,60,153,209,95,225,26,206,207,104,56,
986 103,110,246,214,47,132,209,85,195,157,167,39,221,252,99,65,68,105,155,114,
987 4,53,49,192,51,203,50,13,99,103,84,64,184,60,115,185,97,179,249,101,10,
988 132,227,175,176,6,97,83,83,147,120,190,208,249,92,129,188,77,188,185,185,
989 57,37,37,133,191,155,54,109,106,111,111,207,203,203,19,15,208,228,230,230,
990 214,214,214,86,87,87,147,5,40,138,196,163,43,5,194,95,213,211,234,88,120,
991 171,227,229,201,70,236,25,194,167,167,59,242,151,13,189,116,123,112,116,
992 238,236,192,208,213,180,247,206,138,169,158,250,106,146,1,24,33,25,14,127,
993 59,109,89,126,115,123,143,114,4,55,147,2,97,184,73,157,26,29,122,59,67,
994 108,108,172,246,134,133,186,186,58,252,63,113,211,48,228,203,116,190,171,
995 26,242,241,131,85,224,144,248,209,191,120,238,148,2,161,84,91,165,227,187,
996 191,15,61,249,103,192,158,12,19,28,51,118,115,204,187,204,145,183,212,49,
997 48,38,119,54,98,237,114,234,186,46,253,42,119,74,136,158,41,157,96,143,
998 223,115,70,242,191,127,41,109,234,10,247,91,67,221,42,100,64,200,252,158,
999 105,125,82,82,18,166,76,59,120,140,27,243,251,196,196,68,97,232,74,74,74,
1000 72,192,188,159,223,164,79,77,77,13,225,87,169,121,82,184,131,16,164,225,
1001 225,225,17,106,78,94,103,103,103,90,90,26,192,163,67,84,58,5,2,233,55,44,
1002 118,116,116,136,19,164,34,229,168,139,158,90,214,80,150,93,153,157,86,146,
1003 182,50,97,101,86,121,22,191,235,154,235,228,234,145,171,171,167,139,45,
1004 16,162,50,163,98,115,99,249,177,169,106,19,145,114,181,53,85,147,238,248,
1005 242,143,238,41,248,194,4,199,187,191,115,172,121,218,81,178,209,209,55,
1006 230,165,104,233,238,95,148,211,116,253,247,5,59,188,28,82,56,220,247,141,
1007 148,71,126,41,141,41,111,239,83,39,67,61,40,100,64,200,36,158,137,190,120,
1008 64,176,215,245,41,155,138,138,10,108,26,134,142,153,125,115,115,115,86,
1009 86,22,191,49,131,192,146,85,213,213,213,204,245,69,202,240,81,56,130,176,
1010 187,187,123,205,154,53,120,129,252,96,17,63,12,200,137,247,239,9,65,59,
1011 58,16,211,37,58,10,179,36,241,96,105,78,78,142,72,63,166,98,164,33,14,32,
1012 54,46,150,93,139,69,185,206,47,137,45,4,205,115,132,101,209,142,119,60,
1013 124,77,98,230,158,67,15,197,183,150,15,221,65,19,64,181,245,12,172,45,106,
1014 57,255,179,28,3,78,130,49,108,253,66,194,189,75,139,243,27,186,194,237,
1015 35,18,35,21,195,36,100,78,141,194,191,154,154,26,38,247,24,58,17,195,111,
1016 104,7,29,89,213,214,214,134,47,136,63,80,85,85,133,107,216,208,208,144,
1017 144,144,176,37,239,207,10,82,133,181,71,72,87,160,31,208,27,152,46,209,
1018 246,116,20,58,58,125,2,10,50,69,42,40,40,224,135,240,2,89,43,190,93,34,
1019 115,142,177,32,110,92,92,156,214,113,183,92,76,247,144,92,176,166,6,7,28,
1020 69,107,29,239,28,110,228,223,244,157,28,31,159,52,244,114,209,54,255,61,
1021 227,45,87,255,192,224,226,156,166,11,191,200,217,53,56,95,204,182,255,155,
1022 169,119,46,46,202,168,9,242,87,11,5,80,253,3,253,93,221,93,45,109,45,169,
1023 153,169,29,157,29,252,30,149,225,223,221,211,205,166,186,234,43,187,114,
1024 126,26,250,193,82,207,232,79,175,57,84,237,220,21,108,203,200,200,192,154,
1025 105,246,36,50,50,146,105,61,179,127,226,197,109,16,184,128,226,188,151,
1026 213,39,202,99,166,176,6,33,156,203,206,206,134,112,64,130,174,131,255,7,
1027 240,0,33,145,116,11,17,73,12,221,5,82,226,20,202,108,99,175,176,3,97,127,
1028 143,35,106,230,144,207,167,71,224,203,219,57,22,221,230,216,244,139,163,
1029 54,207,81,26,229,168,47,145,137,199,79,237,61,3,27,74,90,31,91,81,118,200,
1030 236,52,3,105,172,25,182,121,33,225,156,185,217,111,70,87,167,213,116,142,
1031 255,71,148,154,170,3,236,205,111,185,24,137,65,241,64,189,65,224,45,63,
1032 63,191,178,178,82,44,50,215,199,136,105,167,70,177,45,248,136,20,13,211,
1033 135,125,227,7,198,173,180,180,180,188,188,92,36,8,67,133,251,53,66,80,71,
1034 47,103,30,132,26,27,27,233,22,34,18,9,14,17,47,22,157,201,3,164,177,0,161,
1035 118,106,212,114,234,235,113,68,207,116,188,186,163,228,223,11,91,13,253,
1036 6,129,117,57,142,142,70,71,209,6,71,238,146,161,247,81,213,22,208,24,178,
1037 60,227,170,158,254,193,150,238,254,255,101,54,156,54,39,107,242,75,137,
1038 91,217,141,248,25,247,176,245,11,9,211,166,39,221,252,67,65,100,105,27,
1039 240,198,157,149,135,62,190,42,73,113,228,46,117,52,86,14,121,255,65,162,
1040 32,5,33,163,74,88,176,138,138,10,241,130,80,92,64,98,136,103,45,145,185,
1041 185,185,109,109,109,201,201,201,24,189,170,170,42,138,137,59,40,172,95,
1042 120,42,220,65,168,23,221,61,192,192,243,164,81,7,97,125,125,61,62,46,147,
1043 68,171,169,56,43,190,109,201,35,131,47,109,11,2,7,95,152,216,54,243,176,
1044 234,47,111,170,76,92,218,94,93,48,88,149,249,235,187,137,179,23,180,231,
1045 197,12,193,124,203,196,132,128,185,240,104,169,178,186,250,151,148,162,
1046 123,231,39,31,55,43,102,151,87,226,182,50,1,41,192,97,107,123,252,1,51,
1047 19,47,156,147,242,202,234,77,89,229,245,173,173,173,24,59,191,69,39,28,
1048 93,245,111,138,148,173,89,176,218,209,84,236,232,25,58,217,56,138,146,125,
1049 125,84,197,97,7,35,8,53,137,19,90,140,125,26,148,82,224,243,117,116,116,
1050 96,88,74,74,74,136,199,101,20,191,211,210,210,196,29,164,50,91,248,73,129,
1051 208,138,98,248,141,46,8,153,9,178,205,206,45,19,134,149,113,53,154,42,205,
1052 108,251,248,124,248,55,116,143,232,231,231,13,102,124,219,90,158,89,93,
1053 85,89,83,93,213,94,95,49,88,147,175,81,144,208,87,158,81,93,93,85,189,101,
1054 98,228,51,224,71,87,133,69,69,41,121,197,171,51,74,62,141,46,186,227,135,
1055 156,223,189,157,18,96,31,17,255,239,247,111,197,63,178,32,253,139,141,89,
1056 43,18,115,211,115,242,228,44,99,11,132,199,64,15,28,93,117,101,44,213,55,
1057 232,96,193,154,210,140,216,132,209,19,254,205,168,43,49,49,49,168,65,136,
1058 134,78,186,56,29,65,236,9,19,98,188,67,45,18,25,126,135,173,20,8,173,168,
1059 81,7,161,245,52,232,232,168,117,124,253,167,161,123,97,230,156,234,200,
1060 93,236,232,237,100,68,202,149,66,44,246,116,57,74,34,29,185,63,13,153,206,
1061 81,58,53,42,7,253,24,104,96,112,176,111,96,176,171,111,32,171,182,243,145,
1062 239,226,207,153,147,190,215,140,148,105,211,147,118,120,37,113,155,23,19,
1063 38,152,0,230,71,0,177,147,94,74,152,242,74,210,174,175,37,239,247,70,202,
1064 181,255,219,244,117,122,125,73,93,107,76,124,98,119,47,59,31,77,209,253,
1065 70,87,142,226,36,73,65,26,180,60,125,176,179,205,249,5,217,81,19,86,190,
1066 110,180,197,54,199,228,113,169,0,130,80,47,154,85,254,82,218,92,10,132,
1067 86,84,136,131,112,232,6,209,53,67,143,204,47,189,199,81,176,66,251,70,160,
1068 71,117,182,56,42,83,28,245,214,190,235,117,115,197,198,198,54,52,52,214,
1069 180,247,38,84,182,47,200,110,156,29,83,253,248,202,210,155,127,44,184,240,
1070 139,156,163,223,75,223,231,141,148,93,166,39,121,191,190,136,159,183,227,
1071 43,137,187,189,158,188,255,155,41,39,126,152,121,197,215,121,119,46,46,
1072 122,118,109,249,199,137,181,203,242,155,51,106,59,181,215,193,224,172,227,
1073 184,4,193,121,173,146,100,71,254,170,161,166,108,111,30,149,57,77,16,107,
1074 156,64,168,228,73,10,132,86,84,136,131,176,46,219,145,245,131,163,97,147,
1075 163,207,231,187,249,97,103,255,152,188,205,103,140,4,8,13,175,231,192,242,
1076 119,244,14,212,117,244,149,182,244,108,106,232,206,169,239,202,172,237,
1077 76,173,238,136,46,107,91,190,169,249,187,204,134,79,146,106,63,75,169,131,
1078 154,171,11,91,226,43,218,211,107,58,179,234,186,114,235,187,10,26,187,43,
1079 90,123,155,186,250,187,61,60,0,31,52,32,108,172,114,116,181,57,66,249,60,
1080 135,207,82,32,180,152,20,8,173,168,16,7,225,208,123,209,66,211,33,24,28,
1081 28,236,235,239,35,68,199,70,215,213,215,137,223,190,156,143,34,133,22,124,
1082 23,61,132,237,183,180,182,36,36,37,244,244,244,240,59,100,251,76,136,73,
1083 129,208,98,82,32,180,162,194,224,26,97,104,170,174,169,46,118,83,108,204,
1084 166,152,159,147,126,222,152,189,145,31,4,90,83,174,30,109,21,87,21,179,
1085 253,13,217,27,150,167,44,23,251,42,168,41,144,235,148,172,44,5,66,139,73,
1086 129,208,138,82,32,12,82,149,84,149,44,76,94,104,120,135,214,216,129,48,
1087 181,48,213,176,175,164,146,36,185,78,201,202,82,32,180,152,20,8,173,40,
1088 5,194,32,149,2,161,146,79,82,32,180,152,20,8,173,40,5,194,32,149,2,161,
1089 146,79,82,32,180,152,20,8,173,40,5,194,32,149,2,161,146,79,82,32,180,152,
1090 20,8,173,40,5,194,32,149,2,161,146,79,82,32,180,152,20,8,173,40,5,194,32,
1091 85,107,123,107,89,125,25,97,109,194,218,77,21,155,196,239,177,107,199,250,
1092 230,122,182,207,142,54,36,109,40,169,45,225,119,99,91,216,125,91,60,40,
1093 165,64,104,49,41,16,90,81,10,132,65,173,193,193,193,152,152,152,134,134,
1094 6,185,236,179,200,40,36,151,125,83,71,71,71,98,98,226,232,191,15,83,105,
1095 236,164,64,104,49,41,16,90,76,3,253,142,190,222,222,206,142,204,196,216,
1096 129,158,110,126,135,251,203,168,130,77,96,172,166,166,102,227,198,141,105,
1097 105,105,141,141,141,190,83,173,189,189,189,192,169,226,226,98,237,211,113,
1098 195,10,10,230,230,230,70,70,70,22,22,22,142,201,91,49,149,198,66,10,132,
1099 22,147,2,161,197,212,84,227,40,92,51,184,105,101,111,214,82,71,193,74,71,
1100 193,42,71,99,248,126,45,115,88,85,87,87,131,156,69,139,22,125,245,213,87,
1101 115,231,206,253,238,187,239,126,254,249,231,212,212,84,240,32,83,140,182,
1102 186,186,135,9,133,133,69,28,210,90,167,34,34,34,106,235,90,13,9,220,134,
1103 150,150,182,216,216,88,145,107,221,186,117,206,79,135,247,25,210,152,67,
1104 99,83,71,116,116,52,233,69,198,248,248,248,150,214,94,67,26,67,240,153,
1105 176,74,99,41,5,66,139,73,129,208,98,234,237,113,228,175,144,47,233,39,148,
1106 198,90,237,29,155,184,56,101,101,101,153,155,43,203,169,108,167,114,156,
1107 194,77,17,202,203,27,250,42,208,166,77,155,112,116,202,203,203,241,150,
1108 90,90,90,252,62,143,215,214,214,86,84,84,244,201,39,159,92,115,205,53,187,
1109 237,182,219,196,137,19,183,50,137,200,73,147,38,29,123,236,177,247,220,
1110 115,207,252,249,243,217,175,47,92,196,9,227,56,101,121,156,114,91,168,117,
1111 17,185,239,205,31,10,239,127,151,247,193,255,54,125,240,125,193,199,11,
1112 74,62,93,92,241,197,178,186,111,215,180,253,20,209,190,118,237,122,129,
1113 37,161,213,235,51,23,70,59,134,13,203,55,150,65,64,153,199,169,37,145,237,
1114 134,52,34,252,24,57,240,206,55,89,111,127,157,73,152,243,229,106,240,175,
1115 211,231,31,126,185,65,172,18,225,147,69,101,90,198,207,127,174,37,102,222,
1116 162,204,212,84,89,64,47,50,52,16,213,46,87,108,177,180,182,168,171,171,
1117 147,81,195,137,106,23,31,15,18,162,33,228,138,225,132,123,45,243,88,71,
1118 29,173,142,214,90,71,67,217,208,55,138,249,65,8,170,151,232,134,170,20,
1119 8,173,167,166,106,73,193,156,197,142,134,18,171,125,206,27,19,249,247,191,
1120 255,253,55,46,77,152,48,65,176,103,155,109,182,217,118,219,109,33,208,228,
1121 201,147,183,223,126,251,29,118,216,97,71,167,166,78,157,58,109,218,52,160,
1122 181,255,254,251,31,121,228,145,127,248,195,31,174,184,226,138,123,239,189,
1123 119,214,172,89,81,81,81,35,186,163,114,201,146,37,87,95,125,245,62,251,
1124 236,35,247,237,131,56,188,67,14,57,228,134,27,110,88,186,116,169,247,125,
1125 149,150,150,254,238,119,191,147,217,60,151,107,251,237,119,220,110,242,
1126 80,216,126,135,157,118,156,186,203,212,105,187,239,190,247,65,7,28,124,
1127 244,145,199,157,117,218,185,127,251,235,117,247,63,246,216,227,95,124,241,
1128 197,234,213,171,37,208,214,174,93,16,229,24,54,172,88,159,38,83,187,180,
1129 124,99,181,33,141,8,95,173,104,222,122,155,109,229,81,14,167,51,47,188,
1130 78,203,120,237,237,207,78,156,184,181,92,49,156,106,107,107,101,189,56,
1131 69,237,201,21,91,44,188,100,177,205,151,95,126,89,70,13,167,189,246,218,
1132 43,49,49,81,228,66,116,39,185,98,56,157,124,242,201,50,143,117,212,82,247,
1133 235,52,151,80,18,237,232,30,171,179,23,74,190,75,129,208,122,26,232,119,
1134 20,69,15,13,146,220,159,28,157,109,50,210,50,50,128,208,111,129,150,93,
1135 119,221,245,226,139,47,198,200,202,77,123,22,126,228,29,119,220,177,243,
1136 206,59,195,39,153,127,36,34,215,78,59,237,116,235,173,183,226,217,200,45,
1137 154,100,0,161,127,98,71,148,11,75,125,225,133,23,126,244,209,71,240,108,
1138 197,134,18,13,69,94,194,47,27,140,30,225,226,200,54,67,26,17,70,6,194,139,
1139 174,215,50,142,8,132,184,107,178,94,156,10,82,16,158,114,202,41,50,143,
1140 117,52,56,232,40,142,255,21,132,53,121,234,38,0,43,72,129,208,146,106,44,
1141 117,228,44,114,52,215,200,69,43,105,180,64,168,9,151,235,182,219,110,43,
1142 42,42,146,59,48,169,176,176,240,220,115,207,149,169,183,76,71,31,125,244,
1143 134,13,27,220,222,142,59,42,32,212,11,159,24,199,183,162,162,66,238,192,
1144 171,122,122,123,177,245,226,226,226,250,245,235,11,10,10,250,251,221,159,
1145 9,104,110,110,198,67,149,251,24,78,184,194,50,155,195,241,236,179,207,110,
1146 189,117,80,130,112,239,189,247,78,74,250,245,249,72,223,65,120,234,169,
1147 167,202,60,150,82,107,205,208,201,30,40,88,180,193,209,167,238,111,178,
1148 132,20,8,173,168,129,238,206,182,236,245,131,61,62,127,174,47,128,26,117,
1149 16,34,28,169,51,207,60,211,96,124,133,160,224,31,254,240,7,153,110,52,116,
1150 212,81,71,165,167,167,203,173,235,52,234,32,68,120,135,56,178,114,7,195,
1151 137,138,197,241,141,140,140,172,173,173,245,242,228,140,2,161,239,32,164,
1152 231,200,60,150,82,127,175,163,56,194,145,189,208,209,80,108,181,11,31,97,
1153 43,5,66,43,170,187,187,187,40,53,102,208,146,207,17,142,5,8,17,44,124,232,
1154 161,135,12,0,24,28,28,124,240,193,7,183,218,106,43,153,104,52,196,142,174,
1155 186,234,42,51,105,198,2,132,8,246,124,242,201,39,190,60,68,65,154,206,206,
1156 206,152,216,24,142,205,75,250,17,129,240,198,27,111,148,217,130,28,132,
1157 201,201,201,34,23,242,29,132,167,157,118,154,204,99,53,53,148,15,221,44,
1158 211,209,34,23,149,198,91,10,132,86,148,149,31,168,31,35,16,162,157,119,
1159 222,121,229,202,149,114,55,78,165,165,165,237,191,255,254,114,245,168,106,
1160 209,162,69,114,31,46,141,17,8,209,17,71,28,225,229,196,47,2,123,37,117,
1161 37,89,101,89,105,197,105,43,147,86,102,150,101,242,187,161,197,253,243,
1162 248,35,2,225,77,55,221,36,179,133,37,8,79,63,253,116,153,199,106,82,143,
1163 79,88,76,10,132,86,84,120,130,16,207,239,241,199,31,215,158,10,7,15,111,
1164 189,245,214,196,137,19,229,234,81,213,223,254,246,55,177,23,77,99,7,66,
1165 184,181,112,225,66,47,78,94,255,64,127,68,126,132,225,173,161,197,213,197,
1166 114,245,230,26,17,8,111,190,249,102,153,45,44,65,120,198,25,103,200,60,
1167 86,147,2,161,197,164,64,104,69,133,39,8,17,83,120,205,4,83,252,171,175,
1168 190,90,174,24,78,152,248,41,83,166,76,158,60,121,130,111,183,149,30,115,
1169 204,49,141,141,155,189,150,115,236,64,136,238,189,247,94,47,175,125,25,
1170 59,16,254,227,31,255,144,217,130,25,132,251,236,179,79,74,74,138,200,133,
1171 124,7,225,153,103,158,41,243,88,77,10,132,22,147,2,161,21,21,182,32,220,
1172 121,231,157,75,74,74,180,29,249,248,200,224,164,73,147,30,123,236,177,53,
1173 107,214,204,155,55,239,184,227,142,147,177,94,117,192,1,7,100,102,102,138,
1174 29,9,141,41,8,79,62,249,100,47,15,245,143,29,8,111,185,229,22,153,45,44,
1175 65,120,214,89,103,201,60,86,147,2,161,197,164,64,104,69,133,18,8,191,255,
1176 254,251,185,115,231,222,116,211,77,190,248,106,164,73,72,72,16,59,170,174,
1177 174,246,209,189,187,241,198,27,197,155,71,6,7,7,223,126,251,237,237,182,
1178 219,78,174,240,172,221,119,223,61,50,50,82,236,72,104,68,32,60,251,236,
1179 179,23,46,92,200,190,46,189,244,82,25,229,85,187,238,186,171,151,71,24,
1180 199,14,132,183,222,122,171,204,22,228,32,76,77,77,21,185,144,239,32,164,
1181 153,100,30,171,73,129,208,98,82,32,180,162,66,6,132,7,29,116,16,158,16,
1182 124,162,44,159,125,246,217,14,59,236,32,87,120,214,130,5,11,196,142,162,
1183 163,163,101,212,112,90,190,124,185,200,130,86,172,88,177,203,46,187,200,
1184 21,158,53,117,234,84,125,46,52,34,16,82,3,20,10,245,247,247,191,246,218,
1185 107,190,92,200,172,169,241,248,84,104,40,129,144,185,11,160,2,93,158,164,
1186 77,116,2,0,194,115,206,57,71,230,177,154,20,8,45,38,5,66,43,42,100,64,120,
1187 240,193,7,119,118,202,167,33,27,27,27,47,188,240,66,185,194,179,62,248,
1188 224,3,145,126,254,252,249,50,106,56,193,48,145,5,197,196,196,224,237,201,
1189 21,158,53,121,242,100,92,58,153,199,41,63,64,40,50,102,102,102,30,112,192,
1190 1,114,133,103,185,125,120,81,136,77,13,221,53,90,145,149,82,148,178,34,
1191 97,69,102,121,38,191,235,155,235,229,234,205,53,34,16,222,118,219,109,50,
1192 91,160,64,184,205,54,219,48,51,16,175,105,117,43,166,14,98,155,35,2,97,
1193 90,90,154,200,133,124,7,225,185,231,158,43,243,88,77,10,132,22,147,2,161,
1194 21,21,146,32,164,80,216,101,185,194,179,94,125,245,85,145,254,227,143,63,
1195 150,81,94,133,55,214,218,218,42,178,160,216,216,216,61,246,216,67,174,243,
1196 172,73,147,38,125,255,253,247,50,143,83,126,131,176,170,170,234,132,19,
1197 78,144,43,60,107,195,134,13,34,189,91,13,121,151,131,131,120,207,49,177,
1198 49,160,66,44,202,117,155,107,68,32,188,253,246,219,101,54,135,227,185,231,
1199 158,11,0,8,57,182,175,190,250,74,102,243,170,0,128,240,188,243,206,147,
1200 121,172,38,5,66,139,73,129,208,138,10,73,16,146,241,254,251,239,151,43,
1201 60,235,249,231,159,23,233,223,124,243,77,25,53,156,244,30,161,143,32,196,
1202 113,193,227,148,121,156,242,27,132,245,245,245,190,188,251,102,197,138,
1203 21,34,189,23,117,117,117,225,209,122,111,119,191,65,72,197,6,41,8,247,221,
1204 119,95,189,63,237,59,8,207,63,255,124,153,199,106,82,32,180,152,20,8,173,
1205 168,144,4,33,197,249,215,191,254,37,87,120,150,6,66,92,67,25,53,156,22,
1206 47,94,44,178,32,31,65,8,18,190,254,250,107,153,199,41,191,65,216,216,216,
1207 120,250,233,167,203,21,158,53,46,32,212,191,224,45,12,65,120,193,5,23,200,
1208 60,86,147,2,161,197,164,64,104,69,133,12,8,15,57,228,16,191,65,232,187,
1209 71,248,223,255,254,87,100,65,209,209,209,190,92,35,68,159,125,246,153,204,
1210 227,84,72,130,240,206,59,239,148,217,28,14,155,205,22,110,32,188,240,194,
1211 11,101,30,171,73,129,208,98,82,32,180,162,20,8,209,156,57,115,100,212,112,
1212 58,242,200,35,53,195,157,153,153,121,253,245,215,95,230,131,12,175,115,
1213 179,2,8,123,123,123,135,109,119,191,65,104,183,219,131,23,132,25,25,25,
1214 50,219,72,64,120,209,69,23,201,60,86,147,2,161,197,164,64,104,69,41,16,
1215 162,245,235,215,203,168,225,52,113,226,196,123,238,185,71,187,101,6,156,
1216 244,248,32,67,245,142,8,132,87,95,125,117,80,120,132,119,221,117,151,204,
1217 22,150,32,252,227,31,255,40,243,88,77,10,132,22,147,2,161,21,21,146,32,
1218 236,239,239,31,17,8,171,170,170,124,255,238,4,44,188,247,222,123,155,154,
1219 154,252,174,52,43,128,144,186,45,77,31,230,171,35,35,2,225,221,119,223,
1220 45,179,57,28,47,188,240,66,184,129,240,226,139,47,150,121,172,38,5,66,139,
1221 73,129,208,138,10,73,16,226,168,97,151,229,10,207,210,64,8,56,127,251,219,
1222 223,202,88,223,116,234,169,167,206,155,55,143,218,19,91,24,145,252,6,97,
1223 109,109,237,201,39,159,44,87,120,150,47,32,116,244,246,56,10,86,59,154,
1224 107,229,162,59,249,13,194,23,95,124,113,155,109,182,145,43,134,83,0,64,
1225 248,202,43,175,200,60,195,201,0,66,95,94,152,32,116,201,37,151,200,60,86,
1226 147,2,161,197,164,64,104,69,133,36,8,249,113,227,141,55,202,21,158,133,
1227 227,34,210,83,252,187,238,186,75,198,250,172,169,83,167,94,117,213,85,250,
1228 143,21,248,40,191,65,88,86,86,118,236,177,199,202,21,158,181,106,213,42,
1229 145,222,155,90,202,29,57,139,28,133,107,29,253,125,50,198,164,17,129,240,
1230 158,123,238,145,217,172,7,66,223,239,10,54,128,112,215,93,119,149,43,134,
1231 211,165,151,94,42,243,88,77,10,132,22,147,2,161,21,21,146,32,108,104,104,
1232 56,247,220,115,229,10,207,154,62,125,186,72,143,22,45,90,228,187,237,214,
1233 52,97,194,132,221,118,219,237,227,143,63,102,143,114,67,62,200,111,16,166,
1234 167,167,239,183,223,126,114,133,103,105,239,216,244,40,54,88,153,230,200,
1235 94,48,20,106,179,88,150,241,155,107,68,32,188,239,190,251,100,54,135,227,
1236 165,151,94,10,0,8,39,78,156,248,143,127,252,99,150,59,189,245,214,91,250,
1237 239,50,210,208,50,207,112,50,128,144,198,149,43,134,211,101,151,93,38,243,
1238 88,77,10,132,22,147,2,161,21,21,122,32,164,44,31,125,244,209,78,59,237,
1239 36,87,120,22,230,82,236,8,85,87,87,159,120,226,137,114,197,8,133,209,191,
1240 232,162,139,150,47,95,206,1,203,205,121,149,127,32,4,75,79,61,245,148,47,
1241 215,222,180,119,108,122,212,64,223,144,47,40,64,88,176,202,209,245,235,
1242 235,114,244,178,56,8,189,104,231,157,119,214,191,94,199,111,16,250,248,
1243 120,12,186,252,242,203,101,30,171,73,129,208,98,82,32,180,162,66,6,132,
1244 144,239,233,167,159,198,28,159,125,246,217,83,166,76,145,177,94,53,111,
1245 222,60,185,39,231,139,199,102,207,158,237,135,83,168,105,143,61,246,152,
1246 49,99,134,47,44,28,17,8,15,59,236,176,255,254,247,191,184,62,199,28,115,
1247 140,47,31,187,64,222,63,82,63,164,230,26,73,65,17,202,113,10,221,104,68,
1248 32,188,255,254,251,101,54,231,205,41,150,2,225,107,175,189,38,87,12,39,
1249 3,8,125,121,97,130,208,159,254,244,39,153,199,106,82,32,180,152,20,8,173,
1250 168,144,1,161,31,90,179,102,141,220,147,83,56,148,87,94,121,165,143,223,
1251 99,242,164,107,174,185,38,63,63,95,123,221,179,91,141,8,132,35,213,164,
1252 73,147,244,47,68,117,175,226,13,142,194,53,61,185,43,218,50,151,59,106,
1253 75,134,66,175,155,111,249,142,8,132,15,60,240,128,204,230,188,57,197,82,
1254 32,100,130,34,87,12,39,3,8,247,220,115,79,185,98,56,93,113,197,21,50,143,
1255 213,164,64,104,49,41,16,142,191,240,123,42,42,42,228,203,249,157,74,79,
1256 79,223,184,113,99,102,102,166,92,118,170,113,243,47,170,143,151,198,20,
1257 132,120,141,16,75,238,201,37,16,117,206,57,231,200,20,126,9,142,30,126,
1258 248,225,223,124,243,141,118,97,207,172,49,5,225,177,199,30,235,229,195,
1259 188,82,112,186,191,175,182,182,54,38,38,70,198,184,211,136,64,248,224,131,
1260 15,202,108,206,155,83,44,5,194,153,51,103,202,21,195,201,111,16,50,133,
1261 146,121,172,38,5,66,139,73,129,208,18,170,169,169,193,70,172,245,42,96,
1262 41,83,143,171,198,20,132,199,29,119,92,117,117,181,220,147,75,208,43,53,
1263 53,21,146,109,161,95,184,253,246,219,191,247,222,123,158,88,56,166,32,188,
1264 233,166,155,240,242,229,158,188,170,169,169,41,54,54,86,46,184,147,2,225,
1265 94,123,237,37,87,12,167,63,255,249,207,50,207,184,139,94,167,15,237,77,
1266 67,32,52,68,18,148,198,73,10,132,150,16,116,73,76,76,148,196,115,167,236,
1267 236,108,239,103,246,2,166,177,3,33,156,195,112,139,111,205,155,85,82,82,
1268 114,247,221,119,251,114,187,141,23,237,176,195,14,239,190,251,110,79,143,
1269 155,83,142,99,7,66,240,243,229,151,95,138,19,221,56,124,81,81,81,145,158,
1270 245,203,47,191,124,252,241,199,114,193,37,124,196,150,150,22,113,156,35,
1271 2,225,191,254,245,47,145,11,77,159,62,221,82,32,124,227,141,55,228,138,
1272 225,100,0,225,222,123,239,45,87,12,167,191,252,229,47,50,207,248,138,145,
1273 91,18,189,217,5,96,183,161,44,78,166,87,10,184,20,8,173,34,12,156,132,158,
1274 73,17,17,17,13,13,13,94,78,235,5,82,99,7,194,93,118,217,133,194,202,221,
1275 184,19,0,251,226,139,47,246,217,103,31,153,193,47,77,155,54,109,206,156,
1276 57,114,139,58,141,29,8,143,58,234,40,54,46,246,178,98,197,138,221,119,223,
1277 157,146,122,18,180,152,58,117,170,92,112,233,176,195,14,211,110,58,29,17,
1278 8,31,122,232,33,145,11,89,13,132,179,102,205,146,43,134,147,1,132,190,119,
1279 128,171,174,186,74,230,25,119,181,183,56,178,23,26,201,103,8,125,110,230,
1280 103,74,129,145,2,161,133,148,153,153,41,200,103,80,108,108,172,39,63,41,
1281 240,26,35,16,98,220,159,121,230,153,97,239,15,34,65,97,97,225,101,151,93,
1282 230,187,77,55,139,125,197,197,25,103,223,99,4,194,201,147,39,207,155,55,
1283 79,155,196,0,66,223,223,115,166,9,118,198,199,199,139,45,140,8,132,15,63,
1284 252,176,200,133,94,123,237,53,75,129,112,246,236,217,114,197,112,10,5,16,
1285 162,178,116,35,249,244,161,174,64,38,83,26,15,41,16,90,72,141,141,141,27,
1286 55,110,148,244,211,105,68,15,134,143,181,198,2,132,123,238,185,231,171,
1287 175,190,234,251,93,178,173,173,173,47,190,248,226,72,95,192,166,215,223,
1288 254,246,183,246,246,118,185,57,167,70,29,132,19,38,76,192,23,196,133,149,
1289 59,112,106,203,65,216,210,210,226,31,8,95,127,253,245,208,0,33,139,114,
1290 197,112,178,22,8,59,155,29,185,203,140,252,19,97,211,10,71,207,112,247,
1291 82,41,141,165,20,8,45,36,24,147,156,156,44,233,231,82,126,126,62,241,50,
1292 133,5,52,186,32,156,52,105,210,117,215,93,23,29,29,221,219,219,43,119,224,
1293 155,72,191,105,211,166,107,174,185,198,191,59,104,118,221,117,87,189,81,
1294 70,163,11,194,93,118,217,229,241,199,31,231,8,13,116,223,114,16,50,9,8,
1295 13,16,190,245,214,91,114,197,112,50,128,208,151,247,248,8,89,11,132,3,253,
1296 142,178,120,35,2,69,168,74,85,119,202,140,175,20,8,173,165,154,154,154,
1297 245,235,215,75,6,174,93,139,225,168,172,172,148,235,172,161,17,129,16,203,
1298 59,205,41,192,179,219,110,187,237,177,199,30,123,239,189,247,254,251,239,
1299 127,232,161,135,94,122,233,165,211,167,79,47,43,43,219,146,155,128,218,
1300 218,218,94,121,229,21,223,239,167,215,235,157,119,222,209,83,106,68,32,
1301 4,69,20,10,218,137,114,113,0,251,236,179,207,129,7,30,120,248,225,135,95,
1302 127,253,245,159,126,250,41,126,155,91,7,119,203,65,72,145,253,3,225,140,
1303 25,51,2,0,66,118,49,107,214,172,34,15,210,63,67,242,246,219,111,203,60,
1304 195,201,0,66,250,143,92,49,156,172,5,66,212,82,239,200,253,201,72,65,98,
1305 186,54,59,57,161,20,120,41,16,90,75,80,33,53,53,85,98,112,237,218,244,244,
1306 116,75,185,131,104,68,32,60,228,144,67,126,249,229,23,10,2,209,163,162,
1307 162,146,146,146,178,178,178,202,203,203,71,247,146,103,100,100,36,88,245,
1308 221,202,11,225,137,234,237,242,136,64,120,206,57,231,172,94,189,154,114,
1309 109,220,184,49,38,38,38,37,37,37,39,39,167,186,186,122,216,198,10,121,16,
1310 114,108,62,190,116,219,111,16,30,112,192,1,114,197,112,178,28,8,113,10,
1311 75,19,140,32,172,76,149,107,149,198,79,10,132,150,19,206,132,19,130,67,
1312 70,182,169,169,201,34,55,139,106,26,41,8,181,151,110,143,157,168,162,198,
1313 198,198,7,31,124,208,247,239,23,34,188,55,253,197,215,17,129,80,255,210,
1314 237,17,105,28,65,56,115,230,76,5,194,241,87,103,155,17,132,234,102,81,11,
1315 72,129,208,114,194,194,138,219,71,19,18,18,2,64,145,145,42,96,32,28,24,
1316 24,248,194,55,225,55,139,44,175,188,242,202,212,169,83,229,190,135,211,
1317 118,219,109,167,127,71,129,149,65,184,219,110,187,225,79,139,45,40,16,30,
1318 120,224,129,114,197,112,178,34,8,81,121,198,175,20,172,43,80,87,7,173,32,
1319 5,66,43,10,79,5,119,208,96,140,44,162,128,129,144,29,249,232,225,189,248,
1320 226,139,34,75,79,79,207,11,47,188,224,227,91,176,145,254,189,166,86,6,225,
1321 46,187,236,50,111,222,60,241,206,29,191,65,248,198,27,111,132,6,8,15,58,
1322 232,32,185,98,56,89,20,132,29,205,142,188,95,134,40,184,105,165,163,71,
1323 93,29,180,132,20,8,173,40,24,80,91,91,235,251,227,4,129,84,32,65,56,121,
1324 242,100,185,33,175,154,174,251,132,97,101,101,165,239,167,206,222,123,239,
1325 61,153,45,80,32,220,180,105,211,243,207,63,255,228,147,79,222,126,251,237,
1326 80,234,89,223,4,221,33,65,116,116,52,189,130,250,244,15,132,111,190,249,
1327 166,239,25,3,0,194,247,223,127,95,230,25,78,6,16,30,124,240,193,114,197,
1328 112,178,40,8,135,174,20,58,95,52,83,30,235,240,240,213,73,165,0,75,129,
1329 208,162,26,233,227,4,1,83,32,65,184,243,206,59,203,13,121,21,190,142,204,
1330 227,212,157,119,222,41,87,12,167,151,94,122,73,230,9,20,8,81,119,119,119,
1331 90,90,90,73,73,137,92,246,89,212,100,74,74,10,136,154,52,105,146,60,142,
1332 225,164,7,225,172,89,179,44,5,194,207,63,255,92,230,25,78,6,16,210,169,
1333 228,138,225,100,81,16,162,150,58,117,179,168,165,164,64,168,52,50,5,18,
1334 132,62,62,23,129,137,151,121,156,154,51,103,142,143,15,23,62,254,248,227,
1335 50,79,0,65,8,204,202,203,203,253,115,247,219,218,218,146,146,146,124,63,
1336 247,171,7,225,236,217,179,45,5,66,146,201,60,195,201,0,194,67,15,61,84,
1337 174,24,78,214,5,225,224,128,163,185,92,254,86,178,128,20,8,149,70,166,64,
1338 130,208,199,71,167,13,32,92,187,118,173,143,32,212,127,192,61,48,32,108,
1339 104,104,136,141,141,29,254,147,76,158,85,86,86,22,0,16,54,53,53,201,108,
1340 78,141,5,8,231,205,155,39,243,12,39,3,8,15,59,236,48,185,98,56,209,81,101,
1341 30,37,37,175,82,32,84,26,153,2,9,66,31,175,6,25,64,24,23,23,231,35,8,111,
1342 191,253,118,153,39,32,32,236,239,239,143,143,143,111,110,110,150,203,126,
1343 169,183,183,119,151,93,118,145,199,49,156,244,32,244,253,57,66,106,207,
1344 128,234,177,0,225,194,133,11,101,158,225,100,0,161,239,15,212,223,120,227,
1345 141,50,143,146,146,87,41,16,42,141,76,1,3,33,216,56,238,184,227,228,134,
1346 188,202,0,194,180,180,52,31,65,168,255,74,81,0,64,88,83,83,99,126,233,154,
1347 31,242,253,110,17,61,8,95,124,241,69,31,65,56,121,242,100,195,215,19,199,
1348 2,132,171,87,175,150,121,134,147,1,132,187,237,182,155,92,49,156,238,190,
1349 251,110,153,71,73,201,171,20,8,149,70,166,64,130,240,130,11,46,144,27,242,
1350 42,195,205,50,235,214,173,243,17,132,79,63,253,180,204,51,246,32,36,125,
1351 81,81,81,109,109,173,92,222,2,157,112,194,9,242,56,134,147,254,195,188,
1352 207,60,243,140,143,79,110,28,112,192,1,134,79,54,142,5,8,113,142,101,158,
1353 225,4,8,181,71,69,33,244,180,105,211,228,138,225,244,223,255,254,87,228,
1354 82,82,242,46,5,66,165,145,41,96,32,196,115,186,241,198,27,229,134,188,234,
1355 201,39,159,148,121,156,154,59,119,174,143,32,156,61,123,182,204,19,16,16,
1356 230,230,230,106,223,215,221,18,93,118,217,101,242,56,134,211,205,55,223,
1357 44,243,56,28,184,191,19,39,78,148,43,188,234,180,211,78,51,220,180,60,22,
1358 32,44,40,40,240,209,67,221,115,207,61,181,207,102,49,147,240,253,227,204,
1359 31,125,244,145,200,165,164,228,93,10,132,74,35,83,192,64,8,57,158,123,238,
1360 57,185,33,175,186,252,242,203,101,30,167,174,188,242,74,185,98,56,45,88,
1361 176,64,230,25,123,16,194,245,252,252,124,191,107,67,175,71,30,121,68,30,
1362 199,112,58,239,188,243,68,22,246,126,213,85,87,201,216,225,116,237,181,
1363 215,210,202,34,163,208,88,128,176,186,186,26,87,79,102,243,42,92,192,149,
1364 43,87,138,92,137,137,137,59,238,184,163,92,49,156,86,173,90,37,114,41,41,
1365 121,151,2,161,210,200,20,48,16,162,249,243,231,251,242,114,25,44,227,178,
1366 101,203,234,234,234,106,106,106,190,248,226,11,31,61,6,220,163,228,228,
1367 100,185,167,177,7,33,245,150,146,146,50,42,143,135,126,249,229,151,242,
1368 56,134,211,62,251,236,179,110,221,186,202,202,202,168,168,40,223,111,182,
1369 124,233,165,151,12,23,50,199,2,132,141,141,141,103,156,113,134,204,230,
1370 85,180,20,78,127,69,69,5,236,124,226,137,39,124,244,35,39,77,154,68,127,
1371 144,59,83,82,242,42,5,66,165,145,41,144,32,140,139,139,219,99,143,61,228,
1372 182,188,106,215,93,119,61,243,204,51,79,59,237,52,223,47,32,5,248,165,219,
1373 253,253,253,217,217,217,134,155,80,252,83,97,97,161,239,95,158,58,224,128,
1374 3,78,62,249,100,223,95,75,54,117,234,212,141,27,55,202,61,185,52,22,32,
1375 100,78,240,239,127,255,91,102,27,78,83,166,76,57,229,148,83,254,240,135,
1376 63,248,238,14,94,126,249,229,150,125,43,133,146,213,164,64,168,52,50,5,
1377 18,132,56,1,199,31,127,188,220,214,104,107,75,62,195,228,247,169,209,81,
1378 249,254,84,91,91,219,95,255,250,87,121,40,163,45,96,99,254,4,230,88,128,
1379 16,177,89,223,39,46,35,21,135,49,210,54,82,10,91,41,16,42,141,76,129,4,
1380 33,122,226,137,39,124,188,197,99,68,218,102,155,109,230,206,157,171,55,
1381 148,1,0,97,70,70,198,168,220,44,131,115,249,225,135,31,238,176,195,14,242,
1382 104,70,79,84,139,254,253,171,154,198,8,132,16,253,226,139,47,150,57,71,
1383 85,103,156,113,134,213,190,104,173,100,101,41,16,42,141,76,1,6,97,77,77,
1384 205,201,39,159,44,55,55,122,58,246,216,99,245,223,96,66,99,13,66,210,23,
1385 23,23,215,215,215,203,229,45,16,32,204,201,201,185,239,190,251,124,188,
1386 57,214,119,93,121,229,149,110,81,61,70,32,68,84,251,17,71,28,33,51,143,
1387 146,192,249,252,249,243,149,59,168,228,187,20,8,149,70,166,0,131,16,37,
1388 39,39,251,126,73,204,23,77,158,60,121,193,130,5,6,67,57,214,32,68,85,85,
1389 85,153,153,153,91,110,160,169,210,172,172,44,254,254,229,47,127,25,209,
1390 183,136,189,8,166,158,122,234,169,158,238,46,25,59,16,162,85,171,86,249,
1391 254,174,156,97,197,1,60,245,212,83,204,21,228,214,149,148,124,144,2,161,
1392 210,200,20,120,16,98,212,190,255,254,251,195,15,63,92,110,116,203,116,208,
1393 65,7,125,251,237,183,114,211,58,5,0,132,189,189,189,113,113,113,94,156,
1394 194,129,129,1,170,183,171,171,139,191,94,182,159,155,155,43,190,77,200,
1395 223,107,174,185,198,143,15,28,154,117,210,73,39,1,105,177,125,179,198,20,
1396 132,61,61,61,31,125,244,145,239,183,243,120,209,14,59,236,96,183,219,13,
1397 111,3,80,82,26,86,10,132,74,35,83,224,65,136,196,201,64,28,32,185,93,127,
1398 117,238,185,231,70,69,69,185,117,23,2,0,66,132,83,152,144,144,64,29,202,
1399 101,167,88,172,172,172,76,74,74,98,21,164,140,141,141,229,47,191,43,42,
1400 42,26,27,27,13,79,50,180,182,182,198,196,196,104,145,96,245,173,183,222,
1401 218,66,143,249,236,179,207,78,79,79,247,82,162,49,5,33,162,6,160,187,239,
1402 79,58,122,210,243,207,63,191,37,47,52,87,10,91,41,16,42,141,76,227,2,66,
1403 161,246,246,246,89,179,102,225,26,142,244,62,17,210,31,121,228,145,239,
1404 190,251,46,190,130,39,115,31,24,16,162,194,194,194,154,154,26,178,163,238,
1405 238,110,16,24,25,25,9,6,138,139,139,155,155,155,177,227,112,154,31,16,46,
1406 63,63,63,58,58,58,43,43,171,174,174,78,192,27,103,177,168,168,8,58,138,
1407 77,9,1,69,242,226,26,238,177,199,30,62,62,99,39,68,226,131,15,62,120,246,
1408 236,217,195,194,99,172,65,40,68,251,226,26,30,118,216,97,59,238,184,227,
1409 136,46,127,146,254,138,43,174,72,73,73,49,76,26,148,148,124,148,2,161,210,
1410 200,132,173,153,63,127,254,115,190,9,110,141,250,179,92,181,181,181,255,
1411 251,223,255,30,124,240,193,211,79,63,125,202,148,41,210,22,186,19,107,73,
1412 115,223,125,247,125,251,237,183,184,98,50,191,7,181,180,180,188,253,246,
1413 219,242,184,135,211,55,223,124,35,179,141,92,80,39,53,53,181,186,186,154,
1414 67,194,118,231,229,229,177,107,79,88,133,220,16,58,51,51,83,220,113,202,
1415 15,79,55,67,178,133,248,248,248,215,94,123,13,36,28,116,208,65,94,174,29,
1416 178,234,232,163,143,190,229,150,91,40,47,148,149,249,189,10,36,203,146,
1417 15,39,187,221,158,150,150,38,179,249,165,134,134,134,31,127,252,241,222,
1418 123,239,253,195,31,254,48,117,234,84,121,208,238,52,109,218,180,139,46,
1419 186,232,177,199,30,251,225,135,31,70,229,118,92,165,176,149,2,161,210,136,
1420 229,116,102,124,149,204,51,218,194,151,130,136,24,232,21,43,86,188,249,
1421 230,155,79,61,245,212,191,254,245,175,59,238,184,227,161,135,30,122,250,
1422 233,167,49,241,235,214,173,219,180,105,19,105,124,127,116,79,30,177,111,
1423 146,121,252,82,83,83,83,76,76,76,66,66,2,80,244,197,137,97,50,129,207,23,
1424 21,21,5,183,188,239,26,199,145,141,195,78,182,63,119,238,220,103,158,121,
1425 230,158,123,238,185,225,134,27,110,188,241,198,71,31,125,116,198,140,25,
1426 184,107,73,73,73,21,21,21,184,95,35,42,133,179,208,62,73,102,216,50,117,
1427 118,118,226,55,83,222,37,75,150,188,241,198,27,15,63,252,240,237,183,223,
1428 126,221,117,215,81,28,112,251,254,251,239,47,90,180,168,160,160,0,106,26,
1429 206,51,43,41,249,33,5,66,165,80,144,180,193,46,201,88,75,138,195,195,171,
1430 131,130,128,13,63,175,185,185,217,237,53,75,77,24,122,112,30,23,23,87,84,
1431 84,132,179,53,162,107,96,162,54,52,201,216,32,148,44,128,75,50,86,73,105,
1432 148,164,64,168,164,20,80,181,181,181,101,102,102,226,167,226,147,193,182,
1433 13,27,54,128,55,80,103,184,215,17,47,16,175,168,176,176,48,37,37,5,94,214,
1434 215,215,3,0,254,146,88,221,21,169,164,52,186,82,32,84,82,10,156,240,255,
1435 240,237,90,91,91,197,34,108,19,87,1,137,140,136,136,16,119,205,0,63,104,
1436 199,34,130,130,141,141,141,154,203,72,250,146,146,18,210,139,69,37,37,165,
1437 81,145,2,161,146,82,128,52,48,48,80,94,94,238,233,94,146,238,238,110,48,
1438 89,85,85,85,81,81,129,131,136,59,232,214,243,35,50,49,49,113,84,222,89,
1439 170,164,164,36,164,64,168,164,20,32,225,8,70,69,69,109,249,7,40,106,106,
1440 106,138,139,139,213,165,50,37,165,209,146,2,161,146,82,32,4,183,160,215,
1441 168,0,172,183,183,55,47,47,79,93,41,84,82,26,45,41,16,42,41,5,66,240,47,
1442 55,55,215,203,251,213,124,87,127,127,127,90,90,154,118,161,81,73,73,105,
1443 11,165,64,168,164,20,8,1,194,210,210,210,81,121,207,14,155,194,35,212,127,
1444 85,88,73,73,105,75,164,64,168,164,20,8,225,198,21,21,21,141,214,123,118,
1445 216,84,93,93,157,92,80,82,82,218,50,41,16,42,41,5,66,125,125,125,41,41,
1446 41,163,8,194,178,178,50,185,160,164,164,180,101,82,32,84,82,10,132,240,
1447 8,115,115,115,183,252,150,81,33,5,66,37,165,81,148,2,161,146,82,32,52,48,
1448 48,144,159,159,63,42,215,8,217,20,76,53,124,131,66,73,73,201,111,41,16,
1449 42,41,5,66,131,131,131,5,5,5,163,117,215,104,70,70,198,136,94,58,170,164,
1450 164,228,69,10,132,74,74,129,16,32,44,46,46,30,149,183,163,117,117,117,101,
1451 102,102,170,175,46,40,41,141,150,20,8,149,148,2,164,182,182,182,232,232,
1452 232,45,127,16,30,207,18,249,242,253,38,37,37,37,95,164,64,168,164,20,32,
1453 225,20,110,218,180,41,61,61,93,46,251,165,246,246,246,168,168,40,117,94,
1454 84,73,105,20,165,64,168,164,20,56,117,118,118,198,198,198,226,26,202,229,
1455 17,10,148,166,164,164,212,214,214,242,67,70,41,41,41,109,177,20,8,149,148,
1456 2,42,241,61,66,63,94,144,6,252,202,203,203,11,10,10,212,91,70,149,148,70,
1457 87,10,132,74,74,1,21,60,107,104,104,72,72,72,24,41,11,203,202,202,112,7,
1458 213,73,81,37,165,81,151,2,161,146,210,152,11,248,245,247,247,247,246,246,
1459 106,119,184,52,54,54,194,194,230,230,102,226,69,140,39,145,183,171,171,
1460 75,124,188,215,239,115,170,74,74,74,94,164,64,168,164,52,230,106,106,106,
1461 202,204,204,76,76,76,204,206,206,214,92,58,88,152,145,145,65,124,69,69,
1462 133,91,28,130,64,188,198,77,155,54,37,39,39,87,86,86,142,214,235,217,148,
1463 148,148,12,82,32,84,82,26,91,1,176,148,148,148,181,46,149,148,148,136,120,
1464 225,38,66,184,252,252,252,152,152,152,248,248,120,126,55,52,52,64,202,170,
1465 170,42,146,197,198,198,70,70,70,22,23,23,227,17,146,88,228,82,82,82,26,
1466 117,41,16,42,41,141,173,122,122,122,18,18,18,36,6,215,174,45,42,42,146,
1467 43,92,26,24,24,104,110,110,6,129,185,185,185,16,113,253,250,245,56,142,
1468 165,165,165,248,145,234,169,121,37,165,0,72,129,80,73,105,108,37,222,50,
1469 186,110,221,58,40,8,17,189,127,71,16,248,225,8,202,5,37,37,165,128,72,129,
1470 80,73,105,204,37,78,129,22,20,20,224,249,121,63,201,169,64,168,164,20,120,
1471 41,16,42,41,89,72,10,132,74,110,85,92,92,76,199,136,113,41,45,45,109,216,
1472 251,141,149,124,151,2,161,82,56,42,58,58,250,243,207,63,159,49,99,198,139,
1473 47,190,248,241,199,31,47,90,180,168,186,186,90,174,27,87,41,16,42,153,149,
1474 157,157,125,198,25,103,76,157,58,117,138,75,123,239,189,247,71,31,125,36,
1475 87,43,109,177,198,13,132,221,221,221,211,166,77,219,201,165,157,119,222,
1476 121,247,221,119,223,103,159,125,14,62,248,224,99,143,61,246,204,51,207,
1477 252,231,63,255,137,133,42,43,43,211,38,62,252,120,254,249,231,101,6,157,
1478 254,241,143,127,136,4,150,82,79,79,207,198,141,27,239,189,247,222,63,252,
1479 225,15,135,31,126,248,126,251,237,39,142,182,182,182,86,166,80,114,170,
1480 190,190,126,223,125,247,21,149,163,233,176,195,14,243,126,45,205,63,181,
1481 180,180,204,156,57,147,62,182,195,14,59,76,154,52,105,27,167,248,49,121,
1482 242,100,44,203,237,183,223,158,153,153,169,159,104,115,12,242,128,116,250,
1483 237,111,127,59,42,31,145,112,43,5,66,79,58,250,232,163,101,3,184,180,199,
1484 30,123,124,250,233,167,114,245,40,233,164,147,78,146,91,119,106,215,93,
1485 119,165,99,28,112,192,1,71,29,117,212,105,167,157,118,253,245,215,211,127,
1486 242,243,243,3,249,114,159,230,230,230,191,255,253,239,19,38,76,248,205,
1487 230,218,126,251,237,127,252,241,199,241,186,157,184,174,174,238,143,127,
1488 252,163,172,38,157,222,125,247,93,153,34,168,52,110,32,236,234,234,218,
1489 106,171,173,100,147,122,214,254,251,239,255,244,211,79,87,86,86,146,5,11,
1490 245,228,147,79,202,21,58,209,75,196,54,253,16,219,172,169,169,1,183,6,109,
1491 97,247,162,116,15,63,252,48,230,85,30,162,78,236,78,38,82,114,138,17,101,
1492 174,40,108,220,168,124,186,79,47,236,215,165,151,94,42,119,224,65,59,238,
1493 184,227,91,111,189,69,243,137,44,28,131,92,161,211,94,123,237,165,61,2,
1494 49,82,185,237,108,250,185,145,2,161,39,97,10,100,3,184,196,12,230,131,15,
1495 62,144,171,71,73,204,114,228,214,61,107,151,93,118,185,245,214,91,243,242,
1496 242,100,30,191,132,133,145,205,191,185,12,247,9,51,58,112,9,228,142,127,
1497 243,27,144,204,196,90,46,252,230,55,135,28,114,72,66,66,194,184,176,144,
1498 78,139,147,42,143,67,167,55,222,120,67,166,8,42,89,29,132,136,169,16,221,
1499 174,179,179,115,44,64,136,165,187,246,218,107,153,238,25,36,208,235,183,
1500 150,44,89,194,40,149,199,183,185,20,8,13,98,68,109,189,245,214,178,118,
1501 92,26,117,16,86,87,87,95,112,193,5,230,105,181,89,83,167,78,157,59,119,
1502 174,200,53,234,32,196,165,144,61,76,167,23,95,124,81,174,86,32,244,44,235,
1503 128,16,209,145,46,191,252,242,45,57,187,131,79,41,155,95,39,124,44,253,
1504 54,91,90,90,174,187,238,58,205,78,238,188,243,206,223,127,255,61,166,233,
1505 146,75,46,17,49,232,176,195,14,107,111,111,151,25,2,40,5,194,209,145,239,
1506 32,68,140,1,113,113,120,212,65,136,125,60,229,148,83,228,134,116,42,46,
1507 46,150,41,252,210,244,233,211,39,78,156,40,183,229,20,179,200,227,142,59,
1508 238,152,99,142,25,117,71,39,216,197,204,64,214,145,78,163,14,194,165,75,
1509 151,238,180,211,78,114,235,195,233,172,179,206,18,179,236,198,198,70,230,
1510 224,6,157,124,242,201,229,229,229,98,179,35,149,126,58,175,233,223,255,
1511 254,183,92,173,64,232,89,150,2,33,218,113,199,29,55,108,216,32,179,141,
1512 92,221,221,221,114,67,58,29,122,232,161,85,85,85,34,1,61,240,211,79,63,
1513 61,232,160,131,14,60,240,64,104,119,194,9,39,204,154,53,75,188,162,111,
1514 211,166,77,87,92,113,5,198,132,85,8,124,138,44,129,20,195,243,175,127,253,
1515 171,28,18,58,205,153,51,71,166,8,42,89,11,132,204,179,68,211,202,101,151,
1516 182,217,102,27,12,89,95,95,159,239,32,108,110,110,78,79,79,95,191,126,253,
1517 34,167,86,173,90,149,151,151,103,254,150,233,72,65,88,88,88,24,23,23,183,
1518 108,217,178,5,11,22,252,252,243,207,9,9,9,110,237,245,99,143,61,102,40,
1519 29,137,229,58,147,196,253,96,36,192,143,228,128,221,30,39,106,109,109,197,
1520 74,26,132,163,204,170,222,222,222,152,152,152,200,200,72,50,186,77,38,182,
1521 80,86,86,182,102,205,154,159,126,250,137,221,49,14,69,164,16,229,90,190,
1522 124,57,229,74,77,77,53,172,210,139,29,101,101,101,109,220,184,113,241,226,
1523 197,162,86,51,51,51,181,19,137,190,136,196,28,42,133,101,95,217,217,217,
1524 180,169,239,32,164,116,184,98,81,81,81,20,225,151,95,126,161,20,44,186,
1525 173,43,131,72,131,215,37,55,173,211,249,231,159,255,248,227,143,155,45,
1526 236,182,219,110,203,100,92,228,109,115,39,243,78,169,91,170,133,3,163,99,
1527 80,147,116,12,183,239,212,30,17,8,217,81,124,124,252,138,21,43,22,46,92,
1528 24,17,17,65,205,123,122,227,182,104,101,189,68,163,48,119,36,23,117,69,
1529 109,231,231,231,235,207,161,209,202,73,73,73,52,196,234,213,171,105,8,25,
1530 235,78,117,117,117,76,67,215,174,93,203,97,208,238,235,214,173,43,42,42,
1531 242,126,58,142,54,165,153,216,47,181,193,174,105,241,17,93,241,165,155,
1532 49,120,87,174,92,73,125,82,3,162,147,251,14,66,138,79,253,211,10,28,45,
1533 245,70,233,124,127,59,157,91,16,238,187,239,190,102,163,132,152,239,82,
1534 195,50,167,75,184,74,137,137,137,162,213,24,110,84,157,219,1,50,44,8,245,
1535 162,191,49,66,197,192,161,92,252,192,104,184,237,249,212,149,232,0,122,
1536 137,131,100,85,116,116,52,134,84,180,160,72,239,86,88,197,228,228,100,234,
1537 159,49,78,175,206,205,205,117,187,47,202,37,134,131,94,114,221,230,194,
1538 139,101,131,152,11,250,3,86,142,70,25,187,171,236,254,201,90,32,196,139,
1539 162,247,100,100,100,48,37,151,81,46,189,255,254,251,61,61,61,190,128,144,
1540 89,252,59,239,188,131,197,161,251,238,190,251,238,59,59,181,235,174,187,
1541 50,144,46,190,248,98,134,189,76,231,112,48,216,72,121,200,33,135,200,13,
1542 233,132,131,255,229,151,95,210,135,100,82,231,125,134,215,95,127,61,19,
1543 180,189,246,218,11,247,14,247,98,218,180,105,252,62,234,168,163,94,122,
1544 233,37,205,66,97,217,231,207,159,127,229,149,87,26,74,55,123,246,108,226,
1545 145,118,153,29,83,130,201,251,199,63,254,33,182,201,214,56,78,14,152,227,
1546 196,64,99,62,12,157,239,254,251,239,63,252,240,195,153,27,106,250,221,239,
1547 126,247,246,219,111,83,222,59,239,188,115,207,61,247,252,207,127,254,131,
1548 57,166,140,114,181,78,28,222,140,25,51,200,190,219,110,187,137,195,190,
1549 236,178,203,68,95,164,239,2,3,198,57,133,66,251,236,179,207,45,183,220,
1550 98,54,184,140,162,185,115,231,158,122,234,169,251,237,183,31,148,210,106,
1551 149,197,115,206,57,199,199,139,246,204,160,79,63,253,116,14,149,99,96,95,
1552 228,125,232,161,135,240,174,100,29,233,100,6,33,163,247,214,91,111,165,
1553 174,180,236,148,130,69,142,150,85,50,145,7,81,231,212,158,220,180,75,59,
1554 236,176,131,24,225,127,251,219,223,204,167,76,1,60,25,233,0,88,70,131,206,
1555 60,243,204,138,138,10,177,101,68,74,166,198,7,31,124,48,199,204,129,209,
1556 49,56,182,189,247,222,251,184,227,142,123,253,245,215,53,35,200,49,124,
1557 241,197,23,88,58,185,3,157,46,185,228,18,86,9,84,12,217,173,236,13,52,141,
1558 205,102,163,107,81,70,42,153,109,178,113,170,235,236,179,207,254,236,179,
1559 207,12,29,3,255,64,54,179,78,140,20,118,253,224,131,15,146,107,168,93,119,
1560 217,133,217,58,149,32,0,207,52,241,186,235,174,227,32,57,96,186,4,105,158,
1561 121,230,25,141,253,154,48,202,175,188,242,202,241,199,31,79,175,32,25,135,
1562 33,186,40,189,133,65,7,71,101,58,157,64,224,221,119,223,77,45,209,76,236,
1563 84,212,6,191,57,36,218,218,151,43,14,84,20,253,153,193,75,193,69,95,165,
1564 194,193,137,47,32,4,66,79,61,245,212,17,71,28,65,46,246,203,209,138,122,
1565 163,215,205,155,55,207,203,12,79,19,71,46,183,174,19,123,161,171,48,168,
1566 229,178,75,119,220,113,135,30,177,24,174,71,30,121,132,38,166,98,69,171,
1567 81,105,84,29,199,207,216,209,15,16,6,194,39,159,124,34,183,162,19,71,203,
1568 136,6,255,250,43,133,152,130,171,174,186,138,58,215,122,62,63,88,188,237,
1569 182,219,152,37,200,68,78,81,192,71,31,125,84,116,0,189,56,126,26,235,140,
1570 51,206,16,91,160,5,41,38,6,65,179,69,154,176,6,88,179,35,143,60,146,195,
1571 166,8,162,2,169,121,28,80,208,174,47,44,221,21,123,56,52,30,54,215,231,
1572 159,127,46,83,56,69,79,166,107,105,27,20,93,136,109,138,145,91,80,80,32,
1573 211,141,183,44,7,66,38,146,204,95,48,205,50,202,165,153,51,103,210,204,
1574 222,65,40,208,114,226,137,39,154,183,172,105,202,148,41,140,109,49,199,
1575 124,247,221,119,61,165,196,50,98,56,152,133,145,12,210,188,252,242,203,
1576 94,182,73,98,220,74,198,42,137,41,23,189,193,108,88,137,17,18,215,8,5,87,
1577 24,39,196,200,20,155,139,248,155,110,186,137,93,147,88,136,98,202,117,46,
1578 109,189,245,214,255,247,127,255,71,31,21,27,193,4,112,192,208,81,172,213,
1579 235,217,103,159,53,31,63,21,133,187,240,240,195,15,227,112,203,40,167,216,
1580 26,36,214,59,52,240,149,189,123,58,84,196,42,140,172,91,31,72,19,19,115,
1581 72,44,51,184,68,70,179,129,67,12,21,13,132,24,133,143,63,254,152,1,236,
1582 246,0,136,220,110,187,237,152,155,123,154,141,34,122,14,163,78,102,112,
1583 9,83,34,216,131,65,49,87,14,238,53,171,56,6,185,172,19,70,86,92,35,164,
1584 173,103,205,154,53,117,234,84,185,194,36,142,237,152,99,142,193,90,209,
1585 51,105,74,183,199,143,136,71,24,154,161,99,109,170,72,93,252,206,201,39,
1586 158,232,37,49,224,164,50,53,28,66,98,185,78,39,140,148,249,154,40,197,132,
1587 250,228,61,247,220,115,101,148,75,244,1,208,171,89,58,198,32,254,28,67,
1588 192,211,97,32,218,8,107,174,101,161,153,152,59,98,100,189,28,57,67,3,63,
1589 195,173,123,33,68,23,210,250,179,94,160,197,208,75,145,30,132,212,112,92,
1590 92,28,195,208,203,222,193,9,179,46,239,51,54,142,80,102,208,233,127,255,
1591 251,31,185,64,20,61,77,70,57,197,100,66,43,62,29,6,4,122,217,251,69,23,
1592 93,148,147,147,35,246,126,195,13,55,120,73,201,20,10,47,156,100,204,71,
1593 159,123,238,57,115,193,133,72,137,1,193,140,104,227,142,14,201,196,90,174,
1594 214,233,158,123,238,49,155,5,178,235,167,17,20,132,185,254,239,127,255,
1595 123,79,7,198,97,252,191,255,247,255,180,75,152,195,94,35,132,178,223,126,
1596 251,173,167,97,139,136,103,12,254,240,195,15,102,175,58,240,178,22,8,177,
1597 236,52,6,107,237,118,187,140,114,9,20,13,11,194,188,188,60,166,63,50,214,
1598 179,182,221,118,91,236,23,233,1,161,167,70,66,24,104,184,66,95,252,215,
1599 191,254,229,169,47,234,197,188,143,97,70,185,204,230,94,47,1,66,60,81,195,
1600 160,50,139,105,193,63,255,249,79,38,239,206,194,185,7,33,229,197,28,136,
1601 197,167,159,126,218,19,8,61,9,63,70,203,174,23,77,243,230,155,111,138,253,
1602 226,112,156,118,218,105,114,133,103,81,171,180,154,151,73,183,254,230,183,
1603 97,165,7,225,87,95,125,181,227,142,59,202,21,30,52,121,242,228,39,158,120,
1604 194,147,133,165,81,110,188,241,70,153,212,165,237,183,223,94,56,118,215,
1605 92,115,141,185,27,48,43,103,149,119,16,226,156,185,189,49,216,32,236,26,
1606 237,2,8,229,178,7,13,129,176,175,55,117,217,167,135,29,176,183,140,242,
1607 32,142,22,23,71,59,135,230,22,132,248,187,134,171,212,66,244,228,67,14,
1608 57,196,109,183,167,206,181,25,122,68,68,4,236,145,43,60,139,189,204,159,
1609 63,95,100,97,82,229,118,78,99,16,182,123,205,154,53,34,139,89,179,103,207,
1610 166,35,201,164,195,73,15,66,236,6,216,150,43,60,139,65,234,253,242,191,
1611 23,16,226,235,80,94,25,229,20,100,21,78,21,30,30,189,66,198,122,16,99,10,
1612 22,138,185,23,211,20,25,235,78,199,30,123,44,32,164,51,227,180,13,219,193,
1613 72,128,85,116,30,187,71,16,226,138,201,95,155,11,183,91,123,124,118,221,
1614 186,117,190,84,224,95,254,242,23,97,145,134,5,225,194,133,11,113,94,101,
1615 172,103,225,32,46,95,190,92,100,25,71,89,20,132,47,188,240,130,140,114,
1616 137,152,97,65,232,189,123,233,133,99,78,87,243,5,132,76,226,112,231,101,
1617 148,87,49,44,151,46,93,234,11,8,139,138,138,232,235,114,217,171,48,10,204,
1618 152,196,44,210,12,66,164,175,195,103,158,121,198,19,8,169,88,236,190,92,
1619 216,92,48,198,45,230,255,250,215,191,50,83,67,56,10,230,150,114,171,163,
1620 143,62,90,27,87,102,185,53,172,12,81,183,123,215,64,88,89,89,137,147,33,
1621 99,189,138,250,95,182,108,153,216,151,65,244,156,59,238,184,67,166,211,
1622 233,195,15,63,100,45,238,242,229,38,225,15,177,202,11,8,241,233,175,190,
1623 250,106,25,165,211,62,251,236,35,127,185,68,237,225,42,185,221,148,94,67,
1624 32,108,46,253,219,31,79,247,210,39,53,177,205,199,30,123,76,116,12,183,
1625 32,68,123,238,185,167,252,101,146,167,137,157,118,94,203,124,109,194,147,
1626 78,62,249,100,113,126,5,38,153,143,28,83,43,127,233,116,243,205,55,235,
1627 79,253,105,162,56,76,74,100,34,157,24,5,83,166,76,145,11,58,105,32,228,
1628 0,216,166,47,245,198,228,0,75,162,63,197,103,144,23,16,126,241,197,23,6,
1629 16,254,249,207,127,6,132,45,45,45,84,130,140,242,42,246,254,223,255,254,
1630 151,189,248,2,66,182,140,59,37,163,188,10,222,172,95,191,158,205,122,2,
1631 33,189,197,237,240,231,120,196,132,143,233,62,80,247,165,2,105,136,5,11,
1632 22,144,101,88,16,98,13,100,212,112,186,242,202,43,221,246,135,64,202,162,
1633 32,196,248,202,40,151,134,5,33,131,193,108,49,201,197,76,220,220,185,153,
1634 134,108,220,184,113,229,202,149,255,254,247,191,221,26,232,71,30,121,4,
1635 255,134,238,136,9,147,81,46,225,132,225,122,46,94,188,216,220,111,158,123,
1636 238,57,14,131,174,64,23,49,175,61,241,196,19,95,121,229,149,182,182,182,
1637 85,171,86,153,225,138,223,147,155,155,123,160,233,154,252,5,23,92,32,28,
1638 29,183,32,212,203,19,8,169,85,140,44,131,217,108,77,166,78,157,202,100,
1639 150,25,153,217,123,184,248,226,139,25,30,8,34,202,40,151,24,204,180,133,
1640 249,170,27,18,231,135,205,162,212,28,134,76,228,18,254,104,118,118,118,
1641 70,70,134,217,46,107,32,252,244,211,79,205,46,2,245,140,159,106,54,19,76,
1642 87,197,238,12,98,152,129,13,153,72,39,218,232,189,247,222,243,114,70,215,
1643 11,8,65,190,249,206,23,14,140,146,154,189,207,255,252,231,63,236,133,191,
1644 110,193,112,234,169,167,178,42,41,49,97,83,196,162,195,15,52,246,70,97,
1645 109,49,22,134,30,69,107,138,179,193,110,65,120,217,101,151,209,243,33,189,
1646 92,214,233,156,115,206,161,151,178,71,115,163,211,63,217,32,190,166,185,
1647 206,197,21,104,243,16,195,141,96,178,72,174,59,239,188,83,70,185,4,213,
1648 128,196,235,175,191,46,151,93,186,240,194,11,245,231,252,53,113,84,244,
1649 58,153,72,167,247,223,127,159,233,227,126,251,237,39,151,93,210,64,88,94,
1650 94,126,212,81,71,201,88,151,216,59,117,126,219,109,183,201,101,151,126,
1651 255,251,223,123,105,113,47,32,156,59,119,174,1,39,52,10,77,19,23,23,103,
1652 182,33,15,63,252,48,158,19,45,43,151,93,98,224,183,183,183,127,251,237,
1653 183,79,60,241,132,140,210,9,164,145,241,205,55,223,36,47,220,149,177,46,
1654 49,90,225,22,85,97,56,153,132,33,125,252,241,199,177,18,158,64,136,149,
1655 163,200,216,31,185,236,18,25,197,92,144,206,140,167,46,99,93,98,52,145,
1656 235,186,235,174,147,203,46,221,123,239,189,236,200,59,8,49,68,134,238,74,
1657 99,125,252,241,199,249,249,249,102,36,211,34,91,248,184,218,150,203,138,
1658 32,196,200,222,125,247,221,50,202,165,97,79,141,38,37,37,153,79,160,189,
1659 244,210,75,172,50,95,31,34,37,36,99,21,61,192,237,93,163,140,249,161,163,
1660 116,56,32,162,140,114,233,204,51,207,164,19,208,114,230,139,67,247,221,
1661 119,31,7,73,46,102,124,102,16,10,51,205,136,154,61,123,182,121,45,150,189,
1662 161,161,225,236,179,207,150,203,46,209,129,196,115,66,126,131,240,152,99,
1663 142,193,177,75,73,73,49,91,49,120,195,144,131,118,102,74,225,19,112,60,
1664 77,77,77,199,29,119,156,140,114,9,191,129,82,208,173,229,178,78,158,110,
1665 142,165,198,204,187,56,225,132,19,42,42,42,216,139,217,198,105,32,4,42,
1666 230,186,18,119,18,153,125,47,28,125,183,22,22,125,243,205,55,110,39,197,
1667 147,39,79,134,52,158,110,183,241,2,194,210,210,82,195,156,151,254,140,77,
1668 36,23,46,166,225,152,177,110,194,11,113,123,146,249,255,254,239,255,134,
1669 118,214,214,240,203,199,207,238,60,117,51,159,3,209,169,88,137,45,51,115,
1670 75,92,86,116,11,66,113,162,56,53,53,213,140,180,167,158,122,138,254,64,
1671 133,152,199,203,131,15,62,200,6,241,134,205,83,19,236,50,171,206,59,239,
1672 60,185,236,18,181,33,110,217,48,220,75,66,109,136,231,35,89,43,163,92,162,
1673 147,139,107,96,6,193,117,24,41,19,233,36,158,82,48,123,93,26,8,25,251,230,
1674 98,206,152,49,131,58,103,210,38,151,93,162,31,98,142,157,59,116,35,47,32,
1675 132,79,236,81,70,57,37,78,141,50,87,54,119,45,241,202,27,253,3,127,154,
1676 214,174,93,203,42,12,133,92,214,137,189,107,103,188,205,19,208,93,119,221,
1677 85,84,133,249,156,211,21,87,92,193,80,245,4,66,142,144,92,87,95,125,181,
1678 161,91,210,70,76,83,88,133,87,32,163,116,154,57,115,38,253,4,252,203,101,
1679 151,206,63,255,124,198,172,119,16,206,159,63,223,176,47,156,105,113,163,
1680 34,230,72,70,185,132,201,26,247,187,102,172,5,66,134,31,189,132,249,157,
1681 249,204,12,240,160,207,121,1,33,238,157,185,59,138,11,24,230,201,23,41,
1682 191,254,250,107,86,13,11,66,243,236,158,206,205,68,137,121,153,249,138,
1683 200,13,55,220,64,185,200,229,5,132,244,45,243,241,80,112,12,43,76,162,147,
1684 201,40,157,196,189,206,126,131,144,254,202,78,233,106,230,203,24,56,40,
1685 67,133,116,56,112,145,101,148,75,228,2,3,200,224,164,82,46,81,117,63,254,
1686 248,163,140,210,201,112,207,152,38,183,32,60,233,164,147,24,246,160,11,
1687 128,201,40,151,4,8,49,229,127,252,227,31,101,148,78,140,91,182,105,190,
1688 30,76,1,161,130,216,163,65,204,51,220,218,56,68,137,40,254,107,175,189,
1689 102,118,20,56,6,153,72,39,1,66,26,197,188,65,38,236,88,204,231,159,127,
1690 158,190,205,102,53,49,137,166,247,178,65,183,182,131,233,252,208,206,170,
1691 139,254,247,217,71,147,77,87,142,233,45,172,196,33,51,87,160,184,142,235,
1692 22,132,164,167,246,112,208,205,151,162,95,125,245,85,86,45,90,180,200,124,
1693 90,130,227,100,131,95,125,245,149,121,95,226,228,27,61,92,46,187,132,117,
1694 22,171,46,184,224,2,25,229,18,94,56,59,98,6,38,107,193,37,42,193,237,41,
1695 116,79,32,20,103,137,152,128,202,101,151,52,16,174,90,181,74,70,233,196,
1696 42,246,206,4,90,46,235,180,112,225,66,231,14,221,200,109,39,161,66,56,96,
1697 198,175,92,118,233,166,155,110,130,181,180,130,217,148,125,247,221,119,
1698 108,13,152,81,94,25,229,210,188,121,243,88,229,22,132,71,28,113,132,86,
1699 51,102,187,196,160,16,51,45,92,40,25,229,18,137,153,83,122,2,161,48,131,
1700 56,199,134,131,225,176,167,79,159,206,42,183,99,249,157,119,222,161,2,127,
1701 248,225,7,185,236,210,177,199,30,203,176,245,14,194,183,222,122,203,176,
1702 47,220,134,244,244,116,86,153,155,152,225,159,149,149,197,170,113,148,181,
1703 64,136,48,205,230,137,42,41,105,203,62,175,207,17,126,255,253,247,230,49,
1704 255,165,115,42,196,124,92,46,187,36,252,116,86,13,11,194,203,46,187,76,
1705 70,185,132,105,134,88,100,52,115,229,242,203,47,199,187,34,151,23,16,82,
1706 10,230,248,50,202,37,1,194,150,150,22,183,32,204,118,62,230,229,5,132,7,
1707 31,124,48,174,198,71,31,125,228,22,132,167,159,126,186,39,16,210,5,135,
1708 10,233,112,152,157,69,122,57,211,118,186,187,153,145,98,36,227,82,200,101,
1709 157,180,43,4,6,249,7,194,206,206,206,115,206,57,71,70,233,180,124,249,114,
1710 236,136,217,35,220,101,151,93,196,148,217,173,222,125,247,93,47,119,120,
1711 226,111,49,193,55,220,143,238,5,132,149,149,149,230,115,77,244,13,188,141,
1712 5,11,22,220,185,185,240,15,196,85,16,179,199,143,112,209,196,238,240,186,
1713 204,181,244,192,3,15,80,88,188,70,179,71,40,30,64,116,11,66,182,233,9,132,
1714 204,244,89,181,116,233,82,115,203,222,125,247,221,108,240,237,183,223,54,
1715 239,235,219,111,191,165,111,83,69,114,217,37,104,42,110,118,48,51,18,139,
1716 9,195,232,216,212,192,45,183,220,114,221,117,215,221,113,199,29,252,126,
1717 233,165,151,24,65,67,5,222,92,158,64,24,19,19,195,90,47,32,196,56,200,40,
1718 157,152,58,211,127,204,119,27,32,106,192,185,67,55,114,11,194,61,157,143,
1719 130,200,5,157,48,71,128,208,237,35,170,56,145,108,205,45,8,63,249,228,19,
1720 86,209,166,230,74,62,234,168,163,52,16,154,31,235,218,109,183,221,232,222,
1721 116,164,35,143,60,82,70,185,196,164,144,177,239,9,132,226,66,224,237,183,
1722 223,110,6,33,179,34,86,49,127,149,81,58,121,2,33,227,14,243,232,29,132,
1723 207,61,247,156,92,118,137,161,151,156,156,204,42,179,147,195,6,153,45,177,
1724 106,28,101,57,16,186,213,180,105,211,34,34,34,176,230,94,64,136,17,49,156,
1725 184,64,248,245,212,190,217,117,0,60,140,19,114,13,11,66,243,89,126,1,66,
1726 183,179,102,204,156,56,141,233,5,132,140,28,179,151,233,29,132,226,194,
1727 155,91,16,82,51,204,121,33,37,68,97,215,110,65,248,135,63,252,193,19,8,
1728 241,246,134,10,233,14,132,224,19,16,82,63,230,102,2,132,108,208,237,237,
1729 39,226,94,0,179,252,3,33,150,209,108,254,16,246,2,240,83,105,114,217,37,
1730 44,251,202,149,43,229,46,77,162,230,63,251,236,51,115,73,245,58,244,208,
1731 67,33,4,227,95,100,241,2,66,26,203,237,137,175,227,142,59,14,143,89,248,
1732 127,102,153,159,91,64,79,63,253,180,88,139,137,52,119,27,172,48,133,221,
1733 123,239,189,205,171,104,2,114,141,20,132,51,102,204,240,4,66,40,197,6,177,
1734 236,102,27,77,161,126,254,249,103,243,13,56,76,91,133,131,229,22,57,116,
1735 48,124,14,90,57,53,53,149,89,63,221,102,168,156,30,228,55,8,153,103,200,
1736 40,157,152,29,210,243,221,222,9,137,153,118,238,208,141,60,157,54,112,43,
1737 38,7,116,42,183,70,201,11,8,197,101,57,64,104,30,17,199,28,115,140,184,
1738 171,28,49,4,100,172,75,164,39,1,248,49,183,233,126,251,237,151,151,151,
1739 231,9,132,226,130,133,91,16,98,61,88,229,246,50,135,0,225,138,21,43,152,
1740 208,8,177,119,132,63,58,44,8,31,122,232,33,185,236,210,148,41,83,146,146,
1741 146,18,19,19,205,231,33,0,188,240,116,199,81,193,1,66,58,52,99,201,59,8,
1742 89,203,54,53,181,182,182,130,150,57,115,230,28,113,196,17,230,190,72,151,
1743 194,28,144,107,88,16,98,209,228,22,187,186,152,96,210,252,76,114,153,222,
1744 154,161,139,56,78,6,51,185,188,131,208,124,253,217,59,8,49,34,100,116,11,
1745 66,34,245,147,107,183,32,164,128,158,64,184,255,254,251,139,140,102,60,
1746 96,124,41,236,224,224,160,44,188,83,148,174,162,162,130,9,56,99,192,108,
1747 43,209,99,143,61,38,54,104,144,127,32,164,17,221,130,208,147,152,117,98,
1748 223,229,46,221,73,0,128,221,121,233,123,76,155,180,19,53,94,64,200,90,122,
1749 163,219,74,160,164,120,78,244,19,58,140,216,142,38,243,249,67,164,205,30,
1750 220,130,208,139,232,102,228,26,41,8,95,123,237,53,79,32,252,231,63,255,
1751 201,6,241,57,100,123,119,117,37,36,36,48,22,138,139,139,241,162,204,46,
1752 56,154,60,121,50,19,35,42,138,13,154,247,133,168,162,227,143,63,254,173,
1753 183,222,98,74,42,220,98,79,26,93,16,122,145,188,40,235,78,190,131,16,195,
1754 130,247,79,137,204,15,61,35,47,32,20,199,12,8,205,54,132,89,148,23,16,122,
1755 17,137,115,114,114,104,47,183,32,20,131,194,45,8,197,93,20,94,64,136,176,
1756 129,6,97,22,188,131,16,43,39,250,143,16,99,156,186,122,254,249,231,221,
1757 78,67,241,182,69,19,143,163,172,14,66,134,25,243,110,241,116,179,119,16,
1758 106,98,56,253,242,203,47,143,60,242,8,61,85,166,48,201,119,16,106,162,159,
1759 209,198,151,95,126,185,151,211,107,1,6,33,21,248,204,51,207,12,29,156,75,
1760 110,65,8,111,60,129,80,187,70,104,62,243,35,64,40,214,34,122,255,154,53,
1761 107,48,175,108,205,140,52,77,227,11,66,188,147,31,127,252,81,238,210,179,
1762 168,207,123,239,189,215,203,189,233,116,9,218,130,148,222,65,200,28,220,
1763 173,225,22,218,97,135,29,152,48,25,78,213,186,189,228,137,129,16,107,71,
1764 10,194,43,175,188,146,92,94,64,72,73,205,214,86,92,35,116,11,194,219,110,
1765 187,77,28,137,16,77,67,159,191,230,154,107,204,119,51,105,98,132,126,241,
1766 197,23,204,232,217,215,141,55,222,232,118,102,32,68,223,94,180,104,17,93,
1767 81,110,221,164,128,129,80,92,10,117,43,95,64,200,184,99,164,47,88,176,0,
1768 30,108,9,8,169,58,25,229,18,206,150,54,232,70,4,66,58,51,221,0,163,234,
1769 22,132,226,198,64,51,8,89,196,143,103,149,23,16,58,143,197,141,188,131,
1770 80,19,201,240,155,57,42,183,179,40,33,5,66,35,8,177,149,135,31,126,56,38,
1771 24,248,93,123,237,181,143,62,250,40,8,20,143,160,162,97,65,72,191,140,141,
1772 141,61,251,236,179,169,89,239,148,213,64,200,252,139,62,45,99,117,210,131,
1773 144,182,164,187,224,60,153,207,197,25,116,234,169,167,6,18,132,24,29,113,
1774 102,67,147,91,16,158,112,194,9,158,64,184,247,222,123,139,140,102,155,72,
1775 181,104,147,83,14,224,134,27,110,216,109,183,221,134,157,187,140,47,8,97,
1776 143,48,64,195,10,95,237,235,175,191,118,123,225,71,72,156,77,242,14,66,
1777 68,21,185,125,154,80,136,62,64,65,244,175,33,118,123,54,85,24,35,52,82,
1778 16,94,116,209,69,228,242,14,66,243,237,148,244,25,79,32,196,96,137,35,161,
1779 195,252,244,211,79,52,16,115,11,239,135,180,253,246,219,99,233,146,146,
1780 146,104,44,134,170,151,215,38,176,29,42,220,211,201,115,20,48,16,222,117,
1781 215,93,206,29,186,145,91,16,30,124,240,193,204,141,168,109,198,224,3,15,
1782 60,176,106,213,42,250,173,72,191,37,32,52,60,149,136,78,60,241,68,255,64,
1783 72,51,165,167,167,123,2,161,56,119,125,235,173,183,26,14,134,69,155,205,
1784 198,170,177,0,33,83,231,175,190,250,234,232,163,143,118,251,12,168,94,10,
1785 132,70,171,10,15,162,162,162,168,125,33,192,38,83,59,53,44,8,233,124,134,
1786 27,109,216,5,0,51,179,1,163,252,218,107,175,145,5,67,6,119,101,172,78,26,
1787 8,113,25,207,58,235,44,67,7,162,105,233,4,230,46,206,104,9,36,8,41,133,
1788 184,214,173,201,45,8,143,63,254,120,79,32,36,70,100,52,119,86,160,78,229,
1789 208,4,32,129,49,105,40,14,25,177,11,114,65,39,79,39,157,70,23,132,107,215,
1790 174,165,68,8,51,100,144,161,207,104,98,47,212,128,65,155,54,109,250,243,
1791 159,255,236,118,126,35,238,228,28,22,132,136,86,19,243,36,79,206,16,19,
1792 136,117,235,214,137,3,187,236,178,203,204,29,67,156,158,66,110,65,248,175,
1793 127,253,203,83,97,137,36,151,23,16,166,164,164,152,75,199,238,88,229,22,
1794 132,55,223,124,179,56,146,55,223,124,211,80,28,22,15,60,240,64,243,211,
1795 102,184,53,76,41,216,81,123,123,123,101,101,37,7,243,225,135,31,30,114,
1796 200,33,230,230,22,226,120,94,127,253,117,14,64,236,72,175,209,5,225,251,
1797 239,191,47,170,72,212,149,94,162,222,220,202,45,8,191,251,238,59,178,12,
1798 153,36,147,81,98,107,126,131,208,60,232,24,17,94,64,72,229,111,220,184,
1799 145,35,113,43,14,204,19,8,197,105,18,243,59,7,88,20,103,35,198,2,132,255,
1800 249,207,127,12,187,99,78,118,220,113,199,153,207,168,225,206,138,27,131,
1801 199,81,150,3,161,151,26,161,177,189,128,144,65,200,196,77,70,185,180,223,
1802 126,251,49,87,165,59,202,101,151,24,213,2,33,158,154,83,3,33,189,214,112,
1803 156,12,191,183,222,122,11,110,153,79,58,49,161,11,36,8,201,101,56,17,225,
1804 22,132,199,30,123,44,85,135,221,247,2,66,243,228,84,128,16,235,118,249,
1805 229,151,203,40,151,14,56,224,0,44,251,130,5,11,228,178,78,250,15,41,232,
1806 53,186,32,100,182,196,54,151,45,91,118,207,230,122,232,161,135,196,157,
1807 105,6,49,158,103,205,154,5,171,12,162,207,224,196,92,105,122,67,58,18,103,
1808 29,125,1,161,80,90,90,26,54,197,211,187,172,232,15,24,62,146,185,125,145,
1809 166,0,97,122,69,250,243,51,158,55,175,21,72,46,46,46,134,136,178,156,46,
1810 137,27,190,188,131,208,92,237,96,155,85,110,65,136,223,207,6,243,242,242,
1811 204,190,242,225,135,31,206,216,52,223,40,43,174,17,82,252,142,142,14,90,
1812 51,33,33,33,35,35,131,201,19,123,49,119,69,161,19,78,56,193,124,233,1,141,
1813 46,8,49,238,20,19,63,233,145,71,30,145,245,229,146,120,254,199,173,220,
1814 130,16,170,121,154,96,109,9,8,205,183,141,120,7,225,238,187,239,46,190,
1815 76,178,124,249,242,251,55,215,255,251,127,255,143,206,236,29,132,230,71,
1816 114,89,124,246,217,103,89,229,5,132,216,37,187,221,254,196,19,79,80,76,
1817 77,140,11,239,32,164,63,24,30,102,99,95,140,169,186,186,58,243,96,167,31,
1818 138,17,61,142,10,29,16,174,95,191,222,252,28,33,93,132,182,188,245,214,
1819 91,229,178,75,128,80,188,68,131,230,116,107,106,181,129,106,62,213,115,
1820 212,81,71,193,27,186,157,121,106,163,189,180,34,96,32,20,47,77,213,228,
1821 22,132,71,31,125,244,176,32,52,223,230,32,64,8,39,204,247,220,62,252,240,
1822 195,12,99,183,32,196,88,139,13,26,52,186,32,20,157,196,124,219,58,150,197,
1823 237,91,214,232,3,110,239,113,47,119,126,86,240,243,207,63,55,159,63,196,
1824 185,39,151,239,32,68,180,44,224,113,251,17,124,134,186,152,33,225,128,154,
1825 59,134,0,225,146,180,37,15,62,247,160,121,45,51,107,214,98,1,205,221,251,
1826 218,107,175,101,149,23,16,50,45,48,143,50,1,194,37,75,150,152,65,72,191,
1827 101,131,56,64,230,198,162,2,233,69,230,7,234,233,57,226,230,73,80,193,102,
1828 233,24,8,60,16,3,80,111,185,229,22,115,137,240,132,12,143,169,8,141,5,8,
1829 127,250,233,39,243,197,96,204,136,115,135,110,20,72,16,154,15,204,59,8,
1830 137,17,245,102,126,56,146,85,217,217,217,222,65,104,54,74,44,138,155,12,
1831 230,204,153,35,163,116,18,32,76,76,76,220,119,223,125,233,69,154,176,123,
1832 69,69,69,222,65,248,225,135,31,26,246,69,63,249,234,171,175,88,117,140,
1833 233,129,122,134,173,184,11,100,28,21,58,32,92,184,112,161,249,226,243,103,
1834 159,125,198,170,7,30,120,64,46,187,196,174,133,245,97,134,226,246,181,138,
1835 26,8,13,239,203,64,23,92,112,1,182,27,11,110,238,169,56,254,190,128,144,
1836 181,50,202,37,239,32,196,210,145,209,111,143,240,200,35,143,28,22,132,102,
1837 18,8,16,82,63,230,27,189,24,54,216,5,183,32,100,230,33,54,104,144,127,32,
1838 244,244,28,161,232,36,211,167,79,151,203,46,97,217,221,62,62,193,120,54,
1839 219,14,36,64,200,32,116,123,219,2,46,142,23,16,82,57,230,171,203,17,17,
1840 17,228,98,242,100,238,219,180,47,251,114,107,25,53,16,62,252,226,195,230,
1841 243,171,226,225,138,184,184,56,51,8,135,125,124,34,41,41,201,188,59,1,194,
1842 197,139,23,155,65,120,205,53,215,176,193,247,222,123,207,124,24,226,229,
1843 171,120,180,114,217,37,12,220,55,223,124,195,42,243,227,52,226,200,217,
1844 26,29,85,70,185,164,255,26,154,38,191,65,232,246,57,66,1,194,21,43,86,152,
1845 221,244,145,62,62,49,186,32,228,192,88,5,8,205,7,166,7,161,249,57,66,13,
1846 132,76,226,101,148,75,251,239,191,191,151,199,39,4,8,153,54,25,14,134,69,
1847 209,70,110,159,9,22,32,100,22,110,184,85,10,46,98,30,189,131,144,62,38,
1848 151,93,98,246,147,144,144,192,42,243,165,40,200,202,192,97,213,56,42,116,
1849 64,200,96,48,187,53,68,178,10,163,32,151,93,98,215,52,21,171,240,120,204,
1850 147,92,164,129,208,124,155,223,197,23,95,12,177,176,131,230,71,148,152,
1851 236,12,11,66,70,142,249,5,114,222,65,8,45,200,104,6,33,104,17,183,252,104,
1852 114,11,66,98,134,5,161,153,82,2,132,116,119,179,185,20,51,59,102,30,230,
1853 50,222,115,207,61,98,131,6,249,7,66,14,219,237,149,72,209,73,102,207,158,
1854 45,151,93,194,178,184,61,199,130,21,99,124,202,68,58,81,39,172,101,168,
1855 251,1,66,86,153,31,10,20,247,136,82,63,134,107,213,40,35,35,131,85,110,
1856 59,134,6,194,199,94,123,108,219,73,198,25,137,48,85,32,205,12,66,76,48,
1857 171,188,131,80,46,235,36,64,72,243,153,79,205,93,125,245,213,108,208,124,
1858 129,16,137,215,199,152,31,129,133,70,226,76,227,255,251,127,255,79,70,185,
1859 36,188,13,42,217,124,211,41,24,54,163,197,111,16,46,95,190,92,70,233,36,
1860 64,184,102,205,26,243,117,77,76,188,115,135,110,52,82,16,178,11,243,139,
1861 145,145,23,16,126,255,253,247,172,234,233,233,49,223,72,169,7,161,249,149,
1862 114,26,8,25,245,50,202,37,198,56,94,154,119,16,98,64,12,7,195,34,253,132,
1863 85,76,23,100,148,78,2,132,233,233,233,6,67,71,21,85,86,86,122,7,33,157,
1864 86,46,187,4,237,196,155,101,204,22,21,70,138,119,69,141,163,66,28,132,226,
1865 5,137,143,62,250,168,92,118,137,93,139,219,165,154,154,154,220,222,209,
1866 46,230,239,200,188,150,177,74,46,32,97,30,222,71,29,117,212,176,32,164,
1867 20,230,247,31,34,24,198,102,205,14,16,54,26,118,146,209,45,8,197,27,146,
1868 52,185,5,225,225,135,31,62,186,32,252,244,211,79,177,11,230,87,78,32,241,
1869 68,182,89,110,65,8,108,42,42,42,0,33,243,89,25,229,146,0,33,25,111,112,
1870 247,229,54,241,106,208,87,95,125,85,46,187,68,113,4,111,204,114,123,254,
1871 83,204,67,113,34,205,61,7,51,68,165,121,1,97,115,115,179,185,111,8,183,
1872 9,75,103,56,109,78,17,240,173,89,101,190,133,29,105,32,124,246,221,103,
1873 119,152,98,188,88,11,96,88,203,184,48,131,80,24,29,255,64,136,67,111,6,
1874 225,223,254,246,55,54,56,107,214,44,51,8,197,123,77,241,42,228,178,75,212,
1875 170,120,211,144,249,101,34,79,60,241,4,253,4,3,109,112,110,24,125,110,13,
1876 159,39,16,138,230,54,251,223,26,8,211,210,210,204,198,68,216,113,24,105,
1877 190,222,41,192,224,86,35,5,33,98,71,230,190,45,222,53,248,167,63,253,201,
1878 220,220,98,174,6,8,205,247,52,232,65,104,30,239,16,93,228,53,159,231,167,
1879 187,122,121,197,154,40,175,153,202,44,138,23,248,101,101,101,153,143,243,
1880 229,151,95,198,242,36,39,39,227,2,202,40,167,56,72,97,25,188,128,144,57,
1881 144,92,118,9,218,209,27,89,101,158,235,51,107,244,242,66,168,192,40,116,
1882 64,184,100,201,18,243,188,158,246,96,94,111,30,189,180,186,56,61,2,123,
1883 220,190,240,158,173,177,59,18,208,123,100,148,75,39,156,112,2,152,164,235,
1884 152,175,17,2,33,188,58,114,121,1,33,35,138,185,170,121,45,123,100,158,69,
1885 39,147,203,46,129,70,198,51,25,221,130,80,92,233,212,228,22,132,135,30,
1886 122,168,223,32,196,124,155,115,49,221,99,24,207,156,57,83,46,235,228,9,
1887 132,96,195,188,11,6,54,51,92,106,210,108,226,53,16,2,9,115,70,124,65,240,
1888 105,190,212,122,228,145,71,106,15,219,24,228,214,32,222,122,235,173,107,
1889 215,174,189,233,166,155,204,118,159,118,39,151,23,16,118,119,119,155,31,
1890 156,160,78,176,29,120,84,6,178,146,69,92,35,188,227,142,59,204,77,47,222,
1891 68,186,56,117,241,27,223,190,177,219,158,70,247,5,56,209,135,231,204,153,
1892 131,221,151,81,46,137,19,140,254,129,144,121,140,185,3,139,82,211,63,205,
1893 117,254,222,123,239,209,183,205,231,181,0,225,151,206,23,25,126,98,250,
1894 228,250,205,55,223,220,222,222,142,63,103,168,249,105,211,166,37,38,38,
1895 146,197,32,138,233,118,86,250,216,99,143,209,220,230,19,48,26,8,233,246,
1896 230,89,41,185,104,35,186,138,161,119,97,118,197,231,50,220,202,15,16,50,
1897 5,55,159,0,184,239,190,251,40,142,25,21,76,62,68,23,165,197,25,152,50,214,
1898 37,208,152,157,45,63,185,108,62,243,143,125,99,102,79,161,232,177,50,202,
1899 37,108,11,173,227,29,132,164,49,244,61,22,197,73,5,183,147,209,107,174,
1900 185,6,243,200,44,199,80,129,140,26,154,213,59,8,205,147,84,54,178,104,209,
1901 34,118,100,174,225,29,118,216,65,156,111,24,71,133,14,8,99,99,99,205,183,
1902 62,98,79,25,186,230,110,74,15,16,207,51,225,192,153,175,2,34,186,197,89,
1903 103,157,133,123,97,190,190,136,141,99,254,101,190,228,139,240,189,134,5,
1904 33,98,90,199,129,201,88,151,24,3,116,44,51,203,177,47,98,16,154,65,136,
1905 249,22,206,132,38,183,32,100,203,126,131,144,142,107,254,174,216,238,187,
1906 239,206,180,206,48,79,20,242,4,66,198,182,249,12,21,29,224,148,83,78,113,
1907 251,221,50,13,132,28,182,25,147,108,234,196,19,79,52,55,183,151,107,63,
1908 212,140,249,174,31,132,141,54,151,29,189,253,246,219,228,242,2,66,214,62,
1909 255,252,243,244,88,25,235,212,222,123,239,125,222,121,231,153,63,202,67,
1910 219,97,191,200,130,123,103,238,246,28,3,77,127,203,61,183,196,101,197,157,
1911 119,225,121,134,158,67,49,113,134,48,244,134,120,178,136,109,250,7,66,179,
1912 219,138,174,186,234,42,58,48,6,203,92,39,28,0,141,101,40,47,34,70,120,63,
1913 216,50,195,64,219,121,231,157,169,13,243,123,45,142,63,254,120,81,129,6,
1914 113,84,230,121,39,18,163,216,188,107,13,132,76,50,204,47,65,165,147,80,
1915 69,123,238,185,167,161,222,152,190,152,223,248,163,201,15,16,82,255,102,
1916 72,51,144,105,53,115,23,213,30,97,236,237,237,253,189,233,221,217,84,251,
1917 177,199,30,123,249,229,151,167,164,164,84,87,87,27,46,34,210,115,56,188,
1918 211,79,63,29,239,74,70,57,69,61,188,255,254,251,28,161,119,16,98,232,12,
1919 85,193,226,163,143,62,202,42,42,4,236,201,88,151,68,199,51,156,191,165,
1920 137,191,251,238,59,246,229,29,132,95,125,245,149,97,95,28,60,3,144,97,107,
1921 136,71,12,112,79,159,127,9,152,66,7,132,152,108,51,93,132,204,67,8,137,
1922 11,24,108,243,254,251,239,55,183,141,16,7,195,236,216,124,156,66,230,120,
1923 166,120,190,128,16,247,8,144,120,218,169,38,18,92,122,233,165,94,78,149,
1924 0,66,113,165,83,147,91,16,30,116,208,65,20,115,211,166,77,126,128,144,169,
1925 159,249,254,8,47,242,4,66,132,103,35,19,249,32,13,132,12,57,220,44,243,
1926 89,77,131,168,43,156,105,1,6,183,98,59,76,125,204,78,149,91,81,99,226,186,
1927 172,119,16,226,235,184,157,13,24,68,221,126,244,209,71,98,154,255,245,215,
1928 95,187,229,46,194,148,115,144,224,196,96,230,220,138,52,218,36,218,63,16,
1929 98,206,204,59,186,248,226,139,241,213,114,115,115,205,115,71,33,243,80,
1930 162,19,50,87,195,15,102,176,156,112,194,9,190,244,234,27,111,188,145,225,
1931 47,14,222,160,23,95,124,209,237,104,117,43,13,132,104,217,178,101,94,62,
1932 68,172,137,52,222,47,71,249,1,66,86,61,252,240,195,190,20,156,250,169,116,
1933 125,120,143,33,233,22,90,136,137,17,141,75,27,209,99,205,231,42,204,98,
1934 82,46,222,179,232,29,132,230,243,180,44,10,16,162,149,43,87,122,178,159,
1935 122,157,115,206,57,226,234,143,119,16,186,253,200,168,144,185,255,51,105,
1936 16,159,166,26,71,133,14,8,209,140,25,51,204,23,123,112,95,204,8,65,226,
1937 174,116,148,144,144,96,126,58,74,136,131,41,43,43,115,235,178,224,20,154,
1938 207,198,28,114,200,33,190,128,16,165,165,165,185,189,28,162,23,211,49,241,
1939 224,132,144,185,20,84,160,246,118,46,33,47,32,204,203,203,243,3,132,140,
1940 198,79,63,253,212,108,22,217,53,254,129,185,5,189,128,48,50,50,210,45,54,
1941 220,62,32,161,129,16,129,55,218,221,60,185,214,196,97,48,38,105,71,47,214,
1942 10,245,244,244,192,0,179,99,170,23,118,135,130,107,182,210,59,8,209,234,
1943 213,171,241,111,228,10,15,186,253,246,219,181,19,182,76,215,152,88,184,
1944 181,110,128,16,156,212,213,213,113,144,7,30,120,160,23,195,138,163,48,123,
1945 246,108,141,250,254,129,112,254,252,249,102,16,210,39,241,69,168,168,71,
1946 30,121,196,124,144,248,61,230,11,60,36,155,53,107,22,221,30,124,82,111,
1947 248,43,114,133,7,177,5,38,16,28,0,115,172,142,142,14,67,147,81,177,110,
1948 251,3,99,208,60,180,245,32,68,248,184,230,147,141,122,209,112,120,78,148,
1949 78,102,112,39,63,64,136,232,39,120,84,230,35,212,11,127,104,249,242,229,
1950 20,92,100,97,131,63,255,252,179,121,72,34,1,66,210,224,20,222,118,219,109,
1951 94,88,200,170,179,206,58,139,38,19,219,244,14,66,243,131,61,122,16,210,
1952 157,222,126,251,109,47,19,59,38,163,248,247,204,167,69,122,239,32,68,110,
1953 159,156,57,252,240,195,205,185,168,183,53,107,214,136,92,227,165,144,2,
1954 33,67,139,129,161,191,221,127,167,157,118,98,14,238,246,59,221,26,8,17,
1955 180,163,67,48,95,195,226,235,187,29,7,195,78,177,224,250,171,65,28,54,139,
1956 233,233,233,230,51,27,190,131,16,225,115,188,254,250,235,102,154,34,138,
1957 128,181,210,238,92,21,114,11,66,195,201,64,47,32,204,201,201,49,79,153,
1958 135,5,33,171,58,59,59,191,252,242,75,189,185,167,86,153,185,187,253,238,
1959 149,23,16,98,229,241,66,244,166,10,67,252,244,211,79,99,199,205,39,132,
1960 245,32,68,88,76,144,115,229,149,87,154,79,147,82,168,39,158,120,130,137,
1961 182,102,98,188,168,183,183,23,215,129,134,144,153,55,23,21,5,63,104,23,
1962 109,83,195,130,16,97,26,30,123,236,49,179,9,166,117,112,82,191,248,226,
1963 139,166,166,38,153,212,41,106,245,205,55,223,60,251,236,179,41,163,190,
1964 179,253,249,207,127,206,206,206,142,136,136,192,40,124,245,213,87,119,223,
1965 125,183,249,174,66,42,156,100,224,77,239,251,250,7,66,183,31,230,165,134,
1966 217,26,168,128,220,36,211,159,59,229,104,23,47,94,124,215,93,119,201,101,
1967 151,40,2,221,152,244,128,80,248,133,76,206,142,61,246,88,115,255,135,238,
1968 240,187,162,162,130,233,29,13,193,15,90,205,12,152,210,210,82,124,23,125,
1969 205,92,114,201,37,20,196,108,163,13,32,68,89,89,89,15,62,248,160,249,129,
1970 31,140,248,117,215,93,39,246,43,147,122,144,127,32,68,12,252,207,63,255,
1971 220,252,161,124,180,243,206,59,115,84,140,77,134,161,76,237,20,7,195,212,
1972 129,42,61,242,200,35,245,243,60,13,132,8,87,143,30,203,236,193,236,96,77,
1973 155,54,13,151,145,106,212,142,205,59,8,205,55,67,232,65,136,104,190,228,
1974 228,100,38,100,230,19,48,180,29,132,19,6,65,104,88,16,114,96,255,247,127,
1975 255,167,63,7,67,49,99,99,99,205,143,217,132,53,8,17,221,194,44,239,29,142,
1976 1,44,211,233,164,183,128,100,103,76,174,88,177,226,221,119,223,157,55,111,
1977 30,83,42,98,16,134,195,32,90,93,230,113,138,52,98,227,196,211,159,176,254,
1978 72,219,50,63,24,69,115,231,206,125,231,157,119,24,234,164,33,61,246,66,
1979 110,75,39,45,189,56,54,189,244,199,41,196,70,136,103,66,135,185,196,70,
1980 188,246,218,107,88,64,230,203,140,16,86,201,68,46,185,221,157,161,20,136,
1981 188,114,157,78,98,149,121,11,218,236,88,46,235,164,55,25,28,12,181,177,
1982 118,237,90,14,242,179,207,62,131,208,162,186,100,82,157,204,101,212,75,
1983 228,194,158,50,49,199,16,99,242,68,49,69,253,24,36,178,232,69,94,134,226,
1984 79,63,253,244,241,199,31,51,222,112,85,161,99,91,91,155,185,174,188,139,
1985 237,48,45,120,235,173,183,152,12,97,134,30,126,248,225,233,211,167,179,
1986 89,179,131,130,228,209,184,212,211,211,159,95,220,159,150,231,208,135,212,
1987 220,193,164,172,190,255,45,78,123,253,173,31,30,123,230,237,255,123,114,
1988 214,203,51,190,254,250,199,196,148,156,129,212,188,65,67,98,2,233,89,149,
1989 156,211,159,156,221,31,159,222,29,155,214,73,72,76,46,166,134,53,97,26,
1990 18,83,235,62,251,38,242,133,215,190,124,228,201,55,159,122,238,253,153,
1991 111,255,248,203,218,18,50,26,182,70,96,35,134,144,156,221,71,60,59,50,196,
1992 19,234,26,134,218,136,178,200,54,211,137,86,22,32,36,1,85,129,45,163,195,
1993 207,156,57,147,153,80,92,92,28,248,103,150,80,84,84,4,243,168,118,176,205,
1994 68,1,204,243,67,3,97,94,94,30,131,142,26,230,7,243,30,38,106,175,190,250,
1995 234,71,31,125,196,100,84,140,26,246,75,135,167,119,149,151,151,187,5,33,
1996 34,37,19,130,57,115,230,208,196,105,105,105,162,83,57,171,223,40,115,118,
1997 98,200,30,21,21,5,150,102,204,152,65,79,3,3,236,75,108,100,88,145,76,110,
1998 90,39,183,7,105,22,201,200,206,196,232,219,111,191,165,222,216,59,131,133,
1999 46,218,218,218,234,101,11,100,17,59,229,176,157,86,103,72,44,202,213,78,
2000 145,128,202,167,32,212,9,91,198,92,172,91,183,142,246,50,111,150,141,136,
2001 166,212,75,36,115,107,25,72,47,50,106,98,95,140,142,165,75,151,210,106,
2002 88,36,140,222,134,13,27,200,107,222,151,56,108,131,244,201,248,93,92,92,
2003 188,96,193,2,124,205,69,139,22,137,251,197,200,37,247,173,19,145,34,203,
2004 120,105,60,65,168,164,20,116,194,64,197,231,56,22,68,141,126,88,177,161,
2005 68,50,208,165,149,235,51,13,105,70,37,84,12,61,199,225,94,24,50,13,132,
2006 66,224,13,200,65,187,140,140,12,216,134,203,133,115,150,144,144,208,216,
2007 216,8,17,197,170,252,252,124,108,61,214,19,11,142,75,33,174,87,161,246,
2008 246,118,166,143,76,43,73,67,188,48,118,236,2,16,98,251,176,236,122,111,
2009 70,73,105,28,165,64,168,164,52,2,141,29,8,87,174,207,151,0,116,233,151,
2010 141,181,134,52,163,18,124,1,33,30,0,168,3,93,117,117,117,48,12,248,1,45,
2011 188,7,225,201,137,179,124,120,135,184,107,172,194,77,103,21,200,36,37,98,
2012 149,216,26,32,76,76,76,36,13,34,13,14,55,188,100,155,208,20,172,194,72,
2013 60,66,216,41,238,75,82,82,26,71,41,16,42,41,141,64,56,48,109,237,142,198,
2014 230,209,15,245,13,29,145,145,145,146,129,107,215,198,197,197,85,84,245,
2015 24,210,140,74,232,115,115,214,89,10,255,76,156,31,6,120,240,9,188,193,45,
2016 252,57,164,225,77,156,97,227,7,49,56,127,240,82,172,34,18,7,17,176,57,83,
2017 13,9,16,194,188,218,218,90,146,137,109,138,140,164,33,37,80,36,134,93,136,
2018 51,102,74,74,227,40,5,66,37,37,171,8,54,20,21,21,109,216,176,33,63,63,95,
2019 48,99,188,4,255,56,128,45,60,111,41,64,104,190,10,165,164,100,53,41,16,
2020 42,41,89,72,93,93,93,209,209,209,250,171,116,193,43,56,170,249,145,74,74,
2021 86,150,2,161,146,146,37,84,209,84,81,222,84,94,88,83,184,54,110,109,113,
2022 93,49,191,219,187,218,229,58,37,37,165,177,148,2,161,146,146,37,180,36,
2023 109,201,130,228,5,250,80,92,85,44,215,41,41,41,141,165,20,8,149,148,44,
2024 33,5,66,37,165,241,146,2,161,146,146,37,100,125,16,246,244,244,148,151,
2025 151,235,223,188,131,250,251,251,43,43,43,137,23,55,197,180,181,181,21,23,
2026 23,139,71,200,91,90,90,248,173,46,19,110,161,178,178,178,62,217,92,93,30,
2027 222,212,170,228,183,20,8,149,148,44,33,139,131,16,248,229,230,230,150,150,
2028 150,166,167,167,55,233,94,26,87,81,81,65,124,78,78,14,204,235,236,236,140,
2029 142,142,174,174,174,78,76,76,132,139,252,16,224,148,73,149,70,174,188,188,
2030 188,195,14,59,108,187,205,37,190,213,172,52,138,26,127,16,166,165,165,77,
2031 52,233,128,3,14,40,42,42,98,166,121,210,73,39,201,40,157,222,127,255,125,
2032 153,217,47,157,123,238,185,114,67,58,93,121,229,149,114,117,208,234,201,
2033 39,159,148,133,209,233,154,107,174,97,122,46,83,184,19,118,237,160,131,
2034 14,146,169,93,154,60,121,50,35,80,166,24,61,21,20,20,236,191,255,254,114,
2035 31,46,77,155,54,77,124,119,123,180,196,124,121,235,173,183,150,91,247,160,
2036 41,83,166,44,89,178,68,102,24,61,61,248,224,131,219,108,179,141,220,135,
2037 75,151,94,122,169,92,237,85,129,7,225,137,39,158,40,15,81,167,127,254,243,
2038 159,114,245,230,194,29,220,180,105,83,71,71,71,109,109,109,73,73,137,246,
2039 100,69,102,102,38,67,120,175,189,246,18,217,183,218,106,43,241,99,215,93,
2040 119,93,186,116,41,224,36,189,72,185,133,162,67,138,45,235,181,247,222,123,
2041 231,231,231,215,212,212,156,126,250,233,50,74,167,153,51,103,146,177,187,
2042 187,123,219,109,183,149,81,46,29,127,252,241,144,91,108,57,240,90,182,108,
2043 217,212,169,83,229,161,184,180,207,62,251,36,36,36,200,20,78,149,149,149,
2044 157,112,194,9,242,141,156,206,87,131,138,31,228,253,246,219,111,245,126,
2045 249,88,232,214,91,111,149,71,166,211,237,183,223,46,214,154,135,216,78,
2046 59,237,148,170,251,72,64,112,105,252,65,72,221,137,214,213,107,191,253,
2047 246,19,32,212,247,3,77,91,8,194,179,207,62,91,110,72,167,63,253,233,79,
2048 114,117,208,234,241,199,31,151,133,209,233,239,127,255,187,119,16,98,197,
2049 204,223,228,196,154,143,17,8,205,47,146,102,84,199,197,197,201,20,163,33,
2050 64,104,126,227,179,65,219,111,191,253,226,197,139,101,134,209,211,253,247,
2051 223,111,126,149,252,31,255,248,71,185,218,171,226,242,227,162,115,163,9,
2052 63,39,255,44,126,84,215,87,203,117,99,35,183,223,205,184,237,182,219,228,
2053 234,205,69,173,2,66,254,54,52,52,20,22,22,106,32,76,73,73,129,133,230,47,
2054 248,236,178,203,46,235,214,173,171,171,171,27,45,123,77,135,148,155,214,
2055 105,207,61,247,20,32,252,131,233,251,245,72,188,0,26,16,98,166,101,148,
2056 75,71,29,117,20,165,16,91,14,188,126,254,249,103,243,215,84,40,139,30,132,
2057 28,246,101,151,93,38,215,57,223,8,175,255,216,19,51,0,88,40,147,142,141,
2058 220,190,191,27,58,138,181,230,33,182,227,142,59,42,16,250,47,183,32,196,
2059 52,123,1,225,71,31,125,36,51,251,37,5,66,189,20,8,71,81,119,223,125,183,
2060 121,215,62,130,176,175,191,175,183,175,183,189,163,61,42,38,170,179,171,
2061 147,223,99,61,229,31,107,16,142,110,179,186,5,33,158,40,71,229,9,132,179,
2062 102,205,34,163,91,16,30,113,196,17,100,20,91,14,188,124,1,225,121,231,253,
2063 250,137,102,86,69,69,69,81,243,122,52,78,155,54,205,251,183,21,183,80,10,
2064 132,1,149,91,16,30,120,224,129,197,197,197,158,64,56,103,206,28,153,217,
2065 47,221,119,223,125,103,154,164,255,28,73,144,234,221,119,223,149,133,209,
2066 233,63,255,249,79,71,71,135,76,225,78,10,132,163,40,40,226,55,8,133,56,
2067 248,232,232,232,222,225,190,22,52,42,26,17,8,123,122,122,232,18,109,109,
2068 109,140,74,241,249,17,17,159,157,157,157,148,148,52,94,32,196,49,242,2,
2069 194,217,179,103,147,209,45,8,127,251,219,223,226,74,138,45,7,94,195,130,
2070 144,35,63,231,156,115,206,58,235,44,112,120,197,21,87,204,157,59,87,204,
2071 138,50,50,50,110,185,229,150,75,47,189,148,217,60,107,31,120,224,129,177,
2072 123,65,157,119,16,74,251,162,211,69,23,93,52,142,85,186,133,178,40,8,15,
2073 58,232,32,47,32,252,244,211,79,69,222,90,119,194,136,48,74,115,115,115,
2074 191,254,250,235,247,223,127,127,249,242,229,140,4,145,94,168,189,189,189,
2075 217,36,34,91,90,90,234,76,146,121,28,14,185,172,19,89,228,58,167,250,251,
2076 251,41,203,194,133,11,113,88,63,251,236,179,95,126,249,133,110,225,246,
2077 150,57,142,71,30,171,78,34,37,219,196,64,139,239,135,105,194,56,174,93,
2078 187,118,222,188,121,160,142,141,127,243,205,55,89,89,89,230,45,51,36,100,
2079 97,116,34,175,92,237,20,222,225,178,101,203,196,189,103,177,177,177,140,
2080 46,102,244,230,111,34,186,5,33,123,132,154,140,97,38,34,111,191,253,54,
2081 173,176,106,213,42,142,92,174,54,137,250,164,242,73,198,190,48,238,52,202,
2082 136,64,200,1,44,93,186,244,227,143,63,102,119,63,253,244,19,214,86,51,190,
2083 222,229,55,8,203,203,203,57,96,218,238,195,15,63,92,176,96,1,245,227,253,
2084 245,96,88,165,239,190,251,238,131,15,62,248,254,251,239,201,75,140,219,
2085 239,80,186,5,33,125,96,221,186,117,52,37,38,143,191,27,54,108,192,154,19,
2086 111,6,97,125,125,189,232,33,154,240,12,196,42,126,179,119,179,41,196,69,
2087 19,5,97,227,116,24,106,175,168,168,72,174,211,105,68,32,164,242,75,75,75,
2088 227,227,227,87,175,94,77,229,208,46,239,188,243,78,100,100,36,7,195,34,
2089 222,137,204,239,146,39,16,210,172,75,150,44,209,55,171,92,49,156,220,130,
2090 144,238,228,5,132,28,33,25,221,130,240,176,195,14,99,131,116,233,228,228,
2091 100,70,22,45,206,200,21,77,224,86,180,8,135,202,192,36,229,151,95,126,185,
2092 114,229,74,79,103,86,69,27,25,36,58,18,63,230,207,159,191,98,197,10,95,
2093 60,66,77,49,49,49,212,24,44,196,154,125,241,197,23,152,2,183,199,217,216,
2094 216,40,246,165,23,22,128,85,88,21,74,135,245,224,248,13,95,57,21,194,14,
2095 164,167,167,127,251,237,183,148,110,209,162,69,226,83,160,222,65,40,204,
2096 139,65,110,205,93,78,78,14,198,144,222,248,214,91,111,209,27,177,63,213,
2097 213,99,123,206,223,15,5,37,8,169,83,50,82,239,12,182,157,55,23,233,169,
2098 247,23,94,120,129,145,57,121,242,228,73,147,38,209,225,126,247,187,223,
2099 97,170,52,51,122,249,229,151,179,214,160,235,174,187,14,231,105,215,93,
2100 119,149,203,78,145,81,59,61,245,251,223,255,94,198,58,181,219,110,187,137,
2101 19,47,136,230,167,247,92,114,201,37,216,116,44,172,184,179,139,253,238,
2102 180,211,78,87,93,117,21,253,94,223,63,248,253,228,147,79,202,195,213,41,
2103 34,34,2,107,197,196,138,140,247,222,123,175,72,76,143,121,228,145,71,246,
2104 218,107,175,29,119,220,81,20,135,45,243,131,29,93,112,193,5,12,39,253,150,
2105 159,123,238,57,42,68,30,159,75,116,92,97,40,41,8,35,234,244,211,79,103,
2106 251,226,8,167,76,153,242,215,191,254,245,171,175,190,50,195,201,0,66,134,
2107 49,76,58,247,220,115,41,145,200,46,142,132,223,187,239,190,251,227,143,
2108 63,174,255,136,46,162,170,177,197,76,105,245,251,250,211,159,254,68,45,
2109 49,133,151,251,112,201,0,66,142,19,204,83,111,148,69,95,153,108,129,13,
2110 98,115,13,104,55,203,45,8,41,209,73,39,157,196,60,90,232,252,243,207,215,
2111 190,5,202,209,210,151,238,191,255,126,142,77,43,29,187,102,143,71,30,121,
2112 36,163,23,19,35,82,106,162,66,158,125,246,89,220,32,209,40,36,230,55,76,
2113 162,140,195,130,144,249,193,107,175,189,118,224,129,7,106,109,202,95,126,
2114 83,147,143,61,246,24,125,64,15,66,172,237,161,135,30,42,187,136,75,116,
2115 75,226,63,255,252,115,92,121,178,51,76,68,98,142,10,50,253,229,47,127,49,
2116 55,19,135,71,167,194,50,234,39,19,35,2,33,162,179,129,13,144,163,109,156,
2117 195,166,200,152,105,243,183,112,13,32,212,154,149,62,105,104,86,250,21,
2118 102,122,216,102,117,11,194,125,247,221,151,217,149,39,16,190,247,222,123,
2119 100,244,4,66,136,206,232,224,0,180,70,164,110,153,180,105,67,94,136,90,
2120 101,140,208,247,72,73,26,209,94,28,57,22,0,231,140,10,55,164,103,76,137,
2121 102,210,68,145,193,12,199,201,65,146,247,245,215,95,247,5,132,244,129,255,
2122 253,239,127,167,158,122,170,216,175,168,112,254,82,231,148,154,238,39,158,
2123 81,209,18,227,32,202,253,185,68,19,48,19,250,225,135,31,232,39,226,200,
2124 249,75,222,231,159,127,94,111,55,40,32,70,134,97,168,213,3,173,9,119,111,
2125 188,241,70,121,100,58,105,32,52,155,26,230,211,76,13,197,90,196,46,96,54,
2126 181,193,150,181,14,35,26,157,146,222,115,207,61,250,243,10,227,46,139,130,
2127 240,144,67,14,41,41,41,241,4,66,166,69,100,108,106,106,50,223,152,64,147,
2128 95,122,233,165,230,120,236,14,166,89,236,17,59,40,99,117,98,60,51,27,162,
2129 169,228,178,75,90,143,161,127,200,40,167,88,100,34,79,60,152,1,108,52,176,
2130 92,97,18,41,233,121,120,144,98,59,108,240,161,135,30,146,235,116,218,184,
2131 113,35,131,141,31,88,82,122,9,41,153,129,30,119,220,113,98,173,91,109,187,
2132 237,182,79,61,245,148,230,152,122,191,70,136,139,64,103,149,177,58,49,158,
2133 25,0,114,193,37,61,8,43,42,42,56,30,239,62,214,41,167,156,130,137,20,233,
2134 17,140,49,195,21,17,105,254,248,181,30,132,0,233,149,87,94,97,140,201,117,
2135 38,209,178,12,69,239,103,96,60,129,48,49,49,81,166,208,169,167,167,135,
2136 121,149,249,251,242,122,93,124,241,197,250,251,90,59,59,59,129,138,92,167,
2137 211,214,91,111,77,89,228,130,78,122,16,226,82,211,63,229,10,119,194,64,
2138 191,252,242,203,212,131,72,143,187,195,228,76,174,115,9,96,51,9,131,118,
2139 98,145,6,34,101,85,85,213,51,207,60,131,209,20,145,110,69,253,99,91,49,
2140 124,98,227,35,5,161,167,102,197,2,82,189,114,193,37,61,8,41,206,171,175,
2141 190,106,46,136,94,64,197,251,69,59,183,32,100,215,94,64,40,190,95,239,22,
2142 132,28,12,230,88,46,232,196,24,193,79,213,12,52,91,190,227,142,59,188,140,
2143 110,198,206,244,233,211,245,87,31,104,110,185,206,37,58,237,119,223,125,
2144 119,244,209,71,139,197,153,51,103,14,11,66,220,128,7,30,120,64,174,240,
2145 32,154,15,12,139,67,5,132,230,214,100,191,151,93,118,25,3,92,46,235,36,
2146 124,101,132,245,160,197,205,6,147,34,187,237,75,26,8,205,67,12,66,99,204,
2147 197,90,204,221,211,79,63,237,118,56,104,162,47,225,41,234,145,60,142,178,
2148 40,8,49,76,94,64,248,229,151,95,146,209,45,8,25,144,230,78,143,72,137,133,
2149 21,38,192,19,8,233,85,230,222,169,157,0,145,203,46,49,96,98,99,99,137,103,
2150 179,102,124,26,68,130,187,238,186,75,108,199,19,8,127,251,219,223,138,31,
2151 244,48,236,44,29,20,119,68,196,120,17,253,21,187,41,6,131,23,16,98,187,
2152 233,193,222,97,166,151,6,66,50,222,126,251,237,152,120,185,194,179,240,
2153 152,197,253,232,216,157,155,111,190,217,220,52,158,164,129,144,153,53,19,
2154 88,51,149,205,186,240,194,11,181,137,133,89,35,2,33,179,13,28,110,153,200,
2155 179,14,63,252,112,109,182,187,110,221,58,183,198,197,147,52,16,226,237,
2156 49,193,31,182,21,152,203,127,255,253,247,34,139,91,16,210,157,244,64,2,
2157 132,20,153,102,242,165,206,245,55,137,140,8,132,204,24,174,189,246,90,223,
2158 187,144,6,66,154,245,141,55,222,240,194,18,77,76,56,188,52,171,91,16,50,
2159 241,245,2,66,113,87,157,91,16,122,209,245,215,95,79,183,23,59,101,36,14,
2160 91,100,102,186,184,248,26,59,205,32,100,242,167,111,47,106,195,59,8,91,
2161 90,90,174,187,238,58,95,90,243,180,211,78,19,167,58,221,130,16,121,170,
2162 118,70,171,120,190,51,42,42,202,251,4,197,32,95,64,72,139,223,121,231,157,
2163 190,28,63,38,206,124,186,101,92,100,81,16,50,47,46,45,45,245,3,132,196,
2164 48,54,232,82,230,118,186,242,202,43,69,255,246,4,194,134,134,6,109,150,
2165 173,105,233,210,165,100,161,211,200,101,151,216,5,145,244,66,179,139,131,
2166 33,219,125,247,221,13,7,192,80,20,87,254,60,129,80,19,25,239,191,255,126,
2167 246,107,222,242,65,7,29,132,213,54,108,153,73,177,56,147,230,5,132,216,
2168 151,51,206,56,67,70,233,196,248,196,249,54,87,163,6,66,108,153,193,136,
2169 0,197,61,246,216,195,92,81,0,108,222,188,121,100,169,173,173,117,187,47,
2170 114,225,151,155,219,69,3,33,230,236,164,147,78,146,177,46,177,150,170,54,
2171 28,33,251,210,159,235,54,200,119,16,178,5,236,190,33,49,182,131,74,54,240,
2172 152,3,160,81,128,1,185,222,127,255,125,179,125,33,134,81,109,56,109,32,
2173 36,64,200,190,62,252,240,67,67,101,114,84,236,139,14,35,151,93,58,255,252,
2174 243,5,18,220,130,208,32,64,200,32,50,224,92,52,19,52,50,148,142,69,142,
2175 95,156,205,27,17,8,105,29,252,126,153,72,39,90,135,17,103,174,112,13,132,
2176 110,71,177,167,102,93,176,96,129,167,102,117,11,194,3,14,56,128,169,170,
2177 31,32,36,134,201,141,219,9,13,213,162,157,68,49,55,52,61,223,92,171,212,
2178 182,230,12,153,65,104,16,222,188,119,16,50,195,54,172,229,104,221,14,58,
2179 226,241,95,201,226,9,132,100,161,138,204,197,167,183,136,214,249,230,155,
2180 111,100,148,78,236,29,82,154,237,15,242,5,132,203,150,45,163,138,100,172,
2181 83,28,0,123,196,121,48,247,70,237,2,211,248,202,162,32,164,143,250,7,194,
2182 131,15,62,56,39,39,135,177,97,54,31,39,159,124,178,184,90,230,9,132,172,
2183 50,88,19,52,125,250,116,226,153,55,201,101,151,192,15,35,118,198,140,25,
2184 134,166,197,180,253,240,195,15,28,185,217,179,249,219,223,254,134,1,242,
2185 5,132,15,60,240,128,221,110,55,116,95,70,2,38,207,237,16,18,183,66,120,
2186 1,33,25,181,51,51,154,166,76,153,130,157,165,104,230,82,107,32,124,241,
2187 197,23,101,148,75,199,28,115,12,54,122,209,162,69,114,89,167,255,254,247,
2188 191,148,142,201,193,177,199,30,43,163,92,162,165,240,189,126,249,229,23,
2189 243,233,89,13,132,209,209,209,134,74,163,6,104,107,26,218,60,200,111,186,
2190 233,38,79,119,195,250,14,66,166,222,230,178,223,115,207,61,108,225,193,
2191 7,31,148,203,46,97,26,232,147,228,122,233,165,151,204,150,133,227,161,63,
2192 184,117,187,5,8,217,230,53,215,92,35,163,92,58,239,188,243,154,155,155,
2193 177,254,6,159,27,251,43,234,196,71,16,46,94,188,216,176,5,6,14,157,16,147,
2194 106,182,158,183,220,114,139,56,53,50,34,16,150,148,148,28,117,212,81,50,
2195 145,78,216,110,241,120,184,92,118,73,3,97,68,68,132,97,126,64,103,96,206,
2196 68,47,50,159,249,191,249,230,155,169,40,177,71,131,220,130,144,169,149,
2197 127,32,20,134,34,61,61,29,243,45,163,92,98,66,67,199,32,35,238,160,217,
2198 194,64,199,13,27,54,152,115,105,183,157,15,11,194,217,179,103,123,7,225,
2199 59,239,188,35,163,92,194,118,137,177,111,104,101,100,179,217,24,116,158,
2200 78,141,98,190,104,107,186,174,140,114,137,185,215,234,213,171,233,177,112,
2201 72,70,233,196,54,25,92,127,254,243,159,229,178,78,190,128,16,171,200,112,
2202 147,177,78,29,113,196,17,108,144,126,98,30,254,194,240,142,187,44,10,194,
2203 223,254,246,183,254,129,240,196,19,79,196,16,227,148,104,103,26,53,209,
2204 24,98,162,231,5,132,24,38,185,236,146,176,11,243,231,207,151,203,46,49,
2205 59,38,254,226,139,47,150,203,46,49,141,90,181,106,21,171,232,214,50,202,
2206 37,186,35,78,167,47,32,252,215,191,254,69,26,67,233,40,26,155,197,30,153,
2207 77,91,86,86,22,171,188,128,176,188,188,252,119,191,251,157,140,114,137,
2208 217,6,70,135,188,88,19,25,229,146,6,194,107,175,189,86,70,185,116,234,169,
2209 167,50,234,168,97,185,172,19,135,141,209,225,8,205,208,197,80,50,32,1,182,
2210 249,34,147,6,194,153,51,103,202,40,151,168,204,53,107,214,224,199,155,15,
2211 3,30,211,1,200,101,150,39,16,2,111,184,34,36,78,40,97,209,228,106,157,176,
2212 2,24,136,215,95,127,93,46,187,196,24,78,75,75,35,23,9,204,29,239,249,231,
2213 159,103,213,51,207,60,99,94,37,64,136,109,53,95,137,196,214,48,57,99,46,
2214 98,190,30,131,53,228,48,56,84,239,32,164,164,12,147,55,223,124,83,46,187,
2215 68,19,208,232,84,248,97,135,29,38,163,92,186,228,146,75,252,0,33,188,97,
2216 4,201,68,46,1,108,230,118,197,197,197,204,210,100,148,75,26,8,223,120,227,
2217 13,25,229,18,214,60,50,50,178,189,189,157,169,161,140,114,9,8,137,65,106,
2218 150,91,16,30,116,208,65,254,129,144,254,195,97,211,141,205,157,31,70,50,
2219 59,161,93,78,63,253,116,25,165,19,118,137,61,154,199,32,227,66,28,231,150,
2220 131,208,124,117,240,234,171,175,230,120,10,10,10,12,158,22,34,49,227,209,
2221 45,8,41,181,120,232,254,170,171,174,146,81,46,1,45,142,129,14,246,218,107,
2222 175,201,40,157,196,221,15,247,221,119,159,185,51,15,11,66,236,219,195,15,
2223 63,44,163,92,58,228,144,67,0,33,51,209,125,247,221,87,70,185,132,85,20,
2224 27,28,95,89,20,132,88,109,76,21,35,28,235,47,163,116,242,2,66,166,78,140,
2225 127,38,155,116,116,25,229,18,219,28,22,132,79,60,241,132,92,118,233,140,
2226 51,206,32,158,190,43,151,93,194,111,160,27,153,167,90,147,38,77,194,174,
2227 145,133,225,36,163,92,194,14,138,7,42,134,5,33,9,238,190,251,110,67,233,
2228 246,222,123,111,144,80,85,85,197,96,96,149,94,226,70,149,145,130,16,163,
2229 3,51,114,115,115,177,38,50,202,37,13,132,231,158,123,174,140,114,233,180,
2230 211,78,195,246,245,244,244,152,207,156,48,72,176,110,110,65,200,49,99,124,
2231 49,34,230,145,160,129,208,124,252,120,18,176,138,131,196,137,145,81,46,
2232 97,71,60,221,132,237,22,132,136,138,194,52,8,81,10,82,154,231,55,100,20,
2233 231,0,222,123,239,61,25,165,211,218,181,107,89,229,22,132,184,206,172,2,
2234 135,230,85,2,132,216,86,243,116,248,186,235,174,163,198,40,190,249,236,
2235 168,232,96,195,130,144,178,48,76,158,126,250,105,185,236,18,83,52,102,93,
2236 180,187,217,235,98,140,96,55,57,164,45,7,33,182,143,206,192,94,204,211,
2237 62,13,132,230,49,133,223,31,19,19,131,101,188,225,134,27,100,148,75,12,
2238 31,195,29,200,154,220,130,144,81,6,236,1,33,13,42,163,116,242,2,66,12,11,
2239 135,205,190,204,51,102,1,66,24,233,118,22,142,217,97,12,154,219,139,209,
2240 45,142,124,203,65,72,175,144,81,46,49,17,4,132,140,172,253,77,143,252,94,
2241 127,253,245,12,70,79,32,252,225,135,31,216,224,77,55,221,36,163,92,98,239,
2242 94,64,248,191,255,253,143,92,204,107,205,157,121,88,16,82,219,255,252,231,
2243 63,101,148,75,204,189,24,149,217,217,217,102,171,200,204,88,108,112,124,
2244 101,81,16,50,228,252,3,33,147,56,236,35,32,52,159,157,195,1,26,22,132,11,
2245 23,46,148,203,46,97,71,136,127,234,169,167,228,178,75,159,124,242,9,35,
2246 25,150,200,101,151,192,195,242,229,203,177,110,230,203,15,48,0,98,121,1,
2247 33,121,153,191,51,251,251,244,211,79,49,169,230,209,251,232,163,143,82,
2248 39,12,239,183,55,23,131,150,131,28,11,16,154,11,40,64,216,216,216,104,174,
2249 124,142,156,125,249,13,66,243,248,161,66,24,174,24,116,179,197,68,250,123,
2250 181,245,242,4,66,189,196,252,221,124,14,10,81,243,52,159,219,83,70,116,
2251 60,108,135,127,32,164,20,230,243,90,87,94,121,37,70,28,190,154,61,194,75,
2252 47,189,212,59,8,169,210,203,47,191,28,27,199,64,48,159,200,101,6,195,40,
2253 160,194,205,45,72,31,19,23,59,183,28,132,28,246,176,32,188,243,206,59,101,
2254 148,75,212,195,234,213,171,57,60,243,185,98,148,158,158,46,246,104,144,
2255 91,16,226,106,248,7,194,147,78,58,169,162,162,2,116,153,11,37,64,72,213,
2256 153,187,49,34,23,85,97,6,33,136,162,177,216,157,39,16,210,153,207,57,231,
2257 28,184,181,100,201,18,239,32,52,223,87,140,235,204,200,162,164,230,122,
2258 190,236,178,203,40,160,39,16,178,35,54,232,22,132,226,230,216,81,7,33,86,
2259 145,50,202,40,151,206,60,243,76,70,37,107,15,56,224,0,25,229,18,83,31,14,
2260 67,108,115,28,101,81,16,50,122,1,33,51,47,243,221,19,200,63,16,50,254,135,
2261 5,33,152,145,203,46,29,117,212,81,52,161,217,70,211,101,91,90,90,204,116,
2262 161,127,236,177,199,30,180,183,249,216,232,196,152,6,47,32,252,240,195,
2263 15,41,50,7,73,207,166,47,26,206,179,35,198,18,115,67,113,115,166,89,99,
2264 1,66,243,41,32,1,66,179,139,140,176,203,52,138,223,32,52,15,87,68,101,98,
2265 98,204,86,3,225,85,56,203,109,148,239,32,52,159,255,68,226,254,2,179,247,
2266 134,62,248,224,3,191,65,232,246,100,50,190,209,126,251,237,71,199,48,31,
2267 48,182,195,11,8,207,56,227,140,180,180,52,113,6,143,100,230,254,73,39,103,
2268 143,52,147,249,118,143,221,119,223,61,144,32,116,251,92,54,233,41,184,219,
2269 123,139,196,9,21,179,220,130,16,63,76,156,225,116,123,26,115,75,64,8,117,
2270 204,171,16,135,77,31,54,183,50,145,226,10,133,91,16,82,222,31,127,252,145,
2271 201,16,237,69,229,123,7,33,157,83,70,185,36,64,136,125,48,239,151,126,226,
2272 5,132,203,150,45,99,131,230,145,69,205,47,93,186,116,44,64,200,36,210,124,
2273 33,227,148,83,78,17,147,75,179,77,99,23,172,18,219,28,71,141,63,8,153,215,
2274 203,42,209,9,252,8,16,158,124,242,201,50,74,39,47,32,196,76,147,203,45,
2275 8,153,60,14,11,66,154,4,216,200,40,167,176,137,140,64,102,238,114,217,37,
2276 38,62,110,65,232,69,248,136,12,114,79,32,52,24,32,138,192,144,147,235,54,
2277 23,166,237,153,103,158,201,206,206,198,6,201,212,78,141,5,8,245,98,176,
2278 209,40,191,252,242,203,37,151,92,98,118,110,16,38,0,79,113,116,65,232,69,
2279 120,21,226,192,12,218,66,16,122,209,204,153,51,169,243,81,4,161,23,253,
2280 254,247,191,247,4,66,108,232,119,223,125,55,84,84,15,98,8,96,1,111,188,
2281 241,70,183,245,0,233,199,29,132,94,180,114,229,74,177,71,131,242,243,243,
2282 101,10,157,152,221,10,16,50,51,144,81,58,141,5,8,61,105,239,189,247,78,
2283 73,73,97,119,110,65,72,79,163,53,157,229,24,146,119,16,234,197,160,99,212,
2284 44,92,184,240,226,139,47,118,219,154,244,100,58,188,39,16,138,123,74,221,
2285 130,16,199,116,44,64,40,214,106,98,23,244,70,160,139,155,104,222,26,34,
2286 18,75,46,83,143,159,198,31,132,153,153,153,178,74,116,18,32,196,183,115,
2287 123,199,182,23,16,254,225,15,127,192,171,115,11,66,204,253,176,32,236,236,
2288 236,52,92,92,196,51,88,181,106,149,225,48,152,83,211,249,70,10,194,157,
2289 119,222,121,253,250,245,158,64,40,94,151,163,23,22,193,140,13,33,122,33,
2290 92,127,244,209,71,161,142,76,61,198,32,220,184,113,227,125,247,221,199,
2291 96,51,76,20,244,10,48,8,197,77,73,102,141,29,8,177,26,1,3,33,38,222,19,
2292 8,153,81,185,125,38,146,244,184,137,116,3,74,231,214,135,22,178,56,8,87,
2293 172,88,33,246,104,80,65,65,129,76,161,147,6,66,28,35,25,165,83,32,65,72,
2294 13,136,70,113,11,66,195,217,11,95,64,72,107,146,235,206,59,239,60,238,184,
2295 227,204,183,160,107,242,14,66,104,199,166,204,35,139,13,46,94,188,120,76,
2296 65,200,198,41,206,19,79,60,129,51,99,62,45,161,73,129,80,10,207,70,86,137,
2297 78,126,131,144,110,225,9,132,7,30,120,224,176,32,196,64,24,238,176,162,
2298 9,231,205,155,103,56,181,125,222,121,231,145,210,19,8,161,200,36,119,218,
2299 99,143,61,188,128,208,240,126,81,68,79,162,31,51,60,60,153,117,220,178,
2300 11,46,184,128,241,44,210,143,17,8,49,52,247,222,123,47,184,210,91,19,115,
2301 205,163,177,0,161,167,202,68,218,59,210,12,114,11,66,182,195,200,199,152,
2302 10,81,33,164,116,11,66,106,85,238,192,164,81,247,8,73,44,55,173,215,182,
2303 67,69,62,244,208,67,233,0,110,65,72,71,210,94,147,164,137,222,200,222,129,
2304 156,193,89,55,87,133,21,64,232,165,89,61,205,111,32,147,204,172,147,0,33,
2305 227,61,96,32,148,71,105,18,38,66,188,55,213,12,66,90,196,224,42,121,7,33,
2306 237,206,72,185,251,238,187,169,94,183,3,77,47,239,32,20,47,212,13,60,8,
2307 57,158,103,158,121,6,135,65,223,27,221,218,49,118,161,64,56,164,156,156,
2308 28,89,37,58,105,32,164,153,101,148,78,222,65,72,255,102,96,152,239,26,165,
2309 167,98,44,200,232,5,132,80,202,112,95,12,141,247,194,11,47,24,222,144,249,
2310 224,131,15,98,214,221,130,144,33,17,17,17,49,84,48,231,27,22,12,162,231,
2311 121,2,225,162,69,139,68,46,131,152,227,255,243,159,255,244,116,199,4,186,
2312 248,226,139,25,234,164,28,11,16,98,14,204,151,105,247,217,103,159,71,30,
2313 121,68,46,232,116,209,69,23,141,46,8,25,201,226,68,25,245,38,107,80,39,
2314 226,221,202,19,8,205,94,148,91,16,190,244,210,75,98,173,220,141,78,34,126,
2315 20,65,248,183,191,253,173,205,245,38,88,169,230,250,129,220,101,3,157,237,
2316 252,36,222,45,8,177,152,76,31,89,171,169,170,170,234,220,115,207,53,148,
2317 26,224,93,120,225,133,80,83,46,187,132,121,21,29,102,28,65,40,190,31,52,
2318 162,102,245,14,194,179,206,58,75,70,233,52,22,32,20,147,105,121,172,155,
2319 203,121,152,110,64,72,223,19,15,222,104,242,14,66,170,154,177,41,99,93,
2320 162,29,177,81,110,11,226,5,132,11,23,46,100,131,230,145,197,252,30,131,
2321 51,70,32,164,234,204,54,150,174,114,217,101,151,209,43,228,178,75,236,162,
2322 193,245,18,249,113,148,165,65,232,233,241,32,47,32,20,79,158,50,48,204,
2323 182,120,191,253,246,27,22,132,232,211,79,63,149,81,46,193,45,131,53,249,
2324 240,195,15,233,247,158,64,40,78,131,204,157,59,247,252,205,117,229,149,
2325 87,210,81,60,129,208,211,68,24,49,127,199,149,116,235,48,33,122,164,232,
2326 184,99,1,194,39,159,124,82,70,185,68,119,255,226,139,47,58,59,59,229,178,
2327 78,184,167,244,233,81,4,225,182,206,231,8,89,181,96,193,2,89,137,58,25,
2328 140,139,166,81,1,97,126,126,254,165,151,94,42,247,228,18,94,59,182,99,20,
2329 65,40,30,159,96,246,192,244,95,238,227,156,179,207,63,237,248,243,207,57,
2330 235,134,27,110,96,95,110,65,184,215,94,123,225,212,14,21,192,165,121,243,
2331 230,81,64,185,218,165,233,211,167,227,56,154,159,147,219,126,251,237,199,
2332 23,132,24,104,49,89,252,250,235,175,233,51,178,224,46,25,156,39,77,0,79,
2333 230,215,73,3,161,219,65,61,118,32,100,172,201,195,117,233,234,171,175,166,
2334 177,88,101,6,33,204,51,220,225,236,29,132,51,102,204,48,244,34,154,108,
2335 254,252,249,152,74,243,237,69,39,156,112,130,23,16,138,243,76,230,155,174,
2336 1,33,140,28,11,16,178,77,60,7,195,105,9,68,36,70,204,60,252,217,5,173,32,
2337 182,57,142,26,127,16,98,55,101,149,232,164,129,208,237,93,209,222,65,200,
2338 176,196,232,152,167,84,248,49,190,128,144,78,96,176,41,24,104,195,68,102,
2339 221,186,117,164,244,4,66,241,14,210,103,159,125,86,70,185,4,77,97,164,39,
2340 16,26,78,244,225,40,224,16,51,211,215,68,133,96,56,14,57,228,16,115,23,
2341 196,101,36,203,88,128,208,60,170,177,14,28,9,108,150,203,58,157,119,222,
2342 121,91,2,194,155,111,190,89,70,185,196,112,21,85,253,222,123,239,153,75,
2343 237,233,171,164,190,131,16,139,35,87,235,36,64,200,144,102,96,203,40,151,
2344 222,126,251,109,236,254,40,130,16,11,5,8,105,104,243,99,66,39,157,120,162,
2345 39,16,238,189,247,222,152,233,161,2,184,196,33,201,117,46,9,66,144,140,
2346 31,50,202,37,106,53,144,32,52,63,3,202,252,70,220,26,106,182,248,8,115,
2347 233,220,161,81,212,146,76,161,147,40,38,150,52,192,32,196,92,200,101,151,
2348 48,47,130,118,230,33,67,71,26,17,8,205,53,38,110,125,160,51,152,31,219,
2349 56,238,184,227,188,128,80,188,180,214,252,96,34,102,74,188,205,110,212,
2350 65,136,101,184,235,174,187,100,148,75,20,13,107,73,233,20,8,61,138,90,144,
2351 85,162,147,119,16,50,57,34,163,119,16,154,59,49,230,195,23,16,98,121,13,
2352 166,135,94,168,239,181,216,17,49,140,25,96,28,167,140,117,73,3,33,51,32,
2353 25,229,18,19,121,186,130,39,16,26,110,150,51,191,199,11,142,18,143,27,100,
2354 126,66,145,105,53,171,198,2,132,230,55,6,156,114,202,41,20,156,238,110,
2355 30,9,231,156,115,14,173,233,55,8,205,159,116,96,254,187,97,195,6,86,205,
2356 153,51,199,60,199,20,86,195,44,223,65,136,161,148,171,93,34,227,171,175,
2357 190,202,42,44,151,249,9,138,143,63,254,24,219,225,31,8,113,251,232,27,50,
2358 202,37,47,32,60,239,204,51,60,129,208,236,17,154,223,229,193,164,4,63,137,
2359 10,55,119,81,170,34,144,32,188,255,254,251,101,148,75,226,129,122,86,49,
2360 177,224,96,100,172,75,250,15,125,232,197,212,80,166,208,73,3,161,248,114,
2361 139,65,226,6,52,255,64,72,161,204,151,87,144,0,161,25,45,251,237,183,31,
2362 30,27,171,204,32,164,27,143,8,132,102,202,94,117,213,85,216,46,216,108,
2363 174,103,14,114,88,16,226,173,202,40,151,232,138,226,244,198,168,131,176,
2364 179,179,211,252,253,38,90,135,131,196,118,25,110,182,64,10,132,82,110,125,
2365 11,241,174,81,79,167,70,197,195,49,222,65,104,126,97,132,152,149,144,209,
2366 59,8,179,178,178,240,186,100,172,83,244,99,253,142,246,223,127,127,113,
2367 171,2,221,200,252,238,9,13,132,211,167,79,151,81,46,145,49,61,61,221,71,
2368 16,226,3,25,76,63,117,34,86,153,123,252,153,103,158,73,252,88,128,208,108,
2369 70,105,17,138,64,171,49,33,144,81,46,157,117,214,89,91,2,66,243,43,72,24,
2370 90,194,237,155,59,119,174,249,110,85,44,32,171,204,242,29,132,223,125,247,
2371 157,92,237,18,13,253,250,235,175,179,138,38,54,79,56,126,248,225,7,191,
2372 65,136,109,165,18,100,148,75,2,132,116,87,250,173,140,114,233,239,151,156,
2373 57,216,211,229,9,132,134,15,81,153,97,195,78,241,206,177,245,230,169,12,
2374 71,24,72,16,154,207,174,195,0,177,138,78,110,110,86,118,228,220,161,81,
2375 212,188,153,103,116,93,240,64,175,115,59,168,113,122,200,232,9,132,28,182,
2376 91,16,50,252,105,44,26,197,237,155,101,4,8,205,231,123,15,60,240,64,186,
2377 55,171,204,32,100,164,24,222,18,224,29,132,230,23,55,94,115,205,53,204,
2378 3,24,89,230,55,203,136,81,236,29,132,230,87,217,81,237,162,51,143,58,8,
2379 59,58,58,204,179,4,234,132,131,100,162,192,36,67,70,185,196,46,20,8,165,
2380 24,78,178,86,92,194,92,210,191,113,10,205,38,21,9,210,120,1,33,4,5,27,50,
2381 202,37,60,42,95,64,200,60,218,108,59,244,98,120,112,96,34,177,249,37,126,
2382 128,80,56,49,207,60,243,140,140,114,9,54,51,200,125,4,225,87,95,125,101,
2383 152,44,227,209,138,85,102,47,25,218,17,63,82,16,50,224,233,157,88,124,243,
2384 52,77,3,161,185,254,169,97,114,33,179,139,118,198,25,103,120,2,33,195,30,
2385 16,226,199,120,121,215,168,249,173,102,218,169,209,15,62,248,192,96,203,
2386 118,218,105,39,90,138,85,102,113,108,62,130,16,187,35,87,235,244,242,203,
2387 47,179,138,217,43,187,144,81,78,209,217,196,149,45,183,32,20,239,92,254,
2388 207,127,254,99,94,37,64,72,43,152,79,215,211,58,24,184,202,202,74,115,151,
2389 123,248,174,219,7,219,155,125,4,161,249,237,148,226,205,50,116,84,183,110,
2390 141,31,32,116,123,170,16,123,74,127,102,21,131,75,70,185,164,129,208,220,
2391 172,140,145,232,232,104,86,189,249,230,155,134,94,68,63,97,92,59,119,232,
2392 70,230,170,0,30,116,84,42,208,45,180,196,89,86,183,32,60,238,184,227,232,
2393 168,116,87,243,140,153,26,195,80,224,217,184,189,19,21,219,194,54,205,3,
2394 31,131,3,62,89,101,6,33,181,52,162,155,101,46,185,228,18,25,229,210,95,
2395 254,242,23,14,137,153,159,121,248,48,174,57,84,239,32,36,187,140,114,73,
2396 3,161,219,203,228,226,218,147,219,119,142,251,7,66,166,200,140,74,214,42,
2397 143,208,155,46,184,224,2,89,43,46,209,132,255,253,239,127,177,56,84,174,
2398 140,114,137,121,58,147,53,114,121,7,161,249,210,8,25,69,79,245,14,66,6,
2399 182,219,59,208,52,209,209,5,80,209,171,175,190,106,232,16,28,249,204,153,
2400 51,57,6,243,120,56,231,156,115,152,254,251,8,194,200,200,72,195,153,52,
2401 182,204,152,135,91,134,91,88,17,190,20,89,188,128,16,207,192,45,156,112,
2402 7,87,175,94,189,187,233,243,226,26,8,97,155,140,114,137,1,207,128,196,198,
2403 201,101,157,78,63,253,116,97,124,205,239,183,164,150,50,50,50,160,154,217,
2404 43,210,64,200,252,198,224,101,210,190,31,125,244,17,67,200,236,241,208,
2405 136,90,43,24,228,59,8,129,144,217,130,223,117,215,93,88,150,207,62,251,
2406 204,96,61,153,140,139,115,95,175,188,242,138,97,21,194,104,210,187,176,
2407 143,230,93,11,16,114,84,230,137,185,184,201,57,38,38,198,252,242,4,113,
2408 254,223,71,16,154,189,46,154,41,43,43,11,211,99,118,193,145,31,32,116,59,
2409 191,65,152,248,53,107,214,152,175,93,105,32,164,39,27,30,131,163,89,63,
2410 253,244,83,42,217,252,246,53,134,30,99,68,236,209,172,203,46,187,76,166,
2411 115,137,218,166,236,184,227,244,34,25,229,210,180,105,211,168,91,114,185,
2412 5,33,214,128,106,231,216,204,179,112,154,146,142,65,70,122,130,217,194,
2413 172,90,181,138,30,110,56,105,132,254,252,231,63,195,21,114,153,7,62,176,
2414 167,33,134,10,224,146,119,16,50,102,101,148,75,167,156,114,10,245,31,21,
2415 21,101,190,89,134,134,30,22,132,230,247,129,48,28,88,197,1,191,245,214,
2416 91,50,74,167,155,111,190,153,86,48,159,161,69,195,130,144,126,78,26,25,
2417 229,18,38,11,195,69,169,205,151,27,20,8,127,21,243,125,89,43,58,129,1,3,
2418 9,132,254,249,207,127,226,91,144,203,59,8,205,61,149,145,233,11,8,209,181,
2419 94,63,64,122,253,245,215,139,30,143,176,251,230,174,201,152,196,250,208,
2420 213,228,178,75,204,127,201,226,35,8,123,122,122,24,24,114,157,75,108,150,
2421 41,161,249,216,196,51,200,94,64,200,113,186,157,222,210,65,217,139,185,
2422 26,53,16,154,223,6,201,168,62,240,192,3,205,199,134,4,8,189,236,139,131,
2423 55,239,75,3,33,243,27,243,153,112,44,44,187,51,84,50,53,192,76,150,154,
2424 28,170,41,147,124,7,33,237,120,247,221,119,203,20,46,177,47,246,104,182,
2425 236,88,58,113,90,236,195,15,63,52,159,22,38,134,217,174,57,30,9,16,178,
2426 47,172,191,225,76,32,71,5,2,1,155,161,90,112,74,196,89,7,31,65,104,254,
2427 194,3,70,144,218,166,206,205,21,142,252,0,33,173,227,246,89,38,79,205,170,
2428 129,176,202,221,251,161,220,54,43,98,18,233,169,89,17,179,19,153,78,39,
2429 170,212,173,161,192,154,131,7,114,185,5,33,61,132,106,52,79,131,16,195,
2430 31,180,144,145,121,155,161,189,16,179,70,183,229,21,79,236,33,51,8,73,60,
2431 34,16,154,253,123,209,79,220,14,58,12,221,176,32,52,35,141,81,44,206,127,
2432 154,175,14,32,74,205,164,199,109,103,30,22,132,110,237,155,168,109,183,
2433 166,134,24,5,66,41,198,60,166,211,92,179,102,225,231,137,89,57,242,14,66,
2434 243,201,104,198,158,143,32,52,127,11,80,19,7,137,233,148,233,156,122,231,
2435 157,119,204,227,217,32,142,243,252,243,207,23,233,125,4,33,154,62,125,186,
2436 151,55,74,104,58,225,132,19,132,237,240,2,66,216,224,227,55,163,133,52,
2437 16,186,125,247,180,39,9,16,50,38,49,166,190,239,75,3,33,250,252,243,207,
2438 13,39,36,221,10,139,92,180,249,109,147,122,249,14,66,148,158,158,110,254,
2439 58,146,89,76,65,196,73,90,132,27,97,246,161,133,220,246,97,1,66,132,131,
2440 114,206,57,231,12,219,207,49,235,179,103,207,22,109,234,35,8,153,9,153,
2441 77,54,162,21,40,184,92,208,201,15,16,210,172,158,222,217,230,86,26,8,209,
2442 156,57,115,124,105,214,211,78,59,13,191,71,100,113,43,42,240,188,243,206,
2443 243,229,24,160,172,118,127,138,39,16,186,221,14,41,241,47,5,65,17,99,202,
2444 45,101,245,162,230,239,191,255,254,1,207,207,17,178,35,241,246,53,77,222,
2445 65,8,239,205,215,29,16,219,49,199,31,116,208,65,195,130,208,252,22,111,
2446 182,35,222,210,23,27,27,235,118,54,224,73,195,130,144,85,111,191,253,182,
2447 219,74,99,167,102,179,64,140,2,225,175,202,206,206,118,251,29,72,189,246,
2448 223,127,255,69,139,22,9,119,16,121,1,97,117,117,53,35,65,70,185,196,80,
2449 244,17,132,76,238,220,154,15,68,223,98,210,42,211,57,213,209,209,1,56,189,
2450 16,139,230,103,142,169,221,2,224,59,8,25,192,47,191,252,178,249,212,141,
2451 38,250,226,41,167,156,162,217,119,47,32,100,109,84,84,148,217,75,230,216,
2452 206,58,235,44,179,145,210,64,136,233,57,201,221,123,207,111,184,225,6,51,
2453 254,5,8,201,197,33,153,79,163,177,175,11,46,184,192,92,28,61,8,219,218,
2454 218,62,254,248,99,183,103,243,52,177,23,195,61,120,6,141,8,132,88,144,101,
2455 203,150,153,223,67,164,215,145,71,30,41,62,192,36,132,179,238,182,170,233,
2456 114,191,251,221,239,204,187,214,64,136,114,115,115,255,250,215,191,122,
2457 153,37,80,63,204,180,180,71,140,125,4,33,238,154,219,119,81,130,22,243,
2458 105,106,228,7,8,81,82,82,146,249,230,41,154,149,93,155,205,186,30,132,52,
2459 43,222,176,247,102,229,80,189,55,171,16,221,210,124,134,217,32,156,84,220,
2460 29,13,102,110,65,136,207,125,225,133,23,154,27,130,195,208,223,132,213,
2461 210,210,242,212,83,79,121,25,221,244,43,28,56,253,35,225,102,16,162,17,
2462 129,176,180,180,212,109,135,228,128,205,215,216,232,117,195,130,208,124,
2463 247,13,171,196,185,119,204,23,230,200,92,63,28,140,249,234,41,242,5,132,
2464 149,149,149,230,171,93,84,245,229,151,95,174,174,17,14,47,236,245,220,185,
2465 115,49,214,98,226,128,168,107,254,210,72,84,49,214,1,188,137,105,178,16,
2466 32,196,121,103,58,166,23,253,24,219,77,74,166,249,50,202,37,237,26,33,206,
2467 153,140,210,233,47,127,249,139,216,44,42,40,40,96,143,114,197,230,162,251,
2468 154,95,1,131,101,164,7,92,115,205,53,216,116,14,158,3,22,226,55,221,244,
2469 205,55,223,164,183,105,103,83,41,194,35,143,60,34,55,167,147,219,7,234,
2470 217,242,234,213,171,129,25,238,172,97,203,140,118,122,112,85,85,149,182,
2471 101,70,172,220,150,78,48,88,128,144,25,43,134,12,207,91,219,14,181,247,
2472 236,179,207,70,71,71,227,61,203,212,46,81,76,1,66,54,142,207,116,221,117,
2473 215,49,224,69,46,140,194,131,15,62,136,229,101,42,42,83,187,132,187,35,
2474 250,52,251,162,14,207,61,247,92,109,95,100,231,240,226,227,227,153,205,
2475 200,212,46,97,232,197,248,23,162,126,200,139,57,6,180,34,187,232,3,252,
2476 6,216,207,61,247,156,184,66,236,69,128,144,9,169,220,186,75,148,72,188,
2477 1,203,44,142,22,126,83,21,76,141,181,3,70,252,38,227,77,55,221,4,141,180,
2478 74,22,194,182,50,251,161,71,105,41,129,229,154,53,107,232,165,230,93,95,
2479 118,217,101,50,155,83,52,199,151,95,126,137,31,175,85,169,16,41,169,49,
2480 220,205,141,27,55,106,70,156,93,211,208,98,59,154,168,67,226,69,2,33,14,
2481 15,243,253,175,127,253,139,189,139,173,113,72,204,237,136,196,46,203,108,
2482 58,9,16,50,107,148,203,58,221,113,199,29,98,155,102,177,23,154,134,153,
2483 147,86,75,20,225,63,255,249,15,51,140,125,246,217,71,230,119,9,75,170,127,
2484 16,130,102,5,222,183,220,114,139,185,89,233,219,84,166,152,66,249,34,176,
2485 250,213,87,95,97,166,201,59,100,38,116,134,130,86,190,253,246,219,49,196,
2486 122,67,65,97,233,180,242,176,92,98,38,199,118,158,124,242,73,142,103,168,
2487 36,206,35,161,165,152,145,155,219,154,49,8,132,180,35,23,226,55,141,142,
2488 201,18,231,81,53,177,17,185,15,157,12,167,70,153,123,81,106,185,206,165,
2489 253,246,219,79,204,213,56,0,126,92,127,253,245,218,238,248,65,213,81,129,
2490 39,158,120,162,76,237,210,97,135,29,38,64,104,110,77,6,184,120,160,30,143,
2491 80,70,185,68,133,136,83,163,136,236,143,61,246,24,85,167,237,235,140,51,
2492 206,192,44,252,227,31,255,144,169,117,210,186,135,185,159,79,115,125,185,
2493 26,53,54,54,222,119,223,125,88,81,109,155,80,144,186,253,253,239,127,47,
2494 83,187,196,65,234,167,17,227,37,11,129,80,83,76,76,204,7,31,124,128,51,
2495 196,24,131,34,223,126,251,173,184,232,109,22,221,221,32,237,4,133,92,222,
2496 92,98,149,47,194,239,244,36,153,194,157,192,192,250,245,235,233,97,159,
2497 127,254,57,188,196,242,106,22,77,47,58,186,60,32,157,228,58,15,98,203,177,
2498 177,177,108,147,45,51,203,139,136,136,0,174,114,221,72,68,174,13,27,54,
2499 124,253,245,215,191,252,242,203,136,250,95,78,78,206,130,5,11,190,251,238,
2500 59,109,110,43,143,123,115,137,85,66,236,11,179,78,243,49,255,29,150,94,
2501 102,49,9,192,139,253,225,135,31,230,204,153,195,120,166,200,194,124,143,
2502 157,104,151,228,228,100,42,25,247,133,146,2,54,198,179,92,231,78,80,97,
2503 233,210,165,20,16,179,165,117,60,223,85,84,84,132,65,196,166,35,154,67,
2504 176,13,138,99,131,244,221,70,214,236,230,146,235,54,23,199,95,86,86,198,
2505 33,177,65,10,34,250,42,7,38,243,232,36,210,251,167,246,246,118,154,21,127,
2506 194,191,102,165,17,245,205,10,245,41,178,92,55,66,225,113,98,40,94,121,
2507 229,21,12,197,27,111,188,65,175,22,23,86,71,36,230,10,11,23,46,100,204,
2508 178,53,183,163,85,19,211,235,181,107,215,82,240,47,190,248,98,201,146,37,
2509 12,4,183,233,101,21,111,46,3,92,125,17,89,178,178,178,104,77,198,59,128,
2510 97,35,114,133,7,137,29,25,228,101,149,254,144,248,77,61,208,243,169,7,202,
2511 229,221,202,249,174,146,146,146,159,126,250,137,105,31,219,20,3,68,238,
2512 123,115,137,196,227,43,43,130,80,73,41,108,101,6,161,146,146,210,88,75,
2513 129,80,73,201,66,82,32,84,82,10,188,20,8,149,148,44,36,5,66,37,165,192,
2514 75,129,80,73,201,66,82,32,84,82,10,188,20,8,149,148,44,36,5,66,37,165,192,
2515 75,129,80,73,201,66,82,32,84,82,10,188,20,8,149,148,44,36,5,66,37,165,192,
2516 75,129,80,73,201,66,82,32,84,82,10,188,20,8,149,148,172,162,254,254,254,
2517 230,230,230,168,168,168,182,182,54,63,30,193,86,82,82,242,79,10,132,74,
2518 74,227,41,128,215,218,218,90,90,90,186,105,211,166,200,200,200,136,136,
2519 136,245,235,215,243,151,223,133,133,133,149,149,149,117,117,117,10,138,
2520 74,74,99,42,5,66,37,165,241,81,111,111,47,144,131,127,41,41,41,197,197,
2521 197,48,15,71,176,187,187,27,236,181,183,183,227,26,54,54,54,230,229,229,
2522 37,36,36,68,71,71,87,85,85,141,245,27,230,148,148,194,86,10,132,74,74,129,
2523 86,95,95,95,117,117,117,106,106,42,142,32,204,243,254,158,82,120,89,83,
2524 83,19,19,19,19,31,31,95,80,80,96,145,119,51,42,41,133,146,20,8,149,148,
2525 2,42,192,150,149,149,133,171,167,255,38,201,176,2,150,176,51,34,34,2,223,
2526 209,143,23,124,43,41,41,121,145,2,161,146,82,224,212,221,221,157,147,147,
2527 131,35,232,31,204,128,104,110,110,238,166,77,155,70,235,251,0,74,74,74,
2528 72,129,80,73,41,64,130,130,41,41,41,229,229,229,91,226,210,245,247,247,
2529 23,21,21,229,231,231,143,244,28,105,93,93,93,161,83,248,148,237,237,237,
2530 34,178,182,182,86,191,29,14,172,170,170,170,164,164,68,124,228,139,181,
2531 164,175,168,168,208,184,11,137,89,212,190,192,215,208,208,64,250,198,198,
2532 198,150,150,22,22,113,112,197,201,94,126,179,133,166,166,38,103,42,165,
2533 255,223,222,185,54,165,145,132,97,244,255,255,165,88,101,188,113,21,48,
2534 32,32,72,68,238,33,10,137,128,17,48,169,202,158,226,237,237,154,29,98,228,
2535 146,65,118,247,57,31,168,238,153,183,123,154,79,167,158,161,103,16,251,
2536 142,68,40,196,46,192,37,216,11,11,110,191,5,20,117,145,11,209,225,90,83,
2537 61,60,60,32,45,70,165,82,41,188,133,210,16,94,60,30,15,238,193,233,247,
2538 251,133,66,129,117,114,138,5,159,158,158,246,122,189,193,96,224,101,137,
2539 222,56,216,110,183,185,52,48,60,147,201,144,80,1,137,50,109,50,153,228,
2540 18,84,82,131,113,109,148,16,123,142,68,40,196,46,248,252,249,179,217,194,
2541 245,183,3,141,37,18,9,20,229,250,171,129,186,240,19,32,54,210,30,162,66,
2542 99,65,17,18,88,137,119,156,197,130,147,201,196,255,225,184,7,17,102,179,
2543 89,219,179,131,89,175,174,174,24,130,95,75,165,210,124,62,231,11,98,122,
2544 36,202,217,98,177,168,68,40,254,45,72,132,66,68,206,120,60,38,135,253,89,
2545 49,144,222,112,146,207,106,171,64,49,105,207,110,108,162,100,188,200,12,
2546 65,17,30,28,28,32,63,114,30,58,196,148,196,187,163,163,163,122,189,238,
2547 175,130,8,49,28,34,124,124,124,68,123,152,56,159,207,19,4,47,47,47,249,
2548 142,156,98,114,68,72,59,157,78,163,70,27,37,196,158,35,17,10,17,45,248,
2549 198,164,229,250,1,16,12,30,66,36,248,99,131,176,120,126,126,62,28,14,93,
2550 103,5,184,74,185,92,14,186,51,36,194,119,239,222,145,92,73,120,136,141,
2551 53,211,160,184,213,106,17,254,172,0,17,86,42,149,219,219,219,94,175,135,
2552 32,209,33,34,68,120,76,75,49,106,164,30,17,146,53,131,250,20,98,207,145,
2553 8,133,136,22,60,145,201,100,80,136,235,255,13,158,192,28,36,167,247,239,
2554 223,19,194,186,221,174,59,177,50,4,178,144,216,126,15,174,194,79,174,179,
2555 32,36,194,92,46,71,108,69,174,216,142,6,226,100,114,180,231,179,44,223,
2556 162,90,173,34,75,76,201,226,25,107,34,228,8,113,16,59,98,125,139,137,28,
2557 161,109,163,132,216,115,36,66,33,162,133,104,133,51,150,173,128,48,142,
2558 143,143,219,237,54,34,225,51,22,139,221,223,223,187,115,171,241,252,252,
2559 140,165,38,147,137,235,191,6,122,195,79,174,179,192,68,104,38,35,146,34,
2560 60,12,199,193,78,167,131,14,105,208,197,157,92,200,234,77,132,211,233,52,
2561 149,74,145,20,25,104,34,132,100,50,105,190,36,224,18,85,125,136,20,98,255,
2562 145,8,133,136,22,68,178,188,171,197,28,214,104,52,188,32,241,10,254,88,
2563 14,142,191,129,177,165,82,105,245,187,163,8,44,244,0,34,153,143,73,56,104,
2564 59,104,104,179,128,241,120,108,109,26,88,13,201,185,234,197,47,139,136,
2565 147,83,12,100,148,53,248,228,20,3,237,238,46,99,105,175,158,83,133,120,
2566 115,36,66,33,162,133,56,136,81,92,231,111,72,90,137,68,34,168,61,212,136,
2567 8,107,181,154,121,101,69,8,121,204,239,58,155,130,192,176,221,90,215,21,
2568 226,191,132,68,40,68,180,160,183,96,168,130,201,100,18,139,197,66,49,17,
2569 15,53,155,205,227,227,99,255,180,251,42,244,251,253,106,181,234,58,66,136,
2570 141,144,8,133,136,144,239,223,191,135,68,136,240,174,175,175,115,185,220,
2571 242,93,80,66,97,58,157,46,149,74,171,239,32,29,14,135,39,39,39,174,35,132,
2572 216,8,137,80,136,8,121,122,122,202,102,179,193,95,230,16,225,151,47,95,
2573 66,155,86,60,36,188,179,179,179,95,238,52,177,200,200,88,215,95,48,30,143,
2574 79,79,79,67,137,83,8,177,22,18,161,16,209,18,18,225,171,196,227,241,106,
2575 181,186,28,10,103,179,25,225,47,244,115,35,221,68,34,225,58,66,136,141,
2576 144,8,133,136,150,124,62,191,214,207,126,100,62,92,184,252,80,68,169,84,
2577 42,22,139,33,65,82,220,110,183,93,231,5,200,139,181,90,173,94,175,163,82,
2578 123,47,26,224,218,160,83,105,95,95,95,91,220,164,254,230,230,134,154,225,
2579 112,232,119,208,220,223,223,247,122,61,219,11,74,65,171,213,178,183,120,
2580 251,245,176,96,38,167,158,154,78,167,67,20,182,227,66,236,63,18,161,16,
2581 209,178,214,19,14,64,124,196,157,104,201,245,23,32,170,179,179,179,208,
2582 125,81,192,112,248,201,117,126,5,90,42,151,203,200,18,243,85,42,21,28,134,
2583 149,153,167,80,40,140,22,127,25,1,207,139,191,72,164,6,1,115,117,124,102,
2584 242,246,143,15,2,235,73,165,82,166,55,190,206,225,225,33,182,35,140,250,
2585 103,31,27,141,70,191,223,71,132,12,79,167,211,219,239,101,21,98,103,72,
2586 132,66,68,11,134,88,247,73,121,156,116,116,116,100,47,106,161,139,126,144,
2587 80,232,165,48,64,26,179,119,161,185,254,175,160,6,89,162,183,193,96,128,
2588 146,241,34,115,118,187,93,86,229,195,156,197,65,106,72,156,148,97,56,123,
2589 136,222,199,65,224,72,46,151,67,114,140,34,14,218,187,182,169,228,32,101,
2590 166,82,230,161,205,226,111,111,111,145,174,89,147,50,190,126,208,169,66,
2591 236,27,18,161,16,209,130,60,16,67,80,42,175,130,147,16,143,253,11,18,118,
2592 65,54,4,184,229,155,141,148,33,164,229,221,167,203,224,33,84,135,255,76,
2593 90,88,138,85,185,115,139,21,146,23,113,36,53,120,139,179,40,243,230,230,
2594 230,235,215,175,126,217,124,5,142,144,243,200,148,87,87,87,116,169,100,
2595 42,66,33,11,35,35,114,138,245,48,137,189,122,155,98,123,203,154,189,61,
2596 142,227,54,143,16,123,136,68,40,68,180,96,142,108,54,187,214,207,132,64,
2597 240,34,111,101,50,25,116,136,99,150,45,8,20,32,45,31,236,94,130,130,102,
2598 179,201,36,22,203,70,163,81,62,159,15,154,41,36,66,172,198,106,249,68,198,
2599 190,12,243,17,236,80,50,199,201,124,132,66,42,241,28,51,227,57,206,178,
2600 24,186,119,119,119,7,7,7,23,23,23,177,88,204,2,40,89,118,21,85,11,241,134,
2601 72,132,66,68,14,130,41,151,203,175,26,43,4,94,177,29,40,174,255,79,176,
2602 90,173,86,67,60,174,255,2,76,130,183,236,215,65,59,130,192,88,143,181,13,
2603 180,135,8,113,45,194,70,147,64,182,35,14,146,234,130,34,228,8,3,201,160,
2604 131,193,128,57,77,132,172,144,180,106,129,213,180,199,146,72,177,20,19,
2605 28,153,57,157,78,79,167,83,155,68,136,253,68,34,20,34,114,240,10,9,105,
2606 121,171,203,54,144,204,206,207,207,95,149,43,162,58,60,60,36,86,162,40,
2607 52,134,171,80,154,255,89,17,165,177,42,38,193,121,241,120,220,254,203,130,
2608 180,71,155,84,135,131,81,157,85,146,252,112,27,217,238,228,228,4,177,145,
2609 2,109,107,12,245,168,17,143,82,131,2,139,197,162,213,115,138,121,240,37,
2610 161,86,34,20,123,142,68,40,196,46,64,27,118,171,208,245,183,3,189,33,54,
2611 92,232,250,47,131,144,208,176,97,87,71,123,94,111,118,11,212,14,82,96,90,
2612 181,33,20,251,50,240,163,108,18,218,254,44,167,252,64,107,24,214,253,83,
2613 95,89,136,232,144,8,133,216,5,40,129,188,85,169,84,112,140,59,180,41,179,
2614 217,12,167,146,201,92,127,11,230,11,92,71,136,255,43,18,161,16,59,226,219,
2615 183,111,201,100,242,195,135,15,219,184,16,111,101,179,89,255,100,133,16,
2616 98,123,36,66,33,118,199,116,58,77,36,18,228,66,219,192,185,46,100,65,44,
2617 216,126,237,85,50,66,136,181,144,8,133,216,41,79,79,79,197,98,241,242,242,
2618 242,241,241,113,245,104,72,165,61,17,255,251,247,200,8,33,54,64,34,20,98,
2619 215,252,248,241,227,211,167,79,241,120,188,94,175,175,178,225,101,52,26,
2620 93,92,92,212,106,53,123,117,139,59,42,132,248,67,72,132,66,188,13,132,188,
2621 106,181,154,76,38,155,205,102,191,223,71,114,100,196,231,5,179,217,108,
2622 50,153,220,221,221,117,187,221,143,31,63,230,243,121,92,40,5,10,17,17,18,
2623 161,16,111,9,206,235,245,122,173,86,235,122,65,163,209,40,20,10,132,63,
2624 107,119,58,157,135,135,7,61,129,32,68,164,72,132,66,188,61,254,145,59,152,
2625 207,231,124,210,85,4,20,98,23,252,252,249,23,247,22,197,121,219,202,139,
2626 117,0,0,0,0,73,69,78,68,174,66,96,130};
2627 
2628 static size_t xml_res_size_1 = 242;
2629 static unsigned char xml_res_file_1[] = {
2630 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
2631 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
2632 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
2633 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
2634 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
2635 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
2636 45,62,10,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,
2637 120,66,105,116,109,97,112,34,32,110,97,109,101,61,34,65,98,111,117,116,
2638 50,48,49,55,34,62,80,114,111,112,101,114,116,105,101,115,70,111,114,109,
2639 66,105,116,109,97,112,115,46,99,112,112,36,100,97,116,97,95,105,109,97,
2640 103,101,115,95,65,98,111,117,116,50,48,49,55,46,112,110,103,60,47,111,98,
2641 106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
2642 
2643 void wxCDAD0InitBitmapResources()
2644 {
2645 
2646  // Check for memory FS. If not present, load the handler:
2647  {
2648  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
2649  wxFileSystem fsys;
2650  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
2651  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
2652  if (f) delete f;
2653  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
2654  }
2655 
2656  XRC_ADD_FILE(wxT("XRC_resource/PropertiesFormBitmaps.cpp$data_images_About2017.png"), xml_res_file_0, xml_res_size_0, wxT("image/png"));
2657  XRC_ADD_FILE(wxT("XRC_resource/PropertiesFormBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_PropertiesFormBitmaps.xrc"), xml_res_file_1, xml_res_size_1, wxT("text/xml"));
2658  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/PropertiesFormBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_PropertiesFormBitmaps.xrc"));
2659 }
+
+ + + + diff --git a/docs/doxygen/html/_rate_limiter_8cpp_source.html b/docs/doxygen/html/_rate_limiter_8cpp_source.html new file mode 100644 index 0000000..8ee9399 --- /dev/null +++ b/docs/doxygen/html/_rate_limiter_8cpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +Project/RateLimiter.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RateLimiter.cpp
+
+
+
1 #include "RateLimiter.h"
2 #include "RateLimiterForm.h"
3 
4 RateLimiter::RateLimiter(int id) : ControlElement(id)
5 {
6  m_width = m_height = 36.0;
7  Node* nodeIn = new Node(m_position + wxPoint2DDouble(-18, 0), Node::NODE_IN, m_borderSize);
8  nodeIn->StartMove(m_position);
9  Node* nodeOut = new Node(m_position + wxPoint2DDouble(18, 0), Node::NODE_OUT, m_borderSize);
10  nodeOut->SetAngle(180.0);
11  nodeOut->StartMove(m_position);
12  m_nodeList.push_back(nodeIn);
13  m_nodeList.push_back(nodeOut);
14 }
15 
16 RateLimiter::~RateLimiter() {}
17 void RateLimiter::Draw(wxPoint2DDouble translation, double scale) const
18 {
19  glLineWidth(1.0);
20  if(m_selected) {
21  glColor4dv(m_selectionColour.GetRGBA());
22  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
23  DrawRectangle(m_position, m_width + borderSize, m_height + borderSize);
24  }
25  glColor4d(1.0, 1.0, 1.0, 1.0);
26  DrawRectangle(m_position, m_width, m_height);
27  glColor4d(0.0, 0.0, 0.0, 1.0);
28  DrawRectangle(m_position, m_width, m_height, GL_LINE_LOOP);
29 
30  // Plot symbol.
31  std::vector<wxPoint2DDouble> axis;
32  axis.push_back(m_position + wxPoint2DDouble(-13, 0));
33  axis.push_back(m_position + wxPoint2DDouble(13, 0));
34  axis.push_back(m_position + wxPoint2DDouble(0, -13));
35  axis.push_back(m_position + wxPoint2DDouble(0, 13));
36  DrawLine(axis, GL_LINES);
37 
38  glLineWidth(2.0);
39  std::vector<wxPoint2DDouble> limSymbol;
40  limSymbol.push_back(m_position + wxPoint2DDouble(10, -10));
41  limSymbol.push_back(m_position + wxPoint2DDouble(-10, 10));
42  glColor4d(0.0, 0.3, 1.0, 1.0);
43  DrawLine(limSymbol);
44 
45  glColor4d(0.0, 0.0, 0.0, 1.0);
46  DrawNodes();
47 }
48 
49 bool RateLimiter::ShowForm(wxWindow* parent, Element* element)
50 {
51  RateLimiterForm* form = new RateLimiterForm(parent, this);
52  if(form->ShowModal() == wxID_OK) {
53  form->Destroy();
54  return true;
55  }
56  form->Destroy();
57  return false;
58 }
59 
60 void RateLimiter::Rotate(bool clockwise)
61 {
62  if(clockwise)
63  m_angle += 90.0;
64  else
65  m_angle -= 90.0;
66  if(m_angle >= 360.0)
67  m_angle = 0.0;
68  else if(m_angle < 0)
69  m_angle = 270.0;
70 
71  UpdatePoints();
72 
73  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
74  Node* node = *it;
75  node->Rotate(clockwise);
76  }
77 }
78 
79 void RateLimiter::UpdatePoints()
80 {
81  if(m_angle == 0.0) {
82  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-18, 0));
83  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(18, 0));
84  } else if(m_angle == 90.0) {
85  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, -18));
86  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, 18));
87  } else if(m_angle == 180.0) {
88  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(18, 0));
89  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-18, 0));
90  } else if(m_angle == 270.0) {
91  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, 18));
92  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -18));
93  }
94 }
95 
96 bool RateLimiter::Solve(double input, double timeStep)
97 {
98  double rate = (input - m_output) / timeStep;
99 
100  bool reachLimit = false;
101  if(rate > m_upLimit) {
102  rate = m_upLimit;
103  reachLimit = true;
104  } else if(rate < m_lowLimit) {
105  rate = m_lowLimit;
106  reachLimit = true;
107  }
108 
109  if(reachLimit)
110  m_output += rate * timeStep;
111  else
112  m_output = input;
113  return true;
114 }
115 
117 {
118  RateLimiter* copy = new RateLimiter(m_elementID);
119  *copy = *this;
120  return copy;
121 }
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: RateLimiter.cpp:49
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: RateLimiter.cpp:60
+ +
virtual Element * GetCopy()
Get a the element copy.
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: RateLimiter.cpp:17
+ +
+
+ + + + diff --git a/docs/doxygen/html/_rate_limiter_8h_source.html b/docs/doxygen/html/_rate_limiter_8h_source.html index 3ff74d9..f7a6ea9 100644 --- a/docs/doxygen/html/_rate_limiter_8h_source.html +++ b/docs/doxygen/html/_rate_limiter_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/RateLimiter.h Source File +Project/RateLimiter.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
RateLimiter.h
-
1 #ifndef RATELIMITER_H
2 #define RATELIMITER_H
3 
4 #include "ControlElement.h"
5 
6 class RateLimiterForm;
7 
8 class RateLimiter : public ControlElement
9 {
10  public:
11  RateLimiter(int id);
12  ~RateLimiter();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element);
18  virtual void Rotate(bool clockwise = true);
19 
20  virtual void UpdatePoints();
21 
22  double GetUpLimit() const { return m_upLimit; }
23  double GetLowLimit() const { return m_lowLimit; }
24  void SetUpLimit(double upLimit) { m_upLimit = upLimit; }
25  void SetLowLimit(double lowLimit) { m_lowLimit = lowLimit; }
26 
27  virtual bool Solve(double input, double timeStep);
28 
29  virtual Element* GetCopy();
30 
31  protected:
32  double m_upLimit = 5.0;
33  double m_lowLimit = -5.0;
34 };
35 
36 #endif // RATELIMITER_H
Definition: Element.h:88
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: RateLimiter.cpp:49
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: RateLimiter.h:16
-
Definition: RateLimiter.h:8
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: RateLimiter.cpp:60
-
Definition: ControlElement.h:53
-
virtual Element * GetCopy()
Get a the element copy.
Definition: RateLimiter.cpp:116
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: RateLimiter.h:15
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: RateLimiter.cpp:17
-
Definition: RateLimiterForm.h:7
+
1 #ifndef RATELIMITER_H
2 #define RATELIMITER_H
3 
4 #include "ControlElement.h"
5 
6 class RateLimiterForm;
7 
8 class RateLimiter : public ControlElement
9 {
10  public:
11  RateLimiter(int id);
12  ~RateLimiter();
13 
14  virtual void Draw(wxPoint2DDouble translation, double scale) const;
15  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
16  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
17  virtual bool ShowForm(wxWindow* parent, Element* element);
18  virtual void Rotate(bool clockwise = true);
19 
20  virtual void UpdatePoints();
21 
22  double GetUpLimit() const { return m_upLimit; }
23  double GetLowLimit() const { return m_lowLimit; }
24  void SetUpLimit(double upLimit) { m_upLimit = upLimit; }
25  void SetLowLimit(double lowLimit) { m_lowLimit = lowLimit; }
26 
27  virtual bool Solve(double input, double timeStep);
28 
29  virtual Element* GetCopy();
30 
31  protected:
32  double m_upLimit = 5.0;
33  double m_lowLimit = -5.0;
34 };
35 
36 #endif // RATELIMITER_H
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: RateLimiter.cpp:49
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: RateLimiter.h:16
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: RateLimiter.cpp:60
+ +
virtual Element * GetCopy()
Get a the element copy.
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: RateLimiter.h:15
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: RateLimiter.cpp:17
+
+
- + diff --git a/docs/doxygen/html/_rate_limiter_form_8cpp_source.html b/docs/doxygen/html/_rate_limiter_form_8cpp_source.html new file mode 100644 index 0000000..992e733 --- /dev/null +++ b/docs/doxygen/html/_rate_limiter_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/RateLimiterForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RateLimiterForm.cpp
+
+
+
1 #include "RateLimiterForm.h"
2 #include "RateLimiter.h"
3 
4 RateLimiterForm::RateLimiterForm(wxWindow* parent, RateLimiter* rateLimiter) : RateLimiterFormBase(parent)
5 {
6  SetSize(GetBestSize());
7 
8  m_rateLimiter = rateLimiter;
9  m_parent = parent;
10 
11  m_textCtrlUpLimit->SetValue(m_rateLimiter->StringFromDouble(m_rateLimiter->GetUpLimit()));
12  m_textCtrlLowLimit->SetValue(m_rateLimiter->StringFromDouble(m_rateLimiter->GetLowLimit()));
13 }
14 
15 RateLimiterForm::~RateLimiterForm() {}
16 bool RateLimiterForm::ValidateData()
17 {
18  double upLimit;
19  double lowLimit;
20 
21  if(!m_rateLimiter->DoubleFromString(this, m_textCtrlUpLimit->GetValue(), upLimit,
22  _("Value entered incorrectly in the field \"Upper limit\".")))
23  return false;
24  if(!m_rateLimiter->DoubleFromString(this, m_textCtrlLowLimit->GetValue(), lowLimit,
25  _("Value entered incorrectly in the field \"Lower limit\".")))
26  return false;
27 
28  m_rateLimiter->SetUpLimit(upLimit);
29  m_rateLimiter->SetLowLimit(lowLimit);
30 
31  return true;
32 }
33 
34 void RateLimiterForm::OnOKButtonClick(wxCommandEvent& event)
35 {
36  if(ValidateData()) EndModal(wxID_OK);
37 }
+ +
+
+ + + + diff --git a/docs/doxygen/html/_rate_limiter_form_8h_source.html b/docs/doxygen/html/_rate_limiter_form_8h_source.html index 06813c0..d9e6b55 100644 --- a/docs/doxygen/html/_rate_limiter_form_8h_source.html +++ b/docs/doxygen/html/_rate_limiter_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/RateLimiterForm.h Source File +Project/RateLimiterForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
RateLimiterForm.h
-
1 #ifndef RATELIMITERFORM_H
2 #define RATELIMITERFORM_H
3 #include "ElementForm.h"
4 
5 class RateLimiter;
6 
8 {
9  public:
10  RateLimiterForm(wxWindow* parent, RateLimiter* rateLimiter);
11  virtual ~RateLimiterForm();
12  bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) {EndModal(wxID_OK);}
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  RateLimiter* m_rateLimiter = NULL;
20 };
21 #endif // RATELIMITERFORM_H
Definition: RateLimiter.h:8
-
Definition: ElementForm.h:861
-
Definition: RateLimiterForm.h:7
+
1 #ifndef RATELIMITERFORM_H
2 #define RATELIMITERFORM_H
3 #include "ElementForm.h"
4 
5 class RateLimiter;
6 
8 {
9  public:
10  RateLimiterForm(wxWindow* parent, RateLimiter* rateLimiter);
11  virtual ~RateLimiterForm();
12  bool ValidateData();
13 
14  protected:
15  virtual void OnCancelButtonClick(wxCommandEvent& event) {EndModal(wxID_OK);}
16  virtual void OnOKButtonClick(wxCommandEvent& event);
17 
18  wxWindow* m_parent = NULL;
19  RateLimiter* m_rateLimiter = NULL;
20 };
21 #endif // RATELIMITERFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_reactive_shunt_element_form_8cpp_source.html b/docs/doxygen/html/_reactive_shunt_element_form_8cpp_source.html new file mode 100644 index 0000000..d4888ed --- /dev/null +++ b/docs/doxygen/html/_reactive_shunt_element_form_8cpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Project/ReactiveShuntElementForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ReactiveShuntElementForm.cpp
+
+
+
1 #include "ReactiveShuntElementForm.h"
2 #include "SwitchingForm.h"
3 #include "Capacitor.h"
4 #include "Inductor.h"
5 
6 ReactiveShuntElementForm::ReactiveShuntElementForm(wxWindow* parent, Capacitor* capacitor)
8 {
9  SetSize(GetBestSize());
10  CapacitorElectricalData data = capacitor->GetElectricalData();
11 
12  m_textCtrlName->SetValue(data.name);
13 
14  m_textCtrlReactivePower->SetValue(Capacitor::StringFromDouble(data.reactivePower));
15  switch(data.reactivePowerUnit) {
16  case UNIT_PU: {
17  m_choiceReactivePower->SetSelection(0);
18  } break;
19  case UNIT_VAr: {
20  m_choiceReactivePower->SetSelection(1);
21  } break;
22  case UNIT_kVAr: {
23  m_choiceReactivePower->SetSelection(2);
24  } break;
25  case UNIT_MVAr: {
26  m_choiceReactivePower->SetSelection(3);
27  } break;
28  default:
29  break;
30  }
31 
32  m_parent = parent;
33  m_capacitor = capacitor;
34 }
35 
36 ReactiveShuntElementForm::ReactiveShuntElementForm(wxWindow* parent, Inductor* inductor)
38 {
39  InductorElectricalData data = inductor->GetElectricalData();
40 
41  m_textCtrlName->SetValue(data.name);
42 
43  m_textCtrlReactivePower->SetValue(Inductor::StringFromDouble(data.reactivePower));
44  switch(data.reactivePowerUnit) {
45  case UNIT_PU: {
46  m_choiceReactivePower->SetSelection(0);
47  } break;
48  case UNIT_VAr: {
49  m_choiceReactivePower->SetSelection(1);
50  } break;
51  case UNIT_kVAr: {
52  m_choiceReactivePower->SetSelection(2);
53  } break;
54  case UNIT_MVAr: {
55  m_choiceReactivePower->SetSelection(3);
56  } break;
57  default:
58  break;
59  }
60 
61  m_parent = parent;
62  m_inductor = inductor;
63 }
64 
65 ReactiveShuntElementForm::~ReactiveShuntElementForm() {}
66 void ReactiveShuntElementForm::OnOKButtonClick(wxCommandEvent& event)
67 {
68  if(ValidateData()) EndModal(wxID_OK);
69 }
70 
71 void ReactiveShuntElementForm::OnStabilityButtonClick(wxCommandEvent& event)
72 {
73  if(ValidateData()) {
74  if(m_capacitor) {
75  SwitchingForm swForm(m_parent, m_capacitor);
76  swForm.SetTitle(_("Capacitor: Switching"));
77  swForm.ShowModal();
78  } else if(m_inductor) {
79  SwitchingForm swForm(m_parent, m_inductor);
80  swForm.SetTitle(_("Inductor: Switching"));
81  swForm.ShowModal();
82  }
83 
84  EndModal(wxID_OK);
85  }
86 }
87 
88 bool ReactiveShuntElementForm::ValidateData()
89 {
90  if(m_capacitor) {
92 
93  data.name = m_textCtrlName->GetValue();
94 
95  if(!m_capacitor->DoubleFromString(m_parent, m_textCtrlReactivePower->GetValue(), data.reactivePower,
96  _("Value entered incorrectly in the field \"Reactive power\".")))
97  return false;
98  switch(m_choiceReactivePower->GetSelection()) {
99  case 0: {
100  data.reactivePowerUnit = UNIT_PU;
101  } break;
102  case 1: {
103  data.reactivePowerUnit = UNIT_VAr;
104  } break;
105  case 2: {
106  data.reactivePowerUnit = UNIT_kVAr;
107  } break;
108  case 3: {
109  data.reactivePowerUnit = UNIT_MVAr;
110  } break;
111  }
112 
113  m_capacitor->SetElectricalData(data);
114  } else if(m_inductor) {
116 
117  data.name = m_textCtrlName->GetValue();
118 
119  if(!m_inductor->DoubleFromString(m_parent, m_textCtrlReactivePower->GetValue(), data.reactivePower,
120  _("Value entered incorrectly in the field \"Reactive power\".")))
121  return false;
122  switch(m_choiceReactivePower->GetSelection()) {
123  case 0: {
124  data.reactivePowerUnit = UNIT_PU;
125  } break;
126  case 1: {
127  data.reactivePowerUnit = UNIT_VAr;
128  } break;
129  case 2: {
130  data.reactivePowerUnit = UNIT_kVAr;
131  } break;
132  case 3: {
133  data.reactivePowerUnit = UNIT_MVAr;
134  } break;
135  }
136 
137  m_inductor->SetElectricalData(data);
138  }
139  return true;
140 }
+ + + + + + +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ + + +
+
+ + + + diff --git a/docs/doxygen/html/_reactive_shunt_element_form_8h_source.html b/docs/doxygen/html/_reactive_shunt_element_form_8h_source.html index fd4e66b..2d70af8 100644 --- a/docs/doxygen/html/_reactive_shunt_element_form_8h_source.html +++ b/docs/doxygen/html/_reactive_shunt_element_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/ReactiveShuntElementForm.h Source File +Project/ReactiveShuntElementForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
ReactiveShuntElementForm.h
-
1 #ifndef REACTIVESHUNTELEMENTFORM_H
2 #define REACTIVESHUNTELEMENTFORM_H
3 #include "ElementForm.h"
4 #include <wx/log.h>
5 
6 class Capacitor;
7 class Inductor;
8 class SwitchingForm;
9 
11 {
12  public:
13  ReactiveShuntElementForm(wxWindow* parent, Capacitor* capacitor);
14  ReactiveShuntElementForm(wxWindow* parent, Inductor* inductor);
15  virtual ~ReactiveShuntElementForm();
16  virtual bool ValidateData();
17 
18  protected:
19  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
20  virtual void OnOKButtonClick(wxCommandEvent& event);
21  virtual void OnStabilityButtonClick(wxCommandEvent& event);
22 
23  wxWindow* m_parent;
24  Capacitor* m_capacitor = NULL;
25  Inductor* m_inductor = NULL;
26 };
27 #endif // REACTIVESHUNTELEMENTFORM_H
Definition: SwitchingForm.h:8
-
Definition: ElementForm.h:597
-
Definition: Capacitor.h:14
-
Definition: Inductor.h:14
-
Definition: ReactiveShuntElementForm.h:10
+
1 #ifndef REACTIVESHUNTELEMENTFORM_H
2 #define REACTIVESHUNTELEMENTFORM_H
3 #include "ElementForm.h"
4 #include <wx/log.h>
5 
6 class Capacitor;
7 class Inductor;
8 class SwitchingForm;
9 
11 {
12  public:
13  ReactiveShuntElementForm(wxWindow* parent, Capacitor* capacitor);
14  ReactiveShuntElementForm(wxWindow* parent, Inductor* inductor);
15  virtual ~ReactiveShuntElementForm();
16  virtual bool ValidateData();
17 
18  protected:
19  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
20  virtual void OnOKButtonClick(wxCommandEvent& event);
21  virtual void OnStabilityButtonClick(wxCommandEvent& event);
22 
23  wxWindow* m_parent;
24  Capacitor* m_capacitor = NULL;
25  Inductor* m_inductor = NULL;
26 };
27 #endif // REACTIVESHUNTELEMENTFORM_H
+ + + +
+
- + diff --git a/docs/doxygen/html/_shunt_8cpp_source.html b/docs/doxygen/html/_shunt_8cpp_source.html new file mode 100644 index 0000000..aa187a6 --- /dev/null +++ b/docs/doxygen/html/_shunt_8cpp_source.html @@ -0,0 +1,112 @@ + + + + + + + +Project/Shunt.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Shunt.cpp
+
+
+
1 #include "Shunt.h"
2 
3 Shunt::Shunt() : PowerElement() {}
4 Shunt::~Shunt() {}
5 void Shunt::UpdateSwitchesPosition()
6 {
7  if(m_parentList[0]) {
8  m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], m_pointList[2]);
9  } else {
10  m_pointList[1] = m_pointList[0];
11  }
12  UpdateSwitches();
13 }
14 
15 void Shunt::Move(wxPoint2DDouble position)
16 {
17  SetPosition(m_movePos + position - m_moveStartPt);
18  for(int i = 2; i < (int)m_pointList.size(); i++) {
19  m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
20  }
21  if(!m_parentList[0]) {
22  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
23  }
24  UpdateSwitchesPosition();
25  UpdatePowerFlowArrowsPosition();
26 }
27 
28 void Shunt::MoveNode(Element* element, wxPoint2DDouble position)
29 {
30  if(element) {
31  if(element == m_parentList[0]) {
32  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
33  }
34  } else {
35  if(m_activeNodeID == 1) {
36  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
37  if(m_parentList[0]) {
38  m_parentList[0]->RemoveChild(this);
39  m_parentList[0] = NULL;
40  m_online = false;
41  }
42  }
43  }
44 
45  // Recalculate switches positions
46  UpdateSwitchesPosition();
47  UpdatePowerFlowArrowsPosition();
48 }
49 
50 void Shunt::StartMove(wxPoint2DDouble position)
51 {
52  m_moveStartPt = position;
53  m_movePts = m_pointList;
54  m_movePos = m_position;
55 }
56 
58 {
59  if(parent == m_parentList[0]) {
60  m_parentList[0] = NULL;
61  m_online = false;
62  UpdateSwitchesPosition();
63  UpdatePowerFlowArrowsPosition();
64  }
65 }
66 
67 bool Shunt::NodeContains(wxPoint2DDouble position)
68 {
69  wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
70  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
71 
72  if(nodeRect.Contains(position)) {
73  m_activeNodeID = 1;
74  return true;
75  }
76 
77  m_activeNodeID = 0;
78  return false;
79 }
80 
82 {
83  if(parent && m_activeNodeID != 0) {
84  wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
85  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
86 
87  if(parent->Intersects(nodeRect)) {
88  m_parentList[0] = parent;
89 
90  // Centralize the node on bus.
91  wxPoint2DDouble parentPt =
92  parent->RotateAtPosition(m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
93  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
94  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
95  m_pointList[0] = parentPt;
96 
97  UpdateSwitchesPosition();
98  UpdatePowerFlowArrowsPosition();
99  return true;
100  } else {
101  m_parentList[0] = NULL;
102  m_online = false;
103  }
104  }
105  return false;
106 }
107 
109 {
110  if(m_parentList[0]) {
111  wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
112  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
113 
114  if(!m_parentList[0]->Intersects(nodeRect)) {
115  m_parentList[0]->RemoveChild(this);
116  m_parentList[0] = NULL;
117  m_online = false;
118  UpdateSwitchesPosition();
119  UpdatePowerFlowArrowsPosition();
120  }
121  }
122 }
123 
124 void Shunt::RotateNode(Element* parent, bool clockwise)
125 {
126  double rotAngle = m_rotationAngle;
127  if(!clockwise) rotAngle = -m_rotationAngle;
128 
129  if(parent == m_parentList[0]) {
130  m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
131  UpdateSwitchesPosition();
132  UpdatePowerFlowArrowsPosition();
133  }
134 }
135 
136 void Shunt::DrawGround(wxPoint2DDouble position) const
137 {
138  std::vector<wxPoint2DDouble> groundPts;
139  groundPts.push_back(position);
140  groundPts.push_back(position + wxPoint2DDouble(0, 10));
141  groundPts.push_back(position + wxPoint2DDouble(-10, 10));
142  groundPts.push_back(position + wxPoint2DDouble(10, 10));
143  groundPts.push_back(position + wxPoint2DDouble(-6, 15));
144  groundPts.push_back(position + wxPoint2DDouble(6, 15));
145  groundPts.push_back(position + wxPoint2DDouble(-3, 20));
146  groundPts.push_back(position + wxPoint2DDouble(3, 20));
147 
148  DrawLine(groundPts, GL_LINES);
149 }
150 
151 void Shunt::UpdatePowerFlowArrowsPosition()
152 {
153  std::vector<wxPoint2DDouble> edges;
154  switch(m_pfDirection) {
155  case PF_NONE: {
156  m_powerFlowArrow.clear();
157  } break;
158  case PF_TO_BUS: {
159  edges.push_back(m_pointList[2]);
160  edges.push_back(m_pointList[1]);
161  } break;
162  case PF_TO_ELEMENT: {
163  edges.push_back(m_pointList[1]);
164  edges.push_back(m_pointList[2]);
165  } break;
166  default:
167  break;
168  }
169  CalculatePowerFlowPts(edges);
170 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+ +
virtual void MoveNode(Element *element, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Shunt.cpp:28
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Shunt.cpp:108
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Shunt.cpp:57
+
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
virtual bool Intersects(wxRect2DDouble rect) const =0
Check if the element&#39;s rect intersects other rect.
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Shunt.cpp:124
+ +
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Shunt.cpp:15
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Shunt.cpp:50
+ + +
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Shunt.cpp:81
+
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Shunt.cpp:67
+ +
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+
+
+ + + + diff --git a/docs/doxygen/html/_shunt_8h_source.html b/docs/doxygen/html/_shunt_8h_source.html index d3443d8..0ce1fbe 100644 --- a/docs/doxygen/html/_shunt_8h_source.html +++ b/docs/doxygen/html/_shunt_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Shunt.h Source File +Project/Shunt.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Shunt.h
-
1 #ifndef SHUNT_H
2 #define SHUNT_H
3 
4 #include "PowerElement.h"
5 #include "Bus.h"
6 
7 class Shunt : public PowerElement
8 {
9 public:
10  Shunt();
11  ~Shunt();
12 
13  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
14  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
15  virtual void Move(wxPoint2DDouble position);
16  virtual void MoveNode(Element* element, wxPoint2DDouble position);
17  virtual void StartMove(wxPoint2DDouble position);
18  virtual void RotateNode(Element* parent, bool clockwise = true);
19  virtual void RemoveParent(Element* parent);
20  virtual bool NodeContains(wxPoint2DDouble position);
21  virtual bool SetNodeParent(Element* parent);
22  virtual void UpdateNodes();
23 
24  protected:
25  void UpdateSwitchesPosition();
26  void UpdatePowerFlowArrowsPosition();
27  void DrawGround(wxPoint2DDouble position) const;
28  bool m_inserted = false;
29 
30 };
31 
32 #endif // SHUNT_H
Definition: Element.h:88
-
virtual void MoveNode(Element *element, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Shunt.cpp:28
-
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Shunt.cpp:108
-
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Shunt.cpp:57
-
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Shunt.cpp:124
-
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Shunt.cpp:15
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Shunt.h:13
+
1 #ifndef SHUNT_H
2 #define SHUNT_H
3 
4 #include "PowerElement.h"
5 #include "Bus.h"
6 
7 class Shunt : public PowerElement
8 {
9 public:
10  Shunt();
11  ~Shunt();
12 
13  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
14  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
15  virtual void Move(wxPoint2DDouble position);
16  virtual void MoveNode(Element* element, wxPoint2DDouble position);
17  virtual void StartMove(wxPoint2DDouble position);
18  virtual void RotateNode(Element* parent, bool clockwise = true);
19  virtual void RemoveParent(Element* parent);
20  virtual bool NodeContains(wxPoint2DDouble position);
21  virtual bool SetNodeParent(Element* parent);
22  virtual void UpdateNodes();
23 
24  protected:
25  void UpdateSwitchesPosition();
26  void UpdatePowerFlowArrowsPosition();
27  void DrawGround(wxPoint2DDouble position) const;
28  bool m_inserted = false;
29 
30 };
31 
32 #endif // SHUNT_H
+
virtual void MoveNode(Element *element, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Shunt.cpp:28
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Shunt.cpp:108
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Shunt.cpp:57
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Shunt.cpp:124
+
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Shunt.cpp:15
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Shunt.h:13
Switching data of power elements.
-
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Shunt.cpp:50
-
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Shunt.cpp:81
-
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Shunt.cpp:67
-
Definition: PowerElement.h:100
-
Definition: Shunt.h:7
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Shunt.h:14
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Shunt.cpp:50
+
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Shunt.cpp:81
+
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Shunt.cpp:67
+ +
Definition: Shunt.h:7
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Shunt.h:14
+
- + diff --git a/docs/doxygen/html/_simulations_settings_form_8cpp_source.html b/docs/doxygen/html/_simulations_settings_form_8cpp_source.html new file mode 100644 index 0000000..8f3c1ae --- /dev/null +++ b/docs/doxygen/html/_simulations_settings_form_8cpp_source.html @@ -0,0 +1,103 @@ + + + + + + + +Project/SimulationsSettingsForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SimulationsSettingsForm.cpp
+
+
+
1 #include "SimulationsSettingsForm.h"
2 #include "PropertiesData.h"
3 
4 SimulationsSettingsForm::SimulationsSettingsForm(wxWindow* parent, PropertiesData* properties)
6 {
7  m_properties = properties;
8  auto data = m_properties->GetSimulationPropertiesData();
9 
10  m_textCtrlbasePower->SetValue(Element::StringFromDouble(data.basePower));
11  switch(data.basePowerUnit) {
12  case UNIT_VA: {
13  m_choiceBasePower->SetSelection(0);
14  } break;
15  case UNIT_kVA: {
16  m_choiceBasePower->SetSelection(1);
17  } break;
18  case UNIT_MVA: {
19  m_choiceBasePower->SetSelection(2);
20  } break;
21  default: {
22  m_choiceBasePower->SetSelection(wxNOT_FOUND);
23  } break;
24  }
25  m_checkBoxFaultAfterPF->SetValue(data.faultAfterPowerFlow);
26  m_checkBoxSCPowerAfterPF->SetValue(data.scPowerAfterPowerFlow);
27  switch(data.powerFlowMethod) {
28  case GAUSS_SEIDEL: {
29  m_choicePFMethod->SetSelection(0);
30  } break;
31  case NEWTON_RAPHSON: {
32  m_choicePFMethod->SetSelection(1);
33  m_textCtrlAccFactor->Enable(false);
34  } break;
35  default: {
36  m_choicePFMethod->SetSelection(wxNOT_FOUND);
37  } break;
38  }
39  m_textCtrlAccFactor->SetValue(Element::StringFromDouble(data.accFator));
40  m_textCtrlPFTolerance->SetValue(wxString::Format("%g", data.powerFlowTolerance));
41  m_textCtrlPFMaxIterations->SetValue(wxString::Format("%d", data.powerFlowMaxIterations));
42  m_textCtrlTimeStep->SetValue(wxString::Format("%g", data.timeStep));
43  m_textCtrlSimTime->SetValue(Element::StringFromDouble(data.stabilitySimulationTime));
44  m_textCtrlFreq->SetValue(Element::StringFromDouble(data.stabilityFrequency));
45  m_textCtrlStabTolerance->SetValue(wxString::Format("%g", data.stabilityTolerance));
46  m_textCtrlStabMaxIterations->SetValue(wxString::Format("%d", data.stabilityMaxIterations));
47  m_textCtrlCtrlStepRatio->SetValue(wxString::Format("%d", data.controlTimeStepRatio));
48  m_textCtrlPrintTime->SetValue(wxString::Format("%g", data.plotTime));
49 
50  m_checkBoxUseCOI->SetValue(data.useCOI);
51 }
52 
53 SimulationsSettingsForm::~SimulationsSettingsForm() {}
54 void SimulationsSettingsForm::OnButtonOKClick(wxCommandEvent& event)
55 {
56  if(ValidateData()) EndModal(wxID_OK);
57 }
58 
59 bool SimulationsSettingsForm::ValidateData()
60 {
61  auto data = m_properties->GetSimulationPropertiesData();
62  if(!Element::DoubleFromString(this, m_textCtrlbasePower->GetValue(), data.basePower,
63  _("Value entered incorrectly in the field \"Base power\".")))
64  return false;
65  switch(m_choiceBasePower->GetSelection()) {
66  case 0: {
67  data.basePowerUnit = UNIT_VA;
68  } break;
69  case 1: {
70  data.basePowerUnit = UNIT_kVA;
71  } break;
72  default: {
73  data.basePowerUnit = UNIT_MVA;
74  } break;
75  }
76  data.faultAfterPowerFlow = m_checkBoxFaultAfterPF->GetValue();
77  data.scPowerAfterPowerFlow = m_checkBoxSCPowerAfterPF->GetValue();
78  switch(m_choicePFMethod->GetSelection()) {
79  case 0: {
80  data.powerFlowMethod = GAUSS_SEIDEL;
81  } break;
82  case 1: {
83  data.powerFlowMethod = NEWTON_RAPHSON;
84  } break;
85  }
86  if(!Element::DoubleFromString(this, m_textCtrlAccFactor->GetValue(), data.accFator,
87  _("Value entered incorrectly in the field \"Acceleration factor\".")))
88  return false;
89  if(!Element::DoubleFromString(this, m_textCtrlPFTolerance->GetValue(), data.powerFlowTolerance,
90  _("Value entered incorrectly in the field \"Tolerance (Power flow)\".")))
91  return false;
92  if(!Element::IntFromString(this, m_textCtrlPFMaxIterations->GetValue(), data.powerFlowMaxIterations,
93  _("Value entered incorrectly in the field \"Max. iterations (Power flow)\".")))
94  return false;
95  if(!Element::DoubleFromString(this, m_textCtrlTimeStep->GetValue(), data.timeStep,
96  _("Value entered incorrectly in the field \"Time step\".")))
97  return false;
98  if(!Element::DoubleFromString(this, m_textCtrlSimTime->GetValue(), data.stabilitySimulationTime,
99  _("Value entered incorrectly in the field \"Simulation time\".")))
100  return false;
101  if(!Element::DoubleFromString(this, m_textCtrlFreq->GetValue(), data.stabilityFrequency,
102  _("Value entered incorrectly in the field \"System frequency\".")))
103  return false;
104  if(!Element::DoubleFromString(this, m_textCtrlStabTolerance->GetValue(), data.stabilityTolerance,
105  _("Value entered incorrectly in the field \"Tolerance (Stability)\".")))
106  return false;
107  if(!Element::IntFromString(this, m_textCtrlStabMaxIterations->GetValue(), data.stabilityMaxIterations,
108  _("Value entered incorrectly in the field \"Max. iterations (Stability)\".")))
109  return false;
110  if(!Element::IntFromString(this, m_textCtrlCtrlStepRatio->GetValue(), data.controlTimeStepRatio,
111  _("Value entered incorrectly in the field \"Controls step ratio\".")))
112  return false;
113  if(!Element::DoubleFromString(this, m_textCtrlPrintTime->GetValue(), data.plotTime,
114  _("Value entered incorrectly in the field \"Plot time\".")))
115  return false;
116  data.useCOI = m_checkBoxUseCOI->GetValue();
117 
118  m_properties->SetSimulationPropertiesData(data);
119  return true;
120 }
121 void SimulationsSettingsForm::OnPFMethodChoiceSelected(wxCommandEvent& event)
122 {
123  if(m_choicePFMethod->GetSelection() == 0)
124  m_textCtrlAccFactor->Enable();
125  else
126  m_textCtrlAccFactor->Enable(false);
127 }
+
static bool DoubleFromString(wxWindow *parent, wxString strValue, double &value, wxString errorMsg)
Get a double value from a string. Show a error message if the conversion fail.
Definition: Element.cpp:272
+ +
static bool IntFromString(wxWindow *parent, wxString strValue, int &value, wxString errorMsg)
Convert a string to int. Show a error message if the conversion fail.
Definition: Element.cpp:286
+ +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_simulations_settings_form_8h_source.html b/docs/doxygen/html/_simulations_settings_form_8h_source.html index cecc9c9..c18af0e 100644 --- a/docs/doxygen/html/_simulations_settings_form_8h_source.html +++ b/docs/doxygen/html/_simulations_settings_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/SimulationsSettingsForm.h Source File +Project/SimulationsSettingsForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
SimulationsSettingsForm.h
-
1 #ifndef SIMULATIONSSETTINGSFORM_H
2 #define SIMULATIONSSETTINGSFORM_H
3 
4 #include "PropertiesForm.h"
5 
6 class PropertiesData;
7 
9 {
10 public:
11  SimulationsSettingsForm(wxWindow* parent, PropertiesData* properties);
12  virtual ~SimulationsSettingsForm();
13 protected:
14  virtual void OnPFMethodChoiceSelected(wxCommandEvent& event);
15  virtual void OnButtonCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnButtonOKClick(wxCommandEvent& event);
17  virtual bool ValidateData();
18 
19  PropertiesData* m_properties;
20 };
21 #endif // SIMULATIONSSETTINGSFORM_H
Definition: PropertiesData.h:40
-
Definition: PropertiesForm.h:78
-
Definition: SimulationsSettingsForm.h:8
+
1 #ifndef SIMULATIONSSETTINGSFORM_H
2 #define SIMULATIONSSETTINGSFORM_H
3 
4 #include "PropertiesForm.h"
5 
6 class PropertiesData;
7 
9 {
10 public:
11  SimulationsSettingsForm(wxWindow* parent, PropertiesData* properties);
12  virtual ~SimulationsSettingsForm();
13 protected:
14  virtual void OnPFMethodChoiceSelected(wxCommandEvent& event);
15  virtual void OnButtonCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16  virtual void OnButtonOKClick(wxCommandEvent& event);
17  virtual bool ValidateData();
18 
19  PropertiesData* m_properties;
20 };
21 #endif // SIMULATIONSSETTINGSFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_sum_8cpp_source.html b/docs/doxygen/html/_sum_8cpp_source.html new file mode 100644 index 0000000..49af79c --- /dev/null +++ b/docs/doxygen/html/_sum_8cpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Project/Sum.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Sum.cpp
+
+
+
1 #include "Sum.h"
2 #include "SumForm.h"
3 #include "ConnectionLine.h"
4 
5 Sum::Sum(int id) : ControlElement(id)
6 {
7  m_width = m_height = 36.0;
8  Node* nodeIn1 = new Node(m_position + wxPoint2DDouble(-m_width / 2, 9 - m_height / 2), Node::NODE_IN, m_borderSize);
9  nodeIn1->StartMove(m_position);
10  Node* nodeIn2 =
11  new Node(m_position + wxPoint2DDouble(-m_width / 2, 27 - m_height / 2), Node::NODE_IN, m_borderSize);
12  nodeIn2->StartMove(m_position);
13  Node* nodeOut = new Node(m_position + wxPoint2DDouble(m_width / 2, 0), Node::NODE_OUT, m_borderSize);
14  nodeOut->SetAngle(180.0);
15  nodeOut->StartMove(m_position);
16  m_nodeList.push_back(nodeIn1);
17  m_nodeList.push_back(nodeIn2);
18  m_nodeList.push_back(nodeOut);
19  m_signalList.push_back(SIGNAL_POSITIVE);
20  m_signalList.push_back(SIGNAL_NEGATIVE);
21 
22  UpdatePoints();
23 }
24 
25 Sum::~Sum() {}
26 void Sum::Draw(wxPoint2DDouble translation, double scale) const
27 {
28  glLineWidth(1.0);
29  if(m_selected) {
30  glColor4dv(m_selectionColour.GetRGBA());
31  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
32  DrawRectangle(m_position, m_width + borderSize, m_height + borderSize);
33  }
34  glColor4d(1.0, 1.0, 1.0, 1.0);
35  DrawRectangle(m_position, m_width, m_height);
36  glColor4d(0.0, 0.0, 0.0, 1.0);
37  DrawRectangle(m_position, m_width, m_height, GL_LINE_LOOP);
38 
39  // Plot signals.
40  glLineWidth(2.0);
41  wxPoint2DDouble signalOffset[4];
42  wxPoint2DDouble sigmaOffset;
43  if(m_angle == 0.0) {
44  signalOffset[0] = wxPoint2DDouble(6, 0);
45  signalOffset[1] = wxPoint2DDouble(12, 0);
46  signalOffset[2] = wxPoint2DDouble(9, -3);
47  signalOffset[3] = wxPoint2DDouble(9, 3);
48  sigmaOffset = wxPoint2DDouble(6, 0);
49  } else if(m_angle == 90.0) {
50  signalOffset[0] = wxPoint2DDouble(-3, 9);
51  signalOffset[1] = wxPoint2DDouble(3, 9);
52  signalOffset[2] = wxPoint2DDouble(0, 6);
53  signalOffset[3] = wxPoint2DDouble(0, 12);
54  sigmaOffset = wxPoint2DDouble(0, 6);
55  } else if(m_angle == 180.0) {
56  signalOffset[0] = wxPoint2DDouble(-6, 0);
57  signalOffset[1] = wxPoint2DDouble(-12, 0);
58  signalOffset[2] = wxPoint2DDouble(-9, -3);
59  signalOffset[3] = wxPoint2DDouble(-9, 3);
60  sigmaOffset = wxPoint2DDouble(-6, 0);
61  } else if(m_angle == 270.0) {
62  signalOffset[0] = wxPoint2DDouble(-3, -9);
63  signalOffset[1] = wxPoint2DDouble(3, -9);
64  signalOffset[2] = wxPoint2DDouble(0, -6);
65  signalOffset[3] = wxPoint2DDouble(0, -12);
66  sigmaOffset = wxPoint2DDouble(0, -6);
67  }
68  for(int i = 0; i < (int)m_nodeList.size() - 1; ++i) {
69  std::vector<wxPoint2DDouble> hLine;
70  hLine.push_back(m_nodeList[i]->GetPosition() + signalOffset[0]);
71  hLine.push_back(m_nodeList[i]->GetPosition() + signalOffset[1]);
72  DrawLine(hLine);
73  if(m_signalList[i] == SIGNAL_POSITIVE) {
74  std::vector<wxPoint2DDouble> vLine;
75  vLine.push_back(m_nodeList[i]->GetPosition() + signalOffset[2]);
76  vLine.push_back(m_nodeList[i]->GetPosition() + signalOffset[3]);
77  DrawLine(vLine);
78  }
79  }
80 
81  // Plot sigma.
82  std::vector<wxPoint2DDouble> sigma;
83  sigma.push_back(m_position + wxPoint2DDouble(4, 9) + sigmaOffset);
84  sigma.push_back(m_position + wxPoint2DDouble(-6, 9) + sigmaOffset);
85  sigma.push_back(m_position + wxPoint2DDouble(0, 0) + sigmaOffset);
86  sigma.push_back(m_position + wxPoint2DDouble(-6, -9) + sigmaOffset);
87  sigma.push_back(m_position + wxPoint2DDouble(4, -9) + sigmaOffset);
88  glColor4d(0.0, 0.3, 1.0, 1.0);
89  DrawLine(sigma);
90 
91  glColor4d(0.0, 0.0, 0.0, 1.0);
92  DrawNodes();
93 }
94 
95 bool Sum::ShowForm(wxWindow* parent, Element* element)
96 {
97  SumForm* sumForm = new SumForm(parent, this);
98  if(sumForm->ShowModal() == wxID_OK) {
99  sumForm->Destroy();
100  return true;
101  }
102  sumForm->Destroy();
103  return false;
104 }
105 
106 void Sum::UpdatePoints()
107 {
108  if(m_angle == 0.0 || m_angle == 180.0) {
109  m_height = 18.0 * (m_nodeList.size() - 1);
110  m_width = 36.0;
111  } else {
112  m_width = 18.0 * (m_nodeList.size() - 1);
113  m_height = 42.0;
114  }
115 
116  for(int i = 0; i < (int)m_nodeList.size() - 1; ++i) {
117  if(m_angle == 0.0)
118  m_nodeList[i]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 9 + 18 * i - m_height / 2));
119  else if(m_angle == 90.0)
120  m_nodeList[i]->SetPosition(m_position + wxPoint2DDouble(m_width / 2 - 9 - 18 * i, -m_height / 2));
121  else if(m_angle == 180.0)
122  m_nodeList[i]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, m_height / 2 - 9 - 18 * i));
123  else if(m_angle == 270.0)
124  m_nodeList[i]->SetPosition(m_position + wxPoint2DDouble(9 + 18 * i - m_width / 2, m_height / 2));
125  }
126  if(m_angle == 0.0)
127  m_nodeList[m_nodeList.size() - 1]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
128  else if(m_angle == 90.0)
129  m_nodeList[m_nodeList.size() - 1]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
130  else if(m_angle == 180.0)
131  m_nodeList[m_nodeList.size() - 1]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
132  else if(m_angle == 270.0)
133  m_nodeList[m_nodeList.size() - 1]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
134 
135  SetPosition(m_position); // Update rect.
136 }
137 
138 void Sum::AddInNode()
139 {
140  Node* newNode = new Node(wxPoint2DDouble(0, 0), Node::NODE_IN, m_borderSize);
141  newNode->SetAngle(m_angle);
142  m_nodeList.insert(m_nodeList.end() - 1, newNode);
143 }
144 
145 void Sum::RemoveInNode()
146 {
147  Node* nodeToRemove = *(m_nodeList.end() - 2);
148  bool foundChild = false;
149  for(auto it = m_childList.begin(), itEnd = m_childList.end(); it != itEnd; ++it) {
150  ControlElement* child = static_cast<ControlElement*>(*it);
151  auto childNodeList = child->GetNodeList();
152  for(auto itN = childNodeList.begin(), itEndN = childNodeList.end(); itN != itEndN; ++itN) {
153  Node* node = *itN;
154  if(node == nodeToRemove) {
155  child->RemoveParent(this);
156  RemoveChild(child);
157  foundChild = true;
158  break;
159  }
160  }
161  if(foundChild) break;
162  }
163  m_nodeList.erase(m_nodeList.end() - 2);
164 }
165 
166 void Sum::Rotate(bool clockwise)
167 {
168  if(clockwise)
169  m_angle += 90.0;
170  else
171  m_angle -= 90.0;
172  if(m_angle >= 360.0)
173  m_angle = 0.0;
174  else if(m_angle < 0)
175  m_angle = 270.0;
176 
177  UpdatePoints();
178 
179  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
180  Node* node = *it;
181  node->Rotate(clockwise);
182  }
183 }
184 
185 bool Sum::Solve(double input, double timeStep)
186 {
187  std::vector<double> inputVector;
188  for(auto itN = m_nodeList.begin(), itNEnd = m_nodeList.end(); itN != itNEnd; ++itN) {
189  Node* node = *itN;
190  if(node->GetNodeType() != Node::NODE_OUT) {
191  if(!node->IsConnected()) {
192  inputVector.push_back(0.0);
193  } else {
194  for(auto itC = m_childList.begin(), itCEnd = m_childList.end(); itC != itCEnd; ++itC) {
195  ConnectionLine* cLine = static_cast<ConnectionLine*>(*itC);
196  auto nodeList = cLine->GetNodeList();
197  for(auto itCN = nodeList.begin(), itCNEnd = nodeList.end(); itCN != itCNEnd; ++itCN) {
198  Node* childNode = *itCN;
199  if(childNode == node) {
200  inputVector.push_back(cLine->GetValue());
201  break;
202  }
203  }
204  }
205  }
206  }
207  }
208 
209  if(m_signalList.size() != inputVector.size()) return false;
210 
211  m_output = 0.0;
212  for(unsigned int i = 0; i < m_signalList.size(); ++i) {
213  if(m_signalList[i] == SIGNAL_POSITIVE)
214  m_output += inputVector[i];
215  else if(m_signalList[i] == SIGNAL_NEGATIVE)
216  m_output -= inputVector[i];
217  }
218  return true;
219 }
220 
222 {
223  Sum* copy = new Sum(m_elementID);
224  *copy = *this;
225  return copy;
226 }
Definition: SumForm.h:8
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Sum.cpp:95
+
Definition: Sum.h:9
+ +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Sum.cpp:166
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Sum.cpp:221
+ +
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Element.h:367
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Sum.cpp:26
+ +
+
+ + + + diff --git a/docs/doxygen/html/_sum_8h_source.html b/docs/doxygen/html/_sum_8h_source.html index a661811..e036aca 100644 --- a/docs/doxygen/html/_sum_8h_source.html +++ b/docs/doxygen/html/_sum_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Sum.h Source File +Project/Sum.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Sum.h
-
1 #ifndef SUM_H
2 #define SUM_H
3 
4 #include "ControlElement.h"
5 
6 class SumForm;
7 class ConnectionLine;
8 
9 class Sum : public ControlElement
10 {
11 public:
12  enum Signal { SIGNAL_POSITIVE = 0, SIGNAL_NEGATIVE };
13  Sum(int id);
14  ~Sum();
15 
16  virtual void Draw(wxPoint2DDouble translation, double scale) const;
17  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
18  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
19  virtual bool ShowForm(wxWindow* parent, Element* element);
20  virtual void Rotate(bool clockwise = true);
21 
22  virtual std::vector<Signal> GetSignalList() const { return m_signalList; }
23  virtual void SetSignalList(std::vector<Signal> signalList) { m_signalList = signalList; }
24 
25  virtual bool Solve(double input, double timeStep);
26 
27  virtual void UpdatePoints();
28  void AddInNode();
29  void RemoveInNode();
30 
31  virtual Element* GetCopy();
32 
33 protected:
34  std::vector<Signal> m_signalList;
35 };
36 
37 #endif // SUM_H
Definition: SumForm.h:8
-
Definition: Element.h:88
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Sum.cpp:95
-
Definition: Sum.h:9
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Sum.cpp:166
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Sum.h:17
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Sum.cpp:221
-
Definition: ConnectionLine.h:6
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Sum.h:18
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Sum.cpp:26
-
Definition: ControlElement.h:53
+
1 #ifndef SUM_H
2 #define SUM_H
3 
4 #include "ControlElement.h"
5 
6 class SumForm;
7 class ConnectionLine;
8 
9 class Sum : public ControlElement
10 {
11 public:
12  enum Signal { SIGNAL_POSITIVE = 0, SIGNAL_NEGATIVE };
13  Sum(int id);
14  ~Sum();
15 
16  virtual void Draw(wxPoint2DDouble translation, double scale) const;
17  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
18  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
19  virtual bool ShowForm(wxWindow* parent, Element* element);
20  virtual void Rotate(bool clockwise = true);
21 
22  virtual std::vector<Signal> GetSignalList() const { return m_signalList; }
23  virtual void SetSignalList(std::vector<Signal> signalList) { m_signalList = signalList; }
24 
25  virtual bool Solve(double input, double timeStep);
26 
27  virtual void UpdatePoints();
28  void AddInNode();
29  void RemoveInNode();
30 
31  virtual Element* GetCopy();
32 
33 protected:
34  std::vector<Signal> m_signalList;
35 };
36 
37 #endif // SUM_H
Definition: SumForm.h:8
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Sum.cpp:95
+
Definition: Sum.h:9
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Sum.cpp:166
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Sum.h:17
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Sum.cpp:221
+ +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Sum.h:18
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Sum.cpp:26
+
+
- + diff --git a/docs/doxygen/html/_sum_form_8cpp_source.html b/docs/doxygen/html/_sum_form_8cpp_source.html new file mode 100644 index 0000000..6fdc093 --- /dev/null +++ b/docs/doxygen/html/_sum_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/SumForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SumForm.cpp
+
+
+
1 #include "SumForm.h"
2 #include "Sum.h"
3 
4 SumForm::SumForm(wxWindow* parent, Sum* sum)
5  : SumFormBase(parent)
6 {
7  SetSize(GetBestSize());
8 
9  m_parent = parent;
10  m_sum = sum;
11 
12  wxString signalStr = "";
13  auto signalList = m_sum->GetSignalList();
14  for(auto it = signalList.begin(), itEnd = signalList.end(); it != itEnd; ++it) {
15  Sum::Signal signal = *it;
16  switch(signal) {
17  case Sum::SIGNAL_POSITIVE: {
18  signalStr += "+";
19  } break;
20  case Sum::SIGNAL_NEGATIVE: {
21  signalStr += "-";
22  } break;
23  }
24  if(it != itEnd - 1) signalStr += " ";
25  }
26  m_textCtrlSigns->SetValue(signalStr);
27 }
28 
29 SumForm::~SumForm() {}
30 
31 void SumForm::OnOKClick(wxCommandEvent& event)
32 {
33  if(ValidateData()) EndModal(wxID_OK);
34 }
35 
36 bool SumForm::ValidateData()
37 {
38  wxString signalStr = "";
39  for(int i = 0; i < (int)m_textCtrlSigns->GetValue().length(); ++i) {
40  if(m_textCtrlSigns->GetValue()[i] != ' ') signalStr += m_textCtrlSigns->GetValue()[i];
41  }
42  if(signalStr.size() < 2){
43  wxMessageDialog msg(this, _("You must assign at least two signals."), _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
44  msg.ShowModal();
45  return false;
46  }
47 
48  std::vector<Sum::Signal> signalList;
49  for(int i = 0; i < (int)signalStr.length(); ++i) {
50  switch(signalStr[i].GetValue()) {
51  case '+': {
52  signalList.push_back(Sum::SIGNAL_POSITIVE);
53  } break;
54  case '-': {
55  signalList.push_back(Sum::SIGNAL_NEGATIVE);
56  } break;
57  default: {
58  wxMessageDialog msg(this, _("Value entered incorrectly in the field \"Signs\"."), _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
59  msg.ShowModal();
60  return false;
61  }
62  }
63  }
64 
65  int diff = (int)signalList.size() - (int)m_sum->GetSignalList().size();
66 
67  if(diff < 0) {
68  diff = std::abs(diff);
69  for(int i = 0; i < diff; ++i) {
70  m_sum->RemoveInNode();
71  }
72  } else if(diff > 0) {
73  for(int i = 0; i < diff; ++i) {
74  m_sum->AddInNode();
75  }
76  }
77  m_sum->SetSignalList(signalList);
78  m_sum->UpdatePoints();
79  return true;
80 }
Definition: Sum.h:9
+ +
+
+ + + + diff --git a/docs/doxygen/html/_sum_form_8h_source.html b/docs/doxygen/html/_sum_form_8h_source.html index 3487e63..542b480 100644 --- a/docs/doxygen/html/_sum_form_8h_source.html +++ b/docs/doxygen/html/_sum_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/SumForm.h Source File +Project/SumForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
SumForm.h
-
1 #ifndef SUMFORM_H
2 #define SUMFORM_H
3 
4 #include "ElementForm.h"
5 
6 class Sum;
7 
8 class SumForm : public SumFormBase
9 {
10 public:
11  SumForm(wxWindow* parent, Sum* sum);
12  virtual ~SumForm();
13 
14  bool ValidateData();
15 
16 protected:
17  virtual void OnCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
18  virtual void OnOKClick(wxCommandEvent& event);
19  wxWindow* m_parent = NULL;
20  Sum* m_sum = NULL;
21 };
22 #endif // SUMFORM_H
Definition: SumForm.h:8
-
Definition: Sum.h:9
-
Definition: ElementForm.h:805
+
1 #ifndef SUMFORM_H
2 #define SUMFORM_H
3 
4 #include "ElementForm.h"
5 
6 class Sum;
7 
8 class SumForm : public SumFormBase
9 {
10 public:
11  SumForm(wxWindow* parent, Sum* sum);
12  virtual ~SumForm();
13 
14  bool ValidateData();
15 
16 protected:
17  virtual void OnCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
18  virtual void OnOKClick(wxCommandEvent& event);
19  wxWindow* m_parent = NULL;
20  Sum* m_sum = NULL;
21 };
22 #endif // SUMFORM_H
Definition: SumForm.h:8
+
Definition: Sum.h:9
+
+
- + diff --git a/docs/doxygen/html/_switching_form_8cpp_source.html b/docs/doxygen/html/_switching_form_8cpp_source.html new file mode 100644 index 0000000..a00415b --- /dev/null +++ b/docs/doxygen/html/_switching_form_8cpp_source.html @@ -0,0 +1,104 @@ + + + + + + + +Project/SwitchingForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SwitchingForm.cpp
+
+
+
1 #include "SwitchingForm.h"
2 #include "PowerElement.h"
3 
4 SwitchingForm::SwitchingForm(wxWindow* parent) : SwitchingFormBase(parent)
5 {
6  m_listCtrlSwitchings->AppendColumn(_("Type"));
7  m_listCtrlSwitchings->AppendColumn(_("Time (s)"));
8 
9  SetSize(GetBestSize());
10  Layout();
11 }
12 
13 SwitchingForm::SwitchingForm(wxWindow* parent, PowerElement* element) : SwitchingFormBase(parent)
14 {
15  m_listCtrlSwitchings->AppendColumn(_("Type"));
16  m_listCtrlSwitchings->AppendColumn(_("Time (s)"));
17 
18  SetSize(GetBestSize());
19  Layout();
20 
21  SwitchingData data = element->GetSwitchingData();
22  for(int i = 0; i < (int)data.swType.size(); i++) {
23  long index = m_listCtrlSwitchings->InsertItem(m_maxID, data.swType[i] == SW_INSERT ? _("Insert") : _("Remove"));
24  m_listCtrlSwitchings->SetItem(index, 1, wxString::FromDouble(data.swTime[i]));
25  m_maxID++;
26  }
27 
28  m_element = element;
29 }
30 
31 SwitchingForm::~SwitchingForm() {}
32 void SwitchingForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
33 void SwitchingForm::OnInsertButtonClick(wxCommandEvent& event)
34 {
35  long index = m_listCtrlSwitchings->InsertItem(
36  m_maxID, m_pgPropType->GetValue().GetInteger() == 0 ? _("Insert") : _("Remove"));
37  m_listCtrlSwitchings->SetItem(index, 1, m_pgPropTime->GetValue().GetString());
38  m_maxID++;
39 }
40 void SwitchingForm::OnOKButtonClick(wxCommandEvent& event)
41 {
42  std::vector<long> itemList;
43  long item = -1;
44  while(true) {
45  item = m_listCtrlSwitchings->GetNextItem(item);
46  if(item == -1) break;
47  itemList.push_back(item);
48  }
49 
50  SwitchingData data;
51  for(int i = 0; i < (int)itemList.size(); i++) {
52  if(m_listCtrlSwitchings->GetItemText(itemList[i], 0) == _("Insert"))
53  data.swType.push_back(SW_INSERT);
54  else
55  data.swType.push_back(SW_REMOVE);
56 
57  double swTime;
58  m_listCtrlSwitchings->GetItemText(itemList[i], 1).ToDouble(&swTime);
59  data.swTime.push_back(swTime);
60  }
61  m_element->SetSwitchingData(data);
62 
63  if(data.swTime.size() != 0)
64  m_element->SetDynamicEvent(true);
65  else
66  m_element->SetDynamicEvent(false);
67 
68  EndModal(wxID_OK);
69 }
70 
71 void SwitchingForm::OnRemoveButtonClick(wxCommandEvent& event)
72 {
73  std::vector<long> itemList;
74  long item = -1;
75  while(true) {
76  item = m_listCtrlSwitchings->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
77  if(item == -1) break;
78  itemList.push_back(item);
79  }
80  for(int i = (int)itemList.size() - 1; i >= 0; i--) {
81  m_listCtrlSwitchings->DeleteItem(itemList[i]);
82  }
83 }
84 void SwitchingForm::OnChangeProperties(wxPropertyGridEvent& event) {}
85 void SwitchingForm::OnSelectItem(wxListEvent& event) {}
86 void SwitchingForm::OnDownButtonClick(wxCommandEvent& event)
87 {
88  std::vector<long> selectedList;
89  std::vector<long> itemList;
90  long item = -1;
91  while(true) {
92  item = m_listCtrlSwitchings->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
93  if(item == -1) break;
94  selectedList.push_back(item);
95  }
96  while(true) {
97  item = m_listCtrlSwitchings->GetNextItem(item);
98  if(item == -1) break;
99  itemList.push_back(item);
100  }
101 
102  for(int i = 1; i < (int)itemList.size(); i++) {
103  for(int j = 0; j < (int)selectedList.size(); j++) {
104  if(itemList[i - 1] == selectedList[j]) {
105  wxString col1Str[2];
106  wxString col2Str[2];
107 
108  col1Str[0] = m_listCtrlSwitchings->GetItemText(itemList[i], 0);
109  col1Str[1] = m_listCtrlSwitchings->GetItemText(selectedList[j], 0);
110  col2Str[0] = m_listCtrlSwitchings->GetItemText(itemList[i], 1);
111  col2Str[1] = m_listCtrlSwitchings->GetItemText(selectedList[j], 1);
112 
113  m_listCtrlSwitchings->SetItem(itemList[i], 0, col1Str[1]);
114  m_listCtrlSwitchings->SetItem(selectedList[j], 0, col1Str[0]);
115  m_listCtrlSwitchings->SetItem(itemList[i], 1, col2Str[1]);
116  m_listCtrlSwitchings->SetItem(selectedList[j], 1, col2Str[0]);
117 
118  m_listCtrlSwitchings->SetItemState(itemList[i], wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
119  m_listCtrlSwitchings->SetItemState(selectedList[j], 0, wxLIST_STATE_SELECTED);
120 
121  i++;
122  break;
123  }
124  }
125  }
126 }
127 void SwitchingForm::OnUpButtonClick(wxCommandEvent& event)
128 {
129  std::vector<long> selectedList;
130  std::vector<long> itemList;
131  long item = -1;
132  while(true) {
133  item = m_listCtrlSwitchings->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
134  if(item == -1) break;
135  selectedList.push_back(item);
136  }
137  while(true) {
138  item = m_listCtrlSwitchings->GetNextItem(item);
139  if(item == -1) break;
140  itemList.push_back(item);
141  }
142 
143  for(int i = 0; i < (int)itemList.size(); i++) {
144  for(int j = 0; j < (int)selectedList.size(); j++) {
145  if(i + 1 < (int)itemList.size()) {
146  if(itemList[i + 1] == selectedList[j]) {
147  wxString col1Str[2];
148  wxString col2Str[2];
149 
150  col1Str[0] = m_listCtrlSwitchings->GetItemText(itemList[i], 0);
151  col1Str[1] = m_listCtrlSwitchings->GetItemText(selectedList[j], 0);
152  col2Str[0] = m_listCtrlSwitchings->GetItemText(itemList[i], 1);
153  col2Str[1] = m_listCtrlSwitchings->GetItemText(selectedList[j], 1);
154 
155  m_listCtrlSwitchings->SetItem(itemList[i], 0, col1Str[1]);
156  m_listCtrlSwitchings->SetItem(selectedList[j], 0, col1Str[0]);
157  m_listCtrlSwitchings->SetItem(itemList[i], 1, col2Str[1]);
158  m_listCtrlSwitchings->SetItem(selectedList[j], 1, col2Str[0]);
159 
160  m_listCtrlSwitchings->SetItemState(itemList[i], wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
161  m_listCtrlSwitchings->SetItemState(selectedList[j], 0, wxLIST_STATE_SELECTED);
162 
163  i++;
164  break;
165  }
166  }
167  }
168  }
169 }
std::vector< double > swTime
Definition: PowerElement.h:78
+
std::vector< SwitchingType > swType
Definition: PowerElement.h:77
+ + + +
Switching data of power elements.
+
virtual SwitchingData GetSwitchingData()
Returns the switching data of the element.
Definition: PowerElement.h:165
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_switching_form_8h_source.html b/docs/doxygen/html/_switching_form_8h_source.html index 955475f..c1dd665 100644 --- a/docs/doxygen/html/_switching_form_8h_source.html +++ b/docs/doxygen/html/_switching_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/SwitchingForm.h Source File +Project/SwitchingForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
SwitchingForm.h
-
1 #ifndef SWITCHINGFORM_H
2 #define SWITCHINGFORM_H
3 
4 #include "ElementForm.h"
5 
6 class PowerElement;
7 
9 {
10 public:
11  SwitchingForm(wxWindow* parent);
12  SwitchingForm(wxWindow* parent, PowerElement* element);
13  virtual ~SwitchingForm();
14 protected:
15  virtual void OnDownButtonClick(wxCommandEvent& event);
16  virtual void OnUpButtonClick(wxCommandEvent& event);
17  virtual void OnChangeProperties(wxPropertyGridEvent& event);
18  virtual void OnSelectItem(wxListEvent& event);
19  virtual void OnCancelButtonClick(wxCommandEvent& event);
20  virtual void OnInsertButtonClick(wxCommandEvent& event);
21  virtual void OnOKButtonClick(wxCommandEvent& event);
22  virtual void OnRemoveButtonClick(wxCommandEvent& event);
23 
24  int m_maxID = 0;
25 
26  PowerElement* m_element = NULL;
27 };
28 #endif // SWITCHINGFORM_H
Definition: SwitchingForm.h:8
-
Definition: ElementForm.h:632
-
Definition: PowerElement.h:100
+
1 #ifndef SWITCHINGFORM_H
2 #define SWITCHINGFORM_H
3 
4 #include "ElementForm.h"
5 
6 class PowerElement;
7 
9 {
10 public:
11  SwitchingForm(wxWindow* parent);
12  SwitchingForm(wxWindow* parent, PowerElement* element);
13  virtual ~SwitchingForm();
14 protected:
15  virtual void OnDownButtonClick(wxCommandEvent& event);
16  virtual void OnUpButtonClick(wxCommandEvent& event);
17  virtual void OnChangeProperties(wxPropertyGridEvent& event);
18  virtual void OnSelectItem(wxListEvent& event);
19  virtual void OnCancelButtonClick(wxCommandEvent& event);
20  virtual void OnInsertButtonClick(wxCommandEvent& event);
21  virtual void OnOKButtonClick(wxCommandEvent& event);
22  virtual void OnRemoveButtonClick(wxCommandEvent& event);
23 
24  int m_maxID = 0;
25 
26  PowerElement* m_element = NULL;
27 };
28 #endif // SWITCHINGFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_sync_generator_8cpp_source.html b/docs/doxygen/html/_sync_generator_8cpp_source.html new file mode 100644 index 0000000..6ecb129 --- /dev/null +++ b/docs/doxygen/html/_sync_generator_8cpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +Project/SyncGenerator.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SyncGenerator.cpp
+
+
+
1 #include "SyncMachineForm.h"
2 #include "SyncGenerator.h"
3 #include "ControlElementContainer.h"
4 
5 SyncGenerator::SyncGenerator() : Machines() { Init(); }
6 SyncGenerator::SyncGenerator(wxString name) : Machines()
7 {
8  Init();
9  m_electricalData.name = name;
10 }
11 
12 SyncGenerator::~SyncGenerator() {}
13 void SyncGenerator::Init()
14 {
15  int numPtsSine = 10;
16  double mx = 15.0;
17  double my = 10.0;
18  double pi = 3.14159265359;
19 
20  for(int i = 0; i <= numPtsSine; i++) {
21  double x = (2.0 * pi / double(numPtsSine)) * double(i) - pi;
22  double y = std::sin(x);
23  m_sinePts.push_back(wxPoint2DDouble((x / pi) * mx, y * my));
24  }
25 
26  m_electricalData.avr = new ControlElementContainer();
27  m_electricalData.speedGov = new ControlElementContainer();
28 }
29 
30 void SyncGenerator::DrawSymbol() const
31 {
32  // Draw sine.
33  std::vector<wxPoint2DDouble> sinePts;
34  for(int i = 0; i < (int)m_sinePts.size(); i++) {
35  sinePts.push_back(m_sinePts[i] + m_position);
36  }
37  DrawLine(sinePts);
38 }
40 {
41  menu.Append(ID_EDIT_ELEMENT, _("Edit Generator"));
42  GeneralMenuItens(menu);
43  return true;
44 }
45 
46 bool SyncGenerator::ShowForm(wxWindow* parent, Element* element)
47 {
48  SyncMachineForm* generatorForm = new SyncMachineForm(parent, this);
49  generatorForm->SetTitle(_("Generator"));
50  if(generatorForm->ShowModal() == wxID_OK) {
51  generatorForm->Destroy();
52  return true;
53  }
54 
55  generatorForm->Destroy();
56  return false;
57 }
58 
59 SyncGeneratorElectricalData SyncGenerator::GetPUElectricalData(double systemPowerBase)
60 {
61  SyncGeneratorElectricalData data = m_electricalData;
62  double machineBasePower = 1.0;
63  if(data.useMachineBase) {
64  machineBasePower = GetValueFromUnit(data.nominalPower, data.nominalPowerUnit);
65  }
66 
67  // Active power
68  double activePower = GetValueFromUnit(data.activePower, data.activePowerUnit);
69  if(!m_online) activePower = 0.0;
70  if(data.activePowerUnit == UNIT_PU) {
71  if(data.useMachineBase) data.activePower = (activePower * machineBasePower) / systemPowerBase;
72  } else {
73  data.activePower = activePower / systemPowerBase;
74  }
75  data.activePowerUnit = UNIT_PU;
76 
77  // Reactive power
78  double reactivePower = GetValueFromUnit(data.reactivePower, data.reactivePowerUnit);
79  if(!m_online) reactivePower = 0.0;
80  if(data.reactivePowerUnit == UNIT_PU) {
81  if(data.useMachineBase) data.reactivePower = (reactivePower * machineBasePower) / systemPowerBase;
82  } else {
83  data.reactivePower = reactivePower / systemPowerBase;
84  }
85  data.reactivePowerUnit = UNIT_PU;
86 
87  // Max reactive power
88  double maxReactive = GetValueFromUnit(data.maxReactive, data.maxReactiveUnit);
89  if(data.maxReactiveUnit == UNIT_PU) {
90  if(data.useMachineBase) data.maxReactive = (maxReactive * machineBasePower) / systemPowerBase;
91  } else {
92  data.maxReactive = maxReactive / systemPowerBase;
93  }
94  data.maxReactiveUnit = UNIT_PU;
95 
96  // Min reactive power
97  double minReactive = GetValueFromUnit(data.minReactive, data.minReactiveUnit);
98  if(data.minReactiveUnit == UNIT_PU) {
99  if(data.useMachineBase) data.minReactive = (minReactive * machineBasePower) / systemPowerBase;
100  } else {
101  data.minReactive = minReactive / systemPowerBase;
102  }
103  data.minReactiveUnit = UNIT_PU;
104 
105  double baseVoltage = GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
106  double systemBaseImpedance = (baseVoltage * baseVoltage) / systemPowerBase;
107  double machineBaseImpedance = (baseVoltage * baseVoltage) / machineBasePower;
108 
109  // Fault data
110  if(data.useMachineBase) {
111  data.positiveResistance = (data.positiveResistance * machineBaseImpedance) / systemBaseImpedance;
112  data.positiveReactance = (data.positiveReactance * machineBaseImpedance) / systemBaseImpedance;
113  data.negativeResistance = (data.negativeResistance * machineBaseImpedance) / systemBaseImpedance;
114  data.negativeReactance = (data.negativeReactance * machineBaseImpedance) / systemBaseImpedance;
115  data.zeroResistance = (data.zeroResistance * machineBaseImpedance) / systemBaseImpedance;
116  data.zeroReactance = (data.zeroReactance * machineBaseImpedance) / systemBaseImpedance;
117  data.groundResistance = (data.groundResistance * machineBaseImpedance) / systemBaseImpedance;
118  data.groundReactance = (data.groundReactance * machineBaseImpedance) / systemBaseImpedance;
119  }
120 
121  if(!m_online) {
122  data.faultCurrent[0] = std::complex<double>(0, 0);
123  data.faultCurrent[1] = std::complex<double>(0, 0);
124  data.faultCurrent[2] = std::complex<double>(0, 0);
125  }
126 
127  return data;
128 }
129 
130 void SyncGenerator::SetNominalVoltage(std::vector<double> nominalVoltage,
131  std::vector<ElectricalUnit> nominalVoltageUnit)
132 {
133  if(nominalVoltage.size() > 0) {
134  m_electricalData.nominalVoltage = nominalVoltage[0];
135  m_electricalData.nominalVoltageUnit = nominalVoltageUnit[0];
136  }
137 }
138 
140 {
141  SyncGenerator* copy = new SyncGenerator();
142  *copy = *this;
143  auto data = copy->GetElectricalData();
144 
145  // Copy AVR
146  std::vector<ConnectionLine*> cLineList;
147  std::vector<ControlElement*> elementList;
148  m_electricalData.avr->GetContainerCopy(elementList, cLineList);
149 
151  avrCopy->FillContainer(elementList, cLineList);
152  data.avr = avrCopy;
153 
154  // Copy Speed Governor
155  cLineList.clear();
156  elementList.clear();
157  m_electricalData.speedGov->GetContainerCopy(elementList, cLineList);
158 
159  ControlElementContainer* speedGovCopy = new ControlElementContainer();
160  speedGovCopy->FillContainer(elementList, cLineList);
161  data.speedGov = speedGovCopy;
162 
163  copy->SetElectricalData(data);
164  return copy;
165 }
166 
168 {
169  wxString tipText = m_electricalData.name;
170  tipText += "\n";
171  double activePower = m_electricalData.activePower;
172  if(!m_online) activePower = 0.0;
173  tipText += _("\nP = ") + wxString::FromDouble(activePower, 5);
174  switch(m_electricalData.activePowerUnit) {
175  case UNIT_PU: {
176  tipText += _(" p.u.");
177  } break;
178  case UNIT_W: {
179  tipText += _(" W");
180  } break;
181  case UNIT_kW: {
182  tipText += _(" kW");
183  } break;
184  case UNIT_MW: {
185  tipText += _(" MW");
186  } break;
187  default:
188  break;
189  }
190  double reactivePower = m_electricalData.reactivePower;
191  if(!m_online) reactivePower = 0.0;
192  tipText += _("\nQ = ") + wxString::FromDouble(reactivePower, 5);
193  switch(m_electricalData.reactivePowerUnit) {
194  case UNIT_PU: {
195  tipText += _(" p.u.");
196  } break;
197  case UNIT_VAr: {
198  tipText += _(" VAr");
199  } break;
200  case UNIT_kVAr: {
201  tipText += _(" kVAr");
202  } break;
203  case UNIT_MVAr: {
204  tipText += _(" MVAr");
205  } break;
206  default:
207  break;
208  }
209 
210  return tipText;
211 }
212 
214 {
215  if(!m_electricalData.plotSyncMachine) return false;
216  plotData.SetName(m_electricalData.name);
217  plotData.SetCurveType(ElementPlotData::CT_SYNC_GENERATOR);
218 
219  std::vector<double> absTerminalVoltage, activePower, reactivePower;
220  for(unsigned int i = 0; i < m_electricalData.terminalVoltageVector.size(); ++i) {
221  absTerminalVoltage.push_back(std::abs(m_electricalData.terminalVoltageVector[i]));
222  activePower.push_back(std::real(m_electricalData.electricalPowerVector[i]));
223  reactivePower.push_back(std::imag(m_electricalData.electricalPowerVector[i]));
224  }
225  plotData.AddData(absTerminalVoltage, _("Terminal voltage"));
226  plotData.AddData(activePower, _("Active power"));
227  plotData.AddData(reactivePower, _("Reactive power"));
228  plotData.AddData(m_electricalData.mechanicalPowerVector, _("Mechanical power"));
229  plotData.AddData(m_electricalData.freqVector, _("Frequency"));
230  plotData.AddData(m_electricalData.fieldVoltageVector, _("Field voltage"));
231  plotData.AddData(m_electricalData.deltaVector, _("Delta"));
232  return true;
233 }
+ + +
virtual bool GetPlotData(ElementPlotData &plotData)
Fill the plot data.
+ + + + + +
virtual Element * GetCopy()
Get a the element copy.
+ + +
virtual wxString GetTipText() const
Get the tip text.
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
+ +
virtual void SetNominalVoltage(std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
Set nominal voltage of the element.
+ +
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_sync_generator_8h_source.html b/docs/doxygen/html/_sync_generator_8h_source.html index 989ea8f..e999fc1 100644 --- a/docs/doxygen/html/_sync_generator_8h_source.html +++ b/docs/doxygen/html/_sync_generator_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/SyncGenerator.h Source File +Project/SyncGenerator.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
SyncGenerator.h
-
1 #ifndef SYNCGENERATOR_H
2 #define SYNCGENERATOR_H
3 
4 #include "Machines.h"
5 
6 class SyncMachineForm;
7 
9  // General
10  wxString name = "";
11  double nominalPower = 100.0;
12  ElectricalUnit nominalPowerUnit = UNIT_MVA;
13  double nominalVoltage = 13.8;
14  ElectricalUnit nominalVoltageUnit = UNIT_kV;
15  double activePower = 100.0;
16  ElectricalUnit activePowerUnit = UNIT_MW;
17  double reactivePower = 0.0;
18  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
19  bool haveMaxReactive = false;
20  double maxReactive = 9999.0;
21  ElectricalUnit maxReactiveUnit = UNIT_MVAr;
22  bool haveMinReactive = false;
23  double minReactive = -9999.0;
24  ElectricalUnit minReactiveUnit = UNIT_MVAr;
25  bool useMachineBase = true;
26 
27  // Fault
28  double positiveResistance = 0.0;
29  double positiveReactance = 1.0;
30  double negativeResistance = 0.0;
31  double negativeReactance = 1.0;
32  double zeroResistance = 0.0;
33  double zeroReactance = 1.0;
34  double groundResistance = 0.0;
35  double groundReactance = 0.0;
36  bool groundNeutral = true;
37  // p.u. fault data
38  std::complex<double> faultCurrent[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
39  std::complex<double>(0.0, 0.0)};
40 
41  // Stability
42  bool plotSyncMachine = false;
43  double inertia = 1.0;
44  double damping = 0.0;
45  bool useAVR = false;
46  bool useSpeedGovernor = false;
47 
48  double armResistance = 0.0;
49  double potierReactance = 0.0;
50  double satFactor = 0.0;
51 
52  double syncXd = 0.0;
53  double syncXq = 0.0;
54  double transXd = 1.0;
55  double transXq = 0.0;
56  double transTd0 = 0.0;
57  double transTq0 = 0.0;
58  double subXd = 0.0;
59  double subXq = 0.0;
60  double subTd0 = 0.0;
61  double subTq0 = 0.0;
62 
63  // Machine state variables
64  std::complex<double> terminalVoltage;
65  std::vector<std::complex<double> > terminalVoltageVector;
66  std::complex<double> electricalPower;
67  std::vector<std::complex<double> > electricalPowerVector;
68  double pm;
69  std::vector<double> mechanicalPowerVector;
70  double speed;
71  std::vector<double> freqVector;
72  double fieldVoltage;
73  std::vector<double> fieldVoltageVector;
74  double delta;
75  std::vector<double> deltaVector;
76 
77  double initialFieldVoltage;
78 
79  // Internal machine variables
80  double tranEq;
81  double tranEd;
82  double subEq;
83  double subEd;
84  double pe;
85 
86  // Variables to extrapolate
87  double oldId;
88  double oldIq;
89  double oldPe;
90 
91  // Integration constants
92  IntegrationConstant icSpeed;
93  IntegrationConstant icDelta;
94  IntegrationConstant icTranEq;
95  IntegrationConstant icTranEd;
96  IntegrationConstant icSubEq;
97  IntegrationConstant icSubEd;
98 
99  // Control
100  ControlElementContainer* avr = NULL;
101  ControlElementContainer* speedGov = NULL;
102 
103  // Control solvers
104  ControlElementSolver* avrSolver = NULL;
105  ControlElementSolver* speedGovSolver = NULL;
106 
107  Machines::SyncMachineModel model = Machines::SM_MODEL_1;
108 };
109 
110 class SyncGenerator : public Machines
111 {
112  public:
113  SyncGenerator();
114  SyncGenerator(wxString name);
115  ~SyncGenerator();
116 
117  virtual Element* GetCopy();
118  virtual void Init();
119  virtual void DrawSymbol() const;
120  virtual bool GetContextMenu(wxMenu& menu);
121  virtual bool ShowForm(wxWindow* parent, Element* element);
122  virtual wxString GetTipText() const;
123  virtual SyncGeneratorElectricalData GetElectricalData() { return m_electricalData; }
124  virtual SyncGeneratorElectricalData GetPUElectricalData(double systemPowerBase);
125  virtual void SetElectricalData(SyncGeneratorElectricalData electricalData) { m_electricalData = electricalData; }
126  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
127  virtual bool GetPlotData(ElementPlotData& plotData);
128 
129  protected:
130  std::vector<wxPoint2DDouble> m_sinePts;
131 
132  SyncGeneratorElectricalData m_electricalData;
133 };
134 
135 #endif // SYNCGENERATOR_H
Definition: SyncGenerator.h:8
-
Definition: Element.h:88
-
Definition: ControlElementSolver.h:20
-
Definition: SyncGenerator.h:110
-
Definition: PowerElement.h:19
-
Definition: PowerElement.h:14
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:88
-
Definition: SyncMachineForm.h:10
-
Definition: ElementPlotData.h:39
-
Definition: PowerElement.h:22
-
Definition: PowerElement.h:25
-
Definition: ControlElementContainer.h:20
-
Definition: Machines.h:9
+
1 #ifndef SYNCGENERATOR_H
2 #define SYNCGENERATOR_H
3 
4 #include "Machines.h"
5 
6 class SyncMachineForm;
7 
9  // General
10  wxString name = "";
11  double nominalPower = 100.0;
12  ElectricalUnit nominalPowerUnit = UNIT_MVA;
13  double nominalVoltage = 13.8;
14  ElectricalUnit nominalVoltageUnit = UNIT_kV;
15  double activePower = 100.0;
16  ElectricalUnit activePowerUnit = UNIT_MW;
17  double reactivePower = 0.0;
18  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
19  bool haveMaxReactive = false;
20  double maxReactive = 9999.0;
21  ElectricalUnit maxReactiveUnit = UNIT_MVAr;
22  bool haveMinReactive = false;
23  double minReactive = -9999.0;
24  ElectricalUnit minReactiveUnit = UNIT_MVAr;
25  bool useMachineBase = true;
26 
27  // Fault
28  double positiveResistance = 0.0;
29  double positiveReactance = 1.0;
30  double negativeResistance = 0.0;
31  double negativeReactance = 1.0;
32  double zeroResistance = 0.0;
33  double zeroReactance = 1.0;
34  double groundResistance = 0.0;
35  double groundReactance = 0.0;
36  bool groundNeutral = true;
37  // p.u. fault data
38  std::complex<double> faultCurrent[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
39  std::complex<double>(0.0, 0.0)};
40 
41  // Stability
42  bool plotSyncMachine = false;
43  double inertia = 1.0;
44  double damping = 0.0;
45  bool useAVR = false;
46  bool useSpeedGovernor = false;
47 
48  double armResistance = 0.0;
49  double potierReactance = 0.0;
50  double satFactor = 0.0;
51 
52  double syncXd = 0.0;
53  double syncXq = 0.0;
54  double transXd = 1.0;
55  double transXq = 0.0;
56  double transTd0 = 0.0;
57  double transTq0 = 0.0;
58  double subXd = 0.0;
59  double subXq = 0.0;
60  double subTd0 = 0.0;
61  double subTq0 = 0.0;
62 
63  // Machine state variables
64  std::complex<double> terminalVoltage;
65  std::vector<std::complex<double> > terminalVoltageVector;
66  std::complex<double> electricalPower;
67  std::vector<std::complex<double> > electricalPowerVector;
68  double pm;
69  std::vector<double> mechanicalPowerVector;
70  double speed;
71  std::vector<double> freqVector;
72  double fieldVoltage;
73  std::vector<double> fieldVoltageVector;
74  double delta;
75  std::vector<double> deltaVector;
76 
77  double initialFieldVoltage;
78 
79  // Internal machine variables
80  double tranEq;
81  double tranEd;
82  double subEq;
83  double subEd;
84  double pe;
85 
86  // Variables to extrapolate
87  double oldId;
88  double oldIq;
89  double oldPe;
90 
91  // Integration constants
92  IntegrationConstant icSpeed;
93  IntegrationConstant icDelta;
94  IntegrationConstant icTranEq;
95  IntegrationConstant icTranEd;
96  IntegrationConstant icSubEq;
97  IntegrationConstant icSubEd;
98 
99  // Control
100  ControlElementContainer* avr = NULL;
101  ControlElementContainer* speedGov = NULL;
102 
103  // Control solvers
104  ControlElementSolver* avrSolver = NULL;
105  ControlElementSolver* speedGovSolver = NULL;
106 
107  Machines::SyncMachineModel model = Machines::SM_MODEL_1;
108 };
109 
110 class SyncGenerator : public Machines
111 {
112  public:
113  SyncGenerator();
114  SyncGenerator(wxString name);
115  ~SyncGenerator();
116 
117  virtual Element* GetCopy();
118  virtual void Init();
119  virtual void DrawSymbol() const;
120  virtual bool GetContextMenu(wxMenu& menu);
121  virtual bool ShowForm(wxWindow* parent, Element* element);
122  virtual wxString GetTipText() const;
123  virtual SyncGeneratorElectricalData GetElectricalData() { return m_electricalData; }
124  virtual SyncGeneratorElectricalData GetPUElectricalData(double systemPowerBase);
125  virtual void SetElectricalData(SyncGeneratorElectricalData electricalData) { m_electricalData = electricalData; }
126  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
127  virtual bool GetPlotData(ElementPlotData& plotData);
128 
129  protected:
130  std::vector<wxPoint2DDouble> m_sinePts;
131 
132  SyncGeneratorElectricalData m_electricalData;
133 };
134 
135 #endif // SYNCGENERATOR_H
+ + + + + +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + + + + + +
+
- + diff --git a/docs/doxygen/html/_sync_machine_form_8cpp_source.html b/docs/doxygen/html/_sync_machine_form_8cpp_source.html new file mode 100644 index 0000000..a0ad574 --- /dev/null +++ b/docs/doxygen/html/_sync_machine_form_8cpp_source.html @@ -0,0 +1,112 @@ + + + + + + + +Project/SyncMachineForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SyncMachineForm.cpp
+
+
+
1 #include "GeneratorStabForm.h"
2 #include "SyncMachineForm.h"
3 #include "SyncGenerator.h"
4 #include "SyncMotor.h"
5 
6 SyncMachineForm::SyncMachineForm(wxWindow* parent, SyncGenerator* syncGenerator) : SyncMachineFormBase(parent)
7 {
8  SetSize(GetBestSize());
9  ReplaceStaticTextLabelChar(m_staticTextPosResistance, L'\u2081');
10  ReplaceStaticTextLabelChar(m_staticTextPosReactance, L'\u2081');
11  ReplaceStaticTextLabelChar(m_staticTextNegResistance, L'\u2082');
12  ReplaceStaticTextLabelChar(m_staticTextNegReactance, L'\u2082');
13  ReplaceStaticTextLabelChar(m_staticTextZeroResistance, L'\u2080');
14  ReplaceStaticTextLabelChar(m_staticTextZeroReactance, L'\u2080');
15  Layout();
16  m_syncGenerator = syncGenerator;
17  m_parent = parent;
18 
19  SyncGeneratorElectricalData data = syncGenerator->GetElectricalData();
20 
21  m_textCtrlName->SetValue(data.name);
22 
23  m_textCtrlnominalPower->SetValue(SyncGenerator::StringFromDouble(data.nominalPower));
24  switch(data.nominalPowerUnit) {
25  case UNIT_VA:
26  m_choiceNominalPower->SetSelection(0);
27  break;
28  case UNIT_kVA:
29  m_choiceNominalPower->SetSelection(1);
30  break;
31  case UNIT_MVA:
32  m_choiceNominalPower->SetSelection(2);
33  break;
34  default:
35  break;
36  }
37 
38  m_textCtrlActivePower->SetValue(SyncGenerator::StringFromDouble(data.activePower));
39  switch(data.activePowerUnit) {
40  case UNIT_PU:
41  m_choiceActivePower->SetSelection(0);
42  break;
43  case UNIT_W:
44  m_choiceActivePower->SetSelection(1);
45  break;
46  case UNIT_kW:
47  m_choiceActivePower->SetSelection(2);
48  break;
49  case UNIT_MW:
50  m_choiceActivePower->SetSelection(3);
51  break;
52  default:
53  break;
54  }
55 
56  m_textCtrlReactivePower->SetValue(SyncGenerator::StringFromDouble(data.reactivePower));
57  switch(data.reactivePowerUnit) {
58  case UNIT_PU:
59  m_choiceReactivePower->SetSelection(0);
60  break;
61  case UNIT_VAr:
62  m_choiceReactivePower->SetSelection(1);
63  break;
64  case UNIT_kVAr:
65  m_choiceReactivePower->SetSelection(2);
66  break;
67  case UNIT_MVAr:
68  m_choiceReactivePower->SetSelection(3);
69  break;
70  default:
71  break;
72  }
73  m_checkBoxMaxReactive->SetValue(data.haveMaxReactive);
74 
75  m_textCtrlMaxRectivePower->SetValue(SyncGenerator::StringFromDouble(data.maxReactive));
76  switch(data.maxReactiveUnit) {
77  case UNIT_PU:
78  m_choiceMaxRectivePower->SetSelection(0);
79  break;
80  case UNIT_VAr:
81  m_choiceMaxRectivePower->SetSelection(1);
82  break;
83  case UNIT_kVAr:
84  m_choiceMaxRectivePower->SetSelection(2);
85  break;
86  case UNIT_MVAr:
87  m_choiceMaxRectivePower->SetSelection(3);
88  break;
89  default:
90  break;
91  }
92  m_textCtrlMaxRectivePower->Enable(data.haveMaxReactive);
93  m_choiceMaxRectivePower->Enable(data.haveMaxReactive);
94 
95  m_checkBoxMinReactive->SetValue(data.haveMinReactive);
96  m_textCtrlMinRectivePower->SetValue(SyncGenerator::StringFromDouble(data.minReactive));
97  switch(data.minReactiveUnit) {
98  case UNIT_PU:
99  m_choiceMinRectivePower->SetSelection(0);
100  break;
101  case UNIT_VAr:
102  m_choiceMinRectivePower->SetSelection(1);
103  break;
104  case UNIT_kVAr:
105  m_choiceMinRectivePower->SetSelection(2);
106  break;
107  case UNIT_MVAr:
108  m_choiceMinRectivePower->SetSelection(3);
109  break;
110  default:
111  break;
112  }
113  m_textCtrlMinRectivePower->Enable(data.haveMinReactive);
114  m_choiceMinRectivePower->Enable(data.haveMinReactive);
115 
116  m_checkBoxUseMachinePower->SetValue(data.useMachineBase);
117 
118  m_textCtrlPosResistance->SetValue(SyncGenerator::StringFromDouble(data.positiveResistance));
119  m_textCtrlPosReactance->SetValue(SyncGenerator::StringFromDouble(data.positiveReactance));
120  m_textCtrlNegResistance->SetValue(SyncGenerator::StringFromDouble(data.negativeResistance));
121  m_textCtrlNegReactance->SetValue(SyncGenerator::StringFromDouble(data.negativeReactance));
122  m_textCtrlZeroResistance->SetValue(SyncGenerator::StringFromDouble(data.zeroResistance));
123  m_textCtrlZeroReactance->SetValue(SyncGenerator::StringFromDouble(data.zeroReactance));
124  m_textCtrlGrdResistance->SetValue(SyncGenerator::StringFromDouble(data.groundResistance));
125  m_textCtrlGrdReactance->SetValue(SyncGenerator::StringFromDouble(data.groundReactance));
126  m_checkBoxGroundNeutral->SetValue(data.groundNeutral);
127 }
128 
129 SyncMachineForm::SyncMachineForm(wxWindow* parent, SyncMotor* syncMotor) : SyncMachineFormBase(parent)
130 {
131  m_buttonStab->Enable(false);
132  SetSize(GetBestSize());
133  ReplaceStaticTextLabelChar(m_staticTextPosResistance, L'\u2081');
134  ReplaceStaticTextLabelChar(m_staticTextPosReactance, L'\u2081');
135  ReplaceStaticTextLabelChar(m_staticTextNegResistance, L'\u2082');
136  ReplaceStaticTextLabelChar(m_staticTextNegReactance, L'\u2082');
137  ReplaceStaticTextLabelChar(m_staticTextZeroResistance, L'\u2080');
138  ReplaceStaticTextLabelChar(m_staticTextZeroReactance, L'\u2080');
139  Layout();
140  m_syncMotor = syncMotor;
141  m_parent = parent;
142 
143  SyncMotorElectricalData data = syncMotor->GetElectricalData();
144 
145  m_textCtrlName->SetValue(data.name);
146 
147  m_textCtrlnominalPower->SetValue(SyncMotor::StringFromDouble(data.nominalPower));
148  switch(data.nominalPowerUnit) {
149  case UNIT_VA:
150  m_choiceNominalPower->SetSelection(0);
151  break;
152  case UNIT_kVA:
153  m_choiceNominalPower->SetSelection(1);
154  break;
155  case UNIT_MVA:
156  m_choiceNominalPower->SetSelection(2);
157  break;
158  default:
159  break;
160  }
161 
162  m_textCtrlActivePower->SetValue(SyncMotor::StringFromDouble(data.activePower));
163  switch(data.activePowerUnit) {
164  case UNIT_PU:
165  m_choiceActivePower->SetSelection(0);
166  break;
167  case UNIT_W:
168  m_choiceActivePower->SetSelection(1);
169  break;
170  case UNIT_kW:
171  m_choiceActivePower->SetSelection(2);
172  break;
173  case UNIT_MW:
174  m_choiceActivePower->SetSelection(3);
175  break;
176  default:
177  break;
178  }
179 
180  m_textCtrlReactivePower->SetValue(SyncMotor::StringFromDouble(data.reactivePower));
181  switch(data.reactivePowerUnit) {
182  case UNIT_PU:
183  m_choiceReactivePower->SetSelection(0);
184  break;
185  case UNIT_VAr:
186  m_choiceReactivePower->SetSelection(1);
187  break;
188  case UNIT_kVAr:
189  m_choiceReactivePower->SetSelection(2);
190  break;
191  case UNIT_MVAr:
192  m_choiceReactivePower->SetSelection(3);
193  break;
194  default:
195  break;
196  }
197  m_checkBoxMaxReactive->SetValue(data.haveMaxReactive);
198 
199  m_textCtrlMaxRectivePower->SetValue(SyncMotor::StringFromDouble(data.maxReactive));
200  switch(data.maxReactiveUnit) {
201  case UNIT_PU:
202  m_choiceMaxRectivePower->SetSelection(0);
203  break;
204  case UNIT_VAr:
205  m_choiceMaxRectivePower->SetSelection(1);
206  break;
207  case UNIT_kVAr:
208  m_choiceMaxRectivePower->SetSelection(2);
209  break;
210  case UNIT_MVAr:
211  m_choiceMaxRectivePower->SetSelection(3);
212  break;
213  default:
214  break;
215  }
216  m_textCtrlMaxRectivePower->Enable(data.haveMaxReactive);
217  m_choiceMaxRectivePower->Enable(data.haveMaxReactive);
218 
219  m_checkBoxMinReactive->SetValue(data.haveMinReactive);
220  m_textCtrlMinRectivePower->SetValue(SyncMotor::StringFromDouble(data.minReactive));
221  switch(data.minReactiveUnit) {
222  case UNIT_PU:
223  m_choiceMinRectivePower->SetSelection(0);
224  break;
225  case UNIT_VAr:
226  m_choiceMinRectivePower->SetSelection(1);
227  break;
228  case UNIT_kVAr:
229  m_choiceMinRectivePower->SetSelection(2);
230  break;
231  case UNIT_MVAr:
232  m_choiceMinRectivePower->SetSelection(3);
233  break;
234  default:
235  break;
236  }
237  m_textCtrlMinRectivePower->Enable(data.haveMinReactive);
238  m_choiceMinRectivePower->Enable(data.haveMinReactive);
239 
240  m_checkBoxUseMachinePower->SetValue(data.useMachineBase);
241 
242  m_textCtrlPosResistance->SetValue(SyncMotor::StringFromDouble(data.positiveResistance));
243  m_textCtrlPosReactance->SetValue(SyncMotor::StringFromDouble(data.positiveReactance));
244  m_textCtrlNegResistance->SetValue(SyncMotor::StringFromDouble(data.negativeResistance));
245  m_textCtrlNegReactance->SetValue(SyncMotor::StringFromDouble(data.negativeReactance));
246  m_textCtrlZeroResistance->SetValue(SyncMotor::StringFromDouble(data.zeroResistance));
247  m_textCtrlZeroReactance->SetValue(SyncMotor::StringFromDouble(data.zeroReactance));
248  m_textCtrlGrdResistance->SetValue(SyncMotor::StringFromDouble(data.groundResistance));
249  m_textCtrlGrdReactance->SetValue(SyncMotor::StringFromDouble(data.groundReactance));
250  m_checkBoxGroundNeutral->SetValue(data.groundNeutral);
251 }
252 
253 SyncMachineForm::~SyncMachineForm() {}
254 void SyncMachineForm::OnCheckMaxReactive(wxCommandEvent& event)
255 {
256  m_textCtrlMaxRectivePower->Enable(m_checkBoxMaxReactive->GetValue());
257  m_choiceMaxRectivePower->Enable(m_checkBoxMaxReactive->GetValue());
258 }
259 void SyncMachineForm::OnCheckMinReactive(wxCommandEvent& event)
260 {
261  m_textCtrlMinRectivePower->Enable(m_checkBoxMinReactive->GetValue());
262  m_choiceMinRectivePower->Enable(m_checkBoxMinReactive->GetValue());
263 }
264 void SyncMachineForm::OnOKButtonClick(wxCommandEvent& event)
265 {
266  if(ValidateData()) EndModal(wxID_OK);
267 }
268 void SyncMachineForm::OnStabilityButtonClick(wxCommandEvent& event)
269 {
270  if(ValidateData()) {
271  if(m_syncGenerator) {
272  GeneratorStabForm* stabForm = new GeneratorStabForm(m_parent, m_syncGenerator);
273  if(stabForm->ShowModal() == wxID_OK) {
274  stabForm->Destroy();
275  EndModal(wxID_OK);
276  }
277 
278  stabForm->Destroy();
279  EndModal(wxID_CANCEL);
280  }
281  }
282 }
283 
284 bool SyncMachineForm::ValidateData()
285 {
286  if(m_syncGenerator) {
287  SyncGeneratorElectricalData data = m_syncGenerator->GetElectricalData();
288  data.name = m_textCtrlName->GetValue();
289 
290  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlnominalPower->GetValue(), data.nominalPower,
291  _("Value entered incorrectly in the field \"Nominal power\".")))
292  return false;
293  switch(m_choiceNominalPower->GetSelection()) {
294  case 0:
295  data.nominalPowerUnit = UNIT_VA;
296  break;
297  case 1:
298  data.nominalPowerUnit = UNIT_kVA;
299  break;
300  case 2:
301  data.nominalPowerUnit = UNIT_MVA;
302  break;
303  }
304 
305  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlActivePower->GetValue(), data.activePower,
306  _("Value entered incorrectly in the field \"Active power\".")))
307  return false;
308  switch(m_choiceActivePower->GetSelection()) {
309  case 0:
310  data.activePowerUnit = UNIT_PU;
311  break;
312  case 1:
313  data.activePowerUnit = UNIT_W;
314  break;
315  case 2:
316  data.activePowerUnit = UNIT_kW;
317  break;
318  case 3:
319  data.activePowerUnit = UNIT_MW;
320  break;
321  }
322 
323  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlReactivePower->GetValue(), data.reactivePower,
324  _("Value entered incorrectly in the field \"Reactive power\".")))
325  return false;
326  switch(m_choiceReactivePower->GetSelection()) {
327  case 0:
328  data.reactivePowerUnit = UNIT_PU;
329  break;
330  case 1:
331  data.reactivePowerUnit = UNIT_VAr;
332  break;
333  case 2:
334  data.reactivePowerUnit = UNIT_kVAr;
335  break;
336  case 3:
337  data.reactivePowerUnit = UNIT_MVAr;
338  break;
339  }
340 
341  data.haveMaxReactive = m_checkBoxMaxReactive->GetValue();
342  if(data.haveMaxReactive) {
343  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlMaxRectivePower->GetValue(), data.maxReactive,
344  _("Value entered incorrectly in the field \"Max reactive power\".")))
345  return false;
346  switch(m_choiceMaxRectivePower->GetSelection()) {
347  case 0:
348  data.maxReactiveUnit = UNIT_PU;
349  break;
350  case 1:
351  data.maxReactiveUnit = UNIT_VAr;
352  break;
353  case 2:
354  data.maxReactiveUnit = UNIT_kVAr;
355  break;
356  case 3:
357  data.maxReactiveUnit = UNIT_MVAr;
358  break;
359  }
360  }
361 
362  data.haveMinReactive = m_checkBoxMinReactive->GetValue();
363  if(data.haveMinReactive) {
364  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlMinRectivePower->GetValue(), data.minReactive,
365  _("Value entered incorrectly in the field \"Min reactive power\".")))
366  return false;
367  switch(m_choiceMinRectivePower->GetSelection()) {
368  case 0:
369  data.minReactiveUnit = UNIT_PU;
370  break;
371  case 1:
372  data.minReactiveUnit = UNIT_VAr;
373  break;
374  case 2:
375  data.minReactiveUnit = UNIT_kVAr;
376  break;
377  case 3:
378  data.minReactiveUnit = UNIT_MVAr;
379  break;
380  }
381  }
382 
383  data.useMachineBase = m_checkBoxUseMachinePower->GetValue();
384 
385  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlPosResistance->GetValue(), data.positiveResistance,
386  _("Value entered incorrectly in the field \"Positive resistance\".")))
387  return false;
388 
389  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlPosReactance->GetValue(), data.positiveReactance,
390  _("Value entered incorrectly in the field \"Positive reactance\".")))
391  return false;
392 
393  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlNegResistance->GetValue(), data.negativeResistance,
394  _("Value entered incorrectly in the field \"Negative resistance\".")))
395  return false;
396 
397  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlNegReactance->GetValue(), data.negativeReactance,
398  _("Value entered incorrectly in the field \"Negative reactance\".")))
399  return false;
400 
401  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance,
402  _("Value entered incorrectly in the field \"Zero resistance\".")))
403  return false;
404 
405  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroReactance,
406  _("Value entered incorrectly in the field \"Zero reactance\".")))
407  return false;
408 
409  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlGrdResistance->GetValue(), data.groundResistance,
410  _("Value entered incorrectly in the field \"Ground resistance\".")))
411  return false;
412 
413  if(!m_syncGenerator->DoubleFromString(m_parent, m_textCtrlGrdReactance->GetValue(), data.groundReactance,
414  _("Value entered incorrectly in the field \"Ground reactance\".")))
415  return false;
416 
417  data.groundNeutral = m_checkBoxGroundNeutral->GetValue();
418 
419  m_syncGenerator->SetElectricalData(data);
420  } else if(m_syncMotor) {
421  SyncMotorElectricalData data = m_syncMotor->GetElectricalData();
422  data.name = m_textCtrlName->GetValue();
423 
424  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlnominalPower->GetValue(), data.nominalPower,
425  _("Value entered incorrectly in the field \"Nominal power\".")))
426  return false;
427  switch(m_choiceNominalPower->GetSelection()) {
428  case 0:
429  data.nominalPowerUnit = UNIT_VA;
430  break;
431  case 1:
432  data.nominalPowerUnit = UNIT_kVA;
433  break;
434  case 2:
435  data.nominalPowerUnit = UNIT_MVA;
436  break;
437  }
438 
439  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlActivePower->GetValue(), data.activePower,
440  _("Value entered incorrectly in the field \"Active power\".")))
441  return false;
442  switch(m_choiceActivePower->GetSelection()) {
443  case 0:
444  data.activePowerUnit = UNIT_PU;
445  break;
446  case 1:
447  data.activePowerUnit = UNIT_W;
448  break;
449  case 2:
450  data.activePowerUnit = UNIT_kW;
451  break;
452  case 3:
453  data.activePowerUnit = UNIT_MW;
454  break;
455  }
456 
457  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlReactivePower->GetValue(), data.reactivePower,
458  _("Value entered incorrectly in the field \"Reactive power\".")))
459  return false;
460  switch(m_choiceReactivePower->GetSelection()) {
461  case 0:
462  data.reactivePowerUnit = UNIT_PU;
463  break;
464  case 1:
465  data.reactivePowerUnit = UNIT_VAr;
466  break;
467  case 2:
468  data.reactivePowerUnit = UNIT_kVAr;
469  break;
470  case 3:
471  data.reactivePowerUnit = UNIT_MVAr;
472  break;
473  }
474 
475  data.haveMaxReactive = m_checkBoxMaxReactive->GetValue();
476  if(data.haveMaxReactive) {
477  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlMaxRectivePower->GetValue(), data.maxReactive,
478  _("Value entered incorrectly in the field \"Max reactive power\".")))
479  return false;
480  switch(m_choiceMaxRectivePower->GetSelection()) {
481  case 0:
482  data.maxReactiveUnit = UNIT_PU;
483  break;
484  case 1:
485  data.maxReactiveUnit = UNIT_VAr;
486  break;
487  case 2:
488  data.maxReactiveUnit = UNIT_kVAr;
489  break;
490  case 3:
491  data.maxReactiveUnit = UNIT_MVAr;
492  break;
493  }
494  }
495 
496  data.haveMinReactive = m_checkBoxMinReactive->GetValue();
497  if(data.haveMinReactive) {
498  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlMinRectivePower->GetValue(), data.minReactive,
499  _("Value entered incorrectly in the field \"Min reactive power\".")))
500  return false;
501  switch(m_choiceMinRectivePower->GetSelection()) {
502  case 0:
503  data.minReactiveUnit = UNIT_PU;
504  break;
505  case 1:
506  data.minReactiveUnit = UNIT_VAr;
507  break;
508  case 2:
509  data.minReactiveUnit = UNIT_kVAr;
510  break;
511  case 3:
512  data.minReactiveUnit = UNIT_MVAr;
513  break;
514  }
515  }
516 
517  data.useMachineBase = m_checkBoxUseMachinePower->GetValue();
518 
519  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlPosResistance->GetValue(), data.positiveResistance,
520  _("Value entered incorrectly in the field \"Positive resistance\".")))
521  return false;
522 
523  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlPosReactance->GetValue(), data.positiveReactance,
524  _("Value entered incorrectly in the field \"Positive reactance\".")))
525  return false;
526 
527  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlNegResistance->GetValue(), data.negativeResistance,
528  _("Value entered incorrectly in the field \"Negative resistance\".")))
529  return false;
530 
531  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlNegReactance->GetValue(), data.negativeReactance,
532  _("Value entered incorrectly in the field \"Negative reactance\".")))
533  return false;
534 
535  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance,
536  _("Value entered incorrectly in the field \"Zero resistance\".")))
537  return false;
538 
539  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroReactance,
540  _("Value entered incorrectly in the field \"Zero reactance\".")))
541  return false;
542 
543  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlGrdResistance->GetValue(), data.groundResistance,
544  _("Value entered incorrectly in the field \"Ground resistance\".")))
545  return false;
546 
547  if(!m_syncMotor->DoubleFromString(m_parent, m_textCtrlGrdReactance->GetValue(), data.groundReactance,
548  _("Value entered incorrectly in the field \"Ground reactance\".")))
549  return false;
550 
551  data.groundNeutral = m_checkBoxGroundNeutral->GetValue();
552 
553  m_syncMotor->SetElectricalData(data);
554  }
555  return true;
556 }
557 
558 void SyncMachineForm::ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newChar)
559 {
560  wxString label = staticText->GetLabel();
561  label[label.length() - 2] = newChar;
562  staticText->SetLabel(label);
563 }
+ + + + + + + + + + + +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ + + + +
+
+ + + + diff --git a/docs/doxygen/html/_sync_machine_form_8h_source.html b/docs/doxygen/html/_sync_machine_form_8h_source.html index 9bacd44..7d4532d 100644 --- a/docs/doxygen/html/_sync_machine_form_8h_source.html +++ b/docs/doxygen/html/_sync_machine_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/SyncMachineForm.h Source File +Project/SyncMachineForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
SyncMachineForm.h
-
1 #ifndef SYNCMACHINEFORM_H
2 #define SYNCMACHINEFORM_H
3 
4 #include "ElementForm.h"
5 
7 class SyncGenerator;
8 class SyncMotor;
9 
11 {
12  public:
13  SyncMachineForm(wxWindow* parent, SyncGenerator* syncGenerator);
14  SyncMachineForm(wxWindow* parent, SyncMotor* syncMotor);
15  virtual ~SyncMachineForm();
16 
17  protected:
18  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
19  virtual void OnCheckMaxReactive(wxCommandEvent& event);
20  virtual void OnCheckMinReactive(wxCommandEvent& event);
21  virtual void OnOKButtonClick(wxCommandEvent& event);
22  virtual void OnStabilityButtonClick(wxCommandEvent& event);
23 
24  virtual bool ValidateData();
25  virtual void ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newChar);
26 
27  SyncGenerator* m_syncGenerator = NULL;
28  SyncMotor* m_syncMotor = NULL;
29  wxWindow* m_parent = NULL;
30 };
31 #endif // SYNCMACHINEFORM_H
Definition: SyncGenerator.h:110
-
Definition: ElementForm.h:148
-
Definition: SyncMachineForm.h:10
-
Definition: GeneratorStabForm.h:11
-
Definition: SyncMotor.h:110
+
1 #ifndef SYNCMACHINEFORM_H
2 #define SYNCMACHINEFORM_H
3 
4 #include "ElementForm.h"
5 
7 class SyncGenerator;
8 class SyncMotor;
9 
11 {
12  public:
13  SyncMachineForm(wxWindow* parent, SyncGenerator* syncGenerator);
14  SyncMachineForm(wxWindow* parent, SyncMotor* syncMotor);
15  virtual ~SyncMachineForm();
16 
17  protected:
18  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); };
19  virtual void OnCheckMaxReactive(wxCommandEvent& event);
20  virtual void OnCheckMinReactive(wxCommandEvent& event);
21  virtual void OnOKButtonClick(wxCommandEvent& event);
22  virtual void OnStabilityButtonClick(wxCommandEvent& event);
23 
24  virtual bool ValidateData();
25  virtual void ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newChar);
26 
27  SyncGenerator* m_syncGenerator = NULL;
28  SyncMotor* m_syncMotor = NULL;
29  wxWindow* m_parent = NULL;
30 };
31 #endif // SYNCMACHINEFORM_H
+ + + +
+
- + diff --git a/docs/doxygen/html/_sync_motor_8cpp_source.html b/docs/doxygen/html/_sync_motor_8cpp_source.html new file mode 100644 index 0000000..33e9400 --- /dev/null +++ b/docs/doxygen/html/_sync_motor_8cpp_source.html @@ -0,0 +1,113 @@ + + + + + + + +Project/SyncMotor.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SyncMotor.cpp
+
+
+
1 #include "SyncMachineForm.h"
2 #include "SyncMotor.h"
3 
4 SyncMotor::SyncMotor() : Machines() {}
5 SyncMotor::SyncMotor(wxString name) : Machines() { m_electricalData.name = name; }
6 SyncMotor::~SyncMotor() {}
7 void SyncMotor::DrawSymbol() const { DrawArc(m_position, 12, 30, 330, 10, GL_LINE_STRIP); }
8 bool SyncMotor::GetContextMenu(wxMenu& menu)
9 {
10  menu.Append(ID_EDIT_ELEMENT, _("Edit Synchronous Condenser"));
11  GeneralMenuItens(menu);
12 
13  return true;
14 }
15 
16 bool SyncMotor::ShowForm(wxWindow* parent, Element* element)
17 {
18  SyncMachineForm* syncMotorForm = new SyncMachineForm(parent, this);
19  syncMotorForm->SetTitle(_("Synchronous Condenser"));
20  if(syncMotorForm->ShowModal() == wxID_OK) {
21  syncMotorForm->Destroy();
22  return true;
23  }
24 
25  syncMotorForm->Destroy();
26  return false;
27 }
28 
29 SyncMotorElectricalData SyncMotor::GetPUElectricalData(double systemPowerBase)
30 {
31  SyncMotorElectricalData data = m_electricalData;
32  double machineBasePower = 1.0;
33  if(data.useMachineBase) {
34  machineBasePower = GetValueFromUnit(data.nominalPower, data.nominalPowerUnit);
35  }
36 
37  // Active power
38  double activePower = GetValueFromUnit(data.activePower, data.activePowerUnit);
39  if(!m_online) activePower = 0.0;
40  if(data.activePowerUnit == UNIT_PU) {
41  if(data.useMachineBase) data.activePower = (activePower * machineBasePower) / systemPowerBase;
42  } else {
43  data.activePower = activePower / systemPowerBase;
44  }
45  data.activePowerUnit = UNIT_PU;
46 
47  // Reactive power
48  double reactivePower = GetValueFromUnit(data.reactivePower, data.reactivePowerUnit);
49  if(!m_online) reactivePower = 0.0;
50  if(data.reactivePowerUnit == UNIT_PU) {
51  if(data.useMachineBase) data.reactivePower = (reactivePower * machineBasePower) / systemPowerBase;
52  } else {
53  data.reactivePower = reactivePower / systemPowerBase;
54  }
55  data.reactivePowerUnit = UNIT_PU;
56 
57  // Max reactive power
58  double maxReactive = GetValueFromUnit(data.maxReactive, data.maxReactiveUnit);
59  if(data.maxReactiveUnit == UNIT_PU) {
60  if(data.useMachineBase) data.maxReactive = (maxReactive * machineBasePower) / systemPowerBase;
61  } else {
62  data.maxReactive = maxReactive / systemPowerBase;
63  }
64  data.maxReactiveUnit = UNIT_PU;
65 
66  // Min reactive power
67  double minReactive = GetValueFromUnit(data.minReactive, data.minReactiveUnit);
68  if(data.minReactiveUnit == UNIT_PU) {
69  if(data.useMachineBase) data.minReactive = (minReactive * machineBasePower) / systemPowerBase;
70  } else {
71  data.minReactive = minReactive / systemPowerBase;
72  }
73  data.minReactiveUnit = UNIT_PU;
74 
75  double baseVoltage = GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
76  double systemBaseImpedance = (baseVoltage * baseVoltage) / systemPowerBase;
77  double machineBaseImpedance = (baseVoltage * baseVoltage) / machineBasePower;
78 
79  // Fault data
80  if(data.useMachineBase) {
81  data.positiveResistance = (data.positiveResistance * machineBaseImpedance) / systemBaseImpedance;
82  data.positiveReactance = (data.positiveReactance * machineBaseImpedance) / systemBaseImpedance;
83  data.negativeResistance = (data.negativeResistance * machineBaseImpedance) / systemBaseImpedance;
84  data.negativeReactance = (data.negativeReactance * machineBaseImpedance) / systemBaseImpedance;
85  data.zeroResistance = (data.zeroResistance * machineBaseImpedance) / systemBaseImpedance;
86  data.zeroReactance = (data.zeroReactance * machineBaseImpedance) / systemBaseImpedance;
87  data.groundResistance = (data.groundResistance * machineBaseImpedance) / systemBaseImpedance;
88  data.groundReactance = (data.groundReactance * machineBaseImpedance) / systemBaseImpedance;
89  }
90 
91  if(!m_online) {
92  data.faultCurrent[0] = std::complex<double>(0, 0);
93  data.faultCurrent[1] = std::complex<double>(0, 0);
94  data.faultCurrent[2] = std::complex<double>(0, 0);
95  }
96 
97  return data;
98 }
99 
100 void SyncMotor::SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit)
101 {
102  if(nominalVoltage.size() > 0) {
103  m_electricalData.nominalVoltage = nominalVoltage[0];
104  m_electricalData.nominalVoltageUnit = nominalVoltageUnit[0];
105  }
106 }
107 
109 {
110  SyncMotor* copy = new SyncMotor();
111  *copy = *this;
112  return copy;
113 }
114 
115 wxString SyncMotor::GetTipText() const
116 {
117  wxString tipText = m_electricalData.name;
118  tipText += "\n";
119  double activePower = m_electricalData.activePower;
120  if(!m_online) activePower = 0.0;
121  tipText += _("\nP = ") + wxString::FromDouble(activePower, 5);
122  switch(m_electricalData.activePowerUnit) {
123  case UNIT_PU: {
124  tipText += _(" p.u.");
125  } break;
126  case UNIT_W: {
127  tipText += _(" W");
128  } break;
129  case UNIT_kW: {
130  tipText += _(" kW");
131  } break;
132  case UNIT_MW: {
133  tipText += _(" MW");
134  } break;
135  default:
136  break;
137  }
138  double reactivePower = m_electricalData.reactivePower;
139  if(!m_online) reactivePower = 0.0;
140  tipText += _("\nQ = ") + wxString::FromDouble(reactivePower, 5);
141  switch(m_electricalData.reactivePowerUnit) {
142  case UNIT_PU: {
143  tipText += _(" p.u.");
144  } break;
145  case UNIT_VAr: {
146  tipText += _(" VAr");
147  } break;
148  case UNIT_kVAr: {
149  tipText += _(" kVAr");
150  } break;
151  case UNIT_MVAr: {
152  tipText += _(" MVAr");
153  } break;
154  default:
155  break;
156  }
157 
158  return tipText;
159 }
+
virtual Element * GetCopy()
Get a the element copy.
Definition: SyncMotor.cpp:108
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: SyncMotor.cpp:8
+
virtual wxString GetTipText() const
Get the tip text.
Definition: SyncMotor.cpp:115
+ + + + + + + + + +
virtual void SetNominalVoltage(std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
Set nominal voltage of the element.
Definition: SyncMotor.cpp:100
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: SyncMotor.cpp:16
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_sync_motor_8h_source.html b/docs/doxygen/html/_sync_motor_8h_source.html index 376ed29..4df3ba3 100644 --- a/docs/doxygen/html/_sync_motor_8h_source.html +++ b/docs/doxygen/html/_sync_motor_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/SyncMotor.h Source File +Project/SyncMotor.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
SyncMotor.h
-
1 #ifndef SYNCMOTOR_H
2 #define SYNCMOTOR_H
3 
4 #include "Machines.h"
5 
6 class SyncMachineForm;
7 
9  // General
10  wxString name = "";
11  double nominalPower = 100.0;
12  ElectricalUnit nominalPowerUnit = UNIT_MVA;
13  double nominalVoltage = 13.8;
14  ElectricalUnit nominalVoltageUnit = UNIT_kV;
15  double activePower = 100.0;
16  ElectricalUnit activePowerUnit = UNIT_MW;
17  double reactivePower = 0.0;
18  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
19  bool haveMaxReactive = false;
20  double maxReactive = 9999.0;
21  ElectricalUnit maxReactiveUnit = UNIT_MVAr;
22  bool haveMinReactive = false;
23  double minReactive = -9999.0;
24  ElectricalUnit minReactiveUnit = UNIT_MVAr;
25  bool useMachineBase = true;
26 
27  // Fault
28  double positiveResistance = 0.0;
29  double positiveReactance = 1.0;
30  double negativeResistance = 0.0;
31  double negativeReactance = 1.0;
32  double zeroResistance = 0.0;
33  double zeroReactance = 1.0;
34  double groundResistance = 0.0;
35  double groundReactance = 0.0;
36  bool groundNeutral = true;
37  // p.u. fault data
38  std::complex<double> faultCurrent[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
39  std::complex<double>(0.0, 0.0)};
40 
41  // Stability
42  bool plotSyncMachine = false;
43  double inertia = 1.0;
44  double damping = 0.0;
45  bool useAVR = false;
46  bool useSpeedGovernor = false;
47 
48  double armResistance = 0.0;
49  double potierReactance = 0.0;
50  double satFactor = 0.0;
51 
52  double syncXd = 0.0;
53  double syncXq = 0.0;
54  double transXd = 1.0;
55  double transXq = 0.0;
56  double transTd0 = 0.0;
57  double transTq0 = 0.0;
58  double subXd = 0.0;
59  double subXq = 0.0;
60  double subTd0 = 0.0;
61  double subTq0 = 0.0;
62 
63  // Machine state variables
64  std::complex<double> terminalVoltage;
65  std::vector<std::complex<double> > terminalVoltageVector;
66  std::complex<double> electricalPower;
67  std::vector<std::complex<double> > electricalPowerVector;
68  double pm;
69  std::vector<double> mechanicalPowerVector;
70  double speed;
71  std::vector<double> freqVector;
72  double fieldVoltage;
73  std::vector<double> fieldVoltageVector;
74  double delta;
75  std::vector<double> deltaVector;
76 
77  double initialFieldVoltage;
78 
79  // Internal machine variables
80  double tranEq;
81  double tranEd;
82  double subEq;
83  double subEd;
84  double pe;
85 
86  // Variables to extrapolate
87  double oldId;
88  double oldIq;
89  double oldPe;
90 
91  // Integration constants
92  IntegrationConstant icSpeed;
93  IntegrationConstant icDelta;
94  IntegrationConstant icTranEq;
95  IntegrationConstant icTranEd;
96  IntegrationConstant icSubEq;
97  IntegrationConstant icSubEd;
98 
99  // Control
100  ControlElementContainer* avr = NULL;
101  ControlElementContainer* speedGov = NULL;
102 
103  // Control solvers
104  ControlElementSolver* avrSolver = NULL;
105  ControlElementSolver* speedGovSolver = NULL;
106 
107  Machines::SyncMachineModel model = Machines::SM_MODEL_1;
108 };
109 
110 class SyncMotor : public Machines
111 {
112  public:
113  SyncMotor();
114  SyncMotor(wxString name);
115  ~SyncMotor();
116 
117  virtual Element* GetCopy();
118  virtual void DrawSymbol() const;
119  virtual bool GetContextMenu(wxMenu& menu);
120  virtual wxString GetTipText() const;
121  virtual SyncMotorElectricalData GetElectricalData() { return m_electricalData; }
122  virtual SyncMotorElectricalData GetPUElectricalData(double systemPowerBase);
123  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
124  virtual void SetElectricalData(SyncMotorElectricalData electricalData) { m_electricalData = electricalData; }
125  virtual bool ShowForm(wxWindow* parent, Element* element);
126 
127  protected:
128  SyncMotorElectricalData m_electricalData;
129 };
130 
131 #endif // SYNCMOTOR_H
Definition: Element.h:88
-
Definition: ControlElementSolver.h:20
-
Definition: PowerElement.h:19
-
Definition: PowerElement.h:14
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:88
-
Definition: SyncMachineForm.h:10
-
Definition: PowerElement.h:22
-
Definition: PowerElement.h:25
-
Definition: ControlElementContainer.h:20
-
Definition: SyncMotor.h:110
-
Definition: Machines.h:9
-
Definition: SyncMotor.h:8
+
1 #ifndef SYNCMOTOR_H
2 #define SYNCMOTOR_H
3 
4 #include "Machines.h"
5 
6 class SyncMachineForm;
7 
9  // General
10  wxString name = "";
11  double nominalPower = 100.0;
12  ElectricalUnit nominalPowerUnit = UNIT_MVA;
13  double nominalVoltage = 13.8;
14  ElectricalUnit nominalVoltageUnit = UNIT_kV;
15  double activePower = 100.0;
16  ElectricalUnit activePowerUnit = UNIT_MW;
17  double reactivePower = 0.0;
18  ElectricalUnit reactivePowerUnit = UNIT_MVAr;
19  bool haveMaxReactive = false;
20  double maxReactive = 9999.0;
21  ElectricalUnit maxReactiveUnit = UNIT_MVAr;
22  bool haveMinReactive = false;
23  double minReactive = -9999.0;
24  ElectricalUnit minReactiveUnit = UNIT_MVAr;
25  bool useMachineBase = true;
26 
27  // Fault
28  double positiveResistance = 0.0;
29  double positiveReactance = 1.0;
30  double negativeResistance = 0.0;
31  double negativeReactance = 1.0;
32  double zeroResistance = 0.0;
33  double zeroReactance = 1.0;
34  double groundResistance = 0.0;
35  double groundReactance = 0.0;
36  bool groundNeutral = true;
37  // p.u. fault data
38  std::complex<double> faultCurrent[3] = {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
39  std::complex<double>(0.0, 0.0)};
40 
41  // Stability
42  bool plotSyncMachine = false;
43  double inertia = 1.0;
44  double damping = 0.0;
45  bool useAVR = false;
46  bool useSpeedGovernor = false;
47 
48  double armResistance = 0.0;
49  double potierReactance = 0.0;
50  double satFactor = 0.0;
51 
52  double syncXd = 0.0;
53  double syncXq = 0.0;
54  double transXd = 1.0;
55  double transXq = 0.0;
56  double transTd0 = 0.0;
57  double transTq0 = 0.0;
58  double subXd = 0.0;
59  double subXq = 0.0;
60  double subTd0 = 0.0;
61  double subTq0 = 0.0;
62 
63  // Machine state variables
64  std::complex<double> terminalVoltage;
65  std::vector<std::complex<double> > terminalVoltageVector;
66  std::complex<double> electricalPower;
67  std::vector<std::complex<double> > electricalPowerVector;
68  double pm;
69  std::vector<double> mechanicalPowerVector;
70  double speed;
71  std::vector<double> freqVector;
72  double fieldVoltage;
73  std::vector<double> fieldVoltageVector;
74  double delta;
75  std::vector<double> deltaVector;
76 
77  double initialFieldVoltage;
78 
79  // Internal machine variables
80  double tranEq;
81  double tranEd;
82  double subEq;
83  double subEd;
84  double pe;
85 
86  // Variables to extrapolate
87  double oldId;
88  double oldIq;
89  double oldPe;
90 
91  // Integration constants
92  IntegrationConstant icSpeed;
93  IntegrationConstant icDelta;
94  IntegrationConstant icTranEq;
95  IntegrationConstant icTranEd;
96  IntegrationConstant icSubEq;
97  IntegrationConstant icSubEd;
98 
99  // Control
100  ControlElementContainer* avr = NULL;
101  ControlElementContainer* speedGov = NULL;
102 
103  // Control solvers
104  ControlElementSolver* avrSolver = NULL;
105  ControlElementSolver* speedGovSolver = NULL;
106 
107  Machines::SyncMachineModel model = Machines::SM_MODEL_1;
108 };
109 
110 class SyncMotor : public Machines
111 {
112  public:
113  SyncMotor();
114  SyncMotor(wxString name);
115  ~SyncMotor();
116 
117  virtual Element* GetCopy();
118  virtual void DrawSymbol() const;
119  virtual bool GetContextMenu(wxMenu& menu);
120  virtual wxString GetTipText() const;
121  virtual SyncMotorElectricalData GetElectricalData() { return m_electricalData; }
122  virtual SyncMotorElectricalData GetPUElectricalData(double systemPowerBase);
123  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
124  virtual void SetElectricalData(SyncMotorElectricalData electricalData) { m_electricalData = electricalData; }
125  virtual bool ShowForm(wxWindow* parent, Element* element);
126 
127  protected:
128  SyncMotorElectricalData m_electricalData;
129 };
130 
131 #endif // SYNCMOTOR_H
+ + + +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + + + + + + +
+
- + diff --git a/docs/doxygen/html/_text_8cpp_source.html b/docs/doxygen/html/_text_8cpp_source.html new file mode 100644 index 0000000..2c98e63 --- /dev/null +++ b/docs/doxygen/html/_text_8cpp_source.html @@ -0,0 +1,146 @@ + + + + + + + +Project/Text.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Text.cpp
+
+
+
1 #include "TextForm.h"
2 #include "Text.h"
3 
4 #ifdef USING_WX_3_0_X
5 #include "DegreesAndRadians.h"
6 #endif
7 #include "ElectricCalculation.h"
8 #include "Bus.h"
9 #include "Line.h"
10 #include "Transformer.h"
11 #include "SyncGenerator.h"
12 #include "IndMotor.h"
13 #include "SyncMotor.h"
14 #include "Load.h"
15 #include "Inductor.h"
16 #include "Capacitor.h"
17 
18 Text::Text() : GraphicalElement() { SetText(m_text); }
19 Text::Text(wxPoint2DDouble position) : GraphicalElement()
20 {
21  m_position = position;
22  SetText(m_text);
23 }
24 
25 Text::~Text()
26 {
27  if(m_glString) delete m_glString;
28  if(m_glStringArray) delete m_glStringArray;
29 }
30 bool Text::Contains(wxPoint2DDouble position) const
31 {
32  wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
33  return m_rect.Contains(ptR);
34 }
35 
36 void Text::Draw(wxPoint2DDouble translation, double scale)
37 {
38  wxScreenDC dc;
39 
40  // Draw selection rectangle
41 
42  // Push the current matrix on stack.
43  glPushMatrix();
44  // Rotate the matrix around the object position.
45  glTranslated(m_position.m_x, m_position.m_y, 0.0);
46  glRotated(m_angle, 0.0, 0.0, 1.0);
47  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
48 
49  if(m_selected) {
50  glColor4d(0.0, 0.5, 1.0, 0.5);
51  DrawRectangle(m_position + wxPoint2DDouble(m_borderSize / 2.0, m_borderSize / 2.0), m_rect.m_width,
52  m_rect.m_height);
53  }
54 
55  // Draw text (layer 2)
56  glEnable(GL_TEXTURE_2D);
57  glColor4d(0.0, 0.0, 0.0, 1.0);
58  if(!m_isMultlineText) { // Only one line
59  m_glString->bind();
60  m_glString->render(m_position.m_x, m_position.m_y);
61  } else { // Multiples lines
62  m_glStringArray->bind();
63  // The text will be printed centralized.
64  double lineHeight = m_height / (double)m_numberOfLines;
65  for(int i = 0; i < m_numberOfLines; i++) {
66  m_glStringArray->get(i)
67  .render(m_position.m_x, m_position.m_y - m_height / 2.0 + lineHeight / 2.0 + lineHeight * double(i));
68  }
69  }
70  glDisable(GL_TEXTURE_2D);
71 
72  glPopMatrix();
73 }
74 
75 bool Text::Intersects(wxRect2DDouble rect) const
76 {
77  if(m_angle == 0.0 || m_angle == 180.0) return m_rect.Intersects(rect);
78  return RotatedRectanglesIntersects(m_rect, rect, m_angle, 0.0);
79 }
80 
81 void Text::SetText(wxString text)
82 {
83  glEnable(GL_TEXTURE_2D);
84  m_text = text;
85  wxFont font(m_fontSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
86 
87  wxScreenDC dc;
88  GLuint* idString = NULL;
89  GLuint* idStringArray = NULL;
90 
91  if(m_glString) {
92  delete m_glString;
93  m_glString = NULL;
94 
95  idString = new GLuint;
96  glGenTextures(1, idString);
97  }
98  if(m_glStringArray) {
99  delete m_glStringArray;
100  m_glStringArray = NULL;
101 
102  idStringArray = new GLuint;
103  glGenTextures(1, idStringArray);
104  }
105 
106  m_numberOfLines = m_text.Freq('\n') + 1;
107  if(m_numberOfLines == 1) { // Only one line
108  m_isMultlineText = false;
109  m_glString = new wxGLString(m_text);
110  m_glString->setFont(font);
111  m_glString->consolidate(&dc);
112  m_width = m_glString->getWidth();
113  m_height = m_glString->getheight();
114  } else {
115  m_isMultlineText = true;
116  m_glStringArray = new wxGLStringArray();
117  dc.SetFont(font);
118 
119  m_width = 0.0;
120  m_height = 0.0;
121  wxString multText = m_text;
122  for(int i = 0; i < m_numberOfLines; ++i) {
123  wxString nextLine;
124  wxString currentLine = multText.BeforeFirst('\n', &nextLine);
125  multText = nextLine;
126  m_glStringArray->addString(currentLine);
127 
128  wxSize size = dc.GetTextExtent(currentLine);
129  if(size.GetWidth() > m_width) m_width = size.GetWidth();
130  m_height += size.GetHeight();
131  }
132 
133  m_glStringArray->setFont(font);
134  m_glStringArray->consolidate(&dc);
135  }
136 
137  if(idString) glDeleteTextures(1, idString);
138  if(idStringArray) glDeleteTextures(1, idStringArray);
139 
140  // Update text rectangle.
141  SetPosition(m_position);
142  glDisable(GL_TEXTURE_2D);
143 }
144 
145 void Text::Rotate(bool clockwise)
146 {
147  double rotAngle = m_rotationAngle;
148  if(!clockwise) rotAngle = -m_rotationAngle;
149 
150  m_angle += rotAngle;
151  if(m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
152 }
153 
154 bool Text::ShowForm(wxWindow* parent, std::vector<Element*> elementList)
155 {
156  TextForm* textForm = new TextForm(parent, this, elementList);
157  if(textForm->ShowModal() == wxID_OK) {
158  textForm->Destroy();
159  return true;
160  }
161  textForm->Destroy();
162  return false;
163 }
164 
165 void Text::UpdateText(double systemPowerBase)
166 {
167  switch(m_elementType) {
168  case TYPE_NONE:
169  SetText(m_text);
170  break;
171  case TYPE_BUS: {
172  Bus* bus = static_cast<Bus*>(m_element);
173  if(bus) {
174  BusElectricalData data = bus->GetElectricalData();
175  double baseVoltage = data.nominalVoltage;
176  if(data.nominalVoltageUnit == UNIT_kV) baseVoltage *= 1e3;
177  double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
178 
179  switch(m_dataType) {
180  case DATA_NAME: {
181  SetText(bus->GetElectricalData().name);
182  } break;
183  case DATA_VOLTAGE: {
184  double voltage = std::abs(data.voltage);
185  switch(m_unit) {
186  case UNIT_PU: {
187  SetText(wxString::FromDouble(voltage, m_decimalPlaces) + " p.u.");
188  } break;
189  case UNIT_V: {
190  SetText(wxString::FromDouble(voltage * baseVoltage, m_decimalPlaces) + " V");
191  } break;
192  case UNIT_kV: {
193  SetText(wxString::FromDouble(voltage * baseVoltage / 1e3, m_decimalPlaces) + " kV");
194  } break;
195  default:
196  break;
197  }
198  } break;
199  case DATA_ANGLE: {
200  double angle = std::arg(data.voltage);
201  switch(m_unit) {
202  case UNIT_RADIAN: {
203  SetText(wxString::FromDouble(angle, m_decimalPlaces) + " rad");
204  } break;
205  case UNIT_DEGREE: {
206  SetText(wxString::FromDouble(wxRadToDeg(angle), m_decimalPlaces) + (wxString)L'\u00B0');
207  } break;
208  default:
209  break;
210  }
211  } break;
212  case DATA_SC_CURRENT: {
213  double faultCurrent[3] = {std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
214  std::abs(data.faultCurrent[2])};
215  switch(m_unit) {
216  case UNIT_PU: {
217  wxString str =
218  "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
219  str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
220  str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
221  SetText(str);
222  } break;
223  case UNIT_A: {
224  wxString str = "Ia = " +
225  wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
226  " A";
227  str += "\nIb = " +
228  wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
229  str += "\nIc = " +
230  wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
231  SetText(str);
232  } break;
233  case UNIT_kA: {
234  wxString str =
235  "Ia = " +
236  wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
237  str += "\nIb = " +
238  wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
239  " kA";
240  str += "\nIc = " +
241  wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
242  " kA";
243  SetText(str);
244  } break;
245  default:
246  break;
247  }
248  } break;
249  case DATA_SC_VOLTAGE: {
250  double faultVoltage[3] = {std::abs(data.faultVoltage[0]), std::abs(data.faultVoltage[1]),
251  std::abs(data.faultVoltage[2])};
252  switch(m_unit) {
253  case UNIT_PU: {
254  wxString str =
255  "Va = " + wxString::FromDouble(faultVoltage[0], m_decimalPlaces) + " p.u.";
256  str += "\nVb = " + wxString::FromDouble(faultVoltage[1], m_decimalPlaces) + " p.u.";
257  str += "\nVc = " + wxString::FromDouble(faultVoltage[2], m_decimalPlaces) + " p.u.";
258  SetText(str);
259  } break;
260  case UNIT_V: {
261  wxString str = "Va = " +
262  wxString::FromDouble(faultVoltage[0] * baseVoltage, m_decimalPlaces) +
263  " V";
264  str += "\nVb = " +
265  wxString::FromDouble(faultVoltage[1] * baseVoltage, m_decimalPlaces) + " V";
266  str += "\nVc = " +
267  wxString::FromDouble(faultVoltage[2] * baseVoltage, m_decimalPlaces) + " V";
268  SetText(str);
269  } break;
270  case UNIT_kV: {
271  wxString str =
272  "Va = " +
273  wxString::FromDouble(faultVoltage[0] * baseVoltage / 1e3, m_decimalPlaces) + " kV";
274  str += "\nVb = " +
275  wxString::FromDouble(faultVoltage[1] * baseVoltage / 1e3, m_decimalPlaces) +
276  " kV";
277  str += "\nVc = " +
278  wxString::FromDouble(faultVoltage[2] * baseVoltage / 1e3, m_decimalPlaces) +
279  " kV";
280  SetText(str);
281  } break;
282  default:
283  break;
284  }
285  } break;
286  case DATA_SC_POWER: {
287  switch(m_unit) {
288  case UNIT_PU: {
289  SetText(wxString::FromDouble(data.scPower, m_decimalPlaces) + " p.u.");
290  } break;
291  case UNIT_VA: {
292  SetText(wxString::FromDouble(data.scPower * systemPowerBase, m_decimalPlaces) + " VA");
293  } break;
294  case UNIT_kVA: {
295  SetText(wxString::FromDouble(data.scPower * systemPowerBase / 1e3, m_decimalPlaces) +
296  " kVA");
297  } break;
298  case UNIT_MVA: {
299  SetText(wxString::FromDouble(data.scPower * systemPowerBase / 1e6, m_decimalPlaces) +
300  " MVA");
301  } break;
302  default:
303  break;
304  }
305  } break;
306  default:
307  break;
308  }
309  }
310  } break;
311  case TYPE_SYNC_GENERATOR: {
312  SyncGenerator* syncGenerator = static_cast<SyncGenerator*>(m_element);
313  if(syncGenerator) {
314  SyncGeneratorElectricalData data = syncGenerator->GetPUElectricalData(systemPowerBase);
315  double baseVoltage = syncGenerator->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
316  double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
317  switch(m_dataType) {
318  case DATA_NAME: {
319  SetText(data.name);
320  } break;
321  case DATA_ACTIVE_POWER: {
322  double activePower = data.activePower;
323  if(!syncGenerator->IsOnline()) activePower = 0.0;
324  switch(m_unit) {
325  case UNIT_PU: {
326  SetText(wxString::FromDouble(activePower, m_decimalPlaces) + " p.u.");
327  } break;
328  case UNIT_W: {
329  SetText(wxString::FromDouble(activePower * systemPowerBase, m_decimalPlaces) + " W");
330  } break;
331  case UNIT_kW: {
332  SetText(wxString::FromDouble(activePower * systemPowerBase / 1e3, m_decimalPlaces) +
333  " kW");
334  } break;
335  case UNIT_MW: {
336  SetText(wxString::FromDouble(activePower * systemPowerBase / 1e6, m_decimalPlaces) +
337  " MW");
338  } break;
339  default:
340  break;
341  }
342  } break;
343  case DATA_REACTIVE_POWER: {
344  double reactivePower = data.reactivePower;
345  if(!syncGenerator->IsOnline()) reactivePower = 0.0;
346  switch(m_unit) {
347  case UNIT_PU: {
348  SetText(wxString::FromDouble(reactivePower, m_decimalPlaces) + " p.u.");
349  } break;
350  case UNIT_VAr: {
351  SetText(wxString::FromDouble(reactivePower * systemPowerBase, m_decimalPlaces) +
352  " VAr");
353  } break;
354  case UNIT_kVAr: {
355  SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e3, m_decimalPlaces) +
356  " kVAr");
357  } break;
358  case UNIT_MVAr: {
359  SetText(wxString::FromDouble(reactivePower * systemPowerBase / 1e6, m_decimalPlaces) +
360  " MVAr");
361  } break;
362  default:
363  break;
364  }
365  } break;
366  case DATA_SC_CURRENT: {
367  double faultCurrent[3] = {std::abs(data.faultCurrent[0]), std::abs(data.faultCurrent[1]),
368  std::abs(data.faultCurrent[2])};
369  switch(m_unit) {
370  case UNIT_PU: {
371  wxString str =
372  "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
373  str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
374  str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
375  SetText(str);
376  } break;
377  case UNIT_A: {
378  wxString str = "Ia = " +
379  wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
380  " A";
381  str += "\nIb = " +
382  wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
383  str += "\nIc = " +
384  wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
385  SetText(str);
386  } break;
387  case UNIT_kA: {
388  wxString str =
389  "Ia = " +
390  wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
391  str += "\nIb = " +
392  wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
393  " kA";
394  str += "\nIc = " +
395  wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
396  " kA";
397  SetText(str);
398  } break;
399  default:
400  break;
401  }
402  } break;
403  default:
404  break;
405  }
406  }
407  } break;
408  case TYPE_LINE: {
409  Line* line = static_cast<Line*>(m_element);
410  if(line) {
411  LineElectricalData data = line->GetElectricalData();
412  double baseVoltage = data.nominalVoltage;
413  if(data.nominalVoltageUnit == UNIT_kV) baseVoltage *= 1e3;
414  double baseCurrent = systemPowerBase / (std::sqrt(3.0) * baseVoltage);
415  switch(m_dataType) {
416  case DATA_NAME: {
417  SetText(data.name);
418  } break;
419  case DATA_PF_ACTIVE: {
420  double activePF = std::real(data.powerFlow[m_direction]);
421  if(!line->IsOnline()) activePF = 0.0;
422  switch(m_unit) {
423  case UNIT_PU: {
424  SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
425  } break;
426  case UNIT_W: {
427  SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
428  } break;
429  case UNIT_kW: {
430  SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
431  " kW");
432  } break;
433  case UNIT_MW: {
434  SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
435  " MW");
436  } break;
437  default:
438  break;
439  }
440  } break;
441  case DATA_PF_REACTIVE: {
442  double reactivePF = std::imag(data.powerFlow[m_direction]);
443  if(!line->IsOnline()) reactivePF = 0.0;
444  switch(m_unit) {
445  case UNIT_PU: {
446  SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
447  } break;
448  case UNIT_VAr: {
449  SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " VAr");
450  } break;
451  case UNIT_kVAr: {
452  SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
453  " kVAr");
454  } break;
455  case UNIT_MVAr: {
456  SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
457  " MVAr");
458  } break;
459  default:
460  break;
461  }
462  } break;
463  case DATA_PF_LOSSES: {
464  double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
465  if(!line->IsOnline()) losses = 0.0;
466  switch(m_unit) {
467  case UNIT_PU: {
468  SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
469  } break;
470  case UNIT_W: {
471  SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
472  } break;
473  case UNIT_kW: {
474  SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
475  } break;
476  case UNIT_MW: {
477  SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
478  } break;
479  default:
480  break;
481  }
482  } break;
483  case DATA_PF_CURRENT: {
484  double current = std::abs(data.current[m_direction]);
485  if(!line->IsOnline()) current = 0.0;
486  switch(m_unit) {
487  case UNIT_PU: {
488  SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
489  } break;
490  case UNIT_A: {
491  SetText(wxString::FromDouble(current * baseCurrent, m_decimalPlaces) + " A");
492  } break;
493  case UNIT_kA: {
494  SetText(wxString::FromDouble(current * baseCurrent / 1e3, m_decimalPlaces) + " kA");
495  } break;
496  default:
497  break;
498  }
499  } break;
500  case DATA_SC_CURRENT: {
501  double faultCurrent[3] = {std::abs(data.faultCurrent[m_direction][0]),
502  std::abs(data.faultCurrent[m_direction][1]),
503  std::abs(data.faultCurrent[m_direction][2])};
504  if(!line->IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
505  switch(m_unit) {
506  case UNIT_PU: {
507  wxString str =
508  "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
509  str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
510  str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
511  SetText(str);
512  } break;
513  case UNIT_A: {
514  wxString str = "Ia = " +
515  wxString::FromDouble(faultCurrent[0] * baseCurrent, m_decimalPlaces) +
516  " A";
517  str += "\nIb = " +
518  wxString::FromDouble(faultCurrent[1] * baseCurrent, m_decimalPlaces) + " A";
519  str += "\nIc = " +
520  wxString::FromDouble(faultCurrent[2] * baseCurrent, m_decimalPlaces) + " A";
521  SetText(str);
522  } break;
523  case UNIT_kA: {
524  wxString str =
525  "Ia = " +
526  wxString::FromDouble(faultCurrent[0] * baseCurrent / 1e3, m_decimalPlaces) + " kA";
527  str += "\nIb = " +
528  wxString::FromDouble(faultCurrent[1] * baseCurrent / 1e3, m_decimalPlaces) +
529  " kA";
530  str += "\nIc = " +
531  wxString::FromDouble(faultCurrent[2] * baseCurrent / 1e3, m_decimalPlaces) +
532  " kA";
533  SetText(str);
534  } break;
535  default:
536  break;
537  }
538  } break;
539  default:
540  break;
541  }
542  }
543  } break;
544  case TYPE_TRANSFORMER: {
545  Transformer* transformer = static_cast<Transformer*>(m_element);
546  if(transformer) {
547  TransformerElectricalData data = transformer->GetElectricalData();
548  double baseVoltage[2] = {data.primaryNominalVoltage, data.secondaryNominalVoltage};
549 
550  if(data.primaryNominalVoltageUnit == UNIT_kV) baseVoltage[0] *= 1e3;
551  if(data.secondaryNominalVoltageUnit == UNIT_kV) baseVoltage[1] *= 1e3;
552 
553  double baseCurrent[2] = {systemPowerBase / (std::sqrt(3.0) * baseVoltage[0]),
554  systemPowerBase / (std::sqrt(3.0) * baseVoltage[1])};
555  switch(m_dataType) {
556  case DATA_NAME: {
557  SetText(data.name);
558  } break;
559  case DATA_PF_ACTIVE: {
560  double activePF = std::real(data.powerFlow[m_direction]);
561  if(!transformer->IsOnline()) activePF = 0.0;
562  switch(m_unit) {
563  case UNIT_PU: {
564  SetText(wxString::FromDouble(activePF, m_decimalPlaces) + " p.u.");
565  } break;
566  case UNIT_W: {
567  SetText(wxString::FromDouble(activePF * systemPowerBase, m_decimalPlaces) + " W");
568  } break;
569  case UNIT_kW: {
570  SetText(wxString::FromDouble(activePF * systemPowerBase / 1e3, m_decimalPlaces) +
571  " kW");
572  } break;
573  case UNIT_MW: {
574  SetText(wxString::FromDouble(activePF * systemPowerBase / 1e6, m_decimalPlaces) +
575  " MW");
576  } break;
577  default:
578  break;
579  }
580  } break;
581  case DATA_PF_REACTIVE: {
582  double reactivePF = std::imag(data.powerFlow[m_direction]);
583  if(!transformer->IsOnline()) reactivePF = 0.0;
584  switch(m_unit) {
585  case UNIT_PU: {
586  SetText(wxString::FromDouble(reactivePF, m_decimalPlaces) + " p.u.");
587  } break;
588  case UNIT_VAr: {
589  SetText(wxString::FromDouble(reactivePF * systemPowerBase, m_decimalPlaces) + " VAr");
590  } break;
591  case UNIT_kVAr: {
592  SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e3, m_decimalPlaces) +
593  " kVAr");
594  } break;
595  case UNIT_MVAr: {
596  SetText(wxString::FromDouble(reactivePF * systemPowerBase / 1e6, m_decimalPlaces) +
597  " MVAr");
598  } break;
599  default:
600  break;
601  }
602  } break;
603  case DATA_PF_LOSSES: {
604  double losses = std::abs(std::real(data.powerFlow[0]) + std::real(data.powerFlow[1]));
605  if(!transformer->IsOnline()) losses = 0.0;
606  switch(m_unit) {
607  case UNIT_PU: {
608  SetText(wxString::FromDouble(losses, m_decimalPlaces) + " p.u.");
609  } break;
610  case UNIT_W: {
611  SetText(wxString::FromDouble(losses * systemPowerBase, m_decimalPlaces) + " W");
612  } break;
613  case UNIT_kW: {
614  SetText(wxString::FromDouble(losses * systemPowerBase / 1e3, m_decimalPlaces) + " kW");
615  } break;
616  case UNIT_MW: {
617  SetText(wxString::FromDouble(losses * systemPowerBase / 1e6, m_decimalPlaces) + " MW");
618  } break;
619  default:
620  break;
621  }
622  } break;
623  case DATA_PF_CURRENT: {
624  double current = std::abs(data.current[m_direction]);
625  if(!transformer->IsOnline()) current = 0.0;
626  switch(m_unit) {
627  case UNIT_PU: {
628  SetText(wxString::FromDouble(current, m_decimalPlaces) + " p.u.");
629  } break;
630  case UNIT_A: {
631  SetText(wxString::FromDouble(current * baseCurrent[m_direction], m_decimalPlaces) +
632  " A");
633  } break;
634  case UNIT_kA: {
635  SetText(
636  wxString::FromDouble(current * baseCurrent[m_direction] / 1e3, m_decimalPlaces) +
637  " kA");
638  } break;
639  default:
640  break;
641  }
642  } break;
643  case DATA_SC_CURRENT: {
644  double faultCurrent[3] = {std::abs(data.faultCurrent[m_direction][0]),
645  std::abs(data.faultCurrent[m_direction][1]),
646  std::abs(data.faultCurrent[m_direction][2])};
647  if(!transformer->IsOnline()) faultCurrent[0] = faultCurrent[1] = faultCurrent[2] = 0.0;
648  switch(m_unit) {
649  case UNIT_PU: {
650  wxString str =
651  "Ia = " + wxString::FromDouble(faultCurrent[0], m_decimalPlaces) + " p.u.";
652  str += "\nIb = " + wxString::FromDouble(faultCurrent[1], m_decimalPlaces) + " p.u.";
653  str += "\nIc = " + wxString::FromDouble(faultCurrent[2], m_decimalPlaces) + " p.u.";
654  SetText(str);
655  } break;
656  case UNIT_A: {
657  wxString str =
658  "Ia = " +
659  wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction], m_decimalPlaces) +
660  " A";
661  str += "\nIb = " + wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction],
662  m_decimalPlaces) +
663  " A";
664  str += "\nIc = " + wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction],
665  m_decimalPlaces) +
666  " A";
667  SetText(str);
668  } break;
669  case UNIT_kA: {
670  wxString str = "Ia = " +
671  wxString::FromDouble(faultCurrent[0] * baseCurrent[m_direction] / 1e3,
672  m_decimalPlaces) +
673  " kA";
674  str += "\nIb = " +
675  wxString::FromDouble(faultCurrent[1] * baseCurrent[m_direction] / 1e3,
676  m_decimalPlaces) +
677  " kA";
678  str += "\nIc = " +
679  wxString::FromDouble(faultCurrent[2] * baseCurrent[m_direction] / 1e3,
680  m_decimalPlaces) +
681  " kA";
682  SetText(str);
683  } break;
684  default:
685  break;
686  }
687  } break;
688  default:
689  break;
690  }
691  }
692  } break;
693  case TYPE_LOAD: {
694  Load* load = static_cast<Load*>(m_element);
695  if(load) {
696  LoadElectricalData data = load->GetPUElectricalData(systemPowerBase);
697  std::complex<double> sPower(data.activePower, data.reactivePower);
698  if(data.loadType == CONST_IMPEDANCE && load->IsOnline()) {
699  std::complex<double> v = static_cast<Bus*>(load->GetParentList()[0])->GetElectricalData().voltage;
700  sPower = std::pow(std::abs(v), 2) * sPower;
701  }
702  if(!load->IsOnline()) sPower = std::complex<double>(0.0, 0.0);
703  switch(m_dataType) {
704  case DATA_NAME: {
705  SetText(data.name);
706  } break;
707  case DATA_ACTIVE_POWER: {
708  switch(m_unit) {
709  case UNIT_PU: {
710  SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
711  }
712  case UNIT_W: {
713  SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
714  }
715  case UNIT_kW: {
716  SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
717  " kW");
718  }
719  case UNIT_MW: {
720  SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
721  " MW");
722  }
723  default:
724  break;
725  }
726  } break;
727  case DATA_REACTIVE_POWER: {
728  switch(m_unit) {
729  case UNIT_PU: {
730  SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
731  }
732  case UNIT_VAr: {
733  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
734  " VAr");
735  }
736  case UNIT_kVAr: {
737  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
738  " kVAr");
739  }
740  case UNIT_MVAr: {
741  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
742  " MVAr");
743  }
744  default:
745  break;
746  }
747  } break;
748  default:
749  break;
750  }
751  }
752  } break;
753  case TYPE_SYNC_MOTOR: {
754  SyncMotor* syncMotor = static_cast<SyncMotor*>(m_element);
755  if(syncMotor) {
756  SyncMotorElectricalData data = syncMotor->GetPUElectricalData(systemPowerBase);
757  std::complex<double> sPower(data.activePower, data.reactivePower);
758  if(!syncMotor->IsOnline()) sPower = std::complex<double>(0.0, 0.0);
759  switch(m_dataType) {
760  case DATA_NAME: {
761  SetText(data.name);
762  } break;
763  case DATA_ACTIVE_POWER: {
764  switch(m_unit) {
765  case UNIT_PU: {
766  SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
767  }
768  case UNIT_W: {
769  SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
770  }
771  case UNIT_kW: {
772  SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
773  " kW");
774  }
775  case UNIT_MW: {
776  SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
777  " MW");
778  }
779  default:
780  break;
781  }
782  } break;
783  case DATA_REACTIVE_POWER: {
784  switch(m_unit) {
785  case UNIT_PU: {
786  SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
787  }
788  case UNIT_VAr: {
789  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
790  " VAr");
791  }
792  case UNIT_kVAr: {
793  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
794  " kVAr");
795  }
796  case UNIT_MVAr: {
797  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
798  " MVAr");
799  }
800  default:
801  break;
802  }
803  } break;
804  default:
805  break;
806  }
807  }
808  } break;
809  case TYPE_IND_MOTOR: {
810  IndMotor* indMotor = static_cast<IndMotor*>(m_element);
811  if(indMotor) {
812  IndMotorElectricalData data = indMotor->GetPUElectricalData(systemPowerBase);
813  std::complex<double> sPower(data.activePower, data.reactivePower);
814  if(!indMotor->IsOnline()) sPower = std::complex<double>(0.0, 0.0);
815  switch(m_dataType) {
816  case DATA_NAME: {
817  SetText(data.name);
818  } break;
819  case DATA_ACTIVE_POWER: {
820  switch(m_unit) {
821  case UNIT_PU: {
822  SetText(wxString::FromDouble(sPower.real(), m_decimalPlaces) + " p.u.");
823  }
824  case UNIT_W: {
825  SetText(wxString::FromDouble(sPower.real() * systemPowerBase, m_decimalPlaces) + " W");
826  }
827  case UNIT_kW: {
828  SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e3, m_decimalPlaces) +
829  " kW");
830  }
831  case UNIT_MW: {
832  SetText(wxString::FromDouble(sPower.real() * systemPowerBase / 1e6, m_decimalPlaces) +
833  " MW");
834  }
835  default:
836  break;
837  }
838  } break;
839  case DATA_REACTIVE_POWER: {
840  switch(m_unit) {
841  case UNIT_PU: {
842  SetText(wxString::FromDouble(sPower.imag(), m_decimalPlaces) + " p.u.");
843  }
844  case UNIT_VAr: {
845  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase, m_decimalPlaces) +
846  " VAr");
847  }
848  case UNIT_kVAr: {
849  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e3, m_decimalPlaces) +
850  " kVAr");
851  }
852  case UNIT_MVAr: {
853  SetText(wxString::FromDouble(sPower.imag() * systemPowerBase / 1e6, m_decimalPlaces) +
854  " MVAr");
855  }
856  default:
857  break;
858  }
859  } break;
860  default:
861  break;
862  }
863  }
864  } break;
865  case TYPE_CAPACITOR: {
866  Capacitor* capacitor = static_cast<Capacitor*>(m_element);
867  if(capacitor) {
868  CapacitorElectricalData data = capacitor->GetPUElectricalData(systemPowerBase);
869  double reativePower = data.reactivePower;
870  if(!capacitor->IsOnline())
871  reativePower = 0.0;
872  else {
873  std::complex<double> v =
874  static_cast<Bus*>(capacitor->GetParentList()[0])->GetElectricalData().voltage;
875  reativePower *= std::pow(std::abs(v), 2);
876  }
877  switch(m_dataType) {
878  case DATA_NAME: {
879  SetText(data.name);
880  } break;
881  case DATA_REACTIVE_POWER: {
882  switch(m_unit) {
883  case UNIT_PU: {
884  SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
885  }
886  case UNIT_VAr: {
887  SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " VAr");
888  }
889  case UNIT_kVAr: {
890  SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
891  " kVAr");
892  }
893  case UNIT_MVAr: {
894  SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
895  " MVAr");
896  }
897  default:
898  break;
899  }
900  } break;
901  default:
902  break;
903  }
904  }
905  } break;
906  case TYPE_INDUCTOR: {
907  Inductor* inductor = static_cast<Inductor*>(m_element);
908  if(inductor) {
909  InductorElectricalData data = inductor->GetPUElectricalData(systemPowerBase);
910  double reativePower = data.reactivePower;
911  if(!inductor->IsOnline())
912  reativePower = 0.0;
913  else {
914  std::complex<double> v =
915  static_cast<Bus*>(inductor->GetParentList()[0])->GetElectricalData().voltage;
916  reativePower *= std::pow(std::abs(v), 2);
917  }
918  switch(m_dataType) {
919  case DATA_NAME: {
920  SetText(data.name);
921  } break;
922  case DATA_REACTIVE_POWER: {
923  switch(m_unit) {
924  case UNIT_PU: {
925  SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
926  }
927  case UNIT_VAr: {
928  SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " VAr");
929  }
930  case UNIT_kVAr: {
931  SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
932  " kVAr");
933  }
934  case UNIT_MVAr: {
935  SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e6, m_decimalPlaces) +
936  " MVAr");
937  }
938  default:
939  break;
940  }
941  } break;
942  default:
943  break;
944  }
945  }
946  } break;
947  }
948 }
949 
951 {
952  Text* copy = new Text();
953  *copy = *this;
954  // The pointers to wxGLString must be different or can cause crashes.
955  copy->m_glString = NULL;
956  copy->m_glStringArray = NULL;
957  copy->SetText(copy->m_text);
958  return copy;
959 }
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Text.cpp:30
+
Definition: Text.h:48
+ + + + + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Text.cpp:145
+ +
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+ +
Base class of electric calculations, with general methods.
+ + + + +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Text.cpp:75
+ +
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+ +
virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode=GL_QUADS) const
Draw rectangle.
Definition: Element.cpp:53
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Text.cpp:950
+ +
Definition: Bus.h:45
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+ + +
void SetPosition(const wxPoint2DDouble position)
Set the element position and update the rectangle.
Definition: Element.cpp:10
+ + +
Definition: Line.h:35
+
Definition: Load.h:23
+ + + + + + + + + + + + +
virtual bool RotatedRectanglesIntersects(wxRect2DDouble rect1, wxRect2DDouble rect2, double angle1, double angle2) const
Check if two roteted rectangles intersect.
Definition: Element.cpp:132
+ + + + + + +
+
+ + + + diff --git a/docs/doxygen/html/_text_8h_source.html b/docs/doxygen/html/_text_8h_source.html index 33acea4..2a6afbe 100644 --- a/docs/doxygen/html/_text_8h_source.html +++ b/docs/doxygen/html/_text_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Text.h Source File +Project/Text.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Text.h
-
1 #ifndef TEXT_H
2 #define TEXT_H
3 
4 #include "GraphicalElement.h"
5 #include "PowerElement.h"
6 #include "wxGLString.h"
7 
8 class TextForm;
9 
10 class Bus;
11 class Line;
12 class Transformer;
13 class SyncGenerator;
14 class IndMotor;
15 class SyncMotor;
16 class Load;
17 class Inductor;
18 class Capacitor;
19 
20 enum ElementType {
21  TYPE_NONE = 0,
22  TYPE_BUS,
23  TYPE_CAPACITOR,
24  TYPE_IND_MOTOR,
25  TYPE_INDUCTOR,
26  TYPE_LINE,
27  TYPE_LOAD,
28  TYPE_SYNC_GENERATOR,
29  TYPE_SYNC_MOTOR,
30  TYPE_TRANSFORMER
31 };
32 
33 enum DataType {
34  DATA_NAME,
35  DATA_VOLTAGE,
36  DATA_ANGLE,
37  DATA_SC_CURRENT,
38  DATA_SC_VOLTAGE,
39  DATA_SC_POWER,
40  DATA_ACTIVE_POWER,
41  DATA_REACTIVE_POWER,
42  DATA_PF_ACTIVE,
43  DATA_PF_REACTIVE,
44  DATA_PF_LOSSES,
45  DATA_PF_CURRENT
46 };
47 
48 class Text : public GraphicalElement
49 {
50 public:
51  Text();
52  Text(wxPoint2DDouble position);
53  ~Text();
54 
55  virtual Element* GetCopy();
56  virtual bool AddParent(Element* parent, wxPoint2DDouble position) { return true; };
57  virtual bool Contains(wxPoint2DDouble position) const;
58  virtual void Draw(wxPoint2DDouble translation, double scale);
59  virtual bool Intersects(wxRect2DDouble rect) const;
60  virtual void Rotate(bool clockwise = true);
61  virtual bool ShowForm(wxWindow* parent, std::vector<Element*> elementList);
62  virtual void UpdateText(double systemPowerBase);
63  virtual wxString GetText() const { return m_text; }
64  virtual void SetText(wxString text);
65 
66  void SetDataType(const DataType& dataType) { m_dataType = dataType; }
67  void SetDirection(int direction) { m_direction = direction; }
68  void SetElement(Element* element) { m_element = element; }
69  void SetElementNumber(int elementNumber) { m_elementNumber = elementNumber; }
70  void SetElementType(const ElementType elementType) { m_elementType = elementType; }
71  void SetFontSize(int fontSize) { m_fontSize = fontSize; }
72  void SetUnit(const ElectricalUnit unit) { m_unit = unit; }
73  void SetDecimalPlaces(int decimalPlaces) { m_decimalPlaces = decimalPlaces; }
74  const DataType GetDataType() const { return m_dataType; }
75  int GetDirection() const { return m_direction; }
76  Element* GetElement() { return m_element; }
77  int GetElementNumber() const { return m_elementNumber; }
78  const ElementType GetElementType() const { return m_elementType; }
79  int GetFontSize() const { return m_fontSize; }
80  const ElectricalUnit GetUnit() const { return m_unit; }
81  int GetDecimalPlaces() const { return m_decimalPlaces; }
82 
83 protected:
84  wxGLString* m_glString = NULL;
85  wxGLStringArray* m_glStringArray = NULL;
86 
87  wxString m_text = _("Text");
88  int m_numberOfLines;
89  bool m_isMultlineText = false;
90  int m_fontSize = 10;
91 
92  Element* m_element = NULL;
93  ElementType m_elementType = TYPE_NONE;
94  int m_elementNumber;
95  DataType m_dataType;
96  ElectricalUnit m_unit;
97  int m_direction = 0;
98  int m_decimalPlaces = 2;
99 };
100 
101 #endif // TEXT_H
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Text.cpp:30
-
Definition: Text.h:48
-
Definition: GraphicalElement.h:6
-
Definition: Element.h:88
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Text.cpp:145
-
Definition: SyncGenerator.h:110
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Text.cpp:75
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
virtual Element * GetCopy()
Get a the element copy.
Definition: Text.cpp:950
-
Definition: Bus.h:45
-
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Text.h:56
-
Definition: TextForm.h:8
-
Definition: Line.h:35
-
Definition: Load.h:23
+
1 #ifndef TEXT_H
2 #define TEXT_H
3 
4 #include "GraphicalElement.h"
5 #include "PowerElement.h"
6 #include "wxGLString.h"
7 
8 class TextForm;
9 
10 class Bus;
11 class Line;
12 class Transformer;
13 class SyncGenerator;
14 class IndMotor;
15 class SyncMotor;
16 class Load;
17 class Inductor;
18 class Capacitor;
19 
20 enum ElementType {
21  TYPE_NONE = 0,
22  TYPE_BUS,
23  TYPE_CAPACITOR,
24  TYPE_IND_MOTOR,
25  TYPE_INDUCTOR,
26  TYPE_LINE,
27  TYPE_LOAD,
28  TYPE_SYNC_GENERATOR,
29  TYPE_SYNC_MOTOR,
30  TYPE_TRANSFORMER
31 };
32 
33 enum DataType {
34  DATA_NAME,
35  DATA_VOLTAGE,
36  DATA_ANGLE,
37  DATA_SC_CURRENT,
38  DATA_SC_VOLTAGE,
39  DATA_SC_POWER,
40  DATA_ACTIVE_POWER,
41  DATA_REACTIVE_POWER,
42  DATA_PF_ACTIVE,
43  DATA_PF_REACTIVE,
44  DATA_PF_LOSSES,
45  DATA_PF_CURRENT
46 };
47 
48 class Text : public GraphicalElement
49 {
50 public:
51  Text();
52  Text(wxPoint2DDouble position);
53  ~Text();
54 
55  virtual Element* GetCopy();
56  virtual bool AddParent(Element* parent, wxPoint2DDouble position) { return true; };
57  virtual bool Contains(wxPoint2DDouble position) const;
58  virtual void Draw(wxPoint2DDouble translation, double scale);
59  virtual bool Intersects(wxRect2DDouble rect) const;
60  virtual void Rotate(bool clockwise = true);
61  virtual bool ShowForm(wxWindow* parent, std::vector<Element*> elementList);
62  virtual void UpdateText(double systemPowerBase);
63  virtual wxString GetText() const { return m_text; }
64  virtual void SetText(wxString text);
65 
66  void SetDataType(const DataType& dataType) { m_dataType = dataType; }
67  void SetDirection(int direction) { m_direction = direction; }
68  void SetElement(Element* element) { m_element = element; }
69  void SetElementNumber(int elementNumber) { m_elementNumber = elementNumber; }
70  void SetElementType(const ElementType elementType) { m_elementType = elementType; }
71  void SetFontSize(int fontSize) { m_fontSize = fontSize; }
72  void SetUnit(const ElectricalUnit unit) { m_unit = unit; }
73  void SetDecimalPlaces(int decimalPlaces) { m_decimalPlaces = decimalPlaces; }
74  const DataType GetDataType() const { return m_dataType; }
75  int GetDirection() const { return m_direction; }
76  Element* GetElement() { return m_element; }
77  int GetElementNumber() const { return m_elementNumber; }
78  const ElementType GetElementType() const { return m_elementType; }
79  int GetFontSize() const { return m_fontSize; }
80  const ElectricalUnit GetUnit() const { return m_unit; }
81  int GetDecimalPlaces() const { return m_decimalPlaces; }
82 
83 protected:
84  wxGLString* m_glString = NULL;
85  wxGLStringArray* m_glStringArray = NULL;
86 
87  wxString m_text = _("Text");
88  int m_numberOfLines;
89  bool m_isMultlineText = false;
90  int m_fontSize = 10;
91 
92  Element* m_element = NULL;
93  ElementType m_elementType = TYPE_NONE;
94  int m_elementNumber;
95  DataType m_dataType;
96  ElectricalUnit m_unit;
97  int m_direction = 0;
98  int m_decimalPlaces = 2;
99 };
100 
101 #endif // TEXT_H
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Text.cpp:30
+
Definition: Text.h:48
+ + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Text.cpp:145
+ +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Text.cpp:75
+
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Text.cpp:950
+
Definition: Bus.h:45
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Text.h:56
+ +
Definition: Line.h:35
+
Definition: Load.h:23
Switching data of power elements.
-
Definition: SyncMotor.h:110
-
Definition: IndMotor.h:17
-
Definition: Capacitor.h:14
-
Definition: Inductor.h:14
-
Definition: wxGLString.h:168
-
Definition: wxGLString.h:77
-
Definition: Transformer.h:54
+ + + + + + +
+
- + diff --git a/docs/doxygen/html/_text_form_8cpp_source.html b/docs/doxygen/html/_text_form_8cpp_source.html new file mode 100644 index 0000000..b99dfe4 --- /dev/null +++ b/docs/doxygen/html/_text_form_8cpp_source.html @@ -0,0 +1,122 @@ + + + + + + + +Project/TextForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TextForm.cpp
+
+
+
1 #include "TextForm.h"
2 
3 TextForm::TextForm(wxWindow* parent, Text* text, std::vector<Element*> elementList, double systemPowerBase)
4  : TextFormBase(parent)
5 {
6  SetSize(GetBestSize());
7  m_parent = parent;
8  m_textToEdit = text;
9  m_allElements.GetElementsFromList(elementList);
10  m_systemPowerBase = systemPowerBase;
11 
12  m_text = new Text();
13  m_text->SetElementType(text->GetElementType());
14  m_text->SetElementNumber(text->GetElementNumber());
15  m_text->SetElement(text->GetElement());
16  m_text->SetDataType(text->GetDataType());
17  m_text->SetDirection(text->GetDirection());
18  m_text->SetUnit(text->GetUnit());
19  m_text->SetDecimalPlaces(text->GetDecimalPlaces());
20 
21  if(!LoadChoices()) {
22  m_choiceName->Enable(false);
23  m_choiceTextType->Enable(false);
24  m_choiceTextFromBus->Enable(false);
25  m_choiceTextToBus->Enable(false);
26  m_choiceTextUnit->Enable(false);
27  }
28 }
29 
30 TextForm::~TextForm() {}
31 void TextForm::OnElementChoiceSelected(wxCommandEvent& event)
32 {
33  switch(m_choiceElement->GetSelection()) {
34  case 0: {
35  m_text->SetElementType(TYPE_BUS);
36  } break;
37  case 1: {
38  m_text->SetElementType(TYPE_SYNC_GENERATOR);
39  } break;
40  case 2: {
41  m_text->SetElementType(TYPE_LINE);
42  } break;
43  case 3: {
44  m_text->SetElementType(TYPE_TRANSFORMER);
45  } break;
46  case 4: {
47  m_text->SetElementType(TYPE_LOAD);
48  } break;
49  case 5: {
50  m_text->SetElementType(TYPE_CAPACITOR);
51  } break;
52  case 6: {
53  m_text->SetElementType(TYPE_INDUCTOR);
54  } break;
55  case 7: {
56  m_text->SetElementType(TYPE_SYNC_MOTOR);
57  } break;
58  case 8: {
59  m_text->SetElementType(TYPE_IND_MOTOR);
60  } break;
61 
62  default:
63  break;
64  }
65 
66  ElementTypeChoice();
67 }
68 
69 void TextForm::OnFromBusChoiceSelected(wxCommandEvent& event)
70 {
71  m_text->SetDirection(m_choiceTextFromBus->GetSelection());
72  m_choiceTextToBus->SetSelection(m_choiceTextFromBus->GetSelection());
73 }
74 
75 void TextForm::OnNameChoiceSelected(wxCommandEvent& event)
76 {
77  m_text->SetElementNumber(m_choiceName->GetSelection());
78  ElementNumberChoice();
79 }
80 
81 void TextForm::OnTextEnter(wxCommandEvent& event) { Preview(); }
82 void TextForm::OnToBusChoiceSelected(wxCommandEvent& event)
83 {
84  m_text->SetDirection(m_choiceTextToBus->GetSelection());
85  m_choiceTextFromBus->SetSelection(m_choiceTextToBus->GetSelection());
86 }
87 
88 void TextForm::OnUnitChoiceSelected(wxCommandEvent& event)
89 {
90  UnitChoice();
91  Preview();
92 }
93 
94 void TextForm::OnTypeChoiceSelected(wxCommandEvent& event)
95 {
96  switch(m_text->GetElementType()) {
97  case TYPE_BUS: {
98  switch(m_choiceTextType->GetSelection()) {
99  case 0: {
100  m_text->SetDataType(DATA_NAME);
101  } break;
102  case 1: {
103  m_text->SetDataType(DATA_VOLTAGE);
104  } break;
105  case 2: {
106  m_text->SetDataType(DATA_ANGLE);
107  } break;
108  case 3: {
109  m_text->SetDataType(DATA_SC_CURRENT);
110  } break;
111  case 4: {
112  m_text->SetDataType(DATA_SC_VOLTAGE);
113  } break;
114  case 5: {
115  m_text->SetDataType(DATA_SC_POWER);
116  } break;
117  }
118  } break;
119  case TYPE_SYNC_GENERATOR: {
120  switch(m_choiceTextType->GetSelection()) {
121  case 0: {
122  m_text->SetDataType(DATA_NAME);
123  } break;
124  case 1: {
125  m_text->SetDataType(DATA_ACTIVE_POWER);
126  } break;
127  case 2: {
128  m_text->SetDataType(DATA_REACTIVE_POWER);
129  } break;
130  case 3: {
131  m_text->SetDataType(DATA_SC_CURRENT);
132  } break;
133  }
134  } break;
135  case TYPE_LINE:
136  case TYPE_TRANSFORMER: {
137  switch(m_choiceTextType->GetSelection()) {
138  case 0: {
139  m_text->SetDataType(DATA_NAME);
140  } break;
141  case 1: {
142  m_text->SetDataType(DATA_PF_ACTIVE);
143  } break;
144  case 2: {
145  m_text->SetDataType(DATA_PF_REACTIVE);
146  } break;
147  case 3: {
148  m_text->SetDataType(DATA_PF_LOSSES);
149  } break;
150  case 4: {
151  m_text->SetDataType(DATA_PF_CURRENT);
152  } break;
153  case 5: {
154  m_text->SetDataType(DATA_SC_CURRENT);
155  } break;
156  }
157  } break;
158  case TYPE_LOAD:
159  case TYPE_SYNC_MOTOR:
160  case TYPE_IND_MOTOR: {
161  switch(m_choiceTextType->GetSelection()) {
162  case 0: {
163  m_text->SetDataType(DATA_NAME);
164  } break;
165  case 1: {
166  m_text->SetDataType(DATA_ACTIVE_POWER);
167  } break;
168  case 2: {
169  m_text->SetDataType(DATA_REACTIVE_POWER);
170  } break;
171  }
172  } break;
173  case TYPE_CAPACITOR:
174  case TYPE_INDUCTOR: {
175  switch(m_choiceTextType->GetSelection()) {
176  case 0: {
177  m_text->SetDataType(DATA_NAME);
178  } break;
179  case 1: {
180  m_text->SetDataType(DATA_REACTIVE_POWER);
181  } break;
182  }
183  } break;
184  default:
185  break;
186  }
187  DataTypeChoice();
188 
189  if(m_text->GetDataType() == DATA_NAME) Preview();
190 }
191 
192 bool TextForm::LoadChoices()
193 {
194  if(m_text->GetElementType() == TYPE_NONE) return false;
195 
196  // Fill the element possible choices.
197  ElementTypeChoice();
198  m_choiceName->SetSelection(m_text->GetElementNumber());
199  ElementNumberChoice();
200  DataTypeChoice();
201 
202  // Select the saved choices.
203  switch(m_text->GetElementType()) {
204  case TYPE_BUS: {
205  m_choiceElement->SetSelection(0);
206  switch(m_text->GetDataType()) {
207  case DATA_NAME: {
208  m_choiceTextType->SetSelection(0);
209  } break;
210  case DATA_VOLTAGE: {
211  m_choiceTextType->SetSelection(1);
212  switch(m_text->GetUnit()) {
213  case UNIT_PU: {
214  m_choiceTextUnit->SetSelection(0);
215  } break;
216  case UNIT_V: {
217  m_choiceTextUnit->SetSelection(1);
218  } break;
219  case UNIT_kV: {
220  m_choiceTextUnit->SetSelection(2);
221  } break;
222  default:
223  break;
224  }
225 
226  } break;
227  case DATA_ANGLE: {
228  m_choiceTextType->SetSelection(2);
229  switch(m_text->GetUnit()) {
230  case UNIT_DEGREE: {
231  m_choiceTextUnit->SetSelection(0);
232  } break;
233  case UNIT_RADIAN: {
234  m_choiceTextUnit->SetSelection(1);
235  } break;
236  default:
237  break;
238  }
239  } break;
240  case DATA_SC_CURRENT: {
241  m_choiceTextType->SetSelection(3);
242  switch(m_text->GetUnit()) {
243  case UNIT_PU: {
244  m_choiceTextUnit->SetSelection(0);
245  } break;
246  case UNIT_A: {
247  m_choiceTextUnit->SetSelection(1);
248  } break;
249  case UNIT_kA: {
250  m_choiceTextUnit->SetSelection(2);
251  } break;
252  default:
253  break;
254  }
255  } break;
256  case DATA_SC_VOLTAGE: {
257  m_choiceTextType->SetSelection(4);
258  switch(m_text->GetUnit()) {
259  case UNIT_PU: {
260  m_choiceTextUnit->SetSelection(0);
261  } break;
262  case UNIT_V: {
263  m_choiceTextUnit->SetSelection(1);
264  } break;
265  case UNIT_kV: {
266  m_choiceTextUnit->SetSelection(2);
267  } break;
268  default:
269  break;
270  }
271  } break;
272  case DATA_SC_POWER: {
273  m_choiceTextType->SetSelection(5);
274  switch(m_text->GetUnit()) {
275  case UNIT_PU: {
276  m_choiceTextUnit->SetSelection(0);
277  } break;
278  case UNIT_VA: {
279  m_choiceTextUnit->SetSelection(1);
280  } break;
281  case UNIT_kVA: {
282  m_choiceTextUnit->SetSelection(2);
283  } break;
284  case UNIT_MVA: {
285  m_choiceTextUnit->SetSelection(3);
286  } break;
287  default:
288  break;
289  }
290  } break;
291  default:
292  break;
293  }
294  } break;
295  case TYPE_SYNC_GENERATOR: {
296  m_choiceElement->SetSelection(1);
297  switch(m_text->GetDataType()) {
298  case DATA_NAME: {
299  m_choiceTextType->SetSelection(0);
300  } break;
301  case DATA_ACTIVE_POWER: {
302  m_choiceTextType->SetSelection(1);
303  switch(m_text->GetUnit()) {
304  case UNIT_PU: {
305  m_choiceTextUnit->SetSelection(0);
306  } break;
307  case UNIT_W: {
308  m_choiceTextUnit->SetSelection(1);
309  } break;
310  case UNIT_kW: {
311  m_choiceTextUnit->SetSelection(2);
312  } break;
313  case UNIT_MW: {
314  m_choiceTextUnit->SetSelection(3);
315  } break;
316  default:
317  break;
318  }
319  } break;
320  case DATA_REACTIVE_POWER: {
321  m_choiceTextType->SetSelection(2);
322  switch(m_text->GetUnit()) {
323  case UNIT_PU: {
324  m_choiceTextUnit->SetSelection(0);
325  } break;
326  case UNIT_VAr: {
327  m_choiceTextUnit->SetSelection(1);
328  } break;
329  case UNIT_kVAr: {
330  m_choiceTextUnit->SetSelection(2);
331  } break;
332  case UNIT_MVAr: {
333  m_choiceTextUnit->SetSelection(3);
334  } break;
335  default:
336  break;
337  }
338  } break;
339  case DATA_SC_CURRENT: {
340  m_choiceTextType->SetSelection(3);
341  switch(m_text->GetUnit()) {
342  case UNIT_PU: {
343  m_choiceTextUnit->SetSelection(0);
344  } break;
345  case UNIT_A: {
346  m_choiceTextUnit->SetSelection(1);
347  } break;
348  case UNIT_kA: {
349  m_choiceTextUnit->SetSelection(2);
350  } break;
351  default:
352  break;
353  }
354  } break;
355  default:
356  break;
357  }
358  } break;
359  case TYPE_LINE: {
360  m_choiceElement->SetSelection(2);
361  switch(m_text->GetDataType()) {
362  case DATA_NAME: {
363  m_choiceTextType->SetSelection(0);
364  } break;
365  case DATA_PF_ACTIVE: {
366  m_choiceTextType->SetSelection(1);
367  switch(m_text->GetUnit()) {
368  case UNIT_PU: {
369  m_choiceTextUnit->SetSelection(0);
370  } break;
371  case UNIT_W: {
372  m_choiceTextUnit->SetSelection(1);
373  } break;
374  case UNIT_kW: {
375  m_choiceTextUnit->SetSelection(2);
376  } break;
377  case UNIT_MW: {
378  m_choiceTextUnit->SetSelection(3);
379  } break;
380  default:
381  break;
382  }
383  } break;
384  case DATA_PF_REACTIVE: {
385  m_choiceTextType->SetSelection(2);
386  switch(m_text->GetUnit()) {
387  case UNIT_PU: {
388  m_choiceTextUnit->SetSelection(0);
389  } break;
390  case UNIT_VAr: {
391  m_choiceTextUnit->SetSelection(1);
392  } break;
393  case UNIT_kVAr: {
394  m_choiceTextUnit->SetSelection(2);
395  } break;
396  case UNIT_MVAr: {
397  m_choiceTextUnit->SetSelection(3);
398  } break;
399  default:
400  break;
401  }
402  } break;
403  case DATA_PF_LOSSES: {
404  m_choiceTextType->SetSelection(3);
405  switch(m_text->GetUnit()) {
406  case UNIT_PU: {
407  m_choiceTextUnit->SetSelection(0);
408  } break;
409  case UNIT_W: {
410  m_choiceTextUnit->SetSelection(1);
411  } break;
412  case UNIT_kW: {
413  m_choiceTextUnit->SetSelection(2);
414  } break;
415  case UNIT_MW: {
416  m_choiceTextUnit->SetSelection(3);
417  } break;
418  default:
419  break;
420  }
421  } break;
422  case DATA_PF_CURRENT: {
423  m_choiceTextType->SetSelection(4);
424  switch(m_text->GetUnit()) {
425  case UNIT_PU: {
426  m_choiceTextUnit->SetSelection(0);
427  } break;
428  case UNIT_A: {
429  m_choiceTextUnit->SetSelection(1);
430  } break;
431  case UNIT_kA: {
432  m_choiceTextUnit->SetSelection(2);
433  } break;
434  default:
435  break;
436  }
437  } break;
438  case DATA_SC_CURRENT: {
439  m_choiceTextType->SetSelection(5);
440  switch(m_text->GetUnit()) {
441  case UNIT_PU: {
442  m_choiceTextUnit->SetSelection(0);
443  } break;
444  case UNIT_A: {
445  m_choiceTextUnit->SetSelection(1);
446  } break;
447  case UNIT_kA: {
448  m_choiceTextUnit->SetSelection(2);
449  } break;
450  case UNIT_MW: {
451  m_choiceTextUnit->SetSelection(3);
452  } break;
453  default:
454  break;
455  }
456  } break;
457  default:
458  break;
459  }
460  } break;
461  case TYPE_TRANSFORMER: {
462  m_choiceElement->SetSelection(3);
463  switch(m_text->GetDataType()) {
464  case DATA_NAME: {
465  m_choiceTextType->SetSelection(0);
466  } break;
467  case DATA_PF_ACTIVE: {
468  m_choiceTextType->SetSelection(1);
469  switch(m_text->GetUnit()) {
470  case UNIT_PU: {
471  m_choiceTextUnit->SetSelection(0);
472  } break;
473  case UNIT_W: {
474  m_choiceTextUnit->SetSelection(1);
475  } break;
476  case UNIT_kW: {
477  m_choiceTextUnit->SetSelection(2);
478  } break;
479  case UNIT_MW: {
480  m_choiceTextUnit->SetSelection(3);
481  } break;
482  default:
483  break;
484  }
485  } break;
486  case DATA_PF_REACTIVE: {
487  m_choiceTextType->SetSelection(2);
488  switch(m_text->GetUnit()) {
489  case UNIT_PU: {
490  m_choiceTextUnit->SetSelection(0);
491  } break;
492  case UNIT_VAr: {
493  m_choiceTextUnit->SetSelection(1);
494  } break;
495  case UNIT_kVAr: {
496  m_choiceTextUnit->SetSelection(2);
497  } break;
498  case UNIT_MVAr: {
499  m_choiceTextUnit->SetSelection(3);
500  } break;
501  default:
502  break;
503  }
504  } break;
505  case DATA_PF_LOSSES: {
506  m_choiceTextType->SetSelection(3);
507  switch(m_text->GetUnit()) {
508  case UNIT_PU: {
509  m_choiceTextUnit->SetSelection(0);
510  } break;
511  case UNIT_W: {
512  m_choiceTextUnit->SetSelection(1);
513  } break;
514  case UNIT_kW: {
515  m_choiceTextUnit->SetSelection(2);
516  } break;
517  case UNIT_MW: {
518  m_choiceTextUnit->SetSelection(3);
519  } break;
520  default:
521  break;
522  }
523  } break;
524  case DATA_PF_CURRENT: {
525  m_choiceTextType->SetSelection(4);
526  switch(m_text->GetUnit()) {
527  case UNIT_PU: {
528  m_choiceTextUnit->SetSelection(0);
529  } break;
530  case UNIT_A: {
531  m_choiceTextUnit->SetSelection(1);
532  } break;
533  case UNIT_kA: {
534  m_choiceTextUnit->SetSelection(2);
535  } break;
536  default:
537  break;
538  }
539  } break;
540  case DATA_SC_CURRENT: {
541  m_choiceTextType->SetSelection(5);
542  switch(m_text->GetUnit()) {
543  case UNIT_PU: {
544  m_choiceTextUnit->SetSelection(0);
545  } break;
546  case UNIT_A: {
547  m_choiceTextUnit->SetSelection(1);
548  } break;
549  case UNIT_kA: {
550  m_choiceTextUnit->SetSelection(2);
551  } break;
552  default:
553  break;
554  }
555  } break;
556  default:
557  break;
558  }
559  } break;
560  case TYPE_LOAD: {
561  m_choiceElement->SetSelection(4);
562  switch(m_text->GetDataType()) {
563  case DATA_NAME: {
564  m_choiceTextType->SetSelection(0);
565  } break;
566  case DATA_ACTIVE_POWER: {
567  m_choiceTextType->SetSelection(1);
568  switch(m_text->GetUnit()) {
569  case UNIT_PU: {
570  m_choiceTextUnit->SetSelection(0);
571  } break;
572  case UNIT_W: {
573  m_choiceTextUnit->SetSelection(1);
574  } break;
575  case UNIT_kW: {
576  m_choiceTextUnit->SetSelection(2);
577  } break;
578  case UNIT_MW: {
579  m_choiceTextUnit->SetSelection(3);
580  } break;
581  default:
582  break;
583  }
584  } break;
585  case DATA_REACTIVE_POWER: {
586  m_choiceTextType->SetSelection(2);
587  switch(m_text->GetUnit()) {
588  case UNIT_PU: {
589  m_choiceTextUnit->SetSelection(0);
590  } break;
591  case UNIT_VAr: {
592  m_choiceTextUnit->SetSelection(1);
593  } break;
594  case UNIT_kVAr: {
595  m_choiceTextUnit->SetSelection(2);
596  } break;
597  case UNIT_MVAr: {
598  m_choiceTextUnit->SetSelection(3);
599  } break;
600  default:
601  break;
602  }
603  } break;
604  default:
605  break;
606  }
607  } break;
608  case TYPE_CAPACITOR: {
609  m_choiceElement->SetSelection(5);
610  switch(m_text->GetDataType()) {
611  case DATA_NAME: {
612  m_choiceTextType->SetSelection(0);
613  } break;
614  case DATA_REACTIVE_POWER: {
615  m_choiceTextType->SetSelection(1);
616 
617  } break;
618  default:
619  break;
620  }
621  } break;
622  case TYPE_INDUCTOR: {
623  m_choiceElement->SetSelection(6);
624  switch(m_text->GetDataType()) {
625  case DATA_NAME: {
626  m_choiceTextType->SetSelection(0);
627  } break;
628  case DATA_REACTIVE_POWER: {
629  m_choiceTextType->SetSelection(1);
630  switch(m_text->GetUnit()) {
631  case UNIT_PU: {
632  m_choiceTextUnit->SetSelection(0);
633  } break;
634  case UNIT_VAr: {
635  m_choiceTextUnit->SetSelection(1);
636  } break;
637  case UNIT_kVAr: {
638  m_choiceTextUnit->SetSelection(2);
639  } break;
640  case UNIT_MVAr: {
641  m_choiceTextUnit->SetSelection(3);
642  } break;
643  default:
644  break;
645  }
646  } break;
647  default:
648  break;
649  }
650  } break;
651  case TYPE_SYNC_MOTOR: {
652  m_choiceElement->SetSelection(7);
653  switch(m_text->GetDataType()) {
654  case DATA_NAME: {
655  m_choiceTextType->SetSelection(0);
656  } break;
657  case DATA_ACTIVE_POWER: {
658  m_choiceTextType->SetSelection(1);
659  switch(m_text->GetUnit()) {
660  case UNIT_PU: {
661  m_choiceTextUnit->SetSelection(0);
662  } break;
663  case UNIT_W: {
664  m_choiceTextUnit->SetSelection(1);
665  } break;
666  case UNIT_kW: {
667  m_choiceTextUnit->SetSelection(2);
668  } break;
669  case UNIT_MW: {
670  m_choiceTextUnit->SetSelection(3);
671  } break;
672  default:
673  break;
674  }
675  } break;
676  case DATA_REACTIVE_POWER: {
677  m_choiceTextType->SetSelection(2);
678  switch(m_text->GetUnit()) {
679  case UNIT_PU: {
680  m_choiceTextUnit->SetSelection(0);
681  } break;
682  case UNIT_VAr: {
683  m_choiceTextUnit->SetSelection(1);
684  } break;
685  case UNIT_kVAr: {
686  m_choiceTextUnit->SetSelection(2);
687  } break;
688  case UNIT_MVAr: {
689  m_choiceTextUnit->SetSelection(3);
690  } break;
691  default:
692  break;
693  }
694  } break;
695  default:
696  break;
697  }
698  } break;
699  case TYPE_IND_MOTOR: {
700  m_choiceElement->SetSelection(8);
701  switch(m_text->GetDataType()) {
702  case DATA_NAME: {
703  m_choiceTextType->SetSelection(0);
704  } break;
705  case DATA_ACTIVE_POWER: {
706  m_choiceTextType->SetSelection(1);
707  switch(m_text->GetUnit()) {
708  case UNIT_PU: {
709  m_choiceTextUnit->SetSelection(0);
710  } break;
711  case UNIT_W: {
712  m_choiceTextUnit->SetSelection(1);
713  } break;
714  case UNIT_kW: {
715  m_choiceTextUnit->SetSelection(2);
716  } break;
717  case UNIT_MW: {
718  m_choiceTextUnit->SetSelection(3);
719  } break;
720  default:
721  break;
722  }
723  } break;
724  case DATA_REACTIVE_POWER: {
725  m_choiceTextType->SetSelection(2);
726  switch(m_text->GetUnit()) {
727  case UNIT_PU: {
728  m_choiceTextUnit->SetSelection(0);
729  } break;
730  case UNIT_VAr: {
731  m_choiceTextUnit->SetSelection(1);
732  } break;
733  case UNIT_kVAr: {
734  m_choiceTextUnit->SetSelection(2);
735  } break;
736  case UNIT_MVAr: {
737  m_choiceTextUnit->SetSelection(3);
738  } break;
739  default:
740  break;
741  }
742  } break;
743  default:
744  break;
745  }
746  } break;
747  default:
748  break;
749  }
750 
751  if(m_choiceTextFromBus->IsEnabled()) m_choiceTextFromBus->SetSelection(m_text->GetDirection());
752  if(m_choiceTextToBus->IsEnabled()) m_choiceTextToBus->SetSelection(m_text->GetDirection());
753 
754  m_textCtrlDecimal->SetValue(wxString::Format("%d", m_text->GetDecimalPlaces()));
755  Preview();
756 
757  return true;
758 }
759 
760 void TextForm::ElementTypeChoice()
761 {
762  m_choiceTextType->Enable(false);
763  m_choiceTextFromBus->Enable(false);
764  m_choiceTextToBus->Enable(false);
765  m_choiceTextUnit->Enable(false);
766  m_choiceTextType->Clear();
767  m_choiceTextFromBus->Clear();
768  m_choiceTextToBus->Clear();
769  m_choiceTextUnit->Clear();
770 
771  m_choiceName->Clear();
772  wxArrayString arrayString;
773  switch(m_text->GetElementType()) {
774  case TYPE_BUS: {
775  for(int i = 0; i < (int)m_allElements.GetBusList().size(); i++) {
776  Bus* bus = m_allElements.GetBusList()[i];
777  arrayString.Add(bus->GetElectricalData().name);
778  }
779  } break;
780  case TYPE_SYNC_GENERATOR: {
781  for(int i = 0; i < (int)m_allElements.GetSyncGeneratorList().size(); i++) {
782  SyncGenerator* syncGenerator = m_allElements.GetSyncGeneratorList()[i];
783  arrayString.Add(syncGenerator->GetElectricalData().name);
784  }
785  } break;
786  case TYPE_LINE: {
787  for(int i = 0; i < (int)m_allElements.GetLineList().size(); i++) {
788  Line* line = m_allElements.GetLineList()[i];
789  arrayString.Add(line->GetElectricalData().name);
790  }
791  } break;
792  case TYPE_TRANSFORMER: {
793  for(int i = 0; i < (int)m_allElements.GetTransformerList().size(); i++) {
794  Transformer* transformer = m_allElements.GetTransformerList()[i];
795  arrayString.Add(transformer->GetElectricalData().name);
796  }
797  } break;
798  case TYPE_LOAD: {
799  for(int i = 0; i < (int)m_allElements.GetLoadList().size(); i++) {
800  Load* load = m_allElements.GetLoadList()[i];
801  arrayString.Add(load->GetElectricalData().name);
802  }
803  } break;
804  case TYPE_CAPACITOR: {
805  for(int i = 0; i < (int)m_allElements.GetCapacitorList().size(); i++) {
806  Capacitor* capacitor = m_allElements.GetCapacitorList()[i];
807  arrayString.Add(capacitor->GetElectricalData().name);
808  }
809  } break;
810  case TYPE_INDUCTOR: {
811  for(int i = 0; i < (int)m_allElements.GetInductorList().size(); i++) {
812  Inductor* inductor = m_allElements.GetInductorList()[i];
813  arrayString.Add(inductor->GetElectricalData().name);
814  }
815  } break;
816  case TYPE_SYNC_MOTOR: {
817  for(int i = 0; i < (int)m_allElements.GetSyncMotorList().size(); i++) {
818  SyncMotor* syncMotor = m_allElements.GetSyncMotorList()[i];
819  arrayString.Add(syncMotor->GetElectricalData().name);
820  }
821  } break;
822  case TYPE_IND_MOTOR: {
823  for(int i = 0; i < (int)m_allElements.GetIndMotorList().size(); i++) {
824  IndMotor* indMotor = m_allElements.GetIndMotorList()[i];
825  arrayString.Add(indMotor->GetElectricalData().name);
826  }
827  } break;
828 
829  default:
830  break;
831  }
832  m_choiceName->Append(arrayString);
833  m_choiceName->Enable();
834 }
835 
836 void TextForm::ElementNumberChoice()
837 {
838  m_choiceTextFromBus->Enable(false);
839  m_choiceTextToBus->Enable(false);
840  m_choiceTextUnit->Enable(false);
841  m_choiceTextFromBus->Clear();
842  m_choiceTextToBus->Clear();
843  m_choiceTextUnit->Clear();
844 
845  int index = m_choiceName->GetSelection();
846  m_text->SetElementNumber(index);
847 
848  m_choiceTextType->Clear();
849  wxArrayString arrayString;
850  switch(m_text->GetElementType()) {
851  case TYPE_BUS: {
852  Bus* bus = m_allElements.GetBusList()[index];
853  m_text->SetElement(bus);
854 
855  arrayString.Add(_("Name"));
856  arrayString.Add(_("Voltage"));
857  arrayString.Add(_("Angle"));
858  arrayString.Add(_("Fault current"));
859  arrayString.Add(_("Fault voltage"));
860  arrayString.Add(_("Short-circuit power"));
861  } break;
862  case TYPE_SYNC_GENERATOR: {
863  SyncGenerator* syncGenerator = m_allElements.GetSyncGeneratorList()[index];
864  m_text->SetElement(syncGenerator);
865 
866  arrayString.Add(_("Name"));
867  arrayString.Add(_("Active power"));
868  arrayString.Add(_("Reactive power"));
869  arrayString.Add(_("Fault current"));
870  } break;
871  case TYPE_LINE: {
872  Line* line = m_allElements.GetLineList()[index];
873  m_text->SetElement(line);
874 
875  arrayString.Add(_("Name"));
876  arrayString.Add(_("Active power flow"));
877  arrayString.Add(_("Reactive power flow"));
878  arrayString.Add(_("Losses"));
879  arrayString.Add(_("Current"));
880  arrayString.Add(_("Fault current"));
881  } break;
882  case TYPE_TRANSFORMER: {
883  Transformer* transformer = m_allElements.GetTransformerList()[index];
884  m_text->SetElement(transformer);
885 
886  arrayString.Add(_("Name"));
887  arrayString.Add(_("Active power flow"));
888  arrayString.Add(_("Reactive power flow"));
889  arrayString.Add(_("Losses"));
890  arrayString.Add(_("Current"));
891  arrayString.Add(_("Fault current"));
892  } break;
893  case TYPE_LOAD: {
894  Load* load = m_allElements.GetLoadList()[index];
895  m_text->SetElement(load);
896 
897  arrayString.Add(_("Name"));
898  arrayString.Add(_("Active power"));
899  arrayString.Add(_("Reactive power"));
900  } break;
901  case TYPE_CAPACITOR: {
902  Capacitor* capacitor = m_allElements.GetCapacitorList()[index];
903  m_text->SetElement(capacitor);
904 
905  arrayString.Add(_("Name"));
906  arrayString.Add(_("Reactive power"));
907  } break;
908  case TYPE_INDUCTOR: {
909  Inductor* inductor = m_allElements.GetInductorList()[index];
910  m_text->SetElement(inductor);
911 
912  arrayString.Add(_("Name"));
913  arrayString.Add(_("Reactive power"));
914  } break;
915  case TYPE_SYNC_MOTOR: {
916  SyncMotor* syncMotor = m_allElements.GetSyncMotorList()[index];
917  m_text->SetElement(syncMotor);
918 
919  arrayString.Add(_("Name"));
920  arrayString.Add(_("Active power"));
921  arrayString.Add(_("Reactive power"));
922  } break;
923  case TYPE_IND_MOTOR: {
924  IndMotor* indMotor = m_allElements.GetIndMotorList()[index];
925  m_text->SetElement(indMotor);
926 
927  arrayString.Add(_("Name"));
928  arrayString.Add(_("Active power"));
929  arrayString.Add(_("Reactive power"));
930  } break;
931 
932  default:
933  break;
934  }
935  m_choiceTextType->Append(arrayString);
936  m_choiceTextType->Enable();
937 }
938 
939 void TextForm::DataTypeChoice()
940 {
941  m_choiceTextFromBus->Enable(false);
942  m_choiceTextToBus->Enable(false);
943 
944  m_choiceTextToBus->Clear();
945  m_choiceTextFromBus->Clear();
946  m_choiceTextUnit->Clear();
947 
948  m_choiceTextUnit->Enable();
949 
950  wxArrayString arrayString;
951  switch(m_text->GetDataType()) {
952  case DATA_NAME: {
953  m_choiceTextUnit->Enable(false);
954  return;
955  } break;
956  case DATA_VOLTAGE:
957  case DATA_SC_VOLTAGE: {
958  arrayString.Add(_("p.u."));
959  arrayString.Add(_("V"));
960  arrayString.Add(_("kV"));
961  } break;
962  case DATA_ANGLE: {
963  arrayString.Add(_("Degrees"));
964  arrayString.Add(_("Radians"));
965  } break;
966  case DATA_SC_CURRENT:
967  case DATA_PF_CURRENT: {
968  arrayString.Add(_("p.u."));
969  arrayString.Add(_("A"));
970  arrayString.Add(_("kA"));
971  } break;
972  case DATA_SC_POWER: {
973  arrayString.Add(_("p.u."));
974  arrayString.Add(_("VA"));
975  arrayString.Add(_("kVA"));
976  arrayString.Add(_("MVA"));
977  } break;
978  case DATA_ACTIVE_POWER:
979  case DATA_PF_ACTIVE:
980  case DATA_PF_LOSSES: {
981  arrayString.Add(_("p.u."));
982  arrayString.Add(_("W"));
983  arrayString.Add(_("kW"));
984  arrayString.Add(_("MW"));
985  m_choiceTextUnit->Enable();
986  } break;
987  case DATA_REACTIVE_POWER:
988  case DATA_PF_REACTIVE: {
989  arrayString.Add(_("p.u."));
990  arrayString.Add(_("VAr"));
991  arrayString.Add(_("kVAr"));
992  arrayString.Add(_("MVAr"));
993  } break;
994  default:
995  break;
996  }
997  m_choiceTextUnit->Append(arrayString);
998 
999  switch(m_text->GetElementType()) {
1000  case TYPE_LINE: {
1001  if(m_text->GetDataType() != DATA_PF_LOSSES) {
1002  auto it = m_allElements.GetLineList().begin();
1003  std::advance(it, m_text->GetElementNumber());
1004  Line* line = *it;
1005 
1006  Bus* bus1 = static_cast<Bus*>(line->GetParentList()[0]);
1007  Bus* bus2 = static_cast<Bus*>(line->GetParentList()[1]);
1008  wxString bus1Name = bus1->GetElectricalData().name;
1009  wxString bus2Name = bus2->GetElectricalData().name;
1010 
1011  m_choiceTextFromBus->Append(bus1Name);
1012  m_choiceTextFromBus->Append(bus2Name);
1013  m_choiceTextToBus->Append(bus2Name);
1014  m_choiceTextToBus->Append(bus1Name);
1015  m_choiceTextFromBus->SetSelection(0);
1016  m_choiceTextToBus->SetSelection(0);
1017 
1018  m_choiceTextFromBus->Enable();
1019  m_choiceTextToBus->Enable();
1020  }
1021  } break;
1022  case TYPE_TRANSFORMER: {
1023  if(m_text->GetDataType() != DATA_PF_LOSSES) {
1024  auto it = m_allElements.GetTransformerList().begin();
1025  std::advance(it, m_text->GetElementNumber());
1026  Transformer* transformer = *it;
1027 
1028  Bus* bus1 = static_cast<Bus*>(transformer->GetParentList()[0]);
1029  Bus* bus2 = static_cast<Bus*>(transformer->GetParentList()[1]);
1030  wxString bus1Name = bus1->GetElectricalData().name;
1031  wxString bus2Name = bus2->GetElectricalData().name;
1032 
1033  m_choiceTextFromBus->Append(bus1Name);
1034  m_choiceTextFromBus->Append(bus2Name);
1035  m_choiceTextToBus->Append(bus2Name);
1036  m_choiceTextToBus->Append(bus1Name);
1037  m_choiceTextFromBus->SetSelection(0);
1038  m_choiceTextToBus->SetSelection(0);
1039 
1040  m_choiceTextFromBus->Enable();
1041  m_choiceTextToBus->Enable();
1042  }
1043  } break;
1044  default:
1045  break;
1046  }
1047 }
1048 
1049 void TextForm::UnitChoice()
1050 {
1051  switch(m_text->GetDataType()) {
1052  case DATA_NAME: {
1053  m_choiceTextUnit->Enable(false);
1054  return;
1055  } break;
1056  case DATA_VOLTAGE:
1057  case DATA_SC_VOLTAGE: {
1058  switch(m_choiceTextUnit->GetSelection()) {
1059  case 0: {
1060  m_text->SetUnit(UNIT_PU);
1061  } break;
1062  case 1: {
1063  m_text->SetUnit(UNIT_V);
1064  } break;
1065  case 2: {
1066  m_text->SetUnit(UNIT_kV);
1067  } break;
1068  default:
1069  break;
1070  }
1071  } break;
1072  case DATA_ANGLE: {
1073  switch(m_choiceTextUnit->GetSelection()) {
1074  case 0: {
1075  m_text->SetUnit(UNIT_DEGREE);
1076  } break;
1077  case 1: {
1078  m_text->SetUnit(UNIT_RADIAN);
1079  } break;
1080  default:
1081  break;
1082  }
1083  } break;
1084  case DATA_SC_CURRENT:
1085  case DATA_PF_CURRENT: {
1086  switch(m_choiceTextUnit->GetSelection()) {
1087  case 0: {
1088  m_text->SetUnit(UNIT_PU);
1089  } break;
1090  case 1: {
1091  m_text->SetUnit(UNIT_A);
1092  } break;
1093  case 2: {
1094  m_text->SetUnit(UNIT_kA);
1095  } break;
1096  default:
1097  break;
1098  }
1099  } break;
1100  case DATA_SC_POWER: {
1101  switch(m_choiceTextUnit->GetSelection()) {
1102  case 0: {
1103  m_text->SetUnit(UNIT_PU);
1104  } break;
1105  case 1: {
1106  m_text->SetUnit(UNIT_VA);
1107  } break;
1108  case 2: {
1109  m_text->SetUnit(UNIT_kVA);
1110  } break;
1111  case 3: {
1112  m_text->SetUnit(UNIT_MVA);
1113  } break;
1114  default:
1115  break;
1116  }
1117  } break;
1118  case DATA_ACTIVE_POWER:
1119  case DATA_PF_ACTIVE:
1120  case DATA_PF_LOSSES: {
1121  switch(m_choiceTextUnit->GetSelection()) {
1122  case 0: {
1123  m_text->SetUnit(UNIT_PU);
1124  } break;
1125  case 1: {
1126  m_text->SetUnit(UNIT_W);
1127  } break;
1128  case 2: {
1129  m_text->SetUnit(UNIT_kW);
1130  } break;
1131  case 3: {
1132  m_text->SetUnit(UNIT_MW);
1133  } break;
1134  default:
1135  break;
1136  }
1137  } break;
1138  case DATA_REACTIVE_POWER:
1139  case DATA_PF_REACTIVE: {
1140  switch(m_choiceTextUnit->GetSelection()) {
1141  case 0: {
1142  m_text->SetUnit(UNIT_PU);
1143  } break;
1144  case 1: {
1145  m_text->SetUnit(UNIT_VAr);
1146  } break;
1147  case 2: {
1148  m_text->SetUnit(UNIT_kVAr);
1149  } break;
1150  case 3: {
1151  m_text->SetUnit(UNIT_MVAr);
1152  } break;
1153  default:
1154  break;
1155  }
1156  } break;
1157  default:
1158  break;
1159  }
1160 }
1161 
1162 void TextForm::Preview()
1163 {
1164  double decimalPlaces = m_text->GetDecimalPlaces();
1165  if(m_textCtrlDecimal->GetValue().ToDouble(&decimalPlaces)) m_text->SetDecimalPlaces(decimalPlaces);
1166 
1167  m_text->UpdateText(m_systemPowerBase);
1168 
1169  m_textCtrlPreview->SetValue(m_text->GetText());
1170 }
1171 
1172 bool TextForm::ValidateData()
1173 {
1174  if(m_choiceElement->GetSelection() == -1) return false;
1175  if(m_choiceName->GetSelection() == -1) return false;
1176  if(m_choiceTextType->GetSelection() == -1) return false;
1177  if(m_text->GetDataType() != DATA_NAME && m_choiceTextUnit->GetSelection() == -1) return false;
1178  if(m_text->GetElementType() == TYPE_LINE || m_text->GetElementType() == TYPE_TRANSFORMER) {
1179  if(m_text->GetDataType() != DATA_PF_LOSSES && m_text->GetDataType() != DATA_NAME) {
1180  if(m_choiceTextFromBus->GetSelection() == -1) return false;
1181  if(m_choiceTextToBus->GetSelection() == -1) return false;
1182  }
1183  }
1184 
1185  if(m_choiceTextFromBus->IsEnabled() && m_choiceTextToBus->IsEnabled())
1186  m_text->SetDirection(m_choiceTextFromBus->GetSelection());
1187  double decimalPlaces = m_text->GetDecimalPlaces();
1188  if(m_textCtrlDecimal->GetValue().ToDouble(&decimalPlaces)) m_text->SetDecimalPlaces(decimalPlaces);
1189 
1190  m_textToEdit->SetElementType(m_text->GetElementType());
1191  m_textToEdit->SetElementNumber(m_text->GetElementNumber());
1192  m_textToEdit->SetElement(m_text->GetElement());
1193  m_textToEdit->SetDataType(m_text->GetDataType());
1194  m_textToEdit->SetDirection(m_text->GetDirection());
1195  m_textToEdit->SetUnit(m_text->GetUnit());
1196  m_textToEdit->SetDecimalPlaces(decimalPlaces);
1197  m_textToEdit->UpdateText(m_systemPowerBase);
1198 
1199  return true;
1200 }
1201 
1202 void TextForm::OnOKButtonClick(wxCommandEvent& event)
1203 {
1204  if(ValidateData()) {
1205  EndModal(wxID_OK);
1206  } else {
1207  wxString errorMsg = _("There are blank fields.");
1208  wxMessageDialog msgDialog(this, errorMsg, _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
1209  msgDialog.ShowModal();
1210  }
1211 }
Definition: Text.h:48
+ + + + + + + + +
Definition: Bus.h:45
+ + + +
Definition: Line.h:35
+
Definition: Load.h:23
+ + + + + + + + + + + + +
+
+ + + + diff --git a/docs/doxygen/html/_text_form_8h_source.html b/docs/doxygen/html/_text_form_8h_source.html index 8a7b1e9..4af92a9 100644 --- a/docs/doxygen/html/_text_form_8h_source.html +++ b/docs/doxygen/html/_text_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/TextForm.h Source File +Project/TextForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
TextForm.h
-
1 #ifndef TEXTFORM_H
2 #define TEXTFORM_H
3 #include "ElementForm.h"
4 
5 #include "Text.h"
6 #include "ElectricCalculation.h"
7 
8 class TextForm : public TextFormBase
9 {
10 public:
11  TextForm(wxWindow* parent, Text* text, std::vector<Element*> elementList, double systemPowerBase = 100e6);
12  virtual ~TextForm();
13 
14  virtual bool LoadChoices();
15 
16  virtual void ElementTypeChoice();
17  virtual void ElementNumberChoice();
18  virtual void DataTypeChoice();
19  virtual void UnitChoice();
20 
21  virtual void Preview();
22  virtual bool ValidateData();
23 
24 protected:
25  virtual void OnUnitChoiceSelected(wxCommandEvent& event);
26  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
27  virtual void OnOKButtonClick(wxCommandEvent& event);
28  virtual void OnElementChoiceSelected(wxCommandEvent& event);
29  virtual void OnFromBusChoiceSelected(wxCommandEvent& event);
30  virtual void OnNameChoiceSelected(wxCommandEvent& event);
31  virtual void OnTextEnter(wxCommandEvent& event);
32  virtual void OnToBusChoiceSelected(wxCommandEvent& event);
33  virtual void OnTypeChoiceSelected(wxCommandEvent& event);
34 
35  Text* m_text = NULL;
36  Text* m_textToEdit = NULL;
37  wxWindow* m_parent = NULL;
38  ElectricCalculation m_allElements;
39  double m_systemPowerBase;
40 };
41 #endif // TEXTFORM_H
Definition: Text.h:48
+
1 #ifndef TEXTFORM_H
2 #define TEXTFORM_H
3 #include "ElementForm.h"
4 
5 #include "Text.h"
6 #include "ElectricCalculation.h"
7 
8 class TextForm : public TextFormBase
9 {
10 public:
11  TextForm(wxWindow* parent, Text* text, std::vector<Element*> elementList, double systemPowerBase = 100e6);
12  virtual ~TextForm();
13 
14  virtual bool LoadChoices();
15 
16  virtual void ElementTypeChoice();
17  virtual void ElementNumberChoice();
18  virtual void DataTypeChoice();
19  virtual void UnitChoice();
20 
21  virtual void Preview();
22  virtual bool ValidateData();
23 
24 protected:
25  virtual void OnUnitChoiceSelected(wxCommandEvent& event);
26  virtual void OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
27  virtual void OnOKButtonClick(wxCommandEvent& event);
28  virtual void OnElementChoiceSelected(wxCommandEvent& event);
29  virtual void OnFromBusChoiceSelected(wxCommandEvent& event);
30  virtual void OnNameChoiceSelected(wxCommandEvent& event);
31  virtual void OnTextEnter(wxCommandEvent& event);
32  virtual void OnToBusChoiceSelected(wxCommandEvent& event);
33  virtual void OnTypeChoiceSelected(wxCommandEvent& event);
34 
35  Text* m_text = NULL;
36  Text* m_textToEdit = NULL;
37  wxWindow* m_parent = NULL;
38  ElectricCalculation m_allElements;
39  double m_systemPowerBase;
40 };
41 #endif // TEXTFORM_H
Definition: Text.h:48
Base class of electric calculations, with general methods.
-
Definition: TextForm.h:8
-
Definition: ElectricCalculation.h:49
-
Definition: ElementForm.h:714
+ + +
+
- + diff --git a/docs/doxygen/html/_transfer_function_8cpp_source.html b/docs/doxygen/html/_transfer_function_8cpp_source.html new file mode 100644 index 0000000..b369dd6 --- /dev/null +++ b/docs/doxygen/html/_transfer_function_8cpp_source.html @@ -0,0 +1,106 @@ + + + + + + + +Project/TransferFunction.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TransferFunction.cpp
+
+
+
1 #include "TransferFunction.h"
2 #include "TransferFunctionForm.h"
3 
4 TransferFunction::TransferFunction(int id) : ControlElement(id)
5 {
6  // Superscript unicode numbers
7  m_supNumber[0] = L'\u2070';
8  m_supNumber[1] = L'\u00B9';
9  m_supNumber[2] = L'\u00B2';
10  m_supNumber[3] = L'\u00B3';
11  m_supNumber[4] = L'\u2074';
12  m_supNumber[5] = L'\u2075';
13  m_supNumber[6] = L'\u2076';
14  m_supNumber[7] = L'\u2077';
15  m_supNumber[8] = L'\u2078';
16  m_supNumber[9] = L'\u2079';
17 
18  m_numerator.clear();
19  m_numerator.push_back(1);
20  m_denominator.clear();
21  m_denominator.push_back(1);
22  m_denominator.push_back(1);
23  UpdateTFText();
24 
25  Node* node1 = new Node(m_position + wxPoint2DDouble(-m_width / 2, 0), Node::NODE_IN, m_borderSize);
26  node1->StartMove(m_position);
27  Node* node2 = new Node(m_position + wxPoint2DDouble(m_width / 2, 0), Node::NODE_OUT, m_borderSize);
28  node2->SetAngle(180.0);
29  node2->StartMove(m_position);
30  m_nodeList.push_back(node1);
31  m_nodeList.push_back(node2);
32 }
33 
34 TransferFunction::~TransferFunction() {}
35 void TransferFunction::Draw(wxPoint2DDouble translation, double scale) const
36 {
37  glLineWidth(1.0);
38  if(m_selected) {
39  glColor4dv(m_selectionColour.GetRGBA());
40  double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
41  DrawRectangle(m_position, m_width + borderSize, m_height + borderSize);
42  }
43  glColor4d(1.0, 1.0, 1.0, 1.0);
44  DrawRectangle(m_position, m_width, m_height);
45  glColor4d(0.0, 0.0, 0.0, 1.0);
46  DrawRectangle(m_position, m_width, m_height, GL_LINE_LOOP);
47 
48  std::vector<wxPoint2DDouble> linePts;
49  linePts.push_back(wxPoint2DDouble(m_position.m_x - m_width / 2 + 5 + m_borderSize, m_position.m_y));
50  linePts.push_back(wxPoint2DDouble(m_position.m_x + m_width / 2 - 5 - m_borderSize, m_position.m_y));
51  DrawLine(linePts);
52 
53  DrawNodes();
54 
55  glEnable(GL_TEXTURE_2D);
56  glColor4d(0.0, 0.0, 0.0, 1.0);
57  m_glStringNum->bind();
58  m_glStringNum->render(m_position.m_x, m_position.m_y - m_height / 4);
59  m_glStringDen->bind();
60  m_glStringDen->render(m_position.m_x, m_position.m_y + m_height / 4);
61  glDisable(GL_TEXTURE_2D);
62 }
63 
64 void TransferFunction::SetText(wxString numerator, wxString denominator)
65 {
66  wxFont font(m_fontSize, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
67  wxScreenDC dc;
68 
69  if(m_glStringNum) {
70  delete m_glStringNum;
71  m_glStringNum = NULL;
72  }
73  m_glStringNum = new wxGLString(numerator);
74  m_glStringNum->setFont(font);
75  m_glStringNum->consolidate(&dc);
76 
77  if(m_glStringDen) {
78  delete m_glStringDen;
79  m_glStringDen = NULL;
80  }
81  m_glStringDen = new wxGLString(denominator);
82  m_glStringDen->setFont(font);
83  m_glStringDen->consolidate(&dc);
84 
85  double nWidth = m_glStringNum->getWidth() + 5 + m_borderSize;
86  double dWidth = m_glStringDen->getWidth() + 5 + m_borderSize;
87 
88  m_width = nWidth > dWidth ? nWidth : dWidth;
89  m_height = m_glStringNum->getheight() + m_glStringDen->getheight() + 2 * m_borderSize;
90  SetPosition(m_position); // Update rect properly.
91 }
92 
93 wxString TransferFunction::GetSuperscriptNumber(int number)
94 {
95  wxString strNumber = wxString::Format("%d", number);
96  wxString superscriptStr = "";
97  for(int i = 0; i < (int)strNumber.length(); ++i) {
98  wxString digitStr = strNumber[i];
99  long digit = 0;
100  digitStr.ToLong(&digit);
101  superscriptStr += wxString(m_supNumber[digit]);
102  }
103  return superscriptStr;
104 }
105 
106 void TransferFunction::GetTFString(wxString& numerator, wxString& denominator)
107 {
108  numerator = "";
109  denominator = "";
110  int index = static_cast<int>(m_numerator.size()) - 1;
111  for(auto it = m_numerator.begin(), itEnd = m_numerator.end(); it != itEnd; ++it) {
112  double value = *it;
113  if(value != 0.0) {
114  wxString signal;
115  if(index == static_cast<int>(m_numerator.size()) - 1) {
116  if(value >= 0.0)
117  signal += "";
118  else
119  signal += "-";
120  } else {
121  if(value >= 0.0)
122  signal += "+ ";
123  else
124  signal += "- ";
125  }
126 
127  if(index == 0) {
128  numerator += signal + StringFromDouble(std::abs(value), 0);
129  break;
130  } else if(index == 1) {
131  if(value == 1.0) {
132  numerator += signal + "s";
133  } else {
134  numerator += signal + StringFromDouble(std::abs(value), 0) + "s";
135  }
136  } else {
137  if(value == 1.0) {
138  numerator += signal + "s" + GetSuperscriptNumber(index);
139  } else {
140  numerator += signal + StringFromDouble(std::abs(value), 0) + "s" + GetSuperscriptNumber(index);
141  }
142  }
143  numerator += " ";
144  }
145  --index;
146  }
147 
148  index = static_cast<int>(m_denominator.size()) - 1;
149  for(auto it = m_denominator.begin(), itEnd = m_denominator.end(); it != itEnd; ++it) {
150  double value = *it;
151  if(value != 0.0) {
152  wxString signal;
153  if(index == static_cast<int>(m_denominator.size()) - 1) {
154  if(value >= 0.0)
155  signal += "";
156  else
157  signal += "-";
158  } else {
159  if(value >= 0.0)
160  signal += "+ ";
161  else
162  signal += "- ";
163  }
164 
165  if(index == 0) {
166  denominator += signal + StringFromDouble(std::abs(value), 0);
167  break;
168  } else if(index == 1) {
169  if(value == 1.0) {
170  denominator += signal + "s";
171  } else {
172  denominator += signal + StringFromDouble(std::abs(value), 0) + "s";
173  }
174  } else {
175  if(value == 1.0) {
176  denominator += signal + "s" + GetSuperscriptNumber(index);
177  } else {
178  denominator += signal + StringFromDouble(std::abs(value), 0) + "s" + GetSuperscriptNumber(index);
179  }
180  }
181  denominator += " ";
182  }
183  --index;
184  }
185 }
186 
187 void TransferFunction::UpdateTFText()
188 {
189  wxString num, den;
190  GetTFString(num, den);
191  SetText(num, den);
192  if(m_nodeList.size() == 2) {
193  if(m_angle == 0.0) {
194  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
195  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
196  } else if(m_angle == 90.0) {
197  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
198  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
199  } else if(m_angle == 180.0) {
200  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
201  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
202  } else if(m_angle == 270.0) {
203  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
204  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
205  }
206  }
207 }
208 
209 bool TransferFunction::ShowForm(wxWindow* parent, Element* element)
210 {
211  TransferFunctionForm* tfForm = new TransferFunctionForm(parent, this);
212  if(tfForm->ShowModal() == wxID_OK) {
213  tfForm->Destroy();
214  return true;
215  }
216  tfForm->Destroy();
217  return false;
218 }
219 
220 void TransferFunction::Rotate(bool clockwise)
221 {
222  if(clockwise)
223  m_angle += 90.0;
224  else
225  m_angle -= 90.0;
226  if(m_angle >= 360.0)
227  m_angle = 0.0;
228  else if(m_angle < 0)
229  m_angle = 270.0;
230 
231  if(m_angle == 0.0) {
232  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
233  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
234  } else if(m_angle == 90.0) {
235  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
236  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
237  } else if(m_angle == 180.0) {
238  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(m_width / 2, 0));
239  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(-m_width / 2, 0));
240  } else if(m_angle == 270.0) {
241  m_nodeList[0]->SetPosition(m_position + wxPoint2DDouble(0, m_height / 2));
242  m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -m_height / 2));
243  }
244 
245  for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
246  Node* node = *it;
247  node->Rotate(clockwise);
248  }
249 }
250 
251 void TransferFunction::CalculateSpaceState(int maxIteration, double error)
252 {
253  m_maxIteration = maxIteration;
254  m_error = error;
255 
256  int order = static_cast<int>(m_denominator.size());
257  std::vector<double> denominator = m_denominator;
258  std::vector<double> numerator;
259 
260  int k = order;
261  for(int i = 0; i < order; i++) {
262  int numIndex = i - (order - static_cast<int>(m_numerator.size()));
263  if(numIndex < 0)
264  numerator.push_back(0.0);
265  else
266  numerator.push_back(m_numerator[numIndex]);
267  k--;
268  }
269 
270  SpaceState ss;
271  for(int i = 0; i < (order - 1); i++) {
272  std::vector<double> lineA;
273  for(int j = 0; j < (order - 1); j++) {
274  if(j == i + 1)
275  lineA.push_back(1.0);
276  else
277  lineA.push_back(0.0);
278  }
279  ss.A.push_back(lineA);
280  ss.B.push_back(0.0);
281  ss.C.push_back(0.0);
282  }
283  for(int i = 0; i < order - 1; i++) {
284  ss.A[order - 2][i] = -(denominator[order - 1 - i] / denominator[0]);
285  ss.C[i] = (numerator[order - 1 - i] - denominator[order - 1 - i] * numerator[0]) / denominator[0];
286  }
287  ss.B[order - 2] = 1.0;
288  ss.D = numerator[0];
289 
290  m_ss = ss;
291 
292  // Reset state
293  m_x.clear();
294  m_dx.clear();
295 
296  for(unsigned int i = 0; i < m_denominator.size(); ++i) {
297  m_x.push_back(0.0);
298  m_dx.push_back(0.0);
299  }
300 }
301 
302 bool TransferFunction::Solve(double input, double timeStep)
303 {
304  int order = static_cast<int>(m_ss.A.size());
305 
306  std::vector<double> x;
307  std::vector<double> oldx;
308  std::vector<double> dx;
309  std::vector<double> olddx;
310  for(int i = 0; i < order; i++) {
311  x.push_back(m_x[i]);
312  oldx.push_back(m_x[i]);
313 
314  dx.push_back(m_dx[i]);
315  olddx.push_back(m_dx[i]);
316  }
317 
318  bool exit = false;
319  int iter = 0;
320  while(!exit) {
321  double xError = 0.0;
322  double dxError = 0.0;
323  for(int i = 0; i < order; i++) {
324  // Trapezoidal method
325  x[i] = m_x[i] + 0.5 * timeStep * (m_dx[i] + dx[i]);
326 
327  if(std::abs(x[i] - oldx[i]) > xError) xError = std::abs(x[i] - oldx[i]);
328 
329  oldx[i] = x[i];
330  }
331  for(int i = 0; i < order; i++) {
332  // x' = Ax + Bu
333  dx[i] = 0.0;
334  for(int j = 0; j < order; j++) dx[i] += m_ss.A[i][j] * x[j];
335  dx[i] += m_ss.B[i] * input;
336 
337  if(std::abs(dx[i] - olddx[i]) > dxError) dxError = std::abs(dx[i] - olddx[i]);
338 
339  olddx[i] = dx[i];
340  }
341  if(std::max(xError, dxError) < m_error) exit = true;
342 
343  iter++;
344  if(iter >= m_maxIteration) return false;
345  }
346 
347  m_output = 0.0;
348  for(int i = 0; i < order; i++) {
349  m_output += m_ss.C[i] * x[i];
350  m_x[i] = x[i];
351  m_dx[i] = dx[i];
352  }
353 
354  m_output += m_ss.D * input;
355 
356  return true;
357 }
358 
360 {
361  TransferFunction* copy = new TransferFunction(m_elementID);
362  *copy = *this;
363  m_glStringNum = NULL;
364  m_glStringDen = NULL;
365  UpdateTFText();
366  return copy;
367 }
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
+ +
virtual Element * GetCopy()
Get a the element copy.
+ + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
+ +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
+ + +
+
+ + + + diff --git a/docs/doxygen/html/_transfer_function_8h_source.html b/docs/doxygen/html/_transfer_function_8h_source.html index 9176405..c457505 100644 --- a/docs/doxygen/html/_transfer_function_8h_source.html +++ b/docs/doxygen/html/_transfer_function_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/TransferFunction.h Source File +Project/TransferFunction.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
TransferFunction.h
-
1 #ifndef TRANSFERFUNCTION_H
2 #define TRANSFERFUNCTION_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
10 
12 {
13  public:
14  struct SpaceState {
15  std::vector<std::vector<double> > A;
16  std::vector<double> B;
17  std::vector<double> C;
18  double D;
19  };
20 
21  TransferFunction(int id);
23 
24  virtual void Draw(wxPoint2DDouble translation, double scale) const;
25  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
26  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
27  virtual bool ShowForm(wxWindow* parent, Element* element);
28  virtual void Rotate(bool clockwise = true);
29 
30  virtual std::vector<double> GetNumerator() const { return m_numerator; }
31  virtual std::vector<double> GetDenominator() const { return m_denominator; }
32  virtual void SetNumerator(std::vector<double> numerator) { m_numerator = numerator; }
33  virtual void SetDenominator(std::vector<double> denominator) { m_denominator = denominator; }
34  virtual void UpdateTFText();
35  virtual void UpdateText() { UpdateTFText(); }
36  virtual SpaceState GetSpaceState() { return m_ss; }
37  virtual void CalculateSpaceState(int maxIteration = 100, double error = 1e-3);
38  virtual bool Solve(double input, double timeStep);
39 
40  virtual Element* GetCopy();
41 
42  protected:
43  virtual void SetText(wxString numerator, wxString denominator);
44  virtual wxString GetSuperscriptNumber(int number);
45  virtual void GetTFString(wxString& numerator, wxString& denominator);
46 
47  wchar_t m_supNumber[10];
48 
49  wxGLString* m_glStringNum = NULL;
50  wxGLString* m_glStringDen = NULL;
51  int m_fontSize = 10;
52 
53  std::vector<double> m_numerator;
54  std::vector<double> m_denominator;
55  SpaceState m_ss;
56 
57  std::vector<double> m_x;
58  std::vector<double> m_dx;
59  double m_error = 1e-3;
60  int m_maxIteration = 100;
61 };
62 
63 #endif // TRANSFERFUNCTION_H
Definition: Element.h:88
-
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: TransferFunction.cpp:209
-
virtual Element * GetCopy()
Get a the element copy.
Definition: TransferFunction.cpp:359
-
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: TransferFunction.h:26
-
Definition: TransferFunctionForm.h:8
-
Definition: TransferFunction.h:14
-
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: TransferFunction.cpp:220
-
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: TransferFunction.h:25
-
Definition: TransferFunction.h:11
-
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: TransferFunction.cpp:35
-
Definition: ControlElement.h:53
-
Definition: wxGLString.h:77
+
1 #ifndef TRANSFERFUNCTION_H
2 #define TRANSFERFUNCTION_H
3 
4 #include "ControlElement.h"
5 
6 #include <wx/dcscreen.h>
7 #include "wxGLString.h"
8 
10 
12 {
13  public:
14  struct SpaceState {
15  std::vector<std::vector<double> > A;
16  std::vector<double> B;
17  std::vector<double> C;
18  double D;
19  };
20 
21  TransferFunction(int id);
23 
24  virtual void Draw(wxPoint2DDouble translation, double scale) const;
25  virtual bool Contains(wxPoint2DDouble position) const { return m_rect.Contains(position); }
26  virtual bool Intersects(wxRect2DDouble rect) const { return m_rect.Intersects(rect); }
27  virtual bool ShowForm(wxWindow* parent, Element* element);
28  virtual void Rotate(bool clockwise = true);
29 
30  virtual std::vector<double> GetNumerator() const { return m_numerator; }
31  virtual std::vector<double> GetDenominator() const { return m_denominator; }
32  virtual void SetNumerator(std::vector<double> numerator) { m_numerator = numerator; }
33  virtual void SetDenominator(std::vector<double> denominator) { m_denominator = denominator; }
34  virtual void UpdateTFText();
35  virtual void UpdateText() { UpdateTFText(); }
36  virtual SpaceState GetSpaceState() { return m_ss; }
37  virtual void CalculateSpaceState(int maxIteration = 100, double error = 1e-3);
38  virtual bool Solve(double input, double timeStep);
39 
40  virtual Element* GetCopy();
41 
42  protected:
43  virtual void SetText(wxString numerator, wxString denominator);
44  virtual wxString GetSuperscriptNumber(int number);
45  virtual void GetTFString(wxString& numerator, wxString& denominator);
46 
47  wchar_t m_supNumber[10];
48 
49  wxGLString* m_glStringNum = NULL;
50  wxGLString* m_glStringDen = NULL;
51  int m_fontSize = 10;
52 
53  std::vector<double> m_numerator;
54  std::vector<double> m_denominator;
55  SpaceState m_ss;
56 
57  std::vector<double> m_x;
58  std::vector<double> m_dx;
59  double m_error = 1e-3;
60  int m_maxIteration = 100;
61 };
62 
63 #endif // TRANSFERFUNCTION_H
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
+
virtual Element * GetCopy()
Get a the element copy.
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
+ + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
+ +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
+ +
+
- + diff --git a/docs/doxygen/html/_transfer_function_form_8cpp_source.html b/docs/doxygen/html/_transfer_function_form_8cpp_source.html new file mode 100644 index 0000000..adf28ed --- /dev/null +++ b/docs/doxygen/html/_transfer_function_form_8cpp_source.html @@ -0,0 +1,97 @@ + + + + + + + +Project/TransferFunctionForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TransferFunctionForm.cpp
+
+
+
1 #include "TransferFunctionForm.h"
2 #include "TransferFunction.h"
3 
4 TransferFunctionForm::TransferFunctionForm(wxWindow* parent, TransferFunction* transferFunction)
6 {
7  SetSize(GetBestSize());
8 
9  m_parent = parent;
10  m_tf = transferFunction;
11  LoadTFData();
12 }
13 
14 TransferFunctionForm::~TransferFunctionForm() {}
15 void TransferFunctionForm::OnCancelClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
16 void TransferFunctionForm::OnOKClick(wxCommandEvent& event)
17 {
18  if(ValidateData()) EndModal(wxID_OK);
19 }
20 
21 void TransferFunctionForm::LoadTFData()
22 {
23  auto num = m_tf->GetNumerator();
24  auto den = m_tf->GetDenominator();
25 
26  wxString numStr = "";
27  for(auto it = num.begin(), itEnd = num.end(); it != itEnd; ++it) {
28  double value = *it;
29  if(it == num.begin())
30  numStr = m_tf->StringFromDouble(value, 0);
31  else
32  numStr += " " + m_tf->StringFromDouble(value, 0);
33  }
34  m_textCtrlNumerator->SetValue(numStr);
35 
36  wxString denStr = "";
37  for(auto it = den.begin(), itEnd = den.end(); it != itEnd; ++it) {
38  double value = *it;
39  if(it == den.begin())
40  denStr = m_tf->StringFromDouble(value, 0);
41  else
42  denStr += " " + m_tf->StringFromDouble(value, 0);
43  }
44  m_textCtrlDenominator->SetValue(denStr);
45 }
46 
47 bool TransferFunctionForm::ValidateData()
48 {
49  wxString num = m_textCtrlNumerator->GetValue();
50  std::vector<double> numerator;
51  while(num != "") {
52  wxString rest;
53  wxString strValue = num.BeforeFirst(' ', &rest);
54  num = rest;
55  double value = 0;
56  if(!m_tf->DoubleFromString(this, strValue, value,
57  _("Value entered incorrectly in the field \"Numerator parameters\".")))
58  return false;
59  numerator.push_back(value);
60  }
61 
62  wxString den = m_textCtrlDenominator->GetValue();
63  std::vector<double> denominator;
64  while(den != "") {
65  wxString rest;
66  wxString strValue = den.BeforeFirst(' ', &rest);
67  den = rest;
68  double value = 0;
69  if(!m_tf->DoubleFromString(this, strValue, value,
70  _("Value entered incorrectly in the field \"Denominator parameters\".")))
71  return false;
72  denominator.push_back(value);
73  }
74  m_tf->SetNumerator(numerator);
75  m_tf->SetDenominator(denominator);
76  m_tf->UpdateTFText();
77  return true;
78 }
+ +
+
+ + + + diff --git a/docs/doxygen/html/_transfer_function_form_8h_source.html b/docs/doxygen/html/_transfer_function_form_8h_source.html index feb8be3..feee132 100644 --- a/docs/doxygen/html/_transfer_function_form_8h_source.html +++ b/docs/doxygen/html/_transfer_function_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/TransferFunctionForm.h Source File +Project/TransferFunctionForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
TransferFunctionForm.h
-
1 #ifndef TRANSFERFUNCTIONFORM_H
2 #define TRANSFERFUNCTIONFORM_H
3 
4 #include "ElementForm.h"
5 
6 class TransferFunction;
7 
9 {
10 public:
11  TransferFunctionForm(wxWindow* parent, TransferFunction* transferFunction);
12  virtual ~TransferFunctionForm();
13  bool ValidateData();
14 
15 protected:
16  virtual void OnCancelClick(wxCommandEvent& event);
17  virtual void OnOKClick(wxCommandEvent& event);
18  void LoadTFData();
19 
20  wxWindow* m_parent = NULL;
21  TransferFunction* m_tf = NULL;
22 };
23 #endif // TRANSFERFUNCTIONFORM_H
Definition: TransferFunctionForm.h:8
-
Definition: ElementForm.h:775
-
Definition: TransferFunction.h:11
+
1 #ifndef TRANSFERFUNCTIONFORM_H
2 #define TRANSFERFUNCTIONFORM_H
3 
4 #include "ElementForm.h"
5 
6 class TransferFunction;
7 
9 {
10 public:
11  TransferFunctionForm(wxWindow* parent, TransferFunction* transferFunction);
12  virtual ~TransferFunctionForm();
13  bool ValidateData();
14 
15 protected:
16  virtual void OnCancelClick(wxCommandEvent& event);
17  virtual void OnOKClick(wxCommandEvent& event);
18  void LoadTFData();
19 
20  wxWindow* m_parent = NULL;
21  TransferFunction* m_tf = NULL;
22 };
23 #endif // TRANSFERFUNCTIONFORM_H
+ +
+
- + diff --git a/docs/doxygen/html/_transformer_8cpp_source.html b/docs/doxygen/html/_transformer_8cpp_source.html new file mode 100644 index 0000000..23c6294 --- /dev/null +++ b/docs/doxygen/html/_transformer_8cpp_source.html @@ -0,0 +1,132 @@ + + + + + + + +Project/Transformer.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Transformer.cpp
+
+
+
1 #include "TransformerForm.h"
2 #include "Transformer.h"
3 
4 Transformer::Transformer() : Branch()
5 {
6  for(int i = 0; i < 2; i++) {
7  for(int j = 0; j < 3; j++) {
8  m_electricalData.faultCurrent[i][j] = std::complex<double>(0.0, 0.0);
9  }
10  }
11 }
12 Transformer::Transformer(wxString name) : Branch()
13 {
14  for(int i = 0; i < 2; i++) {
15  for(int j = 0; j < 3; j++) {
16  m_electricalData.faultCurrent[i][j] = std::complex<double>(0.0, 0.0);
17  }
18  }
19  m_electricalData.name = name;
20 }
21 Transformer::~Transformer() {}
22 bool Transformer::AddParent(Element* parent, wxPoint2DDouble position)
23 {
24  if(parent) {
25  // First bus.
26  if(m_parentList.size() == 0) {
27  m_position = position;
28  m_parentList.push_back(parent);
29  parent->AddChild(this);
30  wxPoint2DDouble parentPt =
31  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
32  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
33  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
34  m_pointList.push_back(parentPt); // First point
35  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
36 
37  wxRect2DDouble genRect(0, 0, 0, 0);
38  m_switchRect.push_back(genRect);
39 
40  return false;
41  }
42  // Second bus.
43  else if(parent != m_parentList[0]) {
44  m_parentList.push_back(parent);
45  parent->AddChild(this);
46  wxPoint2DDouble parentPt =
47  parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
48  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
49  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
50 
51  // Get the average between the two bus points.
52  m_position =
53  wxPoint2DDouble((m_pointList[0].m_x + parentPt.m_x) / 2.0, (m_pointList[0].m_y + parentPt.m_y) / 2.0);
54  // Set the transformer rectangle.
55  m_width = 70.0;
56  m_height = 40.0;
57  SetPosition(m_position); // This method calculates the rectangle propely.
58  // Set the "side" points.
59  m_pointList.push_back(
60  wxPoint2DDouble(m_rect.GetPosition() + wxPoint2DDouble(-10 - m_borderSize, m_height / 2.0)));
61  m_pointList.push_back(
62  wxPoint2DDouble(m_rect.GetPosition() + wxPoint2DDouble(m_width + 10 + m_borderSize, m_height / 2.0)));
63 
64  // Set first switch point.
65  wxPoint2DDouble secondPoint = parentPt;
66  if(m_pointList.size() > 2) {
67  secondPoint = m_pointList[2];
68  }
69  m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], secondPoint);
70 
71  // Set the second switch point.
72  m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_pointList[m_pointList.size() - 1]));
73 
74  m_pointList.push_back(parentPt); // Last point.
75  m_inserted = true;
76 
77  wxRect2DDouble genRect(0, 0, 0, 0);
78  m_switchRect.push_back(genRect);
79  UpdateSwitches();
80  UpdatePowerFlowArrowsPosition();
81 
82  return true;
83  }
84  }
85  return false;
86 }
87 
88 bool Transformer::Contains(wxPoint2DDouble position) const
89 {
90  wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
91  return m_rect.Contains(ptR);
92 }
93 
94 void Transformer::Draw(wxPoint2DDouble translation, double scale) const
95 {
96  OpenGLColour elementColour;
97  if(m_online) {
98  if(m_dynEvent)
99  elementColour = m_dynamicEventColour;
100  else
101  elementColour = m_onlineElementColour;
102  } else
103  elementColour = m_offlineElementColour;
104 
105  if(m_inserted) {
106  // Draw selection (layer 1).
107  if(m_selected) {
108  // Push the current matrix on stack.
109  glLineWidth(1.5 + m_borderSize * 2.0);
110  glColor4dv(m_selectionColour.GetRGBA());
111  DrawLine(m_pointList);
112  glPushMatrix();
113  // Rotate the matrix around the object position.
114  glTranslated(m_position.m_x, m_position.m_y, 0.0);
115  glRotated(m_angle, 0.0, 0.0, 1.0);
116  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
117 
118  DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20 + (m_borderSize + 1.5) / scale, 20,
119  GL_POLYGON);
120  DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20 + (m_borderSize + 1.5) / scale, 20,
121  GL_POLYGON);
122 
123  glPopMatrix();
124 
125  // Draw nodes selection.
126  if(m_pointList.size() > 0) {
127  DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
128  if(m_inserted) {
129  DrawCircle(m_pointList[m_pointList.size() - 1], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
130  }
131  }
132  }
133 
134  // Draw transformer (layer 2).
135  // Transformer line
136  glLineWidth(1.5);
137  glColor4dv(elementColour.GetRGBA());
138  DrawLine(m_pointList);
139 
140  // Draw nodes.
141  if(m_pointList.size() > 0) {
142  glColor4dv(elementColour.GetRGBA());
143  DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
144  if(m_inserted) {
145  DrawCircle(m_pointList[m_pointList.size() - 1], 5.0, 10, GL_POLYGON);
146  }
147  }
148 
149  DrawSwitches();
150  DrawPowerFlowPts();
151 
152  // Push the current matrix on stack.
153  glPushMatrix();
154  // Rotate the matrix around the object position.
155  glTranslated(m_position.m_x, m_position.m_y, 0.0);
156  glRotated(m_angle, 0.0, 0.0, 1.0);
157  glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
158 
159  glColor4d(1.0, 1.0, 1.0, 1.0);
160  DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20, 20, GL_POLYGON);
161  DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20, 20, GL_POLYGON);
162 
163  glColor4dv(elementColour.GetRGBA());
164  DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20, 20);
165  DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20, 20);
166 
167  DrawPoint(m_rect.GetPosition(), 8.0 * scale);
168 
169  glPopMatrix();
170  }
171 }
172 
173 bool Transformer::Intersects(wxRect2DDouble rect) const
174 {
175  if(m_angle == 0.0 || m_angle == 180.0) return m_rect.Intersects(rect);
176  return RotatedRectanglesIntersects(m_rect, rect, m_angle, 0.0);
177 }
178 
179 void Transformer::Rotate(bool clockwise)
180 {
181  double rotAngle = m_rotationAngle;
182  if(!clockwise) rotAngle = -m_rotationAngle;
183 
184  m_angle += rotAngle;
185  if(m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
186 
187  // Rotate all the points, except the switches and buses points.
188  for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
189  m_pointList[i] = RotateAtPosition(m_pointList[i], rotAngle);
190  }
191  UpdateSwitchesPosition();
192  UpdatePowerFlowArrowsPosition();
193 }
194 
195 void Transformer::Move(wxPoint2DDouble position)
196 {
197  SetPosition(m_movePos + position - m_moveStartPt);
198 
199  // Move all the points, except the switches and buses points.
200  for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
201  m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
202  }
203 
204  if(!m_parentList[0]) {
205  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
206  }
207  if(!m_parentList[1]) {
208  m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
209  }
210 
211  UpdateSwitchesPosition();
212  UpdatePowerFlowArrowsPosition();
213 }
214 
215 void Transformer::MoveNode(Element* parent, wxPoint2DDouble position)
216 {
217  if(parent) {
218  // First bus.
219  if(parent == m_parentList[0]) {
220  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
221  }
222  // Second bus.
223  else if(parent == m_parentList[1]) {
224  m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
225  }
226  } else {
227  if(m_activeNodeID == 1) {
228  m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
229  if(m_parentList[0]) {
230  m_parentList[0]->RemoveChild(this);
231  m_parentList[0] = NULL;
232  m_online = false;
233  }
234  } else if(m_activeNodeID == 2) {
235  m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
236  if(m_parentList[1]) {
237  m_parentList[1]->RemoveChild(this);
238  m_parentList[1] = NULL;
239  m_online = false;
240  }
241  }
242  }
243 
244  // Recalculate switches positions
245  UpdateSwitchesPosition();
246  UpdatePowerFlowArrowsPosition();
247 }
248 
249 void Transformer::StartMove(wxPoint2DDouble position)
250 {
251  m_moveStartPt = position;
252  m_movePts = m_pointList;
253  m_movePos = m_position;
254 }
255 
256 bool Transformer::GetContextMenu(wxMenu& menu)
257 {
258  menu.Append(ID_EDIT_ELEMENT, _("Edit tranformer"));
259  GeneralMenuItens(menu);
260  return true;
261 }
262 
263 bool Transformer::ShowForm(wxWindow* parent, Element* element)
264 {
265  TransformerForm* transfForm = new TransformerForm(parent, this);
266  if(transfForm->ShowModal() == wxID_OK) {
267  transfForm->Destroy();
268  return true;
269  }
270  transfForm->Destroy();
271  return false;
272 }
273 
274 void Transformer::SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit)
275 {
276  if(nominalVoltage.size() == 1) {
277  m_electricalData.primaryNominalVoltage = nominalVoltage[0];
278  m_electricalData.primaryNominalVoltageUnit = nominalVoltageUnit[0];
279  } else if(nominalVoltage.size() == 2) {
280  m_electricalData.primaryNominalVoltage = nominalVoltage[0];
281  m_electricalData.primaryNominalVoltageUnit = nominalVoltageUnit[0];
282  m_electricalData.secondaryNominalVoltage = nominalVoltage[1];
283  m_electricalData.secondaryNominalVoltageUnit = nominalVoltageUnit[1];
284  }
285 }
286 
287 void Transformer::UpdatePowerFlowArrowsPosition()
288 {
289  std::vector<wxPoint2DDouble> edges;
290  switch(m_pfDirection) {
291  case PF_NONE: {
292  m_powerFlowArrow.clear();
293  } break;
294  case PF_BUS1_TO_BUS2: {
295  for(int i = 1; i < (int)m_pointList.size() - 1; i++) {
296  edges.push_back(m_pointList[i]);
297  }
298  } break;
299  case PF_BUS2_TO_BUS1: {
300  for(int i = (int)m_pointList.size() - 2; i > 0; i--) {
301  edges.push_back(m_pointList[i]);
302  }
303  } break;
304  default:
305  break;
306  }
307  CalculatePowerFlowPts(edges);
308 }
309 
310 void Transformer::RotateNode(Element* parent, bool clockwise)
311 {
312  double rotAngle = m_rotationAngle;
313  if(!clockwise) rotAngle = -m_rotationAngle;
314 
315  if(parent == m_parentList[0]) {
316  m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
317  } else if(parent == m_parentList[1]) {
318  m_pointList[m_pointList.size() - 1] = parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], rotAngle);
319  }
320  UpdateSwitchesPosition();
321  UpdatePowerFlowArrowsPosition();
322 }
323 
325 {
326  if(m_activeNodeID == 1 && parent == m_parentList[0]) return false;
327  if(m_activeNodeID == 2 && parent == m_parentList[1]) return false;
328 
329  if(parent && m_activeNodeID != 0) {
330  wxRect2DDouble nodeRect(0, 0, 0, 0);
331  if(m_activeNodeID == 1) {
332  nodeRect = wxRect2DDouble(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
333  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
334  }
335  if(m_activeNodeID == 2) {
336  nodeRect = wxRect2DDouble(m_pointList[m_pointList.size() - 1].m_x - 5.0 - m_borderSize,
337  m_pointList[m_pointList.size() - 1].m_y - 5.0 - m_borderSize,
338  10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
339  }
340 
341  if(parent->Intersects(nodeRect)) {
342  if(m_activeNodeID == 1) {
343  // Check if the user is trying to connect the same bus.
344  if(m_parentList[1] == parent) {
345  m_activeNodeID = 0;
346  return false;
347  }
348 
349  m_parentList[0] = parent;
350 
351  // Centralize the node on bus.
352  wxPoint2DDouble parentPt = parent->RotateAtPosition(
353  m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
354  parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
355  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
356  m_pointList[0] = parentPt;
357 
358  UpdateSwitchesPosition();
359  UpdatePowerFlowArrowsPosition();
360  return true;
361  }
362  if(m_activeNodeID == 2) {
363  if(m_parentList[0] == parent) {
364  m_activeNodeID = 0;
365  return false;
366  }
367 
368  m_parentList[1] = parent;
369 
370  wxPoint2DDouble parentPt =
371  parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], -parent->GetAngle());
372  parentPt.m_y = parent->GetPosition().m_y;
373  parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
374  m_pointList[m_pointList.size() - 1] = parentPt;
375 
376  UpdateSwitchesPosition();
377  UpdatePowerFlowArrowsPosition();
378  return true;
379  }
380  } else {
381  if(m_activeNodeID == 1) m_parentList[0] = NULL;
382  if(m_activeNodeID == 2) m_parentList[1] = NULL;
383  }
384  }
385  return false;
386 }
387 
389 {
390  m_pfDirection = pfDirection;
391  UpdatePowerFlowArrowsPosition();
392 }
393 
395 {
396  Transformer* copy = new Transformer();
397  *copy = *this;
398  return copy;
399 }
400 
401 wxString Transformer::GetTipText() const
402 {
403  wxString tipText = m_electricalData.name;
404  wxString primVoltage = StringFromDouble(m_electricalData.primaryNominalVoltage);
405  switch(m_electricalData.primaryNominalVoltageUnit) {
406  case UNIT_V: {
407  primVoltage += _(" V");
408  } break;
409  case UNIT_kV: {
410  primVoltage += _(" kV");
411  } break;
412  default:
413  break;
414  }
415  wxString secVoltage = StringFromDouble(m_electricalData.secondaryNominalVoltage);
416  switch(m_electricalData.secondaryNominalVoltageUnit) {
417  case UNIT_V: {
418  secVoltage += _(" V");
419  } break;
420  case UNIT_kV: {
421  secVoltage += _(" kV");
422  } break;
423  default:
424  break;
425  }
426 
427  tipText += "\n" + primVoltage + " / " + secVoltage;
428 
429  if(m_online) {
430  tipText += "\n";
431  int busNumber[2];
432  busNumber[0] = static_cast<Bus*>(m_parentList[0])->GetElectricalData().number + 1;
433  busNumber[1] = static_cast<Bus*>(m_parentList[1])->GetElectricalData().number + 1;
434 
435  tipText += _("\nP") + wxString::Format("(%d-%d) = ", busNumber[0], busNumber[1]) +
436  wxString::FromDouble(m_electricalData.powerFlow[0].real(), 5) + _(" p.u.");
437  tipText += _("\nQ") + wxString::Format("(%d-%d) = ", busNumber[0], busNumber[1]) +
438  wxString::FromDouble(m_electricalData.powerFlow[0].imag(), 5) + _(" p.u.");
439  tipText += _("\nP") + wxString::Format("(%d-%d) = ", busNumber[1], busNumber[0]) +
440  wxString::FromDouble(m_electricalData.powerFlow[1].real(), 5) + _(" p.u.");
441  tipText += _("\nQ") + wxString::Format("(%d-%d) = ", busNumber[1], busNumber[0]) +
442  wxString::FromDouble(m_electricalData.powerFlow[1].imag(), 5) + _(" p.u.");
443  }
444 
445  return tipText;
446 }
447 
448 TransformerElectricalData Transformer::GetPUElectricalData(double systemBasePower)
449 {
450  TransformerElectricalData data = m_electricalData;
451  double transformerBasePower = GetValueFromUnit(data.nominalPower, data.nominalPowerUnit);
452  double baseVoltage = 0.0;
453  if(data.baseVoltage == 0) {
454  baseVoltage = GetValueFromUnit(data.primaryNominalVoltage, data.primaryNominalVoltageUnit);
455  } else {
456  baseVoltage = GetValueFromUnit(data.secondaryNominalVoltage, data.secondaryNominalVoltageUnit);
457  }
458  double systemBaseImpedance = (baseVoltage * baseVoltage) / systemBasePower;
459  double transformerBaseImpedance = (baseVoltage * baseVoltage) / transformerBasePower;
460 
461  // Resistance
462  double r = data.resistance;
463  if(data.resistanceUnit == UNIT_PU) {
464  if(data.useTransformerPower) data.resistance = (r * transformerBaseImpedance) / systemBaseImpedance;
465  } else {
466  data.resistance = r / systemBaseImpedance;
467  }
468  data.resistanceUnit = UNIT_PU;
469 
470  // Indutive reactance
471  double x = data.indReactance;
472  if(data.indReactanceUnit == UNIT_PU) {
473  if(data.useTransformerPower) data.indReactance = (x * transformerBaseImpedance) / systemBaseImpedance;
474  } else {
475  data.indReactance = x / systemBaseImpedance;
476  }
477  data.indReactanceUnit = UNIT_PU;
478 
479  // Fault
480 
481  // Zero seq. resistance
482  double r0 = data.zeroResistance;
483  if(data.useTransformerPower) data.zeroResistance = (r0 * transformerBaseImpedance) / systemBaseImpedance;
484 
485  // Zero seq. ind. reactance
486  double x0 = data.zeroIndReactance;
487  if(data.useTransformerPower) data.zeroIndReactance = (x0 * transformerBaseImpedance) / systemBaseImpedance;
488 
489  // Primary ground resistance
490  double rgp = data.primaryGrndResistance;
491  if(data.useTransformerPower) data.primaryGrndResistance = (rgp * transformerBaseImpedance) / systemBaseImpedance;
492 
493  // Primary ground ind reactance
494  double xgp = data.primaryGrndReactance;
495  if(data.useTransformerPower) data.primaryGrndReactance = (xgp * transformerBaseImpedance) / systemBaseImpedance;
496 
497  // Secondary ground resistance
498  double rgs = data.secondaryGrndResistance;
499  if(data.useTransformerPower) data.secondaryGrndResistance = (rgs * transformerBaseImpedance) / systemBaseImpedance;
500 
501  // Secondary ground ind reactance
502  double xgs = data.secondaryGrndReactance;
503  if(data.useTransformerPower) data.secondaryGrndReactance = (xgs * transformerBaseImpedance) / systemBaseImpedance;
504 
505  if(!m_online) {
506  data.powerFlow[0] = std::complex<double>(0,0);
507  data.powerFlow[1] = std::complex<double>(0,0);
508  data.faultCurrent[0][0] = std::complex<double>(0,0);
509  data.faultCurrent[0][1] = std::complex<double>(0,0);
510  data.faultCurrent[0][2] = std::complex<double>(0,0);
511  data.faultCurrent[1][0] = std::complex<double>(0,0);
512  data.faultCurrent[1][1] = std::complex<double>(0,0);
513  data.faultCurrent[1][2] = std::complex<double>(0,0);
514  }
515 
516  return data;
517 }
double GetAngle() const
Get the element angle.
Definition: Element.h:201
+
virtual Element * GetCopy()
Get a the element copy.
+ + + +
virtual void Rotate(bool clockwise=true)
Rotate the element.
+
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
+
virtual wxString GetTipText() const
Get the tip text.
+ +
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition: Element.cpp:91
+
virtual bool Intersects(wxRect2DDouble rect) const =0
Check if the element&#39;s rect intersects other rect.
+
virtual void MoveNode(Element *parent, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
+ + +
virtual void Move(wxPoint2DDouble position)
Move the element other position.
+
Definition: Bus.h:45
+
virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection)
Set the direction of the power flow.
+
virtual void SetNominalVoltage(std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
Set nominal voltage of the element.
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
+
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+ +
virtual void RotateNode(Element *parent, bool clockwise)
Rotate a node.
+
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
+
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Transformer.cpp:88
+
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
+ + +
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Transformer.cpp:94
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Transformer.cpp:22
+
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
+
wxPoint2DDouble GetPosition() const
Get the element position.
Definition: Element.h:171
+ + + +
const GLdouble * GetRGBA() const
Get colour in RGBA.
Definition: Element.h:83
+
Definition: Branch.h:7
+
+
+ + + + diff --git a/docs/doxygen/html/_transformer_8h_source.html b/docs/doxygen/html/_transformer_8h_source.html index c0d7ae8..962b007 100644 --- a/docs/doxygen/html/_transformer_8h_source.html +++ b/docs/doxygen/html/_transformer_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Transformer.h Source File +Project/Transformer.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Transformer.h
-
1 #ifndef TRANSFORMER_H
2 #define TRANSFORMER_H
3 
4 #include "Branch.h"
5 
6 class TransformerForm;
7 
8 enum TransformerConnection {
9  GWYE_GWYE = 0,
10  WYE_GWYE,
11  GWYE_WYE,
12  WYE_WYE,
13  DELTA_GWYE,
14  DELTA_WYE,
15  GWYE_DELTA,
16  WYE_DELTA,
17  DELTA_DELTA
18 };
19 
21  // General
22  wxString name = "";
23  double primaryNominalVoltage = 138.0;
24  ElectricalUnit primaryNominalVoltageUnit = UNIT_kV;
25  double secondaryNominalVoltage = 138.0;
26  ElectricalUnit secondaryNominalVoltageUnit = UNIT_kV;
27  int baseVoltage = 0;
28  double nominalPower = 100.0;
29  ElectricalUnit nominalPowerUnit = UNIT_MVA;
30  double resistance = 0.0;
31  ElectricalUnit resistanceUnit = UNIT_PU;
32  double indReactance = 1.0;
33  ElectricalUnit indReactanceUnit = UNIT_PU;
34  TransformerConnection connection = GWYE_GWYE;
35  double turnsRatio = 1.0;
36  double phaseShift = 0.0;
37  bool useTransformerPower = false;
38 
39  // Power flow (p.u.)
40  std::complex<double> current[2] = { std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0) };
41  std::complex<double> powerFlow[2] = { std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0) };
42 
43  // Fault
44  double zeroResistance = 0.0;
45  double zeroIndReactance = 1.0;
46  double primaryGrndResistance = 0.0;
47  double primaryGrndReactance = 0.0;
48  double secondaryGrndResistance = 0.0;
49  double secondaryGrndReactance = 0.0;
50  // p.u. fault data
51  std::complex<double> faultCurrent[2][3];
52 };
53 
54 class Transformer : public Branch
55 {
56 public:
57  Transformer();
58  Transformer(wxString name);
59  virtual ~Transformer();
60 
61  virtual Element* GetCopy();
62  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
63  virtual bool Contains(wxPoint2DDouble position) const;
64  virtual void Draw(wxPoint2DDouble translation, double scale) const;
65  virtual bool Intersects(wxRect2DDouble rect) const;
66  virtual void Rotate(bool clockwise = true);
67  virtual void Move(wxPoint2DDouble position);
68  virtual void MoveNode(Element* parent, wxPoint2DDouble position);
69  virtual void StartMove(wxPoint2DDouble position);
70  virtual bool GetContextMenu(wxMenu& menu);
71  virtual wxString GetTipText() const;
72  virtual void RotateNode(Element* parent, bool clockwise);
73  virtual bool SetNodeParent(Element* parent);
74  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection);
75  virtual bool ShowForm(wxWindow* parent, Element* element);
76  virtual TransformerElectricalData GetElectricalData() const { return m_electricalData; }
77  virtual TransformerElectricalData GetPUElectricalData(double systemBasePower);
78  virtual void SetElectricaData(TransformerElectricalData electricalData) { m_electricalData = electricalData; }
79  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
80 
81 protected:
82  void UpdatePowerFlowArrowsPosition();
83  TransformerElectricalData m_electricalData;
84 };
85 
86 #endif // TRANSFORMER_H
Definition: Element.h:88
-
Definition: PowerElement.h:14
-
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
-
Definition: PowerElement.h:12
-
Definition: TransformerForm.h:9
-
Definition: PowerElement.h:22
-
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
-
Definition: Transformer.h:20
-
Definition: Transformer.h:54
-
Definition: Branch.h:7
+
1 #ifndef TRANSFORMER_H
2 #define TRANSFORMER_H
3 
4 #include "Branch.h"
5 
6 class TransformerForm;
7 
8 enum TransformerConnection {
9  GWYE_GWYE = 0,
10  WYE_GWYE,
11  GWYE_WYE,
12  WYE_WYE,
13  DELTA_GWYE,
14  DELTA_WYE,
15  GWYE_DELTA,
16  WYE_DELTA,
17  DELTA_DELTA
18 };
19 
21  // General
22  wxString name = "";
23  double primaryNominalVoltage = 138.0;
24  ElectricalUnit primaryNominalVoltageUnit = UNIT_kV;
25  double secondaryNominalVoltage = 138.0;
26  ElectricalUnit secondaryNominalVoltageUnit = UNIT_kV;
27  int baseVoltage = 0;
28  double nominalPower = 100.0;
29  ElectricalUnit nominalPowerUnit = UNIT_MVA;
30  double resistance = 0.0;
31  ElectricalUnit resistanceUnit = UNIT_PU;
32  double indReactance = 1.0;
33  ElectricalUnit indReactanceUnit = UNIT_PU;
34  TransformerConnection connection = GWYE_GWYE;
35  double turnsRatio = 1.0;
36  double phaseShift = 0.0;
37  bool useTransformerPower = false;
38 
39  // Power flow (p.u.)
40  std::complex<double> current[2] = { std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0) };
41  std::complex<double> powerFlow[2] = { std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0) };
42 
43  // Fault
44  double zeroResistance = 0.0;
45  double zeroIndReactance = 1.0;
46  double primaryGrndResistance = 0.0;
47  double primaryGrndReactance = 0.0;
48  double secondaryGrndResistance = 0.0;
49  double secondaryGrndReactance = 0.0;
50  // p.u. fault data
51  std::complex<double> faultCurrent[2][3];
52 };
53 
54 class Transformer : public Branch
55 {
56 public:
57  Transformer();
58  Transformer(wxString name);
59  virtual ~Transformer();
60 
61  virtual Element* GetCopy();
62  virtual bool AddParent(Element* parent, wxPoint2DDouble position);
63  virtual bool Contains(wxPoint2DDouble position) const;
64  virtual void Draw(wxPoint2DDouble translation, double scale) const;
65  virtual bool Intersects(wxRect2DDouble rect) const;
66  virtual void Rotate(bool clockwise = true);
67  virtual void Move(wxPoint2DDouble position);
68  virtual void MoveNode(Element* parent, wxPoint2DDouble position);
69  virtual void StartMove(wxPoint2DDouble position);
70  virtual bool GetContextMenu(wxMenu& menu);
71  virtual wxString GetTipText() const;
72  virtual void RotateNode(Element* parent, bool clockwise);
73  virtual bool SetNodeParent(Element* parent);
74  virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection);
75  virtual bool ShowForm(wxWindow* parent, Element* element);
76  virtual TransformerElectricalData GetElectricalData() const { return m_electricalData; }
77  virtual TransformerElectricalData GetPUElectricalData(double systemBasePower);
78  virtual void SetElectricaData(TransformerElectricalData electricalData) { m_electricalData = electricalData; }
79  virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
80 
81 protected:
82  void UpdatePowerFlowArrowsPosition();
83  TransformerElectricalData m_electricalData;
84 };
85 
86 #endif // TRANSFORMER_H
+ +
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+ + + +
PowerFlowDirection
Direction of power flow arrows.
Definition: PowerElement.h:61
+ + +
Definition: Branch.h:7
+
- + diff --git a/docs/doxygen/html/_transformer_form_8cpp_source.html b/docs/doxygen/html/_transformer_form_8cpp_source.html new file mode 100644 index 0000000..3613d48 --- /dev/null +++ b/docs/doxygen/html/_transformer_form_8cpp_source.html @@ -0,0 +1,107 @@ + + + + + + + +Project/TransformerForm.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
TransformerForm.cpp
+
+
+
1 #include "TransformerForm.h"
2 #include "SwitchingForm.h"
3 #include "Transformer.h"
4 
5 TransformerForm::TransformerForm(wxWindow* parent, Transformer* transformer) : TransformerFormBase(parent)
6 {
7  m_choiceResistance->SetString(1, L'\u03A9');
8  m_choiceReactance->SetString(1, L'\u03A9');
9 
10  //Reset connections choice labels (to be translated)
11  m_choiceConnection->SetString(0, _("Grounded Wye - Grounded Wye"));
12  m_choiceConnection->SetString(1, _("Wye - Grounded Wye"));
13  m_choiceConnection->SetString(2, _("Grounded Wye - Wye"));
14  m_choiceConnection->SetString(3, _("Wye - Wye"));
15  m_choiceConnection->SetString(4, _("Delta - Grounded Wye"));
16  m_choiceConnection->SetString(5, _("Delta - Wye"));
17  m_choiceConnection->SetString(6, _("Grounded Wye - Delta"));
18  m_choiceConnection->SetString(7, _("Wye - Delta"));
19  m_choiceConnection->SetString(8, _("Delta - Delta"));
20 
21  SetSize(GetBestSize());
22  Layout();
23 
24  m_parent = parent;
25  m_transformer = transformer;
26 
27  TransformerElectricalData data = transformer->GetElectricalData();
28 
29  m_textCtrlName->SetValue(data.name);
30 
31  wxString primVoltStr = Transformer::StringFromDouble(data.primaryNominalVoltage);
32  switch(data.primaryNominalVoltageUnit) {
33  case UNIT_V: {
34  primVoltStr += " V";
35  } break;
36  case UNIT_kV: {
37  primVoltStr += " kV";
38  } break;
39  default:
40  break;
41  }
42  wxString secVoltStr = Transformer::StringFromDouble(data.secondaryNominalVoltage);
43  switch(data.secondaryNominalVoltageUnit) {
44  case UNIT_V: {
45  secVoltStr += " V";
46  } break;
47  case UNIT_kV: {
48  secVoltStr += " kV";
49  } break;
50  default:
51  break;
52  }
53  m_staticTextNominalVoltageValue->SetLabel(wxString::Format("%s / %s", primVoltStr, secVoltStr));
54 
55  m_choiceBaseVoltage->SetString(0, primVoltStr);
56  m_choiceBaseVoltage->SetString(1, secVoltStr);
57  m_choiceBaseVoltage->SetSelection(data.baseVoltage);
58 
59  m_textCtrlNominalPower->SetValue(Transformer::StringFromDouble(data.nominalPower));
60  switch(data.nominalPowerUnit) {
61  case UNIT_VA: {
62  m_choiceNominalPower->SetSelection(0);
63  } break;
64  case UNIT_kVA: {
65  m_choiceNominalPower->SetSelection(1);
66  } break;
67  case UNIT_MVA: {
68  m_choiceNominalPower->SetSelection(2);
69  } break;
70  default:
71  break;
72  }
73 
74  m_textCtrlResistance->SetValue(Transformer::StringFromDouble(data.resistance));
75  switch(data.resistanceUnit) {
76  case UNIT_PU: {
77  m_choiceResistance->SetSelection(0);
78  } break;
79  case UNIT_OHM: {
80  m_choiceResistance->SetSelection(1);
81  } break;
82  default:
83  break;
84  }
85 
86  m_textCtrlReactance->SetValue(Transformer::StringFromDouble(data.indReactance));
87  switch(data.indReactanceUnit) {
88  case UNIT_PU: {
89  m_choiceReactance->SetSelection(0);
90  } break;
91  case UNIT_OHM: {
92  m_choiceReactance->SetSelection(1);
93  } break;
94  default:
95  break;
96  }
97 
98  m_choiceConnection->SetSelection(data.connection);
99 
100  m_textCtrlTurnRatio->SetValue(Transformer::StringFromDouble(data.turnsRatio));
101  m_textCtrlPhaseShift->SetValue(Transformer::StringFromDouble(data.phaseShift));
102 
103  m_checkUseTransformerPower->SetValue(data.useTransformerPower);
104 
105  m_textCtrlZeroResistance->SetValue(Transformer::StringFromDouble(data.zeroResistance));
106  m_textCtrlZeroReactance->SetValue(Transformer::StringFromDouble(data.zeroIndReactance));
107  m_textCtrlPrimResistance->SetValue(Transformer::StringFromDouble(data.primaryGrndResistance));
108  m_textCtrlPrimReactance->SetValue(Transformer::StringFromDouble(data.primaryGrndReactance));
109  m_textCtrlSecResistance->SetValue(Transformer::StringFromDouble(data.secondaryGrndResistance));
110  m_textCtrlSecReactance->SetValue(Transformer::StringFromDouble(data.secondaryGrndReactance));
111 }
112 
113 TransformerForm::~TransformerForm() {}
114 void TransformerForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
115 void TransformerForm::OnOKButtonClick(wxCommandEvent& event)
116 {
117  if(ValidateData()) EndModal(wxID_OK);
118 }
119 void TransformerForm::OnStabilityButtonClick(wxCommandEvent& event)
120 {
121  if(ValidateData()) {
122  SwitchingForm swForm(m_parent, m_transformer);
123  swForm.SetTitle(_("Transfomer: Switching"));
124  swForm.ShowModal();
125  EndModal(wxID_OK);
126  }
127 }
128 
129 bool TransformerForm::ValidateData()
130 {
131  TransformerElectricalData data = m_transformer->GetElectricalData();
132 
133  data.name = m_textCtrlName->GetValue();
134  data.baseVoltage = m_choiceBaseVoltage->GetSelection();
135 
136  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlNominalPower->GetValue(), data.nominalPower,
137  _("Value entered incorrectly in the field \"Nominal power\".")))
138  return false;
139  switch(m_choiceNominalPower->GetSelection()) {
140  case 0: {
141  data.nominalPowerUnit = UNIT_VA;
142  } break;
143  case 1: {
144  data.nominalPowerUnit = UNIT_kVA;
145  } break;
146  case 2: {
147  data.nominalPowerUnit = UNIT_MVA;
148  } break;
149  }
150 
151  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlResistance->GetValue(), data.resistance,
152  _("Value entered incorrectly in the field \"Resistance\".")))
153  return false;
154  switch(m_choiceResistance->GetSelection()) {
155  case 0: {
156  data.resistanceUnit = UNIT_PU;
157  } break;
158  case 1: {
159  data.resistanceUnit = UNIT_OHM;
160  } break;
161  }
162 
163  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlReactance->GetValue(), data.indReactance,
164  _("Value entered incorrectly in the field \"Indutive reactance\".")))
165  return false;
166  switch(m_choiceReactance->GetSelection()) {
167  case 0: {
168  data.indReactanceUnit = UNIT_PU;
169  } break;
170  case 1: {
171  data.indReactanceUnit = UNIT_OHM;
172  } break;
173  }
174 
175  switch(m_choiceConnection->GetSelection()) {
176  case 0: {
177  data.connection = GWYE_GWYE;
178  } break;
179  case 1: {
180  data.connection = WYE_GWYE;
181  } break;
182  case 2: {
183  data.connection = GWYE_WYE;
184  } break;
185  case 3: {
186  data.connection = WYE_WYE;
187  } break;
188  case 4: {
189  data.connection = DELTA_GWYE;
190  } break;
191  case 5: {
192  data.connection = DELTA_WYE;
193  } break;
194  case 6: {
195  data.connection = GWYE_DELTA;
196  } break;
197  case 7: {
198  data.connection = WYE_DELTA;
199  } break;
200  case 8: {
201  data.connection = DELTA_DELTA;
202  } break;
203  }
204 
205  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlTurnRatio->GetValue(), data.turnsRatio,
206  _("Value entered incorrectly in the field \"Turns ratio\".")))
207  return false;
208 
209  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPhaseShift->GetValue(), data.phaseShift,
210  _("Value entered incorrectly in the field \"Phase shift\".")))
211  return false;
212 
213  data.useTransformerPower = m_checkUseTransformerPower->GetValue();
214 
215  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance,
216  _("Value entered incorrectly in the field \"Zero sequence resistance\".")))
217  return false;
218 
219  if(!m_transformer->DoubleFromString(
220  m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroIndReactance,
221  _("Value entered incorrectly in the field \"Zero sequence indutive reactance\".")))
222  return false;
223 
224  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPrimResistance->GetValue(), data.primaryGrndResistance,
225  _("Value entered incorrectly in the field \"Primary ground resistance\".")))
226  return false;
227 
228  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPrimReactance->GetValue(), data.primaryGrndReactance,
229  _("Value entered incorrectly in the field \"Primary ground reactance\".")))
230  return false;
231 
232  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlSecResistance->GetValue(), data.secondaryGrndResistance,
233  _("Value entered incorrectly in the field \"Secondary ground resistance\".")))
234  return false;
235 
236  if(!m_transformer->DoubleFromString(m_parent, m_textCtrlSecReactance->GetValue(), data.secondaryGrndReactance,
237  _("Value entered incorrectly in the field \"Secondary ground reactance\".")))
238  return false;
239 
240  m_transformer->SetElectricaData(data);
241  return true;
242 }
+ + + + + + +
static wxString StringFromDouble(double value, int minDecimal=1)
Convert a double value to string.
Definition: Element.cpp:300
+ + + + +
+
+ + + + diff --git a/docs/doxygen/html/_transformer_form_8h_source.html b/docs/doxygen/html/_transformer_form_8h_source.html index 902be61..8bdc81d 100644 --- a/docs/doxygen/html/_transformer_form_8h_source.html +++ b/docs/doxygen/html/_transformer_form_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/TransformerForm.h Source File +Project/TransformerForm.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
TransformerForm.h
-
1 #ifndef TRANSFORMERFORM_H
2 #define TRANSFORMERFORM_H
3 
4 #include "ElementForm.h"
5 
6 class SwitchingForm;
7 class Transformer;
8 
10 {
11  public:
12  TransformerForm(wxWindow* parent, Transformer* transformer);
13  virtual ~TransformerForm();
14  bool ValidateData();
15 
16  protected:
17  virtual void OnCancelButtonClick(wxCommandEvent& event);
18  virtual void OnOKButtonClick(wxCommandEvent& event);
19  virtual void OnStabilityButtonClick(wxCommandEvent& event);
20 
21  wxWindow* m_parent = NULL;
22  Transformer* m_transformer = NULL;
23 };
24 #endif // TRANSFORMERFORM_H
Definition: SwitchingForm.h:8
-
Definition: TransformerForm.h:9
-
Definition: ElementForm.h:453
-
Definition: Transformer.h:54
+
1 #ifndef TRANSFORMERFORM_H
2 #define TRANSFORMERFORM_H
3 
4 #include "ElementForm.h"
5 
6 class SwitchingForm;
7 class Transformer;
8 
10 {
11  public:
12  TransformerForm(wxWindow* parent, Transformer* transformer);
13  virtual ~TransformerForm();
14  bool ValidateData();
15 
16  protected:
17  virtual void OnCancelButtonClick(wxCommandEvent& event);
18  virtual void OnOKButtonClick(wxCommandEvent& event);
19  virtual void OnStabilityButtonClick(wxCommandEvent& event);
20 
21  wxWindow* m_parent = NULL;
22  Transformer* m_transformer = NULL;
23 };
24 #endif // TRANSFORMERFORM_H
+ + +
+
- + diff --git a/docs/doxygen/html/_workspace_8cpp_source.html b/docs/doxygen/html/_workspace_8cpp_source.html new file mode 100644 index 0000000..d669d02 --- /dev/null +++ b/docs/doxygen/html/_workspace_8cpp_source.html @@ -0,0 +1,172 @@ + + + + + + + +Project/Workspace.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Workspace.cpp
+
+
+
1 #include "Workspace.h"
2 #include "Camera.h"
3 #include "Element.h"
4 //#include "Bus.h"
5 #include "Line.h"
6 #include "Transformer.h"
7 #include "SyncGenerator.h"
8 #include "IndMotor.h"
9 #include "SyncMotor.h"
10 #include "Load.h"
11 #include "Inductor.h"
12 #include "Capacitor.h"
13 #include "ElementDataObject.h"
14 
15 #include "Text.h"
16 
17 #include "PowerFlow.h"
18 #include "Fault.h"
19 #include "Electromechanical.h"
20 
21 #include "ElementPlotData.h"
22 #include "ChartView.h"
23 
24 #include "PropertiesData.h"
25 
26 // Workspace
27 Workspace::Workspace() : WorkspaceBase(NULL) {}
28 Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) : WorkspaceBase(parent)
29 {
30  m_timer->Start();
31  m_name = name;
32  m_statusBar = statusBar;
33  m_glContext = new wxGLContext(m_glCanvas);
34  m_camera = new Camera();
35  m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
36 
37  for(int i = 0; i < NUM_ELEMENTS; ++i) {
38  m_elementNumber[i] = 1;
39  }
40 
41  const int widths[4] = {-3, -1, 100, 100};
42  m_statusBar->SetStatusWidths(4, widths);
43 
44  m_properties = new PropertiesData();
45 }
46 
47 Workspace::~Workspace()
48 {
49  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
50  if(*it) delete *it;
51  }
52  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) {
53  if(*it) delete *it;
54  }
55  if(m_camera) delete m_camera;
56  if(m_glContext) delete m_glContext;
57  if(m_tipWindow) delete m_tipWindow;
58  if(m_properties) delete m_properties;
59 }
60 
61 void Workspace::OnPaint(wxPaintEvent& event)
62 {
63  wxPaintDC dc(m_glCanvas);
64  m_glContext->SetCurrent(*m_glCanvas);
65  SetViewport();
66 
67  // Set GLCanvas scale and translation.
68  glScaled(m_camera->GetScale(), m_camera->GetScale(), 0.0); // Scale
69  glTranslated(m_camera->GetTranslation().m_x, m_camera->GetTranslation().m_y, 0.0); // Translation
70 
71  // Draw
72 
73  // Elements
74  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
75  Element* element = *it;
76  element->Draw(m_camera->GetTranslation(), m_camera->GetScale());
77  }
78 
79  // Texts
80  for(auto it = m_textList.begin(); it != m_textList.end(); ++it) {
81  Text* text = *it;
82  text->Draw(m_camera->GetTranslation(), m_camera->GetScale());
83  }
84 
85  // Selection rectangle
86  glLineWidth(1.0);
87  glColor4d(0.0, 0.5, 1.0, 1.0);
88  glBegin(GL_LINE_LOOP);
89  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y);
90  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y + m_selectionRect.m_height);
91  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y + m_selectionRect.m_height);
92  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y);
93  glEnd();
94  glColor4d(0.0, 0.5, 1.0, 0.3);
95  glBegin(GL_QUADS);
96  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y);
97  glVertex2d(m_selectionRect.m_x, m_selectionRect.m_y + m_selectionRect.m_height);
98  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y + m_selectionRect.m_height);
99  glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y);
100  glEnd();
101 
102  glFlush(); // Sends all pending information directly to the GPU.
103  m_glCanvas->SwapBuffers();
104  event.Skip();
105 }
106 
107 void Workspace::SetViewport()
108 {
109  glClearColor(1.0, 1.0, 1.0, 1.0); // White background.
110  glClear(GL_COLOR_BUFFER_BIT);
111  glDisable(GL_DEPTH_TEST);
112  glDisable(GL_TEXTURE_2D);
113  glEnable(GL_COLOR_MATERIAL);
114  glEnable(GL_BLEND);
115  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
116  glEnable(GL_LINE_SMOOTH);
117 
118  double width = m_glCanvas->GetSize().x - 1;
119  double height = m_glCanvas->GetSize().y - 1;
120 
121  // Viewport fit the screen.
122  glViewport(0, 0, width, height);
123 
124  glMatrixMode(GL_PROJECTION);
125  glLoadIdentity();
126  gluOrtho2D(0.0, width, height, 0.0);
127 
128  glMatrixMode(GL_MODELVIEW);
129  glLoadIdentity();
130 }
131 
132 void Workspace::OnLeftClickDown(wxMouseEvent& event)
133 {
134  wxPoint clickPoint = event.GetPosition();
135  bool foundElement = false;
136  Element* newElement = NULL;
137  bool showNewElementForm = false;
138  bool clickOnSwitch = false;
139  if(m_mode == MODE_INSERT_TEXT || m_mode == MODE_PASTE || m_mode == MODE_DRAG_PASTE) {
140  m_mode = MODE_EDIT;
141  } else if(m_mode == MODE_INSERT || m_mode == MODE_DRAG_INSERT || m_mode == MODE_DRAG_INSERT_TEXT) {
142  // Get the last element inserted on the list.
143  newElement = *(m_elementList.end() - 1);
144  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
145  Element* element = *it;
146  // Clicked in any element.
147  if(element->Contains(m_camera->ScreenToWorld(clickPoint))) {
148  // Click at a bus.
149  if(typeid(*element) == typeid(Bus)) {
150  // Select the bus.
151  element->SetSelected();
152  foundElement = true; // Element found.
153  // Add the new element's parent. If the element being inserted returns true, back to
154  // edit mode.
155  if(newElement->AddParent(element, m_camera->ScreenToWorld(clickPoint))) {
156  ValidateElementsVoltages();
157  m_timer->Stop();
158  showNewElementForm = true;
159  m_mode = MODE_EDIT;
160  }
161  }
162  }
163  }
164  // The line element can have an indefined number of points.
165  if(!foundElement) {
166  if(typeid(*newElement) == typeid(Line)) {
167  newElement->AddPoint(m_camera->ScreenToWorld(clickPoint));
168  }
169  }
170  foundElement = true;
171  } else {
172  bool clickPickbox = false;
173  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
174  PowerElement* element = *it;
175  element->ResetPickboxes(); // Reset pickbox state.
176 
177  // Set movement initial position (not necessarily will be moved).
178  element->StartMove(m_camera->ScreenToWorld(clickPoint));
179 
180  // Click in selected element node.
181  if(element->NodeContains(m_camera->ScreenToWorld(clickPoint)) != 0 && element->IsSelected()) {
182  m_mode = MODE_MOVE_NODE;
183  m_disconnectedElement = true;
184  foundElement = true;
185  }
186 
187  // Click in an element.
188  else if(element->Contains(m_camera->ScreenToWorld(clickPoint))) {
189  if(!foundElement) {
190  // Select and show pickbox.
191  element->SetSelected();
192  element->ShowPickbox();
193  foundElement = true;
194  }
195  // If pickbox contains the click, move the pickbox
196  if(element->PickboxContains(m_camera->ScreenToWorld(clickPoint))) {
197  m_mode = MODE_MOVE_PICKBOX;
198  clickPickbox = true;
199  }
200  // If didn't found a pickbox, move the element
201  if(!clickPickbox) {
202  m_mode = MODE_MOVE_ELEMENT;
203  }
204  }
205 
206  // Click in a switch.
207  else if(element->SwitchesContains(m_camera->ScreenToWorld(clickPoint))) {
208  element->SetOnline(element->IsOnline() ? false : true);
209  clickOnSwitch = true;
210  }
211  }
212 
213  // Text element
214  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) {
215  Text* text = *it;
216 
217  text->StartMove(m_camera->ScreenToWorld(clickPoint));
218 
219  if(text->Contains(m_camera->ScreenToWorld(clickPoint))) {
220  if(!foundElement) {
221  text->SetSelected();
222  m_mode = MODE_MOVE_ELEMENT;
223  foundElement = true;
224  }
225  }
226  }
227  }
228 
229  if(!foundElement) {
230  m_mode = MODE_SELECTION_RECT;
231  m_startSelRect = m_camera->ScreenToWorld(clickPoint);
232  }
233 
234  Redraw();
235  UpdateStatusBar();
236 
237  if(showNewElementForm) {
238  if(newElement) {
239  newElement->ShowForm(this, newElement);
240  if(m_continuousCalc) RunStaticStudies();
241  }
242  }
243  if(clickOnSwitch && m_continuousCalc) RunStaticStudies();
244 
245  event.Skip();
246 }
247 
248 void Workspace::OnLeftDoubleClick(wxMouseEvent& event)
249 {
250  bool elementEdited = false;
251  bool clickOnSwitch = false;
252  bool redraw = false;
253 
254  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
255  PowerElement* element = *it;
256 
257  // Click in an element.
258  if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
259  bool elementIsBus = false;
260  Bus oldBus;
261  Bus* currentBus = NULL;
262  if((currentBus = dynamic_cast<Bus*>(element))) {
263  elementIsBus = true;
264  oldBus = *currentBus;
265  }
266  m_timer->Stop();
267  element->ShowForm(this, element);
268  elementEdited = true;
269  redraw = true;
270 
271  // If the edited element is a bus and was changed the rated voltage, this voltage must be
272  // propagated through the lines
273  if(elementIsBus) {
274  // The voltage was changed
275  if(oldBus.GetElectricalData().nominalVoltage != currentBus->GetElectricalData().nominalVoltage ||
276  oldBus.GetElectricalData().nominalVoltageUnit !=
277  currentBus->GetElectricalData().nominalVoltageUnit) {
278  // Check if the bus has line as child.
279  std::vector<Element*> childList = element->GetChildList();
280  for(auto itc = childList.begin(), itcEnd = childList.end(); itc != itcEnd; ++itc) {
281  Element* child = *itc;
282  if(typeid(*child) == typeid(Line)) {
283  wxMessageDialog msgDialog(this, _("Do you want to change the rated voltage of the path?"),
284  _("Warning"), wxYES_NO | wxCENTRE | wxICON_WARNING);
285  if(msgDialog.ShowModal() == wxID_YES)
286  ValidateBusesVoltages(element);
287  else {
288  auto data = currentBus->GetElectricalData();
289  data.nominalVoltage = oldBus.GetElectricalData().nominalVoltage;
290  data.nominalVoltageUnit = oldBus.GetElectricalData().nominalVoltageUnit;
291  currentBus->SetElectricalData(data);
292  }
293  break;
294  }
295  }
296  }
297  ValidateElementsVoltages();
298  }
299  }
300 
301  // Click in a switch.
302  else if(element->SwitchesContains(m_camera->ScreenToWorld(event.GetPosition()))) {
303  element->SetOnline(element->IsOnline() ? false : true);
304  clickOnSwitch = true;
305  }
306  }
307 
308  // Text element
309  for(auto it = m_textList.begin(); it != m_textList.end(); ++it) {
310  Text* text = *it;
311  if(text->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
312  text->ShowForm(this, GetElementList());
313  redraw = true;
314  }
315  }
316  if(elementEdited) {
317  UpdateTextElements();
318  if(m_continuousCalc) RunStaticStudies();
319  }
320  if(clickOnSwitch && m_continuousCalc) RunStaticStudies();
321 
322  if(redraw) Redraw();
323  m_timer->Start();
324 }
325 
326 void Workspace::OnRightClickDown(wxMouseEvent& event)
327 {
328  bool redraw = false;
329  if(m_mode == MODE_EDIT) {
330  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
331  Element* element = *it;
332  if(element->IsSelected()) {
333  // Show context menu.
334  if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
335  element->ShowPickbox(false);
336  wxMenu menu;
337  if(element->GetContextMenu(menu)) {
338  m_timer->Stop();
339  menu.SetClientData(element);
340  menu.Bind(wxEVT_COMMAND_MENU_SELECTED, &Workspace::OnPopupClick, this);
341  PopupMenu(&menu);
342  redraw = true;
343 
344  if(!menu.GetClientData()) break;
345  }
346  element->ResetPickboxes();
347  }
348  }
349  }
350  }
351  if(redraw) Redraw();
352  m_timer->Start();
353 }
354 
355 void Workspace::OnLeftClickUp(wxMouseEvent& event)
356 {
357  // This event (under certain conditions) deselects the elements and back to edit mode or select the elements using
358  // the selection rectangle.
359  bool foundPickbox = false;
360  bool findNewParent = false;
361  bool updateVoltages = false;
362  auto itnp = m_elementList.begin();
363 
364  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
365  Element* element = *it;
366 
367  // The user was moving a pickbox.
368  if(m_mode == MODE_MOVE_PICKBOX) {
369  // Catch only the element that have the pickbox shown.
370  if(element->IsPickboxShown()) {
371  // If the element is a bus, check if a node is outside.
372  if(typeid(*element) == typeid(Bus)) {
373  // Get all the bus children.
374  for(int i = 0; i < (int)m_elementList.size(); i++) {
375  Element* child = m_elementList[i];
376  for(int j = 0; j < (int)child->GetParentList().size(); j++) {
377  Element* parent = child->GetParentList()[j];
378  // The child have a parent that is the element.
379  if(parent == element) {
380  child->UpdateNodes();
381  m_disconnectedElement = true;
382  }
383  }
384  }
385  }
386  }
387  }
388 
389  if(m_mode == MODE_SELECTION_RECT) {
390  if(element->Intersects(m_selectionRect)) {
391  element->SetSelected();
392  } else if(!event.ControlDown()) {
393  element->SetSelected(false);
394  }
395  } else if(m_mode == MODE_MOVE_NODE) {
396  if(element->IsSelected()) {
397  for(int i = 0; i < (int)m_elementList.size(); i++) {
398  Element* parent = m_elementList[i];
399  if(typeid(*parent) == typeid(Bus)) {
400  if(element->SetNodeParent(parent)) {
401  parent->AddChild(element);
402  findNewParent = true;
403  itnp = it;
404  element->ResetNodes();
405  break;
406  }
407  }
408  }
409  // element->ResetNodes();
410  }
411  } else {
412  // Deselect
413  if(!event.ControlDown()) {
414  if(!element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
415  element->SetSelected(false);
416  }
417  }
418 
419  if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
420  foundPickbox = true;
421  } else {
422  element->ShowPickbox(false);
423  element->ResetPickboxes();
424  }
425  }
426  }
427 
428  // Text element
429  for(auto it = m_textList.begin(); it != m_textList.end(); it++) {
430  Text* text = *it;
431  if(m_mode == MODE_SELECTION_RECT) {
432  if(text->Intersects(m_selectionRect)) {
433  text->SetSelected();
434  } else if(!event.ControlDown()) {
435  text->SetSelected(false);
436  }
437  } else if(!event.ControlDown()) {
438  if(!text->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
439  text->SetSelected(false);
440  }
441  }
442  }
443 
444  if(findNewParent) {
445  std::rotate(itnp, itnp + 1, m_elementList.end());
446  updateVoltages = true;
447  }
448  if(!foundPickbox) {
449  SetCursor(wxCURSOR_ARROW);
450  }
451 
452  if(m_mode != MODE_INSERT) {
453  m_mode = MODE_EDIT;
454  }
455 
456  if(updateVoltages) {
457  ValidateElementsVoltages();
458  }
459 
460  if(m_continuousCalc && m_disconnectedElement) {
461  m_disconnectedElement = false;
462  RunStaticStudies();
463  }
464 
465  m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
466  Redraw();
467  UpdateStatusBar();
468 }
469 
470 void Workspace::OnMouseMotion(wxMouseEvent& event)
471 {
472  bool redraw = false;
473  switch(m_mode) {
474  case MODE_INSERT: {
475  Element* newElement = *(m_elementList.end() - 1); // Get the last element in the list.
476  newElement->SetPosition(m_camera->ScreenToWorld(event.GetPosition()));
477  redraw = true;
478  } break;
479 
480  case MODE_INSERT_TEXT: {
481  Text* newText = *(m_textList.end() - 1);
482  newText->SetPosition(m_camera->ScreenToWorld(event.GetPosition()));
483  redraw = true;
484  } break;
485 
486  case MODE_DRAG:
487  case MODE_DRAG_INSERT:
488  case MODE_DRAG_INSERT_TEXT:
489  case MODE_DRAG_PASTE: {
490  m_camera->SetTranslation(event.GetPosition());
491  redraw = true;
492  } break;
493 
494  case MODE_EDIT: {
495  bool foundPickbox = false;
496  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
497  Element* element = *it;
498  if(element->IsSelected()) {
499  // Show element pickbox (when it has) if the mouse is over the selected object.
500  if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
501  element->ShowPickbox();
502  redraw = true;
503 
504  // If the mouse is over a pickbox set correct mouse cursor.
505  if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
506  foundPickbox = true;
507  SetCursor(element->GetBestPickboxCursor());
508  } else if(!foundPickbox) {
509  SetCursor(wxCURSOR_ARROW);
510  element->ResetPickboxes();
511  }
512  } else if(!foundPickbox) {
513  if(element->IsPickboxShown()) redraw = true;
514 
515  element->ShowPickbox(false);
516  element->ResetPickboxes();
517  SetCursor(wxCURSOR_ARROW);
518  }
519  }
520  }
521  } break;
522 
523  case MODE_MOVE_NODE: {
524  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
525  Element* element = *it;
526  if(element->IsSelected()) {
527  element->MoveNode(NULL, m_camera->ScreenToWorld(event.GetPosition()));
528  redraw = true;
529  }
530  }
531  } break;
532 
533  case MODE_MOVE_PICKBOX: {
534  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
535  Element* element = *it;
536  if(element->IsSelected()) {
537  element->MovePickbox(m_camera->ScreenToWorld(event.GetPosition()));
538  redraw = true;
539  }
540  }
541  } break;
542 
543  case MODE_MOVE_ELEMENT:
544  case MODE_PASTE: {
545  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
546  Element* element = *it;
547  if(element->IsSelected()) {
548  element->Move(m_camera->ScreenToWorld(event.GetPosition()));
549  // Move child nodes
550  std::vector<Element*> childList = element->GetChildList();
551  for(auto it = childList.begin(), itEnd = childList.end(); it != itEnd; ++it) {
552  (*it)->MoveNode(element, m_camera->ScreenToWorld(event.GetPosition()));
553  }
554  redraw = true;
555  }
556  }
557  // Text element motion
558  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; it++) {
559  Text* text = *it;
560  if(text->IsSelected()) {
561  text->Move(m_camera->ScreenToWorld(event.GetPosition()));
562  redraw = true;
563  }
564  }
565  } break;
566 
567  case MODE_SELECTION_RECT: {
568  wxPoint2DDouble currentPos = m_camera->ScreenToWorld(event.GetPosition());
569  double x, y, w, h;
570  if(currentPos.m_x < m_startSelRect.m_x) {
571  x = currentPos.m_x;
572  w = m_startSelRect.m_x - currentPos.m_x;
573  } else {
574  x = m_startSelRect.m_x;
575  w = currentPos.m_x - m_startSelRect.m_x;
576  }
577  if(currentPos.m_y < m_startSelRect.m_y) {
578  y = currentPos.m_y;
579  h = m_startSelRect.m_y - currentPos.m_y;
580  } else {
581  y = m_startSelRect.m_y;
582  h = currentPos.m_y - m_startSelRect.m_y;
583  }
584 
585  m_selectionRect = wxRect2DDouble(x, y, w, h);
586  redraw = true;
587  } break;
588  }
589 
590  if(redraw) Redraw();
591  m_camera->UpdateMousePosition(event.GetPosition());
592  UpdateStatusBar();
593  m_timer->Start(); // Restart the timer.
594  event.Skip();
595 }
596 
597 void Workspace::OnMiddleDown(wxMouseEvent& event)
598 {
599  // Set to drag mode.
600  switch(m_mode) {
601  case MODE_INSERT: {
602  m_mode = MODE_DRAG_INSERT;
603  } break;
604  case MODE_INSERT_TEXT: {
605  m_mode = MODE_DRAG_INSERT_TEXT;
606  } break;
607  case MODE_PASTE: {
608  m_mode = MODE_DRAG_PASTE;
609  } break;
610  default: {
611  m_mode = MODE_DRAG;
612  } break;
613  }
614  m_camera->StartTranslation(m_camera->ScreenToWorld(event.GetPosition()));
615  UpdateStatusBar();
616  event.Skip();
617 }
618 
619 void Workspace::OnMiddleUp(wxMouseEvent& event)
620 {
621  switch(m_mode) {
622  case MODE_DRAG_INSERT: {
623  m_mode = MODE_INSERT;
624  } break;
625  case MODE_DRAG_INSERT_TEXT: {
626  m_mode = MODE_INSERT_TEXT;
627  } break;
628  case MODE_DRAG_PASTE: {
629  m_mode = MODE_PASTE;
630  } break;
631  case MODE_INSERT:
632  case MODE_INSERT_TEXT:
633  case MODE_PASTE: {
634  // Does nothing.
635  } break;
636  default: {
637  m_mode = MODE_EDIT;
638  } break;
639  }
640  UpdateStatusBar();
641  event.Skip();
642 }
643 
644 void Workspace::OnScroll(wxMouseEvent& event)
645 {
646  if(event.GetWheelRotation() > 0)
647  m_camera->SetScale(event.GetPosition(), +0.05);
648  else
649  m_camera->SetScale(event.GetPosition(), -0.05);
650 
651  UpdateStatusBar();
652  Redraw();
653 }
654 
655 void Workspace::OnKeyDown(wxKeyEvent& event)
656 {
657  bool insertingElement = false;
658  if(m_mode == MODE_INSERT || m_mode == MODE_INSERT_TEXT) insertingElement = true;
659 
660  char key = event.GetUnicodeKey();
661  if(key != WXK_NONE) {
662  switch(key) {
663  case WXK_ESCAPE: // Cancel operations.
664  {
665  if(m_mode == MODE_INSERT) {
666  m_elementList.pop_back(); // Removes the last element being inserted.
667  m_mode = MODE_EDIT;
668  Redraw();
669  } else if(m_mode == MODE_INSERT_TEXT) {
670  m_textList.pop_back();
671  m_mode = MODE_EDIT;
672  Redraw();
673  }
674  } break;
675  case WXK_DELETE: // Delete selected elements
676  {
677  DeleteSelectedElements();
678  } break;
679  case 'A': {
680  if(!insertingElement) {
681  Text* newBus = new Text(m_camera->ScreenToWorld(event.GetPosition()));
682  m_textList.push_back(newBus);
683  m_mode = MODE_INSERT_TEXT;
684  m_statusBar->SetStatusText(_("Insert Text: Click to insert, ESC to cancel."));
685  Redraw();
686  }
687  } break;
688  case 'F': {
689  if(event.GetModifiers() == wxMOD_SHIFT) {
690  Fit();
691  }
692  } break;
693  case 'R': // Rotate the selected elements.
694  {
695  RotateSelectedElements(event.GetModifiers() != wxMOD_SHIFT);
696  } break;
697  case 'B': // Insert a bus.
698  {
699  if(!insertingElement) {
700  Bus* newBus = new Bus(m_camera->ScreenToWorld(event.GetPosition()),
701  wxString::Format(_("Bus %d"), GetElementNumber(ID_BUS)));
702  IncrementElementNumber(ID_BUS);
703  m_elementList.push_back(newBus);
704  m_mode = MODE_INSERT;
705  m_statusBar->SetStatusText(_("Insert Bus: Click to insert, ESC to cancel."));
706  Redraw();
707  }
708  } break;
709  case 'L': {
710  if(!insertingElement) {
711  if(!event.ControlDown() && event.ShiftDown()) { // Insert a load.
712  Load* newLoad = new Load(wxString::Format(_("Load %d"), GetElementNumber(ID_LOAD)));
713  IncrementElementNumber(ID_LOAD);
714  m_elementList.push_back(newLoad);
715  m_mode = MODE_INSERT;
716  m_statusBar->SetStatusText(_("Insert Load: Click on a buses, ESC to cancel."));
717  } else if(!event.ControlDown() && !event.ShiftDown()) { // Insert a power line.
718  Line* newLine = new Line(wxString::Format(_("Line %d"), GetElementNumber(ID_LINE)));
719  IncrementElementNumber(ID_LINE);
720  m_elementList.push_back(newLine);
721  m_mode = MODE_INSERT;
722  m_statusBar->SetStatusText(_("Insert Line: Click on two buses, ESC to cancel."));
723  }
724  Redraw();
725  }
726  // Tests - Ctrl + Shift + L
727  if(event.ControlDown() && event.ShiftDown()) {
728  UpdateTextElements();
729  }
730  } break;
731  case 'T': // Insert a transformer.
732  {
733  if(!insertingElement) {
734  Transformer* newTransformer =
735  new Transformer(wxString::Format(_("Transformer %d"), GetElementNumber(ID_TRANSFORMER)));
736  IncrementElementNumber(ID_TRANSFORMER);
737  m_elementList.push_back(newTransformer);
738  m_mode = MODE_INSERT;
739  m_statusBar->SetStatusText(_("Insert Transformer: Click on two buses, ESC to cancel."));
740  Redraw();
741  }
742  } break;
743  case 'G': // Insert a generator.
744  {
745  if(!insertingElement) {
746  SyncGenerator* newGenerator =
747  new SyncGenerator(wxString::Format(_("Generator %d"), GetElementNumber(ID_SYNCGENERATOR)));
748  IncrementElementNumber(ID_SYNCGENERATOR);
749  m_elementList.push_back(newGenerator);
750  m_mode = MODE_INSERT;
751  m_statusBar->SetStatusText(_("Insert Generator: Click on a buses, ESC to cancel."));
752  Redraw();
753  }
754  } break;
755  case 'I': {
756  if(!insertingElement) {
757  if(event.GetModifiers() == wxMOD_SHIFT) { // Insert an inductor.
758  Inductor* newInductor =
759  new Inductor(wxString::Format(_("Inductor %d"), GetElementNumber(ID_INDUCTOR)));
760  IncrementElementNumber(ID_INDUCTOR);
761  m_elementList.push_back(newInductor);
762  m_mode = MODE_INSERT;
763  m_statusBar->SetStatusText(_("Insert Inductor: Click on a buses, ESC to cancel."));
764  } else // Insert an induction motor.
765  {
766  IndMotor* newIndMotor =
767  new IndMotor(wxString::Format(_("Induction motor %d"), GetElementNumber(ID_INDMOTOR)));
768  IncrementElementNumber(ID_INDMOTOR);
769  m_elementList.push_back(newIndMotor);
770  m_mode = MODE_INSERT;
771  m_statusBar->SetStatusText(_("Insert Induction Motor: Click on a buses, ESC to cancel."));
772  }
773  Redraw();
774  }
775  } break;
776  case 'K': // Insert a synchronous condenser.
777  {
778  if(!insertingElement) {
779  SyncMotor* newSyncCondenser =
780  new SyncMotor(wxString::Format(_("Synchronous condenser %d"), GetElementNumber(ID_SYNCMOTOR)));
781  IncrementElementNumber(ID_SYNCMOTOR);
782  m_elementList.push_back(newSyncCondenser);
783  m_mode = MODE_INSERT;
784  m_statusBar->SetStatusText(_("Insert Synchronous Condenser: Click on a buses, ESC to cancel."));
785  Redraw();
786  }
787  } break;
788  case 'C': {
789  if(!insertingElement) {
790  if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a capacitor.
791  Capacitor* newCapacitor =
792  new Capacitor(wxString::Format(_("Capacitor %d"), GetElementNumber(ID_CAPACITOR)));
793  IncrementElementNumber(ID_CAPACITOR);
794  m_elementList.push_back(newCapacitor);
795  m_mode = MODE_INSERT;
796  m_statusBar->SetStatusText(_("Insert Capacitor: Click on a buses, ESC to cancel."));
797  Redraw();
798  } else if(event.GetModifiers() == wxMOD_CONTROL) { // Copy.
799  CopySelection();
800  }
801  }
802  } break;
803  case 'V': {
804  if(!insertingElement) {
805  if(event.GetModifiers() == wxMOD_CONTROL) {
806  Paste();
807  }
808  }
809  } break;
810  default:
811  break;
812  }
813  }
814 
815  UpdateStatusBar();
816  event.Skip();
817 }
818 
819 void Workspace::UpdateStatusBar()
820 {
821  switch(m_mode) {
822  case MODE_DRAG: {
823  m_statusBar->SetStatusText(_("MODE: DRAG"), 1);
824  } break;
825 
826  case MODE_PASTE:
827  case MODE_DRAG_PASTE: {
828  m_statusBar->SetStatusText(_("MODE: PASTE"), 1);
829  }
830 
831  case MODE_INSERT:
832  case MODE_INSERT_TEXT:
833  case MODE_DRAG_INSERT:
834  case MODE_DRAG_INSERT_TEXT: {
835  m_statusBar->SetStatusText(_("MODE: INSERT"), 1);
836  } break;
837 
838  case MODE_MOVE_ELEMENT:
839  case MODE_MOVE_PICKBOX:
840  case MODE_MOVE_NODE:
841  case MODE_SELECTION_RECT:
842  case MODE_EDIT: {
843  m_statusBar->SetStatusText(wxT(""));
844  m_statusBar->SetStatusText(_("MODE: EDIT"), 1);
845  } break;
846  }
847 
848  m_statusBar->SetStatusText(wxString::Format(_("ZOOM: %d%%"), (int)(m_camera->GetScale() * 100.0)), 2);
849  m_statusBar->SetStatusText(
850  wxString::Format(wxT("X: %.1f Y: %.1f"), m_camera->GetMousePosition().m_x, m_camera->GetMousePosition().m_y),
851  3);
852 }
853 
854 void Workspace::OnPopupClick(wxCommandEvent& event)
855 {
856  wxMenu* menu = static_cast<wxMenu*>(event.GetEventObject());
857  Element* element = static_cast<Element*>(menu->GetClientData());
858  switch(event.GetId()) {
859  case ID_EDIT_ELEMENT: {
860  if(element->ShowForm(this, element)) UpdateTextElements();
861  } break;
862  case ID_LINE_ADD_NODE: {
863  Line* line = static_cast<Line*>(element);
864  line->AddNode(m_camera->GetMousePosition());
865  Redraw();
866  } break;
867  case ID_LINE_REMOVE_NODE: {
868  Line* line = static_cast<Line*>(element);
869  line->RemoveNode(m_camera->GetMousePosition());
870  Redraw();
871  } break;
872  case ID_ROTATE_CLOCK: {
873  element->Rotate();
874  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
875  Element* iElement = *it;
876  // Parent's element rotating...
877  for(int i = 0; i < (int)iElement->GetParentList().size(); i++) {
878  Element* parent = iElement->GetParentList()[i];
879  if(parent == element) {
880  iElement->RotateNode(parent);
881  }
882  }
883  }
884  Redraw();
885  } break;
886  case ID_ROTATE_COUNTERCLOCK: {
887  element->Rotate(false);
888  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
889  Element* iElement = *it;
890  // Parent's element rotating...
891  for(int i = 0; i < (int)iElement->GetParentList().size(); i++) {
892  Element* parent = iElement->GetParentList()[i];
893  if(parent == element) {
894  iElement->RotateNode(parent, false);
895  }
896  }
897  }
898  Redraw();
899  } break;
900  case ID_DELETE: {
901  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
902  Element* iElement = *it;
903 
904  if(element == iElement) {
905  // Remove child/parent.
906  std::vector<Element*> childList = element->GetChildList();
907  for(auto itc = childList.begin(), itEnd = childList.end(); itc != itEnd; ++itc) {
908  Element* child = *itc;
909  if(child) {
910  child->RemoveParent(element);
911  element->RemoveChild(child);
912  }
913  }
914  std::vector<Element*> parentList = element->GetParentList();
915  for(auto itp = parentList.begin(), itEnd = parentList.end(); itp != itEnd; ++itp) {
916  Element* parent = *itp;
917  if(parent) {
918  parent->RemoveChild(element);
919  }
920  }
921 
922  for(auto itt = m_textList.begin(); itt != m_textList.end(); ++itt) {
923  Text* text = *itt;
924  if(text->GetElement() == element) {
925  m_textList.erase(itt--);
926  if(text) delete text;
927  }
928  }
929 
930  m_elementList.erase(it);
931  if(element) delete element;
932  menu->SetClientData(NULL);
933  break;
934  }
935  }
936  } break;
937  }
938 }
939 
940 void Workspace::RotateSelectedElements(bool clockwise)
941 {
942  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
943  Element* element = *it;
944  // Parent's element rotating...
945  for(int i = 0; i < (int)element->GetParentList().size(); i++) {
946  Element* parent = element->GetParentList()[i];
947  if(parent) { // Check if parent is not null
948  if(parent->IsSelected()) {
949  element->RotateNode(parent, clockwise);
950  // Update the positions used on motion action, the element will not be necessarily
951  // moved.
952  element->StartMove(m_camera->GetMousePosition());
953  }
954  }
955  }
956  if(element->IsSelected()) {
957  element->Rotate(clockwise);
958  element->StartMove(m_camera->GetMousePosition());
959  }
960  }
961 
962  // Rotate text element
963  for(auto it = m_textList.begin(); it != m_textList.end(); it++) {
964  Text* text = *it;
965  if(text->IsSelected()) {
966  text->Rotate(clockwise);
967  text->StartMove(m_camera->GetMousePosition());
968  }
969  }
970  Redraw();
971 }
972 
973 void Workspace::DeleteSelectedElements()
974 {
975  // Don't set the end of the list at the loop's begin.
976  for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
977  Element* element = *it;
978 
979  if(element->IsSelected()) {
980  // Remove child/parent.
981  std::vector<Element*> childList = element->GetChildList();
982  for(auto itc = childList.begin(), itEnd = childList.end(); itc != itEnd; ++itc) {
983  Element* child = *itc;
984  if(child) {
985  child->RemoveParent(element);
986  element->RemoveChild(child);
987  }
988  }
989  std::vector<Element*> parentList = element->GetParentList();
990  for(auto itp = parentList.begin(), itEnd = parentList.end(); itp != itEnd; ++itp) {
991  Element* parent = *itp;
992  if(parent) {
993  parent->RemoveChild(element);
994  }
995  }
996 
997  for(auto itt = m_textList.begin(); itt != m_textList.end(); ++itt) {
998  Text* text = *itt;
999  if(text->GetElement() == element) {
1000  m_textList.erase(itt--);
1001  if(text) delete text;
1002  }
1003  }
1004 
1005  m_elementList.erase(it--);
1006  if(element) delete element;
1007  }
1008  }
1009 
1010  for(auto it = m_textList.begin(); it != m_textList.end(); ++it) {
1011  Text* text = *it;
1012  if(text->IsSelected()) {
1013  m_textList.erase(it--);
1014  if(text) delete text;
1015  }
1016  }
1017 
1018  Redraw();
1019 }
1020 
1021 bool Workspace::GetElementsCorners(wxPoint2DDouble& leftUpCorner,
1022  wxPoint2DDouble& rightDownCorner,
1023  std::vector<Element*> elementList)
1024 {
1025  if(elementList.size() == 0) return false;
1026 
1027  elementList[0]->CalculateBoundaries(leftUpCorner, rightDownCorner);
1028 
1029  for(auto it = elementList.begin() + 1, itEnd = elementList.end(); it != itEnd; it++) {
1030  Element* element = *it;
1031  wxPoint2DDouble leftUp;
1032  wxPoint2DDouble rightDown;
1033  element->CalculateBoundaries(leftUp, rightDown);
1034  if(leftUp.m_x < leftUpCorner.m_x) leftUpCorner.m_x = leftUp.m_x;
1035  if(leftUp.m_y < leftUpCorner.m_y) leftUpCorner.m_y = leftUp.m_y;
1036  if(rightDown.m_x > rightDownCorner.m_x) rightDownCorner.m_x = rightDown.m_x;
1037  if(rightDown.m_y > rightDownCorner.m_y) rightDownCorner.m_y = rightDown.m_y;
1038  }
1039  return true;
1040 }
1041 
1042 void Workspace::Fit()
1043 {
1044  wxPoint2DDouble leftUpCorner(0, 0);
1045  wxPoint2DDouble rightDownCorner(0, 0);
1046  std::vector<Element*> elementList = GetElementList();
1047  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) {
1048  elementList.push_back(*it);
1049  }
1050 
1051  if(!GetElementsCorners(leftUpCorner, rightDownCorner, elementList)) return;
1052  wxPoint2DDouble middleCoords = (leftUpCorner + rightDownCorner) / 2.0;
1053 
1054  int width = 0.0;
1055  int height = 0.0;
1056  GetSize(&width, &height);
1057 
1058  double scaleX = double(width) / (rightDownCorner.m_x - leftUpCorner.m_x);
1059  double scaleY = double(height) / (rightDownCorner.m_y - leftUpCorner.m_y);
1060 
1061  double scale = scaleX < scaleY ? scaleX : scaleY;
1062  if(scale > m_camera->GetZoomMax()) scale = m_camera->GetZoomMax();
1063  if(scale < m_camera->GetZoomMin()) scale = m_camera->GetZoomMin();
1064 
1065  m_camera->SetScale(scale);
1066 
1067  m_camera->StartTranslation(middleCoords);
1068  m_camera->SetTranslation(wxPoint2DDouble(width / 2, height / 2));
1069  Redraw();
1070 }
1071 
1072 void Workspace::ValidateBusesVoltages(Element* initialBus)
1073 {
1074  double nominalVoltage = static_cast<Bus*>(initialBus)->GetElectricalData().nominalVoltage;
1075  ElectricalUnit nominalVoltageUnit = static_cast<Bus*>(initialBus)->GetElectricalData().nominalVoltageUnit;
1076 
1077  for(auto it = m_elementList.begin(); it != m_elementList.end(); it++) {
1078  Element* child = *it;
1079 
1080  if(typeid(*child) == typeid(Line)) {
1081  if(child->GetParentList()[0] && child->GetParentList()[1]) {
1082  BusElectricalData data1 = static_cast<Bus*>(child->GetParentList()[0])->GetElectricalData();
1083  BusElectricalData data2 = static_cast<Bus*>(child->GetParentList()[1])->GetElectricalData();
1084 
1085  if(data1.nominalVoltage != data2.nominalVoltage ||
1086  data1.nominalVoltageUnit != data2.nominalVoltageUnit) {
1087  data1.nominalVoltage = nominalVoltage;
1088  data2.nominalVoltage = nominalVoltage;
1089  data1.nominalVoltageUnit = nominalVoltageUnit;
1090  data2.nominalVoltageUnit = nominalVoltageUnit;
1091 
1092  static_cast<Bus*>(child->GetParentList()[0])->SetElectricalData(data1);
1093  static_cast<Bus*>(child->GetParentList()[1])->SetElectricalData(data2);
1094 
1095  it = m_elementList.begin(); // Restart search.
1096  }
1097  }
1098  }
1099  }
1100 
1101  // ValidateElementsVoltages();
1102 }
1103 
1104 void Workspace::ValidateElementsVoltages()
1105 {
1106  for(auto it = m_elementList.begin(); it != m_elementList.end(); it++) {
1107  PowerElement* child = *it;
1108 
1109  std::vector<double> nominalVoltage;
1110  std::vector<ElectricalUnit> nominalVoltageUnit;
1111  for(int i = 0; i < (int)child->GetParentList().size(); i++) {
1112  Bus* parent = static_cast<Bus*>(child->GetParentList()[i]);
1113  if(parent) {
1114  nominalVoltage.push_back(parent->GetElectricalData().nominalVoltage);
1115  nominalVoltageUnit.push_back(parent->GetElectricalData().nominalVoltageUnit);
1116  }
1117  }
1118  child->SetNominalVoltage(nominalVoltage, nominalVoltageUnit);
1119  }
1120 }
1121 
1122 bool Workspace::RunPowerFlow()
1123 {
1124  PowerFlow pf(GetElementList());
1125  bool result = pf.RunGaussSeidel();
1126  if(!result) {
1127  wxMessageDialog msgDialog(this, pf.GetErrorMessage(), _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
1128  msgDialog.ShowModal();
1129  }
1130 
1131  UpdateTextElements();
1132  Redraw();
1133 
1134  return result;
1135 }
1136 
1137 void Workspace::UpdateTextElements()
1138 {
1139  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) {
1140  Text* text = *it;
1141  text->UpdateText(m_properties->GetSimulationPropertiesData().basePower);
1142  }
1143 }
1144 
1145 void Workspace::CopySelection()
1146 {
1147  UpdateElementsID();
1148  std::vector<Element*> selectedElements;
1149  // The buses need to be numerated to associate the child's parents to the copies.
1150  int busNumber = 0;
1151  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
1152  Element* element = *it;
1153  if(typeid(*element) == typeid(Bus)) {
1154  Bus* bus = static_cast<Bus*>(element);
1155  auto data = bus->GetElectricalData();
1156  data.number = busNumber;
1157  bus->SetElectricalData(data);
1158  busNumber++;
1159  }
1160  if(element->IsSelected()) {
1161  selectedElements.push_back(element);
1162  }
1163  }
1164  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) {
1165  Text* text = *it;
1166  if(text->IsSelected()) {
1167  selectedElements.push_back(text);
1168  }
1169  }
1170  ElementDataObject* dataObject = new ElementDataObject(selectedElements);
1171  wxTheClipboard->SetData(dataObject);
1172  wxTheClipboard->Close();
1173 }
1174 
1175 bool Workspace::Paste()
1176 {
1177  if(wxTheClipboard->Open()) {
1178  ElementDataObject dataObject;
1179 
1180  if(wxTheClipboard->IsSupported(wxDataFormat("PSPCopy"))) {
1181  if(!wxTheClipboard->GetData(dataObject)) {
1182  wxMessageDialog dialog(this, _("It was not possible to paste from clipboard."), _("Error"),
1183  wxOK | wxCENTER | wxICON_ERROR, wxDefaultPosition);
1184  dialog.ShowModal();
1185  wxTheClipboard->Close();
1186  return false;
1187  }
1188  } else {
1189  wxTheClipboard->Close();
1190  return false;
1191  }
1192  wxTheClipboard->Close();
1193 
1194  UnselectAll();
1195 
1196  std::vector<Element*> pastedElements;
1197  ElementsLists* elementsLists = dataObject.GetElementsLists();
1198 
1199  // Paste buses (parents).
1200  auto parentList = elementsLists->parentList;
1201  std::vector<Bus*> pastedBusList; // To set new parents;
1202  for(auto it = parentList.begin(), itEnd = parentList.end(); it != itEnd; ++it) {
1203  Element* copy = (*it)->GetCopy();
1204  if(copy) {
1205  pastedElements.push_back(copy);
1206  pastedBusList.push_back(static_cast<Bus*>(copy));
1207  m_elementList.push_back(static_cast<PowerElement*>(copy));
1208  }
1209  }
1210 
1211  // Paste other elements.
1212  auto elementLists = elementsLists->elementList;
1213  for(auto it = elementLists.begin(), itEnd = elementLists.end(); it != itEnd; ++it) {
1214  Element* copy = (*it)->GetCopy();
1215  if(copy) {
1216  // Check if is text element
1217  if(Text* text = dynamic_cast<Text*>(copy)) {
1218  // Check if element associated with the text exists.
1219  bool elementExist = false;
1220  for(int i = 0; i < (int)m_elementList.size(); i++) {
1221  if(text->GetElement() == m_elementList[i]) {
1222  elementExist = true;
1223  break;
1224  }
1225  }
1226  if(elementExist) {
1227  pastedElements.push_back(copy);
1228  m_textList.push_back(text);
1229  }
1230  } else {
1231  // Change the parent if copied, otherwise remove it.
1232  for(int j = 0; j < (int)copy->GetParentList().size(); j++) {
1233  Bus* currentParent = static_cast<Bus*>(copy->GetParentList()[j]);
1234  if(currentParent) {
1235  int parentID = currentParent->GetID();
1236  bool parentCopied = false;
1237  for(int k = 0; k < (int)pastedBusList.size(); k++) {
1238  Bus* newParent = pastedBusList[k];
1239  if(parentID == newParent->GetID()) {
1240  parentCopied = true;
1241  copy->ReplaceParent(currentParent, newParent);
1242  break;
1243  }
1244  }
1245  if(!parentCopied) copy->RemoveParent(currentParent);
1246  }
1247  }
1248 
1249  pastedElements.push_back(copy);
1250  m_elementList.push_back(static_cast<PowerElement*>(copy));
1251  }
1252  }
1253  }
1254 
1255  // Update buses childs
1256  for(auto it = pastedBusList.begin(), itEnd = pastedBusList.end(); it != itEnd; ++it) {
1257  Bus* bus = *it;
1258  std::vector<Element*> childList = bus->GetChildList();
1259  for(auto it = childList.begin(), itEnd = childList.end(); it != itEnd; ++it) {
1260  Element* currentChild = *it;
1261  int childID = currentChild->GetID();
1262  bool childCopied = false;
1263  for(int i = 0; i < (int)pastedElements.size(); i++) {
1264  Element* newChild = pastedElements[i];
1265  if(childID == newChild->GetID()) {
1266  childCopied = true;
1267  bus->ReplaceChild(currentChild, newChild);
1268  break;
1269  }
1270  }
1271  if(!childCopied) bus->RemoveChild(currentChild);
1272  }
1273  }
1274 
1275  // Move elements (and nodes) to the mouse position.
1276  // The start position it's the center of the pasted objects.
1277  wxPoint2DDouble leftUpCorner, rightDownCorner;
1278  GetElementsCorners(leftUpCorner, rightDownCorner, pastedElements);
1279  wxPoint2DDouble startPosition = (leftUpCorner + rightDownCorner) / 2.0;
1280  for(auto it = pastedElements.begin(), itEnd = pastedElements.end(); it != itEnd; ++it) {
1281  Element* element = *it;
1282  element->StartMove(startPosition);
1283  element->Move(m_camera->GetMousePosition());
1284  for(int i = 0; i < (int)element->GetParentList().size(); i++) {
1285  Element* parent = element->GetParentList()[i];
1286  element->MoveNode(parent, m_camera->GetMousePosition());
1287  }
1288  }
1289  } else {
1290  wxMessageDialog dialog(this, _("It was not possible to paste from clipboard."), _("Error"),
1291  wxOK | wxCENTER | wxICON_ERROR, wxDefaultPosition);
1292  dialog.ShowModal();
1293  return false;
1294  }
1295 
1296  UpdateElementsID();
1297  m_mode = MODE_PASTE;
1298  m_statusBar->SetStatusText(_("Click to paste."));
1299  UpdateStatusBar();
1300  Redraw();
1301  return true;
1302 }
1303 
1304 void Workspace::UnselectAll()
1305 {
1306  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; it++) {
1307  Element* element = *it;
1308  element->SetSelected(false);
1309  }
1310  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; it++) {
1311  Text* text = *it;
1312  text->SetSelected(false);
1313  }
1314 }
1315 
1316 void Workspace::UpdateElementsID()
1317 {
1318  int id = 0;
1319  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
1320  Element* element = *it;
1321  element->SetID(id);
1322  id++;
1323  }
1324  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) {
1325  Text* text = *it;
1326  text->SetID(id);
1327  id++;
1328  }
1329 }
1330 void Workspace::OnTimer(wxTimerEvent& event)
1331 {
1332  if(m_tipWindow) {
1333  m_tipWindow->Close();
1334  m_tipWindow = NULL;
1335  }
1336  if(m_mode == MODE_EDIT) {
1337  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
1338  Element* element = *it;
1339  if(element->Contains(m_camera->GetMousePosition())) {
1340  wxString tipText = element->GetTipText();
1341  if(!tipText.IsEmpty()) {
1342  m_tipWindow = new wxTipWindow(this, tipText, 10000, &m_tipWindow);
1343  // Creates a very tiny bounding rect to remove the tip on any mouse movement.
1344  m_tipWindow->SetBoundingRect(wxRect(wxGetMousePosition(), wxSize(1, 1)));
1345  break;
1346  }
1347  }
1348  }
1349  }
1350 
1351  m_timer->Stop();
1352 }
1353 
1354 void Workspace::SetTextList(std::vector<Text*> textList)
1355 {
1356  m_textList.clear();
1357  for(auto it = textList.begin(), itEnd = textList.end(); it != itEnd; ++it) m_textList.push_back(*it);
1358 
1359  UpdateTextElements();
1360 }
1361 
1362 void Workspace::SetElementList(std::vector<Element*> elementList)
1363 {
1364  m_elementList.clear();
1365  for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it)
1366  m_elementList.push_back(static_cast<PowerElement*>(*it));
1367 }
1368 
1369 void Workspace::OnIdle(wxIdleEvent& event)
1370 {
1371  // TODO: Find other solution to text displayed wrong on opened file.
1372  if(m_justOpened) {
1373  m_justOpened = false;
1374  UpdateTextElements();
1375  Redraw();
1376  }
1377 }
1378 
1379 std::vector<Element*> Workspace::GetAllElements() const
1380 {
1381  std::vector<Element*> allElements;
1382 
1383  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) allElements.push_back(*it);
1384  for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) allElements.push_back(*it);
1385 
1386  return allElements;
1387 }
1388 
1389 bool Workspace::RunFault()
1390 {
1391  Fault fault(GetElementList());
1392  bool result = fault.RunFaultCalculation(100e6);
1393  if(!result) {
1394  wxMessageDialog msgDialog(this, fault.GetErrorMessage(), _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
1395  msgDialog.ShowModal();
1396  }
1397 
1398  UpdateTextElements();
1399  Redraw();
1400 
1401  return result;
1402 }
1403 
1404 std::vector<Element*> Workspace::GetElementList() const
1405 {
1406  std::vector<Element*> elementList;
1407  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) elementList.push_back(*it);
1408  return elementList;
1409 }
1410 
1411 bool Workspace::RunSCPower()
1412 {
1413  Fault fault(GetElementList());
1414  bool result = fault.RunSCPowerCalcutation(100e6);
1415  if(!result) {
1416  wxMessageDialog msgDialog(this, fault.GetErrorMessage(), _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
1417  msgDialog.ShowModal();
1418  }
1419 
1420  UpdateTextElements();
1421  Redraw();
1422 
1423  return result;
1424 }
1425 
1426 bool Workspace::RunStability()
1427 {
1428  // Run power flow before stability.
1429  RunPowerFlow();
1430 
1431  Electromechanical stability(this, GetElementList(), m_properties->GetSimulationPropertiesData());
1432  bool result = stability.RunStabilityCalculation();
1433  if(!result) {
1434  wxMessageDialog msgDialog(this, stability.GetErrorMessage(), _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
1435  msgDialog.ShowModal();
1436  }
1437  m_stabilityTimeVector.clear();
1438  m_stabilityTimeVector = stability.GetTimeVector();
1439 
1440  // Run power flow after stability.
1441  RunPowerFlow();
1442 
1443  wxMessageDialog msgDialog(this, _("Do you wish to open the stability graphics?"), _("Question"),
1444  wxYES_NO | wxCENTRE | wxICON_QUESTION);
1445  if(msgDialog.ShowModal() == wxID_YES) {
1446  std::vector<ElementPlotData> plotDataList;
1447  for(auto it = m_elementList.begin(), itEnd = m_elementList.end(); it != itEnd; ++it) {
1448  PowerElement* element = *it;
1449  ElementPlotData plotData;
1450  if(element->GetPlotData(plotData)) plotDataList.push_back(plotData);
1451  }
1452  ElementPlotData tests(_("Error"), ElementPlotData::CT_TEST);
1453  tests.AddData(stability.m_wErrorVector, _("Speed error"));
1454  tests.AddData(stability.m_numItVector, _("Number iterations"));
1455  plotDataList.push_back(tests);
1456 
1457  ChartView* cView = new ChartView(this, plotDataList, m_stabilityTimeVector);
1458  cView->Show();
1459  }
1460 
1461  return result;
1462 }
1463 void Workspace::OnMiddleDoubleClick(wxMouseEvent& event)
1464 {
1465  Fit();
1466  event.Skip();
1467 }
1468 
1469 bool Workspace::RunStaticStudies()
1470 {
1471  bool pfStatus, faultStatus, scStatus;
1472  pfStatus = faultStatus = scStatus = false;
1473 
1474  pfStatus = RunPowerFlow();
1475 
1476  if(m_properties->GetSimulationPropertiesData().faultAfterPowerFlow) {
1477  if(pfStatus) faultStatus = RunFault();
1478  } else {
1479  faultStatus = true;
1480  }
1481 
1482  if(m_properties->GetSimulationPropertiesData().scPowerAfterPowerFlow) {
1483  if(pfStatus) scStatus = RunSCPower();
1484  } else {
1485  scStatus = true;
1486  }
1487 
1488  if(pfStatus && faultStatus && scStatus) return true;
1489 
1490  return false;
1491 }
virtual bool Contains(wxPoint2DDouble position) const
Checks if the element contains a position.
Definition: Text.cpp:30
+
Definition: Text.h:48
+
void ShowPickbox(bool showPickbox=true)
Set if the pickbox is shown.
Definition: Element.h:141
+ +
virtual void Move(wxPoint2DDouble position)
Move the element other position.
Definition: Element.cpp:107
+
virtual void AddPoint(wxPoint2DDouble point)
Add point to the list of points that connect the element to the bus.
Definition: Element.h:321
+ +
void SetSelected(bool selected=true)
Set element selection.
Definition: Element.h:123
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Text.cpp:145
+
virtual std::vector< Element * > GetParentList() const
Get the parent list.
Definition: Element.h:517
+ +
virtual std::vector< Element * > GetChildList() const
Get the Child list.
Definition: Element.h:523
+
virtual void ResetPickboxes()
Remove the pickboxes.
Definition: Element.h:406
+ +
virtual bool NodeContains(wxPoint2DDouble position)
Check if a node contains a point. If contains, set the attributes related to node movement...
Definition: Element.h:348
+
bool SetOnline(bool online=true)
Set if the element is online or offline.
Definition: Element.cpp:218
+
virtual bool PickboxContains(wxPoint2DDouble position)
Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be c...
Definition: Element.h:389
+
virtual void UpdateNodes()
Update the nodes according to the parents. If a parent is removed, use this method.
Definition: Element.h:353
+
virtual void SetNominalVoltage(std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
Set nominal voltage of the element.
+ +
virtual void RemoveChild(Element *child)
Remove a child from the list.
Definition: Element.cpp:335
+ +
virtual bool Intersects(wxRect2DDouble rect) const
Check if the element&#39;s rect intersects other rect.
Definition: Text.cpp:75
+ +
virtual bool Intersects(wxRect2DDouble rect) const =0
Check if the element&#39;s rect intersects other rect.
+
virtual void MoveNode(Element *parent, wxPoint2DDouble position)
Move a node. StartMove(wxPoint2DDouble position) before start moving.
Definition: Element.h:341
+
Definition: Camera.h:6
+
ElectricalUnit
Electrical units.
Definition: PowerElement.h:11
+
virtual void CalculateBoundaries(wxPoint2DDouble &leftUp, wxPoint2DDouble &rightBottom) const
Calculate the element boundaries.
Definition: Element.cpp:243
+
virtual bool AddParent(Element *parent, wxPoint2DDouble position)
Add a parent to the element. This method must be used on power elements that connect to a bus...
Definition: Element.h:234
+ +
Class to manage color of OpenGL.
+ +
virtual void ReplaceChild(Element *oldChild, Element *newChild)
Replace a child from the list.
Definition: Element.cpp:343
+ +
Definition: Bus.h:45
+
virtual void Draw(wxPoint2DDouble translation, double scale) const
Draw the element.
Definition: Element.h:302
+
virtual bool GetPlotData(ElementPlotData &plotData)
Fill the plot data.
Definition: PowerElement.h:181
+
bool IsPickboxShown() const
Checks if the pickbox is shown.
Definition: Element.h:213
+
bool IsOnline() const
Checks if the element is online or offline.
Definition: Element.h:219
+ +
virtual wxString GetTipText() const
Get the tip text.
Definition: Element.h:295
+ +
void SetPosition(const wxPoint2DDouble position)
Set the element position and update the rectangle.
Definition: Element.cpp:10
+
virtual void Rotate(bool clockwise=true)
Rotate the element.
Definition: Element.h:308
+ +
Calculate the fault of the system and update the elements data.
+
virtual void AddChild(Element *child)
Add a child to the child list.
Definition: Element.cpp:333
+
Definition: Line.h:35
+ +
Definition: Load.h:23
+
virtual bool GetContextMenu(wxMenu &menu)
Get the element contex menu.
Definition: Element.h:315
+ +
virtual bool ShowForm(wxWindow *parent, Element *element)
Show element data form.
Definition: Element.h:547
+
virtual void MovePickbox(wxPoint2DDouble position)
Move the pickbox.
Definition: Element.h:395
+ + + +
virtual wxCursor GetBestPickboxCursor() const
Get the best cursor to shown to the user when the mouse is above a pickbox.
Definition: Element.h:401
+
Definition: Fault.h:13
+ +
bool IsSelected() const
Checks if the element is selected.
Definition: Element.h:189
+
virtual void RotateNode(Element *parent, bool clockwise=true)
Rotate a node.
Definition: Element.h:381
+
virtual void SetID(int id)
Set the element ID.
Definition: Element.h:264
+
virtual bool SetNodeParent(Element *parent)
Set a perent to the node. If all conditions are met, a new parent are added to the element and the po...
Definition: Element.h:361
+
virtual bool SwitchesContains(wxPoint2DDouble position) const
Check if switch contains position.
+
virtual int GetID() const
Get the element ID.
Definition: Element.h:270
+
virtual void ReplaceParent(Element *oldParent, Element *newParent)
Replace a parent.
Definition: Element.cpp:326
+
virtual void RemoveParent(Element *parent)
Remove a parent.
Definition: Element.h:367
+ +
virtual bool Contains(wxPoint2DDouble position) const =0
Checks if the element contains a position.
+
virtual void StartMove(wxPoint2DDouble position)
Update the element attributes related to the movement.
Definition: Element.cpp:101
+ + +
virtual void ResetNodes()
Remove the active nodes.
Definition: Element.h:411
+
virtual Element * GetCopy()
Get a the element copy.
Definition: Element.h:258
+ +
+
+ + + + diff --git a/docs/doxygen/html/_workspace_8h_source.html b/docs/doxygen/html/_workspace_8h_source.html index 1757d23..dc73f4f 100644 --- a/docs/doxygen/html/_workspace_8h_source.html +++ b/docs/doxygen/html/_workspace_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/Workspace.h Source File +Project/Workspace.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Workspace.h
-
1 #ifndef WORKSPACE_H
2 #define WORKSPACE_H
3 
4 #include <GL/gl.h>
5 #include <GL/glu.h>
6 #include <wx/dcclient.h>
7 #include <wx/msgdlg.h>
8 #include <wx/statusbr.h>
9 #include <wx/clipbrd.h>
10 #include <wx/tipwin.h>
11 
12 #include "WorkspaceBase.h"
13 #include "Bus.h"
14 
15 #include "ControlEditor.h"
16 
17 class Camera;
18 class Element;
19 // class Bus;
20 class Line;
21 class Transformer;
22 class SyncGenerator;
23 class IndMotor;
24 class SyncMotor;
25 class Load;
26 class Inductor;
27 class Capacitor;
28 class ElementDataObject;
29 
30 class Text;
31 
32 class PowerFlow;
33 class Fault;
34 class Electromechanical;
35 
36 class ElementPlotData;
37 class ChartView;
38 
39 class PropertiesData;
40 
41 enum ElementID {
42  ID_BUS = 0,
43  ID_LINE,
44  ID_TRANSFORMER,
45  ID_SYNCGENERATOR,
46  ID_INDMOTOR,
47  ID_SYNCMOTOR,
48  ID_LOAD,
49  ID_CAPACITOR,
50  ID_INDUCTOR,
51  ID_TEXT,
52 
53  NUM_ELEMENTS
54 };
55 
56 class Workspace : public WorkspaceBase
57 {
58 public:
59  enum WorkspaceMode {
60  MODE_EDIT = 0,
61  MODE_MOVE_ELEMENT,
62  MODE_MOVE_PICKBOX,
63  MODE_MOVE_NODE,
64  MODE_DRAG,
65  MODE_DRAG_INSERT,
66  MODE_DRAG_INSERT_TEXT,
67  MODE_INSERT,
68  MODE_INSERT_TEXT,
69  MODE_SELECTION_RECT,
70  MODE_PASTE,
71  MODE_DRAG_PASTE
72  };
73 
74  Workspace();
75  Workspace(wxWindow* parent, wxString name = wxEmptyString, wxStatusBar* statusBar = NULL);
76  ~Workspace();
77 
78  wxString GetName() const { return m_name; }
79  std::vector<Element*> GetElementList() const;
80  std::vector<Text*> GetTextList() const { return m_textList; }
81  std::vector<Element*> GetAllElements() const;
82  WorkspaceMode GetWorkspaceMode() const { return m_mode; }
83  Camera* GetCamera() const { return m_camera; }
84 
85  void CopySelection();
86  bool Paste();
87 
88  wxFileName GetSavedPath() const { return m_savedPath; }
89 
90  void SetName(wxString name) { m_name = name; }
91  void SetElementList(std::vector<Element*> elementList);
92  void SetTextList(std::vector<Text*> textList);
93  void SetStatusBarText(wxString text) { m_statusBar->SetStatusText(text); }
94  void SetWorkspaceMode(WorkspaceMode mode) { m_mode = mode; }
95  void SetSavedPath(wxFileName savedPath) { m_savedPath = savedPath; }
96  void SetJustOpened(bool justOpened) { m_justOpened = justOpened; }
97 
98  void Redraw() { m_glCanvas->Refresh(); }
99  void RotateSelectedElements(bool clockwise = true);
100  void DeleteSelectedElements();
101  bool GetElementsCorners(wxPoint2DDouble& leftUpCorner,
102  wxPoint2DDouble& rightDownCorner,
103  std::vector<Element*> elementList);
104  void Fit();
105  void UnselectAll();
106 
107  void ValidateBusesVoltages(Element* initialBus);
108  void ValidateElementsVoltages();
109 
110  void UpdateElementsID();
111  void UpdateTextElements();
112 
113  int GetElementNumber(ElementID elementID) { return m_elementNumber[elementID]; }
114  void IncrementElementNumber(ElementID elementID) { m_elementNumber[elementID]++; }
115 
116  PropertiesData* GetProperties() const { return m_properties; }
117 
118  std::vector<double> GetStabilityTimeVector() const { return m_stabilityTimeVector; }
119 
120  bool IsContinuousCalculationActive() const { return m_continuousCalc; }
121  void SetContinuousCalculationActive(bool value = true) { m_continuousCalc = value; }
122 
123  bool RunPowerFlow();
124  bool RunFault();
125  bool RunSCPower();
126  bool RunStaticStudies();
127  bool RunStability();
128 
129 protected:
130  virtual void OnMiddleDoubleClick(wxMouseEvent& event);
131  virtual void OnIdle(wxIdleEvent& event);
132  virtual void OnTimer(wxTimerEvent& event);
133  virtual void OnLeftDoubleClick(wxMouseEvent& event);
134  virtual void OnRightClickDown(wxMouseEvent& event);
135  virtual void OnLeftClickUp(wxMouseEvent& event);
136  virtual void OnScroll(wxMouseEvent& event);
137  virtual void OnMiddleDown(wxMouseEvent& event);
138  virtual void OnMiddleUp(wxMouseEvent& event);
139  virtual void OnMouseMotion(wxMouseEvent& event);
140  virtual void OnKeyDown(wxKeyEvent& event);
141  virtual void OnLeftClickDown(wxMouseEvent& event);
142  virtual void OnPaint(wxPaintEvent& event);
143  virtual void OnPopupClick(wxCommandEvent& event);
144 
145  void SetViewport();
146  void UpdateStatusBar();
147 
148  wxGLContext* m_glContext = NULL;
149  wxStatusBar* m_statusBar = NULL;
150  Camera* m_camera = NULL;
151  wxTipWindow* m_tipWindow = NULL;
152  wxString m_name;
153 
154  WorkspaceMode m_mode = MODE_EDIT;
155 
156  std::vector<PowerElement*> m_elementList;
157  int m_elementNumber[NUM_ELEMENTS];
158 
159  std::vector<Text*> m_textList;
160 
161  wxFileName m_savedPath;
162 
163  wxRect2DDouble m_selectionRect;
164  wxPoint2DDouble m_startSelRect;
165 
166  PropertiesData* m_properties = NULL;
167 
168  std::vector<double> m_stabilityTimeVector;
169 
170  bool m_continuousCalc = false;
171  bool m_disconnectedElement = false;
172  bool m_justOpened = false;
173 };
174 
175 #endif // WORKSPACE_H
Definition: Text.h:48
-
Definition: PropertiesData.h:40
-
Definition: Element.h:88
-
Definition: PowerFlow.h:9
-
Definition: SyncGenerator.h:110
-
Definition: Camera.h:6
-
Definition: WorkspaceBase.h:35
-
Definition: ElementPlotData.h:39
-
Definition: ElementDataObject.h:12
-
Definition: Line.h:35
-
Definition: Electromechanical.h:10
-
Definition: Load.h:23
-
Definition: ChartView.h:16
-
Definition: SyncMotor.h:110
-
Definition: Fault.h:13
-
Definition: IndMotor.h:17
-
Definition: Capacitor.h:14
-
Definition: Inductor.h:14
-
Definition: Workspace.h:56
-
Definition: Transformer.h:54
+
1 #ifndef WORKSPACE_H
2 #define WORKSPACE_H
3 
4 #include <GL/gl.h>
5 #include <GL/glu.h>
6 #include <wx/dcclient.h>
7 #include <wx/msgdlg.h>
8 #include <wx/statusbr.h>
9 #include <wx/clipbrd.h>
10 #include <wx/tipwin.h>
11 
12 #include "WorkspaceBase.h"
13 #include "Bus.h"
14 
15 #include "ControlEditor.h"
16 
17 class Camera;
18 class Element;
19 // class Bus;
20 class Line;
21 class Transformer;
22 class SyncGenerator;
23 class IndMotor;
24 class SyncMotor;
25 class Load;
26 class Inductor;
27 class Capacitor;
28 class ElementDataObject;
29 
30 class Text;
31 
32 class PowerFlow;
33 class Fault;
34 class Electromechanical;
35 
36 class ElementPlotData;
37 class ChartView;
38 
39 class PropertiesData;
40 
41 enum ElementID {
42  ID_BUS = 0,
43  ID_LINE,
44  ID_TRANSFORMER,
45  ID_SYNCGENERATOR,
46  ID_INDMOTOR,
47  ID_SYNCMOTOR,
48  ID_LOAD,
49  ID_CAPACITOR,
50  ID_INDUCTOR,
51  ID_TEXT,
52 
53  NUM_ELEMENTS
54 };
55 
56 class Workspace : public WorkspaceBase
57 {
58 public:
59  enum WorkspaceMode {
60  MODE_EDIT = 0,
61  MODE_MOVE_ELEMENT,
62  MODE_MOVE_PICKBOX,
63  MODE_MOVE_NODE,
64  MODE_DRAG,
65  MODE_DRAG_INSERT,
66  MODE_DRAG_INSERT_TEXT,
67  MODE_INSERT,
68  MODE_INSERT_TEXT,
69  MODE_SELECTION_RECT,
70  MODE_PASTE,
71  MODE_DRAG_PASTE
72  };
73 
74  Workspace();
75  Workspace(wxWindow* parent, wxString name = wxEmptyString, wxStatusBar* statusBar = NULL);
76  ~Workspace();
77 
78  wxString GetName() const { return m_name; }
79  std::vector<Element*> GetElementList() const;
80  std::vector<Text*> GetTextList() const { return m_textList; }
81  std::vector<Element*> GetAllElements() const;
82  WorkspaceMode GetWorkspaceMode() const { return m_mode; }
83  Camera* GetCamera() const { return m_camera; }
84 
85  void CopySelection();
86  bool Paste();
87 
88  wxFileName GetSavedPath() const { return m_savedPath; }
89 
90  void SetName(wxString name) { m_name = name; }
91  void SetElementList(std::vector<Element*> elementList);
92  void SetTextList(std::vector<Text*> textList);
93  void SetStatusBarText(wxString text) { m_statusBar->SetStatusText(text); }
94  void SetWorkspaceMode(WorkspaceMode mode) { m_mode = mode; }
95  void SetSavedPath(wxFileName savedPath) { m_savedPath = savedPath; }
96  void SetJustOpened(bool justOpened) { m_justOpened = justOpened; }
97 
98  void Redraw() { m_glCanvas->Refresh(); }
99  void RotateSelectedElements(bool clockwise = true);
100  void DeleteSelectedElements();
101  bool GetElementsCorners(wxPoint2DDouble& leftUpCorner,
102  wxPoint2DDouble& rightDownCorner,
103  std::vector<Element*> elementList);
104  void Fit();
105  void UnselectAll();
106 
107  void ValidateBusesVoltages(Element* initialBus);
108  void ValidateElementsVoltages();
109 
110  void UpdateElementsID();
111  void UpdateTextElements();
112 
113  int GetElementNumber(ElementID elementID) { return m_elementNumber[elementID]; }
114  void IncrementElementNumber(ElementID elementID) { m_elementNumber[elementID]++; }
115 
116  PropertiesData* GetProperties() const { return m_properties; }
117 
118  std::vector<double> GetStabilityTimeVector() const { return m_stabilityTimeVector; }
119 
120  bool IsContinuousCalculationActive() const { return m_continuousCalc; }
121  void SetContinuousCalculationActive(bool value = true) { m_continuousCalc = value; }
122 
123  bool RunPowerFlow();
124  bool RunFault();
125  bool RunSCPower();
126  bool RunStaticStudies();
127  bool RunStability();
128 
129 protected:
130  virtual void OnMiddleDoubleClick(wxMouseEvent& event);
131  virtual void OnIdle(wxIdleEvent& event);
132  virtual void OnTimer(wxTimerEvent& event);
133  virtual void OnLeftDoubleClick(wxMouseEvent& event);
134  virtual void OnRightClickDown(wxMouseEvent& event);
135  virtual void OnLeftClickUp(wxMouseEvent& event);
136  virtual void OnScroll(wxMouseEvent& event);
137  virtual void OnMiddleDown(wxMouseEvent& event);
138  virtual void OnMiddleUp(wxMouseEvent& event);
139  virtual void OnMouseMotion(wxMouseEvent& event);
140  virtual void OnKeyDown(wxKeyEvent& event);
141  virtual void OnLeftClickDown(wxMouseEvent& event);
142  virtual void OnPaint(wxPaintEvent& event);
143  virtual void OnPopupClick(wxCommandEvent& event);
144 
145  void SetViewport();
146  void UpdateStatusBar();
147 
148  wxGLContext* m_glContext = NULL;
149  wxStatusBar* m_statusBar = NULL;
150  Camera* m_camera = NULL;
151  wxTipWindow* m_tipWindow = NULL;
152  wxString m_name;
153 
154  WorkspaceMode m_mode = MODE_EDIT;
155 
156  std::vector<PowerElement*> m_elementList;
157  int m_elementNumber[NUM_ELEMENTS];
158 
159  std::vector<Text*> m_textList;
160 
161  wxFileName m_savedPath;
162 
163  wxRect2DDouble m_selectionRect;
164  wxPoint2DDouble m_startSelRect;
165 
166  PropertiesData* m_properties = NULL;
167 
168  std::vector<double> m_stabilityTimeVector;
169 
170  bool m_continuousCalc = false;
171  bool m_disconnectedElement = false;
172  bool m_justOpened = false;
173 };
174 
175 #endif // WORKSPACE_H
Definition: Text.h:48
+ + + + +
Definition: Camera.h:6
+ + + +
Definition: Line.h:35
+ +
Definition: Load.h:23
+ + +
Definition: Fault.h:13
+ + + + +
+
- + diff --git a/docs/doxygen/html/_workspace_base_8cpp_source.html b/docs/doxygen/html/_workspace_base_8cpp_source.html new file mode 100644 index 0000000..5e94377 --- /dev/null +++ b/docs/doxygen/html/_workspace_base_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/WorkspaceBase.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WorkspaceBase.cpp
+
+
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: Workspace.wxcp
4 // Do not modify this file by hand!
6 
7 #include "WorkspaceBase.h"
8 
9 
10 // Declare the bitmap loading function
11 extern void wxC52C4InitBitmapResources();
12 
13 static bool bBitmapLoaded = false;
14 
15 
16 WorkspaceBase::WorkspaceBase(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
17  : wxPanel(parent, id, pos, size, style)
18 {
19  if ( !bBitmapLoaded ) {
20  // We need to initialise the default bitmap handler
21  wxXmlResource::Get()->AddHandler(new wxBitmapXmlHandler);
22  wxC52C4InitBitmapResources();
23  bBitmapLoaded = true;
24  }
25 
26  wxBoxSizer* boxSizer_lvl_1_1 = new wxBoxSizer(wxVERTICAL);
27  this->SetSizer(boxSizer_lvl_1_1);
28 
29  int *m_glCanvasAttr = new int[ 5 ];
30  m_glCanvasAttr[0] = WX_GL_SAMPLE_BUFFERS;
31  m_glCanvasAttr[1] = 1;
32  m_glCanvasAttr[2] = WX_GL_SAMPLES;
33  m_glCanvasAttr[3] = 4;
34  m_glCanvasAttr[4] = 0;
35  m_glCanvas = new wxGLCanvas(this, wxID_ANY, m_glCanvasAttr, wxDefaultPosition, wxDLG_UNIT(this, wxSize(-1,-1)), 0);
36  wxDELETEA( m_glCanvasAttr );
37 
38  boxSizer_lvl_1_1->Add(m_glCanvas, 1, wxEXPAND, WXC_FROM_DIP(5));
39 
40  m_timer = new wxTimer;
41  m_timer->Start(1500, false);
42 
43  SetName(wxT("WorkspaceBase"));
44  SetSize(500,300);
45  if (GetSizer()) {
46  GetSizer()->Fit(this);
47  }
48  // Connect events
49  m_glCanvas->Connect(wxEVT_PAINT, wxPaintEventHandler(WorkspaceBase::OnPaint), NULL, this);
50  m_glCanvas->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(WorkspaceBase::OnLeftClickDown), NULL, this);
51  m_glCanvas->Connect(wxEVT_KEY_DOWN, wxKeyEventHandler(WorkspaceBase::OnKeyDown), NULL, this);
52  m_glCanvas->Connect(wxEVT_MOTION, wxMouseEventHandler(WorkspaceBase::OnMouseMotion), NULL, this);
53  m_glCanvas->Connect(wxEVT_MIDDLE_DOWN, wxMouseEventHandler(WorkspaceBase::OnMiddleDown), NULL, this);
54  m_glCanvas->Connect(wxEVT_MIDDLE_UP, wxMouseEventHandler(WorkspaceBase::OnMiddleUp), NULL, this);
55  m_glCanvas->Connect(wxEVT_LEFT_UP, wxMouseEventHandler(WorkspaceBase::OnLeftClickUp), NULL, this);
56  m_glCanvas->Connect(wxEVT_MOUSEWHEEL, wxMouseEventHandler(WorkspaceBase::OnScroll), NULL, this);
57  m_glCanvas->Connect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(WorkspaceBase::OnRightClickDown), NULL, this);
58  m_glCanvas->Connect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(WorkspaceBase::OnLeftDoubleClick), NULL, this);
59  m_glCanvas->Connect(wxEVT_IDLE, wxIdleEventHandler(WorkspaceBase::OnIdle), NULL, this);
60  m_glCanvas->Connect(wxEVT_MIDDLE_DCLICK, wxMouseEventHandler(WorkspaceBase::OnMiddleDoubleClick), NULL, this);
61  m_timer->Connect(wxEVT_TIMER, wxTimerEventHandler(WorkspaceBase::OnTimer), NULL, this);
62 
63 }
64 
65 WorkspaceBase::~WorkspaceBase()
66 {
67  m_glCanvas->Disconnect(wxEVT_PAINT, wxPaintEventHandler(WorkspaceBase::OnPaint), NULL, this);
68  m_glCanvas->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(WorkspaceBase::OnLeftClickDown), NULL, this);
69  m_glCanvas->Disconnect(wxEVT_KEY_DOWN, wxKeyEventHandler(WorkspaceBase::OnKeyDown), NULL, this);
70  m_glCanvas->Disconnect(wxEVT_MOTION, wxMouseEventHandler(WorkspaceBase::OnMouseMotion), NULL, this);
71  m_glCanvas->Disconnect(wxEVT_MIDDLE_DOWN, wxMouseEventHandler(WorkspaceBase::OnMiddleDown), NULL, this);
72  m_glCanvas->Disconnect(wxEVT_MIDDLE_UP, wxMouseEventHandler(WorkspaceBase::OnMiddleUp), NULL, this);
73  m_glCanvas->Disconnect(wxEVT_LEFT_UP, wxMouseEventHandler(WorkspaceBase::OnLeftClickUp), NULL, this);
74  m_glCanvas->Disconnect(wxEVT_MOUSEWHEEL, wxMouseEventHandler(WorkspaceBase::OnScroll), NULL, this);
75  m_glCanvas->Disconnect(wxEVT_RIGHT_DOWN, wxMouseEventHandler(WorkspaceBase::OnRightClickDown), NULL, this);
76  m_glCanvas->Disconnect(wxEVT_LEFT_DCLICK, wxMouseEventHandler(WorkspaceBase::OnLeftDoubleClick), NULL, this);
77  m_glCanvas->Disconnect(wxEVT_IDLE, wxIdleEventHandler(WorkspaceBase::OnIdle), NULL, this);
78  m_glCanvas->Disconnect(wxEVT_MIDDLE_DCLICK, wxMouseEventHandler(WorkspaceBase::OnMiddleDoubleClick), NULL, this);
79  m_timer->Disconnect(wxEVT_TIMER, wxTimerEventHandler(WorkspaceBase::OnTimer), NULL, this);
80 
81  m_timer->Stop();
82  wxDELETE( m_timer );
83 
84 }
+
+ + + + diff --git a/docs/doxygen/html/_workspace_base_8h_source.html b/docs/doxygen/html/_workspace_base_8h_source.html index 9b5400a..97ba9e9 100644 --- a/docs/doxygen/html/_workspace_base_8h_source.html +++ b/docs/doxygen/html/_workspace_base_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/WorkspaceBase.h Source File +Project/WorkspaceBase.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
WorkspaceBase.h
-
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: Workspace.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_WORKSPACE_BASE_CLASSES_H
8 #define _PSP_PROJECT_WORKSPACE_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/panel.h>
14 #include <wx/artprov.h>
15 #include <wx/sizer.h>
16 #include <wx/glcanvas.h>
17 #include <wx/timer.h>
18 #if wxVERSION_NUMBER >= 2900
19 #include <wx/persist.h>
20 #include <wx/persist/toplevel.h>
21 #include <wx/persist/bookctrl.h>
22 #include <wx/persist/treebook.h>
23 #endif
24 
25 #ifdef WXC_FROM_DIP
26 #undef WXC_FROM_DIP
27 #endif
28 #if wxVERSION_NUMBER >= 3100
29 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
30 #else
31 #define WXC_FROM_DIP(x) x
32 #endif
33 
34 
35 class WorkspaceBase : public wxPanel
36 {
37 protected:
38  wxGLCanvas* m_glCanvas;
39  wxTimer* m_timer;
40 
41 protected:
42  virtual void OnPaint(wxPaintEvent& event) { event.Skip(); }
43  virtual void OnLeftClickDown(wxMouseEvent& event) { event.Skip(); }
44  virtual void OnKeyDown(wxKeyEvent& event) { event.Skip(); }
45  virtual void OnMouseMotion(wxMouseEvent& event) { event.Skip(); }
46  virtual void OnMiddleDown(wxMouseEvent& event) { event.Skip(); }
47  virtual void OnMiddleUp(wxMouseEvent& event) { event.Skip(); }
48  virtual void OnLeftClickUp(wxMouseEvent& event) { event.Skip(); }
49  virtual void OnScroll(wxMouseEvent& event) { event.Skip(); }
50  virtual void OnRightClickDown(wxMouseEvent& event) { event.Skip(); }
51  virtual void OnLeftDoubleClick(wxMouseEvent& event) { event.Skip(); }
52  virtual void OnIdle(wxIdleEvent& event) { event.Skip(); }
53  virtual void OnMiddleDoubleClick(wxMouseEvent& event) { event.Skip(); }
54  virtual void OnTimer(wxTimerEvent& event) { event.Skip(); }
55 
56 public:
57  wxGLCanvas* GetGlCanvas() { return m_glCanvas; }
58  wxTimer* GetTimer() { return m_timer; }
59  WorkspaceBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(500,300), long style = wxTAB_TRAVERSAL);
60  virtual ~WorkspaceBase();
61 };
62 
63 #endif
Definition: WorkspaceBase.h:35
+
1 // This file was auto-generated by codelite's wxCrafter Plugin
3 // wxCrafter project file: Workspace.wxcp
4 // Do not modify this file by hand!
6 
7 #ifndef _PSP_PROJECT_WORKSPACE_BASE_CLASSES_H
8 #define _PSP_PROJECT_WORKSPACE_BASE_CLASSES_H
9 
10 #include <wx/settings.h>
11 #include <wx/xrc/xmlres.h>
12 #include <wx/xrc/xh_bmp.h>
13 #include <wx/panel.h>
14 #include <wx/artprov.h>
15 #include <wx/sizer.h>
16 #include <wx/glcanvas.h>
17 #include <wx/timer.h>
18 #if wxVERSION_NUMBER >= 2900
19 #include <wx/persist.h>
20 #include <wx/persist/toplevel.h>
21 #include <wx/persist/bookctrl.h>
22 #include <wx/persist/treebook.h>
23 #endif
24 
25 #ifdef WXC_FROM_DIP
26 #undef WXC_FROM_DIP
27 #endif
28 #if wxVERSION_NUMBER >= 3100
29 #define WXC_FROM_DIP(x) wxWindow::FromDIP(x, NULL)
30 #else
31 #define WXC_FROM_DIP(x) x
32 #endif
33 
34 
35 class WorkspaceBase : public wxPanel
36 {
37 protected:
38  wxGLCanvas* m_glCanvas;
39  wxTimer* m_timer;
40 
41 protected:
42  virtual void OnPaint(wxPaintEvent& event) { event.Skip(); }
43  virtual void OnLeftClickDown(wxMouseEvent& event) { event.Skip(); }
44  virtual void OnKeyDown(wxKeyEvent& event) { event.Skip(); }
45  virtual void OnMouseMotion(wxMouseEvent& event) { event.Skip(); }
46  virtual void OnMiddleDown(wxMouseEvent& event) { event.Skip(); }
47  virtual void OnMiddleUp(wxMouseEvent& event) { event.Skip(); }
48  virtual void OnLeftClickUp(wxMouseEvent& event) { event.Skip(); }
49  virtual void OnScroll(wxMouseEvent& event) { event.Skip(); }
50  virtual void OnRightClickDown(wxMouseEvent& event) { event.Skip(); }
51  virtual void OnLeftDoubleClick(wxMouseEvent& event) { event.Skip(); }
52  virtual void OnIdle(wxIdleEvent& event) { event.Skip(); }
53  virtual void OnMiddleDoubleClick(wxMouseEvent& event) { event.Skip(); }
54  virtual void OnTimer(wxTimerEvent& event) { event.Skip(); }
55 
56 public:
57  wxGLCanvas* GetGlCanvas() { return m_glCanvas; }
58  wxTimer* GetTimer() { return m_timer; }
59  WorkspaceBase(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(500,300), long style = wxTAB_TRAVERSAL);
60  virtual ~WorkspaceBase();
61 };
62 
63 #endif
+
- + diff --git a/docs/doxygen/html/_workspace_bitmaps_8cpp_source.html b/docs/doxygen/html/_workspace_bitmaps_8cpp_source.html new file mode 100644 index 0000000..39d2237 --- /dev/null +++ b/docs/doxygen/html/_workspace_bitmaps_8cpp_source.html @@ -0,0 +1,95 @@ + + + + + + + +Project/WorkspaceBitmaps.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WorkspaceBitmaps.cpp
+
+
+
1 //
2 // This file was automatically generated by wxrc, do not edit by hand.
3 //
4 
5 #include <wx/wxprec.h>
6 
7 #ifdef __BORLANDC__
8  #pragma hdrstop
9 #endif
10 
11 #include <wx/filesys.h>
12 #include <wx/fs_mem.h>
13 #include <wx/xrc/xmlres.h>
14 #include <wx/xrc/xh_all.h>
15 
16 #if wxCHECK_VERSION(2,8,5) && wxABI_VERSION >= 20805
17  #define XRC_ADD_FILE(name, data, size, mime) \
18  wxMemoryFSHandler::AddFileWithMimeType(name, data, size, mime)
19 #else
20  #define XRC_ADD_FILE(name, data, size, mime) \
21  wxMemoryFSHandler::AddFile(name, data, size)
22 #endif
23 
24 static size_t xml_res_size_0 = 137;
25 static unsigned char xml_res_file_0[] = {
26 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
27 110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,114,101,
28 115,111,117,114,99,101,32,120,109,108,110,115,61,34,104,116,116,112,58,
29 47,47,119,119,119,46,119,120,119,105,100,103,101,116,115,46,111,114,103,
30 47,119,120,120,114,99,34,62,10,32,32,60,33,45,45,32,72,97,110,100,108,101,
31 114,32,71,101,110,101,114,97,116,105,111,110,32,105,115,32,79,78,32,45,
32 45,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
33 
34 void wxC52C4InitBitmapResources()
35 {
36 
37  // Check for memory FS. If not present, load the handler:
38  {
39  wxMemoryFSHandler::AddFile(wxT("XRC_resource/dummy_file"), wxT("dummy one"));
40  wxFileSystem fsys;
41  wxFSFile *f = fsys.OpenFile(wxT("memory:XRC_resource/dummy_file"));
42  wxMemoryFSHandler::RemoveFile(wxT("XRC_resource/dummy_file"));
43  if (f) delete f;
44  else wxFileSystem::AddHandler(new wxMemoryFSHandlerBase);
45  }
46 
47  XRC_ADD_FILE(wxT("XRC_resource/WorkspaceBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_WorkspaceBitmaps.xrc"), xml_res_file_0, xml_res_size_0, wxT("text/xml"));
48  wxXmlResource::Get()->Load(wxT("memory:XRC_resource/WorkspaceBitmaps.cpp$C__Users_NDSE-69_Documents_GitHub_PSP_Project_WorkspaceBitmaps.xrc"));
49 }
+
+ + + + diff --git a/docs/doxygen/html/annotated.html b/docs/doxygen/html/annotated.html index ccc4e1e..3cd1bb5 100644 --- a/docs/doxygen/html/annotated.html +++ b/docs/doxygen/html/annotated.html @@ -5,10 +5,17 @@ -PSP-UFU: Class List +Class List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+ - + diff --git a/docs/doxygen/html/annotated_dup.js b/docs/doxygen/html/annotated_dup.js new file mode 100644 index 0000000..e2c2bac --- /dev/null +++ b/docs/doxygen/html/annotated_dup.js @@ -0,0 +1,121 @@ +var annotated_dup = +[ + [ "AboutForm", "class_about_form.html", "class_about_form" ], + [ "AboutFormBase", "class_about_form_base.html", "class_about_form_base" ], + [ "Branch", "class_branch.html", "class_branch" ], + [ "Bus", "class_bus.html", "class_bus" ], + [ "BusElectricalData", "struct_bus_electrical_data.html", "struct_bus_electrical_data" ], + [ "BusForm", "class_bus_form.html", "class_bus_form" ], + [ "BusFormBase", "class_bus_form_base.html", "class_bus_form_base" ], + [ "Camera", "class_camera.html", "class_camera" ], + [ "Capacitor", "class_capacitor.html", "class_capacitor" ], + [ "CapacitorElectricalData", "struct_capacitor_electrical_data.html", "struct_capacitor_electrical_data" ], + [ "ChartView", "class_chart_view.html", "class_chart_view" ], + [ "ChartViewBase", "class_chart_view_base.html", "class_chart_view_base" ], + [ "ConnectionLine", "class_connection_line.html", "class_connection_line" ], + [ "Constant", "class_constant.html", "class_constant" ], + [ "ConstantForm", "class_constant_form.html", "class_constant_form" ], + [ "ConstantFormBase", "class_constant_form_base.html", "class_constant_form_base" ], + [ "ControlEditor", "class_control_editor.html", "class_control_editor" ], + [ "ControlEditorBase", "class_control_editor_base.html", "class_control_editor_base" ], + [ "ControlElement", "class_control_element.html", "class_control_element" ], + [ "ControlElementButton", "class_control_element_button.html", "class_control_element_button" ], + [ "ControlElementContainer", "class_control_element_container.html", "class_control_element_container" ], + [ "ControlElementSolver", "class_control_element_solver.html", "class_control_element_solver" ], + [ "ControlSystemTest", "class_control_system_test.html", "class_control_system_test" ], + [ "ControlSystemTestBase", "class_control_system_test_base.html", "class_control_system_test_base" ], + [ "DataReport", "class_data_report.html", "class_data_report" ], + [ "DataReportBase", "class_data_report_base.html", "class_data_report_base" ], + [ "ElectricCalculation", "class_electric_calculation.html", "class_electric_calculation" ], + [ "Electromechanical", "class_electromechanical.html", "class_electromechanical" ], + [ "Element", "class_element.html", "class_element" ], + [ "ElementDataObject", "class_element_data_object.html", "class_element_data_object" ], + [ "ElementPlotData", "class_element_plot_data.html", "class_element_plot_data" ], + [ "ElementsLists", "struct_elements_lists.html", "struct_elements_lists" ], + [ "Exponential", "class_exponential.html", "class_exponential" ], + [ "ExponentialForm", "class_exponential_form.html", "class_exponential_form" ], + [ "ExponentialFormBase", "class_exponential_form_base.html", "class_exponential_form_base" ], + [ "Fault", "class_fault.html", "class_fault" ], + [ "FileHanding", "class_file_handing.html", "class_file_handing" ], + [ "Gain", "class_gain.html", "class_gain" ], + [ "GainForm", "class_gain_form.html", "class_gain_form" ], + [ "GainFormBase", "class_gain_form_base.html", "class_gain_form_base" ], + [ "GeneralData", "struct_general_data.html", "struct_general_data" ], + [ "GeneralPropertiesForm", "class_general_properties_form.html", "class_general_properties_form" ], + [ "GeneralPropertiesFormBase", "class_general_properties_form_base.html", "class_general_properties_form_base" ], + [ "GeneratorStabForm", "class_generator_stab_form.html", "class_generator_stab_form" ], + [ "GeneratorStabFormBase", "class_generator_stab_form_base.html", "class_generator_stab_form_base" ], + [ "GraphicalElement", "class_graphical_element.html", "class_graphical_element" ], + [ "IndMotor", "class_ind_motor.html", "class_ind_motor" ], + [ "IndMotorElectricalData", "struct_ind_motor_electrical_data.html", "struct_ind_motor_electrical_data" ], + [ "IndMotorForm", "class_ind_motor_form.html", "class_ind_motor_form" ], + [ "IndMotorFormBase", "class_ind_motor_form_base.html", "class_ind_motor_form_base" ], + [ "Inductor", "class_inductor.html", "class_inductor" ], + [ "InductorElectricalData", "struct_inductor_electrical_data.html", "struct_inductor_electrical_data" ], + [ "IntegrationConstant", "struct_integration_constant.html", "struct_integration_constant" ], + [ "IOControl", "class_i_o_control.html", "class_i_o_control" ], + [ "IOControlForm", "class_i_o_control_form.html", "class_i_o_control_form" ], + [ "IOControlFormBase", "class_i_o_control_form_base.html", "class_i_o_control_form_base" ], + [ "Limiter", "class_limiter.html", "class_limiter" ], + [ "LimiterForm", "class_limiter_form.html", "class_limiter_form" ], + [ "LimiterFormBase", "class_limiter_form_base.html", "class_limiter_form_base" ], + [ "Line", "class_line.html", "class_line" ], + [ "LineElectricalData", "struct_line_electrical_data.html", "struct_line_electrical_data" ], + [ "LineForm", "class_line_form.html", "class_line_form" ], + [ "LineFormBase", "class_line_form_base.html", "class_line_form_base" ], + [ "Load", "class_load.html", "class_load" ], + [ "LoadElectricalData", "struct_load_electrical_data.html", "struct_load_electrical_data" ], + [ "LoadForm", "class_load_form.html", "class_load_form" ], + [ "LoadFormBase", "class_load_form_base.html", "class_load_form_base" ], + [ "Machines", "class_machines.html", "class_machines" ], + [ "MainApp", "class_main_app.html", "class_main_app" ], + [ "MainFrame", "class_main_frame.html", "class_main_frame" ], + [ "MainFrameBase", "class_main_frame_base.html", "class_main_frame_base" ], + [ "Multiplier", "class_multiplier.html", "class_multiplier" ], + [ "Node", "class_node.html", "class_node" ], + [ "OpenGLColour", "class_open_g_l_colour.html", "class_open_g_l_colour" ], + [ "PlotData", "class_plot_data.html", "class_plot_data" ], + [ "PowerElement", "class_power_element.html", "class_power_element" ], + [ "PowerFlow", "class_power_flow.html", "class_power_flow" ], + [ "PropertiesData", "class_properties_data.html", "class_properties_data" ], + [ "RateLimiter", "class_rate_limiter.html", "class_rate_limiter" ], + [ "RateLimiterForm", "class_rate_limiter_form.html", "class_rate_limiter_form" ], + [ "RateLimiterFormBase", "class_rate_limiter_form_base.html", "class_rate_limiter_form_base" ], + [ "ReactiveLimits", "struct_reactive_limits.html", "struct_reactive_limits" ], + [ "ReactiveShuntElementForm", "class_reactive_shunt_element_form.html", "class_reactive_shunt_element_form" ], + [ "ReactiveShuntElementFormBase", "class_reactive_shunt_element_form_base.html", "class_reactive_shunt_element_form_base" ], + [ "Shunt", "class_shunt.html", "class_shunt" ], + [ "SimulationData", "struct_simulation_data.html", "struct_simulation_data" ], + [ "SimulationsSettingsForm", "class_simulations_settings_form.html", "class_simulations_settings_form" ], + [ "SimulationsSettingsFormBase", "class_simulations_settings_form_base.html", "class_simulations_settings_form_base" ], + [ "Sum", "class_sum.html", "class_sum" ], + [ "SumForm", "class_sum_form.html", "class_sum_form" ], + [ "SumFormBase", "class_sum_form_base.html", "class_sum_form_base" ], + [ "SwitchingData", "struct_switching_data.html", "struct_switching_data" ], + [ "SwitchingForm", "class_switching_form.html", "class_switching_form" ], + [ "SwitchingFormBase", "class_switching_form_base.html", "class_switching_form_base" ], + [ "SyncGenerator", "class_sync_generator.html", "class_sync_generator" ], + [ "SyncGeneratorElectricalData", "struct_sync_generator_electrical_data.html", "struct_sync_generator_electrical_data" ], + [ "SyncMachineForm", "class_sync_machine_form.html", "class_sync_machine_form" ], + [ "SyncMachineFormBase", "class_sync_machine_form_base.html", "class_sync_machine_form_base" ], + [ "SyncMotor", "class_sync_motor.html", "class_sync_motor" ], + [ "SyncMotorElectricalData", "struct_sync_motor_electrical_data.html", "struct_sync_motor_electrical_data" ], + [ "Text", "class_text.html", "class_text" ], + [ "TextForm", "class_text_form.html", "class_text_form" ], + [ "TextFormBase", "class_text_form_base.html", "class_text_form_base" ], + [ "TextGLDrawable", "class_text_g_l_drawable.html", "class_text_g_l_drawable" ], + [ "TextTexture", "class_text_texture.html", "class_text_texture" ], + [ "TransferFunction", "class_transfer_function.html", "class_transfer_function" ], + [ "TransferFunctionForm", "class_transfer_function_form.html", "class_transfer_function_form" ], + [ "TransferFunctionFormBase", "class_transfer_function_form_base.html", "class_transfer_function_form_base" ], + [ "Transformer", "class_transformer.html", "class_transformer" ], + [ "TransformerElectricalData", "struct_transformer_electrical_data.html", "struct_transformer_electrical_data" ], + [ "TransformerForm", "class_transformer_form.html", "class_transformer_form" ], + [ "TransformerFormBase", "class_transformer_form_base.html", "class_transformer_form_base" ], + [ "Workspace", "class_workspace.html", "class_workspace" ], + [ "WorkspaceBase", "class_workspace_base.html", "class_workspace_base" ], + [ "wxGLNumberRenderer", "classwx_g_l_number_renderer.html", "classwx_g_l_number_renderer" ], + [ "wxGLString", "classwx_g_l_string.html", "classwx_g_l_string" ], + [ "wxGLStringArray", "classwx_g_l_string_array.html", "classwx_g_l_string_array" ], + [ "wxRibbonMetroArtProvider", "classwx_ribbon_metro_art_provider.html", "classwx_ribbon_metro_art_provider" ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_about_form-members.html b/docs/doxygen/html/class_about_form-members.html index eac85f0..02a3f1c 100644 --- a/docs/doxygen/html/class_about_form-members.html +++ b/docs/doxygen/html/class_about_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
AboutForm Member List
@@ -99,11 +114,14 @@ $(function() { ~AboutForm() (defined in AboutForm)AboutFormvirtual ~AboutFormBase() (defined in AboutFormBase)AboutFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_about_form.html b/docs/doxygen/html/class_about_form.html index da2eb06..63d7898 100644 --- a/docs/doxygen/html/class_about_form.html +++ b/docs/doxygen/html/class_about_form.html @@ -5,10 +5,17 @@ -PSP-UFU: AboutForm Class Reference +AboutForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -174,16 +189,23 @@ wxHyperlinkCtrl * m_hyperL wxButton * m_buttonOK   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 7 of file AboutForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_about_form.js b/docs/doxygen/html/class_about_form.js new file mode 100644 index 0000000..c87fe26 --- /dev/null +++ b/docs/doxygen/html/class_about_form.js @@ -0,0 +1,7 @@ +var class_about_form = +[ + [ "AboutForm", "class_about_form.html#a856a64c4b8545cf8c8fa1b6f23080341", null ], + [ "~AboutForm", "class_about_form.html#a87f1730d731ee0c7529d4af84fac92fc", null ], + [ "Init", "class_about_form.html#a7c793ce416f184e009c72a198af116da", null ], + [ "OnOKButtonClick", "class_about_form.html#a30a97b3857200c4cd50364b26d4cd3bb", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_about_form_base-members.html b/docs/doxygen/html/class_about_form_base-members.html index 667b521..b95fa3c 100644 --- a/docs/doxygen/html/class_about_form_base-members.html +++ b/docs/doxygen/html/class_about_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
AboutFormBase Member List
@@ -96,11 +111,14 @@ $(function() { OnOKButtonClick(wxCommandEvent &event) (defined in AboutFormBase)AboutFormBaseinlineprotectedvirtual ~AboutFormBase() (defined in AboutFormBase)AboutFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_about_form_base.html b/docs/doxygen/html/class_about_form_base.html index 1658293..f116f67 100644 --- a/docs/doxygen/html/class_about_form_base.html +++ b/docs/doxygen/html/class_about_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: AboutFormBase Class Reference +AboutFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -167,16 +182,23 @@ wxHyperlinkCtrl * m_hyperL wxButton * m_buttonOK   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_about_form_base.js b/docs/doxygen/html/class_about_form_base.js new file mode 100644 index 0000000..1a3e62b --- /dev/null +++ b/docs/doxygen/html/class_about_form_base.js @@ -0,0 +1,30 @@ +var class_about_form_base = +[ + [ "AboutFormBase", "class_about_form_base.html#aa52e54457b4cf595f1714a0320458e6c", null ], + [ "~AboutFormBase", "class_about_form_base.html#afc2c8fd7901eef089aa3bf618fe3096a", null ], + [ "GetButtonOK", "class_about_form_base.html#a8d70d38cc7eb8f41bd833f18aafeaf30", null ], + [ "GetGridCredits", "class_about_form_base.html#af7ac5a27424141c707927070efe3d6f5", null ], + [ "GetHyperLinkPSP", "class_about_form_base.html#a5a2bb84e1eb7fc3b92d82a68fc93858a", null ], + [ "GetNotebook", "class_about_form_base.html#acdb89e02449607a015ed94c6117b9eec", null ], + [ "GetPanelCredits", "class_about_form_base.html#aee3f59a44c6423598ae7c697c065057a", null ], + [ "GetPanelLicense", "class_about_form_base.html#a428f630068bebd4e0fdd258c0b8cd2ac", null ], + [ "GetPanelLogo", "class_about_form_base.html#a4438eded1319f84ed19cf0350d819efb", null ], + [ "GetRichTextCtrlLicense", "class_about_form_base.html#a490a133019381aa2569ca04f517829ea", null ], + [ "GetStaticBitmapLogo", "class_about_form_base.html#a74341fb9c17f6320745444ea4eb76df8", null ], + [ "GetStaticTextHome", "class_about_form_base.html#a37e22612779e67b33b66f6a3a7bb60c1", null ], + [ "GetStaticTextVersion", "class_about_form_base.html#ab9eb80b69d8109a3af6d3b6309b65c76", null ], + [ "GetStaticTextVersionLabel", "class_about_form_base.html#a1fae6815dc4f49df45f05f3893a332c7", null ], + [ "OnOKButtonClick", "class_about_form_base.html#a64ea9b42b326b773067de6d1b4f649f4", null ], + [ "m_buttonOK", "class_about_form_base.html#ab8d26c339ff508e7497e011cca359246", null ], + [ "m_gridCredits", "class_about_form_base.html#a02da06240394048e693c6ae3e2a69282", null ], + [ "m_hyperLinkPSP", "class_about_form_base.html#a6fcacff0bfb56d11923d0f80e5560f70", null ], + [ "m_notebook", "class_about_form_base.html#a01a0cbc42c52e7eb69fa1337f756af7d", null ], + [ "m_panelCredits", "class_about_form_base.html#a34d37030073f1e71cc233a8d0d4a27dc", null ], + [ "m_panelLicense", "class_about_form_base.html#a3dbb1a9739786e22307f7ae4fb0617f1", null ], + [ "m_panelLogo", "class_about_form_base.html#a306c84f41395aee3200b887ec71ff11a", null ], + [ "m_richTextCtrlLicense", "class_about_form_base.html#a6d243c886c28b231279798dd3cca6df4", null ], + [ "m_staticBitmapLogo", "class_about_form_base.html#ae54042e29c9f00f7d4dad5d5b162f4bc", null ], + [ "m_staticTextHome", "class_about_form_base.html#a4470b5bcf193376d3a8849bdcba2acd4", null ], + [ "m_staticTextVersion", "class_about_form_base.html#ae14aaaac297d045e61b81df6379a18d7", null ], + [ "m_staticTextVersionLabel", "class_about_form_base.html#a6a33f787646eea29e95441b05c0409df", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_branch-members.html b/docs/doxygen/html/class_branch-members.html index 23d2fce..6fef61a 100644 --- a/docs/doxygen/html/class_branch-members.html +++ b/docs/doxygen/html/class_branch-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Branch Member List
@@ -197,11 +212,14 @@ $(function() { ~Element()Elementvirtual ~PowerElement()PowerElement
+ - + diff --git a/docs/doxygen/html/class_branch.html b/docs/doxygen/html/class_branch.html index 15bc1a2..3ad8565 100644 --- a/docs/doxygen/html/class_branch.html +++ b/docs/doxygen/html/class_branch.html @@ -5,10 +5,17 @@ -PSP-UFU: Branch Class Reference +Branch Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -484,7 +499,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 7 of file Branch.h.

+

Member Function Documentation

◆ AddPoint()

@@ -521,6 +539,8 @@ Additional Inherited Members

Reimplemented in Line.

+

Definition at line 27 of file Branch.h.

+
@@ -559,6 +579,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 13 of file Branch.h.

+ @@ -608,6 +630,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 14 of file Branch.h.

+ @@ -640,6 +664,8 @@ Additional Inherited Members

Reimplemented in Line.

+

Definition at line 22 of file Branch.h.

+ @@ -679,6 +705,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 28 of file Branch.h.

+ @@ -717,6 +745,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 23 of file Branch.h.

+ @@ -755,6 +785,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 15 of file Branch.h.

+ @@ -804,6 +836,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 17 of file Branch.h.

+ @@ -842,6 +876,8 @@ Additional Inherited Members

Reimplemented in Line.

+

Definition at line 24 of file Branch.h.

+ @@ -879,6 +915,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 8 of file Branch.cpp.

+ @@ -918,6 +956,8 @@ Additional Inherited Members

Reimplemented in Line.

+

Definition at line 25 of file Branch.h.

+ @@ -954,6 +994,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 90 of file Branch.cpp.

+ @@ -1003,6 +1045,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 128 of file Branch.cpp.

+ @@ -1042,6 +1086,8 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 28 of file Branch.cpp.

+ @@ -1080,18 +1126,24 @@ Additional Inherited Members

Reimplemented in Transformer, and Line.

+

Definition at line 16 of file Branch.h.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_branch.js b/docs/doxygen/html/class_branch.js new file mode 100644 index 0000000..e4a5638 --- /dev/null +++ b/docs/doxygen/html/class_branch.js @@ -0,0 +1,24 @@ +var class_branch = +[ + [ "Branch", "class_branch.html#a69807434e069dd3f3ae54f5519679c9d", null ], + [ "~Branch", "class_branch.html#a1ccd4c921c1c87869e8ec96da0e2dff8", null ], + [ "AddPoint", "class_branch.html#a8d6d80c50f849c5be2bccffd5b524e21", null ], + [ "Contains", "class_branch.html#a691f94c3cd2abe1274e870d2882634d8", null ], + [ "Draw", "class_branch.html#a7037f496f9b9c9e64c74eb638debe278", null ], + [ "GetBestPickboxCursor", "class_branch.html#a62418f767cc9bb894d6b7cc73645e43e", null ], + [ "GetContextMenu", "class_branch.html#a6ddd901403c46f5d9aa179644467b088", null ], + [ "Intersects", "class_branch.html#aa23b1014c947e46996f1c0c4caa187e1", null ], + [ "Move", "class_branch.html#a7cf4b117f43f49bb76cce3df5521fb70", null ], + [ "MoveNode", "class_branch.html#aef2ffe79c9b239fb5a1ad175555a9f5a", null ], + [ "MovePickbox", "class_branch.html#af7879ee138170b1421f745f1c942ea05", null ], + [ "NodeContains", "class_branch.html#a3a651769f183290af8a91494f5e9047b", null ], + [ "PickboxContains", "class_branch.html#a88ab67c930d37daa723c94d7e59a5cf8", null ], + [ "RemoveParent", "class_branch.html#aa0328a743090b2b7b3f33d57a867b6dc", null ], + [ "RotateNode", "class_branch.html#a190d3da81276751c5b9ab23c5d3f37df", null ], + [ "SetNodeParent", "class_branch.html#aaf64ea58631438e3a16b1b2ede793875", null ], + [ "StartMove", "class_branch.html#a947cec45fcdc78d01eaabe19d23daf64", null ], + [ "UpdateNodes", "class_branch.html#a31428bf54c5b95a7a2e63bbf60ef9e35", null ], + [ "UpdateSwitches", "class_branch.html#a0687f6a668e10dd442c5010649049706", null ], + [ "UpdateSwitchesPosition", "class_branch.html#a5930bba9dd25f84997364329cce9e00a", null ], + [ "m_inserted", "class_branch.html#a1aaf58a05a30ca39df192fbb895c80fc", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_bus-members.html b/docs/doxygen/html/class_bus-members.html index a4ddfdb..fe8a4bd 100644 --- a/docs/doxygen/html/class_bus-members.html +++ b/docs/doxygen/html/class_bus-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Bus Member List
@@ -200,11 +215,14 @@ $(function() { ~Element()Elementvirtual ~PowerElement()PowerElement
+ - + diff --git a/docs/doxygen/html/class_bus.html b/docs/doxygen/html/class_bus.html index ad23463..66bab07 100644 --- a/docs/doxygen/html/class_bus.html +++ b/docs/doxygen/html/class_bus.html @@ -5,10 +5,17 @@ -PSP-UFU: Bus Class Reference +Bus Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -491,7 +506,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 45 of file Bus.h.

+

Member Function Documentation

◆ AddParent()

@@ -537,6 +555,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 53 of file Bus.h.

+
@@ -573,6 +593,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 87 of file Bus.cpp.

+ @@ -620,6 +642,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 24 of file Bus.cpp.

+ @@ -650,6 +674,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 124 of file Bus.cpp.

+ @@ -687,6 +713,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 176 of file Bus.cpp.

+ @@ -717,6 +745,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 195 of file Bus.cpp.

+ @@ -754,6 +784,8 @@ Additional Inherited Members

Reimplemented from PowerElement.

+

Definition at line 229 of file Bus.cpp.

+ @@ -784,6 +816,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 201 of file Bus.cpp.

+ @@ -820,6 +854,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 93 of file Bus.cpp.

+ @@ -856,6 +892,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 141 of file Bus.cpp.

+ @@ -893,6 +931,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 100 of file Bus.cpp.

+ @@ -929,6 +969,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 167 of file Bus.cpp.

+ @@ -977,18 +1019,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 183 of file Bus.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_bus.js b/docs/doxygen/html/class_bus.js new file mode 100644 index 0000000..6c30c90 --- /dev/null +++ b/docs/doxygen/html/class_bus.js @@ -0,0 +1,23 @@ +var class_bus = +[ + [ "Bus", "class_bus.html#aacf35e62456128245a02db34334f9a3d", null ], + [ "Bus", "class_bus.html#a66ef970dc1edfa02f96cf8820920ef37", null ], + [ "Bus", "class_bus.html#ae822df818deb09d54f6a3bf0794b6ffa", null ], + [ "~Bus", "class_bus.html#aab6194602b6a5a4fa87987f7c1adf35d", null ], + [ "AddParent", "class_bus.html#ab046baebe4bfe0a52905148d78f44681", null ], + [ "Contains", "class_bus.html#ad2b960058be6e990463b53d79c74c7a3", null ], + [ "Draw", "class_bus.html#ae9022ca29399377d2fe0082bb762107c", null ], + [ "GetBestPickboxCursor", "class_bus.html#ac43fc37f8c8a8bc120d9a4bb68da3345", null ], + [ "GetContextMenu", "class_bus.html#ae731d57078982f0bd08e92e6a24f3057", null ], + [ "GetCopy", "class_bus.html#a4288c4c84c8840705c3ce6ccd42e578c", null ], + [ "GetElectricalData", "class_bus.html#a41d505181d722879d7a699574bffaa9a", null ], + [ "GetPlotData", "class_bus.html#a1ccb74b15ba07f867f2d73b976577e2a", null ], + [ "GetTipText", "class_bus.html#a0cf17a7aec23d436ff1eeb9834eb2b70", null ], + [ "Intersects", "class_bus.html#a5014be68f4bb5d8f1a1ea861b03bacdf", null ], + [ "MovePickbox", "class_bus.html#ad569e2192bf95efe668d401583382a04", null ], + [ "PickboxContains", "class_bus.html#a0b8f3ed6e0049dafca8c52358f96bf4b", null ], + [ "Rotate", "class_bus.html#ace039d00c23d36a7c14d7e4155c94791", null ], + [ "SetElectricalData", "class_bus.html#ac6ab67d434ccf43fa2fbfef8a847d3b2", null ], + [ "ShowForm", "class_bus.html#a93dbd8f80b11123395093f561d5241d0", null ], + [ "m_electricalData", "class_bus.html#a990f79a1b67efae6ed5b54d29b7f3b3d", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_bus_form-members.html b/docs/doxygen/html/class_bus_form-members.html index 5b7a4a9..485d7ac 100644 --- a/docs/doxygen/html/class_bus_form-members.html +++ b/docs/doxygen/html/class_bus_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
BusForm Member List
@@ -166,11 +181,14 @@ $(function() { ~BusForm() (defined in BusForm)BusFormvirtual ~BusFormBase() (defined in BusFormBase)BusFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_bus_form.html b/docs/doxygen/html/class_bus_form.html index 810645c..df3b8c8 100644 --- a/docs/doxygen/html/class_bus_form.html +++ b/docs/doxygen/html/class_bus_form.html @@ -5,10 +5,17 @@ -PSP-UFU: BusForm Class Reference +BusForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -376,16 +391,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 7 of file BusForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_bus_form.js b/docs/doxygen/html/class_bus_form.js new file mode 100644 index 0000000..85a8a48 --- /dev/null +++ b/docs/doxygen/html/class_bus_form.js @@ -0,0 +1,18 @@ +var class_bus_form = +[ + [ "BusForm", "class_bus_form.html#ad2187d18254ae1bd99c48e500a25cf91", null ], + [ "~BusForm", "class_bus_form.html#a3296af979bec085e7502a41301b63919", null ], + [ "EnableCtrlVoltageFields", "class_bus_form.html#aa469c5f2077fa061ad42b90d9fedf502", null ], + [ "EnableFaultFields", "class_bus_form.html#abe09d4fb2a0329ccabcb630e21da4cb8", null ], + [ "EnableStabFaultFields", "class_bus_form.html#ab8c3def4ae1d5bcc67b2266d64812414", null ], + [ "OnButtonCancelClick", "class_bus_form.html#aac0cec21eef41ce5771047ecb3fd704a", null ], + [ "OnButtonOKClick", "class_bus_form.html#ace3e94845688c98ee36a579a17ca7e6b", null ], + [ "OnControlledVoltageClick", "class_bus_form.html#ab81856438f1da7dc876d012d29f7e1b0", null ], + [ "OnFaultTypeChoice", "class_bus_form.html#a9affcb13668037c5a47879cea45809c9", null ], + [ "OnInsertFaultClick", "class_bus_form.html#aad11ff9669b788704612fd9721043fc5", null ], + [ "OnInsertStabFaultClick", "class_bus_form.html#a8f2daf3a7ea004cebc9f350239f1b09d", null ], + [ "OnNominalVoltageChoice", "class_bus_form.html#a9238373cc7dc348d067676752e22e0c9", null ], + [ "UpdateChoiceBoxes", "class_bus_form.html#a9e5341db23f501ce185d7e6eddc71ad4", null ], + [ "m_bus", "class_bus_form.html#a9d1d45347f194c18a0c5feea613d134d", null ], + [ "m_parent", "class_bus_form.html#ac161a87496edbb7a0f15b23440effea1", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_bus_form_base-members.html b/docs/doxygen/html/class_bus_form_base-members.html index af5a07a..b72fb5f 100644 --- a/docs/doxygen/html/class_bus_form_base-members.html +++ b/docs/doxygen/html/class_bus_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
BusFormBase Member List
@@ -158,11 +173,14 @@ $(function() { OnNominalVoltageChoice(wxCommandEvent &event) (defined in BusFormBase)BusFormBaseinlineprotectedvirtual ~BusFormBase() (defined in BusFormBase)BusFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_bus_form_base.html b/docs/doxygen/html/class_bus_form_base.html index 3818c80..ae78167 100644 --- a/docs/doxygen/html/class_bus_form_base.html +++ b/docs/doxygen/html/class_bus_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: BusFormBase Class Reference +BusFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -353,16 +368,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 49 of file ElementForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_bus_form_base.js b/docs/doxygen/html/class_bus_form_base.js new file mode 100644 index 0000000..9f341f2 --- /dev/null +++ b/docs/doxygen/html/class_bus_form_base.js @@ -0,0 +1,92 @@ +var class_bus_form_base = +[ + [ "BusFormBase", "class_bus_form_base.html#ac1120978e7aa07573b91813a8ae68a57", null ], + [ "~BusFormBase", "class_bus_form_base.html#a1de759d6ea9d3ec462f6c6e57ce4ae65", null ], + [ "GetButtonCancel", "class_bus_form_base.html#acf8bd66a3a96a1eed23d011b987a0c3d", null ], + [ "GetButtonOK", "class_bus_form_base.html#ad21eac8e9b4bae9eeb6d6b74b0504917", null ], + [ "GetCheckBoxCtrlVoltage", "class_bus_form_base.html#afc825c5f3a39d9853d82ae9f88a2b4c4", null ], + [ "GetCheckBoxFault", "class_bus_form_base.html#ab4d194132dd3d327f33cbe91e324537a", null ], + [ "GetCheckBoxPlotData", "class_bus_form_base.html#a5952c32662024cf8895e8770a0988b88", null ], + [ "GetCheckBoxSlackBus", "class_bus_form_base.html#a5a912a40403f046e7d0e495cb5d18768", null ], + [ "GetCheckBoxStabFault", "class_bus_form_base.html#a65fc5c09ea6d29267fdec67a353c0a46", null ], + [ "GetChoiceCtrlVoltage", "class_bus_form_base.html#a82fe4711262bffeb2bb4bb442e1252ac", null ], + [ "GetChoiceFaultPlace", "class_bus_form_base.html#ada95b25afb1d645438a2d19e580c996d", null ], + [ "GetChoiceFaultType", "class_bus_form_base.html#a00ab2e9982bb5e53dbec2755f00c440f", null ], + [ "GetChoiceNomVoltage", "class_bus_form_base.html#a1e36c6d5f70746232c50b201c1fd2155", null ], + [ "GetNotebook", "class_bus_form_base.html#a86f11b43c8b8762eba2233219590638c", null ], + [ "GetPanelFault", "class_bus_form_base.html#ac64b7fddaa3ffe0e7671b920495cfa9f", null ], + [ "GetPanelGeneral", "class_bus_form_base.html#a9852553d782d38de865ba5c5960983a4", null ], + [ "GetPanelStability", "class_bus_form_base.html#a2ca2f93c9c6e26d359dca609b1ceaf97", null ], + [ "GetStaticTextFaultPlace", "class_bus_form_base.html#ae452c5575974492125f1568338c8b9ae", null ], + [ "GetStaticTextFaultResistance", "class_bus_form_base.html#a801768a5a9d92a52f69fb3eeb3ad0406", null ], + [ "GetStaticTextFaultType", "class_bus_form_base.html#abd3346fc4bdb1cf185138043359e324a", null ], + [ "GetStaticTextName", "class_bus_form_base.html#ab73005fe27a337b523a5f272d4b82bea", null ], + [ "GetStaticTextNomVoltage", "class_bus_form_base.html#a63e68c3239ba0848e6d2d668dd18cfd1", null ], + [ "GetStaticTextPU_1", "class_bus_form_base.html#a2c08563d7229b417bb4138ee7c279d58", null ], + [ "GetStaticTextPU_2", "class_bus_form_base.html#abf7d8daf69f4133fc8175a7653b8ff99", null ], + [ "GetStaticTextPU_3", "class_bus_form_base.html#a6be144296e304131dcb1699d9ba9ad81", null ], + [ "GetStaticTextPU_4", "class_bus_form_base.html#a190710be297fd8e6d7f2c51e78649a47", null ], + [ "GetStaticTextReactance", "class_bus_form_base.html#a08a8bef4d3a9043fd28ad6da2370e5c5", null ], + [ "GetStaticTextS_1", "class_bus_form_base.html#a60f3d4e6c52f15cd078cfcc14eb6f621", null ], + [ "GetStaticTextS_2", "class_bus_form_base.html#a8d5b1711fddb03dd93655a6427bdf482", null ], + [ "GetStaticTextStabFaultLength", "class_bus_form_base.html#ace34b60ad7f00f16e1b75994326cab45", null ], + [ "GetStaticTextStabFaultReactance", "class_bus_form_base.html#aaac7957c8de855891e7e102562ca722f", null ], + [ "GetStaticTextStabFaultResistance", "class_bus_form_base.html#ae423bd94fc53bce76329dcb7dafc524e", null ], + [ "GetStaticTextStabFaultTime", "class_bus_form_base.html#aa017dca9dccd43a28236173370b89bb3", null ], + [ "GetTextCtrlCtrlVoltage", "class_bus_form_base.html#a36b8dc398f13c546c63b6ab622eaf3dd", null ], + [ "GetTextCtrlFaultReactance", "class_bus_form_base.html#affaa6a2355ae588b3f6da69b92ba90b0", null ], + [ "GetTextCtrlFaultResistance", "class_bus_form_base.html#aff5d6c90e212f2ca0fa4856b65dcdb15", null ], + [ "GetTextCtrlName", "class_bus_form_base.html#a3a1954a4465bbdace9170426d9caa37b", null ], + [ "GetTextCtrlNomVoltage", "class_bus_form_base.html#a017ddcc57c0a2534e3e2b6a90180ff2d", null ], + [ "GetTextCtrlStabFaultLength", "class_bus_form_base.html#a97c195c038c7bac1ec32d69c87d7f3b6", null ], + [ "GetTextCtrlStabFaultReactance", "class_bus_form_base.html#a12379c4e025fd8416f57d5027ffe6481", null ], + [ "GetTextCtrlStabFaultResistance", "class_bus_form_base.html#aae93403e83e2c7f5e2a769a2bffccd83", null ], + [ "GetTextCtrlStabFaultTime", "class_bus_form_base.html#aac4df99b23e332ed5c950ddbc7247715", null ], + [ "OnButtonCancelClick", "class_bus_form_base.html#aad9b945cf9842a88b1e61085963eab7a", null ], + [ "OnButtonOKClick", "class_bus_form_base.html#a9737e676f0eb420635a0acf49a0f7f2e", null ], + [ "OnControlledVoltageClick", "class_bus_form_base.html#af0c5a0347c1b7fd2a5bdaad95e4574e1", null ], + [ "OnFaultTypeChoice", "class_bus_form_base.html#af5b28bc2cd481ebc7a3bb99261727683", null ], + [ "OnInsertFaultClick", "class_bus_form_base.html#a617c029a5b0210fea72f012ab36f6c75", null ], + [ "OnInsertStabFaultClick", "class_bus_form_base.html#a7d827c0d4128a4f6fd83dc23396bb894", null ], + [ "OnNominalVoltageChoice", "class_bus_form_base.html#adac2978ce17e56e8ad03d2f7da7be343", null ], + [ "m_ButtonCancel", "class_bus_form_base.html#aa9546384b368a06197565391b6c38315", null ], + [ "m_buttonOK", "class_bus_form_base.html#ab5b4dc715c6d9fde94f9cfa5a984bf11", null ], + [ "m_checkBoxCtrlVoltage", "class_bus_form_base.html#ad9c07ce14e481e6d20062ddeb3464675", null ], + [ "m_checkBoxFault", "class_bus_form_base.html#a5270a367a652e48303e6470ed07398e6", null ], + [ "m_checkBoxPlotData", "class_bus_form_base.html#a71e4382ed47ed4dc5c09c26fc9369729", null ], + [ "m_checkBoxSlackBus", "class_bus_form_base.html#a63f007f4ff46c8dcd69dec2143aa7c55", null ], + [ "m_checkBoxStabFault", "class_bus_form_base.html#a203dbfd80d3eb784d7c1606aea5426a7", null ], + [ "m_choiceCtrlVoltage", "class_bus_form_base.html#aedb47f128db9b468dd2a58ad73df74b1", null ], + [ "m_choiceFaultPlace", "class_bus_form_base.html#aca83346b86e9a3b13447111e109c99e3", null ], + [ "m_choiceFaultType", "class_bus_form_base.html#af259e49af9eaa04b29b193c73ba2d9de", null ], + [ "m_choiceNomVoltage", "class_bus_form_base.html#afb24ac3dd51199ac3984469bb7df3fce", null ], + [ "m_notebook", "class_bus_form_base.html#a7609afe675dab29a19ec718f0881f9fc", null ], + [ "m_panelFault", "class_bus_form_base.html#a6139eada122f07b35cbcbd2a3d159e76", null ], + [ "m_panelGeneral", "class_bus_form_base.html#a1572a94c93318c849c110ec7e624cdec", null ], + [ "m_panelStability", "class_bus_form_base.html#ab29a9e37fdfa9b3c20ce6aad1191ee69", null ], + [ "m_staticTextFaultPlace", "class_bus_form_base.html#a4c9495ac8f926d191d8cbae7424e20d7", null ], + [ "m_staticTextFaultResistance", "class_bus_form_base.html#a5bb8c266725602ab79ea8e72490a734a", null ], + [ "m_staticTextFaultType", "class_bus_form_base.html#affdfd06744bc4def0c85f658f4682d60", null ], + [ "m_staticTextName", "class_bus_form_base.html#a32e8874976056e0756392c2344e475bc", null ], + [ "m_staticTextNomVoltage", "class_bus_form_base.html#a2a8dfe41d7f36f97131fde680273f3c8", null ], + [ "m_staticTextPU_1", "class_bus_form_base.html#a03430fef9d5e98ba3aabd829e1505453", null ], + [ "m_staticTextPU_2", "class_bus_form_base.html#a5b465616f6c15b732e4ef27503bfdf45", null ], + [ "m_staticTextPU_3", "class_bus_form_base.html#a3bccc8160428b6c11a7606426b6004f8", null ], + [ "m_staticTextPU_4", "class_bus_form_base.html#a166ac9753433cb57901ee52803de4b70", null ], + [ "m_staticTextReactance", "class_bus_form_base.html#af5fbe5a2f9281bfaec01d0b6d158a71b", null ], + [ "m_staticTextS_1", "class_bus_form_base.html#a30a89bad9ebb75bb3f80d88933188e76", null ], + [ "m_staticTextS_2", "class_bus_form_base.html#adc4f4cf29badd77f8e648fddeef4ce94", null ], + [ "m_staticTextStabFaultLength", "class_bus_form_base.html#a7cf16a658b8180bc61f644879c3fe8e9", null ], + [ "m_staticTextStabFaultReactance", "class_bus_form_base.html#a469a049ae99c868e80797a0b087a8f11", null ], + [ "m_staticTextStabFaultResistance", "class_bus_form_base.html#a502d6cce63b416cf8aa93b2fc97357ec", null ], + [ "m_staticTextStabFaultTime", "class_bus_form_base.html#af8503eb53503f90af53b8206c16e4629", null ], + [ "m_textCtrlCtrlVoltage", "class_bus_form_base.html#ae9d2477b6b6cfbb03af205a96d5c4928", null ], + [ "m_textCtrlFaultReactance", "class_bus_form_base.html#afb7b2bed6e9d25865022dfd10baadc58", null ], + [ "m_textCtrlFaultResistance", "class_bus_form_base.html#a7b5d970aa19f06714b66366100651994", null ], + [ "m_textCtrlName", "class_bus_form_base.html#ab51f67bf4aa7de715e867203af072a05", null ], + [ "m_textCtrlNomVoltage", "class_bus_form_base.html#a60aaf017c107d9eef9df57f0368ef1e6", null ], + [ "m_textCtrlStabFaultLength", "class_bus_form_base.html#ae6c7cbbf7aa4fa53647b3a00f1c3fffc", null ], + [ "m_textCtrlStabFaultReactance", "class_bus_form_base.html#a8731cdb29c22002ed2d63bceaba322a5", null ], + [ "m_textCtrlStabFaultResistance", "class_bus_form_base.html#aa206919e95a050a9c9b2a471e6b5c4c9", null ], + [ "m_textCtrlStabFaultTime", "class_bus_form_base.html#a5345f4bf4c3747d167ae27b06ea87222", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_camera-members.html b/docs/doxygen/html/class_camera-members.html index e136949..3880b39 100644 --- a/docs/doxygen/html/class_camera-members.html +++ b/docs/doxygen/html/class_camera-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Camera Member List
@@ -88,11 +103,14 @@ $(function() { UpdateMousePosition(wxPoint2DDouble mousePosition) (defined in Camera)Camerainline ~Camera() (defined in Camera)Camera
+ - + diff --git a/docs/doxygen/html/class_camera.html b/docs/doxygen/html/class_camera.html index 2b67db0..a97a87d 100644 --- a/docs/doxygen/html/class_camera.html +++ b/docs/doxygen/html/class_camera.html @@ -5,10 +5,17 @@ -PSP-UFU: Camera Class Reference +Camera Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -127,16 +142,23 @@ double m_zoomMin = 0.0 double m_zoomMax = 3.0   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 6 of file Camera.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_camera.js b/docs/doxygen/html/class_camera.js new file mode 100644 index 0000000..9fd715f --- /dev/null +++ b/docs/doxygen/html/class_camera.js @@ -0,0 +1,22 @@ +var class_camera = +[ + [ "Camera", "class_camera.html#a01f94c3543f56ede7af49dc778f19331", null ], + [ "~Camera", "class_camera.html#ad1897942d0ccf91052386388a497349f", null ], + [ "GetMousePosition", "class_camera.html#a464f3fde97dd3cf958a7152af31073f2", null ], + [ "GetScale", "class_camera.html#a4e9ee902f6c711187fb04ed7f90d2ef7", null ], + [ "GetTranslation", "class_camera.html#ad092fd057fb12a1d73214ecd81f8cde3", null ], + [ "GetZoomMax", "class_camera.html#a3fb8d75e1dbaee73562a520eb0529d28", null ], + [ "GetZoomMin", "class_camera.html#a2b81311bec97f4c7dfdd94c32416da85", null ], + [ "ScreenToWorld", "class_camera.html#a0593049968c312454ac880588d6e4195", null ], + [ "SetScale", "class_camera.html#a6e54494ab24eb601949faa55c1d1654f", null ], + [ "SetScale", "class_camera.html#aefeec0ff0adf22ed4e26b0e3f0c7fb38", null ], + [ "SetTranslation", "class_camera.html#abac6929baae257d9fb55e894371b140b", null ], + [ "StartTranslation", "class_camera.html#a4ddf44273d5228cea6b4b9a27c08dd6d", null ], + [ "UpdateMousePosition", "class_camera.html#a0ef3092f83fe959ac5939c75e910bb3e", null ], + [ "m_mousePosition", "class_camera.html#a7ea30c697691da07dd983c3395b210a8", null ], + [ "m_scale", "class_camera.html#a2df233cd73c2ca8486dfac9a4aff27ef", null ], + [ "m_translation", "class_camera.html#aefeb0e4d35db499c1049173f1c0be1c2", null ], + [ "m_translationStartPt", "class_camera.html#a9831a7fda14d39b2fb1ec6c1141d88fc", null ], + [ "m_zoomMax", "class_camera.html#a46434cdf939f99eb9d7b6a6260c6954a", null ], + [ "m_zoomMin", "class_camera.html#aeb4eb52f0f05f5641cd71e4b8505e50a", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_capacitor-members.html b/docs/doxygen/html/class_capacitor-members.html index 95b7c56..7c34043 100644 --- a/docs/doxygen/html/class_capacitor-members.html +++ b/docs/doxygen/html/class_capacitor-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Capacitor Member List
@@ -206,11 +221,14 @@ $(function() { ~PowerElement()PowerElement ~Shunt() (defined in Shunt)Shunt
+ - + diff --git a/docs/doxygen/html/class_capacitor.html b/docs/doxygen/html/class_capacitor.html index ee59947..fb861c0 100644 --- a/docs/doxygen/html/class_capacitor.html +++ b/docs/doxygen/html/class_capacitor.html @@ -5,10 +5,17 @@ -PSP-UFU: Capacitor Class Reference +Capacitor Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -507,7 +522,10 @@ void UpdatePowerFlowArrows void DrawGround (wxPoint2DDouble position) const   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 14 of file Capacitor.h.

+

Member Function Documentation

◆ AddParent()

@@ -553,6 +571,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 7 of file Capacitor.cpp.

+
@@ -589,6 +609,8 @@ void DrawGround (wxPoi

Reimplemented from Shunt.

+

Definition at line 117 of file Capacitor.cpp.

+ @@ -636,6 +658,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 38 of file Capacitor.cpp.

+ @@ -673,6 +697,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 110 of file Capacitor.cpp.

+ @@ -703,6 +729,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 163 of file Capacitor.cpp.

+ @@ -733,6 +761,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 170 of file Capacitor.cpp.

+ @@ -769,6 +799,8 @@ void DrawGround (wxPoi

Reimplemented from Shunt.

+

Definition at line 123 of file Capacitor.cpp.

+ @@ -805,6 +837,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 98 of file Capacitor.cpp.

+ @@ -853,18 +887,24 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 128 of file Capacitor.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_capacitor.js b/docs/doxygen/html/class_capacitor.js new file mode 100644 index 0000000..bdceede --- /dev/null +++ b/docs/doxygen/html/class_capacitor.js @@ -0,0 +1,19 @@ +var class_capacitor = +[ + [ "Capacitor", "class_capacitor.html#aeba70b8c4a1ed3609481b46c5ace8c6c", null ], + [ "Capacitor", "class_capacitor.html#ab7047062b5e731e86815fe5b61e622da", null ], + [ "~Capacitor", "class_capacitor.html#ac5e08b3cca7884bb5f26a8ffcf8fcccf", null ], + [ "AddParent", "class_capacitor.html#ace755e5bc3cc72b491ce31c24c54a5cf", null ], + [ "Contains", "class_capacitor.html#a994039e59a8ae0ec3fe7cf7f5b66e4e5", null ], + [ "Draw", "class_capacitor.html#a94d378c922467214b394931ec0eb01c8", null ], + [ "GetContextMenu", "class_capacitor.html#a05d5517b64dd8a8888817ca28b72294d", null ], + [ "GetCopy", "class_capacitor.html#a422e353b594ac6e4ef34e1f613f7d580", null ], + [ "GetElectricalData", "class_capacitor.html#a503100032b983414ef469907e4f3fd6a", null ], + [ "GetPUElectricalData", "class_capacitor.html#aef6926699c93145d4b3c62efd942b269", null ], + [ "GetTipText", "class_capacitor.html#a00e808708e16b87c80fc650e5710b84e", null ], + [ "Intersects", "class_capacitor.html#a6b06adb1ef3545b220e0b94ee6210b7a", null ], + [ "Rotate", "class_capacitor.html#a2c3f0949c2b791c6a0b69866e9aaff7a", null ], + [ "SetElectricalData", "class_capacitor.html#ab2c5403403c3f8b4ee1ae737ece4e1cc", null ], + [ "ShowForm", "class_capacitor.html#a459b1bbdb153bb9720176661e2960ea6", null ], + [ "m_electricalData", "class_capacitor.html#a581f07c0fa802bbdd0f35a70cc79d3b4", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_chart_view-members.html b/docs/doxygen/html/class_chart_view-members.html index 94f7f95..16a2c48 100644 --- a/docs/doxygen/html/class_chart_view-members.html +++ b/docs/doxygen/html/class_chart_view-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ChartView Member List
@@ -150,11 +165,14 @@ $(function() { ~ChartView() (defined in ChartView)ChartViewvirtual ~ChartViewBase() (defined in ChartViewBase)ChartViewBasevirtual
+ - + diff --git a/docs/doxygen/html/class_chart_view.html b/docs/doxygen/html/class_chart_view.html index 1bf5075..c078614 100644 --- a/docs/doxygen/html/class_chart_view.html +++ b/docs/doxygen/html/class_chart_view.html @@ -5,10 +5,17 @@ -PSP-UFU: ChartView Class Reference +ChartView Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -328,16 +343,23 @@ wxPGProperty * m_pgPropYMi wxPGProperty * m_pgPropYMax   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 16 of file ChartView.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_chart_view.js b/docs/doxygen/html/class_chart_view.js new file mode 100644 index 0000000..fb1b0cd --- /dev/null +++ b/docs/doxygen/html/class_chart_view.js @@ -0,0 +1,44 @@ +var class_chart_view = +[ + [ "ChartView", "class_chart_view.html#a621ebe0264d241f54cf4b65efe705618", null ], + [ "~ChartView", "class_chart_view.html#a4957f22dfe582cd2557b005a010cf2d2", null ], + [ "AllToYAxis", "class_chart_view.html#a9b4099d6352e09be545265a7168860f2", null ], + [ "BuildColourList", "class_chart_view.html#ad3a0740630473e266d6406a561053ef4", null ], + [ "Fit", "class_chart_view.html#ac72c20e03443d91fca200305fc6bbad1", null ], + [ "GetActiveCurvesCSV", "class_chart_view.html#a6034bc00b41785d6003e499778a6a69f", null ], + [ "GetActivePlotData", "class_chart_view.html#a5666f8aedecd943ad19d72fc533dcfd9", null ], + [ "GetNextColour", "class_chart_view.html#a4a2abddb77a734eeb7992ca8434bb358", null ], + [ "OnMenuDarkThemeClick", "class_chart_view.html#a8abb35d06074a8370b222fafae8db028", null ], + [ "OnMenuExitClick", "class_chart_view.html#a597a1cde3693f14427a898b61bdc05a9", null ], + [ "OnMenuExpCSVClick", "class_chart_view.html#a0fe6be1c5bf29fd058787f1a47325c1a", null ], + [ "OnMenuFitClick", "class_chart_view.html#af9953c97ae04ccb534ee8d8f772330a4", null ], + [ "OnMenuSaveImageClick", "class_chart_view.html#a8a374b2c62da0ef13a7d292482abb845", null ], + [ "OnMenuSendClipClick", "class_chart_view.html#a8f57c26ce982fcf91626e8121b625f70", null ], + [ "OnMenuShowCoordinatesClick", "class_chart_view.html#a38699e754304878e9a589f730c027dec", null ], + [ "OnMenuShowGridClick", "class_chart_view.html#a4b43a87338084b4d163b1a2f002ff9d7", null ], + [ "OnMenuShowLabelClick", "class_chart_view.html#a28da38ba24dad74b833b7bc5652358ed", null ], + [ "OnPropertyGridChange", "class_chart_view.html#a293128b4b91a4a838a792076f87cde0a", null ], + [ "OnTreeItemActivated", "class_chart_view.html#a877c14527e957c85037b7705d196733d", null ], + [ "OnTreeItemSelectionChanged", "class_chart_view.html#a1e92dd6533c5ebcf6875cb9e517b7b4e", null ], + [ "SetMPWindow", "class_chart_view.html#a06514137ceea55c0fe387978ea13e214", null ], + [ "SetTreectrl", "class_chart_view.html#a5111d9293952ca916aecd5ff7f597950", null ], + [ "UpdateAllPlots", "class_chart_view.html#a143b7ffc99d2dbcc82ad4cf4b96d5db2", null ], + [ "UpdatePlot", "class_chart_view.html#a88dfb946342df7c344bd3578d207dcd9", null ], + [ "m_chartTitle", "class_chart_view.html#a6e29b198271efa3c6d5ca9d5ae3ae773", null ], + [ "m_colourList", "class_chart_view.html#ae6593489cbd815282f77f5a073c34e55", null ], + [ "m_coords", "class_chart_view.html#a95e9181dd41eeff08964054746be305b", null ], + [ "m_darkTheme", "class_chart_view.html#a91cae14a0b48e5755cb44f05e1d9c0b0", null ], + [ "m_epdList", "class_chart_view.html#a231d6a0f6298df0c764f0dcc601e9f9f", null ], + [ "m_hideGrid", "class_chart_view.html#a7e069208db024a903a90f72f9057b951", null ], + [ "m_itColourList", "class_chart_view.html#a70200389b94906b89d2454b27ac2469c", null ], + [ "m_leg", "class_chart_view.html#a598645b015715cdc22d08d3875a0a5bb", null ], + [ "m_mpWindow", "class_chart_view.html#a89e198037f79887a33ce21c949021455", null ], + [ "m_pgPropColor", "class_chart_view.html#ad174b0057b89c6dd4b6aed93a467acd1", null ], + [ "m_showCoords", "class_chart_view.html#a7f7e1d962ab76be37b89f05e6b97cfc0", null ], + [ "m_showLeg", "class_chart_view.html#a1fe1991c6239632b4af01186b05e062f", null ], + [ "m_time", "class_chart_view.html#a201c868954eb1c79dda37ffdcc2a0eeb", null ], + [ "m_treeTimeID", "class_chart_view.html#a2b74fcf37a33a8654c3c06008f4e9278", null ], + [ "m_xaxis", "class_chart_view.html#aec5e3605401ad966f03113a60f05fe1c", null ], + [ "m_xAxisValues", "class_chart_view.html#affb3ae7ee1147240f5180926a07425b5", null ], + [ "m_yaxis", "class_chart_view.html#a6aacbc6267d7c01cc5b3f78fc4ba50fe", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_chart_view_base-members.html b/docs/doxygen/html/class_chart_view_base-members.html index ccbdab5..40206cb 100644 --- a/docs/doxygen/html/class_chart_view_base-members.html +++ b/docs/doxygen/html/class_chart_view_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ChartViewBase Member List
@@ -121,11 +136,14 @@ $(function() { OnTreeItemSelectionChanged(wxTreeEvent &event) (defined in ChartViewBase)ChartViewBaseinlineprotectedvirtual ~ChartViewBase() (defined in ChartViewBase)ChartViewBasevirtual
+ - + diff --git a/docs/doxygen/html/class_chart_view_base.html b/docs/doxygen/html/class_chart_view_base.html index cf17dbb..7446b33 100644 --- a/docs/doxygen/html/class_chart_view_base.html +++ b/docs/doxygen/html/class_chart_view_base.html @@ -5,10 +5,17 @@ -PSP-UFU: ChartViewBase Class Reference +ChartViewBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -242,16 +257,23 @@ wxPGProperty * m_pgPropYMi wxPGProperty * m_pgPropYMax   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_chart_view_base.js b/docs/doxygen/html/class_chart_view_base.js new file mode 100644 index 0000000..3581af7 --- /dev/null +++ b/docs/doxygen/html/class_chart_view_base.js @@ -0,0 +1,55 @@ +var class_chart_view_base = +[ + [ "ChartViewBase", "class_chart_view_base.html#a491fa99972b27860b94e78c6e1745216", null ], + [ "~ChartViewBase", "class_chart_view_base.html#af306e9608d094a91919745c887bb181e", null ], + [ "GetMenuBar", "class_chart_view_base.html#ae03299107d6d4b75aa723abd8276764a", null ], + [ "GetPgMgr", "class_chart_view_base.html#ae8839884176bb6ceec1d1d153477a084", null ], + [ "GetTreeCtrl", "class_chart_view_base.html#af6593ae0442366b2eccc2d6a5e955a97", null ], + [ "OnMenuDarkThemeClick", "class_chart_view_base.html#a321240363d83ca86670fb4934f1d67f7", null ], + [ "OnMenuExitClick", "class_chart_view_base.html#aef79c958c41b225453204b16544fe6fb", null ], + [ "OnMenuExpCSVClick", "class_chart_view_base.html#a5f4f7a86703647a1380865cb58cd706d", null ], + [ "OnMenuFitClick", "class_chart_view_base.html#a27408a2fa4cc3c63a7655ddc6bca7412", null ], + [ "OnMenuSaveImageClick", "class_chart_view_base.html#a4b7cd79da101027b37493d018c9e872a", null ], + [ "OnMenuSendClipClick", "class_chart_view_base.html#a61bd67b67cbffc8a2e0ce1df62969d8c", null ], + [ "OnMenuShowCoordinatesClick", "class_chart_view_base.html#af2200f3be62850235149d40534b9f354", null ], + [ "OnMenuShowGridClick", "class_chart_view_base.html#a9b1f7be30ded13bf8f4d355489bc82f6", null ], + [ "OnMenuShowLabelClick", "class_chart_view_base.html#a23f74f17c47b4352def0919e9efd3afa", null ], + [ "OnPropertyGridChange", "class_chart_view_base.html#ae866653d71bc2a1323b35a2739c6c4a6", null ], + [ "OnTreeItemActivated", "class_chart_view_base.html#a0ab362bd15f37bf94201b6e40d0ba3fa", null ], + [ "OnTreeItemSelectionChanged", "class_chart_view_base.html#af57957557cef66ae2abbc6c7c125d9e5", null ], + [ "m_menuBar", "class_chart_view_base.html#a84dd44e402a650e86d2ff293fac12162", null ], + [ "m_menuFile", "class_chart_view_base.html#afbfb88d48b10e02cac353a472e1628fc", null ], + [ "m_menuItemDarkTheme", "class_chart_view_base.html#a7adac58739fe82b104e34bbf27fb1dc7", null ], + [ "m_menuItemExit", "class_chart_view_base.html#a407b4fc3b5f891ff37cd8475f0f6ab19", null ], + [ "m_menuItemExportCSV", "class_chart_view_base.html#a624ed8499a19a7cae28437dd54ccaa30", null ], + [ "m_menuItemFit", "class_chart_view_base.html#a70006384adb23f93d64612c20d50cd2f", null ], + [ "m_menuItemSaveImage", "class_chart_view_base.html#aef2fe75fb8e5f72673d24633ca40f4e6", null ], + [ "m_menuItemSendToClipboard", "class_chart_view_base.html#aa9d955087848cbe20c4bf50b149b4d0f", null ], + [ "m_menuItemSeparator_1", "class_chart_view_base.html#af952160ce42c32bfff6496f7d07fea99", null ], + [ "m_menuItemSeparator_2", "class_chart_view_base.html#a27f1cf05d785e4f230b3093ab807972c", null ], + [ "m_menuItemShowCoordinates", "class_chart_view_base.html#a250a4f7292e38ffadf609f07dbbc0323", null ], + [ "m_menuItemShowGrid", "class_chart_view_base.html#a8babad2afd97edf9cb0d0e10bf1dc7c6", null ], + [ "m_menuItemShowLabel", "class_chart_view_base.html#ad24acb1e08f0a4223df11a4e2d929710", null ], + [ "m_menuView", "class_chart_view_base.html#a237d5355111659d84fa4e61569deeecc", null ], + [ "m_pgMgr", "class_chart_view_base.html#adb24602e82869403f8ea40d71849fe0c", null ], + [ "m_pgPropAxisLimit", "class_chart_view_base.html#ad8c758cc9494a44e6ba66fbdec7884bd", null ], + [ "m_pgPropChartProp", "class_chart_view_base.html#a51f2301e489e6ca6309948c51953d2eb", null ], + [ "m_pgPropChartTitle", "class_chart_view_base.html#a4083de6c29b7ab0997217c32e246ee0b", null ], + [ "m_pgPropDraw", "class_chart_view_base.html#af69de67731b917ec6f5eef8d20e3e4c8", null ], + [ "m_pgProplineAxis", "class_chart_view_base.html#afd083ffdfe84b6f2460efdcd928c8edd", null ], + [ "m_pgPropLineProp", "class_chart_view_base.html#a34f689775bc42f1f11a7b84067a98808", null ], + [ "m_pgProplineThick", "class_chart_view_base.html#a561157aa85ca4ad02d28870b1c2c856a", null ], + [ "m_pgProplineType", "class_chart_view_base.html#aafb4ae39c6001ad8efb213ea54561b5d", null ], + [ "m_pgPropMargins", "class_chart_view_base.html#a9bcd17e77ca213af3c6cca1b05508d85", null ], + [ "m_pgPropMarginsBot", "class_chart_view_base.html#ac9b41d88147f15b2ce6d76f117bfff75", null ], + [ "m_pgPropMarginsLeft", "class_chart_view_base.html#a720211e750c1184bced8da8db3fb1438", null ], + [ "m_pgPropMarginsRight", "class_chart_view_base.html#afa436ffebb21ce63202333cc33f02b8d", null ], + [ "m_pgPropMarginsUp", "class_chart_view_base.html#a7c69cf95fa34405e07c420275aca35f4", null ], + [ "m_pgPropXLabel", "class_chart_view_base.html#a96122bb85c3bfbf72369b2a0b3ee9340", null ], + [ "m_pgPropXMax", "class_chart_view_base.html#a6b4dad71a2c76cc196f671c74c57bc38", null ], + [ "m_pgPropXMin", "class_chart_view_base.html#ab7fff2a1e52f784a92edc1e9808bf6a5", null ], + [ "m_pgPropYLabel", "class_chart_view_base.html#afef3a2f6f799ee3bcac9a796cddc0ada", null ], + [ "m_pgPropYMax", "class_chart_view_base.html#a43e25960f37484e564f8043b273760cd", null ], + [ "m_pgPropYMin", "class_chart_view_base.html#a0d66080c5a61b4a544111cd829cd88b8", null ], + [ "m_treeCtrl", "class_chart_view_base.html#adc3855389d4369940b7caafa0c446851", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_connection_line-members.html b/docs/doxygen/html/class_connection_line-members.html index 9d322ca..5ef6ac0 100644 --- a/docs/doxygen/html/class_connection_line-members.html +++ b/docs/doxygen/html/class_connection_line-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ConnectionLine Member List
@@ -206,11 +221,14 @@ $(function() { ~ControlElement() (defined in ControlElement)ControlElement ~Element()Elementvirtual
+ - + diff --git a/docs/doxygen/html/class_connection_line.html b/docs/doxygen/html/class_connection_line.html index d261346..002e31b 100644 --- a/docs/doxygen/html/class_connection_line.html +++ b/docs/doxygen/html/class_connection_line.html @@ -5,10 +5,17 @@ -PSP-UFU: ConnectionLine Class Reference +ConnectionLine Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -500,7 +515,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 6 of file ConnectionLine.h.

+

Member Function Documentation

◆ Contains()

@@ -535,6 +553,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 41 of file ConnectionLine.cpp.

+
@@ -582,6 +602,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 21 of file ConnectionLine.cpp.

+ @@ -612,6 +634,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 188 of file ConnectionLine.cpp.

+ @@ -648,6 +672,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 49 of file ConnectionLine.cpp.

+ @@ -684,6 +710,8 @@ Additional Inherited Members

Reimplemented from ControlElement.

+

Definition at line 146 of file ConnectionLine.cpp.

+ @@ -720,6 +748,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 180 of file ConnectionLine.cpp.

+ @@ -756,18 +786,24 @@ Additional Inherited Members

Reimplemented from ControlElement.

+

Definition at line 152 of file ConnectionLine.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_connection_line.js b/docs/doxygen/html/class_connection_line.js new file mode 100644 index 0000000..c254362 --- /dev/null +++ b/docs/doxygen/html/class_connection_line.js @@ -0,0 +1,37 @@ +var class_connection_line = +[ + [ "ConnectionLineType", "class_connection_line.html#a2a963ed3d60ec6dd27c7871de2add2b3", [ + [ "ELEMENT_ELEMENT", "class_connection_line.html#a2a963ed3d60ec6dd27c7871de2add2b3a9e0c502edf0ff15cc67e21dc8c56f787", null ], + [ "ELEMENT_LINE", "class_connection_line.html#a2a963ed3d60ec6dd27c7871de2add2b3aad6889d9a6eab815ec22c331359edabf", null ] + ] ], + [ "ConnectionLine", "class_connection_line.html#aa2223b68c7621f48a583d7cb2ca61799", null ], + [ "ConnectionLine", "class_connection_line.html#aa70edf3aaff3d0bb275c73e702fa5caa", null ], + [ "~ConnectionLine", "class_connection_line.html#a19d458f8acd7c91d1f08c49e17e26095", null ], + [ "AppendNode", "class_connection_line.html#a516cdb3e3ff5bc9cf3feb328fdf903d7", null ], + [ "Contains", "class_connection_line.html#a65c6d7139587c973a92dd1009909597f", null ], + [ "Draw", "class_connection_line.html#a71cb3502dd098e1d1ef541668789586e", null ], + [ "GetCopy", "class_connection_line.html#a131a890bd54059c5370f1dc5156c192c", null ], + [ "GetLineChildList", "class_connection_line.html#afd702cfe81ef816929d65b7a6074b162", null ], + [ "GetMidPoint", "class_connection_line.html#af7119187720c71fa750a3d272b8e8384", null ], + [ "GetOffset", "class_connection_line.html#a9909debcc733ea87a950e8ebcde867ef", null ], + [ "GetParentLine", "class_connection_line.html#af9487e1d0ddfde7160be78249043d3d6", null ], + [ "GetType", "class_connection_line.html#add4910d06c25d6913bdd1a6374978779", null ], + [ "GetValue", "class_connection_line.html#ad3486632dedb051c17272eb7c2877092", null ], + [ "Intersects", "class_connection_line.html#aaa3e63c2e48338e324ee7b58911c86b6", null ], + [ "Move", "class_connection_line.html#a49300d04c6dd4bcc6f4569c0c47780c7", null ], + [ "RemoveParent", "class_connection_line.html#a3f5584348b86e665161b033d4ce8d702", null ], + [ "SetOffset", "class_connection_line.html#a67293a19a99e37420a5b6915de7d11e2", null ], + [ "SetParentLine", "class_connection_line.html#a08a50efbd1f431c0c8d4b9643e7ae33c", null ], + [ "SetTemporarySecondPoint", "class_connection_line.html#a98a54fca1984318ae53e1c8e538133d2", null ], + [ "SetType", "class_connection_line.html#ae60468d2bc08d1328f56fd82912c5404", null ], + [ "SetValue", "class_connection_line.html#a2193d2ac9abb8c69daa247c27697585a", null ], + [ "StartMove", "class_connection_line.html#a292d284d6f30b209995c2a9877f9fe36", null ], + [ "UpdatePoints", "class_connection_line.html#a5bed4cd17da106121af01e802eb22a8a", null ], + [ "m_lineOffset", "class_connection_line.html#a55c2a023714de968cdafe2df5e54fcaf", null ], + [ "m_moveStartOffset", "class_connection_line.html#aae05812691499dbef7290c142562509d", null ], + [ "m_moveStartPtY", "class_connection_line.html#a567a84184111f49da8a01a144daf41d8", null ], + [ "m_parentLine", "class_connection_line.html#a082529e8611fd080c14d7a94cb2cb004", null ], + [ "m_tmpSndPt", "class_connection_line.html#a80a9d29b1cbbd6cf8406b9250114d70b", null ], + [ "m_type", "class_connection_line.html#a4955e04e8a989edd6fc0bb673835d994", null ], + [ "m_value", "class_connection_line.html#a797add8557400b76a036547480c26db7", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_constant-members.html b/docs/doxygen/html/class_constant-members.html index 23d4fad..63fff4d 100644 --- a/docs/doxygen/html/class_constant-members.html +++ b/docs/doxygen/html/class_constant-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Constant Member List
@@ -188,11 +203,14 @@ $(function() { ~ControlElement() (defined in ControlElement)ControlElement ~Element()Elementvirtual
+ - + diff --git a/docs/doxygen/html/class_constant.html b/docs/doxygen/html/class_constant.html index 460e089..065179d 100644 --- a/docs/doxygen/html/class_constant.html +++ b/docs/doxygen/html/class_constant.html @@ -5,10 +5,17 @@ -PSP-UFU: Constant Class Reference +Constant Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -450,7 +465,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 11 of file Constant.h.

+

Member Function Documentation

◆ Contains()

@@ -485,6 +503,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 18 of file Constant.h.

+
@@ -532,6 +552,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 15 of file Constant.cpp.

+ @@ -562,6 +584,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 106 of file Constant.cpp.

+ @@ -598,6 +622,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 19 of file Constant.h.

+ @@ -634,6 +660,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 50 of file Constant.cpp.

+ @@ -682,18 +710,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 39 of file Constant.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_constant.js b/docs/doxygen/html/class_constant.js new file mode 100644 index 0000000..49211d2 --- /dev/null +++ b/docs/doxygen/html/class_constant.js @@ -0,0 +1,18 @@ +var class_constant = +[ + [ "Constant", "class_constant.html#ab9c6dd7274622de1a75ec8b2ec01e6bf", null ], + [ "~Constant", "class_constant.html#a478e7c170dfd9818aacb8114cf5993a0", null ], + [ "Contains", "class_constant.html#ae091eb79633beb158dc06880424f7ce6", null ], + [ "Draw", "class_constant.html#afc4d8739980ae1b57e9c5058c2e05591", null ], + [ "GetCopy", "class_constant.html#ac566e3a63326d3f543a55af14ae0f8fa", null ], + [ "GetValue", "class_constant.html#a9e3e7c749269149db7cc6a155ec5cf95", null ], + [ "Intersects", "class_constant.html#ac2e2c958b3d38ed381d59cbb361974b2", null ], + [ "Rotate", "class_constant.html#a867addfc3c1a755b7aa0032d119245c6", null ], + [ "SetValue", "class_constant.html#a059fdb74aa6aea03fbd7a22de1def41c", null ], + [ "ShowForm", "class_constant.html#af6bded0e01717303bb71da9e45c2b061", null ], + [ "UpdatePoints", "class_constant.html#afad1a9ac77a4e2b94530d045bffa3c37", null ], + [ "UpdateText", "class_constant.html#adda09379e36416476d5e5a2f61c8dad3", null ], + [ "m_fontSize", "class_constant.html#a3d1cff7badada5e9350d19649086a79a", null ], + [ "m_glStringValue", "class_constant.html#a1916148248a168f589791ec0435ec937", null ], + [ "m_value", "class_constant.html#a34ebce575d175d506f46adc72c3a2070", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_constant_form-members.html b/docs/doxygen/html/class_constant_form-members.html index b42b131..3351916 100644 --- a/docs/doxygen/html/class_constant_form-members.html +++ b/docs/doxygen/html/class_constant_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ConstantForm Member List
@@ -90,11 +105,14 @@ $(function() { ~ConstantForm() (defined in ConstantForm)ConstantFormvirtual ~ConstantFormBase() (defined in ConstantFormBase)ConstantFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_constant_form.html b/docs/doxygen/html/class_constant_form.html index ae870e2..c804cbc 100644 --- a/docs/doxygen/html/class_constant_form.html +++ b/docs/doxygen/html/class_constant_form.html @@ -5,10 +5,17 @@ -PSP-UFU: ConstantForm Class Reference +ConstantForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -148,16 +163,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_constant_form.js b/docs/doxygen/html/class_constant_form.js new file mode 100644 index 0000000..25f2b32 --- /dev/null +++ b/docs/doxygen/html/class_constant_form.js @@ -0,0 +1,10 @@ +var class_constant_form = +[ + [ "ConstantForm", "class_constant_form.html#a81d4d7694ffd7d9d97b73b1421404854", null ], + [ "~ConstantForm", "class_constant_form.html#a6b3f80791962ac90c1da67a3389f01a8", null ], + [ "OnCancelButtonClick", "class_constant_form.html#aa4ad77b8f4b5c6e0d970538e9fe42369", null ], + [ "OnOKButtonClick", "class_constant_form.html#a8a7ca1b86943019d2669ae9298e8a7e6", null ], + [ "ValidateData", "class_constant_form.html#afa4ef55c3c3b0b1d731e57dccfd3d50a", null ], + [ "m_constant", "class_constant_form.html#ab4bb96ff5492980e3faa9bc146792642", null ], + [ "m_parent", "class_constant_form.html#a370867cabd4546532e74a45692ee1f9f", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_constant_form_base-members.html b/docs/doxygen/html/class_constant_form_base-members.html index b12cae6..73fd967 100644 --- a/docs/doxygen/html/class_constant_form_base-members.html +++ b/docs/doxygen/html/class_constant_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ConstantFormBase Member List
@@ -85,11 +100,14 @@ $(function() { OnOKButtonClick(wxCommandEvent &event) (defined in ConstantFormBase)ConstantFormBaseinlineprotectedvirtual ~ConstantFormBase() (defined in ConstantFormBase)ConstantFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_constant_form_base.html b/docs/doxygen/html/class_constant_form_base.html index 49df475..502783e 100644 --- a/docs/doxygen/html/class_constant_form_base.html +++ b/docs/doxygen/html/class_constant_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: ConstantFormBase Class Reference +ConstantFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -134,16 +149,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_constant_form_base.js b/docs/doxygen/html/class_constant_form_base.js new file mode 100644 index 0000000..9830550 --- /dev/null +++ b/docs/doxygen/html/class_constant_form_base.js @@ -0,0 +1,19 @@ +var class_constant_form_base = +[ + [ "ConstantFormBase", "class_constant_form_base.html#a5558f2f8b9ef633a3fcddc41541b6d42", null ], + [ "~ConstantFormBase", "class_constant_form_base.html#ab51a2d238d94e9e437af4eaf7e4d13f6", null ], + [ "GetButtonCancel", "class_constant_form_base.html#a2b824eb2d3d46733708d794b201fe092", null ], + [ "GetButtonOK", "class_constant_form_base.html#a37822df309a1260995e1041f0db5bde7", null ], + [ "GetNotebook", "class_constant_form_base.html#ad44906e7590449a0b71adcdc2c231422", null ], + [ "GetPanelGeneral", "class_constant_form_base.html#aa26c32ca1da62ff10ef1c074dc961b78", null ], + [ "GetStaticTextValue", "class_constant_form_base.html#a944dd92ff574dad388f90c7962929d12", null ], + [ "GetTextCtrlValue", "class_constant_form_base.html#a8eb28b11673e380878c3d30623203c69", null ], + [ "OnCancelButtonClick", "class_constant_form_base.html#af77b45b748f679a1895c69578d0a62ce", null ], + [ "OnOKButtonClick", "class_constant_form_base.html#ad9296d05ec4b36ef59108bf72ddfdaca", null ], + [ "m_buttonCancel", "class_constant_form_base.html#a8c2c85c2dbe59fc4831024ad4bb9e675", null ], + [ "m_buttonOK", "class_constant_form_base.html#aa56d043968b6ebdfdafbe30ca6d02569", null ], + [ "m_notebook", "class_constant_form_base.html#a1b97bf3e083d829859cca12dde3da9ab", null ], + [ "m_panelGeneral", "class_constant_form_base.html#a8f63d297eb21c599da233e9d3e1273e7", null ], + [ "m_staticTextValue", "class_constant_form_base.html#acc606e8951953ebde5bbceb507148141", null ], + [ "m_textCtrlValue", "class_constant_form_base.html#a6fe68e9986fc74437ead27503fe7592a", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_editor-members.html b/docs/doxygen/html/class_control_editor-members.html index 0a5f54f..b349a5b 100644 --- a/docs/doxygen/html/class_control_editor-members.html +++ b/docs/doxygen/html/class_control_editor-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlEditor Member List
@@ -149,11 +164,14 @@ $(function() { ~ControlEditor() (defined in ControlEditor)ControlEditorvirtual ~ControlEditorBase() (defined in ControlEditorBase)ControlEditorBasevirtual
+ - + diff --git a/docs/doxygen/html/class_control_editor.html b/docs/doxygen/html/class_control_editor.html index ed68dbe..06cca06 100644 --- a/docs/doxygen/html/class_control_editor.html +++ b/docs/doxygen/html/class_control_editor.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlEditor Class Reference +ControlEditor Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -311,16 +326,23 @@ wxButton * m_buttonTestm_buttonOK   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_control_editor.js b/docs/doxygen/html/class_control_editor.js new file mode 100644 index 0000000..39a7e54 --- /dev/null +++ b/docs/doxygen/html/class_control_editor.js @@ -0,0 +1,64 @@ +var class_control_editor = +[ + [ "ControlEditorMode", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8", [ + [ "MODE_EDIT", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8a4f27d3a6e627373c6dab49206d3c5396", null ], + [ "MODE_MOVE_ELEMENT", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8a539fa4f367d4a743a91449b5563c69cc", null ], + [ "MODE_MOVE_LINE", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8a48253406e150aa9937e3550adcd8e21a", null ], + [ "MODE_DRAG", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8a8067d7e02113c1a950938cc2c3ae36ee", null ], + [ "MODE_DRAG_INSERT", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8a56c3cfc721af75f0b0f97b3756e98b3c", null ], + [ "MODE_INSERT", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8ad9848ec4aa8e8d35eca5b0ffe2fa5a8c", null ], + [ "MODE_INSERT_LINE", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8ae6f5f5a536ef36085f4ed1737d04ea4b", null ], + [ "MODE_SELECTION_RECT", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8a49eb503591225443520212e1cbf82e96", null ], + [ "MODE_PASTE", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8a22dafcbdb1931bb48c86b7bd9d68dc75", null ], + [ "MODE_DRAG_PASTE", "class_control_editor.html#ae3dacc5ee13ae3f550c91fe6fae628b8af573caddb989c1933e55550dd547a832", null ] + ] ], + [ "ControlEditor", "class_control_editor.html#a27220dbc4068ed07d16331af81afb3ab", null ], + [ "~ControlEditor", "class_control_editor.html#a6507f967ce7383e2c6ca21c1a3d20cf6", null ], + [ "AddElement", "class_control_editor.html#ada45fc959e8d3e1078a57d2e48cf5766", null ], + [ "BuildControlElementPanel", "class_control_editor.html#a80699a8aa1b76917b108797c172cd680", null ], + [ "CheckConnections", "class_control_editor.html#ac3778ec996cc76c4182700889d18440e", null ], + [ "ConsolidateTexts", "class_control_editor.html#a399ce8936bf198d0ade2b4adccac22c5", null ], + [ "DeleteLineFromList", "class_control_editor.html#ae4b1d8d1b470336cce4183a1bbd5d068", null ], + [ "DeleteSelectedElements", "class_control_editor.html#a90a6ad770299c3ae0603ff138f688de8", null ], + [ "GetConnectionLineList", "class_control_editor.html#ac4cacf9ca99d8027a72a720053b10b61", null ], + [ "GetControlElementList", "class_control_editor.html#a017c89c59e8a7cbd57468b7c9f20e4a1", null ], + [ "LeftClickDown", "class_control_editor.html#a0dce800f38cea7486f29b4b6b1ce07b4", null ], + [ "OnButtonOKClick", "class_control_editor.html#a8b951cd7445f6da64e85c2f8b524ff0f", null ], + [ "OnClose", "class_control_editor.html#a308c45508097115b327974543d13f7ac", null ], + [ "OnDoubleClick", "class_control_editor.html#aa48d04b70be526ffa03575ef60595566", null ], + [ "OnExportClick", "class_control_editor.html#a26af0c6457a955453712fb096e49c368", null ], + [ "OnIdle", "class_control_editor.html#a369303f887fafe4ab0d7ef519cb52081", null ], + [ "OnImportClick", "class_control_editor.html#a65eac228e45b35ea5e21b81a1633c08e", null ], + [ "OnKeyDown", "class_control_editor.html#a8f5a23ee9a041562aa1ef2337e117c0d", null ], + [ "OnLeftClickDown", "class_control_editor.html#aa6b664ecb8872c1f20203d85436f7e20", null ], + [ "OnLeftClickUp", "class_control_editor.html#a1f12c0fcc5fe29c9c86a8af58bc78bb6", null ], + [ "OnMiddleDown", "class_control_editor.html#aa18dfbaac2dd3d98cdf5dee0a324a15e", null ], + [ "OnMiddleUp", "class_control_editor.html#a58321d531d6c368e00a6ada65d209343", null ], + [ "OnMouseMotion", "class_control_editor.html#ab52287561b07d79f6a3c60b841790b91", null ], + [ "OnPaint", "class_control_editor.html#ace7afe649cfaf3e233374764c7855cbf", null ], + [ "OnScroll", "class_control_editor.html#a925f1511d80b28c106b090eb4246d784", null ], + [ "OnTestClick", "class_control_editor.html#a8cc0accd97433980a0cf0da4b7761208", null ], + [ "Redraw", "class_control_editor.html#a212828bd1ce2012a6a5dc921f796a16e", null ], + [ "RotateSelectedElements", "class_control_editor.html#a1ff32f01ab5c2c3aeaf78ce545805a29", null ], + [ "SetConnectionsList", "class_control_editor.html#aba8a6d65786800247603cf40a6c92d47", null ], + [ "SetControlContainer", "class_control_editor.html#a2f72be0c04ff7c86f227a1ed55c269fc", null ], + [ "SetElementsList", "class_control_editor.html#a2bf5a46f065abe95251e30ea6006eca3", null ], + [ "SetLastElementID", "class_control_editor.html#adade1f7f85eaf3406536371787aea54d", null ], + [ "SetViewport", "class_control_editor.html#ae02c4f6a57f265dca61b0d610c133045", null ], + [ "m_camera", "class_control_editor.html#a71c5da7fb7270b80e3b1e82e14317b46", null ], + [ "m_connectionList", "class_control_editor.html#ac3c08c1ee2f1d5d06bcc27925d5929bc", null ], + [ "m_ctrlContainer", "class_control_editor.html#ac6e551c5fee3258928f282981c289c1c", null ], + [ "m_elementList", "class_control_editor.html#ad525c39d3c545df03572971e6082b632", null ], + [ "m_firstDraw", "class_control_editor.html#a7e1f15ddaba866993fab86b70920765d", null ], + [ "m_glContext", "class_control_editor.html#ab49ffbb72b94f9fc84b7db61be5a9bca", null ], + [ "m_inputType", "class_control_editor.html#aede55dc44f1bcc87ffd3e004dcb902be", null ], + [ "m_ioFlags", "class_control_editor.html#a1f01fdd06ab4e520a62af5fcab087302", null ], + [ "m_lastElementID", "class_control_editor.html#abc63499d3b4469db86a1f60c3260b8e6", null ], + [ "m_mode", "class_control_editor.html#aea00a18800e7da75aecc926a9d0db3be", null ], + [ "m_selectionRect", "class_control_editor.html#a85b81e5fb2f4c96116c2b3eeaa419552", null ], + [ "m_simTime", "class_control_editor.html#ad2f0a10ba40e0f0443919192c38f68ba", null ], + [ "m_slope", "class_control_editor.html#aa8582a8efc00e48fe96da0963c1cc18b", null ], + [ "m_startSelRect", "class_control_editor.html#a059661d8a819d7e42b91653ad3bc7edf", null ], + [ "m_startTime", "class_control_editor.html#a76189d7ee879ef58c5b2d57dff2526cb", null ], + [ "m_timeStep", "class_control_editor.html#ad4fb540024c0f19e09c6b177c40c7653", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_editor_base-members.html b/docs/doxygen/html/class_control_editor_base-members.html index 5d8c286..10a7265 100644 --- a/docs/doxygen/html/class_control_editor_base-members.html +++ b/docs/doxygen/html/class_control_editor_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlEditorBase Member List
@@ -104,11 +119,14 @@ $(function() { OnTestClick(wxCommandEvent &event) (defined in ControlEditorBase)ControlEditorBaseinlineprotectedvirtual ~ControlEditorBase() (defined in ControlEditorBase)ControlEditorBasevirtual
+ - + diff --git a/docs/doxygen/html/class_control_editor_base.html b/docs/doxygen/html/class_control_editor_base.html index 8af8151..14b16eb 100644 --- a/docs/doxygen/html/class_control_editor_base.html +++ b/docs/doxygen/html/class_control_editor_base.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlEditorBase Class Reference +ControlEditorBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -193,16 +208,23 @@ wxButton * m_buttonTestm_buttonOK   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_control_editor_base.js b/docs/doxygen/html/class_control_editor_base.js new file mode 100644 index 0000000..6d442f8 --- /dev/null +++ b/docs/doxygen/html/class_control_editor_base.js @@ -0,0 +1,38 @@ +var class_control_editor_base = +[ + [ "ID_RIBBON_EXPORT", "class_control_editor_base.html#aac385a40c76a8036b07b6a7f08aeb062a5666c9d2fa9c12a8ba29af0534fcd9d5", null ], + [ "ID_RIBBON_IMPORT", "class_control_editor_base.html#aac385a40c76a8036b07b6a7f08aeb062abdc9b82b5a3ad6189dc3437bc07cc0e3", null ], + [ "ControlEditorBase", "class_control_editor_base.html#aa2b2fe5ea81a3eb8c28ee9064773be93", null ], + [ "~ControlEditorBase", "class_control_editor_base.html#acdc078affdcc3daac68d8b83c630bfaf", null ], + [ "GetAuimgr", "class_control_editor_base.html#a7b19542b569c036a6bef179d918dfb5b", null ], + [ "GetButtonOK", "class_control_editor_base.html#abc78a2b37d5ce3dda133a1a1243e7d0d", null ], + [ "GetButtonTest", "class_control_editor_base.html#aea5060f214daa10dbd7742f8169f97df", null ], + [ "GetGlCanvas", "class_control_editor_base.html#a0cb93fb185a758f8da7419ac5d79aef3", null ], + [ "GetPanelButtons", "class_control_editor_base.html#ac5edc2aea7c9e063f1d36c06442792f4", null ], + [ "GetPanelControlElements", "class_control_editor_base.html#abeeae17fcf7de0fd5a15377c3db05f34", null ], + [ "GetPanelWorkspace", "class_control_editor_base.html#a8b1a2dfef423479578fdc3eb086f2f4f", null ], + [ "GetToolbarMain", "class_control_editor_base.html#a2597f41925fa2d560fd7edaa0f8b544f", null ], + [ "OnButtonOKClick", "class_control_editor_base.html#a1ad8acf35865a65e9da27f72eb40f863", null ], + [ "OnClose", "class_control_editor_base.html#af8715ecc176911865823d2bc777e8501", null ], + [ "OnDoubleClick", "class_control_editor_base.html#af41c63751f51341e35a71ea5048244a4", null ], + [ "OnExportClick", "class_control_editor_base.html#aa99174f98107c89bd6026579ec2f4343", null ], + [ "OnIdle", "class_control_editor_base.html#a175f41bf34d4b7a355b9e45b58863b3f", null ], + [ "OnImportClick", "class_control_editor_base.html#a9078a25ee05b6eec3e874e4bf375aba7", null ], + [ "OnKeyDown", "class_control_editor_base.html#aac008c284d2bc841ed52bfaca84ee85a", null ], + [ "OnLeftClickDown", "class_control_editor_base.html#a6c7f0ed4ebe6afb448e3713afcd39078", null ], + [ "OnLeftClickUp", "class_control_editor_base.html#a3430458d81963a8fa14e7380bb1cb7cb", null ], + [ "OnMiddleDown", "class_control_editor_base.html#a93f2731c7c21cda28648bd561f4a1d2c", null ], + [ "OnMiddleUp", "class_control_editor_base.html#a42c08a6003eb3953a7494d3e61290787", null ], + [ "OnMouseMotion", "class_control_editor_base.html#a167986f923077001a235f6dd57d25c62", null ], + [ "OnPaint", "class_control_editor_base.html#a322149e110f763fcbed7b58af8b1c605", null ], + [ "OnScroll", "class_control_editor_base.html#a123e5eb632e5fdb92962ab6d8fa6534d", null ], + [ "OnTestClick", "class_control_editor_base.html#a54eb878457bf24962a00e0b895f7ca1f", null ], + [ "m_auimgr", "class_control_editor_base.html#ae506926ab0a4f91dddb22e0e9fca4900", null ], + [ "m_buttonOK", "class_control_editor_base.html#ad639d4afcd7f3b9eac6cd8a9f8a20ce6", null ], + [ "m_buttonTest", "class_control_editor_base.html#a9988f3cd363ab1c4da96b3ccefa164a5", null ], + [ "m_glCanvas", "class_control_editor_base.html#ad1f69087303790b7eedd86022cac6da4", null ], + [ "m_panelButtons", "class_control_editor_base.html#ac16f79d8c489e0d64a0ba2f8635c413a", null ], + [ "m_panelControlElements", "class_control_editor_base.html#afeb914b18f305b1dedd01aae96c9a4d8", null ], + [ "m_panelWorkspace", "class_control_editor_base.html#a5cad91a2f77417d0a19e2c4585966ce2", null ], + [ "m_toolbarMain", "class_control_editor_base.html#ac358a5750676e8204d1ad7a899195636", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_element-members.html b/docs/doxygen/html/class_control_element-members.html index 4454b90..30693c0 100644 --- a/docs/doxygen/html/class_control_element-members.html +++ b/docs/doxygen/html/class_control_element-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlElement Member List
@@ -180,11 +195,14 @@ $(function() { ~ControlElement() (defined in ControlElement)ControlElement ~Element()Elementvirtual
+ - + diff --git a/docs/doxygen/html/class_control_element.html b/docs/doxygen/html/class_control_element.html index 4f84770..cc582c7 100644 --- a/docs/doxygen/html/class_control_element.html +++ b/docs/doxygen/html/class_control_element.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlElement Class Reference +ControlElement Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -436,7 +451,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 53 of file ControlElement.h.

+

Member Function Documentation

◆ Move()

@@ -473,6 +491,8 @@ Additional Inherited Members

Reimplemented in Gain, and ConnectionLine.

+

Definition at line 109 of file ControlElement.cpp.

+
@@ -511,18 +531,24 @@ Additional Inherited Members

Reimplemented in ConnectionLine.

+

Definition at line 100 of file ControlElement.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_control_element.js b/docs/doxygen/html/class_control_element.js new file mode 100644 index 0000000..4123bc5 --- /dev/null +++ b/docs/doxygen/html/class_control_element.js @@ -0,0 +1,20 @@ +var class_control_element = +[ + [ "ControlElement", "class_control_element.html#aa03ed482f0f726e8b4724e815b1cdfb1", null ], + [ "~ControlElement", "class_control_element.html#aeb164b935f9bdb0646b988782e979758", null ], + [ "DrawNodes", "class_control_element.html#ab77716614985cab1c7f098af1603c2f1", null ], + [ "GetNodeList", "class_control_element.html#aac3aa20b1c5f9eb7e188298dda34600f", null ], + [ "GetOutput", "class_control_element.html#a038e940fc33ac3e443502169104d7ebd", null ], + [ "IsSolved", "class_control_element.html#a8958776ec4e32bc0b23f90f4ee9ea2e3", null ], + [ "Move", "class_control_element.html#ac8bd52ddb8eed51a217fecb2eed65708", null ], + [ "ReplaceNode", "class_control_element.html#a8f817b751c7766f070cee27d094a5499", null ], + [ "SetNodeList", "class_control_element.html#a375be1f070c19579c27d381be2b09e4b", null ], + [ "SetOutput", "class_control_element.html#a559fa662c390b9257c2e23fabdfd1801", null ], + [ "SetSolved", "class_control_element.html#a899b994168cf0c98695e82a4f3e7c98b", null ], + [ "Solve", "class_control_element.html#aeee4f373f0ebca4589b9ef77fe40c291", null ], + [ "StartMove", "class_control_element.html#a61440a392d438de163bfe9ffb8e9efec", null ], + [ "UpdateText", "class_control_element.html#a802885ecd7464b6ae085da276be4d06c", null ], + [ "m_nodeList", "class_control_element.html#af1813931d9b51f5def437ba3c31e8aba", null ], + [ "m_output", "class_control_element.html#af669ba711650e3befaad4ed70d2776ab", null ], + [ "m_solved", "class_control_element.html#abcd5f56c2c771a58b0f1ea80eb8c6a86", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_element_button-members.html b/docs/doxygen/html/class_control_element_button-members.html index 9e5aacb..1b4b08f 100644 --- a/docs/doxygen/html/class_control_element_button-members.html +++ b/docs/doxygen/html/class_control_element_button-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlElementButton Member List
@@ -86,11 +101,14 @@ $(function() { OnPaint(wxPaintEvent &event) (defined in ControlElementButton)ControlElementButtonprotectedvirtual ~ControlElementButton() (defined in ControlElementButton)ControlElementButton
+ - + diff --git a/docs/doxygen/html/class_control_element_button.html b/docs/doxygen/html/class_control_element_button.html index 82ebfb6..12c0459 100644 --- a/docs/doxygen/html/class_control_element_button.html +++ b/docs/doxygen/html/class_control_element_button.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlElementButton Class Reference +ControlElementButton Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -136,16 +151,23 @@ bool m_selected = fals wxSize m_buttonSize   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_control_element_button.js b/docs/doxygen/html/class_control_element_button.js new file mode 100644 index 0000000..e2aa0d6 --- /dev/null +++ b/docs/doxygen/html/class_control_element_button.js @@ -0,0 +1,20 @@ +var class_control_element_button = +[ + [ "ControlElementButton", "class_control_element_button.html#ad45b776fd9046f11fe147e8145474478", null ], + [ "~ControlElementButton", "class_control_element_button.html#a679fe222f172d35dc1a7e157a42a7dbf", null ], + [ "OnLeftClickDown", "class_control_element_button.html#aef6c1c0b63d71a9e1a99601946d6e0ff", null ], + [ "OnLeftClickUp", "class_control_element_button.html#ab53fa1072a78f8f2e81548bdb7edde4f", null ], + [ "OnMouseEnter", "class_control_element_button.html#a018b99c1b086125e7b728c2cc25b5ff5", null ], + [ "OnMouseLeave", "class_control_element_button.html#ade13a62ffdb211d3851f653f2b3dd004", null ], + [ "OnPaint", "class_control_element_button.html#afa6effe38a6b8a4070d36dc09dfcd429", null ], + [ "m_borderSize", "class_control_element_button.html#aea4e242359ba70bb26cd29b2bab7d7c8", null ], + [ "m_buttonSize", "class_control_element_button.html#a81773f33a05c2b976bef693604a3ca4b", null ], + [ "m_font", "class_control_element_button.html#ac711aa61fe25de7f632a3f2f75fe4fae", null ], + [ "m_image", "class_control_element_button.html#ab87a13cd01a3ac7222a1df2e5252a2ac", null ], + [ "m_imagePosition", "class_control_element_button.html#a4ad1738a01a24c58cf0b21d8f3195da8", null ], + [ "m_imageSize", "class_control_element_button.html#a4b1d55323d02bca75732b5e32878b1d0", null ], + [ "m_label", "class_control_element_button.html#aa0d011f5dc84d644c10709116c82d8bf", null ], + [ "m_labelPosition", "class_control_element_button.html#a831ba4a73c4a8c281edb072f3f68eff8", null ], + [ "m_mouseAbove", "class_control_element_button.html#a90252ea5c337a0836292a1154fc2fd8d", null ], + [ "m_selected", "class_control_element_button.html#af3ea4e284321f86aa12b98ac23ea2026", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_element_container-members.html b/docs/doxygen/html/class_control_element_container-members.html index 207fa95..0ca3991 100644 --- a/docs/doxygen/html/class_control_element_container-members.html +++ b/docs/doxygen/html/class_control_element_container-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlElementContainer Member List
@@ -97,11 +112,14 @@ $(function() { m_tfList (defined in ControlElementContainer)ControlElementContainerprotected ~ControlElementContainer() (defined in ControlElementContainer)ControlElementContainer
+ - + diff --git a/docs/doxygen/html/class_control_element_container.html b/docs/doxygen/html/class_control_element_container.html index 8d3987d..82b5262 100644 --- a/docs/doxygen/html/class_control_element_container.html +++ b/docs/doxygen/html/class_control_element_container.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlElementContainer Class Reference +ControlElementContainer Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -154,16 +169,23 @@ std::vector< Sum * > TransferFunction * > m_tfList   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_control_element_container.js b/docs/doxygen/html/class_control_element_container.js new file mode 100644 index 0000000..7c6b832 --- /dev/null +++ b/docs/doxygen/html/class_control_element_container.js @@ -0,0 +1,31 @@ +var class_control_element_container = +[ + [ "ControlElementContainer", "class_control_element_container.html#a8e89b69b1f6f0a0767759b6930e75b76", null ], + [ "~ControlElementContainer", "class_control_element_container.html#a25cdff59bb5283c51a399f046422c5e5", null ], + [ "ClearContainer", "class_control_element_container.html#a98d4686a08e9bb5e39c691f975c032b5", null ], + [ "FillContainer", "class_control_element_container.html#ac8db67b03eeb7de00e243849b02a4415", null ], + [ "FillContainer", "class_control_element_container.html#a0471ac31855189485313268d0b3a53db", null ], + [ "GetConnectionLineList", "class_control_element_container.html#a8bab1b359cd97adf9891a5f3356135a4", null ], + [ "GetConstantList", "class_control_element_container.html#a8f049a372e032db4d8d8d2196234c8c5", null ], + [ "GetContainerCopy", "class_control_element_container.html#ad1aaaff7d6dbc66698a6bffa37bb8485", null ], + [ "GetControlElementsList", "class_control_element_container.html#a57e2ab883b9b2c8d78109230617e6641", null ], + [ "GetExponentialList", "class_control_element_container.html#a9aaa1853009127385f2f37595a7901d8", null ], + [ "GetGainList", "class_control_element_container.html#a6a8d5ba14765607edca3f31d8f39308e", null ], + [ "GetIOControlList", "class_control_element_container.html#a3e5cb4d983fe93c3179e995172dac531", null ], + [ "GetLimiterList", "class_control_element_container.html#abc2b559a174da81354c45c9b7fbafb30", null ], + [ "GetMultiplierList", "class_control_element_container.html#a0bb9367530c05a868d51ca8ad73ad023", null ], + [ "GetRateLimiterList", "class_control_element_container.html#ad6675aa9a0a0b78365d4726342e1d629", null ], + [ "GetSumList", "class_control_element_container.html#acbcca330e6f6b92d29273c5af95faefa", null ], + [ "GetTFList", "class_control_element_container.html#acff46c06fa264fe0fe8b2408c490ff21", null ], + [ "m_cLineList", "class_control_element_container.html#ab09ab89629f66856cae22bc2fd9bb466", null ], + [ "m_constantList", "class_control_element_container.html#a94328dc8d8202522d3adf22ac53a2d19", null ], + [ "m_ctrlElementsList", "class_control_element_container.html#acd90e78160f526f5da29525af2bcbfab", null ], + [ "m_exponentialList", "class_control_element_container.html#a2d3264387b52901bcf79cbd502341787", null ], + [ "m_gainList", "class_control_element_container.html#a7e81693cb14f8531493b52067c14b5c2", null ], + [ "m_ioControlList", "class_control_element_container.html#a609362c029306d69a6a696ae0ef96d05", null ], + [ "m_limiterList", "class_control_element_container.html#a9b7c030f3701fdd3818017671d8ee3c8", null ], + [ "m_multiplierList", "class_control_element_container.html#a7fb7feffe045fa9b7f03b403a3006698", null ], + [ "m_rateLimiterList", "class_control_element_container.html#a826654db7241433454e6b05671cff795", null ], + [ "m_sumList", "class_control_element_container.html#a208a79da23c8349ea7460d1a38c8e458", null ], + [ "m_tfList", "class_control_element_container.html#a32afcd17e0f337c5ef4a6af55b5de358", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_element_solver-members.html b/docs/doxygen/html/class_control_element_solver-members.html index d36c699..868f3b1 100644 --- a/docs/doxygen/html/class_control_element_solver-members.html +++ b/docs/doxygen/html/class_control_element_solver-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlElementSolver Member List
@@ -88,11 +103,14 @@ $(function() { SolveNextStep(double input) (defined in ControlElementSolver)ControlElementSolvervirtual ~ControlElementSolver() (defined in ControlElementSolver)ControlElementSolverinlinevirtual
+ - + diff --git a/docs/doxygen/html/class_control_element_solver.html b/docs/doxygen/html/class_control_element_solver.html index f588c87..00defa9 100644 --- a/docs/doxygen/html/class_control_element_solver.html +++ b/docs/doxygen/html/class_control_element_solver.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlElementSolver Class Reference +ControlElementSolver Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -131,16 +146,23 @@ bool m_isOK = falseIOControl * m_outputControl = NULL   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_control_element_solver.js b/docs/doxygen/html/class_control_element_solver.js new file mode 100644 index 0000000..34f6147 --- /dev/null +++ b/docs/doxygen/html/class_control_element_solver.js @@ -0,0 +1,22 @@ +var class_control_element_solver = +[ + [ "ControlElementSolver", "class_control_element_solver.html#a2c1b921d9cdbd21b93883a19a587d682", null ], + [ "ControlElementSolver", "class_control_element_solver.html#ad9e006422893e09204aa1b8037223cc2", null ], + [ "ControlElementSolver", "class_control_element_solver.html#a18ed70b4ad042171dc155bdedeb66d0f", null ], + [ "~ControlElementSolver", "class_control_element_solver.html#a643df801dd9602f8b46f2f6239252e62", null ], + [ "FillAllConnectedChildren", "class_control_element_solver.html#a79fe08e24036417f54cda3a42ba0fe7d", null ], + [ "GetLastSolution", "class_control_element_solver.html#ae5609c3bfd32844dc0e60384cdbacd02", null ], + [ "GetSolutions", "class_control_element_solver.html#a8e4ee90763316c3259b3c9016858c7e7", null ], + [ "Initialize", "class_control_element_solver.html#ae7d7257ee2c087cb30be90868f615443", null ], + [ "InitializeValues", "class_control_element_solver.html#a0ab86b8eb7bb44d5566e67e130bc72c9", null ], + [ "IsOK", "class_control_element_solver.html#adfb19ac3a90a780338fc654a6b12b6ff", null ], + [ "SolveNextElement", "class_control_element_solver.html#aacf7e5e9c412b370655f5fa1fba7a928", null ], + [ "SolveNextStep", "class_control_element_solver.html#ab55025bf6838a7e6fe29a1418cbc2262", null ], + [ "m_ctrlContainer", "class_control_element_solver.html#ad3af5a426df58bb1c8ae975ec4f35207", null ], + [ "m_inputControl", "class_control_element_solver.html#a2048b5988e5edc2dfd73f349bfceb831", null ], + [ "m_integrationError", "class_control_element_solver.html#a8e4987bdffb2187479f68b167719469d", null ], + [ "m_isOK", "class_control_element_solver.html#a1626821f8807cee9a878dd19c023abc9", null ], + [ "m_outputControl", "class_control_element_solver.html#a7eb65b2465b751462cb08f21496607a6", null ], + [ "m_solutions", "class_control_element_solver.html#ae28a17ebf0397996fee1917ff7120856", null ], + [ "m_timeStep", "class_control_element_solver.html#a7ad46af105b0800f18a31c0e7fd0572c", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_system_test-members.html b/docs/doxygen/html/class_control_system_test-members.html index ddfae9d..c53b986 100644 --- a/docs/doxygen/html/class_control_system_test-members.html +++ b/docs/doxygen/html/class_control_system_test-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlSystemTest Member List
@@ -112,11 +127,14 @@ $(function() { ~ControlSystemTest() (defined in ControlSystemTest)ControlSystemTestvirtual ~ControlSystemTestBase() (defined in ControlSystemTestBase)ControlSystemTestBasevirtual
+ - + diff --git a/docs/doxygen/html/class_control_system_test.html b/docs/doxygen/html/class_control_system_test.html index 3a8ccbd..826af60 100644 --- a/docs/doxygen/html/class_control_system_test.html +++ b/docs/doxygen/html/class_control_system_test.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlSystemTest Class Reference +ControlSystemTest Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -214,16 +229,23 @@ wxButton * m_buttonRun wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_control_system_test.js b/docs/doxygen/html/class_control_system_test.js new file mode 100644 index 0000000..cf2ab11 --- /dev/null +++ b/docs/doxygen/html/class_control_system_test.js @@ -0,0 +1,12 @@ +var class_control_system_test = +[ + [ "ControlSystemTest", "class_control_system_test.html#acdc636ae43f8de2900c9edfd4ffa1236", null ], + [ "~ControlSystemTest", "class_control_system_test.html#a386bb7e35abcd8627a2d3d885d45506c", null ], + [ "OnCancelButtonClick", "class_control_system_test.html#af9c8768cd0ad3e9169734700f72c069b", null ], + [ "OnRunButtonClick", "class_control_system_test.html#aacc4e336a6843477a93054a564673c45", null ], + [ "m_inputType", "class_control_system_test.html#a294d4cb8091a4654af05c2ccfa6116d0", null ], + [ "m_simTime", "class_control_system_test.html#aec8dae62a93ff45c833d9ed2df6587cc", null ], + [ "m_slope", "class_control_system_test.html#a1c1c0bcc1cf29021c9ca41c473618eba", null ], + [ "m_startTime", "class_control_system_test.html#a7cf78a521119140422c6d48777792abf", null ], + [ "m_timeStep", "class_control_system_test.html#abeae891d322fc787dedf18b7250ed98a", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_control_system_test_base-members.html b/docs/doxygen/html/class_control_system_test_base-members.html index 93a4c52..0455426 100644 --- a/docs/doxygen/html/class_control_system_test_base-members.html +++ b/docs/doxygen/html/class_control_system_test_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ControlSystemTestBase Member List
@@ -105,11 +120,14 @@ $(function() { OnRunButtonClick(wxCommandEvent &event) (defined in ControlSystemTestBase)ControlSystemTestBaseinlineprotectedvirtual ~ControlSystemTestBase() (defined in ControlSystemTestBase)ControlSystemTestBasevirtual
+ - + diff --git a/docs/doxygen/html/class_control_system_test_base.html b/docs/doxygen/html/class_control_system_test_base.html index 2fc3db1..ab23fa8 100644 --- a/docs/doxygen/html/class_control_system_test_base.html +++ b/docs/doxygen/html/class_control_system_test_base.html @@ -5,10 +5,17 @@ -PSP-UFU: ControlSystemTestBase Class Reference +ControlSystemTestBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -194,16 +209,23 @@ wxButton * m_buttonRun wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_control_system_test_base.js b/docs/doxygen/html/class_control_system_test_base.js new file mode 100644 index 0000000..d48b356 --- /dev/null +++ b/docs/doxygen/html/class_control_system_test_base.js @@ -0,0 +1,39 @@ +var class_control_system_test_base = +[ + [ "ControlSystemTestBase", "class_control_system_test_base.html#a96d99c0b620ed8087f3b88a3d582d807", null ], + [ "~ControlSystemTestBase", "class_control_system_test_base.html#a621542bf81b47bfb6bd7bd5801d9c1db", null ], + [ "GetButtonCancel", "class_control_system_test_base.html#a4a006d191053b95008ccd5e316b716dc", null ], + [ "GetButtonRun", "class_control_system_test_base.html#a6cf21fb3da382223716d7476e9e431ec", null ], + [ "GetChoiceInput", "class_control_system_test_base.html#adc981fd7321d98ce4dbbf3003c3e3980", null ], + [ "GetNotebook", "class_control_system_test_base.html#a4b7c99fb9c5311ea7d3577521ca45a79", null ], + [ "GetPanelGeneral", "class_control_system_test_base.html#aa0fd45bb6dfaa37a65b25910bf6e4117", null ], + [ "GetStaticTextInput", "class_control_system_test_base.html#aee1d4162b23527dec025e5cbe203b398", null ], + [ "GetStaticTextSec_1", "class_control_system_test_base.html#ad489d07f841f7a6106fb872a8100fc49", null ], + [ "GetStaticTextSec_2", "class_control_system_test_base.html#af35d0dbdf1f53e19b149c4a530b48af8", null ], + [ "GetStaticTextSimTime", "class_control_system_test_base.html#ac18ef8dbc306e7f3fb8af1cb2cf22a91", null ], + [ "GetStaticTextSlope", "class_control_system_test_base.html#a552a565f4a02edbf0e2cd2fa271c12b8", null ], + [ "GetStaticTextStartTime", "class_control_system_test_base.html#af699283cce70508efa5bacc36410ff4b", null ], + [ "GetStaticTextStep", "class_control_system_test_base.html#aa5df8241abb4cd9f3c7915687343cbdc", null ], + [ "GetTextCtrlSimTime", "class_control_system_test_base.html#acaa3ee808dfc58ca22df1d611a6065a7", null ], + [ "GetTextCtrlSlope", "class_control_system_test_base.html#ae950f7d220a1216d348db10a5bb8be4a", null ], + [ "GetTextCtrlStartTime", "class_control_system_test_base.html#a628cffaa839815364459450b41b3c112", null ], + [ "GetTextCtrlTimeStep", "class_control_system_test_base.html#ad4638752e016c0563b9e089d76d08885", null ], + [ "OnCancelButtonClick", "class_control_system_test_base.html#ac5b335e89335ed431de8f1bd4bdd1e09", null ], + [ "OnRunButtonClick", "class_control_system_test_base.html#a4400af7155f4206feff0751d48d52faf", null ], + [ "m_buttonCancel", "class_control_system_test_base.html#a3baa6c84c696c089a293c2a982a34471", null ], + [ "m_buttonRun", "class_control_system_test_base.html#ae8c8fcc3f22e8d97cde81532761192a2", null ], + [ "m_choiceInput", "class_control_system_test_base.html#a195db7d2e45a61016fad104ada822c7c", null ], + [ "m_notebook", "class_control_system_test_base.html#acdc693fdab6c2d6474ab363d65ef6a2a", null ], + [ "m_panelGeneral", "class_control_system_test_base.html#ae62717cf83ab800d8fe653cdf0988d30", null ], + [ "m_staticTextInput", "class_control_system_test_base.html#a46f7a587c743aac23c7accc34a1183cf", null ], + [ "m_staticTextSec_1", "class_control_system_test_base.html#aa19f6d8957da5116f6e343344fc015ef", null ], + [ "m_staticTextSec_2", "class_control_system_test_base.html#a33a9c85a0b2c2e39294a5aef11112889", null ], + [ "m_staticTextSimTime", "class_control_system_test_base.html#a336273746f29c8d78359f9237dc1bd37", null ], + [ "m_staticTextSlope", "class_control_system_test_base.html#a6f0f36c980fc54791b263a73419c01f0", null ], + [ "m_staticTextStartTime", "class_control_system_test_base.html#a63ec22cbcdab700a08f26a271074728f", null ], + [ "m_staticTextStep", "class_control_system_test_base.html#a76a88d06456be838d95fb19c80e4dd7c", null ], + [ "m_textCtrlSimTime", "class_control_system_test_base.html#a8cd8155c81ae9117ab4db198b81343fc", null ], + [ "m_textCtrlSlope", "class_control_system_test_base.html#a761e09c61050f82b175aa57532bb675b", null ], + [ "m_textCtrlStartTime", "class_control_system_test_base.html#a03a5156ec7eda6efcc2c1989b283e18f", null ], + [ "m_textCtrlTimeStep", "class_control_system_test_base.html#a5e9c45d8592864b8950c7e881c7b3532", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_data_report-members.html b/docs/doxygen/html/class_data_report-members.html index bb7a975..45f98b6 100644 --- a/docs/doxygen/html/class_data_report-members.html +++ b/docs/doxygen/html/class_data_report-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
DataReport Member List
@@ -144,11 +159,14 @@ $(function() { ~DataReport() (defined in DataReport)DataReportvirtual ~DataReportBase() (defined in DataReportBase)DataReportBasevirtual
+ - + diff --git a/docs/doxygen/html/class_data_report.html b/docs/doxygen/html/class_data_report.html index e542e6f..9044008 100644 --- a/docs/doxygen/html/class_data_report.html +++ b/docs/doxygen/html/class_data_report.html @@ -5,10 +5,17 @@ -PSP-UFU: DataReport Class Reference +DataReport Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -300,16 +315,23 @@ wxPanel * m_panelFaultGene wxGrid * m_gridFaultGenerators   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 9 of file DataReport.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_data_report.js b/docs/doxygen/html/class_data_report.js new file mode 100644 index 0000000..4ba49f7 --- /dev/null +++ b/docs/doxygen/html/class_data_report.js @@ -0,0 +1,39 @@ +var class_data_report = +[ + [ "GridSelection", "class_data_report.html#a42406bbfed5f6582226d527469361c6f", [ + [ "GRID_ALL", "class_data_report.html#a42406bbfed5f6582226d527469361c6fae5523daf39a5206d2e7f23245fe1c22a", null ], + [ "GRID_PF", "class_data_report.html#a42406bbfed5f6582226d527469361c6fa130d9df683a640658f44462e66d90c58", null ], + [ "GRID_PFBUSES", "class_data_report.html#a42406bbfed5f6582226d527469361c6fa69b21524b9ad32050dc2619c490df455", null ], + [ "GRID_PFBRANCHES", "class_data_report.html#a42406bbfed5f6582226d527469361c6fa273a1130763b7ce863a3658d9de12b40", null ], + [ "GRID_FAULT", "class_data_report.html#a42406bbfed5f6582226d527469361c6fa818241802168a03128e6b2332e05c230", null ], + [ "GRID_FAULTBUSES", "class_data_report.html#a42406bbfed5f6582226d527469361c6fa35c9a6dd0456f05768e5235785de779a", null ], + [ "GRID_FAULTBRANCHES", "class_data_report.html#a42406bbfed5f6582226d527469361c6fa216b5b4922534f450db9d13c7da39770", null ], + [ "GRID_FAULTGENERATORS", "class_data_report.html#a42406bbfed5f6582226d527469361c6fab2b6e1490ef7e51c6128eefd8d666021", null ] + ] ], + [ "DataReport", "class_data_report.html#a54606d99aae00983756299810bdf0801", null ], + [ "~DataReport", "class_data_report.html#a2b14bef79c0477d6791e00249a1c1563", null ], + [ "CreateGrids", "class_data_report.html#ab3f06b29024da52ede77391d13ed70ef", null ], + [ "FillValues", "class_data_report.html#a6c91b45fa5dcd3b9b4f12416969a5f6d", null ], + [ "OnFaulrGridChanged", "class_data_report.html#ac1e9af69d11e7d2cac0ef308ed18453e", null ], + [ "OnFaultBranchesGridChanged", "class_data_report.html#ae22805620b84389e3fb3b46a913fed60", null ], + [ "OnFaultBusesGridChanged", "class_data_report.html#a3a59e51b0927afb009ddb7a182677669", null ], + [ "OnFaultGeneratorsGridChanged", "class_data_report.html#abc6aae9ace104a0354d23825dd9b5c63", null ], + [ "OnPFBranchesGridChanged", "class_data_report.html#a083605258f3fded7f31a2e0551d55c8d", null ], + [ "OnPFBusGridChanged", "class_data_report.html#a22bc0327c84f5a1a4f40cfbbf4aba248", null ], + [ "OnPowerFlowGridChanged", "class_data_report.html#a4dbeb487be271380b23e860ec072f422", null ], + [ "SetHeaders", "class_data_report.html#a02a40feb57bfa3bc156df291c56e4f3f", null ], + [ "SetRowsColours", "class_data_report.html#ac8859079218e3058ad720ea8c95cc693", null ], + [ "m_activePowerChoices", "class_data_report.html#ad731fd57a87b49904e5124a4d7a4ac8c", null ], + [ "m_capSusceptanceChoices", "class_data_report.html#a65ae7767572792800630dbff4e1c0de7", null ], + [ "m_changingValues", "class_data_report.html#a297c968233c850183aed8e758d308a1f", null ], + [ "m_currentChoices", "class_data_report.html#a81b1ac0b4cffd3be147f4200b495035d", null ], + [ "m_evenRowColour", "class_data_report.html#a67144860d6d8aeaf03da3b2763d01134", null ], + [ "m_headerColour", "class_data_report.html#a978c2c5c3d7a699183a3b65f0662e4ae", null ], + [ "m_indReactanceChoices", "class_data_report.html#aacd63ed5b36f20064cc47a2c98240541", null ], + [ "m_oddRowColour", "class_data_report.html#ade9429ea8946d61811133f5ee19d71c1", null ], + [ "m_offlineColour", "class_data_report.html#a669136a644ddad8558909c3d96a30a92", null ], + [ "m_reactivePowerChoices", "class_data_report.html#a168552a5e3b20c43910f9a31b31c55da", null ], + [ "m_resistanceChoices", "class_data_report.html#af420c9927f033d520d0af758f8fb2b55", null ], + [ "m_voltageChoices", "class_data_report.html#a6d0ac6a4ce3a000004099f933ca84d10", null ], + [ "m_workspace", "class_data_report.html#a798f52eb95ec670aab01efa337e2cbaa", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_data_report_base-members.html b/docs/doxygen/html/class_data_report_base-members.html index 6b05f4b..011e8c4 100644 --- a/docs/doxygen/html/class_data_report_base-members.html +++ b/docs/doxygen/html/class_data_report_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
DataReportBase Member List
@@ -116,11 +131,14 @@ $(function() { OnPowerFlowGridChanged(wxGridEvent &event) (defined in DataReportBase)DataReportBaseinlineprotectedvirtual ~DataReportBase() (defined in DataReportBase)DataReportBasevirtual
+ - + diff --git a/docs/doxygen/html/class_data_report_base.html b/docs/doxygen/html/class_data_report_base.html index 2866655..7a844c8 100644 --- a/docs/doxygen/html/class_data_report_base.html +++ b/docs/doxygen/html/class_data_report_base.html @@ -5,10 +5,17 @@ -PSP-UFU: DataReportBase Class Reference +DataReportBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -227,16 +242,23 @@ wxPanel * m_panelFaultGene wxGrid * m_gridFaultGenerators   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_data_report_base.js b/docs/doxygen/html/class_data_report_base.js new file mode 100644 index 0000000..2157cb1 --- /dev/null +++ b/docs/doxygen/html/class_data_report_base.js @@ -0,0 +1,50 @@ +var class_data_report_base = +[ + [ "DataReportBase", "class_data_report_base.html#ac81eb9b33dbf722a58ccde2baddc6620", null ], + [ "~DataReportBase", "class_data_report_base.html#a8ea052770a22ff2b2703f5b054c7fbfa", null ], + [ "GetGridFault", "class_data_report_base.html#aaf57262097ab280f3a4038bc5f189597", null ], + [ "GetGridFaultBranches", "class_data_report_base.html#af14bc6a653ffa84a301d6a2ceb4a9d04", null ], + [ "GetGridFaultBuses", "class_data_report_base.html#ac851a5d9a1a5ddb5cd7221a3dc32275d", null ], + [ "GetGridFaultGenerators", "class_data_report_base.html#acee6b32d5bc31c1307db454a2de69ee5", null ], + [ "GetGridPFBranches", "class_data_report_base.html#a35d383e43aa6cca57929da8d7292d2fe", null ], + [ "GetGridPFBuses", "class_data_report_base.html#af7230eab205cf660e465b5a4ed36f41c", null ], + [ "GetGridPowerFlow", "class_data_report_base.html#a05f8face44508d1aeaed74bd90aedc5f", null ], + [ "GetNotebookDataReport", "class_data_report_base.html#a0eebacaa633b613bdd649bdbcb422410", null ], + [ "GetNotebookFault", "class_data_report_base.html#a5e2843bb13d0258a71da822929bd8da9", null ], + [ "GetNotebookPowerFlow", "class_data_report_base.html#aad916336d9ce8e14d9e28d3b84b657b0", null ], + [ "GetPanelFault", "class_data_report_base.html#affdc5a9cd95a50e6438becb1d13015ed", null ], + [ "GetPanelFaultBranches", "class_data_report_base.html#adc786b8343022dafbaf53d4e431a090d", null ], + [ "GetPanelFaultBuses", "class_data_report_base.html#a4d17d1f30cbd2df6f616af95ec5a9167", null ], + [ "GetPanelFaultData", "class_data_report_base.html#a61b00ca0503ae498b9f069ba912c7dcd", null ], + [ "GetPanelFaultGenerators", "class_data_report_base.html#a8bc1d7673467f44105675823edead52c", null ], + [ "GetPanelPFBranches", "class_data_report_base.html#aaeb78a77e3dc7fc84539c94b7b5062ac", null ], + [ "GetPanelPFBuses", "class_data_report_base.html#ac29ac3c92b4a1cf54b4d0d80576e21b4", null ], + [ "GetPanelPowerFlow", "class_data_report_base.html#a7cbb8a6abf561e298207aa9df4c693de", null ], + [ "GetPanelPowerFlowData", "class_data_report_base.html#a3fefcee0754a6fca728462af3e1fb39d", null ], + [ "OnFaulrGridChanged", "class_data_report_base.html#ad2cc797e25ef56a3885421f72b32dda8", null ], + [ "OnFaultBranchesGridChanged", "class_data_report_base.html#a5e91f382af53613cfb0300c2139b63f8", null ], + [ "OnFaultBusesGridChanged", "class_data_report_base.html#a6475523c24ccedd1e0f24d8441157e51", null ], + [ "OnFaultGeneratorsGridChanged", "class_data_report_base.html#abae4be0c78bc5e3378349377228b2197", null ], + [ "OnPFBranchesGridChanged", "class_data_report_base.html#a56555ee9e6cac86175348d0a4670bfcd", null ], + [ "OnPFBusGridChanged", "class_data_report_base.html#a81d634255632c7bee811c87231315a71", null ], + [ "OnPowerFlowGridChanged", "class_data_report_base.html#a1eb8b9a1b5592a217093d68482e6749b", null ], + [ "m_gridFault", "class_data_report_base.html#ad7ab5d13a86ba6d8beb3a2c39a5c3bdd", null ], + [ "m_gridFaultBranches", "class_data_report_base.html#a65f3d4b84a45a7a150231d4778af2f12", null ], + [ "m_gridFaultBuses", "class_data_report_base.html#a501768c9af2f296192aa03f1f66c34b3", null ], + [ "m_gridFaultGenerators", "class_data_report_base.html#adac5a461ed09a4ac36202a0016707e11", null ], + [ "m_gridPFBranches", "class_data_report_base.html#a60502b5242b655ff40ab06c9bc1e7412", null ], + [ "m_gridPFBuses", "class_data_report_base.html#a17b7e28b5cd82ed304267d08e3c9920f", null ], + [ "m_gridPowerFlow", "class_data_report_base.html#acddd56e459bf7f0a42335158046e9a70", null ], + [ "m_notebookDataReport", "class_data_report_base.html#ac85f9742c6b150684c00b87aee50e63d", null ], + [ "m_notebookFault", "class_data_report_base.html#adf8b55cd980934b9d5f6582493b688a0", null ], + [ "m_notebookPowerFlow", "class_data_report_base.html#a0e86c0b6571f9f9faf0c984f9e07cfcb", null ], + [ "m_panelFault", "class_data_report_base.html#a59da9a86fc1aefd31959f17072df25db", null ], + [ "m_panelFaultBranches", "class_data_report_base.html#a99a52a84c556ece7ac063c6886fea050", null ], + [ "m_panelFaultBuses", "class_data_report_base.html#a5c5ddcf31cf589e98322f6e027db4a92", null ], + [ "m_panelFaultData", "class_data_report_base.html#abc8a2b756618d3a885172e056605f1ef", null ], + [ "m_panelFaultGenerators", "class_data_report_base.html#aeffec8eaed4992ba98bb3edd40a684d8", null ], + [ "m_panelPFBranches", "class_data_report_base.html#abcf9302bd7d4b02ec6820626c19c1dec", null ], + [ "m_panelPFBuses", "class_data_report_base.html#a53257937c0aa833fd866c638c8ef91a2", null ], + [ "m_panelPowerFlow", "class_data_report_base.html#a6bb9df3992f47c01a9eb7a35b7029dfb", null ], + [ "m_panelPowerFlowData", "class_data_report_base.html#aee8021cec2e859cca2318801449222ea", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_electric_calculation-members.html b/docs/doxygen/html/class_electric_calculation-members.html index d99235a..cf2a678 100644 --- a/docs/doxygen/html/class_electric_calculation-members.html +++ b/docs/doxygen/html/class_electric_calculation-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ElectricCalculation Member List
@@ -101,11 +116,14 @@ $(function() { UpdateElementsPowerFlow(std::vector< std::complex< double > > voltage, std::vector< std::complex< double > > power, std::vector< BusType > busType, std::vector< ReactiveLimits > reactiveLimit, double systemPowerBase)ElectricCalculationvirtual ~ElectricCalculation()ElectricCalculation
+ - + diff --git a/docs/doxygen/html/class_electric_calculation.html b/docs/doxygen/html/class_electric_calculation.html index b9828b5..d763c89 100644 --- a/docs/doxygen/html/class_electric_calculation.html +++ b/docs/doxygen/html/class_electric_calculation.html @@ -5,10 +5,17 @@ -PSP-UFU: ElectricCalculation Class Reference +ElectricCalculation Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -190,6 +205,8 @@ std::vector< Transformer * &g

Detailed Description

Author
Thales Lima Oliveira
Date
09/01/2017
+ +

Definition at line 49 of file ElectricCalculation.h.

Member Function Documentation

◆ GetBusList()

@@ -217,6 +234,8 @@ std::vector< Transformer * &g

Get the buses of the system (use GetElementsFromList first).

Returns
A list of bus elements.
+

Definition at line 128 of file ElectricCalculation.h.

+
@@ -245,6 +264,8 @@ std::vector< Transformer * &g

Get the capacitors of the system (use GetElementsFromList first).

Returns
A list of capacitor elements.
+

Definition at line 133 of file ElectricCalculation.h.

+ @@ -279,6 +300,8 @@ std::vector< Transformer * &g +

Definition at line 8 of file ElectricCalculation.cpp.

+ @@ -307,6 +330,8 @@ std::vector< Transformer * &g

Get the induction motors of the system (use GetElementsFromList first).

Returns
A list of induction motor elements.
+

Definition at line 138 of file ElectricCalculation.h.

+ @@ -335,6 +360,8 @@ std::vector< Transformer * &g

Get the inductors of the system (use GetElementsFromList first).

Returns
A list of inductor elements.
+

Definition at line 143 of file ElectricCalculation.h.

+ @@ -363,6 +390,8 @@ std::vector< Transformer * &g

Get the lines of the system (use GetElementsFromList first).

Returns
A list of line elements.
+

Definition at line 148 of file ElectricCalculation.h.

+ @@ -391,6 +420,8 @@ std::vector< Transformer * &g

Get the loads of the system (use GetElementsFromList first).

Returns
A list of load elements.
+

Definition at line 153 of file ElectricCalculation.h.

+ @@ -419,6 +450,8 @@ std::vector< Transformer * &g

Get the synchronous generators of the system (use GetElementsFromList first).

Returns
A list of synchronous generator elements.
+

Definition at line 158 of file ElectricCalculation.h.

+ @@ -447,6 +480,8 @@ std::vector< Transformer * &g

Get the synchronous motors of the system (use GetElementsFromList first).

Returns
A list of synchronous motor elements.
+

Definition at line 163 of file ElectricCalculation.h.

+ @@ -475,6 +510,8 @@ std::vector< Transformer * &g

Get the transformers of the system (use GetElementsFromList first).

Returns
A list of transformer elements.
+

Definition at line 168 of file ElectricCalculation.h.

+ @@ -541,6 +578,8 @@ std::vector< Transformer * &g
Returns
Return true if was possible to build the admittance matrix.
+

Definition at line 56 of file ElectricCalculation.cpp.

+ @@ -587,6 +626,8 @@ std::vector< Transformer * &g
Returns
Return true if was possible to invert the matrix.
+

Definition at line 572 of file ElectricCalculation.cpp.

+ @@ -653,18 +694,24 @@ std::vector< Transformer * &g +

Definition at line 287 of file ElectricCalculation.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_electric_calculation.js b/docs/doxygen/html/class_electric_calculation.js new file mode 100644 index 0000000..137e7fc --- /dev/null +++ b/docs/doxygen/html/class_electric_calculation.js @@ -0,0 +1,35 @@ +var class_electric_calculation = +[ + [ "ElectricCalculation", "class_electric_calculation.html#a6663e7a20e96ee975bd0f7d54b8a6f70", null ], + [ "~ElectricCalculation", "class_electric_calculation.html#a1e70291bfa9a0850d9ffcbee44daa2f7", null ], + [ "ABCtoDQ0", "class_electric_calculation.html#a458ecbb5afd86d9049ed3508256d8fe1", null ], + [ "ComplexMatrixTimesVector", "class_electric_calculation.html#a044a85b589d5eee879de3348248fc612", null ], + [ "DQ0toABC", "class_electric_calculation.html#aed4e5f37f8a06d0ad305334d2847cd7f", null ], + [ "GaussianElimination", "class_electric_calculation.html#a7c01b0f6b2f656db999ff4933d86d19d", null ], + [ "GetBusList", "class_electric_calculation.html#aca3381e8f6663394e4d257a54e4e2a24", null ], + [ "GetCapacitorList", "class_electric_calculation.html#a4ddabc6210146ae1ccae5f6911095bfd", null ], + [ "GetElementsFromList", "class_electric_calculation.html#aff1a62936d87e61764b13f3b0212cf92", null ], + [ "GetIndMotorList", "class_electric_calculation.html#a906ce639a5d6c5d7946fe8824f1b4f1b", null ], + [ "GetInductorList", "class_electric_calculation.html#a8709a452d684d4224d32591c281ae0ed", null ], + [ "GetLineList", "class_electric_calculation.html#af8eff271de83898c536deda1aab22d48", null ], + [ "GetLoadList", "class_electric_calculation.html#aa5e278a1c5ba1b6159c21ae2ff2b23b4", null ], + [ "GetLUDecomposition", "class_electric_calculation.html#ae721d26e05b66887bfb7125f76ec9e9c", null ], + [ "GetMachineModel", "class_electric_calculation.html#ade330c7267088dcbdd7c8e7f8c302da3", null ], + [ "GetSyncGeneratorList", "class_electric_calculation.html#ad8719b10c3c4b85b316d3daa71064840", null ], + [ "GetSyncMotorList", "class_electric_calculation.html#ae9b5e9b51615141e88de0a0f99a7741e", null ], + [ "GetTransformerList", "class_electric_calculation.html#a3b89149e5fb56253c0629c9d260b3b7e", null ], + [ "GetYBus", "class_electric_calculation.html#a939e6e75b5e0cb555a82b2f9ef59c59d", null ], + [ "InvertMatrix", "class_electric_calculation.html#af00a6599f2b0b4e35bf0f8c70195447c", null ], + [ "LUEvaluate", "class_electric_calculation.html#a55cd49ca9c2771533e6e2f16bb9ec1fc", null ], + [ "UpdateElementsPowerFlow", "class_electric_calculation.html#a1d417da6eeb8c12f7be6501fff6f7049", null ], + [ "m_busList", "class_electric_calculation.html#a0eeb4b5afc082617247351857af26c22", null ], + [ "m_capacitorList", "class_electric_calculation.html#a4bf7c82e4e8bc87a4e42ad9b124ea9e5", null ], + [ "m_indMotorList", "class_electric_calculation.html#a689622805bdea60428e6eea19795dff9", null ], + [ "m_inductorList", "class_electric_calculation.html#ad7bfee2d7cba726ff6aa7605a969d49a", null ], + [ "m_lineList", "class_electric_calculation.html#a06ce7fe37ee6cc2c786573f094493659", null ], + [ "m_loadList", "class_electric_calculation.html#a370884bcb0b406d8c9151ed064620a86", null ], + [ "m_powerElementList", "class_electric_calculation.html#a0c88feb4f01309795e8a0cf5064a7d90", null ], + [ "m_syncGeneratorList", "class_electric_calculation.html#a72386789cd0ff595e937d70e18cad697", null ], + [ "m_syncMotorList", "class_electric_calculation.html#a8dcbf4f2468a5b55680ba4c17d909102", null ], + [ "m_transformerList", "class_electric_calculation.html#a6cca6be3c0b79741a49b1631e38fc3be", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_electromechanical-members.html b/docs/doxygen/html/class_electromechanical-members.html index e40d761..098e327 100644 --- a/docs/doxygen/html/class_electromechanical-members.html +++ b/docs/doxygen/html/class_electromechanical-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Electromechanical Member List
@@ -149,11 +164,14 @@ $(function() { ~ElectricCalculation()ElectricCalculation ~Electromechanical() (defined in Electromechanical)Electromechanical
+ - + diff --git a/docs/doxygen/html/class_electromechanical.html b/docs/doxygen/html/class_electromechanical.html index bc67ff3..bbfc866 100644 --- a/docs/doxygen/html/class_electromechanical.html +++ b/docs/doxygen/html/class_electromechanical.html @@ -5,10 +5,17 @@ -PSP-UFU: Electromechanical Class Reference +Electromechanical Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -334,16 +349,23 @@ std::vector< SyncMotor * >& std::vector< Transformer * > m_transformerList   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_electromechanical.js b/docs/doxygen/html/class_electromechanical.js new file mode 100644 index 0000000..d6cd3d5 --- /dev/null +++ b/docs/doxygen/html/class_electromechanical.js @@ -0,0 +1,51 @@ +var class_electromechanical = +[ + [ "Electromechanical", "class_electromechanical.html#a30ecddf5249f545e73b2aaaf19cbec50", null ], + [ "~Electromechanical", "class_electromechanical.html#a001abfe3809e6425f7f0bd67adaf28f4", null ], + [ "CalculateIntegrationConstants", "class_electromechanical.html#a488985a77171f915145ecc5d891db04f", null ], + [ "CalculateMachinesCurrents", "class_electromechanical.html#a4e3c1766ff06883a681f39d536a41136", null ], + [ "CalculateReferenceSpeed", "class_electromechanical.html#af02c1382b8a7d3085831d3a1e89526f6", null ], + [ "CalculateSyncMachineIntVariables", "class_electromechanical.html#a82b5c5c2aeefd49706199d0ba140d300", null ], + [ "CalculateSyncMachineNonIntVariables", "class_electromechanical.html#a10b7ceb1a8066461c5369d210cff48d5", null ], + [ "EventTrigger", "class_electromechanical.html#a9b076237d26ff011552ed624a5d9bbe2", null ], + [ "GetErrorMessage", "class_electromechanical.html#a7972213c6043ca7c890b9f15d3e4162f", null ], + [ "GetPowerValue", "class_electromechanical.html#aad655c165bc53cce5d5fdd8ae9339ba2", null ], + [ "GetSyncMachineAdmittance", "class_electromechanical.html#a6192a9b4152353c983b623048b1da460", null ], + [ "GetTimeVector", "class_electromechanical.html#ab0d7d031ccc501d5101fabc7b48eb70e", null ], + [ "HasEvent", "class_electromechanical.html#a8fc1d8f7b697f8383681e3d3e7d66c72", null ], + [ "InitializeDynamicElements", "class_electromechanical.html#a4ccf60ce21c83ff757e1a7de99a00704", null ], + [ "InsertSyncMachinesOnYBus", "class_electromechanical.html#a790c142f8d9db534c7e368711e84f61e", null ], + [ "RunStabilityCalculation", "class_electromechanical.html#a9d030ba42b2f8f2ba129797c061d71cb", null ], + [ "SaveData", "class_electromechanical.html#ae5f5162b53e8969fd933af2ef80d1b67", null ], + [ "SetEvent", "class_electromechanical.html#affca5cc58794d76c6f195f74406d2214", null ], + [ "SetEventTimeList", "class_electromechanical.html#a8668c1b2881d2f2a173d15c46c8efb9d", null ], + [ "SetSyncMachinesModel", "class_electromechanical.html#a7cce38fb26c4e1e6a70bd605285848e8", null ], + [ "SolveSynchronousMachines", "class_electromechanical.html#a69b4bec62476de94bf823714972edd68", null ], + [ "m_ctrlTimeStepMultiplier", "class_electromechanical.html#a000d1cd6ac54aa864c9de3ee9015a17a", null ], + [ "m_deltaErrorVector", "class_electromechanical.html#ac1d6b85d886abd344d8b12d6d8665f1f", null ], + [ "m_errorMsg", "class_electromechanical.html#a03939bf250c99309cdf90c3bda4911d4", null ], + [ "m_eventOccurrenceList", "class_electromechanical.html#abedf14a8b4d2c9914c972d9bdf3463c6", null ], + [ "m_eventTimeList", "class_electromechanical.html#adb77fe8bf93882f3cd039c126ab79f7d", null ], + [ "m_iBus", "class_electromechanical.html#ade07879f964c541bbf92970d1fcd090a", null ], + [ "m_maxIterations", "class_electromechanical.html#ad963e529cd06cf42a9eef98dbbf04edb", null ], + [ "m_numIt", "class_electromechanical.html#a4fe6bcd83ae05c0cf6827eed9d0eb029", null ], + [ "m_numItVector", "class_electromechanical.html#a1e7fff4570b7a983f79a22aafed2112d", null ], + [ "m_parent", "class_electromechanical.html#ae359ee1a06f1bcefbf03e3d0f4f7d10a", null ], + [ "m_plotTime", "class_electromechanical.html#a6c016a1470a0d910e4522b6027f3b95c", null ], + [ "m_powerSystemBase", "class_electromechanical.html#a18e698b73396100928175811236eebf4", null ], + [ "m_refSpeed", "class_electromechanical.html#aa00d6b356a74649a12fbdd06d44b1d28", null ], + [ "m_simTime", "class_electromechanical.html#a827e9862cf10ebdc65c50f7542b67020", null ], + [ "m_systemFreq", "class_electromechanical.html#a110cd09af0070718c95d5300adcf754f", null ], + [ "m_timeStep", "class_electromechanical.html#a1070faed7544316f653e1a09fcccf475", null ], + [ "m_timeVector", "class_electromechanical.html#a3e7a7dfe02d9277957552f5a46f96dd1", null ], + [ "m_tolerance", "class_electromechanical.html#ac627a99f958656bb2385fef5f7101018", null ], + [ "m_transEdErrorVector", "class_electromechanical.html#a159776bb812bc74d94c8abe5bb8b3e10", null ], + [ "m_transEqErrorVector", "class_electromechanical.html#a4eacb39ac3ab6b4fd3e0cf963f030ce2", null ], + [ "m_useCOI", "class_electromechanical.html#ac0dfbab6529f02705d1c66bda5cac704", null ], + [ "m_vBus", "class_electromechanical.html#aceaa86ce0dfc1842420568db7037fb12", null ], + [ "m_wError", "class_electromechanical.html#a23d720e7a18a781b808cc7ca0f130ceb", null ], + [ "m_wErrorVector", "class_electromechanical.html#a28873d1ce6c1bbee57a07dabc5053423", null ], + [ "m_yBus", "class_electromechanical.html#ac51fdb6f0ae13514b6986f99a782532a", null ], + [ "m_yBusL", "class_electromechanical.html#ae8bf375c5f8bf38a66e57eee3b7e46ca", null ], + [ "m_yBusU", "class_electromechanical.html#ad78da79b4af8651eae3e4d8800f57d2b", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_element-members.html b/docs/doxygen/html/class_element-members.html index 8175beb..3572739 100644 --- a/docs/doxygen/html/class_element-members.html +++ b/docs/doxygen/html/class_element-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Element Member List
@@ -165,11 +180,14 @@ $(function() { WorldToScreen(wxPoint2DDouble position, wxPoint2DDouble translation, double scale, double offsetX=0.0, double offsetY=0.0) constElementvirtual ~Element()Elementvirtual
+ - + diff --git a/docs/doxygen/html/class_element.html b/docs/doxygen/html/class_element.html index 8a0008f..77478f3 100644 --- a/docs/doxygen/html/class_element.html +++ b/docs/doxygen/html/class_element.html @@ -5,10 +5,17 @@ -PSP-UFU: Element Class Reference +Element Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -399,7 +414,10 @@ bool m_online = trueOpenGLColour m_selectionColour   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 88 of file Element.h.

+

Member Function Documentation

◆ AddChild()

@@ -432,6 +450,8 @@ bool m_online = true +

Definition at line 333 of file Element.cpp.

+
@@ -479,6 +499,8 @@ bool m_online = trueReimplemented in Transformer, Text, Bus, Line, Load, Capacitor, Inductor, and Machines.

+

Definition at line 234 of file Element.h.

+ @@ -513,6 +535,8 @@ bool m_online = true +

Definition at line 240 of file Element.h.

+ @@ -549,6 +573,8 @@ bool m_online = trueReimplemented in Line, and Branch.

+

Definition at line 321 of file Element.h.

+ @@ -596,6 +622,8 @@ bool m_online = trueReimplemented in Line.

+

Definition at line 243 of file Element.cpp.

+ @@ -691,6 +719,8 @@ bool m_online = true +

Definition at line 272 of file Element.cpp.

+ @@ -738,6 +768,8 @@ bool m_online = trueReimplemented in Transformer, Bus, Line, Load, IOControl, TransferFunction, Capacitor, Inductor, Machines, Constant, Gain, Sum, Branch, ConnectionLine, Exponential, Limiter, Multiplier, and RateLimiter.

+

Definition at line 302 of file Element.h.

+ @@ -797,6 +829,8 @@ bool m_online = true +

Definition at line 17 of file Element.cpp.

+ @@ -842,6 +876,8 @@ bool m_online = true +

Definition at line 73 of file Element.cpp.

+ @@ -876,6 +912,8 @@ bool m_online = true +

Definition at line 82 of file Element.cpp.

+ @@ -921,6 +959,8 @@ bool m_online = true +

Definition at line 124 of file Element.cpp.

+ @@ -980,6 +1020,8 @@ bool m_online = true +

Definition at line 53 of file Element.cpp.

+ @@ -1025,6 +1067,8 @@ bool m_online = true +

Definition at line 63 of file Element.cpp.

+ @@ -1070,6 +1114,8 @@ bool m_online = true +

Definition at line 44 of file Element.cpp.

+ @@ -1104,6 +1150,8 @@ bool m_online = true +

Definition at line 228 of file Element.cpp.

+ @@ -1132,6 +1180,8 @@ bool m_online = trueGet the element angle.

Returns
Angle value.
+

Definition at line 201 of file Element.h.

+ @@ -1162,6 +1212,8 @@ bool m_online = trueReimplemented in Bus, Line, and Branch.

+

Definition at line 401 of file Element.h.

+ @@ -1190,6 +1242,8 @@ bool m_online = trueGet the Child list.

Returns
Child List.
+

Definition at line 523 of file Element.h.

+ @@ -1227,6 +1281,8 @@ bool m_online = trueReimplemented in SyncGenerator, SyncMotor, Transformer, Bus, Line, Load, Branch, Capacitor, Inductor, and IndMotor.

+

Definition at line 315 of file Element.h.

+ @@ -1257,6 +1313,8 @@ bool m_online = trueReimplemented in SyncGenerator, SyncMotor, Transformer, Text, Bus, Line, IOControl, TransferFunction, ConnectionLine, Sum, Gain, Load, Limiter, RateLimiter, Constant, Exponential, IndMotor, Multiplier, Capacitor, and Inductor.

+

Definition at line 258 of file Element.h.

+ @@ -1285,6 +1343,8 @@ bool m_online = trueGet the element height.

Returns
Element height.
+

Definition at line 183 of file Element.h.

+ @@ -1313,6 +1373,8 @@ bool m_online = trueGet the element ID.

Returns
Element ID.
+

Definition at line 270 of file Element.h.

+ @@ -1341,6 +1403,8 @@ bool m_online = trueGet the parent list.

Returns
Parent list.
+

Definition at line 517 of file Element.h.

+ @@ -1369,6 +1433,8 @@ bool m_online = trueGet the list of points that connect the element to bus.

Returns
List of points.
+

Definition at line 225 of file Element.h.

+ @@ -1397,6 +1463,8 @@ bool m_online = trueGet the element position.

Returns
Element position.
+

Definition at line 171 of file Element.h.

+ @@ -1425,6 +1493,8 @@ bool m_online = trueGet the element rectangle.

Returns
Element rectangle.
+

Definition at line 165 of file Element.h.

+ @@ -1453,6 +1523,8 @@ bool m_online = trueGet the angle of rotation.

Returns
Rotation angle.
+

Definition at line 207 of file Element.h.

+ @@ -1483,6 +1555,8 @@ bool m_online = trueReimplemented in SyncGenerator, SyncMotor, Transformer, Bus, Line, Load, Capacitor, Inductor, and IndMotor.

+

Definition at line 295 of file Element.h.

+ @@ -1511,6 +1585,8 @@ bool m_online = trueGet the element width.

Returns
Element width.
+

Definition at line 195 of file Element.h.

+ @@ -1606,6 +1682,8 @@ bool m_online = true +

Definition at line 286 of file Element.cpp.

+ @@ -1634,6 +1712,8 @@ bool m_online = trueChecks if the element is being dragged.

Returns
True if is being dragged, false otherwise.
+

Definition at line 177 of file Element.h.

+ @@ -1662,6 +1742,8 @@ bool m_online = trueChecks if the element is online or offline.

Returns
True if online, false if offline.
+

Definition at line 219 of file Element.h.

+ @@ -1690,6 +1772,8 @@ bool m_online = trueChecks if the pickbox is shown.

Returns
True if the pickbox is show, false otherwise.
+

Definition at line 213 of file Element.h.

+ @@ -1718,6 +1802,8 @@ bool m_online = trueChecks if the element is selected.

Returns
True if selected, false otherwise.
+

Definition at line 189 of file Element.h.

+ @@ -1754,6 +1840,8 @@ bool m_online = trueReimplemented in Transformer, ControlElement, Line, Gain, Machines, ConnectionLine, Branch, and Shunt.

+

Definition at line 107 of file Element.cpp.

+ @@ -1801,6 +1889,8 @@ bool m_online = trueReimplemented in Transformer, Line, Machines, Branch, and Shunt.

+

Definition at line 341 of file Element.h.

+ @@ -1837,6 +1927,8 @@ bool m_online = trueReimplemented in Bus, Line, and Branch.

+

Definition at line 395 of file Element.h.

+ @@ -1874,6 +1966,8 @@ bool m_online = trueReimplemented in Machines, Shunt, and Branch.

+

Definition at line 348 of file Element.h.

+ @@ -1911,6 +2005,8 @@ bool m_online = trueReimplemented in Bus, Line, and Branch.

+

Definition at line 389 of file Element.h.

+ @@ -1957,6 +2053,8 @@ bool m_online = true
Returns
The distance between the point and the line.
+

Definition at line 365 of file Element.cpp.

+ @@ -1991,6 +2089,8 @@ bool m_online = true +

Definition at line 335 of file Element.cpp.

+ @@ -2027,6 +2127,8 @@ bool m_online = trueReimplemented in Machines, Branch, Shunt, and ConnectionLine.

+

Definition at line 367 of file Element.h.

+ @@ -2072,6 +2174,8 @@ bool m_online = true +

Definition at line 343 of file Element.cpp.

+ @@ -2117,6 +2221,8 @@ bool m_online = true +

Definition at line 326 of file Element.cpp.

+ @@ -2153,6 +2259,8 @@ bool m_online = trueReimplemented in Transformer, Text, Bus, Load, IOControl, Machines, TransferFunction, Capacitor, Inductor, Constant, Gain, Sum, Exponential, Limiter, Multiplier, and RateLimiter.

+

Definition at line 308 of file Element.h.

+ @@ -2205,6 +2313,8 @@ bool m_online = true +

Definition at line 91 of file Element.cpp.

+ @@ -2264,6 +2374,8 @@ bool m_online = true +

Definition at line 132 of file Element.cpp.

+ @@ -2311,6 +2423,8 @@ bool m_online = trueReimplemented in Transformer, Line, Branch, Machines, and Shunt.

+

Definition at line 381 of file Element.h.

+ @@ -2345,6 +2459,8 @@ bool m_online = true +

Definition at line 135 of file Element.h.

+ @@ -2379,6 +2495,8 @@ bool m_online = true +

Definition at line 147 of file Element.h.

+ @@ -2413,6 +2531,8 @@ bool m_online = true +

Definition at line 105 of file Element.h.

+ @@ -2447,6 +2567,8 @@ bool m_online = true +

Definition at line 111 of file Element.h.

+ @@ -2481,6 +2603,8 @@ bool m_online = true +

Definition at line 264 of file Element.h.

+ @@ -2518,6 +2642,8 @@ bool m_online = trueReimplemented in Transformer, Line, Machines, Shunt, and Branch.

+

Definition at line 361 of file Element.h.

+ @@ -2544,6 +2670,8 @@ bool m_online = true +

Definition at line 218 of file Element.cpp.

+ @@ -2580,6 +2708,8 @@ bool m_online = trueReimplemented in Line.

+

Definition at line 159 of file Element.h.

+ @@ -2606,6 +2736,8 @@ bool m_online = true +

Definition at line 10 of file Element.cpp.

+ @@ -2640,6 +2772,8 @@ bool m_online = true +

Definition at line 123 of file Element.h.

+ @@ -2674,6 +2808,8 @@ bool m_online = true +

Definition at line 129 of file Element.h.

+ @@ -2722,6 +2858,8 @@ bool m_online = trueReimplemented in SyncMotor, SyncGenerator, Transformer, Bus, Line, Load, Capacitor, Inductor, IOControl, IndMotor, TransferFunction, Constant, Gain, Sum, Exponential, Limiter, Multiplier, and RateLimiter.

+

Definition at line 547 of file Element.h.

+ @@ -2756,6 +2894,8 @@ bool m_online = true +

Definition at line 141 of file Element.h.

+ @@ -2792,6 +2932,8 @@ bool m_online = trueReimplemented in Transformer, ControlElement, Line, Machines, ConnectionLine, Shunt, and Branch.

+

Definition at line 101 of file Element.cpp.

+ @@ -2837,6 +2979,8 @@ bool m_online = true +

Definition at line 300 of file Element.cpp.

+ @@ -2896,6 +3040,8 @@ bool m_online = true +

Definition at line 109 of file Element.cpp.

+ @@ -2962,18 +3108,24 @@ bool m_online = true +

Definition at line 115 of file Element.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_element.js b/docs/doxygen/html/class_element.js new file mode 100644 index 0000000..54d3353 --- /dev/null +++ b/docs/doxygen/html/class_element.js @@ -0,0 +1,96 @@ +var class_element = +[ + [ "Element", "class_element.html#ab0d0e20be9a36ae676202db753faeec9", null ], + [ "~Element", "class_element.html#a13d54ba9c08b6bec651402f1c2bb002c", null ], + [ "AddChild", "class_element.html#ac38d6707d08cb5c057032aa94b511a62", null ], + [ "AddParent", "class_element.html#a569178e9138490a981511a644536c0f9", null ], + [ "AddParent", "class_element.html#ad1f153a87797633ab310d07e1d06eba9", null ], + [ "AddPoint", "class_element.html#aa40c60c03d6a76639d8c6f6bab86720e", null ], + [ "CalculateBoundaries", "class_element.html#a57f5771fd003020fef3866a1d1dc7487", null ], + [ "Contains", "class_element.html#abf6c4949733debca55b2f56d8e9b7372", null ], + [ "Draw", "class_element.html#a551ed1eeab446b5366d56c2ee9dec187", null ], + [ "DrawArc", "class_element.html#ac580673fdc15d41225ea20632def41e6", null ], + [ "DrawCircle", "class_element.html#a35567bc1e306c6db9522ad05a87b98f5", null ], + [ "DrawLine", "class_element.html#a103b3cb2670012b2695940b094f63ab3", null ], + [ "DrawPickbox", "class_element.html#ad1d0d803fe522d030e2be8dc99eb9b39", null ], + [ "DrawPoint", "class_element.html#a4b6dd88902e04b52fe14dfc73c51fd50", null ], + [ "DrawRectangle", "class_element.html#a6c37e613808c5ee3bc37bb14a1fe85c8", null ], + [ "DrawRectangle", "class_element.html#a971be2d4fab435d9657f88bae36e7cf3", null ], + [ "DrawTriangle", "class_element.html#ae425d7e4f94bf7280d7d68c577d2019e", null ], + [ "GeneralMenuItens", "class_element.html#a35f55626a29d5256f8dc07cf92655e64", null ], + [ "GetAngle", "class_element.html#a5c75d8a6e28326dd568104a4d9d3473f", null ], + [ "GetBestPickboxCursor", "class_element.html#a245924c5be948397b101787dbea565ea", null ], + [ "GetChildList", "class_element.html#aa79a7c1b219ce07f39ef3848e61c6eb0", null ], + [ "GetContextMenu", "class_element.html#a2a436b0497017a1c3d03dba5e59f037e", null ], + [ "GetCopy", "class_element.html#aeabe64a5907e917c8b61afd605ea52c3", null ], + [ "GetHeight", "class_element.html#a616c73ff20402109ede68579094acc3d", null ], + [ "GetID", "class_element.html#a20693eda52fae0b42d6fa6a70fd0a0ee", null ], + [ "GetParentList", "class_element.html#a7dce6c1b97facecf3e3b2f1555858b09", null ], + [ "GetPointList", "class_element.html#aff2870f5979a84a30c27917cb33271f9", null ], + [ "GetPosition", "class_element.html#a536ad18a847dcc979c984b3cb287f238", null ], + [ "GetRect", "class_element.html#ab195252edc86fb98ea011050593e7a8a", null ], + [ "GetRotationAngle", "class_element.html#a3687fe2558f6a27ee068fa7244f855eb", null ], + [ "GetTipText", "class_element.html#aa79db7f54ba9754e953b5059a1d79486", null ], + [ "GetWidth", "class_element.html#a23e1fe2745c70cfb43725f608c4bce00", null ], + [ "Intersects", "class_element.html#a038dfd8452fe48ab04bc4e47820c148e", null ], + [ "IsDragging", "class_element.html#a2f78fae8a5869ff53e87ecfdc6fc33b9", null ], + [ "IsOnline", "class_element.html#a57c84a8e6eb80f0fea6e23cdd439d5aa", null ], + [ "IsPickboxShown", "class_element.html#abd94ea2ca7984d9a32d3ffd23837a323", null ], + [ "IsSelected", "class_element.html#ac42604083db300d20c010b50084de91b", null ], + [ "Move", "class_element.html#abe884d99d12d5252e18956162115b025", null ], + [ "MoveNode", "class_element.html#a870e266e0457bacbc3f7ef1fb70c6fdd", null ], + [ "MovePickbox", "class_element.html#a6f071b6dfd64721ca673bfbe1ca2d525", null ], + [ "NodeContains", "class_element.html#a95b4f7e9341883ec39d0201148afffb4", null ], + [ "PickboxContains", "class_element.html#af4815de7e7698ea116e8e2af51414050", null ], + [ "PointToLineDistance", "class_element.html#a158e271d7f309cd49002ca3c98365e9b", null ], + [ "RemoveChild", "class_element.html#a6be881ba60674b289a91e498d3d8fc09", null ], + [ "RemoveParent", "class_element.html#a9504437b60faf2c5a27584de8a24810c", null ], + [ "ReplaceChild", "class_element.html#ad5f4bee2e241c430a643f46dadf3d3f5", null ], + [ "ReplaceParent", "class_element.html#a74ec9a279ac0127550e00941206dddb1", null ], + [ "ResetNodes", "class_element.html#a8c16c17a6f22ffcdeb80ffa0ed27a72a", null ], + [ "ResetPickboxes", "class_element.html#a3be3ed2876d3bb547c43caab95353f33", null ], + [ "Rotate", "class_element.html#afab568cea0a7074bb9984e94bd2ba52e", null ], + [ "RotateAtPosition", "class_element.html#a99b213010776b34a27eb814aff288a34", null ], + [ "RotatedRectanglesIntersects", "class_element.html#a01563b5b2fed2860132f4dd1593f9eea", null ], + [ "RotateNode", "class_element.html#af26c67b6dd32eb1b3e417fddf54818c3", null ], + [ "SetAngle", "class_element.html#aa5d8558082ce38832af3b8c8ac1cf36f", null ], + [ "SetBorderSize", "class_element.html#afed922f1c0803ebdc96e785a7f696504", null ], + [ "SetDragging", "class_element.html#add5da19e56211c76bea78638eca87150", null ], + [ "SetHeight", "class_element.html#a88171a7f1d0d9273f6fd43a4945341ec", null ], + [ "SetID", "class_element.html#a9aa2fec8b6c7bef4bf75b9f86fbb76f2", null ], + [ "SetNodeParent", "class_element.html#ac7490a91f3edfff08584567cc84d86b5", null ], + [ "SetOnline", "class_element.html#aeb786f831736af82b74c1393ee4cd2bb", null ], + [ "SetPointList", "class_element.html#a88941f383fb321b1be441838e2b8700f", null ], + [ "SetPosition", "class_element.html#a920fe7ba1563615857618f01e64b3284", null ], + [ "SetSelected", "class_element.html#a5279e5a513391d399d576bcb83df736b", null ], + [ "SetWidth", "class_element.html#a5da121470a0c26c6b5c57a7c4eeac48b", null ], + [ "ShowForm", "class_element.html#ae1652eded3ccbd241a783691117418b2", null ], + [ "ShowPickbox", "class_element.html#ab8bf35b4a205fa58772402cea7fad89c", null ], + [ "StartMove", "class_element.html#a846a2a51780a99363b4d4b1812ca16b4", null ], + [ "UpdateNodes", "class_element.html#a499c3b52be27d2bf436a13b6f5353b9c", null ], + [ "WorldToScreen", "class_element.html#abfee7ea88f4689c2a6eb4d39452f84d8", null ], + [ "WorldToScreen", "class_element.html#a147dd55d902171b212168ffde7262343", null ], + [ "m_activeNodeID", "class_element.html#aafe3f431ac37b4084a2f067a8e81b7a5", null ], + [ "m_activePickboxID", "class_element.html#a61329c816f8f2a22942776a2951a36e4", null ], + [ "m_angle", "class_element.html#a4b0447933e63d6413fb89ae2f9bb80d8", null ], + [ "m_borderSize", "class_element.html#ab0286e483f942ff517479e1943082476", null ], + [ "m_childList", "class_element.html#a539d88bb85e1b3ad5a11b9d5672f582d", null ], + [ "m_dragging", "class_element.html#a3415a5f6435aaf95ac64a733e5027b34", null ], + [ "m_elementID", "class_element.html#ab013cd15fc190f77d1af96896dd706f0", null ], + [ "m_height", "class_element.html#ab689b2dcbf566757b262167f09445d2f", null ], + [ "m_movePos", "class_element.html#a5c1d43a226486a7a987bfb8c195ffac6", null ], + [ "m_movePts", "class_element.html#a342864bf5b31a21f2db03ea7292ab407", null ], + [ "m_moveStartPt", "class_element.html#a945c825f05cd0ed35801ba37b0925307", null ], + [ "m_online", "class_element.html#a37ff451865d4852ffa8c54574a20cd0b", null ], + [ "m_parentList", "class_element.html#a779f1aa64546bee7c313b5bd8e415e6a", null ], + [ "m_pointList", "class_element.html#a4c9545919f8289d8bb3e5b4d335ba606", null ], + [ "m_position", "class_element.html#a1ae6cb125be921110acb5b4156b77d8a", null ], + [ "m_rect", "class_element.html#a30ae3e7642cbfa0c39f4dae8be6e6dbd", null ], + [ "m_rotationAngle", "class_element.html#a88264837c525980536e4a68ea4edfa56", null ], + [ "m_selected", "class_element.html#a7241ad23fd3ca364312314a940bb7234", null ], + [ "m_selectionColour", "class_element.html#ab0df145138fef6ed901ff4b1828439b0", null ], + [ "m_showPickbox", "class_element.html#a291e818c694b0f62ced4e118a9bc1f0d", null ], + [ "m_switchRect", "class_element.html#ad2f05bcbc014053aa40a7db3e7e95c50", null ], + [ "m_switchSize", "class_element.html#adb57986f1e93c43da6dd9ac25d620cab", null ], + [ "m_width", "class_element.html#a32493f4f631524e439a13739c2908373", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_element_data_object-members.html b/docs/doxygen/html/class_element_data_object-members.html index 48a6422..bd03b83 100644 --- a/docs/doxygen/html/class_element_data_object-members.html +++ b/docs/doxygen/html/class_element_data_object-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ElementDataObject Member List
@@ -77,11 +92,14 @@ $(function() { SetData(size_t len, const void *buf) override (defined in ElementDataObject)ElementDataObject ~ElementDataObject() (defined in ElementDataObject)ElementDataObject
+ - + diff --git a/docs/doxygen/html/class_element_data_object.html b/docs/doxygen/html/class_element_data_object.html index c4cefd5..62da269 100644 --- a/docs/doxygen/html/class_element_data_object.html +++ b/docs/doxygen/html/class_element_data_object.html @@ -5,10 +5,17 @@ -PSP-UFU: ElementDataObject Class Reference +ElementDataObject Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -102,16 +117,23 @@ Protected Attributes ElementsListsm_elementsLists = NULL   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_element_data_object.js b/docs/doxygen/html/class_element_data_object.js new file mode 100644 index 0000000..729eb6e --- /dev/null +++ b/docs/doxygen/html/class_element_data_object.js @@ -0,0 +1,11 @@ +var class_element_data_object = +[ + [ "ElementDataObject", "class_element_data_object.html#afd2fde28c57246b673322b8b630ff1e0", null ], + [ "ElementDataObject", "class_element_data_object.html#a470f40ac636d52bea0325192b44424a9", null ], + [ "~ElementDataObject", "class_element_data_object.html#a03443d03ab000804032c59031f09e99a", null ], + [ "GetDataHere", "class_element_data_object.html#a062f11db713de77f36e98a3d79e25aad", null ], + [ "GetDataSize", "class_element_data_object.html#a19dc80f27c83408b72c9c87ce15ac228", null ], + [ "GetElementsLists", "class_element_data_object.html#a732347b84c15fdca2f10639c8a8345e4", null ], + [ "SetData", "class_element_data_object.html#a19995ba1b03a9566352e5bdf44d1370b", null ], + [ "m_elementsLists", "class_element_data_object.html#a3da83a9dbd280969d26bee208e2566ac", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_element_plot_data-members.html b/docs/doxygen/html/class_element_plot_data-members.html index 98a6565..9d64722 100644 --- a/docs/doxygen/html/class_element_plot_data-members.html +++ b/docs/doxygen/html/class_element_plot_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ElementPlotData Member List
@@ -108,11 +123,14 @@ $(function() { SetValues(int index, std::vector< double > values) (defined in ElementPlotData)ElementPlotDatainline ~ElementPlotData() (defined in ElementPlotData)ElementPlotData
+ - + diff --git a/docs/doxygen/html/class_element_plot_data.html b/docs/doxygen/html/class_element_plot_data.html index 2c2b30c..0e4c283 100644 --- a/docs/doxygen/html/class_element_plot_data.html +++ b/docs/doxygen/html/class_element_plot_data.html @@ -5,10 +5,17 @@ -PSP-UFU: ElementPlotData Class Reference +ElementPlotData Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -170,16 +185,23 @@ CurveType m_curveType< std::vector< PlotData * > m_elementData   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_element_plot_data.js b/docs/doxygen/html/class_element_plot_data.js new file mode 100644 index 0000000..98b9b75 --- /dev/null +++ b/docs/doxygen/html/class_element_plot_data.js @@ -0,0 +1,43 @@ +var class_element_plot_data = +[ + [ "CurveType", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6", [ + [ "CT_BUS", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6a75f81e37494ce492bff49fa4677dcddf", null ], + [ "CT_SYNC_GENERATOR", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6a61df757e093501b573e4da76a652fa22", null ], + [ "CT_SYNC_COMPENSATOR", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6a40c3284dc7fe0008a9150b06c9971c21", null ], + [ "CT_TRANSFORMER", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6a64e18a4c6fab57ebacf178826a6b19f7", null ], + [ "CT_LINE", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6a97d4ddc3864572ad7ed8304b287aab61", null ], + [ "CT_IND_MOTOR", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6aed23fc5b7a7f072cb7d2c3e440a6531c", null ], + [ "CT_SHUNT_INDUCTOR", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6aac77aeb1a647c940d4e1e17a477126d0", null ], + [ "CT_SHUNT_CAPACITOR", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6ad0415dca75f4048c1a66d736e0ed4d4e", null ], + [ "CT_LOAD", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6aadd1fc1983995b983485223be3b14916", null ], + [ "CT_TEST", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6af2e7b8e623153ce32d4a34ea80b6c7d2", null ], + [ "NUM_ELEMENTS", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6a195e99d96b8ceb74b935610c8613ead8", null ], + [ "CT_TIME", "class_element_plot_data.html#acbc71f28886fca6d20f9410ab455e5e6a3ff875a4cab8537f81c71991cb130916", null ] + ] ], + [ "ElementPlotData", "class_element_plot_data.html#a3f2b3675a82f456df02efab7c69e4ec3", null ], + [ "ElementPlotData", "class_element_plot_data.html#aeb26f918104c765ceaa29947008c349e", null ], + [ "~ElementPlotData", "class_element_plot_data.html#af1ee05ddb475ff46af376fe212148c01", null ], + [ "AddData", "class_element_plot_data.html#a2a73f2f0bebe16f8ee0ebe21ac76a917", null ], + [ "GetAxis", "class_element_plot_data.html#a9b103e1e9483b550200d87991d618615", null ], + [ "GetColour", "class_element_plot_data.html#acedb6f0b5c545e1bd9c12370adb1ffc7", null ], + [ "GetCurveType", "class_element_plot_data.html#a245c2baf5822b5350ab4b42cb3c8c4d4", null ], + [ "GetDataName", "class_element_plot_data.html#aadcb36aed66c077a44e321dd39e40192", null ], + [ "GetElementDataNumber", "class_element_plot_data.html#a522fea0dfaca21e17948a03a3bd3cc1e", null ], + [ "GetName", "class_element_plot_data.html#af71ccdc0beaf0acc8da959bab83ad9ed", null ], + [ "GetPenType", "class_element_plot_data.html#a56e431bfc0e1074ce3b1ffd36a066271", null ], + [ "GetPlotData", "class_element_plot_data.html#a78e53dfd0407e5a006a1a46d0a0e7cfc", null ], + [ "GetThick", "class_element_plot_data.html#aa52cd4374e4b1a3fd27010481d898982", null ], + [ "GetValues", "class_element_plot_data.html#a8fa649bde6d4166329aa9d8c0d2eb39e", null ], + [ "SetAxis", "class_element_plot_data.html#a24f2d0ec6e24db875913154cea9b6495", null ], + [ "SetColour", "class_element_plot_data.html#a26d9efeccd36ac4d3b77e9ccd7b07acb", null ], + [ "SetCurveType", "class_element_plot_data.html#a3262fabe578847d44e7822cc697111b4", null ], + [ "SetDataName", "class_element_plot_data.html#a7b7a5834b0cad53e84c9bd6cf86aa6ea", null ], + [ "SetName", "class_element_plot_data.html#aa1bc5d5a782caf9c7f7a55db4387da26", null ], + [ "SetPenType", "class_element_plot_data.html#a7157de114641e494358a21d0fd061e1a", null ], + [ "SetPlot", "class_element_plot_data.html#aa0889ca6cb11f4f5b391d0dea9f97e8f", null ], + [ "SetThick", "class_element_plot_data.html#a52621408fd886256e3f93970920bc840", null ], + [ "SetValues", "class_element_plot_data.html#a383fedeea054f6115c999ffc93a0eb35", null ], + [ "m_curveType", "class_element_plot_data.html#aa13b4ada1ce748bb6b622fa2f7da97b8", null ], + [ "m_elementData", "class_element_plot_data.html#a5618ae04d96b16e90cc54b97304e2d5c", null ], + [ "m_name", "class_element_plot_data.html#aaaad30139bbd8a1b0e714bb7d1d8a85d", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_exponential-members.html b/docs/doxygen/html/class_exponential-members.html index d3fd78e..9405106 100644 --- a/docs/doxygen/html/class_exponential-members.html +++ b/docs/doxygen/html/class_exponential-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Exponential Member List
@@ -187,11 +202,14 @@ $(function() { ~Element()Elementvirtual ~Exponential() (defined in Exponential)Exponential
+ - + diff --git a/docs/doxygen/html/class_exponential.html b/docs/doxygen/html/class_exponential.html index ced1fe0..2b13b38 100644 --- a/docs/doxygen/html/class_exponential.html +++ b/docs/doxygen/html/class_exponential.html @@ -5,10 +5,17 @@ -PSP-UFU: Exponential Class Reference +Exponential Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -447,7 +462,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 8 of file Exponential.h.

+

Member Function Documentation

◆ Contains()

@@ -482,6 +500,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 15 of file Exponential.h.

+
@@ -529,6 +549,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 17 of file Exponential.cpp.

+ @@ -559,6 +581,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 121 of file Exponential.cpp.

+ @@ -595,6 +619,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 16 of file Exponential.h.

+ @@ -631,6 +657,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 67 of file Exponential.cpp.

+ @@ -679,18 +707,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 56 of file Exponential.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_exponential.js b/docs/doxygen/html/class_exponential.js new file mode 100644 index 0000000..7b7d0b6 --- /dev/null +++ b/docs/doxygen/html/class_exponential.js @@ -0,0 +1,17 @@ +var class_exponential = +[ + [ "Exponential", "class_exponential.html#a851717c2bb412dfddea8a96ad7344ef0", null ], + [ "~Exponential", "class_exponential.html#adf997c8c44ac0a3e0d76ba9e32ebb5ec", null ], + [ "Contains", "class_exponential.html#a79eabfca357002f160b082a6df9f6f2b", null ], + [ "Draw", "class_exponential.html#af5f172e2f7ae7df0fc79b44b55355339", null ], + [ "GetCopy", "class_exponential.html#a85cda0dba6549828a9045e478e24609f", null ], + [ "GetValues", "class_exponential.html#a7961aca3918368d3778aa5866a14cbec", null ], + [ "Intersects", "class_exponential.html#a540b1a43045b9bb7c96d32825d15c95e", null ], + [ "Rotate", "class_exponential.html#a0714869ee8815119a6d76431bac767ea", null ], + [ "SetValues", "class_exponential.html#a0ebfd386bebb9a1f9d41a3eca0daed3b", null ], + [ "ShowForm", "class_exponential.html#abdf1c3c1d8e7839fc2a8fc914acff68d", null ], + [ "Solve", "class_exponential.html#ae8e635b32b5d6a8226a3654aa639094f", null ], + [ "UpdatePoints", "class_exponential.html#a38559206dd99fae84d4ed4dd7996dd8f", null ], + [ "m_aValue", "class_exponential.html#a568f1cb2a910d054b67ffbef74c8c196", null ], + [ "m_bValue", "class_exponential.html#a0fcb1dfec0c927a22abab7135f6c3a00", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_exponential_form-members.html b/docs/doxygen/html/class_exponential_form-members.html index 77b2054..5ab76f9 100644 --- a/docs/doxygen/html/class_exponential_form-members.html +++ b/docs/doxygen/html/class_exponential_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ExponentialForm Member List
@@ -96,11 +111,14 @@ $(function() { ~ExponentialForm() (defined in ExponentialForm)ExponentialFormvirtual ~ExponentialFormBase() (defined in ExponentialFormBase)ExponentialFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_exponential_form.html b/docs/doxygen/html/class_exponential_form.html index 714fda1..d075118 100644 --- a/docs/doxygen/html/class_exponential_form.html +++ b/docs/doxygen/html/class_exponential_form.html @@ -5,10 +5,17 @@ -PSP-UFU: ExponentialForm Class Reference +ExponentialForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -166,16 +181,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_exponential_form.js b/docs/doxygen/html/class_exponential_form.js new file mode 100644 index 0000000..046c3b4 --- /dev/null +++ b/docs/doxygen/html/class_exponential_form.js @@ -0,0 +1,10 @@ +var class_exponential_form = +[ + [ "ExponentialForm", "class_exponential_form.html#a4c3cd70d6128d58f330a0f992a91da1a", null ], + [ "~ExponentialForm", "class_exponential_form.html#a3c0b865be48a390d39b42a552afdd711", null ], + [ "OnCancelButtonClick", "class_exponential_form.html#af741be36de488170a80c88df01e17667", null ], + [ "OnOKButtonClick", "class_exponential_form.html#a8d3175dc7543f5612dcb04acf5e8fa0c", null ], + [ "ValidateData", "class_exponential_form.html#ae59514a694933a77cd7d7a1a9096b713", null ], + [ "m_exponential", "class_exponential_form.html#a04ab824bc029df387aa38ca8b379206f", null ], + [ "m_parent", "class_exponential_form.html#ac4f9664d3e884b5ff8f18fddea362b63", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_exponential_form_base-members.html b/docs/doxygen/html/class_exponential_form_base-members.html index 1609306..872aa1e 100644 --- a/docs/doxygen/html/class_exponential_form_base-members.html +++ b/docs/doxygen/html/class_exponential_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ExponentialFormBase Member List
@@ -91,11 +106,14 @@ $(function() { OnOKButtonClick(wxCommandEvent &event) (defined in ExponentialFormBase)ExponentialFormBaseinlineprotectedvirtual ~ExponentialFormBase() (defined in ExponentialFormBase)ExponentialFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_exponential_form_base.html b/docs/doxygen/html/class_exponential_form_base.html index a8fa606..8a81d7d 100644 --- a/docs/doxygen/html/class_exponential_form_base.html +++ b/docs/doxygen/html/class_exponential_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: ExponentialFormBase Class Reference +ExponentialFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -152,16 +167,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_exponential_form_base.js b/docs/doxygen/html/class_exponential_form_base.js new file mode 100644 index 0000000..ddef7ea --- /dev/null +++ b/docs/doxygen/html/class_exponential_form_base.js @@ -0,0 +1,25 @@ +var class_exponential_form_base = +[ + [ "ExponentialFormBase", "class_exponential_form_base.html#a01c6236bffb9620ff2ef2a0afcbc7408", null ], + [ "~ExponentialFormBase", "class_exponential_form_base.html#a9b0573a2065f0bbaf8048e2f78618a36", null ], + [ "GetButtonCancel", "class_exponential_form_base.html#a9b1312da21b4d6ec8f2d79ae64c31d57", null ], + [ "GetButtonOK", "class_exponential_form_base.html#a7aac97383b6d0af90199ead7c3ec1fdc", null ], + [ "GetNotebook", "class_exponential_form_base.html#a6ea718012d6396390e94d9423edc2ae1", null ], + [ "GetPanelGeneral", "class_exponential_form_base.html#ac0f0130cf92f784b7ff098e42c84005e", null ], + [ "GetStaticTextAValue", "class_exponential_form_base.html#a2b4013cf5e588a510eee19de6a63812d", null ], + [ "GetStaticTextBValue", "class_exponential_form_base.html#a6eb4ee27335ee6f5b43da075cf5d1c5f", null ], + [ "GetStaticTextExp", "class_exponential_form_base.html#a753ef8e6ee247a215c523442f51db2a0", null ], + [ "GetTextCtrlAValue", "class_exponential_form_base.html#ae0a60ea98d18aa91e5388fee9131eaeb", null ], + [ "GetTextCtrlBValue", "class_exponential_form_base.html#a709bad49cc8e8bc61b36757c6b9d612b", null ], + [ "OnCancelButtonClick", "class_exponential_form_base.html#a2973b411828496b3c07bcc465f11cfb1", null ], + [ "OnOKButtonClick", "class_exponential_form_base.html#a9e2feaac372a2e3ecf69ea8c46f32c52", null ], + [ "m_buttonCancel", "class_exponential_form_base.html#a7d6e9e849659fc66e4c6ec3031570032", null ], + [ "m_buttonOK", "class_exponential_form_base.html#a754e757add7b6b599be289087b833d01", null ], + [ "m_notebook", "class_exponential_form_base.html#ae4e8752bf0bb718b4aabc54400e997c7", null ], + [ "m_panelGeneral", "class_exponential_form_base.html#ae8659fd109e33fbea9627ed4c885d6d8", null ], + [ "m_staticTextAValue", "class_exponential_form_base.html#a44197d79b2c8138b56820eeb5407876b", null ], + [ "m_staticTextBValue", "class_exponential_form_base.html#a7d56bcf4a7fda1e40b0eb2f08ba751ab", null ], + [ "m_staticTextExp", "class_exponential_form_base.html#a70ec52bb9f74b69d138b76393f231478", null ], + [ "m_textCtrlAValue", "class_exponential_form_base.html#a99b0bf1a17ef2680ee09fac4dca01ccf", null ], + [ "m_textCtrlBValue", "class_exponential_form_base.html#a13c869c29285c1e04def44db6aa4e364", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_fault-members.html b/docs/doxygen/html/class_fault-members.html index ae5238b..4693677 100644 --- a/docs/doxygen/html/class_fault-members.html +++ b/docs/doxygen/html/class_fault-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Fault Member List
@@ -122,11 +137,14 @@ $(function() { ~ElectricCalculation()ElectricCalculation ~Fault()Fault
+ - + diff --git a/docs/doxygen/html/class_fault.html b/docs/doxygen/html/class_fault.html index 569270f..626cafd 100644 --- a/docs/doxygen/html/class_fault.html +++ b/docs/doxygen/html/class_fault.html @@ -5,10 +5,17 @@ -PSP-UFU: Fault Class Reference +Fault Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -255,6 +270,8 @@ std::vector< Transformer * &g

Detailed Description

Author
Thales Lima Oliveira
Date
10/01/2017
+ +

Definition at line 13 of file Fault.h.

Constructor & Destructor Documentation

◆ Fault()

@@ -280,6 +297,8 @@ std::vector< Transformer * &g +

Definition at line 7 of file Fault.cpp.

+

Member Function Documentation

@@ -309,6 +328,8 @@ std::vector< Transformer * &g

Get the error message generated in RunFaultCalculation(double systemPowerBase).

Returns
Error message.
+

Definition at line 54 of file Fault.h.

+ @@ -343,6 +364,8 @@ std::vector< Transformer * &g +

Definition at line 9 of file Fault.cpp.

+ @@ -377,6 +400,8 @@ std::vector< Transformer * &g +

Definition at line 382 of file Fault.cpp.

+ @@ -411,18 +436,24 @@ std::vector< Transformer * &g +

Definition at line 176 of file Fault.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_fault.js b/docs/doxygen/html/class_fault.js new file mode 100644 index 0000000..6567b9e --- /dev/null +++ b/docs/doxygen/html/class_fault.js @@ -0,0 +1,24 @@ +var class_fault = +[ + [ "Fault", "class_fault.html#a8fbe3ce9f7288c4f8261db2d9a89adbb", null ], + [ "Fault", "class_fault.html#a77baeae2c3388de3f7bbeabf52c99bef", null ], + [ "~Fault", "class_fault.html#a42019654142cd8187b314e43d70262eb", null ], + [ "GetErrorMessage", "class_fault.html#a3c2f14cd1da46cb88109fdb172d959b0", null ], + [ "RunFaultCalculation", "class_fault.html#a4120f861b073783b4fb82385171fbd0f", null ], + [ "RunSCPowerCalcutation", "class_fault.html#ac7942a558f3ecdb8c06ddb49567c487a", null ], + [ "UpdateElementsFault", "class_fault.html#af1bb91359dfe8df0251a2031957d3ddf", null ], + [ "m_errorMsg", "class_fault.html#a900ca28916f6b5d1920916da364792ac", null ], + [ "m_fCurrentA", "class_fault.html#a3bbbe363bbda4ab262cf9ff9ef8d283e", null ], + [ "m_fCurrentB", "class_fault.html#a6f0ad59005f42db46899c54bd0bb2451", null ], + [ "m_fCurrentC", "class_fault.html#aaf57534c2f6f2f1105ef5b8fab1c7af5", null ], + [ "m_posFaultVoltageA", "class_fault.html#a2f9c9605c49dd7761a9b8470913f6eea", null ], + [ "m_posFaultVoltageB", "class_fault.html#aa42a2ef6e0de6a0afd7b90e5f5d71d7f", null ], + [ "m_posFaultVoltageC", "class_fault.html#a2beb820c91f139c64bac413520540f8b", null ], + [ "m_posFaultVoltageNeg", "class_fault.html#a100c6aac1a159eade54dfdab15717018", null ], + [ "m_posFaultVoltagePos", "class_fault.html#ab273c91b6be44a546faf8dac1c5a548c", null ], + [ "m_posFaultVoltageZero", "class_fault.html#ae280475abbb392e1db237feaacf3c8a7", null ], + [ "m_systemPowerBase", "class_fault.html#aec2ca2d73097eab3dc3f368bf656602c", null ], + [ "m_zBusNeg", "class_fault.html#a293915690d60c4fea81038d535866d1c", null ], + [ "m_zBusPos", "class_fault.html#ae5875b1e3ee6ea4a4748759a996ad37f", null ], + [ "m_zBusZero", "class_fault.html#a8ec9ef08820a9e0b6ef64c6a11f17214", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_file_handing-members.html b/docs/doxygen/html/class_file_handing-members.html index bfa0b95..3c7ea7a 100644 --- a/docs/doxygen/html/class_file_handing-members.html +++ b/docs/doxygen/html/class_file_handing-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
FileHanding Member List
@@ -97,11 +112,14 @@ $(function() { SetWorkspace(Workspace *workspace) (defined in FileHanding)FileHandinginline ~FileHanding() (defined in FileHanding)FileHanding
+ - + diff --git a/docs/doxygen/html/class_file_handing.html b/docs/doxygen/html/class_file_handing.html index a597076..4a4f06c 100644 --- a/docs/doxygen/html/class_file_handing.html +++ b/docs/doxygen/html/class_file_handing.html @@ -5,10 +5,17 @@ -PSP-UFU: FileHanding Class Reference +FileHanding Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -158,16 +173,23 @@ Protected Attributes ControlEditorm_controlEditor = NULL   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 19 of file FileHanding.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_file_handing.js b/docs/doxygen/html/class_file_handing.js new file mode 100644 index 0000000..9a82a50 --- /dev/null +++ b/docs/doxygen/html/class_file_handing.js @@ -0,0 +1,31 @@ +var class_file_handing = +[ + [ "FileHanding", "class_file_handing.html#ab4f68fcd9986188a476cad92a9238d30", null ], + [ "FileHanding", "class_file_handing.html#aa3719ae58a4b0072667a3b42c8d4d50d", null ], + [ "FileHanding", "class_file_handing.html#ad334c006a4d5ae7ef15dd6b426bcbfa8", null ], + [ "~FileHanding", "class_file_handing.html#a16130b13435ef1cc90268599c4e9cc5a", null ], + [ "AppendNode", "class_file_handing.html#a315b88e9e9bd75cb45794bf9f52a7925", null ], + [ "GetAttributeValueInt", "class_file_handing.html#ad880af02d674437811fec077a84a7909", null ], + [ "GetAttributeValueInt", "class_file_handing.html#a3ca9be771b02e58e554dc7a45a11e510", null ], + [ "GetControlElementFromID", "class_file_handing.html#afd02764e9227133832464b2a7cb10952", null ], + [ "GetNodeValueDouble", "class_file_handing.html#adde631f17207ec5744c0dbdfe79d45d3", null ], + [ "GetNodeValueInt", "class_file_handing.html#ad3880248f7fa8c93c765a4408ca33893", null ], + [ "OpenControl", "class_file_handing.html#aa3c18af0d859b78bf7d117c85e85a628", null ], + [ "OpenControlElements", "class_file_handing.html#a561b1bc5807aeb4424f0047b003b9238", null ], + [ "OpenControlNodeList", "class_file_handing.html#a96c5ba440caa8b0ab44a01e2bfd63f51", null ], + [ "OpenProject", "class_file_handing.html#a29d0af971b7a6810224c504ac072903a", null ], + [ "SaveControl", "class_file_handing.html#a8948e014c857b698b3ae204fd7bd8d1a", null ], + [ "SaveControlElements", "class_file_handing.html#a34539e10caa48ede6a3e9ac64b89e0d5", null ], + [ "SaveControlNodes", "class_file_handing.html#ae85e5c9173a850b8165939fef18c8c88", null ], + [ "SaveProject", "class_file_handing.html#a54d666757710bc163141674c9efb576e", null ], + [ "SetControlEditor", "class_file_handing.html#ae3d0597f99b08eb29188f9565e036060", null ], + [ "SetNodeAttribute", "class_file_handing.html#a8951c02ab38f7922e96de8024189a2b0", null ], + [ "SetNodeAttribute", "class_file_handing.html#abe3af403418c668035bb38e6e6428f04", null ], + [ "SetNodeAttribute", "class_file_handing.html#aca642a587c19e07a16cf65cb06f78950", null ], + [ "SetNodeValue", "class_file_handing.html#a815fb97269b3755ac1a00cb196ee226c", null ], + [ "SetNodeValue", "class_file_handing.html#a2d7ad3fb6f8f920aa6f0c720cc4852f1", null ], + [ "SetNodeValue", "class_file_handing.html#a7b5ac3287c11ee33c0e802dd60e07e68", null ], + [ "SetWorkspace", "class_file_handing.html#a4444e602d96ed6817e9ad2838e4d57a5", null ], + [ "m_controlEditor", "class_file_handing.html#a46142226e6ce37032008523a3095bba8", null ], + [ "m_workspace", "class_file_handing.html#a6b5b47dd26a56ee2f8f2ac74f25d6811", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_gain-members.html b/docs/doxygen/html/class_gain-members.html index e54be88..21c9796 100644 --- a/docs/doxygen/html/class_gain-members.html +++ b/docs/doxygen/html/class_gain-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Gain Member List
@@ -189,11 +204,14 @@ $(function() { ~Element()Elementvirtual ~Gain() (defined in Gain)Gain
+ - + diff --git a/docs/doxygen/html/class_gain.html b/docs/doxygen/html/class_gain.html index 5365901..a7333be 100644 --- a/docs/doxygen/html/class_gain.html +++ b/docs/doxygen/html/class_gain.html @@ -5,10 +5,17 @@ -PSP-UFU: Gain Class Reference +Gain Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -453,7 +468,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 11 of file Gain.h.

+

Member Function Documentation

◆ Contains()

@@ -488,6 +506,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 18 of file Gain.h.

+
@@ -535,6 +555,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 18 of file Gain.cpp.

+ @@ -565,6 +587,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 177 of file Gain.cpp.

+ @@ -601,6 +625,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 19 of file Gain.h.

+ @@ -637,6 +663,8 @@ Additional Inherited Members

Reimplemented from ControlElement.

+

Definition at line 165 of file Gain.cpp.

+ @@ -673,6 +701,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 82 of file Gain.cpp.

+ @@ -721,18 +751,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 71 of file Gain.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_gain.js b/docs/doxygen/html/class_gain.js new file mode 100644 index 0000000..281e382 --- /dev/null +++ b/docs/doxygen/html/class_gain.js @@ -0,0 +1,21 @@ +var class_gain = +[ + [ "Gain", "class_gain.html#a80bbe7b1605a2c9538aee2a2436ad7a8", null ], + [ "~Gain", "class_gain.html#a4b431a2b6cd72329da6704d7ecf18867", null ], + [ "Contains", "class_gain.html#a9d80d49f5123cf4859bf15a251e3923f", null ], + [ "Draw", "class_gain.html#a42f48bfdfb3d6f593fcc599504dd2264", null ], + [ "GetCopy", "class_gain.html#a489572e289935d7256c037af682b9351", null ], + [ "GetValue", "class_gain.html#a924de62d55965b7219424103faa1fe41", null ], + [ "Intersects", "class_gain.html#a8768490f9cb20a6a8c9148d1c893e980", null ], + [ "Move", "class_gain.html#aa303bcc736ac5fad1f89c6cc87e859db", null ], + [ "Rotate", "class_gain.html#ae19d739112c3aad30c58bdfd98f442e7", null ], + [ "SetValue", "class_gain.html#a4c13cd79ec18f6c9c844fa9a6b154e4d", null ], + [ "ShowForm", "class_gain.html#a6b98027cbf545302867ad75f7ab84b93", null ], + [ "Solve", "class_gain.html#a282cab6d339aa89a35c775bbea2aa117", null ], + [ "UpdatePoints", "class_gain.html#a9930247d3cee160ac2ae815ad865f077", null ], + [ "UpdateText", "class_gain.html#a147d3a05881f09ca10a638c431ded5f8", null ], + [ "m_fontSize", "class_gain.html#a1631d322627fc41fd2e53d5352c07071", null ], + [ "m_glStringValue", "class_gain.html#a8e680f3c98522129ae3c6a703075c0c1", null ], + [ "m_triPts", "class_gain.html#a279d335d4f489a4f24d86d74b6ad6b27", null ], + [ "m_value", "class_gain.html#a7e622e7ee612206387f8cc734feee06d", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_gain_form-members.html b/docs/doxygen/html/class_gain_form-members.html index 30da7b3..064549f 100644 --- a/docs/doxygen/html/class_gain_form-members.html +++ b/docs/doxygen/html/class_gain_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GainForm Member List
@@ -90,11 +105,14 @@ $(function() { ~GainForm() (defined in GainForm)GainFormvirtual ~GainFormBase() (defined in GainFormBase)GainFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_gain_form.html b/docs/doxygen/html/class_gain_form.html index 7975bcc..091352c 100644 --- a/docs/doxygen/html/class_gain_form.html +++ b/docs/doxygen/html/class_gain_form.html @@ -5,10 +5,17 @@ -PSP-UFU: GainForm Class Reference +GainForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -148,16 +163,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 7 of file GainForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_gain_form.js b/docs/doxygen/html/class_gain_form.js new file mode 100644 index 0000000..6a0ad45 --- /dev/null +++ b/docs/doxygen/html/class_gain_form.js @@ -0,0 +1,10 @@ +var class_gain_form = +[ + [ "GainForm", "class_gain_form.html#a78bfe8981d152f161dfb08769771ba56", null ], + [ "~GainForm", "class_gain_form.html#af1cff0fa1cc8a6aaca6f4dd2b0d8befd", null ], + [ "OnCancelButtonClick", "class_gain_form.html#abfc932f8e479d7a10564075df6997a5c", null ], + [ "OnOKButtonClick", "class_gain_form.html#ac31647adab4173557fb1ca314fe4fa54", null ], + [ "ValidateData", "class_gain_form.html#adb2263498de9f23ecab0f0e9034d2718", null ], + [ "m_gain", "class_gain_form.html#a28782a1925ff0ea8697520d74b927c0d", null ], + [ "m_parent", "class_gain_form.html#ae688c03924e7eae87b22872bcbbd79fa", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_gain_form_base-members.html b/docs/doxygen/html/class_gain_form_base-members.html index 1db0dc8..a733c9a 100644 --- a/docs/doxygen/html/class_gain_form_base-members.html +++ b/docs/doxygen/html/class_gain_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GainFormBase Member List
@@ -85,11 +100,14 @@ $(function() { OnOKButtonClick(wxCommandEvent &event) (defined in GainFormBase)GainFormBaseinlineprotectedvirtual ~GainFormBase() (defined in GainFormBase)GainFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_gain_form_base.html b/docs/doxygen/html/class_gain_form_base.html index ce554a8..224b44e 100644 --- a/docs/doxygen/html/class_gain_form_base.html +++ b/docs/doxygen/html/class_gain_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: GainFormBase Class Reference +GainFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -134,16 +149,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_gain_form_base.js b/docs/doxygen/html/class_gain_form_base.js new file mode 100644 index 0000000..2bdb4b1 --- /dev/null +++ b/docs/doxygen/html/class_gain_form_base.js @@ -0,0 +1,19 @@ +var class_gain_form_base = +[ + [ "GainFormBase", "class_gain_form_base.html#a4348f18d038fddce66c25d7a43671cd4", null ], + [ "~GainFormBase", "class_gain_form_base.html#a6725c8c910f4bbdfa1eba52b20e4eb72", null ], + [ "GetButtonCancel", "class_gain_form_base.html#a2695d249d41bcce16de987817d4ca9d8", null ], + [ "GetButtonOK", "class_gain_form_base.html#a0dcef8fdb5e3d71e9de7f9989c6a3614", null ], + [ "GetNotebook", "class_gain_form_base.html#ab52020646e748ebb0fa7826d5545becb", null ], + [ "GetPanelGeneral", "class_gain_form_base.html#a06558b16087a7913582c7593a3b0cf1a", null ], + [ "GetStaticTextValue", "class_gain_form_base.html#abec4988058d56883236bce7ebb4f5264", null ], + [ "GetTextCtrlValue", "class_gain_form_base.html#add7c67e9e1fb262896ec3c708c7cf55a", null ], + [ "OnCancelButtonClick", "class_gain_form_base.html#a53460f40032bf827b2a21252f41b2c73", null ], + [ "OnOKButtonClick", "class_gain_form_base.html#ac2cf8bd67123124a48bf7fefc33a0049", null ], + [ "m_buttonCancel", "class_gain_form_base.html#ab0c009d67c2a5b8ab7fefe9f25b390a3", null ], + [ "m_buttonOK", "class_gain_form_base.html#a5a45ef23b1a57092a63a2fe208e8724b", null ], + [ "m_notebook", "class_gain_form_base.html#a53a8d8ad87f6c977e3cb2dda79d95472", null ], + [ "m_panelGeneral", "class_gain_form_base.html#a69e1a38a9b21e9320cacdfbc5834e825", null ], + [ "m_staticTextValue", "class_gain_form_base.html#a00494d45bf8c185cb889773719e33bfc", null ], + [ "m_textCtrlValue", "class_gain_form_base.html#a55b53bcfa26d362ea72b3de9bbc83d91", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_general_properties_form-members.html b/docs/doxygen/html/class_general_properties_form-members.html index 0340b14..cd7d198 100644 --- a/docs/doxygen/html/class_general_properties_form-members.html +++ b/docs/doxygen/html/class_general_properties_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GeneralPropertiesForm Member List
@@ -93,11 +108,14 @@ $(function() { ~GeneralPropertiesForm() (defined in GeneralPropertiesForm)GeneralPropertiesFormvirtual ~GeneralPropertiesFormBase() (defined in GeneralPropertiesFormBase)GeneralPropertiesFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_general_properties_form.html b/docs/doxygen/html/class_general_properties_form.html index 85586ad..889a8fc 100644 --- a/docs/doxygen/html/class_general_properties_form.html +++ b/docs/doxygen/html/class_general_properties_form.html @@ -5,10 +5,17 @@ -PSP-UFU: GeneralPropertiesForm Class Reference +GeneralPropertiesForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -157,16 +172,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_general_properties_form.js b/docs/doxygen/html/class_general_properties_form.js new file mode 100644 index 0000000..363ab74 --- /dev/null +++ b/docs/doxygen/html/class_general_properties_form.js @@ -0,0 +1,9 @@ +var class_general_properties_form = +[ + [ "GeneralPropertiesForm", "class_general_properties_form.html#ab22456c8c9251a8e90ba6ebb095669ae", null ], + [ "~GeneralPropertiesForm", "class_general_properties_form.html#ae54d160b7bf120f2a91e28278e10d4dc", null ], + [ "OnButtonCancelClick", "class_general_properties_form.html#afe88daac9b9108fbba91f7b09b8aa437", null ], + [ "OnButtonOKClick", "class_general_properties_form.html#ac0c503dc8fd23faffe0af501f476677b", null ], + [ "ValidateData", "class_general_properties_form.html#a0ddc0fe123f3722269826d1a45bc6ea6", null ], + [ "m_properties", "class_general_properties_form.html#a58534d30a1f1b4fae559546b2a7ba77c", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_general_properties_form_base-members.html b/docs/doxygen/html/class_general_properties_form_base-members.html index e117944..a669fc1 100644 --- a/docs/doxygen/html/class_general_properties_form_base-members.html +++ b/docs/doxygen/html/class_general_properties_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GeneralPropertiesFormBase Member List
@@ -89,11 +104,14 @@ $(function() { OnButtonOKClick(wxCommandEvent &event) (defined in GeneralPropertiesFormBase)GeneralPropertiesFormBaseinlineprotectedvirtual ~GeneralPropertiesFormBase() (defined in GeneralPropertiesFormBase)GeneralPropertiesFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_general_properties_form_base.html b/docs/doxygen/html/class_general_properties_form_base.html index f144930..a1e56e4 100644 --- a/docs/doxygen/html/class_general_properties_form_base.html +++ b/docs/doxygen/html/class_general_properties_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: GeneralPropertiesFormBase Class Reference +GeneralPropertiesFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -146,16 +161,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_general_properties_form_base.js b/docs/doxygen/html/class_general_properties_form_base.js new file mode 100644 index 0000000..f223ac5 --- /dev/null +++ b/docs/doxygen/html/class_general_properties_form_base.js @@ -0,0 +1,23 @@ +var class_general_properties_form_base = +[ + [ "GeneralPropertiesFormBase", "class_general_properties_form_base.html#a6021bfa4fafde66a4ec5838ee821c255", null ], + [ "~GeneralPropertiesFormBase", "class_general_properties_form_base.html#a7040bf123535c1a4085d7d0c8fe4a0a2", null ], + [ "GetButtonCancel", "class_general_properties_form_base.html#afd0642c0f98f77cbfabeb0f3ba74b921", null ], + [ "GetButtonOK", "class_general_properties_form_base.html#ac1e3e267c4ab15fedb46ad3f8c6ea0c2", null ], + [ "GetChoiceLanguage", "class_general_properties_form_base.html#a4bd4aea019c77bf0ce96c742624ed005", null ], + [ "GetChoiceTheme", "class_general_properties_form_base.html#a7a90b9a2288445000996441378f142c6", null ], + [ "GetNotebook", "class_general_properties_form_base.html#a4b65c846d42f9e1c3d310cf145fcf9f8", null ], + [ "GetPanelGeneral", "class_general_properties_form_base.html#a75f68f60833249cc6205d00a06305363", null ], + [ "GetStaticTextLanguage", "class_general_properties_form_base.html#af265d437779a32b389a76ca0bef3056c", null ], + [ "GetStaticTextTheme", "class_general_properties_form_base.html#a00d98a7872a5a187b72b7cf8be0e0e8a", null ], + [ "OnButtonCancelClick", "class_general_properties_form_base.html#a183d91f991fc95c037b1add92bb2a678", null ], + [ "OnButtonOKClick", "class_general_properties_form_base.html#a3c0535df9948100aff469449c127ef88", null ], + [ "m_buttonCancel", "class_general_properties_form_base.html#ad2c78dd45aa38a5dfb44ad4a5b08beed", null ], + [ "m_buttonOK", "class_general_properties_form_base.html#a5172c53744e569adddc60283a64e4486", null ], + [ "m_choiceLanguage", "class_general_properties_form_base.html#a762bc3be0fec000f112c684216f1e4ab", null ], + [ "m_choiceTheme", "class_general_properties_form_base.html#acb3eb02407c7dcc87363f3c949a3b260", null ], + [ "m_notebook", "class_general_properties_form_base.html#a8d4458430d813e72abcfa5062cd9a0f0", null ], + [ "m_panelGeneral", "class_general_properties_form_base.html#a3c82ad67cd409f04d52da2c70a5de6b7", null ], + [ "m_staticTextLanguage", "class_general_properties_form_base.html#a888604b9e6e99a5b3a1b08bce92c198d", null ], + [ "m_staticTextTheme", "class_general_properties_form_base.html#a591ab6ad6840d4500040ec17818b6262", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_generator_stab_form-members.html b/docs/doxygen/html/class_generator_stab_form-members.html index a20f205..5fe793a 100644 --- a/docs/doxygen/html/class_generator_stab_form-members.html +++ b/docs/doxygen/html/class_generator_stab_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GeneratorStabForm Member List
@@ -191,11 +206,14 @@ $(function() { ~GeneratorStabForm() (defined in GeneratorStabForm)GeneratorStabFormvirtual ~GeneratorStabFormBase() (defined in GeneratorStabFormBase)GeneratorStabFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_generator_stab_form.html b/docs/doxygen/html/class_generator_stab_form.html index f25ba9d..b9e98a7 100644 --- a/docs/doxygen/html/class_generator_stab_form.html +++ b/docs/doxygen/html/class_generator_stab_form.html @@ -5,10 +5,17 @@ -PSP-UFU: GeneratorStabForm Class Reference +GeneratorStabForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -451,16 +466,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_generator_stab_form.js b/docs/doxygen/html/class_generator_stab_form.js new file mode 100644 index 0000000..635d7ca --- /dev/null +++ b/docs/doxygen/html/class_generator_stab_form.js @@ -0,0 +1,15 @@ +var class_generator_stab_form = +[ + [ "GeneratorStabForm", "class_generator_stab_form.html#a82063f7b7ad825a196ff8411ad5d0d7a", null ], + [ "~GeneratorStabForm", "class_generator_stab_form.html#aa5aabf7282fcda91064dead5a533caa4", null ], + [ "OnCancelButtonClick", "class_generator_stab_form.html#a7973b5d0a05cf05a9606714f2e5fb357", null ], + [ "OnEditAVRButtonClick", "class_generator_stab_form.html#a41407bf980a5c954283aa0019bcb7750", null ], + [ "OnOKButtonClick", "class_generator_stab_form.html#a5ebaa95cb5fdc89cc1c9d1a6947773d5", null ], + [ "OnSpeedGovernorButtonClick", "class_generator_stab_form.html#ac0505f5fba0dea815fdd6a8e23088a0f", null ], + [ "OnSwitchingButtonClick", "class_generator_stab_form.html#aabc2aaca76b771bb8bb031b7690a6a28", null ], + [ "UseAVRClick", "class_generator_stab_form.html#abf5687e423a69b8e71d1a4bd09e6fd26", null ], + [ "UseSGClick", "class_generator_stab_form.html#abe44c98c7ae517291d368bcd22640432", null ], + [ "ValidateData", "class_generator_stab_form.html#ae24f4edf62bb593185705d08b1a94795", null ], + [ "m_parent", "class_generator_stab_form.html#a23a2f2fb14548b1114d3dfa5b241a620", null ], + [ "m_syncGenerator", "class_generator_stab_form.html#a09a57d45946fdd44698b03785257c1ae", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_generator_stab_form_base-members.html b/docs/doxygen/html/class_generator_stab_form_base-members.html index acd6bcd..a63854d 100644 --- a/docs/doxygen/html/class_generator_stab_form_base-members.html +++ b/docs/doxygen/html/class_generator_stab_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GeneratorStabFormBase Member List
@@ -186,11 +201,14 @@ $(function() { UseSGClick(wxCommandEvent &event) (defined in GeneratorStabFormBase)GeneratorStabFormBaseinlineprotectedvirtual ~GeneratorStabFormBase() (defined in GeneratorStabFormBase)GeneratorStabFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_generator_stab_form_base.html b/docs/doxygen/html/class_generator_stab_form_base.html index e4f4a7d..fa45f60 100644 --- a/docs/doxygen/html/class_generator_stab_form_base.html +++ b/docs/doxygen/html/class_generator_stab_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: GeneratorStabFormBase Class Reference +GeneratorStabFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -437,16 +452,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_generator_stab_form_base.js b/docs/doxygen/html/class_generator_stab_form_base.js new file mode 100644 index 0000000..bc0429c --- /dev/null +++ b/docs/doxygen/html/class_generator_stab_form_base.js @@ -0,0 +1,120 @@ +var class_generator_stab_form_base = +[ + [ "GeneratorStabFormBase", "class_generator_stab_form_base.html#a763fac09f09ea56005c2206b1c30d733", null ], + [ "~GeneratorStabFormBase", "class_generator_stab_form_base.html#abf75abd9efd94f6df0d98583cd54011a", null ], + [ "GetButtonCancel", "class_generator_stab_form_base.html#a9b13914de4a6009967892e1f5182047f", null ], + [ "GetButtonEditAVR", "class_generator_stab_form_base.html#a51fdd73d564ca1cf1fa87ce39431da70", null ], + [ "GetButtonEditSG", "class_generator_stab_form_base.html#ab95b366c7aa4649cea574ff416de5c7b", null ], + [ "GetButtonOK", "class_generator_stab_form_base.html#a4b225606d57d39e4a371fa27e275a1f9", null ], + [ "GetButtonSwitching", "class_generator_stab_form_base.html#ae6bd7cfd4d167b5e1bc474d426ca8a30", null ], + [ "GetCheckBoxPlotSyncMachine", "class_generator_stab_form_base.html#abec18f9a5bf99c4e94dc1b416eb527cd", null ], + [ "GetCheckBoxUseAVR", "class_generator_stab_form_base.html#af9582a84717c6e87d16842825093eb34", null ], + [ "GetCheckBoxUseSG", "class_generator_stab_form_base.html#a376d129380304880b44e8b8f7c119c1f", null ], + [ "GetStaticLine_1", "class_generator_stab_form_base.html#a99b17f90dc5aaee56ba4c694b496da15", null ], + [ "GetStaticTextDamping", "class_generator_stab_form_base.html#aa24e99dfa3412c3d2255feed1ef13263", null ], + [ "GetStaticTextInertia", "class_generator_stab_form_base.html#a2bda5575654a49d342aefb1e4c8fbaef", null ], + [ "GetStaticTextPU_1", "class_generator_stab_form_base.html#a9ff21aa7428e8e1fe9982b0f8e26cbff", null ], + [ "GetStaticTextPU_10", "class_generator_stab_form_base.html#a5fce6f358f2acb7403030ec01b2df79f", null ], + [ "GetStaticTextPU_2", "class_generator_stab_form_base.html#abc75b52265409993c5961b05c72c0dbd", null ], + [ "GetStaticTextPU_3", "class_generator_stab_form_base.html#a29dfd5dbc8f0d30226ed3ce16d20fe33", null ], + [ "GetStaticTextPU_4", "class_generator_stab_form_base.html#a2720bcf8d3c00ba51bd1dbe83f58ee05", null ], + [ "GetStaticTextPU_5", "class_generator_stab_form_base.html#a73926cf9ccc7b6806732778637aa8b30", null ], + [ "GetStaticTextPU_6", "class_generator_stab_form_base.html#a5473539c798b4eca8ae20a13d07708f0", null ], + [ "GetStaticTextPU_7", "class_generator_stab_form_base.html#ac819e946ed8c89f7be8af3d8659f0215", null ], + [ "GetStaticTextPU_8", "class_generator_stab_form_base.html#a5e42cf0b5632665dd94a2df16c99c519", null ], + [ "GetStaticTextPU_9", "class_generator_stab_form_base.html#a41b7f2e6af6c6ee9a95b0947034a8ec0", null ], + [ "GetStaticTextRa", "class_generator_stab_form_base.html#a86a945f0ae8ad5be9402ddfdccf847f8", null ], + [ "GetStaticTextS_1", "class_generator_stab_form_base.html#a59b8c38ec0e7e1f547cb558952612b55", null ], + [ "GetStaticTextS_2", "class_generator_stab_form_base.html#a70320edb367b9b5fd356690f503a7773", null ], + [ "GetStaticTextS_3", "class_generator_stab_form_base.html#aade642097ee0b63eedda4e551d69cbf8", null ], + [ "GetStaticTextS_4", "class_generator_stab_form_base.html#ade55f7fcf88393571e23342a6e3640c2", null ], + [ "GetStaticTextS_5", "class_generator_stab_form_base.html#a93c719731f4ef67cde780def182ccd53", null ], + [ "GetStaticTextSat", "class_generator_stab_form_base.html#a0cfdb4d604380d3b83314d381f17af64", null ], + [ "GetStaticTextSubTd0", "class_generator_stab_form_base.html#a4b05d7737e0cf2307cb2d6e37145cf1f", null ], + [ "GetStaticTextSubTq0", "class_generator_stab_form_base.html#a3276da36307ca5cd6d2e2e5410682301", null ], + [ "GetStaticTextSubXd", "class_generator_stab_form_base.html#a7248d2e4d7430738f48737e4fecc0b9b", null ], + [ "GetStaticTextSubXq", "class_generator_stab_form_base.html#ab83eed913a74588eeaec593e777d6903", null ], + [ "GetStaticTextSyncXd", "class_generator_stab_form_base.html#abd8d9528a7bb1a0e42cb4e410f96a8da", null ], + [ "GetStaticTextSyncXq", "class_generator_stab_form_base.html#a1d8ba9ee8d07c0208eadabbe1fc3433b", null ], + [ "GetStaticTextTranTd0", "class_generator_stab_form_base.html#a96d2037062bf935f4be7b067d45e3259", null ], + [ "GetStaticTextTranTq0", "class_generator_stab_form_base.html#a2cb537d38520f0f1951ccc2026f527a3", null ], + [ "GetStaticTextTranXd", "class_generator_stab_form_base.html#a89e55bdba11ed2593788f08d477c68e8", null ], + [ "GetStaticTextTranXq", "class_generator_stab_form_base.html#a97249e0a9b9157536230961874f39790", null ], + [ "GetStaticTextXp", "class_generator_stab_form_base.html#a12a4a754d620a789d938c5390c7973c8", null ], + [ "GetTextCtrlDamping", "class_generator_stab_form_base.html#a0040c0ffdd3829c653762ba9d28a7aae", null ], + [ "GetTextCtrlInertia", "class_generator_stab_form_base.html#a90c3165863fac740d7120366741b394c", null ], + [ "GetTextCtrlRa", "class_generator_stab_form_base.html#aa93d0231fd249c7580da09370cf457f9", null ], + [ "GetTextCtrlSat", "class_generator_stab_form_base.html#a0ec132418224087e7c6f802dd10565b3", null ], + [ "GetTextCtrlSubTd0", "class_generator_stab_form_base.html#aed066d5bfa8dcfada7d2ed21aa567b8a", null ], + [ "GetTextCtrlSubTq0", "class_generator_stab_form_base.html#a2d96514e85ce3c427208d4f7bb945c1a", null ], + [ "GetTextCtrlSubXd", "class_generator_stab_form_base.html#a1957aba5dc2e3b69d397cadd907572b1", null ], + [ "GetTextCtrlSubXq", "class_generator_stab_form_base.html#a38089e4a120f059032ff94e1222b03c4", null ], + [ "GetTextCtrlSyncXd", "class_generator_stab_form_base.html#a506d888c08b4cc1f727aa986fdf86ceb", null ], + [ "GetTextCtrlSyncXq", "class_generator_stab_form_base.html#ae85799c9d8bb89c92029f2da7678c1f7", null ], + [ "GetTextCtrlTranTd0", "class_generator_stab_form_base.html#abb8626324d185a50ea1afb531acc7556", null ], + [ "GetTextCtrlTranTq0", "class_generator_stab_form_base.html#af07424f07933b3dfd9ddcf49786655ae", null ], + [ "GetTextCtrlTranXd", "class_generator_stab_form_base.html#add9da345bd8c5a3a84c7e54aba9c0aff", null ], + [ "GetTextCtrlTranXq", "class_generator_stab_form_base.html#abcd9ca2e90630de68c36a80fc94e84d7", null ], + [ "GetTextCtrlXp", "class_generator_stab_form_base.html#a5aac0bb16470ef6443c99585c8445b09", null ], + [ "OnCancelButtonClick", "class_generator_stab_form_base.html#a672e1b7b873b9a5b4ae45e1131a31cd3", null ], + [ "OnEditAVRButtonClick", "class_generator_stab_form_base.html#ab97d99294656418a22473bc428010df5", null ], + [ "OnOKButtonClick", "class_generator_stab_form_base.html#af03772fb1570ab9d80f1690acc52e102", null ], + [ "OnSpeedGovernorButtonClick", "class_generator_stab_form_base.html#a29e6fa3dc40f638b5d327373ac0e408f", null ], + [ "OnSwitchingButtonClick", "class_generator_stab_form_base.html#a7db301857f418902cfacbbed747ee69a", null ], + [ "UseAVRClick", "class_generator_stab_form_base.html#a0990560df1b5429d476c2751d1313377", null ], + [ "UseSGClick", "class_generator_stab_form_base.html#a4825041ea73a8e0345388c6e0e71cf74", null ], + [ "m_ButtonCancel", "class_generator_stab_form_base.html#a72f8e66e91538326eb815371b4d6e967", null ], + [ "m_buttonEditAVR", "class_generator_stab_form_base.html#a57b954413ac47c20fb79434947e71e67", null ], + [ "m_buttonEditSG", "class_generator_stab_form_base.html#abe5a2f8a8699b436ebde263613da9e41", null ], + [ "m_buttonOK", "class_generator_stab_form_base.html#a617a814f876388c5cf2770b71e0d036d", null ], + [ "m_buttonSwitching", "class_generator_stab_form_base.html#a84873dfc35006449ef4fcba4ed7d0f4e", null ], + [ "m_checkBoxPlotSyncMachine", "class_generator_stab_form_base.html#a251f549607a5b11e4a18410e5a78dd69", null ], + [ "m_checkBoxUseAVR", "class_generator_stab_form_base.html#a5004f24c73c95336a92640180031b692", null ], + [ "m_checkBoxUseSG", "class_generator_stab_form_base.html#a882959b444c06441832c6348c372d809", null ], + [ "m_staticLine_1", "class_generator_stab_form_base.html#a3a049ab1330bc7b8c485ce33cd6e8836", null ], + [ "m_staticTextDamping", "class_generator_stab_form_base.html#a4890f2b954164acc59d59487cce29a70", null ], + [ "m_staticTextInertia", "class_generator_stab_form_base.html#a43477cec5f18d7fa8cfc4cbb6871a172", null ], + [ "m_staticTextPU_1", "class_generator_stab_form_base.html#a404ef29f1248d852da321d6c4027538a", null ], + [ "m_staticTextPU_10", "class_generator_stab_form_base.html#af57074a4e2f1c071619da1511af5a580", null ], + [ "m_staticTextPU_2", "class_generator_stab_form_base.html#af76e11df631da956e8bbb8c981bd919b", null ], + [ "m_staticTextPU_3", "class_generator_stab_form_base.html#a460c8176a0e5ae6e569bc129a2988960", null ], + [ "m_staticTextPU_4", "class_generator_stab_form_base.html#a2b5171368b74b27070df3b53254d7745", null ], + [ "m_staticTextPU_5", "class_generator_stab_form_base.html#a206a8ef13cf164abe15fb2cbfb698432", null ], + [ "m_staticTextPU_6", "class_generator_stab_form_base.html#abc69d8331bc4a67f474dcd8d784e67b0", null ], + [ "m_staticTextPU_7", "class_generator_stab_form_base.html#ab173aad50e838ed3a62be75fedb60e92", null ], + [ "m_staticTextPU_8", "class_generator_stab_form_base.html#ad16f4c2ac4f8e579a807d87f9d2727af", null ], + [ "m_staticTextPU_9", "class_generator_stab_form_base.html#a67931a6253aca464e3ea64653156a4ad", null ], + [ "m_staticTextRa", "class_generator_stab_form_base.html#adf24eaddce5f2a357ad80a9776b12d3e", null ], + [ "m_staticTextS_1", "class_generator_stab_form_base.html#ac124e324cb4a4a5f2c9d6e8b8ac9219d", null ], + [ "m_staticTextS_2", "class_generator_stab_form_base.html#afb924c441142358b2a1a4aacb0182d5c", null ], + [ "m_staticTextS_3", "class_generator_stab_form_base.html#a79c1373f45cf399bceb757dae8060d19", null ], + [ "m_staticTextS_4", "class_generator_stab_form_base.html#a11f9f8be236133c8fbc37d759dd3113d", null ], + [ "m_staticTextS_5", "class_generator_stab_form_base.html#ac3e60ba5d2b4d80889805ca6a74ddacc", null ], + [ "m_staticTextSat", "class_generator_stab_form_base.html#a21c8406ee1d8e3e47103db8e72ebaaba", null ], + [ "m_staticTextSubTd0", "class_generator_stab_form_base.html#a145e9860b360e377a9b7d7efba94e2ea", null ], + [ "m_staticTextSubTq0", "class_generator_stab_form_base.html#aaacb2de6430b853cc03f7b124294a227", null ], + [ "m_staticTextSubXd", "class_generator_stab_form_base.html#a02b115d184e29b4b1b93bc8848cfdc26", null ], + [ "m_staticTextSubXq", "class_generator_stab_form_base.html#aa3e34810e40f7e6ba9c80a4f7476a6a8", null ], + [ "m_staticTextSyncXd", "class_generator_stab_form_base.html#a72412627afc1f12e1fb1627a17052bb1", null ], + [ "m_staticTextSyncXq", "class_generator_stab_form_base.html#aca6bebda04654a89a1ab9b0eb99cb297", null ], + [ "m_staticTextTranTd0", "class_generator_stab_form_base.html#a1653a917de424d06147b89018cbe1d63", null ], + [ "m_staticTextTranTq0", "class_generator_stab_form_base.html#aa43448fc7590f38486ecb2c8ce866862", null ], + [ "m_staticTextTranXd", "class_generator_stab_form_base.html#abc3ac82c1793612e706ad8570d2485e2", null ], + [ "m_staticTextTranXq", "class_generator_stab_form_base.html#a7dcb3b5df3ca7a2465db8c2b610f1f8d", null ], + [ "m_staticTextXp", "class_generator_stab_form_base.html#adaa265bc1d9756eb75628c983107adec", null ], + [ "m_textCtrlDamping", "class_generator_stab_form_base.html#a2e9f50b3aa0a7ecf5ff8b79b0c056906", null ], + [ "m_textCtrlInertia", "class_generator_stab_form_base.html#a59e210f644c44c275b652d0b39e26fc8", null ], + [ "m_textCtrlRa", "class_generator_stab_form_base.html#aa956c76d8b62aed8a46baf6c4c89e875", null ], + [ "m_textCtrlSat", "class_generator_stab_form_base.html#a8d5119db0ee2159313954c5af2f98583", null ], + [ "m_textCtrlSubTd0", "class_generator_stab_form_base.html#a262148af1f5af4659c6cd39d0ef59172", null ], + [ "m_textCtrlSubTq0", "class_generator_stab_form_base.html#ae34a23fbe6b549cee19cc4095c5d94c7", null ], + [ "m_textCtrlSubXd", "class_generator_stab_form_base.html#ab176d40b9540799cd1e8fce5320fe1f1", null ], + [ "m_textCtrlSubXq", "class_generator_stab_form_base.html#a386ad0fb02ddfeb050a6d5d4e899fc09", null ], + [ "m_textCtrlSyncXd", "class_generator_stab_form_base.html#af330bc8f2bd282323a32a2a86c914d15", null ], + [ "m_textCtrlSyncXq", "class_generator_stab_form_base.html#a28a2efcd2bad7faf6fb4d34139abbaa8", null ], + [ "m_textCtrlTranTd0", "class_generator_stab_form_base.html#acb429d36652f171301f8006a00db8697", null ], + [ "m_textCtrlTranTq0", "class_generator_stab_form_base.html#a4295c5ea7291078a186bdf40095d666e", null ], + [ "m_textCtrlTranXd", "class_generator_stab_form_base.html#a65422dbbdac862940d3c645dc32a8f60", null ], + [ "m_textCtrlTranXq", "class_generator_stab_form_base.html#a0d6e88858ff874656f6e1bbc5c88a6fa", null ], + [ "m_textCtrlXp", "class_generator_stab_form_base.html#aad04072958142f172f665606f1ea7852", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_graphical_element-members.html b/docs/doxygen/html/class_graphical_element-members.html index 04104d6..86231cc 100644 --- a/docs/doxygen/html/class_graphical_element-members.html +++ b/docs/doxygen/html/class_graphical_element-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GraphicalElement Member List
@@ -167,11 +182,14 @@ $(function() { ~Element()Elementvirtual ~GraphicalElement() (defined in GraphicalElement)GraphicalElement
+ - + diff --git a/docs/doxygen/html/class_graphical_element.html b/docs/doxygen/html/class_graphical_element.html index 9cbc364..d6c0fad 100644 --- a/docs/doxygen/html/class_graphical_element.html +++ b/docs/doxygen/html/class_graphical_element.html @@ -5,10 +5,17 @@ -PSP-UFU: GraphicalElement Class Reference +GraphicalElement Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
@@ -377,16 +392,23 @@ bool m_online = trueOpenGLColour m_selectionColour   -
The documentation for this class was generated from the following files:
+ - + diff --git a/docs/doxygen/html/class_graphical_element.js b/docs/doxygen/html/class_graphical_element.js new file mode 100644 index 0000000..111d866 --- /dev/null +++ b/docs/doxygen/html/class_graphical_element.js @@ -0,0 +1,5 @@ +var class_graphical_element = +[ + [ "GraphicalElement", "class_graphical_element.html#a9f116ee2cd16dd099c2579864415d7b8", null ], + [ "~GraphicalElement", "class_graphical_element.html#a8fde5fe6410268701fc76a7b7b623053", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_i_o_control-members.html b/docs/doxygen/html/class_i_o_control-members.html index 43768aa..c7d55a4 100644 --- a/docs/doxygen/html/class_i_o_control-members.html +++ b/docs/doxygen/html/class_i_o_control-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IOControl Member List
@@ -200,11 +215,14 @@ $(function() { ~Element()Elementvirtual ~IOControl() (defined in IOControl)IOControl
+ - + diff --git a/docs/doxygen/html/class_i_o_control.html b/docs/doxygen/html/class_i_o_control.html index c362d97..f3db29c 100644 --- a/docs/doxygen/html/class_i_o_control.html +++ b/docs/doxygen/html/class_i_o_control.html @@ -5,10 +5,17 @@ -PSP-UFU: IOControl Class Reference +IOControl Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -480,7 +495,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 11 of file IOControl.h.

+

Member Function Documentation

◆ Contains()

@@ -515,6 +533,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 27 of file IOControl.h.

+
@@ -562,6 +582,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 19 of file IOControl.cpp.

+ @@ -592,6 +614,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 226 of file IOControl.cpp.

+ @@ -628,6 +652,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 28 of file IOControl.h.

+ @@ -664,6 +690,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 116 of file IOControl.cpp.

+ @@ -712,18 +740,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 105 of file IOControl.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_i_o_control.js b/docs/doxygen/html/class_i_o_control.js new file mode 100644 index 0000000..c47a9cc --- /dev/null +++ b/docs/doxygen/html/class_i_o_control.js @@ -0,0 +1,31 @@ +var class_i_o_control = +[ + [ "IOFlags", "class_i_o_control.html#a84a11e53cc306b8f9f82e577923d4091", [ + [ "IN_TERMINAL_VOLTAGE", "class_i_o_control.html#a84a11e53cc306b8f9f82e577923d4091a97ce70af6aa8df66257643be841f2eff", null ], + [ "IN_VELOCITY", "class_i_o_control.html#a84a11e53cc306b8f9f82e577923d4091a53af2ff6991d89e1c2e8847e35d92789", null ], + [ "IN_ACTIVE_POWER", "class_i_o_control.html#a84a11e53cc306b8f9f82e577923d4091a3a942ff0ef0f3d8d5db72dce5c3c9fae", null ], + [ "IN_REACTIVE_POWER", "class_i_o_control.html#a84a11e53cc306b8f9f82e577923d4091a93d85bb8a7e63b57b618a1c255e4c61f", null ], + [ "OUT_FIELD_VOLTAGE", "class_i_o_control.html#a84a11e53cc306b8f9f82e577923d4091a5d7ea66bd1f25fa23472c0dd00c4175f", null ], + [ "OUT_MEC_POWER", "class_i_o_control.html#a84a11e53cc306b8f9f82e577923d4091a3276150d286d747d428297abbe52d313", null ] + ] ], + [ "IOControl", "class_i_o_control.html#a1a3b4a8f356a5d1ab95fdc729b9e758d", null ], + [ "~IOControl", "class_i_o_control.html#a41afef16a922a517d7362470ba252466", null ], + [ "Contains", "class_i_o_control.html#aa064c5d70e562334e2b374f919f42ef1", null ], + [ "Draw", "class_i_o_control.html#aa6aab56f8936a87f099241d9bad9fee4", null ], + [ "GenerateText", "class_i_o_control.html#a9f79a55442d00a0d88cd688d74ba271c", null ], + [ "GetCopy", "class_i_o_control.html#a99303b5e9bd32affaed8f4e4084fc9f7", null ], + [ "GetIOFlags", "class_i_o_control.html#a5f860d3375c22819b9b238a2bd1e5b69", null ], + [ "GetType", "class_i_o_control.html#a0f80c4e9c3c87cd91a77c9dd781338ac", null ], + [ "GetValue", "class_i_o_control.html#a42a87f4ece6f842271e0044038c4da90", null ], + [ "Intersects", "class_i_o_control.html#adebd59a32fd699ba4dff4dff44dfbf90", null ], + [ "Rotate", "class_i_o_control.html#a47a5633ed68ef0648623b9733dc5dab9", null ], + [ "SetValue", "class_i_o_control.html#ab76679a7c7c0b83e0f3a7e562e07803f", null ], + [ "ShowForm", "class_i_o_control.html#abbd3054700825f9c4ac1b7c813f7b439", null ], + [ "UpdatePoints", "class_i_o_control.html#a4ed6c7e0b25b5f8678e2d8375ffd5735", null ], + [ "UpdateText", "class_i_o_control.html#af99b84798978d530f1c3a8181cac2f54", null ], + [ "m_fontSize", "class_i_o_control.html#a973ae81e5d2d3df3b9088834d1950d32", null ], + [ "m_glStringValue", "class_i_o_control.html#a0e5e4b97d0e36099db3d6bf39eaa5dd1", null ], + [ "m_ioFlags", "class_i_o_control.html#a277d748a0aaaf3d31a64c293755ad807", null ], + [ "m_ioNodeType", "class_i_o_control.html#a4ab76d7f7634b1ed80459f1f17ce37c6", null ], + [ "m_value", "class_i_o_control.html#a595b6b926353d28d63fefee0f92f7719", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_i_o_control_form-members.html b/docs/doxygen/html/class_i_o_control_form-members.html index 9107799..504daa0 100644 --- a/docs/doxygen/html/class_i_o_control_form-members.html +++ b/docs/doxygen/html/class_i_o_control_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IOControlForm Member List
@@ -98,11 +113,14 @@ $(function() { ~IOControlForm() (defined in IOControlForm)IOControlFormvirtual ~IOControlFormBase() (defined in IOControlFormBase)IOControlFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_i_o_control_form.html b/docs/doxygen/html/class_i_o_control_form.html index 37c01a0..a7186c1 100644 --- a/docs/doxygen/html/class_i_o_control_form.html +++ b/docs/doxygen/html/class_i_o_control_form.html @@ -5,10 +5,17 @@ -PSP-UFU: IOControlForm Class Reference +IOControlForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -172,16 +187,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_i_o_control_form.js b/docs/doxygen/html/class_i_o_control_form.js new file mode 100644 index 0000000..78acd01 --- /dev/null +++ b/docs/doxygen/html/class_i_o_control_form.js @@ -0,0 +1,14 @@ +var class_i_o_control_form = +[ + [ "IOControlForm", "class_i_o_control_form.html#a6372a4868cd88d074c4f959f5e05dd17", null ], + [ "~IOControlForm", "class_i_o_control_form.html#a4a2f08453c254defd17b3e30ea43e359", null ], + [ "OnCancelButtonClick", "class_i_o_control_form.html#a294cdff0d3167173fcf48f87ad552026", null ], + [ "OnInputChecked", "class_i_o_control_form.html#aedeb2e81b04afc066c9be7830f1db76d", null ], + [ "OnOKButtonClick", "class_i_o_control_form.html#a6c7f6adabce0fe4cc2bbfe7bb121a853", null ], + [ "OnOutputChecked", "class_i_o_control_form.html#a5344ace55f9eb367ac15bfc9810a20b0", null ], + [ "ValidateData", "class_i_o_control_form.html#aa36bb4956ef77beb07f530362214777f", null ], + [ "m_inputFlags", "class_i_o_control_form.html#abdb682d2ae87ab03a77c967a95661671", null ], + [ "m_ioControl", "class_i_o_control_form.html#abc73fa231942471aa93d66fd26aeb9ef", null ], + [ "m_outputFlags", "class_i_o_control_form.html#a9f7a52e5af434674b671703a4a96b148", null ], + [ "m_parent", "class_i_o_control_form.html#a5d80b1908b0b1f93b98fe1068d3a53c2", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_i_o_control_form_base-members.html b/docs/doxygen/html/class_i_o_control_form_base-members.html index d60b51a..f199ce7 100644 --- a/docs/doxygen/html/class_i_o_control_form_base-members.html +++ b/docs/doxygen/html/class_i_o_control_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IOControlFormBase Member List
@@ -91,11 +106,14 @@ $(function() { OnOutputChecked(wxCommandEvent &event) (defined in IOControlFormBase)IOControlFormBaseinlineprotectedvirtual ~IOControlFormBase() (defined in IOControlFormBase)IOControlFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_i_o_control_form_base.html b/docs/doxygen/html/class_i_o_control_form_base.html index e34a68e..7b0a4bf 100644 --- a/docs/doxygen/html/class_i_o_control_form_base.html +++ b/docs/doxygen/html/class_i_o_control_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: IOControlFormBase Class Reference +IOControlFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -152,16 +167,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_i_o_control_form_base.js b/docs/doxygen/html/class_i_o_control_form_base.js new file mode 100644 index 0000000..0aa9286 --- /dev/null +++ b/docs/doxygen/html/class_i_o_control_form_base.js @@ -0,0 +1,25 @@ +var class_i_o_control_form_base = +[ + [ "IOControlFormBase", "class_i_o_control_form_base.html#a0e3c563e83daad1b146c3145a1f344dc", null ], + [ "~IOControlFormBase", "class_i_o_control_form_base.html#a6f073d1da5e7c354a69c5e92fee91b74", null ], + [ "GetButtonCancel", "class_i_o_control_form_base.html#a3f98f87e15ed807cb3aa745729509e12", null ], + [ "GetButtonOK", "class_i_o_control_form_base.html#ac961808513e0fb11a8be08776dc4bfd4", null ], + [ "GetCheckBoxInput", "class_i_o_control_form_base.html#a6ba3651e28ee0a9131e5f51d55bab139", null ], + [ "GetCheckBoxOutput", "class_i_o_control_form_base.html#a102076f74743f9fdbc198cd2bed3b116", null ], + [ "GetChoiceInput", "class_i_o_control_form_base.html#a9a2b51c358aace6a0d4b07e50b4c7c37", null ], + [ "GetChoiceOutput", "class_i_o_control_form_base.html#ad102e12c9fc0b87f8772b231a9baeb5c", null ], + [ "GetNotebook", "class_i_o_control_form_base.html#ac962155a26d22e6d4966356af5206616", null ], + [ "GetPanelGeneral", "class_i_o_control_form_base.html#ac1f0b2e58ab674e1d20746e1dcb0a32e", null ], + [ "OnCancelButtonClick", "class_i_o_control_form_base.html#a9f68b38b53e53e788dc41b5643731b4a", null ], + [ "OnInputChecked", "class_i_o_control_form_base.html#ae2ebc271d9f4b54d2f7187650de346db", null ], + [ "OnOKButtonClick", "class_i_o_control_form_base.html#aab5c5deb99e6b6155a6d62dd29e96291", null ], + [ "OnOutputChecked", "class_i_o_control_form_base.html#aa49a73696bcbc9c6f2f768c5a046bd67", null ], + [ "m_ButtonCancel", "class_i_o_control_form_base.html#acb3fd01eeeab7e543724d84b3f87322b", null ], + [ "m_buttonOK", "class_i_o_control_form_base.html#a04ad72346ba61a658e7600be4b3dd3b7", null ], + [ "m_checkBoxInput", "class_i_o_control_form_base.html#a4a9b31ad68893cbfc6df0075dfa5554a", null ], + [ "m_checkBoxOutput", "class_i_o_control_form_base.html#a7941b23b4bb81d79a537d17322b95688", null ], + [ "m_choiceInput", "class_i_o_control_form_base.html#aa0c8e2757ea7ac4a0087c91a81773dae", null ], + [ "m_choiceOutput", "class_i_o_control_form_base.html#a6d7b5bfb8a440a444cd210d63141a82d", null ], + [ "m_notebook", "class_i_o_control_form_base.html#a4264f642058ebfc6f0b70aebbfaae020", null ], + [ "m_panelGeneral", "class_i_o_control_form_base.html#abbed22784552e9d9830e0112b694fc68", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_ind_motor-members.html b/docs/doxygen/html/class_ind_motor-members.html index 476d3f0..43345cd 100644 --- a/docs/doxygen/html/class_ind_motor-members.html +++ b/docs/doxygen/html/class_ind_motor-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IndMotor Member List
@@ -212,11 +227,14 @@ $(function() { ~Machines() (defined in Machines)Machines ~PowerElement()PowerElement
+ - + diff --git a/docs/doxygen/html/class_ind_motor.html b/docs/doxygen/html/class_ind_motor.html index 310fcf3..f4305f7 100644 --- a/docs/doxygen/html/class_ind_motor.html +++ b/docs/doxygen/html/class_ind_motor.html @@ -5,10 +5,17 @@ -PSP-UFU: IndMotor Class Reference +IndMotor Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -518,7 +533,10 @@ void UpdateSwitchesPositio void UpdatePowerFlowArrowsPosition ()   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 17 of file IndMotor.h.

+

Member Function Documentation

◆ GetContextMenu()

@@ -554,6 +572,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 25 of file IndMotor.cpp.

+
@@ -584,6 +604,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 83 of file IndMotor.cpp.

+ @@ -614,6 +636,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 90 of file IndMotor.cpp.

+ @@ -662,18 +686,24 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 32 of file IndMotor.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_ind_motor.js b/docs/doxygen/html/class_ind_motor.js new file mode 100644 index 0000000..228272e --- /dev/null +++ b/docs/doxygen/html/class_ind_motor.js @@ -0,0 +1,15 @@ +var class_ind_motor = +[ + [ "IndMotor", "class_ind_motor.html#aff52f7f6fd833dac3fc8ef2854e5b050", null ], + [ "IndMotor", "class_ind_motor.html#a4f14d665719c9c116973fc36daf9f3bf", null ], + [ "~IndMotor", "class_ind_motor.html#a3469fbd7e494581f3a85b02810299cc1", null ], + [ "DrawSymbol", "class_ind_motor.html#a189732624c8953f90474628203a6f60f", null ], + [ "GetContextMenu", "class_ind_motor.html#a87666565ae1380993d94e7886e9a1f59", null ], + [ "GetCopy", "class_ind_motor.html#ace3ce34ba500ec33bf37b9216ad636a8", null ], + [ "GetElectricalData", "class_ind_motor.html#a11687043c6937c2c9f4c5529ee718820", null ], + [ "GetPUElectricalData", "class_ind_motor.html#aa1944aa08d0199789960a5e7670bbd57", null ], + [ "GetTipText", "class_ind_motor.html#ae785c4055db23b4ae1ef03f00468a532", null ], + [ "SetElectricalData", "class_ind_motor.html#ac4b156ddd6b72a9ede4cebdb591fc38a", null ], + [ "ShowForm", "class_ind_motor.html#add48c9a03d197a6279ca2e33af0fe286", null ], + [ "m_electricalData", "class_ind_motor.html#aebac7db5bc5f6591ee7bbfd7ddb24356", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_ind_motor_form-members.html b/docs/doxygen/html/class_ind_motor_form-members.html index ba51977..39f330b 100644 --- a/docs/doxygen/html/class_ind_motor_form-members.html +++ b/docs/doxygen/html/class_ind_motor_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IndMotorForm Member List
@@ -105,11 +120,14 @@ $(function() { ~IndMotorForm() (defined in IndMotorForm)IndMotorFormvirtual ~IndMotorFormBase() (defined in IndMotorFormBase)IndMotorFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_ind_motor_form.html b/docs/doxygen/html/class_ind_motor_form.html index c3b0efa..2fce845 100644 --- a/docs/doxygen/html/class_ind_motor_form.html +++ b/docs/doxygen/html/class_ind_motor_form.html @@ -5,10 +5,17 @@ -PSP-UFU: IndMotorForm Class Reference +IndMotorForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -193,16 +208,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_ind_motor_form.js b/docs/doxygen/html/class_ind_motor_form.js new file mode 100644 index 0000000..d1614c4 --- /dev/null +++ b/docs/doxygen/html/class_ind_motor_form.js @@ -0,0 +1,11 @@ +var class_ind_motor_form = +[ + [ "IndMotorForm", "class_ind_motor_form.html#af7073b103db5a16bcca07abc5eb2b016", null ], + [ "~IndMotorForm", "class_ind_motor_form.html#a76f3c2c479a077bec19de92c578e4c29", null ], + [ "OnCancelButtonClick", "class_ind_motor_form.html#a7c2d3d2b46b031a0d0493953c59ea870", null ], + [ "OnOKButtonClick", "class_ind_motor_form.html#a39d7d8e848983eca62934a85189b10d3", null ], + [ "OnStabilityButtonClick", "class_ind_motor_form.html#ad6f76fcad945ffd7ecae00f21f807344", null ], + [ "ValidateData", "class_ind_motor_form.html#a9ca417d1a2f8c868af36979f68c9db91", null ], + [ "m_indMotor", "class_ind_motor_form.html#aa9d097f41ae381d77eac45d3c6f5706c", null ], + [ "m_parent", "class_ind_motor_form.html#acf1de94f94189a7ca404ebf88a294d39", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_ind_motor_form_base-members.html b/docs/doxygen/html/class_ind_motor_form_base-members.html index 2e32f8d..f0f9931 100644 --- a/docs/doxygen/html/class_ind_motor_form_base-members.html +++ b/docs/doxygen/html/class_ind_motor_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IndMotorFormBase Member List
@@ -100,11 +115,14 @@ $(function() { OnStabilityButtonClick(wxCommandEvent &event) (defined in IndMotorFormBase)IndMotorFormBaseinlineprotectedvirtual ~IndMotorFormBase() (defined in IndMotorFormBase)IndMotorFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_ind_motor_form_base.html b/docs/doxygen/html/class_ind_motor_form_base.html index bc97a25..9523585 100644 --- a/docs/doxygen/html/class_ind_motor_form_base.html +++ b/docs/doxygen/html/class_ind_motor_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: IndMotorFormBase Class Reference +IndMotorFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -179,16 +194,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_ind_motor_form_base.js b/docs/doxygen/html/class_ind_motor_form_base.js new file mode 100644 index 0000000..e31f38c --- /dev/null +++ b/docs/doxygen/html/class_ind_motor_form_base.js @@ -0,0 +1,34 @@ +var class_ind_motor_form_base = +[ + [ "IndMotorFormBase", "class_ind_motor_form_base.html#a0aa109a6e361d28ebd1f13f244b3c556", null ], + [ "~IndMotorFormBase", "class_ind_motor_form_base.html#a6657fb2d280ea027182d0c4d964333f3", null ], + [ "GetButtonCancel", "class_ind_motor_form_base.html#abc28e68d84b0bf9a9ccd4d8e14b763b0", null ], + [ "GetButtonOK", "class_ind_motor_form_base.html#aa3c4e0ac8c6e4840c18f935cc530dedb", null ], + [ "GetButtonStabButton", "class_ind_motor_form_base.html#aaf5c64d3b8dc6c67b5f3a55b71888d7e", null ], + [ "GetChoiceActivePower", "class_ind_motor_form_base.html#adade2e1d92bbe9bbebca42b73d2f1a57", null ], + [ "GetChoiceReactivePower", "class_ind_motor_form_base.html#af8bcef3920a2e0870f4f4ec5fbc67fe5", null ], + [ "GetNotebook", "class_ind_motor_form_base.html#a0c82be5b29ce2c036d92e44c3432dbb6", null ], + [ "GetPanelGeneral", "class_ind_motor_form_base.html#a2c24fe4254e034504a0260cdda42513e", null ], + [ "GetStaticTextActivePower", "class_ind_motor_form_base.html#a2c1e7baea1b456a10fe5e0914c127c7b", null ], + [ "GetStaticTextName", "class_ind_motor_form_base.html#ab51437aba0e9a54c15db6be67fe3d955", null ], + [ "GetStaticTextReactivePower", "class_ind_motor_form_base.html#aeab59b1da6428b36b8e7004c3571e744", null ], + [ "GetTextCtrlActivePower", "class_ind_motor_form_base.html#a1f53059b6bb9b73e07e15b9d841b222d", null ], + [ "GetTextCtrlName", "class_ind_motor_form_base.html#a20159ecab492bfc9314722ed4e191162", null ], + [ "GetTextCtrlReactivePower", "class_ind_motor_form_base.html#a4e3e4e6d5b833cf37ec1934c736b7e64", null ], + [ "OnCancelButtonClick", "class_ind_motor_form_base.html#acd95d64ec81bc737d0f6176e78e611f0", null ], + [ "OnOKButtonClick", "class_ind_motor_form_base.html#a3a751ebd471c193d7ef92ffb1f127eb8", null ], + [ "OnStabilityButtonClick", "class_ind_motor_form_base.html#ae2653e3cdaafe54a10d15169408bd07e", null ], + [ "m_ButtonCancel", "class_ind_motor_form_base.html#a4519b549589b293788d81c97901f9be7", null ], + [ "m_buttonOK", "class_ind_motor_form_base.html#a259f8dd7e84c83ca04167d13a5032b46", null ], + [ "m_buttonStabButton", "class_ind_motor_form_base.html#aae2d4546a888b3bdcbe55454fd362190", null ], + [ "m_choiceActivePower", "class_ind_motor_form_base.html#a012388db66794b7a944347e74b5d0b7c", null ], + [ "m_choiceReactivePower", "class_ind_motor_form_base.html#a1def2110e7efc45e9d509b602dda6503", null ], + [ "m_notebook", "class_ind_motor_form_base.html#a27505913ac4ece5b2a7a7a05d3b9a541", null ], + [ "m_panelGeneral", "class_ind_motor_form_base.html#a0a69475ac00ad508bfc3ffe6c43d56a3", null ], + [ "m_staticTextActivePower", "class_ind_motor_form_base.html#a2b9928d8c79416d1a338fc8575d03c43", null ], + [ "m_staticTextName", "class_ind_motor_form_base.html#adb48816b754ba70d437b111b4b2110e9", null ], + [ "m_staticTextReactivePower", "class_ind_motor_form_base.html#a35c6e0f2bde9c50801f00b4ad357cab3", null ], + [ "m_textCtrlActivePower", "class_ind_motor_form_base.html#a41af7b9b92b92ac8dbdb796cc4dcccd0", null ], + [ "m_textCtrlName", "class_ind_motor_form_base.html#a38fbe802b51dad3218a46ea2815417cf", null ], + [ "m_textCtrlReactivePower", "class_ind_motor_form_base.html#a0a30486c867f53d69eed86d2096e1829", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_inductor-members.html b/docs/doxygen/html/class_inductor-members.html index 9270ec5..a7b97b2 100644 --- a/docs/doxygen/html/class_inductor-members.html +++ b/docs/doxygen/html/class_inductor-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Inductor Member List
@@ -206,11 +221,14 @@ $(function() { ~PowerElement()PowerElement ~Shunt() (defined in Shunt)Shunt
+ - + diff --git a/docs/doxygen/html/class_inductor.html b/docs/doxygen/html/class_inductor.html index 436a456..4261b79 100644 --- a/docs/doxygen/html/class_inductor.html +++ b/docs/doxygen/html/class_inductor.html @@ -5,10 +5,17 @@ -PSP-UFU: Inductor Class Reference +Inductor Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -507,7 +522,10 @@ void UpdatePowerFlowArrows void DrawGround (wxPoint2DDouble position) const   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 14 of file Inductor.h.

+

Member Function Documentation

◆ AddParent()

@@ -553,6 +571,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 7 of file Inductor.cpp.

+
@@ -589,6 +609,8 @@ void DrawGround (wxPoi

Reimplemented from Shunt.

+

Definition at line 115 of file Inductor.cpp.

+ @@ -636,6 +658,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 38 of file Inductor.cpp.

+ @@ -673,6 +697,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 108 of file Inductor.cpp.

+ @@ -703,6 +729,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 157 of file Inductor.cpp.

+ @@ -733,6 +761,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 164 of file Inductor.cpp.

+ @@ -769,6 +799,8 @@ void DrawGround (wxPoi

Reimplemented from Shunt.

+

Definition at line 121 of file Inductor.cpp.

+ @@ -805,6 +837,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 96 of file Inductor.cpp.

+ @@ -853,18 +887,24 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 122 of file Inductor.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_inductor.js b/docs/doxygen/html/class_inductor.js new file mode 100644 index 0000000..064351f --- /dev/null +++ b/docs/doxygen/html/class_inductor.js @@ -0,0 +1,19 @@ +var class_inductor = +[ + [ "Inductor", "class_inductor.html#a8fb5be488cf91f58ee7b40c1ab1fb42e", null ], + [ "Inductor", "class_inductor.html#a2e2c3877440b360ffaa334aaa10f2ba7", null ], + [ "~Inductor", "class_inductor.html#a9d6619eb044d61b05a2e0dea5af33e8d", null ], + [ "AddParent", "class_inductor.html#a4e404c6e15f206fe0f5de06fc19dedf5", null ], + [ "Contains", "class_inductor.html#ac3ba7de94a328b20ff86e968a6228f60", null ], + [ "Draw", "class_inductor.html#a97761292fac4f0da7ae3dc6ca4b4de54", null ], + [ "GetContextMenu", "class_inductor.html#aa0ae00d91b40307141a8bd3aebf1a0c2", null ], + [ "GetCopy", "class_inductor.html#a4241ebd43388ebe88ec5888a15bc22d9", null ], + [ "GetElectricalData", "class_inductor.html#a33a975de522a26e2b11288a375526a4c", null ], + [ "GetPUElectricalData", "class_inductor.html#afdce746cc18ce3f84f2f270ca6989ba1", null ], + [ "GetTipText", "class_inductor.html#ac16663899a076f0e84722b27193fe530", null ], + [ "Intersects", "class_inductor.html#a3d331d2a725275a12489401180d4c1d1", null ], + [ "Rotate", "class_inductor.html#a801bb445c01059558902c0eca4d38cdd", null ], + [ "SetElectricalData", "class_inductor.html#a938a447fb37e3526be5dc22714884c71", null ], + [ "ShowForm", "class_inductor.html#abfaf28fc70a71f3f85940eef7d1551c9", null ], + [ "m_electricalData", "class_inductor.html#a0167d5b0c39d5a31f3a78caaabcb5d65", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_limiter-members.html b/docs/doxygen/html/class_limiter-members.html index de05e1a..a7e2ad0 100644 --- a/docs/doxygen/html/class_limiter-members.html +++ b/docs/doxygen/html/class_limiter-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Limiter Member List
@@ -189,11 +204,14 @@ $(function() { ~Element()Elementvirtual ~Limiter() (defined in Limiter)Limiter
+ - + diff --git a/docs/doxygen/html/class_limiter.html b/docs/doxygen/html/class_limiter.html index 6270443..6af5f5e 100644 --- a/docs/doxygen/html/class_limiter.html +++ b/docs/doxygen/html/class_limiter.html @@ -5,10 +5,17 @@ -PSP-UFU: Limiter Class Reference +Limiter Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -453,7 +468,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 8 of file Limiter.h.

+

Member Function Documentation

◆ Contains()

@@ -488,6 +506,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 15 of file Limiter.h.

+
@@ -535,6 +555,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 17 of file Limiter.cpp.

+ @@ -565,6 +587,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 100 of file Limiter.cpp.

+ @@ -601,6 +625,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 16 of file Limiter.h.

+ @@ -637,6 +663,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 55 of file Limiter.cpp.

+ @@ -685,18 +713,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 44 of file Limiter.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_limiter.js b/docs/doxygen/html/class_limiter.js new file mode 100644 index 0000000..19a88e7 --- /dev/null +++ b/docs/doxygen/html/class_limiter.js @@ -0,0 +1,19 @@ +var class_limiter = +[ + [ "Limiter", "class_limiter.html#a04c71f682ad96a0a25a41210050f7755", null ], + [ "~Limiter", "class_limiter.html#a29b205ac461e886d81eee0cf5454e27a", null ], + [ "Contains", "class_limiter.html#ac6506d59da4ea682d9e556564ec3ad11", null ], + [ "Draw", "class_limiter.html#a2e2960936ebfcc6589181b7948fba242", null ], + [ "GetCopy", "class_limiter.html#a6071e2308baa7b42f189f09fd1878245", null ], + [ "GetLowLimit", "class_limiter.html#a948ae420837973019d2ef9e270a34e1a", null ], + [ "GetUpLimit", "class_limiter.html#a348343e6e77ef696838127e864401da2", null ], + [ "Intersects", "class_limiter.html#ac9c1858dfc3b4d30b2eca0c4767a9f0e", null ], + [ "Rotate", "class_limiter.html#ab9c3aa47fd2fd4903be2dd600f658d25", null ], + [ "SetLowLimit", "class_limiter.html#a11cf8eb5186b3fe2ba34cb6112526521", null ], + [ "SetUpLimit", "class_limiter.html#a928d74d6a20552c31c5c4a7598a723b6", null ], + [ "ShowForm", "class_limiter.html#a31fd227e010e7d39f1435a70709b14e3", null ], + [ "Solve", "class_limiter.html#a7a7b29ca5a852ef5642a7cfe99af38ed", null ], + [ "UpdatePoints", "class_limiter.html#a0bf60e09fa2d7f43aa699cef191037f1", null ], + [ "m_lowLimit", "class_limiter.html#a48bb5cd98f61566fdfba0a1b04934560", null ], + [ "m_upLimit", "class_limiter.html#ab03497f0b51bfc74a98b7502942fe138", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_limiter_form-members.html b/docs/doxygen/html/class_limiter_form-members.html index a75dcf3..bad2a4d 100644 --- a/docs/doxygen/html/class_limiter_form-members.html +++ b/docs/doxygen/html/class_limiter_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LimiterForm Member List
@@ -94,11 +109,14 @@ $(function() { ~LimiterForm() (defined in LimiterForm)LimiterFormvirtual ~LimiterFormBase() (defined in LimiterFormBase)LimiterFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_limiter_form.html b/docs/doxygen/html/class_limiter_form.html index 8765b6a..d69adc1 100644 --- a/docs/doxygen/html/class_limiter_form.html +++ b/docs/doxygen/html/class_limiter_form.html @@ -5,10 +5,17 @@ -PSP-UFU: LimiterForm Class Reference +LimiterForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -160,16 +175,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 7 of file LimiterForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_limiter_form.js b/docs/doxygen/html/class_limiter_form.js new file mode 100644 index 0000000..0184fa5 --- /dev/null +++ b/docs/doxygen/html/class_limiter_form.js @@ -0,0 +1,10 @@ +var class_limiter_form = +[ + [ "LimiterForm", "class_limiter_form.html#a09752597455d2ec6cb3667d02bf934d3", null ], + [ "~LimiterForm", "class_limiter_form.html#a8195e63f0dcee76259c46ccdb2875e81", null ], + [ "OnCancelButtonClick", "class_limiter_form.html#a7d251ee840262b69434037ec1e715113", null ], + [ "OnOKButtonClick", "class_limiter_form.html#aabf2d0d5bac45cddd80dee0ed77df4d8", null ], + [ "ValidateData", "class_limiter_form.html#a511760d328e526a5f2a7ffec806e4d59", null ], + [ "m_limiter", "class_limiter_form.html#adb4fae237f4911df3e63c99e7280dfe8", null ], + [ "m_parent", "class_limiter_form.html#a9bbbc6e83c9e604e62f2f000e9a41d60", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_limiter_form_base-members.html b/docs/doxygen/html/class_limiter_form_base-members.html index 9570311..0f305c4 100644 --- a/docs/doxygen/html/class_limiter_form_base-members.html +++ b/docs/doxygen/html/class_limiter_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LimiterFormBase Member List
@@ -89,11 +104,14 @@ $(function() { OnOKButtonClick(wxCommandEvent &event) (defined in LimiterFormBase)LimiterFormBaseinlineprotectedvirtual ~LimiterFormBase() (defined in LimiterFormBase)LimiterFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_limiter_form_base.html b/docs/doxygen/html/class_limiter_form_base.html index 95fb34a..e0a8973 100644 --- a/docs/doxygen/html/class_limiter_form_base.html +++ b/docs/doxygen/html/class_limiter_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: LimiterFormBase Class Reference +LimiterFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -146,16 +161,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_limiter_form_base.js b/docs/doxygen/html/class_limiter_form_base.js new file mode 100644 index 0000000..e7ed056 --- /dev/null +++ b/docs/doxygen/html/class_limiter_form_base.js @@ -0,0 +1,23 @@ +var class_limiter_form_base = +[ + [ "LimiterFormBase", "class_limiter_form_base.html#a50d5878344e634662470fc2f802528fa", null ], + [ "~LimiterFormBase", "class_limiter_form_base.html#aff9d3bd76d9f1ae53628cf46ced7f7c0", null ], + [ "GetButtonCancel", "class_limiter_form_base.html#a88c42dd3f6e7123caa47ac4459cb1b18", null ], + [ "GetButtonOK", "class_limiter_form_base.html#a3b229b427923670555332825e8dd8e8e", null ], + [ "GetNotebook", "class_limiter_form_base.html#aa129024adb8eedaacf3e81564df2cf38", null ], + [ "GetPanelGeneral", "class_limiter_form_base.html#af08f68c2f59dc29a36e0c7213ab6a92b", null ], + [ "GetStaticTextLowLimit", "class_limiter_form_base.html#ab521840a4a94533af12bc7731d288bc5", null ], + [ "GetStaticTextUpLimiter", "class_limiter_form_base.html#acc5c3953281a3a10b01ac90e8e296653", null ], + [ "GetTextCtrlLowLimit", "class_limiter_form_base.html#a191664a531538233edf3aa7c4432583b", null ], + [ "GetTextCtrlUpLimit", "class_limiter_form_base.html#abf72980e367c4f63ad7b819856bf689d", null ], + [ "OnCancelButtonClick", "class_limiter_form_base.html#a39f50dee6cc270be5c21af4dfe0d98f6", null ], + [ "OnOKButtonClick", "class_limiter_form_base.html#aa80b8dbc483a971425e76f497cc0f6b6", null ], + [ "m_ButtonCancel", "class_limiter_form_base.html#aaa967f3b7a80dc872ff50e002dcc7074", null ], + [ "m_buttonOK", "class_limiter_form_base.html#a3c5e871cb238fbcd7065ee2676c6ba91", null ], + [ "m_notebook", "class_limiter_form_base.html#a3aa095dc672bdbfd106cc539a3b5e4a0", null ], + [ "m_panelGeneral", "class_limiter_form_base.html#ad76205083d27b1aa4bd122c1da863eb7", null ], + [ "m_staticTextLowLimit", "class_limiter_form_base.html#abfa428980b4ae9a76e5f969f3ab09a65", null ], + [ "m_staticTextUpLimiter", "class_limiter_form_base.html#ab52749fadfd077fcba9588b850c81c42", null ], + [ "m_textCtrlLowLimit", "class_limiter_form_base.html#a1afd53788b2dfa94cf908c639f9bc632", null ], + [ "m_textCtrlUpLimit", "class_limiter_form_base.html#a58056787775c23456f2b95a0cb1543e3", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_line-members.html b/docs/doxygen/html/class_line-members.html index 03f1f51..c5471b4 100644 --- a/docs/doxygen/html/class_line-members.html +++ b/docs/doxygen/html/class_line-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Line Member List
@@ -207,11 +222,14 @@ $(function() { ~Line() (defined in Line)Line ~PowerElement()PowerElement
+ - + diff --git a/docs/doxygen/html/class_line.html b/docs/doxygen/html/class_line.html index 28ed898..30fc9fb 100644 --- a/docs/doxygen/html/class_line.html +++ b/docs/doxygen/html/class_line.html @@ -5,10 +5,17 @@ -PSP-UFU: Line Class Reference +Line Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -513,7 +528,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 35 of file Line.h.

+

Member Function Documentation

◆ AddParent()

@@ -559,6 +577,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 119 of file Line.cpp.

+
@@ -595,6 +615,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 217 of file Line.cpp.

+ @@ -642,6 +664,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 315 of file Line.cpp.

+ @@ -678,6 +702,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 22 of file Line.cpp.

+ @@ -725,6 +751,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 30 of file Line.cpp.

+ @@ -755,6 +783,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 47 of file Line.h.

+ @@ -792,6 +822,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 272 of file Line.cpp.

+ @@ -822,6 +854,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 479 of file Line.cpp.

+ @@ -852,6 +886,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 486 of file Line.cpp.

+ @@ -888,6 +924,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 186 of file Line.cpp.

+ @@ -924,6 +962,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 99 of file Line.cpp.

+ @@ -971,6 +1011,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 230 of file Line.cpp.

+ @@ -1007,6 +1049,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 193 of file Line.cpp.

+ @@ -1044,6 +1088,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 205 of file Line.cpp.

+ @@ -1091,6 +1137,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 458 of file Line.cpp.

+ @@ -1128,6 +1176,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 349 of file Line.cpp.

+ @@ -1175,6 +1225,8 @@ Additional Inherited Members

Reimplemented from PowerElement.

+

Definition at line 341 of file Line.cpp.

+ @@ -1211,6 +1263,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 472 of file Line.cpp.

+ @@ -1247,6 +1301,8 @@ Additional Inherited Members

Reimplemented from PowerElement.

+

Definition at line 429 of file Line.cpp.

+ @@ -1295,6 +1351,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 330 of file Line.cpp.

+ @@ -1331,18 +1389,24 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 224 of file Line.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_line.js b/docs/doxygen/html/class_line.js new file mode 100644 index 0000000..b4ea9ab --- /dev/null +++ b/docs/doxygen/html/class_line.js @@ -0,0 +1,34 @@ +var class_line = +[ + [ "Line", "class_line.html#acc11b8a429d8cdd63ba6803dff5602b3", null ], + [ "Line", "class_line.html#aca44a17e46c68ad59060f9a83b400324", null ], + [ "~Line", "class_line.html#aabe85f48d22d92b62257091f48174fac", null ], + [ "AddNode", "class_line.html#ad872f1221660ee6b856da5ad762e8046", null ], + [ "AddParent", "class_line.html#a26c69f7f703dca718edc28d5093934a3", null ], + [ "AddPoint", "class_line.html#a046a7b2ebff50f237f73dbc182f7ff6f", null ], + [ "CalculateBoundaries", "class_line.html#aa146d6b0c7f3b74204f2c88dcbd7f4b0", null ], + [ "Contains", "class_line.html#a05eb3761f198a058045f85d6e685ca97", null ], + [ "Draw", "class_line.html#a297e12aa8ff0be5d344e245732487bdd", null ], + [ "GetBestPickboxCursor", "class_line.html#a7c72fc585eb96bf9565cca0ce300cfd9", null ], + [ "GetContextMenu", "class_line.html#a978de0ff06b6f57401ade84045e1a55f", null ], + [ "GetCopy", "class_line.html#afc4916268d2a32014e4ab0f8308165a1", null ], + [ "GetElectricalData", "class_line.html#a0222046f2138af61b25f00f020e9f61d", null ], + [ "GetPUElectricalData", "class_line.html#a8eb3f030ead2466e25604abdc15d3009", null ], + [ "GetTipText", "class_line.html#a51e7bff578cd280464a70200fc323efc", null ], + [ "Intersects", "class_line.html#a125581fc6d21c83565b902751af331dc", null ], + [ "Move", "class_line.html#a3eabf6de2af4ee71f72ce4f091c69978", null ], + [ "MoveNode", "class_line.html#ac8be7d7136d86830c262280f51b79ea4", null ], + [ "MovePickbox", "class_line.html#afa67498961416e645e0aa5358959ef1d", null ], + [ "PickboxContains", "class_line.html#acac760d9d67d9c4d007e03592d0e96b4", null ], + [ "RemoveNode", "class_line.html#a98c23237565bceefac0b107269ffa792", null ], + [ "RotateNode", "class_line.html#ab73d74778b5aa9807d21f156d15fadf7", null ], + [ "SetElectricalData", "class_line.html#aa6838e31a8ac7fd55e3bfa088a4dcbb5", null ], + [ "SetNodeParent", "class_line.html#a6d35082da4d30bd432b73b72dd86fadb", null ], + [ "SetNominalVoltage", "class_line.html#a1f3ef94716c52a357ecbcbdf00b0e072", null ], + [ "SetPointList", "class_line.html#af9a931bdb7e0693cacae010a19b744e6", null ], + [ "SetPowerFlowDirection", "class_line.html#a400c8d0397ecdfe6c0a8380ee6bc7e1e", null ], + [ "ShowForm", "class_line.html#a24c6a659148f063c78e080a18f4517a1", null ], + [ "StartMove", "class_line.html#abb812387508a9971570bfa1d38e41041", null ], + [ "UpdatePowerFlowArrowsPosition", "class_line.html#afa37b7e5ecc3e208b1c404743e9d1758", null ], + [ "m_electricalData", "class_line.html#a5f1ac563f1c41bea65eef940bc729fdc", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_line_form-members.html b/docs/doxygen/html/class_line_form-members.html index f5e3e20..ae0380e 100644 --- a/docs/doxygen/html/class_line_form-members.html +++ b/docs/doxygen/html/class_line_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LineForm Member List
@@ -144,11 +159,14 @@ $(function() { ~LineForm() (defined in LineForm)LineFormvirtual ~LineFormBase() (defined in LineFormBase)LineFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_line_form.html b/docs/doxygen/html/class_line_form.html index aeb6d5d..edd9556 100644 --- a/docs/doxygen/html/class_line_form.html +++ b/docs/doxygen/html/class_line_form.html @@ -5,10 +5,17 @@ -PSP-UFU: LineForm Class Reference +LineForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -310,16 +325,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 8 of file LineForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_line_form.js b/docs/doxygen/html/class_line_form.js new file mode 100644 index 0000000..b45b2a0 --- /dev/null +++ b/docs/doxygen/html/class_line_form.js @@ -0,0 +1,12 @@ +var class_line_form = +[ + [ "LineForm", "class_line_form.html#a3896cd6a6cc5500fe1935aa9b16d37ce", null ], + [ "~LineForm", "class_line_form.html#a2d4f4eb4b8943b09c9dca207fb585bfd", null ], + [ "OnCancelButtonClick", "class_line_form.html#a892fad419fc3b15a770c7d25a272f570", null ], + [ "OnOKButtonClick", "class_line_form.html#a4b5d7e7696f936260c542dcd60810d38", null ], + [ "OnStabilityButtonClick", "class_line_form.html#a7e580cfea0c4b1075941e92e6596161d", null ], + [ "ReplaceStaticTextLabelChar", "class_line_form.html#a40650c8cf031e57ad58b3c2b22dad0a1", null ], + [ "ValidateData", "class_line_form.html#a5b9f183abdea533d0473e59d04cbf431", null ], + [ "m_line", "class_line_form.html#af72bc026476d186fa8e289e388e9b48b", null ], + [ "m_parent", "class_line_form.html#a610f77d5591f5dfbed0f24b301f781c3", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_line_form_base-members.html b/docs/doxygen/html/class_line_form_base-members.html index 7466ead..7794761 100644 --- a/docs/doxygen/html/class_line_form_base-members.html +++ b/docs/doxygen/html/class_line_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LineFormBase Member List
@@ -138,11 +153,14 @@ $(function() { OnStabilityButtonClick(wxCommandEvent &event) (defined in LineFormBase)LineFormBaseinlineprotectedvirtual ~LineFormBase() (defined in LineFormBase)LineFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_line_form_base.html b/docs/doxygen/html/class_line_form_base.html index 5994cfc..dd40b8c 100644 --- a/docs/doxygen/html/class_line_form_base.html +++ b/docs/doxygen/html/class_line_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: LineFormBase Class Reference +LineFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -293,16 +308,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_line_form_base.js b/docs/doxygen/html/class_line_form_base.js new file mode 100644 index 0000000..c5eb184 --- /dev/null +++ b/docs/doxygen/html/class_line_form_base.js @@ -0,0 +1,72 @@ +var class_line_form_base = +[ + [ "LineFormBase", "class_line_form_base.html#af99e84f70407445abd2d50b9ea9227b1", null ], + [ "~LineFormBase", "class_line_form_base.html#a09802bd88add44ae786242f5294f2609", null ], + [ "GetButtonCancel", "class_line_form_base.html#a256475d66a5afe9ee22d8f7a47aa1652", null ], + [ "GetButtonOK", "class_line_form_base.html#a1218578bfc90029991fe5c661129a3e5", null ], + [ "GetButtonStability", "class_line_form_base.html#aaec474f0cb50cbf2369912888981cf57", null ], + [ "GetCheckUseLinePower", "class_line_form_base.html#af2b552fd7b4b58a71e91c498d31e53d8", null ], + [ "GetChoiceNominalPower", "class_line_form_base.html#ab67bdd26e51d22e35b3981c7f0ccb934", null ], + [ "GetChoiceReactance", "class_line_form_base.html#ab53a8775afea108736dfd518cafd0257", null ], + [ "GetChoiceResistance", "class_line_form_base.html#a346fa89ba532796d25822d4a3b99d0bf", null ], + [ "GetChoiceSusceptance", "class_line_form_base.html#a1d2d9b874ce50f33594c0eb4e169efb0", null ], + [ "GetNotebook", "class_line_form_base.html#aaab121a2c968b45e1cadc1fa4d9b2908", null ], + [ "GetPanelFault", "class_line_form_base.html#a670ab48361b388378afa7265065d2772", null ], + [ "GetPanelGeneral", "class_line_form_base.html#a4e5cec6ae74e8921d68c02971aba2ce6", null ], + [ "GetStaticTextKM", "class_line_form_base.html#a5fa8d503cfc9276f7bab0c9a360826c3", null ], + [ "GetStaticTextLineSize", "class_line_form_base.html#a74ecdc51dfde2f1423679e924827db2f", null ], + [ "GetStaticTextName", "class_line_form_base.html#ade61566890ec5faa3a4b213cde2966c5", null ], + [ "GetStaticTextNominalPower", "class_line_form_base.html#ae1d403904af22ccf0ff2d1ac0a9d13ae", null ], + [ "GetStaticTextNominalVoltage", "class_line_form_base.html#a00214bd206b78fd3a8fa0121e5ebe82e", null ], + [ "GetStaticTextNominalVoltageValue", "class_line_form_base.html#a63900c58a03059f026f21f2d17694a50", null ], + [ "GetStaticTextReactance", "class_line_form_base.html#a9eb76fc567f8309675aea668b33076c1", null ], + [ "GetStaticTextResistance", "class_line_form_base.html#abbdd5e5c0c949953b1c62f87f405d23b", null ], + [ "GetStaticTextSusceptance", "class_line_form_base.html#a3cacfa3ac4e54b23b9ea4b4295bb5869", null ], + [ "GetStaticTextZeroReactance", "class_line_form_base.html#a8849449fd48e7ed19bd1386cfc22b39a", null ], + [ "GetStaticTextZeroResistance", "class_line_form_base.html#a0a7e39a334c79efe3e56a35a4338b6c4", null ], + [ "GetStaticTextZeroSusceptance", "class_line_form_base.html#aff93aefe098db7eab3f92ec0f2f70b3f", null ], + [ "GetTextCtrlLineSize", "class_line_form_base.html#a18e5c02351619bbde01361457e0f924d", null ], + [ "GetTextCtrlName", "class_line_form_base.html#a30d2ceb62b13a69797078c5a1046fdf3", null ], + [ "GetTextCtrlNominalPower", "class_line_form_base.html#ae1f84ede0a8aaea8215065add0a65ac3", null ], + [ "GetTextCtrlReactance", "class_line_form_base.html#af368b73e629369a6d75232bfb49b67b2", null ], + [ "GetTextCtrlResistance", "class_line_form_base.html#a237b7bb9470374b859b241284560af19", null ], + [ "GetTextCtrlSusceptance", "class_line_form_base.html#a3cdb32d9490fa7c931222b82c8d76f06", null ], + [ "GetTextCtrlZeroReactance", "class_line_form_base.html#a3f6971139d91cf7ea3ca530cfc5abe60", null ], + [ "GetTextCtrlZeroResistance", "class_line_form_base.html#aa6b5722ddc3c5769bbd17b7e61ca934f", null ], + [ "GetTextCtrlZeroSusceptance", "class_line_form_base.html#a9a47d570f346a28550b55878b9b60b8b", null ], + [ "OnCancelButtonClick", "class_line_form_base.html#afa2dabfbc8d41d852ae2636de1f474c6", null ], + [ "OnOKButtonClick", "class_line_form_base.html#a09c4f16f3fcd1388cf004c1fc33517eb", null ], + [ "OnStabilityButtonClick", "class_line_form_base.html#a4a177ba61b789ee9746b6a6300938481", null ], + [ "m_buttonCancel", "class_line_form_base.html#a2cf2cf9916228e7422349d082cd2b897", null ], + [ "m_buttonOK", "class_line_form_base.html#a099de8044e2d8ac8c2a0678e568f7b03", null ], + [ "m_buttonStability", "class_line_form_base.html#a1cd88fb45c3d56e135e3776f0578670b", null ], + [ "m_checkUseLinePower", "class_line_form_base.html#acafcc53a4fcb2a9af482fab636e2e0f1", null ], + [ "m_choiceNominalPower", "class_line_form_base.html#a203522b4c5faed9829f1c1ef5bb7d856", null ], + [ "m_choiceReactance", "class_line_form_base.html#aaeac2ae5aa2a609802014928a1de5861", null ], + [ "m_choiceResistance", "class_line_form_base.html#afc764ff277749947f23d9f7926ca304b", null ], + [ "m_choiceSusceptance", "class_line_form_base.html#ab03dd2f3fe79f1e25ff08e62dfcad5c6", null ], + [ "m_notebook", "class_line_form_base.html#a965925e6eda9bb2550238c634a380a01", null ], + [ "m_panelFault", "class_line_form_base.html#a4b5dd697cee618b60e93a3b20639de69", null ], + [ "m_panelGeneral", "class_line_form_base.html#aca66b41f60b423ae026887c98b8e3b49", null ], + [ "m_staticTextKM", "class_line_form_base.html#a4d757ee09be0bc3064ce011571f5dade", null ], + [ "m_staticTextLineSize", "class_line_form_base.html#ae20df51563b5ec99459080f88da22ca4", null ], + [ "m_staticTextName", "class_line_form_base.html#a735e9def88fc646947d21e54f4f1c6db", null ], + [ "m_staticTextNominalPower", "class_line_form_base.html#a7f69ee53d6c444da7c7092b2ca005c2f", null ], + [ "m_staticTextNominalVoltage", "class_line_form_base.html#ae36429133dcb0433b18786a9d6d2d157", null ], + [ "m_staticTextNominalVoltageValue", "class_line_form_base.html#a30db42733e74c95a5ac8fb33a6a5b309", null ], + [ "m_staticTextReactance", "class_line_form_base.html#ad35c9e501520ab9f20f538343989a05a", null ], + [ "m_staticTextResistance", "class_line_form_base.html#a71e0449ead49724187175c9b4cd49442", null ], + [ "m_staticTextSusceptance", "class_line_form_base.html#ac524da001d800cc641e693ca852c33b2", null ], + [ "m_staticTextZeroReactance", "class_line_form_base.html#a2ec10dc7d10b73e27074de8741472ffc", null ], + [ "m_staticTextZeroResistance", "class_line_form_base.html#a4eff427e33bd710c2c2698131fcab982", null ], + [ "m_staticTextZeroSusceptance", "class_line_form_base.html#aed775c5b411a7b08117895137ad36f03", null ], + [ "m_textCtrlLineSize", "class_line_form_base.html#a76b591279f0a28d0d2ea71070d951074", null ], + [ "m_textCtrlName", "class_line_form_base.html#abfeffc76a7851af380c076f0527da914", null ], + [ "m_textCtrlNominalPower", "class_line_form_base.html#a99c440454d44272034bdb633306b927e", null ], + [ "m_textCtrlReactance", "class_line_form_base.html#aed5639eb90045433cae4bc7f38f5223a", null ], + [ "m_textCtrlResistance", "class_line_form_base.html#ad98d8271f8efbbaff028fc6fbee23c6c", null ], + [ "m_textCtrlSusceptance", "class_line_form_base.html#a4ffe2719ab5877bb014cfd301a8251f8", null ], + [ "m_textCtrlZeroReactance", "class_line_form_base.html#aae898a9d1cb5c021125dff4a1eac059d", null ], + [ "m_textCtrlZeroResistance", "class_line_form_base.html#a5037f0ab0ff17c8fef9eb6a8eda8c7f3", null ], + [ "m_textCtrlZeroSusceptance", "class_line_form_base.html#abd05440f261ada2fb7636c9a6ccc6e21", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_load-members.html b/docs/doxygen/html/class_load-members.html index d4c75cf..09c58f5 100644 --- a/docs/doxygen/html/class_load-members.html +++ b/docs/doxygen/html/class_load-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Load Member List
@@ -207,11 +222,14 @@ $(function() { ~PowerElement()PowerElement ~Shunt() (defined in Shunt)Shunt
+ - + diff --git a/docs/doxygen/html/class_load.html b/docs/doxygen/html/class_load.html index 8f93ddc..8ff8ad0 100644 --- a/docs/doxygen/html/class_load.html +++ b/docs/doxygen/html/class_load.html @@ -5,10 +5,17 @@ -PSP-UFU: Load Class Reference +Load Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -510,7 +525,10 @@ void UpdatePowerFlowArrows void DrawGround (wxPoint2DDouble position) const   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 23 of file Load.h.

+

Member Function Documentation

◆ AddParent()

@@ -556,6 +574,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 6 of file Load.cpp.

+
@@ -603,6 +623,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 42 of file Load.cpp.

+ @@ -640,6 +662,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 117 of file Load.cpp.

+ @@ -670,6 +694,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 174 of file Load.cpp.

+ @@ -700,6 +726,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 181 of file Load.cpp.

+ @@ -736,6 +764,8 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 104 of file Load.cpp.

+ @@ -784,18 +814,24 @@ void DrawGround (wxPoi

Reimplemented from Element.

+

Definition at line 124 of file Load.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_load.js b/docs/doxygen/html/class_load.js new file mode 100644 index 0000000..40476bd --- /dev/null +++ b/docs/doxygen/html/class_load.js @@ -0,0 +1,18 @@ +var class_load = +[ + [ "Load", "class_load.html#af345594efdc31c3d2e9cb114f9f57524", null ], + [ "Load", "class_load.html#ad130172fba87df28884ec1f486063714", null ], + [ "~Load", "class_load.html#af91138cb9aea0dc773851b171ce73fff", null ], + [ "AddParent", "class_load.html#ac9f449be9b919b36924a844324bf37ee", null ], + [ "Draw", "class_load.html#aaef52b18cc53fa2db996fb9cad5db181", null ], + [ "GetContextMenu", "class_load.html#a25b4a3e553f8400114ac8effa11287da", null ], + [ "GetCopy", "class_load.html#a27309c24b2c70bde37ba6afbb9679da2", null ], + [ "GetElectricalData", "class_load.html#a4bbca04fe58f176cff346032f6d503b8", null ], + [ "GetPUElectricalData", "class_load.html#a00ef3c6ae69dbd45e96f696dfb76f013", null ], + [ "GetTipText", "class_load.html#a00acfbf7dc907e5de79ceb4803632279", null ], + [ "Rotate", "class_load.html#a46e9f2e0935ecca77b3a46568404d8e3", null ], + [ "SetElectricalData", "class_load.html#af5bb79d6e7bdfb3ec0d24f5caafae1c4", null ], + [ "ShowForm", "class_load.html#a792367f35c97324328816fee156e5ecf", null ], + [ "m_electricalData", "class_load.html#a46ba1a15389afb33632df47ce2230f28", null ], + [ "m_triangPts", "class_load.html#ae3ed3608986240f7b6fa2abdc507f235", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_load_form-members.html b/docs/doxygen/html/class_load_form-members.html index 202253e..9dd3268 100644 --- a/docs/doxygen/html/class_load_form-members.html +++ b/docs/doxygen/html/class_load_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LoadForm Member List
@@ -109,11 +124,14 @@ $(function() { ~LoadForm() (defined in LoadForm)LoadFormvirtual ~LoadFormBase() (defined in LoadFormBase)LoadFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_load_form.html b/docs/doxygen/html/class_load_form.html index 221ef0f..61464d4 100644 --- a/docs/doxygen/html/class_load_form.html +++ b/docs/doxygen/html/class_load_form.html @@ -5,10 +5,17 @@ -PSP-UFU: LoadForm Class Reference +LoadForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -205,16 +220,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 8 of file LoadForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_load_form.js b/docs/doxygen/html/class_load_form.js new file mode 100644 index 0000000..fdd4ab1 --- /dev/null +++ b/docs/doxygen/html/class_load_form.js @@ -0,0 +1,11 @@ +var class_load_form = +[ + [ "LoadForm", "class_load_form.html#a7f38ddb1c3b0f8b30e7262703bc9ff45", null ], + [ "~LoadForm", "class_load_form.html#a160ca46cab5a2eae0538bbb84864cbe4", null ], + [ "OnCancelButtonClick", "class_load_form.html#a499ad89e3e6f6e222a086f4fbdf7a55c", null ], + [ "OnOnButtonClick", "class_load_form.html#ab386ded2337ace670c02ace2217153b5", null ], + [ "OnStabilityButtonClick", "class_load_form.html#ac293c800a7bc88739d25cf83a31fe35e", null ], + [ "ValidateData", "class_load_form.html#af870ed8f5fe98a1b811b67f0d1ad0a83", null ], + [ "m_load", "class_load_form.html#a3755e5fb146d9137ff2edcd3f49bf448", null ], + [ "m_parent", "class_load_form.html#adde6b34d3da331a7d1e6219d0ccdce17", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_load_form_base-members.html b/docs/doxygen/html/class_load_form_base-members.html index e04d2c9..551845e 100644 --- a/docs/doxygen/html/class_load_form_base-members.html +++ b/docs/doxygen/html/class_load_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LoadFormBase Member List
@@ -104,11 +119,14 @@ $(function() { OnStabilityButtonClick(wxCommandEvent &event) (defined in LoadFormBase)LoadFormBaseinlineprotectedvirtual ~LoadFormBase() (defined in LoadFormBase)LoadFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_load_form_base.html b/docs/doxygen/html/class_load_form_base.html index a19721a..51c164c 100644 --- a/docs/doxygen/html/class_load_form_base.html +++ b/docs/doxygen/html/class_load_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: LoadFormBase Class Reference +LoadFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -191,16 +206,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_load_form_base.js b/docs/doxygen/html/class_load_form_base.js new file mode 100644 index 0000000..401ab05 --- /dev/null +++ b/docs/doxygen/html/class_load_form_base.js @@ -0,0 +1,38 @@ +var class_load_form_base = +[ + [ "LoadFormBase", "class_load_form_base.html#afa2c9cc985a6a943a28e686b733bf5c9", null ], + [ "~LoadFormBase", "class_load_form_base.html#a38beea9e3d7823514cba2d817f9a4186", null ], + [ "GetButtonCancel", "class_load_form_base.html#aaa96d2ac7928d6bb44edd3371f09469d", null ], + [ "GetButtonOK", "class_load_form_base.html#a1daecd6bc40f7e6a070401480d74470b", null ], + [ "GetButtonStabButton", "class_load_form_base.html#a044fd290072e54664f8b945a7bd2d677", null ], + [ "GetChoiceActivePower", "class_load_form_base.html#a90c65efb8ef6019be702558dc32e1d1f", null ], + [ "GetChoiceReactivePower", "class_load_form_base.html#a8718dacdcf42fa9dc6ea96ee7d9d66bf", null ], + [ "GetChoiceType", "class_load_form_base.html#a203c59bf18c393c0a5d912cdb25db1cb", null ], + [ "GetNotebook", "class_load_form_base.html#aff90e535af76c59fc1bc92516149d64a", null ], + [ "GetPanelGeneral", "class_load_form_base.html#a74e864a4935ddfc332b3df77db7d8bf5", null ], + [ "GetStaticTextActivePower", "class_load_form_base.html#a6bfa369635047a9f685fb3edb5db7121", null ], + [ "GetStaticTextName", "class_load_form_base.html#aacb5150b8cee1a3e050814185a5db285", null ], + [ "GetStaticTextReactivePower", "class_load_form_base.html#aded1905679daa505b408c0b71bc63791", null ], + [ "GetStaticTextType", "class_load_form_base.html#a0d842d4bc1f149d357e59e1751e3a523", null ], + [ "GetTextCtrlActivePower", "class_load_form_base.html#a99cfa7bbb9b443a488bec446617c749e", null ], + [ "GetTextCtrlName", "class_load_form_base.html#adf9d5ee325055a048db75a704a409240", null ], + [ "GetTextCtrlReactivePower", "class_load_form_base.html#a1f4405f22aef8ebeae35d4bbd5208035", null ], + [ "OnCancelButtonClick", "class_load_form_base.html#af3b94dc08078ddbd7324da1b2fabb705", null ], + [ "OnOnButtonClick", "class_load_form_base.html#a960510298aba9e0f7131478e9fb5252c", null ], + [ "OnStabilityButtonClick", "class_load_form_base.html#ae8caf71c3e7de42e7001d084218225a4", null ], + [ "m_ButtonCancel", "class_load_form_base.html#a485886d585c53b6d833373b4800f4ec4", null ], + [ "m_buttonOK", "class_load_form_base.html#a14294a16406cd59118a2bffd634f151d", null ], + [ "m_buttonStabButton", "class_load_form_base.html#af448a423ff3cfb3588f99a7f9cf9fb4f", null ], + [ "m_choiceActivePower", "class_load_form_base.html#a4e2fe98c1f873b85ef432675f06f680a", null ], + [ "m_choiceReactivePower", "class_load_form_base.html#a9dde002ba56e51758abe03e3c4fa3a4f", null ], + [ "m_choiceType", "class_load_form_base.html#a26bbd3cc70540badb4f453f5c2c34194", null ], + [ "m_notebook", "class_load_form_base.html#a0b0a86d104e2b0ac6ae61afe294f7510", null ], + [ "m_panelGeneral", "class_load_form_base.html#abf0bbb7835b55693a7240fdbb9fbd3b1", null ], + [ "m_staticTextActivePower", "class_load_form_base.html#a275aa208dd38ae701e3d28642b9c19db", null ], + [ "m_staticTextName", "class_load_form_base.html#ad7db9b68a4bfa67eac0de80f70e43f9d", null ], + [ "m_staticTextReactivePower", "class_load_form_base.html#a09e735a37110fcfa346d5192c725d5e7", null ], + [ "m_staticTextType", "class_load_form_base.html#a03bebc143db9e3e887e7724e1e0d27e3", null ], + [ "m_textCtrlActivePower", "class_load_form_base.html#aba7a3ded5ea500167811f77582b4a595", null ], + [ "m_textCtrlName", "class_load_form_base.html#a685403de1879bfa0b5145230999af83f", null ], + [ "m_textCtrlReactivePower", "class_load_form_base.html#ae6809d1e8d05bc7fb2c7ff1eea0030d5", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_machines-members.html b/docs/doxygen/html/class_machines-members.html index 35eabe9..a475379 100644 --- a/docs/doxygen/html/class_machines-members.html +++ b/docs/doxygen/html/class_machines-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Machines Member List
@@ -205,11 +220,14 @@ $(function() { ~Machines() (defined in Machines)Machines ~PowerElement()PowerElement
+ - + diff --git a/docs/doxygen/html/class_machines.html b/docs/doxygen/html/class_machines.html index 58d405c..8c77686 100644 --- a/docs/doxygen/html/class_machines.html +++ b/docs/doxygen/html/class_machines.html @@ -5,10 +5,17 @@ -PSP-UFU: Machines Class Reference +Machines Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -509,7 +524,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 9 of file Machines.h.

+

Member Function Documentation

◆ AddParent()

@@ -555,6 +573,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 8 of file Machines.cpp.

+
@@ -591,6 +611,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 18 of file Machines.h.

+ @@ -638,6 +660,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 37 of file Machines.cpp.

+ @@ -674,6 +698,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 20 of file Machines.h.

+ @@ -710,6 +736,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 94 of file Machines.cpp.

+ @@ -757,6 +785,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 107 of file Machines.cpp.

+ @@ -794,6 +824,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 158 of file Machines.cpp.

+ @@ -830,6 +862,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 148 of file Machines.cpp.

+ @@ -866,6 +900,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 215 of file Machines.cpp.

+ @@ -913,6 +949,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 136 of file Machines.cpp.

+ @@ -950,6 +988,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 172 of file Machines.cpp.

+ @@ -986,6 +1026,8 @@ Additional Inherited Members

Reimplemented from PowerElement.

+

Definition at line 250 of file Machines.cpp.

+ @@ -1022,18 +1064,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 129 of file Machines.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_machines.js b/docs/doxygen/html/class_machines.js new file mode 100644 index 0000000..8a251c9 --- /dev/null +++ b/docs/doxygen/html/class_machines.js @@ -0,0 +1,30 @@ +var class_machines = +[ + [ "SyncMachineModel", "class_machines.html#a5b6d9ae94b6f028db2b7109856735376", [ + [ "SM_MODEL_1", "class_machines.html#a5b6d9ae94b6f028db2b7109856735376a363e10101f2aba8ac39b8915e9129df5", null ], + [ "SM_MODEL_2", "class_machines.html#a5b6d9ae94b6f028db2b7109856735376a7f0972dca9fa84e079f191834beb44ff", null ], + [ "SM_MODEL_3", "class_machines.html#a5b6d9ae94b6f028db2b7109856735376a74c8165d3b70e4ac0a0754e2db0e4f6d", null ], + [ "SM_MODEL_4", "class_machines.html#a5b6d9ae94b6f028db2b7109856735376ae95f52ad93fea0734b5658587768e05c", null ], + [ "SM_MODEL_5", "class_machines.html#a5b6d9ae94b6f028db2b7109856735376a368f09880bedde4fad7ac0c1c17f9896", null ] + ] ], + [ "Machines", "class_machines.html#a476134b068ab34323df35fb88af7ad55", null ], + [ "~Machines", "class_machines.html#a9218a3719007e45a255d21cadde06397", null ], + [ "AddParent", "class_machines.html#aaaf1b86dcbfd8f4a4c082a77d72b1fe3", null ], + [ "Contains", "class_machines.html#acda27b0ea8a7b0fb00d647d8744f346e", null ], + [ "Draw", "class_machines.html#af3279663c82de88e12f0487bfc633f7c", null ], + [ "DrawSymbol", "class_machines.html#a836b0a65432d1e298c668533e792deac", null ], + [ "Intersects", "class_machines.html#a0a825ccdbd5059f9ae9f869d4b6e3ec4", null ], + [ "Move", "class_machines.html#a2f7450283dd36f4fc0847dfd50385c44", null ], + [ "MoveNode", "class_machines.html#aeab8436c33f74a10e252b418028ec491", null ], + [ "NodeContains", "class_machines.html#a63597b82a1db17a9e4aac9f1058d7dff", null ], + [ "RemoveParent", "class_machines.html#a002d852ddd0d73502a6bd819b5545026", null ], + [ "Rotate", "class_machines.html#acff264f0c80d97a966ff97401f2f142a", null ], + [ "RotateNode", "class_machines.html#a914faa054440402cad74c3b70f62ad92", null ], + [ "SetNodeParent", "class_machines.html#aed7664d5b85585fc13f4a1ad48457901", null ], + [ "SetPowerFlowDirection", "class_machines.html#a293cb955dcacaaebca564b8a91ce57d3", null ], + [ "StartMove", "class_machines.html#acbefe76cd5161b5684a27205b155e797", null ], + [ "UpdateNodes", "class_machines.html#a51d79bffa4471eb29c223aaa180839f7", null ], + [ "UpdatePowerFlowArrowsPosition", "class_machines.html#a489713cc909f0d733107dad72160f434", null ], + [ "UpdateSwitchesPosition", "class_machines.html#a6ec44ff91a791250bd2e516da791963e", null ], + [ "m_inserted", "class_machines.html#a9c912703c8f4c2605b17c7bbc8d28b19", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_main_app-members.html b/docs/doxygen/html/class_main_app-members.html index 19fda46..fa5cdea 100644 --- a/docs/doxygen/html/class_main_app-members.html +++ b/docs/doxygen/html/class_main_app-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
MainApp Member List
@@ -74,11 +89,14 @@ $(function() { OnInit() (defined in MainApp)MainAppinlinevirtual ~MainApp() (defined in MainApp)MainAppinlinevirtual
+ - + diff --git a/docs/doxygen/html/class_main_app.html b/docs/doxygen/html/class_main_app.html index f7b379b..23be16b 100644 --- a/docs/doxygen/html/class_main_app.html +++ b/docs/doxygen/html/class_main_app.html @@ -5,10 +5,17 @@ -PSP-UFU: MainApp Class Reference +MainApp Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -89,15 +104,22 @@ void LoadCatalogs (wxL virtual bool OnInit ()   -
The documentation for this class was generated from the following file:
    -
  • Project/main.cpp
  • +

    Detailed Description

    +
    +

    Definition at line 11 of file main.cpp.

    +

    The documentation for this class was generated from the following file:
+
- + diff --git a/docs/doxygen/html/class_main_app.js b/docs/doxygen/html/class_main_app.js new file mode 100644 index 0000000..2cd243a --- /dev/null +++ b/docs/doxygen/html/class_main_app.js @@ -0,0 +1,8 @@ +var class_main_app = +[ + [ "MainApp", "class_main_app.html#a62488418e2bc66492d3d5bcc836a7103", null ], + [ "~MainApp", "class_main_app.html#ae054fbf151d29a1a1edcf9894c30448b", null ], + [ "LoadCatalogs", "class_main_app.html#a32ed68269904944d8679457250be4130", null ], + [ "LoadInitFile", "class_main_app.html#a78baaab4889ebc6077b0373021442be8", null ], + [ "OnInit", "class_main_app.html#a11be2905a8ec4c22f3b40cbf955eb007", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_main_frame-members.html b/docs/doxygen/html/class_main_frame-members.html index d0e0ca0..0a5d250 100644 --- a/docs/doxygen/html/class_main_frame-members.html +++ b/docs/doxygen/html/class_main_frame-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
MainFrame Member List
@@ -175,11 +190,14 @@ $(function() { ~MainFrame() (defined in MainFrame)MainFrame ~MainFrameBase() (defined in MainFrameBase)MainFrameBasevirtual
+ - + diff --git a/docs/doxygen/html/class_main_frame.html b/docs/doxygen/html/class_main_frame.html index e078352..86c705a 100644 --- a/docs/doxygen/html/class_main_frame.html +++ b/docs/doxygen/html/class_main_frame.html @@ -5,10 +5,17 @@ -PSP-UFU: MainFrame Class Reference +MainFrame Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -351,16 +366,23 @@ Additional Inherited Members }   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 33 of file MainFrame.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_main_frame.js b/docs/doxygen/html/class_main_frame.js new file mode 100644 index 0000000..39a53f6 --- /dev/null +++ b/docs/doxygen/html/class_main_frame.js @@ -0,0 +1,50 @@ +var class_main_frame = +[ + [ "MainFrame", "class_main_frame.html#a667b44053cae174a361cfd21124ef995", null ], + [ "MainFrame", "class_main_frame.html#ac5d3dc03594f76ed6e5fd1ccecfc5b0b", null ], + [ "~MainFrame", "class_main_frame.html#a0cfd88ece4836e0ea5430bd55370bf11", null ], + [ "CreateAddElementsMenu", "class_main_frame.html#aade761601af16dadcbf24cd2a4e8d289", null ], + [ "EnableCurrentProjectRibbon", "class_main_frame.html#ad1475f1bb8a05169b3d3d462008c887b", null ], + [ "Init", "class_main_frame.html#abe97a8d22d4604390a83664fac5f4c79", null ], + [ "NotebookPageClosed", "class_main_frame.html#a864ac698cedcf5eece459cba8bdf30ae", null ], + [ "NotebookPageClosing", "class_main_frame.html#a821abe42b5a3334e4983849338f32b87", null ], + [ "OnAboutClick", "class_main_frame.html#a168600f7abd2e86b5055f838b5622d70", null ], + [ "OnAddElementDropdown", "class_main_frame.html#a2000379766297fee02621a6ad6459a98", null ], + [ "OnAddElementsClick", "class_main_frame.html#a0a3ee9353274f263c64609b2bf638d41", null ], + [ "OnChartsClick", "class_main_frame.html#af5d801e4c8d27bddf3f821499bac5c43", null ], + [ "OnCloseClick", "class_main_frame.html#a3c62d86a7c8d207032d4f7f67bf85696", null ], + [ "OnCopyClick", "class_main_frame.html#ae389c2b609acc84043bdba60ee50429b", null ], + [ "OnDataReportClick", "class_main_frame.html#a66d0737f956dafa8b68a3abae954961a", null ], + [ "OnDeleteClick", "class_main_frame.html#a5e86880ce3526fdcde3b7139a497480c", null ], + [ "OnDisableSolutionClick", "class_main_frame.html#a4a1c9ab859e5fd8a4c76ea7e10276181", null ], + [ "OnDragClick", "class_main_frame.html#af323a2d80574c5971479e07c806ab802", null ], + [ "OnEnableSolutionClick", "class_main_frame.html#a3f8d2ccbf744a7159259da89cf7befb0", null ], + [ "OnExitClick", "class_main_frame.html#ae9b83e83f45433f286be9ba801e677b2", null ], + [ "OnExpImpClick", "class_main_frame.html#a8a12d2b7f7087d4da1ed25b3cf3c77b7", null ], + [ "OnFaultClick", "class_main_frame.html#a9c882f6ee74c38423595a1ee8a83b081", null ], + [ "OnFitClick", "class_main_frame.html#a3519cbc623ee5b589421012b749816bd", null ], + [ "OnGeneralSettingsClick", "class_main_frame.html#affafa8bbfeb03218543c30f633222049", null ], + [ "OnMoveClick", "class_main_frame.html#ac2616c3c46dcfe32c91e4ac35efc7710", null ], + [ "OnNewClick", "class_main_frame.html#a9051b04100741c40b30ec71e0684b9b8", null ], + [ "OnOpenClick", "class_main_frame.html#adfba2e2bca63d8ee779a0e4cf00a6de0", null ], + [ "OnPasteClick", "class_main_frame.html#a2265acb74c29d4252b66ce2da5fa2c6a", null ], + [ "OnPowerFlowClick", "class_main_frame.html#ad15ed016f2af7c23737cabb12eee172d", null ], + [ "OnPSPGuideClick", "class_main_frame.html#a51e7ed757e3a3b28f3043ec4e634bbc6", null ], + [ "OnRedoClick", "class_main_frame.html#ae5b67bc97c6f0947914fc54e30d4870c", null ], + [ "OnResetVoltagesClick", "class_main_frame.html#a0f9424776de69b354830c32bd2658e00", null ], + [ "OnRotClockClick", "class_main_frame.html#ae1828bcf3eb5dc93d87d15c0b7fe2c00", null ], + [ "OnRotCounterClockClick", "class_main_frame.html#a0ce90faadbe60f31c1746040f6462acc", null ], + [ "OnRunStabilityClick", "class_main_frame.html#ae12044cdbd540650c33727c0b00f43a6", null ], + [ "OnSaveAsClick", "class_main_frame.html#a8981e73c31352c5666b19bdd65283128", null ], + [ "OnSaveClick", "class_main_frame.html#a32eafdac93d3778c719014d5ab0a38c6", null ], + [ "OnSCPowerClick", "class_main_frame.html#af1f91fe7196afd71f28a9d0c6bce9b0b", null ], + [ "OnSimulationSettingsClick", "class_main_frame.html#aa4086cd9eea4f143744af74a24f4905f", null ], + [ "OnSnapshotClick", "class_main_frame.html#a9a6c94b9be7330b54ff983dab6d69d01", null ], + [ "OnUndoClick", "class_main_frame.html#ae036a245cf66988cc9843518058e42a1", null ], + [ "m_addElementsMenu", "class_main_frame.html#a1b1176355c46695d80fa351ccd17e4e6", null ], + [ "m_artMetro", "class_main_frame.html#a865a5828138dc9b559fcb0ad79c251a3", null ], + [ "m_generalProperties", "class_main_frame.html#aa30782a1fa801cf46cb461e388d57eb4", null ], + [ "m_locale", "class_main_frame.html#a323110e4e9e99d7358baf119b2e50ad3", null ], + [ "m_projectNumber", "class_main_frame.html#a88c766e242fb1efba27f0f0d2fb0a207", null ], + [ "m_workspaceList", "class_main_frame.html#a38697929eab5835946f68dc7680fee5a", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_main_frame_base-members.html b/docs/doxygen/html/class_main_frame_base-members.html index a34021e..3b81fe7 100644 --- a/docs/doxygen/html/class_main_frame_base-members.html +++ b/docs/doxygen/html/class_main_frame_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
MainFrameBase Member List
@@ -161,11 +176,14 @@ $(function() { OnUndoClick(wxRibbonButtonBarEvent &event) (defined in MainFrameBase)MainFrameBaseinlineprotectedvirtual ~MainFrameBase() (defined in MainFrameBase)MainFrameBasevirtual
+ - + diff --git a/docs/doxygen/html/class_main_frame_base.html b/docs/doxygen/html/class_main_frame_base.html index ba96038..31e17c9 100644 --- a/docs/doxygen/html/class_main_frame_base.html +++ b/docs/doxygen/html/class_main_frame_base.html @@ -5,10 +5,17 @@ -PSP-UFU: MainFrameBase Class Reference +MainFrameBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -313,16 +328,23 @@ wxAuiNotebook * m_auiNoteb wxStatusBar * m_statusBar   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_main_frame_base.js b/docs/doxygen/html/class_main_frame_base.js new file mode 100644 index 0000000..8efb47e --- /dev/null +++ b/docs/doxygen/html/class_main_frame_base.js @@ -0,0 +1,95 @@ +var class_main_frame_base = +[ + [ "ID_RIBBON_ABOUT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a7ddcce5a0fc3fd28e5a143d74d44e22b", null ], + [ "ID_RIBBON_ADDELEMENT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a2cedd9fbdc0111a82258040845814f4e", null ], + [ "ID_RIBBON_CHARTS", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a8ba61bef22ba14e5d33ff6152a52032c", null ], + [ "ID_RIBBON_CLOSE", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9ac853a9f30f75ebfb6065a99771b6fa27", null ], + [ "ID_RIBBON_COPY", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a14d1f40da5fe6d2885f81edc7bb34a5b", null ], + [ "ID_RIBBON_DATAREPORT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9ad219a0870575cfe02af28cec88f11a79", null ], + [ "ID_RIBBON_DELETE", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a7d26b27353b73836e009a8fb63ea64f0", null ], + [ "ID_RIBBON_DISABLESOL", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a9f01085677ac59c45a00f38ba012b606", null ], + [ "ID_RIBBON_DRAG", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9ae2192305b1be1c090a4db25a341a8aa2", null ], + [ "ID_RIBBON_ENABLESOL", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a1a8745483f979ee20127462baef529b8", null ], + [ "ID_RIBBON_EXIT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9afef2cc3e901fde0607cafcd6d9ebaac6", null ], + [ "ID_RIBBON_FAULT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a17d8645af74374ed37cc377454903efe", null ], + [ "ID_RIBBON_FIT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9ae67852eba853e7a9889a21dfc6bca52b", null ], + [ "ID_RIBBON_GENSETTINGS", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9ab63bbde4ed29da3598c017b6cfd25c75", null ], + [ "ID_RIBBON_GUIDE", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a05e92cb2567285f28c79eb500215b7da", null ], + [ "ID_RIBBON_MOVE", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9ab742a9cc46431af12db375ec8b443729", null ], + [ "ID_RIBBON_NEW", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a9bb260567cffe56b9db58274e4bac47c", null ], + [ "ID_RIBBON_OPEN", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9afbc8518ac655f8467de20390453c2fe7", null ], + [ "ID_RIBBON_PASTE", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a763d06068082580a6aa29c8e7d850462", null ], + [ "ID_RIBBON_POWERFLOW", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9aed3da5b755508446a072304c74b46988", null ], + [ "ID_RIBBON_PROJSETTINGS", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9adc4cdd714264b181007029985e72285a", null ], + [ "ID_RIBBON_REDO", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9ab80637a65b2e8941cd24044495ac674f", null ], + [ "ID_RIBBON_RESETVOLT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a5bbe17a7648dedf17da9d9b246dd8948", null ], + [ "ID_RIBBON_ROTATEC", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9aa6376080d848cfd62d01395cb541bfb1", null ], + [ "ID_RIBBON_ROTATECC", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a2f9639a5f09ac7227dda3b1cbe0b83c4", null ], + [ "ID_RIBBON_RUNSTAB", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9aac83b781c09c5abd012c0f5b7c06f87e", null ], + [ "ID_RIBBON_SAVE", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a274e87b2f0e70ab82e39438670e075d9", null ], + [ "ID_RIBBON_SAVEAS", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a12f9d6b6da5ab7daef64309af56eb254", null ], + [ "ID_RIBBON_SCPOWER", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a22b195931c8f14f839544d5c76519e96", null ], + [ "ID_RIBBON_SIMULSETTINGS", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a74900bf0113caf1fb845fe88711e29cd", null ], + [ "ID_RIBBON_SNAPSHOT", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9a828cbb4fbfb1dbdc492ec4c6057e047d", null ], + [ "ID_RIBBON_UNDO", "class_main_frame_base.html#ae7e11ee827b7ec42dbd94f90891d15c9aeb2127b1fd05627a82050c372e0d3164", null ], + [ "MainFrameBase", "class_main_frame_base.html#af5030bc2b188dccb90a48ebfecd37366", null ], + [ "~MainFrameBase", "class_main_frame_base.html#ad37f3f62f657f2e034200d45e855a948", null ], + [ "GetAuiNotebook", "class_main_frame_base.html#a637eec7668f51a13223a394c55a633cc", null ], + [ "GetRibbonBar", "class_main_frame_base.html#ae32925edbbd4ab14b2ce775b733b7c50", null ], + [ "GetStatusBar", "class_main_frame_base.html#aa142c5d3d679147e0d63f00e1d2ca2e1", null ], + [ "NotebookPageClosed", "class_main_frame_base.html#a98499bbee4f7e956a801bbdc64da44d4", null ], + [ "NotebookPageClosing", "class_main_frame_base.html#a1d6d70e15d0f989976e455a64f2566fc", null ], + [ "OnAboutClick", "class_main_frame_base.html#ace56e2062582f17fc3c971405bd59337", null ], + [ "OnAddElementDropdown", "class_main_frame_base.html#a0c5ddd0a8c40a6365aafcd177ce2e30d", null ], + [ "OnChartsClick", "class_main_frame_base.html#ad9b953037729ab0529f9dc5338729315", null ], + [ "OnCloseClick", "class_main_frame_base.html#ac35167f59ba693d78eb899f2edd11d86", null ], + [ "OnCopyClick", "class_main_frame_base.html#aab2e491a8e460ef817f89c2fda8969d4", null ], + [ "OnDataReportClick", "class_main_frame_base.html#a1c033d9812ffc0c9bd01b5f005e7ffb3", null ], + [ "OnDeleteClick", "class_main_frame_base.html#a1b9aeee7c4b805c99662637def269711", null ], + [ "OnDisableSolutionClick", "class_main_frame_base.html#a8ee60616644d83057b7d064045a21b3a", null ], + [ "OnDragClick", "class_main_frame_base.html#ae279f9d64fb6bcf671f565a2e71b2e94", null ], + [ "OnEnableSolutionClick", "class_main_frame_base.html#a80b0b22053a0a0e3baad864237d32654", null ], + [ "OnExitClick", "class_main_frame_base.html#ad054e4149f42d383bc1c402f6a54501c", null ], + [ "OnFaultClick", "class_main_frame_base.html#a7ac299975c041187b3be925d8423ee55", null ], + [ "OnFitClick", "class_main_frame_base.html#a7204ca3854b562f5df4b8735b2a16f9c", null ], + [ "OnGeneralSettingsClick", "class_main_frame_base.html#aa797493c5fec22bd6c4c01a145956df2", null ], + [ "OnMoveClick", "class_main_frame_base.html#a3457f936ba83822397c8d4f4a84df5fa", null ], + [ "OnNewClick", "class_main_frame_base.html#abec097ede52d8293f39a18d362b02ae0", null ], + [ "OnOpenClick", "class_main_frame_base.html#a26e1b02a7ea70579c380bdd6c4dc31a7", null ], + [ "OnPasteClick", "class_main_frame_base.html#a4866f5f2dfda1997d65b71c4462410ba", null ], + [ "OnPowerFlowClick", "class_main_frame_base.html#a736257ebafdffd5b249c7b4e50fab619", null ], + [ "OnPSPGuideClick", "class_main_frame_base.html#ae5b3009fc106d75e157836a6641f63a1", null ], + [ "OnRedoClick", "class_main_frame_base.html#a997c8c6b5a5bf8f8272aa7c3def76b24", null ], + [ "OnResetVoltagesClick", "class_main_frame_base.html#ae5e2dafad6a4f61d11a33ec190cef57c", null ], + [ "OnRotClockClick", "class_main_frame_base.html#a1a265795b31bd7441a171e1573c9d380", null ], + [ "OnRotCounterClockClick", "class_main_frame_base.html#a40a0e78731b78265becded185c5a275e", null ], + [ "OnRunStabilityClick", "class_main_frame_base.html#a8d11fbafd4b593c96595f6f72e8dbe3c", null ], + [ "OnSaveAsClick", "class_main_frame_base.html#a55524b4e3cbaf7250798156f902b2e99", null ], + [ "OnSaveClick", "class_main_frame_base.html#a6a612fb2db72258c900b81c81de60941", null ], + [ "OnSCPowerClick", "class_main_frame_base.html#a10b1f32d30bd2fe0ce3544bea85558fa", null ], + [ "OnSimulationSettingsClick", "class_main_frame_base.html#a62c676a2ecb466e508bc00f27dcc3bf2", null ], + [ "OnSnapshotClick", "class_main_frame_base.html#a916973a33e034aa089f3fc3eaccb2b0f", null ], + [ "OnUndoClick", "class_main_frame_base.html#ab7bf6daa1451eb32101dc414b0e69a0a", null ], + [ "m_auiNotebook", "class_main_frame_base.html#a40afd7ce469ac56b7bcb2a348455016a", null ], + [ "m_ribbonBar", "class_main_frame_base.html#aea62e96627cad518bdcea6002f4827a1", null ], + [ "m_ribbonButtonBarCircuit", "class_main_frame_base.html#ac57d27795bc713ac686f9e87e6d98387", null ], + [ "m_ribbonButtonBarClipboard", "class_main_frame_base.html#a92a63880d952773d06a513980831eee1", null ], + [ "m_ribbonButtonBarContinuous", "class_main_frame_base.html#aa3055bf5e73ba3ef53428ec5a97d727b", null ], + [ "m_ribbonButtonBarCProject", "class_main_frame_base.html#a81f31e1f089b59ad4e6c996d4f45294e", null ], + [ "m_ribbonButtonBarHelp", "class_main_frame_base.html#a869092abc9913bb995eb36ec69db0405", null ], + [ "m_ribbonButtonBarProjects", "class_main_frame_base.html#a6dec28080c2aa3ac073eec161ed833d6", null ], + [ "m_ribbonButtonBarReports", "class_main_frame_base.html#a5c97dfc2c76cbbcb40fb6dac657586e2", null ], + [ "m_ribbonButtonBarSimulations", "class_main_frame_base.html#a23338767c35eb467b193b627202e12c9", null ], + [ "m_ribbonPageFile", "class_main_frame_base.html#aac3e83244b862fe153b33e9d5622b98b", null ], + [ "m_ribbonPageSimulation", "class_main_frame_base.html#a352ec58f623a1a85f1d5316b6cb9710b", null ], + [ "m_ribbonPageTools", "class_main_frame_base.html#a15ea9168f20c0dbe5aa47bb32c7a87a6", null ], + [ "m_ribbonPanelCircuit", "class_main_frame_base.html#a2ecc2370aadbece166b094af17f5dcf8", null ], + [ "m_ribbonPanelClipboard", "class_main_frame_base.html#a9aebadcb48bb76c12718c6b6dc6b6eb5", null ], + [ "m_ribbonPanelContinuous", "class_main_frame_base.html#a70cc8f142845c4f7042119f3f7ed7307", null ], + [ "m_ribbonPanelCProject", "class_main_frame_base.html#a7f28bf5e906cb1258bac365d4f92cd0b", null ], + [ "m_ribbonPanelHelp", "class_main_frame_base.html#aa7749e41daf7e49439364126b631b234", null ], + [ "m_ribbonPanelProjects", "class_main_frame_base.html#af1e52e93085b8b51e2a4d4f3bf882f91", null ], + [ "m_ribbonPanelReports", "class_main_frame_base.html#aa0c7c14ec4183086cf42fe19af0bb2eb", null ], + [ "m_ribbonPanelSimulations", "class_main_frame_base.html#aea7b22f0aacbc7a2da7788eb2f1aef5c", null ], + [ "m_statusBar", "class_main_frame_base.html#a4e8d29366f393bd6e7a5eb748a831576", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_multiplier-members.html b/docs/doxygen/html/class_multiplier-members.html index 30c898c..f175e78 100644 --- a/docs/doxygen/html/class_multiplier-members.html +++ b/docs/doxygen/html/class_multiplier-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Multiplier Member List
@@ -183,11 +198,14 @@ $(function() { ~Element()Elementvirtual ~Multiplier() (defined in Multiplier)Multiplier
+ - + diff --git a/docs/doxygen/html/class_multiplier.html b/docs/doxygen/html/class_multiplier.html index 5930a6d..b1ced57 100644 --- a/docs/doxygen/html/class_multiplier.html +++ b/docs/doxygen/html/class_multiplier.html @@ -5,10 +5,17 @@ -PSP-UFU: Multiplier Class Reference +Multiplier Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -431,7 +446,10 @@ bool m_online = trueOpenGLColour m_selectionColour   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 8 of file Multiplier.h.

+

Member Function Documentation

◆ Contains()

@@ -466,6 +484,8 @@ bool m_online = trueImplements Element.

+

Definition at line 15 of file Multiplier.h.

+
@@ -513,6 +533,8 @@ bool m_online = trueReimplemented from Element.

+

Definition at line 20 of file Multiplier.cpp.

+ @@ -543,6 +565,8 @@ bool m_online = trueReimplemented from Element.

+

Definition at line 119 of file Multiplier.cpp.

+ @@ -579,6 +603,8 @@ bool m_online = trueImplements Element.

+

Definition at line 16 of file Multiplier.h.

+ @@ -615,6 +641,8 @@ bool m_online = trueReimplemented from Element.

+

Definition at line 47 of file Multiplier.cpp.

+ @@ -663,18 +691,24 @@ bool m_online = trueReimplemented from Element.

+

Definition at line 17 of file Multiplier.h.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_multiplier.js b/docs/doxygen/html/class_multiplier.js new file mode 100644 index 0000000..2c40c5a --- /dev/null +++ b/docs/doxygen/html/class_multiplier.js @@ -0,0 +1,13 @@ +var class_multiplier = +[ + [ "Multiplier", "class_multiplier.html#a48166896d667216da146a0b25766f867", null ], + [ "~Multiplier", "class_multiplier.html#a3b8da713f480cb1ed6b829f4d5a584d3", null ], + [ "Contains", "class_multiplier.html#acee6216a03b550f3a9cad2bef3963a18", null ], + [ "Draw", "class_multiplier.html#ae854fd981a98aca93b286081cc9c19f3", null ], + [ "GetCopy", "class_multiplier.html#ab487232a96ed3c3f3a7c3628ddaa4c77", null ], + [ "Intersects", "class_multiplier.html#aba53ef763812fbff891cdf0b89c7fcca", null ], + [ "Rotate", "class_multiplier.html#ae01f155ed56925cb87d71a860882a3a1", null ], + [ "ShowForm", "class_multiplier.html#a4fa1206b47c626930db753a70e01680d", null ], + [ "Solve", "class_multiplier.html#a9d6101ab83aa92316efdb4d26b715d4c", null ], + [ "UpdatePoints", "class_multiplier.html#a43398a07b130b819c229e1512066456c", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_node-members.html b/docs/doxygen/html/class_node-members.html index 7fbf4d1..88888c4 100644 --- a/docs/doxygen/html/class_node-members.html +++ b/docs/doxygen/html/class_node-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Node Member List
@@ -102,11 +117,14 @@ $(function() { StartMove(wxPoint2DDouble position) (defined in Node)Node ~Node() (defined in Node)Node
+ - + diff --git a/docs/doxygen/html/class_node.html b/docs/doxygen/html/class_node.html index bc5d78e..8b4f6c1 100644 --- a/docs/doxygen/html/class_node.html +++ b/docs/doxygen/html/class_node.html @@ -5,10 +5,17 @@ -PSP-UFU: Node Class Reference +Node Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -171,16 +186,23 @@ std::vector< wxPoint2DDouble > m_angle = 0.0   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_node.js b/docs/doxygen/html/class_node.js new file mode 100644 index 0000000..21440ac --- /dev/null +++ b/docs/doxygen/html/class_node.js @@ -0,0 +1,37 @@ +var class_node = +[ + [ "NodeType", "class_node.html#aa54866b6c55527f3db0384692db1a467", [ + [ "NODE_IN", "class_node.html#aa54866b6c55527f3db0384692db1a467a03e12ecb1d30362cf8db2acfd355524e", null ], + [ "NODE_OUT", "class_node.html#aa54866b6c55527f3db0384692db1a467ace750a89be1349ea48ab1709b9f16eb3", null ] + ] ], + [ "Node", "class_node.html#ad53d54d6e64ec95fb38abb0bc1838e97", null ], + [ "~Node", "class_node.html#aa0840c3cb5c7159be6d992adecd2097c", null ], + [ "Contains", "class_node.html#abc2868e91a9f97192a7c4766d9e1836c", null ], + [ "GetAngle", "class_node.html#a5aecac68e934f0425754433c58928be4", null ], + [ "GetID", "class_node.html#a087c2fddbbedfc748fbfbb35ad8b235b", null ], + [ "GetInTrianglePts", "class_node.html#aad806f85c0a0ce88935b79e3fdbd5de5", null ], + [ "GetNodeType", "class_node.html#a16217ea768b7bad76285e779bdc819c7", null ], + [ "GetPosition", "class_node.html#af1b095cf7058e5cc55ac01e3f66b41d5", null ], + [ "GetRadius", "class_node.html#a2c403d9d1a5345f617453852570ee41e", null ], + [ "GetRect", "class_node.html#a0a9fcf01abc356e34d686aa753e43b8d", null ], + [ "IsConnected", "class_node.html#af29a33a9c4f59e0916c26185465011c9", null ], + [ "Move", "class_node.html#a2d336510f72a35447d14ad7ebf1b9337", null ], + [ "Rotate", "class_node.html#aa95d9ccb93453d30e738551fd81fc240", null ], + [ "RotateTriPt", "class_node.html#a413f3f8d4f88a485ddc6b22a36b65b05", null ], + [ "SetAngle", "class_node.html#a35613124f5cf2e1234e7e4e3c2fd9df7", null ], + [ "SetConnected", "class_node.html#af932c7753851a444ada3f9f876139cf9", null ], + [ "SetID", "class_node.html#a96057978082b91bc9132714c51aeb209", null ], + [ "SetNodeType", "class_node.html#a00ac0295e2572c4cca473e92860c6f66", null ], + [ "SetPosition", "class_node.html#a79080c9eb76e7cdda04d666746b91797", null ], + [ "SetRect", "class_node.html#a1ff50eb9005f9f689c79c4c9da3c3ec5", null ], + [ "StartMove", "class_node.html#a5c2d5782290cac99aa45b2595e9ddcc4", null ], + [ "m_angle", "class_node.html#aee3f9f6739a14d034b5e26d70e3c2aa8", null ], + [ "m_connected", "class_node.html#a1a41ea6942b8ae52f483dc5766dfdb62", null ], + [ "m_id", "class_node.html#aacc303bdf97ab995e4c2223579ba95cf", null ], + [ "m_movePos", "class_node.html#a4b88a807b818e3e024ed26f15373b51c", null ], + [ "m_moveStartPt", "class_node.html#a912b124cd5e19e2fecc63863b62237c9", null ], + [ "m_nodeType", "class_node.html#a179b73258e92a485a2f52c504fdcd96f", null ], + [ "m_radius", "class_node.html#a6e7e829b82c35c661666c56c1b870d64", null ], + [ "m_rect", "class_node.html#a3838eed7b2674f29c4e0f7211c8adf7e", null ], + [ "m_triPts", "class_node.html#a217298f554aeac4ed89a6d51beba4d8c", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_open_g_l_colour-members.html b/docs/doxygen/html/class_open_g_l_colour-members.html index 3b0a5ef..fb4da46 100644 --- a/docs/doxygen/html/class_open_g_l_colour-members.html +++ b/docs/doxygen/html/class_open_g_l_colour-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
OpenGLColour Member List
@@ -75,11 +90,14 @@ $(function() { SetRGBA(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha)OpenGLColour ~OpenGLColour()OpenGLColourinlinevirtual
+ - + diff --git a/docs/doxygen/html/class_open_g_l_colour.html b/docs/doxygen/html/class_open_g_l_colour.html index 245f748..57a7708 100644 --- a/docs/doxygen/html/class_open_g_l_colour.html +++ b/docs/doxygen/html/class_open_g_l_colour.html @@ -5,10 +5,17 @@ -PSP-UFU: OpenGLColour Class Reference +OpenGLColour Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -101,6 +116,8 @@ GLdouble rgba [4]

Detailed Description

Author
Thales Lima Oliveira
Date
18/01/2017
+ +

Definition at line 48 of file Element.h.

Constructor & Destructor Documentation

◆ OpenGLColour()

@@ -151,6 +168,8 @@ GLdouble rgba [4] +

Definition at line 360 of file Element.cpp.

+

Member Function Documentation

@@ -180,6 +199,8 @@ GLdouble rgba [4]

Get colour in RGBA.

Returns
RGBA colour.
+

Definition at line 83 of file Element.h.

+ @@ -231,18 +252,24 @@ GLdouble rgba [4] +

Definition at line 350 of file Element.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_open_g_l_colour.js b/docs/doxygen/html/class_open_g_l_colour.js new file mode 100644 index 0000000..88456f3 --- /dev/null +++ b/docs/doxygen/html/class_open_g_l_colour.js @@ -0,0 +1,9 @@ +var class_open_g_l_colour = +[ + [ "OpenGLColour", "class_open_g_l_colour.html#acc6fa05591fe3881c4d3ffee1bd5b0ad", null ], + [ "OpenGLColour", "class_open_g_l_colour.html#a273751fe4b9efccc28565ec5be7d7967", null ], + [ "~OpenGLColour", "class_open_g_l_colour.html#a4b9a726773b4c82935f15add648ed2a0", null ], + [ "GetRGBA", "class_open_g_l_colour.html#a12119e58ae1bc7d6888224252695c066", null ], + [ "SetRGBA", "class_open_g_l_colour.html#a0193e7fb5730b0e543ba826201568f94", null ], + [ "rgba", "class_open_g_l_colour.html#a8a1d6bdf3bc1b26f040e7a3b45dd85e7", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_plot_data-members.html b/docs/doxygen/html/class_plot_data-members.html index e20c2a6..a13ebb6 100644 --- a/docs/doxygen/html/class_plot_data-members.html +++ b/docs/doxygen/html/class_plot_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
PlotData Member List
@@ -92,11 +107,14 @@ $(function() { SetValues(const std::vector< double > &values) (defined in PlotData)PlotDatainline ~PlotData() (defined in PlotData)PlotDatainline
+ - + diff --git a/docs/doxygen/html/class_plot_data.html b/docs/doxygen/html/class_plot_data.html index 8685455..a219f11 100644 --- a/docs/doxygen/html/class_plot_data.html +++ b/docs/doxygen/html/class_plot_data.html @@ -5,10 +5,17 @@ -PSP-UFU: PlotData Class Reference +PlotData Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -147,15 +162,22 @@ wxPenStyle m_penTypem_axis   -
The documentation for this class was generated from the following file:
+
- + diff --git a/docs/doxygen/html/class_plot_data.js b/docs/doxygen/html/class_plot_data.js new file mode 100644 index 0000000..e906403 --- /dev/null +++ b/docs/doxygen/html/class_plot_data.js @@ -0,0 +1,26 @@ +var class_plot_data = +[ + [ "PlotData", "class_plot_data.html#ae47a004654643cfc9b92adc71a4cf329", null ], + [ "~PlotData", "class_plot_data.html#a1cb94d65bba22a360b944ee7f984deb0", null ], + [ "GetAxis", "class_plot_data.html#a350f55e0284bf76b29d3407ab4a27e03", null ], + [ "GetColour", "class_plot_data.html#a2676d2127ec018ca65ca050c6a3e9283", null ], + [ "GetName", "class_plot_data.html#a0f44d78236b2f63c2e9a91714ab6fb93", null ], + [ "GetPenType", "class_plot_data.html#a300d6834ed32b84bbfeaff1eb2f3110a", null ], + [ "GetThick", "class_plot_data.html#adcedf9ea7913016c4e873fb34d1bbaeb", null ], + [ "GetValues", "class_plot_data.html#a4140a06481acd5a30bc93c4596bde12f", null ], + [ "IsPlot", "class_plot_data.html#a4e1477bd4f881e125777ecb957e88f67", null ], + [ "SetAxis", "class_plot_data.html#a22ea156cd9e5928433f3942441338615", null ], + [ "SetColour", "class_plot_data.html#a467c771ab18f6c2f8d9538ddbf54b894", null ], + [ "SetName", "class_plot_data.html#aaa111316ee264172a593f37a44535bce", null ], + [ "SetPenType", "class_plot_data.html#a2aa0424c9b6cad400344f36044150d5f", null ], + [ "SetPlot", "class_plot_data.html#a06057c547fd67d07c198e97138cd30cc", null ], + [ "SetThick", "class_plot_data.html#af7cb7387a3902a0d11b134f3a241f538", null ], + [ "SetValues", "class_plot_data.html#aaef76dbf3683e48fbf185ac98d42c55e", null ], + [ "m_axis", "class_plot_data.html#a19d3ba5b243c0b3a0ae29deb853fa468", null ], + [ "m_colour", "class_plot_data.html#a56d96ac4098c3c484fcc72df17272d3c", null ], + [ "m_name", "class_plot_data.html#a61f92a5008b507029b47baabfda9da4f", null ], + [ "m_penType", "class_plot_data.html#ac5fab80f751e5c8220e62b1a8639b2ba", null ], + [ "m_plot", "class_plot_data.html#aed63b37dfb4b7cc33a52cd77f64be040", null ], + [ "m_thick", "class_plot_data.html#a9435886e5e2c795e014c39866c01bb0f", null ], + [ "m_values", "class_plot_data.html#acc00d1c404fff949e1f01db66eaa3a64", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_power_element-members.html b/docs/doxygen/html/class_power_element-members.html index 0425f25..0149971 100644 --- a/docs/doxygen/html/class_power_element-members.html +++ b/docs/doxygen/html/class_power_element-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
PowerElement Member List
@@ -193,11 +208,14 @@ $(function() { ~Element()Elementvirtual ~PowerElement()PowerElement
+ - + diff --git a/docs/doxygen/html/class_power_element.html b/docs/doxygen/html/class_power_element.html index 0729e00..5493277 100644 --- a/docs/doxygen/html/class_power_element.html +++ b/docs/doxygen/html/class_power_element.html @@ -5,10 +5,17 @@ -PSP-UFU: PowerElement Class Reference +PowerElement Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -490,6 +505,8 @@ Additional Inherited Members

Detailed Description

Author
Thales Lima Oliveira
Date
18/01/2017
+ +

Definition at line 100 of file PowerElement.h.

Member Function Documentation

◆ CalculatePowerFlowPts()

@@ -523,6 +540,8 @@ Additional Inherited Members +

Definition at line 93 of file PowerElement.cpp.

+
@@ -560,6 +579,8 @@ Additional Inherited Members

Reimplemented in SyncGenerator, and Bus.

+

Definition at line 181 of file PowerElement.h.

+ @@ -588,6 +609,8 @@ Additional Inherited Members

Return the direction of the power flow.

Returns
Power flow direction.
+

Definition at line 175 of file PowerElement.h.

+ @@ -616,6 +639,8 @@ Additional Inherited Members

Returns the switching data of the element.

Returns
Element switching data.
+

Definition at line 165 of file PowerElement.h.

+ @@ -668,6 +693,8 @@ Additional Inherited Members +

Definition at line 22 of file PowerElement.cpp.

+ @@ -696,6 +723,8 @@ Additional Inherited Members

Check if the power element have dynamic event.

Returns
true if the element have dynamic an event, false otherwise.
+

Definition at line 186 of file PowerElement.h.

+ @@ -730,6 +759,8 @@ Additional Inherited Members +

Definition at line 191 of file PowerElement.h.

+ @@ -777,6 +808,8 @@ Additional Inherited Members

Reimplemented in SyncGenerator, SyncMotor, Transformer, and Line.

+

Definition at line 18 of file PowerElement.cpp.

+ @@ -813,6 +846,8 @@ Additional Inherited Members

Reimplemented in Transformer, Line, and Machines.

+

Definition at line 170 of file PowerElement.h.

+ @@ -847,6 +882,8 @@ Additional Inherited Members +

Definition at line 160 of file PowerElement.h.

+ @@ -881,18 +918,24 @@ Additional Inherited Members +

Definition at line 46 of file PowerElement.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_power_element.js b/docs/doxygen/html/class_power_element.js new file mode 100644 index 0000000..09a1f3c --- /dev/null +++ b/docs/doxygen/html/class_power_element.js @@ -0,0 +1,31 @@ +var class_power_element = +[ + [ "PowerElement", "class_power_element.html#a382cdc0897802eb0a89692483fa7043e", null ], + [ "~PowerElement", "class_power_element.html#a39be7c8e3bdb96b16c26ea7f7d6e6cbf", null ], + [ "CalculatePowerFlowPts", "class_power_element.html#a6c656ef223d36e96b19b0a9ec2115e9e", null ], + [ "DrawPowerFlowPts", "class_power_element.html#a8d6e92147c46501f592f67accc1af866", null ], + [ "DrawSwitches", "class_power_element.html#ab5799bdf1bff481670285d763572453c", null ], + [ "GetPlotData", "class_power_element.html#acadf6712b430f9fadfbd7015903eaeaf", null ], + [ "GetPowerFlowDirection", "class_power_element.html#a8ffa0f79241bd21ad5dd501d26fed933", null ], + [ "GetSwitchingData", "class_power_element.html#ab78269f9b66fbf90ae09050083e9dbe1", null ], + [ "GetSwitchPoint", "class_power_element.html#aef6392c211caf557bdac287b174a1ea8", null ], + [ "GetValueFromUnit", "class_power_element.html#ad57d3eb59a91d1ae45c5416f7bc5d896", null ], + [ "HaveDynamicEvent", "class_power_element.html#aefa43fe646e90428b1ed9884a7e499ae", null ], + [ "SetDynamicEvent", "class_power_element.html#a4dbd26d0a7987c30729efffa860debc4", null ], + [ "SetNominalVoltage", "class_power_element.html#a0730506d0417089d69f7ce64b05daed4", null ], + [ "SetPowerFlowDirection", "class_power_element.html#a2ee71f9eb90beadf5439ce9f70469b49", null ], + [ "SetSwitchingData", "class_power_element.html#a08d2e84b91ab7443b20a9d7eb6ab441f", null ], + [ "SwitchesContains", "class_power_element.html#a789105cc7c170330e7daf2a0453fde6d", null ], + [ "UpdateSwitches", "class_power_element.html#abd2cee52270374e17951782bdb571dce", null ], + [ "m_busColour", "class_power_element.html#a25e364f29ee05317b9718fbf41ebfdea", null ], + [ "m_closedSwitchColour", "class_power_element.html#ad0597483b0f8b1274bf9cf2d1b451d4f", null ], + [ "m_dynamicEventColour", "class_power_element.html#af5340699c1cc77a74c777dfa4bd05d42", null ], + [ "m_dynEvent", "class_power_element.html#a9ee0e6a106d2fd5b9216ef53a4618214", null ], + [ "m_offlineElementColour", "class_power_element.html#a1ff875a022731551b9fa54ecebff46db", null ], + [ "m_onlineElementColour", "class_power_element.html#a83a8c2e13f6c05866ed523669342b455", null ], + [ "m_openedSwitchColour", "class_power_element.html#a5b38b191eff7c7b246363d73d72f2252", null ], + [ "m_pfDirection", "class_power_element.html#a71d355326194fcfdf3076efebb572e53", null ], + [ "m_powerFlowArrow", "class_power_element.html#aa1deb0fcbba1420e3885402521ce841a", null ], + [ "m_powerFlowArrowColour", "class_power_element.html#a7899f3a54a58d83a60192e08eaca2511", null ], + [ "m_swData", "class_power_element.html#a55896a8111d0fea6e219330e07035751", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_power_flow-members.html b/docs/doxygen/html/class_power_flow-members.html index 1bbd2b4..29deef2 100644 --- a/docs/doxygen/html/class_power_flow-members.html +++ b/docs/doxygen/html/class_power_flow-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
PowerFlow Member List
@@ -108,11 +123,14 @@ $(function() { ~ElectricCalculation()ElectricCalculation ~PowerFlow() (defined in PowerFlow)PowerFlow
+ - + diff --git a/docs/doxygen/html/class_power_flow.html b/docs/doxygen/html/class_power_flow.html index 1bd4c05..422ad6c 100644 --- a/docs/doxygen/html/class_power_flow.html +++ b/docs/doxygen/html/class_power_flow.html @@ -5,10 +5,17 @@ -PSP-UFU: PowerFlow Class Reference +PowerFlow Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -200,16 +215,23 @@ std::vector< SyncMotor * >& std::vector< Transformer * > m_transformerList   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 9 of file PowerFlow.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_power_flow.js b/docs/doxygen/html/class_power_flow.js new file mode 100644 index 0000000..db4ee70 --- /dev/null +++ b/docs/doxygen/html/class_power_flow.js @@ -0,0 +1,10 @@ +var class_power_flow = +[ + [ "PowerFlow", "class_power_flow.html#ac68de21f8e5d11a1fff0d13851d59e95", null ], + [ "PowerFlow", "class_power_flow.html#a3afa2dd9a9c2e5faa773a716876c6633", null ], + [ "~PowerFlow", "class_power_flow.html#a345908fba71da5269f5a51458ee962d1", null ], + [ "GetErrorMessage", "class_power_flow.html#a7e2c69de65d850028ca662ac2c2c171e", null ], + [ "RunGaussSeidel", "class_power_flow.html#ad94edaa7e25a8f01069edcd31fdd3e29", null ], + [ "m_errorMsg", "class_power_flow.html#a08aba82a7ca8ff2d48d7daedfb803691", null ], + [ "m_yBus", "class_power_flow.html#a2b1bad7fa0291ee0befad83f3359c7f3", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_properties_data-members.html b/docs/doxygen/html/class_properties_data-members.html index 46be15d..d098a73 100644 --- a/docs/doxygen/html/class_properties_data-members.html +++ b/docs/doxygen/html/class_properties_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
PropertiesData Member List
@@ -77,11 +92,14 @@ $(function() { SetSimulationPropertiesData(SimulationData simulationData) (defined in PropertiesData)PropertiesDatainline ~PropertiesData() (defined in PropertiesData)PropertiesData
+ - + diff --git a/docs/doxygen/html/class_properties_data.html b/docs/doxygen/html/class_properties_data.html index 909168d..a4b4075 100644 --- a/docs/doxygen/html/class_properties_data.html +++ b/docs/doxygen/html/class_properties_data.html @@ -5,10 +5,17 @@ -PSP-UFU: PropertiesData Class Reference +PropertiesData Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -94,16 +109,23 @@ Protected Attributes GeneralData m_genData   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_properties_data.js b/docs/doxygen/html/class_properties_data.js new file mode 100644 index 0000000..92507d0 --- /dev/null +++ b/docs/doxygen/html/class_properties_data.js @@ -0,0 +1,11 @@ +var class_properties_data = +[ + [ "PropertiesData", "class_properties_data.html#ac5b9a703313321402feb0b630137554a", null ], + [ "~PropertiesData", "class_properties_data.html#a4f13c5831683463f7576e25ee56a6c24", null ], + [ "GetGeneralPropertiesData", "class_properties_data.html#a142b908bfffb560a46ace2b96a4a78ba", null ], + [ "GetSimulationPropertiesData", "class_properties_data.html#a41b8cfab1faf9b50ef5b6c1667d24df0", null ], + [ "SetGeneralPropertiesData", "class_properties_data.html#ad3d2eb6ea7989c6759e9ea161e108529", null ], + [ "SetSimulationPropertiesData", "class_properties_data.html#a1ba7f1de004c6a5324dbb34c61416efe", null ], + [ "m_genData", "class_properties_data.html#a9f7f7faa69ce057afa6b59f722c7ccab", null ], + [ "m_simulData", "class_properties_data.html#a3fc47aa274ffefa4d4f254454998d240", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_rate_limiter-members.html b/docs/doxygen/html/class_rate_limiter-members.html index fd9fadd..83773f4 100644 --- a/docs/doxygen/html/class_rate_limiter-members.html +++ b/docs/doxygen/html/class_rate_limiter-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
RateLimiter Member List
@@ -189,11 +204,14 @@ $(function() { ~Element()Elementvirtual ~RateLimiter() (defined in RateLimiter)RateLimiter
+ - + diff --git a/docs/doxygen/html/class_rate_limiter.html b/docs/doxygen/html/class_rate_limiter.html index 96edd33..b88a0c8 100644 --- a/docs/doxygen/html/class_rate_limiter.html +++ b/docs/doxygen/html/class_rate_limiter.html @@ -5,10 +5,17 @@ -PSP-UFU: RateLimiter Class Reference +RateLimiter Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -453,7 +468,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 8 of file RateLimiter.h.

+

Member Function Documentation

◆ Contains()

@@ -488,6 +506,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 15 of file RateLimiter.h.

+
@@ -535,6 +555,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 17 of file RateLimiter.cpp.

+ @@ -565,6 +587,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 116 of file RateLimiter.cpp.

+ @@ -601,6 +625,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 16 of file RateLimiter.h.

+ @@ -637,6 +663,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 60 of file RateLimiter.cpp.

+ @@ -685,18 +713,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 49 of file RateLimiter.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_rate_limiter.js b/docs/doxygen/html/class_rate_limiter.js new file mode 100644 index 0000000..e41ec04 --- /dev/null +++ b/docs/doxygen/html/class_rate_limiter.js @@ -0,0 +1,19 @@ +var class_rate_limiter = +[ + [ "RateLimiter", "class_rate_limiter.html#a1a4a1c1d6902a09996f3720c11657541", null ], + [ "~RateLimiter", "class_rate_limiter.html#a30bbe6f431699d625ccfeb56c344a8a7", null ], + [ "Contains", "class_rate_limiter.html#addf0eef395781b8584063a9061be59dc", null ], + [ "Draw", "class_rate_limiter.html#a6afc319e3a165776b8a429b9bbe38580", null ], + [ "GetCopy", "class_rate_limiter.html#a4f1152238b97fcf76a0bee258e971823", null ], + [ "GetLowLimit", "class_rate_limiter.html#a6a7584c54dec6b657fe82c86ba4050c7", null ], + [ "GetUpLimit", "class_rate_limiter.html#a4fad133132702b282606ba3c11957c4e", null ], + [ "Intersects", "class_rate_limiter.html#a7c1ce7440e82613b455054dd8447f147", null ], + [ "Rotate", "class_rate_limiter.html#a3eb4d933b1d069808617306c78835f3e", null ], + [ "SetLowLimit", "class_rate_limiter.html#ac9e938191a9cb73f2062424bb7ef3d6a", null ], + [ "SetUpLimit", "class_rate_limiter.html#a9b33e6e0ff31d47e5a71ad667c394b3f", null ], + [ "ShowForm", "class_rate_limiter.html#a7d16df402b56e0025bab076aa071be60", null ], + [ "Solve", "class_rate_limiter.html#a2697e0f56b574739651fa2126b315e29", null ], + [ "UpdatePoints", "class_rate_limiter.html#aab8ebea2ddf2925636d57f15c29a6f9f", null ], + [ "m_lowLimit", "class_rate_limiter.html#af0f5379bd223db43561e02fc554af404", null ], + [ "m_upLimit", "class_rate_limiter.html#af879e6593015575abe9dc1751eee89a4", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_rate_limiter_form-members.html b/docs/doxygen/html/class_rate_limiter_form-members.html index 3a40bed..25606d8 100644 --- a/docs/doxygen/html/class_rate_limiter_form-members.html +++ b/docs/doxygen/html/class_rate_limiter_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
RateLimiterForm Member List
@@ -94,11 +109,14 @@ $(function() { ~RateLimiterForm() (defined in RateLimiterForm)RateLimiterFormvirtual ~RateLimiterFormBase() (defined in RateLimiterFormBase)RateLimiterFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_rate_limiter_form.html b/docs/doxygen/html/class_rate_limiter_form.html index e95b2bb..d148017 100644 --- a/docs/doxygen/html/class_rate_limiter_form.html +++ b/docs/doxygen/html/class_rate_limiter_form.html @@ -5,10 +5,17 @@ -PSP-UFU: RateLimiterForm Class Reference +RateLimiterForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -160,16 +175,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_rate_limiter_form.js b/docs/doxygen/html/class_rate_limiter_form.js new file mode 100644 index 0000000..166f9e5 --- /dev/null +++ b/docs/doxygen/html/class_rate_limiter_form.js @@ -0,0 +1,10 @@ +var class_rate_limiter_form = +[ + [ "RateLimiterForm", "class_rate_limiter_form.html#a113482f91d98929e9a886724943c54b5", null ], + [ "~RateLimiterForm", "class_rate_limiter_form.html#aa64d34ca1a0d1ead7d63e7cefa9d1cf3", null ], + [ "OnCancelButtonClick", "class_rate_limiter_form.html#af80f6d8f785e66546b3be7e514655e25", null ], + [ "OnOKButtonClick", "class_rate_limiter_form.html#ace1a05e0ae6160a69a2a9faa6b7a3dc3", null ], + [ "ValidateData", "class_rate_limiter_form.html#a2890a4b61d498bd524a714de43b3e399", null ], + [ "m_parent", "class_rate_limiter_form.html#af19d40740af9ebb547036423ac091b28", null ], + [ "m_rateLimiter", "class_rate_limiter_form.html#a32b0a27d6ec94f94f8f8c1e40c270877", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_rate_limiter_form_base-members.html b/docs/doxygen/html/class_rate_limiter_form_base-members.html index 2aa7a68..cdab6cf 100644 --- a/docs/doxygen/html/class_rate_limiter_form_base-members.html +++ b/docs/doxygen/html/class_rate_limiter_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
RateLimiterFormBase Member List
@@ -89,11 +104,14 @@ $(function() { RateLimiterFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Rate limiter"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in RateLimiterFormBase)RateLimiterFormBase ~RateLimiterFormBase() (defined in RateLimiterFormBase)RateLimiterFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_rate_limiter_form_base.html b/docs/doxygen/html/class_rate_limiter_form_base.html index 97375d7..7e76817 100644 --- a/docs/doxygen/html/class_rate_limiter_form_base.html +++ b/docs/doxygen/html/class_rate_limiter_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: RateLimiterFormBase Class Reference +RateLimiterFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -146,16 +161,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_rate_limiter_form_base.js b/docs/doxygen/html/class_rate_limiter_form_base.js new file mode 100644 index 0000000..7bb9535 --- /dev/null +++ b/docs/doxygen/html/class_rate_limiter_form_base.js @@ -0,0 +1,23 @@ +var class_rate_limiter_form_base = +[ + [ "RateLimiterFormBase", "class_rate_limiter_form_base.html#a8b490cb503cff3eeb134d048fb8cda49", null ], + [ "~RateLimiterFormBase", "class_rate_limiter_form_base.html#ab706c56b5a717d1166e26fc21092c635", null ], + [ "GetButtonCancel", "class_rate_limiter_form_base.html#a8e1cad8c05a5dfd8f2e8ad5033550eec", null ], + [ "GetButtonOK", "class_rate_limiter_form_base.html#a4782970d92f3d1172d9fef69bd7da828", null ], + [ "GetNotebook", "class_rate_limiter_form_base.html#a1ef5a9ffff3aa3bb3ca98288520facf1", null ], + [ "GetPanelGeneral", "class_rate_limiter_form_base.html#a9286ba86011958dcf76efca12f3b525b", null ], + [ "GetStaticTextLowLimit", "class_rate_limiter_form_base.html#a659b1c1ea9cc42e3aba7f22765db58c4", null ], + [ "GetStaticTextUpLimiter", "class_rate_limiter_form_base.html#a68c7b3b7b47433c93bb157434857ceeb", null ], + [ "GetTextCtrlLowLimit", "class_rate_limiter_form_base.html#a8794f8fbf98804519f8c817ddf24dd68", null ], + [ "GetTextCtrlUpLimit", "class_rate_limiter_form_base.html#ad67689b33322dea99d5e62ca2e5997d9", null ], + [ "OnCancelButtonClick", "class_rate_limiter_form_base.html#ab7aa4f1a2fa83e112aa35a4406d04f56", null ], + [ "OnOKButtonClick", "class_rate_limiter_form_base.html#a97c7d55b3958ab59d17bae4490d501a9", null ], + [ "m_ButtonCancel", "class_rate_limiter_form_base.html#a55be917c732dec21f8cb29809dff2203", null ], + [ "m_buttonOK", "class_rate_limiter_form_base.html#a81af498ed88dc833c7c1d81a6902cbbc", null ], + [ "m_notebook", "class_rate_limiter_form_base.html#ad415e2f26fa0b27ddfb2fe463c14d061", null ], + [ "m_panelGeneral", "class_rate_limiter_form_base.html#aeeaf9309158d7c4b3c3c4226f71bbed4", null ], + [ "m_staticTextLowLimit", "class_rate_limiter_form_base.html#a7006e306c3f3dedca709ce5903a2757d", null ], + [ "m_staticTextUpLimiter", "class_rate_limiter_form_base.html#a2070bac82fe8f04e0bc47bbac80e3bc9", null ], + [ "m_textCtrlLowLimit", "class_rate_limiter_form_base.html#a92bda3c20edddddda015624782954961", null ], + [ "m_textCtrlUpLimit", "class_rate_limiter_form_base.html#a093a5e3ae150250132c175a8570b4d76", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_reactive_shunt_element_form-members.html b/docs/doxygen/html/class_reactive_shunt_element_form-members.html index 85edd44..b7622c6 100644 --- a/docs/doxygen/html/class_reactive_shunt_element_form-members.html +++ b/docs/doxygen/html/class_reactive_shunt_element_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ReactiveShuntElementForm Member List
@@ -101,11 +116,14 @@ $(function() { ~ReactiveShuntElementForm() (defined in ReactiveShuntElementForm)ReactiveShuntElementFormvirtual ~ReactiveShuntElementFormBase() (defined in ReactiveShuntElementFormBase)ReactiveShuntElementFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_reactive_shunt_element_form.html b/docs/doxygen/html/class_reactive_shunt_element_form.html index c5c3ada..fb38ef7 100644 --- a/docs/doxygen/html/class_reactive_shunt_element_form.html +++ b/docs/doxygen/html/class_reactive_shunt_element_form.html @@ -5,10 +5,17 @@ -PSP-UFU: ReactiveShuntElementForm Class Reference +ReactiveShuntElementForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -181,16 +196,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_reactive_shunt_element_form.js b/docs/doxygen/html/class_reactive_shunt_element_form.js new file mode 100644 index 0000000..392235c --- /dev/null +++ b/docs/doxygen/html/class_reactive_shunt_element_form.js @@ -0,0 +1,13 @@ +var class_reactive_shunt_element_form = +[ + [ "ReactiveShuntElementForm", "class_reactive_shunt_element_form.html#a32014c849a9abdc89f8d80665f7f3425", null ], + [ "ReactiveShuntElementForm", "class_reactive_shunt_element_form.html#a497e42c930f99b86fe56fae7bccea6a5", null ], + [ "~ReactiveShuntElementForm", "class_reactive_shunt_element_form.html#a31d1e4400f75b072aab7a387938940f5", null ], + [ "OnCancelButtonClick", "class_reactive_shunt_element_form.html#a6480df895b328ef6a85e243277b80237", null ], + [ "OnOKButtonClick", "class_reactive_shunt_element_form.html#a6aa812272efbc5a350e8ab9298af76cd", null ], + [ "OnStabilityButtonClick", "class_reactive_shunt_element_form.html#ae5509097e2960939553d420d0ec1a227", null ], + [ "ValidateData", "class_reactive_shunt_element_form.html#ac96e00fc9edacae51525b0672f8fea4f", null ], + [ "m_capacitor", "class_reactive_shunt_element_form.html#a82d70a38623e99ad43cae70007e6013e", null ], + [ "m_inductor", "class_reactive_shunt_element_form.html#ae348af4a562032c227eb407e700a2f23", null ], + [ "m_parent", "class_reactive_shunt_element_form.html#a02e49f07178cc0b7deed33c5fc0f84ae", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_reactive_shunt_element_form_base-members.html b/docs/doxygen/html/class_reactive_shunt_element_form_base-members.html index 26f71aa..28de3c7 100644 --- a/docs/doxygen/html/class_reactive_shunt_element_form_base-members.html +++ b/docs/doxygen/html/class_reactive_shunt_element_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ReactiveShuntElementFormBase Member List
@@ -94,11 +109,14 @@ $(function() { ReactiveShuntElementFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Reactive shunt element"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in ReactiveShuntElementFormBase)ReactiveShuntElementFormBase ~ReactiveShuntElementFormBase() (defined in ReactiveShuntElementFormBase)ReactiveShuntElementFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_reactive_shunt_element_form_base.html b/docs/doxygen/html/class_reactive_shunt_element_form_base.html index 50f9c10..1726028 100644 --- a/docs/doxygen/html/class_reactive_shunt_element_form_base.html +++ b/docs/doxygen/html/class_reactive_shunt_element_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: ReactiveShuntElementFormBase Class Reference +ReactiveShuntElementFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -161,16 +176,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_reactive_shunt_element_form_base.js b/docs/doxygen/html/class_reactive_shunt_element_form_base.js new file mode 100644 index 0000000..a06024d --- /dev/null +++ b/docs/doxygen/html/class_reactive_shunt_element_form_base.js @@ -0,0 +1,28 @@ +var class_reactive_shunt_element_form_base = +[ + [ "ReactiveShuntElementFormBase", "class_reactive_shunt_element_form_base.html#a93655501f77f68824420ef640ade219f", null ], + [ "~ReactiveShuntElementFormBase", "class_reactive_shunt_element_form_base.html#a783c3c5b73e8386a96c51e22d0730d78", null ], + [ "GetButtonCancel", "class_reactive_shunt_element_form_base.html#a39f95da41f55cae7829b9bd777dfef4d", null ], + [ "GetButtonOK", "class_reactive_shunt_element_form_base.html#ad927d95189e470a8f9268df8e16f81df", null ], + [ "GetButtonStabButton", "class_reactive_shunt_element_form_base.html#a3a61222247b8bf0d0dc0a74f002f9f54", null ], + [ "GetChoiceReactivePower", "class_reactive_shunt_element_form_base.html#a5ae249950ace35e5b19124f1fa49946b", null ], + [ "GetNotebook", "class_reactive_shunt_element_form_base.html#a3295f1d61c6249cb5ec8994a86b66d41", null ], + [ "GetPanelGeneral", "class_reactive_shunt_element_form_base.html#a92f31dfb84b855ff5a36ab9f5257e381", null ], + [ "GetStaticTextName", "class_reactive_shunt_element_form_base.html#aab4647a9961226fd3b6934b539539535", null ], + [ "GetStaticTextReactivePower", "class_reactive_shunt_element_form_base.html#a41f1a2d4df3cc1c7506b975d5ecde71b", null ], + [ "GetTextCtrlName", "class_reactive_shunt_element_form_base.html#a45c87f3d26fefb6701e3ce84445d3b2a", null ], + [ "GetTextCtrlReactivePower", "class_reactive_shunt_element_form_base.html#afb6b4c5f665e515a466d8fd31353829e", null ], + [ "OnCancelButtonClick", "class_reactive_shunt_element_form_base.html#a2eabee46e0b04d92086a0d0f21e3b10e", null ], + [ "OnOKButtonClick", "class_reactive_shunt_element_form_base.html#a4b0ca8c2ccb39a0f305bcc2fe95c820e", null ], + [ "OnStabilityButtonClick", "class_reactive_shunt_element_form_base.html#aff864c79e7dae7fd22200efcdba27eb3", null ], + [ "m_buttonCancel", "class_reactive_shunt_element_form_base.html#aee2a26f08d25bb9989a03e8228dd1e69", null ], + [ "m_buttonOK", "class_reactive_shunt_element_form_base.html#a22cccd74ef0c2b8d251c336a88c9f407", null ], + [ "m_buttonStabButton", "class_reactive_shunt_element_form_base.html#a2e2c10853585884ad3a2802764b756c7", null ], + [ "m_choiceReactivePower", "class_reactive_shunt_element_form_base.html#a653e5033a3d9834d3a3e1f3442d3d1e5", null ], + [ "m_notebook", "class_reactive_shunt_element_form_base.html#a12aba656b33ee48307824e4229f75541", null ], + [ "m_panelGeneral", "class_reactive_shunt_element_form_base.html#a2554b773c193f87e3ac85fc14d3e63c7", null ], + [ "m_staticTextName", "class_reactive_shunt_element_form_base.html#a090e59ee0d5d344b2867b3e7b79e8951", null ], + [ "m_staticTextReactivePower", "class_reactive_shunt_element_form_base.html#a2ca7cece107e7d4057f5c9ee5b98c305", null ], + [ "m_textCtrlName", "class_reactive_shunt_element_form_base.html#a27c200b1beef702fec0e5d5a94165269", null ], + [ "m_textCtrlReactivePower", "class_reactive_shunt_element_form_base.html#aacf7ec5dec20fef61f3b190a950a0528", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_shunt-members.html b/docs/doxygen/html/class_shunt-members.html index 5cbe1f6..5403a23 100644 --- a/docs/doxygen/html/class_shunt-members.html +++ b/docs/doxygen/html/class_shunt-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Shunt Member List
@@ -199,11 +214,14 @@ $(function() { ~PowerElement()PowerElement ~Shunt() (defined in Shunt)Shunt
+ - + diff --git a/docs/doxygen/html/class_shunt.html b/docs/doxygen/html/class_shunt.html index 771d5b0..36001d5 100644 --- a/docs/doxygen/html/class_shunt.html +++ b/docs/doxygen/html/class_shunt.html @@ -5,10 +5,17 @@ -PSP-UFU: Shunt Class Reference +Shunt Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -495,7 +510,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 7 of file Shunt.h.

+

Member Function Documentation

◆ Contains()

@@ -532,6 +550,8 @@ Additional Inherited Members

Reimplemented in Capacitor, and Inductor.

+

Definition at line 13 of file Shunt.h.

+
@@ -570,6 +590,8 @@ Additional Inherited Members

Reimplemented in Capacitor, and Inductor.

+

Definition at line 14 of file Shunt.h.

+ @@ -606,6 +628,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 15 of file Shunt.cpp.

+ @@ -653,6 +677,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 28 of file Shunt.cpp.

+ @@ -690,6 +716,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 67 of file Shunt.cpp.

+ @@ -726,6 +754,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 57 of file Shunt.cpp.

+ @@ -773,6 +803,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 124 of file Shunt.cpp.

+ @@ -810,6 +842,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 81 of file Shunt.cpp.

+ @@ -846,18 +880,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 50 of file Shunt.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_shunt.js b/docs/doxygen/html/class_shunt.js new file mode 100644 index 0000000..caeafe6 --- /dev/null +++ b/docs/doxygen/html/class_shunt.js @@ -0,0 +1,19 @@ +var class_shunt = +[ + [ "Shunt", "class_shunt.html#a0e19acef958e6153dc1d7386c82de780", null ], + [ "~Shunt", "class_shunt.html#a9b52cb496663c75be79cb507d5961a8b", null ], + [ "Contains", "class_shunt.html#a449431a2044b838d35cbb991aa1de658", null ], + [ "DrawGround", "class_shunt.html#a902525eebbb4bf3ecaab0e1e60b6f017", null ], + [ "Intersects", "class_shunt.html#afdbf0c51f9630589937298329bb041fe", null ], + [ "Move", "class_shunt.html#aa98b8a2f097fc02fee1ea874e19480f3", null ], + [ "MoveNode", "class_shunt.html#a23d2fed4e9b6a69bc4527b4345bd5bbd", null ], + [ "NodeContains", "class_shunt.html#ae325a441a44c2a78c08289292fa00979", null ], + [ "RemoveParent", "class_shunt.html#a665d9a8c291d427e666567c6df34321b", null ], + [ "RotateNode", "class_shunt.html#a7a732f1fb5f54b89e33957194fefd703", null ], + [ "SetNodeParent", "class_shunt.html#aacb9fdd05533a8322596b130c70774ef", null ], + [ "StartMove", "class_shunt.html#a56d6136d647f64cf490dd9d7720f6865", null ], + [ "UpdateNodes", "class_shunt.html#abe01dcdf8bc0ba6fc97d41673889fb8e", null ], + [ "UpdatePowerFlowArrowsPosition", "class_shunt.html#a98e8f5798d17f613dfc0964e5007cd91", null ], + [ "UpdateSwitchesPosition", "class_shunt.html#a33a6bcf6612d4cf8c4de8e9f916a22e8", null ], + [ "m_inserted", "class_shunt.html#abfc091da79ec7b87548d11dc8568b3cb", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_simulations_settings_form-members.html b/docs/doxygen/html/class_simulations_settings_form-members.html index 5dc1ab1..765a5e0 100644 --- a/docs/doxygen/html/class_simulations_settings_form-members.html +++ b/docs/doxygen/html/class_simulations_settings_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SimulationsSettingsForm Member List
@@ -154,11 +169,14 @@ $(function() { ~SimulationsSettingsForm() (defined in SimulationsSettingsForm)SimulationsSettingsFormvirtual ~SimulationsSettingsFormBase() (defined in SimulationsSettingsFormBase)SimulationsSettingsFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_simulations_settings_form.html b/docs/doxygen/html/class_simulations_settings_form.html index eb30658..50101b9 100644 --- a/docs/doxygen/html/class_simulations_settings_form.html +++ b/docs/doxygen/html/class_simulations_settings_form.html @@ -5,10 +5,17 @@ -PSP-UFU: SimulationsSettingsForm Class Reference +SimulationsSettingsForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -340,16 +355,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_simulations_settings_form.js b/docs/doxygen/html/class_simulations_settings_form.js new file mode 100644 index 0000000..af7e6e0 --- /dev/null +++ b/docs/doxygen/html/class_simulations_settings_form.js @@ -0,0 +1,10 @@ +var class_simulations_settings_form = +[ + [ "SimulationsSettingsForm", "class_simulations_settings_form.html#a0391607c5a1c9d9bc819ff76fbfe4ac9", null ], + [ "~SimulationsSettingsForm", "class_simulations_settings_form.html#a84907a8c877741a310bbd04a10661713", null ], + [ "OnButtonCancelClick", "class_simulations_settings_form.html#a4a12f6479437b57c0f60da303e9ae8a4", null ], + [ "OnButtonOKClick", "class_simulations_settings_form.html#aac571bfc12367c787a34f04b1c6daf0e", null ], + [ "OnPFMethodChoiceSelected", "class_simulations_settings_form.html#a0b45be7dd91f8ed322dfe6be9f09b519", null ], + [ "ValidateData", "class_simulations_settings_form.html#a33fd689685a661ba869285e70005b25c", null ], + [ "m_properties", "class_simulations_settings_form.html#a6afac8fd633a317058c3755c3b9ad531", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_simulations_settings_form_base-members.html b/docs/doxygen/html/class_simulations_settings_form_base-members.html index b6d1fe2..27751b0 100644 --- a/docs/doxygen/html/class_simulations_settings_form_base-members.html +++ b/docs/doxygen/html/class_simulations_settings_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SimulationsSettingsFormBase Member List
@@ -150,11 +165,14 @@ $(function() { SimulationsSettingsFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Simulation settings"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in SimulationsSettingsFormBase)SimulationsSettingsFormBase ~SimulationsSettingsFormBase() (defined in SimulationsSettingsFormBase)SimulationsSettingsFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_simulations_settings_form_base.html b/docs/doxygen/html/class_simulations_settings_form_base.html index 7613ac1..e48b0e9 100644 --- a/docs/doxygen/html/class_simulations_settings_form_base.html +++ b/docs/doxygen/html/class_simulations_settings_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: SimulationsSettingsFormBase Class Reference +SimulationsSettingsFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -329,16 +344,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_simulations_settings_form_base.js b/docs/doxygen/html/class_simulations_settings_form_base.js new file mode 100644 index 0000000..c68b420 --- /dev/null +++ b/docs/doxygen/html/class_simulations_settings_form_base.js @@ -0,0 +1,84 @@ +var class_simulations_settings_form_base = +[ + [ "SimulationsSettingsFormBase", "class_simulations_settings_form_base.html#af8458c28c9872ff8acf3bbb3c5199e9b", null ], + [ "~SimulationsSettingsFormBase", "class_simulations_settings_form_base.html#ada2a9fee30900f61c17467eda9660268", null ], + [ "GetButtonCancel", "class_simulations_settings_form_base.html#a92d5254832f8c3057f0a369997e1c589", null ], + [ "GetButtonOK", "class_simulations_settings_form_base.html#a3b70f10ddf978db633923109adf2eec8", null ], + [ "GetCheckBoxFaultAfterPF", "class_simulations_settings_form_base.html#a76d9c02a5e8293274ff5ca30da5f3875", null ], + [ "GetCheckBoxSCPowerAfterPF", "class_simulations_settings_form_base.html#ab6f0efa45b68666940fac0dc5af77d4b", null ], + [ "GetCheckBoxUseCOI", "class_simulations_settings_form_base.html#a01ca85120c1c072ff30df0949a57809b", null ], + [ "GetChoiceBasePower", "class_simulations_settings_form_base.html#aee050ed812808b55b72ec34e58b77216", null ], + [ "GetChoicePFMethod", "class_simulations_settings_form_base.html#a2123722e9d7846170793743eb2301c36", null ], + [ "GetNotebook", "class_simulations_settings_form_base.html#aec922317f79b987aafb7b92606b4a842", null ], + [ "GetPanelGeneral", "class_simulations_settings_form_base.html#a7042594f1537d6f29e548b2a2bdacbe9", null ], + [ "GetPanelPF", "class_simulations_settings_form_base.html#acb9011e12495db4f9a2a49c92882510c", null ], + [ "GetPanelStability", "class_simulations_settings_form_base.html#ad39cfa9e625b2e8121876a4ecbd4d92f", null ], + [ "GetStaticTextAccFactor", "class_simulations_settings_form_base.html#a58a3cba8a8e3aeb7ad04d9c09322accb", null ], + [ "GetStaticTextBasePower", "class_simulations_settings_form_base.html#ad016bbdd77be06e86c380d018a16fade", null ], + [ "GetStaticTextCtrlStepRation", "class_simulations_settings_form_base.html#ac7050c25d8d6ce313923cd3083f2eb23", null ], + [ "GetStaticTextFreq", "class_simulations_settings_form_base.html#a98aa6d081d91f7f2f37dac59eb0a93e6", null ], + [ "GetStaticTextFreqUnit", "class_simulations_settings_form_base.html#a09b4f2e8531838473197ef0e0ec148a8", null ], + [ "GetStaticTextPFMaxIterations", "class_simulations_settings_form_base.html#a9fccf4f6abdce32fbb0b09a3f110e834", null ], + [ "GetStaticTextPFMethod", "class_simulations_settings_form_base.html#ab4cf5f7f1b62bc5bf616d2e93607ac61", null ], + [ "GetStaticTextPFTolerance", "class_simulations_settings_form_base.html#aee97bdf20f2ca8ee56a74ea3ad4a6039", null ], + [ "GetStaticTextPrintTime", "class_simulations_settings_form_base.html#a5f35f20f83aab77c9412a647c7cc4d81", null ], + [ "GetStaticTextSec_1", "class_simulations_settings_form_base.html#a00caec0bf8cdb39f16856a49b478596e", null ], + [ "GetStaticTextSec_2", "class_simulations_settings_form_base.html#af6897e01f563f69a2dd42ace0957d727", null ], + [ "GetStaticTextSec_4", "class_simulations_settings_form_base.html#a524aa037a3fde6b45fe5dc28c44bee7e", null ], + [ "GetStaticTextTimeStep", "class_simulations_settings_form_base.html#a55b6815057a04579c46f66a55152bfa8", null ], + [ "GetStaticTextTSimTime", "class_simulations_settings_form_base.html#a2931101c1dfb81b3ae70b208f2f21d9f", null ], + [ "GetStaticTextTStabMaxIterations", "class_simulations_settings_form_base.html#ab32e1ea33b4b79698216525ab4b56913", null ], + [ "GetStaticTextTStabTolerance", "class_simulations_settings_form_base.html#a094a39982209ed4298e1914bb6a01841", null ], + [ "GetTextCtrlAccFactor", "class_simulations_settings_form_base.html#a213a37c4ec8adfe9193858c730809760", null ], + [ "GetTextCtrlbasePower", "class_simulations_settings_form_base.html#a035a663ed0e32f8e1b5ad799e19d3ede", null ], + [ "GetTextCtrlCtrlStepRatio", "class_simulations_settings_form_base.html#aec5711728dc70f7d962f534ae28d8a05", null ], + [ "GetTextCtrlFreq", "class_simulations_settings_form_base.html#ac01579c56a80613b6c3f435b9a2e4a03", null ], + [ "GetTextCtrlPFMaxIterations", "class_simulations_settings_form_base.html#a0fe2f8372ca7856be82306d3b8197ba0", null ], + [ "GetTextCtrlPFTolerance", "class_simulations_settings_form_base.html#afa1921b831ae73b371cc02e20ea56e42", null ], + [ "GetTextCtrlPrintTime", "class_simulations_settings_form_base.html#aa1f4041f16dc8accc7a26144d68cdfe0", null ], + [ "GetTextCtrlSimTime", "class_simulations_settings_form_base.html#a00162ab3f5fc280dc753440314a7e1ba", null ], + [ "GetTextCtrlStabMaxIterations", "class_simulations_settings_form_base.html#a0e92dc8f5bc6f21b564ed7f0473f5c12", null ], + [ "GetTextCtrlStabTolerance", "class_simulations_settings_form_base.html#a53776e57a1941d582b7e249baf991715", null ], + [ "GetTextCtrlTimeStep", "class_simulations_settings_form_base.html#a3f77e2f06060be18695b9e479569e750", null ], + [ "OnButtonCancelClick", "class_simulations_settings_form_base.html#aef9d71e3abcd87b2b7b2ace661a125f1", null ], + [ "OnButtonOKClick", "class_simulations_settings_form_base.html#a0e0fe5100d343148e774da127a5f13cd", null ], + [ "OnPFMethodChoiceSelected", "class_simulations_settings_form_base.html#aca670e18cc3586a32ca0a6a9f25c778e", null ], + [ "m_buttonCancel", "class_simulations_settings_form_base.html#aa21432ddb46b6c57c6e15c3866f6fda3", null ], + [ "m_buttonOK", "class_simulations_settings_form_base.html#aed285294984ddf5f3f33b0ef880436db", null ], + [ "m_checkBoxFaultAfterPF", "class_simulations_settings_form_base.html#ae61dd6d08066b1d2b14e61ca86563e70", null ], + [ "m_checkBoxSCPowerAfterPF", "class_simulations_settings_form_base.html#ac44d3e7feb259aa17827745d03645c61", null ], + [ "m_checkBoxUseCOI", "class_simulations_settings_form_base.html#ac3a35758ae53dcd1529c203903c5a2d0", null ], + [ "m_choiceBasePower", "class_simulations_settings_form_base.html#ad88b18ba2eda8d364700d0a44700b2ca", null ], + [ "m_choicePFMethod", "class_simulations_settings_form_base.html#a737cdb464ec33b674fb0b663244380be", null ], + [ "m_notebook", "class_simulations_settings_form_base.html#a46cf61f4852659c6e16cf922c2a375e7", null ], + [ "m_panelGeneral", "class_simulations_settings_form_base.html#a2deb701c33edf6c39db842c6c78516c7", null ], + [ "m_panelPF", "class_simulations_settings_form_base.html#aab3c91bfa5a862e71b2c38a9df0a8eb5", null ], + [ "m_panelStability", "class_simulations_settings_form_base.html#a1ac75d31b112a2febebf4bc9702f2308", null ], + [ "m_staticTextAccFactor", "class_simulations_settings_form_base.html#a848776479beac8acd3b12cac44db650b", null ], + [ "m_staticTextBasePower", "class_simulations_settings_form_base.html#a26a06b8a618d7bb2e244f15cbbb218a0", null ], + [ "m_staticTextCtrlStepRation", "class_simulations_settings_form_base.html#ae97619c4e742ff28aa51717a866d7fd6", null ], + [ "m_staticTextFreq", "class_simulations_settings_form_base.html#ad3da36ce3bb692683905b7458b2e2f47", null ], + [ "m_staticTextFreqUnit", "class_simulations_settings_form_base.html#a6dd10f55aef407622408e49647034411", null ], + [ "m_staticTextPFMaxIterations", "class_simulations_settings_form_base.html#ae0b838671392bbfd1037825c91858351", null ], + [ "m_staticTextPFMethod", "class_simulations_settings_form_base.html#af0e490cccb54947f5876c1cdc7ccf500", null ], + [ "m_staticTextPFTolerance", "class_simulations_settings_form_base.html#ae40f84562ec35916ab3dae9486758c16", null ], + [ "m_staticTextPrintTime", "class_simulations_settings_form_base.html#aab75fa0cbc79a8e5326b041a8abb4d53", null ], + [ "m_staticTextSec_1", "class_simulations_settings_form_base.html#ace61760a867e5a3be0e1b473aad0d2eb", null ], + [ "m_staticTextSec_2", "class_simulations_settings_form_base.html#aaade7967df12d8cf83cc50776c1020d1", null ], + [ "m_staticTextSec_4", "class_simulations_settings_form_base.html#aaed7ddcb9b84b937b9a18d605daef43e", null ], + [ "m_staticTextTimeStep", "class_simulations_settings_form_base.html#ad37c3e12130446e807ed3dad448e2897", null ], + [ "m_staticTextTSimTime", "class_simulations_settings_form_base.html#a109ea7e508f6494508d35a62237b661a", null ], + [ "m_staticTextTStabMaxIterations", "class_simulations_settings_form_base.html#ac4b3fb7066f7a1b737128ba894a307e8", null ], + [ "m_staticTextTStabTolerance", "class_simulations_settings_form_base.html#ad97d193d22c562e7258deff71c13c8f6", null ], + [ "m_textCtrlAccFactor", "class_simulations_settings_form_base.html#a7534d53a23d3e4059f7d9f63cee3ddee", null ], + [ "m_textCtrlbasePower", "class_simulations_settings_form_base.html#a8d8e9a8f2d048dede1d4c1499874d583", null ], + [ "m_textCtrlCtrlStepRatio", "class_simulations_settings_form_base.html#a4529d8c7e6fd72067ea23d1dcddb8fda", null ], + [ "m_textCtrlFreq", "class_simulations_settings_form_base.html#a518aaef569ff7157901c2ddede7ad170", null ], + [ "m_textCtrlPFMaxIterations", "class_simulations_settings_form_base.html#a4ed212050fcf484d787a25798da3dbba", null ], + [ "m_textCtrlPFTolerance", "class_simulations_settings_form_base.html#a317cc6c7b9a2a2bc849db7404bdca9f5", null ], + [ "m_textCtrlPrintTime", "class_simulations_settings_form_base.html#acba3e17f6b51d492ca0da5d3858de37c", null ], + [ "m_textCtrlSimTime", "class_simulations_settings_form_base.html#aa2e318a9d77610874ff17bd0b7c066d4", null ], + [ "m_textCtrlStabMaxIterations", "class_simulations_settings_form_base.html#a4536b745d3b4ec8f24e8f4e513d85631", null ], + [ "m_textCtrlStabTolerance", "class_simulations_settings_form_base.html#a273b0fa706d897f285611b96b3274d11", null ], + [ "m_textCtrlTimeStep", "class_simulations_settings_form_base.html#aa08fb3f5fa28c521b8e8822f1cb06dcc", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_sum-members.html b/docs/doxygen/html/class_sum-members.html index a5fdb08..4563da9 100644 --- a/docs/doxygen/html/class_sum-members.html +++ b/docs/doxygen/html/class_sum-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Sum Member List
@@ -191,11 +206,14 @@ $(function() { ~Element()Elementvirtual ~Sum() (defined in Sum)Sum
+ - + diff --git a/docs/doxygen/html/class_sum.html b/docs/doxygen/html/class_sum.html index 342332c..7591988 100644 --- a/docs/doxygen/html/class_sum.html +++ b/docs/doxygen/html/class_sum.html @@ -5,10 +5,17 @@ -PSP-UFU: Sum Class Reference +Sum Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -458,7 +473,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 9 of file Sum.h.

+

Member Function Documentation

◆ Contains()

@@ -493,6 +511,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 17 of file Sum.h.

+
@@ -540,6 +560,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 26 of file Sum.cpp.

+ @@ -570,6 +592,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 221 of file Sum.cpp.

+ @@ -606,6 +630,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 18 of file Sum.h.

+ @@ -642,6 +668,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 166 of file Sum.cpp.

+ @@ -690,18 +718,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 95 of file Sum.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_sum.js b/docs/doxygen/html/class_sum.js new file mode 100644 index 0000000..66a3384 --- /dev/null +++ b/docs/doxygen/html/class_sum.js @@ -0,0 +1,22 @@ +var class_sum = +[ + [ "Signal", "class_sum.html#a9fee4d90ac4763772a4e1fb576a6ef12", [ + [ "SIGNAL_POSITIVE", "class_sum.html#a9fee4d90ac4763772a4e1fb576a6ef12adb0bcea3a141d08cbfb05e3b8e77cefe", null ], + [ "SIGNAL_NEGATIVE", "class_sum.html#a9fee4d90ac4763772a4e1fb576a6ef12a39145153f34ca4ab9719f8d5c653c7b3", null ] + ] ], + [ "Sum", "class_sum.html#aa3717e614bb0e96964f9811f4507f3af", null ], + [ "~Sum", "class_sum.html#a9481fc530cb81210b25ecb2530d25773", null ], + [ "AddInNode", "class_sum.html#a4b0de2bacd9396f3de51443067f6a4bb", null ], + [ "Contains", "class_sum.html#a1d1b52ca1b9a81d53c0a9cf140546987", null ], + [ "Draw", "class_sum.html#a31dbb6867b17188b4a8cc650983da57b", null ], + [ "GetCopy", "class_sum.html#a0da96514e0462e47d3f57b79ddc457b6", null ], + [ "GetSignalList", "class_sum.html#a8b9c002187c4bb7da8a5f2361f0d0e5d", null ], + [ "Intersects", "class_sum.html#ac8ed3db993dd3053b94ccac7da4a664e", null ], + [ "RemoveInNode", "class_sum.html#aa13b50e1318e1fec4155ffb5af85c9aa", null ], + [ "Rotate", "class_sum.html#a738bcb564fec2764055e4785227b5eea", null ], + [ "SetSignalList", "class_sum.html#a03c8cdc8fed16581225496c2cfcdd436", null ], + [ "ShowForm", "class_sum.html#a8c4bfb1dc965d8ac246de59d1f10888b", null ], + [ "Solve", "class_sum.html#afeec70f945ce41be47b24123d4bed3c4", null ], + [ "UpdatePoints", "class_sum.html#a36c5749f8ac3bf32cc720a27435f0d60", null ], + [ "m_signalList", "class_sum.html#aace7f53cc3d1c9378f2893edadc74df8", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_sum_form-members.html b/docs/doxygen/html/class_sum_form-members.html index b0f8050..888c9b2 100644 --- a/docs/doxygen/html/class_sum_form-members.html +++ b/docs/doxygen/html/class_sum_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SumForm Member List
@@ -90,11 +105,14 @@ $(function() { ~SumForm() (defined in SumForm)SumFormvirtual ~SumFormBase() (defined in SumFormBase)SumFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_sum_form.html b/docs/doxygen/html/class_sum_form.html index 69552e9..d0ca4d7 100644 --- a/docs/doxygen/html/class_sum_form.html +++ b/docs/doxygen/html/class_sum_form.html @@ -5,10 +5,17 @@ -PSP-UFU: SumForm Class Reference +SumForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -148,16 +163,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 8 of file SumForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_sum_form.js b/docs/doxygen/html/class_sum_form.js new file mode 100644 index 0000000..c8c803d --- /dev/null +++ b/docs/doxygen/html/class_sum_form.js @@ -0,0 +1,10 @@ +var class_sum_form = +[ + [ "SumForm", "class_sum_form.html#ab318b92e4d53a837e788ff1a69e96b5c", null ], + [ "~SumForm", "class_sum_form.html#a37f41965a298b56899de0a1828cdc770", null ], + [ "OnCancelClick", "class_sum_form.html#ac0fbf6d56bfb3f60a9bd6a8bf6bce7b8", null ], + [ "OnOKClick", "class_sum_form.html#a6a9cb413f9be91bf72c932a59f983016", null ], + [ "ValidateData", "class_sum_form.html#a9dc89b667f23538e3ec5e18c846f885e", null ], + [ "m_parent", "class_sum_form.html#af5b8720147dbca233523c32f6f258ae4", null ], + [ "m_sum", "class_sum_form.html#adea5d7a9be5306cd89f86e85aaf7a660", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_sum_form_base-members.html b/docs/doxygen/html/class_sum_form_base-members.html index 7fb7a48..c3e87b4 100644 --- a/docs/doxygen/html/class_sum_form_base-members.html +++ b/docs/doxygen/html/class_sum_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SumFormBase Member List
@@ -85,11 +100,14 @@ $(function() { SumFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Sum"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in SumFormBase)SumFormBase ~SumFormBase() (defined in SumFormBase)SumFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_sum_form_base.html b/docs/doxygen/html/class_sum_form_base.html index b38bd78..ddf99ee 100644 --- a/docs/doxygen/html/class_sum_form_base.html +++ b/docs/doxygen/html/class_sum_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: SumFormBase Class Reference +SumFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -134,16 +149,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_sum_form_base.js b/docs/doxygen/html/class_sum_form_base.js new file mode 100644 index 0000000..ed64835 --- /dev/null +++ b/docs/doxygen/html/class_sum_form_base.js @@ -0,0 +1,19 @@ +var class_sum_form_base = +[ + [ "SumFormBase", "class_sum_form_base.html#af1d1e592008623d7e95212f6fc9276e2", null ], + [ "~SumFormBase", "class_sum_form_base.html#ae3fb93bfc685a815a1500da7b1b65da4", null ], + [ "GetButtonCancel", "class_sum_form_base.html#af8f78aa41aceefc799ebeebabc48fe5a", null ], + [ "GetButtonOK", "class_sum_form_base.html#a478f9994a6547ec2281df0f7b753ae2c", null ], + [ "GetNotebook", "class_sum_form_base.html#a333b377a6c4114be5b512245b9ce25ce", null ], + [ "GetPanelGeneral", "class_sum_form_base.html#a5fd09ba97a3d6450f2c5c8b0c4b176b7", null ], + [ "GetStaticTextSigns", "class_sum_form_base.html#a90558d4699ce88a5e5e0c3ec12d9b7ab", null ], + [ "GetTextCtrlSigns", "class_sum_form_base.html#a23f90476a3d5c6a10adb2e04b1e9e92e", null ], + [ "OnCancelClick", "class_sum_form_base.html#a81a829c226c662ee223fa272ef82d607", null ], + [ "OnOKClick", "class_sum_form_base.html#aa130861600417fbad5cc023453934e1c", null ], + [ "m_ButtonCancel", "class_sum_form_base.html#a76390a7b2ed8f6b48ecacc44e169e3d0", null ], + [ "m_buttonOK", "class_sum_form_base.html#ad8a08c8ab6250a86492cad10e194ba73", null ], + [ "m_notebook", "class_sum_form_base.html#acee9891cb18fdeb81ce7d479e513a4b0", null ], + [ "m_panelGeneral", "class_sum_form_base.html#a86b53d02de25987979e0ac6710846ac1", null ], + [ "m_staticTextSigns", "class_sum_form_base.html#a3a503f6d21a85e63c269dc91e24934f9", null ], + [ "m_textCtrlSigns", "class_sum_form_base.html#a08ab073dee18b11b4fd1a65689f516f0", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_switching_form-members.html b/docs/doxygen/html/class_switching_form-members.html index 71ce3e5..e041ef7 100644 --- a/docs/doxygen/html/class_switching_form-members.html +++ b/docs/doxygen/html/class_switching_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SwitchingForm Member List
@@ -105,11 +120,14 @@ $(function() { ~SwitchingForm() (defined in SwitchingForm)SwitchingFormvirtual ~SwitchingFormBase() (defined in SwitchingFormBase)SwitchingFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_switching_form.html b/docs/doxygen/html/class_switching_form.html index 230e897..39b3b91 100644 --- a/docs/doxygen/html/class_switching_form.html +++ b/docs/doxygen/html/class_switching_form.html @@ -5,10 +5,17 @@ -PSP-UFU: SwitchingForm Class Reference +SwitchingForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -193,16 +208,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_switching_form.js b/docs/doxygen/html/class_switching_form.js new file mode 100644 index 0000000..f91f288 --- /dev/null +++ b/docs/doxygen/html/class_switching_form.js @@ -0,0 +1,16 @@ +var class_switching_form = +[ + [ "SwitchingForm", "class_switching_form.html#aad52686f462144ffccd3578eecefd32d", null ], + [ "SwitchingForm", "class_switching_form.html#a81b7062eddf36ade1a4e53a33adc4625", null ], + [ "~SwitchingForm", "class_switching_form.html#a3972bbd7d83b652ea86a723ce65d7229", null ], + [ "OnCancelButtonClick", "class_switching_form.html#a93a2a6de1b6cc105a0b0db26b0e65a08", null ], + [ "OnChangeProperties", "class_switching_form.html#ac9ff8f71fd06710052149c6dd901bb20", null ], + [ "OnDownButtonClick", "class_switching_form.html#af2b383361fbeadad70aaad10b7af0fe0", null ], + [ "OnInsertButtonClick", "class_switching_form.html#a867496b7c64a90d535827064318b974a", null ], + [ "OnOKButtonClick", "class_switching_form.html#acfc6922c9f874742f77aa14a61aa3d13", null ], + [ "OnRemoveButtonClick", "class_switching_form.html#aa48bd418ad1ff7c073af6eca7aaf2c3f", null ], + [ "OnSelectItem", "class_switching_form.html#a9c6ba5561dbc2dc54312a7cd9228b476", null ], + [ "OnUpButtonClick", "class_switching_form.html#a53b3b94d0a1055c997e3233593c84395", null ], + [ "m_element", "class_switching_form.html#a46a1ad42e25866112a9e43294df59d13", null ], + [ "m_maxID", "class_switching_form.html#ab70d0ed108513b20e3cf80a9f8acc148", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_switching_form_base-members.html b/docs/doxygen/html/class_switching_form_base-members.html index f4f1d8c..5785599 100644 --- a/docs/doxygen/html/class_switching_form_base-members.html +++ b/docs/doxygen/html/class_switching_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SwitchingFormBase Member List
@@ -100,11 +115,14 @@ $(function() { SwitchingFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Switching"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in SwitchingFormBase)SwitchingFormBase ~SwitchingFormBase() (defined in SwitchingFormBase)SwitchingFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_switching_form_base.html b/docs/doxygen/html/class_switching_form_base.html index 4dec783..3a18284 100644 --- a/docs/doxygen/html/class_switching_form_base.html +++ b/docs/doxygen/html/class_switching_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: SwitchingFormBase Class Reference +SwitchingFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -179,16 +194,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_switching_form_base.js b/docs/doxygen/html/class_switching_form_base.js new file mode 100644 index 0000000..845d769 --- /dev/null +++ b/docs/doxygen/html/class_switching_form_base.js @@ -0,0 +1,34 @@ +var class_switching_form_base = +[ + [ "SwitchingFormBase", "class_switching_form_base.html#a92d178826ef95170e623bb4ad7d33171", null ], + [ "~SwitchingFormBase", "class_switching_form_base.html#a84b3ee2c021abbe31d8c42c995a89d56", null ], + [ "GetButtonCancel", "class_switching_form_base.html#a2f55dcdb9ba37f9c4e1428f6767b168e", null ], + [ "GetButtonDown", "class_switching_form_base.html#a12a2da9f3c7ed16f5e9965c13d166f96", null ], + [ "GetButtonInsert", "class_switching_form_base.html#ae6854ecd50f251c6c5907dfa6945fdc3", null ], + [ "GetButtonOK", "class_switching_form_base.html#ac1bb1bf80e6526bfd97e54277ef8da3c", null ], + [ "GetButtonRemove", "class_switching_form_base.html#a4120a54ec6ba678f97f6f23b27453f6c", null ], + [ "GetButtonUp", "class_switching_form_base.html#acc549ba43edb9d7ba4ca938982fd794b", null ], + [ "GetListCtrlSwitchings", "class_switching_form_base.html#ac3ca747257bb9ca0fa1ce1c09a6e5342", null ], + [ "GetPgMgrSwitchingsProp", "class_switching_form_base.html#ab606b039351e82f6b5115336d0edafd5", null ], + [ "GetStaticTextSwList", "class_switching_form_base.html#a7672f7fad7fd63de788006d8c67668d3", null ], + [ "OnCancelButtonClick", "class_switching_form_base.html#afd2e5b45c5a295b58a255ba0159ad8d4", null ], + [ "OnChangeProperties", "class_switching_form_base.html#a67f95f0d053dd46cdacb20848c0d9c84", null ], + [ "OnDownButtonClick", "class_switching_form_base.html#ad21d7949427c973081f7461620506335", null ], + [ "OnInsertButtonClick", "class_switching_form_base.html#ae113c3c97e21037e6561811a094436a0", null ], + [ "OnOKButtonClick", "class_switching_form_base.html#a1181e4a27deea52b62aa6abd5cf06f98", null ], + [ "OnRemoveButtonClick", "class_switching_form_base.html#a2816bcf1b23f2e79b0b58a0a8de0ba24", null ], + [ "OnSelectItem", "class_switching_form_base.html#a53be89419785168b8a74cbbc4baf4da5", null ], + [ "OnUpButtonClick", "class_switching_form_base.html#a7d645a4f981511ba46e549c89a624533", null ], + [ "m_buttonCancel", "class_switching_form_base.html#ab8d540ac6bae77e44f30b8ffce030e07", null ], + [ "m_buttonDown", "class_switching_form_base.html#a0ae557b49458c10705867c2fe88cdb24", null ], + [ "m_buttonInsert", "class_switching_form_base.html#a5682b2c0825b46e0eb3ac8990b1b5c7a", null ], + [ "m_buttonOK", "class_switching_form_base.html#a461522bb3739dd790b968c9536239d3d", null ], + [ "m_buttonRemove", "class_switching_form_base.html#a86f434b7cd754bf15e415d394f5101a8", null ], + [ "m_buttonUp", "class_switching_form_base.html#aab2b0440e8a1af4a2c16ae3d88c4713a", null ], + [ "m_listCtrlSwitchings", "class_switching_form_base.html#a2c79761f5c68a966661865a91e0a4c32", null ], + [ "m_pgMgrSwitchingsProp", "class_switching_form_base.html#ad17112f4d131937423f551720066177a", null ], + [ "m_pgPropTime", "class_switching_form_base.html#adfc965bcb8575b5b0d36e7ad311d2d0b", null ], + [ "m_pgPropTitle", "class_switching_form_base.html#ad0c13eb28aee4127889405283bb72904", null ], + [ "m_pgPropType", "class_switching_form_base.html#a02a15eaf6d2e1533369d7c4985799839", null ], + [ "m_staticTextSwList", "class_switching_form_base.html#ac839296c57c6c380547180c3c7180f5c", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_sync_generator-members.html b/docs/doxygen/html/class_sync_generator-members.html index a955c00..b304bcf 100644 --- a/docs/doxygen/html/class_sync_generator-members.html +++ b/docs/doxygen/html/class_sync_generator-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SyncGenerator Member List
@@ -214,11 +229,14 @@ $(function() { ~PowerElement()PowerElement ~SyncGenerator() (defined in SyncGenerator)SyncGenerator
+ - + diff --git a/docs/doxygen/html/class_sync_generator.html b/docs/doxygen/html/class_sync_generator.html index f3c412e..cee7ac6 100644 --- a/docs/doxygen/html/class_sync_generator.html +++ b/docs/doxygen/html/class_sync_generator.html @@ -5,10 +5,17 @@ -PSP-UFU: SyncGenerator Class Reference +SyncGenerator Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -524,7 +539,10 @@ void UpdateSwitchesPositio void UpdatePowerFlowArrowsPosition ()   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 110 of file SyncGenerator.h.

+

Member Function Documentation

◆ GetContextMenu()

@@ -560,6 +578,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 39 of file SyncGenerator.cpp.

+
@@ -590,6 +610,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 139 of file SyncGenerator.cpp.

+ @@ -627,6 +649,8 @@ void UpdatePowerFlowArrows

Reimplemented from PowerElement.

+

Definition at line 213 of file SyncGenerator.cpp.

+ @@ -657,6 +681,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 167 of file SyncGenerator.cpp.

+ @@ -704,6 +730,8 @@ void UpdatePowerFlowArrows

Reimplemented from PowerElement.

+

Definition at line 130 of file SyncGenerator.cpp.

+ @@ -752,18 +780,24 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 46 of file SyncGenerator.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_sync_generator.js b/docs/doxygen/html/class_sync_generator.js new file mode 100644 index 0000000..28b8d69 --- /dev/null +++ b/docs/doxygen/html/class_sync_generator.js @@ -0,0 +1,19 @@ +var class_sync_generator = +[ + [ "SyncGenerator", "class_sync_generator.html#af66e02540c23285395e3592d1c822f99", null ], + [ "SyncGenerator", "class_sync_generator.html#a7f825dd5949d3bf5b49e4e4b788b9de3", null ], + [ "~SyncGenerator", "class_sync_generator.html#a6cbf05435af171775cbaf81d8beb6474", null ], + [ "DrawSymbol", "class_sync_generator.html#a57b0e5d734736aa15d7a0ae59c21f5cc", null ], + [ "GetContextMenu", "class_sync_generator.html#a24b9894fa42473dfb8bcf82221401a97", null ], + [ "GetCopy", "class_sync_generator.html#a9130e8714c1518683540f587aca1201f", null ], + [ "GetElectricalData", "class_sync_generator.html#a87b438b8b95a119ac298a49fd4248272", null ], + [ "GetPlotData", "class_sync_generator.html#afcb0a1c03dab5ede586e5d15231f2cab", null ], + [ "GetPUElectricalData", "class_sync_generator.html#a54c742a72e8d9d7da2990b1a455b899a", null ], + [ "GetTipText", "class_sync_generator.html#a9454438d059269c194e1aa648e122f7e", null ], + [ "Init", "class_sync_generator.html#a05fbc44f44fb207083a7550e421f8bb4", null ], + [ "SetElectricalData", "class_sync_generator.html#a710965e1539d2199096bc5e71116de8a", null ], + [ "SetNominalVoltage", "class_sync_generator.html#aaa4c5978dc6d344747d74e36fb3e71d8", null ], + [ "ShowForm", "class_sync_generator.html#a4a9dd07d901f26cc8304399fe241afec", null ], + [ "m_electricalData", "class_sync_generator.html#a45ad59011c69a3b08c35ca16af6a5de6", null ], + [ "m_sinePts", "class_sync_generator.html#a23d63853faf0a4ee4aa1301cb234c603", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_sync_machine_form-members.html b/docs/doxygen/html/class_sync_machine_form-members.html index f79ec29..40671ec 100644 --- a/docs/doxygen/html/class_sync_machine_form-members.html +++ b/docs/doxygen/html/class_sync_machine_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SyncMachineForm Member List
@@ -166,11 +181,14 @@ $(function() { ~SyncMachineForm() (defined in SyncMachineForm)SyncMachineFormvirtual ~SyncMachineFormBase() (defined in SyncMachineFormBase)SyncMachineFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_sync_machine_form.html b/docs/doxygen/html/class_sync_machine_form.html index 80f6adb..6269317 100644 --- a/docs/doxygen/html/class_sync_machine_form.html +++ b/docs/doxygen/html/class_sync_machine_form.html @@ -5,10 +5,17 @@ -PSP-UFU: SyncMachineForm Class Reference +SyncMachineForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -376,16 +391,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_sync_machine_form.js b/docs/doxygen/html/class_sync_machine_form.js new file mode 100644 index 0000000..3514006 --- /dev/null +++ b/docs/doxygen/html/class_sync_machine_form.js @@ -0,0 +1,16 @@ +var class_sync_machine_form = +[ + [ "SyncMachineForm", "class_sync_machine_form.html#a53fd325bac54a9509ea530926bd50825", null ], + [ "SyncMachineForm", "class_sync_machine_form.html#a9fea7ef16899f918e5cedad577f960e7", null ], + [ "~SyncMachineForm", "class_sync_machine_form.html#a9421e44f0914790e23bcecaa222eaecc", null ], + [ "OnCancelButtonClick", "class_sync_machine_form.html#a1a4fc8f4ae070df13b73c7b400e0dc43", null ], + [ "OnCheckMaxReactive", "class_sync_machine_form.html#aed6770180b4f2efb07c8df061e2fbd03", null ], + [ "OnCheckMinReactive", "class_sync_machine_form.html#aea6339fd7121c438af87d8515490ab06", null ], + [ "OnOKButtonClick", "class_sync_machine_form.html#a9c53acf928dd35b648d0a67b69fa8b46", null ], + [ "OnStabilityButtonClick", "class_sync_machine_form.html#aa6bf6f86e79a0329f876996b651d3c72", null ], + [ "ReplaceStaticTextLabelChar", "class_sync_machine_form.html#ac4699ffcdb2c8f09e8610cb1afd50e05", null ], + [ "ValidateData", "class_sync_machine_form.html#a3bc93d1fd6285fcd5e11a4c18541914e", null ], + [ "m_parent", "class_sync_machine_form.html#ad7899edef11e6c72782eeef5aecfec54", null ], + [ "m_syncGenerator", "class_sync_machine_form.html#ac21b7bb1c3261b3ff128d9339a5bef51", null ], + [ "m_syncMotor", "class_sync_machine_form.html#a61b60bfc52876775f74160ae9075c697", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_sync_machine_form_base-members.html b/docs/doxygen/html/class_sync_machine_form_base-members.html index 90a66f8..2eacdac 100644 --- a/docs/doxygen/html/class_sync_machine_form_base-members.html +++ b/docs/doxygen/html/class_sync_machine_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SyncMachineFormBase Member List
@@ -158,11 +173,14 @@ $(function() { SyncMachineFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Generator"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in SyncMachineFormBase)SyncMachineFormBase ~SyncMachineFormBase() (defined in SyncMachineFormBase)SyncMachineFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_sync_machine_form_base.html b/docs/doxygen/html/class_sync_machine_form_base.html index 479b0e2..2faaecd 100644 --- a/docs/doxygen/html/class_sync_machine_form_base.html +++ b/docs/doxygen/html/class_sync_machine_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: SyncMachineFormBase Class Reference +SyncMachineFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -353,16 +368,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_sync_machine_form_base.js b/docs/doxygen/html/class_sync_machine_form_base.js new file mode 100644 index 0000000..dc389ec --- /dev/null +++ b/docs/doxygen/html/class_sync_machine_form_base.js @@ -0,0 +1,92 @@ +var class_sync_machine_form_base = +[ + [ "SyncMachineFormBase", "class_sync_machine_form_base.html#a0dbd47d991d7750b3368d84b06d3c361", null ], + [ "~SyncMachineFormBase", "class_sync_machine_form_base.html#aeebf10df4806932d008ed063fcbb9730", null ], + [ "GetButtonCancel", "class_sync_machine_form_base.html#a4112b3c631d0ceec0178fc05ea1b120c", null ], + [ "GetButtonOK", "class_sync_machine_form_base.html#a959fea39df34cb124ab6a0ad78d78712", null ], + [ "GetButtonStab", "class_sync_machine_form_base.html#a46fe41a58c06bedeab99cd190921e545", null ], + [ "GetCheckBoxGroundNeutral", "class_sync_machine_form_base.html#aba28c35b0281a75f7ed7b57e6ceed52c", null ], + [ "GetCheckBoxMaxReactive", "class_sync_machine_form_base.html#a9d4d3f8b66519903eaac859b0a5314e9", null ], + [ "GetCheckBoxMinReactive", "class_sync_machine_form_base.html#a76040f3058374ee765d4baa6b1b07df7", null ], + [ "GetCheckBoxUseMachinePower", "class_sync_machine_form_base.html#a230d01b1c29375bdfd3063d9097f9f88", null ], + [ "GetChoiceActivePower", "class_sync_machine_form_base.html#a24d1c0a769de296404d9697ff6bba278", null ], + [ "GetChoiceMaxRectivePower", "class_sync_machine_form_base.html#aab2926cd0e56d2cb283fc74e5aa20f5d", null ], + [ "GetChoiceMinRectivePower", "class_sync_machine_form_base.html#a5fd0741a7ac3e8613cc01a28933b4ea8", null ], + [ "GetChoiceNominalPower", "class_sync_machine_form_base.html#a11249eb9f833be5b91c3f684477be7aa", null ], + [ "GetChoiceReactivePower", "class_sync_machine_form_base.html#ad6e4bc150fc34819eaa2333d1d4cb2b8", null ], + [ "GetNotebook", "class_sync_machine_form_base.html#a9e63594f861d223182734011b24030dc", null ], + [ "GetPanelFault", "class_sync_machine_form_base.html#a102368df6855d5ba275a49ffae593168", null ], + [ "GetPanelGeneral", "class_sync_machine_form_base.html#aa53388881170a5aceb737b0c58315351", null ], + [ "GetStaticTextActivePower", "class_sync_machine_form_base.html#acef45c78c5bbaf1dee5b3abc895e8baf", null ], + [ "GetStaticTextGrdReactance", "class_sync_machine_form_base.html#ae2aa2eb6ad549c8b918389df69b6af36", null ], + [ "GetStaticTextGrdResistance", "class_sync_machine_form_base.html#a7530a37ed44f0732758708aabf7f748c", null ], + [ "GetStaticTextName", "class_sync_machine_form_base.html#ad47c151f396bbad83787de190055ea65", null ], + [ "GetStaticTextNegReactance", "class_sync_machine_form_base.html#a2d7690b252b2b22d5b950d04b9757bb4", null ], + [ "GetStaticTextNegResistance", "class_sync_machine_form_base.html#a0045396673e3acd9fb6a21982b7d7596", null ], + [ "GetStaticTextNominalPower", "class_sync_machine_form_base.html#ad3dab6cd719a3464b4bca0e92063b20c", null ], + [ "GetStaticTextPosReactance", "class_sync_machine_form_base.html#a38a81a205d2112a58084b2d6cc13380a", null ], + [ "GetStaticTextPosResistance", "class_sync_machine_form_base.html#aa2a774f00e17cfec0ef2efccc086b990", null ], + [ "GetStaticTextReactivePower", "class_sync_machine_form_base.html#a4fca8015f54006f8b79faf8bb6d3eb09", null ], + [ "GetStaticTextZeroReactance", "class_sync_machine_form_base.html#ab922478387b0a89d0d5a4ab0d1500a4a", null ], + [ "GetStaticTextZeroResistance", "class_sync_machine_form_base.html#a1c9124d5e5449d28ae8b0af31a651a25", null ], + [ "GetTextCtrlActivePower", "class_sync_machine_form_base.html#a45f5bf24827dfcda99e71f83cfb3fa5b", null ], + [ "GetTextCtrlGrdReactance", "class_sync_machine_form_base.html#a6c2c10dd63d1ace53d882b477d037d75", null ], + [ "GetTextCtrlGrdResistance", "class_sync_machine_form_base.html#a7367ed87a446dc08067af218b8bb2215", null ], + [ "GetTextCtrlMaxRectivePower", "class_sync_machine_form_base.html#a7a035fe2031ab6eae1513f73adabd0c3", null ], + [ "GetTextCtrlMinRectivePower", "class_sync_machine_form_base.html#ad3b5932a14988843670c516861029517", null ], + [ "GetTextCtrlName", "class_sync_machine_form_base.html#a0063a2e8df81e75b32e0fac571c921ae", null ], + [ "GetTextCtrlNegReactance", "class_sync_machine_form_base.html#a5dcc03c3e17f06e0914f3209120a6329", null ], + [ "GetTextCtrlNegResistance", "class_sync_machine_form_base.html#aedf1ffdbc6b3cec7614126d733a12f4a", null ], + [ "GetTextCtrlnominalPower", "class_sync_machine_form_base.html#a681513dcfa84f4aab5803299fd8ae766", null ], + [ "GetTextCtrlPosReactance", "class_sync_machine_form_base.html#ac71f3c270c8c796dd427ee6bd32f1c60", null ], + [ "GetTextCtrlPosResistance", "class_sync_machine_form_base.html#ab221b3b73b231252dfe605efa5268f59", null ], + [ "GetTextCtrlReactivePower", "class_sync_machine_form_base.html#a3f1c8401a39935ef1f589d68af2be97a", null ], + [ "GetTextCtrlZeroReactance", "class_sync_machine_form_base.html#ae0b5c587ae39b5e558bb298eb1f180b0", null ], + [ "GetTextCtrlZeroResistance", "class_sync_machine_form_base.html#ac3d26a423d2fd7243c9361d360b0e6d3", null ], + [ "OnCancelButtonClick", "class_sync_machine_form_base.html#a3aa2c493b7430078bc17a34bb8cc476b", null ], + [ "OnCheckMaxReactive", "class_sync_machine_form_base.html#a3db4e4cfd2fd42f9ce6ab3f72952f6ba", null ], + [ "OnCheckMinReactive", "class_sync_machine_form_base.html#aec2123bb23ad47344e000bf2e460117e", null ], + [ "OnOKButtonClick", "class_sync_machine_form_base.html#aaff0a6a0030e1d0928f6a69f27bb1180", null ], + [ "OnStabilityButtonClick", "class_sync_machine_form_base.html#a5133c66f455c7a5597e72b9b367e0fc8", null ], + [ "m_ButtonCancel", "class_sync_machine_form_base.html#a97509be24b2add48e9d23d5b7020b076", null ], + [ "m_buttonOK", "class_sync_machine_form_base.html#a5735d89d9451e76734467e14779a7ab0", null ], + [ "m_buttonStab", "class_sync_machine_form_base.html#a7c6a05f65b77bdad43f7f92c2b184077", null ], + [ "m_checkBoxGroundNeutral", "class_sync_machine_form_base.html#ae4c8099099059b6e5b8d4791991929c5", null ], + [ "m_checkBoxMaxReactive", "class_sync_machine_form_base.html#a2f22b959d0d97b7ad3ee6de5557ad976", null ], + [ "m_checkBoxMinReactive", "class_sync_machine_form_base.html#a79579458c023bf56d0df6f0356e58c9b", null ], + [ "m_checkBoxUseMachinePower", "class_sync_machine_form_base.html#af6cadcca8459ce7d9e63a43fa739534c", null ], + [ "m_choiceActivePower", "class_sync_machine_form_base.html#a21dbc2fc03aef37e45e1cf3a63da9551", null ], + [ "m_choiceMaxRectivePower", "class_sync_machine_form_base.html#a1ed492083cd0abec88ace3965553308b", null ], + [ "m_choiceMinRectivePower", "class_sync_machine_form_base.html#acc82ce4087f0fcde8e42e2b7f111cfcc", null ], + [ "m_choiceNominalPower", "class_sync_machine_form_base.html#a93fd03ae353875c5e04ccdb57800f821", null ], + [ "m_choiceReactivePower", "class_sync_machine_form_base.html#a6dba8c557f3e20f9982c084e5e5a74e3", null ], + [ "m_notebook", "class_sync_machine_form_base.html#af1160e2fc2e864e792e80e009326e450", null ], + [ "m_panelFault", "class_sync_machine_form_base.html#a05cfcbb0cfa2e3e4ec07a7fba1bdf5d6", null ], + [ "m_panelGeneral", "class_sync_machine_form_base.html#af317bc4378330be0c0f75a79544b2a86", null ], + [ "m_staticTextActivePower", "class_sync_machine_form_base.html#a0c385577ff27d8d9ed1a87a22fce73fd", null ], + [ "m_staticTextGrdReactance", "class_sync_machine_form_base.html#a25dfe7fcf1465ef808fd652a5cd6b2e1", null ], + [ "m_staticTextGrdResistance", "class_sync_machine_form_base.html#ac4a8ed68ffba04940adbf6e3070291a4", null ], + [ "m_staticTextName", "class_sync_machine_form_base.html#ad4789258aa31c9d3c699013ce6f3406f", null ], + [ "m_staticTextNegReactance", "class_sync_machine_form_base.html#ad720f87582570c72919f9094987bda08", null ], + [ "m_staticTextNegResistance", "class_sync_machine_form_base.html#ae69f427b9931e920bcb615a15e74484e", null ], + [ "m_staticTextNominalPower", "class_sync_machine_form_base.html#a9c402618cc9ae56ca3780d7420bf5722", null ], + [ "m_staticTextPosReactance", "class_sync_machine_form_base.html#a6b3830705a2208493714c1abdb8fa0b8", null ], + [ "m_staticTextPosResistance", "class_sync_machine_form_base.html#affe47bc4b7b233dcf04ba9241d2d399f", null ], + [ "m_staticTextReactivePower", "class_sync_machine_form_base.html#a717b5ba1d7ed6b4026b527ce12b2bf41", null ], + [ "m_staticTextZeroReactance", "class_sync_machine_form_base.html#af0a0b3141b006a8578e841ce3c124c70", null ], + [ "m_staticTextZeroResistance", "class_sync_machine_form_base.html#a138fa57d3582962bae07d035e63b586d", null ], + [ "m_textCtrlActivePower", "class_sync_machine_form_base.html#ade8616fc5502cc760867821d52b2a697", null ], + [ "m_textCtrlGrdReactance", "class_sync_machine_form_base.html#ac195ae144957568ef98e5e3f9ba31388", null ], + [ "m_textCtrlGrdResistance", "class_sync_machine_form_base.html#a4ba97e9dc30c24a0daf0ad3771823df0", null ], + [ "m_textCtrlMaxRectivePower", "class_sync_machine_form_base.html#a15b9a853d75e1e59084cf84130bfbbc2", null ], + [ "m_textCtrlMinRectivePower", "class_sync_machine_form_base.html#a5a091446eebeeb3c5116fa87aeda535b", null ], + [ "m_textCtrlName", "class_sync_machine_form_base.html#a4496bfac69450fe5a10baa9dbc4888a6", null ], + [ "m_textCtrlNegReactance", "class_sync_machine_form_base.html#a9fd3b15e35d1753059759886bf918130", null ], + [ "m_textCtrlNegResistance", "class_sync_machine_form_base.html#a7849d5f397e132e164b0c1952ddaa0a3", null ], + [ "m_textCtrlnominalPower", "class_sync_machine_form_base.html#a0580ac7326c742ffe05d7791d83a52d7", null ], + [ "m_textCtrlPosReactance", "class_sync_machine_form_base.html#a6fedceb84c293f69fbcb6290ea529798", null ], + [ "m_textCtrlPosResistance", "class_sync_machine_form_base.html#af83e4364f1f073fcfd96abc6ff38c70e", null ], + [ "m_textCtrlReactivePower", "class_sync_machine_form_base.html#a909b922a1f157d6013a7baaf22796d24", null ], + [ "m_textCtrlZeroReactance", "class_sync_machine_form_base.html#a05439a30d63c78be06d1d046c0cc59d8", null ], + [ "m_textCtrlZeroResistance", "class_sync_machine_form_base.html#aacac6cfe475bf4176dcf746417cdd432", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_sync_motor-members.html b/docs/doxygen/html/class_sync_motor-members.html index 238b7bf..c3e4d64 100644 --- a/docs/doxygen/html/class_sync_motor-members.html +++ b/docs/doxygen/html/class_sync_motor-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SyncMotor Member List
@@ -212,11 +227,14 @@ $(function() { ~PowerElement()PowerElement ~SyncMotor() (defined in SyncMotor)SyncMotor
+ - + diff --git a/docs/doxygen/html/class_sync_motor.html b/docs/doxygen/html/class_sync_motor.html index bdeab6c..914ff54 100644 --- a/docs/doxygen/html/class_sync_motor.html +++ b/docs/doxygen/html/class_sync_motor.html @@ -5,10 +5,17 @@ -PSP-UFU: SyncMotor Class Reference +SyncMotor Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -518,7 +533,10 @@ void UpdateSwitchesPositio void UpdatePowerFlowArrowsPosition ()   -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 110 of file SyncMotor.h.

+

Member Function Documentation

◆ GetContextMenu()

@@ -554,6 +572,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 8 of file SyncMotor.cpp.

+
@@ -584,6 +604,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 108 of file SyncMotor.cpp.

+ @@ -614,6 +636,8 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 115 of file SyncMotor.cpp.

+ @@ -661,6 +685,8 @@ void UpdatePowerFlowArrows

Reimplemented from PowerElement.

+

Definition at line 100 of file SyncMotor.cpp.

+ @@ -709,18 +735,24 @@ void UpdatePowerFlowArrows

Reimplemented from Element.

+

Definition at line 16 of file SyncMotor.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_sync_motor.js b/docs/doxygen/html/class_sync_motor.js new file mode 100644 index 0000000..4ede5a1 --- /dev/null +++ b/docs/doxygen/html/class_sync_motor.js @@ -0,0 +1,16 @@ +var class_sync_motor = +[ + [ "SyncMotor", "class_sync_motor.html#a222d998e274674a0e0ce4a1ed53e8654", null ], + [ "SyncMotor", "class_sync_motor.html#a6068c7d22470a3996df2efda54c24972", null ], + [ "~SyncMotor", "class_sync_motor.html#a435a9cfd24d182d8ab76a856fa4d0bb7", null ], + [ "DrawSymbol", "class_sync_motor.html#a9b42283370ea4d4707b78b97e8c6d864", null ], + [ "GetContextMenu", "class_sync_motor.html#a7b3102220ea5f7e19690af045a6c8278", null ], + [ "GetCopy", "class_sync_motor.html#a035b63a3dfd356daff0bf1cee9672313", null ], + [ "GetElectricalData", "class_sync_motor.html#a0fedd06ef0833ce4d17869343b0810cb", null ], + [ "GetPUElectricalData", "class_sync_motor.html#ae04da3b89a530e1457ff490b22b9f028", null ], + [ "GetTipText", "class_sync_motor.html#a2ab8e43d5452f5d7f9ac375566a65210", null ], + [ "SetElectricalData", "class_sync_motor.html#aca41191da8383d577e3717d3e38cdf2b", null ], + [ "SetNominalVoltage", "class_sync_motor.html#a038162c828595f58782fe97dea2c864d", null ], + [ "ShowForm", "class_sync_motor.html#a3201b22e0271517f5ed3df85da6cee6f", null ], + [ "m_electricalData", "class_sync_motor.html#a12ac76afa871fc58cc0f27332723fc38", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_text-members.html b/docs/doxygen/html/class_text-members.html index 2be2fd3..0e8983b 100644 --- a/docs/doxygen/html/class_text-members.html +++ b/docs/doxygen/html/class_text-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Text Member List
@@ -204,11 +219,14 @@ $(function() { ~GraphicalElement() (defined in GraphicalElement)GraphicalElement ~Text() (defined in Text)Text
+ - + diff --git a/docs/doxygen/html/class_text.html b/docs/doxygen/html/class_text.html index c68f006..e22d119 100644 --- a/docs/doxygen/html/class_text.html +++ b/docs/doxygen/html/class_text.html @@ -5,10 +5,17 @@ -PSP-UFU: Text Class Reference +Text Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -490,7 +505,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 48 of file Text.h.

+

Member Function Documentation

◆ AddParent()

@@ -536,6 +554,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 56 of file Text.h.

+
@@ -572,6 +592,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 30 of file Text.cpp.

+ @@ -602,6 +624,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 950 of file Text.cpp.

+ @@ -638,6 +662,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 75 of file Text.cpp.

+ @@ -674,18 +700,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 145 of file Text.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_text.js b/docs/doxygen/html/class_text.js new file mode 100644 index 0000000..9323fa1 --- /dev/null +++ b/docs/doxygen/html/class_text.js @@ -0,0 +1,45 @@ +var class_text = +[ + [ "Text", "class_text.html#ab3e26143fccc52699bcc5149cae852bc", null ], + [ "Text", "class_text.html#ac8107fb05d19dbaf681af76a91ea739b", null ], + [ "~Text", "class_text.html#a2d49e5c280e205125b149f7777ae30c7", null ], + [ "AddParent", "class_text.html#a4f273ea7008c72533327c25caff2e917", null ], + [ "Contains", "class_text.html#a51c55b9272f653cfc3cdafe665d5dde0", null ], + [ "Draw", "class_text.html#af025bbbb8d5619929df7817f98e23597", null ], + [ "GetCopy", "class_text.html#a06e740065c875633e458c0d8f860c43e", null ], + [ "GetDataType", "class_text.html#a3b050d27140840eadcdce567df42d1e2", null ], + [ "GetDecimalPlaces", "class_text.html#a03c67acf11b90374ded2a8cb8ec1088f", null ], + [ "GetDirection", "class_text.html#a15e4192a98a95baa22fd7a423efb5df9", null ], + [ "GetElement", "class_text.html#aea6772b57e5129e87926b6a35d90f74e", null ], + [ "GetElementNumber", "class_text.html#a340b00ac7a17cd9a1f37f63275715638", null ], + [ "GetElementType", "class_text.html#a80916b96c94d30abd8d76dcbf01d580d", null ], + [ "GetFontSize", "class_text.html#a3f58eb1736e822f96882ded57938dbbd", null ], + [ "GetText", "class_text.html#a9f05c1520fe691515ee15a0b63ca9b28", null ], + [ "GetUnit", "class_text.html#a41eabb28f45124d5da3ec2d703ce9018", null ], + [ "Intersects", "class_text.html#a9923c820cd77b411257ba48beceafeaa", null ], + [ "Rotate", "class_text.html#afe1f86a497f34cee4809cbd7fda24dc3", null ], + [ "SetDataType", "class_text.html#ab3f1487162842f26d6d50b298bb3142d", null ], + [ "SetDecimalPlaces", "class_text.html#a6743a08fc0d1d8b96db99eab48eadb8f", null ], + [ "SetDirection", "class_text.html#abe911e27cd723c0ab51f63d8f27683d1", null ], + [ "SetElement", "class_text.html#ad696293ace753aba46568c76b1adff4e", null ], + [ "SetElementNumber", "class_text.html#aef377b465f00fe9aec996e122c1bb23a", null ], + [ "SetElementType", "class_text.html#aa32f9156fbbe783fab5d90072667e2c3", null ], + [ "SetFontSize", "class_text.html#a0d37b9c067e62e10ebd1f0f74dbb5e66", null ], + [ "SetText", "class_text.html#a255ba9b693f614b16986ac238c28f66e", null ], + [ "SetUnit", "class_text.html#a5eb67f2bf595a78858733c96a5bc05d6", null ], + [ "ShowForm", "class_text.html#ac6383f5f8e424f3c8cf6f37ac9371dcf", null ], + [ "UpdateText", "class_text.html#aa722e4df566518900e4f2cc1f1af2f9c", null ], + [ "m_dataType", "class_text.html#a7e88aef941ba0b3dba303c4370b0bb7a", null ], + [ "m_decimalPlaces", "class_text.html#afcd995d8a0b3921cd33dd305b586e3f7", null ], + [ "m_direction", "class_text.html#ad251de30122437e2a311aa60e8ed390a", null ], + [ "m_element", "class_text.html#a7010e26ac225166d3a7f23118bf45f74", null ], + [ "m_elementNumber", "class_text.html#a8bab7377ac548d1883dcbbe2489c5ff1", null ], + [ "m_elementType", "class_text.html#ac0ab42a8d5145cd1d780f695d0e6e64f", null ], + [ "m_fontSize", "class_text.html#a2f40cb8ed553f1680bf402f9c8e2b541", null ], + [ "m_glString", "class_text.html#a2d07db0c15bdbd9d7056ac794f524f57", null ], + [ "m_glStringArray", "class_text.html#a9836ec9395fdd3e0ce1f1914219fe360", null ], + [ "m_isMultlineText", "class_text.html#a4d1b7f1b53288297dfc8f77be4c37ac4", null ], + [ "m_numberOfLines", "class_text.html#ac045b28b3621a5fddb3e5ac86889bfca", null ], + [ "m_text", "class_text.html#a0d0629dec49cece668f41d2a85062f39", null ], + [ "m_unit", "class_text.html#ac19aa2e04d68965adadee0c67daca99e", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_text_form-members.html b/docs/doxygen/html/class_text_form-members.html index b9e3482..d621a29 100644 --- a/docs/doxygen/html/class_text_form-members.html +++ b/docs/doxygen/html/class_text_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TextForm Member List
@@ -134,11 +149,14 @@ $(function() { ~TextForm() (defined in TextForm)TextFormvirtual ~TextFormBase() (defined in TextFormBase)TextFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_text_form.html b/docs/doxygen/html/class_text_form.html index 5ee328c..828cf76 100644 --- a/docs/doxygen/html/class_text_form.html +++ b/docs/doxygen/html/class_text_form.html @@ -5,10 +5,17 @@ -PSP-UFU: TextForm Class Reference +TextForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -280,16 +295,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 8 of file TextForm.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_text_form.js b/docs/doxygen/html/class_text_form.js new file mode 100644 index 0000000..63d6c57 --- /dev/null +++ b/docs/doxygen/html/class_text_form.js @@ -0,0 +1,26 @@ +var class_text_form = +[ + [ "TextForm", "class_text_form.html#a14ccad2b03e8017c02eb632fbe02df2a", null ], + [ "~TextForm", "class_text_form.html#aa15c4be9ce71f50b6ebdbabf1ddb26bb", null ], + [ "DataTypeChoice", "class_text_form.html#a7cb43566e1ec8bb5d7be0e3ed86f1876", null ], + [ "ElementNumberChoice", "class_text_form.html#ad11e9224ce96616ccc1fae802a65738e", null ], + [ "ElementTypeChoice", "class_text_form.html#ae46074db075dacd127c78b16b0417c3a", null ], + [ "LoadChoices", "class_text_form.html#a4bbd73071ce20cf1c805139af58d2e77", null ], + [ "OnCancelButtonClick", "class_text_form.html#ab9cad6d1dc2ea1406ca6f9b44ecd46c3", null ], + [ "OnElementChoiceSelected", "class_text_form.html#a098066e96da254f13b5cd2b0e8977e43", null ], + [ "OnFromBusChoiceSelected", "class_text_form.html#a2946f7590a66a55d3ae63a6def86a8f3", null ], + [ "OnNameChoiceSelected", "class_text_form.html#aae058177645a7b974003cf7ba3957e62", null ], + [ "OnOKButtonClick", "class_text_form.html#a21a3fa61ce11a198e4a0cf086a85e61b", null ], + [ "OnTextEnter", "class_text_form.html#a29a135685c4f5f6801abc50ab48d97f9", null ], + [ "OnToBusChoiceSelected", "class_text_form.html#a3b32cfbb221700c5cde1146dd9ba0ac3", null ], + [ "OnTypeChoiceSelected", "class_text_form.html#a644cc688a5f54e202c451f403174a725", null ], + [ "OnUnitChoiceSelected", "class_text_form.html#a53d385f26fb4bf90e52db6e4c1d3b49a", null ], + [ "Preview", "class_text_form.html#a05f71762d18640d7ee7b85cf8cfde0ee", null ], + [ "UnitChoice", "class_text_form.html#a55358259e75a1e262aa6f2f58dc70c80", null ], + [ "ValidateData", "class_text_form.html#a553bf0b435f0d59d4c86ea7a004aab60", null ], + [ "m_allElements", "class_text_form.html#a4e3ecb63b41fe8e1592ba1bdb57cf89f", null ], + [ "m_parent", "class_text_form.html#af96c830fe67da49fac36a7df58f0728b", null ], + [ "m_systemPowerBase", "class_text_form.html#adc28fed9ecb5fb32957737af4e7827dc", null ], + [ "m_text", "class_text_form.html#a1268fce1f817bd9ff0626a24c0aabda7", null ], + [ "m_textToEdit", "class_text_form.html#aad06ea6fcaec43465ea4e0aa7bd3b61d", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_text_form_base-members.html b/docs/doxygen/html/class_text_form_base-members.html index 299ee26..d069a72 100644 --- a/docs/doxygen/html/class_text_form_base-members.html +++ b/docs/doxygen/html/class_text_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TextFormBase Member List
@@ -120,11 +135,14 @@ $(function() { TextFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Text"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in TextFormBase)TextFormBase ~TextFormBase() (defined in TextFormBase)TextFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_text_form_base.html b/docs/doxygen/html/class_text_form_base.html index d1ed842..43812a4 100644 --- a/docs/doxygen/html/class_text_form_base.html +++ b/docs/doxygen/html/class_text_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: TextFormBase Class Reference +TextFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -239,16 +254,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_text_form_base.js b/docs/doxygen/html/class_text_form_base.js new file mode 100644 index 0000000..ed48fa7 --- /dev/null +++ b/docs/doxygen/html/class_text_form_base.js @@ -0,0 +1,54 @@ +var class_text_form_base = +[ + [ "TextFormBase", "class_text_form_base.html#aa7bce0b447d510e11c52344e26019417", null ], + [ "~TextFormBase", "class_text_form_base.html#aca2e5f72c0d399f1e48f35f129b94b29", null ], + [ "GetButtonCancel", "class_text_form_base.html#ab486d5c675ebde25f89c763378b19f60", null ], + [ "GetButtonOK", "class_text_form_base.html#aadf4ac576b11c235b43359df5e298942", null ], + [ "GetChoiceElement", "class_text_form_base.html#a6610d9f72f598b3f4e8f86aad7980c74", null ], + [ "GetChoiceName", "class_text_form_base.html#a9a2f9ad1a172ffed751944231cf26332", null ], + [ "GetChoiceTextFromBus", "class_text_form_base.html#a87c7b2df984b9fa32c99bc18b6207342", null ], + [ "GetChoiceTextToBus", "class_text_form_base.html#a6e8c2c55fcac20adba14d0ee92ee6560", null ], + [ "GetChoiceTextType", "class_text_form_base.html#ae70c96bb398576eff2ad8d151833c179", null ], + [ "GetChoiceTextUnit", "class_text_form_base.html#af3457265fe6266b0ef61d30790fb33eb", null ], + [ "GetNotebook", "class_text_form_base.html#a279db3897b91ff97ebdd410169b8c13d", null ], + [ "GetPanelGeneral", "class_text_form_base.html#a06b80e25d042052ef8b5ebbcf39a82e6", null ], + [ "GetStaticTextDecimal", "class_text_form_base.html#acc40a994d976ea04f66dbb6790b5d7a5", null ], + [ "GetStaticTextElement", "class_text_form_base.html#addfe9749ca7aa07c2d14bbddbe8417c5", null ], + [ "GetStaticTextFromBus", "class_text_form_base.html#a29c62763df7c88f78a1fb8b4c65e0383", null ], + [ "GetStaticTextName", "class_text_form_base.html#afc1a68f987a02df5df3c927351020450", null ], + [ "GetStaticTextPreview", "class_text_form_base.html#a47a05d0cd3b24d516d7cd73e6f1801b6", null ], + [ "GetStaticTextToBus", "class_text_form_base.html#a3dad92d1a04122535626e259c24391ec", null ], + [ "GetStaticTextType", "class_text_form_base.html#ac7dc780d44ca9c55d10a0d1012a1f8ba", null ], + [ "GetStaticTextUnit", "class_text_form_base.html#aaf38921dfe3bee5a769e906dbc6843f1", null ], + [ "GetTextCtrlDecimal", "class_text_form_base.html#a1822a077536adfdfdbf7ba7853e2917c", null ], + [ "GetTextCtrlPreview", "class_text_form_base.html#a7334788ba4af44ccb01547c348d2310c", null ], + [ "OnCancelButtonClick", "class_text_form_base.html#a0df65c65bf9926eaa20792d803762fd2", null ], + [ "OnElementChoiceSelected", "class_text_form_base.html#a6f796e5b87ec48aa812a401262a9fe93", null ], + [ "OnFromBusChoiceSelected", "class_text_form_base.html#a0f854e9b93a101684308930464799a3c", null ], + [ "OnNameChoiceSelected", "class_text_form_base.html#a0ff115ed58de4b9f83e8ac18fc1c11cc", null ], + [ "OnOKButtonClick", "class_text_form_base.html#a9e96d1d31cfb24ddb39ff24e366cbb1a", null ], + [ "OnTextEnter", "class_text_form_base.html#a20e495f9fe62e0eaee49ea2cfb7661fa", null ], + [ "OnToBusChoiceSelected", "class_text_form_base.html#adf2b35e57ba91096b1de72f761e95fa0", null ], + [ "OnTypeChoiceSelected", "class_text_form_base.html#a73e92b286d13f68c697335df49c33b40", null ], + [ "OnUnitChoiceSelected", "class_text_form_base.html#a3eb125e5242692bcff954c0706634833", null ], + [ "m_ButtonCancel", "class_text_form_base.html#ab4220dcb19935bebb8aefb2c486378ef", null ], + [ "m_buttonOK", "class_text_form_base.html#a9f865ba5241dc9ba607e514a4b5a0e0d", null ], + [ "m_choiceElement", "class_text_form_base.html#ad1edec95968fef33c94f96a2fe76e2e5", null ], + [ "m_choiceName", "class_text_form_base.html#a97e9f9088c396c51645763f65f1fcae9", null ], + [ "m_choiceTextFromBus", "class_text_form_base.html#ae9e39d45b4754ff1df2c1e0e552dd982", null ], + [ "m_choiceTextToBus", "class_text_form_base.html#af34bc2311411715448bd41378f8a6895", null ], + [ "m_choiceTextType", "class_text_form_base.html#a4ca5f55e86ab0456c04e521094857369", null ], + [ "m_choiceTextUnit", "class_text_form_base.html#a7464a3fc135d9a85ecb75c42f50bef0e", null ], + [ "m_notebook", "class_text_form_base.html#a28448ef3a106719e2863660bd9230bdc", null ], + [ "m_panelGeneral", "class_text_form_base.html#a4300bcea7b6ffc6c8c0e278908c9bf5a", null ], + [ "m_staticTextDecimal", "class_text_form_base.html#a6ac5da788492cc037aec6b6a9dcbd4a8", null ], + [ "m_staticTextElement", "class_text_form_base.html#a7edc22afae66bc4e91461584668a7d64", null ], + [ "m_staticTextFromBus", "class_text_form_base.html#a4c72fb0574b2bd9214140df806848f02", null ], + [ "m_staticTextName", "class_text_form_base.html#a4def79e764545dc050b355da45b091d1", null ], + [ "m_staticTextPreview", "class_text_form_base.html#ae723a4d74db7989a63ccd46eedc44bff", null ], + [ "m_staticTextToBus", "class_text_form_base.html#ac88b09dd08a5b01b69c04e644d25163a", null ], + [ "m_staticTextType", "class_text_form_base.html#a98382c1f1b903db868557cc3ab305143", null ], + [ "m_staticTextUnit", "class_text_form_base.html#a39677cde5e236fd32257a86543e8a3f5", null ], + [ "m_textCtrlDecimal", "class_text_form_base.html#a8d9c9eadf9e724d7c7c1fc9a6b5e09d6", null ], + [ "m_textCtrlPreview", "class_text_form_base.html#abcde3d462cfa4632198b2dd0f5835041", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_text_g_l_drawable-members.html b/docs/doxygen/html/class_text_g_l_drawable-members.html index 2e5473d..3bf363e 100644 --- a/docs/doxygen/html/class_text_g_l_drawable-members.html +++ b/docs/doxygen/html/class_text_g_l_drawable-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TextGLDrawable Member List
@@ -98,11 +113,14 @@ $(function() { yflip (defined in TextGLDrawable)TextGLDrawableprotected yscale (defined in TextGLDrawable)TextGLDrawableprotected
+ - + diff --git a/docs/doxygen/html/class_text_g_l_drawable.html b/docs/doxygen/html/class_text_g_l_drawable.html index 6ada767..db7d5ce 100644 --- a/docs/doxygen/html/class_text_g_l_drawable.html +++ b/docs/doxygen/html/class_text_g_l_drawable.html @@ -5,10 +5,17 @@ -PSP-UFU: TextGLDrawable Class Reference +TextGLDrawable Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -179,6 +194,8 @@ class wxGLStringNumber

Detailed Description

base class for renderable elements. You won't create this one directly, but may use its public members from wxGLString since it inherits from TextGLDrawable. This class will be useful if you wish to apply effects to the text like rotation or scaling.

+ +

Definition at line 19 of file wxGLString.h.

Member Function Documentation

◆ getheight()

@@ -204,6 +221,8 @@ class wxGLStringNumber

returns the height of this element

+

Definition at line 57 of file wxGLString.h.

+
@@ -230,6 +249,8 @@ class wxGLStringNumber

returns the width of this element

+

Definition at line 55 of file wxGLString.h.

+
@@ -249,6 +270,8 @@ class wxGLStringNumber

rotate the rendering by 'angle' degrees

+

Definition at line 135 of file wxGLString.cpp.

+
@@ -278,6 +301,8 @@ class wxGLStringNumber

scale the rendering , horizontally and vertically (allows stretching)

+

Definition at line 122 of file wxGLString.cpp.

+
@@ -297,6 +322,8 @@ class wxGLStringNumber

scale the rendering and keep the same aspect ratio

+

Definition at line 128 of file wxGLString.cpp.

+
@@ -326,18 +353,24 @@ class wxGLStringNumber

allows you to flip the rendering vertically and/or horizontally

+

Definition at line 110 of file wxGLString.cpp.

+

The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_text_g_l_drawable.js b/docs/doxygen/html/class_text_g_l_drawable.js new file mode 100644 index 0000000..6da9588 --- /dev/null +++ b/docs/doxygen/html/class_text_g_l_drawable.js @@ -0,0 +1,32 @@ +var class_text_g_l_drawable = +[ + [ "TextGLDrawable", "class_text_g_l_drawable.html#a2df771de3dd7c16f1a88540ac6620ab4", null ], + [ "getheight", "class_text_g_l_drawable.html#a51bdeb52e839fc941ed3803f557f7911", null ], + [ "getWidth", "class_text_g_l_drawable.html#a965ac9bf245f1979a080193986874f18", null ], + [ "move", "class_text_g_l_drawable.html#af9bcd8c0e163302429ca8a17f587e8ec", null ], + [ "render", "class_text_g_l_drawable.html#a2a8aa1255ae9546618d8a30051882c18", null ], + [ "rotate", "class_text_g_l_drawable.html#a328d55b4c8e3684a1093872cad1d41bb", null ], + [ "scale", "class_text_g_l_drawable.html#a7beff45d550827ce4e2f3335585a4f42", null ], + [ "scale", "class_text_g_l_drawable.html#a385db5bcf159982ba006a8dd97ee1383", null ], + [ "setFlip", "class_text_g_l_drawable.html#a93b56ed45e3097129d4682c735a23fcf", null ], + [ "setImage", "class_text_g_l_drawable.html#a25d765828a9ecd9629ff9ccd4a66fc43", null ], + [ "wxGLString", "class_text_g_l_drawable.html#a4a20344804fa6b34c02a7fd55ad96314", null ], + [ "wxGLStringArray", "class_text_g_l_drawable.html#a61de4c6cec06534405b7ecc292b9bd28", null ], + [ "wxGLStringNumber", "class_text_g_l_drawable.html#a8894b391174ffe37d1d372b8c4a31fe7", null ], + [ "angle", "class_text_g_l_drawable.html#ae05f3bb671317d687421226c41277553", null ], + [ "h", "class_text_g_l_drawable.html#a816623b682408889fa6893b41782453b", null ], + [ "image", "class_text_g_l_drawable.html#a4894c656b1c7016c8c8176cff2f8c66f", null ], + [ "tex_coord_x1", "class_text_g_l_drawable.html#a30803a43c1f1ee4ae35900bc4f6a5a3c", null ], + [ "tex_coord_x2", "class_text_g_l_drawable.html#af24996577c26268a514f2ee43e72ff4d", null ], + [ "tex_coord_y1", "class_text_g_l_drawable.html#a12875f8cc1cdb675353c6b12112d05fe", null ], + [ "tex_coord_y2", "class_text_g_l_drawable.html#a3694676b20848e16dedf11569639216c", null ], + [ "texh", "class_text_g_l_drawable.html#a847984364f55bfd063419a359d9acc91", null ], + [ "texw", "class_text_g_l_drawable.html#ad84933ea0f396ee9c18d463d22e4c3f8", null ], + [ "w", "class_text_g_l_drawable.html#ab1b363afde75d9f53aedea103c24f287", null ], + [ "x", "class_text_g_l_drawable.html#a85eb711312c444322767319bd23a7795", null ], + [ "xflip", "class_text_g_l_drawable.html#a44b1a0129b8da33b2be9a1745415de93", null ], + [ "xscale", "class_text_g_l_drawable.html#a9b461935514f4da4805889fdcff48be6", null ], + [ "y", "class_text_g_l_drawable.html#a30a8a416b10b04e877a0ae10528150d0", null ], + [ "yflip", "class_text_g_l_drawable.html#acba312735b20ed532c80992e4777f262", null ], + [ "yscale", "class_text_g_l_drawable.html#a002950e57ddee2b366a428cf166d265a", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_text_texture-members.html b/docs/doxygen/html/class_text_texture-members.html index b4082d3..773e129 100644 --- a/docs/doxygen/html/class_text_texture-members.html +++ b/docs/doxygen/html/class_text_texture-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TextTexture Member List
@@ -77,11 +92,14 @@ $(function() { wxGLStringNumber (defined in TextTexture)TextTexturefriend ~TextTexture() (defined in TextTexture)TextTexture
+ - + diff --git a/docs/doxygen/html/class_text_texture.html b/docs/doxygen/html/class_text_texture.html index 2c68314..79a75f1 100644 --- a/docs/doxygen/html/class_text_texture.html +++ b/docs/doxygen/html/class_text_texture.html @@ -5,10 +5,17 @@ -PSP-UFU: TextTexture Class Reference +TextTexture Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Protected Member Functions | @@ -94,15 +109,22 @@ class wxGLStringArray< class wxGLStringNumber   -
The documentation for this class was generated from the following file:
    -
  • Project/wxGLString.cpp
  • +

    Detailed Description

    +
    +

    Definition at line 62 of file wxGLString.cpp.

    +

    The documentation for this class was generated from the following file:
+
- + diff --git a/docs/doxygen/html/class_text_texture.js b/docs/doxygen/html/class_text_texture.js new file mode 100644 index 0000000..02d04f6 --- /dev/null +++ b/docs/doxygen/html/class_text_texture.js @@ -0,0 +1,11 @@ +var class_text_texture = +[ + [ "TextTexture", "class_text_texture.html#a028855c450db4925652071c212cce8c7", null ], + [ "TextTexture", "class_text_texture.html#a13d64c6afe292be4ccca8294dd501f0f", null ], + [ "~TextTexture", "class_text_texture.html#a5819c3917f7be6e1fdd1f5d1b617dd2a", null ], + [ "getID", "class_text_texture.html#aa7ab43a57d9767d92ee60933977d66ac", null ], + [ "load", "class_text_texture.html#ac663a01462a341a279cc4cdf0c500fba", null ], + [ "wxGLString", "class_text_texture.html#a4a20344804fa6b34c02a7fd55ad96314", null ], + [ "wxGLStringArray", "class_text_texture.html#a61de4c6cec06534405b7ecc292b9bd28", null ], + [ "wxGLStringNumber", "class_text_texture.html#a8894b391174ffe37d1d372b8c4a31fe7", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_transfer_function-members.html b/docs/doxygen/html/class_transfer_function-members.html index 7c7a87b..7739af8 100644 --- a/docs/doxygen/html/class_transfer_function-members.html +++ b/docs/doxygen/html/class_transfer_function-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TransferFunction Member List
@@ -203,11 +218,14 @@ $(function() { ~Element()Elementvirtual ~TransferFunction() (defined in TransferFunction)TransferFunction
+ - + diff --git a/docs/doxygen/html/class_transfer_function.html b/docs/doxygen/html/class_transfer_function.html index a7d268d..2e46a64 100644 --- a/docs/doxygen/html/class_transfer_function.html +++ b/docs/doxygen/html/class_transfer_function.html @@ -5,10 +5,17 @@ -PSP-UFU: TransferFunction Class Reference +TransferFunction Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Classes | @@ -505,7 +520,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 11 of file TransferFunction.h.

+

Member Function Documentation

◆ Contains()

@@ -540,6 +558,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 25 of file TransferFunction.h.

+
@@ -587,6 +607,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 35 of file TransferFunction.cpp.

+ @@ -617,6 +639,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 359 of file TransferFunction.cpp.

+ @@ -653,6 +677,8 @@ Additional Inherited Members

Implements Element.

+

Definition at line 26 of file TransferFunction.h.

+ @@ -689,6 +715,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 220 of file TransferFunction.cpp.

+ @@ -737,18 +765,24 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 209 of file TransferFunction.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_transfer_function.js b/docs/doxygen/html/class_transfer_function.js new file mode 100644 index 0000000..ca59741 --- /dev/null +++ b/docs/doxygen/html/class_transfer_function.js @@ -0,0 +1,35 @@ +var class_transfer_function = +[ + [ "SpaceState", "struct_transfer_function_1_1_space_state.html", "struct_transfer_function_1_1_space_state" ], + [ "TransferFunction", "class_transfer_function.html#ab736fb79486407e626364e1410c263f3", null ], + [ "~TransferFunction", "class_transfer_function.html#aba60b46f243b3b0c8e9ccdeb391cba27", null ], + [ "CalculateSpaceState", "class_transfer_function.html#a5f09dd8e5c016a90c69a8e38ef302c8a", null ], + [ "Contains", "class_transfer_function.html#a6a4415d2cf0af290494ea30d586cc187", null ], + [ "Draw", "class_transfer_function.html#a0cd1dec850117741abb04b608c7b3f1e", null ], + [ "GetCopy", "class_transfer_function.html#a3312f7e9499aa99742093d3b60547862", null ], + [ "GetDenominator", "class_transfer_function.html#a70e6b38f9b4a45a29b3b2eb4947e8e2f", null ], + [ "GetNumerator", "class_transfer_function.html#a39e20dc5b20657d882fb820ee1178eee", null ], + [ "GetSpaceState", "class_transfer_function.html#aee6c1440c4f527b7a839e07474a381f0", null ], + [ "GetSuperscriptNumber", "class_transfer_function.html#a630099b92667aa3e4b455fba234d4eda", null ], + [ "GetTFString", "class_transfer_function.html#aec2d0676d112ccf849c0d3d6f3fee461", null ], + [ "Intersects", "class_transfer_function.html#a6325dec72c7b85178f490c5cf85229bd", null ], + [ "Rotate", "class_transfer_function.html#ae145b86db1450a19a3ed32084ee60423", null ], + [ "SetDenominator", "class_transfer_function.html#ad5e7f4e17ce8ca7d3ab4a2ea2b688438", null ], + [ "SetNumerator", "class_transfer_function.html#a0bc542d565e75938699d5e03f3a5e6f0", null ], + [ "SetText", "class_transfer_function.html#ae1ea0f8351796e932609e1c9494b5e76", null ], + [ "ShowForm", "class_transfer_function.html#afe15de93ab4f93032560a6139091ef10", null ], + [ "Solve", "class_transfer_function.html#ab23ed101f7d4e953e4df0d4d480d9798", null ], + [ "UpdateText", "class_transfer_function.html#ad10adb7a94ebc62349cca7b56b7cadb9", null ], + [ "UpdateTFText", "class_transfer_function.html#af8c3f06742a7ffc9dabc0d4f5dbc98c3", null ], + [ "m_denominator", "class_transfer_function.html#aa16c1f3e18149c153d78e0627a5e9972", null ], + [ "m_dx", "class_transfer_function.html#a39ec7eda2cc3737a1502af8bdf2a9bf5", null ], + [ "m_error", "class_transfer_function.html#a0cd48b67fbcc1afc400bdf6cadb824b4", null ], + [ "m_fontSize", "class_transfer_function.html#a4d3e5afb04d7196647814339cd15bc3a", null ], + [ "m_glStringDen", "class_transfer_function.html#a6b66df900c86cfb848d2e08591a4a0c9", null ], + [ "m_glStringNum", "class_transfer_function.html#ad708802d32428ddb20d33910bf348b55", null ], + [ "m_maxIteration", "class_transfer_function.html#a966c99fbd03b89662e0a340b7cffe717", null ], + [ "m_numerator", "class_transfer_function.html#a0d4b3da271ecef4ec764a9f26b1ee488", null ], + [ "m_ss", "class_transfer_function.html#ac6755bf723a1dfa90ee8254471136429", null ], + [ "m_supNumber", "class_transfer_function.html#aee524d83c25209202ba2b1e8a600ef21", null ], + [ "m_x", "class_transfer_function.html#a96c6acddec588288c5883416ec926abe", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_transfer_function_form-members.html b/docs/doxygen/html/class_transfer_function_form-members.html index 79bb97e..8703f65 100644 --- a/docs/doxygen/html/class_transfer_function_form-members.html +++ b/docs/doxygen/html/class_transfer_function_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TransferFunctionForm Member List
@@ -95,11 +110,14 @@ $(function() { ~TransferFunctionForm() (defined in TransferFunctionForm)TransferFunctionFormvirtual ~TransferFunctionFormBase() (defined in TransferFunctionFormBase)TransferFunctionFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_transfer_function_form.html b/docs/doxygen/html/class_transfer_function_form.html index 1adf4ac..174076e 100644 --- a/docs/doxygen/html/class_transfer_function_form.html +++ b/docs/doxygen/html/class_transfer_function_form.html @@ -5,10 +5,17 @@ -PSP-UFU: TransferFunctionForm Class Reference +TransferFunctionForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -163,16 +178,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_transfer_function_form.js b/docs/doxygen/html/class_transfer_function_form.js new file mode 100644 index 0000000..19bf415 --- /dev/null +++ b/docs/doxygen/html/class_transfer_function_form.js @@ -0,0 +1,11 @@ +var class_transfer_function_form = +[ + [ "TransferFunctionForm", "class_transfer_function_form.html#ab3973fc6d0585be5570682674041d21d", null ], + [ "~TransferFunctionForm", "class_transfer_function_form.html#a45b34337d0dbef9df6e4b35f169ccf98", null ], + [ "LoadTFData", "class_transfer_function_form.html#a681698673fea3d716ee383ae3d9d28eb", null ], + [ "OnCancelClick", "class_transfer_function_form.html#a1c565e92a52dd6e710db7ecf92083f37", null ], + [ "OnOKClick", "class_transfer_function_form.html#a27c6a37b520b4e3043ae492d9112a9df", null ], + [ "ValidateData", "class_transfer_function_form.html#a546e732b865a8054231432df595246c2", null ], + [ "m_parent", "class_transfer_function_form.html#a38f692bf981cfb865a6d8d2528aa3b56", null ], + [ "m_tf", "class_transfer_function_form.html#a87648ffa2b1d88ff18135f1dce46ac97", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_transfer_function_form_base-members.html b/docs/doxygen/html/class_transfer_function_form_base-members.html index c935662..20f3a27 100644 --- a/docs/doxygen/html/class_transfer_function_form_base-members.html +++ b/docs/doxygen/html/class_transfer_function_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TransferFunctionFormBase Member List
@@ -89,11 +104,14 @@ $(function() { TransferFunctionFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Transfer function"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in TransferFunctionFormBase)TransferFunctionFormBase ~TransferFunctionFormBase() (defined in TransferFunctionFormBase)TransferFunctionFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_transfer_function_form_base.html b/docs/doxygen/html/class_transfer_function_form_base.html index 8cb5567..69aec4e 100644 --- a/docs/doxygen/html/class_transfer_function_form_base.html +++ b/docs/doxygen/html/class_transfer_function_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: TransferFunctionFormBase Class Reference +TransferFunctionFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -146,16 +161,23 @@ wxButton * m_buttonOK< wxButton * m_ButtonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_transfer_function_form_base.js b/docs/doxygen/html/class_transfer_function_form_base.js new file mode 100644 index 0000000..fa002c6 --- /dev/null +++ b/docs/doxygen/html/class_transfer_function_form_base.js @@ -0,0 +1,23 @@ +var class_transfer_function_form_base = +[ + [ "TransferFunctionFormBase", "class_transfer_function_form_base.html#a4ce3369a8557eced7b42b878016c9331", null ], + [ "~TransferFunctionFormBase", "class_transfer_function_form_base.html#a7f5da321a6297086cc6f5c3ea85be7f0", null ], + [ "GetButtonCancel", "class_transfer_function_form_base.html#ae208b4b2e42f9d9e021e1db483b3c481", null ], + [ "GetButtonOK", "class_transfer_function_form_base.html#a3dfe2400369e1ca1416b26f265f0ae4b", null ], + [ "GetNotebook", "class_transfer_function_form_base.html#a008be2fa5d9b01b841ae8689606d9b5b", null ], + [ "GetPanelGeneral", "class_transfer_function_form_base.html#a2f8ad120d19ede3c79a2dbee404927d7", null ], + [ "GetStaticTextDenominator", "class_transfer_function_form_base.html#a8618a2b5585ac0b665b8fdc3c9ceeae3", null ], + [ "GetStaticTextNumerator", "class_transfer_function_form_base.html#afba56679122dbb55dce1ebf34482e519", null ], + [ "GetTextCtrlDenominator", "class_transfer_function_form_base.html#aa4603a3f49179e61205862faa962ef4b", null ], + [ "GetTextCtrlNumerator", "class_transfer_function_form_base.html#ab70bd59a35d2c588291e0fd65b7b043c", null ], + [ "OnCancelClick", "class_transfer_function_form_base.html#aa8839934e71bf16b63a5cff34679be4b", null ], + [ "OnOKClick", "class_transfer_function_form_base.html#a93731803bc32f17be6ae889182ab5bee", null ], + [ "m_ButtonCancel", "class_transfer_function_form_base.html#ae1a557b170a2966b73a87d6ffd6eaf0e", null ], + [ "m_buttonOK", "class_transfer_function_form_base.html#a47346c56b626d41c6ddec9fc26060f6d", null ], + [ "m_notebook", "class_transfer_function_form_base.html#a1be29f1cc2a4ecd64b5d368cb7a9dd8c", null ], + [ "m_panelGeneral", "class_transfer_function_form_base.html#a2be269d1b27821fd3bda48c34d2382be", null ], + [ "m_staticTextDenominator", "class_transfer_function_form_base.html#a0016c5144bc331f6348bea935bb8cc55", null ], + [ "m_staticTextNumerator", "class_transfer_function_form_base.html#afca69d20a9b8f361e074ab5553f016b0", null ], + [ "m_textCtrlDenominator", "class_transfer_function_form_base.html#a049b09e73946dcca6306d72770e097fd", null ], + [ "m_textCtrlNumerator", "class_transfer_function_form_base.html#a1d5de82c329970e967c75de0f99778ef", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_transformer-members.html b/docs/doxygen/html/class_transformer-members.html index caf19ad..14748cc 100644 --- a/docs/doxygen/html/class_transformer-members.html +++ b/docs/doxygen/html/class_transformer-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Transformer Member List
@@ -205,11 +220,14 @@ $(function() { ~PowerElement()PowerElement ~Transformer() (defined in Transformer)Transformervirtual
+ - + diff --git a/docs/doxygen/html/class_transformer.html b/docs/doxygen/html/class_transformer.html index 99e40f3..37e6e9e 100644 --- a/docs/doxygen/html/class_transformer.html +++ b/docs/doxygen/html/class_transformer.html @@ -5,10 +5,17 @@ -PSP-UFU: Transformer Class Reference +Transformer Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -507,7 +522,10 @@ Additional Inherited Members  Convert a double value to string. More...
  -

Member Function Documentation

+

Detailed Description

+
+

Definition at line 54 of file Transformer.h.

+

Member Function Documentation

◆ AddParent()

@@ -553,6 +571,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 22 of file Transformer.cpp.

+
@@ -589,6 +609,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 88 of file Transformer.cpp.

+ @@ -636,6 +658,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 94 of file Transformer.cpp.

+ @@ -673,6 +697,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 256 of file Transformer.cpp.

+ @@ -703,6 +729,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 394 of file Transformer.cpp.

+ @@ -733,6 +761,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 401 of file Transformer.cpp.

+ @@ -769,6 +799,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 173 of file Transformer.cpp.

+ @@ -805,6 +837,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 195 of file Transformer.cpp.

+ @@ -852,6 +886,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 215 of file Transformer.cpp.

+ @@ -888,6 +924,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 179 of file Transformer.cpp.

+ @@ -935,6 +973,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 310 of file Transformer.cpp.

+ @@ -972,6 +1012,8 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 324 of file Transformer.cpp.

+ @@ -1019,6 +1061,8 @@ Additional Inherited Members

Reimplemented from PowerElement.

+

Definition at line 274 of file Transformer.cpp.

+ @@ -1055,6 +1099,8 @@ Additional Inherited Members

Reimplemented from PowerElement.

+

Definition at line 388 of file Transformer.cpp.

+ @@ -1103,6 +1149,8 @@ Additional Inherited Members

Reimplemented from Element.

+

Definition at line 263 of file Transformer.cpp.

+ @@ -1139,18 +1187,24 @@ Additional Inherited Members

Reimplemented from Branch.

+

Definition at line 249 of file Transformer.cpp.

+
The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/class_transformer.js b/docs/doxygen/html/class_transformer.js new file mode 100644 index 0000000..e9be964 --- /dev/null +++ b/docs/doxygen/html/class_transformer.js @@ -0,0 +1,27 @@ +var class_transformer = +[ + [ "Transformer", "class_transformer.html#a7d56456dadf3aa0bc60f59e7e7eda7a2", null ], + [ "Transformer", "class_transformer.html#a312583e28394926c746f133137345c9d", null ], + [ "~Transformer", "class_transformer.html#ae2f7b06be0f585ab586ee501ad59285c", null ], + [ "AddParent", "class_transformer.html#aea52a4562ec5b4a79bf82b8ede32ecc6", null ], + [ "Contains", "class_transformer.html#a327ff3cf9194c18049e4feac6761ebc0", null ], + [ "Draw", "class_transformer.html#a1e9e9ba48aa76bdd2ff2e973014ad422", null ], + [ "GetContextMenu", "class_transformer.html#adfe51a2198cfc10e1095af9c034681bd", null ], + [ "GetCopy", "class_transformer.html#a286bcc94f7202a6ff81b66707424a9bd", null ], + [ "GetElectricalData", "class_transformer.html#a504e72295ea190d9956c5055645a96d1", null ], + [ "GetPUElectricalData", "class_transformer.html#a4e70f875967e60d8202fb6e3c6e3f79a", null ], + [ "GetTipText", "class_transformer.html#a169064f996341f8f8b6881c6a3909f0b", null ], + [ "Intersects", "class_transformer.html#a39b58fcf230970601c5d77c088559731", null ], + [ "Move", "class_transformer.html#a67f1e2686932700fe8a83fdc232ea1e8", null ], + [ "MoveNode", "class_transformer.html#a9652232a076cca0fe3753477ec88f63a", null ], + [ "Rotate", "class_transformer.html#aaa6cc999eb77a94dafaec5debb4db3de", null ], + [ "RotateNode", "class_transformer.html#adf0b20286f3de359346b8877d65c1996", null ], + [ "SetElectricaData", "class_transformer.html#a31a3dc18c483d67b4a03038563ecce38", null ], + [ "SetNodeParent", "class_transformer.html#a4f9137e6190fb630167f671a0da51ab6", null ], + [ "SetNominalVoltage", "class_transformer.html#a7e3cd54e20d795ab9b0b8533ce03b728", null ], + [ "SetPowerFlowDirection", "class_transformer.html#a328c419af15701734168c8db62eefa36", null ], + [ "ShowForm", "class_transformer.html#acb55f182a7f6d7af0feb6a94cb62af4f", null ], + [ "StartMove", "class_transformer.html#a0395a11dc8173e511a0596ac96bf05e5", null ], + [ "UpdatePowerFlowArrowsPosition", "class_transformer.html#aa1f87f24c062258b1437be648032bb6e", null ], + [ "m_electricalData", "class_transformer.html#ad2f2bcd287bd3bb3221ab584f2c2fc90", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_transformer_form-members.html b/docs/doxygen/html/class_transformer_form-members.html index ee60472..c7189d5 100644 --- a/docs/doxygen/html/class_transformer_form-members.html +++ b/docs/doxygen/html/class_transformer_form-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TransformerForm Member List
@@ -163,11 +178,14 @@ $(function() { ~TransformerForm() (defined in TransformerForm)TransformerFormvirtual ~TransformerFormBase() (defined in TransformerFormBase)TransformerFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_transformer_form.html b/docs/doxygen/html/class_transformer_form.html index 21ba414..4943f62 100644 --- a/docs/doxygen/html/class_transformer_form.html +++ b/docs/doxygen/html/class_transformer_form.html @@ -5,10 +5,17 @@ -PSP-UFU: TransformerForm Class Reference +TransformerForm Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -367,16 +382,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_transformer_form.js b/docs/doxygen/html/class_transformer_form.js new file mode 100644 index 0000000..514c37c --- /dev/null +++ b/docs/doxygen/html/class_transformer_form.js @@ -0,0 +1,11 @@ +var class_transformer_form = +[ + [ "TransformerForm", "class_transformer_form.html#a8cac1e9fdb77f140db36c4efe2e0555c", null ], + [ "~TransformerForm", "class_transformer_form.html#af9ab8a52f336a931e5e690ad8f0fc903", null ], + [ "OnCancelButtonClick", "class_transformer_form.html#a737b66275ba708412a06dd764510a968", null ], + [ "OnOKButtonClick", "class_transformer_form.html#a72d54f5a59363d33b02e9467833c0b6b", null ], + [ "OnStabilityButtonClick", "class_transformer_form.html#a71966865b6a286c22034ef50849513ab", null ], + [ "ValidateData", "class_transformer_form.html#a10f5f72d1fc3882d229a54ba4522154a", null ], + [ "m_parent", "class_transformer_form.html#ac1db49bd821dd82b25737686ae394103", null ], + [ "m_transformer", "class_transformer_form.html#ad227425d57a1a8b8b6209cd55ebdbd80", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_transformer_form_base-members.html b/docs/doxygen/html/class_transformer_form_base-members.html index 1b047c3..d003cda 100644 --- a/docs/doxygen/html/class_transformer_form_base-members.html +++ b/docs/doxygen/html/class_transformer_form_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TransformerFormBase Member List
@@ -158,11 +173,14 @@ $(function() { TransformerFormBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxString &title=_("Transformer"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE) (defined in TransformerFormBase)TransformerFormBase ~TransformerFormBase() (defined in TransformerFormBase)TransformerFormBasevirtual
+ - + diff --git a/docs/doxygen/html/class_transformer_form_base.html b/docs/doxygen/html/class_transformer_form_base.html index 61aee44..db59190 100644 --- a/docs/doxygen/html/class_transformer_form_base.html +++ b/docs/doxygen/html/class_transformer_form_base.html @@ -5,10 +5,17 @@ -PSP-UFU: TransformerFormBase Class Reference +TransformerFormBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -353,16 +368,23 @@ wxButton * m_buttonOK< wxButton * m_buttonCancel   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_transformer_form_base.js b/docs/doxygen/html/class_transformer_form_base.js new file mode 100644 index 0000000..7e5ffc5 --- /dev/null +++ b/docs/doxygen/html/class_transformer_form_base.js @@ -0,0 +1,92 @@ +var class_transformer_form_base = +[ + [ "TransformerFormBase", "class_transformer_form_base.html#ae0c2fbf9475ee1e780896fa89c14b878", null ], + [ "~TransformerFormBase", "class_transformer_form_base.html#a2cc878c4779f0ba73d5deb700759ecb0", null ], + [ "GetButtonCancel", "class_transformer_form_base.html#a70c25076ba3a28f31822cb2f1273fbb6", null ], + [ "GetButtonOK", "class_transformer_form_base.html#a1a021847167a55f2050d974fbe6529ae", null ], + [ "GetButtonStability", "class_transformer_form_base.html#ac88dea58cbb0dd8a93f2e2e6040ec823", null ], + [ "GetCheckUseTransformerPower", "class_transformer_form_base.html#a13f64e73b1906163fd4faea4c76dda20", null ], + [ "GetChoiceBaseVoltage", "class_transformer_form_base.html#ac38779c0e258f370854243eb6b31986f", null ], + [ "GetChoiceConnection", "class_transformer_form_base.html#aee0b43085f009f2517994967d080b794", null ], + [ "GetChoiceNominalPower", "class_transformer_form_base.html#aa69ec87ce83152dbf30ca86ef9a431c6", null ], + [ "GetChoiceReactance", "class_transformer_form_base.html#a4d2e10a6c0358a578deb65acf6295b9d", null ], + [ "GetChoiceResistance", "class_transformer_form_base.html#a38c21aed3d1fd4fd4e1ba41f3a138d3e", null ], + [ "GetNotebook", "class_transformer_form_base.html#ac1cf3e353c40d74eeef6c3822a1c2c03", null ], + [ "GetPanelFault", "class_transformer_form_base.html#acfcddec0baebd8c6885c26224bbfa280", null ], + [ "GetPanelGeneral", "class_transformer_form_base.html#a7870d1ac8852c45cc58fbd290a6acef3", null ], + [ "GetStaticLine_1", "class_transformer_form_base.html#a7bdcbe2ed487ba2da498d7a6c7ac8e7a", null ], + [ "GetStaticTextBaseVoltage", "class_transformer_form_base.html#aabdd5f43e5379ecd03f6a01086fa8e98", null ], + [ "GetStaticTextConnection", "class_transformer_form_base.html#ac506972ad5a38969111a0e23357fdfde", null ], + [ "GetStaticTextDeg", "class_transformer_form_base.html#a55e86e376d766493f443fef08ff58fd8", null ], + [ "GetStaticTextName", "class_transformer_form_base.html#a50fc4ce1b4dda224a1a0f711bfc9f26c", null ], + [ "GetStaticTextNominalPower", "class_transformer_form_base.html#af01e4be05d790d0a2236846899418b53", null ], + [ "GetStaticTextNominalVoltage", "class_transformer_form_base.html#a98efcfc4d7455dad70c87c9de30a26d0", null ], + [ "GetStaticTextNominalVoltageValue", "class_transformer_form_base.html#a0d466ffb4b1f4c1bd026c5f3f46a4c79", null ], + [ "GetStaticTextPhaseShift", "class_transformer_form_base.html#a99f0a3d39c149d1d8ae1b478bb1ecce2", null ], + [ "GetStaticTextPrimReactance", "class_transformer_form_base.html#a8ec2523003aa34d4f84a81de3cbbbdd5", null ], + [ "GetStaticTextPrimResistance", "class_transformer_form_base.html#a113edf034a7f07f84bedf62bda482ddc", null ], + [ "GetStaticTextReactance", "class_transformer_form_base.html#af1394f18900292398f9f317341f1e727", null ], + [ "GetStaticTextResistance", "class_transformer_form_base.html#a714a3a0d023771c3dcee367b709a297e", null ], + [ "GetStaticTextSecReactance", "class_transformer_form_base.html#a6dbb4bd37b20982632dd728ff855b870", null ], + [ "GetStaticTextSecResistance", "class_transformer_form_base.html#ac7e3d90ed49d3343237c7f170429e743", null ], + [ "GetStaticTextTurnsRatio", "class_transformer_form_base.html#a0dd7a20e78c4effd68da4764109bb4f1", null ], + [ "GetStaticTextZeroReactance", "class_transformer_form_base.html#a5c748e72231caaa693337347a343ee64", null ], + [ "GetStaticTextZeroResistance", "class_transformer_form_base.html#ab88da886634ae9d6d0f010c80053d457", null ], + [ "GetTextCtrlName", "class_transformer_form_base.html#a531e49e6a056144e2f5047286e8a16da", null ], + [ "GetTextCtrlNominalPower", "class_transformer_form_base.html#ad96d875c08ef54e86ebccbf0c326598d", null ], + [ "GetTextCtrlPhaseShift", "class_transformer_form_base.html#a807fc537dbf283a9b7ff6cbef2dbcc00", null ], + [ "GetTextCtrlPrimReactance", "class_transformer_form_base.html#ac3d86f996ce77b7855b925c85c3f7317", null ], + [ "GetTextCtrlPrimResistance", "class_transformer_form_base.html#a0284032d1298fb2ad4ac2eb427077914", null ], + [ "GetTextCtrlReactance", "class_transformer_form_base.html#a49c8239313228c0843d089ef5d63dd55", null ], + [ "GetTextCtrlResistance", "class_transformer_form_base.html#ade72da576a6bcd2182798e449f8ce8d5", null ], + [ "GetTextCtrlSecReactance", "class_transformer_form_base.html#aee7759b13cf93e4722e7514f4ddcfa8f", null ], + [ "GetTextCtrlSecResistance", "class_transformer_form_base.html#a7fe977bdfe8780749bc3ee987a7729b7", null ], + [ "GetTextCtrlTurnRatio", "class_transformer_form_base.html#ad1624c0498b54b5b0beb3f77d85f687d", null ], + [ "GetTextCtrlZeroReactance", "class_transformer_form_base.html#a85a92227216e9ce953b121c97f96c5f2", null ], + [ "GetTextCtrlZeroResistance", "class_transformer_form_base.html#a022d3748ff4c570aea35538a463b6773", null ], + [ "OnCancelButtonClick", "class_transformer_form_base.html#ade4e3e90c5c0f4f0abe278ffba2443a0", null ], + [ "OnOKButtonClick", "class_transformer_form_base.html#acdd32c513f7d4a1eb23ac55ab3d28995", null ], + [ "OnStabilityButtonClick", "class_transformer_form_base.html#a6b826cda74882238c54280b1b727fa5d", null ], + [ "m_buttonCancel", "class_transformer_form_base.html#af65e4801b524b44b075a6218777777f0", null ], + [ "m_buttonOK", "class_transformer_form_base.html#a9307de748d184dc5f00bdaaa9a09fb6c", null ], + [ "m_buttonStability", "class_transformer_form_base.html#aa1e990df75f9e6025ed38b601851b914", null ], + [ "m_checkUseTransformerPower", "class_transformer_form_base.html#a2fde91e5014982d570274e407362dae4", null ], + [ "m_choiceBaseVoltage", "class_transformer_form_base.html#a04c92b7d29cd3375a1415764aa536406", null ], + [ "m_choiceConnection", "class_transformer_form_base.html#a045b70a953da5049d4f5d853a9ec8ed4", null ], + [ "m_choiceNominalPower", "class_transformer_form_base.html#a7d718aac8c90366c98d7ee94f382d62f", null ], + [ "m_choiceReactance", "class_transformer_form_base.html#ae7a24e53da32b8caf67fc5ef39618743", null ], + [ "m_choiceResistance", "class_transformer_form_base.html#a88bd7d74f839e3cec36b15ebd7651948", null ], + [ "m_notebook", "class_transformer_form_base.html#a7e8def6859b1e38fd3c91bfe6288bb73", null ], + [ "m_panelFault", "class_transformer_form_base.html#a5706999e17e2932b972187736419d505", null ], + [ "m_panelGeneral", "class_transformer_form_base.html#a4487a3bc92e5539f19fd42c0d5506e3d", null ], + [ "m_staticLine_1", "class_transformer_form_base.html#a8df8a1bcbf215b3e466595beb30f68d8", null ], + [ "m_staticTextBaseVoltage", "class_transformer_form_base.html#a640f38342e6d516d172eef982e952a7f", null ], + [ "m_staticTextConnection", "class_transformer_form_base.html#a844597ca569fe6b06d77284c2f06b279", null ], + [ "m_staticTextDeg", "class_transformer_form_base.html#a4f8d3c5594371b78264cbc159de95fbc", null ], + [ "m_staticTextName", "class_transformer_form_base.html#a811b577ff9fd83c437379455d7e52c53", null ], + [ "m_staticTextNominalPower", "class_transformer_form_base.html#af088bc27c75828d7829f18c4c4a5d7df", null ], + [ "m_staticTextNominalVoltage", "class_transformer_form_base.html#aa1c6bbea49f60eb9962b07146757da64", null ], + [ "m_staticTextNominalVoltageValue", "class_transformer_form_base.html#a5a687a0a567cc31b15b0adc96460079e", null ], + [ "m_staticTextPhaseShift", "class_transformer_form_base.html#a8e4d2a3046c69b01bd705ae652bdea86", null ], + [ "m_staticTextPrimReactance", "class_transformer_form_base.html#ad3c3cfd26566f06a0c0fe9d116648e37", null ], + [ "m_staticTextPrimResistance", "class_transformer_form_base.html#adc8d387589bb5acdd75d4bbd985ad243", null ], + [ "m_staticTextReactance", "class_transformer_form_base.html#ac9880a1a9c0b6be177714b95396108de", null ], + [ "m_staticTextResistance", "class_transformer_form_base.html#a610937e52d3ca590618a992d33a0eeb6", null ], + [ "m_staticTextSecReactance", "class_transformer_form_base.html#a69e14483db595799ff4baf5cf1e23e59", null ], + [ "m_staticTextSecResistance", "class_transformer_form_base.html#ad3c02626ca03e34914137d1b41f530e6", null ], + [ "m_staticTextTurnsRatio", "class_transformer_form_base.html#ab3290af329387311274652c78e978512", null ], + [ "m_staticTextZeroReactance", "class_transformer_form_base.html#ad1425a7f7ab1862cafb87f08f364ba8e", null ], + [ "m_staticTextZeroResistance", "class_transformer_form_base.html#a270bc4d0bbedcd942902757783643fe4", null ], + [ "m_textCtrlName", "class_transformer_form_base.html#ad62929ebbf445d52d283f863a77ccd1b", null ], + [ "m_textCtrlNominalPower", "class_transformer_form_base.html#ae2196cf62a3c277247a112d7971872b0", null ], + [ "m_textCtrlPhaseShift", "class_transformer_form_base.html#ab3ab36d5d0be6e5cd6cd41b88616f8b4", null ], + [ "m_textCtrlPrimReactance", "class_transformer_form_base.html#a96c25a55ea50c18e14022f2ff00a5051", null ], + [ "m_textCtrlPrimResistance", "class_transformer_form_base.html#aa665859e3b696bef4b146f1efbab0eca", null ], + [ "m_textCtrlReactance", "class_transformer_form_base.html#a3f434986c270c39b3b68f359b0e9ee9a", null ], + [ "m_textCtrlResistance", "class_transformer_form_base.html#a1b799c8717841772b84dbd4268b5d33f", null ], + [ "m_textCtrlSecReactance", "class_transformer_form_base.html#ab31a2c526cb74f229e4340e01ab0e71e", null ], + [ "m_textCtrlSecResistance", "class_transformer_form_base.html#a24caf79933c5ce7224e7787b9887ff80", null ], + [ "m_textCtrlTurnRatio", "class_transformer_form_base.html#a03bf43a865e368c51afeabd81bd5d8ee", null ], + [ "m_textCtrlZeroReactance", "class_transformer_form_base.html#a253fe9d0a6aac89813e38304a27e239f", null ], + [ "m_textCtrlZeroResistance", "class_transformer_form_base.html#a9357f82f40ce6a73eb4bff990d5ccead", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_workspace-members.html b/docs/doxygen/html/class_workspace-members.html index e7228d5..fa054fe 100644 --- a/docs/doxygen/html/class_workspace-members.html +++ b/docs/doxygen/html/class_workspace-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Workspace Member List
@@ -161,11 +176,14 @@ $(function() { ~Workspace() (defined in Workspace)Workspace ~WorkspaceBase() (defined in WorkspaceBase)WorkspaceBasevirtual
+ - + diff --git a/docs/doxygen/html/class_workspace.html b/docs/doxygen/html/class_workspace.html index 97f8b54..73d63a3 100644 --- a/docs/doxygen/html/class_workspace.html +++ b/docs/doxygen/html/class_workspace.html @@ -5,10 +5,17 @@ -PSP-UFU: Workspace Class Reference +Workspace Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Types | @@ -341,16 +356,23 @@ wxGLCanvas * m_glCanvasm_timer   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 56 of file Workspace.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_workspace.js b/docs/doxygen/html/class_workspace.js new file mode 100644 index 0000000..3c0a16e --- /dev/null +++ b/docs/doxygen/html/class_workspace.js @@ -0,0 +1,90 @@ +var class_workspace = +[ + [ "WorkspaceMode", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914", [ + [ "MODE_EDIT", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a3f2c5b345a9ac7d8dfcd2b51a6becc2c", null ], + [ "MODE_MOVE_ELEMENT", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a3e1fead750fbde2a9bf75f457f387e1c", null ], + [ "MODE_MOVE_PICKBOX", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914ae98c91e3a672a7b48020d41234f65056", null ], + [ "MODE_MOVE_NODE", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a094a29399033e02e51fd013eac5f8bc3", null ], + [ "MODE_DRAG", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a32cb1102be505f27ae0255d9e3834acc", null ], + [ "MODE_DRAG_INSERT", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a253dcdbf5c54e7de2489b54098e29161", null ], + [ "MODE_DRAG_INSERT_TEXT", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a92c16301deb027b1bad37c54f7432482", null ], + [ "MODE_INSERT", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a94ed0030aad40a766af3d97b8cbb55df", null ], + [ "MODE_INSERT_TEXT", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914aff456a8f97d89f415295642cfc4e7411", null ], + [ "MODE_SELECTION_RECT", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a36270dbb58538c00a5b009916dda4748", null ], + [ "MODE_PASTE", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a48963bc6da69eeee46985e57383a6831", null ], + [ "MODE_DRAG_PASTE", "class_workspace.html#a6c46f1e54734c198b47134fa829f5914a990ae713f0e72eab71de6b77c3bf412f", null ] + ] ], + [ "Workspace", "class_workspace.html#a94db01244419924778d7578332415a97", null ], + [ "Workspace", "class_workspace.html#a3ffd9682e5898f467b54748c5277e239", null ], + [ "~Workspace", "class_workspace.html#a10c751ef894a1ce02ca401a0a60b3333", null ], + [ "CopySelection", "class_workspace.html#a8cce4d1259bccce5f7b19ac3284be60e", null ], + [ "DeleteSelectedElements", "class_workspace.html#a29e232a2810f36222f0b1ba2f775f606", null ], + [ "Fit", "class_workspace.html#a92ddb55af7ffa45f050f46becb3f520b", null ], + [ "GetAllElements", "class_workspace.html#a953a0a155f3363ea4834cd471287f7ec", null ], + [ "GetCamera", "class_workspace.html#a0f25d318ff7310d11e510239953b92fc", null ], + [ "GetElementList", "class_workspace.html#acf9d7e1a32e3ba2714aad00558561164", null ], + [ "GetElementNumber", "class_workspace.html#a6f2dcf924f95cb2b2216057a0fc53f41", null ], + [ "GetElementsCorners", "class_workspace.html#a8677426ffcd80c3fa76ba2f8d6c402d5", null ], + [ "GetName", "class_workspace.html#a82d91c594e8ae5d2dc72ea4384abe24f", null ], + [ "GetProperties", "class_workspace.html#a735b10c59c133a6c81be7432a8978e8b", null ], + [ "GetSavedPath", "class_workspace.html#a6c024a0381b8515287ff82a0c135a285", null ], + [ "GetStabilityTimeVector", "class_workspace.html#a709ba1bac8061b82a91e225effd22621", null ], + [ "GetTextList", "class_workspace.html#ae6537cdff1e5cfb7fea9b096fc8b2cb4", null ], + [ "GetWorkspaceMode", "class_workspace.html#a758abd23ac6f327899e9761da653b40e", null ], + [ "IncrementElementNumber", "class_workspace.html#a5b71e0ec48f1d9ae1ce9e01b546c01b1", null ], + [ "IsContinuousCalculationActive", "class_workspace.html#a38a886655d99aae4dbaeec88e7f855ce", null ], + [ "OnIdle", "class_workspace.html#aa8a761564e7ba7820911373ea1990b88", null ], + [ "OnKeyDown", "class_workspace.html#a49bec4c0ddb83d1bcfe4bb6cdf688864", null ], + [ "OnLeftClickDown", "class_workspace.html#a6e5a3440a86e3afc1336740aac1efbe1", null ], + [ "OnLeftClickUp", "class_workspace.html#a96e2691b76f78ca4f63013a299a2338a", null ], + [ "OnLeftDoubleClick", "class_workspace.html#abf538431670cc5aa24d60393d259b48a", null ], + [ "OnMiddleDoubleClick", "class_workspace.html#a259249b912ae1caae1c166eb2f9f4123", null ], + [ "OnMiddleDown", "class_workspace.html#af3d21e7fe9eb683b2b4e2c38ab8b1c66", null ], + [ "OnMiddleUp", "class_workspace.html#a5bc77206269e7abdd75085b90385e934", null ], + [ "OnMouseMotion", "class_workspace.html#a810b16fadd522ab40335c7533e051d6f", null ], + [ "OnPaint", "class_workspace.html#abe29ae978b1c93569bf60e4d45f0050f", null ], + [ "OnPopupClick", "class_workspace.html#aefd3e77c34bf4cd9c937f803c9bee813", null ], + [ "OnRightClickDown", "class_workspace.html#a52b015440855fbab2ae1ba7a229a36c7", null ], + [ "OnScroll", "class_workspace.html#ae88b97cdf57d4f078fa4c3da4321721f", null ], + [ "OnTimer", "class_workspace.html#a6e1788b16636c60be5bf0b0bbc0a3a26", null ], + [ "Paste", "class_workspace.html#af7692e86ad24285a8bf7865646e3b3e7", null ], + [ "Redraw", "class_workspace.html#a58e7526fe48d3fbff16c7bf7ac607b0c", null ], + [ "RotateSelectedElements", "class_workspace.html#a61dd47c1c36cab51f67f6652e560b635", null ], + [ "RunFault", "class_workspace.html#af19b02bb34f824af0c0e736f95a96e51", null ], + [ "RunPowerFlow", "class_workspace.html#a8372edc7102baabc9170836c40548084", null ], + [ "RunSCPower", "class_workspace.html#a8af383b55580f7b02eea83df03d125b9", null ], + [ "RunStability", "class_workspace.html#ab0773cafa9c7127d8985256f0e3a394e", null ], + [ "RunStaticStudies", "class_workspace.html#adeefec5df5f908bed2b3c19b1fcd6f95", null ], + [ "SetContinuousCalculationActive", "class_workspace.html#a691c80813f2f2f15bfb79db5edddf22a", null ], + [ "SetElementList", "class_workspace.html#a47405d47dd54d98cd0b5e323a5cf9071", null ], + [ "SetJustOpened", "class_workspace.html#af7cf65a1be2daa086b74e152094a8da8", null ], + [ "SetName", "class_workspace.html#a69ed8a7449993602944683f9a9584fe1", null ], + [ "SetSavedPath", "class_workspace.html#a7a940cc3edfa6da2ecc4f3555eb2259b", null ], + [ "SetStatusBarText", "class_workspace.html#a057257829453518249ebc0fc971c2a68", null ], + [ "SetTextList", "class_workspace.html#a4fa9ee617ed7da22b84eced403bb512e", null ], + [ "SetViewport", "class_workspace.html#afa900c2ba854a6922ad2a28d5e28c4ac", null ], + [ "SetWorkspaceMode", "class_workspace.html#a6658ab0800105042a29b6fea1102f873", null ], + [ "UnselectAll", "class_workspace.html#a916173d5babcda8af782015e80e3e2ae", null ], + [ "UpdateElementsID", "class_workspace.html#aaef2ac88b0cb8e204c3bd59fd96eba32", null ], + [ "UpdateStatusBar", "class_workspace.html#acf4e1d561abc0667214619753789ba1c", null ], + [ "UpdateTextElements", "class_workspace.html#a2c1f915ba189d1dc3b9088fd79b2f31a", null ], + [ "ValidateBusesVoltages", "class_workspace.html#aa072c180c3feee54ee84c13ce4ca9410", null ], + [ "ValidateElementsVoltages", "class_workspace.html#a6d84b8d85526f1194667606429a3a315", null ], + [ "m_camera", "class_workspace.html#a5c7dcb5b022b37bce0647aab42bc764a", null ], + [ "m_continuousCalc", "class_workspace.html#accb1b98baf52125dbc989784aac69074", null ], + [ "m_disconnectedElement", "class_workspace.html#a16047d114ac4c9708eccf87ddc93c57f", null ], + [ "m_elementList", "class_workspace.html#af7b9721a871221f9c534e7a5af482b8a", null ], + [ "m_elementNumber", "class_workspace.html#a773f2c59738a7b546e032509822aaba4", null ], + [ "m_glContext", "class_workspace.html#a013bdfced9e47c0a11d378409cda1376", null ], + [ "m_justOpened", "class_workspace.html#ad966b16ef1d8216c69c577f17bad4361", null ], + [ "m_mode", "class_workspace.html#ae72fd97fa7abdce3615318b8dd5db122", null ], + [ "m_name", "class_workspace.html#a8b7645ec6641e9eff52f9d6b8e12b84e", null ], + [ "m_properties", "class_workspace.html#acbc1a9429407f3e86da419639c974dc6", null ], + [ "m_savedPath", "class_workspace.html#ab2e997f328f88889b3712bcd3d5d7310", null ], + [ "m_selectionRect", "class_workspace.html#ac59319d3776983ae607a602d7588a0b9", null ], + [ "m_stabilityTimeVector", "class_workspace.html#a16b55585d4fa51fc3a565df2ce16997e", null ], + [ "m_startSelRect", "class_workspace.html#a239e2b579a4c1b640b4f5e2640c61044", null ], + [ "m_statusBar", "class_workspace.html#a26add99100a783d857b52fe497d5a209", null ], + [ "m_textList", "class_workspace.html#a5347e4a880ed744ef20da988aaac534f", null ], + [ "m_tipWindow", "class_workspace.html#a444c05695fd50548fa025a97567e8a55", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/class_workspace_base-members.html b/docs/doxygen/html/class_workspace_base-members.html index e0c980a..a172dc4 100644 --- a/docs/doxygen/html/class_workspace_base-members.html +++ b/docs/doxygen/html/class_workspace_base-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
WorkspaceBase Member List
@@ -88,11 +103,14 @@ $(function() { WorkspaceBase(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(500, 300), long style=wxTAB_TRAVERSAL) (defined in WorkspaceBase)WorkspaceBase ~WorkspaceBase() (defined in WorkspaceBase)WorkspaceBasevirtual
+ - + diff --git a/docs/doxygen/html/class_workspace_base.html b/docs/doxygen/html/class_workspace_base.html index b41f52f..e1163c1 100644 --- a/docs/doxygen/html/class_workspace_base.html +++ b/docs/doxygen/html/class_workspace_base.html @@ -5,10 +5,17 @@ -PSP-UFU: WorkspaceBase Class Reference +WorkspaceBase Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -143,16 +158,23 @@ wxGLCanvas * m_glCanvasm_timer   -
The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/class_workspace_base.js b/docs/doxygen/html/class_workspace_base.js new file mode 100644 index 0000000..6031eed --- /dev/null +++ b/docs/doxygen/html/class_workspace_base.js @@ -0,0 +1,22 @@ +var class_workspace_base = +[ + [ "WorkspaceBase", "class_workspace_base.html#ab025deb21418482cbe2555b1a06bb1a0", null ], + [ "~WorkspaceBase", "class_workspace_base.html#aa7a7fdfc3469fbe895963d956baf7810", null ], + [ "GetGlCanvas", "class_workspace_base.html#aae6d969022b9f998dbf8cb5c50e2ec20", null ], + [ "GetTimer", "class_workspace_base.html#a43c2bddd523784d1373f4cfa3d232023", null ], + [ "OnIdle", "class_workspace_base.html#abb90fc90faa3b8570a90cc20ee6d1e91", null ], + [ "OnKeyDown", "class_workspace_base.html#a44f48b6d1f1a412f397fda1cf500ef2f", null ], + [ "OnLeftClickDown", "class_workspace_base.html#a9001ad5fa6ab8fbc56efcdd4a79cdc5e", null ], + [ "OnLeftClickUp", "class_workspace_base.html#abcf950107b3473a127bd50436529c500", null ], + [ "OnLeftDoubleClick", "class_workspace_base.html#ae5633aaebc0fcfefb8c404a0747cff73", null ], + [ "OnMiddleDoubleClick", "class_workspace_base.html#a90d56828276491b843e0da41a7103ce2", null ], + [ "OnMiddleDown", "class_workspace_base.html#a10f274f51010decd8dfd872880300c80", null ], + [ "OnMiddleUp", "class_workspace_base.html#a8b2d918751866735d2f8c957c85d5f8a", null ], + [ "OnMouseMotion", "class_workspace_base.html#ae004b4c7aa73429ff04be1957c1d4f3d", null ], + [ "OnPaint", "class_workspace_base.html#a8b4c940f21dfd8b6cf20ff6aa05604b3", null ], + [ "OnRightClickDown", "class_workspace_base.html#acdab5799f4d3992f0039c39896d2f295", null ], + [ "OnScroll", "class_workspace_base.html#a664285c92d2e58cffd2e0706f36a779c", null ], + [ "OnTimer", "class_workspace_base.html#a514bd173615bc2af5cce766a78c90678", null ], + [ "m_glCanvas", "class_workspace_base.html#a99ad7de77199406140c440afeeb55901", null ], + [ "m_timer", "class_workspace_base.html#a70d926c1f83f7510f487f9f1f474083f", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/classes.html b/docs/doxygen/html/classes.html index b6ae5c3..f3d2719 100644 --- a/docs/doxygen/html/classes.html +++ b/docs/doxygen/html/classes.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Index +Class Index + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
a | b | c | d | e | f | g | i | l | m | n | o | p | r | s | t | w
+
- + diff --git a/docs/doxygen/html/classwx_g_l_number_renderer-members.html b/docs/doxygen/html/classwx_g_l_number_renderer-members.html index 0740315..215a4c5 100644 --- a/docs/doxygen/html/classwx_g_l_number_renderer-members.html +++ b/docs/doxygen/html/classwx_g_l_number_renderer-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
wxGLNumberRenderer Member List
@@ -112,11 +127,14 @@ $(function() { ~wxGLNumberRenderer() (defined in wxGLNumberRenderer)wxGLNumberRenderervirtual ~wxGLString() (defined in wxGLString)wxGLStringvirtual
+ - + diff --git a/docs/doxygen/html/classwx_g_l_number_renderer.html b/docs/doxygen/html/classwx_g_l_number_renderer.html index 4832a38..23e8942 100644 --- a/docs/doxygen/html/classwx_g_l_number_renderer.html +++ b/docs/doxygen/html/classwx_g_l_number_renderer.html @@ -5,10 +5,17 @@ -PSP-UFU: wxGLNumberRenderer Class Reference +wxGLNumberRenderer Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -202,6 +217,8 @@ int texh

Use example :

wxGLNumberRenderer glnumbers; ... if(first_render) glnumbers.consolidate();

glColor3f(0,0,0); // black numbers glnumbers.bind(); glnumbers.renderNumber( 3.141593f, x, y );

+ +

Definition at line 128 of file wxGLString.h.

Member Function Documentation

◆ consolidate()

@@ -230,6 +247,8 @@ int texh

Reimplemented from wxGLString.

+

Definition at line 265 of file wxGLString.cpp.

+
@@ -265,6 +284,8 @@ int texh

render this number at coordinates (x,y), where wxString s contains the string representation of a number. Must be called after bind().

+

Definition at line 302 of file wxGLString.cpp.

+
@@ -300,6 +321,8 @@ int texh

render this number at coordinates (x,y). Must be called after bind().

+

Definition at line 290 of file wxGLString.cpp.

+
@@ -335,18 +358,24 @@ int texh

render this number at coordinates (x,y). Must be called after bind().

+

Definition at line 296 of file wxGLString.cpp.

+

The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/classwx_g_l_number_renderer.js b/docs/doxygen/html/classwx_g_l_number_renderer.js new file mode 100644 index 0000000..c76020a --- /dev/null +++ b/docs/doxygen/html/classwx_g_l_number_renderer.js @@ -0,0 +1,9 @@ +var classwx_g_l_number_renderer = +[ + [ "wxGLNumberRenderer", "classwx_g_l_number_renderer.html#a6ea7d396fd2f435a889ee05d8da67532", null ], + [ "~wxGLNumberRenderer", "classwx_g_l_number_renderer.html#af2a56e95687d52b3f59a27783eb049ec", null ], + [ "consolidate", "classwx_g_l_number_renderer.html#aa79114bda6e5e4c3db4b8aeeb5f272c4", null ], + [ "renderNumber", "classwx_g_l_number_renderer.html#a9de7eec569a559adea04ab66b671ac62", null ], + [ "renderNumber", "classwx_g_l_number_renderer.html#a2273ecc04f77d076df5352d2bdb4c3a8", null ], + [ "renderNumber", "classwx_g_l_number_renderer.html#a857e30cb8a78f1e6197957110fc339d6", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/classwx_g_l_string-members.html b/docs/doxygen/html/classwx_g_l_string-members.html index 0c53dff..135c229 100644 --- a/docs/doxygen/html/classwx_g_l_string-members.html +++ b/docs/doxygen/html/classwx_g_l_string-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
wxGLString Member List
@@ -108,11 +123,14 @@ $(function() { yscale (defined in TextGLDrawable)TextGLDrawableprotected ~wxGLString() (defined in wxGLString)wxGLStringvirtual
+ - + diff --git a/docs/doxygen/html/classwx_g_l_string.html b/docs/doxygen/html/classwx_g_l_string.html index a3cf6e2..0b6a154 100644 --- a/docs/doxygen/html/classwx_g_l_string.html +++ b/docs/doxygen/html/classwx_g_l_string.html @@ -5,10 +5,17 @@ -PSP-UFU: wxGLString Class Reference +wxGLString Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -205,6 +220,8 @@ class wxGLStringArray<

Use example :

wxGLString my_message(wxT("Hello World")); ... if(first_render) my_message.consolidate(&dc);

glColor3f(0,0,0); // black text my_message.bind(); my_message.render(x, y);

+ +

Definition at line 77 of file wxGLString.h.

Constructor & Destructor Documentation

◆ wxGLString() [1/2]

@@ -222,6 +239,8 @@ class wxGLStringArray<

constructs an empty GLString. Set string later with operator=.

+

Definition at line 187 of file wxGLString.cpp.

+
@@ -241,6 +260,8 @@ class wxGLStringArray<

constructs a GLstring with 'message' as contents.

+

Definition at line 188 of file wxGLString.cpp.

+

Member Function Documentation

@@ -260,6 +281,8 @@ class wxGLStringArray<

call just before render() - binds the OpenGL. If you render the same string many times, or render from an array, bind only once, this will improve performance

+

Definition at line 190 of file wxGLString.cpp.

+
@@ -289,6 +312,8 @@ class wxGLStringArray<

Reimplemented in wxGLNumberRenderer.

+

Definition at line 208 of file wxGLString.cpp.

+ @@ -308,6 +333,8 @@ class wxGLStringArray<

changes the string of this element

+

Definition at line 189 of file wxGLString.cpp.

+
@@ -337,6 +364,8 @@ class wxGLStringArray<

render this string at coordinates (x,y). Must be called after bind().

+

Definition at line 245 of file wxGLString.cpp.

+
@@ -356,18 +385,24 @@ class wxGLStringArray<

set how to draw string for next consolidate() - has no immediate effect, you need to call consolidate() to get results

+

Definition at line 244 of file wxGLString.cpp.

+

The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/classwx_g_l_string.js b/docs/doxygen/html/classwx_g_l_string.js new file mode 100644 index 0000000..818cf50 --- /dev/null +++ b/docs/doxygen/html/classwx_g_l_string.js @@ -0,0 +1,16 @@ +var classwx_g_l_string = +[ + [ "wxGLString", "classwx_g_l_string.html#a19e05beb1f5cbf905f4e1cdf5b566303", null ], + [ "wxGLString", "classwx_g_l_string.html#a6dbedbac054d8835ff98e02b7a2c1801", null ], + [ "~wxGLString", "classwx_g_l_string.html#ab7b55ee1f80a1ce7e74805225e747dab", null ], + [ "bind", "classwx_g_l_string.html#ab31442170832123f5a0afa2b15fb024a", null ], + [ "calculateSize", "classwx_g_l_string.html#a8d08f71da3521f0a88b8625c348962b7", null ], + [ "consolidate", "classwx_g_l_string.html#a54a67012ceb50ee50696c0c1fa0a7b55", null ], + [ "consolidateFromArray", "classwx_g_l_string.html#ab923a7884ed7652bf0c89f7688671aa4", null ], + [ "operator=", "classwx_g_l_string.html#a99128628906c57841225e92b8a77b6dd", null ], + [ "render", "classwx_g_l_string.html#a5845eab608e6a8732ec33a5213eb8015", null ], + [ "setFont", "classwx_g_l_string.html#ac2b03c6b32121611472baf33e84fac24", null ], + [ "wxGLStringArray", "classwx_g_l_string.html#a61de4c6cec06534405b7ecc292b9bd28", null ], + [ "font", "classwx_g_l_string.html#a84cd1aef5211cb85405e7d96d6f2cd36", null ], + [ "img", "classwx_g_l_string.html#a9c3779f981d87d2b0707882057ba30c2", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/classwx_g_l_string_array-members.html b/docs/doxygen/html/classwx_g_l_string_array-members.html index 30cb6e6..7c85fd0 100644 --- a/docs/doxygen/html/classwx_g_l_string_array-members.html +++ b/docs/doxygen/html/classwx_g_l_string_array-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
wxGLStringArray Member List
@@ -77,11 +92,14 @@ $(function() { wxGLStringArray(const wxString strings_arg[], int amount)wxGLStringArray ~wxGLStringArray() (defined in wxGLStringArray)wxGLStringArray
+ - + diff --git a/docs/doxygen/html/classwx_g_l_string_array.html b/docs/doxygen/html/classwx_g_l_string_array.html index 1837287..c1fb0f9 100644 --- a/docs/doxygen/html/classwx_g_l_string_array.html +++ b/docs/doxygen/html/classwx_g_l_string_array.html @@ -5,10 +5,17 @@ -PSP-UFU: wxGLStringArray Class Reference +wxGLStringArray Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -93,6 +108,8 @@ Public Member Functions

Use example :

wxGLStringArray my_messages(); my_messages.addString("wxMac"); my_messages.addString("wxGTK"); my_messages.addString("wxMSW"); ...

glColor3f(0,0,0); // black text my_messages.bind(); my_messages.get(0).render( x, y ); my_messages.get(1).render( x, y + 25 ); my_messages.get(2).render( x, y + 50 );

+ +

Definition at line 168 of file wxGLString.h.

Constructor & Destructor Documentation

◆ wxGLStringArray() [1/2]

@@ -110,6 +127,8 @@ Public Member Functions

constructs an empty array - add elements later using addString

+

Definition at line 376 of file wxGLString.cpp.

+
@@ -139,6 +158,8 @@ Public Member Functions

construct an array with 'strings_arg' elemnts in it

+

Definition at line 377 of file wxGLString.cpp.

+

Member Function Documentation

@@ -159,6 +180,8 @@ Public Member Functions

add a string to the list for next consolidate() - has no immediate effect, you need to call consolidate() to get results

+

Definition at line 395 of file wxGLString.cpp.

+
@@ -177,6 +200,8 @@ Public Member Functions

call just before render() - binds the OpenGL. If you render the same string many times, or render from an array, bind only once, this will improve performance

+

Definition at line 389 of file wxGLString.cpp.

+
@@ -196,6 +221,8 @@ Public Member Functions

consolidates the current string info into a GL string. call this after setting up strings, font and color (if necessary), and before rendering. The wxDC argument is only used to calculate text extents and will not be rendered on.

+

Definition at line 397 of file wxGLString.cpp.

+
@@ -215,6 +242,8 @@ Public Member Functions

get a sub-element - useful mainly for rendering, e.g. my_array.get(0).render(x, y);

+

Definition at line 388 of file wxGLString.cpp.

+
@@ -234,18 +263,24 @@ Public Member Functions

set how to draw string for next consolidate() - has no immediate effect, you need to call consolidate() to get results

+

Definition at line 396 of file wxGLString.cpp.

+

The documentation for this class was generated from the following files: + - + diff --git a/docs/doxygen/html/classwx_g_l_string_array.js b/docs/doxygen/html/classwx_g_l_string_array.js new file mode 100644 index 0000000..4186d25 --- /dev/null +++ b/docs/doxygen/html/classwx_g_l_string_array.js @@ -0,0 +1,11 @@ +var classwx_g_l_string_array = +[ + [ "wxGLStringArray", "classwx_g_l_string_array.html#a9d0ea419b455d761b87c8d4262f84296", null ], + [ "wxGLStringArray", "classwx_g_l_string_array.html#a0c466a4b8f3d5ca954749f8440b5fa0f", null ], + [ "~wxGLStringArray", "classwx_g_l_string_array.html#a23176b0de1c1faf839cb9ea539cc1c06", null ], + [ "addString", "classwx_g_l_string_array.html#aad1fd8d228a9a09bd1e66734323a4ae9", null ], + [ "bind", "classwx_g_l_string_array.html#a692adb887740de68eaf6ca5f2e16e1f6", null ], + [ "consolidate", "classwx_g_l_string_array.html#a2aaa7b340ee571ca6405bbec28715430", null ], + [ "get", "classwx_g_l_string_array.html#a2ae0c1cffb2f54b66a170d1698ad62e0", null ], + [ "setFont", "classwx_g_l_string_array.html#a6923a709d67ada5b713549bc706bdddd", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/classwx_ribbon_metro_art_provider-members.html b/docs/doxygen/html/classwx_ribbon_metro_art_provider-members.html index 7a9662d..2aa02b0 100644 --- a/docs/doxygen/html/classwx_ribbon_metro_art_provider-members.html +++ b/docs/doxygen/html/classwx_ribbon_metro_art_provider-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
wxRibbonMetroArtProvider Member List
@@ -89,11 +104,14 @@ $(function() { wxRibbonMetroArtProvider(bool set_colour_scheme=true) (defined in wxRibbonMetroArtProvider)wxRibbonMetroArtProvider ~wxRibbonMetroArtProvider() (defined in wxRibbonMetroArtProvider)wxRibbonMetroArtProvidervirtual
+ - + diff --git a/docs/doxygen/html/classwx_ribbon_metro_art_provider.html b/docs/doxygen/html/classwx_ribbon_metro_art_provider.html index 2ada514..d11b877 100644 --- a/docs/doxygen/html/classwx_ribbon_metro_art_provider.html +++ b/docs/doxygen/html/classwx_ribbon_metro_art_provider.html @@ -5,10 +5,17 @@ -PSP-UFU: wxRibbonMetroArtProvider Class Reference +wxRibbonMetroArtProvider Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Member Functions | @@ -141,16 +156,23 @@ void DrawButtonBarButtonFo void DrawMinimisedPanelCommon (wxDC &dc, wxRibbonPanel *wnd, const wxRect &rect, wxRect *preview_rect)   -
The documentation for this class was generated from the following files:
    +

    Detailed Description

    +
    +

    Definition at line 28 of file ArtMetro.h.

    +

    The documentation for this class was generated from the following files:
+
- + diff --git a/docs/doxygen/html/classwx_ribbon_metro_art_provider.js b/docs/doxygen/html/classwx_ribbon_metro_art_provider.js new file mode 100644 index 0000000..1718bb2 --- /dev/null +++ b/docs/doxygen/html/classwx_ribbon_metro_art_provider.js @@ -0,0 +1,23 @@ +var classwx_ribbon_metro_art_provider = +[ + [ "wxRibbonMetroArtProvider", "classwx_ribbon_metro_art_provider.html#a574ce6f88f78c2e410d46092472d2a19", null ], + [ "~wxRibbonMetroArtProvider", "classwx_ribbon_metro_art_provider.html#aa57e1377a49cca4b87f1673b2b70a371", null ], + [ "DrawButtonBarBackground", "classwx_ribbon_metro_art_provider.html#a5e448d44cf6d30306a41af61b0ae274f", null ], + [ "DrawButtonBarButton", "classwx_ribbon_metro_art_provider.html#a64892cbeb4809a944158eeeb64521992", null ], + [ "DrawButtonBarButtonForeground", "classwx_ribbon_metro_art_provider.html#a759a02e3e441488c219d596ddb4c8786", null ], + [ "DrawMinimisedPanel", "classwx_ribbon_metro_art_provider.html#a855f255d269011d9be59a13c564215a5", null ], + [ "DrawMinimisedPanelCommon", "classwx_ribbon_metro_art_provider.html#a21c0087bfaeb96c12ce79a525ae28720", null ], + [ "DrawPageBackground", "classwx_ribbon_metro_art_provider.html#a9f9d8ec71db1a8bbfab5a88b2ae16c76", null ], + [ "DrawPanelBackground", "classwx_ribbon_metro_art_provider.html#a332747bb53451624c0dc43c52f841a63", null ], + [ "DrawPanelBorder", "classwx_ribbon_metro_art_provider.html#a9cbceb0409721d370a292916bb402a9d", null ], + [ "DrawPartialPageBackground", "classwx_ribbon_metro_art_provider.html#aa6e300b7a5419c7d429a26beed0c95a8", null ], + [ "DrawPartialPageBackground", "classwx_ribbon_metro_art_provider.html#a4c387b3273a285e2b71870116b8c3f03", null ], + [ "DrawTab", "classwx_ribbon_metro_art_provider.html#a0250fb1979f81476371fc886b8755256", null ], + [ "DrawTabCtrlBackground", "classwx_ribbon_metro_art_provider.html#a35ac28082f0511e0b64b25c40bd0afb0", null ], + [ "DrawTool", "classwx_ribbon_metro_art_provider.html#a34d74c8db77b5816d4abcc6ed5d59af1", null ], + [ "DrawToolBarBackground", "classwx_ribbon_metro_art_provider.html#a533d512aee4deca9811473b10a7323bb", null ], + [ "DrawToolGroupBackground", "classwx_ribbon_metro_art_provider.html#a81144b6e0b02420483f278b00cfbe7b0", null ], + [ "GetColourScheme", "classwx_ribbon_metro_art_provider.html#a345e45b2b6c57daf85bd76a239030a6f", null ], + [ "SetColourScheme", "classwx_ribbon_metro_art_provider.html#a7e53b3b4a62c47038101884810e596af", null ], + [ "SetFlags", "classwx_ribbon_metro_art_provider.html#a35a27a5153c93e06e72bf9fdc04c6f1a", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.html b/docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.html index 75d7b53..54b2188 100644 --- a/docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.html +++ b/docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.html @@ -5,10 +5,17 @@ -PSP-UFU: Project Directory Reference +Project Directory Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
Project Directory Reference
@@ -86,11 +97,15 @@ Files  
+ - + diff --git a/docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.js b/docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.js new file mode 100644 index 0000000..89bbc0b --- /dev/null +++ b/docs/doxygen/html/dir_ffd1f789ec7bd0a45fc6ad92579c5070.js @@ -0,0 +1,163 @@ +var dir_ffd1f789ec7bd0a45fc6ad92579c5070 = +[ + [ "AboutForm.cpp", "_about_form_8cpp_source.html", null ], + [ "AboutForm.h", "_about_form_8h_source.html", null ], + [ "ArtMetro.cpp", "_art_metro_8cpp_source.html", null ], + [ "ArtMetro.h", "_art_metro_8h_source.html", null ], + [ "Branch.cpp", "_branch_8cpp_source.html", null ], + [ "Branch.h", "_branch_8h_source.html", null ], + [ "Bus.cpp", "_bus_8cpp_source.html", null ], + [ "Bus.h", "_bus_8h_source.html", null ], + [ "BusForm.cpp", "_bus_form_8cpp_source.html", null ], + [ "BusForm.h", "_bus_form_8h_source.html", null ], + [ "BusFormBitmaps.cpp", "_bus_form_bitmaps_8cpp_source.html", null ], + [ "Camera.cpp", "_camera_8cpp_source.html", null ], + [ "Camera.h", "_camera_8h_source.html", null ], + [ "Capacitor.cpp", "_capacitor_8cpp_source.html", null ], + [ "Capacitor.h", "_capacitor_8h_source.html", null ], + [ "ChartView.cpp", "_chart_view_8cpp_source.html", null ], + [ "ChartView.h", "_chart_view_8h_source.html", null ], + [ "ChartViewBase.cpp", "_chart_view_base_8cpp_source.html", null ], + [ "ChartViewBase.h", "_chart_view_base_8h_source.html", null ], + [ "ChartViewBitmaps.cpp", "_chart_view_bitmaps_8cpp_source.html", null ], + [ "ConnectionLine.cpp", "_connection_line_8cpp_source.html", null ], + [ "ConnectionLine.h", "_connection_line_8h_source.html", null ], + [ "Constant.cpp", "_constant_8cpp_source.html", null ], + [ "Constant.h", "_constant_8h_source.html", null ], + [ "ConstantForm.cpp", "_constant_form_8cpp_source.html", null ], + [ "ConstantForm.h", "_constant_form_8h_source.html", null ], + [ "ControlEditor.cpp", "_control_editor_8cpp_source.html", null ], + [ "ControlEditor.h", "_control_editor_8h_source.html", null ], + [ "ControlEditorBase.cpp", "_control_editor_base_8cpp_source.html", null ], + [ "ControlEditorBase.h", "_control_editor_base_8h_source.html", null ], + [ "ControlEditorBitmaps.cpp", "_control_editor_bitmaps_8cpp_source.html", null ], + [ "ControlElement.cpp", "_control_element_8cpp_source.html", null ], + [ "ControlElement.h", "_control_element_8h_source.html", null ], + [ "ControlElementContainer.cpp", "_control_element_container_8cpp_source.html", null ], + [ "ControlElementContainer.h", "_control_element_container_8h_source.html", null ], + [ "ControlElementSolver.cpp", "_control_element_solver_8cpp_source.html", null ], + [ "ControlElementSolver.h", "_control_element_solver_8h_source.html", null ], + [ "ControlSystemTest.cpp", "_control_system_test_8cpp_source.html", null ], + [ "ControlSystemTest.h", "_control_system_test_8h_source.html", null ], + [ "DataReport.cpp", "_data_report_8cpp_source.html", null ], + [ "DataReport.h", "_data_report_8h_source.html", null ], + [ "DataReportBase.cpp", "_data_report_base_8cpp_source.html", null ], + [ "DataReportBase.h", "_data_report_base_8h_source.html", null ], + [ "DataReportBitmaps.cpp", "_data_report_bitmaps_8cpp_source.html", null ], + [ "DegreesAndRadians.h", "_degrees_and_radians_8h_source.html", null ], + [ "ElectricCalculation.cpp", "_electric_calculation_8cpp_source.html", null ], + [ "ElectricCalculation.h", "_electric_calculation_8h.html", "_electric_calculation_8h" ], + [ "Electromechanical.cpp", "_electromechanical_8cpp_source.html", null ], + [ "Electromechanical.h", "_electromechanical_8h_source.html", null ], + [ "Element.cpp", "_element_8cpp_source.html", null ], + [ "Element.h", "_element_8h.html", "_element_8h" ], + [ "ElementDataObject.cpp", "_element_data_object_8cpp_source.html", null ], + [ "ElementDataObject.h", "_element_data_object_8h_source.html", null ], + [ "ElementForm.cpp", "_element_form_8cpp_source.html", null ], + [ "ElementForm.h", "_element_form_8h_source.html", null ], + [ "ElementFormBitmaps.cpp", "_element_form_bitmaps_8cpp_source.html", null ], + [ "ElementPlotData.cpp", "_element_plot_data_8cpp_source.html", null ], + [ "ElementPlotData.h", "_element_plot_data_8h_source.html", null ], + [ "Exponential.cpp", "_exponential_8cpp_source.html", null ], + [ "Exponential.h", "_exponential_8h_source.html", null ], + [ "ExponentialForm.cpp", "_exponential_form_8cpp_source.html", null ], + [ "ExponentialForm.h", "_exponential_form_8h_source.html", null ], + [ "Fault.cpp", "_fault_8cpp_source.html", null ], + [ "Fault.h", "_fault_8h.html", [ + [ "Fault", "class_fault.html", "class_fault" ] + ] ], + [ "FileHanding.cpp", "_file_handing_8cpp_source.html", null ], + [ "FileHanding.h", "_file_handing_8h_source.html", null ], + [ "Gain.cpp", "_gain_8cpp_source.html", null ], + [ "Gain.h", "_gain_8h_source.html", null ], + [ "GainForm.cpp", "_gain_form_8cpp_source.html", null ], + [ "GainForm.h", "_gain_form_8h_source.html", null ], + [ "GeneralPropertiesForm.cpp", "_general_properties_form_8cpp_source.html", null ], + [ "GeneralPropertiesForm.h", "_general_properties_form_8h_source.html", null ], + [ "GeneratorStabForm.cpp", "_generator_stab_form_8cpp_source.html", null ], + [ "GeneratorStabForm.h", "_generator_stab_form_8h_source.html", null ], + [ "GraphicalElement.cpp", "_graphical_element_8cpp_source.html", null ], + [ "GraphicalElement.h", "_graphical_element_8h_source.html", null ], + [ "IndMotor.cpp", "_ind_motor_8cpp_source.html", null ], + [ "IndMotor.h", "_ind_motor_8h_source.html", null ], + [ "IndMotorForm.cpp", "_ind_motor_form_8cpp_source.html", null ], + [ "IndMotorForm.h", "_ind_motor_form_8h_source.html", null ], + [ "Inductor.cpp", "_inductor_8cpp_source.html", null ], + [ "Inductor.h", "_inductor_8h_source.html", null ], + [ "IOControl.cpp", "_i_o_control_8cpp_source.html", null ], + [ "IOControl.h", "_i_o_control_8h_source.html", null ], + [ "IOControlForm.cpp", "_i_o_control_form_8cpp_source.html", null ], + [ "IOControlForm.h", "_i_o_control_form_8h_source.html", null ], + [ "Limiter.cpp", "_limiter_8cpp_source.html", null ], + [ "Limiter.h", "_limiter_8h_source.html", null ], + [ "LimiterForm.cpp", "_limiter_form_8cpp_source.html", null ], + [ "LimiterForm.h", "_limiter_form_8h_source.html", null ], + [ "Line.cpp", "_line_8cpp_source.html", null ], + [ "Line.h", "_line_8h_source.html", null ], + [ "LineForm.cpp", "_line_form_8cpp_source.html", null ], + [ "LineForm.h", "_line_form_8h_source.html", null ], + [ "Load.cpp", "_load_8cpp_source.html", null ], + [ "Load.h", "_load_8h_source.html", null ], + [ "LoadForm.cpp", "_load_form_8cpp_source.html", null ], + [ "LoadForm.h", "_load_form_8h_source.html", null ], + [ "Machines.cpp", "_machines_8cpp_source.html", null ], + [ "Machines.h", "_machines_8h_source.html", null ], + [ "main.cpp", "main_8cpp_source.html", null ], + [ "MainFrame.cpp", "_main_frame_8cpp_source.html", null ], + [ "MainFrame.h", "_main_frame_8h_source.html", null ], + [ "MainFrameBase.cpp", "_main_frame_base_8cpp_source.html", null ], + [ "MainFrameBase.h", "_main_frame_base_8h_source.html", null ], + [ "MainFrameBitmaps.cpp", "_main_frame_bitmaps_8cpp_source.html", null ], + [ "Multiplier.cpp", "_multiplier_8cpp_source.html", null ], + [ "Multiplier.h", "_multiplier_8h_source.html", null ], + [ "PowerElement.cpp", "_power_element_8cpp_source.html", null ], + [ "PowerElement.h", "_power_element_8h.html", "_power_element_8h" ], + [ "PowerFlow.cpp", "_power_flow_8cpp_source.html", null ], + [ "PowerFlow.h", "_power_flow_8h_source.html", null ], + [ "PropertiesData.cpp", "_properties_data_8cpp_source.html", null ], + [ "PropertiesData.h", "_properties_data_8h_source.html", null ], + [ "PropertiesForm.cpp", "_properties_form_8cpp_source.html", null ], + [ "PropertiesForm.h", "_properties_form_8h_source.html", null ], + [ "PropertiesFormBitmaps.cpp", "_properties_form_bitmaps_8cpp_source.html", null ], + [ "RateLimiter.cpp", "_rate_limiter_8cpp_source.html", null ], + [ "RateLimiter.h", "_rate_limiter_8h_source.html", null ], + [ "RateLimiterForm.cpp", "_rate_limiter_form_8cpp_source.html", null ], + [ "RateLimiterForm.h", "_rate_limiter_form_8h_source.html", null ], + [ "ReactiveShuntElementForm.cpp", "_reactive_shunt_element_form_8cpp_source.html", null ], + [ "ReactiveShuntElementForm.h", "_reactive_shunt_element_form_8h_source.html", null ], + [ "Shunt.cpp", "_shunt_8cpp_source.html", null ], + [ "Shunt.h", "_shunt_8h_source.html", null ], + [ "SimulationsSettingsForm.cpp", "_simulations_settings_form_8cpp_source.html", null ], + [ "SimulationsSettingsForm.h", "_simulations_settings_form_8h_source.html", null ], + [ "Sum.cpp", "_sum_8cpp_source.html", null ], + [ "Sum.h", "_sum_8h_source.html", null ], + [ "SumForm.cpp", "_sum_form_8cpp_source.html", null ], + [ "SumForm.h", "_sum_form_8h_source.html", null ], + [ "SwitchingForm.cpp", "_switching_form_8cpp_source.html", null ], + [ "SwitchingForm.h", "_switching_form_8h_source.html", null ], + [ "SyncGenerator.cpp", "_sync_generator_8cpp_source.html", null ], + [ "SyncGenerator.h", "_sync_generator_8h_source.html", null ], + [ "SyncMachineForm.cpp", "_sync_machine_form_8cpp_source.html", null ], + [ "SyncMachineForm.h", "_sync_machine_form_8h_source.html", null ], + [ "SyncMotor.cpp", "_sync_motor_8cpp_source.html", null ], + [ "SyncMotor.h", "_sync_motor_8h_source.html", null ], + [ "Text.cpp", "_text_8cpp_source.html", null ], + [ "Text.h", "_text_8h_source.html", null ], + [ "TextForm.cpp", "_text_form_8cpp_source.html", null ], + [ "TextForm.h", "_text_form_8h_source.html", null ], + [ "TransferFunction.cpp", "_transfer_function_8cpp_source.html", null ], + [ "TransferFunction.h", "_transfer_function_8h_source.html", null ], + [ "TransferFunctionForm.cpp", "_transfer_function_form_8cpp_source.html", null ], + [ "TransferFunctionForm.h", "_transfer_function_form_8h_source.html", null ], + [ "Transformer.cpp", "_transformer_8cpp_source.html", null ], + [ "Transformer.h", "_transformer_8h_source.html", null ], + [ "TransformerForm.cpp", "_transformer_form_8cpp_source.html", null ], + [ "TransformerForm.h", "_transformer_form_8h_source.html", null ], + [ "Workspace.cpp", "_workspace_8cpp_source.html", null ], + [ "Workspace.h", "_workspace_8h_source.html", null ], + [ "WorkspaceBase.cpp", "_workspace_base_8cpp_source.html", null ], + [ "WorkspaceBase.h", "_workspace_base_8h_source.html", null ], + [ "WorkspaceBitmaps.cpp", "_workspace_bitmaps_8cpp_source.html", null ], + [ "wxGLString.cpp", "wx_g_l_string_8cpp_source.html", null ], + [ "wxGLString.h", "wx_g_l_string_8h_source.html", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/dynsections.js b/docs/doxygen/html/dynsections.js index 85e1836..1e6bf07 100644 --- a/docs/doxygen/html/dynsections.js +++ b/docs/doxygen/html/dynsections.js @@ -95,3 +95,10 @@ function toggleInherit(id) } } + +$(document).ready(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/docs/doxygen/html/files.html b/docs/doxygen/html/files.html index 87f7498..0541658 100644 --- a/docs/doxygen/html/files.html +++ b/docs/doxygen/html/files.html @@ -5,10 +5,17 @@ -PSP-UFU: File List +File List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
Here is a list of all documented files with brief descriptions:
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  Project
 AboutForm.h
 ArtMetro.h
 Branch.h
 Bus.h
 BusForm.h
 Camera.h
 Capacitor.h
 ChartView.h
 ChartViewBase.h
 ConnectionLine.h
 Constant.h
 ConstantForm.h
 ControlEditor.h
 ControlEditorBase.h
 ControlElement.h
 ControlElementContainer.h
 ControlElementSolver.h
 ControlSystemTest.h
 DataReport.h
 DataReportBase.h
 DegreesAndRadians.h
 ElectricCalculation.hBase class of electric calculations, with general methods
 Electromechanical.h
 Element.hClass to manage color of OpenGL
 ElementDataObject.h
 ElementForm.h
 ElementPlotData.h
 Exponential.h
 ExponentialForm.h
 Fault.hCalculate the fault of the system and update the elements data
 FileHanding.h
 Gain.h
 GainForm.h
 GeneralPropertiesForm.h
 GeneratorStabForm.h
 GraphicalElement.h
 IndMotor.h
 IndMotorForm.h
 Inductor.h
 IOControl.h
 IOControlForm.h
 Limiter.h
 LimiterForm.h
 Line.h
 LineForm.h
 Load.h
 LoadForm.h
 Machines.h
 MainFrame.h
 MainFrameBase.h
 Multiplier.h
 PowerElement.hSwitching data of power elements
 PowerFlow.h
 PropertiesData.h
 PropertiesForm.h
 RateLimiter.h
 RateLimiterForm.h
 ReactiveShuntElementForm.h
 Shunt.h
 SimulationsSettingsForm.h
 Sum.h
 SumForm.h
 SwitchingForm.h
 SyncGenerator.h
 SyncMachineForm.h
 SyncMotor.h
 Text.h
 TextForm.h
 TransferFunction.h
 TransferFunctionForm.h
 Transformer.h
 TransformerForm.h
 Workspace.h
 WorkspaceBase.h
 wxGLString.h
  Project
+
- + diff --git a/docs/doxygen/html/files.js b/docs/doxygen/html/files.js new file mode 100644 index 0000000..f8027d5 --- /dev/null +++ b/docs/doxygen/html/files.js @@ -0,0 +1,4 @@ +var files = +[ + [ "Project", "dir_ffd1f789ec7bd0a45fc6ad92579c5070.html", "dir_ffd1f789ec7bd0a45fc6ad92579c5070" ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/functions.html b/docs/doxygen/html/functions.html index 7b90e90..04b194d 100644 --- a/docs/doxygen/html/functions.html +++ b/docs/doxygen/html/functions.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_0x7e.html b/docs/doxygen/html/functions_0x7e.html index b7b332b..898df55 100644 --- a/docs/doxygen/html/functions_0x7e.html +++ b/docs/doxygen/html/functions_0x7e.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_b.html b/docs/doxygen/html/functions_b.html index 413e61d..8779744 100644 --- a/docs/doxygen/html/functions_b.html +++ b/docs/doxygen/html/functions_b.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_c.html b/docs/doxygen/html/functions_c.html index a2c6859..c966c71 100644 --- a/docs/doxygen/html/functions_c.html +++ b/docs/doxygen/html/functions_c.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_d.html b/docs/doxygen/html/functions_d.html index 2b7bcb9..678eaa4 100644 --- a/docs/doxygen/html/functions_d.html +++ b/docs/doxygen/html/functions_d.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_dup.js b/docs/doxygen/html/functions_dup.js new file mode 100644 index 0000000..fbb7b94 --- /dev/null +++ b/docs/doxygen/html/functions_dup.js @@ -0,0 +1,21 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "g", "functions_g.html", null ], + [ "h", "functions_h.html", null ], + [ "i", "functions_i.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "u", "functions_u.html", null ], + [ "w", "functions_w.html", null ], + [ "~", "functions_0x7e.html", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/functions_e.html b/docs/doxygen/html/functions_e.html index 355c6ae..c49c45b 100644 --- a/docs/doxygen/html/functions_e.html +++ b/docs/doxygen/html/functions_e.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_f.html b/docs/doxygen/html/functions_f.html index d1298e3..75206c6 100644 --- a/docs/doxygen/html/functions_f.html +++ b/docs/doxygen/html/functions_f.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func.html b/docs/doxygen/html/functions_func.html index 2682936..7f9414a 100644 --- a/docs/doxygen/html/functions_func.html +++ b/docs/doxygen/html/functions_func.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func.js b/docs/doxygen/html/functions_func.js new file mode 100644 index 0000000..8bc02ee --- /dev/null +++ b/docs/doxygen/html/functions_func.js @@ -0,0 +1,21 @@ +var functions_func = +[ + [ "a", "functions_func.html", null ], + [ "b", "functions_func_b.html", null ], + [ "c", "functions_func_c.html", null ], + [ "d", "functions_func_d.html", null ], + [ "e", "functions_func_e.html", null ], + [ "f", "functions_func_f.html", null ], + [ "g", "functions_func_g.html", null ], + [ "h", "functions_func_h.html", null ], + [ "i", "functions_func_i.html", null ], + [ "m", "functions_func_m.html", null ], + [ "n", "functions_func_n.html", null ], + [ "o", "functions_func_o.html", null ], + [ "p", "functions_func_p.html", null ], + [ "r", "functions_func_r.html", null ], + [ "s", "functions_func_s.html", null ], + [ "u", "functions_func_u.html", null ], + [ "w", "functions_func_w.html", null ], + [ "~", "functions_func_0x7e.html", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/functions_func_0x7e.html b/docs/doxygen/html/functions_func_0x7e.html index 6c6a918..d74245d 100644 --- a/docs/doxygen/html/functions_func_0x7e.html +++ b/docs/doxygen/html/functions_func_0x7e.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_b.html b/docs/doxygen/html/functions_func_b.html index deeefef..5a874f1 100644 --- a/docs/doxygen/html/functions_func_b.html +++ b/docs/doxygen/html/functions_func_b.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_c.html b/docs/doxygen/html/functions_func_c.html index 141d99c..5a18adc 100644 --- a/docs/doxygen/html/functions_func_c.html +++ b/docs/doxygen/html/functions_func_c.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_d.html b/docs/doxygen/html/functions_func_d.html index c7ee71b..5e0caa4 100644 --- a/docs/doxygen/html/functions_func_d.html +++ b/docs/doxygen/html/functions_func_d.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_e.html b/docs/doxygen/html/functions_func_e.html index 0ad8e38..b2a19b1 100644 --- a/docs/doxygen/html/functions_func_e.html +++ b/docs/doxygen/html/functions_func_e.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_f.html b/docs/doxygen/html/functions_func_f.html index 34a2448..f439ac2 100644 --- a/docs/doxygen/html/functions_func_f.html +++ b/docs/doxygen/html/functions_func_f.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_g.html b/docs/doxygen/html/functions_func_g.html index 6d9e4e4..b13909f 100644 --- a/docs/doxygen/html/functions_func_g.html +++ b/docs/doxygen/html/functions_func_g.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_h.html b/docs/doxygen/html/functions_func_h.html index 9f73c8a..afbd87c 100644 --- a/docs/doxygen/html/functions_func_h.html +++ b/docs/doxygen/html/functions_func_h.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_i.html b/docs/doxygen/html/functions_func_i.html index b8a4fa2..0724720 100644 --- a/docs/doxygen/html/functions_func_i.html +++ b/docs/doxygen/html/functions_func_i.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_m.html b/docs/doxygen/html/functions_func_m.html index 1f97549..8bde333 100644 --- a/docs/doxygen/html/functions_func_m.html +++ b/docs/doxygen/html/functions_func_m.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_n.html b/docs/doxygen/html/functions_func_n.html index b15778a..06aab1e 100644 --- a/docs/doxygen/html/functions_func_n.html +++ b/docs/doxygen/html/functions_func_n.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_o.html b/docs/doxygen/html/functions_func_o.html index 1267516..7f37dd2 100644 --- a/docs/doxygen/html/functions_func_o.html +++ b/docs/doxygen/html/functions_func_o.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_p.html b/docs/doxygen/html/functions_func_p.html index 1e46e4a..3e200bc 100644 --- a/docs/doxygen/html/functions_func_p.html +++ b/docs/doxygen/html/functions_func_p.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_r.html b/docs/doxygen/html/functions_func_r.html index b04fcb6..91a2072 100644 --- a/docs/doxygen/html/functions_func_r.html +++ b/docs/doxygen/html/functions_func_r.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_s.html b/docs/doxygen/html/functions_func_s.html index 2f8896b..f999231 100644 --- a/docs/doxygen/html/functions_func_s.html +++ b/docs/doxygen/html/functions_func_s.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_u.html b/docs/doxygen/html/functions_func_u.html index 7e3f565..94c2782 100644 --- a/docs/doxygen/html/functions_func_u.html +++ b/docs/doxygen/html/functions_func_u.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_func_w.html b/docs/doxygen/html/functions_func_w.html index b5b8896..39ff5fe 100644 --- a/docs/doxygen/html/functions_func_w.html +++ b/docs/doxygen/html/functions_func_w.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Functions +Class Members - Functions + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_g.html b/docs/doxygen/html/functions_g.html index 572c76c..ab0ce51 100644 --- a/docs/doxygen/html/functions_g.html +++ b/docs/doxygen/html/functions_g.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_h.html b/docs/doxygen/html/functions_h.html index a16eeb9..80ab28e 100644 --- a/docs/doxygen/html/functions_h.html +++ b/docs/doxygen/html/functions_h.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_i.html b/docs/doxygen/html/functions_i.html index 986c4d1..fadb455 100644 --- a/docs/doxygen/html/functions_i.html +++ b/docs/doxygen/html/functions_i.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_m.html b/docs/doxygen/html/functions_m.html index 638545b..d15340a 100644 --- a/docs/doxygen/html/functions_m.html +++ b/docs/doxygen/html/functions_m.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_n.html b/docs/doxygen/html/functions_n.html index 450517b..042ca37 100644 --- a/docs/doxygen/html/functions_n.html +++ b/docs/doxygen/html/functions_n.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_o.html b/docs/doxygen/html/functions_o.html index 3d9910e..9c58a12 100644 --- a/docs/doxygen/html/functions_o.html +++ b/docs/doxygen/html/functions_o.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_p.html b/docs/doxygen/html/functions_p.html index 585b3d4..8403f08 100644 --- a/docs/doxygen/html/functions_p.html +++ b/docs/doxygen/html/functions_p.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_r.html b/docs/doxygen/html/functions_r.html index a00c327..7287dd2 100644 --- a/docs/doxygen/html/functions_r.html +++ b/docs/doxygen/html/functions_r.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_s.html b/docs/doxygen/html/functions_s.html index 91c2e8a..148df2a 100644 --- a/docs/doxygen/html/functions_s.html +++ b/docs/doxygen/html/functions_s.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_u.html b/docs/doxygen/html/functions_u.html index ca5e49b..6aa7b24 100644 --- a/docs/doxygen/html/functions_u.html +++ b/docs/doxygen/html/functions_u.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_vars.html b/docs/doxygen/html/functions_vars.html index 91e9ce9..9d4294b 100644 --- a/docs/doxygen/html/functions_vars.html +++ b/docs/doxygen/html/functions_vars.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members - Variables +Class Members - Variables + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/functions_w.html b/docs/doxygen/html/functions_w.html index c30392c..62bf333 100644 --- a/docs/doxygen/html/functions_w.html +++ b/docs/doxygen/html/functions_w.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Members +Class Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/globals.html b/docs/doxygen/html/globals.html index 3299e0d..6c99672 100644 --- a/docs/doxygen/html/globals.html +++ b/docs/doxygen/html/globals.html @@ -5,10 +5,17 @@ -PSP-UFU: File Members +File Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/globals_enum.html b/docs/doxygen/html/globals_enum.html index 6c86822..40df919 100644 --- a/docs/doxygen/html/globals_enum.html +++ b/docs/doxygen/html/globals_enum.html @@ -5,10 +5,17 @@ -PSP-UFU: File Members +File Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/globals_eval.html b/docs/doxygen/html/globals_eval.html index 914c98d..792ba14 100644 --- a/docs/doxygen/html/globals_eval.html +++ b/docs/doxygen/html/globals_eval.html @@ -5,10 +5,17 @@ -PSP-UFU: File Members +File Members + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+
- + diff --git a/docs/doxygen/html/hierarchy.html b/docs/doxygen/html/hierarchy.html index 784ea55..8854282 100644 --- a/docs/doxygen/html/hierarchy.html +++ b/docs/doxygen/html/hierarchy.html @@ -5,10 +5,17 @@ -PSP-UFU: Class Hierarchy +Class Hierarchy + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
+ - + diff --git a/docs/doxygen/html/hierarchy.js b/docs/doxygen/html/hierarchy.js new file mode 100644 index 0000000..78ffac8 --- /dev/null +++ b/docs/doxygen/html/hierarchy.js @@ -0,0 +1,178 @@ +var hierarchy = +[ + [ "BusElectricalData", "struct_bus_electrical_data.html", null ], + [ "Camera", "class_camera.html", null ], + [ "CapacitorElectricalData", "struct_capacitor_electrical_data.html", null ], + [ "ControlElementContainer", "class_control_element_container.html", null ], + [ "ControlElementSolver", "class_control_element_solver.html", null ], + [ "ElectricCalculation", "class_electric_calculation.html", [ + [ "Electromechanical", "class_electromechanical.html", null ], + [ "Fault", "class_fault.html", null ], + [ "PowerFlow", "class_power_flow.html", null ] + ] ], + [ "Element", "class_element.html", [ + [ "ControlElement", "class_control_element.html", [ + [ "ConnectionLine", "class_connection_line.html", null ], + [ "Constant", "class_constant.html", null ], + [ "Exponential", "class_exponential.html", null ], + [ "Gain", "class_gain.html", null ], + [ "IOControl", "class_i_o_control.html", null ], + [ "Limiter", "class_limiter.html", null ], + [ "Multiplier", "class_multiplier.html", null ], + [ "RateLimiter", "class_rate_limiter.html", null ], + [ "Sum", "class_sum.html", null ], + [ "TransferFunction", "class_transfer_function.html", null ] + ] ], + [ "GraphicalElement", "class_graphical_element.html", [ + [ "Text", "class_text.html", null ] + ] ], + [ "PowerElement", "class_power_element.html", [ + [ "Branch", "class_branch.html", [ + [ "Line", "class_line.html", null ], + [ "Transformer", "class_transformer.html", null ] + ] ], + [ "Bus", "class_bus.html", null ], + [ "Machines", "class_machines.html", [ + [ "IndMotor", "class_ind_motor.html", null ], + [ "SyncGenerator", "class_sync_generator.html", null ], + [ "SyncMotor", "class_sync_motor.html", null ] + ] ], + [ "Shunt", "class_shunt.html", [ + [ "Capacitor", "class_capacitor.html", null ], + [ "Inductor", "class_inductor.html", null ], + [ "Load", "class_load.html", null ] + ] ] + ] ] + ] ], + [ "ElementPlotData", "class_element_plot_data.html", null ], + [ "ElementsLists", "struct_elements_lists.html", null ], + [ "FileHanding", "class_file_handing.html", null ], + [ "GeneralData", "struct_general_data.html", null ], + [ "IndMotorElectricalData", "struct_ind_motor_electrical_data.html", null ], + [ "InductorElectricalData", "struct_inductor_electrical_data.html", null ], + [ "IntegrationConstant", "struct_integration_constant.html", null ], + [ "LineElectricalData", "struct_line_electrical_data.html", null ], + [ "LoadElectricalData", "struct_load_electrical_data.html", null ], + [ "Node", "class_node.html", null ], + [ "OpenGLColour", "class_open_g_l_colour.html", null ], + [ "PropertiesData", "class_properties_data.html", null ], + [ "ReactiveLimits", "struct_reactive_limits.html", null ], + [ "SimulationData", "struct_simulation_data.html", null ], + [ "TransferFunction::SpaceState", "struct_transfer_function_1_1_space_state.html", null ], + [ "SwitchingData", "struct_switching_data.html", null ], + [ "SyncGeneratorElectricalData", "struct_sync_generator_electrical_data.html", null ], + [ "SyncMotorElectricalData", "struct_sync_motor_electrical_data.html", null ], + [ "TextGLDrawable", "class_text_g_l_drawable.html", [ + [ "wxGLString", "classwx_g_l_string.html", [ + [ "wxGLNumberRenderer", "classwx_g_l_number_renderer.html", null ] + ] ] + ] ], + [ "TextTexture", "class_text_texture.html", null ], + [ "TransformerElectricalData", "struct_transformer_electrical_data.html", null ], + [ "wxApp", null, [ + [ "MainApp", "class_main_app.html", null ] + ] ], + [ "wxDataObjectSimple", null, [ + [ "ElementDataObject", "class_element_data_object.html", null ] + ] ], + [ "wxDialog", null, [ + [ "AboutFormBase", "class_about_form_base.html", [ + [ "AboutForm", "class_about_form.html", null ] + ] ], + [ "BusFormBase", "class_bus_form_base.html", [ + [ "BusForm", "class_bus_form.html", null ] + ] ], + [ "ConstantFormBase", "class_constant_form_base.html", [ + [ "ConstantForm", "class_constant_form.html", null ] + ] ], + [ "ControlSystemTestBase", "class_control_system_test_base.html", [ + [ "ControlSystemTest", "class_control_system_test.html", null ] + ] ], + [ "ExponentialFormBase", "class_exponential_form_base.html", [ + [ "ExponentialForm", "class_exponential_form.html", null ] + ] ], + [ "GainFormBase", "class_gain_form_base.html", [ + [ "GainForm", "class_gain_form.html", null ] + ] ], + [ "GeneralPropertiesFormBase", "class_general_properties_form_base.html", [ + [ "GeneralPropertiesForm", "class_general_properties_form.html", null ] + ] ], + [ "GeneratorStabFormBase", "class_generator_stab_form_base.html", [ + [ "GeneratorStabForm", "class_generator_stab_form.html", null ] + ] ], + [ "IndMotorFormBase", "class_ind_motor_form_base.html", [ + [ "IndMotorForm", "class_ind_motor_form.html", null ] + ] ], + [ "IOControlFormBase", "class_i_o_control_form_base.html", [ + [ "IOControlForm", "class_i_o_control_form.html", null ] + ] ], + [ "LimiterFormBase", "class_limiter_form_base.html", [ + [ "LimiterForm", "class_limiter_form.html", null ] + ] ], + [ "LineFormBase", "class_line_form_base.html", [ + [ "LineForm", "class_line_form.html", null ] + ] ], + [ "LoadFormBase", "class_load_form_base.html", [ + [ "LoadForm", "class_load_form.html", null ] + ] ], + [ "RateLimiterFormBase", "class_rate_limiter_form_base.html", [ + [ "RateLimiterForm", "class_rate_limiter_form.html", null ] + ] ], + [ "ReactiveShuntElementFormBase", "class_reactive_shunt_element_form_base.html", [ + [ "ReactiveShuntElementForm", "class_reactive_shunt_element_form.html", null ] + ] ], + [ "SimulationsSettingsFormBase", "class_simulations_settings_form_base.html", [ + [ "SimulationsSettingsForm", "class_simulations_settings_form.html", null ] + ] ], + [ "SumFormBase", "class_sum_form_base.html", [ + [ "SumForm", "class_sum_form.html", null ] + ] ], + [ "SwitchingFormBase", "class_switching_form_base.html", [ + [ "SwitchingForm", "class_switching_form.html", null ] + ] ], + [ "SyncMachineFormBase", "class_sync_machine_form_base.html", [ + [ "SyncMachineForm", "class_sync_machine_form.html", null ] + ] ], + [ "TextFormBase", "class_text_form_base.html", [ + [ "TextForm", "class_text_form.html", null ] + ] ], + [ "TransferFunctionFormBase", "class_transfer_function_form_base.html", [ + [ "TransferFunctionForm", "class_transfer_function_form.html", null ] + ] ], + [ "TransformerFormBase", "class_transformer_form_base.html", [ + [ "TransformerForm", "class_transformer_form.html", null ] + ] ] + ] ], + [ "wxFrame", null, [ + [ "ChartViewBase", "class_chart_view_base.html", [ + [ "ChartView", "class_chart_view.html", null ] + ] ], + [ "ControlEditorBase", "class_control_editor_base.html", [ + [ "ControlEditor", "class_control_editor.html", null ] + ] ], + [ "DataReportBase", "class_data_report_base.html", [ + [ "DataReport", "class_data_report.html", null ] + ] ], + [ "MainFrameBase", "class_main_frame_base.html", [ + [ "MainFrame", "class_main_frame.html", null ] + ] ] + ] ], + [ "wxGLStringArray", "classwx_g_l_string_array.html", null ], + [ "wxPanel", null, [ + [ "WorkspaceBase", "class_workspace_base.html", [ + [ "Workspace", "class_workspace.html", null ] + ] ] + ] ], + [ "wxRibbonMSWArtProvider", null, [ + [ "wxRibbonMetroArtProvider", "classwx_ribbon_metro_art_provider.html", null ] + ] ], + [ "wxString", null, [ + [ "wxGLString", "classwx_g_l_string.html", null ] + ] ], + [ "wxTreeItemData", null, [ + [ "PlotData", "class_plot_data.html", null ] + ] ], + [ "wxWindow", null, [ + [ "ControlElementButton", "class_control_element_button.html", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/index.html b/docs/doxygen/html/index.html index af9a1ee..d6207ad 100644 --- a/docs/doxygen/html/index.html +++ b/docs/doxygen/html/index.html @@ -5,10 +5,17 @@ -PSP-UFU: Main Page +PSP-UFU documentation + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -46,6 +47,20 @@ $(function() { +
+ +
+
+
+ +
-
PSP-UFU Documentation
+
PSP-UFU documentation
-
+

Developers

+
    +
  • Thales Lima Oliveira
  • +
  • Geraldo Caixeta Guimarães
  • +
+

Date

+

September 14, 2017

+

Project home page

+
+ - + diff --git a/docs/doxygen/html/logo128.png b/docs/doxygen/html/logo128.png new file mode 100644 index 0000000..d57d79a Binary files /dev/null and b/docs/doxygen/html/logo128.png differ diff --git a/docs/doxygen/html/logo64.png b/docs/doxygen/html/logo64.png new file mode 100644 index 0000000..69df8be Binary files /dev/null and b/docs/doxygen/html/logo64.png differ diff --git a/docs/doxygen/html/logoHeader.png b/docs/doxygen/html/logoHeader.png new file mode 100644 index 0000000..ad26230 Binary files /dev/null and b/docs/doxygen/html/logoHeader.png differ diff --git a/docs/doxygen/html/main_8cpp_source.html b/docs/doxygen/html/main_8cpp_source.html new file mode 100644 index 0000000..b3045b7 --- /dev/null +++ b/docs/doxygen/html/main_8cpp_source.html @@ -0,0 +1,98 @@ + + + + + + + +Project/main.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
main.cpp
+
+
+
1 #include <wx/app.h>
2 #include <wx/event.h>
3 #include <wx/image.h>
4 #include <wx/stdpaths.h>
5 #include <wx/textfile.h>
6 
7 #include "MainFrame.h"
8 #include "PropertiesData.h"
9 
10 // Define the MainApp
11 class MainApp : public wxApp
12 {
13  public:
14  MainApp() {}
15  virtual ~MainApp() {}
16  bool LoadInitFile(PropertiesData* propertiesData)
17  {
18  wxTextFile file("config.ini");
19  auto data = propertiesData->GetGeneralPropertiesData();
20 
21  if(!file.Create()) {
22  if(!file.Open()) return false;
23 
24  wxString line;
25  for(line = file.GetFirstLine(); !file.Eof(); line = file.GetNextLine()) {
26  wxString tag = "";
27  wxString tagValue = "";
28  bool parseValue = false;
29  for(unsigned int i = 0; i < line.Len(); ++i) {
30  if(line[i] == '=') {
31  parseValue = true;
32  } else {
33  if(parseValue)
34  tagValue += line[i];
35  else
36  tag += line[i];
37  }
38  }
39  // Language
40  if(tag == "lang") {
41  if(tagValue == "pt-br" || tagValue == "pt") {
42  data.language = wxLANGUAGE_PORTUGUESE_BRAZILIAN;
43  } else if(tagValue == "en" || tagValue == "en-us" || tagValue == "en-uk") {
44  data.language = wxLANGUAGE_ENGLISH;
45  }
46  }
47  if(tag == "theme") {
48  if(tagValue == "light") {
49  data.theme = THEME_LIGHT;
50  } else if(tagValue == "dark") {
51  data.theme = THEME_DARK;
52  }
53  }
54  }
55  file.Close();
56  } else { // Create default init file.
57  if(!file.Open()) return false;
58 
59  // Default parameters.
60  file.AddLine("lang=en");
61  file.AddLine("theme=light");
62 
63  file.Write();
64  file.Close();
65 
66  data.language = wxLANGUAGE_ENGLISH;
67  data.theme = THEME_LIGHT;
68  propertiesData->SetGeneralPropertiesData(data);
69  }
70 
71  propertiesData->SetGeneralPropertiesData(data);
72  return true;
73  }
74 
75  void LoadCatalogs(wxLocale* locale, PropertiesData* propertiesData)
76  {
77  locale->Init(propertiesData->GetGeneralPropertiesData().language, wxLOCALE_DONT_LOAD_DEFAULT);
78 
79  wxFileName fn(wxStandardPaths::Get().GetExecutablePath());
80  wxString langPath = fn.GetPath() + "\\..\\data\\lang";
81  locale->AddCatalogLookupPathPrefix(langPath);
82  // Load translation catalogs.
83  locale->AddCatalog(wxT("pt_BR"), wxLANGUAGE_PORTUGUESE_BRAZILIAN);
84  }
85 
86  virtual bool OnInit()
87  {
88  // Add image handlers
89  wxImage::AddHandler(new wxPNGHandler);
90  wxImage::AddHandler(new wxJPEGHandler);
91 
92  PropertiesData* propertiesData = new PropertiesData();
93  LoadInitFile(propertiesData);
94 
95  wxLocale* locale = new wxLocale();
96  LoadCatalogs(locale, propertiesData);
97 
98  MainFrame* mainFrame = new MainFrame(NULL, locale, propertiesData);
99  SetTopWindow(mainFrame);
100  return GetTopWindow()->Show();
101  }
102 };
103 
104 DECLARE_APP(MainApp)
105 IMPLEMENT_APP(MainApp)
+ +
Definition: main.cpp:11
+
+
+ + + + diff --git a/docs/doxygen/html/navtree.css b/docs/doxygen/html/navtree.css new file mode 100644 index 0000000..0cc7e77 --- /dev/null +++ b/docs/doxygen/html/navtree.css @@ -0,0 +1,146 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#fff; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + background-color: #FAFAFF; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: 250px; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url("splitbar.png"); + background-size:100%; + background-repeat:no-repeat; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/doxygen/html/navtree.js b/docs/doxygen/html/navtree.js new file mode 100644 index 0000000..e6d31b0 --- /dev/null +++ b/docs/doxygen/html/navtree.js @@ -0,0 +1,517 @@ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + if ($.browser.msie && $.browser.version<=8) { + // script.onload does not work with older versions of IE + script.onreadystatechange = function() { + if (script.readyState=='complete' || script.readyState=='loaded') { + func(); if (show) showRoot(); + } + } + } + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } if (imm || ($.browser.msie && $.browser.version>8)) { + // somehow slideDown jumps to the start of tree for IE9 :-( + $(node.getChildrenUL()).show(); + } else { + $(node.getChildrenUL()).slideDown("fast"); + } + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + gotoAnchor(anchor,aname,false); +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + $(window).load(function(){ + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + }); + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).load(resizeHeight); +} + + diff --git a/docs/doxygen/html/search/all_d.js b/docs/doxygen/html/search/all_d.js index 6c50512..275f43f 100644 --- a/docs/doxygen/html/search/all_d.js +++ b/docs/doxygen/html/search/all_d.js @@ -1,5 +1,6 @@ var searchData= [ + ['psp_2dufu_20documentation',['PSP-UFU documentation',['../index.html',1,'']]], ['pf_5fbus1_5fto_5fbus2',['PF_BUS1_TO_BUS2',['../_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740ad4f3902fa2c8a1fbd48375c553d40523',1,'PowerElement.h']]], ['pf_5fbus2_5fto_5fbus1',['PF_BUS2_TO_BUS1',['../_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740a76c5c56adeea68291ce8b63b8e6cd095',1,'PowerElement.h']]], ['pf_5fnone',['PF_NONE',['../_power_element_8h.html#a467d3005d31dde0ba0e52cf8e233e740aad1f68b93664b1917fafc7cf9b7537d3',1,'PowerElement.h']]], diff --git a/docs/doxygen/html/search/pages_0.html b/docs/doxygen/html/search/pages_0.html new file mode 100644 index 0000000..4955b9e --- /dev/null +++ b/docs/doxygen/html/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/doxygen/html/search/pages_0.js b/docs/doxygen/html/search/pages_0.js new file mode 100644 index 0000000..b2a0582 --- /dev/null +++ b/docs/doxygen/html/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['psp_2dufu_20documentation',['PSP-UFU documentation',['../index.html',1,'']]] +]; diff --git a/docs/doxygen/html/search/searchdata.js b/docs/doxygen/html/search/searchdata.js index 34ffe62..3b1b25b 100644 --- a/docs/doxygen/html/search/searchdata.js +++ b/docs/doxygen/html/search/searchdata.js @@ -6,7 +6,8 @@ var indexSectionsWithContent = 3: "abcdefghimnoprsuw~", 4: "cms", 5: "cefps", - 6: "fipsu" + 6: "fipsu", + 7: "p" }; var indexSectionNames = @@ -17,7 +18,8 @@ var indexSectionNames = 3: "functions", 4: "variables", 5: "enums", - 6: "enumvalues" + 6: "enumvalues", + 7: "pages" }; var indexSectionLabels = @@ -28,6 +30,7 @@ var indexSectionLabels = 3: "Functions", 4: "Variables", 5: "Enumerations", - 6: "Enumerator" + 6: "Enumerator", + 7: "Pages" }; diff --git a/docs/doxygen/html/struct_bus_electrical_data-members.html b/docs/doxygen/html/struct_bus_electrical_data-members.html index bd29868..ea096e3 100644 --- a/docs/doxygen/html/struct_bus_electrical_data-members.html +++ b/docs/doxygen/html/struct_bus_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
BusElectricalData Member List
@@ -95,11 +110,14 @@ $(function() { stabVoltageVector (defined in BusElectricalData)BusElectricalData voltage (defined in BusElectricalData)BusElectricalData
+ - + diff --git a/docs/doxygen/html/struct_bus_electrical_data.html b/docs/doxygen/html/struct_bus_electrical_data.html index c26bb6d..e35a7d0 100644 --- a/docs/doxygen/html/struct_bus_electrical_data.html +++ b/docs/doxygen/html/struct_bus_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: BusElectricalData Struct Reference +BusElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -148,7 +163,10 @@ double stabFaultReactance< std::vector< std::complex< double > > stabVoltageVector   -

Member Data Documentation

+

Detailed Description

+
+

Definition at line 7 of file Bus.h.

+

Member Data Documentation

◆ faultCurrent

@@ -161,6 +179,8 @@ std::vector< std::complex< double > >  Initial value:
= {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
std::complex<double>(0.0, 0.0)}
+

Definition at line 29 of file Bus.h.

+
@@ -175,17 +195,23 @@ std::vector< std::complex< double > >  Initial value:
= {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
std::complex<double>(0.0, 0.0)}
+

Definition at line 31 of file Bus.h.

+
The documentation for this struct was generated from the following file: + - + diff --git a/docs/doxygen/html/struct_bus_electrical_data.js b/docs/doxygen/html/struct_bus_electrical_data.js new file mode 100644 index 0000000..40da53a --- /dev/null +++ b/docs/doxygen/html/struct_bus_electrical_data.js @@ -0,0 +1,29 @@ +var struct_bus_electrical_data = +[ + [ "busType", "struct_bus_electrical_data.html#a20c4e1cca11c299907dbda8af69079a2", null ], + [ "controlledVoltage", "struct_bus_electrical_data.html#ad1f839ac3919510df2499dce4946752e", null ], + [ "controlledVoltageUnitChoice", "struct_bus_electrical_data.html#a52e84a73867e90ddab0c28b6c64462ee", null ], + [ "faultCurrent", "struct_bus_electrical_data.html#a3c86be4f2a93b65962dc3b10add7c222", null ], + [ "faultLocation", "struct_bus_electrical_data.html#a09640bf6eabe50ccbba8a315f4166f64", null ], + [ "faultReactance", "struct_bus_electrical_data.html#a41698a236eb4106de9d97b1d7dabd57a", null ], + [ "faultResistance", "struct_bus_electrical_data.html#ab46af93ab2595c7e934007dcbe8691f2", null ], + [ "faultType", "struct_bus_electrical_data.html#aabd9ffddd3fdde40215c96523abd1d83", null ], + [ "faultVoltage", "struct_bus_electrical_data.html#af46e3f44b5d676d03fd9e9ae9be5853f", null ], + [ "hasFault", "struct_bus_electrical_data.html#a850f60ae4fd2a925e5527750fbea11d7", null ], + [ "isVoltageControlled", "struct_bus_electrical_data.html#a0d98f10b68f528d32f57d535500e9246", null ], + [ "name", "struct_bus_electrical_data.html#add3569ba6abf52f1447e661d0388a722", null ], + [ "nominalVoltage", "struct_bus_electrical_data.html#af6f309033793b8024f725bc84f6c14ac", null ], + [ "nominalVoltageUnit", "struct_bus_electrical_data.html#a227f82241c431052620b6609fc4a68a0", null ], + [ "number", "struct_bus_electrical_data.html#aa9aabd8e95e3801bac4bedf7c37c7951", null ], + [ "plotBus", "struct_bus_electrical_data.html#a631e99ef3d568a8d8dde32a7b5d69a24", null ], + [ "power", "struct_bus_electrical_data.html#a68ec982b0994c643ca00a8fe77536fcb", null ], + [ "scPower", "struct_bus_electrical_data.html#a3464b55450293b00ddb77c7c82824555", null ], + [ "slackBus", "struct_bus_electrical_data.html#ab2c5b5aaf2df27b37e06816bfa1cda0c", null ], + [ "stabFaultLength", "struct_bus_electrical_data.html#abedbb29a909ba4525fee4e03bcdb8135", null ], + [ "stabFaultReactance", "struct_bus_electrical_data.html#ac50fd7438f28b2565436d7529b02949b", null ], + [ "stabFaultResistance", "struct_bus_electrical_data.html#a2b2faf634bafbb229535051c30abccc6", null ], + [ "stabFaultTime", "struct_bus_electrical_data.html#af7b9b3e82526df61f2e9b8d7a63e4f83", null ], + [ "stabHasFault", "struct_bus_electrical_data.html#aa6807ee1a6f7ca5400fcac6174fcf34b", null ], + [ "stabVoltageVector", "struct_bus_electrical_data.html#aa1acc2a287a5fd72b63a91753e9cfd69", null ], + [ "voltage", "struct_bus_electrical_data.html#a7f1d909cb842c34959d76e4fe7ad426c", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_capacitor_electrical_data-members.html b/docs/doxygen/html/struct_capacitor_electrical_data-members.html index 60d11ae..dfb3a73 100644 --- a/docs/doxygen/html/struct_capacitor_electrical_data-members.html +++ b/docs/doxygen/html/struct_capacitor_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
CapacitorElectricalData Member List
@@ -72,11 +87,14 @@ $(function() { reactivePower (defined in CapacitorElectricalData)CapacitorElectricalData reactivePowerUnit (defined in CapacitorElectricalData)CapacitorElectricalData
+ - + diff --git a/docs/doxygen/html/struct_capacitor_electrical_data.html b/docs/doxygen/html/struct_capacitor_electrical_data.html index 56f8d8e..c52d723 100644 --- a/docs/doxygen/html/struct_capacitor_electrical_data.html +++ b/docs/doxygen/html/struct_capacitor_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: CapacitorElectricalData Struct Reference +CapacitorElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -81,15 +96,22 @@ double reactivePower = ElectricalUnit reactivePowerUnit = UNIT_MVAr   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 8 of file Capacitor.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_capacitor_electrical_data.js b/docs/doxygen/html/struct_capacitor_electrical_data.js new file mode 100644 index 0000000..6d44081 --- /dev/null +++ b/docs/doxygen/html/struct_capacitor_electrical_data.js @@ -0,0 +1,6 @@ +var struct_capacitor_electrical_data = +[ + [ "name", "struct_capacitor_electrical_data.html#a7a0be84b1415ce05eb4296057e75c644", null ], + [ "reactivePower", "struct_capacitor_electrical_data.html#a780a40f5b5d6fdf64c3726c1303ae8e1", null ], + [ "reactivePowerUnit", "struct_capacitor_electrical_data.html#a7733124c4610bceca10faf7385f4d827", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_elements_lists-members.html b/docs/doxygen/html/struct_elements_lists-members.html index 4046af8..894fd48 100644 --- a/docs/doxygen/html/struct_elements_lists-members.html +++ b/docs/doxygen/html/struct_elements_lists-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ElementsLists Member List
@@ -71,11 +86,14 @@ $(function() { elementList (defined in ElementsLists)ElementsLists parentList (defined in ElementsLists)ElementsLists
+ - + diff --git a/docs/doxygen/html/struct_elements_lists.html b/docs/doxygen/html/struct_elements_lists.html index 754d394..cf7ee7a 100644 --- a/docs/doxygen/html/struct_elements_lists.html +++ b/docs/doxygen/html/struct_elements_lists.html @@ -5,10 +5,17 @@ -PSP-UFU: ElementsLists Struct Reference +ElementsLists Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -78,15 +93,22 @@ std::vector< Element * >  std::vector< Bus * > parentList   -
The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_elements_lists.js b/docs/doxygen/html/struct_elements_lists.js new file mode 100644 index 0000000..c2b5ec8 --- /dev/null +++ b/docs/doxygen/html/struct_elements_lists.js @@ -0,0 +1,5 @@ +var struct_elements_lists = +[ + [ "elementList", "struct_elements_lists.html#abb2f2cb73aca2858cc9140040633b0ba", null ], + [ "parentList", "struct_elements_lists.html#aa6137d73278aeb5bab520411fb4444c8", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_general_data-members.html b/docs/doxygen/html/struct_general_data-members.html index 30e9b69..5671c40 100644 --- a/docs/doxygen/html/struct_general_data-members.html +++ b/docs/doxygen/html/struct_general_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
GeneralData Member List
@@ -71,11 +86,14 @@ $(function() { language (defined in GeneralData)GeneralData theme (defined in GeneralData)GeneralData
+ - + diff --git a/docs/doxygen/html/struct_general_data.html b/docs/doxygen/html/struct_general_data.html index d22ad95..3f19e2f 100644 --- a/docs/doxygen/html/struct_general_data.html +++ b/docs/doxygen/html/struct_general_data.html @@ -5,10 +5,17 @@ -PSP-UFU: GeneralData Struct Reference +GeneralData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -78,15 +93,22 @@ wxLanguage language = GUITheme theme = THEME_LIGHT   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 35 of file PropertiesData.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_general_data.js b/docs/doxygen/html/struct_general_data.js new file mode 100644 index 0000000..b8d0910 --- /dev/null +++ b/docs/doxygen/html/struct_general_data.js @@ -0,0 +1,5 @@ +var struct_general_data = +[ + [ "language", "struct_general_data.html#ab52356d45c62ade32d080b3244f0b3ef", null ], + [ "theme", "struct_general_data.html#aff6d4b38646366581a264e66a0a8e6d0", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_ind_motor_electrical_data-members.html b/docs/doxygen/html/struct_ind_motor_electrical_data-members.html index 1c94f68..6cce0b3 100644 --- a/docs/doxygen/html/struct_ind_motor_electrical_data-members.html +++ b/docs/doxygen/html/struct_ind_motor_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IndMotorElectricalData Member List
@@ -74,11 +89,14 @@ $(function() { reactivePower (defined in IndMotorElectricalData)IndMotorElectricalData reactivePowerUnit (defined in IndMotorElectricalData)IndMotorElectricalData
+ - + diff --git a/docs/doxygen/html/struct_ind_motor_electrical_data.html b/docs/doxygen/html/struct_ind_motor_electrical_data.html index a1590b4..859ee2d 100644 --- a/docs/doxygen/html/struct_ind_motor_electrical_data.html +++ b/docs/doxygen/html/struct_ind_motor_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: IndMotorElectricalData Struct Reference +IndMotorElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -87,15 +102,22 @@ double reactivePower = ElectricalUnit reactivePowerUnit = UNIT_MVAr   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 8 of file IndMotor.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_ind_motor_electrical_data.js b/docs/doxygen/html/struct_ind_motor_electrical_data.js new file mode 100644 index 0000000..3311302 --- /dev/null +++ b/docs/doxygen/html/struct_ind_motor_electrical_data.js @@ -0,0 +1,8 @@ +var struct_ind_motor_electrical_data = +[ + [ "activePower", "struct_ind_motor_electrical_data.html#ad7ccd4886668a2e1fa94a14741966927", null ], + [ "activePowerUnit", "struct_ind_motor_electrical_data.html#a27de229ce7940bfc15afc3601801dc1a", null ], + [ "name", "struct_ind_motor_electrical_data.html#a638909bb25e0e0957799bce28db54bd0", null ], + [ "reactivePower", "struct_ind_motor_electrical_data.html#ac42218e06dcb3b4a5cf54ec9c5cd6cf5", null ], + [ "reactivePowerUnit", "struct_ind_motor_electrical_data.html#ae44b69b6c535a61c979bc6e7bfc86a41", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_inductor_electrical_data-members.html b/docs/doxygen/html/struct_inductor_electrical_data-members.html index e767fed..3b371bf 100644 --- a/docs/doxygen/html/struct_inductor_electrical_data-members.html +++ b/docs/doxygen/html/struct_inductor_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
InductorElectricalData Member List
@@ -72,11 +87,14 @@ $(function() { reactivePower (defined in InductorElectricalData)InductorElectricalData reactivePowerUnit (defined in InductorElectricalData)InductorElectricalData
+ - + diff --git a/docs/doxygen/html/struct_inductor_electrical_data.html b/docs/doxygen/html/struct_inductor_electrical_data.html index 9c0dc59..7212d33 100644 --- a/docs/doxygen/html/struct_inductor_electrical_data.html +++ b/docs/doxygen/html/struct_inductor_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: InductorElectricalData Struct Reference +InductorElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -81,15 +96,22 @@ double reactivePower = ElectricalUnit reactivePowerUnit = UNIT_MVAr   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 8 of file Inductor.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_inductor_electrical_data.js b/docs/doxygen/html/struct_inductor_electrical_data.js new file mode 100644 index 0000000..49d3309 --- /dev/null +++ b/docs/doxygen/html/struct_inductor_electrical_data.js @@ -0,0 +1,6 @@ +var struct_inductor_electrical_data = +[ + [ "name", "struct_inductor_electrical_data.html#a351fa53fe312f5436f101e57dcf1dff6", null ], + [ "reactivePower", "struct_inductor_electrical_data.html#ab7816f138d77f1396aebb20987385ed2", null ], + [ "reactivePowerUnit", "struct_inductor_electrical_data.html#a930f07d78c71de5b0bf62f5e1c07987d", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_integration_constant-members.html b/docs/doxygen/html/struct_integration_constant-members.html index b34e550..0e676ed 100644 --- a/docs/doxygen/html/struct_integration_constant-members.html +++ b/docs/doxygen/html/struct_integration_constant-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
IntegrationConstant Member List
@@ -71,11 +86,14 @@ $(function() { cIntegrationConstant mIntegrationConstant
+ - + diff --git a/docs/doxygen/html/struct_integration_constant.html b/docs/doxygen/html/struct_integration_constant.html index 09dd234..b762833 100644 --- a/docs/doxygen/html/struct_integration_constant.html +++ b/docs/doxygen/html/struct_integration_constant.html @@ -5,10 +5,17 @@ -PSP-UFU: IntegrationConstant Class Reference +IntegrationConstant Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -81,6 +96,8 @@ Public Attributes

Detailed Description

Author
Thales Lima Oliveira
Date
24/05/2017
+ +

Definition at line 88 of file PowerElement.h.

Member Data Documentation

◆ c

@@ -95,6 +112,8 @@ Public Attributes

C value

+

Definition at line 89 of file PowerElement.h.

+
@@ -110,17 +129,23 @@ Public Attributes

M value

+

Definition at line 90 of file PowerElement.h.

+

The documentation for this class was generated from the following file: + - + diff --git a/docs/doxygen/html/struct_integration_constant.js b/docs/doxygen/html/struct_integration_constant.js new file mode 100644 index 0000000..66f9630 --- /dev/null +++ b/docs/doxygen/html/struct_integration_constant.js @@ -0,0 +1,5 @@ +var struct_integration_constant = +[ + [ "c", "struct_integration_constant.html#afc3598097377951b84492d087a06b455", null ], + [ "m", "struct_integration_constant.html#adafabd0d37a52d4ed054a800cbce3d65", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_line_electrical_data-members.html b/docs/doxygen/html/struct_line_electrical_data-members.html index 366e4ea..b7b5ea8 100644 --- a/docs/doxygen/html/struct_line_electrical_data-members.html +++ b/docs/doxygen/html/struct_line_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LineElectricalData Member List
@@ -88,11 +103,14 @@ $(function() { zeroIndReactance (defined in LineElectricalData)LineElectricalData zeroResistance (defined in LineElectricalData)LineElectricalData
+ - + diff --git a/docs/doxygen/html/struct_line_electrical_data.html b/docs/doxygen/html/struct_line_electrical_data.html index ac6d2e6..6e0e645 100644 --- a/docs/doxygen/html/struct_line_electrical_data.html +++ b/docs/doxygen/html/struct_line_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: LineElectricalData Struct Reference +LineElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -129,15 +144,22 @@ double zeroCapSusceptance< std::complex< double > faultCurrent [2][3]   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 7 of file Line.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_line_electrical_data.js b/docs/doxygen/html/struct_line_electrical_data.js new file mode 100644 index 0000000..1e6e07e --- /dev/null +++ b/docs/doxygen/html/struct_line_electrical_data.js @@ -0,0 +1,22 @@ +var struct_line_electrical_data = +[ + [ "capSusceptance", "struct_line_electrical_data.html#a33cfcc0ab29d3be0fd6ddf8032805d1b", null ], + [ "capSusceptanceUnit", "struct_line_electrical_data.html#ae07e759b48bbf409fd796a7662b7e7fb", null ], + [ "current", "struct_line_electrical_data.html#a7ac07247cc0a8fb661dacf3caeb9276a", null ], + [ "faultCurrent", "struct_line_electrical_data.html#a678eec3a4ecaf9dde526bcbc3f422c49", null ], + [ "indReactance", "struct_line_electrical_data.html#a57774b1ee3f36e450b7a80dca48d5bca", null ], + [ "indReactanceUnit", "struct_line_electrical_data.html#ae02c7ccf7c5b34c3e026496235084fd6", null ], + [ "lineSize", "struct_line_electrical_data.html#a8852b0441c519c8e8f2507a1b796123a", null ], + [ "name", "struct_line_electrical_data.html#a1056c7122fa5908c61e76ded862a31e5", null ], + [ "nominalPower", "struct_line_electrical_data.html#a73510824a3d47cad10f6d4e47568d308", null ], + [ "nominalPowerUnit", "struct_line_electrical_data.html#a6bfc865edf42d04035a34a623a9664e0", null ], + [ "nominalVoltage", "struct_line_electrical_data.html#a6fca3b0840b2e2711b2065396e04977a", null ], + [ "nominalVoltageUnit", "struct_line_electrical_data.html#a7f04322f6dfda0b47243e9f836728ada", null ], + [ "powerFlow", "struct_line_electrical_data.html#ab26c2c88d5ced5a99a0df1670777d37b", null ], + [ "resistance", "struct_line_electrical_data.html#ad67a555abe1b5c45866ca98f549591fe", null ], + [ "resistanceUnit", "struct_line_electrical_data.html#a30b887f127806b28ba96b7710f04ff3f", null ], + [ "useLinePower", "struct_line_electrical_data.html#a509ce35959baf0ce23f1db73cd7de6a6", null ], + [ "zeroCapSusceptance", "struct_line_electrical_data.html#aba6808c87d6305c813ea12f022f03e43", null ], + [ "zeroIndReactance", "struct_line_electrical_data.html#a9a978a31a88e51f76cd481dd05c89c39", null ], + [ "zeroResistance", "struct_line_electrical_data.html#ae0a5ff6c4bb36cd6b671d3b8ac95bcf2", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_load_electrical_data-members.html b/docs/doxygen/html/struct_load_electrical_data-members.html index 61a39f7..a09c6e6 100644 --- a/docs/doxygen/html/struct_load_electrical_data-members.html +++ b/docs/doxygen/html/struct_load_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
LoadElectricalData Member List
@@ -75,11 +90,14 @@ $(function() { reactivePower (defined in LoadElectricalData)LoadElectricalData reactivePowerUnit (defined in LoadElectricalData)LoadElectricalData
+ - + diff --git a/docs/doxygen/html/struct_load_electrical_data.html b/docs/doxygen/html/struct_load_electrical_data.html index 3d47543..f28beae 100644 --- a/docs/doxygen/html/struct_load_electrical_data.html +++ b/docs/doxygen/html/struct_load_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: LoadElectricalData Struct Reference +LoadElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -90,15 +105,22 @@ double reactivePower = LoadType loadType = CONST_POWER   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 13 of file Load.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_load_electrical_data.js b/docs/doxygen/html/struct_load_electrical_data.js new file mode 100644 index 0000000..1416eda --- /dev/null +++ b/docs/doxygen/html/struct_load_electrical_data.js @@ -0,0 +1,9 @@ +var struct_load_electrical_data = +[ + [ "activePower", "struct_load_electrical_data.html#a5bc888d7d2e6b4b4d43a4a7d5f05e69c", null ], + [ "activePowerUnit", "struct_load_electrical_data.html#a0d3eacb5817ec49d2894d3dfd12385ab", null ], + [ "loadType", "struct_load_electrical_data.html#ad5541520b5febfc4111296e2c1b8862e", null ], + [ "name", "struct_load_electrical_data.html#a9026df8866348f10a154c5996700ab40", null ], + [ "reactivePower", "struct_load_electrical_data.html#af0ea7a82b7b7a99f29debc03b1f7fbd3", null ], + [ "reactivePowerUnit", "struct_load_electrical_data.html#acd145e04317402c89cc03ba258a61a98", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_reactive_limits-members.html b/docs/doxygen/html/struct_reactive_limits-members.html index 1605c34..5f3ac20 100644 --- a/docs/doxygen/html/struct_reactive_limits-members.html +++ b/docs/doxygen/html/struct_reactive_limits-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
ReactiveLimits Member List
@@ -74,11 +89,14 @@ $(function() { minLimit (defined in ReactiveLimits)ReactiveLimits minLimitType (defined in ReactiveLimits)ReactiveLimits
+ - + diff --git a/docs/doxygen/html/struct_reactive_limits.html b/docs/doxygen/html/struct_reactive_limits.html index 63dd055..390905f 100644 --- a/docs/doxygen/html/struct_reactive_limits.html +++ b/docs/doxygen/html/struct_reactive_limits.html @@ -5,10 +5,17 @@ -PSP-UFU: ReactiveLimits Struct Reference +ReactiveLimits Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -87,15 +102,22 @@ ReactiveLimitsType minLimi ReactiveLimitsType limitReached = RL_NONE_REACHED   -
The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_reactive_limits.js b/docs/doxygen/html/struct_reactive_limits.js new file mode 100644 index 0000000..84e2358 --- /dev/null +++ b/docs/doxygen/html/struct_reactive_limits.js @@ -0,0 +1,8 @@ +var struct_reactive_limits = +[ + [ "limitReached", "struct_reactive_limits.html#ae857e3f04853ff3a91f6876314a382e6", null ], + [ "maxLimit", "struct_reactive_limits.html#ab6b953f8c1dec53d2fe5d0e8ac8d42cd", null ], + [ "maxLimitType", "struct_reactive_limits.html#a75d18e88f580e6573923139fc7736f14", null ], + [ "minLimit", "struct_reactive_limits.html#ae74269f642fb45328b112762c39613c0", null ], + [ "minLimitType", "struct_reactive_limits.html#a91673f0f2c3d93f376265931ff2f6ee5", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_simulation_data-members.html b/docs/doxygen/html/struct_simulation_data-members.html index df3122f..db5c970 100644 --- a/docs/doxygen/html/struct_simulation_data-members.html +++ b/docs/doxygen/html/struct_simulation_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SimulationData Member List
@@ -85,11 +100,14 @@ $(function() { timeStep (defined in SimulationData)SimulationData useCOI (defined in SimulationData)SimulationData
+ - + diff --git a/docs/doxygen/html/struct_simulation_data.html b/docs/doxygen/html/struct_simulation_data.html index 43cdd0e..9163ddb 100644 --- a/docs/doxygen/html/struct_simulation_data.html +++ b/docs/doxygen/html/struct_simulation_data.html @@ -5,10 +5,17 @@ -PSP-UFU: SimulationData Struct Reference +SimulationData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -120,15 +135,22 @@ double plotTime = 1e-2 bool useCOI = true   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 11 of file PropertiesData.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_simulation_data.js b/docs/doxygen/html/struct_simulation_data.js new file mode 100644 index 0000000..68edb7b --- /dev/null +++ b/docs/doxygen/html/struct_simulation_data.js @@ -0,0 +1,19 @@ +var struct_simulation_data = +[ + [ "accFator", "struct_simulation_data.html#a75d5bdfb0ad45f3e901b73877dd5d394", null ], + [ "basePower", "struct_simulation_data.html#ab5a905d2b287348696596e9f07fcd552", null ], + [ "basePowerUnit", "struct_simulation_data.html#a4f00f14bee3145127e12023088e92dcf", null ], + [ "controlTimeStepRatio", "struct_simulation_data.html#af5b66ffff262e5d7c49835c1fb57b302", null ], + [ "faultAfterPowerFlow", "struct_simulation_data.html#a10954746e67fdbc89860f3718ed23ee9", null ], + [ "plotTime", "struct_simulation_data.html#a3cf2e7f71bf62e323b60e0ddb997266a", null ], + [ "powerFlowMaxIterations", "struct_simulation_data.html#adf9aa7a02213374ac15439e8929f0179", null ], + [ "powerFlowMethod", "struct_simulation_data.html#ab8e32dc510771960d6d6612e80ddbae6", null ], + [ "powerFlowTolerance", "struct_simulation_data.html#a4caa71c540375ce8c86da5edbc0048c6", null ], + [ "scPowerAfterPowerFlow", "struct_simulation_data.html#a367edc643dd9b6eca8413c666d1a02c1", null ], + [ "stabilityFrequency", "struct_simulation_data.html#a845385f5d00d4f2481782cbc5bb8d77f", null ], + [ "stabilityMaxIterations", "struct_simulation_data.html#a2b7408c3a9f2dacc35099bbce451c261", null ], + [ "stabilitySimulationTime", "struct_simulation_data.html#ac9bad1814e79451a2fd2f6afcee7016b", null ], + [ "stabilityTolerance", "struct_simulation_data.html#ac8073342d75faf98fb15ff5100fdc711", null ], + [ "timeStep", "struct_simulation_data.html#af0ca3cdcc810fcba377e5c6e2bcd71b5", null ], + [ "useCOI", "struct_simulation_data.html#a18355fc645416844735b2496700aefab", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_switching_data-members.html b/docs/doxygen/html/struct_switching_data-members.html index afeeb64..2e031bd 100644 --- a/docs/doxygen/html/struct_switching_data-members.html +++ b/docs/doxygen/html/struct_switching_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SwitchingData Member List
@@ -71,11 +86,14 @@ $(function() { swTimeSwitchingData swTypeSwitchingData
+ - + diff --git a/docs/doxygen/html/struct_switching_data.html b/docs/doxygen/html/struct_switching_data.html index b8bd908..d4c9e98 100644 --- a/docs/doxygen/html/struct_switching_data.html +++ b/docs/doxygen/html/struct_switching_data.html @@ -5,10 +5,17 @@ -PSP-UFU: SwitchingData Class Reference +SwitchingData Class Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -81,6 +96,8 @@ Public Attributes

Detailed Description

Author
Thales Lima Oliveira
Date
18/01/2017
+ +

Definition at line 76 of file PowerElement.h.

Member Data Documentation

◆ swTime

@@ -95,6 +112,8 @@ Public Attributes

Time of switching

+

Definition at line 78 of file PowerElement.h.

+
@@ -110,17 +129,23 @@ Public Attributes

Type of switching

+

Definition at line 77 of file PowerElement.h.

+

The documentation for this class was generated from the following file: + - + diff --git a/docs/doxygen/html/struct_switching_data.js b/docs/doxygen/html/struct_switching_data.js new file mode 100644 index 0000000..5e53965 --- /dev/null +++ b/docs/doxygen/html/struct_switching_data.js @@ -0,0 +1,5 @@ +var struct_switching_data = +[ + [ "swTime", "struct_switching_data.html#a3323745bf0a3f6461fbc19bc76a189df", null ], + [ "swType", "struct_switching_data.html#af78fb958137a0532ea2a584810708574", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_sync_generator_electrical_data-members.html b/docs/doxygen/html/struct_sync_generator_electrical_data-members.html index 49088f0..3b52a3b 100644 --- a/docs/doxygen/html/struct_sync_generator_electrical_data-members.html +++ b/docs/doxygen/html/struct_sync_generator_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SyncGeneratorElectricalData Member List
@@ -145,11 +160,14 @@ $(function() { zeroReactance (defined in SyncGeneratorElectricalData)SyncGeneratorElectricalData zeroResistance (defined in SyncGeneratorElectricalData)SyncGeneratorElectricalData
+ - + diff --git a/docs/doxygen/html/struct_sync_generator_electrical_data.html b/docs/doxygen/html/struct_sync_generator_electrical_data.html index 4daf6cd..72a2d04 100644 --- a/docs/doxygen/html/struct_sync_generator_electrical_data.html +++ b/docs/doxygen/html/struct_sync_generator_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: SyncGeneratorElectricalData Struct Reference +SyncGeneratorElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -299,7 +314,10 @@ double oldPe Machines::SyncMachineModel model = Machines::SM_MODEL_1   -

Member Data Documentation

+

Detailed Description

+
+

Definition at line 8 of file SyncGenerator.h.

+

Member Data Documentation

◆ faultCurrent

@@ -312,17 +330,23 @@ Machines::SyncMachineModel 
Initial value:
= {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
std::complex<double>(0.0, 0.0)}
+

Definition at line 38 of file SyncGenerator.h.

+

The documentation for this struct was generated from the following file: + - + diff --git a/docs/doxygen/html/struct_sync_generator_electrical_data.js b/docs/doxygen/html/struct_sync_generator_electrical_data.js new file mode 100644 index 0000000..6427da8 --- /dev/null +++ b/docs/doxygen/html/struct_sync_generator_electrical_data.js @@ -0,0 +1,79 @@ +var struct_sync_generator_electrical_data = +[ + [ "activePower", "struct_sync_generator_electrical_data.html#a58c50a8e615dadef9353046329b829f9", null ], + [ "activePowerUnit", "struct_sync_generator_electrical_data.html#a39a8fd0c1e59355cf72f4fbf274c1863", null ], + [ "armResistance", "struct_sync_generator_electrical_data.html#a842fa25b7c6051b5b93cfc8fe28867d2", null ], + [ "avr", "struct_sync_generator_electrical_data.html#af0b3c5e37645d44e40add8fcf4bec7ea", null ], + [ "avrSolver", "struct_sync_generator_electrical_data.html#a02ea43b57770200f43686b21d6f5bee7", null ], + [ "damping", "struct_sync_generator_electrical_data.html#a3fe501f6261730e18c4601cfdb7db680", null ], + [ "delta", "struct_sync_generator_electrical_data.html#a9e97d6c96ba58cfb8dcc1d1293867ef1", null ], + [ "deltaVector", "struct_sync_generator_electrical_data.html#abe9f0c1ea9349fe319fefe804cfcf0bd", null ], + [ "electricalPower", "struct_sync_generator_electrical_data.html#a539062122f9f437a40c4e50e17bb2a87", null ], + [ "electricalPowerVector", "struct_sync_generator_electrical_data.html#a32a4709d2efaa85914e1757077fa4b21", null ], + [ "faultCurrent", "struct_sync_generator_electrical_data.html#a20b583f81933f0f077fb78851b92e7f5", null ], + [ "fieldVoltage", "struct_sync_generator_electrical_data.html#a565358e9818ff25a4e96d50cade77be4", null ], + [ "fieldVoltageVector", "struct_sync_generator_electrical_data.html#abe8b5c90c1b330c2c340def3973694c6", null ], + [ "freqVector", "struct_sync_generator_electrical_data.html#a2a228ce1cc8ac26705da097326921e0f", null ], + [ "groundNeutral", "struct_sync_generator_electrical_data.html#a039151f15d01a6b70c13674894034350", null ], + [ "groundReactance", "struct_sync_generator_electrical_data.html#a89ccce917e842d4ad6f2f7c076a38a47", null ], + [ "groundResistance", "struct_sync_generator_electrical_data.html#a78dbbb159874e5e4f3f889881fd50408", null ], + [ "haveMaxReactive", "struct_sync_generator_electrical_data.html#aeb8cc5e98f68e4a14febaa7436813f63", null ], + [ "haveMinReactive", "struct_sync_generator_electrical_data.html#a6bd4994b89c6a338c7d51e875490a31f", null ], + [ "icDelta", "struct_sync_generator_electrical_data.html#ab7faade6dd8c40554a82ade6e84730b3", null ], + [ "icSpeed", "struct_sync_generator_electrical_data.html#ac092cb3ba2be5fca9881fbaaa6d13ff1", null ], + [ "icSubEd", "struct_sync_generator_electrical_data.html#a13371480bdeca2be90140e3c168ee9a7", null ], + [ "icSubEq", "struct_sync_generator_electrical_data.html#a1a1224d8d980c1aa408acd0c731e73c1", null ], + [ "icTranEd", "struct_sync_generator_electrical_data.html#a9a534e4c50aba0e6a2cc6b5dbc2d2c03", null ], + [ "icTranEq", "struct_sync_generator_electrical_data.html#a599699b6b55ca35dfec13f0a1d58dc37", null ], + [ "inertia", "struct_sync_generator_electrical_data.html#abec98d3227f7c93d1caf05c3a885b097", null ], + [ "initialFieldVoltage", "struct_sync_generator_electrical_data.html#a452fd337c002c0872ee2f22f8eefeb14", null ], + [ "maxReactive", "struct_sync_generator_electrical_data.html#adffc8e7c793c2f23dfd5b573a14aba24", null ], + [ "maxReactiveUnit", "struct_sync_generator_electrical_data.html#a2a21d204b68e1896bd2aae87ef9e6ec3", null ], + [ "mechanicalPowerVector", "struct_sync_generator_electrical_data.html#a58d893dcf9933cf73be0bb12d3472ac6", null ], + [ "minReactive", "struct_sync_generator_electrical_data.html#a210c90fcf0cb602453758550f12fc625", null ], + [ "minReactiveUnit", "struct_sync_generator_electrical_data.html#ad0217ad35b1964abffab864b0454717c", null ], + [ "model", "struct_sync_generator_electrical_data.html#a97c98fba9f73a7b70ac84e6e4dc7bd2f", null ], + [ "name", "struct_sync_generator_electrical_data.html#ac32b752bc6bc51a6adaf66e8a7cea895", null ], + [ "negativeReactance", "struct_sync_generator_electrical_data.html#a19511b88d17a0046dcd5e94aa748a966", null ], + [ "negativeResistance", "struct_sync_generator_electrical_data.html#ae554e8863b29bf58119bad4e9b4eee52", null ], + [ "nominalPower", "struct_sync_generator_electrical_data.html#a16117d43dd668998854692abaf289c5f", null ], + [ "nominalPowerUnit", "struct_sync_generator_electrical_data.html#ac2b9ca7fa928dcc7c9ad5b3d90360784", null ], + [ "nominalVoltage", "struct_sync_generator_electrical_data.html#a1405e96b81978e44e60dc535fbe08f47", null ], + [ "nominalVoltageUnit", "struct_sync_generator_electrical_data.html#aef18b7163c5e2b9e6e2c671b3939480d", null ], + [ "oldId", "struct_sync_generator_electrical_data.html#ad6cc9505241ac17f3ab1f6011aace0b8", null ], + [ "oldIq", "struct_sync_generator_electrical_data.html#a124840d7c73161bb4187aa5215969647", null ], + [ "oldPe", "struct_sync_generator_electrical_data.html#ad5935c784af5f03f7c9cdba7df88f1de", null ], + [ "pe", "struct_sync_generator_electrical_data.html#ade7d762b92727bcc58821d3bf9a743ca", null ], + [ "plotSyncMachine", "struct_sync_generator_electrical_data.html#abb4e828c8091dd69e2535d72b51fc6e7", null ], + [ "pm", "struct_sync_generator_electrical_data.html#a53edeaeb3361da40e3939bfffa401e6c", null ], + [ "positiveReactance", "struct_sync_generator_electrical_data.html#a78ce2b0f1cb61c3e1d56796ffe7d2d11", null ], + [ "positiveResistance", "struct_sync_generator_electrical_data.html#a73980536ff6e4485d4d71bf5407d9d8c", null ], + [ "potierReactance", "struct_sync_generator_electrical_data.html#a79529c49e1337863a2aca63b9c57c821", null ], + [ "reactivePower", "struct_sync_generator_electrical_data.html#a82bc75dc1c81776dc2998803e0f62890", null ], + [ "reactivePowerUnit", "struct_sync_generator_electrical_data.html#a787696951a05eb8000c0495b018246e4", null ], + [ "satFactor", "struct_sync_generator_electrical_data.html#ac53d1a5127d7dcd5f8b94d2ca0cae4b7", null ], + [ "speed", "struct_sync_generator_electrical_data.html#a5bfbef7dc02c36f5673ebd6c25f9a7a9", null ], + [ "speedGov", "struct_sync_generator_electrical_data.html#a1c21e18774280d7dc7378e39eeba04ff", null ], + [ "speedGovSolver", "struct_sync_generator_electrical_data.html#a7c4224d05447c55c895fe164d09e0a8c", null ], + [ "subEd", "struct_sync_generator_electrical_data.html#a64003e1947c801662450bb04723e1696", null ], + [ "subEq", "struct_sync_generator_electrical_data.html#ab4c9a79a39406b6e744ab4fb92e94750", null ], + [ "subTd0", "struct_sync_generator_electrical_data.html#a73b9df7db4f2d984fb5f976003122131", null ], + [ "subTq0", "struct_sync_generator_electrical_data.html#a930a0681c0c9cabd3d0a363e3bfae4d9", null ], + [ "subXd", "struct_sync_generator_electrical_data.html#adc91d39da384d4caf81f50bc7bd56207", null ], + [ "subXq", "struct_sync_generator_electrical_data.html#ab261eec61032be2722ff2c6f7b2c7506", null ], + [ "syncXd", "struct_sync_generator_electrical_data.html#a7d388c89ca828391d47df50172cd9da1", null ], + [ "syncXq", "struct_sync_generator_electrical_data.html#a120f89adf2d52ae106e3d99fa7453a0d", null ], + [ "terminalVoltage", "struct_sync_generator_electrical_data.html#a7f78dad336b743be9627377e015bff26", null ], + [ "terminalVoltageVector", "struct_sync_generator_electrical_data.html#ac49316b6415fcb531df9f5ae5467ca20", null ], + [ "tranEd", "struct_sync_generator_electrical_data.html#a4726eca1a20265688e6145f4f95885aa", null ], + [ "tranEq", "struct_sync_generator_electrical_data.html#a235b1f71ead84082b1fce66bfd7a17fc", null ], + [ "transTd0", "struct_sync_generator_electrical_data.html#a808dac6e3f783331633990b4ad18831a", null ], + [ "transTq0", "struct_sync_generator_electrical_data.html#a9f351e057a8249ae2fcfdf7e102e4633", null ], + [ "transXd", "struct_sync_generator_electrical_data.html#a278df0fd573717f280a99a6e1ac5f688", null ], + [ "transXq", "struct_sync_generator_electrical_data.html#a8f0d820f77f5cfd6f8ef2c53570422c7", null ], + [ "useAVR", "struct_sync_generator_electrical_data.html#af659153561dff178ed4d3b87d79d05a0", null ], + [ "useMachineBase", "struct_sync_generator_electrical_data.html#a80cc5ac62cbe7932c1f96be3843d0f38", null ], + [ "useSpeedGovernor", "struct_sync_generator_electrical_data.html#aec21ca1955d3c33aa2d1fd4665f83261", null ], + [ "zeroReactance", "struct_sync_generator_electrical_data.html#ac97b40c21bf8d411d2971c835d186a4a", null ], + [ "zeroResistance", "struct_sync_generator_electrical_data.html#a854269759e28f1bf4782fa23dcbbe811", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_sync_motor_electrical_data-members.html b/docs/doxygen/html/struct_sync_motor_electrical_data-members.html index f9216f0..19ea15c 100644 --- a/docs/doxygen/html/struct_sync_motor_electrical_data-members.html +++ b/docs/doxygen/html/struct_sync_motor_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
SyncMotorElectricalData Member List
@@ -145,11 +160,14 @@ $(function() { zeroReactance (defined in SyncMotorElectricalData)SyncMotorElectricalData zeroResistance (defined in SyncMotorElectricalData)SyncMotorElectricalData
+ - + diff --git a/docs/doxygen/html/struct_sync_motor_electrical_data.html b/docs/doxygen/html/struct_sync_motor_electrical_data.html index db64b8d..c4eab9d 100644 --- a/docs/doxygen/html/struct_sync_motor_electrical_data.html +++ b/docs/doxygen/html/struct_sync_motor_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: SyncMotorElectricalData Struct Reference +SyncMotorElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -299,7 +314,10 @@ double oldPe Machines::SyncMachineModel model = Machines::SM_MODEL_1   -

Member Data Documentation

+

Detailed Description

+
+

Definition at line 8 of file SyncMotor.h.

+

Member Data Documentation

◆ faultCurrent

@@ -312,17 +330,23 @@ Machines::SyncMachineModel 
Initial value:
= {std::complex<double>(0.0, 0.0), std::complex<double>(0.0, 0.0),
std::complex<double>(0.0, 0.0)}
+

Definition at line 38 of file SyncMotor.h.

+

The documentation for this struct was generated from the following file: + - + diff --git a/docs/doxygen/html/struct_sync_motor_electrical_data.js b/docs/doxygen/html/struct_sync_motor_electrical_data.js new file mode 100644 index 0000000..de30196 --- /dev/null +++ b/docs/doxygen/html/struct_sync_motor_electrical_data.js @@ -0,0 +1,79 @@ +var struct_sync_motor_electrical_data = +[ + [ "activePower", "struct_sync_motor_electrical_data.html#adaadd65c21f57320599da2e87fd148f7", null ], + [ "activePowerUnit", "struct_sync_motor_electrical_data.html#a0f602e8d66656209e5ec223ba000ca55", null ], + [ "armResistance", "struct_sync_motor_electrical_data.html#a72bca6a6528590d3a53ac0ff8557d9d0", null ], + [ "avr", "struct_sync_motor_electrical_data.html#ac570dda882a0360ba00bdac26666e1b6", null ], + [ "avrSolver", "struct_sync_motor_electrical_data.html#a669d499150a715ad3ab2a1186fc2a22c", null ], + [ "damping", "struct_sync_motor_electrical_data.html#a68a50d74cbe840e6f5ddde4d6568551e", null ], + [ "delta", "struct_sync_motor_electrical_data.html#a4c5361a270446607dabb2929a8854653", null ], + [ "deltaVector", "struct_sync_motor_electrical_data.html#a0869e5e1534c10bd2d8b9597a6787a24", null ], + [ "electricalPower", "struct_sync_motor_electrical_data.html#ab807e7528d0ba01024ade3f5da560e56", null ], + [ "electricalPowerVector", "struct_sync_motor_electrical_data.html#a1240daaa5654ca3a81e9351ece1be28c", null ], + [ "faultCurrent", "struct_sync_motor_electrical_data.html#ae97bcbb0f856bd793315d2319572bdd4", null ], + [ "fieldVoltage", "struct_sync_motor_electrical_data.html#ade1a3889071ddf1d02e7d21bc31e4566", null ], + [ "fieldVoltageVector", "struct_sync_motor_electrical_data.html#a6fd87a55210b48a4cdbb99a1a9a05ff2", null ], + [ "freqVector", "struct_sync_motor_electrical_data.html#a46c3e4a04013c37e4d77497bdcca2d7b", null ], + [ "groundNeutral", "struct_sync_motor_electrical_data.html#a0fbea6750a832909452d464b6ce5476a", null ], + [ "groundReactance", "struct_sync_motor_electrical_data.html#a1a1431ec9cbc6d7d443b2888cf21fe26", null ], + [ "groundResistance", "struct_sync_motor_electrical_data.html#aed62412a84b5beefe7419b6441ce51a7", null ], + [ "haveMaxReactive", "struct_sync_motor_electrical_data.html#a56b504d00007e15f0271c0702bfcf6cd", null ], + [ "haveMinReactive", "struct_sync_motor_electrical_data.html#afd1714dee3344dd0601dcfc074536da9", null ], + [ "icDelta", "struct_sync_motor_electrical_data.html#a85bf9e6428f0cef5b3a4d6412185746b", null ], + [ "icSpeed", "struct_sync_motor_electrical_data.html#af01b0c7e5b48c4f6cef9775b627d98f2", null ], + [ "icSubEd", "struct_sync_motor_electrical_data.html#ad7257fa4d7fd7e9b104a4d7076fde2fe", null ], + [ "icSubEq", "struct_sync_motor_electrical_data.html#a0b3104f4dd9e45e92205f2ae18498c5c", null ], + [ "icTranEd", "struct_sync_motor_electrical_data.html#a98301a458887ef7cde8bab0095652ba4", null ], + [ "icTranEq", "struct_sync_motor_electrical_data.html#ac6eec343f36f933a2d2c2858fb89f1e4", null ], + [ "inertia", "struct_sync_motor_electrical_data.html#af96a383a7dfd859d9b2c6525a70ab96e", null ], + [ "initialFieldVoltage", "struct_sync_motor_electrical_data.html#ad5be10659aa046767021eee8f17bc5f3", null ], + [ "maxReactive", "struct_sync_motor_electrical_data.html#a3372b8b20483ca99d8b1a9c227b2f034", null ], + [ "maxReactiveUnit", "struct_sync_motor_electrical_data.html#a94540978a1fdc557aaab60c2fc8c9a5d", null ], + [ "mechanicalPowerVector", "struct_sync_motor_electrical_data.html#aefbe9eb66cf3626fc03c4ffe6579ef34", null ], + [ "minReactive", "struct_sync_motor_electrical_data.html#a3cac2eb4410c37e488a9359ef39c3b3b", null ], + [ "minReactiveUnit", "struct_sync_motor_electrical_data.html#a1909f35de18bc3ef4692b6b897e06fdb", null ], + [ "model", "struct_sync_motor_electrical_data.html#a8182fa185ba94200df9c76f27a7aa950", null ], + [ "name", "struct_sync_motor_electrical_data.html#a90b20df7d8b2b09d95641c2574176153", null ], + [ "negativeReactance", "struct_sync_motor_electrical_data.html#a48e826b8bfaaea8391a67374349724dc", null ], + [ "negativeResistance", "struct_sync_motor_electrical_data.html#a051aadc933064e1da5dbd9f74b81d170", null ], + [ "nominalPower", "struct_sync_motor_electrical_data.html#a063a404b21e2127a02648fcaf45a5262", null ], + [ "nominalPowerUnit", "struct_sync_motor_electrical_data.html#ab818b0778da594bf026c1c5f9f028444", null ], + [ "nominalVoltage", "struct_sync_motor_electrical_data.html#a85ae173b59ea2f380786c36ec534743b", null ], + [ "nominalVoltageUnit", "struct_sync_motor_electrical_data.html#ab244f2e6f4149d7f4c85efb286e174ce", null ], + [ "oldId", "struct_sync_motor_electrical_data.html#ac5dd2b71485b5ac3a515bfffe8660086", null ], + [ "oldIq", "struct_sync_motor_electrical_data.html#ae21827f6456277ca9b3b659dc1cc5181", null ], + [ "oldPe", "struct_sync_motor_electrical_data.html#ac2b1fd857d3fbd43d13c4f03d4998b0a", null ], + [ "pe", "struct_sync_motor_electrical_data.html#a2714d6f631dd24a1dd79a6dae0b3fe01", null ], + [ "plotSyncMachine", "struct_sync_motor_electrical_data.html#a9b953c627d870073f16595d6a0270f31", null ], + [ "pm", "struct_sync_motor_electrical_data.html#ae81cf3bd42b466d6450fa1de1896d5a0", null ], + [ "positiveReactance", "struct_sync_motor_electrical_data.html#a64fe0337aa51aab1d0b11b72d6bb79c3", null ], + [ "positiveResistance", "struct_sync_motor_electrical_data.html#ac1984f28f4c9987bc9578150985c7d06", null ], + [ "potierReactance", "struct_sync_motor_electrical_data.html#ac2fd73dbd4897f7a47a13361022ee8b7", null ], + [ "reactivePower", "struct_sync_motor_electrical_data.html#a891dc4f1f52a9db079b3cf91707afca9", null ], + [ "reactivePowerUnit", "struct_sync_motor_electrical_data.html#ab5b8932c7b973cb7241acd0078276559", null ], + [ "satFactor", "struct_sync_motor_electrical_data.html#a182463eaae4af8c639cff095ead39763", null ], + [ "speed", "struct_sync_motor_electrical_data.html#a540046b2272b75675181979dad8ccc8b", null ], + [ "speedGov", "struct_sync_motor_electrical_data.html#a72a4c00574d24476341ce64b178b0917", null ], + [ "speedGovSolver", "struct_sync_motor_electrical_data.html#a21533238587fde91b8655dd75f9d322c", null ], + [ "subEd", "struct_sync_motor_electrical_data.html#a7447305e5858f66fd7cab718e09cb5d0", null ], + [ "subEq", "struct_sync_motor_electrical_data.html#a513c4e37f2f062ee8e5086a1d2fdf57a", null ], + [ "subTd0", "struct_sync_motor_electrical_data.html#a36a4cbab101c5fe573eafd75794d0cf3", null ], + [ "subTq0", "struct_sync_motor_electrical_data.html#a71dfd4556a62431ab7657af1173cb29b", null ], + [ "subXd", "struct_sync_motor_electrical_data.html#a8685294c4133ec612d4a3d3615240336", null ], + [ "subXq", "struct_sync_motor_electrical_data.html#ae95f80f05a6f818ee15e04412223fcd7", null ], + [ "syncXd", "struct_sync_motor_electrical_data.html#a2a01010ebcc937abb94f936e0db1b295", null ], + [ "syncXq", "struct_sync_motor_electrical_data.html#a8f3571e353fe1d0678754fc2f203c1e7", null ], + [ "terminalVoltage", "struct_sync_motor_electrical_data.html#ad1095e977927999800fa57a7251a9d50", null ], + [ "terminalVoltageVector", "struct_sync_motor_electrical_data.html#afe07e31feeeea93e1df89feafd8ab791", null ], + [ "tranEd", "struct_sync_motor_electrical_data.html#afe938f6d3c0b24d7881f6ec1f9d3bf87", null ], + [ "tranEq", "struct_sync_motor_electrical_data.html#a5bbc9459ac89c28089792ed76a2c01e5", null ], + [ "transTd0", "struct_sync_motor_electrical_data.html#ad63d9f8a9b8e87d3167e7110ba50ecdd", null ], + [ "transTq0", "struct_sync_motor_electrical_data.html#add530e37d8821f30ec873a10c24d8c41", null ], + [ "transXd", "struct_sync_motor_electrical_data.html#acdf36a814a5dbc049a49d6a8a4a5dbf8", null ], + [ "transXq", "struct_sync_motor_electrical_data.html#a4467a494945cd3da378d0f97039de94f", null ], + [ "useAVR", "struct_sync_motor_electrical_data.html#aa734d7a7da312566c7ff3c224d932d72", null ], + [ "useMachineBase", "struct_sync_motor_electrical_data.html#a12bf4ce083ab090ac9b34f948bf01d73", null ], + [ "useSpeedGovernor", "struct_sync_motor_electrical_data.html#a2002371fc5d5e83e8cd4f7ce24db430a", null ], + [ "zeroReactance", "struct_sync_motor_electrical_data.html#a732b333a510ef770abb9ae89003f2f60", null ], + [ "zeroResistance", "struct_sync_motor_electrical_data.html#a9e9e4e4687dbc2f4a0cc38ca5177079c", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_transfer_function_1_1_space_state-members.html b/docs/doxygen/html/struct_transfer_function_1_1_space_state-members.html index 7aaa6b6..0e0bf7e 100644 --- a/docs/doxygen/html/struct_transfer_function_1_1_space_state-members.html +++ b/docs/doxygen/html/struct_transfer_function_1_1_space_state-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
TransferFunction::SpaceState Member List
@@ -77,11 +88,14 @@ $(function() { C (defined in TransferFunction::SpaceState)TransferFunction::SpaceState D (defined in TransferFunction::SpaceState)TransferFunction::SpaceState
+ - + diff --git a/docs/doxygen/html/struct_transfer_function_1_1_space_state.html b/docs/doxygen/html/struct_transfer_function_1_1_space_state.html index 138035c..cb35963 100644 --- a/docs/doxygen/html/struct_transfer_function_1_1_space_state.html +++ b/docs/doxygen/html/struct_transfer_function_1_1_space_state.html @@ -5,10 +5,17 @@ -PSP-UFU: TransferFunction::SpaceState Struct Reference +TransferFunction::SpaceState Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
Public Attributes | @@ -88,15 +99,22 @@ std::vector< double > < double D   -
The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_transfer_function_1_1_space_state.js b/docs/doxygen/html/struct_transfer_function_1_1_space_state.js new file mode 100644 index 0000000..c991350 --- /dev/null +++ b/docs/doxygen/html/struct_transfer_function_1_1_space_state.js @@ -0,0 +1,7 @@ +var struct_transfer_function_1_1_space_state = +[ + [ "A", "struct_transfer_function_1_1_space_state.html#a3e3bc8524eb751a1f243ee08a6eb7646", null ], + [ "B", "struct_transfer_function_1_1_space_state.html#a4c0bf33dd7a387aed5fd4f4919f15b85", null ], + [ "C", "struct_transfer_function_1_1_space_state.html#afda97fae8560f595948c810a8ae47202", null ], + [ "D", "struct_transfer_function_1_1_space_state.html#a4fc70fb0845c4541742ebd123373d4c7", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/struct_transformer_electrical_data-members.html b/docs/doxygen/html/struct_transformer_electrical_data-members.html index 842bb64..6b05c0f 100644 --- a/docs/doxygen/html/struct_transformer_electrical_data-members.html +++ b/docs/doxygen/html/struct_transformer_electrical_data-members.html @@ -5,10 +5,17 @@ -PSP-UFU: Member List +Member List + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
TransformerElectricalData Member List
@@ -94,11 +109,14 @@ $(function() { zeroIndReactance (defined in TransformerElectricalData)TransformerElectricalData zeroResistance (defined in TransformerElectricalData)TransformerElectricalData
+ - + diff --git a/docs/doxygen/html/struct_transformer_electrical_data.html b/docs/doxygen/html/struct_transformer_electrical_data.html index 666c33d..8ef6281 100644 --- a/docs/doxygen/html/struct_transformer_electrical_data.html +++ b/docs/doxygen/html/struct_transformer_electrical_data.html @@ -5,10 +5,17 @@ -PSP-UFU: TransformerElectricalData Struct Reference +TransformerElectricalData Struct Reference + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
-
Public Attributes | @@ -147,15 +162,22 @@ double secondaryGrndReacta std::complex< double > faultCurrent [2][3]   -
The documentation for this struct was generated from the following file:
    +

    Detailed Description

    +
    +

    Definition at line 20 of file Transformer.h.

    +

    The documentation for this struct was generated from the following file:
+
- + diff --git a/docs/doxygen/html/struct_transformer_electrical_data.js b/docs/doxygen/html/struct_transformer_electrical_data.js new file mode 100644 index 0000000..1d8a72a --- /dev/null +++ b/docs/doxygen/html/struct_transformer_electrical_data.js @@ -0,0 +1,28 @@ +var struct_transformer_electrical_data = +[ + [ "baseVoltage", "struct_transformer_electrical_data.html#aabe6d597ed902640f5c87f2cd2550364", null ], + [ "connection", "struct_transformer_electrical_data.html#a2d2883e680df2522b8517235b1345512", null ], + [ "current", "struct_transformer_electrical_data.html#af19976dfba78777187211ab79581396e", null ], + [ "faultCurrent", "struct_transformer_electrical_data.html#af4454c28f422632359573496c40b70e4", null ], + [ "indReactance", "struct_transformer_electrical_data.html#a469a24e58338613b620de352ea06c13d", null ], + [ "indReactanceUnit", "struct_transformer_electrical_data.html#a7cb4f1fbe494fa905c56d324a05a7b32", null ], + [ "name", "struct_transformer_electrical_data.html#aa450538f0a29571bef6e2785d3544bb2", null ], + [ "nominalPower", "struct_transformer_electrical_data.html#a9da8363e7eb19e805650db36d87fca93", null ], + [ "nominalPowerUnit", "struct_transformer_electrical_data.html#a1513d2efe2ee080359a6bb9f3177d7ee", null ], + [ "phaseShift", "struct_transformer_electrical_data.html#ad1a62e6b3f896f6a9d794f6b9e02f599", null ], + [ "powerFlow", "struct_transformer_electrical_data.html#a343366e4142013e724874e6bf79acc67", null ], + [ "primaryGrndReactance", "struct_transformer_electrical_data.html#ac954927451779be66154613475143dc9", null ], + [ "primaryGrndResistance", "struct_transformer_electrical_data.html#a55492dae7b4489903bb5a45b4d3b093a", null ], + [ "primaryNominalVoltage", "struct_transformer_electrical_data.html#a3101afa7a1e145675819742f05422e90", null ], + [ "primaryNominalVoltageUnit", "struct_transformer_electrical_data.html#a40158cfd130b05ab26e624395f32018b", null ], + [ "resistance", "struct_transformer_electrical_data.html#a900c1dfc24ebcca169fae8dfd4a3e6bd", null ], + [ "resistanceUnit", "struct_transformer_electrical_data.html#a8a90bbbcefecfe59505d86003354afdc", null ], + [ "secondaryGrndReactance", "struct_transformer_electrical_data.html#abae77eeb48d1a56cb10302f2b9aea38c", null ], + [ "secondaryGrndResistance", "struct_transformer_electrical_data.html#a520014be18decacdfec876f3a23b68ae", null ], + [ "secondaryNominalVoltage", "struct_transformer_electrical_data.html#a03331e5c4e0ad04c851fffabcc9936ec", null ], + [ "secondaryNominalVoltageUnit", "struct_transformer_electrical_data.html#add161341c5cdd9c9ce93c34f9ace2c08", null ], + [ "turnsRatio", "struct_transformer_electrical_data.html#a913f0ad1ba90018a13d7930670438a89", null ], + [ "useTransformerPower", "struct_transformer_electrical_data.html#a21d613ccca353784d8adfd0bfdaca0ff", null ], + [ "zeroIndReactance", "struct_transformer_electrical_data.html#afb45c8a86048551b51c399a1b72ff949", null ], + [ "zeroResistance", "struct_transformer_electrical_data.html#ab6606d2f93aa369b7a3173e61d44c8f3", null ] +]; \ No newline at end of file diff --git a/docs/doxygen/html/wx_g_l_string_8cpp_source.html b/docs/doxygen/html/wx_g_l_string_8cpp_source.html new file mode 100644 index 0000000..d0b167a --- /dev/null +++ b/docs/doxygen/html/wx_g_l_string_8cpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +Project/wxGLString.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
wxGLString.cpp
+
+
+
1 #include "wxGLString.h"
2 
3 #ifdef __WXMAC__
4 #include "OpenGL/gl.h"
5 #else
6 #include <GL/gl.h>
7 #endif
8 
9 #include "wx/wx.h"
10 
11 GLuint* loadImage(wxImage* img)
12 {
13  GLuint* ID = new GLuint;
14  glGenTextures(1, ID);
15 
16  glBindTexture(GL_TEXTURE_2D, *ID);
17 
18  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
19 
20  const int w = img->GetWidth(), h = img->GetHeight();
21 
22  // note: must make a local copy before passing the data to OpenGL, as GetData() returns RGB
23  // and we want the Alpha channel. Furthermore, the current rendering is black-on-white, we'll
24  // convert it to an alpha channel by the way (not all platforms support transparency in wxDCs
25  // so it's the easiest way to go)
26  GLubyte* bitmapData = img->GetData();
27  GLubyte* imageData = NULL;
28 
29  int bytesPerPixel = 4;
30 
31  int imageSize = w * h * bytesPerPixel;
32  imageData = (GLubyte*)malloc(imageSize);
33 
34  int rev_val = h - 1;
35 
36  for(int y = 0; y < h; y++) {
37  for(int x = 0; x < w; x++) {
38  imageData[(x + y * w) * bytesPerPixel + 0] = 255;
39  imageData[(x + y * w) * bytesPerPixel + 1] = 255;
40  imageData[(x + y * w) * bytesPerPixel + 2] = 255;
41 
42  // alpha
43  imageData[(x + y * w) * bytesPerPixel + 3] = 255 - bitmapData[(x + (rev_val - y) * w) * 3];
44  } // next
45  } // next
46 
47  glTexImage2D(GL_TEXTURE_2D, 0, bytesPerPixel, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
48 
49  free(imageData);
50 
51  // set texture parameters as you wish
52  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
53  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
54 
55  // GL_CLAMP_TO_EDGE
56  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
57  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
58 
59  return ID;
60 }
61 
63 {
64  friend class wxGLString;
65  friend class wxGLStringArray;
66  friend class wxGLStringNumber;
67 
68  private:
69  GLuint* ID = NULL;
70 
71  protected:
72  GLuint* getID();
73 
74  TextTexture();
75  TextTexture(wxBitmap& bmp);
76  void load(wxImage* img);
77 
78  public:
79  ~TextTexture();
80 };
81 
82 #if 0
83 #pragma mark -
84 #pragma mark TextGLDrawable implementation
85 #endif
86 
87 TextGLDrawable::TextGLDrawable(TextTexture* image_arg)
88 {
89  x = 0;
90  y = 0;
91  angle = 0;
92 
93  xscale = 1;
94  yscale = 1;
95 
96  xflip = false;
97  yflip = false;
98 
99  if(image_arg)
100  setImage(image_arg);
101  else
102  image = NULL;
103 
104  tex_coord_x1 = 0;
105  tex_coord_y1 = 1;
106  tex_coord_x2 = 1;
107  tex_coord_y2 = 0;
108 }
109 
110 void TextGLDrawable::setFlip(bool x, bool y)
111 {
112  xflip = x;
113  yflip = y;
114 }
115 
116 void TextGLDrawable::move(double x, double y)
117 {
118  TextGLDrawable::x = x;
119  TextGLDrawable::y = y;
120 }
121 
122 void TextGLDrawable::scale(float x, float y)
123 {
124  TextGLDrawable::xscale = x;
125  TextGLDrawable::yscale = y;
126 }
127 
129 {
130  TextGLDrawable::xscale = k;
131  TextGLDrawable::yscale = k;
132 }
133 
134 void TextGLDrawable::setImage(TextTexture* image) { TextGLDrawable::image = image; }
135 void TextGLDrawable::rotate(int angle) { TextGLDrawable::angle = angle; }
136 void TextGLDrawable::render() const
137 {
138  assert(image);
139 
140  glPushMatrix();
141  glTranslatef(x - w / 2, y - h / 2, 0);
142  if(xscale != 1 || yscale != 1) glScalef(xscale, yscale, 1);
143  if(angle != 0) glRotatef(angle, 0, 0, 1);
144 
145  glBegin(GL_QUADS);
146 
147  glTexCoord2f(xflip ? tex_coord_x2 : tex_coord_x1, yflip ? tex_coord_y2 : tex_coord_y1);
148  glVertex2f(0, 0);
149 
150  glTexCoord2f(xflip ? tex_coord_x1 : tex_coord_x2, yflip ? tex_coord_y2 : tex_coord_y1);
151  glVertex2f(w, 0);
152 
153  glTexCoord2f(xflip ? tex_coord_x1 : tex_coord_x2, yflip ? tex_coord_y1 : tex_coord_y2);
154  glVertex2f(w, h);
155 
156  glTexCoord2f(xflip ? tex_coord_x2 : tex_coord_x1, yflip ? tex_coord_y1 : tex_coord_y2);
157  glVertex2f(0, h);
158 
159  glEnd();
160  glPopMatrix();
161 }
162 
163 #if 0
164 #pragma mark -
165 #pragma mark TextTexture implementation
166 #endif
167 
168 TextTexture::TextTexture() {}
169 TextTexture::TextTexture(wxBitmap& bmp)
170 {
171  wxImage img = bmp.ConvertToImage();
172  load(&img);
173 }
174 void TextTexture::load(wxImage* img) { ID = loadImage(img); }
175 GLuint* TextTexture::getID() { return ID; }
176 TextTexture::~TextTexture()
177 {
178  glDeleteTextures(1, ID);
179  if(ID) delete ID; // Memory leak?
180 }
181 
182 #if 0
183 #pragma mark -
184 #pragma mark wxGLString implementation
185 #endif
186 
187 wxGLString::wxGLString() : wxString(wxT("")), TextGLDrawable() { img = NULL; }
188 wxGLString::wxGLString(wxString message) : wxString(message), TextGLDrawable() { img = NULL; }
189 void wxGLString::operator=(wxString& string) { (*((wxString*)this)) = string; }
190 void wxGLString::bind() const
191 {
192  if(img->getID()) {
193  glBindTexture(GL_TEXTURE_2D, *img->getID());
194  }
195 }
196 void wxGLString::calculateSize(wxDC* dc, const bool ignore_font /* when from array */)
197 {
198  if(!ignore_font) {
199  if(font.IsOk())
200  dc->SetFont(font);
201  else
202  dc->SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
203  }
204 
205  dc->GetTextExtent(*this, &w, &h);
206 }
207 
209 {
210  calculateSize(dc);
211  const int power_of_2_w = std::max(32, (int)pow((double)2, (int)ceil((float)log((double)w) / log(2.0))));
212  const int power_of_2_h = std::max(32, (int)pow((double)2, (int)ceil((float)log((double)h) / log(2.0))));
213 
214  wxBitmap bmp(power_of_2_w, power_of_2_h);
215  assert(bmp.IsOk());
216 
217  {
218  wxMemoryDC temp_dc(bmp);
219 
220  temp_dc.SetBrush(*wxWHITE_BRUSH);
221  temp_dc.Clear();
222 
223  if(font.IsOk())
224  temp_dc.SetFont(font);
225  else
226  temp_dc.SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
227 
228  temp_dc.DrawText(*this, 0, 0);
229  }
230 
231  if(img) delete img;
232  img = new TextTexture(bmp);
233 
234  TextGLDrawable::texw = power_of_2_w;
235  TextGLDrawable::texh = power_of_2_h;
236  TextGLDrawable::tex_coord_x2 = (float)w / (float)power_of_2_w;
237  TextGLDrawable::tex_coord_y2 = 1 - (float)h / (float)power_of_2_h;
238  TextGLDrawable::tex_coord_y1 = 1;
239 
240  TextGLDrawable::setImage(img);
241 }
242 
243 void wxGLString::consolidateFromArray(wxDC* dc, double x, double y) { dc->DrawText(*this, x, y); }
244 void wxGLString::setFont(wxFont font) { wxGLString::font = font; }
245 void wxGLString::render(const double x, const double y)
246 {
247  TextGLDrawable::move(x, y);
248  TextGLDrawable::render();
249 }
250 wxGLString::~wxGLString()
251 {
252  if(img) delete img;
253 }
254 
255 #if 0
256 #pragma mark -
257 #pragma mark wxGLNumberRenderer implementation
258 #endif
259 
260 wxGLNumberRenderer::wxGLNumberRenderer() : wxGLString(wxT("0 1 2 3 4 5 6 7 8 9 . - "))
261 {
262  number_location = new int[13];
263 }
264 wxGLNumberRenderer::~wxGLNumberRenderer() { delete[] number_location; }
266 {
268 
269  if(font.IsOk())
270  dc->SetFont(font);
271  else
272  dc->SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
273 
274  number_location[0] = 0;
275  number_location[1] = dc->GetTextExtent(wxT("0 ")).GetWidth();
276  number_location[2] = dc->GetTextExtent(wxT("0 1 ")).GetWidth();
277  number_location[3] = dc->GetTextExtent(wxT("0 1 2 ")).GetWidth();
278  number_location[4] = dc->GetTextExtent(wxT("0 1 2 3 ")).GetWidth();
279  number_location[5] = dc->GetTextExtent(wxT("0 1 2 3 4 ")).GetWidth();
280  number_location[6] = dc->GetTextExtent(wxT("0 1 2 3 4 5 ")).GetWidth();
281  number_location[7] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 ")).GetWidth();
282  number_location[8] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 ")).GetWidth();
283  number_location[9] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 ")).GetWidth();
284  number_location[10] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 9 ")).GetWidth();
285  number_location[11] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 9 . ")).GetWidth();
286  number_location[12] = dc->GetTextExtent(wxT("0 1 2 3 4 5 6 7 8 9 . - ")).GetWidth();
287 
288  space_w = dc->GetTextExtent(wxT(" ")).GetWidth();
289 }
290 void wxGLNumberRenderer::renderNumber(int i, double x, double y)
291 {
292  wxString s;
293  s << i;
294  renderNumber(s, x, y);
295 }
296 void wxGLNumberRenderer::renderNumber(float f, double x, double y)
297 {
298  wxString s;
299  s << f;
300  renderNumber(s, x, y);
301 }
302 void wxGLNumberRenderer::renderNumber(wxString s, double x, double y)
303 {
304  const int full_string_w = TextGLDrawable::texw;
305 
306  const int char_amount = s.Length();
307  for(int c = 0; c < char_amount; c++) {
308  int charid = -1;
309 
310  char schar = s[c];
311  switch(schar) {
312  case '0':
313  charid = 0;
314  break;
315  case '1':
316  charid = 1;
317  break;
318  case '2':
319  charid = 2;
320  break;
321  case '3':
322  charid = 3;
323  break;
324  case '4':
325  charid = 4;
326  break;
327  case '5':
328  charid = 5;
329  break;
330  case '6':
331  charid = 6;
332  break;
333  case '7':
334  charid = 7;
335  break;
336  case '8':
337  charid = 8;
338  break;
339  case '9':
340  charid = 9;
341  break;
342  case '.':
343  case ',':
344  charid = 10;
345  break;
346  case '-':
347  charid = 11;
348  break;
349  default:
350  printf("Warning: character %c unexpected in number!\n", schar);
351  continue;
352  }
353 
354  assert(charid != -1);
355 
356  TextGLDrawable::tex_coord_x1 = (float)number_location[charid] / (float)full_string_w;
357  TextGLDrawable::tex_coord_x2 = (float)(number_location[charid + 1] - space_w) / (float)full_string_w;
358 
359  const int char_width = number_location[charid + 1] - number_location[charid] - space_w;
360  TextGLDrawable::w = char_width;
361 
362  TextGLDrawable::move(x, y);
363  TextGLDrawable::render();
364 
365  x += char_width;
366  } // next
367 
368  // TextGLDrawable::w = full_string_w;
369 }
370 
371 #if 0
372 #pragma mark -
373 #pragma mark wxGLStringArray implementation
374 #endif
375 
377 wxGLStringArray::wxGLStringArray(const wxString strings_arg[], int amount)
378 {
379  img = NULL;
380 
381  for(int n = 0; n < amount; n++) strings.push_back(wxGLString(strings_arg[n]));
382 }
383 wxGLStringArray::~wxGLStringArray()
384 {
385  if(img) delete img;
386 }
387 
388 wxGLString& wxGLStringArray::get(const int id) { return strings[id]; }
390 {
391  if(img->getID()) {
392  glBindTexture(GL_TEXTURE_2D, *img->getID());
393  }
394 }
395 void wxGLStringArray::addString(wxString string) { strings.push_back(wxGLString(string)); }
396 void wxGLStringArray::setFont(wxFont font) { wxGLStringArray::font = font; }
398 {
399  int x = 0, y = 0;
400 
401  if(font.IsOk())
402  dc->SetFont(font);
403  else
404  dc->SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
405 
406  // find how much space we need
407  int longest_string = 0;
408 
409  const int amount = strings.size();
410  for(int n = 0; n < amount; n++) {
411  strings[n].calculateSize(dc, true);
412  y += strings[n].h;
413  if(strings[n].w > longest_string) longest_string = strings[n].w;
414  } // next
415 
416  const int average_string_height = y / amount;
417 
418  // split in multiple columns if necessary
419  int column_amount = 1;
420  while(amount / column_amount > 30 && column_amount < 10) column_amount++;
421 
422  const int power_of_2_w =
423  pow((double)2, (int)ceil((float)log((double)longest_string * (double)column_amount) / log(2.0)));
424  const int power_of_2_h = pow((double)2, (int)ceil((float)log((double)y / (double)column_amount) / log(2.0)));
425 
426  // std::cout << "bitmap size : " << power_of_2_w << ", " << power_of_2_h << " // " << column_amount << " columns"
427  // << std::endl;
428 
429  wxBitmap bmp(power_of_2_w, power_of_2_h);
430  assert(bmp.IsOk());
431 
432  {
433  wxMemoryDC temp_dc(bmp);
434 
435  temp_dc.SetBrush(*wxWHITE_BRUSH);
436  temp_dc.Clear();
437 
438  y = 0;
439  x = 0;
440  if(font.IsOk())
441  temp_dc.SetFont(font);
442  else
443  temp_dc.SetFont(wxSystemSettings::GetFont(wxSYS_SYSTEM_FONT));
444 
445  for(int n = 0; n < amount; n++) {
446  strings[n].consolidateFromArray(&temp_dc, x, y);
447 
448  strings[n].tex_coord_x1 = (float)x / (float)power_of_2_w;
449  strings[n].tex_coord_y1 = 1.0 - (float)y / (float)power_of_2_h;
450  strings[n].tex_coord_x2 = (float)(x + strings[n].w) / (float)power_of_2_w;
451  strings[n].tex_coord_y2 = 1.0 - (float)(y + strings[n].h) / (float)power_of_2_h;
452 
453  y += strings[n].h;
454  if(y > power_of_2_h - average_string_height) // check if we need to switch to next column
455  {
456  y = 0;
457  x += longest_string;
458  }
459  }
460  }
461  if(img) delete img;
462  img = new TextTexture(bmp);
463 
464  for(int n = 0; n < amount; n++) strings[n].setImage(img);
465 }
+ +
void setFont(wxFont font)
Definition: wxGLString.cpp:244
+
wxGLString & get(const int id)
Definition: wxGLString.cpp:388
+
void bind() const
Definition: wxGLString.cpp:190
+
void rotate(int angle)
Definition: wxGLString.cpp:135
+
virtual void consolidate(wxDC *dc)
Definition: wxGLString.cpp:208
+ +
void addString(wxString string)
Definition: wxGLString.cpp:395
+
void consolidate(wxDC *dc)
Definition: wxGLString.cpp:265
+ +
void render(const double x, const double y)
Definition: wxGLString.cpp:245
+
void renderNumber(wxString s, double x, double y)
Definition: wxGLString.cpp:302
+
void setFont(wxFont font)
Definition: wxGLString.cpp:396
+
void scale(float x, float y)
Definition: wxGLString.cpp:122
+
void operator=(wxString &string)
Definition: wxGLString.cpp:189
+
void setFlip(bool x, bool y)
Definition: wxGLString.cpp:110
+
void consolidate(wxDC *dc)
Definition: wxGLString.cpp:397
+ + + +
+
+ + + + diff --git a/docs/doxygen/html/wx_g_l_string_8h_source.html b/docs/doxygen/html/wx_g_l_string_8h_source.html index af98f3b..5d3d907 100644 --- a/docs/doxygen/html/wx_g_l_string_8h_source.html +++ b/docs/doxygen/html/wx_g_l_string_8h_source.html @@ -5,10 +5,17 @@ -PSP-UFU: Project/wxGLString.h Source File +Project/wxGLString.h Source File + + + + + @@ -20,13 +27,7 @@ - - +
-
PSP-UFU -  2017w37a -
-
Power System Platform (UFU)
-
@@ -45,6 +46,21 @@ $(function() { }); + +
+ +
+
+
+ +
- -
wxGLString.h
-
1 #ifndef _glstring_
2 #define _glstring_
3 
4 #ifdef __WXMAC__
5 #include "OpenGL/gl.h"
6 #else
7 #include <GL/gl.h>
8 #endif
9 
10 #include "wx/wx.h"
11 #include <vector>
12 
13 class TextTexture;
14 
20 {
21  friend class wxGLString;
22  friend class wxGLStringArray;
23  friend class wxGLStringNumber;
24 protected:
25 
26  double x,y, angle;
27  float xscale, yscale;
28  TextTexture* image = NULL;
29  bool xflip, yflip;
30 
31  float tex_coord_x1, tex_coord_y1;
32  float tex_coord_x2, tex_coord_y2;
33  int w, h, texw, texh;
34 
36  void setImage(TextTexture* image);
37  void move(double x, double y);
38 public:
39 
40  void render() const;
41 
43  void setFlip(bool x, bool y);
44 
46  void scale(float x, float y);
47 
49  void scale(float k);
50 
52  void rotate(int angle);
53 
55  int getWidth() const { return w; }
57  int getheight() const { return h; }
58 
59 };
60 
61 class wxGLStringArray;
62 
77 class wxGLString : public wxString, public TextGLDrawable
78 {
79 protected:
80  TextTexture* img = NULL;
81  wxFont font;
82 
83  friend class wxGLStringArray;
84 
85  void calculateSize(wxDC* dc, const bool ignore_font=false /* when from array */);
86  void consolidateFromArray(wxDC* dc, double x, double y);
87 public:
89  wxGLString();
91  wxGLString(wxString message);
92  virtual ~wxGLString();
93 
96  void bind() const;
97 
100  void setFont(wxFont font);
101 
105  virtual void consolidate(wxDC* dc);
106 
108  void render(const double x, const double y);
109 
111  void operator=(wxString& string);
112 };
113 
114 
129 {
130  int* number_location;
131  int space_w;
132 public:
134  virtual ~wxGLNumberRenderer();
135 
138  void consolidate(wxDC* dc);
139 
142  void renderNumber(wxString s, double x, double y);
144  void renderNumber(int i, double x, double y);
146  void renderNumber(float f, double x, double y);
147 };
148 
149 
169 {
170  std::vector<wxGLString> strings;
171  TextTexture* img = NULL;
172  wxFont font;
173 public:
175  wxGLStringArray();
177  wxGLStringArray(const wxString strings_arg[], int amount);
178  ~wxGLStringArray();
179 
181  wxGLString& get(const int id);
182 
185  void bind();
186 
189  void addString(wxString string);
190 
193  void setFont(wxFont font);
194 
198  void consolidate(wxDC* dc);
199 };
200 
201 
202 #endif
int getheight() const
Definition: wxGLString.h:57
-
void bind()
Definition: wxGLString.cpp:389
-
void rotate(int angle)
Definition: wxGLString.cpp:135
-
Definition: wxGLString.h:19
-
Definition: wxGLString.h:128
-
int getWidth() const
Definition: wxGLString.h:55
-
Definition: wxGLString.cpp:62
-
void setFont(wxFont font)
Definition: wxGLString.cpp:396
-
void scale(float x, float y)
Definition: wxGLString.cpp:122
-
void setFlip(bool x, bool y)
Definition: wxGLString.cpp:110
-
void consolidate(wxDC *dc)
Definition: wxGLString.cpp:397
-
Definition: wxGLString.h:168
-
Definition: wxGLString.h:77
+
1 #ifndef _glstring_
2 #define _glstring_
3 
4 #ifdef __WXMAC__
5 #include "OpenGL/gl.h"
6 #else
7 #include <GL/gl.h>
8 #endif
9 
10 #include "wx/wx.h"
11 #include <vector>
12 
13 class TextTexture;
14 
20 {
21  friend class wxGLString;
22  friend class wxGLStringArray;
23  friend class wxGLStringNumber;
24 protected:
25 
26  double x,y, angle;
27  float xscale, yscale;
28  TextTexture* image = NULL;
29  bool xflip, yflip;
30 
31  float tex_coord_x1, tex_coord_y1;
32  float tex_coord_x2, tex_coord_y2;
33  int w, h, texw, texh;
34 
36  void setImage(TextTexture* image);
37  void move(double x, double y);
38 public:
39 
40  void render() const;
41 
43  void setFlip(bool x, bool y);
44 
46  void scale(float x, float y);
47 
49  void scale(float k);
50 
52  void rotate(int angle);
53 
55  int getWidth() const { return w; }
57  int getheight() const { return h; }
58 
59 };
60 
61 class wxGLStringArray;
62 
77 class wxGLString : public wxString, public TextGLDrawable
78 {
79 protected:
80  TextTexture* img = NULL;
81  wxFont font;
82 
83  friend class wxGLStringArray;
84 
85  void calculateSize(wxDC* dc, const bool ignore_font=false /* when from array */);
86  void consolidateFromArray(wxDC* dc, double x, double y);
87 public:
89  wxGLString();
91  wxGLString(wxString message);
92  virtual ~wxGLString();
93 
96  void bind() const;
97 
100  void setFont(wxFont font);
101 
105  virtual void consolidate(wxDC* dc);
106 
108  void render(const double x, const double y);
109 
111  void operator=(wxString& string);
112 };
113 
114 
129 {
130  int* number_location;
131  int space_w;
132 public:
134  virtual ~wxGLNumberRenderer();
135 
138  void consolidate(wxDC* dc);
139 
142  void renderNumber(wxString s, double x, double y);
144  void renderNumber(int i, double x, double y);
146  void renderNumber(float f, double x, double y);
147 };
148 
149 
169 {
170  std::vector<wxGLString> strings;
171  TextTexture* img = NULL;
172  wxFont font;
173 public:
175  wxGLStringArray();
177  wxGLStringArray(const wxString strings_arg[], int amount);
178  ~wxGLStringArray();
179 
181  wxGLString& get(const int id);
182 
185  void bind();
186 
189  void addString(wxString string);
190 
193  void setFont(wxFont font);
194 
198  void consolidate(wxDC* dc);
199 };
200 
201 
202 #endif
int getheight() const
Definition: wxGLString.h:57
+ +
void rotate(int angle)
Definition: wxGLString.cpp:135
+ + +
int getWidth() const
Definition: wxGLString.h:55
+ +
void setFont(wxFont font)
Definition: wxGLString.cpp:396
+
void scale(float x, float y)
Definition: wxGLString.cpp:122
+
void setFlip(bool x, bool y)
Definition: wxGLString.cpp:110
+
void consolidate(wxDC *dc)
Definition: wxGLString.cpp:397
+ +
+
- + -- cgit