civil-tools-v 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. CivilTools/Const/CAD.py +2 -0
  2. CivilTools/Const/Concrete.py +144 -0
  3. CivilTools/Const/Steel.py +21 -0
  4. CivilTools/Const/__init__.py +3 -0
  5. CivilTools/DXFGenerator/BasicDXF.py +238 -1
  6. CivilTools/DXFGenerator/DetailDXF.py +324 -0
  7. CivilTools/DXFGenerator/DrawingAttribs.py +45 -0
  8. CivilTools/DXFGenerator/LayerManager.py +37 -0
  9. CivilTools/DXFGenerator/__init__.py +3 -0
  10. CivilTools/FigureGenerator/BasicPNGPlotter.py +28 -25
  11. CivilTools/FigureGenerator/BasicPltPlotter.py +115 -1
  12. CivilTools/FigureGenerator/SeismicReport/ShearMassRatio.py +73 -0
  13. CivilTools/FigureGenerator/SeismicReport/ShearMoment.py +71 -0
  14. CivilTools/FigureGenerator/SeismicReport/__init__.py +2 -0
  15. CivilTools/FigureGenerator/StairCalculationSheetPNGPlotter.py +2 -8
  16. CivilTools/ReportGenerator/BasicGenerator.py +109 -83
  17. CivilTools/ReportGenerator/DocParagraph.py +3 -5
  18. CivilTools/ReportGenerator/DocPicture.py +7 -8
  19. CivilTools/ReportGenerator/DocTable.py +11 -11
  20. CivilTools/ReportGenerator/SeismicReport.py +302 -143
  21. CivilTools/ReportGenerator/SeismicReportTemplate.py +523 -202
  22. CivilTools/ReportGenerator/StairCalculationReport.py +249 -185
  23. CivilTools/ReportGenerator/UtilFunctions.py +108 -104
  24. CivilTools/ReportGenerator/__init__.py +2 -2
  25. CivilTools/YDBLoader/BuildingDefine/Beam/Beam.py +12 -15
  26. CivilTools/YDBLoader/BuildingDefine/Column/Column.py +5 -5
  27. CivilTools/YDBLoader/BuildingDefine/ComponentType.py +1 -1
  28. CivilTools/YDBLoader/BuildingDefine/Geometry/Grid.py +8 -12
  29. CivilTools/YDBLoader/BuildingDefine/Geometry/Joint.py +11 -10
  30. CivilTools/YDBLoader/BuildingDefine/Geometry/StandFloor.py +1 -1
  31. CivilTools/YDBLoader/BuildingDefine/GlobalResult/BasicResult.py +44 -24
  32. CivilTools/YDBLoader/BuildingDefine/GlobalResult/SeismicResult.py +168 -54
  33. CivilTools/YDBLoader/BuildingDefine/Section/Section.py +26 -31
  34. CivilTools/YDBLoader/BuildingDefine/Section/ShapeEnum.py +9 -9
  35. CivilTools/YDBLoader/BuildingDefine/Slab/Slab.py +1 -1
  36. CivilTools/YDBLoader/BuildingDefine/StairPart/LoadDefine.py +16 -10
  37. CivilTools/YDBLoader/BuildingDefine/StairPart/StairComponent.py +41 -37
  38. CivilTools/YDBLoader/BuildingDefine/StairPart/StairPart.py +133 -78
  39. CivilTools/YDBLoader/SQLiteConnector/Connector.py +16 -8
  40. CivilTools/YDBLoader/SQLiteConnector/RowDataFactory.py +19 -17
  41. CivilTools/YDBLoader/SQLiteConnector/YDBTableName.py +31 -20
  42. CivilTools/YDBLoader/YDBLoader.py +128 -110
  43. {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/METADATA +88 -5
  44. civil_tools_v-0.0.3.dist-info/RECORD +60 -0
  45. {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/WHEEL +1 -1
  46. civil_tools_v-0.0.1.dist-info/RECORD +0 -50
  47. {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/LICENSE +0 -0
  48. {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/top_level.txt +0 -0
@@ -1,216 +1,235 @@
1
- from .BuildingDefine import Beam,Column,Joint,ComponentType,Grid
2
- from .BuildingDefine import SinglePeriod, Period, MassResult,SingleMassResult
3
- from .BuildingDefine import ValuePeer, FloorSeismicResult , SeismicResult
4
- from .BuildingDefine.Section import Section,ShapeEnum
5
- from .SQLiteConnector import Connector,YDBTableName,RowDataFactory
1
+ from .BuildingDefine import Beam, Column, Joint, ComponentType, Grid
2
+ from .BuildingDefine import SinglePeriod, Period, MassResult, SingleMassResult
3
+ from .BuildingDefine import ValuePeer, FloorSeismicResult, SeismicResult
4
+ from .BuildingDefine.Section import Section, ShapeEnum
5
+ from .SQLiteConnector import Connector, YDBTableName, RowDataFactory
6
6
  from .YDBType import YDBType
7
7
  import os
8
8
  from typing import List, Dict
9
9
 
10
+
10
11
  class YDBLoader:
11
12
 
12
- def __init__(self, file_name:str = None, ydb_type:YDBType = None):
13
+ def __init__(self, file_name: str = None, ydb_type: YDBType = None):
13
14
  # default type is ModelType
14
15
  if not file_name.endswith(".ydb"):
15
16
  raise ValueError("Plase use file ends with .ybd!")
16
17
  self.connector = Connector(file_name)
17
18
  self.ydb_type = self.__check_ydb_type()
18
-
19
- def get_columns(self)->List[Column]:
19
+
20
+ def get_columns(self) -> List[Column]:
20
21
  columns = []
21
22
  sections = self.__get_sections(ComponentType.Column)
22
23
  row_data = self.connector.extract_table_by_columns(
23
- YDBTableName.COLUMN_TABLE_NAME,
24
- YDBTableName.COLUMN_TABLE_USEFUL_COLUMNS
25
- )
24
+ YDBTableName.COLUMN_TABLE_NAME, YDBTableName.COLUMN_TABLE_USEFUL_COLUMNS
25
+ )
26
26
  for temp_column in row_data:
27
- temp_col_id = RowDataFactory.extract_int(temp_column,0)
28
- joint_id = RowDataFactory.extract_int(temp_column,1)
29
- sect_id = RowDataFactory.extract_int(temp_column,2)
27
+ temp_col_id = RowDataFactory.extract_int(temp_column, 0)
28
+ joint_id = RowDataFactory.extract_int(temp_column, 1)
29
+ sect_id = RowDataFactory.extract_int(temp_column, 2)
30
30
  joint = self.__find_joint_by_id(joint_id)
31
31
  sect = [s for s in sections if s.id == sect_id][0]
32
- new_column = Column(temp_col_id,joint,sect)
32
+ new_column = Column(temp_col_id, joint, sect)
33
33
  columns.append(new_column)
34
34
  return columns
35
-
36
- def get_beams(self)->List[Beam]:
37
- beams = []
35
+
36
+ def get_beams(self) -> List[Beam]:
37
+ beams = []
38
38
  sections = self.__get_sections(ComponentType.Beam)
39
39
  row_data = self.connector.extract_table_by_columns(
40
- YDBTableName.BEAM_TABLE_NAME,
41
- YDBTableName.BEAM_TABLE_USEFUL_COLUMNS
42
- )
40
+ YDBTableName.BEAM_TABLE_NAME, YDBTableName.BEAM_TABLE_USEFUL_COLUMNS
41
+ )
43
42
  for temp_beam in row_data:
44
- temp_beam_id = RowDataFactory.extract_int(temp_beam,0)
45
- grid_id = RowDataFactory.extract_int(temp_beam,1)
46
- grid = self.__find_grid_by_id(grid_id)
47
- sect_id = RowDataFactory.extract_int(temp_beam,2)
43
+ temp_beam_id = RowDataFactory.extract_int(temp_beam, 0)
44
+ grid_id = RowDataFactory.extract_int(temp_beam, 1)
45
+ grid = self.__find_grid_by_id(grid_id)
46
+ sect_id = RowDataFactory.extract_int(temp_beam, 2)
48
47
  sect = [s for s in sections if s.id == sect_id][0]
49
- new_beam = Beam(temp_beam_id,grid.start_joint,grid.end_joint,sect)
48
+ new_beam = Beam(temp_beam_id, grid.start_joint, grid.end_joint, sect)
50
49
  beams.append(new_beam)
51
50
  return beams
52
51
 
53
- def __get_sections(self,comp_type:ComponentType):
52
+ def __get_sections(self, comp_type: ComponentType):
54
53
  table_name = ""
55
- table_columns = []
54
+ table_columns = []
56
55
  table_names_for_different_comptype = {
57
- ComponentType.Column:
58
- [YDBTableName.COLUMN_SECTION_TABLE_NAME,
59
- YDBTableName.SECTION_TABLE_USEFUL_COLUMNS],
60
- ComponentType.Beam:
61
- [YDBTableName.BEAM_SECTION_TABLE_NAME,
62
- YDBTableName.SECTION_TABLE_USEFUL_COLUMNS],
56
+ ComponentType.Column: [
57
+ YDBTableName.COLUMN_SECTION_TABLE_NAME,
58
+ YDBTableName.SECTION_TABLE_USEFUL_COLUMNS,
59
+ ],
60
+ ComponentType.Beam: [
61
+ YDBTableName.BEAM_SECTION_TABLE_NAME,
62
+ YDBTableName.SECTION_TABLE_USEFUL_COLUMNS,
63
+ ],
63
64
  }
64
- if (comp_type not in table_names_for_different_comptype.keys()):
65
+ if comp_type not in table_names_for_different_comptype.keys():
65
66
  raise ValueError(f"{comp_type.name} is not suppported yet.")
66
67
  # 这里根据不同的构件类型,进行不同的截面数据获取
67
68
  table_name = table_names_for_different_comptype[comp_type][0]
68
69
  table_columns = table_names_for_different_comptype[comp_type][1]
69
- row_data = self.connector.extract_table_by_columns(table_name,table_columns)
70
+ row_data = self.connector.extract_table_by_columns(table_name, table_columns)
70
71
  sections = []
71
72
  for temp_section in row_data:
72
- temp_section_id = RowDataFactory.extract_int(temp_section,0)
73
+ temp_section_id = RowDataFactory.extract_int(temp_section, 0)
73
74
  # 这里的mat暂时没用到
74
- mat = RowDataFactory.extract_int(temp_section,1)
75
- kind = RowDataFactory.extract_int(temp_section,2)
76
- shape_val = RowDataFactory.extract_list(temp_section,3)[1:]
77
- new_section = Section(temp_section_id,ShapeEnum.ConvertToShapeEnum(kind),shape_val,mat)
75
+ mat = RowDataFactory.extract_int(temp_section, 1)
76
+ kind = RowDataFactory.extract_int(temp_section, 2)
77
+ shape_val = RowDataFactory.extract_list(temp_section, 3)[1:]
78
+ new_section = Section(
79
+ temp_section_id, ShapeEnum.ConvertToShapeEnum(kind), shape_val, mat
80
+ )
78
81
  sections.append(new_section)
79
82
  return sections
80
83
 
81
- def __get_joints(self)->Dict[int,Joint]:
82
- if hasattr(self, 'joint_list'):
84
+ def __get_joints(self) -> Dict[int, Joint]:
85
+ if hasattr(self, "joint_list"):
83
86
  return self.joint_list
84
87
  table_name = YDBTableName.JOINT_TABLE_NAME
85
88
  useful_columns = YDBTableName.JOINT_TABLE_USEFUL_COLUMNS
86
- row_data = self.connector.extract_table_by_columns(table_name,useful_columns)
89
+ row_data = self.connector.extract_table_by_columns(table_name, useful_columns)
87
90
  joint_list = {}
88
91
  for temp_joint in row_data:
89
- temp_joint_id = RowDataFactory.extract_int(temp_joint,0)
90
- x = RowDataFactory.extract_float(temp_joint,1)
91
- y = RowDataFactory.extract_float(temp_joint,2)
92
- std_flr_id = RowDataFactory.extract_int(temp_joint,3)
93
- new_joint = Joint(temp_joint_id,x,y,std_flr_id)
92
+ temp_joint_id = RowDataFactory.extract_int(temp_joint, 0)
93
+ x = RowDataFactory.extract_float(temp_joint, 1)
94
+ y = RowDataFactory.extract_float(temp_joint, 2)
95
+ std_flr_id = RowDataFactory.extract_int(temp_joint, 3)
96
+ new_joint = Joint(temp_joint_id, x, y, std_flr_id)
94
97
  joint_list[temp_joint_id] = new_joint
95
98
  self.joint_list = joint_list
96
99
  return self.joint_list
97
100
 
98
- def __get_grids(self)->Dict[int,Grid]:
99
- if hasattr(self, 'grid_list'):
101
+ def __get_grids(self) -> Dict[int, Grid]:
102
+ if hasattr(self, "grid_list"):
100
103
  return self.grid_list
101
104
  table_name = YDBTableName.GRID_TABLE_NAME
102
105
  useful_columns = YDBTableName.GRID_TABLE_USEFUL_COLUMNS
103
- row_data = self.connector.extract_table_by_columns(table_name,useful_columns)
106
+ row_data = self.connector.extract_table_by_columns(table_name, useful_columns)
104
107
  grid_list = {}
105
108
  for temp_grid in row_data:
106
- temp_grid_id = RowDataFactory.extract_int(temp_grid,0)
107
- start_joint_id = RowDataFactory.extract_int(temp_grid,1)
108
- end_joint_id = RowDataFactory.extract_int(temp_grid,2)
109
+ temp_grid_id = RowDataFactory.extract_int(temp_grid, 0)
110
+ start_joint_id = RowDataFactory.extract_int(temp_grid, 1)
111
+ end_joint_id = RowDataFactory.extract_int(temp_grid, 2)
109
112
  s_joint = self.__find_joint_by_id(start_joint_id)
110
113
  e_joint = self.__find_joint_by_id(end_joint_id)
111
- grid = Grid(temp_grid_id,s_joint, e_joint)
114
+ grid = Grid(temp_grid_id, s_joint, e_joint)
112
115
  grid_list[temp_grid_id] = grid
113
116
  self.grid_list = grid_list
114
- return self.grid_list
115
-
116
- def __check_ydb_type(self)->YDBType:
117
+ return self.grid_list
118
+
119
+ def __check_ydb_type(self) -> YDBType:
117
120
  if self.connector.is_table_in_db(YDBTableName.JOINT_TABLE_NAME):
118
121
  return YDBType.ModelYDB
119
122
  if self.connector.is_table_in_db(YDBTableName.RESULT_PERIOD_TABLE):
120
123
  return YDBType.ResultYDB
121
- raise ValueError("This ydb database is not Model YDB neither Result YDB. Please use correct ydb file.")
122
-
123
- def __find_joint_by_id(self,joint_id:int)->Joint:
124
+ raise ValueError(
125
+ "This ydb database is not Model YDB neither Result YDB. Please use correct ydb file."
126
+ )
127
+
128
+ def __find_joint_by_id(self, joint_id: int) -> Joint:
124
129
  joint_list = self.__get_joints()
125
130
  try:
126
131
  return joint_list[joint_id]
127
132
  except KeyError:
128
133
  raise ValueError(f"No Joint's ID is {joint_id}.")
129
-
130
- def __find_grid_by_id(self,grid_id:int)->Grid:
134
+
135
+ def __find_grid_by_id(self, grid_id: int) -> Grid:
131
136
  grid_list = self.__get_grids()
132
137
  try:
133
138
  return grid_list[grid_id]
134
139
  except KeyError:
135
140
  raise ValueError(f"No Joint's ID is {grid_id}.")
136
-
141
+
137
142
  def __check_result_model(self, extracting_data_type):
138
143
  if self.ydb_type != YDBType.ResultYDB:
139
- raise TypeError("This model is not ResultYDB file, "+
140
- f"dont have {extracting_data_type} result, please retry.")
141
-
142
- def get_mass_result(self)->MassResult:
144
+ raise TypeError(
145
+ "This model is not ResultYDB file, "
146
+ + f"dont have {extracting_data_type} result, please retry."
147
+ )
148
+
149
+ def get_mass_result(self) -> MassResult:
143
150
  self.__check_result_model("mass")
144
151
  table_name = YDBTableName.RESULT_MASS_TABLE
145
152
  useful_columns = YDBTableName.RESULT_MASS_USEFUL_COLUMNS
146
- row_data = self.connector.extract_table_by_columns(table_name,useful_columns)
153
+ row_data = self.connector.extract_table_by_columns(table_name, useful_columns)
147
154
  mass_list = []
148
155
  for temp_mass in row_data:
149
- floor_num = RowDataFactory.convert_to_int(temp_mass,0)
150
- tower_num = RowDataFactory.convert_to_int(temp_mass,1)
151
- mass_info = RowDataFactory.extract_list(temp_mass,2)
156
+ floor_num = RowDataFactory.convert_to_int(temp_mass[0])
157
+ tower_num = RowDataFactory.convert_to_int(temp_mass[1])
158
+ mass_info = RowDataFactory.extract_list(temp_mass, 2)
152
159
  dead_load = RowDataFactory.convert_to_float(mass_info[1])
153
160
  live_load = RowDataFactory.convert_to_float(mass_info[2])
154
161
  # TODO: 需要计算slab的结果
155
162
  slab_area = 10
156
- single_mass = SingleMassResult(floor_num,tower_num,dead_load,live_load,slab_area)
157
- mass_list.append(single_mass)
163
+ single_mass = SingleMassResult(
164
+ floor_num, tower_num, dead_load, live_load, slab_area
165
+ )
166
+ mass_list.append(single_mass)
158
167
  return MassResult(mass_list)
159
-
160
- def get_period_result(self)->Period:
168
+
169
+ def get_period_result(self) -> Period:
161
170
  self.__check_result_model("period")
162
171
  table_name = YDBTableName.RESULT_PERIOD_TABLE
163
172
  useful_columns = YDBTableName.RESULT_PERIOD_USEFUL_COLUMNS
164
- row_data = self.connector.extract_table_by_columns(table_name,useful_columns)
173
+ row_data = self.connector.extract_table_by_columns(table_name, useful_columns)
165
174
  periods = []
166
175
  for temp_period in row_data:
167
- module_id = RowDataFactory.extract_int(temp_period,0)
168
- if module_id !=1:
176
+ module_id = RowDataFactory.extract_int(temp_period, 0)
177
+ if module_id != 1:
169
178
  continue
170
- period_index = RowDataFactory.extract_int(temp_period,1)
171
- time = RowDataFactory.extract_float(temp_period,2)
172
- angle = RowDataFactory.extract_float(temp_period,3)
173
- coeff = RowDataFactory.extract_list(temp_period,4)
174
- mass_participate = RowDataFactory.extract_list(temp_period,5)
175
- period = SinglePeriod(period_index,time,angle
176
- ,RowDataFactory.convert_to_float(coeff[1])
177
- ,RowDataFactory.convert_to_float(coeff[2])
178
- ,RowDataFactory.convert_to_float(coeff[-1])
179
- ,RowDataFactory.convert_to_float(mass_participate[1])
180
- ,RowDataFactory.convert_to_float(mass_participate[2])
181
- ,RowDataFactory.convert_to_float(mass_participate[-1])
182
- )
179
+ period_index = RowDataFactory.extract_int(temp_period, 1)
180
+ time = RowDataFactory.extract_float(temp_period, 2)
181
+ angle = RowDataFactory.extract_float(temp_period, 3)
182
+ coeff = RowDataFactory.extract_list(temp_period, 4)
183
+ mass_participate = RowDataFactory.extract_list(temp_period, 5)
184
+ period = SinglePeriod(
185
+ period_index,
186
+ time,
187
+ angle,
188
+ RowDataFactory.convert_to_float(coeff[1]),
189
+ RowDataFactory.convert_to_float(coeff[2]),
190
+ RowDataFactory.convert_to_float(coeff[-1]),
191
+ RowDataFactory.convert_to_float(mass_participate[1]),
192
+ RowDataFactory.convert_to_float(mass_participate[2]),
193
+ RowDataFactory.convert_to_float(mass_participate[-1]),
194
+ )
183
195
  periods.append(period)
184
196
  return Period(periods)
185
197
 
186
- def get_seismic_result(self)->SeismicResult:
198
+ def get_seismic_result(self) -> SeismicResult:
187
199
  self.__check_result_model("seismic")
188
200
  table_name = YDBTableName.RESULT_FLOOR_DATA_TABLE
189
201
  useful_columns = YDBTableName.RESULT_FLOOR_DATA_USEFUL_COLUMNS_SEISMIC
190
- row_data = self.connector.extract_table_by_columns(table_name,useful_columns)
202
+ row_data = self.connector.extract_table_by_columns(table_name, useful_columns)
191
203
  floor_result_list = []
192
204
  for temp_floor in row_data:
193
- floor_num = RowDataFactory.extract_int(temp_floor,0)
194
- tower_num = RowDataFactory.extract_int(temp_floor,1)
205
+ floor_num = RowDataFactory.extract_int(temp_floor, 0)
206
+ tower_num = RowDataFactory.extract_int(temp_floor, 1)
195
207
  force_x = RowDataFactory.convert_to_float(
196
- RowDataFactory.extract_list(temp_floor,2)[1])
208
+ RowDataFactory.extract_list(temp_floor, 2)[1]
209
+ )
197
210
  force_y = RowDataFactory.convert_to_float(
198
- RowDataFactory.extract_list(temp_floor,3)[1])
211
+ RowDataFactory.extract_list(temp_floor, 3)[1]
212
+ )
199
213
  shear_x = RowDataFactory.convert_to_float(
200
- RowDataFactory.extract_list(temp_floor,4)[1])
214
+ RowDataFactory.extract_list(temp_floor, 4)[1]
215
+ )
201
216
  shear_y = RowDataFactory.convert_to_float(
202
- RowDataFactory.extract_list(temp_floor,5)[1])
217
+ RowDataFactory.extract_list(temp_floor, 5)[1]
218
+ )
203
219
  moment_x = RowDataFactory.convert_to_float(
204
- RowDataFactory.extract_list(temp_floor,6)[1])
220
+ RowDataFactory.extract_list(temp_floor, 6)[1]
221
+ )
205
222
  moment_y = RowDataFactory.convert_to_float(
206
- RowDataFactory.extract_list(temp_floor,7)[1])
207
- force = ValuePeer(force_x,force_y)
223
+ RowDataFactory.extract_list(temp_floor, 7)[1]
224
+ )
225
+ force = ValuePeer(force_x, force_y)
208
226
  shear = ValuePeer(shear_x, shear_y)
209
- moment = ValuePeer(moment_x,moment_y)
210
-
211
- temp_floor_result = FloorSeismicResult(floor_num,tower_num,force,shear,moment)
227
+ moment = ValuePeer(moment_x, moment_y)
228
+ temp_floor_result = FloorSeismicResult(
229
+ floor_num, tower_num, force, shear, moment
230
+ )
212
231
  floor_result_list.append(temp_floor_result)
213
-
232
+
214
233
  return SeismicResult(floor_result_list)
215
234
 
216
235
 
@@ -220,5 +239,4 @@ if __name__ == "__main__":
220
239
  columns = loader.get_columns()
221
240
 
222
241
  for col in columns:
223
- print(col.section,col.joint)
224
-
242
+ print(col.section, col.joint)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: civil_tools_v
3
- Version: 0.0.1
3
+ Version: 0.0.3
4
4
  Summary: A powerful tool for civil engineer in their work.
5
5
  Home-page: https://github.com/VincentXGao/civil-tools
6
6
  Author: Xinyu Gao (Vincent)
@@ -14,6 +14,7 @@ License-File: LICENSE
14
14
  Requires-Dist: numpy>=2.0
15
15
  Requires-Dist: python-docx>=1.0
16
16
  Requires-Dist: matplotlib>=3.10.0
17
+ Requires-Dist: ezdxf==1.4.0
17
18
  Dynamic: author
18
19
  Dynamic: author-email
19
20
  Dynamic: classifier
@@ -28,9 +29,12 @@ Dynamic: summary
28
29
 
29
30
  这是一个针对结构工程师开发的,集成了模型设计、结果分析、绘制图纸、出具计算书等多个模块的工具包。
30
31
 
31
- 这是一个用于加载 YJK 软件中,以`.ydb`结尾的数据库文件的 Python 库,可以加载的文件包括 `dtlmodel.ydb`(基础建模数据库)和`dsnModel.ydb`(计算结果数据库)。
32
+ 具体包含:
32
33
 
33
- A python package to load `.ydb` files created by YJK, including `dtlmodel.ydb` (which contains the basic building information), and `dsnModel.ydb` (which conatins the calculate result of the model).
34
+ - [YDB 数据库加载工具](#YDBLoader) ( `YDBLoader` )
35
+ - [各类图纸绘制工具](#DXFGenerator) ( `DXFGenerator` )
36
+ - [各类报告计算书生成工具](#ReportGenerator) ( `ReportGenerator` )
37
+ - [各类数据图片绘制工具](#FigureGenerator) ( `FigureGenerator` )
34
38
 
35
39
  ## 安装: Installation
36
40
 
@@ -38,12 +42,24 @@ A python package to load `.ydb` files created by YJK, including `dtlmodel.ydb` (
38
42
 
39
43
  The latest stable release (and required dependencies) can be installed from PyPI:
40
44
 
45
+ <strong>注意:</strong> pip 时使用的模块的名字是 <strong>civil-tools-v </strong>!
46
+ <br>
47
+ <strong>Notice:</strong> The module name for pip is <strong>civil-tools-v</strong> !
48
+
41
49
  ```shell
42
- pip install yjk-db-load
50
+ pip install civil-tools-v
43
51
  ```
44
52
 
53
+ <a id="YDBLoader"></a>
54
+
45
55
  ## 快速上手: Quick Start
46
56
 
57
+ ### YDB 数据库加载工具 ( `YDBLoader` )
58
+
59
+ 这是一个用于加载 YJK 软件中,以`.ydb`结尾的数据库文件的 Python 库,可以加载的文件包括 `dtlmodel.ydb`(基础建模数据库)和`dsnModel.ydb`(计算结果数据库)。
60
+
61
+ A python package to load `.ydb` files created by YJK, including `dtlmodel.ydb` (which contains the basic building information), and `dsnModel.ydb` (which conatins the calculate result of the model).
62
+
47
63
  你可以轻易地从`.ydb`文件中提取出你想要的数据:
48
64
 
49
65
  You can eaily extract the data you want from `.ydb` files:
@@ -51,7 +67,7 @@ You can eaily extract the data you want from `.ydb` files:
51
67
  ```python
52
68
  # 导入本模块
53
69
  # import this lib
54
- from YDBLoader import YDBLoader
70
+ from CivilTools.YDBLoader import YDBLoader
55
71
 
56
72
  # 定义你的.ydb文件路径
57
73
  # define your .ydb file path
@@ -87,6 +103,73 @@ Joint(id:1013):[x:27054.9286,y:9061.9286]:stdFlrId:1001
87
103
  Joint(id:1014):[x:27054.9286,y:18061.9286]:stdFlrId:1001
88
104
  ```
89
105
 
106
+ <a id="DXFGenerator"></a>
107
+
108
+ ### 各类图纸绘制工具 ( `DXFGenerator` )
109
+
110
+ 这是一个用于绘制各类结构相关图纸的工具,包括各类节点详图、大样,甚至整层楼的模板图等等。
111
+
112
+ This is a tool used to draw various structural related drawings, including detailed drawings, large samples, and even template drawings of the entire floor.
113
+
114
+ 你可以轻易地从`CivilTools.DXFGenerator`中导出并使用它:
115
+
116
+ ```python
117
+ from CivilTools.DXFGenerator import FloorHeightTableDXF
118
+
119
+ dxf = FloorHeightTableDXF(10,2,-500)
120
+
121
+ dxf.font_size = 400
122
+ dxf.set_table_title("XXX项目X号楼")
123
+ dxf.set_embeding_floor("F3")
124
+ dxf.export_dxf("test.dxf")
125
+ dxf
126
+ ```
127
+
128
+ 如果你在 Jupyter 中运行,则会看到如下的渲染示意图。可以看到层高表被自动生成出来,包括嵌固层等信息。与此同时,相应的 dxf 也已经保存在当前目录下的 test.dxf 文件中。
129
+
130
+ If you run it in Jupyter, you will see the following rendering diagram. The floor height table is automatically generated, including information such as the embedded floor. At the same time, the corresponding DXF has also been saved in the test.dxf file in the current directory.
131
+
132
+ ![alt text](readme_asset/image.png)
133
+
134
+ <a id="ReportGenerator"></a>
135
+
136
+ ### 各类报告计算书生成工具 ( `ReportGenerator` )
137
+
138
+ 这是一个用于生成各类文本的工具,目前包括:
139
+
140
+ - 抗震审查报告(根据 YJK 计算结果生成)
141
+ - 混凝土板式楼梯计算书
142
+
143
+ 你可以轻易地从`CivilTools.ReportGenerator`中导出并使用它:
144
+
145
+ ```python
146
+ from CivilTools.ReportGenerator import SeismicReport
147
+
148
+ report = SeismicReport()
149
+ report.creat_doc()
150
+ report.save("seismic_review_report.docx")
151
+
152
+ ```
153
+
154
+ ```python
155
+ from CivilTools.ReportGenerator import StairCalculationReport
156
+
157
+ report = StairCalculationReport()
158
+ report.set_stair_data()
159
+ report.set_calculate_info()
160
+ report.create()
161
+ report.save("stair_calculation_sheet.docx")
162
+
163
+ ```
164
+
165
+ 目前版本中的内容仍待持续完善...
166
+
167
+ <a id="FigureGenerator"></a>
168
+
169
+ ### 各类数据图片绘制工具 ( `FigureGenerator` )
170
+
171
+ 这是一个用于绘制各类图标的工具,完善中...
172
+
90
173
  ## Others
91
174
 
92
175
  我将持续更新,并且尽快完善本 python 库,如果你有任何问题或者建议,请随时通过邮箱联系我:`just_gxy@163.com`.
@@ -0,0 +1,60 @@
1
+ CivilTools/__init__.py,sha256=-wp56jTtm8saVtMIQvuSDDtuYuXPMbO6XlgUxIOPirY,69
2
+ CivilTools/Const/CAD.py,sha256=NE5ceXZa2mKpL-OkDAPOA0ynSLJ1ipX3SLy0kwtmC3I,37
3
+ CivilTools/Const/Concrete.py,sha256=Ob5orPLYa0lgCuKcQbILPByYidQWeuiQ2udWVJWrXZ8,3183
4
+ CivilTools/Const/Steel.py,sha256=VevShJZu6P_9fvIJQQMugQMUdk-SEEIdtDIXzI9vKAY,621
5
+ CivilTools/Const/__init__.py,sha256=J0YTsXeBFqE0XtZEPWVh9KVAOOlmpo-k1sOVfMdYjw8,112
6
+ CivilTools/DXFGenerator/BasicDXF.py,sha256=3cKatghvTXhrNXMly8FI-PbcVZoncwa3thMjSRh4UkM,9125
7
+ CivilTools/DXFGenerator/DetailDXF.py,sha256=f9iy7S9x0SbgPyh_1e-8_puuWUdUJ6tFmzPrSeyPpPk,11449
8
+ CivilTools/DXFGenerator/DrawingAttribs.py,sha256=F3CElw80JVKxh9zYMAeQDKJSsmq-GRq9MAX9coSSUTk,1280
9
+ CivilTools/DXFGenerator/LayerManager.py,sha256=_FelBJNUsnDn66ZdVqBdnfYHvQ7roAO6irgFf2mDkjQ,664
10
+ CivilTools/DXFGenerator/__init__.py,sha256=0jtyx5QnPbhauFfgjj4I5uqCwTy-nSuKtT-tbyEUiwQ,147
11
+ CivilTools/FigureGenerator/BasicPNGPlotter.py,sha256=7PjRuArFc4y-NYy6WQCyfkpCahVCwtipJYEKk1My1D4,1982
12
+ CivilTools/FigureGenerator/BasicPltPlotter.py,sha256=DNuBgg5qwi0kbttrNLcnAr1G1rYNunNCOaLwc5_8dzk,4002
13
+ CivilTools/FigureGenerator/StairCalculationSheetPNGPlotter.py,sha256=iVOEY3MXu7x9D1d3W6fofPCUOHaR06lT9CsssNGqeBI,200
14
+ CivilTools/FigureGenerator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ CivilTools/FigureGenerator/SeismicReport/ShearMassRatio.py,sha256=XpmPA9PeRED4Xzl_5LgJVgm9jEHuTda2GAFs5zMfVP8,2731
16
+ CivilTools/FigureGenerator/SeismicReport/ShearMoment.py,sha256=dYa4SK20u6MJXDsLAkpGk8t2U2tu3bEmBheu5D5nHek,2660
17
+ CivilTools/FigureGenerator/SeismicReport/__init__.py,sha256=W4yE7-BWQ1aiG-_oR7A08L6TtpIA-dlebtuGpU2-uOM,96
18
+ CivilTools/ReportGenerator/BasicGenerator.py,sha256=h5FDZvk0X0BozZrLFWxdvcUd2JjERIVUauTscdpi8zw,11329
19
+ CivilTools/ReportGenerator/DocParagraph.py,sha256=xJ9VWbi3IFu5nwJAS56ooQ49bCk4EBvme6IaY46DRP4,428
20
+ CivilTools/ReportGenerator/DocPicture.py,sha256=9bJ6Zjw7Z6yB_h_H1_2wL9KZxA14zW-jmsKb_EEGxAc,246
21
+ CivilTools/ReportGenerator/DocTable.py,sha256=4RHti5oKVSAaZeZ3CL67thYHW8t42ezPeqBNK073rM0,1622
22
+ CivilTools/ReportGenerator/SeismicReport.py,sha256=ETUjTQZsInFCzW5Cjgt-UGul4tVN4ZiXQv0Xda6sDDo,15455
23
+ CivilTools/ReportGenerator/SeismicReportTemplate.py,sha256=TxgRBCT0vW25AMYvuAtrV0wFUyimAKMMn3KhzGZHJRQ,22104
24
+ CivilTools/ReportGenerator/StairCalculationReport.py,sha256=gr2fafvYjTJCM4_JIiE9G5xbiy4W30TfmEjj3DW882Q,21566
25
+ CivilTools/ReportGenerator/UtilFunctions.py,sha256=7qvAsZvoJN9pakENjBMYhrqP73xj5T4FuhSHa1t8lSA,9398
26
+ CivilTools/ReportGenerator/__init__.py,sha256=1FVcNtNFstmE8zEFABs9oVw7rHiulvUKx0tD1GNFJ58,332
27
+ CivilTools/YDBLoader/YDBLoader.py,sha256=2lwJn1oEU_aHWPbOu6pGZbJqpZLdEoTFqSjeZ4jE7fM,11109
28
+ CivilTools/YDBLoader/YDBType.py,sha256=KVk_qpOwp4yAsHn96L5PAVTMMO8SU4lFOnnTMsH_qP0,109
29
+ CivilTools/YDBLoader/__init__.py,sha256=dOomroeul9yiQQ3FZQVhnfYav43sDv1hUltoA0BrmLw,144
30
+ CivilTools/YDBLoader/BuildingDefine/ComponentType.py,sha256=soUKmSeeY6dCO4IMrLuaF3GcOj8HgzeCQOtudTSqhno,146
31
+ CivilTools/YDBLoader/BuildingDefine/__init__.py,sha256=er4GVwvtqOI0G-vzARApPVkS1ntbUiA2d5oa8BsBTq0,343
32
+ CivilTools/YDBLoader/BuildingDefine/Beam/Beam.py,sha256=h84shEe7Pg8k32-2ifgpKg8IqNDKxb58kKdsMflistg,673
33
+ CivilTools/YDBLoader/BuildingDefine/Beam/__init__.py,sha256=3H9M7yiiio2q4SfdfUv2I2uhokFZv_IOkivE1PRWXus,24
34
+ CivilTools/YDBLoader/BuildingDefine/Column/Column.py,sha256=Sqt_IiaiAgsDTR-TLF3bGiJ4KvFsFW0y7RlXCVqkEi0,423
35
+ CivilTools/YDBLoader/BuildingDefine/Column/__init__.py,sha256=6G4HGDhnwPdYq2FKQeDZsECwjVffeKAbdzhvFTxiBbQ,26
36
+ CivilTools/YDBLoader/BuildingDefine/Geometry/Grid.py,sha256=BVhmbu8DndZYprVATKp7bUCsT3SSWpwN0CC0kNQBfWo,557
37
+ CivilTools/YDBLoader/BuildingDefine/Geometry/Joint.py,sha256=MjJ2CkNOgnQYCbmOeauiwW63ooHwHZlGzib1v2nPnE0,725
38
+ CivilTools/YDBLoader/BuildingDefine/Geometry/StandFloor.py,sha256=lxh5l_H9dl4udvt0zjsWVkF1JLgURC5dfisfEenHnrY,29
39
+ CivilTools/YDBLoader/BuildingDefine/Geometry/__init__.py,sha256=8eX2KQlOvtqnJqZ8QTc8HTCEuTv6xk1JeIeFdBoGpYQ,86
40
+ CivilTools/YDBLoader/BuildingDefine/GlobalResult/BasicResult.py,sha256=5M6Y0k1pvrsC9HskmPkMvEbsIESbRkjMNUttU1Y5JBc,1817
41
+ CivilTools/YDBLoader/BuildingDefine/GlobalResult/SeismicResult.py,sha256=KoaQmF57_C2-EjVxYr1uu8ZVy_F_Ih-7yeYckkDvhYo,6825
42
+ CivilTools/YDBLoader/BuildingDefine/GlobalResult/__init__.py,sha256=cquJ_qevVkhpHRKKNJl8g_3WlmOhvejV4HthYhO0ZZI,150
43
+ CivilTools/YDBLoader/BuildingDefine/Section/Section.py,sha256=wFWHKbrf1VUeCM2fVbrCDERGvcaTqE6gmLiV2RO7cNs,1644
44
+ CivilTools/YDBLoader/BuildingDefine/Section/ShapeEnum.py,sha256=hTHx2wnNp1hMhRDM5upxxhgTpYGFF23rolfPpUcJFiI,856
45
+ CivilTools/YDBLoader/BuildingDefine/Section/__init__.py,sha256=lX7D2FvzQzzZ7B6F4MnXGpAxcwbyVdJreBOZMRmsQmQ,64
46
+ CivilTools/YDBLoader/BuildingDefine/Slab/Slab.py,sha256=IIeqSlPiXJHKRHtNsVYV8pNEhnkfgzKWwBuhYuEsJyg,23
47
+ CivilTools/YDBLoader/BuildingDefine/Slab/__init__.py,sha256=8hlak8vB7Ib_F7pvtCgWXHRfM8O8OLtWlBkpxohcbgY,22
48
+ CivilTools/YDBLoader/BuildingDefine/StairPart/LoadDefine.py,sha256=DYYjAlndN5J--d7vDD_-2Eq57WlRHi-NTjBQ9qgwtag,964
49
+ CivilTools/YDBLoader/BuildingDefine/StairPart/StairComponent.py,sha256=E0VL9c0WC9CPVsf3ByXn49SExx6GKFalHRauhkawaLE,3066
50
+ CivilTools/YDBLoader/BuildingDefine/StairPart/StairPart.py,sha256=0HLLcQbjOECbWHPKtci4mNOWv7CcgO4UVrtUyPwfeQw,8537
51
+ CivilTools/YDBLoader/BuildingDefine/StairPart/__init__.py,sha256=Z7tqd0HHG_Wg1qFTt4kiJxofz08DLBnTywpY5vtJmZk,145
52
+ CivilTools/YDBLoader/SQLiteConnector/Connector.py,sha256=TWr8SNdYrL3WqMVC3NqLfk6JwZmEEGNwGkEKCeeQbYM,2882
53
+ CivilTools/YDBLoader/SQLiteConnector/RowDataFactory.py,sha256=CRStFrV9ac2bi_R1CB6LW4_MrXhMtfyOFWgrT31PkI4,1537
54
+ CivilTools/YDBLoader/SQLiteConnector/YDBTableName.py,sha256=X71ka_a4CU39_r6_jtW2BO9nQe_wiequ4ELE77rvfVA,2614
55
+ CivilTools/YDBLoader/SQLiteConnector/__init__.py,sha256=0WWCCdLvlX0Rp-CjcVQc9oQ2b770Zd5TcMGxWBtToS4,116
56
+ civil_tools_v-0.0.3.dist-info/LICENSE,sha256=nq3TNN3UrfULANUGIRvaZAI1jUn6HlYeLxIRjJvDxCc,1088
57
+ civil_tools_v-0.0.3.dist-info/METADATA,sha256=KepJhL96WNYk3DIcl27ThIj0iBJFUwud1L5obualo08,6184
58
+ civil_tools_v-0.0.3.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
59
+ civil_tools_v-0.0.3.dist-info/top_level.txt,sha256=AP0ng4FJ3z78LnGOjUzZaGRMMp-lDtw91Rlia8z--wM,11
60
+ civil_tools_v-0.0.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,50 +0,0 @@
1
- CivilTools/__init__.py,sha256=-wp56jTtm8saVtMIQvuSDDtuYuXPMbO6XlgUxIOPirY,69
2
- CivilTools/DXFGenerator/BasicDXF.py,sha256=DxHqwnEe_j9zLlRKI9Uhl_munF1BZV-ZqVZSfR79j7o,27
3
- CivilTools/DXFGenerator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- CivilTools/FigureGenerator/BasicPNGPlotter.py,sha256=lwqmxzfLyMRqgWCqp-RtEek1PuhousF1IqOyiaMBOH4,1949
5
- CivilTools/FigureGenerator/BasicPltPlotter.py,sha256=zJ4sJqHTgj-6_TPVNOLGaitcqSdk7b4QARAvPKNJWKs,34
6
- CivilTools/FigureGenerator/StairCalculationSheetPNGPlotter.py,sha256=Ljg3jD2J15gatEzJNS0ZnQS--BiH0mt79CkTawhMNKw,230
7
- CivilTools/FigureGenerator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- CivilTools/ReportGenerator/BasicGenerator.py,sha256=VUrqKwTEKcYG3bIoOUZI3jNwji4s-Ju93CQVJ8TzCtI,10844
9
- CivilTools/ReportGenerator/DocParagraph.py,sha256=7SKWuTfYXax22e6EcOYTBQEhDDzu4HXVutTJqfuGaQY,433
10
- CivilTools/ReportGenerator/DocPicture.py,sha256=I2bQyjbPF7twJ5qiIYkyEkCHS6bAQcVUkO6BG6Yduro,174
11
- CivilTools/ReportGenerator/DocTable.py,sha256=1j7dJpeeNE_YdwUy7NZ-TgPUKQFwJoQJNPr4M5-gekM,1618
12
- CivilTools/ReportGenerator/SeismicReport.py,sha256=h_Xk1xiPJcdGXdQyCA5GsmehqBn_BbWOUEQVqyeoHsk,8530
13
- CivilTools/ReportGenerator/SeismicReportTemplate.py,sha256=aYaKsT_DHvXXPGjVVcW5YbGaWbzLSUwMKbPTBwPc2no,12792
14
- CivilTools/ReportGenerator/StairCalculationReport.py,sha256=tJOHYWpBJ2Ih1fHZin4-UV1mmv4qanCyWKs8BPvzMP0,20872
15
- CivilTools/ReportGenerator/UtilFunctions.py,sha256=GZ2DGDFqkIO3QPIBbSx2g1NMNRgIGXmRLbBhCkQ7kro,9320
16
- CivilTools/ReportGenerator/__init__.py,sha256=0m3P_xiVj5BIIgmxF1QiqXcPq1l3YiL9OyegrYWQMrs,311
17
- CivilTools/YDBLoader/YDBLoader.py,sha256=rxLPSiSh0I2qvznNaqFF7JgYA2YfHxxNcixzQUQyiuU,10956
18
- CivilTools/YDBLoader/YDBType.py,sha256=KVk_qpOwp4yAsHn96L5PAVTMMO8SU4lFOnnTMsH_qP0,109
19
- CivilTools/YDBLoader/__init__.py,sha256=dOomroeul9yiQQ3FZQVhnfYav43sDv1hUltoA0BrmLw,144
20
- CivilTools/YDBLoader/BuildingDefine/ComponentType.py,sha256=v7OeKx8I905EOxg7XPbqYklUsj8bcmPC1oRkQNs6Byo,148
21
- CivilTools/YDBLoader/BuildingDefine/__init__.py,sha256=er4GVwvtqOI0G-vzARApPVkS1ntbUiA2d5oa8BsBTq0,343
22
- CivilTools/YDBLoader/BuildingDefine/Beam/Beam.py,sha256=0FZYNQknmSp1S3370zDM_0ZBjjH7RaRZ-QlPxt6Jnbk,706
23
- CivilTools/YDBLoader/BuildingDefine/Beam/__init__.py,sha256=3H9M7yiiio2q4SfdfUv2I2uhokFZv_IOkivE1PRWXus,24
24
- CivilTools/YDBLoader/BuildingDefine/Column/Column.py,sha256=WOL-Jcx-yQcbEC2tSFsW_xxgx_HRsFIB0EYYWESt9w4,422
25
- CivilTools/YDBLoader/BuildingDefine/Column/__init__.py,sha256=6G4HGDhnwPdYq2FKQeDZsECwjVffeKAbdzhvFTxiBbQ,26
26
- CivilTools/YDBLoader/BuildingDefine/Geometry/Grid.py,sha256=5ft4XfuH1QZzUPFRpiQNMIQw9zFBddn_W7RpNb0azSw,597
27
- CivilTools/YDBLoader/BuildingDefine/Geometry/Joint.py,sha256=XGX4GJqZD0mR0yStgU0wS1g4_wdgg297BFkmlU9V3ds,722
28
- CivilTools/YDBLoader/BuildingDefine/Geometry/StandFloor.py,sha256=NUuWfGrS8hU5u7Aazv-1Fy2YS5P5bt0_h_yvl8G6diI,27
29
- CivilTools/YDBLoader/BuildingDefine/Geometry/__init__.py,sha256=8eX2KQlOvtqnJqZ8QTc8HTCEuTv6xk1JeIeFdBoGpYQ,86
30
- CivilTools/YDBLoader/BuildingDefine/GlobalResult/BasicResult.py,sha256=w6c2LCLCd9D6JFcgJ9h9_DySX6LOx6CHH1AR4VfkeCo,1258
31
- CivilTools/YDBLoader/BuildingDefine/GlobalResult/SeismicResult.py,sha256=Q8twG9tWJfdrYwVF77IxhT5xXOeFNvPrWCFaZkY_MUk,3897
32
- CivilTools/YDBLoader/BuildingDefine/GlobalResult/__init__.py,sha256=cquJ_qevVkhpHRKKNJl8g_3WlmOhvejV4HthYhO0ZZI,150
33
- CivilTools/YDBLoader/BuildingDefine/Section/Section.py,sha256=J-YfgKvxNkARLMTTJ3ixHTzbuls01Cj0Xzwg0_yG68M,1755
34
- CivilTools/YDBLoader/BuildingDefine/Section/ShapeEnum.py,sha256=eAuUumEcha2WSoSEFXGkkYLKl7J52wj_fdWBX8ta3yU,857
35
- CivilTools/YDBLoader/BuildingDefine/Section/__init__.py,sha256=lX7D2FvzQzzZ7B6F4MnXGpAxcwbyVdJreBOZMRmsQmQ,64
36
- CivilTools/YDBLoader/BuildingDefine/Slab/Slab.py,sha256=fezhh-bCj3nmg9IXTo-sCjOYWkSxwucrmrcQzZxYxSE,21
37
- CivilTools/YDBLoader/BuildingDefine/Slab/__init__.py,sha256=8hlak8vB7Ib_F7pvtCgWXHRfM8O8OLtWlBkpxohcbgY,22
38
- CivilTools/YDBLoader/BuildingDefine/StairPart/LoadDefine.py,sha256=ws-OkRLw5TmW9zFfo0LvEhfRXSo5SWlzpMd3cQc97H8,946
39
- CivilTools/YDBLoader/BuildingDefine/StairPart/StairComponent.py,sha256=KO6gPprFSrQSYLoFnkhNwq9RxILdyCGNajvuPrCJ2KE,3047
40
- CivilTools/YDBLoader/BuildingDefine/StairPart/StairPart.py,sha256=dNDadePzxI3jIekU5B7LIKwi85QQyfjROQ5Ov_5iDeQ,7717
41
- CivilTools/YDBLoader/BuildingDefine/StairPart/__init__.py,sha256=Z7tqd0HHG_Wg1qFTt4kiJxofz08DLBnTywpY5vtJmZk,145
42
- CivilTools/YDBLoader/SQLiteConnector/Connector.py,sha256=Hq3sdiv7OsydgBgcZKCDrDWHFIF673UpjNCAPjRFmZM,2787
43
- CivilTools/YDBLoader/SQLiteConnector/RowDataFactory.py,sha256=ZLrGk1rc13wPPkeIWJ5R6z8onwUegKBl8MgTQAq2Cyw,1519
44
- CivilTools/YDBLoader/SQLiteConnector/YDBTableName.py,sha256=x-v5rUoWKIwDJ5dMqxjf-7ZrBe8GimdAFNvroHiXOZs,2507
45
- CivilTools/YDBLoader/SQLiteConnector/__init__.py,sha256=0WWCCdLvlX0Rp-CjcVQc9oQ2b770Zd5TcMGxWBtToS4,116
46
- civil_tools_v-0.0.1.dist-info/LICENSE,sha256=nq3TNN3UrfULANUGIRvaZAI1jUn6HlYeLxIRjJvDxCc,1088
47
- civil_tools_v-0.0.1.dist-info/METADATA,sha256=9t93iOTPqVwtvwMUfN0M_6mHdG0NxQYEag8zeHvMm3c,3387
48
- civil_tools_v-0.0.1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
49
- civil_tools_v-0.0.1.dist-info/top_level.txt,sha256=AP0ng4FJ3z78LnGOjUzZaGRMMp-lDtw91Rlia8z--wM,11
50
- civil_tools_v-0.0.1.dist-info/RECORD,,