UG/NX二次开发(C#) 一个方法遍历部件的体、面、边属性

这篇具有很好参考价值的文章主要介绍了UG/NX二次开发(C#) 一个方法遍历部件的体、面、边属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 初学UG/NX, 对体的各种tag还不熟悉,更别说各种面、边、点的操作,感觉就像一口锅里面的饺子,根本分不清哪个是哪个。

所以,这里对体的面、边、点以及各对象进行了一次整理,废话不说,直接上代码:

1、先定义体、面、边模型

using NXOpen;
using NXOpen.Assemblies;
using NXOpen.Facet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;

namespace Auto_Init.Model
{
    /// <summary>
    /// 基本属性
    /// </summary>
    public class Base
    {
        public string StrTag { get; set; }                                   //返回对象的tag
        public Tag Tag { get; set; }
        public int Layer { get; set; }                               //返回当前对象所在层
        public bool IsOccurrence { get; set; }                       //返回此对象是否为实例
        public bool IsBlanked { get; set; }                          //返回此对象是否为空白状态
        public string Name { get; set; }                                //Returns the custom name of the object.
        public Point3d NameLocation { get; set; }                    //Returns the location of the object's name. (可能是中心点坐标)
        public string JournalIdentifier { get; set; }                //返回此对象的日志中的标识符
        public int Color { get; set; }                               //返回颜色
        public DisplayableObject.ObjectFont LineFont { get; set; }   //Returns or sets the line font of the object
        public DisplayableObject.ObjectWidth LineWidth { get; set; } //Returns or sets the line width of the object. 
        public Component OwningComponent { get; set; }               //如果此对象是引用,则返回所属组件
        public BasePart OwningPart { get; set; }                     //Returns the owning part of this object 
        public INXObject Prototype { get; set; }                     //Returns the prototype of this object if it is an occurrence. 
    }

    /// <summary>
    /// 块/体
    /// </summary>
    public class BodyModel : Base
    {
        public List<FaceModel> FaceList { get; set; }
        public FaceFlag faceFlag { get; set; }
        public double Density { get; set; }                          //密度
        public bool IsSheetBody { get; set; }                        //是否为sheet
        public bool IsSolidBody { get; set; }                        //是否为实体
        public IMessageSink NextSink { get; set; }                   //Gets the next message sink in the sink chain. 
        public Type Type { get; set; }                               //类型
        public FacetedBody facetBody { get; set; }                   //镶嵌体
        public bool upToDate { get; set; }                           //过期时间
        public Dictionary<string, FaceModel> DicFace { get; set; }   //面字典,key为面的tag
        public Dictionary<string, EdgeModel> DicEdge { get; set; }   //边字典,key为边的tag
    }

    public class FaceFlag
    { 
        public string faceTop { get;set;}
        public string faceBotton { get;set;}
        public string face2 {get;set;}
        public string face3 { get; set; }
        public string face4 { get; set; }
        public string face5 { get; set; }
    }

    /// <summary>
    /// 面
    /// </summary>
    public class FaceModel : Base
    {
        public Face.FaceType SolidFaceType { get; set; }             //返回面的实体类型
        public List<EdgeModel> EdgeList { get; set; }
        public List<Point3d> PointList { get; set; }
        public Body fatherBody { get; set; }
        public NXObject.AttributeInformation[] Attribute { get; set; }  //返回对象上的所有属性
    }

    /// <summary>
    /// 边
    /// </summary>
    public class EdgeModel : Base
    {
        public double Len { get; set; }                              //边长
        public bool IsReference { get; set; }                        //返回曲线的参考状态
        public Edge.EdgeType SolidEdgeType { get; set; }             //返回边的实体类型
        public Face[] FatherFaces { get; set; }                      //边所在的面
        public Body FatherBody { get; set; }                         //边所在的体
        public Type Type { get; set; }                               //类型
        public Point3d Vertex1 { get; set; }
        public Point3d Vertex2 { get; set; }
    }
}

2、加载体的方法如下

public class BodyInit
    {
        public Body body;
        public BodyModel bodyModel;
        public UI theUI;
        public NXOpen.UF.UFSession theUFSession;

        public BodyInit(Body body)
        {
            this.body = body;
            this.theUI = UI.GetUI();
            theUFSession = UFSession.GetUFSession();
        }

        public FaceModel GetFaceByTag(string tag)
        {
            if (bodyModel.DicFace.ContainsKey(tag))
                return bodyModel.DicFace[tag];
            return null;
        }

        public EdgeModel GetEdgeModelByTag(string tag)
        {
            if (bodyModel.DicEdge.ContainsKey(tag))
                return bodyModel.DicEdge[tag];
            return null;
        }

        /// <summary>
        /// 加载体
        /// </summary>
        /// <returns></returns>
        public BodyModel ProcBody()
        {
            bodyModel = new BodyModel();
            bodyModel.FaceList = new List<FaceModel>();
            bodyModel.DicFace = new Dictionary<string, FaceModel>();
            bodyModel.DicEdge = new Dictionary<string, EdgeModel>();

            try
            {
                foreach (Face faceObj in body.GetFaces())
                {
                    FaceModel face = ProcFace(faceObj);
                    bodyModel.FaceList.Add(face);
                    bodyModel.DicFace.Add(faceObj.Tag.ToString(), face);
                }

                foreach (Edge edgeObj in body.GetEdges())
                {
                    EdgeModel edge = ProcEdge(edgeObj);
                    bodyModel.DicEdge.Add(edge.StrTag.ToString(), edge);
                }

                bodyModel.JournalIdentifier = body.JournalIdentifier;
                bodyModel.Color = body.Color;
                bodyModel.Density = body.Density;
                bodyModel.IsBlanked = body.IsBlanked;
                bodyModel.IsOccurrence = body.IsOccurrence;
                bodyModel.IsSheetBody = body.IsSheetBody;
                bodyModel.IsSolidBody = body.IsSolidBody;
                bodyModel.Layer = body.Layer;
                bodyModel.LineFont = body.LineFont;
                bodyModel.LineWidth = body.LineWidth;
                bodyModel.Name = body.Name;
                try
                {
                    bodyModel.NameLocation = body.NameLocation;
                }
                catch (Exception)
                {

                }
                bodyModel.NextSink = body.NextSink;
                bodyModel.OwningComponent = body.OwningComponent;
                //bodyModel.OwningPart = body.OwningPart;
                bodyModel.Prototype = body.Prototype;
                bodyModel.StrTag = body.Tag.ToString();
                bodyModel.Tag = body.Tag;

                try
                {
                    FacetedBody facete;
                    bool uptodate;
                    body.GetFacetedBody(out facete, out uptodate);
                    bodyModel.facetBody = facete;
                    bodyModel.upToDate = uptodate;
                }
                catch (Exception)
                {

                }
                bodyModel.Type = body.GetType();

                bodyModel.faceFlag = new FaceFlag();
                string tagTop, tagBotton, tag2, tag3, tag4, tag5;
                InitBll.GetRightFace(bodyModel.FaceList, out tagTop, out tagBotton, out tag2, out tag3, out tag4, out tag5);
                bodyModel.faceFlag.faceTop = tagTop;
                bodyModel.faceFlag.faceBotton = tagBotton;
                bodyModel.faceFlag.face2 = tag2;
                bodyModel.faceFlag.face3 = tag3;
                bodyModel.faceFlag.face4 = tag4;
                bodyModel.faceFlag.face5 = tag5;

                int num_boundaries;
                int[] num_edges;
                Tag[] edge_tags;
                theUFSession.Modl.AskBodyBoundaries(body.Tag, out num_boundaries, out num_edges, out edge_tags);
            }
            catch (Exception ex)
            {
                theUI.NXMessageBox.Show("ProcBody fun", NXMessageBox.DialogType.Error, ex.ToString());
            }

            return bodyModel;
        }

        /// <summary>
        /// 加载面
        /// </summary>
        /// <param name="faceObj"></param>
        /// <returns></returns>
        public FaceModel ProcFace(Face faceObj)
        {
            FaceModel model = new FaceModel();
            model.EdgeList = new List<EdgeModel>();
            model.PointList = new List<Point3d>();
            try
            {
                foreach (Edge edgeObj in faceObj.GetEdges())
                {
                    EdgeModel item = ProcEdge(edgeObj);
                    model.EdgeList.Add(item);
                    if (!model.PointList.Contains(item.Vertex1))
                    {
                        model.PointList.Add(item.Vertex1);
                    }
                    if (!model.PointList.Contains(item.Vertex2))
                    {
                        model.PointList.Add(item.Vertex2);
                    }
                }
                model.Color = faceObj.Color;
                model.IsBlanked = faceObj.IsBlanked;
                model.IsOccurrence = faceObj.IsOccurrence;
                model.JournalIdentifier = faceObj.JournalIdentifier;
                model.Layer = faceObj.Layer;
                model.LineFont = faceObj.LineFont;
                model.LineWidth = faceObj.LineWidth;
                model.Name = faceObj.Name;
                try
                {
                    model.NameLocation = faceObj.NameLocation;
                }
                catch (Exception)
                {

                }
                model.OwningComponent = faceObj.OwningComponent;
                //model.OwningPart = faceObj.OwningPart;
                model.Prototype = faceObj.Prototype;
                model.SolidFaceType = faceObj.SolidFaceType;
                model.StrTag = faceObj.Tag.ToString();
                model.Tag = faceObj.Tag;
                model.fatherBody = faceObj.GetBody();
                model.Attribute = faceObj.GetUserAttributes();
            }
            catch (Exception ex)
            {
                theUI.NXMessageBox.Show("ProcFace fun", NXMessageBox.DialogType.Error, ex.ToString());
            }

            return model;
        }

        /// <summary>
        /// 加载边
        /// </summary>
        /// <param name="edgeObj"></param>
        /// <returns></returns>
        public EdgeModel ProcEdge(Edge edgeObj)
        {
            EdgeModel model = new EdgeModel();

            try
            {
                model.StrTag = edgeObj.Tag.ToString();
                model.Tag = edgeObj.Tag;
                model.Color = edgeObj.Color;
                model.FatherBody = edgeObj.GetBody();
                model.FatherFaces = edgeObj.GetFaces();
                model.IsBlanked = edgeObj.IsBlanked;
                model.IsOccurrence = edgeObj.IsOccurrence;
                model.IsReference = edgeObj.IsReference;
                model.JournalIdentifier = edgeObj.JournalIdentifier;
                model.Layer = edgeObj.Layer;
                model.Len = edgeObj.GetLength();
                model.LineFont = edgeObj.LineFont;
                model.LineWidth = edgeObj.LineWidth;
                model.Name = edgeObj.Name;
                try
                {
                    model.NameLocation = edgeObj.NameLocation;
                }
                catch (Exception)
                {

                }
                model.OwningComponent = edgeObj.OwningComponent;
                //model.OwningPart = edgeObj.OwningPart;
                model.Prototype = edgeObj.Prototype;
                model.SolidEdgeType = edgeObj.SolidEdgeType;
                model.Type = edgeObj.GetType();
                Point3d temp1, temp2;
                edgeObj.GetVertices(out temp1, out temp2);
                model.Vertex1 = temp1;
                model.Vertex2 = temp2;
            }
            catch (Exception ex)
            {
                theUI.NXMessageBox.Show("ProcEdge fun", NXMessageBox.DialogType.Error, ex.ToString());
            }


            return model;
        }
    }

3、调用方法

using System;
using NXOpen;
using Auto_Init.Model;
using NXOpen.UF;

public class Program
{
    public static Session theSession;
    public static Part workPart;
    public static Part displayPart;
    public static NXOpen.UF.UFSession theUFSession;
    private static UI theUI = null;
    public static AssembliesUtils assem;


    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));
        }
        catch (NXOpen.NXException ex)
        {
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());
        }
    }
}

4、运行结果如下图

c#ug遍历body,二次开发NXOPEN,c#,开发语言,ui文章来源地址https://www.toymoban.com/news/detail-597569.html

到了这里,关于UG/NX二次开发(C#) 一个方法遍历部件的体、面、边属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UG NX二次开发(C++)-建模-创建基准坐标系(NXOpen方法)

    在UG NX三维建模过程中,创建基准坐标系是很重要的。基准坐标系是对于其他模型建模的一个参考,在UG NX中菜单中是由创建基准坐标系功能的,UG NX二次开发的创建基准坐标系的方法有两种,其可以通过UFun函数创建,也

    2024年02月02日
    浏览(107)
  • UG NX二次开发(C#)-建模-删除面

            在三维建模后,为了仿真的需要,需要对建好的模型进行简化处理,这时候同步建模的功能就非常有必要了。本文主要介绍一个删除面的操作,这样可以去掉孔面、倒圆角面、倒斜角面,以用于模型仿真的完整性。          采用UG NX的UIStyler创建一个测试界面,如

    2023年04月14日
    浏览(94)
  • UG NX二次开发(C#)-装配-删除阵列矩阵

    在外部模式对装配体进行替换或者删除时,有时遇到部分组件不能替换或者删除,其中一个原因是阵列主组件,是不允许更改的。下面介绍下采用UG NX二次开发的方法删除阵列主组件。 在一个装配体模型中,删除某个组件时会出现下面的错误: “不能删除组件图样的主组件”

    2024年02月07日
    浏览(50)
  • UG\NX二次开发BlockUI 进入NX的BlockUI编辑界面

    文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,CC++-CSDN博客         要使用BlockUI,需要先进入NX的BlockUI编辑界面。在低版本中,可以在Toolbar工具条中进入 开始→所有应用模块→块UI样式编辑器 ;在高版本中,可以在Ribbon工具栏中进入

    2024年02月02日
    浏览(58)
  • UG\NX二次开发 实现预览和取消预览

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         介绍两种方法。一是先创建特征,记录创建的特征,取消预览时删除这些特征。另一种方法是在创建特征前Set_mark,取消预览就undo_to_mark。       

    2024年02月14日
    浏览(47)
  • UG/NX二次开发 将当前视图截图到剪切板

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         将当前视图截图到剪切板,运行完程序后,找一个位置(比如PPT) 粘贴。

    2024年02月11日
    浏览(69)
  • UG\NX二次开发 用户自定义UI块

    1.打开NX软件,点击“块UI样式编辑器”,进入UI编辑界面;  2.将类型改为“用户定义 UI 块”;  3.设置名称、目录名称,也可以设置自定义UI块的图标;  4.点击保存,需要注意自定义UI块会多生成一个目标文件“.udx”,如果需要使用自定义的UI块,则必须把自定义UI块生成的

    2024年02月16日
    浏览(55)
  • UG NX二次开发(C#)-机械管线布置-添加管道路径

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 机械管道布局是UG NX的一个应用模块,以前给客户做过一个项目,现在分享给大家。这篇文章是讲解如何布置管道路径(创建线性路径),后面会逐步的讲解,如果有需要的可以私信博主,或者加入QQ群

    2024年01月20日
    浏览(90)
  • UG\NX 二次开发 相切面、相邻面的选择控件

    文章作者:里海 来源网站: https://blog.csdn.net/WangPaiFeiXingYuan         有群友问“UFUN多选功能过滤面不能选择相切面或相邻面之类的吗?” 这个用Block UI的\\\"面收集器\\\"可以,ufun函数也可以,请参照这篇:【NX二次开发】相切面封装函数-CSDN博客                   

    2024年02月12日
    浏览(50)
  • UG NX二次开发(C#)-创建点到曲线(边)的切线

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在UG NX二次开发时,对于求点到曲线的切线,采用ufun函数可以实现,即是UF_CURVE_create_line_point_tangent,但是对于C#,这个函数尚未封装进来,所以没有直接对应的函数。本文讲一下采用C#创建点到曲线的切

    2024年02月09日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包