UG/NX 二次开发(C#) 获取曲面的中心点坐标

 二开过程中,需要用到曲面的中心点坐标,没有直接的获取方法,找了一些群友问,大佬甩我一句0.5uv,完全没看明白什么意思,没有设计基础做二开的是尴尬。
经过多方查阅资料终于明白大佬的意思,顺便整理出来与大家分享。

废话不多说,直接上源码:

    /// 
    /// 获取曲面的中心点
    /// 
    /// 
    /// 
    public static Point3d GetCenterPoint(Face face)
    {
        theUFSession = UFSession.GetUFSession();
        IntPtr evaluator;
        theUFSession.Evalsf.Initialize2(face.Tag, out evaluator);  //初始化面部评估器结构 
        double[] uv_min_max = new double[4] { 0.0, 1.0, 0.0, 1.0 };
        theUFSession.Evalsf.AskFaceUvMinmax(evaluator, uv_min_max);   //计算面的u,v参数空间min,max 
        double[] uv_pair = { 0.5 * (uv_min_max[0] + uv_min_max[1]), 0.5 * (uv_min_max[2] + uv_min_max[3]) };

        ModlSrfValue surf_eval;
        theUFSession.Evalsf.Evaluate(evaluator, UFConstants.UF_MODL_EVAL_ALL, uv_pair, out surf_eval); //在给定参数值下评估面的点和导数。

        Point3d origin;
        origin.X = surf_eval.srf_pos[0];
        origin.Y = surf_eval.srf_pos[1];
        origin.Z = surf_eval.srf_pos[2];

        return origin;
    }

调用方法如下:

public static void Main(string[] args)
    {
        try
        {
            theSession = Session.GetSession();
            displayPart = theSession.Parts.Display;
            theUFSession = UFSession.GetUFSession();
            workPart = theSession.Parts.Work;

            Body bodyYZHU = (Body)workPart.Bodies.FindObject("BLOCK(1)");
            Auto_Init.BodyInit init = new Auto_Init.BodyInit(bodyYZHU);
            BodyModel model = init.ProcBody();
            Face topface = (Face)NXOpen.Utilities.NXObjectManager.GetObjectFromUInt(uint.Parse(model.faceFlag.faceTop));

            GetCenterPoint(topface);
        }
        catch (NXOpen.NXException ex)
        {
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());
        }
    }

调试结果如图:

UG/NX 二次开发(C#) 获取曲面的中心点坐标_第1张图片

你可能感兴趣的:(二次开发NXOPEN,开发语言)