Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
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.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
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.º 6
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.º 7
0
        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 });
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
 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);
     }
 }
Ejemplo n.º 10
0
 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);
         }
     }
 }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
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.º 13
0
        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);
        }
Ejemplo n.º 14
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.º 15
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.º 16
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);
        }
Ejemplo n.º 17
0
        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)));
        }