2022程序员定制版3D世界杯足球

        今年的世界杯依旧是那样的火爆,全世界78亿双眼睛都在关注,或者说不止是体育,更多的是一种精神、文化、励志和宣传。

        作为一名程序猿,熬夜写代码和熬夜看球都是必不可少的,今天特意送来来自程序猿定制版的世界杯足球制作方法,希望广大博友喜欢。

       

        为了制作这个足球,特意学了一下UG软件,跟着网上的教程做了足球的黑块和白块作为标准件,然后根据一定的角度和方位调整自动合成足球,整个制作过程包括了标准件设计和工业软件自动化的元素。

先看主程序:

using System;
using NXOpen;
using NXOpen.UF;
using NX_WorldCup;
using System.Threading;

public class Program
{
    // class members
    public static Program theProgram;
    public static bool isDisposeCalled;
    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 int milliseconds = 500;
   
    public static int Main(string[] args)
    {
        theSession = Session.GetSession();
        displayPart = theSession.Parts.Display;
        theUFSession = UFSession.GetUFSession();
        workPart = theSession.Parts.Work;
        theUI = UI.GetUI();

        int retValue = 0;
        try
        {
            //导入已经做好的足球零件
            BasePart basePart1;
            PartLoadStatus partLoadStatus1;
            basePart1 = theSession.Parts.OpenBaseDisplay("C:\\Users\\Administrator\\Desktop\\football\\item.prt", out partLoadStatus1);
            Thread.Sleep(milliseconds);

            //块复制
            BLL.CopyBlockByZC("UNPARAMETERIZED_FEATURE(21)");
            Thread.Sleep(milliseconds);

            BLL.CopyBlockByOC("UNPARAMETERIZED_FEATURE(19)", "120");
            Thread.Sleep(milliseconds);

            BLL.CopyBlockByZC("UNPARAMETERIZED_FEATURE(37)");
            Thread.Sleep(milliseconds);

            BLL.CopyBlockByOC("UNPARAMETERIZED_FEATURE(32)", "-120");
            Thread.Sleep(milliseconds);

            BLL.CopyBlockByZC("UNPARAMETERIZED_FEATURE(43)");
            Thread.Sleep(milliseconds);

            //半球复制
            BLL.CopyBall();

            //隐藏参考线
            BLL.GuidesHidden();
        }
        catch (NXOpen.NXException ex)
        {
            theUI.NXMessageBox.Show("Block Styler", NXMessageBox.DialogType.Error, ex.ToString());

        }
        return retValue;
    }
}

制作过程主要分以下几步:

第一步:制作合成足球的白块和黑块标准件,制作过程大家可以网上查一下,做法颇多,但是结果大同小异,这里我就不过多说了。下面有我做的一个版本的免费下载地址:https://download.csdn.net/download/MarcoPro/87253404

第二步:程序自动导入第一步已经做好的标准件

            BasePart basePart1;
            PartLoadStatus partLoadStatus1;
            basePart1 = theSession.Parts.OpenBaseDisplay(filePath, out partLoadStatus1);

第三步:根据足球的白块和黑块的排列规律,通过UG阵列按照一定的规律复制标准件,构成足球,这里主要用到2个方法

        /// <summary>
        /// 块复制,按照zc轴复制
        /// </summary>
        /// <param name="JournalIdentifier">复制对象</param>
        public static void CopyBlockByZC(string JournalIdentifier)
        {
            Session theSession = Session.GetSession();
            Part workPart = theSession.Parts.Work;
            Part displayPart = theSession.Parts.Display;

            NXOpen.Features.MoveObject nullFeatures_MoveObject = null;
            NXOpen.Features.MoveObjectBuilder moveObjectBuilder1;
            moveObjectBuilder1 = workPart.BaseFeatures.CreateMoveObjectBuilder(nullFeatures_MoveObject);
            moveObjectBuilder1.TransformMotion.DistanceAngle.OrientXpress.AxisOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Axis.Passive;
            moveObjectBuilder1.TransformMotion.DistanceAngle.OrientXpress.PlaneOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Plane.Passive;
            moveObjectBuilder1.TransformMotion.OrientXpress.AxisOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Axis.Passive;
            moveObjectBuilder1.TransformMotion.OrientXpress.PlaneOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Plane.Passive;

            Point3d manipulatororigin1;
            manipulatororigin1 = moveObjectBuilder1.TransformMotion.ManipulatorOrigin;
            Matrix3x3 manipulatormatrix1;
            manipulatormatrix1 = moveObjectBuilder1.TransformMotion.ManipulatorMatrix;

            moveObjectBuilder1.TransformMotion.Option = NXOpen.GeometricUtilities.ModlMotion.Options.Angle;
            moveObjectBuilder1.MoveObjectResult = NXOpen.Features.MoveObjectBuilder.MoveObjectResultOptions.CopyOriginal;
            moveObjectBuilder1.TransformMotion.Angle.RightHandSide = "72";  //旋转角度
            moveObjectBuilder1.NumberOfCopies = 5;  //复制数量


            Point3d origin1 = new Point3d(0.0, 0.0, 0.0);   //轴点
            Vector3d vector1 = new Vector3d(0.0, 0.0, 1.0); //矢量
            Direction direction1;
            direction1 = workPart.Directions.CreateDirection(origin1, vector1, NXOpen.SmartObject.UpdateOption.WithinModeling);

            Point nullPoint = null;
            Axis axis1;
            axis1 = workPart.Axes.CreateAxis(nullPoint, direction1, NXOpen.SmartObject.UpdateOption.WithinModeling);

            moveObjectBuilder1.TransformMotion.AngularAxis = axis1;

            Body body1 = (Body)workPart.Bodies.FindObject(JournalIdentifier); //复制对象
            bool added1;
            added1 = moveObjectBuilder1.ObjectToMoveObject.Add(body1);

            Scalar scalar1;
            scalar1 = workPart.Scalars.CreateScalar(1.0, NXOpen.Scalar.DimensionalityType.None, NXOpen.SmartObject.UpdateOption.WithinModeling);

            Sketch sketch1 = (Sketch)workPart.Sketches.FindObject("SKETCH_004");
            Line line1 = (Line)sketch1.FindObject("HANDLE R-42129");
            Point point1;
            point1 = workPart.Points.CreatePoint(line1, scalar1, NXOpen.SmartObject.UpdateOption.WithinModeling);

            axis1.Point = point1;
            moveObjectBuilder1.TransformMotion.AngularAxis = axis1;

            NXObject nXObject1;
            nXObject1 = moveObjectBuilder1.Commit();
            NXObject[] objects1;
            objects1 = moveObjectBuilder1.GetCommittedObjects();
            moveObjectBuilder1.Destroy();
        }
        /// <summary>
        /// 块复制,按照白块参考线复制
        /// </summary>
        /// <param name="JournalIdentifier">复制对象</param>
        /// <param name="angle">旋转角度</param>
        public static void CopyBlockByOC(string JournalIdentifier, string angle)
        {
            Session theSession = Session.GetSession();
            Part workPart = theSession.Parts.Work;
            Part displayPart = theSession.Parts.Display;

            NXOpen.Features.MoveObject nullFeatures_MoveObject = null;
            NXOpen.Features.MoveObjectBuilder moveObjectBuilder1;
            moveObjectBuilder1 = workPart.BaseFeatures.CreateMoveObjectBuilder(nullFeatures_MoveObject);
            moveObjectBuilder1.TransformMotion.DistanceAngle.OrientXpress.AxisOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Axis.Passive;
            moveObjectBuilder1.TransformMotion.DistanceAngle.OrientXpress.PlaneOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Plane.Passive;
            moveObjectBuilder1.TransformMotion.OrientXpress.AxisOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Axis.Passive;
            moveObjectBuilder1.TransformMotion.OrientXpress.PlaneOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Plane.Passive;
            Point3d manipulatororigin1;
            manipulatororigin1 = moveObjectBuilder1.TransformMotion.ManipulatorOrigin;
            moveObjectBuilder1.TransformMotion.Option = NXOpen.GeometricUtilities.ModlMotion.Options.Angle;
            moveObjectBuilder1.MoveObjectResult = NXOpen.Features.MoveObjectBuilder.MoveObjectResultOptions.CopyOriginal;
            moveObjectBuilder1.TransformMotion.Angle.RightHandSide = angle;
            Body body1 = (Body)workPart.Bodies.FindObject(JournalIdentifier);
            bool added1;
            added1 = moveObjectBuilder1.ObjectToMoveObject.Add(body1);

            Scalar scalar1;
            scalar1 = workPart.Scalars.CreateScalar(0.5, NXOpen.Scalar.DimensionalityType.None, NXOpen.SmartObject.UpdateOption.WithinModeling);

            Sketch sketch1 = (Sketch)workPart.Sketches.FindObject("SKETCH_004");
            Line line1 = (Line)sketch1.FindObject("HANDLE R-42129");
            Point point1;
            point1 = workPart.Points.CreatePoint(line1, scalar1, NXOpen.SmartObject.UpdateOption.WithinModeling);

            NXObject nXObject1;
            Xform xform1;
            xform1 = workPart.Xforms.CreateExtractXform(line1, NXOpen.SmartObject.UpdateOption.WithinModeling, false, out nXObject1);

            Scalar scalar2;
            scalar2 = workPart.Scalars.CreateScalar(50.0, NXOpen.Scalar.DimensionalityType.None, NXOpen.SmartObject.UpdateOption.WithinModeling);

            Line line2 = (Line)nXObject1;
            Point point2;
            point2 = workPart.Points.CreatePoint(line2, scalar2, NXOpen.PointCollection.PointOnCurveLocationOption.PercentParameter, NXOpen.SmartObject.UpdateOption.WithinModeling);

            Direction direction1;
            direction1 = workPart.Directions.CreateDirection(line2, Sense.Reverse, NXOpen.SmartObject.UpdateOption.WithinModeling);

            Point nullPoint = null;
            Axis axis1;
            axis1 = workPart.Axes.CreateAxis(nullPoint, direction1, NXOpen.SmartObject.UpdateOption.WithinModeling);
            moveObjectBuilder1.TransformMotion.AngularAxis = axis1;

            NXObject nXObject2;
            nXObject2 = moveObjectBuilder1.Commit();

            NXObject[] objects1;
            objects1 = moveObjectBuilder1.GetCommittedObjects();
            moveObjectBuilder1.Destroy();
        }

第三步:完成半个足球的排列之后,直接对半球进行复制操作

        /// <summary>
        /// 半球复制
        /// </summary>
        public static void CopyBall()
        {
            Session theSession = Session.GetSession();
            Part workPart = theSession.Parts.Work;
            Part displayPart = theSession.Parts.Display;

            NXOpen.Features.MoveObject nullFeatures_MoveObject = null;
            NXOpen.Features.MoveObjectBuilder moveObjectBuilder1;
            moveObjectBuilder1 = workPart.BaseFeatures.CreateMoveObjectBuilder(nullFeatures_MoveObject);
            moveObjectBuilder1.TransformMotion.DistanceAngle.OrientXpress.AxisOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Axis.Passive;
            moveObjectBuilder1.TransformMotion.DistanceAngle.OrientXpress.PlaneOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Plane.Passive;
            moveObjectBuilder1.TransformMotion.OrientXpress.AxisOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Axis.Passive;
            moveObjectBuilder1.TransformMotion.OrientXpress.PlaneOption = NXOpen.GeometricUtilities.OrientXpressBuilder.Plane.Passive;
            Point3d manipulatororigin1;
            manipulatororigin1 = moveObjectBuilder1.TransformMotion.ManipulatorOrigin;
            Matrix3x3 manipulatormatrix1;
            manipulatormatrix1 = moveObjectBuilder1.TransformMotion.ManipulatorMatrix;
            moveObjectBuilder1.TransformMotion.Option = NXOpen.GeometricUtilities.ModlMotion.Options.Angle;
            moveObjectBuilder1.MoveObjectResult = NXOpen.Features.MoveObjectBuilder.MoveObjectResultOptions.CopyOriginal;
            moveObjectBuilder1.TransformMotion.Angle.RightHandSide = "180";
            Point3d origin1 = new Point3d(0.0, 0.0, 0.0);
            Vector3d vector1 = new Vector3d(1.0, 0.0, 0.0);
            Direction direction1;
            direction1 = workPart.Directions.CreateDirection(origin1, vector1, NXOpen.SmartObject.UpdateOption.WithinModeling);
            Point nullPoint = null;
            Axis axis1;
            axis1 = workPart.Axes.CreateAxis(nullPoint, direction1, NXOpen.SmartObject.UpdateOption.WithinModeling);
            moveObjectBuilder1.TransformMotion.AngularAxis = axis1;
            Body body1 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(15)");
            bool added1;
            added1 = moveObjectBuilder1.ObjectToMoveObject.Add(body1);

            Body body2 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(48)");
            bool added2;
            added2 = moveObjectBuilder1.ObjectToMoveObject.Add(body2);

            bool added3;
            added3 = moveObjectBuilder1.ObjectToMoveObject.Add(body2);

            Body body3 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(17)");
            bool added4;
            added4 = moveObjectBuilder1.ObjectToMoveObject.Add(body3);

            Body body4 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(19)");
            bool added5;
            added5 = moveObjectBuilder1.ObjectToMoveObject.Add(body4);

            Body body5 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(21)");
            bool added6;
            added6 = moveObjectBuilder1.ObjectToMoveObject.Add(body5);

            Body body6 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(32)");
            bool added7;
            added7 = moveObjectBuilder1.ObjectToMoveObject.Add(body6);

            Body body7 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(33)");
            bool added8;
            added8 = moveObjectBuilder1.ObjectToMoveObject.Add(body7);

            Body body8 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(34)");
            bool added9;
            added9 = moveObjectBuilder1.ObjectToMoveObject.Add(body8);

            Body body9 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(35)");
            bool added10;
            added10 = moveObjectBuilder1.ObjectToMoveObject.Add(body9);

            Body body10 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(36)");
            bool added11;
            added11 = moveObjectBuilder1.ObjectToMoveObject.Add(body10);

            Body body11 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(37)");
            bool added12;
            added12 = moveObjectBuilder1.ObjectToMoveObject.Add(body11);

            Body body12 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(38)");
            bool added13;
            added13 = moveObjectBuilder1.ObjectToMoveObject.Add(body12);

            Body body13 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(39)");
            bool added14;
            added14 = moveObjectBuilder1.ObjectToMoveObject.Add(body13);

            Body body14 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(40)");
            bool added15;
            added15 = moveObjectBuilder1.ObjectToMoveObject.Add(body14);

            Body body15 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(41)");
            bool added16;
            added16 = moveObjectBuilder1.ObjectToMoveObject.Add(body15);

            Body body16 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(42)");
            bool added17;
            added17 = moveObjectBuilder1.ObjectToMoveObject.Add(body16);

            Body body17 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(43)");
            bool added18;
            added18 = moveObjectBuilder1.ObjectToMoveObject.Add(body17);

            Body body18 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(44)");
            bool added19;
            added19 = moveObjectBuilder1.ObjectToMoveObject.Add(body18);

            Body body19 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(45)");
            bool added20;
            added20 = moveObjectBuilder1.ObjectToMoveObject.Add(body19);

            Body body20 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(46)");
            bool added21;
            added21 = moveObjectBuilder1.ObjectToMoveObject.Add(body20);

            Body body21 = (Body)workPart.Bodies.FindObject("UNPARAMETERIZED_FEATURE(47)");
            bool added22;
            added22 = moveObjectBuilder1.ObjectToMoveObject.Add(body21);

            bool added23;
            added23 = moveObjectBuilder1.ObjectToMoveObject.Add(body21);

            Scalar scalar1;
            scalar1 = workPart.Scalars.CreateScalar(1.0, NXOpen.Scalar.DimensionalityType.None, NXOpen.SmartObject.UpdateOption.WithinModeling);

            Sketch sketch1 = (Sketch)workPart.Sketches.FindObject("SKETCH_004");
            Line line1 = (Line)sketch1.FindObject("HANDLE R-42129");
            Point point1;
            point1 = workPart.Points.CreatePoint(line1, scalar1, NXOpen.SmartObject.UpdateOption.WithinModeling);
            axis1.Point = point1;
            moveObjectBuilder1.TransformMotion.AngularAxis = axis1;
            NXOpen.Session.UndoMarkId markId2;
            markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Move Object");
            NXObject nXObject1;
            nXObject1 = moveObjectBuilder1.Commit();
            NXObject[] objects1;
            objects1 = moveObjectBuilder1.GetCommittedObjects();
            moveObjectBuilder1.Destroy();
        }

第四步:隐藏参考线,完成足球制作

        /// <summary>
        /// 隐藏参考线
        /// </summary>
        public static void GuidesHidden()
        {
            Session theSession = Session.GetSession();
            Part workPart = theSession.Parts.Work;
            Part displayPart = theSession.Parts.Display;

            DisplayableObject[] objects1 = new DisplayableObject[3];
            Sketch sketch1 = (Sketch)workPart.Sketches.FindObject("SKETCH_004");
            Line line1 = (Line)sketch1.FindObject("HANDLE R-42129");
            objects1[0] = line1;
            objects1[1] = sketch1;
            Line line2 = (Line)sketch1.FindObject("HANDLE R-42094");
            objects1[2] = line2;
            theSession.DisplayManager.BlankObjects(objects1);
        }

        最后,祝大家开开心心看球,安安稳稳防疫,愿大家在世界杯召开的这一个月里,像德罗巴一样自信执着,像C罗一样桃花朵朵,像哈维一样创意颇多,像梅西一样激情四射,像国足一样超越自我。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarcoPro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值