一、什么是Spin
Spin也被称为旋转建模,是一种将几何或拓扑实体进行绕轴旋转形成新的几何或拓扑实体的算法,旋转建模和拉伸建模非常类似,区别是拉伸建模是"直线运动",而旋转建模是"圆周运动"。
旋转建模是一个基础且常用的建模功能,下面列举了一部分几何内核以及AutoCAD、Revit SDK中提供的旋转建模接口。
二、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
)
各类型的实体旋转结果如下:
三、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);
效果演示 
转载请注明来源本文地址:https://m.tuituisoft/gongyesheji/250189.html