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