示例#1
0
        /// <summary>
        /// 析出体
        /// </summary>
        public static NXOpen.Assemblies.Component ExtractObject(List <NXOpen.NXObject> bodies, string fileName, bool isAddComponent, bool newPart = true, Snap.Geom.Transform trans = null, Snap.Position basePoint = new Snap.Position(), Snap.Orientation orientation = null)
        {
            NXOpen.Assemblies.Component component = null;
            Session theSession  = Session.GetSession();
            Part    workPart    = theSession.Parts.Work;
            Part    displayPart = theSession.Parts.Display;

            if (newPart)
            {
                if (System.IO.File.Exists(fileName))
                {
                    System.IO.File.Delete(fileName);
                }
            }
            var objs = bodies;
            var tags = new List <NXOpen.Tag>();

            objs.ForEach(u =>
            {
                tags.Add(u.Tag);
            });

            //TODO 后期需优化
            NXOpen.UF.UFPart.ExportOptions options = new NXOpen.UF.UFPart.ExportOptions();
            options.new_part        = newPart;
            options.params_mode     = NXOpen.UF.UFPart.ExportParamsMode.RemoveParams;
            options.expression_mode = NXOpen.UF.UFPart.ExportExpMode.CopyExpDeeply;
            NXOpen.UF.UFSession.GetUFSession().Part.ExportWithOptions(
                fileName,
                tags.Count, tags.ToArray(),
                ref options
                );

            if (trans != null)
            {
                PartLoadStatus partLoadStatus1;
                var            basePart = theSession.Parts.OpenBase(fileName, out partLoadStatus1) as Part;
                if (basePart != null)
                {
                    Snap.NX.Part snapBasePart = basePart;
                    var          partAllObjs  = new List <Snap.NX.NXObject>();
                    snapBasePart.Bodies.ToList().ForEach(u => {
                        partAllObjs.Add(u);
                    });

                    snapBasePart.Lines.ToList().ForEach(u => {
                        partAllObjs.Add(u);
                    });

                    snapBasePart.Points.ToList().ForEach(u => {
                        partAllObjs.Add(u);
                    });

                    partAllObjs.ForEach(u =>
                    {
                        u.Move(trans);
                    });
                    snapBasePart.Save();
                    snapBasePart.Close(false, true);
                }
            }

            if (isAddComponent)
            {
                PartLoadStatus partLoadStatus1;
                //后期需优化
                component = workPart.ComponentAssembly.AddComponent(fileName, SnapEx.ConstString.ReferenceSetName, System.IO.Path.GetFileNameWithoutExtension(fileName), basePoint, orientation ?? new Orientation(), -1, out partLoadStatus1, true);
            }

            return(component);
        }
示例#2
0
        public static void ExportPrt(List <Snap.NX.NXObject> bodies, string path, Func <Snap.Geom.Transform> func = null, bool isSetWcsOrientation = true, params Snap.Geom.Transform[] transfroms)
        {
            var fileName = string.Format("{0}{1}", path, ".prt");

            if (System.IO.File.Exists(fileName))
            {
                System.IO.File.Delete(fileName);
            }
            var workPart = NXOpen.Session.GetSession().Parts.Work;
            var mark     = Snap.Globals.SetUndoMark(Snap.Globals.MarkVisibility.Invisible, "ExportPrt");

            try
            {
                foreach (var body in bodies)
                {
                    if (body.IsOccurrence)
                    {
                        transfroms.ToList().ForEach(u =>
                        {
                            var trans        = u.Matrix;
                            Matrix3x3 matrix = new Matrix3x3();
                            matrix.Xx        = trans[0]; matrix.Xy = trans[4]; matrix.Xz = trans[8];
                            matrix.Yx        = trans[1]; matrix.Yy = trans[5]; matrix.Yz = trans[9];
                            matrix.Zx        = trans[2]; matrix.Zy = trans[6]; matrix.Zz = trans[10];
                            workPart.ComponentAssembly.MoveComponent(body.OwningComponent, new Vector3d(trans[3], trans[7], trans[11]), matrix);
                        });
                    }
                    else
                    {
                        var trans = Snap.Geom.Transform.CreateTranslation();
                        transfroms.ToList().ForEach(u =>
                        {
                            trans = Snap.Geom.Transform.Composition(trans, u);
                        });

                        if (transfroms.Count() > 0)
                        {
                            body.Move(trans);
                        }

                        if (func != null && bodies.Count == 1)
                        {
                            body.Move(func());
                        }
                    }
                }

                if (func != null && bodies.Count > 1)
                {
                    func();
                }


                if (isSetWcsOrientation)
                {
                    NXOpen.UF.UFSession.GetUFSession().Csys.SetOrigin(Snap.Globals.Wcs.NXOpenTag, Snap.Position.Origin.Array);
                    Snap.Globals.WcsOrientation = Snap.Orientation.Identity;
                }

                //TODO 电极显示
                bodies.ForEach(u => {
                    var state = Snap.Globals.LayerStates[u.Layer];
                    if (state != Snap.Globals.LayerState.WorkLayer && state != Snap.Globals.LayerState.Selectable)
                    {
                        Snap.Globals.LayerStates[u.Layer] = Snap.Globals.LayerState.Selectable;
                    }
                    if (u.IsHidden)
                    {
                        u.IsHidden = false;
                    }
                });

                //NXOpen.UF.UFSession.GetUFSession().Part.Export(path, 1, new Tag[] { body.NXOpenTag });
                NXOpen.UF.UFPart.ExportOptions options = new NXOpen.UF.UFPart.ExportOptions();
                options.new_part        = true;
                options.params_mode     = NXOpen.UF.UFPart.ExportParamsMode.RemoveParams;
                options.expression_mode = NXOpen.UF.UFPart.ExportExpMode.CopyExpShallowly;
                NXOpen.UF.UFSession.GetUFSession().Part.ExportWithOptions(
                    path,
                    bodies.Count, Enumerable.Select(bodies, u => u.NXOpenTag).ToArray(),
                    ref options
                    );
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                Snap.Globals.UndoToMark(mark, null);
            }
        }