【UG\NX二次开发-UFUN函数】通过面创建面的中心线和坐标系

	//获取面的中心点
	double uvs[4];
	UF_MODL_ask_face_uv_minmax(faceTag, uvs); //获得面u,v参数空间(u,v最小,最大值)
	double param[2];       //输入U,V方向值
	param[0] = uvs[0] + (uvs[1] - uvs[0]) * 0.5;
	param[1] = uvs[2] + (uvs[3] - uvs[2]) * 0.5;
	double midPoint[3];     //输出点坐标
	double u1[3];        //输出 输出一阶导数在U位置
	double v1[3];        //输出 输出一阶导数在V位置
	double u2[3];        //输出 输出二阶导数在U位置
	double v2[3];        //输出 输出二阶导数在V位置
	double unit_norm[3]; //输出面上该点的矢量方向
	double radii[2];     //输出,双半径,输出主曲率半径
	UF_MODL_ask_face_props(faceTag, param, midPoint, u1, v1, u2, v2, unit_norm, radii);

	//获取面四个辅助点
	double tempPoint1[3];
	param[0] = uvs[0] + (uvs[1] - uvs[0]);
	param[1] = uvs[2] + (uvs[3] - uvs[2]) * 0.5;
	UF_MODL_ask_face_props(faceTag, param, tempPoint1, u1, v1, u2, v2, unit_norm, radii);
	double tempPoint2[3];
	param[0] = uvs[0];
	param[1] = uvs[2] + (uvs[3] - uvs[2]) * 0.5;
	UF_MODL_ask_face_props(faceTag, param, tempPoint2, u1, v1, u2, v2, unit_norm, radii);
	double tempPoint3[3];
	param[0] = uvs[0] + (uvs[1] - uvs[0]) * 0.5;
	param[1] = uvs[2] + (uvs[3] - uvs[2]);
	UF_MODL_ask_face_props(faceTag, param, tempPoint3, u1, v1, u2, v2, unit_norm, radii);
	double tempPoint4[3];
	param[0] = uvs[0] + (uvs[1] - uvs[0]) * 0.5;
	param[1] = uvs[2];
	UF_MODL_ask_face_props(faceTag, param, tempPoint4, u1, v1, u2, v2, unit_norm, radii);

	//创建中心线
	//createCenterLine(tempPoint1, tempPoint2, tempPoint3, tempPoint4);

	//输入X向量Y向量输出一个3*3矩阵
	double XVec[3];//传入辅助点构成的X向量
	double dist1 = 0;
	UF_VEC3_distance(tempPoint1, tempPoint2, &dist1);
	double veccX[3] = { 0 };
	UF_VEC3_sub(tempPoint1, tempPoint2, veccX);
	UF_VEC3_unitize(veccX, 0.01, &dist1, XVec);//归一化向量

	double YVec[3];
	double dist2 = 0;
	UF_VEC3_distance(tempPoint3, tempPoint4, &dist2);
	double veccY[3] = { 0 };
	UF_VEC3_sub(tempPoint3, tempPoint4, veccY);
	UF_VEC3_unitize(veccY, 0.01, &dist2, YVec);//归一化向量

	double Mtx[9];
	UF_MTX3_initialize(XVec, YVec, Mtx);//最终获取正确的矩阵

	//创建一个3 x 3矩阵
	tag_t MatrixID = NULL_TAG;
	UF_CSYS_create_matrix(Mtx, &MatrixID);
	//创建CSYS坐标系
	tag_t CsysId = NULL_TAG;
	UF_CSYS_create_temp_csys(midPoint, MatrixID, &CsysId);
	//设置WCS位置
	tag_t wcsTag = NULL_TAG;
	UF_CSYS_ask_wcs(&wcsTag);
	UF_CSYS_set_wcs(CsysId);


//创建中心线
void zhinenghukou_project::createCenterLine(double point1[3], double point2[3], double point3[3], double point4[3])
{
	if (lineTag1 != NULL_TAG || lineTag2 != NULL_TAG)
	{
		UF_OBJ_delete_object(lineTag1);
		UF_OBJ_delete_object(lineTag2);
		lineTag1 = NULL_TAG;
		lineTag2 = NULL_TAG;
	}
	

	UF_CURVE_line_t line_coords1;
	line_coords1.start_point[0] = point1[0];
	line_coords1.start_point[1] = point1[1];
	line_coords1.start_point[2] = point1[2];
	line_coords1.end_point[0] = point2[0];
	line_coords1.end_point[1] = point2[1];
	line_coords1.end_point[2] = point2[2];

	UF_CURVE_create_line(&line_coords1, &lineTag1);
	UF_OBJ_set_color(lineTag1, 186);//设置颜色
	UF_OBJ_set_font(lineTag1, UF_OBJ_FONT_DASHED);//设置线型
	UF_CURVE_line_t line_coords2;
	line_coords2.start_point[0] = point3[0];
	line_coords2.start_point[1] = point3[1];
	line_coords2.start_point[2] = point3[2];
	line_coords2.end_point[0] = point4[0];
	line_coords2.end_point[1] = point4[1];
	line_coords2.end_point[2] = point4[2];

	UF_CURVE_create_line(&line_coords2, &lineTag2);
	UF_OBJ_set_color(lineTag2, 186);
	UF_OBJ_set_font(lineTag2, UF_OBJ_FONT_DASHED);
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值