Skip to content

contour_modeling

应用层:lib/exploitation/contour_modeling.py

轮廓线建模 — 两轮廓线建模 / 单轮廓线封闭为面 / 外推建模 / 实体合并 / 多平行轮廓线建模。 直接调用 native/exploitation.py,不经过 _adapter。 允许类型:np.ndarray、List、Pydantic 模型、标量 禁止类型:Dm*

ContourExtrapolateModelingError

Bases: ModelingError

轮廓线外推建模失败

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
63
64
class ContourExtrapolateModelingError(ModelingError):
    """轮廓线外推建模失败"""

ContourModeling

轮廓线建模 — 两轮廓线建模 / 单轮廓线封闭为面 / 外推建模 / 实体合并 / 多平行轮廓线建模

推荐用法(无需实例化)

ContourModeling.two_contour_modeling(ContourAlgorithm.MIN_PERIMETER, line1, line2) ContourModeling.single_contour_modeling(ContourAlgorithm.MIN_PERIMETER, line) ContourModeling.contour_extrapolate_modeling(ExtrapolateMode.TIP, line) ContourModeling.unite_polydata(tin_list) ContourModeling.multi_parallel_contour_modeling(polylines_set)

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
class ContourModeling:
    """
    轮廓线建模 — 两轮廓线建模 / 单轮廓线封闭为面 / 外推建模 / 实体合并 / 多平行轮廓线建模

    推荐用法(无需实例化)
    --------------------
    >>> ContourModeling.two_contour_modeling(ContourAlgorithm.MIN_PERIMETER, line1, line2)
    >>> ContourModeling.single_contour_modeling(ContourAlgorithm.MIN_PERIMETER, line)
    >>> ContourModeling.contour_extrapolate_modeling(ExtrapolateMode.TIP, line)
    >>> ContourModeling.unite_polydata(tin_list)
    >>> ContourModeling.multi_parallel_contour_modeling(polylines_set)
    """

    @staticmethod
    def two_contour_modeling(method: ContourAlgorithm, line1, line2) -> List[TINGeometry]:
        """
        两轮廓线建模

        Parameters
        ----------
        method : ContourAlgorithm
            算法类型
        line1 : Line or np.ndarray or List[List[float]]
            第一条轮廓线
        line2 : Line or np.ndarray or List[List[float]]
            第二条轮廓线

        Returns
        -------
        List[TINGeometry]
        """
        return two_contour_modeling_impl(method, line1, line2)

    @staticmethod
    def single_contour_modeling(method: ContourAlgorithm, line) -> List[TINGeometry]:
        """
        单轮廓线封闭为面

        Parameters
        ----------
        method : ContourAlgorithm
            算法类型
        line : Line or np.ndarray or List[List[float]]
            轮廓线

        Returns
        -------
        List[TINGeometry]
        """
        return single_contour_modeling_impl(method, line)

    @staticmethod
    def contour_extrapolate_modeling(
        model: ExtrapolateMode,
        point_set,
        extra_dir: ExtrapolateDirection = ExtrapolateDirection.BOTH,
        forward_distance: float = 25.0,
        backward_distance: float = 25.0,
        auto_calc: bool = True,
        normal: List[float] | None = None,
        zoom: float = 70.0,
        pinchout_point_count: int = 2,
        close: bool = True,
        taper_line_verical: bool = False,
    ) -> List[TINGeometry]:
        """
        轮廓线外推建模

        Parameters
        ----------
        model : ExtrapolateMode
            外推模式枚举:TIP=0 尖推、WEDGE=1 楔推、FLAT=2 平推
        point_set : Line or np.ndarray or List[List[float]]
            轮廓线
        extra_dir : ExtrapolateDirection
            外推方向,默认 BOTH
        forward_distance : float
            正侧距离
        backward_distance : float
            反侧距离
        auto_calc : bool
            自动计算外推法向量
        normal : List[float] | None
            外推法向量,auto_calc=True 时可省略
        zoom : float
            缩放比例
        pinchout_point_count : int
            楔推尖灭点数
        close : bool
            平推时是否封闭外推端
        taper_line_verical : bool
            楔推时是否按短轴尖灭

        Returns
        -------
        List[TINGeometry]
        """
        return contour_extrapolate_modeling_impl(
            model, point_set, extra_dir,
            forward_distance, backward_distance, auto_calc,
            normal, zoom, pinchout_point_count, close, taper_line_verical,
        )

    @staticmethod
    def unite_polydata(tin_list: list[TINGeometry]) -> List[TINGeometry]:
        """
        实体合并

        Parameters
        ----------
        tin_list : list[TINGeometry]
            待合并的三角网模型列表

        Returns
        -------
        List[TINGeometry]
            合并后的三角网模型列表
        """
        return unite_polydata_impl(tin_list)

    @staticmethod
    def multi_parallel_contour_modeling(
        polylines_set,
        space_x: float = 1.0,
        space_y: float = 1.0,
        vertical_tol: float = 0.5,
        close_end: bool = True,
    ) -> List[TINGeometry]:
        """
        多平行轮廓线建模

        Parameters
        ----------
        polylines_set : List[Line] or List[np.ndarray] or List[List[List[float]]]
            多条轮廓线数据集
        space_x : float
            X 方向网格大小
        space_y : float
            Y 方向网格大小
        vertical_tol : float
            垂直方向间隔容差
        close_end : bool
            是否封闭端部

        Returns
        -------
        List[TINGeometry]
        """
        return multi_parallel_contour_modeling_impl(
            polylines_set, space_x, space_y, vertical_tol, close_end,
        )

contour_extrapolate_modeling(model, point_set, extra_dir=ExtrapolateDirection.BOTH, forward_distance=25.0, backward_distance=25.0, auto_calc=True, normal=None, zoom=70.0, pinchout_point_count=2, close=True, taper_line_verical=False) staticmethod

轮廓线外推建模

Parameters

model : ExtrapolateMode 外推模式枚举:TIP=0 尖推、WEDGE=1 楔推、FLAT=2 平推 point_set : Line or np.ndarray or List[List[float]] 轮廓线 extra_dir : ExtrapolateDirection 外推方向,默认 BOTH forward_distance : float 正侧距离 backward_distance : float 反侧距离 auto_calc : bool 自动计算外推法向量 normal : List[float] | None 外推法向量,auto_calc=True 时可省略 zoom : float 缩放比例 pinchout_point_count : int 楔推尖灭点数 close : bool 平推时是否封闭外推端 taper_line_verical : bool 楔推时是否按短轴尖灭

Returns

List[TINGeometry]

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
@staticmethod
def contour_extrapolate_modeling(
    model: ExtrapolateMode,
    point_set,
    extra_dir: ExtrapolateDirection = ExtrapolateDirection.BOTH,
    forward_distance: float = 25.0,
    backward_distance: float = 25.0,
    auto_calc: bool = True,
    normal: List[float] | None = None,
    zoom: float = 70.0,
    pinchout_point_count: int = 2,
    close: bool = True,
    taper_line_verical: bool = False,
) -> List[TINGeometry]:
    """
    轮廓线外推建模

    Parameters
    ----------
    model : ExtrapolateMode
        外推模式枚举:TIP=0 尖推、WEDGE=1 楔推、FLAT=2 平推
    point_set : Line or np.ndarray or List[List[float]]
        轮廓线
    extra_dir : ExtrapolateDirection
        外推方向,默认 BOTH
    forward_distance : float
        正侧距离
    backward_distance : float
        反侧距离
    auto_calc : bool
        自动计算外推法向量
    normal : List[float] | None
        外推法向量,auto_calc=True 时可省略
    zoom : float
        缩放比例
    pinchout_point_count : int
        楔推尖灭点数
    close : bool
        平推时是否封闭外推端
    taper_line_verical : bool
        楔推时是否按短轴尖灭

    Returns
    -------
    List[TINGeometry]
    """
    return contour_extrapolate_modeling_impl(
        model, point_set, extra_dir,
        forward_distance, backward_distance, auto_calc,
        normal, zoom, pinchout_point_count, close, taper_line_verical,
    )

multi_parallel_contour_modeling(polylines_set, space_x=1.0, space_y=1.0, vertical_tol=0.5, close_end=True) staticmethod

多平行轮廓线建模

Parameters

polylines_set : List[Line] or List[np.ndarray] or List[List[List[float]]] 多条轮廓线数据集 space_x : float X 方向网格大小 space_y : float Y 方向网格大小 vertical_tol : float 垂直方向间隔容差 close_end : bool 是否封闭端部

Returns

List[TINGeometry]

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
@staticmethod
def multi_parallel_contour_modeling(
    polylines_set,
    space_x: float = 1.0,
    space_y: float = 1.0,
    vertical_tol: float = 0.5,
    close_end: bool = True,
) -> List[TINGeometry]:
    """
    多平行轮廓线建模

    Parameters
    ----------
    polylines_set : List[Line] or List[np.ndarray] or List[List[List[float]]]
        多条轮廓线数据集
    space_x : float
        X 方向网格大小
    space_y : float
        Y 方向网格大小
    vertical_tol : float
        垂直方向间隔容差
    close_end : bool
        是否封闭端部

    Returns
    -------
    List[TINGeometry]
    """
    return multi_parallel_contour_modeling_impl(
        polylines_set, space_x, space_y, vertical_tol, close_end,
    )

single_contour_modeling(method, line) staticmethod

单轮廓线封闭为面

Parameters

method : ContourAlgorithm 算法类型 line : Line or np.ndarray or List[List[float]] 轮廓线

Returns

List[TINGeometry]

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
@staticmethod
def single_contour_modeling(method: ContourAlgorithm, line) -> List[TINGeometry]:
    """
    单轮廓线封闭为面

    Parameters
    ----------
    method : ContourAlgorithm
        算法类型
    line : Line or np.ndarray or List[List[float]]
        轮廓线

    Returns
    -------
    List[TINGeometry]
    """
    return single_contour_modeling_impl(method, line)

two_contour_modeling(method, line1, line2) staticmethod

两轮廓线建模

Parameters

method : ContourAlgorithm 算法类型 line1 : Line or np.ndarray or List[List[float]] 第一条轮廓线 line2 : Line or np.ndarray or List[List[float]] 第二条轮廓线

Returns

List[TINGeometry]

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
@staticmethod
def two_contour_modeling(method: ContourAlgorithm, line1, line2) -> List[TINGeometry]:
    """
    两轮廓线建模

    Parameters
    ----------
    method : ContourAlgorithm
        算法类型
    line1 : Line or np.ndarray or List[List[float]]
        第一条轮廓线
    line2 : Line or np.ndarray or List[List[float]]
        第二条轮廓线

    Returns
    -------
    List[TINGeometry]
    """
    return two_contour_modeling_impl(method, line1, line2)

unite_polydata(tin_list) staticmethod

实体合并

Parameters

tin_list : list[TINGeometry] 待合并的三角网模型列表

Returns

List[TINGeometry] 合并后的三角网模型列表

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
@staticmethod
def unite_polydata(tin_list: list[TINGeometry]) -> List[TINGeometry]:
    """
    实体合并

    Parameters
    ----------
    tin_list : list[TINGeometry]
        待合并的三角网模型列表

    Returns
    -------
    List[TINGeometry]
        合并后的三角网模型列表
    """
    return unite_polydata_impl(tin_list)

ModelingError

Bases: RuntimeError

轮廓线建模异常基类

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
51
52
class ModelingError(RuntimeError):
    """轮廓线建模异常基类"""

ParallelContourModelingError

Bases: ModelingError

多平行轮廓线建模失败

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
67
68
class ParallelContourModelingError(ModelingError):
    """多平行轮廓线建模失败"""

SingleContourModelingError

Bases: ModelingError

单轮廓线封闭为面失败

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
59
60
class SingleContourModelingError(ModelingError):
    """单轮廓线封闭为面失败"""

SurfaceModeling

地表建模 — 从等高线生成三角网地表(DTM)

推荐用法(无需实例化)

lines = [line1, line2, line3] # 等高线列表 SurfaceModeling.create(lines, mode=0)

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
class SurfaceModeling:
    """
    地表建模 — 从等高线生成三角网地表(DTM)

    推荐用法(无需实例化)
    --------------------
    >>> lines = [line1, line2, line3]  # 等高线列表
    >>> SurfaceModeling.create(lines, mode=0)
    """

    @staticmethod
    def create(contour_lines, mode: int = 0, *,
               vertical_angle_threshold: float = 25.0,
               vertical_iterations: int = 10) -> List[TINGeometry]:
        """
        地表建模:从等高线生成三角网地表

        Parameters
        ----------
        contour_lines : List[Line] or List[np.ndarray] or List[List[List[float]]]
            等高线列表,每条为三维点序列。
        mode : int
            建模模式,默认 0。
        vertical_angle_threshold : float
            判定伪影三角形的法向量夹角阈值(度),默认 25.0。
        vertical_iterations : int
            伪影剥离最大迭代次数,默认 10。某轮无新伪影则提前退出。

        Returns
        -------
        List[TINGeometry]
            生成的三角网地表列表。
        """
        return surface_modeling_impl(
            contour_lines, mode,
            vertical_angle_threshold=vertical_angle_threshold,
            vertical_iterations=vertical_iterations,
        )

create(contour_lines, mode=0, *, vertical_angle_threshold=25.0, vertical_iterations=10) staticmethod

地表建模:从等高线生成三角网地表

Parameters

contour_lines : List[Line] or List[np.ndarray] or List[List[List[float]]] 等高线列表,每条为三维点序列。 mode : int 建模模式,默认 0。 vertical_angle_threshold : float 判定伪影三角形的法向量夹角阈值(度),默认 25.0。 vertical_iterations : int 伪影剥离最大迭代次数,默认 10。某轮无新伪影则提前退出。

Returns

List[TINGeometry] 生成的三角网地表列表。

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
@staticmethod
def create(contour_lines, mode: int = 0, *,
           vertical_angle_threshold: float = 25.0,
           vertical_iterations: int = 10) -> List[TINGeometry]:
    """
    地表建模:从等高线生成三角网地表

    Parameters
    ----------
    contour_lines : List[Line] or List[np.ndarray] or List[List[List[float]]]
        等高线列表,每条为三维点序列。
    mode : int
        建模模式,默认 0。
    vertical_angle_threshold : float
        判定伪影三角形的法向量夹角阈值(度),默认 25.0。
    vertical_iterations : int
        伪影剥离最大迭代次数,默认 10。某轮无新伪影则提前退出。

    Returns
    -------
    List[TINGeometry]
        生成的三角网地表列表。
    """
    return surface_modeling_impl(
        contour_lines, mode,
        vertical_angle_threshold=vertical_angle_threshold,
        vertical_iterations=vertical_iterations,
    )

SurfaceModelingError

Bases: ModelingError

地表建模失败

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
71
72
class SurfaceModelingError(ModelingError):
    """地表建模失败"""

TwoContourModelingError

Bases: ModelingError

两轮廓线建模失败

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
55
56
class TwoContourModelingError(ModelingError):
    """两轮廓线建模失败"""

contour_extrapolate_modeling_impl(model, point_set, extra_dir, forward_distance=25.0, backward_distance=25.0, auto_calc=True, normal=None, zoom=70.0, pinchout_point_count=2, close=True, taper_line_verical=False)

轮廓线外推建模

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
def contour_extrapolate_modeling_impl(
    model: ExtrapolateMode,
    point_set,
    extra_dir: ExtrapolateDirection,
    forward_distance: float = 25.0,
    backward_distance: float = 25.0,
    auto_calc: bool = True,
    normal: List[float] | None = None,
    zoom: float = 70.0,
    pinchout_point_count: int = 2,
    close: bool = True,
    taper_line_verical: bool = False,
) -> List[TINGeometry]:
    """轮廓线外推建模"""
    data = {
        "mode": int(model),
        "point_set": _normalize_line(point_set),
        "extra_dir": int(extra_dir),
        "forward_distance": forward_distance,
        "backward_distance": backward_distance,
        "auto_calc": auto_calc,
        "zoom": zoom,
        "pinchout_point_count": pinchout_point_count,
        "close": close,
        "taper_line_verical": taper_line_verical,
    }
    if normal is not None:
        data["normal"] = normal
    json_str = json.dumps(data, ensure_ascii=False)
    try:
        result = _native_contour_extrapolate_modeling(json_str)
    except Exception as exc:
        raise ContourExtrapolateModelingError(f"轮廓线外推建模失败: {exc}") from exc
    return [_native_tin_to_tingeometry(item) for item in result]

multi_parallel_contour_modeling_impl(polylines_set, space_x=1.0, space_y=1.0, vertical_tol=0.5, close_end=True)

多平行轮廓线建模

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
def multi_parallel_contour_modeling_impl(
    polylines_set,
    space_x: float = 1.0,
    space_y: float = 1.0,
    vertical_tol: float = 0.5,
    close_end: bool = True,
) -> List[TINGeometry]:
    """多平行轮廓线建模"""
    data = {
        "space_x": space_x,
        "space_y": space_y,
        "vertical_tol": vertical_tol,
        "close_end": close_end,
        "polylines_set": _normalize_polylines_set(polylines_set),
    }
    json_str = json.dumps(data, ensure_ascii=False)
    try:
        result = _native_multi_parallel_contour_modeling(json_str)
    except Exception as exc:
        raise ParallelContourModelingError(f"多平行轮廓线建模失败: {exc}") from exc
    return [_native_tin_to_tingeometry(item) for item in result]

single_contour_modeling_impl(method, line)

单轮廓线封闭为面

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
364
365
366
367
368
369
370
371
372
373
374
375
def single_contour_modeling_impl(method: ContourAlgorithm, line) -> List[TINGeometry]:
    """单轮廓线封闭为面"""
    data = {
        "algrithm": int(method),
        "point_set": _normalize_line(line),
    }
    json_str = json.dumps(data, ensure_ascii=False)
    try:
        result = _native_single_contour_modeling(json_str)
    except Exception as exc:
        raise SingleContourModelingError(f"单轮廓线封闭为面失败: {exc}") from exc
    return [_native_tin_to_tingeometry(item) for item in result]

surface_modeling_impl(contour_lines, mode=0, *, vertical_angle_threshold=25.0, vertical_iterations=10)

地表建模:输入等高线,输出三角网地表

Parameters

contour_lines : list 等高线列表。 mode : int 建模模式,默认 0。 vertical_angle_threshold : float 判定伪影三角形的法向量夹角阈值(度),默认 25.0。 vertical_iterations : int 伪影剥离最大迭代次数,默认 10。某轮无新伪影则提前退出。

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
def surface_modeling_impl(contour_lines, mode: int = 0, *,
                         vertical_angle_threshold: float = 25.0,
                         vertical_iterations: int = 10) -> List[TINGeometry]:
    """地表建模:输入等高线,输出三角网地表

    Parameters
    ----------
    contour_lines : list
        等高线列表。
    mode : int
        建模模式,默认 0。
    vertical_angle_threshold : float
        判定伪影三角形的法向量夹角阈值(度),默认 25.0。
    vertical_iterations : int
        伪影剥离最大迭代次数,默认 10。某轮无新伪影则提前退出。
    """
    normalized = [_normalize_line(line) for line in contour_lines]
    try:
        result = _native_surface_modeling(normalized, mode=mode)
    except Exception as exc:
        raise SurfaceModelingError(f"地表建模失败: {exc}") from exc

    tins: List[TINGeometry] = []
    for item in result:
        item = _remove_vertical_triangles(
            item,
            angle_threshold=vertical_angle_threshold,
            iterations=vertical_iterations,
        )
        tins.append(_native_tin_to_tingeometry(item))
    return tins

two_contour_modeling_impl(method, line1, line2)

两轮廓线建模

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
350
351
352
353
354
355
356
357
358
359
360
361
def two_contour_modeling_impl(method: ContourAlgorithm, line1, line2) -> List[TINGeometry]:
    """两轮廓线建模"""
    data = {
        "algrithm": int(method),
        "polylines_set": [_normalize_line(line1), _normalize_line(line2)],
    }
    json_str = json.dumps(data, ensure_ascii=False)
    try:
        result = _native_two_contour_modeling(json_str)
    except Exception as exc:
        raise TwoContourModelingError(f"两轮廓线建模失败: {exc}") from exc
    return [_native_tin_to_tingeometry(item) for item in result]

unite_polydata_impl(tin_list)

实体合并(TINGeometry → NativeTin → C++ 合并 → TINGeometry)

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
414
415
416
417
418
419
420
421
def unite_polydata_impl(tin_list: list[TINGeometry]) -> List[TINGeometry]:
    """实体合并(TINGeometry → NativeTin → C++ 合并 → TINGeometry)"""
    native_objs = [_tingeometry_to_native_tin(tin) for tin in tin_list]
    try:
        result = _native_unite_polydata(native_objs)
    except Exception as exc:
        raise ModelingError(f"实体合并失败: {exc}") from exc
    return [_native_tin_to_tingeometry(item) for item in result]