Esempio n. 1
0
        public static Snap.NX.NXObject GetViewBorder(EdmDraw.ViewBorderType borderType, NXOpen.Drawings.DraftingView view)
        {
            Snap.NX.NXObject result          = null;
            Snap.Position    viewCenterPoint = view.GetDrawingReferencePoint();
            var viewBorderSize = view.GetBorderSize();

            switch (borderType)
            {
            case EdmDraw.ViewBorderType.Right:
            {
                Snap.Position xLeft = viewCenterPoint;
                xLeft.X += viewBorderSize.X / 2;
                xLeft.Y += viewBorderSize.Y / 2;
                Snap.Position xRight = viewCenterPoint;
                xRight.X += viewBorderSize.X / 2;
                xRight.Y -= viewBorderSize.Y / 2;
                result    = CreateNxObject <Snap.NX.Line>(() => { return(Snap.Create.Line(xLeft, xRight)); }, view.Tag, false);
                break;
            }

            case EdmDraw.ViewBorderType.Top:
            {
                Snap.Position xLeft = viewCenterPoint;
                xLeft.X -= viewBorderSize.X / 2;
                xLeft.Y += viewBorderSize.Y / 2;
                Snap.Position xRight = viewCenterPoint;
                xRight.X += viewBorderSize.X / 2;
                xRight.Y += viewBorderSize.Y / 2;
                result    = CreateNxObject <Snap.NX.Line>(() => { return(Snap.Create.Line(xLeft, xRight)); }, view.Tag, false);
                break;
            }
            }
            return(result);
        }
Esempio n. 2
0
        protected override Snap.NX.Face GetTopFace()
        {
            var faceDirection = BaseFace.GetFaceDirection();
            var faces         = ElecBody.Faces.ToList();
            var topFace       = faces.Where(u => u.IsHasAttr(ELEC_BASE_BOTTOM_FACE)).FirstOrDefault();

            if (topFace == null)
            {
                var topFaces = faces.Where(u => u.ObjectSubType == Snap.NX.ObjectTypes.SubType.FacePlane).Where(u => SnapEx.Helper.Equals(-faceDirection, u.GetFaceDirection())).ToList();
                topFace = topFaces.FirstOrDefault();
                if (topFaces.Count > 1)
                {
                    var basePlane       = BaseFace as Snap.NX.Face.Plane;
                    var baseOrigin      = basePlane.Geometry.Origin;
                    var baseFaceBox     = BaseFace.Box;
                    var baseCenterPoint = new Snap.Position((baseFaceBox.MaxX + baseFaceBox.MinX) / 2, (baseFaceBox.MaxY + baseFaceBox.MinY) / 2, (baseFaceBox.MaxZ + baseFaceBox.MinZ) / 2);
                    topFaces.ForEach(u => {
                        var uBox         = u.Box;
                        var uCenterPoint = new Snap.Position((uBox.MaxX + uBox.MinX) / 2, (uBox.MaxY + uBox.MinY) / 2, (uBox.MaxZ + uBox.MinZ) / 2);
                        if (SnapEx.Helper.Equals(u.GetFaceDirection(), Snap.Vector.Unit(uCenterPoint - baseCenterPoint), SnapEx.Helper.Tolerance))
                        {
                            topFace = u;
                            return;
                        }
                    });
                }
            }
            TopFace = topFace;
            return(topFace);
        }
Esempio n. 3
0
        /// <summary>
        /// 获取对角线
        /// </summary>
        static Snap.NX.Line GetDiagonalLine(Snap.NX.Body body, out Snap.NX.Face baseFace)
        {
            Snap.NX.Line result   = null;
            var          workPart = Snap.Globals.WorkPart;
            var          box      = body.Box;
            var          p2       = new Snap.Position((box.MaxX + box.MinX) / 2, (box.MaxY + box.MinY) / 2);
            var          lines    = new List <NXOpen.NXObject>();

            if (!string.IsNullOrEmpty(body.Name))
            {
                lines = workPart.NXOpenPart.Layers.GetAllObjectsOnLayer(body.Layer).Where(l => l is NXOpen.Line).ToList();
                lines.ToList().ForEach(u =>
                {
                    Snap.NX.Line line = u as NXOpen.Line;
                    bool isRemove     = true;
                    if (Snap.Compute.Distance(line, body) < SnapEx.Helper.Tolerance)
                    {
                        var p1 = (line.StartPoint + line.EndPoint) / 2;
                        p2.Z   = p1.Z;
                        if (SnapEx.Helper.Equals(p1, p2, SnapEx.Helper.Tolerance))
                        {
                            isRemove = false;
                        }
                    }

                    if (isRemove)
                    {
                        lines.Remove(u);
                    }
                });
            }
            GetBaseFace(body, Enumerable.Select(lines, u => Snap.NX.Line.Wrap(u.Tag)).ToList(), out baseFace, out result);
            return(result);
        }
Esempio 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);
        }
Esempio n. 5
0
        /// <summary>
        /// 获取对角线
        /// </summary>
        Snap.NX.Line GetDiagonalLine(Snap.NX.Body body)
        {
            Snap.NX.Line result   = null;
            var          workPart = Snap.Globals.WorkPart;

            var box = body.Box;

            var p2 = new Snap.Position((box.MaxX + box.MinX) / 2, (box.MaxY + box.MinY) / 2);

            if (!string.IsNullOrEmpty(body.Name))
            {
                var lines = workPart.NXOpenPart.Layers.GetAllObjectsOnLayer(body.Layer).Where(l => l is NXOpen.Line).ToList();
                lines.ForEach(u =>
                {
                    Snap.NX.Line line = u as NXOpen.Line;
                    var p1            = (line.StartPoint + line.EndPoint) / 2;
                    p2.Z = p1.Z;
                    if (SnapEx.Helper.Equals(p1, p2, JYElecHelper._tolerance))
                    {
                        result = line;
                        return;
                    }
                });
            }

            return(result);
        }
Esempio n. 6
0
        /// <summary>
        /// 创建注释
        /// </summary>
        public static NXOpen.Tag CreateNode(string text, Snap.Position origin)
        {
            var result = NXOpen.Tag.Null;

            if (!EDMTableInfo.IsHasChinese(text))
            {
                var theUFSession = NXOpen.UF.UFSession.GetUFSession();
                theUFSession.Drf.CreateNote(1, new string[] { text }, origin.Array, 0, out result);
            }
            else
            {
                Session theSession  = Session.GetSession();
                Part    workPart    = theSession.Parts.Work;
                Part    displayPart = theSession.Parts.Display;
                NXOpen.Annotations.SimpleDraftingAid   nullAnnotations_SimpleDraftingAid = null;
                NXOpen.Annotations.DraftingNoteBuilder draftingNoteBuilder1;
                draftingNoteBuilder1 = workPart.Annotations.CreateDraftingNoteBuilder(nullAnnotations_SimpleDraftingAid);
                draftingNoteBuilder1.Origin.OriginPoint = origin;
                draftingNoteBuilder1.Origin.Anchor      = NXOpen.Annotations.OriginBuilder.AlignmentPosition.MidCenter;
                draftingNoteBuilder1.Text.SetEditorText(new string[] { text });
                var obj = draftingNoteBuilder1.Commit() as NXOpen.Annotations.Note;
                draftingNoteBuilder1.Destroy();
                result = obj == null ? NXOpen.Tag.Null : obj.Tag;
            }

            return(result);
        }
Esempio n. 7
0
        /// <summary>
        /// 创建标签
        /// </summary>
        public static NXOpen.Tag CreateLabel(string text, Snap.Position origin, Snap.Position pos, NXOpen.Tag view, NXOpen.Tag objectTag)
        {
            NXOpen.Tag result       = NXOpen.Tag.Null;
            var        theUFSession = NXOpen.UF.UFSession.GetUFSession();

            NXOpen.UF.UFDrf.Object object1 = new NXOpen.UF.UFDrf.Object();
            object1.object_tag            = objectTag;
            object1.object_view_tag       = view;
            object1.object_assoc_type     = NXOpen.UF.UFDrf.AssocType.EndPoint;
            object1.object_assoc_modifier = NXOpen.UF.UFConstants.UF_DRF_first_end_point;

            theUFSession.Drf.CreateLabel(1, new string[] { text }, origin.Array, NXOpen.UF.UFDrf.LeaderAttachType.LeaderAttachObject,
                                         ref object1,
                                         pos.Array,
                                         out result);
            var eData = new DraftingEnvironmentData();
            var mpi   = eData.mpi;
            var mpr   = eData.mpr;

            theUFSession.Drf.AskObjectPreferences(result, eData.mpi, eData.mpr, out eData.radiusValue, out eData.diameterValue);
            mpi[1]  = 1;
            mpi[9]  = 1;
            mpi[10] = 2;
            mpi[11] = 4;
            mpi[29] = 1;
            mpi[39] = 1;
            mpi[94] = 0;
            mpr[9]  = 3.0;
            mpr[10] = 0.001;
            theUFSession.Drf.SetObjectPreferences(result, eData.mpi, eData.mpr, eData.radiusValue, eData.diameterValue);
            return(result);
        }
Esempio n. 8
0
        /// <summary>
        /// 创建ID符号
        /// </summary>
        public static NXOpen.Tag CreateIdSymbol(string text, Snap.Position origin, Snap.Position pos, NXOpen.Tag view, NXOpen.Tag objectTag)
        {
            var theUFSession = NXOpen.UF.UFSession.GetUFSession();
            var dd           = new NXOpen.UF.UFDrf.SymbolPreferences();

            theUFSession.Drf.AskSymbolPreferences(ref dd);
            dd.id_symbol_size = 6;
            theUFSession.Drf.SetSymbolPreferences(ref dd);

            NXOpen.UF.UFDrf.Object object1 = new NXOpen.UF.UFDrf.Object();

            object1.object_tag            = objectTag;
            object1.object_view_tag       = view;
            object1.object_assoc_type     = NXOpen.UF.UFDrf.AssocType.EndPoint;
            object1.object_assoc_modifier = NXOpen.UF.UFConstants.UF_DRF_first_end_point;

            var result = NXOpen.Tag.Null;

            theUFSession.Drf.CreateIdSymbol(NXOpen.UF.UFDrf.IdSymbolType.SymCircle, text, "",
                                            origin.Array, NXOpen.UF.UFDrf.LeaderMode.WithLeader, NXOpen.UF.UFDrf.LeaderAttachType.LeaderAttachObject,
                                            ref object1,
                                            pos.Array,
                                            out result
                                            );

            return(result);
        }
Esempio n. 9
0
 public static bool Equals(Snap.Position v1, Snap.Position v2, double tolerance)
 {
     if (Math.Abs((v1.X - v2.X)) < tolerance && Math.Abs((v1.Y - v2.Y)) < tolerance && Math.Abs((v1.Z - v2.Z)) < tolerance)
     {
         return(true);
     }
     return(false);
 }
Esempio n. 10
0
        /// <summary>
        /// 创建注释
        /// </summary>
        public static NXOpen.Tag CreateNode(string text, Snap.Position origin)
        {
            var theUFSession = NXOpen.UF.UFSession.GetUFSession();
            var result       = NXOpen.Tag.Null;

            theUFSession.Drf.CreateNote(1, new string[] { text }, origin.Array, 0, out result);
            return(result);
        }
Esempio n. 11
0
        /// <summary>
        /// 创建对勾
        /// </summary>
        public static void CreateTick(Snap.Position pos)
        {
            var dis     = 3;
            var vector1 = Snap.Vector.Unit(new Snap.Vector(-1, 1, 0));
            var vector2 = Snap.Vector.Unit(new Snap.Vector(1, 1, 0));

            CreateNxObject(() => { return(Snap.Create.Line(pos, pos + dis * vector1)); }, NXOpen.Tag.Null, false).IsHidden         = false;
            CreateNxObject(() => { return(Snap.Create.Line(pos, pos + (dis * 1.5) * vector2)); }, NXOpen.Tag.Null, false).IsHidden = false;
        }
Esempio n. 12
0
        public static Snap.Position MapModelToDrawing(NXOpen.Tag viewTag, Snap.Position pos)
        {
            var tempMap   = new double[] { 0, 0 };
            var ufSession = NXOpen.UF.UFSession.GetUFSession();

            ufSession.View.MapModelToDrawing(viewTag, pos.Array, tempMap);
            var originPointMTD = tempMap.ToArray();

            return(new Snap.Position(originPointMTD[0], originPointMTD[1]));
        }
Esempio n. 13
0
        /// <summary>
        /// 设置非切削移动区域起点
        /// </summary>
        public static void SetRegionStartPoints(NXOpen.Tag operTag, Snap.Position pos)
        {
            var oper     = NXOpen.Utilities.NXObjectManager.Get(operTag) as NXOpen.CAM.Operation;
            var workPart = NXOpen.Session.GetSession().Parts.Work;
            var cavityMillingBuilder1 = workPart.CAMSetup.CAMOperationCollection.CreatePlanarMillingBuilder(oper);
            var point = workPart.Points.CreatePoint(pos);

            cavityMillingBuilder1.NonCuttingBuilder.SetRegionStartPoints(new Point[] { point });
            cavityMillingBuilder1.Commit();
            cavityMillingBuilder1.Destroy();
        }
Esempio n. 14
0
        public static void WriteLine(Snap.Position[] myPositionArray, int paddedWidth = 20)
        {
            int length = myPositionArray.Length;

            for (int i = 0; i < length; i++)
            {
                Snap.Position position = myPositionArray[i];
                Write(position.ToString().PadRight(paddedWidth));
            }
            Write("\n");
        }
Esempio n. 15
0
        /// <summary>
        /// 创建智能曲线
        /// </summary>
        public static NXOpen.Tag Create_SO_Curve(Snap.Position pos, Snap.Position pos1)
        {
            NXOpen.Tag result;
            var        workPart = NXOpen.Session.GetSession().Parts.Work;
            var        pointLst = new List <NXOpen.Tag>();

            pointLst.Add(Create_SO_Point(pos));
            pointLst.Add(Create_SO_Point(pos1));
            ufSession.So.CreateLineTwoPoints(workPart.Tag, NXOpen.UF.UFSo.UpdateOption.UpdateAfterModeling, pointLst.ToArray(), out result);
            ufSession.So.SetVisibilityOption(result, NXOpen.UF.UFSo.VisibilityOption.Invisible);
            return(result);
        }
Esempio n. 16
0
        /// <summary>
        /// 获取对角线
        /// </summary>
        static Snap.NX.Line GetDiagonalLine(Snap.NX.Body body, out Snap.NX.Face baseFace)
        {
            Snap.NX.Line result = null;
            baseFace = null;
            var workPart = Snap.Globals.WorkPart;
            var box      = body.Box;
            var p2       = new Snap.Position((box.MaxX + box.MinX) / 2, (box.MaxY + box.MinY) / 2, (box.MaxZ + box.MinZ) / 2);
            var lines    = new List <Snap.NX.Line>();

            if (!string.IsNullOrEmpty(body.Name))
            {
                lines = workPart.NXOpenPart.Layers.GetAllObjectsOnLayer(body.Layer).ToArray().Where(u => u is NXOpen.Line).Select(u => Snap.NX.Line.Wrap(u.Tag)).ToList();
                foreach (var line in lines.ToList())
                {
                    if (!Entry.Instance.IsDistinguishSideElec)
                    {
                        var p1      = (line.StartPoint + line.EndPoint) / 2;
                        var tempVec = p1 - p2;
                        var tempOri = Snap.Globals.Wcs.Orientation.AxisZ;
                        if ((
                                SnapEx.Helper.Equals(tempVec, tempOri, SnapEx.Helper.Tolerance) ||
                                SnapEx.Helper.Equals(tempVec, -tempOri, SnapEx.Helper.Tolerance) ||
                                SnapEx.Helper.Equals(p1, p2, SnapEx.Helper.Tolerance)
                                ) && Snap.Compute.Distance(line, body) < SnapEx.Helper.Tolerance
                            )
                        {
                        }
                        else
                        {
                            lines.Remove(line);
                        }
                    }
                    else
                    {
                        if (Snap.Compute.Distance(line, body) < SnapEx.Helper.Tolerance)
                        {
                        }
                        else
                        {
                            lines.Remove(line);
                        }
                    }
                }
            }
            if (lines.Count > 0)
            {
                GetBaseFace(body, lines, out baseFace, out result);
            }
            return(result);
        }
Esempio n. 17
0
        public static void WriteLine(Snap.Position[,] myPositionArray, int paddedWidth = 20)
        {
            int length = myPositionArray.GetLength(0);
            int num2   = myPositionArray.GetLength(1);

            for (int i = 0; i < length; i++)
            {
                for (int j = 0; j < num2; j++)
                {
                    Snap.Position position = myPositionArray[i, j];
                    Write(position.ToString().PadRight(paddedWidth));
                }
                Write("\n");
            }
        }
Esempio n. 18
0
        public List <AB> GetABList(Snap.Position p, Snap.Vector pV)
        {
            var list = GetABList();

            list = Business.OrderProbeDataAB(list, p, pV);
            var tempList = list.Where(u => u.A == 0 && u.B == 0).ToList();

            tempList.ForEach(u => {
                list.Remove(u);
            });
            tempList.ForEach(u => {
                list.Insert(0, u);
            });
            return(list);
        }
Esempio n. 19
0
        /// <summary>
        /// 创建智能点
        /// </summary>
        public static NXOpen.Tag Create_SO_Point(Snap.Position pos)
        {
            NXOpen.Tag result;
            var        scalarDoubleLst = new List <NXOpen.Tag>();

            NXOpen.Tag scalarDouble;
            var        workPart = NXOpen.Session.GetSession().Parts.Work;

            ufSession.So.CreateScalarDouble(workPart.Tag, NXOpen.UF.UFSo.UpdateOption.UpdateAfterModeling, pos.X, out scalarDouble);
            scalarDoubleLst.Add(scalarDouble);
            ufSession.So.CreateScalarDouble(workPart.Tag, NXOpen.UF.UFSo.UpdateOption.UpdateAfterModeling, pos.Y, out scalarDouble);
            scalarDoubleLst.Add(scalarDouble);
            ufSession.So.CreateScalarDouble(workPart.Tag, NXOpen.UF.UFSo.UpdateOption.UpdateAfterModeling, pos.Z, out scalarDouble);
            scalarDoubleLst.Add(scalarDouble);
            ufSession.So.CreatePoint3Scalars(workPart.Tag, NXOpen.UF.UFSo.UpdateOption.UpdateAfterModeling, scalarDoubleLst.ToArray(), out result);
            return(result);
        }
Esempio n. 20
0
        /// <summary>
        /// 设置加工底面
        /// </summary>
        public static void SetCutFloor(NXOpen.Tag operTag, Snap.Position origin, NXOpen.Tag faceTag = NXOpen.Tag.Null)
        {
            NXOpen.Tag result;
            if (NXOpen.Tag.Null == faceTag)
            {
                var        identity = Snap.Orientation.Identity;
                NXOpen.Tag xforms;
                ufSession.So.CreateXformDoubles(Snap.Globals.WorkPart.NXOpenTag, NXOpen.UF.UFSo.UpdateOption.UpdateWithinModeling, origin.Array, identity.AxisX.Array, identity.AxisY.Array, 1, out xforms);
                result = xforms;
            }
            else
            {
                result = faceTag;
            }

            ufSession.Param.SetTagValue(operTag, NXOpen.UF.UFConstants.UF_PARAM_FLOOR, result);
        }
Esempio n. 21
0
        /// <summary>
        /// 设置边界
        /// </summary>
        public static void SetBoundary(Snap.Position origin, NXOpen.Tag faceTag, NXOpen.UF.CamGeomType camGeomType, NXOpen.Tag operTag, NXOpen.UF.CamMaterialSide materialSide)
        {
            SetBoundaryByFace(faceTag, camGeomType, operTag, materialSide);
            IntPtr[] Boundaries;
            int      count;

            ufSession.Cambnd.AskBoundaries(operTag, camGeomType, out count, out Boundaries);
            for (int i = 0; i < count; i++)
            {
                NXOpen.Matrix3x3 identity = Snap.Orientation.Identity;
                ufSession.Cambnd.SetBoundaryPlane(Boundaries[i], origin.Array, new double[] {
                    identity.Xx, identity.Xy, identity.Xz
                    , identity.Yx, identity.Yy, identity.Yz
                    , identity.Zx, identity.Zy, identity.Zz
                });
            }
        }
Esempio n. 22
0
        /// <summary>
        /// 设置边界
        /// </summary>
        public void SetBoundary(ElecManage.Electrode electrode)
        {
            List <NXOpen.Tag> peripheral = new List <NXOpen.Tag>();
            var box3d    = electrode.ElecBody.Box;
            var p1       = new Snap.Position(box3d.MinX, box3d.MaxY, box3d.MaxZ);
            var p2       = new Snap.Position(box3d.MinX, box3d.MinY, box3d.MaxZ);
            var p3       = new Snap.Position(box3d.MaxX, box3d.MinY, box3d.MaxZ);
            var p4       = new Snap.Position(box3d.MaxX, box3d.MaxY, box3d.MaxZ);
            var workPart = NXOpen.Session.GetSession().Parts.Work;

            peripheral.Add(Helper.Create_SO_Curve(p1, p2));
            peripheral.Add(Helper.Create_SO_Curve(p2, p3));
            peripheral.Add(Helper.Create_SO_Curve(p3, p4));
            peripheral.Add(Helper.Create_SO_Curve(p4, p1));
            Helper.SetBoundaryByCurves(
                peripheral.ToList()
                , NXOpen.UF.CamGeomType.CamBlank, OperTag, NXOpen.UF.CamMaterialSide.CamMaterialSideInLeft);
        }
Esempio n. 23
0
        /// <summary>
        /// 获取基准角
        /// </summary>
        public static Snap.NX.Face GetBaseCornerFace(Snap.Position startPoint, Snap.Position endPoint, Snap.NX.Body body)
        {
            Snap.NX.Face  result    = null;
            Snap.Position basePoint = (startPoint + endPoint) / 2;

            Snap.NX.Face baseFace = GetBaseFace(startPoint, endPoint, body);

            var faces = body.Faces.ToList();

            if (baseFace != null)
            {
                faces.Remove(baseFace);

                var baseFaceDir = new Snap.Orientation(baseFace.GetFaceDirection());

                var tempFaces = new List <Snap.NX.Face>();

                faces.Where(u => u.ObjectSubType == Snap.NX.ObjectTypes.SubType.FacePlane).ToList().ForEach(u =>
                {
                    var director = u.GetFaceDirection();
                    var angle    = Snap.Vector.Angle(baseFaceDir.AxisX, director);
                    if (Math.Abs(angle - 45) < _tolerance ||
                        Math.Abs(angle - 135) < _tolerance
                        )
                    {
                        tempFaces.Add(u);
                    }
                });

                if (tempFaces.Count > 1)
                {
                    tempFaces.RemoveAll(u => u.Box.MaxZ <= basePoint.Z);
                }

                if (tempFaces.Count > 0)
                {
                    result = tempFaces.FirstOrDefault();
                }
            }

            return(result);
        }
Esempio n. 24
0
        /// <summary>
        /// 获取所有的电极头部面
        /// </summary>
        protected static List <Snap.NX.Face> GetElecHeadFaces(List <Snap.NX.Face> faces, Snap.NX.Face baseFace, out List <Snap.NX.Face> sideFaces)
        {
            var headFaces     = new List <Snap.NX.Face>();
            var tempSideFaces = new List <Snap.NX.Face>();

            if (baseFace != null)
            {
                //头部面
                var allFace       = faces.ToList();
                var baseFaceBoxUV = baseFace.BoxUV;
                var elecBasePos   = baseFace.Position((baseFaceBoxUV.MinU + baseFaceBoxUV.MaxU) / 2, (baseFaceBoxUV.MinV + baseFaceBoxUV.MaxV) / 2);
                allFace.RemoveAll(u => u.NXOpenTag == baseFace.NXOpenTag);
                var faceDirection = baseFace.GetFaceDirection();
                var plane         = new Snap.Geom.Surface.Plane(elecBasePos, faceDirection);

                allFace.ToList().ForEach(u =>
                {
                    try
                    {
                        var uv          = u.BoxEx();
                        var cneterPoint = new Snap.Position((uv.MaxX + uv.MinX) / 2, (uv.MaxY + uv.MinY) / 2, (uv.MaxZ + uv.MinZ) / 2);
                        var resullt     = Snap.Compute.ClosestPoints(cneterPoint, plane);
                        var dir         = Snap.Vector.Unit(resullt.Point1 - resullt.Point2);
                        if (SnapEx.Helper.Equals(dir, faceDirection))
                        {
                            headFaces.Add(u);
                        }
                        else if (u.ObjectSubType == Snap.NX.ObjectTypes.SubType.FacePlane && SnapEx.Helper.Equals(dir, -faceDirection))
                        {
                            tempSideFaces.Add(u);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                });
            }
            sideFaces = tempSideFaces;
            return(headFaces);
        }
Esempio n. 25
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);
        }
Esempio n. 26
0
        /// <summary>
        /// 获取基准面
        /// </summary>
        public static Snap.NX.Face GetBaseFace(Snap.Position startPoint, Snap.Position endPoint, Snap.NX.Body body)
        {
            Snap.Position basePoint = (startPoint + endPoint) / 2;

            Snap.NX.Face baseFace = null;

            var faces = body.Faces.ToList();

            faces.ForEach(u =>
            {
                var box = u.BoxUV;
                var p1  = u.Position((box.MinU + box.MaxU) / 2, (box.MaxV + box.MinV) / 2);
                if (SnapEx.Helper.Equals(p1, basePoint, _tolerance))
                {
                    baseFace = u;
                    return;
                }
            });

            return(baseFace);
        }
Esempio n. 27
0
        /// <summary>
        /// 创建表格
        /// </summary>
        public static void CreateTabnot(Snap.Position origin, int rowCount, int columnCount, double columnWidth, double rowHeight)
        {
            var workPart     = Snap.Globals.WorkPart.NXOpenPart;
            var theUFSession = NXOpen.UF.UFSession.GetUFSession();
            var tabnot       = theUFSession.Tabnot;
            //var section_prefs = new NXOpen.UF.UFTabnot.SectionPrefs();
            //theUFSession.Tabnot.AskDefaultSectionPrefs(out section_prefs);
            //section_prefs.border_width = 60;
            //var tabular_note = NXOpen.Tag.Null;
            //theUFSession.Tabnot.Create(ref section_prefs, origin.Array, out tabular_note);

            //var tabel=NXOpen.Utilities.NXObjectManager.Get(tabular_note) as NXOpen.Annotations.Table;
            var tableSectionBuilder1 = workPart.Annotations.TableSections.CreateTableSectionBuilder(null);

            tableSectionBuilder1.NumberOfRows       = rowCount;
            tableSectionBuilder1.NumberOfColumns    = columnCount;
            tableSectionBuilder1.ColumnWidth        = columnWidth;
            tableSectionBuilder1.RowHeight          = rowHeight;
            tableSectionBuilder1.Origin.OriginPoint = origin;
            tableSectionBuilder1.Commit();
            tableSectionBuilder1.Destroy();
        }
Esempio n. 28
0
        /// <summary>
        /// 获取象限类型
        /// </summary>
        public static QuadrantType GetQuadrantType(Snap.Position position, Snap.Position center, Snap.Orientation orientation)
        {
            QuadrantType type = QuadrantType.First;
            var          x    = position.X - center.X;
            var          y    = position.Y - center.Y;

            if (x > 0 && y > 0)        //第一象限
            {
                type = QuadrantType.First;
            }
            else if (x < 0 && y > 0)       //第二象限
            {
                type = QuadrantType.Second;
            }
            else if (x < 0 && y < 0)       //第三象限
            {
                type = QuadrantType.Three;
            }
            else                //第四象限
            {
                type = QuadrantType.Four;
            }
            return(type);
        }
Esempio n. 29
0
 public static void WriteLine(Snap.Position myPosition)
 {
     Write(myPosition.ToString());
     Write("\n");
 }
Esempio n. 30
0
        void FrmTool_Load(object sender, EventArgs e)
        {
            var theSession = NXOpen.Session.GetSession();
            var workPart   = theSession.Parts.Work;

            if (workPart == null)
            {
                MessageBox.Show("未打开部件!");
                Close();
                return;
            }

            var list = new List <JYElecInfo>();

            Snap.Globals.WorkPart.Bodies.ToList().ForEach(u =>
            {
                if (JYElecHelper.IsElec(u) && !string.IsNullOrEmpty(u.Name))
                {
                    var lines      = new List <Snap.NX.Line>();
                    var allObjects = workPart.Layers.GetAllObjectsOnLayer(u.Layer).Where(l => l is NXOpen.Line).ToList();
                    var box        = u.Box;
                    var p2         = new Snap.Position((box.MaxX + u.Box.MinX) / 2, (box.MaxY + box.MinY) / 2, 0);
                    allObjects.ForEach(a =>
                    {
                        Snap.NX.Line l = a as NXOpen.Line;
                        var p1         = (l.StartPoint + l.EndPoint) / 2;
                        p2.Z           = p1.Z;
                        if (SnapEx.Helper.Equals(p1, p2, JYElecHelper._tolerance))
                        {
                            lines.Add(l);
                            return;
                        }
                    });

                    var basePoint = new Snap.Position();
                    if (lines.Count > 0)
                    {
                        var line  = lines.First();
                        basePoint = (line.StartPoint + line.EndPoint) / 2;
                    }

                    var mainElec = list.FirstOrDefault(m => m.ElecName == u.Name);
                    if (mainElec == null)
                    {
                        mainElec                    = new JYElecInfo();
                        mainElec.ElecName           = u.Name;
                        mainElec.ELEC_FINISH_NUMBER = (int)JYElecHelper.GetAttrValue(u, JYElecConst.ELEC_FINISH_NUMBER);
                        mainElec.ELEC_MIDDLE_NUMBER = (int)JYElecHelper.GetAttrValue(u, JYElecConst.ELEC_MIDDLE_NUMBER);
                        mainElec.ELEC_ROUGH_NUMBER  = (int)JYElecHelper.GetAttrValue(u, JYElecConst.ELEC_ROUGH_NUMBER);
                        mainElec.ELEC_FINISH_SPACE  = (double)JYElecHelper.GetAttrValue(u, JYElecConst.ELEC_FINISH_SPACE);
                        mainElec.ELEC_MIDDLE_SPACE  = (double)JYElecHelper.GetAttrValue(u, JYElecConst.ELEC_MIDDLE_SPACE);
                        mainElec.ELEC_ROUGH_SPACE   = (double)JYElecHelper.GetAttrValue(u, JYElecConst.ELEC_ROUGH_SPACE);
                        list.Add(mainElec);
                    }

                    if (lines.Count > 0)
                    {
                        var pInfo = mainElec.PositioningInfos.FirstOrDefault();
                        var info  = new JYPositioningInfo();
                        info.X    = basePoint.X;
                        info.Y    = basePoint.Y;
                        info.Z    = basePoint.Z;
                        info.NXObjects.Add(u);
                        info.NXObjects.Add(lines.FirstOrDefault().NXOpenLine);

                        var infoStartPoint = lines.First().StartPoint;
                        var infoEndPoint   = lines.First().EndPoint;
                        info.Lines.Add(infoStartPoint);
                        info.Lines.Add(infoEndPoint);
                        info.FaceDir = JYElecHelper.GetBaseFace(lines.First().StartPoint, lines.First().EndPoint, u).GetFaceDirection();
                        if (pInfo != null)
                        {
                            var startPoint = pInfo.Lines.First();
                            var endPoint   = pInfo.Lines.Last();

                            info.Rotation = Snap.Vector.Angle(endPoint - startPoint, infoStartPoint - infoEndPoint);
                        }
                        mainElec.PositioningInfos.Add(info);
                    }
                }
            });

            gridControl1.DataSource = list;
            ;
        }