首页/工业设计

Parasolid建模算法-Spin

发布于:2025-07-31 23:02:42
494人 分享

一、什么是Spin

Spin也被称为旋转建模,是一种将几何或拓扑实体进行绕轴旋转形成新的几何或拓扑实体的算法,旋转建模和拉伸建模非常类似,区别是拉伸建模是"直线运动",而旋转建模是"圆周运动"。 

旋转建模是一个基础且常用的建模功能,下面列举了一部分几何内核以及AutoCAD、Revit SDK中提供的旋转建模接口。

SDK
旋转建模实现接口
Parasolid
PK_BODY_spin、PK_VERTEX_spin等
OpenCascade
BRepPrimAPI_MakeRevol
ACIS
api_sweep_with_options
CGM
CATICGMTopRevol
Revit API
GeometryCreationUtilities.CreateRevolvedGeometry
AutoCAD API
Solid3d.CreateRevolvedSolid

二、Parasolid中Spin相关接口

Parasolid中支持对拓扑点(VERTEX)、线框(WireBody)、薄片(SheetBody)、拓扑面(FACE)以及曲线(CURVE)、B样条曲线(BCURVE)进行spin,下面一一对其介绍。

  • PK_VERTEX_spin 
    对拓扑点进行Spin将生成一个圆弧拓扑边以及新的拓扑点,应当注意:进行Spin的VERTEX不能属于其他拓扑对象,可创建一个MinimumBody并获取其唯一的VERTEX进行Spin。
PK_ERROR_code_t         PK_VERTEX_spin
(
--- received arguments ---
PK_VERTEX_t             vertex,        --- end vertex of wire body
const PK_AXIS1_sf_t    *axis,          --- spin axis
double                  angle,         --- spin angle
PK_LOGICAL_t            local_check,   --- whether local checking will be done

--- returned arguments ---
PK_EDGE_t        *const lateral,       --- new edge
PK_VERTEX_t      *const base,          --- swept vertex
PK_local_check_t *const check_result   --- result of local check
)
  • PK_CURVE_spin和PK_CURVE_spin_2 
    对几何曲面进行旋转会生成几何曲面,如将一个与Z轴平行的直线绕Z轴旋转可生成一个圆柱面。
PK_ERROR_code_t      PK_CURVE_spin
(
--- received arguments ---
PK_CURVE_t           curve,      --- curve to spin
const PK_AXIS1_sf_t *axis,       --- axis around which to spin curve

--- returned arguments ---
PK_SURF_t     *const surf        --- spun surface
)
  • PK_BCURVE_spin 
    对B样条曲线进行旋转会生成B样条曲面。
PK_ERROR_code_t      PK_BCURVE_spin
(
--- received arguments ---
PK_BCURVE_t          bcurve,      --- bcurve
const PK_AXIS1_sf_t *axis,        --- axis around which to spin bcurve
double               angle,       --- angle of spin

--- returned arguments ---
PK_BSURF_t    *const bsurf        --- resulting bsurf
)
  • PK_FACE_spin
    将拓扑实体上的某些拓扑面进行旋转变换,将改变原有拓扑实体的形状。
PK_ERROR_code_t         PK_FACE_spin
(
--- received arguments ---
int                     n_faces,       --- number of faces
const PK_FACE_t         faces[],       --- faces
const PK_AXIS1_sf_t    *axis,          --- spin axis
double                  angle,         --- spin angle
PK_LOGICAL_t            local_check,   --- whether local checking will be done

--- returned arguments ---
int              *const n_laterals,    --- number of laterals
PK_FACE_t       **const laterals,      --- new faces (may be NULL)
PK_EDGE_t       **const bases,         --- edges swept into laterals
                                       --- (may be NULL)
PK_local_check_t *const check_result   --- result of local check
)
  • PK_BODY_spin
    支持对点(MinimumBody)、线(WireBody)、面(SheetBody)进行旋转建模。
PK_ERROR_code_t         PK_BODY_spin
(
--- received arguments ---
PK_BODY_t               body,          --- minimum, wire or sheet body
const PK_AXIS1_sf_t    *axis,          --- spin axis
double                  angle,         --- spin angle
PK_LOGICAL_t            local_check,   --- whether local checking will be done

--- returned arguments ---
int              *const n_laterals,    --- number of laterals
PK_TOPOL_t      **const laterals,      --- new edges of faces (may be NULL)
PK_TOPOL_t      **const bases,         --- entities swept into laterals
                                       --- (may be NULL)
PK_local_check_t *const check_result   --- result of local check
)

各类型的实体旋转结果如下:

Body类型
Spin结果
Minimum
Wire
Wire
Sheet
Sheet
Solid

三、Parasolid中Spin接口的用法

3.1 PK_VERTEX_spin

  • 代玛样例 
    如下代玛展示了如何创建MinimumBody、获取拓扑顶点、对拓扑点进行旋转建模生成拓扑边的过程。
PK_POINT_t minimum_point = PK_ENTITY_null;
PK_POINT_sf_t point_sf;
point_sf.position = { 0, 10, -3 };

PK_ERROR_code_t err = PK_POINT_create(&point_sf, &minimum_point);

PK_BODY_t minimum_body = PK_ENTITY_null;
err = PK_POINT_make_minimum_body(minimum_point, &minimum_body);

int n_vertices = 0;
PK_VERTEX_t* vertices = nullptr;
PK_BODY_ask_vertices(minimum_body, &n_vertices, &vertices);

PK_AXIS1_sf_t spin_axis;
spin_axis.location = { 0, 0, 0 };
spin_axis.axis = { 0, 0, 1 };

PK_EDGE_t lateral = 0;
PK_VERTEX_t base = 0;
PK_local_check_t check_result;
err = PK_VERTEX_spin(vertices[0], &spin_axis, M_PI, true, &lateral, &base, &check_result);

3.2 PK_CURVE_spin_2

  • 代玛样例
    如下代玛展示了如何创建直线、将直线旋转成圆柱面、通过UV裁剪将几何圆柱面转换成拓扑圆柱面(Sheet)的过程。
PK_LINE_sf_t line_sf;
line_sf.basis_set.axis = { 0,0,1 };
line_sf.basis_set.location = { 5,0,0 };

PK_LINE_t line;
PK_ERROR_code_t err = PK_LINE_create(&line_sf, &line);

PK_AXIS1_sf_t spin_axis;
spin_axis.location = { 0, 0, 0 };
spin_axis.axis = { 0, 0, 1 };

PK_SURF_t surf = 0;
err = PK_CURVE_spin(line, &spin_axis, &surf);

PK_UVBOX_t surf_uvbox;
err = PK_SURF_ask_uvbox(surf, &surf_uvbox);

surf_uvbox.param[1] = -3;
surf_uvbox.param[3] = 3;

PK_BODY_t surf_sheet = PK_ENTITY_null;
err = PK_SURF_make_sheet_body(surf, surf_uvbox, &surf_sheet);
  • 效果演示
    腿腿教学网-Parasolid建模算法-Spin


转载请注明来源本文地址:https://m.tuituisoft/gongyesheji/250189.html

上一篇:没有了 下一篇:没有了