public virtual Snap.NX.Curve[] Divide(params double[] parameters) { Snap.NX.Curve curve = this.Copy(); Snap.NX.Part workPart = Globals.WorkPart; DivideCurveBuilder builder = workPart.NXOpenPart.BaseFeatures.CreateDivideCurveBuilder(null); builder.Type = DivideCurveBuilder.Types.ByBoundingObjects; BoundingObjectBuilder[] builderArray = new BoundingObjectBuilder[parameters.Length]; Snap.NX.Point[] nxObjects = new Snap.NX.Point[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { builderArray[i] = workPart.NXOpenPart.CreateBoundingObjectBuilder(); builderArray[i].BoundingPlane = null; builderArray[i].BoundingObjectMethod = BoundingObjectBuilder.Method.ProjectPoint; nxObjects[i] = Create.Point(curve.Position(parameters[i])); builderArray[i].BoundingProjectPoint = (NXOpen.Point)nxObjects[i]; builder.BoundingObjects.Append(builderArray[i]); } View workView = workPart.NXOpenPart.ModelingViews.WorkView; builder.DividingCurve.SetValue((NXOpen.Curve)curve, workView, (Point3d)curve.StartPoint); builder.Commit(); NXOpen.NXObject[] committedObjects = builder.GetCommittedObjects(); builder.Destroy(); Snap.NX.Curve[] curveArray = new Snap.NX.Curve[committedObjects.Length]; for (int j = 0; j < curveArray.Length; j++) { curveArray[j] = CreateCurve((NXOpen.Curve)committedObjects[j]); } Snap.NX.NXObject.Delete(nxObjects); return(curveArray); }
public static void _ShowEactConfig() { Snap.NX.Part basePart = null; try { if (NXOpen.Session.GetSession().Parts.Work == null) { var filePath = Path.Combine(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Config"), "blank.prt"); basePart = Snap.NX.Part.OpenPart(filePath); Snap.Globals.WorkPart = basePart; } else { basePart = NXOpen.Session.GetSession().Parts.Work; } Main(); } catch (Exception ex) { throw ex; } finally { if (basePart != null) { basePart.Close(true, true); } } }
/// <summary> /// 创建基本视图 /// </summary> public static NXOpen.Drawings.BaseView CreateBaseView(NXOpen.Drawings.DrawingSheet ds, NXOpen.Tag modelViewTag, List <NXOpen.TaggedObject> selections, Snap.Position pos, Snap.Position size, EdmConfig config) { var sList = Enumerable.Select(selections, u => Snap.NX.NXObject.Wrap(u.Tag).Layer).ToList(); SetShowLayers(sList, config.EdmDrfLayer); sList.Add(config.EdmDrfLayer); var workPart = NXOpen.Session.GetSession().Parts.Work; Snap.NX.Part snapWorkPart = workPart; var theUFSession = NXOpen.UF.UFSession.GetUFSession(); //抑制视图的边界显示 theUFSession.Draw.SetBorderDisplay(false); NXOpen.UF.UFDraw.ViewInfo view_info; theUFSession.Draw.InitializeViewInfo(out view_info); view_info.view_status = NXOpen.UF.UFDraw.ViewStatus.ActiveView;//UF_DRAW_ACTIVE_VIEW; view_info.anchor_point = Tag.Null; view_info.view_scale = 1; view_info.use_ref_pt = false; view_info.inherit_boundary = false; double[] dwg_point = { pos.X, pos.Y }; Tag draw_view_tag; theUFSession.Draw.ImportView(ds.Tag, modelViewTag, new double[] { ds.Length / 2, ds.Height / 2 }, ref view_info, out draw_view_tag); string viewName; theUFSession.Obj.AskName(draw_view_tag, out viewName); SetViewDisplayEx(ds.Tag, draw_view_tag); var allObj = new List <NXOpen.NXObject>(); allObj.AddRange(Enumerable.Select(workPart.Bodies.ToArray().Where(u => sList.Contains(u.Layer)), m => m as NXObject)); allObj.AddRange(Enumerable.Select(workPart.Points.ToArray().Where(u => sList.Contains(u.Layer)), m => m as NXObject)); allObj.AddRange(Enumerable.Select(workPart.Lines.ToArray().Where(u => sList.Contains(u.Layer)), m => m as NXObject)); allObj.AddRange(Enumerable.Select(workPart.Curves.ToArray().Where(u => sList.Contains(u.Layer)), m => m as NXObject)); allObj.AddRange(Enumerable.Select(workPart.Sketches.ToArray().Where(u => sList.Contains(u.Layer)), m => m as NXObject)); allObj.AddRange(Enumerable.Select(workPart.Axes.ToArray().Where(u => sList.Contains(u.Layer)), m => m as NXObject)); allObj.AddRange(Enumerable.Select(workPart.Datums.ToArray().Where(u => sList.Contains(u.Layer)), m => m as NXObject)); allObj.Distinct().ToList().ForEach(u => { if (selections.Where(m => u.Tag == m.Tag).Count() <= 0) { SnapEx.Ex.UC6400(viewName, u.Tag); } }); theUFSession.Draw.DefineBoundByObjects(draw_view_tag, selections.Count, Enumerable.Select(selections, u => u.Tag).ToArray()); theUFSession.Draw.UpdateOneView(ds.Tag, draw_view_tag); var borderSize = GetBorderSize(draw_view_tag); theUFSession.Draw.SetViewScale(draw_view_tag, new double[] { size.X / borderSize.X, size.Y / borderSize.Y }.Min()); theUFSession.Draw.MoveView(draw_view_tag, dwg_point); //theUFSession.Draw.UpdateOneView(ds.Tag, draw_view_tag); return(NXOpen.Utilities.NXObjectManager.Get(draw_view_tag) as NXOpen.Drawings.BaseView); }
public static Snap.Position?GetElecMidPosition(Snap.NX.Part workPart, Snap.NX.Body body) { Snap.Position?result = null; var point = GetElecMidPointInPart(workPart, body); if (point == null) { var name = GetStringAttribute(body, SnapEx.EactConstString.EACT_ELECT_GROUP); if (!string.IsNullOrEmpty(name)) { if (body.NXOpenBody.OwningComponent != null && body.OwningComponent.Prototype != null) { var part = body.OwningComponent.Prototype; Snap.NX.Point oldPoint = GetElecMidPointInPart(part, body); if (oldPoint != null) { var oldPosition = new Snap.Position(oldPoint.X, oldPoint.Y, oldPoint.Z); var vCom = Snap.Vector.Unit(body.OwningComponent.Orientation.AxisZ); var v2 = new Snap.Vector(oldPosition); Snap.Position newPosition = body.OwningComponent.Position - (vCom + v2); result = newPosition; } } } } else { result = point.Position; } return(result); }
/// <summary> /// 自动选点 /// </summary> public static void AutoSelPoint(string filename) { //导入探针 var part = NXOpen.Session.GetSession().Parts.Work; if (part != null) { Snap.NX.Part.Wrap(part.Tag).Close(true, true); } Snap.NX.Part snapPart = Snap.NX.Part.OpenPart(filename); var name = Path.GetFileNameWithoutExtension(filename); Snap.Globals.WorkPart = snapPart; try { var body = snapPart.Bodies.FirstOrDefault(); var config = ImportProbePart(); Helper.ShowMsg(string.Format("{0}开始取点...", name)); var list = CMMBusiness.AutoSelPoint(body, config); Helper.ShowMsg(string.Format("{0}取点完成", name)); } catch (Exception ex) { Helper.ShowMsg(string.Format("{0}取点错误【{1}】", name, ex.Message)); Console.WriteLine("AutoSelPoint错误:{0}", ex.Message); throw ex; } finally { snapPart.Close(true, true); } }
void btnOK_Click(object sender, EventArgs e) { TryHandle(() => { var fileName = txtSteelName.Tag.ToString(); if (string.IsNullOrEmpty(fileName)) { MessageBox.Show("未选择钢件!"); return; } var dir = Path.Combine(Path.GetDirectoryName(fileName), _eactString); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var newFileName = Path.Combine(dir, Path.GetFileName(fileName)); if (!File.Exists(newFileName)) { File.Copy(fileName, newFileName, true); } var part = Session.GetSession().Parts.ToArray().ToList().FirstOrDefault(u => u.FullPath == newFileName); if (part != null) { Snap.NX.Part snapPart = part; snapPart.Close(true, true); } Snap.NX.Part.OpenPart(newFileName); Close(); }); }
public virtual void Trim(double lowerParam, double upperParam) { Snap.NX.Part workPart = Globals.WorkPart; TrimCurve trimCurve = null; TrimCurveBuilder builder = workPart.NXOpenPart.Features.CreateTrimCurveBuilder(trimCurve); builder.InteresectionMethod = TrimCurveBuilder.InteresectionMethods.UserDefined; builder.InteresectionDirectionOption = TrimCurveBuilder.InteresectionDirectionOptions.RelativeToWcs; builder.CurvesToTrim.AllowSelfIntersection(true); builder.CurvesToTrim.SetAllowedEntityTypes(NXOpen.Section.AllowTypes.CurvesAndPoints); builder.CurveOptions.Associative = false; builder.CurveOptions.InputCurveOption = CurveOptions.InputCurve.Replace; builder.CurveExtensionType = TrimCurveBuilder.CurveExtensionTypes.Natural; Snap.NX.Point point = Create.Point(this.Position(lowerParam)); Snap.NX.Point point2 = Create.Point(this.Position(upperParam)); Snap.NX.Section section = Snap.NX.Section.CreateSection(new Snap.NX.Point[] { point }); Snap.NX.Section section2 = Snap.NX.Section.CreateSection(new Snap.NX.Point[] { point2 }); builder.CurveList.Add(base.NXOpenTaggedObject, null, (Point3d)this.StartPoint); SelectionIntentRule[] rules = Snap.NX.Section.CreateSelectionIntentRule(new Snap.NX.ICurve[] { this }); builder.CurvesToTrim.AddToSection(rules, (NXOpen.NXObject) this, null, null, (Point3d)this.StartPoint, NXOpen.Section.Mode.Create, false); builder.FirstBoundingObject.Add(section.NXOpenSection); builder.SecondBoundingObject.Add(section2.NXOpenSection); builder.Commit(); builder.Destroy(); section.NXOpenSection.Destroy(); section2.NXOpenSection.Destroy(); Snap.NX.NXObject.Delete(new Snap.NX.NXObject[] { point }); Snap.NX.NXObject.Delete(new Snap.NX.NXObject[] { point2 }); }
/// <summary> /// 创建基本视图 /// </summary> public static NXOpen.Drawings.BaseView CreateBaseView(NXOpen.Drawings.DrawingSheet ds, NXOpen.Tag modelViewTag, List <NXOpen.TaggedObject> selections, Snap.Position pos, Snap.Position size) { var sList = Enumerable.Select(selections, u => Snap.NX.NXObject.Wrap(u.Tag).Layer).ToList(); SetShowLayers(sList, 254); sList.Add(254); var workPart = NXOpen.Session.GetSession().Parts.Work; Snap.NX.Part snapWorkPart = workPart; var theUFSession = NXOpen.UF.UFSession.GetUFSession(); NXOpen.UF.UFDraw.ViewInfo view_info; theUFSession.Draw.InitializeViewInfo(out view_info); double[] dwg_point = { pos.X, pos.Y }; Tag draw_view_tag; theUFSession.Draw.ImportView(ds.Tag, modelViewTag, dwg_point, ref view_info, out draw_view_tag); string viewName; theUFSession.Obj.AskName(draw_view_tag, out viewName); theUFSession.Draw.SetViewScale(draw_view_tag, 0.1); var allObj = new List <NXOpen.NXObject>(); allObj.AddRange(workPart.Bodies.ToArray().Where(u => sList.Contains(u.Layer))); allObj.AddRange(workPart.Points.ToArray().Where(u => sList.Contains(u.Layer))); allObj.AddRange(workPart.Lines.ToArray().Where(u => sList.Contains(u.Layer))); allObj.AddRange(workPart.Curves.ToArray().Where(u => sList.Contains(u.Layer))); allObj.AddRange(workPart.Sketches.ToArray().Where(u => sList.Contains(u.Layer))); allObj.AddRange(workPart.Axes.ToArray().Where(u => sList.Contains(u.Layer))); allObj.AddRange(workPart.Datums.ToArray().Where(u => sList.Contains(u.Layer))); allObj.Distinct().ToList().ForEach(u => { if (selections.Where(m => u.Tag == m.Tag).Count() <= 0) { SnapEx.Ex.UC6400(viewName, u.Tag); } }); theUFSession.Draw.DefineBoundByObjects(draw_view_tag, selections.Count, Enumerable.Select(selections, u => u.Tag).ToArray()); theUFSession.Draw.UpdateOneView(ds.Tag, draw_view_tag); theUFSession.Draw.SetViewScale(draw_view_tag, 1); //更新视图 theUFSession.Draw.UpdateOneView(ds.Tag, draw_view_tag); var borderSize = GetBorderSize(draw_view_tag); theUFSession.Draw.SetViewScale(draw_view_tag, new double[] { size.X / borderSize.X, size.Y / borderSize.Y }.Min()); theUFSession.Draw.MoveView(draw_view_tag, dwg_point); theUFSession.Draw.UpdateOneView(ds.Tag, draw_view_tag); return(NXOpen.Utilities.NXObjectManager.Get(draw_view_tag) as NXOpen.Drawings.BaseView); }
internal void AddPoints(params Snap.NX.Point[] points) { if (points != null) { Snap.NX.Part workPart = Globals.WorkPart; NXOpen.Section nXOpenSection = this.NXOpenSection; nXOpenSection.AllowSelfIntersection(false); SelectionIntentRule[] rules = CreateSelectionIntentRule(points); nXOpenSection.AddToSection(rules, (NXOpen.NXObject)points[0].NXOpenTaggedObject, null, null, (Point3d)Position.Origin, NXOpen.Section.Mode.Create, false); } }
internal void AddICurve(params Snap.NX.ICurve[] icurves) { if (icurves != null) { Snap.NX.Part workPart = Globals.WorkPart; NXOpen.Section nXOpenSection = this.NXOpenSection; nXOpenSection.AllowSelfIntersection(false); for (int i = 0; i < icurves.Length; i++) { SelectionIntentRule[] rules = CreateSelectionIntentRule(new Snap.NX.ICurve[] { icurves[i] }); nXOpenSection.AddToSection(rules, (NXOpen.NXObject)icurves[i].NXOpenTaggedObject, null, null, (Point3d)Position.Origin, NXOpen.Section.Mode.Create, false); } } }
public Snap.NX.Spline[] Divide() { Snap.NX.Spline spline = this.Copy(); Snap.NX.Part workPart = Globals.WorkPart; DivideCurveBuilder builder = workPart.NXOpenPart.BaseFeatures.CreateDivideCurveBuilder(null); builder.Type = DivideCurveBuilder.Types.AtKnotpoints; builder.KnotPointMethod = DivideCurveBuilder.KnotPointOption.AllKnotpoints; builder.DividingCurve.SetValue(spline.NXOpenCurve, workPart.NXOpenPart.Views.WorkView, (Point3d)spline.StartPoint); builder.Commit(); NXOpen.NXObject[] committedObjects = builder.GetCommittedObjects(); builder.Destroy(); Snap.NX.Spline[] splineArray = new Snap.NX.Spline[committedObjects.Length]; for (int i = 0; i < committedObjects.Length; i++) { NXOpen.NXObject obj1 = committedObjects[i]; splineArray[i] = (NXOpen.Spline)committedObjects[i]; } return(splineArray); }
public static void Start(string filename, Action <string> showMsg) { var part = NXOpen.Session.GetSession().Parts.Work; if (part != null) { Snap.NX.Part.Wrap(part.Tag).Close(true, true); } Snap.NX.Part snapPart = Snap.NX.Part.OpenPart(filename); var name = Path.GetFileNameWithoutExtension(filename); showMsg(string.Format("正在进行图档转换【{0}】", name)); Snap.Globals.WorkPart = snapPart; try { EactBomBusiness.Instance.ConfigData.IsCanSelElecInBom = true; var bodies = Snap.Globals.WorkPart.Bodies.ToList(); var steel = bodies.FirstOrDefault(u => u.IsHasAttr(EactBom.EactBomBusiness.EACT_MOULDBODY)); ElecManage.MouldInfo MouldInfo = EactBom.EactBomBusiness.Instance.GetMouldInfo(steel); var sInsertBodies = bodies.Where(u => u.IsHasAttr(EactBom.EactBomBusiness.EACT_SINSERTBODY)).ToList(); MouldInfo.SInsertBodies = sInsertBodies; MouldInfo.ElecBodies = bodies.Where(u => !(u.IsHasAttr(EactBom.EactBomBusiness.EACT_MOULDBODY) || u.IsHasAttr(EactBom.EactBomBusiness.EACT_SINSERTBODY))).ToList(); MouldInfo.Orientation = Snap.Globals.WcsOrientation; ElecManage.Entry.Instance.IsDistinguishSideElec = true; ElecManage.Entry.Instance.DefaultQuadrantType = (QuadrantType)steel.GetAttrIntegerValue(EactBom.EactBomBusiness.EACT_DEFAULTQUADRANTTYPE); var list = EactBomBusiness.Instance.GetElecList(MouldInfo, showMsg); EactBomBusiness.Instance.ExportEact(list, MouldInfo, showMsg, EactBomBusiness.Instance.ConfigData.ExportPrt, EactBomBusiness.Instance.ConfigData.ExportStp , EactBomBusiness.Instance.ConfigData.ExportCNCPrt, false, true, EactBomBusiness.Instance.ConfigData.IsExportEDM ); } catch (Exception ex) { Console.WriteLine("AutoPartBusiness错误:{0}", ex.Message); throw ex; } finally { snapPart.Close(true, true); } }
public static Snap.NX.Point GetElecMidPoint(Snap.NX.Part workPart, Snap.NX.Body body) { var point = GetElecMidPointInPart(workPart, body); if (point == null) { var name = GetStringAttribute(body, SnapEx.EactConstString.EACT_ELECT_GROUP); if (!string.IsNullOrEmpty(name)) { if (body.NXOpenBody.OwningComponent != null && body.OwningComponent.Prototype != null) { var part = body.OwningComponent.Prototype; Snap.NX.Point oldPoint = GetElecMidPointInPart(part, body); if (oldPoint != null) { SnapEx.Create.ExtractObject(new List <NXOpen.NXObject> { oldPoint }, workPart.FullPath, false, false); oldPoint = GetElecMidPointInPart(workPart, body); if (oldPoint != null) { var oldPosition = new Snap.Position(oldPoint.X, oldPoint.Y, oldPoint.Z); var vCom = Snap.Vector.Unit(body.OwningComponent.Orientation.AxisZ); var v2 = new Snap.Vector(oldPosition); Snap.Position newPosition = body.OwningComponent.Position - (vCom + v2); oldPoint.X = newPosition.X; oldPoint.Y = newPosition.Y; oldPoint.Z = newPosition.Z; point = oldPoint; } } } } } else { point = point.Copy(); } return(point); }
/// <summary> /// 自动编程 /// </summary> static void AutoCAM(string filename) { var part = NXOpen.Session.GetSession().Parts.Work; if (part != null) { Snap.NX.Part.Wrap(part.Tag).Close(true, true); } Snap.NX.Part snapPart = Snap.NX.Part.OpenPart(filename); AutoCAMUI.Helper.InitCAMSession("WsqAutoCAM"); var name = Path.GetFileNameWithoutExtension(filename); Snap.Globals.WorkPart = snapPart; try { var body = snapPart.Bodies.FirstOrDefault(); Helper.ShowMsg(string.Format("{0}开始自动编程...", name)); var ele = ElecManage.Electrode.GetElectrode(body); if (ele != null) { ele.InitAllFace(); var camConfig = CNCConfig.CAMConfig.GetInstance(); var camEle = new AutoCAMUI.CAMElectrode(); camEle.Init(ele, camConfig); AutoCam(camEle, camConfig); Helper.ShowMsg(string.Format("{0}自动编程完成", name)); } } catch (Exception ex) { Helper.ShowMsg(string.Format("{0}自动编程错误【{1}】", name, ex.Message)); Console.WriteLine("自动编程错误:{0}", ex.Message); throw ex; } finally { snapPart.Close(true, true); } }
/// <summary> /// 创建探针模型 /// </summary> public static bool CreateProbe(ProbeData data) { bool result = true; try { Snap.NX.Part basePart = null; if (NXOpen.Session.GetSession().Parts.Work == null) { var filePath = Path.Combine(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Config"), "blank.prt"); basePart = Snap.NX.Part.OpenPart(filePath); Snap.Globals.WorkPart = basePart; } var inPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "CMM_INSPECTION"); //创建路径 if (!Directory.Exists(inPath)) { Directory.CreateDirectory(inPath); } foreach (var ab in data.GetABList()) { var requireAbBodies = new List <Snap.NX.Body>(); var requireUnite = new List <Snap.NX.Body>(); var mark = Globals.SetUndoMark(Globals.MarkVisibility.Invisible, "CreateProbe"); //创建探球 var vec = Snap.Orientation.Identity.AxisZ; var sphere = Snap.Create.Sphere(new Position(), data.D).Body; sphere.Faces.ToList().ForEach(u => { u.SetStringAttribute(EACTPROBESPHEREFACE, "1"); }); //创建加长杆 var lengtheningRodMaxPosition = new Position(0, 0, data.L); var lengtheningRod = Snap.Create.Cylinder(new Position(), lengtheningRodMaxPosition, data.d).Body; Action <double, double, double> action = (h, ed, ed2) => { if (h > 0 && ed > 0) { if (ed2 <= 0) { ed2 = ed; } //创建加长杆1 Snap.NX.Body connect1; if (ed != ed2) { connect1 = Snap.Create.Cone(lengtheningRodMaxPosition, vec, new Number[] { ed, ed2 }, h).Body; } else { connect1 = Snap.Create.Cylinder(lengtheningRodMaxPosition, lengtheningRodMaxPosition + new Position(0, 0, h), ed).Body; } lengtheningRodMaxPosition = lengtheningRodMaxPosition + new Position(0, 0, h); requireAbBodies.AddRange(new List <Snap.NX.Body> { connect1 }); requireUnite.AddRange(new List <Snap.NX.Body> { connect1 }); } }; data.ExtensionBarDataList.ForEach(u => { action(u.Height, u.D1, u.D2); }); //创建基座 var startPedestal = lengtheningRodMaxPosition; var firstPedestal = Snap.Create.Cylinder(startPedestal, startPedestal + new Position(0, 0, data.L2), data.D3).Body; var twoPedestalPosition = startPedestal + new Position(0, 0, data.L2); var twoPedestal = Snap.Create.Sphere(twoPedestalPosition, data.D1).Body; var threePedestalPosition = twoPedestalPosition; var threePedestal = Snap.Create.Cylinder(threePedestalPosition, threePedestalPosition + new Position(0, 0, data.L1), data.D2).Body; //AB旋转 requireAbBodies.AddRange(new List <Snap.NX.Body> { sphere, lengtheningRod, firstPedestal }); requireUnite.AddRange(new List <Snap.NX.Body> { lengtheningRod, firstPedestal, twoPedestal, threePedestal }); var trans = GetTrans(twoPedestalPosition, ab); foreach (var rBody in requireAbBodies) { rBody.Move(trans); } var r = Snap.Create.Unite(sphere, requireUnite.ToArray()); r.Orphan(); sphere.Move(Snap.Geom.Transform.CreateTranslation(Snap.Position.Origin - Snap.Position.Origin.Copy(trans))); sphere.Name = string.Format("{0}A{1}B{2}", data.ProbeName, ab.A, ab.B); var fileName = Path.Combine(inPath, sphere.Name); if (File.Exists(fileName + ".prt")) { File.Delete(fileName + ".prt"); } var dir = Path.GetDirectoryName(fileName); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } //创建干涉检查数据 var faces = sphere.Faces; var points = new List <Position>(); faces.ToList().ForEach(u => { var faceBox = u.Box; var centerPoint = new Snap.Position((faceBox.MaxX + faceBox.MinX) / 2, (faceBox.MaxY + faceBox.MinY) / 2, (faceBox.MaxZ + faceBox.MinZ) / 2); points.Add(centerPoint); if (!u.IsHasAttr(EACTPROBESPHEREFACE)) { u.Edges.ToList().ForEach(e => { points.Add(e.StartPoint); points.Add(e.EndPoint); }); } else { Snap.NX.Face.Sphere sphereFace = u as Snap.NX.Face.Sphere; points.Add(sphereFace.Geometry.Center); } }); points = points.Distinct().ToList(); var str = Newtonsoft.Json.JsonConvert.SerializeObject(points); sphere.SetStringAttribute(EACT_PROBEINSPECTIONPOINT, str); var exObject = new List <NXOpen.NXObject> { sphere }; exObject.ForEach(u => { Snap.NX.NXObject uO = u; uO.IsHidden = true; uO.SetStringAttribute(SnapEx.ConstString.CMM_INSPECTION_SPHERE, "1"); }); SnapEx.Create.ExtractObject(exObject, fileName, false, true); Globals.UndoToMark(mark, null); } if (basePart != null) { basePart.Close(true, true); } } catch (Exception ex) { Console.WriteLine(string.Format("CreateProbe错误:{0}", ex.Message)); result = false; } return(result); }
/// <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 Snap.NX.Point GetElecMidPointInPart(Snap.NX.Part workPart, Snap.NX.Body body) { var name = GetStringAttribute(body, SnapEx.EactConstString.EACT_ELECT_GROUP); return(workPart.Points.FirstOrDefault(u => IsElecMidPoint(u, name))); }