stbkit 0.1.0a9.dev1__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 (125) hide show
  1. stbkit/__main__.py +10 -0
  2. stbkit/api/__init__.py +48 -0
  3. stbkit/api/experimental/__init__.py +19 -0
  4. stbkit/api/experimental/repository/__init__.py +30 -0
  5. stbkit/api/py.typed +0 -0
  6. stbkit/api/stb_latest.py +7 -0
  7. stbkit/api/stb_v2_0_2.py +11 -0
  8. stbkit/api/stb_v2_1_1.py +9 -0
  9. stbkit/cli/__init__.py +17 -0
  10. stbkit/cli/_internal/cli_main.py +114 -0
  11. stbkit/cli/_internal/common.py +126 -0
  12. stbkit/cli/_internal/constants_exit_code.py +59 -0
  13. stbkit/cli/_internal/converter.py +693 -0
  14. stbkit/cli/_internal/diff.py +213 -0
  15. stbkit/cli/_internal/entry_points.py +25 -0
  16. stbkit/cli/_internal/global_parent.py +70 -0
  17. stbkit/cli/_internal/show_versions.py +36 -0
  18. stbkit/cli/_internal/validate.py +310 -0
  19. stbkit/cli/commands/convert.py +16 -0
  20. stbkit/cli/commands/diff.py +16 -0
  21. stbkit/cli/commands/validate.py +16 -0
  22. stbkit/cli/py.typed +0 -0
  23. stbkit/tools/__init__.py +12 -0
  24. stbkit/tools/_internal/__init__.py +5 -0
  25. stbkit/tools/_internal/constants.py +21 -0
  26. stbkit/tools/_internal/data_model/building_geometry.py +1208 -0
  27. stbkit/tools/_internal/data_model/building_geometry_web.py +106 -0
  28. stbkit/tools/_internal/data_model/element_data.py +93 -0
  29. stbkit/tools/_internal/data_model/ifc_data/entity_data.py +67 -0
  30. stbkit/tools/_internal/data_model/ifc_data/entity_names.py +32 -0
  31. stbkit/tools/_internal/data_model/shape_data.py +1089 -0
  32. stbkit/tools/_internal/diff/__init__.py +5 -0
  33. stbkit/tools/_internal/diff/common.py +50 -0
  34. stbkit/tools/_internal/diff/diff_xml.py +796 -0
  35. stbkit/tools/_internal/matrix.py +51 -0
  36. stbkit/tools/_internal/optional_dependencies/__init__.py +5 -0
  37. stbkit/tools/_internal/optional_dependencies/ifc_common.py +28 -0
  38. stbkit/tools/_internal/optional_dependencies/ifc_exporter/ifc_entity_exporter.py +473 -0
  39. stbkit/tools/_internal/optional_dependencies/ifc_exporter/ifc_profile_exporter.py +267 -0
  40. stbkit/tools/_internal/optional_dependencies/ifc_exporter/ifc_representation_exporter.py +178 -0
  41. stbkit/tools/_internal/optional_dependencies/ifc_pipeline.py +133 -0
  42. stbkit/tools/_internal/optional_dependencies/ifc_to_building_geometry.py +64 -0
  43. stbkit/tools/_internal/stb_io.py +116 -0
  44. stbkit/tools/_internal/stb_repair/_common.py +24 -0
  45. stbkit/tools/_internal/stb_repair/_stb_repair.py +197 -0
  46. stbkit/tools/_internal/stb_repair/_stb_v2_0_2_repair.py +53 -0
  47. stbkit/tools/_internal/stb_repair/_stb_v2_1_0_repair.py +109 -0
  48. stbkit/tools/_internal/stb_repair/_stb_v2_1_1_repair.py +109 -0
  49. stbkit/tools/_internal/studio_report.py +49 -0
  50. stbkit/tools/_internal/utils/atomic_writer.py +57 -0
  51. stbkit/tools/_internal/utils/float_rounding.py +49 -0
  52. stbkit/tools/_internal/utils/girder_utils.py +91 -0
  53. stbkit/tools/_internal/utils/guid_utils.py +30 -0
  54. stbkit/tools/_internal/utils/mesh_utils.py +1305 -0
  55. stbkit/tools/_internal/utils/node_utils.py +50 -0
  56. stbkit/tools/_internal/utils/unit_utils.py +23 -0
  57. stbkit/tools/_internal/vectors.py +222 -0
  58. stbkit/tools/converters/__init__.py +39 -0
  59. stbkit/tools/converters/_internal/__init__.py +5 -0
  60. stbkit/tools/converters/_internal/building_geometry_to_ply_text.py +32 -0
  61. stbkit/tools/converters/_internal/coord_converter.py +151 -0
  62. stbkit/tools/converters/_internal/element_data_to_building_geometry.py +549 -0
  63. stbkit/tools/converters/_internal/ifc_to_ply_text.py +21 -0
  64. stbkit/tools/converters/_internal/name_converter.py +23 -0
  65. stbkit/tools/converters/_internal/pipeline/__init__.py +5 -0
  66. stbkit/tools/converters/_internal/pipeline/data.py +188 -0
  67. stbkit/tools/converters/_internal/pipeline/execution.py +569 -0
  68. stbkit/tools/converters/_internal/pipeline/ply_pipeline.py +52 -0
  69. stbkit/tools/converters/_internal/pipeline/stb_pipeline.py +226 -0
  70. stbkit/tools/converters/_internal/pipeline/stb_pipeline_latest.py +39 -0
  71. stbkit/tools/converters/_internal/pipeline/step.py +139 -0
  72. stbkit/tools/converters/_internal/stb_latest_to_element_data/__init__.py +17 -0
  73. stbkit/tools/converters/_internal/stb_latest_to_element_data/_stb_latest_to_element_data.py +186 -0
  74. stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_footing.py +49 -0
  75. stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_line.py +533 -0
  76. stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_pile.py +100 -0
  77. stbkit/tools/converters/_internal/stb_latest_to_element_data/member/member_plane.py +103 -0
  78. stbkit/tools/converters/_internal/stb_latest_to_element_data/open.py +70 -0
  79. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec.py +214 -0
  80. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_beam_rc.py +67 -0
  81. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_beam_s.py +97 -0
  82. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_beam_src.py +28 -0
  83. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_brace_s.py +49 -0
  84. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_cft.py +217 -0
  85. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_rc.py +41 -0
  86. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_s.py +127 -0
  87. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_column_src.py +173 -0
  88. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_foundation.py +225 -0
  89. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_parapet_rc.py +53 -0
  90. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_pile_rc.py +106 -0
  91. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_pile_s.py +100 -0
  92. stbkit/tools/converters/_internal/stb_latest_to_element_data/section/sec_steel.py +432 -0
  93. stbkit/tools/converters/_internal/stb_to_building_geometry.py +44 -0
  94. stbkit/tools/converters/_internal/stb_to_ifc_data/__init__.py +5 -0
  95. stbkit/tools/converters/_internal/stb_to_ifc_data/_stb_to_ifc_data.py +59 -0
  96. stbkit/tools/converters/_internal/stb_to_ifc_data/convert_option.py +22 -0
  97. stbkit/tools/converters/_internal/stb_to_ply_text.py +22 -0
  98. stbkit/tools/py.typed +0 -0
  99. stbkit/tools/upgrade/__init__.py +13 -0
  100. stbkit/tools/upgrade/_internal/__init__.py +5 -0
  101. stbkit/tools/upgrade/_internal/common.py +205 -0
  102. stbkit/tools/upgrade/_internal/upgrade.py +228 -0
  103. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/__init__.py +60 -0
  104. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_common.py +62 -0
  105. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_joint_beam_shape_h.py +44 -0
  106. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_pile_rc.py +101 -0
  107. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_pile_s.py +78 -0
  108. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_slab_deck.py +56 -0
  109. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/hook_sec_slab_rc.py +128 -0
  110. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_girder.py +126 -0
  111. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_open.py +110 -0
  112. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_sec_beam_rc.py +227 -0
  113. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hook_funcs/post_sec_beam_s.py +1153 -0
  114. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/hooks.py +22 -0
  115. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/post.py +42 -0
  116. stbkit/tools/upgrade/_internal/v2_0_2_to_v2_1_0/tables.py +99 -0
  117. stbkit/tools/upgrade/_internal/v2_1_0_to_v2_1_1/__init__.py +58 -0
  118. stbkit/tools/upgrade/_internal/v2_1_0_to_v2_1_1/hooks.py +32 -0
  119. stbkit/tools/upgrade/_internal/v2_1_0_to_v2_1_1/tables.py +56 -0
  120. stbkit-0.1.0a9.dev1.dist-info/METADATA +196 -0
  121. stbkit-0.1.0a9.dev1.dist-info/RECORD +125 -0
  122. stbkit-0.1.0a9.dev1.dist-info/WHEEL +5 -0
  123. stbkit-0.1.0a9.dev1.dist-info/entry_points.txt +2 -0
  124. stbkit-0.1.0a9.dev1.dist-info/licenses/LICENSE +373 -0
  125. stbkit-0.1.0a9.dev1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,101 @@
1
+ # Copyright 2025-2026 TAISEI CORPORATION
2
+ # SPDX-License-Identifier: MPL-2.0
3
+ # This Source Code Form is subject to the terms of the Mozilla Public
4
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+
7
+ from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
8
+ from stbkit.core.data_model.common import StBridgeElement
9
+ from stbkit.core.stb_exceptions import NoneAccessError
10
+ from stbkit.core.stb_reporting import Reporter
11
+
12
+
13
+ def convert_sec_pile_rc(
14
+ v202: stb_v2_0_2.StbSecPileRc, v210: stb_v2_1_0.StbSecPileRc
15
+ ) -> None:
16
+ v202_figure: stb_v2_0_2.StbSecFigurePileRc | None = (
17
+ v202.stb_sec_figure_pile_rc_or_none
18
+ )
19
+ if v202_figure:
20
+ v210_conventional: stb_v2_1_0.StbSecPileRcConventional = (
21
+ stb_v2_1_0.StbSecPileRcConventional(
22
+ strength_concrete=v202.strength_concrete_or_none
23
+ )
24
+ )
25
+ v210.stb_sec_pile_rc_conventional = v210_conventional
26
+ v210_figure: stb_v2_1_0.StbSecFigurePileRcConventional = (
27
+ stb_v2_1_0.StbSecFigurePileRcConventional(
28
+ length_pipe=v202_figure.length_pipe_or_none,
29
+ t_pipe=v202_figure.t_pipe_or_none,
30
+ strength_pipe=v202_figure.strength_pipe_or_none,
31
+ )
32
+ )
33
+ v210_conventional.stb_sec_figure_pile_rc_conventional = v210_figure
34
+ v202_straight: stb_v2_0_2.StbSecPileRcStraight | None = (
35
+ v202_figure.stb_sec_pile_rc_straight_or_none
36
+ )
37
+ if v202_straight:
38
+ v210_straight: stb_v2_1_0.StbSecPileRcConventionalStraight = (
39
+ stb_v2_1_0.StbSecPileRcConventionalStraight(d=v202_straight.d)
40
+ )
41
+ v210_figure.stb_sec_pile_rc_conventional_straight = v210_straight
42
+ v202_extend_foot: stb_v2_0_2.StbSecPileRcExtendedFoot | None = (
43
+ v202_figure.stb_sec_pile_rc_extended_foot_or_none
44
+ )
45
+ if v202_extend_foot:
46
+ v210_extend_foot: stb_v2_1_0.StbSecPileRcConventionalExtendedFoot = stb_v2_1_0.StbSecPileRcConventionalExtendedFoot(
47
+ d_extended_foot=v202_extend_foot.d_extended_foot_or_none,
48
+ d_axial=v202_extend_foot.d_axial_or_none,
49
+ length_extended_foot=v202_extend_foot.length_extended_foot_or_none,
50
+ angle_extended_foot_taper=v202_extend_foot.angle_extended_foot_taper_or_none,
51
+ )
52
+ v210_figure.stb_sec_pile_rc_conventional_extended_foot = v210_extend_foot
53
+ v202_extend_top: stb_v2_0_2.StbSecPileRcExtendedTop | None = (
54
+ v202_figure.stb_sec_pile_rc_extended_top_or_none
55
+ )
56
+ if v202_extend_top:
57
+ v210_extend_top: stb_v2_1_0.StbSecPileRcConventionalExtendedTop = stb_v2_1_0.StbSecPileRcConventionalExtendedTop(
58
+ d_extended_top=v202_extend_top.d_extended_top_or_none,
59
+ d_axial=v202_extend_top.d_axial_or_none,
60
+ angle_extended_top_taper=v202_extend_top.angle_extended_top_taper_or_none,
61
+ )
62
+ v210_figure.stb_sec_pile_rc_conventional_extended_top = v210_extend_top
63
+ v202_extend_top_foot: stb_v2_0_2.StbSecPileRcExtendedTopFoot | None = (
64
+ v202_figure.stb_sec_pile_rc_extended_top_foot_or_none
65
+ )
66
+ if v202_extend_top_foot:
67
+ v210_extend_top_foot: stb_v2_1_0.StbSecPileRcConventionalExtendedTopFoot = stb_v2_1_0.StbSecPileRcConventionalExtendedTopFoot(
68
+ d_extended_top=v202_extend_top_foot.d_extended_top_or_none,
69
+ d_axial=v202_extend_top_foot.d_axial_or_none,
70
+ d_extended_foot=v202_extend_top_foot.d_extended_foot_or_none,
71
+ length_extended_foot=v202_extend_top_foot.length_extended_foot_or_none,
72
+ angle_extended_foot_taper=v202_extend_top_foot.angle_extended_foot_taper_or_none,
73
+ angle_extended_top_taper=v202_extend_top_foot.angle_extended_top_taper_or_none,
74
+ )
75
+ v210_figure.stb_sec_pile_rc_conventional_extended_top_foot = (
76
+ v210_extend_top_foot
77
+ )
78
+
79
+
80
+ def post_sec_pile_rc(v202: stb_v2_0_2.StBridge, v210: stb_v2_1_0.StBridge) -> None:
81
+ try:
82
+ v202_list: list[stb_v2_0_2.StbSecPileRc] = (
83
+ v202.stb_model.stb_sections.stb_sec_pile_rc
84
+ )
85
+ v210_list: list[stb_v2_1_0.StbSecPileRc] = (
86
+ v210.stb_model.stb_sections.stb_sec_pile_rc
87
+ )
88
+ except NoneAccessError:
89
+ return
90
+ for v202_sec_pile, v210_sec_pile in zip(v202_list, v210_list):
91
+ convert_sec_pile_rc(v202_sec_pile, v210_sec_pile)
92
+
93
+
94
+ def sec_pile_rc(
95
+ before: StBridgeElement, after: StBridgeElement, *, reporter: Reporter
96
+ ) -> None:
97
+ if not isinstance(before, stb_v2_0_2.StbSecPileRc) or not isinstance(
98
+ after, stb_v2_1_0.StbSecPileRc
99
+ ):
100
+ return
101
+ convert_sec_pile_rc(before, after)
@@ -0,0 +1,78 @@
1
+ # Copyright 2025-2026 TAISEI CORPORATION
2
+ # SPDX-License-Identifier: MPL-2.0
3
+ # This Source Code Form is subject to the terms of the Mozilla Public
4
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+
7
+ from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
8
+ from stbkit.core.data_model.common import StBridgeElement
9
+ from stbkit.core.stb_exceptions import NoneAccessError
10
+ from stbkit.core.stb_reporting import Reporter
11
+
12
+
13
+ def convert_sec_pile_s(
14
+ v202: stb_v2_0_2.StbSecPileS, v210: stb_v2_1_0.StbSecPileS
15
+ ) -> None:
16
+ v202_figure: stb_v2_0_2.StbSecFigurePileS | None = (
17
+ v202.stb_sec_figure_pile_s_or_none
18
+ )
19
+ if v202_figure:
20
+ v210_conventional: stb_v2_1_0.StbSecPileSConventional = (
21
+ stb_v2_1_0.StbSecPileSConventional()
22
+ )
23
+ v210.stb_sec_pile_s_conventional = v210_conventional
24
+ v210_figure: stb_v2_1_0.StbSecFigurePileS = stb_v2_1_0.StbSecFigurePileS()
25
+ v210_conventional.stb_sec_figure_pile_s = v210_figure
26
+ for v202_straight in v202_figure.stb_sec_pile_s_straight:
27
+ v210_straight = stb_v2_1_0.StbSecPileSStraight(
28
+ id_order=v202_straight.id_order,
29
+ length_pile=v202_straight.length_pile_or_none,
30
+ d=v202_straight.d_or_none,
31
+ t=v202_straight.t_or_none,
32
+ strength=v202_straight.strength_or_none,
33
+ )
34
+ v210_figure.stb_sec_pile_s_straight.append(v210_straight)
35
+ for v202_rotational in v202_figure.stb_sec_pile_s_rotational:
36
+ v210_rotational = stb_v2_1_0.StbSecPileSRotational(
37
+ id_order=v202_rotational.id_order,
38
+ length_pile=v202_rotational.length_pile_or_none,
39
+ d1=v202_rotational.d1_or_none,
40
+ d2=v202_rotational.d2_or_none,
41
+ t=v202_rotational.t_or_none,
42
+ strength=v202_rotational.strength_or_none,
43
+ )
44
+ v210_figure.stb_sec_pile_s_rotational.append(v210_rotational)
45
+ for v202_taper in v202_figure.stb_sec_pile_s_taper:
46
+ v210_taper = stb_v2_1_0.StbSecPileSTaper(
47
+ id_order=v202_taper.id_order,
48
+ length_pile=v202_taper.length_pile_or_none,
49
+ d1=v202_taper.d1_or_none,
50
+ d2=v202_taper.d2_or_none,
51
+ t=v202_taper.t_or_none,
52
+ strength=v202_taper.strength_or_none,
53
+ )
54
+ v210_figure.stb_sec_pile_s_taper.append(v210_taper)
55
+
56
+
57
+ def post_sec_pile_s(v202: stb_v2_0_2.StBridge, v210: stb_v2_1_0.StBridge) -> None:
58
+ try:
59
+ v202_list: list[stb_v2_0_2.StbSecPileS] = (
60
+ v202.stb_model.stb_sections.stb_sec_pile_s
61
+ )
62
+ v210_list: list[stb_v2_1_0.StbSecPileS] = (
63
+ v210.stb_model.stb_sections.stb_sec_pile_s
64
+ )
65
+ except NoneAccessError:
66
+ return
67
+ for v202_sec_pile, v210_sec_pile in zip(v202_list, v210_list):
68
+ convert_sec_pile_s(v202_sec_pile, v210_sec_pile)
69
+
70
+
71
+ def sec_pile_s(
72
+ before: StBridgeElement, after: StBridgeElement, *, reporter: Reporter
73
+ ) -> None:
74
+ if not isinstance(before, stb_v2_0_2.StbSecPileS) or not isinstance(
75
+ after, stb_v2_1_0.StbSecPileS
76
+ ):
77
+ return
78
+ convert_sec_pile_s(before, after)
@@ -0,0 +1,56 @@
1
+ # Copyright 2026 TAISEI CORPORATION
2
+ # SPDX-License-Identifier: MPL-2.0
3
+ # This Source Code Form is subject to the terms of the Mozilla Public
4
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+
7
+ from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
8
+ from stbkit.core.data_model.common import StBridgeElement
9
+ from stbkit.core.stb_exceptions import NoneAccessError
10
+ from stbkit.core.stb_reporting import Code, Phase, Reporter
11
+
12
+ from ....._internal.constants import UNKNOWN_ELEMENT_SIZE_MM
13
+
14
+
15
+ def sec_slab_deck(
16
+ before: StBridgeElement, after: StBridgeElement, *, reporter: Reporter
17
+ ) -> None:
18
+ if not isinstance(before, stb_v2_0_2.StbSecSlabDeck) or not isinstance(
19
+ after, stb_v2_1_0.StbSecSlabDeck
20
+ ):
21
+ return
22
+ use_default_length_by_can_not_calc_flag: bool = False
23
+ use_default_length_by_error_calc_flag: bool = False
24
+ try:
25
+ top_concrete: float = (
26
+ before.stb_sec_figure_slab_deck.stb_sec_slab_deck_straight.depth
27
+ )
28
+ top_concrete -= before.stb_sec_product_slab_deck.depth_deck
29
+ if top_concrete <= 0:
30
+ use_default_length_by_error_calc_flag = True
31
+ except NoneAccessError:
32
+ use_default_length_by_can_not_calc_flag = True
33
+
34
+ for deck_product in after.stb_sec_slab_deck_product:
35
+ deck_product.release_time = "Undefined"
36
+ if use_default_length_by_can_not_calc_flag:
37
+ reporter.warning(
38
+ f"デッキスラブの厚みが算出できなかったため、デフォルト値{UNKNOWN_ELEMENT_SIZE_MM}mmを使用します",
39
+ code=Code.REPAIR_LOG,
40
+ phase=Phase.REPAIR,
41
+ value=str(top_concrete),
42
+ stb_element=deck_product,
43
+ )
44
+ deck_product.top_concrete = UNKNOWN_ELEMENT_SIZE_MM
45
+ elif use_default_length_by_error_calc_flag:
46
+ reporter.warning(
47
+ f"デッキスラブの厚みが0以下となったため、デフォルト値{UNKNOWN_ELEMENT_SIZE_MM}mmを使用します",
48
+ code=Code.REPAIR_LOG,
49
+ phase=Phase.REPAIR,
50
+ value=str(UNKNOWN_ELEMENT_SIZE_MM),
51
+ ref_value=str(top_concrete),
52
+ stb_element=after,
53
+ )
54
+ deck_product.top_concrete = UNKNOWN_ELEMENT_SIZE_MM
55
+ else:
56
+ deck_product.top_concrete = top_concrete
@@ -0,0 +1,128 @@
1
+ # Copyright 2025-2026 TAISEI CORPORATION
2
+ # SPDX-License-Identifier: MPL-2.0
3
+ # This Source Code Form is subject to the terms of the Mozilla Public
4
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+
7
+ from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
8
+ from stbkit.core.data_model.common import StBridgeElement
9
+ from stbkit.core.stb_reporting import Code, Phase, Reporter
10
+
11
+
12
+ def convert_sec_figure_slab_rc(
13
+ v202: stb_v2_0_2.StbSecFigureSlabRc, *, reporter: Reporter
14
+ ) -> stb_v2_1_0.StbSecFigureSlabRcConventional | None:
15
+ v210: stb_v2_1_0.StbSecFigureSlabRcConventional = (
16
+ stb_v2_1_0.StbSecFigureSlabRcConventional()
17
+ )
18
+ if v202.stb_sec_slab_rc_straight:
19
+ v202_straight: stb_v2_0_2.StbSecSlabRcStraight = v202.stb_sec_slab_rc_straight
20
+ v210_straight: stb_v2_1_0.StbSecSlabRcConventionalStraight = (
21
+ stb_v2_1_0.StbSecSlabRcConventionalStraight(depth=v202_straight.depth)
22
+ )
23
+ v210.stb_sec_slab_rc_conventional_straight = v210_straight
24
+ elif v202.stb_sec_slab_rc_taper:
25
+ v202_tapers: list[stb_v2_0_2.StbSecSlabRcTaper] = v202.stb_sec_slab_rc_taper
26
+ try:
27
+ taper_base = next(
28
+ v202_taper for v202_taper in v202_tapers if v202_taper.pos == "BASE"
29
+ )
30
+ taper_tip = next(
31
+ v202_taper for v202_taper in v202_tapers if v202_taper.pos == "TIP"
32
+ )
33
+ except StopIteration:
34
+ reporter.warning(
35
+ message="TaperのBASE,TIPが1回ずつ使われていないため変換できません",
36
+ code=Code.SCHEMA_ERROR,
37
+ phase=Phase.UPGRADE,
38
+ stb_element=v202,
39
+ )
40
+ return None
41
+
42
+ v210_taper: stb_v2_1_0.StbSecSlabRcConventionalTaper = (
43
+ stb_v2_1_0.StbSecSlabRcConventionalTaper(
44
+ base_depth=taper_base.depth, tip_depth=taper_tip.depth
45
+ )
46
+ )
47
+ v210.stb_sec_slab_rc_conventional_taper = v210_taper
48
+ elif v202.stb_sec_slab_rc_haunch:
49
+ v202_haunches: list[stb_v2_0_2.StbSecSlabRcHaunch] = v202.stb_sec_slab_rc_haunch
50
+ try:
51
+ haunch_base = next(
52
+ v202_haunch
53
+ for v202_haunch in v202_haunches
54
+ if v202_haunch.pos == "BASE"
55
+ )
56
+ haunch_center = next(
57
+ v202_haunch
58
+ for v202_haunch in v202_haunches
59
+ if v202_haunch.pos == "CENTER"
60
+ )
61
+ haunch_haunch = next(
62
+ v202_haunch
63
+ for v202_haunch in v202_haunches
64
+ if v202_haunch.pos == "HAUNCH"
65
+ )
66
+
67
+ except StopIteration:
68
+ reporter.warning(
69
+ message=(
70
+ "HaunchのBASE,CENTER,HAUNCHが1回ずつ使われていないため変換できません"
71
+ ),
72
+ code=Code.SCHEMA_ERROR,
73
+ phase=Phase.UPGRADE,
74
+ stb_element=v202,
75
+ )
76
+ return None
77
+
78
+ v210_haunch: stb_v2_1_0.StbSecSlabRcConventionalHaunch = (
79
+ stb_v2_1_0.StbSecSlabRcConventionalHaunch(
80
+ base_depth=haunch_base.depth,
81
+ tip_depth=haunch_center.depth,
82
+ haunch_length=haunch_haunch.depth,
83
+ )
84
+ )
85
+ v210.stb_sec_slab_rc_conventional_haunch = v210_haunch
86
+ else:
87
+ reporter.warning(
88
+ message="必要な子要素がないため変換できません",
89
+ code=Code.SCHEMA_ERROR,
90
+ phase=Phase.UPGRADE,
91
+ stb_element=v202,
92
+ )
93
+ return None
94
+ return v210
95
+
96
+
97
+ def convert_sec_slab_rc(
98
+ v202: stb_v2_0_2.StbSecSlabRc,
99
+ v210: stb_v2_1_0.StbSecSlabRc,
100
+ *,
101
+ reporter: Reporter,
102
+ ) -> None:
103
+ if not v202.stb_sec_figure_slab_rc:
104
+ reporter.warning(
105
+ message="必要な子要素がないため変換できません",
106
+ code=Code.SCHEMA_ERROR,
107
+ phase=Phase.UPGRADE,
108
+ stb_element=v202,
109
+ )
110
+ return
111
+ v210_fig_conventional: stb_v2_1_0.StbSecFigureSlabRcConventional | None = (
112
+ convert_sec_figure_slab_rc(v202.stb_sec_figure_slab_rc, reporter=reporter)
113
+ )
114
+ if v210_fig_conventional is None:
115
+ return
116
+ v210.stb_sec_slab_rc_conventional = stb_v2_1_0.StbSecSlabRcConventional(
117
+ stb_sec_figure_slab_rc_conventional=v210_fig_conventional
118
+ )
119
+
120
+
121
+ def sec_slab_rc(
122
+ before: StBridgeElement, after: StBridgeElement, *, reporter: Reporter
123
+ ) -> None:
124
+ if not isinstance(before, stb_v2_0_2.StbSecSlabRc) or not isinstance(
125
+ after, stb_v2_1_0.StbSecSlabRc
126
+ ):
127
+ return
128
+ convert_sec_slab_rc(before, after, reporter=reporter)
@@ -0,0 +1,126 @@
1
+ # Copyright 2025-2026 TAISEI CORPORATION
2
+ # SPDX-License-Identifier: MPL-2.0
3
+ # This Source Code Form is subject to the terms of the Mozilla Public
4
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+
7
+ from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
8
+ from stbkit.core.data_model.common import StBridgeElement
9
+ from stbkit.core.repository import RepositoryV2_0_2
10
+ from stbkit.core.stb_exceptions import NoneAccessError
11
+ from stbkit.core.stb_reporting import Reporter
12
+
13
+ from ....._internal.utils import girder_utils
14
+
15
+
16
+ def post_girder(
17
+ v202: stb_v2_0_2.StBridge,
18
+ v210: stb_v2_1_0.StBridge,
19
+ repo_v202: RepositoryV2_0_2,
20
+ reporter: Reporter,
21
+ ) -> None:
22
+ try:
23
+ v202_girders: list[stb_v2_0_2.StbGirder] = (
24
+ v202.stb_model.stb_members.stb_girders.stb_girder
25
+ )
26
+ except NoneAccessError:
27
+ return
28
+ v210_girders: list[stb_v2_1_0.StbGirder] = (
29
+ v210.stb_model.stb_members.stb_girders.stb_girder
30
+ )
31
+ for v202_girder, v210_girder in zip(v202_girders, v210_girders):
32
+ girder_length_value: girder_utils.GirderLengthValue = (
33
+ girder_utils.girder_length(v202_girder, v202)
34
+ )
35
+ length: float = girder_length_value.length
36
+ pos_control_point_start: float = girder_length_value.pos_control_point_start
37
+ pos_control_point_end: float = girder_length_value.pos_control_point_end
38
+ v202_sec: StBridgeElement = repo_v202.deref(v202_girder).id_section
39
+ distances_s: list[float] = []
40
+ distances_rc: list[float] = []
41
+ match v202_sec:
42
+ case stb_v2_0_2.StbSecBeamRc():
43
+ figure_rc: stb_v2_0_2.StbSecFigureBeamRc = (
44
+ v202_sec.stb_sec_figure_beam_rc
45
+ )
46
+ if figure_rc.stb_sec_beam_rc_haunch:
47
+ if v202_girder.haunch_start_or_none is not None:
48
+ distances_rc.append(
49
+ pos_control_point_start + v202_girder.haunch_start
50
+ )
51
+ if v202_girder.haunch_end_or_none is not None:
52
+ distances_rc.append(
53
+ pos_control_point_end - v202_girder.haunch_end
54
+ )
55
+ case stb_v2_0_2.StbSecBeamS():
56
+ figure_s: stb_v2_0_2.StbSecSteelFigureBeamS = (
57
+ v202_sec.stb_sec_steel_figure_beam_s
58
+ )
59
+ if (
60
+ figure_s.stb_sec_steel_beam_s_haunch
61
+ or figure_s.stb_sec_steel_beam_s_five_types
62
+ ):
63
+ if v202_girder.haunch_start_or_none is not None:
64
+ distances_s.append(
65
+ pos_control_point_start + v202_girder.haunch_start
66
+ )
67
+ if v202_girder.haunch_end_or_none is not None:
68
+ distances_s.append(
69
+ pos_control_point_end - v202_girder.haunch_end
70
+ )
71
+ if (
72
+ figure_s.stb_sec_steel_beam_s_joint
73
+ or figure_s.stb_sec_steel_beam_s_five_types
74
+ ):
75
+ if v202_girder.joint_start_or_none is not None:
76
+ distances_s.append(v202_girder.joint_start)
77
+ if v202_girder.joint_end_or_none is not None:
78
+ distances_s.append(length - v202_girder.joint_end)
79
+ case stb_v2_0_2.StbSecBeamSrc():
80
+ figure_s_src: stb_v2_0_2.StbSecSteelFigureBeamSrc = (
81
+ v202_sec.stb_sec_steel_figure_beam_src
82
+ )
83
+ if (
84
+ figure_s_src.stb_sec_steel_beam_src_haunch
85
+ or figure_s_src.stb_sec_steel_beam_src_five_types
86
+ ):
87
+ if v202_girder.haunch_start_or_none is not None:
88
+ distances_s.append(
89
+ pos_control_point_start + v202_girder.haunch_start
90
+ )
91
+ if v202_girder.haunch_end_or_none is not None:
92
+ distances_s.append(
93
+ pos_control_point_end - v202_girder.haunch_end
94
+ )
95
+ if (
96
+ figure_s_src.stb_sec_steel_beam_src_joint
97
+ or figure_s_src.stb_sec_steel_beam_src_five_types
98
+ ):
99
+ if v202_girder.joint_start_or_none is not None:
100
+ distances_s.append(v202_girder.joint_start)
101
+ if v202_girder.joint_end_or_none is not None:
102
+ distances_s.append(length - v202_girder.joint_end)
103
+ figure_rc_src: stb_v2_0_2.StbSecFigureBeamSrc = (
104
+ v202_sec.stb_sec_figure_beam_src
105
+ )
106
+ if figure_rc_src.stb_sec_beam_src_haunch:
107
+ if v202_girder.haunch_start_or_none is not None:
108
+ distances_rc.append(
109
+ pos_control_point_start + v202_girder.haunch_start
110
+ )
111
+ if v202_girder.haunch_end_or_none is not None:
112
+ distances_rc.append(
113
+ pos_control_point_end - v202_girder.haunch_end
114
+ )
115
+ distances_rc.sort()
116
+ distances_s.sort()
117
+ if distances_s:
118
+ v210_girder.stb_girder_steel_switch = [
119
+ stb_v2_1_0.StbGirderSteelSwitch(order=index + 1, distance=distance)
120
+ for index, distance in enumerate(distances_s)
121
+ ]
122
+ if distances_rc:
123
+ v210_girder.stb_girder_concrete_switch = [
124
+ stb_v2_1_0.StbGirderConcreteSwitch(order=index + 1, distance=distance)
125
+ for index, distance in enumerate(distances_rc)
126
+ ]
@@ -0,0 +1,110 @@
1
+ # Copyright 2025-2026 TAISEI CORPORATION
2
+ # SPDX-License-Identifier: MPL-2.0
3
+ # This Source Code Form is subject to the terms of the Mozilla Public
4
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ # file, You can obtain one at https://mozilla.org/MPL/2.0/.
6
+
7
+ import uuid
8
+ from copy import deepcopy
9
+
10
+ from stbkit.core.data_model import stb_v2_0_2, stb_v2_1_0
11
+ from stbkit.core.stb_exceptions import NoneAccessError
12
+
13
+
14
+ def find_wall_or_slabs(
15
+ stb: stb_v2_0_2.StBridge, id_open: int | None
16
+ ) -> list[stb_v2_0_2.StbWall | stb_v2_0_2.StbSlab]:
17
+ result: list[stb_v2_0_2.StbWall | stb_v2_0_2.StbSlab] = []
18
+ if id_open is None:
19
+ return result
20
+ walls: stb_v2_0_2.StbWalls | None = None
21
+ try:
22
+ walls = stb.stb_model.stb_members.stb_walls
23
+ for wall in walls.stb_wall:
24
+ if not wall.stb_open_id_list_or_none:
25
+ continue
26
+ for open_id in wall.stb_open_id_list.stb_open_id:
27
+ if open_id.id == id_open:
28
+ result.append(wall)
29
+ except NoneAccessError:
30
+ pass
31
+ try:
32
+ slabs: stb_v2_0_2.StbSlabs = stb.stb_model.stb_members.stb_slabs
33
+ for slab in slabs.stb_slab:
34
+ if not slab.stb_open_id_list_or_none:
35
+ continue
36
+ for open_id in slab.stb_open_id_list.stb_open_id:
37
+ if open_id.id == id_open:
38
+ result.append(slab)
39
+ except NoneAccessError:
40
+ pass
41
+ return result
42
+
43
+
44
+ def post_open(v202: stb_v2_0_2.StBridge, v210: stb_v2_1_0.StBridge) -> None:
45
+ try:
46
+ v202_opens: stb_v2_0_2.StbOpens = v202.stb_model.stb_members.stb_opens
47
+ except NoneAccessError:
48
+ return
49
+ max_open_id: int = (
50
+ max(obj.id if obj.id else 0 for obj in v202_opens.stb_open)
51
+ if v202_opens.stb_open
52
+ else 0
53
+ )
54
+ v210_opens: list[stb_v2_1_0.StbOpenArrangement] = (
55
+ v210.ensure.stb_model()
56
+ .ensure.stb_members()
57
+ .ensure.stb_open_arrangements()
58
+ .stb_open_arrangement
59
+ )
60
+ v210_sec_opens: list[stb_v2_1_0.StbSecOpenRc] = (
61
+ v210.stb_model.ensure.stb_sections().stb_sec_open_rc
62
+ )
63
+ max_sec_open_id: int = (
64
+ max(obj.id if obj.id else 0 for obj in v210_sec_opens) if v210_sec_opens else 0
65
+ )
66
+ for v202_open in v202_opens.stb_open:
67
+ v210_open: stb_v2_1_0.StbOpenArrangement = stb_v2_1_0.StbOpenArrangement(
68
+ id=v202_open.id_or_none,
69
+ guid=v202_open.guid_or_none,
70
+ name=v202_open.name_or_none,
71
+ id_section=v202_open.id_section_or_none,
72
+ position_x=v202_open.position_x_or_none,
73
+ position_y=v202_open.position_y_or_none,
74
+ rotate=v202_open.rotate_or_none,
75
+ )
76
+ wall_or_slabs: list[stb_v2_0_2.StbWall | stb_v2_0_2.StbSlab] = (
77
+ find_wall_or_slabs(v202, v202_open.id)
78
+ )
79
+ if not wall_or_slabs:
80
+ continue
81
+ if v202_open.id_section_or_none is not None:
82
+ id_section: int = v202_open.id_section
83
+ else:
84
+ max_sec_open_id += 1
85
+ id_section = max_sec_open_id
86
+ for index, wall_or_slab in enumerate(wall_or_slabs):
87
+ # 2件目以降は、同一インスタンスを使い回すと先に設定したid_memberを
88
+ # 上書きしてしまうため、複製して別IDを振る
89
+ if index > 0:
90
+ new_v210_open: stb_v2_1_0.StbOpenArrangement = deepcopy(v210_open)
91
+ max_open_id += 1
92
+ new_v210_open.id = max_open_id
93
+ else:
94
+ new_v210_open = v210_open
95
+
96
+ if isinstance(wall_or_slab, stb_v2_0_2.StbWall):
97
+ new_v210_open.kind_member = "WALL"
98
+ else:
99
+ new_v210_open.kind_member = "SLAB"
100
+ new_v210_open.id_member = wall_or_slab.id
101
+ new_v210_open.id_section = id_section
102
+ v210_opens.append(new_v210_open)
103
+ v210_sec_open: stb_v2_1_0.StbSecOpenRc = stb_v2_1_0.StbSecOpenRc(
104
+ id=id_section,
105
+ guid=uuid.uuid4(),
106
+ name=(v202_open.name + "_sec") if v202_open.name_or_none else "unnamed_sec",
107
+ length_x=v202_open.length_x,
108
+ length_y=v202_open.length_y,
109
+ )
110
+ v210_sec_opens.append(v210_sec_open)