dimine-python-sdk 0.1.8__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.
- dimine_python_sdk/__init__.py +13 -0
- dimine_python_sdk/conn/__init__.py +5 -0
- dimine_python_sdk/conn/base_conn_client.py +167 -0
- dimine_python_sdk/conn/conn_client.py +382 -0
- dimine_python_sdk/docs/guides/data_edit.md +306 -0
- dimine_python_sdk/docs/guides/data_get.md +266 -0
- dimine_python_sdk/docs/guides/data_types.md +152 -0
- dimine_python_sdk/docs/guides/features.md +271 -0
- dimine_python_sdk/docs/guides/io.md +157 -0
- dimine_python_sdk/docs/index.md +41 -0
- dimine_python_sdk/docs/quickstart.md +45 -0
- dimine_python_sdk/docs/reference/SUMMARY.md +19 -0
- dimine_python_sdk/docs/reference/conn/base_conn_client.md +3 -0
- dimine_python_sdk/docs/reference/conn/conn_client.md +3 -0
- dimine_python_sdk/docs/reference/lib/algorithm/model_func.md +3 -0
- dimine_python_sdk/docs/reference/lib/io/file_conversion.md +3 -0
- dimine_python_sdk/docs/reference/lib/io/models.md +3 -0
- dimine_python_sdk/docs/reference/lib/io/project_plotting.md +3 -0
- dimine_python_sdk/docs/reference/lib/prospecting/block_data.md +3 -0
- dimine_python_sdk/docs/reference/lib/prospecting/drill_db.md +3 -0
- dimine_python_sdk/docs/reference/lib/prospecting/models.md +3 -0
- dimine_python_sdk/docs/reference/lib/prospecting/valuation.md +3 -0
- dimine_python_sdk/docs/reference/lib/types/entity.md +3 -0
- dimine_python_sdk/docs/reference/lib/types/line.md +3 -0
- dimine_python_sdk/docs/reference/lib/types/point.md +3 -0
- dimine_python_sdk/docs/reference/logger.md +3 -0
- dimine_python_sdk/docs/reference/models/conn.md +3 -0
- dimine_python_sdk/docs/reference/models/errors.md +3 -0
- dimine_python_sdk/docs/reference/models/types.md +3 -0
- dimine_python_sdk/docs/summary.md +6 -0
- dimine_python_sdk/lib/__init__.py +20 -0
- dimine_python_sdk/lib/algorithm/__init__.py +1 -0
- dimine_python_sdk/lib/algorithm/model_func.py +219 -0
- dimine_python_sdk/lib/exploitation/__init__.py +0 -0
- dimine_python_sdk/lib/io/__init__.py +2 -0
- dimine_python_sdk/lib/io/file_conversion.py +143 -0
- dimine_python_sdk/lib/io/models.py +180 -0
- dimine_python_sdk/lib/io/project_plotting.py +40 -0
- dimine_python_sdk/lib/prospecting/__init__.py +3 -0
- dimine_python_sdk/lib/prospecting/block_data.py +289 -0
- dimine_python_sdk/lib/prospecting/drill_db.py +333 -0
- dimine_python_sdk/lib/prospecting/models.py +276 -0
- dimine_python_sdk/lib/prospecting/valuation.py +113 -0
- dimine_python_sdk/lib/types/__init__.py +4 -0
- dimine_python_sdk/lib/types/entity.py +957 -0
- dimine_python_sdk/lib/types/line.py +188 -0
- dimine_python_sdk/lib/types/point.py +695 -0
- dimine_python_sdk/logger.py +7 -0
- dimine_python_sdk/models/__init__.py +3 -0
- dimine_python_sdk/models/conn.py +53 -0
- dimine_python_sdk/models/errors.py +4 -0
- dimine_python_sdk/models/types.py +131 -0
- dimine_python_sdk/site/404.html +671 -0
- dimine_python_sdk/site/assets/_mkdocstrings.css +237 -0
- dimine_python_sdk/site/assets/images/favicon.png +0 -0
- dimine_python_sdk/site/assets/javascripts/bundle.79ae519e.min.js +16 -0
- dimine_python_sdk/site/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
- dimine_python_sdk/site/assets/javascripts/lunr/tinyseg.js +206 -0
- dimine_python_sdk/site/assets/javascripts/lunr/wordcut.js +6708 -0
- dimine_python_sdk/site/assets/javascripts/workers/search.2c215733.min.js +42 -0
- dimine_python_sdk/site/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
- dimine_python_sdk/site/assets/stylesheets/main.484c7ddc.min.css +1 -0
- dimine_python_sdk/site/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
- dimine_python_sdk/site/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
- dimine_python_sdk/site/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
- dimine_python_sdk/site/guides/data_edit.html +1251 -0
- dimine_python_sdk/site/guides/data_get.html +1206 -0
- dimine_python_sdk/site/guides/data_types.html +1529 -0
- dimine_python_sdk/site/guides/features.html +1217 -0
- dimine_python_sdk/site/guides/io.html +1025 -0
- dimine_python_sdk/site/index.html +849 -0
- dimine_python_sdk/site/objects.inv +0 -0
- dimine_python_sdk/site/quickstart.html +859 -0
- dimine_python_sdk/site/reference/SUMMARY.html +729 -0
- dimine_python_sdk/site/reference/conn/base_conn_client.html +1295 -0
- dimine_python_sdk/site/reference/conn/conn_client.html +3551 -0
- dimine_python_sdk/site/reference/lib/algorithm/model_func.html +2162 -0
- dimine_python_sdk/site/reference/lib/io/file_conversion.html +1725 -0
- dimine_python_sdk/site/reference/lib/io/models.html +1625 -0
- dimine_python_sdk/site/reference/lib/io/project_plotting.html +984 -0
- dimine_python_sdk/site/reference/lib/prospecting/block_data.html +2455 -0
- dimine_python_sdk/site/reference/lib/prospecting/drill_db.html +2836 -0
- dimine_python_sdk/site/reference/lib/prospecting/models.html +2309 -0
- dimine_python_sdk/site/reference/lib/prospecting/valuation.html +1373 -0
- dimine_python_sdk/site/reference/lib/types/entity.html +6728 -0
- dimine_python_sdk/site/reference/lib/types/line.html +1985 -0
- dimine_python_sdk/site/reference/lib/types/point.html +3672 -0
- dimine_python_sdk/site/reference/logger.html +751 -0
- dimine_python_sdk/site/reference/models/conn.html +751 -0
- dimine_python_sdk/site/reference/models/errors.html +802 -0
- dimine_python_sdk/site/reference/models/types.html +1679 -0
- dimine_python_sdk/site/search/search_index.json +1 -0
- dimine_python_sdk/site/sitemap.xml +107 -0
- dimine_python_sdk/site/sitemap.xml.gz +0 -0
- dimine_python_sdk/site/summary.html +697 -0
- dimine_python_sdk-0.1.8.dist-info/METADATA +15 -0
- dimine_python_sdk-0.1.8.dist-info/RECORD +135 -0
- dimine_python_sdk-0.1.8.dist-info/WHEEL +5 -0
- dimine_python_sdk-0.1.8.dist-info/top_level.txt +2 -0
- tests/conn_test.py +250 -0
- tests/test_base_type.py +143 -0
- tests/ws_client.py +60 -0
- tests/ws_server.py +271 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
from typing import Optional, Tuple
|
|
3
|
+
import DmPyBindInterface as Dm
|
|
4
|
+
|
|
5
|
+
from dimine_python_sdk.lib.io.models import LayoutParam,SetupParams
|
|
6
|
+
|
|
7
|
+
#工程出图
|
|
8
|
+
def project_data_plotting(
|
|
9
|
+
input_file: str,
|
|
10
|
+
layout_json: LayoutParam,
|
|
11
|
+
setup_json: SetupParams,
|
|
12
|
+
output_file: str
|
|
13
|
+
) -> str:
|
|
14
|
+
"""
|
|
15
|
+
工程数据出图(实体/钻孔/块段模型),根据输入文件扩展名自动切换
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
input_file: 输入文件路径(支持实体/钻孔/块段模型文件)
|
|
19
|
+
layout_json: 绘图布局配置参数
|
|
20
|
+
setup_json: 绘图设置参数
|
|
21
|
+
output_file: 输出文件路径
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
str: 成功时返回提示消息,失败时抛出异常
|
|
25
|
+
|
|
26
|
+
Raises:
|
|
27
|
+
ValueError: 出图失败时抛出,包含错误消息
|
|
28
|
+
"""
|
|
29
|
+
success, message = Dm.ProjectDataPlotting(
|
|
30
|
+
input_file,
|
|
31
|
+
layout_json.to_dict(),
|
|
32
|
+
setup_json.to_dict(),
|
|
33
|
+
output_file
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# 错误处理:Python风格用异常替代返回错误码
|
|
37
|
+
if not success:
|
|
38
|
+
raise ValueError(f"出图失败: {message}")
|
|
39
|
+
|
|
40
|
+
return message
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import DmPyBindInterface as Dm
|
|
3
|
+
from typing import Dict, Any, List, Tuple
|
|
4
|
+
|
|
5
|
+
from dimine_python_sdk.lib.prospecting.models import BlockModelConstraint, ModelTransformParams
|
|
6
|
+
from dimine_python_sdk.lib.types import DmDPoint
|
|
7
|
+
|
|
8
|
+
class DmBlockData:
|
|
9
|
+
"""
|
|
10
|
+
二次封装 dmBlockDataNew 类,提供 Python 化的块段模型操作接口
|
|
11
|
+
职责:加载块段模型文件、获取模型属性、遍历块段数据
|
|
12
|
+
"""
|
|
13
|
+
def __init__(self):
|
|
14
|
+
# 初始化底层块段模型对象
|
|
15
|
+
self._block_data = Dm.dmBlockDataNew()
|
|
16
|
+
# 标记模型是否已成功加载
|
|
17
|
+
self._is_open = False
|
|
18
|
+
|
|
19
|
+
def open(self, file_path: str) -> bool:
|
|
20
|
+
"""
|
|
21
|
+
加载块段模型文件
|
|
22
|
+
:param file_path: 块段模型文件路径(自动处理编码转换)
|
|
23
|
+
:raises RuntimeError: 加载失败时抛出异常
|
|
24
|
+
|
|
25
|
+
:result: 是否成功加载模型
|
|
26
|
+
|
|
27
|
+
example:
|
|
28
|
+
```python
|
|
29
|
+
block_data = DmBlockData()
|
|
30
|
+
success = block_data.open("model.dmf")
|
|
31
|
+
if success:
|
|
32
|
+
print("模型加载成功")
|
|
33
|
+
else:
|
|
34
|
+
print("模型加载失败")
|
|
35
|
+
```
|
|
36
|
+
"""
|
|
37
|
+
result = self._block_data.Open(file_path)
|
|
38
|
+
if not result:
|
|
39
|
+
raise RuntimeError(f"加载块段模型失败: {file_path}")
|
|
40
|
+
self._is_open = True
|
|
41
|
+
return result
|
|
42
|
+
|
|
43
|
+
def _check_open(self) -> None:
|
|
44
|
+
"""内部校验:确保模型已成功加载"""
|
|
45
|
+
if not self._is_open:
|
|
46
|
+
raise RuntimeError("请先调用 open() 加载块段模型")
|
|
47
|
+
|
|
48
|
+
def get_origin(self) -> DmDPoint:
|
|
49
|
+
"""
|
|
50
|
+
获取模型原点坐标 (x, y, z)
|
|
51
|
+
:return: 模型原点坐标点对象
|
|
52
|
+
example:
|
|
53
|
+
```python
|
|
54
|
+
block_data = DmBlockData()
|
|
55
|
+
block_data.open("model.dmf")
|
|
56
|
+
origin = block_data.get_origin()
|
|
57
|
+
print(f"模型原点坐标: {origin}")
|
|
58
|
+
```
|
|
59
|
+
"""
|
|
60
|
+
self._check_open()
|
|
61
|
+
cpp_result = self._block_data.GetOrigin()
|
|
62
|
+
return DmDPoint._from_obj(cpp_result)
|
|
63
|
+
|
|
64
|
+
def get_xyz_length(self) -> List[float]:
|
|
65
|
+
"""
|
|
66
|
+
获取模型在 X/Y/Z 三个方向的总长度
|
|
67
|
+
:return: 包含 X/Y/Z 方向总长度的列表 [x_len, y_len, z_len]
|
|
68
|
+
|
|
69
|
+
example:
|
|
70
|
+
```python
|
|
71
|
+
block_data = DmBlockData()
|
|
72
|
+
block_data.open("model.dmf")
|
|
73
|
+
xyz_len = block_data.get_xyz_length()
|
|
74
|
+
print(f"模型在 X/Y/Z 方向的总长度: {xyz_len}")
|
|
75
|
+
```
|
|
76
|
+
"""
|
|
77
|
+
self._check_open()
|
|
78
|
+
return self._block_data.GetXYZLen()
|
|
79
|
+
|
|
80
|
+
def get_max_level(self) -> int:
|
|
81
|
+
"""
|
|
82
|
+
获取模型的最大精度层级
|
|
83
|
+
:return: 模型的最大精度层级整数
|
|
84
|
+
|
|
85
|
+
example:
|
|
86
|
+
```python
|
|
87
|
+
block_data = DmBlockData()
|
|
88
|
+
block_data.open("model.dmf")
|
|
89
|
+
max_level = block_data.get_max_level()
|
|
90
|
+
print(f"模型最大精度层级: {max_level}")
|
|
91
|
+
```
|
|
92
|
+
"""
|
|
93
|
+
self._check_open()
|
|
94
|
+
return self._block_data.GetMaxLevel()
|
|
95
|
+
|
|
96
|
+
def get_min_size(self) -> List[float]:
|
|
97
|
+
"""
|
|
98
|
+
获取模型最小块段的尺寸 (x, y, z)
|
|
99
|
+
:return: 包含最小块段尺寸的列表 [x_size, y_size, z_size]
|
|
100
|
+
|
|
101
|
+
example:
|
|
102
|
+
```python
|
|
103
|
+
block_data = DmBlockData()
|
|
104
|
+
block_data.open("model.dmf")
|
|
105
|
+
min_size = block_data.get_min_size()
|
|
106
|
+
print(f"模型最小块段尺寸: {min_size}")
|
|
107
|
+
```
|
|
108
|
+
"""
|
|
109
|
+
self._check_open()
|
|
110
|
+
return self._block_data.GetMinSize()
|
|
111
|
+
|
|
112
|
+
def get_rotation(self) -> List[float]:
|
|
113
|
+
"""
|
|
114
|
+
获取模型的旋转角度 (x, y, z)
|
|
115
|
+
:return: 包含旋转角度的列表 [x_angle, y_angle, z_angle]
|
|
116
|
+
|
|
117
|
+
example:
|
|
118
|
+
```python
|
|
119
|
+
block_data = DmBlockData()
|
|
120
|
+
block_data.open("model.dmf")
|
|
121
|
+
rotation = block_data.get_rotation()
|
|
122
|
+
print(f"模型旋转角度: {rotation}")
|
|
123
|
+
```
|
|
124
|
+
"""
|
|
125
|
+
self._check_open()
|
|
126
|
+
return self._block_data.GetRotation()
|
|
127
|
+
|
|
128
|
+
def get_field_definitions(self) -> List[Dict[str, Any]]:
|
|
129
|
+
"""
|
|
130
|
+
获取模型的字段定义列表,每个字段包含 name/type/size 信息
|
|
131
|
+
:return: 包含字段定义的列表,每个元素为字典 {"name": str, "type": str, "size": int}
|
|
132
|
+
|
|
133
|
+
example:
|
|
134
|
+
```python
|
|
135
|
+
block_data = DmBlockData()
|
|
136
|
+
block_data.open("model.dmf")
|
|
137
|
+
field_defs = block_data.get_field_definitions()
|
|
138
|
+
print(f"模型字段定义: {field_defs}")
|
|
139
|
+
```
|
|
140
|
+
"""
|
|
141
|
+
self._check_open()
|
|
142
|
+
return self._block_data.GetFieldDefine()
|
|
143
|
+
|
|
144
|
+
def get_total_block_count(self) -> int:
|
|
145
|
+
"""
|
|
146
|
+
获取模型中块段的总数量
|
|
147
|
+
:return: 模型中块段的总数量整数
|
|
148
|
+
|
|
149
|
+
example:
|
|
150
|
+
```python
|
|
151
|
+
block_data = DmBlockData()
|
|
152
|
+
block_data.open("model.dmf")
|
|
153
|
+
total_count = block_data.get_total_block_count()
|
|
154
|
+
print(f"模型中块段总数量: {total_count}")
|
|
155
|
+
```
|
|
156
|
+
"""
|
|
157
|
+
self._check_open()
|
|
158
|
+
return self._block_data.GetTotalBlockCount()
|
|
159
|
+
|
|
160
|
+
def init_cursor(self) -> int:
|
|
161
|
+
"""
|
|
162
|
+
初始化块段遍历游标,用于遍历所有块段
|
|
163
|
+
:return: 初始化结果整数(0 表示成功)
|
|
164
|
+
|
|
165
|
+
example:
|
|
166
|
+
```python
|
|
167
|
+
block_data = DmBlockData()
|
|
168
|
+
block_data.open("model.dmf")
|
|
169
|
+
cursor = block_data.init_cursor()
|
|
170
|
+
print(f"初始化游标结果: {cursor}")
|
|
171
|
+
```
|
|
172
|
+
"""
|
|
173
|
+
self._check_open()
|
|
174
|
+
return self._block_data.InitCursor()
|
|
175
|
+
|
|
176
|
+
def advance_cursor(self) -> bool:
|
|
177
|
+
"""将游标移动到下一个块段
|
|
178
|
+
:return: 是否成功移动(False 表示已遍历结束)
|
|
179
|
+
|
|
180
|
+
example:
|
|
181
|
+
```python
|
|
182
|
+
block_data = DmBlockData()
|
|
183
|
+
block_data.open("model.dmf")
|
|
184
|
+
cursor = block_data.init_cursor()
|
|
185
|
+
while block_data.advance_cursor():
|
|
186
|
+
# 处理当前块段数据
|
|
187
|
+
pass
|
|
188
|
+
```
|
|
189
|
+
"""
|
|
190
|
+
self._check_open()
|
|
191
|
+
return self._block_data.AdvCursor()
|
|
192
|
+
|
|
193
|
+
def get_cursor_data(self, field_name: str) -> Tuple[bool, str]:
|
|
194
|
+
"""获取当前游标指向块段的指定字段值
|
|
195
|
+
:param field_name: 字段名称
|
|
196
|
+
:return: (是否成功, 字段值JSON字符串)
|
|
197
|
+
|
|
198
|
+
example:
|
|
199
|
+
```python
|
|
200
|
+
block_data = DmBlockData()
|
|
201
|
+
block_data.open("model.dmf")
|
|
202
|
+
cursor = block_data.init_cursor()
|
|
203
|
+
while block_data.advance_cursor():
|
|
204
|
+
success, data = block_data.get_cursor_data("field_name")
|
|
205
|
+
if success:
|
|
206
|
+
print(f"当前块段字段值: {data}")
|
|
207
|
+
```
|
|
208
|
+
"""
|
|
209
|
+
self._check_open()
|
|
210
|
+
return self._block_data.GetCursorData(field_name)
|
|
211
|
+
|
|
212
|
+
def is_beyond_boundary(self) -> bool:
|
|
213
|
+
"""
|
|
214
|
+
检查当前游标是否超出模型边界
|
|
215
|
+
:return: 是否超出边界(True/False)
|
|
216
|
+
|
|
217
|
+
example:
|
|
218
|
+
```python
|
|
219
|
+
block_data = DmBlockData()
|
|
220
|
+
block_data.open("model.dmf")
|
|
221
|
+
cursor = block_data.init_cursor()
|
|
222
|
+
while block_data.advance_cursor():
|
|
223
|
+
if block_data.is_beyond_boundary():
|
|
224
|
+
print("游标超出模型边界")
|
|
225
|
+
break
|
|
226
|
+
```
|
|
227
|
+
"""
|
|
228
|
+
self._check_open()
|
|
229
|
+
return self._block_data.IsBeyondBoundaryNode()
|
|
230
|
+
|
|
231
|
+
# 上下文管理器,支持 with 语句
|
|
232
|
+
# def __enter__(self) -> "BlockModelCore":
|
|
233
|
+
# return self
|
|
234
|
+
#
|
|
235
|
+
# def __exit__(self, exc_type, exc_val, exc_tb) -> None:
|
|
236
|
+
# """资源释放逻辑"""
|
|
237
|
+
# self._is_open = False
|
|
238
|
+
@staticmethod
|
|
239
|
+
def create_block_model(params: ModelTransformParams) -> dict:
|
|
240
|
+
"""
|
|
241
|
+
创建空块段模型
|
|
242
|
+
:param params: Python字典,包含样长组合所需的参数
|
|
243
|
+
:return: 处理结果,成功返回{"state": "ok", "message": "..."},失败抛出异常
|
|
244
|
+
|
|
245
|
+
example:
|
|
246
|
+
```python
|
|
247
|
+
params = ModelTransformParams(
|
|
248
|
+
file_name: "123",
|
|
249
|
+
# 原点
|
|
250
|
+
origin_x = 3.0,origin_y = 3.0,origin_z = 3.0,
|
|
251
|
+
# 旋转角度
|
|
252
|
+
rotate_x = 0.0,rotate_y = 0.0,rotate_z = 0.0,
|
|
253
|
+
# 单元块尺寸
|
|
254
|
+
size_x = 1.0,size_y = 1.0,size_z = 1.0,
|
|
255
|
+
# 延伸长度
|
|
256
|
+
length_x = 10.0,length_y = 10.0,length_z = 10.0,
|
|
257
|
+
)
|
|
258
|
+
response = DmBlockData.create_block_model(params)
|
|
259
|
+
print(f"创建空块段模型结果: {response}")
|
|
260
|
+
```
|
|
261
|
+
"""
|
|
262
|
+
json_param = json.dumps(params.to_dict(), ensure_ascii=False)
|
|
263
|
+
raw_response = Dm.CreateBlockModel(json_param)
|
|
264
|
+
response = json.loads(raw_response)
|
|
265
|
+
if response["state"] == "failed":
|
|
266
|
+
raise RuntimeError(f"样长组合失败: {response['message']}")
|
|
267
|
+
return response
|
|
268
|
+
|
|
269
|
+
@staticmethod
|
|
270
|
+
def block_constrain_to_dmc_file(block_model_file: str,constrain_json_param:BlockModelConstraint,constrain_result_file:str) -> bool:
|
|
271
|
+
"""
|
|
272
|
+
块约束保存到约束结果dmc文件
|
|
273
|
+
:param block_model_file:
|
|
274
|
+
:param constrain_json_param:
|
|
275
|
+
:param constrain_result_file:
|
|
276
|
+
:return: 处理结果,返回True/False
|
|
277
|
+
|
|
278
|
+
example:
|
|
279
|
+
```python
|
|
280
|
+
params = BlockModelConstraint(
|
|
281
|
+
type = 0,file = "model.dmf",range = 0,inside_level = 0,boundary_level = 0,bool_operate = "and",
|
|
282
|
+
)
|
|
283
|
+
response = DmBlockData.block_constrain_to_dmc_file("model.dmf",params,"constrain.dmc")
|
|
284
|
+
print(f"块约束保存到约束结果dmc文件结果: {response}")
|
|
285
|
+
```
|
|
286
|
+
"""
|
|
287
|
+
json_param = json.dumps(constrain_json_param.to_dict(), ensure_ascii=False)
|
|
288
|
+
raw_response = Dm.BlockConstrainToDmcFile(block_model_file,json_param,constrain_result_file)
|
|
289
|
+
return raw_response
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import DmPyBindInterface as Dm
|
|
3
|
+
from typing import Dict, Any, Union
|
|
4
|
+
from dimine_python_sdk.lib.prospecting.models import SampleLengthCombineParam,\
|
|
5
|
+
StepCombineParam, HighGradeProcessParam
|
|
6
|
+
from dimine_python_sdk.lib.types.entity import DmDataTable
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
class DrillFunctionWrapper:
|
|
10
|
+
"""
|
|
11
|
+
二次封装钻孔相关函数,提供更Python化的接口
|
|
12
|
+
"""
|
|
13
|
+
@staticmethod
|
|
14
|
+
def sample_length_combine(params: SampleLengthCombineParam) -> dict:
|
|
15
|
+
"""
|
|
16
|
+
样长组合功能的二次封装
|
|
17
|
+
:param params: Python字典,包含样长组合所需的参数
|
|
18
|
+
:return: 处理结果,成功返回{"state": "ok", "message": "..."},失败抛出异常
|
|
19
|
+
|
|
20
|
+
example:
|
|
21
|
+
```python
|
|
22
|
+
params = SampleLengthCombineParam(
|
|
23
|
+
)
|
|
24
|
+
result = DrillFunctionWrapper.sample_length_combine(params)
|
|
25
|
+
```
|
|
26
|
+
"""
|
|
27
|
+
# 将Python字典序列化为JSON字符串
|
|
28
|
+
json_param = json.dumps(params.to_dict(), ensure_ascii=False)
|
|
29
|
+
raw_response = Dm.SampleLengthCombine(json_param)
|
|
30
|
+
# 3. 解析返回的JSON字符串为Python字典
|
|
31
|
+
response = json.loads(raw_response)
|
|
32
|
+
# 4. 错误处理:如果失败,抛出异常
|
|
33
|
+
if response["state"] == "failed":
|
|
34
|
+
raise RuntimeError(f"样长组合失败: {response['message']}")
|
|
35
|
+
return response
|
|
36
|
+
|
|
37
|
+
@staticmethod
|
|
38
|
+
def step_combine(params: StepCombineParam) -> dict:
|
|
39
|
+
"""
|
|
40
|
+
台阶组合功能的二次封装
|
|
41
|
+
:param params: Python字典,包含台阶组合所需的参数
|
|
42
|
+
:return: 处理结果,成功返回{"state": "ok", "message": "..."},失败抛出异常
|
|
43
|
+
|
|
44
|
+
example:
|
|
45
|
+
```python
|
|
46
|
+
params = StepCombineParam(
|
|
47
|
+
)
|
|
48
|
+
result = DrillFunctionWrapper.step_combine(params)
|
|
49
|
+
```
|
|
50
|
+
"""
|
|
51
|
+
json_param = json.dumps(params.to_dict(), ensure_ascii=False)
|
|
52
|
+
raw_response = Dm.StepCombine(json_param)
|
|
53
|
+
response = json.loads(raw_response)
|
|
54
|
+
if response["state"] == "failed":
|
|
55
|
+
raise RuntimeError(f"台阶组合失败: {response['message']}")
|
|
56
|
+
return response
|
|
57
|
+
|
|
58
|
+
@staticmethod
|
|
59
|
+
def extra_high_grade_process(params: HighGradeProcessParam) -> dict:
|
|
60
|
+
"""
|
|
61
|
+
特高品位处理功能的二次封装
|
|
62
|
+
:param params: Python字典,包含台阶组合所需的参数
|
|
63
|
+
:return: 处理结果,成功返回{"state": "ok", "message": "..."},失败抛出异常
|
|
64
|
+
|
|
65
|
+
example:
|
|
66
|
+
```python
|
|
67
|
+
params = HighGradeProcessParam(
|
|
68
|
+
)
|
|
69
|
+
result = DrillFunctionWrapper.extra_high_grade_process(params)
|
|
70
|
+
```
|
|
71
|
+
"""
|
|
72
|
+
json_param = json.dumps(params.to_dict(), ensure_ascii=False)
|
|
73
|
+
raw_response = Dm.ExtraHighGradeProcess(json_param)
|
|
74
|
+
response = json.loads(raw_response)
|
|
75
|
+
if response["state"] == "failed":
|
|
76
|
+
raise RuntimeError(f"特高品位处理失败: {response['message']}")
|
|
77
|
+
return response
|
|
78
|
+
|
|
79
|
+
class DrillDBManager:
|
|
80
|
+
"""
|
|
81
|
+
二次封装 CDrillDBManager 类,提供 Python 化的钻孔数据库管理接口
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
@classmethod
|
|
85
|
+
def _from_obj(cls, obj):
|
|
86
|
+
"""
|
|
87
|
+
原生CDrillDBManager对象创建封装实例
|
|
88
|
+
:param obj: 原生CDrillDBManager对象(bind11封装后)
|
|
89
|
+
:return: CDrillDBManager实例
|
|
90
|
+
"""
|
|
91
|
+
instance = cls.__new__(cls)
|
|
92
|
+
instance._manager = obj
|
|
93
|
+
return instance
|
|
94
|
+
|
|
95
|
+
def get_drill_count(self) -> int:
|
|
96
|
+
"""
|
|
97
|
+
获取钻孔数量
|
|
98
|
+
:return: 钻孔数量
|
|
99
|
+
|
|
100
|
+
example:
|
|
101
|
+
```python
|
|
102
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
103
|
+
print("钻孔数量:", drill_manager.get_drill_count())
|
|
104
|
+
```
|
|
105
|
+
"""
|
|
106
|
+
return self._manager.GetDrillCount()
|
|
107
|
+
|
|
108
|
+
def get_total_length(self) -> float:
|
|
109
|
+
"""
|
|
110
|
+
获取钻孔总长度
|
|
111
|
+
:return: 钻孔总长度
|
|
112
|
+
|
|
113
|
+
example:
|
|
114
|
+
```python
|
|
115
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
116
|
+
print("钻孔总长度:", drill_manager.get_total_length())
|
|
117
|
+
```
|
|
118
|
+
"""
|
|
119
|
+
return self._manager.GetTotalLength()
|
|
120
|
+
|
|
121
|
+
def get_base_table(self, table_mark: str) -> DmDataTable:
|
|
122
|
+
"""
|
|
123
|
+
获取基础表
|
|
124
|
+
:param table_mark: 表标识(例如 "collar", "survey", "lithology")
|
|
125
|
+
:return: 基础表数据(DmDataTable实例)
|
|
126
|
+
|
|
127
|
+
example:
|
|
128
|
+
```python
|
|
129
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
130
|
+
collar_table = drill_manager.get_base_table("collar")
|
|
131
|
+
```
|
|
132
|
+
"""
|
|
133
|
+
cpp_result = self._manager.GetBaseTable(table_mark)
|
|
134
|
+
return DmDataTable._from_obj(cpp_result)
|
|
135
|
+
|
|
136
|
+
def get_added_table(self, table_mark: str) -> DmDataTable:
|
|
137
|
+
"""
|
|
138
|
+
获取附加表
|
|
139
|
+
:param table_mark: 表标识(例如 "collar", "survey", "lithology")
|
|
140
|
+
:return: 附加表数据(DmDataTable实例)
|
|
141
|
+
|
|
142
|
+
example:
|
|
143
|
+
```python
|
|
144
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
145
|
+
survey_table = drill_manager.get_added_table("survey")
|
|
146
|
+
```
|
|
147
|
+
"""
|
|
148
|
+
cpp_result = self._manager.GetAddedTable(table_mark)
|
|
149
|
+
return DmDataTable._from_obj(cpp_result)
|
|
150
|
+
|
|
151
|
+
def get_added_table_count(self) -> int:
|
|
152
|
+
"""
|
|
153
|
+
获取附加表数量
|
|
154
|
+
:return: 附加表数量
|
|
155
|
+
|
|
156
|
+
example:
|
|
157
|
+
```python
|
|
158
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
159
|
+
print("附加表数量:", drill_manager.get_added_table_count())
|
|
160
|
+
```
|
|
161
|
+
"""
|
|
162
|
+
return self._manager.GetAddedTableCount()
|
|
163
|
+
|
|
164
|
+
def get_collar_table_def(self) -> Dict[str, Any]:
|
|
165
|
+
"""
|
|
166
|
+
获取孔口表结构定义
|
|
167
|
+
:return: 孔口表结构定义(字典)
|
|
168
|
+
|
|
169
|
+
example:
|
|
170
|
+
```python
|
|
171
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
172
|
+
collar_def = drill_manager.get_collar_table_def()
|
|
173
|
+
print("孔口表字段数:", collar_def)
|
|
174
|
+
```
|
|
175
|
+
"""
|
|
176
|
+
return self._manager.GetCollarTableDefine()
|
|
177
|
+
|
|
178
|
+
def get_survey_table_def(self) -> Dict[str, Any]:
|
|
179
|
+
"""
|
|
180
|
+
获取测斜表结构定义
|
|
181
|
+
:return: 测斜表结构定义(字典)
|
|
182
|
+
|
|
183
|
+
example:
|
|
184
|
+
```python
|
|
185
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
186
|
+
survey_def = drill_manager.get_survey_table_def()
|
|
187
|
+
print("测斜表字段数:",survey_def)
|
|
188
|
+
```
|
|
189
|
+
"""
|
|
190
|
+
return self._manager.GetSurveryTableDefine()
|
|
191
|
+
|
|
192
|
+
def get_lithology_table_def(self) -> Dict[str, Any]:
|
|
193
|
+
"""
|
|
194
|
+
获取岩性表结构定义
|
|
195
|
+
:return: 岩性表结构定义(字典)
|
|
196
|
+
|
|
197
|
+
example:
|
|
198
|
+
```python
|
|
199
|
+
drill_manager = drill_db.get_drill_db_manager()
|
|
200
|
+
lithology_def = drill_manager.get_lithology_table_def()
|
|
201
|
+
print("岩性表字段数:", lithology_def)
|
|
202
|
+
```
|
|
203
|
+
"""
|
|
204
|
+
return self._manager.GetLithologyTableDefine()
|
|
205
|
+
|
|
206
|
+
class DmGeoDrillData:
|
|
207
|
+
"""
|
|
208
|
+
二次封装 CGeoDrillDataNew (dmGeoDrillData) 类
|
|
209
|
+
"""
|
|
210
|
+
def __init__(self):
|
|
211
|
+
# 初始化底层对象
|
|
212
|
+
self._geo_drill = Dm.dmGeoDrillData()
|
|
213
|
+
|
|
214
|
+
def load(self, file_path: Union[str, Path]) -> bool:
|
|
215
|
+
"""
|
|
216
|
+
加载钻孔数据库文件
|
|
217
|
+
:param file_path: DMF 文件路径(自动处理编码转换)
|
|
218
|
+
:raises RuntimeError: 加载失败时抛出异常
|
|
219
|
+
|
|
220
|
+
:return: 是否成功加载
|
|
221
|
+
|
|
222
|
+
example:
|
|
223
|
+
```python
|
|
224
|
+
drill_db = DmGeoDrillData()
|
|
225
|
+
success = drill_db.load("model.dmf")
|
|
226
|
+
if success:
|
|
227
|
+
print("成功加载钻孔数据库")
|
|
228
|
+
```
|
|
229
|
+
"""
|
|
230
|
+
result = self._geo_drill.Load(file_path)
|
|
231
|
+
if not result:
|
|
232
|
+
raise RuntimeError(f"加载钻孔数据库失败: {file_path}")
|
|
233
|
+
return result
|
|
234
|
+
|
|
235
|
+
def save(self, file_path: Union[str, Path]) -> bool:
|
|
236
|
+
"""
|
|
237
|
+
保存钻孔数据库到文件
|
|
238
|
+
:param file_path: 保存路径(自动处理编码转换)
|
|
239
|
+
:raises RuntimeError: 保存失败时抛出异常
|
|
240
|
+
:return: 是否成功保存
|
|
241
|
+
|
|
242
|
+
example:
|
|
243
|
+
```python
|
|
244
|
+
drill_db = DmGeoDrillData()
|
|
245
|
+
success = drill_db.load("model.dmf")
|
|
246
|
+
if success:
|
|
247
|
+
print("成功加载钻孔数据库")
|
|
248
|
+
success = drill_db.save("model.dmf")
|
|
249
|
+
if success:
|
|
250
|
+
print("成功保存钻孔数据库")
|
|
251
|
+
```
|
|
252
|
+
"""
|
|
253
|
+
result = self._geo_drill.Save(file_path)
|
|
254
|
+
if not result:
|
|
255
|
+
raise RuntimeError(f"保存钻孔数据库失败: {file_path}")
|
|
256
|
+
return result
|
|
257
|
+
|
|
258
|
+
def get_drill_db_manager(self) -> DrillDBManager:
|
|
259
|
+
"""
|
|
260
|
+
获取钻孔数据库管理器实例
|
|
261
|
+
:return: DrillDBManager实例
|
|
262
|
+
|
|
263
|
+
example:
|
|
264
|
+
```python
|
|
265
|
+
drill_db = DmGeoDrillData()
|
|
266
|
+
success = drill_db.load("model.dmf")
|
|
267
|
+
if success:
|
|
268
|
+
print("成功加载钻孔数据库")
|
|
269
|
+
db_manager = drill_db.get_drill_db_manager()
|
|
270
|
+
print(f"钻孔数量: {db_manager.get_drill_count()}")
|
|
271
|
+
```
|
|
272
|
+
"""
|
|
273
|
+
db_manager = self._geo_drill.GetDrillDBManager()
|
|
274
|
+
if not db_manager:
|
|
275
|
+
raise RuntimeError("钻孔数据库管理器获取失败")
|
|
276
|
+
return DrillDBManager._from_obj(db_manager)
|
|
277
|
+
|
|
278
|
+
def get_collar_table(self) -> DmDataTable:
|
|
279
|
+
"""获取钻孔孔口表 (Collar Table)
|
|
280
|
+
:return: 孔口表数据(DmDataTable实例)
|
|
281
|
+
|
|
282
|
+
example:
|
|
283
|
+
```python
|
|
284
|
+
drill_db = DmGeoDrillData()
|
|
285
|
+
success = drill_db.load("model.dmf")
|
|
286
|
+
if success:
|
|
287
|
+
print("成功加载钻孔数据库")
|
|
288
|
+
collar_table = drill_db.get_collar_table()
|
|
289
|
+
print(f"孔口表字段数: {collar_table.get_field_count()}")
|
|
290
|
+
```
|
|
291
|
+
"""
|
|
292
|
+
if not self._geo_drill:
|
|
293
|
+
raise RuntimeError("数据库未加载")
|
|
294
|
+
cpp_result = self._geo_drill.GetCollarTable()
|
|
295
|
+
return DmDataTable._from_obj(cpp_result)
|
|
296
|
+
|
|
297
|
+
def get_survey_table(self) -> DmDataTable:
|
|
298
|
+
"""获取钻孔测斜表 (Survey Table)
|
|
299
|
+
:return: 测斜表数据(DmDataTable实例)
|
|
300
|
+
|
|
301
|
+
example:
|
|
302
|
+
```python
|
|
303
|
+
drill_db = DmGeoDrillData()
|
|
304
|
+
success = drill_db.load("model.dmf")
|
|
305
|
+
if success:
|
|
306
|
+
print("成功加载钻孔数据库")
|
|
307
|
+
survey_table = drill_db.get_survey_table()
|
|
308
|
+
print(f"测斜表字段数: {survey_table.get_field_count()}")
|
|
309
|
+
```
|
|
310
|
+
"""
|
|
311
|
+
if not self._geo_drill:
|
|
312
|
+
raise RuntimeError("数据库未加载")
|
|
313
|
+
cpp_result = self._geo_drill.GetSurveyTable()
|
|
314
|
+
return DmDataTable._from_obj(cpp_result)
|
|
315
|
+
|
|
316
|
+
def get_lithology_table(self) -> DmDataTable:
|
|
317
|
+
"""获取钻孔岩性表 (Lithology Table)
|
|
318
|
+
:return: 岩性表数据(DmDataTable实例)
|
|
319
|
+
|
|
320
|
+
example:
|
|
321
|
+
```python
|
|
322
|
+
drill_db = DmGeoDrillData()
|
|
323
|
+
success = drill_db.load("model.dmf")
|
|
324
|
+
if success:
|
|
325
|
+
print("成功加载钻孔数据库")
|
|
326
|
+
lithology_table = drill_db.get_lithology_table()
|
|
327
|
+
print(f"岩性表字段数: {lithology_table.get_field_count()}")
|
|
328
|
+
```
|
|
329
|
+
"""
|
|
330
|
+
if not self._geo_drill:
|
|
331
|
+
raise RuntimeError("数据库未加载")
|
|
332
|
+
cpp_result = self._geo_drill.GetLithologyTable()
|
|
333
|
+
return DmDataTable._from_obj(cpp_result)
|