从VBA转换为C#

时间:2012-11-17 13:17:53

标签: c# vba solidworks

我想用C#语言转换这个VBA代码,但是我得到了这个错误:'SolidWorks.Interop.sldworks.IFace2.Normal'是'属性'但是像'方法'一样使用

请帮助我如何解决此错误。

VBA:

Option Explicit On
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swFace As SldWorks.face2
    Dim vNorm As Object

    swApp = Application.SldWorks
    swModel = swApp.ActiveDoc
    swSelMgr = swModel.SelectionManager
    swFace = swSelMgr.GetSelectedObject5(1)

    vNorm = swFace.Normal
    Debug.Print("Normal = (" & vNorm(0) & ", " & vNorm(1) & ", " & vNorm(2) & ")")
End Sub

C#:

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;
using System;
using System.Diagnostics;

namespace NORMAL.csproj
{
    public partial class SolidWorksMacro
    {
        public void Main()
        {

            SldWorks swApp = default(SldWorks); ModelDoc2 swModel = default(ModelDoc2); SelectionMgr swSelMgr = default(SelectionMgr); Face2 swFace = default(Face2);

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swSelMgr = (SelectionMgr)swModel.SelectionManager;
            swFace = (Face2)swSelMgr.GetSelectedObject6(1, -1);

            Double[] vNorm = (Double[])swFace.Normal();
            Debug.Print("vNorm:  " + vNorm[0]);
        }
        /// <summary>
        ///  The SldWorks swApp variable is pre-assigned for you.
        /// </summary>
        public SldWorks swApp;
    }
}

我还有一个问题。 我该如何转换:

VBA: `

Set swXform = swDocExt.GetCoordinateSystemTransformByName(sAxisName)
Debug.Print "    Rotational sub-matrix 1   = (" & swXform.ArrayData(2) & ")"

`

C#(不工作) `

swXform = swDocExt.GetCoordinateSystemTransformByName(sAxisName);
Debug.Print("    Rotational sub-matrix 1   = (" + swXform.ArrayData[2] + ") mm");

`

1 个答案:

答案 0 :(得分:3)

更改此行

Double[] vNorm = (Double[])swFace.Normal();

Double[] vNorm = (Double[])swFace.Normal;