找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 23880|回复: 15
打印 上一主题 下一主题

[原创] 用C#在NX上写的一个小程序:遍历part得到实体及特征

[复制链接]
跳转到指定楼层
1
发表于 2009-11-12 21:58:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
今天刚开始学用C#在NX上写程序,做了个小测试,即遍历work part得到实体及实体所包含的特征,与所有初学者共勉~~

ok,开始啦~新建类库程序,工程名为CycleBodies,添加相关引用,NXOpen.dll,NXOpenUI.dll,NXOpen.UF.dll,NXOpen.Utilities.dll
以下是代码部分:(我已经做了很详细的注释)
using NXOpen;
namespace CycleBodies
{
    public class Class1
    {
        private static NXOpen.Session theSession;
        private static NXOpen.Part workPart;
        public static void Main()
        {
            theSession = Session.GetSession();  //得到UG session
            workPart = theSession.Parts.Work;  //得到当前的工作部件
            theSession.ListingWindow.Open();
            NXOpen.Body[] BodiesInPart;
            BodiesInPart = workPart.Bodies.ToArray(); //得到当前工作部件中的所有bodies
            int SolidBodyCount = 0;
            string SolidBodyNum;
            foreach (NXOpen.Body i in BodiesInPart)  //遍历bodies数组
            {
                if (i.IsSolidBody)  //判断是否为实体,如果是则计数器加1,并给实体赋名,最后在listing window中打印实体名字。
                {
                    SolidBodyCount++;
                    SolidBodyNum = SolidBodyCount.ToString();  //将整型数据转换成字符型
                    i.SetName("SolidBody" + SolidBodyNum);     //设置实体名称
                    theSession.ListingWindow.WriteLine("SolidBodyName: "+i.Name);//把实体名称打印在listing window中
                    
                    NXOpen.Features.Feature[] FeaturesInSolidBody;
                    FeaturesInSolidBody = i.GetFeatures(); ////得到实体所包含的所有特征
                    string FeatType;
                    int FeatCount=0;
                    string FeatNum;
                    //将特征的类型显示在listing window中
                    foreach (NXOpen.Features.Feature j in FeaturesInSolidBody)
                    {
                        FeatCount++;
                        FeatNum = FeatCount.ToString();
                        FeatType = j.FeatureType;
                        theSession.ListingWindow.WriteLine("Feature "+FeatNum+":"+" "+FeatType);
                    }            
                }
            }
        }
    }
}

本帖最后由 ice-snow 于 2009-11-12 22:00 编辑
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2009-11-16 10:39:12 | 只看该作者
呵呵,终于又遇见一个用C#的了
3
发表于 2009-11-16 11:48:45 | 只看该作者
NX/Open C++没有人用吗?
4
发表于 2009-11-16 16:41:26 | 只看该作者
用c++啊 c#也不错啊
5
发表于 2009-11-18 16:22:35 | 只看该作者
楼主,能发一个使用多选对话框selectwithclassdialog()这个函数的例子么,要C#的,我用VB.NET开发,vb.net我会的,只是不知道怎么换成C#的,谢了
6
发表于 2009-11-19 10:45:44 | 只看该作者
呵 我也刚开始学c# 不太懂 试了下多选对话框selectwithclassdialog()  设定只有边和线可选  代码如下:
using NXOpen;
using NXOpen.UF;
using NXOpen.Utilities;
using NXOpenUI;

namespace SelectWithClass
{
    public class Class1
    {
        public static NXOpen.Session theSession;
        public static UFSession theUFSession;
        public static NXOpen.Part workPart;

        static int sel_init_proc(IntPtr select_,IntPtr user_data)
        {
            int num_triples = 2;
            UFUi.Mask[] mask_triples = new UFUi.Mask[2];             /* enable only lines and edges */
            mask_triples[0].object_type = UFConstants.UF_line_type;
            mask_triples[0].object_subtype = 0;
            mask_triples[0].solid_type = 0;
            mask_triples[1].object_type = UFConstants.UF_solid_type;
            mask_triples[1].object_subtype = 0;
            mask_triples[1].solid_type = UFConstants.UF_UI_SEL_FEATURE_ANY_EDGE;
            theUFSession.Ui.SetSelMask(select_, UFUi.SelMaskAction.SelMaskClearAndEnableSpecific, num_triples, mask_triples);
            return UFConstants.UF_UI_SEL_SUCCESS;
        }

        public static void Main()
        {
            theSession = Session.GetSession();
            theUFSession = UFSession.GetUFSession();
            workPart = theSession.Parts.Work;

            string cue = "Please Select Objects";
            string title = "User Title";
            int response;
            int count;
            Tag[] objects;
            int i = 0;
            IntPtr user_data = (IntPtr)i;   
            theUFSession.Ui.SelectWithClassDialog(cue, title, UFConstants.UF_UI_SEL_SCOPE_WORK_PART, sel_init_proc,user_data,out response, out count,out objects);
        }
    }
}

本帖最后由 ice-snow 于 2009-11-19 10:50 编辑
7
发表于 2009-11-19 10:56:37 | 只看该作者
SelectWithClassDialogSample源码
8
发表于 2010-9-10 21:49:57 | 只看该作者
多给点贡献值好吗?
9
发表于 2010-9-29 11:41:11 | 只看该作者
挺不错  支持支持
10
发表于 2011-1-20 21:19:11 | 只看该作者
不错,用net的也可参考
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-24 11:45 , Processed in 0.061184 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表