Example #1
0
        public static Snap.Orientation GetStandardOrientation(Snap.Orientation ori)
        {
            var result = ori;

            if (!IsUseOrientation(ori))
            {
                var vectors  = new List <Snap.Vector>();
                var identiry = Snap.Orientation.Identity;
                vectors.Add(identiry.AxisX);
                vectors.Add(identiry.AxisY);
                vectors.Add(identiry.AxisZ);
                vectors.Add(-identiry.AxisX);
                vectors.Add(-identiry.AxisY);
                vectors.Add(-identiry.AxisZ);
                var axisXs = vectors.Where(u => SnapEx.Helper.Equals(u, ori.AxisX)).ToList();
                var axisYs = vectors.Where(u => SnapEx.Helper.Equals(u, ori.AxisY)).ToList();
                var axisZs = vectors.Where(u => SnapEx.Helper.Equals(u, ori.AxisZ)).ToList();
                if (axisXs.Count > 0 && axisYs.Count > 0 && axisZs.Count > 0)
                {
                    result = new Snap.Orientation(axisXs.First(), axisYs.First(), axisZs.First());
                }
            }

            return(result);
        }
Example #2
0
        public override Snap.NX.Face GetChamferFace()
        {
            if (ChamferFace != null)
            {
                return(ChamferFace);
            }
            Snap.NX.Face result  = null;
            var          results = new List <Snap.NX.Face>();

            if (BaseFace != null)
            {
                var baseFOriention = new Snap.Orientation(BaseFace.GetFaceDirection());
                var v1             = Snap.Vector.Unit(baseFOriention.AxisX);
                var v2             = Snap.Vector.Unit(baseFOriention.AxisY);
                var v3             = Snap.Vector.Unit(v1 + v2);
                var v4             = v3.Copy(Snap.Geom.Transform.CreateRotation(new Snap.Position(), BaseFace.GetFaceDirection(), 90)).Unitize();

                var chamferFaces = ElecBody.Faces.Where(u => u.ObjectSubType == Snap.NX.ObjectTypes.SubType.FacePlane && Snap.Compute.Distance(u, BaseFace) < SnapEx.Helper.Tolerance).ToList();
                chamferFaces.ForEach(u =>
                {
                    var faceDir = u.GetFaceDirection();
                    if (SnapEx.Helper.Equals(v3, faceDir, SnapEx.Helper.Tolerance) ||
                        SnapEx.Helper.Equals(-v3, faceDir, SnapEx.Helper.Tolerance) ||
                        SnapEx.Helper.Equals(-v4, faceDir, SnapEx.Helper.Tolerance) ||
                        SnapEx.Helper.Equals(v4, faceDir, SnapEx.Helper.Tolerance)
                        )
                    {
                        results.Add(u);
                    }
                });
            }

            result = results.FirstOrDefault();

            if (results.Count > 1)
            {
                var baseFaceBoxUV = BaseFace.BoxUV;
                var elecBasePos   = BaseFace.Position((baseFaceBoxUV.MinU + baseFaceBoxUV.MaxU) / 2, (baseFaceBoxUV.MinV + baseFaceBoxUV.MaxV) / 2);

                var faceDirection = BaseFace.GetFaceDirection();
                var plane         = new Snap.Geom.Surface.Plane(elecBasePos, faceDirection);

                foreach (var u in results)
                {
                    var uv          = u.BoxUV;
                    var cneterPoint = u.Position((uv.MaxU + uv.MinU) / 2, (uv.MaxV + uv.MaxV) / 2);
                    var resullt     = Snap.Compute.ClosestPoints(cneterPoint, plane);
                    var dir         = Snap.Vector.Unit(resullt.Point1 - resullt.Point2);
                    if (SnapEx.Helper.Equals(dir, -faceDirection) && Snap.Compute.Distance(BaseFace, u) < SnapEx.Helper.Tolerance)
                    {
                        result = u;
                        break;
                    }
                }
            }

            ChamferFace = result;

            return(result);
        }
Example #3
0
        /// <summary>
        /// 实际尺寸
        /// </summary>
        public string GetElecSize(Snap.Orientation ori)
        {
            var elecBox = _body.AcsToWcsBox3d(ori);

            return(string.Format("{0}x{1}x{2}",
                                 Math.Round(Math.Abs(elecBox.MaxX - elecBox.MinX), 4)
                                 , Math.Round(Math.Abs(elecBox.MaxY - elecBox.MinY), 4)
                                 , Math.Round(Math.Abs(elecBox.MaxZ - elecBox.MinZ), 4)
                                 ));
        }
Example #4
0
        public static Snap.Geom.Transform GetElecTransWcsToAcs(Snap.Vector baseDir, Snap.Orientation wcs)
        {
            var wcsOrientation      = GetStandardOrientation(wcs);
            var acsOrientation      = Snap.Orientation.Identity;
            var transR              = Snap.Geom.Transform.CreateRotation(acsOrientation, wcsOrientation);
            var baseFaceOrientation = new Snap.Orientation(-baseDir.Copy(transR));

            baseFaceOrientation = GetSidelongOrientation(baseFaceOrientation);
            transR = Snap.Geom.Transform.Composition(transR, Snap.Geom.Transform.CreateRotation(acsOrientation, baseFaceOrientation));
            return(transR);
        }
Example #5
0
        /// <summary>
        /// 获取象限类型
        /// </summary>
        public QuadrantType GetQuadrantType(Snap.Orientation wcs, QuadrantType defaultQ = QuadrantType.First)
        {
            var result      = defaultQ;
            var chamferFace = GetChamferFace();

            if (chamferFace != null && BaseFace != null)
            {
                var dir = chamferFace.GetFaceDirection().Copy(GetElecTransWcsToAcs(BaseFace.GetFaceDirection(), wcs));
                result = SnapEx.Helper.GetQuadrantType(dir);
            }
            return(result);
        }
Example #6
0
        public static void WriteLine(Snap.Orientation myOrientation)
        {
            Vector axisX = myOrientation.AxisX;
            Vector axisY = myOrientation.AxisY;
            Vector axisZ = myOrientation.AxisZ;

            Write("AxisX = ( " + Snap.Number.ToString(axisX.X) + ", " + Snap.Number.ToString(axisX.Y) + ", " + Snap.Number.ToString(axisX.Z) + " )");
            Write("\n");
            Write("AxisY = ( " + Snap.Number.ToString(axisY.X) + ", " + Snap.Number.ToString(axisY.Y) + ", " + Snap.Number.ToString(axisY.Z) + " )");
            Write("\n");
            Write("AxisZ = ( " + Snap.Number.ToString(axisZ.X) + ", " + Snap.Number.ToString(axisZ.Y) + ", " + Snap.Number.ToString(axisZ.Z) + " )");
            Write("\n");
        }
Example #7
0
 public Snap.Geom.Box3d GetBox3d()
 {
     if (Electrode != null)
     {
         var topFaceDir         = -Electrode.BaseFace.GetFaceDirection();
         var topFaceOrientation = new Snap.Orientation(topFaceDir);
         topFaceOrientation = Electrode.GetSidelongOrientation(topFaceOrientation);
         var quadrantType = EactConfig.ConfigData.GetInstance().QuadrantType;
         var transQ       = Snap.Geom.Transform.CreateRotation(new Snap.Position(), topFaceDir, SnapEx.Helper.CAngle(Electrode.GetQuadrantType(quadrantType), quadrantType));
         return(_body.AcsToWcsBox3d(topFaceOrientation));
     }
     return(_body.AcsToWcsBox3d());
 }
Example #8
0
        public static Snap.Geom.Box3d AcsToWcsBox3d(Snap.Geom.Box3d box, Snap.Orientation wcs)
        {
            var corners = new List <Snap.Position>();

            box.Corners.ToList().ForEach(u => {
                var acsOrientation = Snap.Orientation.Identity;
                var wcsOrientation = wcs;
                var transR         = Snap.Geom.Transform.CreateRotation(acsOrientation, wcsOrientation);
                corners.Add(u.Copy(transR));
            });
            var xList = Enumerable.Select(corners, u => u.X).ToList();
            var yList = Enumerable.Select(corners, u => u.Y).ToList();
            var zList = Enumerable.Select(corners, u => u.Z).ToList();

            return(new Snap.Geom.Box3d(xList.Min(), yList.Min(), zList.Min(), xList.Max(), yList.Max(), zList.Max()));
        }
Example #9
0
        public static bool IsUseOrientation(Snap.Orientation ori)
        {
            var           result = true;
            List <double> list   = new List <double>();

            list.AddRange(ori.AxisX.Array);
            list.AddRange(ori.AxisY.Array);
            list.AddRange(ori.AxisZ.Array);
            foreach (var item in list)
            {
                if (!(System.Math.Round(item) == item))
                {
                    result = false;
                    break;
                }
            }
            return(result);
        }
Example #10
0
        /// <summary>
        /// 创建摄像机
        /// </summary>
        public static ModelingView CreateCamera(ViewType viewType, double[] martrix)
        {
            var     viewName    = Enum.GetName(viewType.GetType(), viewType);
            Session theSession  = Session.GetSession();
            Part    workPart    = theSession.Parts.Work;
            Part    displayPart = theSession.Parts.Display;
            var     or          = new Snap.Orientation(
                new Snap.Vector(martrix[0], martrix[1], martrix[2])
                , new Snap.Vector(martrix[3], martrix[4], martrix[5]));

            var modelingView = workPart.ModelingViews.ToArray().FirstOrDefault(u => u.Name == viewName);
            var camera       = workPart.Cameras.ToArray().FirstOrDefault(u => u.Name == viewName);

            if (modelingView != null && camera != null)
            {
                Snap.NX.NXObject.Wrap(camera.Tag).Delete();
                Snap.NX.NXObject.Wrap(modelingView.Tag).Delete();
            }

            {
                var ufSession = NXOpen.UF.UFSession.GetUFSession();
                var ds        = new List <double>();
                ds.AddRange(or.AxisX.Array);
                ds.AddRange(or.AxisY.Array);
                SnapEx.Ex.UC6434("", 4, NXOpen.Tag.Null, ds.ToArray());
                //ufSession.View.SetViewMatrix("", 4, NXOpen.Tag.Null, martrix);

                #region createCamera Code
                NXOpen.Tag workView;
                ufSession.View.AskWorkView(out workView);
                string workViewName;
                ufSession.Obj.AskName(workView, out workViewName);

                SnapEx.Ex.UC6450(workViewName, viewName, 0, 0);
                SnapEx.Ex.UC6449(workViewName);
                #endregion

                modelingView = workPart.ModelingViews.ToArray().FirstOrDefault(u => u.Name == viewName);
            }



            return(modelingView);
        }
Example #11
0
        /// <summary>
        /// 获取摄像机视角
        /// </summary>
        public static Snap.Orientation GetCameraOrientation(Snap.Orientation ori, Electrode elec = null)
        {
            var wcsOrientation = Electrode.GetStandardOrientation(Snap.Globals.WcsOrientation);
            var acsOrientation = Snap.Orientation.Identity;
            var transR         = Snap.Geom.Transform.CreateRotation(acsOrientation, wcsOrientation);

            var X = new Snap.Vector(ori.AxisX.X, ori.AxisX.Y, ori.AxisX.Z).Copy(transR);
            var Y = new Snap.Vector(ori.AxisY.X, ori.AxisY.Y, ori.AxisY.Z).Copy(transR);

            if (elec != null)
            {
                var baseDirOrientation = Electrode.GetSidelongOrientation(new Snap.Orientation(-elec.BaseFace.GetFaceDirection()));
                var transR1            = Snap.Geom.Transform.CreateRotation(baseDirOrientation, wcsOrientation);
                X = X.Copy(transR1);
                Y = Y.Copy(transR1);
            }

            return(new Snap.Orientation(X, Y));
        }
Example #12
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);
        }
Example #13
0
        /// <summary>
        /// 获取侧放矩阵
        /// </summary>
        public static Snap.Orientation GetSidelongOrientation(Snap.Orientation baseDirOrientation)
        {
            var or       = GetStandardOrientation(baseDirOrientation);
            var identity = Snap.Orientation.Identity;

            Snap.Vector x = or.AxisX;
            Snap.Vector y = or.AxisY;
            if (SnapEx.Helper.Equals(or.AxisZ, -identity.AxisY))
            {
                x = identity.AxisX;
                y = identity.AxisZ;
            }
            else if (SnapEx.Helper.Equals(or.AxisZ, identity.AxisY))
            {
                x = -identity.AxisX;
                y = identity.AxisZ;
            }
            else if (SnapEx.Helper.Equals(or.AxisZ, -identity.AxisX))
            {
                x = -identity.AxisY;
                y = identity.AxisZ;
            }
            else if (SnapEx.Helper.Equals(or.AxisZ, identity.AxisX))
            {
                x = identity.AxisY;
                y = identity.AxisZ;
            }
            else if (SnapEx.Helper.Equals(or.AxisZ, -identity.AxisZ))
            {
                x = identity.AxisX;
                y = -identity.AxisY;
            }
            else
            {
                return(or);
            }
            return(new Snap.Orientation(x, y));
        }
Example #14
0
        /// <summary>
        /// 获取所有的侧面
        /// </summary>
        protected static List <Snap.NX.Face> GetBaseSideFaces(Snap.NX.Face baseFace, List <Snap.NX.Face> allSideFaces)
        {
            var result              = new List <Snap.NX.Face>();
            var faceDirection       = baseFace.GetFaceDirection();
            var baseFaceCenterPoint = baseFace.GetCenterPoint();
            var orientation         = new Snap.Orientation(faceDirection);
            var firstFace           = allSideFaces.Where(u => SnapEx.Helper.Equals(u.GetFaceDirection(), -orientation.AxisY));
            var twoFace             = allSideFaces.Where(u => SnapEx.Helper.Equals(u.GetFaceDirection(), orientation.AxisX));
            var threeFace           = allSideFaces.Where(u => SnapEx.Helper.Equals(u.GetFaceDirection(), orientation.AxisY));
            var fourFace            = allSideFaces.Where(u => SnapEx.Helper.Equals(u.GetFaceDirection(), -orientation.AxisX));

            Action <List <Snap.NX.Face> > action = itemFace => {
                if (itemFace.Count() > 1)
                {
                    var fFace = itemFace
                                .Where(u => Snap.Compute.Distance(u, baseFace) < SnapEx.Helper.Tolerance)
                                .OrderByDescending(u => Snap.Compute.Distance(baseFaceCenterPoint, ((Snap.NX.Face.Plane)u).Geometry))
                                .ThenByDescending(u => u.GetPlaneProjectArea())
                                .FirstOrDefault();
                    if (fFace != null)
                    {
                        result.Add(fFace);
                    }
                }
                else
                {
                    result.AddRange(itemFace);
                }
            };

            action(firstFace.ToList());
            action(twoFace.ToList());
            action(threeFace.ToList());
            action(fourFace.ToList());
            return(result);
        }
Example #15
0
        public override string ElecCuttingSize(EactConfig.ConfigData configData, double matchJiajuValue, Snap.Orientation topOrientation = null)
        {
            var str  = _body.GetAttrValue("UP_ELECTRODE_SPECIFICATION");
            var strs = str.Split('X').ToList();

            if (strs.Count >= 3)
            {
                return(string.Format("{0}x{1}x{2}",
                                     strs[0].Trim()
                                     , strs[1].Trim()
                                     , strs[2].Trim()
                                     ));
            }
            return(base.ElecCuttingSize(configData, matchJiajuValue, topOrientation));
        }
Example #16
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);
        }
Example #17
0
 public static Snap.Geom.Box3d AcsToWcsBox3d(this Snap.NX.NXObject obj, Snap.Orientation wcs)
 {
     return(AcsToWcsBox3d(obj.Box, wcs));
 }
Example #18
0
        /// <summary>
        /// 设置刻字内容
        /// </summary>
        public void SetText(string text, ElecManage.Electrode ele)
        {
            ele.GetChamferFace();
            if (ele.ChamferFace != null)
            {
                List <NXOpen.Tag>         peripheral;
                List <List <NXOpen.Tag> > innerCircumference;
                Helper.GetOutlineCurve(ele.BaseFace, out peripheral, out innerCircumference);
                if (!(peripheral.Count > 0 && ele.BaseSideFaces.Count > 0))
                {
                    return;
                }
                var list = peripheral.ToList();
                if (list.Count > 2)
                {
                    list = list.OrderByDescending(u => Snap.NX.Edge.Wrap(u).ArcLength).Take(2).ToList();
                }
                var edge        = Snap.NX.Edge.Wrap(list.OrderByDescending(u => Snap.Compute.Distance(ele.ChamferFace, Snap.NX.NXObject.Wrap(u))).FirstOrDefault());
                var minDistance = double.MaxValue;
                innerCircumference.ForEach(u => {
                    u.ForEach(m => {
                        var tmpDistance = Snap.Compute.Distance(edge, Snap.NX.NXObject.Wrap(m));
                        if (minDistance > tmpDistance)
                        {
                            minDistance = tmpDistance;
                        }
                    });
                });

                var textCenterPoint = (edge.StartPoint + edge.EndPoint) / 2;
                var face            = ele.BaseSideFaces.OrderBy(u => Snap.Compute.Distance(textCenterPoint, u)).FirstOrDefault();
                var yDir            = Snap.Vector.Unit(-face.GetFaceDirection());
                textCenterPoint = textCenterPoint.Copy(Snap.Geom.Transform.CreateTranslation((minDistance * 2 / 5) * yDir));
                var textOri = new Snap.Orientation(Snap.Vector.Cross(yDir, Snap.Orientation.Identity.AxisZ), yDir);
                var trans   = Snap.Geom.Transform.CreateRotation(textOri, Snap.Orientation.Identity);
                trans = Snap.Geom.Transform.Composition(trans, Snap.Geom.Transform.CreateTranslation(textCenterPoint - Snap.Position.Origin));
                var textNxObject = Snap.NX.NXObject.Wrap(SnapEx.Create.CreateNode(text, Snap.Position.Origin));
                textNxObject.Move(trans);
                var eData     = new EdmDraw.DraftingEnvironmentData();
                var mpi       = eData.mpi;
                var mpr       = eData.mpr;
                var ufSession = NXOpen.UF.UFSession.GetUFSession();
                ufSession.Drf.AskObjectPreferences(textNxObject.NXOpenTag, eData.mpi, eData.mpr, out eData.radiusValue, out eData.diameterValue);
                //设置尺寸
                var textStyle = new Snap.NX.TextStyle();
                textStyle.SetFont("chinesef", Snap.NX.TextStyle.FontType.NX);
                //文字对齐位置 首选项→公共→文字→对齐位置
                mpi[30] = (int)textStyle.AlignmentPosition;
                //文字样式 首选项→公共→文字→文本参数→字体(将字体设置为blockfont)
                mpi[88] = textStyle.FontIndex;
                //文字样式 首选项→公共→文字→文本参数→设置字宽(粗细)
                mpi[89] = 0;
                //字大小
                mpr[44] = 3.5;
                //文本长宽比
                mpr[45] = 0.5;
                //字体间距
                mpr[46] = 0.1;
                textStyle.AlignmentPosition = Snap.NX.TextStyle.AlignmentPositions.MidCenter;
                ufSession.Drf.SetObjectPreferences(textNxObject.NXOpenTag, eData.mpi, eData.mpr, eData.radiusValue, eData.diameterValue);
                Helper.SetCamText(OperTag, new List <NXOpen.Tag> {
                    textNxObject.NXOpenTag
                });
            }
        }
Example #19
0
        /// <summary>
        /// 开料尺寸
        /// </summary>
        public virtual string ElecCuttingSize(EactConfig.ConfigData configData, double matchJiajuValue, Snap.Orientation topOrientation = null)
        {
            double blankstock = configData.PQBlankStock;

            if (Entry.Edition == 1)
            {
                return(string.Format("{0}x{1}x{2}",
                                     KL_SIZE_LEN
                                     , KL_SIZE_WIDTH
                                     , KL_SIZE_HEIGHT
                                     ));
            }
            Snap.Geom.Box3d elecBox;
            if (topOrientation == null)
            {
                elecBox = GetBox3d();
            }
            else
            {
                elecBox = _body.AcsToWcsBox3d(topOrientation);
            }
            if (configData.Edition == 5)
            {
                var x = (int)Math.Ceiling(Math.Round(Math.Abs(elecBox.MaxX - elecBox.MinX), 4) + (configData.FZXBlankStock * 2));
                var y = (int)Math.Ceiling(Math.Round(Math.Abs(elecBox.MaxY - elecBox.MinY), 4) + (configData.FZYBlankStock * 2));
                var z = (int)Math.Ceiling(Math.Round(Math.Abs(elecBox.MaxZ - elecBox.MinZ), 4) + (configData.FZZBlankStock * 2));
                if (configData.IsFZX5Integral && x % 5 != 0)
                {
                    x = x - (x % 5) + 5;
                }
                if (configData.IsFZY5Integral && y % 5 != 0)
                {
                    y = y - (y % 5) + 5;
                }
                if (configData.IsFZZ5Integral && z % 5 != 0)
                {
                    z = z - (z % 5) + 5;
                }
                return(string.Format("{0}x{1}x{2}", x, y, z));
            }
            else
            {
                var z = (int)Math.Ceiling(Math.Round(Math.Abs(elecBox.MaxZ - elecBox.MinZ), 4) + (matchJiajuValue));
                if (z % 5 != 0)
                {
                    z = z - (z % 5) + 5;
                }
                return(string.Format("{0}x{1}x{2}",
                                     (int)Math.Ceiling(Math.Round(Math.Abs(elecBox.MaxX - elecBox.MinX), 4) + (blankstock * 2))
                                     , (int)Math.Ceiling(Math.Round(Math.Abs(elecBox.MaxY - elecBox.MinY), 4) + (blankstock * 2))
                                     , z
                                     ));
            }
        }