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
59
60
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
 80
 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
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
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
@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
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
@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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
@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
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
@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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
@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
47
48
class ModelingError(RuntimeError):
    """轮廓线建模异常基类"""

ParallelContourModelingError

Bases: ModelingError

多平行轮廓线建模失败

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

SingleContourModelingError

Bases: ModelingError

单轮廓线封闭为面失败

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

TwoContourModelingError

Bases: ModelingError

两轮廓线建模失败

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
51
52
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
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
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
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
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
247
248
249
250
251
252
253
254
255
256
257
258
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]

two_contour_modeling_impl(method, line1, line2)

两轮廓线建模

Source code in dimine_python_sdk\lib\exploitation\contour_modeling.py
233
234
235
236
237
238
239
240
241
242
243
244
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
297
298
299
300
301
302
303
304
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]