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 }
原文地址:https://www.cnblogs.com/KMould/p/12550904.html