├── .gitignore ├── LICENSE.md ├── README.md ├── catalogues └── PipeStd.db ├── docs ├── en │ ├── admin │ │ └── user_guide.md │ ├── catalogue │ │ └── user_guide.md │ ├── common │ │ ├── keybord_shortcuts.md │ │ └── ribbon_customisation.md │ ├── design │ │ ├── common │ │ │ ├── tab_home.md │ │ │ └── tab_view.md │ │ └── user_guide.md │ ├── development │ │ ├── api.md │ │ ├── new_utility.md │ │ └── plugins.md │ ├── index.md │ └── installation │ │ ├── existing_project.md │ │ ├── linux.md │ │ ├── login_to_project.md │ │ ├── new_project.md │ │ ├── requirements.md │ │ ├── system_variables.md │ │ └── windows.md ├── images │ ├── admin │ │ ├── admin_main_ru.png │ │ ├── admin_main_zh.png │ │ ├── admin_project_alert_zh.png │ │ ├── admin_project_creation_zh.png │ │ ├── admin_project_data_zh.png │ │ ├── admin_project_db_zh.png │ │ ├── admin_project_dbs_zh.png │ │ ├── admin_project_exists_zh.png │ │ ├── admin_project_info_zh.png │ │ ├── admin_project_mdb_zh.png │ │ ├── admin_project_ok_zh.png │ │ ├── admin_project_team_zh.png │ │ ├── admin_project_user_zh.png │ │ ├── admin_user_process_zh.png │ │ ├── project_db_en.png │ │ ├── project_dbs_files_en.png │ │ ├── project_info_en.png │ │ ├── project_mdb_en.png │ │ ├── project_team_en.png │ │ ├── project_user_en.png │ │ ├── user_guide │ │ │ ├── admin_import_project_definition_done_en.png │ │ │ ├── admin_import_project_definition_en.png │ │ │ ├── admin_import_project_definition_fail_en.png │ │ │ ├── admin_import_project_definition_file.png │ │ │ ├── admin_import_project_definition_path_en.png │ │ │ ├── admin_menu_admin_en.png │ │ │ └── admin_menu_admin_import_en.png │ │ └── user_process_en.png │ ├── common │ │ ├── common_home_zh.png │ │ ├── common_model_editor_zh.png │ │ ├── common_view_context_menu1_zh.png │ │ ├── common_view_context_menu2_zh.png │ │ ├── common_view_cube_zh.png │ │ ├── customize_dialog.bmp │ │ └── ribbon_customisation │ │ │ ├── action_list.png │ │ │ ├── added_action_to_tabgroup.png │ │ │ ├── customize_dialog.png │ │ │ ├── menu_customisation.png │ │ │ ├── new_tab.png │ │ │ ├── new_tabgroup.png │ │ │ └── update_ribbon_menu.png │ ├── design │ │ ├── 001.png │ │ ├── design_component_create_zh.png │ │ ├── design_equi_box_zh.png │ │ ├── design_equi_cone_zh.png │ │ ├── design_equi_connect_zh.png │ │ ├── design_equi_ctorus_zh.png │ │ ├── design_equi_cylinder_zh.png │ │ ├── design_equi_dish_zh.png │ │ ├── design_equi_exchanger_model_zh.png │ │ ├── design_equi_exchanger_zh.png │ │ ├── design_equi_nozzle_zh.png │ │ ├── design_equi_panel_zh.png │ │ ├── design_equi_position_zh.png │ │ ├── design_equi_pump_model_zh.png │ │ ├── design_equi_pump_zh.png │ │ ├── design_equi_rtorus_zh.png │ │ ├── design_equi_tree_zh.png │ │ ├── design_equi_vessel_model_zh.png │ │ ├── design_equi_vessel_zh.png │ │ ├── design_equipment_nozzle_zh.png │ │ ├── design_grid_create_zh.png │ │ ├── design_grid_name_zh.png │ │ ├── design_grid_preview_zh.png │ │ ├── design_grid_tag_zh.png │ │ ├── design_iso_pcf_zh.png │ │ ├── design_iso_window_zh.png │ │ ├── design_iso_zh.png │ │ ├── design_nozzle_dwg_zh.png │ │ ├── design_nozzle_orient_zh.png │ │ ├── design_pipe_create_zh.png │ │ ├── design_pipe_isometrics_zh.png │ │ ├── design_pipe_modify_zh.png │ │ ├── design_pipe_tree_zh.png │ │ ├── design_stru_frmw_zh.png │ │ ├── design_stru_ladder_zh.png │ │ ├── design_stru_platform_circular_zh.png │ │ ├── design_stru_spiral_zh.png │ │ ├── design_stru_tree_zh.png │ │ ├── design_stru_zh.png │ │ └── design_viewer_zh.png │ ├── development │ │ ├── new_utility │ │ │ ├── library_folder.png │ │ │ ├── library_reload_en.png │ │ │ ├── library_reload_form_sample_en.png │ │ │ ├── menu_library_reload_en.png │ │ │ ├── python_console.png │ │ │ ├── reload_form_message.png │ │ │ ├── run_sample.png │ │ │ ├── sample_file.png │ │ │ └── sample_window.png │ │ └── plugins │ │ │ ├── install_pip_plugins.png │ │ │ └── upgrade_pip.png │ ├── icons │ │ ├── console.png │ │ ├── create_std.png │ │ ├── customisation.png │ │ ├── equi_std_exchanger.png │ │ ├── equi_std_pump.png │ │ ├── equi_std_vessel.png │ │ ├── iso_create.png │ │ ├── iso_export.png │ │ ├── iso_setup.png │ │ ├── list.png │ │ ├── model_add.png │ │ ├── model_clear.png │ │ ├── model_delete.png │ │ ├── model_editor.png │ │ ├── model_remove.png │ │ ├── nozzle_spec.png │ │ ├── paragon_sdte.png │ │ ├── paragon_smte.png │ │ ├── paragon_text.png │ │ ├── query_distance.png │ │ ├── query_position.png │ │ ├── tree.png │ │ ├── view_back.png │ │ ├── view_bgcolor.png │ │ ├── view_bottom.png │ │ ├── view_front.png │ │ ├── view_left.png │ │ ├── view_pan.png │ │ ├── view_right.png │ │ ├── view_rotate.png │ │ ├── view_shaded.png │ │ ├── view_top.png │ │ ├── view_zoom.png │ │ ├── zoom_all.png │ │ ├── zoom_center.png │ │ └── zoom_selection.png │ ├── installation │ │ ├── existing_project │ │ │ ├── evarsProjects_en.png │ │ │ ├── existing_project_folders_en.png │ │ │ └── login_form_with_new_project_en.png │ │ ├── linux │ │ │ ├── environment_variables_en.png │ │ │ ├── installation_complete_en.png │ │ │ ├── installation_info.png │ │ │ ├── license_agreement_en.png │ │ │ ├── menu_path_en.png │ │ │ ├── pipecad_path_en.png │ │ │ ├── project_libraries_paths_en.png │ │ │ └── welcome_screen_en.png │ │ ├── new_project │ │ │ ├── 001_en.png │ │ │ ├── 001_zh.png │ │ │ ├── 002_en.png │ │ │ ├── 002_zh.png │ │ │ ├── 003_en.png │ │ │ ├── 003_zh.png │ │ │ ├── 004_en.png │ │ │ ├── 004_zh.png │ │ │ ├── 005_en.png │ │ │ └── 005_zh.png │ │ └── windows │ │ │ ├── environment_variables_en.png │ │ │ ├── installation_complete_en.png │ │ │ ├── installation_info.png │ │ │ ├── installation_progress_en.png │ │ │ ├── license_agreement_en.png │ │ │ ├── menu_path_en.png │ │ │ ├── pipecad_path_en.png │ │ │ ├── project_libraries_paths_en.png │ │ │ └── welcome_screen_en.png │ ├── installation_login_form.png │ ├── logo.png │ ├── paragon │ │ ├── paragon_bolt_zh.png │ │ ├── paragon_coco_zh.png │ │ ├── paragon_code_bolt_zh.png │ │ ├── paragon_code_coco_zh.png │ │ ├── paragon_code_component_zh.png │ │ ├── paragon_code_spec_zh.png │ │ ├── paragon_data_zh.png │ │ ├── paragon_display_zh.png │ │ ├── paragon_main_zh.png │ │ ├── paragon_nozzle_conn_zh.png │ │ ├── paragon_nozzle_data_zh.png │ │ ├── paragon_nozzle_model_zh.png │ │ ├── paragon_nozzle_specification_zh.png │ │ ├── paragon_spec_add_zh.png │ │ ├── paragon_spec_zh.png │ │ ├── paragon_spref_zh.png │ │ ├── paragon_stru_angle_model_zh.png │ │ ├── paragon_stru_angle_zh.png │ │ ├── paragon_stru_spec_zh.png │ │ ├── paragon_stru_tree_zh.png │ │ ├── paragon_text_menu_zh.png │ │ ├── paragon_text_sdte_zh.png │ │ ├── paragon_text_smte_zh.png │ │ ├── paragon_text_text_zh.png │ │ ├── paragon_tree_zh.png │ │ └── paragon_valve_zh.png │ ├── pipecad_about_en.png │ ├── pipecad_about_ru.png │ ├── pipecad_about_zh.png │ ├── pipecad_admin.png │ ├── pipecad_database_en.png │ ├── pipecad_database_ru.png │ ├── pipecad_database_zh.png │ ├── pipecad_design_en.png │ ├── pipecad_design_zh.png │ ├── pipecad_login_en.png │ ├── pipecad_login_ru.png │ ├── pipecad_login_zh.png │ ├── pipecad_model_editor.png │ ├── pipecad_paragon.png │ ├── pipecad_paragon_zh.png │ └── pipecad_python_zh.png ├── resources │ ├── pipecad_pdf.doxyfile │ └── pipecad_pdf_template.tex ├── ru │ ├── common │ │ └── keybord_shortcuts.md │ └── index.md └── user_guide_zh.md ├── lib ├── omp │ ├── library.py │ ├── reports.py │ ├── revmanager.py │ ├── sample.py │ ├── skey_library.py │ └── update.py └── pipecad │ ├── Admin.py │ ├── BoltTable.py │ ├── CocoTable.py │ ├── Component.py │ ├── Design.py │ ├── DetailText.py │ ├── Equipment.py │ ├── Exchanger.py │ ├── Grid.py │ ├── IsoAlgoDlg.py │ ├── Ladder.py │ ├── Launch.py │ ├── Login.py │ ├── LoginPDMS.py │ ├── Nozzle.py │ ├── Paragon.py │ ├── PcfExportDlg.py │ ├── PcfExporter.py │ ├── Piping.py │ ├── Platform.py │ ├── PmlExporter.py │ ├── Primitive.py │ ├── Pump.py │ ├── SpecTable.py │ ├── Specification.py │ ├── Stair.py │ ├── Standards.py │ ├── Structure.py │ ├── Test.py │ ├── Vessel.py │ ├── View.py │ ├── __init__.py │ └── icons │ ├── admin │ ├── 128x128_database_done.png │ ├── 128x128_database_fail.png │ ├── 128x128_database_select.png │ ├── 128x128_mdb_done.png │ ├── 128x128_mdb_fail.png │ ├── 128x128_mdb_select.png │ ├── 128x128_team_done.png │ ├── 128x128_team_fail.png │ ├── 128x128_team_select.png │ ├── 128x128_user_done.png │ ├── 128x128_user_fail.png │ └── 128x128_user_select.png │ ├── common │ ├── 100x100_filter_clear.png │ ├── 100x100_reload.png │ ├── 128x128_clear_sheet.png │ ├── 128x128_redo.png │ ├── 128x128_select_element.png │ ├── 128x128_undo.png │ ├── 32x32_arrow_left.png │ ├── 32x32_arrow_right.png │ ├── 32x32_explorer.png │ └── 90x90_revision.png │ ├── login │ ├── 128x128_select_admin.png │ ├── 128x128_select_design.png │ ├── 128x128_select_paragon.png │ └── 128x128_select_project.png │ └── paragon │ ├── 100x100_skey_editor.png │ ├── 128x128_cap.png │ ├── 128x128_circle.png │ ├── 128x128_hexagon.png │ ├── 128x128_line.png │ ├── 128x128_point_arrive.png │ ├── 128x128_point_leave.png │ ├── 128x128_point_spindle.png │ ├── 128x128_point_tee.png │ ├── 128x128_rectangle.png │ ├── 128x128_triangle.png │ └── spindles │ ├── 128x128_01SP.png │ ├── 128x128_02SP.png │ ├── 128x128_03SP.png │ ├── 128x128_04SP.png │ ├── 128x128_05SP.png │ ├── 128x128_06SP.png │ ├── 128x128_07SP.png │ ├── 128x128_08SP.png │ ├── 128x128_09SP.png │ ├── 128x128_10SP.png │ ├── 128x128_11SP.png │ ├── 128x128_12SP.png │ ├── 128x128_13SP.png │ ├── 128x128_14SP.png │ ├── 128x128_15SP.png │ └── 128x128_16SP.png ├── settings ├── iso │ ├── IsoAlgo.skey │ └── IsoSymbolsLibrary.json └── settings.ini ├── templates ├── Doc_Images.drawio ├── Menu_Icons.drawio ├── ProjectDefinition.xlsx └── Skey_Descriptions.xlsx ├── translations ├── phrase_books │ └── pipecad_ru.qph ├── pipecad_ru.ts ├── pipecad_zh.ts └── qt_messages │ └── pipecad_ru.qm └── uic ├── PipeCAD.Admin.uic ├── PipeCAD.Admin.xml ├── PipeCAD.Design.uic ├── PipeCAD.Design.xml ├── PipeCAD.Paragon.uic └── PipeCAD.Paragon.xml /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.dtmp 3 | templates/.$Menu_Icons.drawio.bkp 4 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/LICENSE.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![splash](https://user-images.githubusercontent.com/8439181/157780560-6072adf3-f643-4c7a-bfa9-73a01f3f6d34.png) 2 | 3 | # PipeCAD - Plant Piping Design Software. 4 | PipeCAD can be used for Plant Piping Design, PipeCAD have the following functions: 5 | * Grid Modeling; 6 | * Equipment Modeling; 7 | * Structure Modeling; 8 | * Piping Modeling; 9 | * Piping Isometric Drawing; 10 | * Piping Draft Drawing; 11 | * Piping MTO List; 12 | * Customization by Python; 13 | 14 | ![pipecad](https://user-images.githubusercontent.com/8439181/157781485-91cc6829-d2cc-495a-8658-e2c9465a9396.png) 15 | ![pipecad-iso](https://user-images.githubusercontent.com/8439181/164581718-2a5c6e14-0246-4b2d-a5d4-4d129c79976c.png) 16 | 17 | ## License 18 | PipeCAD is not open source, but you can use PipeCAD Personal Edition for free. 19 | 20 | PipeCAD provide customization by Python. The python plugins locate in the 21 | PipeCAD/Lib/pipecad folder.
22 | The Python plugins are open source with MIT license. 23 | 24 | ## Download 25 | Download PipeCAD from here: https://github.com/eryar/PipeCAD/releases 26 | 27 | There is a Sample project in PipeCAD, You can use the user SYSTEM and password XXXXXX to login the Sample project. 28 | 29 | There are some videos to illustrate how to use PipeCAD: https://space.bilibili.com/1548012589 30 | 31 | # Documentation 32 | [:uk: English](./docs/en/index.md) | 33 | [:cn: Chinese](./docs/user_guide_zh.md) | 34 | [:ru: Russian](./docs/ru/index.md) 35 | 36 | # Feedback 37 | * Report bug or other issues of PipeCAD here: https://github.com/eryar/PipeCAD/issues 38 | * Send Email to PipeCAD@qq.com 39 | 40 | # Contributors 41 | 42 | 43 | 44 | 45 | ## IsoAlgo3d 46 | 3D WebGL Viewer for Piping PCF/IDF File: https://eryar.github.io/PipeCAD/ 47 | -------------------------------------------------------------------------------- /catalogues/PipeStd.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/catalogues/PipeStd.db -------------------------------------------------------------------------------- /docs/en/admin/user_guide.md: -------------------------------------------------------------------------------- 1 | # Module Admin - User Guide 2 | 3 | ## Project Information 4 | Enter the management Admin module to view the project information. The project information is the descriptive information of the project, such as project name, project code, project description, etc. The project information is filled in when the project is created. If you need to modify the project information, you can open the project information dialog box in the Admin panel to modify the project information. 5 | 6 | ![Project Info](../../images/admin/project_info_en.png) 7 | 8 | ## Teams Management 9 | For factory projects, the division of labor and collaborative design is generally carried out according to specialties, systems and regions, and the management of grouping teams is used in the PipeCAD software. By grouping users and databases, the project design modeling of the whole plant is finally realized. 10 | 11 | ![Project Teams](../../images/admin/project_team_en.png) 12 | 13 | It can also be used to control the read and write permissions of users by grouping Teams. Only users included in the grouped Team can read and write permissions to the grouped database, while other users in the project have only read permissions. A user can belong to multiple groups. 14 | 15 | ## Databases Management 16 | PipeCAD is a 3D design software with project data as the core, and the design modeling data is stored in the form of a database. In the management module Admin, you can create the required database Database as needed. The database belongs to the group Team, and the group must be specified first when creating the database. The database command rules are: TeamName/DatabaseName. A group Team can contain multiple databases, such as component library, design library, etc. The interface for creating a database is as follows: 17 | 18 | ![Project Databases](../../images/admin/project_db_en.png) 19 | 20 | When creating a database, you need to specify the database name and type, and you can also create a base node of the database, corresponding to the design database, you can create a SITE. Each database also has a project-unique number, DB Number. This number can be entered by yourself or automatically generated by the system. After the creation is completed, a database file named with the project code and database number will be generated. 21 | 22 | ![Project Databases Files](../../images/admin/project_dbs_files_en.png) 23 | 24 | ## Workspace Management 25 | In PipeCAD, the engineering design has been decomposed by grouping Team, and the engineering design can be further decomposed through the workspace MDB. MDB (Multiple Databases) literally means a collection of databases. When a user selects an MDB when logging in, the user can only see the database in this MDB, but not other databases in the project. Through the workspace MDB, the read and write permissions of the data are controlled. If the data in a workspace is allowed to display data related to its work content as much as possible, it does not need to be the data of the entire project. 26 | 27 | ![Project MDB](../../images/admin/project_mdb_en.png) 28 | 29 | Enter the name and description when creating the MDB, and then select the database DB that belongs to the MDB in this workspace. The database order in the workspace MDB is the display order in the design navigation Design Explorer. The database order in the workspace affects the creation of the first element of the database. When the first element is created, the write database can be placed first in the same type of database. So for convenience, when creating the database Database, provide the function of creating the first element. 30 | 31 | ## User Management 32 | You also need to enter the username and password on the login interface of PipeCAD. The management of this data is in the User section. There are two types of user rights: General and Free. When creating a project, a system administrator SYSTEM with Free permissions will be created by default, and the password is 6 uppercase Xs. Users with Free authority belong to the system administrator, and can enter all modules, and have the authority to read and write all databases. General users can only access the Paragon and Design modules, but not the management module Admin. Users can only have read and write permissions for the databases that belong to the group. 33 | 34 | ![Project Users](../../images/admin/project_user_en.png) 35 | 36 | When creating a user, you need to enter a user name and password, select user permissions, and specify which Team the user belongs to. 37 | 38 | ## Import Project Definition from Excel 39 | To simplify and accelerate process of project setup, administrator can import project definition file using menu: 40 | ![Menu Import Project Definition](../../images/admin/user_guide/admin_menu_admin_import_en.png) 41 | 42 | After pressing button import form will be shown: 43 | ![Form Import Project Definition](../../images/admin/user_guide/admin_import_project_definition_en.png) 44 | 45 | By pressing button **Explorer** you need to define location of project definition file (by default, folder **%TEMPLATES_DIR%** will be opened): 46 | ![Form for selecting Project Definition file](../../images/admin/user_guide/admin_import_project_definition_path_en.png) 47 | 48 | Project definition file contais data for creating users, teams, databases and mdbs: 49 | ![Form for selecting Project Definition file](../../images/admin/user_guide/admin_import_project_definition_path_en.png) 50 | 51 | After selecting file, utility will start importing data and creating elements which are missing in the project. In case of correct import icons will be colored by Green: 52 | ![Form for selecting Project Definition file](../../images/admin/user_guide/admin_import_project_definition_file.png) 53 | 54 | in versus case icons will be colored by Red: 55 | ![Form for selecting Project Definition file](../../images/admin/user_guide/admin_import_project_definition_fail_en.png) 56 | 57 | ## Expunge User Session 58 | On module Admin panel, you can view the user information logged in the current project. To open form click the User Process button: 59 | 60 | ![User Process](../../images/admin/user_process_en.png) 61 | 62 | When the user exits the program abnormally, the process information will be left here. The project administrator selects the users to be kicked out in the user process list, and clicks OK to kick these users out. -------------------------------------------------------------------------------- /docs/en/catalogue/user_guide.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/en/catalogue/user_guide.md -------------------------------------------------------------------------------- /docs/en/common/keybord_shortcuts.md: -------------------------------------------------------------------------------- 1 | # Keyboard shortcuts 2 | 3 | ## Module Design 4 | 5 | ### View Control 6 | | Keys | Description | 7 | |:----:|------------------| 8 | | F2 | Zoom | 9 | | F3 | Pan | 10 | | F5 | Rotate | 11 | | F8 | Shaded/Wireframe | 12 | 13 | -------------------------------------------------------------------------------- /docs/en/common/ribbon_customisation.md: -------------------------------------------------------------------------------- 1 | # Customisation of ribbon menu 2 | PipeCAD has ribbon menu which be customised using Customize Dialog form. 3 | To add new menu there will need to do 2 steps: 4 | 5 | To do it there will need to update uic file (for example: PipeCAD.Design.uic ) by adding new line: 6 | ```xml 7 | 8 | ``` 9 | After that in module where you need to add button for calling utility open Ribbon menu editor by pressing button Customisation ![Ribbon Menu Editor](../../images/icons/customisation.png) located in right top conner of ribbon: 10 | 11 | ![Ribbon Menu Customisation](../../images/comon/ribbon_s/customisation/menu_customisation.png) 12 | 13 | In opened form it possible to create dedicated Tab for developed utilities by pressing button **New Category** in the right part of form. 14 | ![Customisation Dialog](../../images/common/customize_dialog.png) 15 | 16 | After creating new element, there is need to select it and press button **Rename** to name it correctly. In our case we will create Tab and call it **OMP**: 17 | ![Create new Tab](../../images/common/new_tab.png) 18 | 19 | Inside this Tab we will create new TabGroup with name **Samples**: 20 | ![Create new TabGroup](../../images/common/new_tabgroup.png) 21 | 22 | In left part of form select UserAction row in the list to see available options: 23 | ![Action List](../../images/common/action_list.png) 24 | 25 | After selecting our action **Run Sample** there is need to press button **Add >>** to add action to selected TabGroup: 26 | ![Added Action to TabGroup](../../images/common/added_action_to_tabgroup.png) 27 | 28 | In the end, you will see new Tab menu with new button: 29 | ![Updated Ribbon menu](../../images/common/update_ribbon_menu.png) -------------------------------------------------------------------------------- /docs/en/design/common/tab_home.md: -------------------------------------------------------------------------------- 1 | # Tab menu Home 2 | The data in PipeCAD is organized in a tree hierarchy, so tree views are provided in each module. Each node in the corresponding tree structure is an object, and different objects have different properties. PipeCAD integrates the Python development language, and can use Python to develop customized functions. The Model Editor of the design module can easily adjust the position of the model, and the distance and coordinate information can be easily queried through the query function in the design module. 3 | 4 | Common functions are listed on the general operation panel of PipeCAD, mainly showing/hiding the tree view Explorer, showing/hiding the property list Properties, and showing/hiding the Python command window Console. 5 | 6 | tree view: by clicking Explorer Treeto show/hide the tree view. 7 | 8 | Property list: by clicking Properties Listto show/hide the property list. 9 | 10 | Command window: by clicking Python Consoleto show/hide the command window. 11 | 12 | Model editing: by clicking Model Editorto enable/disable the Model Editor feature. 13 | 14 | Data deletion: by clicking Delete Itemto delete the selected tree node. 15 | 16 | Distance query: by clicking Query DistanceAfter starting the distance query function, select two points on the model for distance query. 17 | 18 | Coordinate query: by clicking Query PositionAfter starting the coordinate query function, select a point on the model to query the coordinates. 19 | -------------------------------------------------------------------------------- /docs/en/design/common/tab_view.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/en/design/common/tab_view.md -------------------------------------------------------------------------------- /docs/en/design/user_guide.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/en/design/user_guide.md -------------------------------------------------------------------------------- /docs/en/development/new_utility.md: -------------------------------------------------------------------------------- 1 | # Developing of new utility 2 | 3 | ## Code development 4 | Each developer can evaluate his own macros library for using inside PipeCAD. In this case all macros have to be placed in dedicated folder inside folder **%PYTHONPATH%**. For example, developer's library will be named **omp** and placed in default library folder of PipeCAD: 5 | ![Developer's Library Folder](../../images/development/new_utility/sample_file.png) 6 | 7 | Inside sample.py will write next code of new utility: 8 | ```python 9 | from PythonQt.QtCore import * 10 | from PythonQt.QtGui import * 11 | 12 | from pipecad import * 13 | 14 | class dlgSample(QDialog): 15 | def __init__(self, parent = None): 16 | QDialog.__init__(self, parent) 17 | self.setupUi() 18 | # __init__ 19 | 20 | def setupUi(self): 21 | self.resize(500, 30) 22 | self.setWindowTitle(self.tr("PipeCAD - Sample Utility")) 23 | 24 | self.verticalLayout = QVBoxLayout(self) 25 | self.lblText = QLabel("Sample Form Text") 26 | self.verticalLayout.addWidget(self.lblText) 27 | # setupUi 28 | 29 | # Singleton Instance. 30 | aSample = dlgSample(PipeCad) 31 | 32 | def show(): 33 | aSample.show() 34 | # Show 35 | ``` 36 | 37 | ## Calling Utility in PipeCAD 38 | For loading utility there needs to run command for importing utility module into PipeCAD: 39 | ```python 40 | import omp.sample as sm 41 | ``` 42 | Abbreviation **sm** is used to simplify next using of this module. After importing module there will be possible to show utility form on screen: 43 | ```python 44 | sm.show() 45 | ``` 46 | 47 | ![Commands in Python console](../../images/development/new_utility/python_console.png) 48 | 49 | or it can be added button to ribbon menu (see [Customisation of ribbon menu](../common/ribbon_customisation.md) ). 50 | 51 | In result form will be shown: 52 | 53 | ![Sample Utility Window](../../images/development/new_utility/sample_window.png) 54 | 55 | As during updating of python files it could be useful to reload utility during current session w/out restarting PipeCAD. To do it there will need to run next commands: 56 | ```python 57 | import imp 58 | imp.reload(omp.sample) 59 | ``` 60 | or (as it was used abbreviation sm to replace whole name omp.sample) 61 | ```python 62 | import imp 63 | imp.reload(sm) 64 | ``` 65 | 66 | The same action can be done using menu **Development -> Reload Libraries**: 67 | 68 | ![Menu for calling form for reloading python library/utility](../../images/development/new_utility/menu_library_reload_en.png) 69 | 70 | which will show form **Reload Python Libraries**: 71 | 72 | ![Form for reloading python library/utility](../../images/development/new_utility/library_reload_en.png) 73 | 74 | Inside filter you will need to input name of python library/utility, which needs to reload (in our case developed utility **omp.sample**): 75 | 76 | ![Reloading form Sample](../../images/development/new_utility/library_reload_form_sample_en.png) 77 | 78 | In case of correct reloading of form file, you will see next message: 79 | 80 | ![Reload Modified Form](../../images/development/new_utility/reload_form_message.png) 81 | 82 | After that form can be started again via menu (if setuped) or using again coommand: 83 | ```python 84 | sm.show() 85 | ``` 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /docs/en/development/plugins.md: -------------------------------------------------------------------------------- 1 | # Python Libraries in PipeCAD 2 | Using PIP module can be easily installed third-party modules of Python, such as Excel read-write module Pandas, which is convenient to generate material tables; computer vision module OpenCV; artificial intelligence AI module Caffe, TensorFlow and other machine learning frameworks. 3 | 4 | ## Update PIP application 5 | Before installation of any new python packages there needs to upgrade PIP utility to the latest version. In command line type command: 6 | ```batch 7 | python -m pip install --upgrade pip 8 | ``` 9 | ![002](../../images/development/plugins/upgrade_pip.png) 10 | 11 | Updates will be downloaded into folder **%PIPECAD_EXE%\Scripts**. 12 | 13 | ## Installing Python packages 14 | To install python library using PIP utility there is need to type command (e.g., for installing package Pandas ): 15 | ```batch 16 | pip install pandas 17 | ``` 18 | ![003](../../images/development/plugins/install_pip_plugins.png) 19 | 20 | New package will be downloaded to folder **%PIPECAD_EXE%\Lib\site-packages**. List of availible Python packages for installation can be found on site of PIP utility - https://pypi.org/ 21 | 22 | ## Loading of Python script 23 | For loading Python script (for ex. C:\Data\PythonLoad.py) there will use next command: 24 | ```python 25 | exec(open("C:\Data\PythonLoad.py",encoding='utf8').read()) 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/en/index.md: -------------------------------------------------------------------------------- 1 | # PipeCAD User Guide {#pipecad_user_guide} 2 | 3 | ## Functional Overview 4 | The three-dimensional pipeline design software PipeCAD is the pipeline layout design system, which is suitable for factories, construction, petrochemicals, environmental protection medicine and other industries. In the pipeline design, according to the pipeline instrument flow chart (P&ID), equipment layout plan and related drawings and materials of civil engineering, instrumentation, electrical, pump and other aspects, the pipeline is reasonably arranged and designed. The pipeline layout design should first meet the process requirements, facilitate installation, operation and maintenance, and be reasonable, neat and beautiful. 3D modeling of piping enables collision-free design and rapid production of deliverables, reducing rework and increasing design efficiency. 5 | 6 | ![Module Design](../images/pipecad_design.png) 7 | 8 | The software adopts an independent 3D graphics platform and does not depend on other third-party CAD platforms (such as AutoCAD, etc.). Through parametric design, the design data is saved to the database to form a product database with the project database as the core. The product database provides the data basis for generating drawings and material reports, and also provides the data source for the digital delivery of the factory. 9 | 10 | ![Database](../images/pipecad_database_en.png) 11 | 12 | As shown in the figure above, the parametric component library and design modeling data are saved in the database. When generating the deliverables, the required data is extracted from the database, and piping drawings and material reports are generated. 13 | 14 | PipeCAD is mainly divided into three modules, namely the project management Admin module, the parameter component Paragon module and the design modeling Design module. 15 | 16 | * Project management module: create users and databases, and manage users' access rights to databases. 17 | 18 | ![Module Admin](../images/pipecad_admin.png) 19 | 20 | * Parametric component module: Through the data input of the form, the parameterized component can be quickly generated, and the pipeline and structure can be managed hierarchically. In the parametric component library module Paragon, the creation of standard parametric pipe fittings is simplified into the form of tabular data input, which reduces the workload of engineering data preparation and improves efficiency and accuracy. 21 | 22 | ![Module Paragon](../images/pipecad_paragon.png) 23 | 24 | * Design modeling module: Create a three-dimensional module for the factory in the Design modeling Design module. Factory models mainly include the following types: 25 | Grid: It is convenient for the positioning of various professional models; 26 | Equipment: various towers, tanks, heat exchangers, containers, etc. The equipment includes a nozzle, which is convenient for pipe connection and positioning; 27 | Structure: frame structure, workshop, equipment platform ladder, railing, etc.; 28 | Pipe Piping: models of pipes, air ducts, etc. that connect equipment; 29 | Hanger&Support: brackets for pipes, air ducts, etc.; 30 | 31 | ![Module Design](../images/pipecad_design.png) 32 | 33 | The data generated by the interactive operation of the plant design are stored in the project database. 34 | 35 | ![Model Editor](../images/pipecad_model_editor.png) 36 | 37 | Based on the project database, the required data can be extracted to generate the design deliverables: drawings and material reports, as well as other data required for digital delivery. 38 | 39 | PipeCAD also combines Python to provide flexible secondary development functions for the software, which is convenient for software function expansion. Users can use Python scripts to customize and develop new functions according to their own needs. 40 | 41 | 42 | # Contents 43 | ## Installation 44 | [Software and Hardware Requirements](./installation/requirements.md) 45 | 46 | [Installation on Windows](./installation/windows.md) 47 | 48 | [Installation on Linux](./installation/linux.md) 49 | 50 | ## Project Setup 51 | [New Project Creation](./installation/new_project.md) 52 | 53 | [Existing Project Connection](./installation/existing_project.md) 54 | 55 | [System Variables of PipeCAD](./installation/system_variables.md) 56 | 57 | [Login to Project](./installation/login_to_project.md) 58 | 59 | ## User Guides 60 | [Module Design](./design/user_guide.md) 61 | 62 | [Module Paragon](./paragon/user_guide.md) 63 | 64 | [Module Admin](./admin/user_guide.md) 65 | 66 | [Keyboard shortcuts](./common/keybord_shortcuts.md) 67 | 68 | ## Development 69 | [PipeCAD API](./development/api.md) 70 | 71 | [Python Plugins](./development/plugins.md) 72 | 73 | [Developing of new utility](./development/new_utility.md) 74 | 75 | [Customisation of Ribbon menu](./common/ribbon_customisation.md) 76 | 77 | ## Video Training Examples 78 | 79 | It is recommended that you take a look at the video tutorial before using PipeCAD. 80 | 81 | 1. [Download and install PipeCAD](https://www.bilibili.com/video/BV1u3411e7hD) 82 | 2. [PipeCAD Project Management](https://www.bilibili.com/video/BV11Q4y1r7zG?share_source=copy_web) 83 | 3. [PipeCAD standard parts](https://www.bilibili.com/video/BV1144y1u7Rc?share_source=copy_web) 84 | 4. [PipeCAD equipment modeling](https://www.bilibili.com/video/BV1Xq4y1r7Gw?share_source=copy_web) 85 | 5. [PipeCAD Structural Modeling]() 86 | 6. [PipeCAD Pipe Modeling](https://www.bilibili.com/video/BV1sL411s7B5?share_source=copy_web) 87 | 7. [PipeCAD pipe ISO drawing](https://www.bilibili.com/video/BV1nY411s7jp) 88 | 8. [PipeCAD piping layout drawing]() 89 | 9. [PipeCAD secondary development]() 90 | -------------------------------------------------------------------------------- /docs/en/installation/existing_project.md: -------------------------------------------------------------------------------- 1 | # Connecting to Existing Project 2 | To connect already existing project there is need to add path of required project to evarsProjects.bat, which is located in folder %PROJECTS_DIR%. 3 | 4 | ![evarsProjects](../../images/installation/existing_project/evarsProjects_en.png) 5 | 6 | Existing project can be located in any folder, but it will be better practice to save all project in folder %PROJECTS_DIR%. 7 | 8 | ![evarsProjects](../../images/installation/existing_project/existing_project_folders_en.png) 9 | 10 | After updating evarsProjects.bat "new" project will be availible for selection in login form by pressing buttons ![](../../../Python/icons/common/32x32_arrow_left.png) or ![](../../../Python/icons/common/32x32_arrow_right.png) 11 | 12 | ![Login Form](../../images/installation/existing_project/login_form_with_new_project_en.png) -------------------------------------------------------------------------------- /docs/en/installation/linux.md: -------------------------------------------------------------------------------- 1 | ## Installation of PipeCAD on Linux using WINE 2 | 3 | PipeCAD can be installed on Linux using WINE (for example, Linux Astra with default setting of WINE). 4 | 5 | After starting installation process you will see next window and need to press button **Next**: 6 | ![Welcome Screen](../../images/installation/linux/welcome_screen_en.png) 7 | 8 | You need you to agree with License Agreement and press button **Next** to continue installation process: 9 | ![License Agreement](../../images/installation/linux/license_agreement_en.png) 10 | 11 | Next step requires to select installation folder (or confirm default path) and to press button **Next**: 12 | ![PipeCAD Installation Folder](../../images/installation/linux/pipecad_path_en.png) 13 | 14 | PipeCAD supports installation of libraries and projects in different folders in case if it's required by company's work procedure. So on this step it possible to define paths where it will be located Projects files and Python Libraries. A folder can be selected by pressing the button **Browse**: 15 | ![Projects and Libraries paths](../../images/installation/linux/project_libraries_paths_en.png) 16 | 17 | In case if Python is not installed on PC, there is need to add path to PipeCAD folders to system variable **%PATH%**. It will allow to use embedded Python for running scripts: 18 | 19 | ![Enviroment Variables Setup](../../images/installation/linux/environment_variables_en.png) 20 | 21 | After checking installation details you need to press button **Install**: 22 | 23 | ![Installation Info](../../images/installation/linux/installation_info.png) 24 | 25 | Installation process will take some time, during which installer will copy files and create sample project: 26 | 27 | ![Installation Progress](../../images/installation/linux/installation_progress_en.png) 28 | 29 | When utility will complete installation process you can check box to read REARM or start application after closing installation utility. 30 | ![Installation Complete](../../images/installation/linux/installation_complete_en.png) 31 | -------------------------------------------------------------------------------- /docs/en/installation/login_to_project.md: -------------------------------------------------------------------------------- 1 | # Login to Project 2 | Double-click the PipeCAD shortcut icon or directly run PipeCAD.bat in the installation directory to start the software. After PipeCAD starts, the login interface is displayed: 3 | 4 | ![Login form](../../images/pipecad_login_en.png) 5 | 6 | * Project: Select the project name to be logged in; 7 | * Username/Password: Select the user and enter the corresponding password to log in. Each project has a default administrator user SYSTEM, and the default password is XXXXXX (6 uppercase English letters X). User passwords can be configured in the project management Admin module; 8 | * Database group (MDB): Select the database group MDB to log in; 9 | * Module: Select the model to log in. There are currently three modules: project management module Admin, parametric component library module Paragon and design modeling module Design. 10 | 11 | ## Arguments for starting PipeCAD 12 | 13 | |Argument|Description| 14 | |:---|:---| 15 | |--show_console|During running PipeCAD, Python console will be shown. Usefull for defining errors during of PipeCAD session| 16 | |--create project|Argument will allow to start PipeCAD in project creation mode| 17 | 18 | -------------------------------------------------------------------------------- /docs/en/installation/new_project.md: -------------------------------------------------------------------------------- 1 | # New Project Creation 2 | Start the project creation program by running the batch file ProjectCreation.bat in the installation directory or the Create Project button on the login screen. Enter the project number, name, code and description, project storage path and other information. Where project number Number is the name of the project root folder; project code Code is a three-capital letter code that does not conflict with other projects. The project environment variable configuration Project Variables is used to set the folder path required by the project, which is automatically generated according to the project code Code. 3 | 4 | ![001](../../images/installation/new_project/001_en.png) 5 | 6 | Click the OK button to create the project, if the project is successfully created, a prompt message will be given as shown below: 7 | 8 | ![002](../../images/installation/new_project/002_en.png) 9 | And generate the database files and other configuration files required by the project in the project folder: 10 | 11 | ![003](../../images/installation/new_project/003_en.png) 12 | 13 | The batch file evarsSample.bat is the environment variable configuration file of the path required by the project. When creating an existing project, a prompt is given: 14 | 15 | ![004](../../images/installation/new_project/004_en.png) 16 | 17 | When the data that must be entered is not entered, a prompt is also given: 18 | 19 | ![005](../../images/installation/new_project/005_en.png) -------------------------------------------------------------------------------- /docs/en/installation/requirements.md: -------------------------------------------------------------------------------- 1 | ## Hardware Requirements 2 | 3 | PipeCAD does not have high hardware requirements. Because it is a 3D software, it has high requirements on graphics cards, preferably a discrete graphics card with supports OpenGL 3.3 and above. 4 | 5 | |Component|Min|Recommended| 6 | |---|---|---| 7 | |Memory|1Gb|8Gb| 8 | |HDD Space|1Gb|Depends from project size| 9 | |Graphics card|Discrete graphics card, OpenGL3.3| 10 | 11 | ## Software Requirement 12 | 13 | ### OS Windows 14 | For Windows operating system PipeCAD is developed using Visual Studio 2015, so Visual C++ Redistributable Packages for Visual Studio 2015 is required, and the dynamic library program lacking Visual C++ will report an error. The Visual C++ Redistributable for Visual Studio 2015 download address is: 15 | 16 | https://www.microsoft.com/zh-CN/download/details.aspx?id=48145 17 | 18 | ### OS Linux 19 | For the Linux operating system, Qt Creator will be used for development later, and Linux support is also provided. Currently, PipeCAD can be installed on Linux using Wine. -------------------------------------------------------------------------------- /docs/en/installation/system_variables.md: -------------------------------------------------------------------------------- 1 | # System variables which are used by PipeCAD 2 | 3 | To customise PipeCAD installation in according with company IT rules, administrator can modify different system variables. 4 | 5 | * Path to folder, where projects are located: 6 | ```batch 7 | SET PROJECTS_DIR=C:\PipeCAD\projects 8 | ``` 9 | 10 | * Path to folders, where Python libraries are installed: 11 | ```batch 12 | SET PYTHONPATH=%PYTHONPATH%;%~dp0lib\site-packages;C:\Github\PipeCAD\lib;C:\PipeCAD\lib; 13 | ``` 14 | 15 | * Path to folder, where Python cache will be created: 16 | ```batch 17 | SET PYTHONPYCACHEPREFIX=%TEMP% 18 | ``` 19 | 20 | * Path to folder, where from PipeCAD will take user documentation 21 | ```batch 22 | SET PIPECAD_HELP_PATH=C:\Github\PipeCAD\docs 23 | ``` 24 | 25 | * Path to folder with menu files of PipeCAD 26 | ```batch 27 | SET PIPECAD_MENU_PATH=C:\Github\PipeCAD\uic 28 | ``` 29 | 30 | * Path to folder with PipeCAD settings 31 | ``` 32 | SET PIPECAD_SETTINGS_PATH=C:\Github\PipeCAD\settings 33 | ``` 34 | 35 | -------------------------------------------------------------------------------- /docs/en/installation/windows.md: -------------------------------------------------------------------------------- 1 | ## Installation PipeCAD on Windows 2 | All installation process have to be done under Local Administrator account (in case of installing software in default folder **%PROGRAMFILES%** or on system drive). 3 | After starting installation process you will see next window and need to press button **Next**: 4 | ![Welcome Screen](../../images/installation/windows/welcome_screen_en.png) 5 | 6 | You need you to agree with License Agreement and press button **Next** to continue installation process: 7 | ![License Agreement](../../images/installation/windows/license_agreement_en.png) 8 | 9 | Next step requires to select installation folder (or confirm default path) and to press button **Next**: 10 | ![PipeCAD Installation Folder](../../images/installation/windows/pipecad_path_en.png) 11 | 12 | PipeCAD supports installation of libraries and projects in different folders in case if it's required by company's work procedure. So on this step it possible to define paths where it will be located Projects files and Python Libraries. A folder can be selected by pressing the button **Browse**: 13 | ![Projects and Libraries paths](../../images/installation/windows/project_libraries_paths_en.png) 14 | 15 | In case if Python is not installed on PC, there is need to add path to PipeCAD folders to system variable **%PATH%**. It will allow to use embedded Python for running scripts: 16 | 17 | ![Enviroment Variables Setup](../../images/installation/windows/environment_variables_en.png) 18 | 19 | After checking installation details you need to press button **Install**: 20 | 21 | ![Installation Info](../../images/installation/windows/installation_info.png) 22 | 23 | Installation process will take some time, during which installer will copy files and create sample project: 24 | 25 | ![Installation Progress](../../images/installation/windows/installation_progress_en.png) 26 | 27 | When utility will complete installation process you can check box to read REARM or start application after closing installation utility. 28 | ![Installation Complete](../../images/installation/windows/installation_complete_en.png) 29 | -------------------------------------------------------------------------------- /docs/images/admin/admin_main_ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_main_ru.png -------------------------------------------------------------------------------- /docs/images/admin/admin_main_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_main_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_alert_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_alert_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_creation_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_creation_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_data_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_data_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_db_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_db_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_dbs_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_dbs_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_exists_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_exists_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_info_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_info_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_mdb_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_mdb_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_ok_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_ok_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_team_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_team_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_project_user_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_project_user_zh.png -------------------------------------------------------------------------------- /docs/images/admin/admin_user_process_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/admin_user_process_zh.png -------------------------------------------------------------------------------- /docs/images/admin/project_db_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/project_db_en.png -------------------------------------------------------------------------------- /docs/images/admin/project_dbs_files_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/project_dbs_files_en.png -------------------------------------------------------------------------------- /docs/images/admin/project_info_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/project_info_en.png -------------------------------------------------------------------------------- /docs/images/admin/project_mdb_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/project_mdb_en.png -------------------------------------------------------------------------------- /docs/images/admin/project_team_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/project_team_en.png -------------------------------------------------------------------------------- /docs/images/admin/project_user_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/project_user_en.png -------------------------------------------------------------------------------- /docs/images/admin/user_guide/admin_import_project_definition_done_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_guide/admin_import_project_definition_done_en.png -------------------------------------------------------------------------------- /docs/images/admin/user_guide/admin_import_project_definition_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_guide/admin_import_project_definition_en.png -------------------------------------------------------------------------------- /docs/images/admin/user_guide/admin_import_project_definition_fail_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_guide/admin_import_project_definition_fail_en.png -------------------------------------------------------------------------------- /docs/images/admin/user_guide/admin_import_project_definition_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_guide/admin_import_project_definition_file.png -------------------------------------------------------------------------------- /docs/images/admin/user_guide/admin_import_project_definition_path_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_guide/admin_import_project_definition_path_en.png -------------------------------------------------------------------------------- /docs/images/admin/user_guide/admin_menu_admin_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_guide/admin_menu_admin_en.png -------------------------------------------------------------------------------- /docs/images/admin/user_guide/admin_menu_admin_import_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_guide/admin_menu_admin_import_en.png -------------------------------------------------------------------------------- /docs/images/admin/user_process_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/admin/user_process_en.png -------------------------------------------------------------------------------- /docs/images/common/common_home_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/common_home_zh.png -------------------------------------------------------------------------------- /docs/images/common/common_model_editor_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/common_model_editor_zh.png -------------------------------------------------------------------------------- /docs/images/common/common_view_context_menu1_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/common_view_context_menu1_zh.png -------------------------------------------------------------------------------- /docs/images/common/common_view_context_menu2_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/common_view_context_menu2_zh.png -------------------------------------------------------------------------------- /docs/images/common/common_view_cube_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/common_view_cube_zh.png -------------------------------------------------------------------------------- /docs/images/common/customize_dialog.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/customize_dialog.bmp -------------------------------------------------------------------------------- /docs/images/common/ribbon_customisation/action_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/ribbon_customisation/action_list.png -------------------------------------------------------------------------------- /docs/images/common/ribbon_customisation/added_action_to_tabgroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/ribbon_customisation/added_action_to_tabgroup.png -------------------------------------------------------------------------------- /docs/images/common/ribbon_customisation/customize_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/ribbon_customisation/customize_dialog.png -------------------------------------------------------------------------------- /docs/images/common/ribbon_customisation/menu_customisation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/ribbon_customisation/menu_customisation.png -------------------------------------------------------------------------------- /docs/images/common/ribbon_customisation/new_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/ribbon_customisation/new_tab.png -------------------------------------------------------------------------------- /docs/images/common/ribbon_customisation/new_tabgroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/ribbon_customisation/new_tabgroup.png -------------------------------------------------------------------------------- /docs/images/common/ribbon_customisation/update_ribbon_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/common/ribbon_customisation/update_ribbon_menu.png -------------------------------------------------------------------------------- /docs/images/design/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/001.png -------------------------------------------------------------------------------- /docs/images/design/design_component_create_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_component_create_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_box_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_box_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_cone_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_cone_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_connect_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_connect_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_ctorus_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_ctorus_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_cylinder_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_cylinder_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_dish_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_dish_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_exchanger_model_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_exchanger_model_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_exchanger_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_exchanger_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_nozzle_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_nozzle_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_panel_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_panel_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_position_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_position_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_pump_model_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_pump_model_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_pump_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_pump_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_rtorus_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_rtorus_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_tree_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_tree_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_vessel_model_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_vessel_model_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equi_vessel_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equi_vessel_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_equipment_nozzle_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_equipment_nozzle_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_grid_create_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_grid_create_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_grid_name_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_grid_name_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_grid_preview_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_grid_preview_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_grid_tag_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_grid_tag_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_iso_pcf_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_iso_pcf_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_iso_window_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_iso_window_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_iso_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_iso_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_nozzle_dwg_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_nozzle_dwg_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_nozzle_orient_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_nozzle_orient_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_pipe_create_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_pipe_create_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_pipe_isometrics_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_pipe_isometrics_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_pipe_modify_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_pipe_modify_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_pipe_tree_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_pipe_tree_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_stru_frmw_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_stru_frmw_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_stru_ladder_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_stru_ladder_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_stru_platform_circular_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_stru_platform_circular_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_stru_spiral_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_stru_spiral_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_stru_tree_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_stru_tree_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_stru_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_stru_zh.png -------------------------------------------------------------------------------- /docs/images/design/design_viewer_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/design/design_viewer_zh.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/library_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/library_folder.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/library_reload_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/library_reload_en.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/library_reload_form_sample_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/library_reload_form_sample_en.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/menu_library_reload_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/menu_library_reload_en.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/python_console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/python_console.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/reload_form_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/reload_form_message.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/run_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/run_sample.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/sample_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/sample_file.png -------------------------------------------------------------------------------- /docs/images/development/new_utility/sample_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/new_utility/sample_window.png -------------------------------------------------------------------------------- /docs/images/development/plugins/install_pip_plugins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/plugins/install_pip_plugins.png -------------------------------------------------------------------------------- /docs/images/development/plugins/upgrade_pip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/development/plugins/upgrade_pip.png -------------------------------------------------------------------------------- /docs/images/icons/console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/console.png -------------------------------------------------------------------------------- /docs/images/icons/create_std.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/create_std.png -------------------------------------------------------------------------------- /docs/images/icons/customisation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/customisation.png -------------------------------------------------------------------------------- /docs/images/icons/equi_std_exchanger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/equi_std_exchanger.png -------------------------------------------------------------------------------- /docs/images/icons/equi_std_pump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/equi_std_pump.png -------------------------------------------------------------------------------- /docs/images/icons/equi_std_vessel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/equi_std_vessel.png -------------------------------------------------------------------------------- /docs/images/icons/iso_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/iso_create.png -------------------------------------------------------------------------------- /docs/images/icons/iso_export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/iso_export.png -------------------------------------------------------------------------------- /docs/images/icons/iso_setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/iso_setup.png -------------------------------------------------------------------------------- /docs/images/icons/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/list.png -------------------------------------------------------------------------------- /docs/images/icons/model_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/model_add.png -------------------------------------------------------------------------------- /docs/images/icons/model_clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/model_clear.png -------------------------------------------------------------------------------- /docs/images/icons/model_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/model_delete.png -------------------------------------------------------------------------------- /docs/images/icons/model_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/model_editor.png -------------------------------------------------------------------------------- /docs/images/icons/model_remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/model_remove.png -------------------------------------------------------------------------------- /docs/images/icons/nozzle_spec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/nozzle_spec.png -------------------------------------------------------------------------------- /docs/images/icons/paragon_sdte.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/paragon_sdte.png -------------------------------------------------------------------------------- /docs/images/icons/paragon_smte.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/paragon_smte.png -------------------------------------------------------------------------------- /docs/images/icons/paragon_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/paragon_text.png -------------------------------------------------------------------------------- /docs/images/icons/query_distance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/query_distance.png -------------------------------------------------------------------------------- /docs/images/icons/query_position.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/query_position.png -------------------------------------------------------------------------------- /docs/images/icons/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/tree.png -------------------------------------------------------------------------------- /docs/images/icons/view_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_back.png -------------------------------------------------------------------------------- /docs/images/icons/view_bgcolor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_bgcolor.png -------------------------------------------------------------------------------- /docs/images/icons/view_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_bottom.png -------------------------------------------------------------------------------- /docs/images/icons/view_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_front.png -------------------------------------------------------------------------------- /docs/images/icons/view_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_left.png -------------------------------------------------------------------------------- /docs/images/icons/view_pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_pan.png -------------------------------------------------------------------------------- /docs/images/icons/view_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_right.png -------------------------------------------------------------------------------- /docs/images/icons/view_rotate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_rotate.png -------------------------------------------------------------------------------- /docs/images/icons/view_shaded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_shaded.png -------------------------------------------------------------------------------- /docs/images/icons/view_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_top.png -------------------------------------------------------------------------------- /docs/images/icons/view_zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/view_zoom.png -------------------------------------------------------------------------------- /docs/images/icons/zoom_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/zoom_all.png -------------------------------------------------------------------------------- /docs/images/icons/zoom_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/zoom_center.png -------------------------------------------------------------------------------- /docs/images/icons/zoom_selection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/icons/zoom_selection.png -------------------------------------------------------------------------------- /docs/images/installation/existing_project/evarsProjects_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/existing_project/evarsProjects_en.png -------------------------------------------------------------------------------- /docs/images/installation/existing_project/existing_project_folders_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/existing_project/existing_project_folders_en.png -------------------------------------------------------------------------------- /docs/images/installation/existing_project/login_form_with_new_project_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/existing_project/login_form_with_new_project_en.png -------------------------------------------------------------------------------- /docs/images/installation/linux/environment_variables_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/environment_variables_en.png -------------------------------------------------------------------------------- /docs/images/installation/linux/installation_complete_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/installation_complete_en.png -------------------------------------------------------------------------------- /docs/images/installation/linux/installation_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/installation_info.png -------------------------------------------------------------------------------- /docs/images/installation/linux/license_agreement_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/license_agreement_en.png -------------------------------------------------------------------------------- /docs/images/installation/linux/menu_path_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/menu_path_en.png -------------------------------------------------------------------------------- /docs/images/installation/linux/pipecad_path_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/pipecad_path_en.png -------------------------------------------------------------------------------- /docs/images/installation/linux/project_libraries_paths_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/project_libraries_paths_en.png -------------------------------------------------------------------------------- /docs/images/installation/linux/welcome_screen_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/linux/welcome_screen_en.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/001_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/001_en.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/001_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/001_zh.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/002_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/002_en.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/002_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/002_zh.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/003_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/003_en.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/003_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/003_zh.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/004_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/004_en.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/004_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/004_zh.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/005_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/005_en.png -------------------------------------------------------------------------------- /docs/images/installation/new_project/005_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/new_project/005_zh.png -------------------------------------------------------------------------------- /docs/images/installation/windows/environment_variables_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/environment_variables_en.png -------------------------------------------------------------------------------- /docs/images/installation/windows/installation_complete_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/installation_complete_en.png -------------------------------------------------------------------------------- /docs/images/installation/windows/installation_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/installation_info.png -------------------------------------------------------------------------------- /docs/images/installation/windows/installation_progress_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/installation_progress_en.png -------------------------------------------------------------------------------- /docs/images/installation/windows/license_agreement_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/license_agreement_en.png -------------------------------------------------------------------------------- /docs/images/installation/windows/menu_path_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/menu_path_en.png -------------------------------------------------------------------------------- /docs/images/installation/windows/pipecad_path_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/pipecad_path_en.png -------------------------------------------------------------------------------- /docs/images/installation/windows/project_libraries_paths_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/project_libraries_paths_en.png -------------------------------------------------------------------------------- /docs/images/installation/windows/welcome_screen_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation/windows/welcome_screen_en.png -------------------------------------------------------------------------------- /docs/images/installation_login_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/installation_login_form.png -------------------------------------------------------------------------------- /docs/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/logo.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_bolt_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_bolt_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_coco_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_coco_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_code_bolt_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_code_bolt_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_code_coco_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_code_coco_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_code_component_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_code_component_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_code_spec_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_code_spec_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_data_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_data_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_display_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_display_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_main_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_main_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_nozzle_conn_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_nozzle_conn_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_nozzle_data_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_nozzle_data_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_nozzle_model_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_nozzle_model_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_nozzle_specification_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_nozzle_specification_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_spec_add_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_spec_add_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_spec_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_spec_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_spref_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_spref_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_stru_angle_model_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_stru_angle_model_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_stru_angle_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_stru_angle_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_stru_spec_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_stru_spec_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_stru_tree_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_stru_tree_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_text_menu_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_text_menu_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_text_sdte_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_text_sdte_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_text_smte_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_text_smte_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_text_text_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_text_text_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_tree_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_tree_zh.png -------------------------------------------------------------------------------- /docs/images/paragon/paragon_valve_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/paragon/paragon_valve_zh.png -------------------------------------------------------------------------------- /docs/images/pipecad_about_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_about_en.png -------------------------------------------------------------------------------- /docs/images/pipecad_about_ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_about_ru.png -------------------------------------------------------------------------------- /docs/images/pipecad_about_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_about_zh.png -------------------------------------------------------------------------------- /docs/images/pipecad_admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_admin.png -------------------------------------------------------------------------------- /docs/images/pipecad_database_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_database_en.png -------------------------------------------------------------------------------- /docs/images/pipecad_database_ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_database_ru.png -------------------------------------------------------------------------------- /docs/images/pipecad_database_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_database_zh.png -------------------------------------------------------------------------------- /docs/images/pipecad_design_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_design_en.png -------------------------------------------------------------------------------- /docs/images/pipecad_design_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_design_zh.png -------------------------------------------------------------------------------- /docs/images/pipecad_login_en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_login_en.png -------------------------------------------------------------------------------- /docs/images/pipecad_login_ru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_login_ru.png -------------------------------------------------------------------------------- /docs/images/pipecad_login_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_login_zh.png -------------------------------------------------------------------------------- /docs/images/pipecad_model_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_model_editor.png -------------------------------------------------------------------------------- /docs/images/pipecad_paragon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_paragon.png -------------------------------------------------------------------------------- /docs/images/pipecad_paragon_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_paragon_zh.png -------------------------------------------------------------------------------- /docs/images/pipecad_python_zh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/docs/images/pipecad_python_zh.png -------------------------------------------------------------------------------- /docs/resources/pipecad_pdf_template.tex: -------------------------------------------------------------------------------- 1 | \batchmode 2 | \nonstopmode 3 | \documentclass[oneside]{article} 4 | \n 5 | % Packages required by doxygen 6 | \usepackage{calc} 7 | \usepackage{doxygen} 8 | \usepackage{graphicx} 9 | \usepackage[utf8]{inputenc} 10 | \usepackage{makeidx} 11 | \usepackage{multicol} 12 | \usepackage{multirow} 13 | \usepackage{textcomp} 14 | \usepackage{amsmath} 15 | \usepackage[table]{xcolor} 16 | \usepackage{indentfirst} 17 | % NLS support packages 18 | \usepackage{CJKutf8} 19 | 20 | % Font selection 21 | \usepackage[T1]{fontenc} 22 | \usepackage{mathptmx} 23 | \usepackage[scaled=.90]{helvet} 24 | \usepackage{courier} 25 | \usepackage{amssymb} 26 | \usepackage{sectsty} 27 | \renewcommand{\familydefault}{\sfdefault} 28 | \sectionfont{\clearpage} 29 | \allsectionsfont{% 30 | \fontseries{bc}\selectfont% 31 | \color{darkgray}% 32 | } 33 | \renewcommand{\DoxyLabelFont}{% 34 | \fontseries{bc}\selectfont% 35 | \color{darkgray}% 36 | } 37 | \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} 38 | 39 | % Arguments of doxygenemoji: 40 | % 1) '::' form of the emoji, already LaTeX-escaped 41 | % 2) file with the name of the emoji without the .png extension 42 | % in case image exist use this otherwise use the '::' form 43 | \newcommand{\doxygenemoji}[2]{% 44 | \IfFileExists{emojis/#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{emojis/#2.png}}}{#1}% 45 | } 46 | 47 | % Page & text layout 48 | \usepackage{geometry} 49 | \geometry{% 50 | a4paper,% 51 | top=2.5cm,% 52 | bottom=2.5cm,% 53 | left=2.5cm,% 54 | right=2.5cm% 55 | } 56 | \tolerance=750 57 | \hfuzz=15pt 58 | \hbadness=750 59 | \setlength{\emergencystretch}{15pt} 60 | \setlength{\parindent}{2em} 61 | \setlength{\parskip}{0.2cm} 62 | \makeatletter 63 | \renewcommand{\paragraph}{% 64 | \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% 65 | \normalfont\normalsize\bfseries\SS@parafont% 66 | }% 67 | } 68 | \renewcommand{\subparagraph}{% 69 | \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% 70 | \normalfont\normalsize\bfseries\SS@subparafont% 71 | }% 72 | } 73 | \makeatother 74 | 75 | % Headers & footers 76 | \usepackage{fancyhdr} 77 | \pagestyle{fancyplain} 78 | \fancyhead[LE]{\fancyplain{}{\bfseries\thepage}} 79 | \fancyhead[CE]{\fancyplain{}{}} 80 | \fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}} 81 | \fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}} 82 | \fancyhead[CO]{\fancyplain{}{}} 83 | \fancyhead[RO]{\fancyplain{}{\bfseries\thepage}} 84 | \fancyfoot[LE]{\fancyplain{}{}} 85 | \fancyfoot[CE]{\fancyplain{}{}} 86 | \fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize (c) Wuhan OCADE IT. Co., Ltd. 2022}} 87 | \fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize (c) Wuhan OCADE IT. Co., Ltd. 2022}} 88 | \fancyfoot[CO]{\fancyplain{}{}} 89 | \fancyfoot[RO]{\fancyplain{}{}} 90 | \renewcommand{\footrulewidth}{0.4pt} 91 | \renewcommand{\sectionmark}[1]{% 92 | \markright{\thesection\ #1}% 93 | } 94 | 95 | % Indices & bibliography 96 | \usepackage{natbib} 97 | \usepackage[titles]{tocloft} 98 | \renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} 99 | \setcounter{tocdepth}{3} 100 | \setcounter{secnumdepth}{5} 101 | \makeindex 102 | 103 | % Hyperlinks (required, but should be loaded last) 104 | \usepackage{ifpdf} 105 | \ifpdf 106 | \usepackage[pdftex,pagebackref=true]{hyperref} 107 | \else 108 | \usepackage[ps2pdf,pagebackref=true]{hyperref} 109 | \fi 110 | \hypersetup{% 111 | colorlinks=true,% 112 | linkcolor=blue,% 113 | citecolor=black,% 114 | urlcolor=blue,% 115 | unicode% 116 | } 117 | 118 | % Custom commands 119 | \newcommand{\clearemptydoublepage}{% 120 | \newpage{\pagestyle{empty}\cleardoublepage}% 121 | } 122 | 123 | 124 | %===== C O N T E N T S ===== 125 | 126 | \begin{document} 127 | \begin{CJK}{UTF8}{gbsn} 128 | % Titlepage & ToC 129 | \hypersetup{pageanchor=false, pdfencoding=unicode} 130 | \pagenumbering{roman} 131 | \begin{titlepage} 132 | \vspace*{7cm} 133 | \begin{center}% 134 | \includegraphics{logo.png}\\ 135 | \vspace*{0.5cm} 136 | {\Huge 三维管道设计软件}\\ 137 | \vspace*{0.5cm} 138 | {\Huge PipeCAD}\\ 139 | \vspace*{0.5cm} 140 | {\Huge 用户指南}\\ 141 | \vspace*{1cm} 142 | {\small \today}\ 143 | \end{center} 144 | \end{titlepage} 145 | \clearemptydoublepage 146 | \pagenumbering{roman} 147 | \newpage 148 | \pagenumbering{arabic} 149 | \begingroup 150 | \hypersetup{pageanchor=true, linkcolor=black, colorlinks=true} 151 | \tableofcontents 152 | \endgroup 153 | 154 | \let\stdsection\section 155 | \renewcommand\doxysection{\pagebreak\stdsection} 156 | \hypertarget{pipecad_user_guide}{} 157 | \input{pipecad_user_guide} 158 | 159 | % Index 160 | \newpage 161 | \phantomsection 162 | \addcontentsline{toc}{part}{Index} 163 | \printindex\n 164 | % Required for some languages (in combination with latexdocumentpre from the header) 165 | \end{CJK} 166 | \end{document} 167 | -------------------------------------------------------------------------------- /docs/ru/common/keybord_shortcuts.md: -------------------------------------------------------------------------------- 1 | # Горячие клавиши 2 | 3 | ## Модуль 3d моделирования - Design 4 | 5 | ### Управлением видом модели 6 | | Клавиша | Описание | 7 | |:----:|------------------| 8 | | F2 | Режим масштабирования | 9 | | F3 | Режим перемещения | 10 | | F5 | Режим вращения | 11 | | F8 | Режим представления модели Окраска/Каркас | 12 | 13 | -------------------------------------------------------------------------------- /docs/ru/index.md: -------------------------------------------------------------------------------- 1 | # Руководство пользователя PipeCAD 2 | 3 | ## Функциональный обзор 4 | Программное обеспечение для трехмерного проектирования трубопроводов PipeCAD — это система проектирования трубопроводов, которая подходит для заводов, строительства, нефтехимии, медицины для защиты окружающей среды и других отраслей промышленности. При проектировании трубопровода, в соответствии с блок-схемой приборов трубопровода (P&ID), планом размещения оборудования и соответствующими чертежами и материалами по гражданскому строительству, контрольно-измерительным приборам, электрическим, насосным и другим аспектам, трубопровод разумно устроен и спроектирован. Проект компоновки трубопровода должен в первую очередь соответствовать технологическим требованиям, облегчать установку, эксплуатацию и техническое обслуживание, а также быть разумным, аккуратным и красивым. 3D-моделирование трубопроводов обеспечивает проектирование без столкновений и быстрое производство готовых изделий, сокращая количество переделок и повышая эффективность проектирования. 5 | 6 | ![Модуль 3d моделирования - Design](../images/pipecad_design_ru.png) 7 | 8 | Программное обеспечение использует независимую платформу 3D-графики и не зависит от других сторонних CAD-платформ (таких как AutoCAD и т. д.). При параметрическом проектировании проектные данные сохраняются в базе данных для формирования базы данных продукта, в основе которой лежит база данных проекта. База данных продуктов обеспечивает базу данных для создания чертежей и отчетов о материалах, а также обеспечивает источник данных для цифровой поставки фабрики. 9 | 10 | ![Юаза данных](../images/pipecad_database_ru.png) 11 | 12 | Как показано на рисунке выше, библиотека параметрических компонентов и данные моделирования конструкции сохраняются в базе данных. При создании результатов необходимые данные извлекаются из базы данных, создаются чертежи трубопроводов и отчеты по материалам. 13 | 14 | PipeCAD в основном разделен на три модуля, а именно модуль администрирования управления проектом, Модуль каталогов - Paragon компонента параметров и модуль дизайна моделирования дизайна. 15 | 16 | * Модуль управления проектами: создание пользователей и баз данных и управление правами доступа пользователей к базам данных. 17 | 18 | ![Модуль администрирования - Admin](../images/admin/admin_main_ru.png) 19 | 20 | * Модуль параметрического компонента: посредством ввода данных формы можно быстро сгенерировать параметризованный компонент, а конвейером и структурой можно управлять иерархически. В модуле библиотеки параметрических компонентов Paragon создание стандартных параметрических фитингов трубопроводов упрощено до табличного ввода данных, что снижает трудоемкость подготовки инженерных данных и повышает эффективность и точность. 21 | 22 | ![Модуль каталогов - Paragon](../images/pipecad_paragon_ru.png) 23 | 24 | * Модуль 3D моделирования: Создайте трехмерный модуль завода в модуле проектирования Design. Проектная модель в основном включает в себя следующие типы: 25 | Сетка: Удобна для позиционирования различных 3d моделей; 26 | Оборудование: различные градирни, резервуары, теплообменники, контейнеры и т.д. Оборудование включает в себя штуцеры, которые удобны для подсоединения и позиционирования труб; 27 | Металлические конструкции: каркасная конструкция, фермы, лестницы платформы оборудования, перила и т.д.; 28 | Трубопроводы: модели труб или воздуховодов соединяющих оборудование; 29 | Подвески и опоры: кронштейны для труб, воздуховодов и т.д.; 30 | 31 | ![Модуль 3d моделирования - Design](../images/pipecad_design_ru.png) 32 | 33 | Данные, созданные в результате работы по проектированию модели, сохраняются в базе данных проекта. 34 | 35 | ![Model Editor](../images/pipecad_model_editor_ru.png) 36 | 37 | На основе базы данных проекта можно извлечь необходимые данные для получения результатов проектирования: чертежи и отчеты о материалах, а также другие данные, необходимые для строительства. 38 | 39 | PipeCAD также включает в себе модуль Python для обеспечения возможности разработки дополнительных программных модулей, что удобно для расширения функционала программного обеспечения. Пользователи могут использовать макросы Python для настройки и разработки новых функций в соответствии со своими потребностями. 40 | 41 | 42 | # Содержание 43 | ## Установка 44 | [Требования к программному и аппаратному обеспечению](./installation/requirements.md) 45 | 46 | [Установка в Windows](./installation/windows.md) 47 | 48 | [Установка в Linux](./installation/linux.md) 49 | 50 | ## Настройка проекта 51 | [Создание нового проекта](./installation/new_project.md) 52 | 53 | [Подключение существующего проекта](./installation/existing_project.md) 54 | 55 | [Системные переменные, используемые в PipeCAD](./installation/system_variables.md) 56 | 57 | [Авторизация в проекте](./installation/login_to_project.md) 58 | 59 | ## Руководства пользователя 60 | [Модуль 3d моделирования - Design](./design/user_guide.md) 61 | 62 | [Модуль каталогов - Paragon](./paragon/user_guide.md) 63 | 64 | [Модуль администрирования - Admin](./admin/user_guide.md) 65 | 66 | [Горячие клавиши](./common/keybord_shortcuts.md) 67 | 68 | ## Разработка дополнительного функционала 69 | [PipeCAD API](./development/api.md) 70 | 71 | [Подключение дополнительных библиотек Python](./development/plugins.md) 72 | 73 | [Разработка новой утилиты](./development/new_utility.md) 74 | 75 | [Настройка ленточного меню](./common/ribbon_customisation.md) 76 | 77 | ## Обучающие ролики 78 | 79 | Перед использованием PipeCAD рекомендуется просмотреть обучающее видео. 80 | 81 | 1. [Скачивание и установка PipeCAD](https://www.bilibili.com/video/BV1u3411e7hD) 82 | 2. [Настройка проекта в PipeCAD](https://www.bilibili.com/video/BV11Q4y1r7zG?share_source=copy_web) 83 | 3. [Стандартные библиотеки в PipeCAD](https://www.bilibili.com/video/BV1144y1u7Rc?share_source=copy_web) 84 | 4. [Моделирование оборудования PipeCAD](https://www.bilibili.com/video/BV1Xq4y1r7Gw?share_source=copy_web) 85 | 5. [Моделирование металлоконструкций в PipeCAD]() 86 | 6. [Моделирование трубопроводов в PipeCAD](https://www.bilibili.com/video/BV1sL411s7B5?share_source=copy_web) 87 | 7. [Выпуск изометрических чертежей трубопроводов в PipeCAD](https://www.bilibili.com/video/BV1nY411s7jp) 88 | -------------------------------------------------------------------------------- /lib/omp/library.py: -------------------------------------------------------------------------------- 1 | from PythonQt.QtCore import * 2 | from PythonQt.QtGui import * 3 | 4 | from pipecad import * 5 | 6 | import os 7 | import imp 8 | import importlib 9 | import inspect 10 | 11 | class LibrariesDialog(QDialog): 12 | def __init__(self, parent = None): 13 | QDialog.__init__(self, parent) 14 | 15 | self.PythonLibraries = os.getenv('PYTHONPATH').split(";") 16 | self.PythonFiles = [] 17 | self.iconsLibraryPath = os.path.dirname(os.path.abspath(__file__)).replace( "\lib\omp","\lib\pipecad" ) + "/icons" 18 | 19 | self.setupUi() 20 | # __init__ 21 | 22 | def setupUi(self): 23 | 24 | self.setWindowTitle( QT_TRANSLATE_NOOP( "Admin", "PipeCAD - Reload Python Libraries" ) ) 25 | 26 | self.txtSearch = QLineEdit("") 27 | 28 | self.btnFilterClear = QPushButton("") 29 | self.btnFilterClear.setToolTip( QT_TRANSLATE_NOOP( "Common", "Clear Filter" ) ) 30 | self.btnFilterClear.setIcon( QIcon( os.path.join( self.iconsLibraryPath + '/common/100x100_filter_clear.png' ) ) ) 31 | self.btnFilterClear.setIconSize( QSize( 16, 16 ) ) 32 | self.btnFilterClear.setMinimumSize( 24, 24 ) 33 | self.btnFilterClear.setMaximumSize( 24, 24 ) 34 | 35 | self.lstLibrariesFiles = QListWidget() 36 | self.lstLibrariesFiles.setSelectionMode(1) 37 | self.lstLibrariesFiles.setMinimumSize( 350, 300 ) 38 | self.lstLibrariesFiles.setMaximumSize( 350, 300 ) 39 | 40 | 41 | self.btnReload = QPushButton( QT_TRANSLATE_NOOP( "Admin", "Reload" ) ) 42 | self.btnReload.setMinimumSize( 350, 24 ) 43 | self.btnReload.setMaximumSize( 350, 24 ) 44 | 45 | self.hBoxLayFilter = QHBoxLayout() 46 | self.hBoxLayFilter.addWidget(self.txtSearch) 47 | self.hBoxLayFilter.addWidget(self.btnFilterClear) 48 | 49 | self.vBoxLayMain = QVBoxLayout(self) 50 | self.vBoxLayMain.addLayout(self.hBoxLayFilter) 51 | self.vBoxLayMain.addWidget(self.lstLibrariesFiles) 52 | self.vBoxLayMain.addWidget(self.btnReload) 53 | 54 | self.callCollect() 55 | 56 | # Callbacks 57 | self.txtSearch.textChanged.connect(self.callSearch) 58 | self.btnFilterClear.clicked.connect(self.callFilterClear) 59 | self.btnReload.clicked.connect(self.callReload) 60 | 61 | def callReload(self): 62 | for item in self.lstLibrariesFiles.selectedItems(): 63 | imp.reload( importlib.import_module ( item.text() ) ) 64 | # TODO: add method for path of module print("" ) 65 | print( QT_TRANSLATE_NOOP( "Common", "" ) ) 66 | 67 | def callSearch(self): 68 | self.lstLibrariesFiles.clear() 69 | for macro in self.PythonFiles: 70 | if self.txtSearch.text.upper() in macro.upper(): 71 | self.lstLibrariesFiles.addItem(macro) 72 | 73 | def callCollect(self): 74 | for sLib in self.PythonLibraries: 75 | if "site-packages" in sLib or "" == sLib: 76 | continue 77 | 78 | full_file_paths = self.get_filepaths(sLib) 79 | for macro in full_file_paths: 80 | module = macro.partition(sLib)[2].partition(".py")[0].replace("\\",".").partition(".")[2] 81 | self.PythonFiles.append(module) 82 | self.lstLibrariesFiles.addItem( module ) 83 | self.lstLibrariesFiles.sortItems() 84 | 85 | def callFilterClear(self): 86 | self.lstLibrariesFiles.clear() 87 | self.txtSearch.clear() 88 | 89 | for macro in self.PythonFiles: 90 | if self.txtSearch.text.upper() in macro.upper(): 91 | self.lstLibrariesFiles.addItem(macro) 92 | 93 | def get_filepaths(self, directory): 94 | """ 95 | This function will generate the file names in a directory 96 | tree by walking the tree either top-down or bottom-up. For each 97 | directory in the tree rooted at directory top (including top itself), 98 | it yields a 3-tuple (dirpath, dirnames, filenames). 99 | """ 100 | file_paths = [] # List which will store all of the full filepaths. 101 | 102 | # Walk the tree. 103 | for root, directories, files in os.walk(directory): 104 | for filename in files: 105 | if ".py" in filename and "__.py" not in filename: 106 | # Join the two strings in order to form the full filepath. 107 | filepath = os.path.join(root, filename) 108 | file_paths.append(filepath) # Add it to the list. 109 | 110 | return file_paths # Self-explanatory. 111 | # Types dictionary 112 | 113 | # Singleton Instance. 114 | aLibraryReload = LibrariesDialog(PipeCad) 115 | 116 | def show(): 117 | aLibraryReload.show() 118 | # Show 119 | 120 | def reload(): 121 | PythonLibraries = os.getenv('PYTHONPATH').split(";") 122 | for sLib in PythonLibraries: 123 | if "site-packages" in sLib or "" == sLib: 124 | continue 125 | 126 | full_file_paths = aLibraryReload.get_filepaths(sLib) 127 | for macro in full_file_paths: 128 | module = macro.partition(sLib)[2].partition(".py")[0].replace("\\",".").partition(".")[2] 129 | imp.reload( importlib.import_module ( module ) ) 130 | print( QT_TRANSLATE_NOOP( "Common", "" ) ) 131 | -------------------------------------------------------------------------------- /lib/omp/reports.py: -------------------------------------------------------------------------------- 1 | from PythonQt.QtCore import * 2 | from PythonQt.QtGui import * 3 | from PythonQt.QtSql import * 4 | 5 | from pipecad import * 6 | 7 | import pandas as pd 8 | 9 | class ReportDialog(QDialog): 10 | def __init__(self, parent = None): 11 | QDialog.__init__(self, parent) 12 | 13 | self.ColumnsHeaders = [] 14 | self.setupUi() 15 | # __init__ 16 | 17 | def setupUi(self): 18 | 19 | self.resize(500, 400) 20 | self.setWindowTitle(QT_TRANSLATE_NOOP( "Common", "Quick Report" ) ) 21 | 22 | self.vBoxLayMain = QVBoxLayout(self) 23 | self.grid = QGridLayout() 24 | 25 | self.lblType = QLabel("Element Type") 26 | self.lstType = QComboBox() 27 | self.lstType.addItem("") 28 | self.lstType.addItem("ATTA") 29 | self.lstType.addItem("BEND") 30 | self.lstType.addItem("BOX") 31 | self.lstType.addItem("BRAN") 32 | self.lstType.addItem("CAP") 33 | self.lstType.addItem("CLOS") 34 | self.lstType.addItem("CONE") 35 | self.lstType.addItem("COUP") 36 | self.lstType.addItem("CROS") 37 | self.lstType.addItem("CTOR") 38 | self.lstType.addItem("CYLI") 39 | self.lstType.addItem("DISH") 40 | self.lstType.addItem("ELBO") 41 | self.lstType.addItem("EQUI") 42 | self.lstType.addItem("EXTR") 43 | self.lstType.addItem("FILT") 44 | self.lstType.addItem("FLAN") 45 | self.lstType.addItem("FRMW") 46 | self.lstType.addItem("FTUB") 47 | self.lstType.addItem("GASK") 48 | self.lstType.addItem("INST") 49 | self.lstType.addItem("LADD") 50 | self.lstType.addItem("LOOP") 51 | self.lstType.addItem("LSTR") 52 | self.lstType.addItem("NBOX") 53 | self.lstType.addItem("NCON") 54 | self.lstType.addItem("NCYL") 55 | self.lstType.addItem("NDIS") 56 | self.lstType.addItem("NOZZ") 57 | self.lstType.addItem("NPYR") 58 | self.lstType.addItem("NRTO") 59 | self.lstType.addItem("NSNO") 60 | self.lstType.addItem("NXTR") 61 | self.lstType.addItem("OLET") 62 | self.lstType.addItem("PANE") 63 | self.lstType.addItem("PAVE") 64 | self.lstType.addItem("PCOM") 65 | self.lstType.addItem("PIPE") 66 | self.lstType.addItem("PLOO") 67 | self.lstType.addItem("PYRA") 68 | self.lstType.addItem("REDU") 69 | self.lstType.addItem("RTOR") 70 | self.lstType.addItem("SBFR") 71 | self.lstType.addItem("SCTN") 72 | self.lstType.addItem("SITE") 73 | self.lstType.addItem("SNOU") 74 | self.lstType.addItem("STRU") 75 | self.lstType.addItem("SUBE") 76 | self.lstType.addItem("SUBS") 77 | self.lstType.addItem("TEE") 78 | self.lstType.addItem("TRAP") 79 | self.lstType.addItem("UNIO") 80 | self.lstType.addItem("VALV") 81 | self.lstType.addItem("VERT") 82 | self.lstType.addItem("VFWA") 83 | self.lstType.addItem("VTWA") 84 | self.lstType.addItem("WELD") 85 | self.lstType.addItem("ZONE") 86 | 87 | # self.hBoxLayoutCondition = QHBoxLayout(self) 88 | # self.lblCondition = QLabel("Condition") 89 | # self.lstConditionAttributes = QComboBox() 90 | # self.lstConditionAttributes.addItem("Name") 91 | # self.lstConditionAttributes.addItem("Description") 92 | # self.lstConditionAttributes.addItem("Purpose") 93 | # self.lstConditionAttributes.addItem("Function") 94 | # self.lstConditionAttributes.addItem("Owner") 95 | # self.lstConditionAttributes.addItem("Lock") 96 | # self.lstConditionAttributes.addItem("RefNo") 97 | # self.hBoxLayoutCondition.addWidget(self.lstConditionAttributes) 98 | # 99 | # self.lstConditionRule = QComboBox() 100 | # self.lstConditionRule.addItem("Equal") 101 | # self.lstConditionRule.addItem("Not Equal") 102 | # self.lstConditionRule.addItem("Matchwild") 103 | # self.lstConditionRule.addItem("Greater") 104 | # self.lstConditionRule.addItem("Less") 105 | # self.lstConditionRule.addItem("Greater Equal") 106 | # self.lstConditionRule.addItem("Less Equal") 107 | # self.hBoxLayoutCondition.addWidget(self.lstConditionRule) 108 | # 109 | # self.txtConditionValue = QLineEdit("") 110 | # self.hBoxLayoutCondition.addWidget(self.txtConditionValue) 111 | 112 | self.lblColumns = QLabel("Columns") 113 | self.hBoxLayoutColumns = QHBoxLayout(self) 114 | self.lstAttributes = QComboBox() 115 | self.lstAttributes.addItem("Name") 116 | self.lstAttributes.addItem("Description") 117 | self.lstAttributes.addItem("Purpose") 118 | self.lstAttributes.addItem("Function") 119 | self.lstAttributes.addItem("Owner") 120 | self.lstAttributes.addItem("Lock") 121 | self.lstAttributes.addItem("RefNo") 122 | 123 | self.btnAddColumn = QPushButton( QT_TRANSLATE_NOOP ( "Common", "+" ) ) 124 | self.btnAddColumn.setMaximumSize( 40 , 40 ) 125 | 126 | self.btnRemoveColumn = QPushButton( QT_TRANSLATE_NOOP ( "Common", "-" ) ) 127 | self.btnRemoveColumn.setMaximumSize( 40 , 40 ) 128 | 129 | self.hBoxLayoutColumns.addWidget(self.lstAttributes) 130 | self.hBoxLayoutColumns.addWidget(self.btnAddColumn) 131 | self.hBoxLayoutColumns.addWidget(self.btnRemoveColumn) 132 | 133 | self.lblHierarchy = QLabel( QT_TRANSLATE_NOOP ( "Common", "Hierarchy") ) 134 | self.hBoxLayoutHierarchy = QHBoxLayout(self) 135 | self.txtHierarchy = QLineEdit("/*") 136 | self.btnHierarchy = QPushButton( QT_TRANSLATE_NOOP ( "Common", "CE" ) ) 137 | self.btnHierarchy.setMaximumSize( 40 , 40 ) 138 | 139 | self.hBoxLayoutHierarchy.addWidget(self.txtHierarchy) 140 | self.hBoxLayoutHierarchy.addWidget(self.btnHierarchy) 141 | 142 | self.btnRunReport = QPushButton( QT_TRANSLATE_NOOP ( "Common", "Run Report" ) ) 143 | self.btnSaveToExcel = QPushButton( QT_TRANSLATE_NOOP ( "Common", "Save to Excel file" ) ) 144 | 145 | self.hBoxLayButtons = QHBoxLayout(self) 146 | self.hBoxLayButtons.addWidget(self.btnRunReport) 147 | self.hBoxLayButtons.addWidget(self.btnSaveToExcel) 148 | 149 | self.tablePreview = QTableWidget() 150 | self.tablePreview.setEditTriggers(QAbstractItemView.NoEditTriggers) 151 | self.tablePreview.setAlternatingRowColors(True) 152 | self.tablePreview.setGridStyle(Qt.SolidLine) 153 | self.tablePreview.setSelectionBehavior(QAbstractItemView.SelectRows) 154 | self.tablePreview.horizontalHeader().setStretchLastSection(False) 155 | self.tablePreview.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) 156 | 157 | #self.lblType.activated.connect(self.callCheckType) 158 | #self.txtCondition.clicked.connect(self.callCheckCondition) 159 | #self.txtHierarchy.clicked.connect(self.callCheckType) 160 | 161 | self.btnAddColumn.clicked.connect(self.callAddColumn) 162 | self.btnRemoveColumn.clicked.connect(self.callRemoveColumn) 163 | self.btnHierarchy.clicked.connect(self.callCE) 164 | self.btnRunReport.clicked.connect(self.callRunReport) 165 | self.btnSaveToExcel.clicked.connect(self.callSaveToExcel) 166 | 167 | self.grid.addWidget( self.lblType, 0, 0 ) 168 | self.grid.addWidget( self.lstType, 0, 1 ) 169 | #self.grid.addWidget( self.lblCondition, 1, 0 ) 170 | #self.grid.addLayout( self.hBoxLayoutCondition, 1, 1 ) 171 | self.grid.addWidget( self.lblColumns, 1, 0 ) 172 | self.grid.addLayout( self.hBoxLayoutColumns, 1, 1 ) 173 | self.grid.addWidget( self.lblHierarchy, 2, 0 ) 174 | self.grid.addLayout( self.hBoxLayoutHierarchy, 2, 1 ) 175 | 176 | self.vBoxLayMain.addLayout(self.grid) 177 | self.vBoxLayMain.addLayout(self.hBoxLayButtons) 178 | self.vBoxLayMain.addWidget(self.tablePreview) 179 | # setupUi 180 | 181 | def callAddColumn(self): 182 | if_column_exists = False 183 | for k in self.ColumnsHeaders: 184 | if self.lstAttributes.currentText == k: 185 | if_column_exists = True 186 | 187 | if if_column_exists == False: 188 | self.ColumnsHeaders.append(self.lstAttributes.currentText) 189 | 190 | self.tablePreview.setColumnCount(len(self.ColumnsHeaders)) 191 | self.tablePreview.setHorizontalHeaderLabels(self.ColumnsHeaders) 192 | 193 | def callRemoveColumn(self): 194 | self.tablePreview.clear() 195 | self.tablePreview.setRowCount(0) 196 | for k in self.ColumnsHeaders: 197 | if self.lstAttributes.currentText == k: 198 | self.ColumnsHeaders.remove(self.lstAttributes.currentText) 199 | 200 | self.tablePreview.setColumnCount(len(self.ColumnsHeaders)) 201 | self.tablePreview.setHorizontalHeaderLabels(self.ColumnsHeaders) 202 | 203 | def callCE(self): 204 | if not PipeCad.CurrentItem().Name: 205 | self.txtHierarchy.text = "/*" 206 | else: 207 | self.txtHierarchy.text = "/" + PipeCad.CurrentItem().Name 208 | 209 | def callSaveToExcel(self): 210 | df = pd.DataFrame() 211 | savePath = QFileDialog.getSaveFileName( None, "Save Report to Excel file", "Report.xlsx", "Excel files (*.xlsx)") 212 | 213 | rows = self.tablePreview.rowCount 214 | columns = self.tablePreview.columnCount 215 | 216 | for i in range(rows): 217 | for j in range(columns): 218 | df.loc[i, j] = str(self.tablePreview.item(i, j).text()) 219 | 220 | df.to_excel((savePath), header = self.ColumnsHeaders, index = 0) 221 | 222 | def callRunReport(self): 223 | self.tablePreview.clear() 224 | self.tablePreview.setRowCount(0) 225 | self.tablePreview.setColumnCount(len(self.ColumnsHeaders)) 226 | self.tablePreview.setHorizontalHeaderLabels(self.ColumnsHeaders) 227 | aCollection = PipeCad.CollectItem(self.lstType.currentText, PipeCad.GetItem(self.txtHierarchy.text) ) 228 | for i in range( len(aCollection) ): 229 | aRow = self.tablePreview.rowCount 230 | self.tablePreview.insertRow(aRow) 231 | for j in range( len(self.ColumnsHeaders) ): 232 | self.tablePreview.setItem(aRow, j, QTableWidgetItem( getattr(aCollection[i] , self.ColumnsHeaders[j] ) ) ) 233 | 234 | # Singleton Instance. 235 | aReportDialog = ReportDialog(PipeCad) 236 | 237 | def showReport(): 238 | aReportDialog.show() 239 | # Show 240 | -------------------------------------------------------------------------------- /lib/omp/sample.py: -------------------------------------------------------------------------------- 1 | from PythonQt.QtCore import * 2 | from PythonQt.QtGui import * 3 | 4 | from pipecad import * 5 | 6 | class SampleDialog(QDialog): 7 | def __init__(self, parent = None): 8 | QDialog.__init__(self, parent) 9 | self.setupUi() 10 | # __init__ 11 | 12 | def setupUi(self): 13 | self.resize(500, 30) 14 | self.setWindowTitle(QT_TRANSLATE_NOOP("Design", "PipeCAD - Sample Utility")) 15 | 16 | self.verticalLayout = QVBoxLayout(self) 17 | self.lblText = QLabel("Sample Form Text") 18 | self.verticalLayout.addWidget(self.lblText) 19 | # setupUi 20 | 21 | # Singleton Instance. 22 | aSampleDlg = SampleDialog(PipeCad) 23 | 24 | def show(): 25 | aSampleDlg.show() 26 | # Show -------------------------------------------------------------------------------- /lib/omp/update.py: -------------------------------------------------------------------------------- 1 | from PythonQt.QtCore import * 2 | from PythonQt.QtGui import * 3 | 4 | import re 5 | import os 6 | import urllib.request 7 | import signal 8 | import argparse 9 | import json 10 | import sys 11 | import ssl 12 | 13 | from pipecad import * 14 | 15 | class dlgUpdateFromGithub(QDialog): 16 | def __init__(self, parent = None): 17 | QDialog.__init__(self, parent) 18 | self.setupUi() 19 | 20 | def setupUi(self): 21 | self.resize(500, 50) 22 | self.setWindowTitle(QT_TRANSLATE_NOOP("Admin", "Update PipeCAD components")) 23 | 24 | self.vBoxLayout = QVBoxLayout(self) 25 | self.grid = QGridLayout() 26 | 27 | self.lblLibrary = QLabel(QT_TRANSLATE_NOOP("Admin", "Library")) 28 | self.txtLibrary = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/lib") 29 | self.txtLibrary.setEnabled(True) 30 | 31 | self.lblUic = QLabel(QT_TRANSLATE_NOOP("Admin", "Menu")) 32 | self.txtUic = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/uic") 33 | self.txtUic.setEnabled(True) 34 | 35 | self.lblSettings = QLabel(QT_TRANSLATE_NOOP("Admin", "Settings")) 36 | self.txtSettings = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/settings") 37 | self.txtSettings.setEnabled(True) 38 | 39 | self.lblDoc = QLabel(QT_TRANSLATE_NOOP("Admin", "Documentation")) 40 | self.txtDoc = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/docs") 41 | self.txtDoc.setEnabled(True) 42 | 43 | self.lblTranslation = QLabel(QT_TRANSLATE_NOOP("Admin", "Translation")) 44 | self.txtTranslation = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/translations") 45 | self.txtTranslation.setEnabled(True) 46 | 47 | self.lblTemplate = QLabel(QT_TRANSLATE_NOOP("Admin", "Templates")) 48 | self.txtTemplate = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/templates") 49 | self.txtTemplate.setEnabled(True) 50 | 51 | self.lblCatalogue = QLabel(QT_TRANSLATE_NOOP("Admin", "Catalogues")) 52 | self.txtCatalogue = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/catalogues") 53 | self.txtCatalogue.setEnabled(True) 54 | 55 | self.lblSettings = QLabel(QT_TRANSLATE_NOOP("Admin", "Settings")) 56 | self.txtSettings = QLineEdit("https://github.com/eryar/PipeCAD/tree/main/settings") 57 | self.txtSettings.setEnabled(True) 58 | 59 | self.btnUpdateLibrary = QPushButton(QT_TRANSLATE_NOOP("Admin", "Update")) 60 | self.btnUpdateLibrary.clicked.connect(self.RunUpdateLibrary) 61 | 62 | self.grid.addWidget( self.lblLibrary, 0, 0 ) 63 | self.grid.addWidget( self.txtLibrary, 0, 1 ) 64 | self.grid.addWidget( self.lblUic, 1, 0 ) 65 | self.grid.addWidget( self.txtUic, 1, 1 ) 66 | self.grid.addWidget( self.lblDoc, 2, 0 ) 67 | self.grid.addWidget( self.txtDoc, 2, 1 ) 68 | self.grid.addWidget( self.lblTranslation, 3, 0 ) 69 | self.grid.addWidget( self.txtTranslation, 3, 1 ) 70 | self.grid.addWidget( self.lblTemplate, 4, 0 ) 71 | self.grid.addWidget( self.txtTemplate, 4, 1 ) 72 | self.grid.addWidget( self.lblCatalogue, 5, 0 ) 73 | self.grid.addWidget( self.txtCatalogue, 5, 1 ) 74 | self.grid.addWidget( self.lblSettings, 6, 0 ) 75 | self.grid.addWidget( self.txtSettings, 6, 1 ) 76 | 77 | self.vBoxLayout.addLayout(self.grid) 78 | self.vBoxLayout.addWidget(self.btnUpdateLibrary) 79 | 80 | def RunUpdateLibrary(self): 81 | total_files_lib = self.download("https://github.com/eryar/PipeCAD/tree/main/lib", "c:\PipeCAD\\test\\lib") 82 | total_files_help = self.download("https://github.com/eryar/PipeCAD/tree/main/docs", "c:\PipeCAD\\test\\docs") 83 | total_files_catalogues = self.download("https://github.com/eryar/PipeCAD/tree/main/catalogues", "c:\PipeCAD\\test\\catalogues") 84 | total_files_uic = self.download("https://github.com/eryar/PipeCAD/tree/main/uic", "c:\PipeCAD\\test\\uic") 85 | total_files_library = self.download("https://github.com/eryar/PipeCAD/tree/main/lib", "c:\PipeCAD\\test\\lib") 86 | total_files_templates = self.download("https://github.com/eryar/PipeCAD/tree/main/templates", "c:\PipeCAD\\test\\templates") 87 | total_files_translations = self.download("https://github.com/eryar/PipeCAD/tree/main/translations", "c:\PipeCAD\\test\\translations") 88 | total_files_settings = self.download("https://github.com/eryar/PipeCAD/tree/main/settings", "c:\PipeCAD\\test\\settings") 89 | 90 | def create_url(self, url): 91 | """ 92 | From the given url, produce a URL that is compatible with Github's REST API. Can handle blob or tree paths. 93 | """ 94 | repo_only_url = re.compile(r"https:\/\/github\.com\/[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}\/[a-zA-Z0-9]+$") 95 | re_branch = re.compile("/(tree|blob)/(.+?)/") 96 | 97 | # Check if the given url is a url to a GitHub repo. If it is, tell the 98 | # user to use 'git clone' to download it 99 | if re.match(repo_only_url,url): 100 | sys.exit() 101 | 102 | # extract the branch name from the given url (e.g master) 103 | branch = re_branch.search(url) 104 | download_dirs = url[branch.end():] 105 | api_url = (url[:branch.start()].replace("github.com", "api.github.com/repos", 1) + 106 | "/contents/" + download_dirs + "?ref=" + branch.group(2)) 107 | return api_url, download_dirs 108 | 109 | 110 | def download(self, repo_url, output_dir): 111 | """ Downloads the files and directories in repo_url. If flatten is specified, the contents of any and all 112 | sub-directories will be pulled upwards into the root folder. """ 113 | 114 | # generate the url which returns the JSON data 115 | api_url, download_dirs = self.create_url(repo_url) 116 | 117 | # To handle file names. 118 | if len(download_dirs.split(".")) == 0: 119 | dir_out = os.path.join(output_dir, download_dirs) 120 | else: 121 | dir_out = os.path.join(output_dir, "/".join(download_dirs.split("/")[:-1])) 122 | 123 | try: 124 | opener = urllib.request.build_opener() 125 | opener.addheaders = [('User-agent', 'Mozilla/5.0')] 126 | urllib.request.install_opener(opener) 127 | response = urllib.request.urlretrieve(api_url) 128 | 129 | except KeyboardInterrupt: 130 | # when CTRL+C is pressed during the execution of this script, 131 | # bring the cursor to the beginning, erase the current line, and dont make a new line 132 | sys.exit() 133 | 134 | # make a directory with the name which is taken from 135 | # the actual repo 136 | 137 | os.makedirs(dir_out, exist_ok=True) 138 | 139 | # total files count 140 | total_files = 0 141 | 142 | with open(response[0], "r") as f: 143 | data = json.load(f) 144 | 145 | # getting the total number of files so that we 146 | # can use it for the output information later 147 | total_files += len(data) 148 | 149 | # If the data is a file, download it as one. 150 | if isinstance(data, dict) and data["type"] == "file": 151 | try: 152 | # download the file 153 | opener = urllib.request.build_opener() 154 | opener.addheaders = [('User-agent', 'Mozilla/5.0')] 155 | urllib.request.install_opener(opener) 156 | urllib.request.urlretrieve(data["download_url"], os.path.join(dir_out, data["name"])) 157 | # bring the cursor to the beginning, erase the current line, and dont make a new line 158 | return total_files 159 | except KeyboardInterrupt: 160 | # when CTRL+C is pressed during the execution of this script, 161 | # bring the cursor to the beginning, erase the current line, and dont make a new line 162 | sys.exit() 163 | 164 | for file in data: 165 | file_url = file["download_url"] 166 | file_name = file["name"] 167 | file_path = file["path"] 168 | 169 | path = file_path 170 | dirname = os.path.dirname(path) 171 | 172 | if dirname != '': 173 | os.makedirs(os.path.dirname(path), exist_ok=True) 174 | else: 175 | pass 176 | 177 | if file_url is not None: 178 | try: 179 | opener = urllib.request.build_opener() 180 | opener.addheaders = [('User-agent', 'Mozilla/5.0')] 181 | urllib.request.install_opener(opener) 182 | # download the file 183 | urllib.request.urlretrieve(file_url, path) 184 | 185 | except KeyboardInterrupt: 186 | # when CTRL+C is pressed during the execution of this script, 187 | # bring the cursor to the beginning, erase the current line, and dont make a new line 188 | sys.exit() 189 | else: 190 | self.download(file["html_url"], download_dirs) 191 | 192 | return total_files 193 | 194 | 195 | # UpdateFromGithub 196 | 197 | # Singleton Instance. 198 | aUpdateFromGithubDlg = dlgUpdateFromGithub(PipeCad) 199 | 200 | def show(): 201 | aUpdateFromGithubDlg.show() -------------------------------------------------------------------------------- /lib/pipecad/DetailText.py: -------------------------------------------------------------------------------- 1 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | # :: Welcome to PipeCAD! :: 3 | # :: ____ ____ ______ ____ :: 4 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 5 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 6 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 7 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 8 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 9 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 10 | # :: \ \_\ :: 11 | # :: \/_/ :: 12 | # :: :: 13 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 | # PipeCAD - Piping Design Software. 15 | # Copyright (C) 2021 Wuhan OCADE IT. Co., Ltd. 16 | # Author: Shing Liu(eryar@163.com) 17 | # Date: 11:20 2021-09-25 18 | 19 | from PythonQt.QtCore import * 20 | from PythonQt.QtGui import * 21 | from PythonQt.QtSql import * 22 | 23 | from pipecad import * 24 | 25 | class SdteDialog(QDialog): 26 | def __init__(self, parent = None): 27 | QDialog.__init__(self, parent) 28 | self.modifyItem = None 29 | self.setupUi() 30 | # __init__ 31 | 32 | def setupUi(self): 33 | self.resize(500, 360) 34 | self.setWindowTitle(QT_TRANSLATE_NOOP("Paragon", "Detail Text Definition")) 35 | 36 | self.verticalLayout = QVBoxLayout(self) 37 | 38 | self.horizontalLayout = QHBoxLayout() 39 | 40 | self.comboBox = QComboBox() 41 | self.comboBox.addItem("Create") 42 | self.comboBox.addItem("Modify") 43 | self.comboBox.activated.connect(self.activateName) 44 | 45 | self.horizontalLayout.addWidget(self.comboBox) 46 | 47 | self.textName = QLineEdit() 48 | self.horizontalLayout.addWidget(self.textName) 49 | 50 | self.verticalLayout.addLayout(self.horizontalLayout) 51 | 52 | self.treeWidget = QTreeWidget() 53 | self.treeWidget.setUniformRowHeights(True) 54 | self.treeWidget.setAlternatingRowColors(True) 55 | 56 | self.treeWidget.currentItemChanged.connect(self.currentItemChanged) 57 | 58 | aDatabase = QSqlDatabase.addDatabase("QSQLITE", "PipeStd_TEXT") 59 | aDatabase.setDatabaseName("catalogues/PipeStd.db") 60 | aDatabase.open() 61 | 62 | self.typeModel = QSqlQueryModel() 63 | self.typeModel.setQuery("SELECT DISTINCT Type, Icon FROM SKEY", aDatabase) 64 | 65 | for i in range(self.typeModel.rowCount()): 66 | aRecord = self.typeModel.record(i) 67 | aType = aRecord.value("Type") 68 | aIcon = ":/PipeCad/Resources/" + str(aRecord.value("Icon")) 69 | 70 | aTypeItem = QTreeWidgetItem(self.treeWidget) 71 | aTypeItem.setText(0, aType) 72 | aTypeItem.setIcon(0, QIcon(aIcon)) 73 | 74 | self.skeyModel = QSqlQueryModel() 75 | self.skeyModel.setQuery("SELECT Skey, Detail FROM SKEY WHERE Type='" + aType + "'", aDatabase) 76 | 77 | for j in range(self.skeyModel.rowCount()): 78 | aRecord = self.skeyModel.record(j) 79 | aSkey = aRecord.value("Skey") 80 | aDetail = aRecord.value("Detail") 81 | 82 | aSkeyItem = QTreeWidgetItem(aTypeItem) 83 | aSkeyItem.setText(0, aSkey) 84 | aSkeyItem.setText(1, aDetail) 85 | # for 86 | # for 87 | 88 | self.verticalLayout.addWidget(self.treeWidget) 89 | 90 | self.formLayout = QFormLayout(self) 91 | self.labelSkey = QLabel("Symbol Key") 92 | self.textSkey = QLineEdit() 93 | self.textSkey.textEdited.connect(self.skeyChanged) 94 | 95 | self.formLayout.setWidget(0, QFormLayout.LabelRole, self.labelSkey) 96 | self.formLayout.setWidget(0, QFormLayout.FieldRole, self.textSkey) 97 | 98 | self.labelRtext = QLabel("Detail(ISO)") 99 | self.textRtext = QLineEdit() 100 | 101 | self.formLayout.setWidget(1, QFormLayout.LabelRole, self.labelRtext) 102 | self.formLayout.setWidget(1, QFormLayout.FieldRole, self.textRtext) 103 | 104 | self.labelStext = QLabel("Stext") 105 | self.textStext = QLineEdit() 106 | 107 | self.formLayout.setWidget(2, QFormLayout.LabelRole, self.labelStext) 108 | self.formLayout.setWidget(2, QFormLayout.FieldRole, self.textStext) 109 | 110 | self.labelTtext = QLabel("Ttext") 111 | self.textTtext = QLineEdit() 112 | 113 | self.formLayout.setWidget(3, QFormLayout.LabelRole, self.labelTtext) 114 | self.formLayout.setWidget(3, QFormLayout.FieldRole, self.textTtext) 115 | 116 | self.verticalLayout.addLayout(self.formLayout) 117 | 118 | # Action buttons. 119 | self.buttonBox = QDialogButtonBox() 120 | self.buttonBox.setStandardButtons(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) 121 | self.verticalLayout.addWidget(self.buttonBox) 122 | 123 | self.buttonBox.accepted.connect(self.accept) 124 | self.buttonBox.rejected.connect(self.reject) 125 | 126 | self.retranslateUi() 127 | # setupUi 128 | 129 | def retranslateUi(self): 130 | aHeaderItem = self.treeWidget.headerItem() 131 | aHeaderItem.setText(0, "Type") 132 | aHeaderItem.setText(1, "Description") 133 | # retranslateUi 134 | 135 | def activateName(self): 136 | self.modifyItem = None 137 | 138 | aIndex = self.comboBox.currentIndex 139 | if aIndex == 0: 140 | # create 141 | self.textName.setText("") 142 | else: 143 | # modify 144 | try: 145 | aSdteItem = PipeCad.CurrentItem() 146 | if aSdteItem.Type != "SDTE": 147 | raise TypeError(aSdteItem.Name + " is not SDTE!") 148 | # if 149 | 150 | self.modifyItem = aSdteItem 151 | 152 | self.textName.setText(aSdteItem.Name) 153 | self.textSkey.setText(aSdteItem.Skey) 154 | self.textRtext.setText(aSdteItem.Rtext) 155 | self.textStext.setText(aSdteItem.Stext) 156 | self.textTtext.setText(aSdteItem.Ttext) 157 | 158 | self.skeyChanged() 159 | 160 | except Exception as e: 161 | QMessageBox.critical(self, "", e) 162 | raise e 163 | # try 164 | # if 165 | 166 | # activateName 167 | 168 | def currentItemChanged(self, theCurrentItem): 169 | aSkey = theCurrentItem.text(0) 170 | aDetail = theCurrentItem.text(1) 171 | 172 | if len(aDetail) > 0: 173 | self.textSkey.setText(aSkey) 174 | # if 175 | # currentItemChanged 176 | 177 | def skeyChanged(self): 178 | aItems = self.treeWidget.findItems(self.textSkey.text, Qt.MatchRecursive | Qt.MatchStartsWith | Qt.MatchCaseSensitive) 179 | if len(aItems) > 0: 180 | self.treeWidget.blockSignals(True) 181 | self.treeWidget.setCurrentItem(aItems[0]) 182 | self.treeWidget.blockSignals(False) 183 | # if 184 | # skeyChanged 185 | 186 | def modify(self): 187 | aName = self.textName.text 188 | aSkey = self.textSkey.text 189 | aRtex = self.textRtext.text 190 | aStex = self.textStext.text 191 | aTtex = self.textTtext.text 192 | 193 | if self.modifyItem is None: 194 | QMessageBox.warning(self, "", "Please select item to modify!") 195 | return 196 | # if 197 | 198 | try: 199 | PipeCad.StartTransaction("Modify Detail Text") 200 | self.modifyItem.Name = aName 201 | self.modifyItem.Skey = aSkey 202 | self.modifyItem.Rtext = aRtex 203 | self.modifyItem.Stext = aStex 204 | self.modifyItem.Ttext = aTtex 205 | PipeCad.CommitTransaction() 206 | except Exception as e: 207 | QMessageBox.critical(self, "", e) 208 | raise e 209 | # try 210 | # modify 211 | 212 | def create(self): 213 | aName = self.textName.text 214 | aSkey = self.textSkey.text 215 | aRtex = self.textRtext.text 216 | aStex = self.textStext.text 217 | aTtex = self.textTtext.text 218 | 219 | try: 220 | PipeCad.StartTransaction("Build Detail Text") 221 | PipeCad.CreateItem("SDTE", aName) 222 | aSdteItem = PipeCad.CurrentItem() 223 | aSdteItem.Skey = aSkey 224 | aSdteItem.Rtext = aRtex 225 | aSdteItem.Stext = aStex 226 | aSdteItem.Ttext = aTtex 227 | PipeCad.CommitTransaction() 228 | except Exception as e: 229 | QMessageBox.critical(self, "", e) 230 | raise e 231 | # try 232 | # create 233 | 234 | def accept(self): 235 | aIndex = self.comboBox.currentIndex 236 | if aIndex == 0: 237 | # create 238 | self.create() 239 | else: 240 | # modify 241 | self.modify() 242 | # if 243 | 244 | QDialog.accept(self) 245 | # accept 246 | 247 | # Singleton Instance. 248 | aSdteDlg = SdteDialog(PipeCad) 249 | 250 | def Show(): 251 | aSdteDlg.show() 252 | # Show 253 | -------------------------------------------------------------------------------- /lib/pipecad/Launch.py: -------------------------------------------------------------------------------- 1 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | # :: Welcome to PipeCAD! :: 3 | # :: ____ ____ ______ ____ :: 4 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 5 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 6 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 7 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 8 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 9 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 10 | # :: \ \_\ :: 11 | # :: \/_/ :: 12 | # :: :: 13 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 | # PipeCAD - Piping Design Software. 15 | # Copyright (C) 2021 Wuhan OCADE IT. Co., Ltd. 16 | # Author: Shing Liu(eryar@163.com) 17 | # Date: 21:16 2021-09-16 18 | 19 | from pipecad.Login import * 20 | 21 | aLoginDlg = LoginDialog() 22 | aLoginDlg.show() 23 | -------------------------------------------------------------------------------- /lib/pipecad/LoginPDMS.py: -------------------------------------------------------------------------------- 1 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | # :: Welcome to PipeCAD! :: 3 | # :: ____ ____ ______ ____ :: 4 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 5 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 6 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 7 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 8 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 9 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 10 | # :: \ \_\ :: 11 | # :: \/_/ :: 12 | # :: :: 13 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 | # PipeCAD - Piping Design Software. 15 | # Copyright (C) 2021 Wuhan OCADE IT. Co., Ltd. 16 | # Author: Shing Liu(eryar@163.com) 17 | # Date: 21:16 2021-09-16 18 | 19 | 20 | from PythonQt.QtCore import * 21 | from PythonQt.QtGui import * 22 | 23 | from pipecad import * 24 | 25 | import os 26 | import subprocess 27 | 28 | class LoginDialog(QDialog): 29 | def __init__(self, parent = None): 30 | QDialog.__init__(self, parent) 31 | 32 | self.setupUi() 33 | 34 | # __init__ 35 | 36 | def setupUi(self): 37 | self.resize(330, 200) 38 | self.setWindowTitle(QT_TRANSLATE_NOOP("PipeCAD", "PipeCAD Login" ) ) 39 | 40 | self.verticalLayout = QVBoxLayout(self) 41 | self.verticalLayout.setSpacing(6) 42 | self.verticalLayout.setContentsMargins(11, 11, 11, 11) 43 | 44 | self.gridLayout = QGridLayout() 45 | self.gridLayout.setSpacing(6) 46 | 47 | self.labelProject = QLabel( QT_TRANSLATE_NOOP( "PipeCAD", "Project" ) ) 48 | self.comboBoxProject = QComboBox() 49 | self.buttonCreate = QPushButton( QT_TRANSLATE_NOOP( "PipeCAD", "Create" ) ) 50 | 51 | for aProject in (PipeCad.Projects): 52 | self.comboBoxProject.addItem(aProject.Number) 53 | # for 54 | 55 | self.comboBoxProject.currentIndexChanged.connect(self.projectChanged) 56 | self.buttonCreate.clicked.connect(self.createProject) 57 | 58 | self.gridLayout.addWidget(self.labelProject, 0, 0, 1, 1) 59 | self.gridLayout.addWidget(self.comboBoxProject, 0, 1, 1, 1) 60 | self.gridLayout.addWidget(self.buttonCreate, 0, 2, 1, 1) 61 | 62 | self.labelUsername = QLabel( QT_TRANSLATE_NOOP( "PipeCAD", "Username" ) ) 63 | self.comboBoxUser = QComboBox() 64 | self.comboBoxUser.setEditable(True) 65 | 66 | self.gridLayout.addWidget(self.labelUsername, 1, 0, 1, 1) 67 | self.gridLayout.addWidget(self.comboBoxUser, 1, 1, 1, 1) 68 | 69 | self.labelPassword = QLabel( QT_TRANSLATE_NOOP( "PipeCAD", "Password" ) ) 70 | self.lineEditPassword = QLineEdit(self) 71 | self.lineEditPassword.setEchoMode(QLineEdit.Password) 72 | self.lineEditPassword.textChanged.connect(self.passwordChanged) 73 | 74 | PipeCad.SetIndicator(self.lineEditPassword) 75 | 76 | self.gridLayout.addWidget(self.labelPassword, 2, 0, 1, 1) 77 | self.gridLayout.addWidget(self.lineEditPassword, 2, 1, 1, 1) 78 | 79 | self.buttonChange = QPushButton( QT_TRANSLATE_NOOP( "PipeCAD", "Change" ) ) 80 | self.buttonChange.clicked.connect(self.changePassword) 81 | self.gridLayout.addWidget(self.buttonChange, 2, 2, 1, 1) 82 | 83 | self.labelMdb = QLabel( QT_TRANSLATE_NOOP( "PipeCAD", "MDB" ) ) 84 | self.comboBoxMdb = QComboBox() 85 | self.comboBoxMdb.setEditable(True) 86 | 87 | self.gridLayout.addWidget(self.labelMdb, 3, 0, 1, 1) 88 | self.gridLayout.addWidget(self.comboBoxMdb, 3, 1, 1, 1) 89 | 90 | self.labelModule = QLabel( QT_TRANSLATE_NOOP( "PipeCAD", "Module" ) ) 91 | self.comboBoxModule = QComboBox() 92 | self.comboBoxModule.addItem("Admin") 93 | self.comboBoxModule.addItem("Paragon") 94 | self.comboBoxModule.addItem("Design") 95 | self.checkBox = QCheckBox( QT_TRANSLATE_NOOP( "PipeCAD", "Read Only" ) ) 96 | 97 | self.gridLayout.addWidget(self.labelModule, 4, 0, 1, 1) 98 | self.gridLayout.addWidget(self.comboBoxModule, 4, 1, 1, 1) 99 | self.gridLayout.addWidget(self.checkBox, 4, 2, 1, 1) 100 | 101 | self.verticalLayout.addLayout(self.gridLayout) 102 | self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 103 | self.verticalLayout.addItem(self.verticalSpacer) 104 | 105 | self.buttonBox = QDialogButtonBox() 106 | self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) 107 | self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) 108 | 109 | self.verticalLayout.addWidget(self.buttonBox) 110 | 111 | self.retranslateUi() 112 | 113 | if len(PipeCad.Projects) > 0: 114 | self.projectChanged(0) 115 | 116 | self.buttonBox.accepted.connect(self.accept) 117 | self.buttonBox.rejected.connect(self.reject) 118 | # setupUi 119 | 120 | def retranslateUi(self): 121 | self.setWindowTitle(QCoreApplication.translate("LoginDlg", u"PipeCAD Login", None)) 122 | self.labelPassword.setText(QCoreApplication.translate("LoginDlg", u"Password", None)) 123 | self.comboBoxModule.setItemText(0, QCoreApplication.translate("LoginDlg", u"Admin", None)) 124 | self.comboBoxModule.setItemText(1, QCoreApplication.translate("LoginDlg", u"Paragon", None)) 125 | self.comboBoxModule.setItemText(2, QCoreApplication.translate("LoginDlg", u"Design", None)) 126 | 127 | self.labelModule.setText(QCoreApplication.translate("LoginDlg", u"Module", None)) 128 | self.labelUsername.setText(QCoreApplication.translate("LoginDlg", u"Username", None)) 129 | self.checkBox.setText(QCoreApplication.translate("LoginDlg", u"Read Only", None)) 130 | self.buttonChange.setText(QCoreApplication.translate("LoginDlg", u"Change", None)) 131 | self.labelProject.setText(QCoreApplication.translate("LoginDlg", u"Project", None)) 132 | self.labelMdb.setText(QCoreApplication.translate("LoginDlg", u"MDB", None)) 133 | # retranslateUi 134 | 135 | def createProject(self): 136 | subprocess.Popen("ProjectCreation.bat") 137 | self.reject() 138 | # createProject 139 | 140 | def projectChanged(self, theIndex): 141 | self.comboBoxUser.clear() 142 | self.comboBoxMdb.clear() 143 | 144 | aProject = PipeCad.Projects[theIndex] 145 | for aUser in aProject.UserList: 146 | self.comboBoxUser.addItem(aUser.Name) 147 | 148 | for aMdb in aProject.MdbList: 149 | self.comboBoxMdb.addItem(aMdb.Name) 150 | # projectChanged 151 | 152 | def passwordChanged(self): 153 | if len(self.lineEditPassword.text) > 0: 154 | self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(True) 155 | else: 156 | self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False) 157 | # passwordChanged 158 | 159 | def changePassword(self): 160 | aIndex = self.comboBoxProject.currentIndex 161 | aUser = self.comboBoxUser.currentText 162 | aProject = PipeCad.Projects[aIndex] 163 | 164 | aPasswordDlg = PasswordDialog(aProject, aUser, self) 165 | aPasswordDlg.exec() 166 | # changePassword 167 | 168 | def reject(self): 169 | sys.exit() 170 | # reject 171 | 172 | def accept(self): 173 | aIndex = self.comboBoxProject.currentIndex 174 | aUser = self.comboBoxUser.currentText 175 | aMdb = self.comboBoxMdb.currentText 176 | aModule = self.comboBoxModule.currentText 177 | aPassword = self.lineEditPassword.text 178 | 179 | aProject = PipeCad.Projects[aIndex] 180 | 181 | aSession = aProject.CreateSession(aMdb, aUser, aPassword, aModule) 182 | if aSession is None: 183 | return 184 | 185 | QDialog.accept(self) 186 | 187 | PipeCad.Login() 188 | # accept 189 | 190 | 191 | class PasswordDialog(QDialog): 192 | def __init__(self, theProject, theUser, parent = None): 193 | QDialog.__init__(self, parent) 194 | 195 | self.project = theProject 196 | self.user = theUser 197 | 198 | self.setupUi() 199 | 200 | # __init__ 201 | 202 | def setupUi(self): 203 | #self.resize(330, 200) 204 | self.setWindowTitle(QT_TRANSLATE_NOOP("PipeCAD", "Change Password" ) ) 205 | 206 | self.verticalLayout = QVBoxLayout(self) 207 | self.formLayout = QFormLayout() 208 | 209 | self.labelCurrent = QLabel("Current Password") 210 | self.textCurrent = QLineEdit() 211 | self.textCurrent.setEchoMode(QLineEdit.Password) 212 | PipeCad.SetIndicator(self.textCurrent) 213 | self.formLayout.setWidget(0, QFormLayout.LabelRole, self.labelCurrent) 214 | self.formLayout.setWidget(0, QFormLayout.FieldRole, self.textCurrent) 215 | 216 | self.labelNew = QLabel("New Password") 217 | self.textNew = QLineEdit("") 218 | self.textNew.setEchoMode(QLineEdit.Password) 219 | PipeCad.SetIndicator(self.textNew) 220 | self.formLayout.setWidget(1, QFormLayout.LabelRole, self.labelNew) 221 | self.formLayout.setWidget(1, QFormLayout.FieldRole, self.textNew) 222 | 223 | self.labelConfirm = QLabel("Confirm Password") 224 | self.textConfirm = QLineEdit() 225 | self.textConfirm.setEchoMode(QLineEdit.Password) 226 | PipeCad.SetIndicator(self.textConfirm) 227 | self.formLayout.setWidget(2, QFormLayout.LabelRole, self.labelConfirm) 228 | self.formLayout.setWidget(2, QFormLayout.FieldRole, self.textConfirm) 229 | 230 | self.verticalLayout.addLayout(self.formLayout) 231 | 232 | self.buttonBox = QDialogButtonBox() 233 | self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) 234 | 235 | self.buttonBox.accepted.connect(self.accept) 236 | self.buttonBox.rejected.connect(self.reject) 237 | 238 | self.verticalLayout.addWidget(self.buttonBox) 239 | # setupUi 240 | 241 | def accept(self): 242 | aCurrent = self.textCurrent.text 243 | aNew = self.textNew.text 244 | aConfirm = self.textConfirm.text 245 | 246 | if aNew != aConfirm or (len(aNew) + len(aConfirm)) < 1: 247 | QMessageBox.critical(self, "", "The passwords you typed do not match!") 248 | return 249 | # if 250 | 251 | if self.project.ChangePassword(self.user, aCurrent, aNew): 252 | QMessageBox.information(self, "", "Password Changed!") 253 | else: 254 | return 255 | # if 256 | 257 | QDialog.accept(self) 258 | # accept 259 | # PasswordDialog 260 | -------------------------------------------------------------------------------- /lib/pipecad/PcfExportDlg.py: -------------------------------------------------------------------------------- 1 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | # :: Welcome to PipeCAD! :: 3 | # :: ____ ____ ______ ____ :: 4 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 5 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 6 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 7 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 8 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 9 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 10 | # :: \ \_\ :: 11 | # :: \/_/ :: 12 | # :: :: 13 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 | # PipeCAD - Piping Design Software. 15 | # Copyright (C) 2021 Wuhan OCADE IT. Co., Ltd. 16 | # Author: Shing Liu(eryar@163.com) 17 | # Date: 11:20 2021-11-15 18 | 19 | import os 20 | 21 | from PythonQt.QtCore import * 22 | from PythonQt.QtGui import * 23 | from PythonQt.QtSql import * 24 | from PythonQt.pipecad import * 25 | 26 | from pipecad import * 27 | 28 | 29 | class PcfExporterDlg(QDialog): 30 | def __init__(self, parent = None): 31 | QDialog.__init__(self, parent) 32 | 33 | self.setupUi() 34 | # __init__ 35 | 36 | def setupUi(self): 37 | #self.resize(500, 360) 38 | self.setWindowTitle(QT_TRANSLATE_NOOP("Design", "Export PCF")) 39 | 40 | self.verticalLayout = QVBoxLayout(self) 41 | 42 | self.listWidget = QListWidget() 43 | self.listWidget.setAlternatingRowColors(True) 44 | self.listWidget.setUniformItemSizes(True) 45 | 46 | self.verticalLayout.addWidget(self.listWidget) 47 | 48 | self.horizontalLayout = QHBoxLayout() 49 | self.buttonPipe = QPushButton("Add Pipe") 50 | self.buttonBranch = QPushButton("Add Branch") 51 | self.buttonRemove = QPushButton("Remove") 52 | self.buttonClear = QPushButton("Clear") 53 | 54 | self.buttonPipe.clicked.connect(self.addPipe) 55 | self.buttonBranch.clicked.connect(self.addBranch) 56 | self.buttonRemove.clicked.connect(self.removeList) 57 | self.buttonClear.clicked.connect(self.clearList) 58 | 59 | self.horizontalLayout.addWidget(self.buttonPipe) 60 | self.horizontalLayout.addWidget(self.buttonBranch) 61 | self.horizontalLayout.addWidget(self.buttonRemove) 62 | self.horizontalLayout.addWidget(self.buttonClear) 63 | 64 | self.verticalLayout.addLayout(self.horizontalLayout) 65 | 66 | aIsoEnv = os.getenv(PipeCad.CurrentProject.Code + "ISO").replace("/","\\") 67 | 68 | if len(aIsoEnv) < 0: 69 | aIsoEnv = "D:/PipeCAD/PCF/" 70 | # if 71 | 72 | self.horizontalLayout = QHBoxLayout() 73 | self.textPath = QLineEdit(aIsoEnv) 74 | self.toolPath = QPushButton("...") 75 | self.toolPath.clicked.connect(self.setPath) 76 | self.horizontalLayout.addWidget(self.textPath) 77 | self.horizontalLayout.addWidget(self.toolPath) 78 | self.verticalLayout.addLayout(self.horizontalLayout) 79 | 80 | # Action buttons. 81 | self.buttonBox = QDialogButtonBox() 82 | self.buttonBox.setStandardButtons(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) 83 | self.verticalLayout.addWidget(self.buttonBox) 84 | 85 | self.buttonBox.accepted.connect(self.accept) 86 | self.buttonBox.rejected.connect(self.reject) 87 | # setupUi 88 | 89 | def setPath(self): 90 | aPath = QFileDialog.getExistingDirectory(self, "PCF Directory", self.textPath.text) 91 | if len(aPath) > 0: 92 | self.textPath.setText(aPath) 93 | # if 94 | # setPath 95 | 96 | def addPipe(self): 97 | aPipeItem = PipeCad.CurrentItem() 98 | 99 | if aPipeItem.Type != "PIPE": 100 | QMessageBox.warning(self, "", "Please select PIPE!") 101 | return 102 | # if 103 | 104 | aMemberList = aPipeItem.Member 105 | for aMember in aMemberList: 106 | if len(self.listWidget.findItems(aMember.Name, Qt.MatchExactly)) == 0: 107 | aListItem = QListWidgetItem(aMember.Name, self.listWidget) 108 | aListItem.setData(Qt.UserRole, aMember) 109 | # if 110 | # for 111 | # addPipe 112 | 113 | def addBranch(self): 114 | aBranItem = PipeCad.CurrentItem() 115 | 116 | if aBranItem.Type != "BRAN": 117 | QMessageBox.information(self, "", "Please select BRAN!") 118 | return 119 | # if 120 | 121 | if len(self.listWidget.findItems(aBranItem.Name, Qt.MatchExactly)) == 0: 122 | aListItem = QListWidgetItem(aBranItem.Name, self.listWidget) 123 | aListItem.setData(Qt.UserRole, aBranItem) 124 | # if 125 | 126 | # addBranch 127 | 128 | def removeList(self): 129 | aRow = self.listWidget.currentRow 130 | self.listWidget.removeRow(aRow) 131 | # removeList 132 | 133 | def clearList(self): 134 | self.listWidget.clear() 135 | # clearList 136 | # PcfExporterDlg 137 | 138 | aPcfExporterDlg = PcfExporterDlg(PipeCad) 139 | 140 | def Show(): 141 | aPcfExporterDlg.show() 142 | # Show 143 | -------------------------------------------------------------------------------- /lib/pipecad/PcfExporter.py: -------------------------------------------------------------------------------- 1 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | # :: Welcome to PipeCAD! :: 3 | # :: ____ ____ ______ ____ :: 4 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 5 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 6 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 7 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 8 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 9 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 10 | # :: \ \_\ :: 11 | # :: \/_/ :: 12 | # :: :: 13 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 | # PipeCAD - Piping Design Software. 15 | # Copyright (C) 2021 Wuhan OCADE IT. Co., Ltd. 16 | # Author: Shing Liu(eryar@163.com) 17 | # Date: 11:20 2021-11-15 18 | 19 | from PythonQt.QtCore import * 20 | from PythonQt.QtGui import * 21 | from PythonQt.QtSql import * 22 | from PythonQt.pipecad import * 23 | 24 | from pipecad import * 25 | 26 | 27 | def ExportPcf(theTreeItem, theFileName): 28 | aPcfFile = open(theFileName, "w") 29 | 30 | # PCF HEADER 31 | aPcfFile.write("ISOGEN-FILES ISOGEN.FLS") 32 | aPcfFile.write("\nUNITS-BORE MM") 33 | aPcfFile.write("\nUNITS-CO-ORDS MM") 34 | aPcfFile.write("\nUNITS-BOLT-LENGTH MM") 35 | aPcfFile.write("\nUNITS-BOLT-DIA MM") 36 | aPcfFile.write("\nUNITS-WEIGHT KGS") 37 | 38 | # PIPELINE 39 | aSpec = '' 40 | aPspec = theTreeItem.Pspec 41 | if aPspec != None: 42 | aSpec = aPspec.Name 43 | # if 44 | 45 | aPcfFile.write("\nPIPELINE-REFERENCE " + theTreeItem.Name) 46 | aPcfFile.write("\n PIPING-SPEC " + aSpec) 47 | aPcfFile.write("\n INSULATION-SPEC ") 48 | aPcfFile.write("\n PAINTING-SPEC ") 49 | aPcfFile.write("\n TRACING-SPEC ") 50 | 51 | # COMPONENT 52 | aBranchList = [] 53 | if theTreeItem.Type == "PIPE": 54 | aBranchList = theTreeItem.Member 55 | elif theTreeItem.Type == "BRAN": 56 | aBranchList.append(theTreeItem) 57 | # if 58 | 59 | # Item Code Dict. 60 | aCodeDict = dict() 61 | 62 | for aBranItem in (aBranchList): 63 | if aBranItem.Type != "BRAN": 64 | # Ignore REVI item. 65 | continue 66 | #if 67 | 68 | aHeadPoint = aBranItem.Hposition 69 | aTailPoint = aBranItem.Tposition 70 | 71 | for aCompItem in aBranItem.Member: 72 | aType = aCompItem.FullType 73 | aArrivePoint = aCompItem.ArrivePoint 74 | aLeavePoint = aCompItem.LeavePoint 75 | 76 | try: 77 | aDetref = aCompItem.Spref.Detref 78 | aSkey = aDetref.Skey 79 | aCode = aDetref.Name 80 | aDescription = aCompItem.Dtxr 81 | except Exception as e: 82 | aSkey = "" 83 | aCode = "" 84 | aDescription = "" 85 | 86 | if aHeadPoint.Distance(aArrivePoint.Position) > 1: 87 | # Add Pipe 88 | aPcfFile.write("\nPIPE") 89 | aPcfFile.write("\n END-POINT " + aHeadPoint.string() + " " + aArrivePoint.Bore) 90 | aPcfFile.write("\n END-POINT " + aArrivePoint.Position.string() + " " + aArrivePoint.Bore) 91 | aPcfFile.write("\n PIPING-SPEC ") 92 | aPcfFile.write("\n INSULATION-SPEC ") 93 | aPcfFile.write("\n PAINTING-SPEC ") 94 | aPcfFile.write("\n TRACING-SPEC ") 95 | aPcfFile.write("\n WEIGHT ") 96 | aPcfFile.write("\n ITEM-CODE PA100" ) 97 | aPcfFile.write("\n ITEM-DESCRIPTION PIPE SCH80 ANSI B36.10") 98 | 99 | aHeadPoint = aLeavePoint.Position 100 | 101 | if aType.startswith("REDUCER"): 102 | if aSkey.startswith("RC"): 103 | aType = "REDUCER-CONCENTRIC" 104 | else: 105 | aType = "REDUCER-ECCENTRIC" 106 | # if 107 | # if 108 | 109 | aPcfFile.write("\n" + aType) 110 | aPcfFile.write("\n END-POINT " + aArrivePoint.Position.string() + " " + aArrivePoint.Bore + " " + aArrivePoint.Type) 111 | aPcfFile.write("\n END-POINT " + aLeavePoint.Position.string() + " " + aLeavePoint.Bore + " " + aLeavePoint.Type) 112 | 113 | if aType in ("TEE", "OLET"): 114 | aBranchIndex = 6 - aCompItem.Arrive - aCompItem.Leave 115 | aBranchPoint = aCompItem.linkPoint("P" + str(aBranchIndex)) 116 | aPcfFile.write("\n CENTRE-POINT " + aCompItem.Position.string()) 117 | aPcfFile.write("\n BRANCH1-POINT " + aBranchPoint.Position.string() + " " + aBranchPoint.Bore + " " + aBranchPoint.Type) 118 | elif aType == "ELBOW": 119 | aPcfFile.write("\n CENTRE-POINT " + aCompItem.Position.string()) 120 | elif aType == "VALVE": 121 | aSpindlePoint = aCompItem.linkPoint("P3") 122 | if aSpindlePoint != None: 123 | aDirection = aSpindlePoint.Direction 124 | aSpindleDirection = '' 125 | if abs(aDirection.x) > abs(aDirection.y) and abs(aDirection.x) > abs(aDirection.z): 126 | if aDirection.x > 0: 127 | aSpindleDirection = "EAST" 128 | else: 129 | aSpindleDirection = "WEST" 130 | # if 131 | elif abs(aDirection.y) > abs(aDirection.x) and abs(aDirection.y) > abs(aDirection.z): 132 | if aDirection.y > 0: 133 | aSpindleDirection = "NORTH" 134 | else: 135 | aSpindleDirection = "SOUTH" 136 | # if 137 | elif abs(aDirection.z) > abs(aDirection.x) and abs(aDirection.z) > abs(aDirection.y): 138 | if aDirection.z > 0: 139 | aSpindleDirection = "UP" 140 | else: 141 | aSpindleDirection = "DOWN" 142 | # if 143 | # if 144 | 145 | aPcfFile.write("\n SPINDLE-DIRECTION " + aSpindleDirection) 146 | # if 147 | # if 148 | 149 | aPcfFile.write("\n SKEY " + aSkey) 150 | aPcfFile.write("\n PIPING-SPEC ") 151 | aPcfFile.write("\n INSULATION-SPEC ") 152 | aPcfFile.write("\n PAINTING-SPEC ") 153 | aPcfFile.write("\n TRACING-SPEC ") 154 | aPcfFile.write("\n WEIGHT ") 155 | aPcfFile.write("\n ITEM-CODE " + aCode) 156 | aPcfFile.write("\n ITEM-DESCRIPTION " + aDescription) 157 | 158 | if len(aCode) > 0: 159 | aCodeDict[aCode] = aDescription 160 | # if 161 | # for 162 | 163 | # Add last pipe. 164 | if aHeadPoint.Distance(aTailPoint) > 1: 165 | # Add Pipe 166 | aPcfFile.write("\nPIPE") 167 | aPcfFile.write("\n END-POINT " + aHeadPoint.string() + " " + aBranItem.Tbore) 168 | aPcfFile.write("\n END-POINT " + aTailPoint.string() + " " + aBranItem.Tbore) 169 | aPcfFile.write("\n PIPING-SPEC ") 170 | aPcfFile.write("\n INSULATION-SPEC ") 171 | aPcfFile.write("\n PAINTING-SPEC ") 172 | aPcfFile.write("\n TRACING-SPEC ") 173 | aPcfFile.write("\n WEIGHT ") 174 | aPcfFile.write("\n ITEM-CODE PA100") 175 | aPcfFile.write("\n ITEM-DESCRIPTION PIPE SCH80 ANSI B36.10") 176 | # for 177 | 178 | # ITEM-CODE 179 | aPcfFile.write("\nMATERIALS") 180 | aPcfFile.write("\nITEM-CODE PA100") 181 | aPcfFile.write("\n DESCRIPTION PIPE SCH80 ANSI B36.10") 182 | for (aKey, aValue) in aCodeDict.items(): 183 | aPcfFile.write("\nITEM-CODE " + aKey) 184 | aPcfFile.write("\n DESCRIPTION " + aValue) 185 | # for 186 | 187 | aPcfFile.write("\n") 188 | aPcfFile.close() 189 | # ExportPcf 190 | 191 | -------------------------------------------------------------------------------- /lib/pipecad/Vessel.py: -------------------------------------------------------------------------------- 1 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | # :: Welcome to PipeCAD! :: 3 | # :: ____ ____ ______ ____ :: 4 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 5 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 6 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 7 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 8 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 9 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 10 | # :: \ \_\ :: 11 | # :: \/_/ :: 12 | # :: :: 13 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 | # PipeCAD - Piping Design Software. 15 | # Copyright (C) 2021 Wuhan OCADE IT. Co., Ltd. 16 | # Author: Shing Liu(eryar@163.com) 17 | # Date: 11:20 2021-11-02 18 | 19 | from PythonQt.QtCore import * 20 | from PythonQt.QtGui import * 21 | from PythonQt.QtSql import * 22 | from PythonQt.pipecad import * 23 | 24 | from pipecad import * 25 | 26 | class VesselDialog(QDialog): 27 | def __init__(self, parent = None): 28 | QDialog.__init__(self, parent) 29 | 30 | self.setupUi() 31 | # __init__ 32 | 33 | def setupUi(self): 34 | #self.resize(500, 360) 35 | self.setWindowTitle(QT_TRANSLATE_NOOP("Design", "Standard Vessels")) 36 | 37 | self.verticalLayout = QVBoxLayout(self) 38 | 39 | self.horizontalLayout = QHBoxLayout() 40 | 41 | self.labelName = QLabel("Name") 42 | self.textName = QLineEdit() 43 | self.textName.setMaximumWidth(180) 44 | 45 | self.labelType = QLabel("Type") 46 | 47 | sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) 48 | 49 | self.comboBoxType = QComboBox() 50 | self.comboBoxType.addItem("Storage Tanks Flat Top") 51 | self.comboBoxType.addItem("Storage Tanks Dished Top") 52 | self.comboBoxType.addItem("Storage Tanks Conical Top") 53 | self.comboBoxType.addItem("Storage Vessels Horizontal with Dished Ends") 54 | self.comboBoxType.addItem("Storage Vessels Horizontal One End Dished & Flanged") 55 | self.comboBoxType.addItem("Storage Vessels Horizontal Coned One End") 56 | self.comboBoxType.addItem("Storage Vessels Vertical with Dished Top & Bottom") 57 | 58 | self.comboBoxType.currentIndexChanged.connect(self.typeChanged) 59 | 60 | self.comboBoxType.setSizeAdjustPolicy(QComboBox.AdjustToContents) 61 | self.comboBoxType.setSizePolicy(sizePolicy) 62 | 63 | self.horizontalLayout.addWidget(self.labelName) 64 | self.horizontalLayout.addWidget(self.textName) 65 | self.horizontalLayout.addWidget(self.labelType) 66 | self.horizontalLayout.addWidget(self.comboBoxType) 67 | 68 | self.verticalLayout.addLayout(self.horizontalLayout) 69 | 70 | self.horizontalLayout = QHBoxLayout() 71 | self.tableWidget = QTableWidget() 72 | self.tableWidget.setMinimumWidth(180) 73 | self.labelDiagram = QLabel() 74 | self.labelDiagram.setMinimumWidth(400) 75 | 76 | self.tableWidget.setColumnCount(2) 77 | self.tableWidget.setHorizontalHeaderLabels(["Dimension", "Value"]) 78 | self.tableWidget.setGridStyle(Qt.SolidLine) 79 | self.tableWidget.setAlternatingRowColors(True) 80 | self.tableWidget.setContextMenuPolicy(Qt.ActionsContextMenu) 81 | self.tableWidget.verticalHeader().setMinimumSectionSize(18) 82 | self.tableWidget.verticalHeader().setDefaultSectionSize(20) 83 | 84 | self.horizontalLayout.addWidget(self.tableWidget) 85 | self.horizontalLayout.addWidget(self.labelDiagram) 86 | 87 | self.verticalLayout.addLayout(self.horizontalLayout) 88 | 89 | # Action buttons. 90 | self.buttonBox = QDialogButtonBox() 91 | self.buttonBox.setStandardButtons(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) 92 | self.verticalLayout.addWidget(self.buttonBox) 93 | 94 | self.buttonBox.accepted.connect(self.accept) 95 | self.buttonBox.rejected.connect(self.reject) 96 | 97 | self.typeChanged(0) 98 | self.retranslateUi() 99 | # setupUi 100 | 101 | def retranslateUi(self): 102 | pass 103 | # retranslateUi 104 | 105 | def typeChanged(self, theIndex): 106 | # Set Parameters List 107 | self.tableWidget.clearContents() 108 | 109 | if theIndex == 0: 110 | # Flat Top Tank 111 | self.labelDiagram.setPixmap(QPixmap(":/PipeCad/Resources/std-tank001.png")) 112 | self.tableWidget.setRowCount(2) 113 | self.tableWidget.setItem(0, 0, QTableWidgetItem("A = Diameter")) 114 | self.tableWidget.setItem(1, 0, QTableWidgetItem("B = Height")) 115 | 116 | self.tableWidget.setItem(0, 1, QTableWidgetItem("5000")) 117 | self.tableWidget.setItem(1, 1, QTableWidgetItem("3500")) 118 | elif theIndex == 1: 119 | # Dished Top Tank 120 | self.labelDiagram.setPixmap(QPixmap(":/PipeCad/Resources/std-tank002.png")) 121 | self.tableWidget.setRowCount(4) 122 | self.tableWidget.setItem(0, 0, QTableWidgetItem("A = Diameter")) 123 | self.tableWidget.setItem(1, 0, QTableWidgetItem("B = Height")) 124 | self.tableWidget.setItem(2, 0, QTableWidgetItem("C = Dish Height")) 125 | self.tableWidget.setItem(3, 0, QTableWidgetItem("D = Dish Radius")) 126 | 127 | self.tableWidget.setItem(0, 1, QTableWidgetItem("5000")) 128 | self.tableWidget.setItem(1, 1, QTableWidgetItem("3500")) 129 | self.tableWidget.setItem(2, 1, QTableWidgetItem("800")) 130 | self.tableWidget.setItem(3, 1, QTableWidgetItem("100")) 131 | elif theIndex == 2: 132 | # Conical Top Tank 133 | self.labelDiagram.setPixmap(QPixmap(":/PipeCad/Resources/std-tank003.png")) 134 | self.tableWidget.setRowCount(4) 135 | self.tableWidget.setItem(0, 0, QTableWidgetItem("A = Diameter")) 136 | self.tableWidget.setItem(1, 0, QTableWidgetItem("B = Height")) 137 | self.tableWidget.setItem(2, 0, QTableWidgetItem("C = Cone Height")) 138 | self.tableWidget.setItem(3, 0, QTableWidgetItem("D = Cone Top Diameter")) 139 | 140 | self.tableWidget.setItem(0, 1, QTableWidgetItem("5000")) 141 | self.tableWidget.setItem(1, 1, QTableWidgetItem("3500")) 142 | self.tableWidget.setItem(2, 1, QTableWidgetItem("800")) 143 | self.tableWidget.setItem(3, 1, QTableWidgetItem("300")) 144 | else: 145 | self.tableWidget.setRowCount(0) 146 | self.labelDiagram.setPixmap(QPixmap(":/PipeCad/Resources/std-tank000.png")) 147 | 148 | # Disable edit for column 1 149 | for r in range (self.tableWidget.rowCount): 150 | self.tableWidget.item(r, 0).setFlags(Qt.NoItemFlags) 151 | # typeChanged 152 | 153 | def accept(self): 154 | aName = self.textName.text 155 | aType = self.comboBoxType.currentIndex 156 | 157 | if aType == 0: 158 | # Flat Top Tank 159 | aDiameter = float(self.tableWidget.item(0, 1).text()) 160 | aHeight = float(self.tableWidget.item(1, 1).text()) 161 | 162 | PipeCad.StartTransaction("Build Flat Top Tank") 163 | PipeCad.CreateItem("EQUI", aName) 164 | PipeCad.CreateItem("CYLI") 165 | 166 | aCylinder = PipeCad.CurrentItem() 167 | aCylinder.Diameter = aDiameter 168 | aCylinder.Height = aHeight 169 | aCylinder.Position = Position(0, 0, aHeight * 0.5) 170 | 171 | PipeCad.CommitTransaction() 172 | elif aType == 1: 173 | # Dished Top Tank 174 | aDiameter = float(self.tableWidget.item(0, 1).text()) 175 | aHeight = float(self.tableWidget.item(1, 1).text()) 176 | aDishHeight = float(self.tableWidget.item(2, 1).text()) 177 | aDishRadius = float(self.tableWidget.item(3, 1).text()) 178 | 179 | PipeCad.StartTransaction("Build Dished Top Tank") 180 | PipeCad.CreateItem("EQUI", aName) 181 | PipeCad.CreateItem("CYLI") 182 | 183 | aCylinder = PipeCad.CurrentItem() 184 | aCylinder.Diameter = aDiameter 185 | aCylinder.Height = aHeight 186 | aCylinder.Position = Position(0, 0, aHeight * 0.5) 187 | 188 | PipeCad.CreateItem("DISH") 189 | aDish = PipeCad.CurrentItem() 190 | aDish.Diameter = aDiameter 191 | aDish.Height = aDishHeight 192 | aDish.Radius = aDishRadius 193 | aDish.Position = Position(0, 0, aHeight) 194 | 195 | PipeCad.CommitTransaction() 196 | elif aType == 2: 197 | # Conical Top Tank 198 | aDiameter = float(self.tableWidget.item(0, 1).text()) 199 | aHeight = float(self.tableWidget.item(1, 1).text()) 200 | aConeHeight = float(self.tableWidget.item(2, 1).text()) 201 | aTopDiameter = float(self.tableWidget.item(3, 1).text()) 202 | 203 | PipeCad.StartTransaction("Build Conical Top Tank") 204 | PipeCad.CreateItem("EQUI", aName) 205 | PipeCad.CreateItem("CYLI") 206 | 207 | aCylinder = PipeCad.CurrentItem() 208 | aCylinder.Diameter = aDiameter 209 | aCylinder.Height = aHeight 210 | aCylinder.Position = Position(0, 0, aHeight * 0.5) 211 | 212 | PipeCad.CreateItem("CONE") 213 | aCone = PipeCad.CurrentItem() 214 | aCone.Bdiameter = aDiameter 215 | aCone.Tdiameter = aTopDiameter 216 | aCone.Height = aConeHeight 217 | aCone.Position = Position(0, 0, aHeight + aConeHeight * 0.5) 218 | 219 | PipeCad.CommitTransaction() 220 | # endif 221 | 222 | QDialog.accept(self) 223 | # accept 224 | 225 | aVesselDlg = VesselDialog(PipeCad) 226 | 227 | def Show(): 228 | aVesselDlg.textName.setText("") 229 | aVesselDlg.show() 230 | # Show 231 | -------------------------------------------------------------------------------- /lib/pipecad/View.py: -------------------------------------------------------------------------------- 1 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 2 | # :: Welcome to PipeCAD! :: 3 | # :: ____ ____ ______ ____ :: 4 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 5 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 6 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 7 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 8 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 9 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 10 | # :: \ \_\ :: 11 | # :: \/_/ :: 12 | # :: :: 13 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 14 | # PipeCAD - Piping Design Software. 15 | # Copyright (C) 2022 Wuhan OCADE IT. Co., Ltd. 16 | # Author: Shing Liu(eryar@163.com) 17 | # Date: 15:13 2022-09-15 18 | 19 | from PythonQt.QtCore import * 20 | from PythonQt.QtGui import * 21 | from PythonQt.QtSql import * 22 | from PythonQt.pipecad import * 23 | 24 | from pipecad import * 25 | 26 | 27 | class GraphicsDialog(QDialog): 28 | def __init__(self, theParent = None): 29 | QDialog.__init__(self, theParent) 30 | 31 | self.setupUi() 32 | # __init__ 33 | 34 | def setupUi(self): 35 | self.setWindowTitle(QT_TRANSLATE_NOOP("View", "Graphics Settings")) 36 | 37 | self.verticalLayout = QVBoxLayout(self) 38 | 39 | self.tabWidget = QTabWidget() 40 | 41 | # Tab Colour 42 | self.tabColour = QWidget() 43 | self.verticalLayoutTab = QVBoxLayout(self.tabColour) 44 | 45 | self.groupBox = QGroupBox(QT_TRANSLATE_NOOP("View", "Background")) 46 | 47 | self.horizontalLayout = QHBoxLayout(self.groupBox) 48 | 49 | self.buttonBgColor = QPushButton() 50 | self.buttonBgColor.setMaximumWidth(32) 51 | self.buttonBgColor.setAutoFillBackground(True) 52 | self.buttonBgColor.setFlat(True) 53 | self.buttonBgColor.clicked.connect(self.selectBackgroundColor) 54 | 55 | self.checkGraduated = QCheckBox(QT_TRANSLATE_NOOP("View", "Graduated")) 56 | 57 | self.horizontalLayout.addWidget(self.buttonBgColor) 58 | self.horizontalLayout.addWidget(self.checkGraduated) 59 | 60 | self.verticalLayoutTab.addWidget(self.groupBox) 61 | 62 | self.tabWidget.addTab(self.tabColour, QT_TRANSLATE_NOOP("View", "Colour")) 63 | 64 | # Tab Representation 65 | self.tabRepresentation = QWidget() 66 | self.verticalLayoutTab = QVBoxLayout(self.tabRepresentation) 67 | 68 | self.formLayout = QFormLayout() 69 | self.labelTolerance = QLabel(QT_TRANSLATE_NOOP("View", "Arc Tolerance")) 70 | self.textTolerance = QLineEdit(str(PipeCad.GetArcTolerance())) 71 | 72 | self.formLayout.setWidget(0, QFormLayout.LabelRole, self.labelTolerance) 73 | self.formLayout.setWidget(0, QFormLayout.FieldRole, self.textTolerance) 74 | 75 | self.verticalLayoutTab.addLayout(self.formLayout) 76 | 77 | self.tabWidget.addTab(self.tabRepresentation, QT_TRANSLATE_NOOP("View", "Representation")) 78 | 79 | self.verticalLayout.addWidget(self.tabWidget) 80 | 81 | # Action Box. 82 | self.buttonBox = QDialogButtonBox(QDialogButtonBox.Cancel|QDialogButtonBox.Ok, self) 83 | 84 | self.buttonBox.accepted.connect(self.accept) 85 | self.buttonBox.rejected.connect(self.reject) 86 | 87 | self.verticalLayout.addWidget(self.buttonBox) 88 | # setupUi 89 | 90 | def reload(self): 91 | # Background Color 92 | aBackgroundColor = PipeCad.GetBackgroundColor() 93 | 94 | aPalette = self.buttonBgColor.palette 95 | aPalette.setColor(QPalette.Button, aBackgroundColor) 96 | self.buttonBgColor.setPalette(aPalette) 97 | 98 | self.checkGraduated.setChecked(PipeCad.IsGradientBackground()) 99 | 100 | # Arc Tolerance 101 | self.textTolerance.setText(str(PipeCad.GetArcTolerance())) 102 | # reload 103 | 104 | def selectBackgroundColor(self): 105 | aColor = PipeCad.GetBackgroundColor() 106 | aColor = QColorDialog.getColor(aColor, self) 107 | if aColor.isValid(): 108 | aPalette = self.buttonBgColor.palette 109 | aPalette.setColor(QPalette.Button, aColor) 110 | self.buttonBgColor.setPalette(aPalette) 111 | # if 112 | # selectBackgroundColor 113 | 114 | def accept(self): 115 | # Colour 116 | aBackgroundColor = self.buttonBgColor.palette.color(QPalette.Button) 117 | PipeCad.SetBackgroundColor(aBackgroundColor, self.checkGraduated.checked) 118 | 119 | # Representation 120 | aTolerance = float(self.textTolerance.text) 121 | 122 | PipeCad.SetArcTolerance(aTolerance) 123 | 124 | QDialog.accept(self) 125 | # accept 126 | 127 | # GraphicsDialog 128 | 129 | # Singleton Instance. 130 | aGraphicsDlg = GraphicsDialog(PipeCad) 131 | 132 | def SetGraphics(): 133 | aGraphicsDlg.reload() 134 | aGraphicsDlg.show() 135 | # SetGraphics 136 | 137 | 138 | class SnapDialog(QDialog): 139 | """docstring for SnapDialog""" 140 | def __init__(self, theParent = None): 141 | QDialog.__init__(self, theParent) 142 | 143 | self.setupUi() 144 | # __init__ 145 | 146 | def setupUi(self): 147 | self.setWindowTitle(QT_TRANSLATE_NOOP("View", "Snap Options")) 148 | 149 | self.verticalLayout = QVBoxLayout(self) 150 | 151 | self.groupBox = QGroupBox(QT_TRANSLATE_NOOP("View", "Object Snaps")) 152 | 153 | self.gridLayout = QGridLayout(self.groupBox) 154 | 155 | # Object Snaps 156 | self.checkSnapEnd = QCheckBox(QT_TRANSLATE_NOOP("View", "End")) 157 | self.checkSnapMiddle = QCheckBox(QT_TRANSLATE_NOOP("View", "Middle")) 158 | self.checkSnapCenter = QCheckBox(QT_TRANSLATE_NOOP("View", "Center")) 159 | self.checkSnapPpoint = QCheckBox(QT_TRANSLATE_NOOP("View", "Ppoint")) 160 | 161 | self.checkSnapEnd.setChecked(PipeCad.TestSnapOption(PipeCad.SnapEnd)) 162 | self.checkSnapMiddle.setChecked(PipeCad.TestSnapOption(PipeCad.SnapMiddle)) 163 | self.checkSnapCenter.setChecked(PipeCad.TestSnapOption(PipeCad.SnapCenter)) 164 | self.checkSnapPpoint.setChecked(PipeCad.TestSnapOption(PipeCad.SnapPpoint)) 165 | 166 | self.gridLayout.addWidget(self.checkSnapEnd, 0, 0) 167 | self.gridLayout.addWidget(self.checkSnapMiddle, 1, 0) 168 | self.gridLayout.addWidget(self.checkSnapCenter, 2, 0) 169 | self.gridLayout.addWidget(self.checkSnapPpoint, 3, 0) 170 | 171 | self.verticalLayout.addWidget(self.groupBox) 172 | 173 | # Action Box. 174 | self.buttonBox = QDialogButtonBox(QDialogButtonBox.Cancel|QDialogButtonBox.Ok, self) 175 | 176 | self.buttonBox.accepted.connect(self.accept) 177 | self.buttonBox.rejected.connect(self.reject) 178 | 179 | self.verticalLayout.addWidget(self.buttonBox) 180 | # setupUi 181 | 182 | def accept(self): 183 | aSnapOptions = PipeCad.SnapOptions() 184 | 185 | if self.checkSnapEnd.checked: 186 | aSnapOptions = aSnapOptions | PipeCad.SnapEnd 187 | # if 188 | 189 | if self.checkSnapMiddle.checked: 190 | aSnapOptions = aSnapOptions | PipeCad.SnapMiddle 191 | # if 192 | 193 | if self.checkSnapCenter.checked: 194 | aSnapOptions = aSnapOptions | PipeCad.SnapCenter 195 | # if 196 | 197 | if self.checkSnapPpoint.checked: 198 | aSnapOptions = aSnapOptions | PipeCad.SnapPpoint 199 | # if 200 | 201 | PipeCad.SetSnapOptions(aSnapOptions) 202 | 203 | QDialog.accept(self) 204 | # accept 205 | # SnapOptionsDialog 206 | 207 | def SetSnapOptions(): 208 | aSnapDlg = SnapDialog(PipeCad) 209 | aSnapDlg.exec() 210 | # SetSnapOptions 211 | -------------------------------------------------------------------------------- /lib/pipecad/__init__.py: -------------------------------------------------------------------------------- 1 | # $Id: __init__.py 10:37 18 January 2021 $ 2 | # PipeCAD package 3 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4 | # :: Welcome to PipeCAD! :: 5 | # :: ____ ____ ______ ____ :: 6 | # :: /\ _`\ __ /\ _`\ /\ _ \/\ _`\ :: 7 | # :: \ \ \L\ \/\_\ _____ __\ \ \/\_\\ \ \L\ \ \ \/\ \ :: 8 | # :: \ \ ,__/\/\ \/\ '__`\ /'__`\ \ \/_/_\ \ __ \ \ \ \ \ :: 9 | # :: \ \ \/ \ \ \ \ \L\ \/\ __/\ \ \L\ \\ \ \/\ \ \ \_\ \ :: 10 | # :: \ \_\ \ \_\ \ ,__/\ \____\\ \____/ \ \_\ \_\ \____/ :: 11 | # :: \/_/ \/_/\ \ \/ \/____/ \/___/ \/_/\/_/\/___/ :: 12 | # :: \ \_\ :: 13 | # :: \/_/ :: 14 | # :: :: 15 | # :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 16 | # PipeCAD - Piping Design Software. 17 | # Copyright (C) 2021 Wuhan OCADE IT. Co., Ltd. 18 | # Author: Shing Liu(eryar@163.com) 19 | # Date: 21:16 2021-09-16 20 | # -------------------------------------------------------------- 21 | 22 | import sys 23 | import math 24 | 25 | from PythonQt.QtCore import * 26 | 27 | 28 | def QT_TRANSLATE_NOOP(theContext, theSourceText): 29 | return QCoreApplication.translate(theContext, theSourceText) 30 | # QT_TRANSLATE_NOOP 31 | 32 | if __name__ == '__main__': 33 | pass 34 | -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_database_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_database_done.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_database_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_database_fail.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_database_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_database_select.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_mdb_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_mdb_done.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_mdb_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_mdb_fail.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_mdb_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_mdb_select.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_team_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_team_done.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_team_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_team_fail.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_team_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_team_select.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_user_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_user_done.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_user_fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_user_fail.png -------------------------------------------------------------------------------- /lib/pipecad/icons/admin/128x128_user_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/admin/128x128_user_select.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/100x100_filter_clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/100x100_filter_clear.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/100x100_reload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/100x100_reload.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/128x128_clear_sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/128x128_clear_sheet.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/128x128_redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/128x128_redo.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/128x128_select_element.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/128x128_select_element.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/128x128_undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/128x128_undo.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/32x32_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/32x32_arrow_left.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/32x32_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/32x32_arrow_right.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/32x32_explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/32x32_explorer.png -------------------------------------------------------------------------------- /lib/pipecad/icons/common/90x90_revision.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/common/90x90_revision.png -------------------------------------------------------------------------------- /lib/pipecad/icons/login/128x128_select_admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/login/128x128_select_admin.png -------------------------------------------------------------------------------- /lib/pipecad/icons/login/128x128_select_design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/login/128x128_select_design.png -------------------------------------------------------------------------------- /lib/pipecad/icons/login/128x128_select_paragon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/login/128x128_select_paragon.png -------------------------------------------------------------------------------- /lib/pipecad/icons/login/128x128_select_project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/login/128x128_select_project.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/100x100_skey_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/100x100_skey_editor.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_cap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_cap.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_circle.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_hexagon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_hexagon.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_line.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_point_arrive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_point_arrive.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_point_leave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_point_leave.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_point_spindle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_point_spindle.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_point_tee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_point_tee.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_rectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_rectangle.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/128x128_triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/128x128_triangle.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_01SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_01SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_02SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_02SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_03SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_03SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_04SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_04SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_05SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_05SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_06SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_06SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_07SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_07SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_08SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_08SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_09SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_09SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_10SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_10SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_11SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_11SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_12SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_12SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_13SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_13SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_14SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_14SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_15SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_15SP.png -------------------------------------------------------------------------------- /lib/pipecad/icons/paragon/spindles/128x128_16SP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/lib/pipecad/icons/paragon/spindles/128x128_16SP.png -------------------------------------------------------------------------------- /settings/settings.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/settings/settings.ini -------------------------------------------------------------------------------- /templates/Doc_Images.drawio: -------------------------------------------------------------------------------- 1 | 7Zjdc5s4EMD/Gh7rAWFs/Gj8kT5ce20zuTRPNzIowBWQT8gx7l9/K5CE+EgT+9KPzDSTIdJqWUm7v12JWO4qr64Y3ifvaEQyC9lRZblrCyFnipAlfu3o1Ej8mdcIYpZGUqkVXKdfiRTaUnpII1J2FDmlGU/3XWFIi4KEvCPDjNFjV+2eZt1Z9zgmA8F1iLOh9DaNeCJ34dmt/C1J40TN7NhyJMdKWZooExzRYyOSOqTiW1pwucQPhOW4IAWHkXeYfSHM8jYJ52KnSwtt4fdeaE9iSuOM4H1aTkKagzgsQWV7j/M0E242DAXSEEznbix3xSjlTSuvViQTsVJhaNa0fWRU+4EJu8MX6O4f4X5kZ3gHCNQKFpploBuIVQsH8JP06uzfA1UDb8o65rBBG8wDN0E7Dq1Y/q0N7dg3JGvbWjjiGdj1cy7bqOlOjaG1ejqWH9RPb9xgsK1Hm7c29dOrn8tajtQUzbsyQO0ahcf+WL6/+vvTjfTI/12kfc6qkBG/BxsF+U3158eb3e372LfR4vDXG6S50PFug4RKzugXTT0oBgnPRWgdaALNe6GXV7FI/Ml9Ro9hghmfRJjjHS5hMDgmKSfXexwKzSPoaa+YHEm0HgjjpDJEcmFXhOaEsxOoyFFX7k2WFJVNxzY/HZWfiZGbSKUmlgkXa8stx9CQvlBdSfZ4Woy61ZUbwtmBGHFfGfGa1pFy63YT3FUdXGg4nSC2JGg2mtBrnT7GOBduLnbl/tE8EaDopawUUlqyNpBaGzM1o7Kgm6BIFqCcwQQRPezqEYEJo4ciIpHsjfFgMCWSR54A4IsXQQX5T7KicTJZ8c9H5XlsTC9nQzPQCOE8sIUB24jixtDylC48/UHBGPLlK6uvN7rO9GeH1xsN73I9yOlZN3ehvTCquw6cChDSGa+zvwHEMWI6PBbQgAqdw6Pnp28cSmZ18Lqza1rmxqhjVBbf2FFPzSxdnnTF+GJMnelgSZtusTSzZGVUStSdWq/NNpz8qE8m8POa8sFbXFbtLjkZn5cPs2E+9P1JIrhwyy7JdvS4aQVBLYCBhLL0KzgMZ0JYREtxtQd5mOGyTMOuZ9sw2CN+Bvey02epWnfuhObEU911Jd9seiezB1frFDwDN2oprFL+2WgbpqDXWhIdZah7r3K/FfqSHlhInj5OOGYx4U/d9OCDI+p87QxBMkgZu0IpGSMZ5ulD9xtpDB45wwea1p8Aqm47vbqNevw1+5ZvmV8lfUOzrqF5z07jl4GdGmW968vpnv+m+7vS7b5OuntV2FlcSLfTN+T+WLz9F8JbHGBp+JJwGzzfmaw/BrfiWLN7Z6L7y1Rp95fi2O3frvu35udyPHV/LseLpzlWl7oyLeKMSETPvcGdgcwZdzrUc958eKmbjd7pzr7SQbf9/2Dj/Pafuu7mPw== -------------------------------------------------------------------------------- /templates/Menu_Icons.drawio: -------------------------------------------------------------------------------- 1 | 7V1bc5s4FP41fgyDLtwe41za3W667Tppt33JEBvbNCRkMWni/PoVNrJByLYgCGQbz85sUIhwdT5956pDD509vH6I3KfpVTjygh7UR689dN6DEGBgk/8lI/PliIms5cAk8kfpTeuBgf/m5Qef/ZE3yw3FYRjE/lN+cBg+PnrDODfmRlH4kr9tHAb5hz65E68wMBi6QXH0uz+Kp8tRG1rr8Y+eP5nSJwPTWf7mwaU368uB2dQdhS+ZIXTRQ2dRGMbLnx5ez7wgWTu6LN//mH8P/ro3P/z5dfafe9P/dP3528lysssyf7L6J0TeY1x56jNj/s+vm8Gvkx964PZ/XMQ/bu0TkM792w2e0wVL/7HxnK7gJAqfn3qo786elgIa+68embQ/i6Pw3jsLgzAioyNv7D4H5Pd9wa9LH+1FsffKw4J7R7/CerkJTL3wwYujObkv/SuopxJKEYrTy5e1vAFMUTzNypoOuinGJqup1+tIfkiXssSy6rtXlcxCtgC56L9M/dgbPLnD5DcvZBOSsWn8QB54DsiPYz8I6Br3ILq81MlntfoU07ggj+y9yRyD9NmzMEi+O0dK2xHCimmjOICjwZw8LFOzCxJBsCgQOla7PBwBeTyOThO6IVd3QTi8zwuBbIHHUQL6c/7Sk7++9JPvtPg9uUp5MFmn/oo49K1Cmt178XCa3lZSOt4ox4JF2WRW3tCLK0/HIi9wY/93njt54kif8CX0yfdbid4AGnCyH3MDEOiUs/A5GnrpLFnyYiYGwGBABaBm5R7l5GeO3WjixYWZF/BZrUt1RAF0AMSJVeNNgOURZ/K5vBQjztW97yFOtEFM+0ScwFCYOdcSrcKcSCnmLE9wotRZmpNlM6d1AMyJTOWo05ZHnRYxUUSpc3Xve6jT2iCnvaJOlY3OtUSz1DkjWz9mv9BiMPOcxXX2SSWFqgjhHo+pigR0+JJwGyZRA6pGokjAcae6aZMqIosQu/6jF5WzR1ZSqr6s7a0bLGcmPoaP3laqy3FXnqH4i85TTAxNMfxYUiyKsBZ1kCizAKQZVWmKmQqzM0mmJWiK7zVhO/AYNx8W5nd17Gc2ZLu6bnEZS+CxZvjhvYafDH/uKBdSwGGII999nAQCLpy4psw6e6lmjsKYaKnwkYycOHWs/xZHOs8DsEADJkeb2rokGRh7yKVsLEIBLjVKpBXzy5gCsOL+N/Z5/xsCwW9iGT8lP069V3eS7M/+kxf55PmLlUpHv9AhKBLpIUSc2sXvpo33SmmzuWDlEI4gtVUz0rJwUVgmer+sXk6fhxff/r5+ubw/PTO/3v19M/4gkuCVoPOadceb5ZHzi2D0x93o4tPzzeTmX3x++8/X9b9Nqkkmd1VNW7lVrTPJtgHdm0PEa8kIEUgp4WwUgqXnnV0IcUEIdpN2Bi5BIPuC7PbDd1ggKZ+PNMk0ouWBOb/udnHdHV4ECktadXQALI2VM6GRQDiCWoPJYjbrD9Ysr81YBxpN1FPRAKyhYmrPtDUahM7KxzHYqGYVAf38z+/P7y/wYBz4Z19vfqHh/ONBmoDMNlh5lo1sA+4qCwSXyiQWtoK9B5FLdj7BESdjatIyvXIyUSRvYDl0H1DROoxpI5w3gPauqepLHHAhIVLo8B5IeK9+/G/yW81Ir36k9yY/n79mL+bpxZHACOhIs/LSx8jMZ7er5qN01Byuft9/608Gp1e3D5/fwODiKh4b1jEQ+srFb4TQuassYCxWKlNK97lAhdJqC46JcDLj48WHJ11Z1g1Tc2LyrE6TIxxTkmxgp2ylKFvDqE3ZFqaSTIoCHvXBKduldHZzmCJwSzSnCflMUl4L45YBJxCc3DstbFp58SighkUKto5FDVt0lenuoaWqbelhgdBPp4cF9DAALJnhirxomfquqSTzouxAyF4qYrWKMy1k1KaILaYwpmm4CQRZ9k4Ns0WHCqhhkTMix6KGoaGYOwxEjvF3engnL0KM2aihYVXkRWijVaKHztVwnFCkZ8bxqWJHLciZ9fnE0GzbJwawIyJZRGTWSERsuZBsWMgOzh0xLKpGbHmwYHWdbFgcYgiNLXJXwHYX6o1xLMY7BqoZ713AZAtmFWFeDOsz0zBs20yDnb9YEyp2SlIYFNhuFxIy+iu2rYvZgyIK6GK6rJ0uTuRhKaaLYVdFsAWzirCuYdeniw07f97GoAnwpmhXIIOa7Cd/6AZ/uXde8CWc+WmB+10Yx+EDETe94TTwJ8kv4pAtqU/L7x9eJ0nrZO3OnflDbeoG49uhHw0DbyuasjX1wGYRme6BTVxS3ALSyIR1vAxdKx6ewhy2h5DeWD+hCORN9k6tMrWaJudcT8NaVaQd0tFoVcdkjFKLdzqiSbWKZPSgbXsXsIEeu9Fjhfx1ltWVdh+3ARvocVDLxVIiB+X2wLgkYorm6WN0gw4kTzrRNR1bdGT9vMXVPHv1JdMLQoLBSvfB0njbciNN5Cti2XKiTA6sHmXK0xObP5Jdj91Ot6VmC3NUMH1ktdPdR85nK3Nat3xE2ic0HGnlawmwVUskF5I521AryJDUUjDpUQuuejdXqMzIT6VL66zLh+ExGOAKkDHuDPDNBnj7ZFxz89/DiO5SzCpCvBwb2Kpa+lTMz1mgWStYpFdrl2kVQAVmFCj7NgTxPCszkWGzSl02JA7RMWIzrSro4s4x6m3MtLavi8u9dORYdLGtFOtyMq2VdTGbabUw83Uk065Ip19ZmVZ3+Bx7t5mW2IuX1hJkFvudZcFVuuNZmp3dQDayuMXJUz/xbTlvNIKrVhNZnGLEKt/6zo1DBeX9DnHvyMg3LHNo5JvdWXBlRmWFDosiR7omS6eI9ETvjG2h2Be7o6txPrQtzdDXH7h9WtkaoKu1qS20w3Z25ZiTDVfaGF0Dxlo2P3LYplAZhV6hqnn3ZLK3vew2jEcCDKzLCsGwE8kGhGzXswNESUCwEzUek6Pq66BicmwzLwVicmbXVHMtH7abV+sxORrq2fOYXK5ADfYyBWq65ji99svTTLV4nNMNqnKUz0KmprNvKEZQs6xm+VwkD9+p+N0B4IIozWq44ER/m1bxXXCoHkgwVoXFGgvCkNiFLdmA6AIGdQGC9fFrgwRb/CwbEl2oQA5HALCfgLAE/EJZIeNo4YWsIQN729yc9IXxCWR8AsEFWLYjq0RguRwIy7w0icEJN3XIDSTX8L5MvsQPsQ8Cc2BTgZNqlCC6QECv8HYNB7UcB7APMRrGVqgpsAnsLhqW9RDzFQUOzQ63tguaOLpf/9s43x0mVmBjOAIEdDQbgw0Tr06EtrUxnMNoK5wJE2OigTNhYqDpwFYgTky3wc5jzIA2WFXE/+NElCufY+ZFlG0niSgX6ooacgqdFuuIjsApNEw2nmTbiOMW0oKfXHGhvHpS5zDe5plNjuU4bwff1Uxt1OYQoDa1QlvJe8dw5iWi1Epkfbcq7zPTsx/GJ9ShZuP1g5stoQK6QD5t7zxCtpmDAoYv0LtWzRkBMd0cWrd8gS77OGfLSoBQ0C5F0IThu9oGu9WDbimlHpK2EVn14PAB/N7+EbbDxL+lKwCBZKm00zTRcIFmN4pPl+dpCG4hNk0bWwYwCaRxWtYzWv/eMhCwoWlhw9CxbW5nOvFEXePnbAqhe0swQ0KbHdRPgkKvFRLVUTushdLH4ZoWkM2+udE2UVE+vKNv8uQDJSupY8liI4a9dUI7VSsbCk4tbzbp7wMTaAPURS5qS2fbNJm8g6pZn7EKFfx5fT77HXn3d7O3n+F58PNt/oJPDjGPxyhEoPN6xkvz2rjL3KXxepty2UDnHTqQ5LNxhdMpw1qUoc1uu8qBLiadVZypPi3IBcSxv+JhG4UpAjaCCTZ/tCaSCpHVdgHXnUWoCRSsHA1UDRE7uUwyILqTCIoBokmd9NH8+PXD56uZfRZex+6nt+jl87WIoU69qnHgvabQ6GdQMgzcGXGztgGFSgXoGsp98HKqwdLpAlBDjpn5LDu6jyjCoKUhgO31f0gEhJeLz75CzaQCSQGC9IpIM2j3v3QiCA1ZQJua38fXF+Bq+PTwc/oyGN1E3o0I0Cq5KtvjdNu99kH67FkY+DJdEzu/yTEyOaFUeoY955/DzXjZ4JuQyygM46zwkljIVTjykjv+Bw==jZLbToQwEIafhstNgELca3A9rNHEbMzGywqztFoYUoqAT2+xLYegiTdN+01npv3/8Uha9reS1uwRcxBe6Oe9R669MIyuiF5HMBgQBqEBheS5QcEMTvwL1rDlOTQrpBCF4vUaZlhVkKkVo1Jit752QbFuWtMCNuCUUbGlZ54rZug+9md+B7xgrnPg20hJ3WULGkZz7BaIHDySSkRldmWfghilc7KYvJs/otPDJFTqPwns+SE5vrxLvOfHqHl67XbnZme9+KSitR+2j1WDU6CQ2NYeSWhTG4EvvAddM2mUxA9IUaDUtMJKJyTaB0V5BSPy9dnWB6mg/80w+ub6+NsPBZNMeroAS1By0FdsoTgyGXawYlu4m20Kwr1hbGmRg9SORjFVntXTGyugO85G/cQWw04O3w== -------------------------------------------------------------------------------- /templates/ProjectDefinition.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/templates/ProjectDefinition.xlsx -------------------------------------------------------------------------------- /templates/Skey_Descriptions.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/templates/Skey_Descriptions.xlsx -------------------------------------------------------------------------------- /translations/qt_messages/pipecad_ru.qm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eryar/PipeCAD/38bcf5b508c20bbe153bf12a23f6a2781ffcbff3/translations/qt_messages/pipecad_ru.qm -------------------------------------------------------------------------------- /uic/PipeCAD.Admin.uic: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uic/PipeCAD.Admin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uic/PipeCAD.Design.uic: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /uic/PipeCAD.Design.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uic/PipeCAD.Paragon.uic: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uic/PipeCAD.Paragon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | --------------------------------------------------------------------------------