├── .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 | 
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 | 
15 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
41 |
42 | After pressing button import form will be shown:
43 | 
44 |
45 | By pressing button **Explorer** you need to define location of project definition file (by default, folder **%TEMPLATES_DIR%** will be opened):
46 | 
47 |
48 | Project definition file contais data for creating users, teams, databases and mdbs:
49 | 
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 | 
53 |
54 | in versus case icons will be colored by Red:
55 | 
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 | 
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  located in right top conner of ribbon:
10 |
11 | 
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 | 
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 | 
18 |
19 | Inside this Tab we will create new TabGroup with name **Samples**:
20 | 
21 |
22 | In left part of form select UserAction row in the list to see available options:
23 | 
24 |
25 | After selecting our action **Run Sample** there is need to press button **Add >>** to add action to selected TabGroup:
26 | 
27 |
28 | In the end, you will see new Tab menu with new button:
29 | 
--------------------------------------------------------------------------------
/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 | 
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 | 
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 | 
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 | 
69 |
70 | which will show form **Reload Python Libraries**:
71 |
72 | 
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 | 
77 |
78 | In case of correct reloading of form file, you will see next message:
79 |
80 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
32 |
33 | The data generated by the interactive operation of the plant design are stored in the project database.
34 |
35 | 
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 | 
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 | 
9 |
10 | After updating evarsProjects.bat "new" project will be availible for selection in login form by pressing buttons  or 
11 |
12 | 
--------------------------------------------------------------------------------
/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 | 
7 |
8 | You need you to agree with License Agreement and press button **Next** to continue installation process:
9 | 
10 |
11 | Next step requires to select installation folder (or confirm default path) and to press button **Next**:
12 | 
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 | 
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 | 
20 |
21 | After checking installation details you need to press button **Install**:
22 |
23 | 
24 |
25 | Installation process will take some time, during which installer will copy files and create sample project:
26 |
27 | 
28 |
29 | When utility will complete installation process you can check box to read REARM or start application after closing installation utility.
30 | 
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 | 
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 | 
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 | 
9 | And generate the database files and other configuration files required by the project in the project folder:
10 |
11 | 
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 | 
16 |
17 | When the data that must be entered is not entered, a prompt is also given:
18 |
19 | 
--------------------------------------------------------------------------------
/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 | 
5 |
6 | You need you to agree with License Agreement and press button **Next** to continue installation process:
7 | 
8 |
9 | Next step requires to select installation folder (or confirm default path) and to press button **Next**:
10 | 
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 | 
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 | 
18 |
19 | After checking installation details you need to press button **Install**:
20 |
21 | 
22 |
23 | Installation process will take some time, during which installer will copy files and create sample project:
24 |
25 | 
26 |
27 | When utility will complete installation process you can check box to read REARM or start application after closing installation utility.
28 | 
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 | 
7 |
8 | Программное обеспечение использует независимую платформу 3D-графики и не зависит от других сторонних CAD-платформ (таких как AutoCAD и т. д.). При параметрическом проектировании проектные данные сохраняются в базе данных для формирования базы данных продукта, в основе которой лежит база данных проекта. База данных продуктов обеспечивает базу данных для создания чертежей и отчетов о материалах, а также обеспечивает источник данных для цифровой поставки фабрики.
9 |
10 | 
11 |
12 | Как показано на рисунке выше, библиотека параметрических компонентов и данные моделирования конструкции сохраняются в базе данных. При создании результатов необходимые данные извлекаются из базы данных, создаются чертежи трубопроводов и отчеты по материалам.
13 |
14 | PipeCAD в основном разделен на три модуля, а именно модуль администрирования управления проектом, Модуль каталогов - Paragon компонента параметров и модуль дизайна моделирования дизайна.
15 |
16 | * Модуль управления проектами: создание пользователей и баз данных и управление правами доступа пользователей к базам данных.
17 |
18 | 
19 |
20 | * Модуль параметрического компонента: посредством ввода данных формы можно быстро сгенерировать параметризованный компонент, а конвейером и структурой можно управлять иерархически. В модуле библиотеки параметрических компонентов Paragon создание стандартных параметрических фитингов трубопроводов упрощено до табличного ввода данных, что снижает трудоемкость подготовки инженерных данных и повышает эффективность и точность.
21 |
22 | 
23 |
24 | * Модуль 3D моделирования: Создайте трехмерный модуль завода в модуле проектирования Design. Проектная модель в основном включает в себя следующие типы:
25 | Сетка: Удобна для позиционирования различных 3d моделей;
26 | Оборудование: различные градирни, резервуары, теплообменники, контейнеры и т.д. Оборудование включает в себя штуцеры, которые удобны для подсоединения и позиционирования труб;
27 | Металлические конструкции: каркасная конструкция, фермы, лестницы платформы оборудования, перила и т.д.;
28 | Трубопроводы: модели труб или воздуховодов соединяющих оборудование;
29 | Подвески и опоры: кронштейны для труб, воздуховодов и т.д.;
30 |
31 | 
32 |
33 | Данные, созданные в результате работы по проектированию модели, сохраняются в базе данных проекта.
34 |
35 | 
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 |
--------------------------------------------------------------------------------