NX二次开发-将3X3矩阵修正为正交且长度为单位长度的矩阵
函数:UF_MTX3_ortho_normalize()
函数说明:将矩阵修正为正交且xyz长度为单位长度的矩阵。下图中输入的矩阵为三条线段的端点,经过修正后,生成一个坐标系。
1 #include "Text.h" 2 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 3 { 4 UF_initialize(); 5 6 double douMatrixValues[9] = {1, 1, 1, 1, 0 ,0, 0, 0, 1}; 7 8 tag_t tagLine; 9 UF_CURVE_line_t tLin; 10 tLin.start_point[0] = 0; 11 tLin.start_point[1] = 0; 12 tLin.start_point[2] = 0; 13 tLin.end_point[0] = douMatrixValues[0]; 14 tLin.end_point[1] = douMatrixValues[1]; 15 tLin.end_point[2] = douMatrixValues[2]; 16 UF_CURVE_create_line(&tLin, &tagLine); 17 tLin.end_point[0] = douMatrixValues[3]; 18 tLin.end_point[1] = douMatrixValues[4]; 19 tLin.end_point[2] = douMatrixValues[5]; 20 UF_CURVE_create_line(&tLin, &tagLine); 21 tLin.end_point[0] = douMatrixValues[6]; 22 tLin.end_point[1] = douMatrixValues[7]; 23 tLin.end_point[2] = douMatrixValues[8]; 24 UF_CURVE_create_line(&tLin, &tagLine); 25 26 UF_MTX3_ortho_normalize(douMatrixValues); 27 28 //通过数组创建矩阵 29 tag_t tagMatrixId = NULL_TAG; 30 UF_CSYS_create_matrix(douMatrixValues, &tagMatrixId); 31 32 double douCsysOrigin[3] = { 0,0,0 }; 33 //创建坐标系 34 tag_t tagCSYS = NULL_TAG; 35 UF_CSYS_create_csys(douCsysOrigin, tagMatrixId, &tagCSYS); 36 UF_terminate(); 37 } 38 39 extern int ufusr_ask_unload(void) 40 { 41 return (UF_UNLOAD_IMMEDIATELY); 42 }