Ejemplo n.º 1
0
 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);
         }
     }
 }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 3
0
 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();
     });
 }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        /// <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);
            }
        }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
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);
        }