Skip to content

bridge

lib C++ 包装类型与 models Pydantic 模型之间的桥接层

所有转换函数均使用函数内 lazy import,避免 libmodels 之间产生导入期循环依赖。

dmdbline_to_model(line)

DmDbLine 转换为 models.Line

Source code in dimine_python_sdk\lib\bridge.py
55
56
57
58
59
60
61
62
63
def dmdbline_to_model(line: "DmDbLine"):
    """将 ``DmDbLine`` 转换为 ``models.Line``"""
    from dimine_python_sdk.models import Line

    import numpy as np

    points = line.get_graph_data()
    arr = np.array([[p.x, p.y, p.z] for p in points], dtype=np.float32)
    return Line(geometry=arr)

dmdbpolyline_to_model(polyline)

DmDbPolyline 转换为 models.Line

Source code in dimine_python_sdk\lib\bridge.py
66
67
68
69
70
71
72
73
74
def dmdbpolyline_to_model(polyline: "DmDbPolyline"):
    """将 ``DmDbPolyline`` 转换为 ``models.Line``"""
    from dimine_python_sdk.models import Line

    import numpy as np

    points = polyline.get_graph_data()
    arr = np.array([[p.x, p.y, p.z] for p in points], dtype=np.float32)
    return Line(geometry=arr)

dmdpoint_to_model(pt)

DmDPoint 转换为 models.Point

Source code in dimine_python_sdk\lib\bridge.py
32
33
34
35
36
37
38
39
40
def dmdpoint_to_model(pt: "DmDPoint"):
    """将 ``DmDPoint`` 转换为 ``models.Point``"""
    from dimine_python_sdk.models import Point

    import numpy as np

    return Point(
        geometry=np.array([pt.x, pt.y, pt.z], dtype=np.float32),
    )

dmpolydata_to_tingeometry(polydata)

DmPolyData 转换为 models.TINGeometry

通过 DmDbLayer.insert_shell 生成 DmDbShell,再调用 parse_to_json 提取顶点坐标与三角面片索引。

Source code in dimine_python_sdk\lib\bridge.py
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
def dmpolydata_to_tingeometry(polydata):
    """
    将 ``DmPolyData`` 转换为 ``models.TINGeometry``

    通过 ``DmDbLayer.insert_shell`` 生成 ``DmDbShell``,再调用 ``parse_to_json``
    提取顶点坐标与三角面片索引。
    """
    from dimine_python_sdk.lib.db.database import DmDbLayer
    from dimine_python_sdk.models import TINGeometry

    import numpy as np

    layer = DmDbLayer()
    shell = layer.insert_shell(polydata)
    data = shell.parse_to_json()

    # points 为嵌套列表 [[x1, y1, z1], [x2, y2, z2], ...]
    raw_points = data["points"]
    points = np.array(raw_points, dtype=np.float32)

    # indexs 为嵌套列表 [[i1, i2, i3], ...]
    raw_faces = data["indexs"]
    faces = np.array(raw_faces, dtype=np.int32)

    return TINGeometry(points=points, faces=faces)

model_to_dmdpoint(pt)

models.Point 转换为 DmDPoint

Source code in dimine_python_sdk\lib\bridge.py
43
44
45
46
47
48
def model_to_dmdpoint(pt):
    """将 ``models.Point`` 转换为 ``DmDPoint``"""
    from dimine_python_sdk.lib.types.point import DmDPoint

    arr = pt.geometry
    return DmDPoint(float(arr[0]), float(arr[1]), float(arr[2]))