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

iCAx开思网

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

[求助] 求关于NXOpen用C#开发的选择对话框的实例代码

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

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

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

x
小弟以前一直用ugopen开发,最近刚学.net做UG的二次开发。用的是C#,网上只有很少的资料可供学习。这里高手多,哪位高人先指点小弟一下怎么调用选择对话框啊,以后还多多交流。对于c语言的ugopen开发,我还是懂的比较多的,也可以相互交流一下。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2009-11-2 18:45:28 | 只看该作者
var obj=new Form();
obj.ShowDialog();
3
发表于 2009-11-6 17:20:25 | 只看该作者
哈哈,自己早就摸索出来了,写成了一个函数,供大家使用。
//单选对话框函数,type=1为单选面,2为单选实体,3为单选边,4为单选点,5为单选线,6为钣金件
        public NXOpen.Tag EvanSingleSelectDialog(string mesg,string title,int type)
        {
            int scope, response;
            IntPtr user_data=new IntPtr();
            NXOpen.Tag faceObj, view;
            double[] cursor ={ 0.0, 0.0, 0.0 };
            NXOpen.UF.UFUi.SelInitFnT initPro;
            scope = NXOpen.UF.UFConstants.UF_UI_SEL_SCOPE_NO_CHANGE;
            switch(type)
            {
                case 1:
                    initPro = new NXOpen.UF.UFUi.SelInitFnT(initProFace);       //type=1设置选择类型为面
                    break;
                case 2:
                    initPro = new NXOpen.UF.UFUi.SelInitFnT(initProSolid);      //type=2设置选择类型为实体
                    break;
                case 3:
                    initPro = new NXOpen.UF.UFUi.SelInitFnT(initProEdge);       //type=3设置选择类型为边
                    break;
                case 4:
                    initPro = new NXOpen.UF.UFUi.SelInitFnT(initProPoint);      //type=4设置选择类型为点
                    break;
                case 5:
                    initPro = new NXOpen.UF.UFUi.SelInitFnT(initProCurve);      //type=5设置选择类型为线
                    break;
                case 6:
                    initPro = new NXOpen.UF.UFUi.SelInitFnT(initProSheet);      //type=6设置选择类型为钣金件
                    break;
                default:
                    initPro = new NXOpen.UF.UFUi.SelInitFnT(initProSolid);      //默认设置选择类型为实体
                    break;
            }
            theUFSession.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM);                     //锁定当前工具,防止进入其他工具
            theUFSession.Ui.SelectWithSingleDialog(mesg, title, scope, initPro, user_data,
                                        out response, out faceObj, cursor, out view);        //调用单选对话框
            theUFSession.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM);                   //解锁
            if (response == NXOpen.UF.UFConstants.UF_UI_OBJECT_SELECTED ||
                response == NXOpen.UF.UFConstants.UF_UI_OBJECT_SELECTED_BY_NAME)
            {
                theUFSession.Disp.SetHighlight(faceObj, 0);                                  //取消选择后实例的高亮显示
            }
            return faceObj;
        }
4
发表于 2009-11-6 17:28:31 | 只看该作者
begtostudy 发表于 2009-11-2 18:45
var obj=new Form();
obj.ShowDialog();


begtostudy 知道你是高手,看过你CSDN上的博客。现在又有个新问题想问你,其他高手知道的也麻烦回一下,谢谢。

现在我用
UF_WAVE_create_linked_curve()连接了一条曲线到一个工作部件里,想用这条连接后的曲线拉伸成一个实体,用的是UF_MODL_create_extrusion
(),但是总是出错,提示section object does not exist。我想可能是wave连接得到的linked feature tag值不能直接用于这个拉伸函数的tag值,但是该怎么转化呢,试了UF_MODL_ask_feat_body()这个函数不行,还试了好几个方法,都不行。
哪位高手知道该怎么办
5
发表于 2009-11-13 18:27:36 | 只看该作者
waster   ,我是新手,现在开发用C#开发 UG  的一些常规操作,但用C#开发 UG  的资料很少,希望能和你们这些高的交换一些资料 QQ104462894
6
发表于 2009-11-13 23:23:12 | 只看该作者
请教一下楼主:initProSolid等等这些都是方法对吗
如果是一种情况就是
NXOpen.UF.UFUi.SelInitFnT initPro=new NXOpen.UF.UFUi.SelInitFnT(initProSolid);      
但是我试了很多次都不行,还请楼主帮忙解答一下,谢了!
已经郁闷好久了,非常感谢!

本帖最后由 wangxunming 于 2009-11-13 23:24 编辑
7
发表于 2009-11-16 10:23:02 | 只看该作者
wy.dk 发表于 2009-11-13 18:27
waster   ,我是新手,现在开发用C#开发 UG  的一些常规操作,但用C#开发 UG  的资料很少,希望能和你们这些高的交换一些资料 QQ104462894



其实我也没什么资料,就有个UG的帮助文档,还有MSDN,还有C#的一些书。很多东西都是靠自己慢慢试试出来的,这方面的资料确实少,而且用C#的人也少,一般都是用C
8
发表于 2009-11-16 10:25:56 | 只看该作者
wangxunming 发表于 2009-11-13 23:23
请教一下楼主:initProSolid等等这些都是方法对吗
如果是一种情况就是
NXOpen.UF.UFUi.SelInitFnT initPro=new NXOpen.UF.UFUi.SelInitFnT(initProSolid);      
但是我试了很多次都不行,还请楼主帮忙解答一下, ...


只要initProSolid是一个函数名,你这个用法是对的。如果还是不行就有可能是initProSolid函数本身有问题,或者把这两句加上试试看。theUFSession.Ui.LockUgAccess(UFConstants.UF_UI_FROM_CUSTOM);
theUFSession.Ui.UnlockUgAccess(UFConstants.UF_UI_FROM_CUSTOM);
9
发表于 2009-11-16 21:44:49 | 只看该作者

o

太感谢楼主了,我加了后面两句呀
都还是不行呀,调用的函数代码如下:
   public int  initProSolid(IntPtr select, int userdata)
        {
            int num_triples = 2;
            UFUi.Mask[] mask_triples = new UFUi.Mask[1];

            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_circle_type;
            mask_triples[1].object_subtype = 0;
            mask_triples[1].solid_type = 0;
            ufs.Ui.SetSelMask(select, UFUi.SelMaskAction.SelMaskClearAndEnableSpecific, num_triples, mask_triples);
            return UFConstants.UF_UI_SEL_SUCCESS;
        }
麻烦楼主解答一下,非常感谢了!

本帖最后由 wangxunming 于 2009-11-23 20:47 编辑
10
发表于 2009-11-18 16:58:54 | 只看该作者
UFUi.Mask[] mask_triples = new UFUi.Mask[1];
这句应该改为下面这个吧,是2,不是1
UFUi.Mask[] mask_triples = new UFUi.Mask[2];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2024-12-26 02:34 , Processed in 0.036971 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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