iCAx开思网

标题: 工程图的矩阵转换 [打印本页]

作者: hyccai    时间: 2011-5-22 20:13
标题: 工程图的矩阵转换
学到了工程图,建立一般视图的那个矩阵是怎样转换过来的,
对这个矩阵还是一点都不懂,例子也看了,谁能大概说说下?
先谢了
作者: hyccai    时间: 2011-5-23 18:42
卡在这里了,就是下面这个函数
ProDrawingGeneralviewCreate(drawing, solid, sheet, PRO_B_FALSE,pos1, 1,matrix, &view);
作者: DavidJiang    时间: 2011-5-23 20:59
这个matix可以从视图中获得,ProViewMatrixGet()
作者: aaron_2010    时间: 2011-5-24 08:54
等这一阵子忙完了,也来看看工程图部分。
作者: hust65    时间: 2011-5-24 09:45
1# hyccai
如果你是對矩陣不懂,有時間可以去找本computer graphic或OpenGL的書來看看,
裡面都會介紹矩陣變換的原理
多多少少會有一些幫助
作者: hyccai    时间: 2011-5-24 10:53
谢谢几位,我确实是对矩阵一点都不懂,我想我还是去看下计算机图形学再说吧
作者: hyccai    时间: 2011-5-25 08:20
昨晚浏览了下传说中的那本书,太难了,一个子也看不明白,想问个比较直接的问题,
假设我以坐标系来定视角,那么那个矩阵是怎样得到,思路应该是怎样子?
作者: hust65    时间: 2011-5-26 09:33
hyccai 发表于 2011-5-25 08:20
昨晚浏览了下传说中的那本书,太难了,一个子也看不明白,想问个比较直接的问题,
假设我以坐标系来定视角,那么那个矩阵是怎样得到,思路应该是怎样子?


矩陣轉換就是兩個座標軸的轉換
假設第一個座標軸固定
那ProMatrix 的 4x4矩陣裡前面3x3可以想成兩個座標軸在同一個原點,第二個座標軸對第一個座標軸的旋轉關係
下面[4][1]、[4][2]、[4][3]的值就是第二個座標軸對第一個座標軸的平移量
[4][4]就是對第一個座標軸的比例縮放值

如此,空間中兩個座標軸的座標值就可以透過矩陣彼此轉換
作者: hyccai    时间: 2011-5-27 08:07
谢谢!开始有点云里雾里。假设得到了一个坐标下点的值,那么怎样转换成另一坐标下的值。
作者: hyccai    时间: 2011-5-27 10:17
应该是这样子问,假设装配模式下,A,PRT的坐标a_csys相对于B.PRT的坐标到底平移/旋转了多少,
应该怎样得到
作者: hust65    时间: 2011-5-30 15:06
10# hyccai

好像在裝配件下沒有各零件的矩陣關係
只能用 ProAsmcomppathTrfGet取得零件與裝配件的矩陣關係
在自己去換算了
作者: hyccai    时间: 2011-6-1 12:26
11# hust65 谢谢,论坛上的段代码,能不能帮看下错在哪
int UsrCreateSheet()
{   
ProError status;
    ProDrawing drawing;
    int sheet;
    ProSolid solid;
    ProVector pos,outpos;
    ProView view, pview;
    ProVector outline[2];
    ProMatrix matrix,inv_matrix,tem_matrix;
ProName   w_size;
ProMdlType type = PRO_PART;
wchar_t   wname[PRO_LINE_SIZE];
//char fname[30] = "sheets.txt";
    //FILE *fp=fopen(fname, "w");
/*--------------------------------------------------------------------*\     
Create a new sheet and make it current
\*--------------------------------------------------------------------*/
    status = ProMdlCurrentGet((ProMdl)&drawing);
    ProDrawingSheetCreate(drawing, &sheet);
    ProDrawingCurrentSheetSet(drawing, sheet);
/*--------------------------------------------------------------------*\     
Add a solid to the drawing
\*--------------------------------------------------------------------*/     
    ProStringToWstring(wname,"D:\\debuggingprogram\\cycs\\chabei.prt");
    ProMdlRetrieve(wname,type,(ProMdl*)&solid);
    ProDrawingSolidAdd(drawing, solid);
/*--------------------------------------------------------------------*\
Create a general view from the Z axis direction
\*--------------------------------------------------------------------*/
    ProUtilMatrixCopy(NULL, matrix);
    pos[0] = 200.0;
    pos[1] = 600.0;
    pos[2] = 0.0;

ProDrawingSheetTrfGet (drawing, 1, w_size, matrix);
ProUtilMatrixInvert(matrix,inv_matrix);
    ProUtilPointTrans(inv_matrix,pos,outpos);
ProPntTrfEval (pos, inv_matrix, outpos);
//我发现下面的status返回PRO_TK_GENERAL_ERROR,但是不知道是错在哪了
    status=ProDrawingGeneralviewCreate(drawing, solid, sheet, PRO_B_FALSE,
                outpos, 0.5, matrix, &view);

/*--------------------------------------------------------------------*\     
Get the position and size of the new view
\*--------------------------------------------------------------------*/
   ProDrawingViewOutlineGet(drawing, view, outline);
/*--------------------------------------------------------------------*\     
Create a projected view to the right of the general view
\*--------------------------------------------------------------------*/
    pos[0] = outline[1][0] + (outline[1][0] - outline[0][0]);
    pos[1] = (outline[0][1] + outline[1][1]) / 2.0;
    pos[2] = 0.0;
    ProDrawingProjectedviewCreate(drawing, view, PRO_B_FALSE, pos,
           &pview);
/*--------------------------------------------------------------------*\     
Create a projected view below the general view
\*--------------------------------------------------------------------*/
    pos[0] = (outline[0][0] + outline[1][0]) / 2.0;
    pos[1] = outline[0][1] - (outline[1][1] - outline[0][1]);
    ProDrawingProjectedviewCreate(drawing, view, PRO_B_FALSE, pos,
           &pview);
    return(1);
}

本帖最后由 hyccai 于 2011-6-1 12:28 编辑
作者: hyccai    时间: 2011-6-2 13:31
找到错在哪了。




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3