函数:UF_MTX3_vec_multiply_t() 或者UF_MTX3_vec_multiply()。推荐使用UF_MTX3_vec_multiply_t()
函数说明:将向量按照矩阵进行变换:绝对坐标系下有向量vec,矩阵tagMatrix直接用WCS坐标系的矩阵。vec与tagMatrix乘积得到vec_product。为了更直观我们使用UF_CURVE_create_line创建一条直线来看一下。
结果:红色矢量为vec、绿色矢量为vec_product。红色向量与ABS坐标的相对位置 ,和绿色向量与tagMatrix矩阵坐标系(WCS)的位置是一致的。结论:使用UF_MTX3_vec_multiply_t()将矢量乘一个矩阵的几何意义就是将矢量与之前的坐标相对位置,转换为此矩阵坐标系下对应的位置。
1 #include "Text.h" 2 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 3 { 4 UF_initialize(); 5 6 //获取WCS标识 7 tag_t tagWCS = NULL_TAG; 8 UF_CSYS_ask_wcs(&tagWCS); 9 10 //获取WCS的原点坐标和矩阵标 11 tag_t tagCsys; //原点坐标 12 tag_t tagMatrix; //矩阵标识 13 double couCsysOrigin[3]; 14 UF_CSYS_ask_csys_info(tagWCS, &tagMatrix, couCsysOrigin); 15 16 //获取指定矩阵标识的矩阵值 17 double douMatrixValues[9]; 18 UF_CSYS_ask_matrix_values(tagMatrix, douMatrixValues); 19 20 double vec[3] = { 1,1,1 }; 21 double startPoint[3] = { 0,0,0 }; 22 UF_CURVE_line_t tLin; 23 tLin.start_point[0] = startPoint[0]; 24 tLin.start_point[1] = startPoint[1]; 25 tLin.start_point[2] = startPoint[2]; 26 tLin.end_point[0] = vec[0]; 27 tLin.end_point[1] = vec[1]; 28 tLin.end_point[2] = vec[2]; 29 30 tag_t tagLine; 31 UF_CURVE_create_line(&tLin, &tagLine); 32 33 double vec_product[3]; 34 UF_MTX3_vec_multiply_t(vec, douMatrixValues, vec_product);//向量乘矩阵 35 36 tLin.end_point[0] = vec_product[0]; 37 tLin.end_point[1] = vec_product[1]; 38 tLin.end_point[2] = vec_product[2]; 39 UF_CURVE_create_line(&tLin, &tagLine); 40 41 UF_terminate(); 42 } 43 44 extern int ufusr_ask_unload(void) 45 { 46 return (UF_UNLOAD_IMMEDIATELY); 47 }