/// <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); }
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); } }