iCAx开思工具箱

标题: 求关于NXOpen用C#开发的选择对话框的实例代码 [打印本页]

作者: waster    时间: 2009-11-2 14:11
标题: 求关于NXOpen用C#开发的选择对话框的实例代码
小弟以前一直用ugopen开发,最近刚学.net做UG的二次开发。用的是C#,网上只有很少的资料可供学习。这里高手多,哪位高人先指点小弟一下怎么调用选择对话框啊,以后还多多交流。对于c语言的ugopen开发,我还是懂的比较多的,也可以相互交流一下。
作者: begtostudy    时间: 2009-11-2 18:45
var obj=new Form();
obj.ShowDialog();
作者: waster    时间: 2009-11-6 17:20
哈哈,自己早就摸索出来了,写成了一个函数,供大家使用。
//单选对话框函数,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;
        }
作者: waster    时间: 2009-11-6 17:28
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()这个函数不行,还试了好几个方法,都不行。
哪位高手知道该怎么办
作者: wy.dk    时间: 2009-11-13 18:27
waster   ,我是新手,现在开发用C#开发 UG  的一些常规操作,但用C#开发 UG  的资料很少,希望能和你们这些高的交换一些资料 QQ104462894
作者: wangxunming    时间: 2009-11-13 23:23
请教一下楼主:initProSolid等等这些都是方法对吗
如果是一种情况就是
NXOpen.UF.UFUi.SelInitFnT initPro=new NXOpen.UF.UFUi.SelInitFnT(initProSolid);      
但是我试了很多次都不行,还请楼主帮忙解答一下,谢了!
已经郁闷好久了,非常感谢!


作者: waster    时间: 2009-11-16 10:23
wy.dk 发表于 2009-11-13 18:27
waster   ,我是新手,现在开发用C#开发 UG  的一些常规操作,但用C#开发 UG  的资料很少,希望能和你们这些高的交换一些资料 QQ104462894



其实我也没什么资料,就有个UG的帮助文档,还有MSDN,还有C#的一些书。很多东西都是靠自己慢慢试试出来的,这方面的资料确实少,而且用C#的人也少,一般都是用C
作者: waster    时间: 2009-11-16 10:25
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);
作者: wangxunming    时间: 2009-11-16 21:44
标题: 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;
        }
麻烦楼主解答一下,非常感谢了!


作者: waster    时间: 2009-11-18 16:58
UFUi.Mask[] mask_triples = new UFUi.Mask[1];
这句应该改为下面这个吧,是2,不是1
UFUi.Mask[] mask_triples = new UFUi.Mask[2];
作者: waster    时间: 2009-11-18 17:03
/设置选择对话框中的选择项为线函数
        static int initProCurve(IntPtr select_, IntPtr user_data)
        {
            int errorCode = 1;
            int numTriples = 4;
            NXOpen.UF.UFUi.Mask[] maskTriples = new UFUi.Mask[4];
            maskTriples[0].object_type = NXOpen.UF.UFConstants.UF_line_type;
            maskTriples[0].object_subtype = NXOpen.UF.UFConstants.UF_all_subtype;
            maskTriples[0].solid_type = 0;
            maskTriples[1].object_type = NXOpen.UF.UFConstants.UF_circle_type;
            maskTriples[1].object_subtype = NXOpen.UF.UFConstants.UF_all_subtype;
            maskTriples[1].solid_type = 0;
            maskTriples[2].object_type = NXOpen.UF.UFConstants.UF_spline_type;
            maskTriples[2].object_subtype = NXOpen.UF.UFConstants.UF_all_subtype;
            maskTriples[2].solid_type = 0;
            maskTriples[3].object_type = NXOpen.UF.UFConstants.UF_conic_type;
            maskTriples[3].object_subtype = NXOpen.UF.UFConstants.UF_all_subtype;
            maskTriples[3].solid_type = 0;
            theUFSession.Ui.SetSelMask(select_, UFUi.SelMaskAction.SelMaskClearAndEnableSpecific,
                                        numTriples, maskTriples);
            return errorCode;
        }
这个是我的代码
作者: wangxunming    时间: 2009-11-23 20:47
非常感谢楼主,问题解决了!!!
作者: waster    时间: 2009-11-24 10:20
可我的问题还没解决呢,郁闷啊
就是那个怎么让用户只能运行一个用c#做的对话框。


作者: wangxunming    时间: 2009-11-24 21:10
不是太明白楼主意思,但是C#里面有ShowDialog模式对话框运行此对话框的时候,其它变灰色!
作者: waster    时间: 2009-11-26 09:11
wangxunming 发表于 2009-11-24 21:10
不是太明白楼主意思,但是C#里面有ShowDialog模式对话框运行此对话框的时候,其它变灰色!


谢谢回复。
问题已经解决了,我不是用UG做的对话框,我是用c#做的界面,UG只是调用dll文件,所以以前可以运行很多个同样的对话框,这是禁忌啊。不过现在已经解决了




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3