示例#1
0
 /// <summary>
 /// 通过父获得partComp
 /// </summary>
 /// <param name="parent"></param>
 /// <param name="part"></param>
 /// <returns></returns>
 public static NXOpen.Assemblies.Component GetPartComp(Part parent, Part part)
 {
     Tag[] elePartOccsTag;
     NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();
     theUFSession.Assem.AskOccsOfPart(parent.Tag, part.Tag, out elePartOccsTag);
     return(NXOpen.Utilities.NXObjectManager.Get(elePartOccsTag[0]) as NXOpen.Assemblies.Component);
 }
示例#2
0
        /// <summary>
        /// 获得直线的数据
        /// </summary>
        /// <param name="edge"></param>
        /// <param name="lineData"></param>
        /// <returns></returns>
        public static bool GetLineData(Edge edge, out NXOpen.UF.UFEval.Line lineData, ref string errorMsg)
        {
            if (edge.SolidEdgeType != Edge.EdgeType.Linear)
            {
                lineData = new NXOpen.UF.UFEval.Line();

                errorMsg = "该边不是直线!";
                return(false);
            }

            NXOpen.UF.UFSession theUfSession = NXOpen.UF.UFSession.GetUFSession();
            IntPtr eval;

            theUfSession.Eval.Initialize(edge.Tag, out eval);
            try
            {
                theUfSession.Eval.AskLine(eval, out lineData);
            }
            catch (Exception ex)
            {
                lineData = new NXOpen.UF.UFEval.Line();
                errorMsg = ex.Message;
                LogMgr.WriteLog("EdgeUtils:GetLineData:" + ex.Message);
                return(false);
            }
            finally
            {
                theUfSession.Eval.Free(eval);
            }

            return(true);
        }
示例#3
0
        /// <summary>
        /// 获取obj的objOcc
        /// </summary>
        /// <param name="partOcc"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static NXObject GetNXObjectOfOcc(Tag partOcc, Tag obj)
        {
            Tag objOccTag = Tag.Null;

            NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();
            objOccTag = theUFSession.Assem.FindOccurrence(partOcc, obj);
            return(NXObjectManager.Get(objOccTag) as NXObject);
        }
示例#4
0
        /// <summary>
        /// 矢量差乘
        /// </summary>
        /// <param name="vec1">矢量1</param>
        /// <param name="vec2">矢量2</param>
        /// <returns>差乘矢量</returns>
        public static NXOpen.Vector3d VectorCross(NXOpen.Vector3d vec1, NXOpen.Vector3d vec2)
        {
            NXOpen.UF.UFSession ufSession = NXOpen.UF.UFSession.GetUFSession();
            double[]            x         = { vec1.X, vec1.Y, vec1.Z };
            double[]            y         = { vec2.X, vec2.Y, vec2.Z };
            double[]            z         = new double[3];
            ufSession.Vec3.Cross(x, y, z);
            NXOpen.Vector3d zVec = new NXOpen.Vector3d(z[0], z[1], z[2]);

            return(zVec);
        }
示例#5
0
 /// <summary>
 /// 获取装配档下Occs值
 /// </summary>
 /// <param name="parent"></param>
 /// <returns></returns>
 public NXOpen.Assemblies.Component GetPartComp(Part parent)
 {
     Tag[] elePartOccsTag;
     NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();
     try
     {
         theUFSession.Assem.AskOccsOfPart(parent.Tag, this.PartTag.Tag, out elePartOccsTag);
         return(NXOpen.Utilities.NXObjectManager.Get(elePartOccsTag[0]) as NXOpen.Assemblies.Component);
     }
     catch
     {
         return(null);
     }
 }
示例#6
0
        /// <summary>
        /// 逆矩阵
        /// </summary>
        /// <returns></returns>
        public Matrix4 GetInversMatrix()
        {
            double[] mat = { matrix[0, 0], matrix[0, 1], matrix[0, 2], matrix[0, 3],
                             matrix[1, 0], matrix[1, 1], matrix[1, 2], matrix[1, 3],
                             matrix[2, 0], matrix[2, 1], matrix[2, 2], matrix[2, 3],
                             matrix[3, 0], matrix[3, 1], matrix[3, 2], matrix[3, 3] };
            double[] inversMat = new double[16];


            NXOpen.UF.UFSession ufSession = NXOpen.UF.UFSession.GetUFSession();
            ufSession.Mtx4.Invert(mat, inversMat);
            return(new Matrix4(inversMat[0], inversMat[1], inversMat[2], inversMat[3],
                               inversMat[4], inversMat[5], inversMat[6], inversMat[7],
                               inversMat[8], inversMat[9], inversMat[10], inversMat[11],
                               inversMat[12], inversMat[13], inversMat[14], inversMat[15]));
        }
        /// <summary>
        /// 获取obj的objOcc
        /// </summary>
        /// <param name="partOcc"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static NXObject GetOccOfInstance(Tag partOcc)
        {
            Tag objOccTag = Tag.Null;

            NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();
            try
            {
                objOccTag = theUFSession.Assem.AskInstOfPartOcc(partOcc);
                return(NXObjectManager.Get(objOccTag) as NXObject);
            }
            catch (NXException ex)
            {
                LogMgr.WriteLog("AssmbliesUtils:GetNXObjectOfInstance:         " + ex.Message);
                throw ex;
            }
        }
 /// <summary>
 /// 通过父获得partComp
 /// </summary>
 /// <param name="parent"></param>
 /// <param name="part"></param>
 /// <returns></returns>
 public static List <NXOpen.Assemblies.Component> GetPartComp(Part parent, Part part)
 {
     Tag[] elePartOccsTag;
     NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();
     try
     {
         List <NXOpen.Assemblies.Component> ct = new List <NXOpen.Assemblies.Component>();
         theUFSession.Assem.AskOccsOfPart(parent.Tag, part.Tag, out elePartOccsTag);
         foreach (Tag tg in elePartOccsTag)
         {
             ct.Add(NXOpen.Utilities.NXObjectManager.Get(tg) as NXOpen.Assemblies.Component);
         }
         return(ct);
     }
     catch (NXException ex)
     {
         LogMgr.WriteLog("AssmbliesUtils:GetPartComp:         " + ex.Message);
         throw ex;
     }
 }
示例#9
0
        public static double GetArcRadius(Edge edge)
        {
            NXOpen.UF.UFSession theUfSession = NXOpen.UF.UFSession.GetUFSession();
            IntPtr eval;

            theUfSession.Eval.Initialize(edge.Tag, out eval);

            NXOpen.UF.UFEval.Arc arcData;
            try
            {
                theUfSession.Eval.AskArc(eval, out arcData);

                return(arcData.radius);
            }
            catch (Exception ex)
            {
                return(0);
            }
            finally
            {
                theUfSession.Eval.Free(eval);
            }
        }
示例#10
0
        public static ArcEdgeData GetArcData(Edge edge, ref string errorMsg)
        {
            if (edge.SolidEdgeType != Edge.EdgeType.Circular)
            {
                errorMsg = errorMsg + "该边不是圆弧";
                return(null);
            }

            NXOpen.UF.UFSession theUfSession = NXOpen.UF.UFSession.GetUFSession();
            IntPtr eval;

            theUfSession.Eval.Initialize(edge.Tag, out eval);

            NXOpen.UF.UFEval.Arc arc;
            try
            {
                theUfSession.Eval.AskArc(eval, out arc);
                ArcEdgeData arcData = new ArcEdgeData(edge);
                arcData.Center = new Point3d(arc.center[0], arc.center[1], arc.center[2]);
                arcData.Radius = arc.radius;

                arcData.IsWholeCircle = UMathUtils.IsEqual(Math.PI * 2, Math.Abs(arc.limits[1] - arc.limits[0]));
                arcData.Angle         = Math.Abs(arc.limits[1] - arc.limits[0]);
                return(arcData);
            }
            catch (Exception ex)
            {
                errorMsg += ex.Message;
                LogMgr.WriteLog("EdgeUtils:GetArcData1:" + edge.Tag.ToString() + ex.Message);
                throw ex;
            }
            finally
            {
                theUfSession.Eval.Free(eval);
            }
        }
示例#11
0
        /// <summary>
        /// 最大外形
        /// </summary>
        /// <param name="nxobj"></param>
        /// <param name="cs">坐标</param>
        /// <param name="mat">坐标矩阵</param>
        /// <param name="centerPt">中心点</param>
        /// <param name="disPt">外形一半</param>
        public static void GetBoundingBoxInLocal(NXObject[] nxobj, CartesianCoordinateSystem cs, Matrix4 mat, ref Point3d centerPt, ref Point3d disPt)
        {
            Session theSession = Session.GetSession();
            Part    workPart   = theSession.Parts.Work;

            NXOpen.UF.UFSession theUFSession = NXOpen.UF.UFSession.GetUFSession();
            Tag temp = Tag.Null;

            if (cs != null)
            {
                temp = cs.Tag;
            }
            else
            {
                cs = workPart.WCS.CoordinateSystem;
            }

            if (nxobj[0] == null)
            {
                LogMgr.WriteLog("BoundingBoxUtils.GetBoundingBoxInLocal 传入参数为空!");
                return;
            }
            double[] minCorner = new double[3];
            double[,] directions = new double[3, 3];
            double[] distances = new double[3];
            double[] box       = new double[6];
            double[] max       = new double[6];
            double[] center    = new double[3];
            double[] centerAbs = new double[3];

            theUFSession.Modl.AskBoundingBoxExact(nxobj[0].Tag, temp, minCorner, directions, distances);  //查询最大边界盒
            mat.ApplyPos(ref minCorner[0], ref minCorner[1], ref minCorner[2]);
            box[0] = minCorner[0];
            box[1] = minCorner[1];
            box[2] = minCorner[2];
            box[3] = minCorner[0] + distances[0];
            box[4] = minCorner[1] + distances[1];
            box[5] = minCorner[2] + distances[2];
            if (nxobj.Length >= 2)
            {
                for (int i = 1; i < nxobj.Length; i++)
                {
                    theUFSession.Modl.AskBoundingBoxExact(nxobj[i].Tag, temp, minCorner, directions, distances);
                    mat.ApplyPos(ref minCorner[0], ref minCorner[1], ref minCorner[2]);
                    max[0] = minCorner[0];
                    max[1] = minCorner[1];
                    max[2] = minCorner[2];
                    max[3] = minCorner[0] + distances[0];
                    max[4] = minCorner[1] + distances[1];
                    max[5] = minCorner[2] + distances[2];
                    if (max[0] < box[0])
                    {
                        box[0] = max[0];
                    }
                    if (max[1] < box[1])
                    {
                        box[1] = max[1];
                    }
                    if (max[2] < box[2])
                    {
                        box[2] = max[2];
                    }
                    if (max[3] > box[3])
                    {
                        box[3] = max[3];
                    }
                    if (max[4] > box[4])
                    {
                        box[4] = max[4];
                    }
                    if (max[5] > box[5])
                    {
                        box[5] = max[5];
                    }
                }
            }
            centerPt.X = 0.5 * (box[0] + box[3]);
            centerPt.Y = 0.5 * (box[1] + box[4]);
            centerPt.Z = 0.5 * (box[2] + box[5]);

            disPt.X = 0.5 * (box[3] - box[0]);
            disPt.Y = 0.5 * (box[4] - box[1]);
            disPt.Z = 0.5 * (box[5] - box[2]);
        }