今天我们来看下solidworks中的坐标矩阵转换,这个例子是把子零件中的一个基准轴的两个端点读出来,并转换到总装配的坐标系中,得到在总装配体坐标系的位置,可以进一步判断轴的真实安装方向。
直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 private void btn_Transform_PartToAsm_Click (object sender, EventArgs e ) { ISldWorks swApp = Utility.ConnectToSolidWorks(); ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc; SelectionMgr swSelMgr = swModel.ISelectionManager; Feature swFeat = (Feature)swSelMgr.GetSelectedObject6(1 , 0 ); String sAxisName = swFeat.Name; RefAxis RefAxis = swFeat.GetSpecificFeature2(); var vParam = RefAxis.GetRefAxisParams(); Component2 inletPart = swSelMgr.GetSelectedObjectsComponent4(1 , 0 ); double [] nPt = new double [3 ]; double [] nPt2 = new double [3 ]; object vPt; object vPt2; nPt[0 ] = vParam[0 ]; nPt[1 ] = vParam[1 ]; nPt[2 ] = vParam[2 ]; nPt2[0 ] = vParam[3 ]; nPt2[1 ] = vParam[4 ]; nPt2[2 ] = vParam[5 ]; vPt = nPt; vPt2 = nPt2; MathUtility swMathUtil = (MathUtility)swApp.GetMathUtility(); MathTransform mathTransform = inletPart.Transform2; MathTransform swXform = (MathTransform)mathTransform; MathPoint swMathPt = (MathPoint)swMathUtil.CreatePoint((vPt)); MathPoint swMathPt2 = (MathPoint)swMathUtil.CreatePoint((vPt2)); swMathPt = (MathPoint)swMathPt.MultiplyTransform(swXform); swMathPt2 = (MathPoint)swMathPt2.MultiplyTransform(swXform); var x = swMathPt.ArrayData[0 ]; var y = swMathPt.ArrayData[1 ]; var z = swMathPt.ArrayData[2 ]; var x2 = swMathPt2.ArrayData[0 ]; var y2 = swMathPt2.ArrayData[1 ]; var z2 = swMathPt2.ArrayData[2 ]; var v1 = x2 - x; var v2 = y2 - y; var v3 = z2 - z; if (Math.Round(v3, 4 ) != 0 && Math.Round(v1, 4 ) == 0 && Math.Round(v2, 4 ) == 0 ) { MessageBox.Show("此轴在Z方向上" ); } }
比较全的关于矩阵转换的一篇文章:
bookmark