文章目录

列文章目录

文章目录

前言

一、UI样式文件分析

1. 样式文件目录

2. 样式文件导入预览 

 3. 样式文件解析

二、源码文件解析

1. 主程序分析

2. 处理模块分析

3. 运行结果截图

总结



前言

        随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。

        然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。


一、UI样式文件分析

1. 样式文件目录

目录位置:UGOPEN\SampleNXOpenApplications\C++\BlockStyler\ColoredBlock\ColoredBlock.dlx

2. 样式文件导入预览 

基于Python二次开发Opnet python nx二次开发_c#

 3. 样式文件解析

本实例主要用到了双精度、指定点、对象颜色拾取器三个控件

二、源码文件解析

1. 主程序分析

public static void Main()
    {
        try
        {
            theColoredBlock = new ColoredBlock();
            // The following method shows the dialog immediately
            theColoredBlock.Show();
        }
        catch (Exception ex)
        {
            //---- Enter your exception handling code here -----
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.Message);
        }
        finally
        {
            theColoredBlock.Dispose();
        }
    }
public ColoredBlock()
    {
        try
        {
            theSession = Session.GetSession();
            theUI = UI.GetUI();
            theDialogName = "D:\\Program Files\\Siemens\\NX 8.0\\UGOPEN\\SampleNXOpenApplications\\C++\\BlockStyler\\ColoredBlock\\ColoredBlock.dlx";
            theDialog = theUI.CreateDialog(theDialogName);
            theDialog.AddApplyHandler(new NXOpen.BlockStyler.BlockDialog.Apply(apply_cb));
            theDialog.AddInitializeHandler(new NXOpen.BlockStyler.BlockDialog.Initialize(initialize_cb));
            theDialog.AddDialogShownHandler(new NXOpen.BlockStyler.BlockDialog.DialogShown(dialogShown_cb));
        }
        catch (Exception ex)
        {
            //---- Enter your exception handling code here -----
            throw ex;
        }
    }

        Main函数里,我们只需要关注ColoredBlock()方法;

        在ColoredBlock()方法里,主要加载了dlx文件路径,提交方法apply_cb,控件初始化方法initialize_cb,回调方法dialogShown_cb。下面,我们重点讲一下提交方法和控件初始化方法。

2. 处理模块分析

public void initialize_cb()
    {
        try
        {
            group0 = theDialog.TopBlock.FindBlock("group0");
            blockHeight = theDialog.TopBlock.FindBlock("blockHeight");
            blockWidth = theDialog.TopBlock.FindBlock("blockWidth");
            blockLength = theDialog.TopBlock.FindBlock("blockLength");
            blockOrigin = theDialog.TopBlock.FindBlock("blockOrigin");
            blockColor = theDialog.TopBlock.FindBlock("blockColor");

            // Set the upper-limits and lower-limits
            PropertyList blockHeightProps = blockHeight.GetProperties();
            blockHeightProps.SetDouble("MaximumValue", 100000.0);
            blockHeightProps.SetDouble("MinimumValue", 0.001);
            blockHeightProps.SetDouble("Value", 100.0);
            blockHeightProps.Dispose();
            blockHeightProps = null;

            PropertyList blockWidthProps = blockWidth.GetProperties();
            blockWidthProps.SetDouble("MaximumValue", 100000.0);
            blockWidthProps.SetDouble("MinimumValue", 0.001);
            blockWidthProps.SetDouble("Value", 100.0);
            blockWidthProps.Dispose();
            blockWidthProps = null;

            PropertyList blockLengthProps = blockLength.GetProperties();
            blockLengthProps.SetDouble("MaximumValue", 100000.0);
            blockLengthProps.SetDouble("MinimumValue", 0.001);
            blockLengthProps.SetDouble("Value", 100.0);
            blockLengthProps.Dispose();
            blockLengthProps = null;
        }
        catch (Exception ex)
        {
            //---- Enter your exception handling code here -----
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.Message);
        }
    }

初始化方法initialize_cb()

1、获取控件方法:

     group0 = theDialog.TopBlock.FindBlock("group0");
     blockHeight = theDialog.TopBlock.FindBlock("blockHeight");
     blockWidth = theDialog.TopBlock.FindBlock("blockWidth");
     blockLength = theDialog.TopBlock.FindBlock("blockLength");
     blockOrigin = theDialog.TopBlock.FindBlock("blockOrigin");
     blockColor = theDialog.TopBlock.FindBlock("blockColor");

2、PropertyList在BlockUI里面是最常用的对象:

     PropertyList blockHeightProps = blockHeight.GetProperties();

3、分别设置双精度输入框的最大值、最小值、默认值:

     blockHeightProps.SetDouble("MaximumValue", 100000.0);
     blockHeightProps.SetDouble("MinimumValue", 0.001);
     blockHeightProps.SetDouble("Value", 100.0);

public int apply_cb()
    {
        int errorCode = 0;
        NXOpen.Features.BlockFeatureBuilder blockFeatureBuilder1 = null;

        try
        {
            Part workPart = theSession.Parts.Work;

            //Get the values from UI Blocks
            PropertyList blockHeightProps = blockHeight.GetProperties();
            double theHeight = blockHeightProps.GetDouble("Value");
            blockHeightProps.Dispose();
            blockHeightProps = null;

            PropertyList blockWidthProps = blockWidth.GetProperties();
            double theWidth = blockWidthProps.GetDouble("Value");
            blockWidthProps.Dispose();
            blockWidthProps = null;

            PropertyList blockLengthProps = blockLength.GetProperties();
            double theLength = blockLengthProps.GetDouble("Value");
            blockLengthProps.Dispose();
            blockLengthProps = null;

            PropertyList blockOriginProps = blockOrigin.GetProperties();
            Point3d originPoint = blockOriginProps.GetPoint("Point");
            blockOriginProps.Dispose();
            blockOriginProps = null;

            PropertyList blockColorProps = blockColor.GetProperties();
            int[] color = blockColorProps.GetIntegerVector("Value");
            blockColorProps.Dispose();
            blockColorProps = null;

            //Create the NX block
            NXOpen.Features.Feature nullFeatures_Feature = null;
            blockFeatureBuilder1 = workPart.Features.CreateBlockFeatureBuilder(nullFeatures_Feature);

            blockFeatureBuilder1.SetOriginAndLengths(originPoint, theLength.ToString(), theHeight.ToString(), theWidth.ToString());

            NXOpen.Features.Feature feature1;
            feature1 = blockFeatureBuilder1.CommitFeature();


            // Get the body from Feature
            NXOpen.Features.BodyFeature bodyFeat = (NXOpen.Features.BodyFeature)feature1;
            Body[] bodies = new Body[1];
            bodies = bodyFeat.GetBodies();
            // Apply the color to feature body
            DisplayModification displayModification1 = theSession.DisplayManager.NewDisplayModification();
            displayModification1.ApplyToAllFaces = true;
            displayModification1.NewColor = color[0];
            DisplayableObject[] objects1 = new DisplayableObject[1];
            objects1[0] = bodies[0];
            displayModification1.Apply(objects1);
            displayModification1.Dispose();
        }
        catch (Exception ex)
        {
            //---- Enter your exception handling code here -----
            errorCode = 1;
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.Message);
        }
        finally
        {
            if (blockFeatureBuilder1 != null)
            {
                blockFeatureBuilder1.Destroy();
                blockFeatureBuilder1 = null;
            }
        }
        return errorCode;
    }

 提交方法apply_cb()

1、获取输入框的值:

     double theHeight = blockHeightProps.GetDouble("Value");

2、获取选择点的坐标:

     Point3d originPoint = blockOriginProps.GetPoint("Point");

3、获取颜色选择器的颜色:

     int[] color = blockColorProps.GetIntegerVector("Value");

4、使用BlockFeatureBuilder对象,创建块:

     NXOpen.Features.Feature nullFeatures_Feature = null;
     blockFeatureBuilder1 = workPart.Features.CreateBlockFeatureBuilder(nullFeatures_Feature);
     blockFeatureBuilder1.SetOriginAndLengths(originPoint, theLength.ToString(), theHeight.ToString(), theWidth.ToString());
     NXOpen.Features.Feature feature1;
     feature1 = blockFeatureBuilder1.CommitFeature();

5、根据创建块的feature1,获取到块,然后通过DisplayModification设置颜色:

     NXOpen.Features.BodyFeature bodyFeat = (NXOpen.Features.BodyFeature)feature1;
     Body[] bodies = new Body[1];
     bodies = bodyFeat.GetBodies();
     DisplayModification displayModification1 = theSession.DisplayManager.NewDisplayModification();
     displayModification1.ApplyToAllFaces = true;
     displayModification1.NewColor = color[0];
     DisplayableObject[] objects1 = new DisplayableObject[1];
     objects1[0] = bodies[0];
     displayModification1.Apply(objects1);

3. 运行结果截图

基于Python二次开发Opnet python nx二次开发_二次开发_02

总结

官方实例ColoredBlock

1、前端BlockUI主要用到了的3种控件:双精度、指定点、颜色拾取器。这里介绍了如何获取控件,初始化控件,获取指定点坐标,获取颜色信息。

2、后台通过前端获取信息,讲述了如何通过BlockFeatureBuilder创建块,通过DisplayModification设置块的颜色。