Exemple #1
0
        public EdmCreateAssmbile(EDMInfo edmInfo, WorkModel work, WorkpieceModel workpiece) : base(edmInfo.MoldInfo, edmInfo.UserModel)
        {
            AbstractAssmbileModel edm = new EDMModel(edmInfo);

            edm.SetParentModel(work);
            workpiece.SetParentModel(edm);
            models.Add(work);
            models.Add(edm);
            models.Add(workpiece);
            this.edmModel = edm;
        }
        private List <string> CreateNewWork1(NXOpen.Assemblies.Component ct, WorkpieceModel workpiece, Matrix4 mat, UserModel user)
        {
            List <string> err      = new List <string>();
            MoldInfo      moldInfo = workpiece.Info.MoldInfo;
            int           num      = asmColl.GetWorkCollection(moldInfo).Work.Count;
            WorkInfo      workInfo = new WorkInfo(workpiece.Info.MoldInfo, user, num + 1, mat);
            string        workName = workInfo.MoldInfo.MoldNumber + "-" + workInfo.MoldInfo.WorkpieceNumber + "-" + "WORK" + workInfo.WorkNumber.ToString();
            EDMModel      edm      = GetEdm(ct);

            if (edm == null)
            {
                err.Add("获取EDM错误");
                return(err);
            }
            NXOpen.Assemblies.Component comp = AssmbliesUtils.MoveCompCopyPart(ct.Parent.Parent, new Vector3d(0, 0, 0), mat);
            AssmbliesUtils.MakeUnique(comp, edm.WorkpieceDirectoryPath + workName + ".prt");
            workInfo.SetAttribute(comp.Prototype as Part);
            WorkModel wm = new WorkModel(comp.Prototype as Part);

            if (wm != null)
            {
                wm.SaveCsys(workPart);
            }
            if (!edm.Info.MoldInfo.Equals(workInfo.MoldInfo))
            {
                EDMInfo edmInfo = new EDMInfo(workInfo.MoldInfo, workInfo.UserModel);
                string  edmName = edmInfo.MoldInfo.MoldNumber + "-" + edmInfo.MoldInfo.WorkpieceNumber + "-" + "EDM";
                foreach (NXOpen.Assemblies.Component cp in comp.GetChildren())
                {
                    if (ParentAssmblieInfo.IsEDM(cp))
                    {
                        AssmbliesUtils.MakeUnique(cp, edm.WorkpieceDirectoryPath + edmName + ".prt");
                        edmInfo.SetAttribute(cp.Prototype as Part);
                        foreach (NXOpen.Assemblies.Component co in cp.GetChildren())
                        {
                            if (!(co.Prototype as Part).Equals(workpiece.PartTag))
                            {
                                AssmbliesUtils.DeleteComponent(co);
                            }
                        }
                    }
                }
            }
            return(err);
        }
        /// <summary>
        /// 创建Work
        /// </summary>
        /// <param name="user"></param>
        /// <param name="workpieceCt"></param>
        /// <returns></returns>
        public List <string> CreateWork(UserModel user, NXOpen.Assemblies.Component workpieceCt, Matrix4 mat)
        {
            List <string>  err            = new List <string>();
            WorkpieceModel workpieceModel = new WorkpieceModel(workpieceCt.Prototype as Part);
            WorkInfo       workInfo       = work.Info.Clone() as WorkInfo;
            WorkCollection workColl       = new WorkCollection(workpieceModel.Info.MoldInfo);
            int            workNum        = 1;

            if (workColl.Work.Count > 0)
            {
                workNum = workColl.Work[workColl.Work.Count - 1].Info.WorkNumber + 1;
            }
            workInfo.WorkNumber = workNum;
            workInfo.UserModel  = user;
            workInfo.Matr       = mat;
            workInfo.MatrInfo   = new Matrix4Info(mat);
            EDMModel edmModel;
            bool     isOther = false;

            if (workpieceModel.Info.MoldInfo.Equals(work.Info.MoldInfo))
            {
                edmModel = GetEDMModel();
            }
            else
            {
                workInfo.MoldInfo = workpieceModel.Info.MoldInfo;
                EDMInfo info = new EDMInfo(workpieceModel.Info.MoldInfo, user);
                edmModel = new EDMModel(info);
                isOther  = true;
            }
            WorkCreateAssmbile create = new WorkCreateAssmbile(workInfo, edmModel, asm);

            err.AddRange(create.CreatePart(work.WorkpieceDirectoryPath));
            err.AddRange(create.LoadAssmbile());
            if (err.Count == 0)
            {
                create.Work.SaveCsys(asm.PartTag);
            }
            if (isOther)
            {
                err.AddRange(LoadWorkpiece(edmModel.PartTag, workpieceCt));
            }
            return(err);
        }
        /// <summary>
        /// 拷贝不用件号的work
        /// </summary>
        /// <param name="user"></param>
        /// <param name="workpieceName"></param>
        /// <returns></returns>
        public List <string> CopOtherWork(UserModel user, string workpieceName)
        {
            List <string> err = new List <string>();

            NXOpen.Assemblies.Component ct = GetWorkpieceModelForName(workpieceName);
            if (ct == null)
            {
                err.Add("无法找到工件!");
            }
            else
            {
                WorkpieceModel model    = new WorkpieceModel(ct.Prototype as Part);
                WorkInfo       workInfo = work.Info.Clone() as WorkInfo;
                WorkCollection workColl = new WorkCollection(model.Info.MoldInfo);
                int            workNum  = workColl.Work.Count + 1;
                workInfo.WorkNumber = workNum;
                workInfo.UserModel  = user;
                workInfo.MoldInfo   = model.Info.MoldInfo;
                EDMInfo  edmInfo  = new EDMInfo(model.Info.MoldInfo, user);
                EDMModel edmModel = new EDMModel(edmInfo);
                GetEDMName(ref edmModel);
                WorkCreateAssmbile create = new WorkCreateAssmbile(workInfo, edmModel, asm);
                err.AddRange(create.CreatePart(work.WorkpieceDirectoryPath));
                err.AddRange(create.LoadAssmbile());
                if (err.Count == 0)
                {
                    create.Work.SaveCsys(asm.PartTag);
                }
                foreach (NXOpen.Assemblies.Component elect in GetElectrodeComponent())
                {
                    err.AddRange(LoadEle(elect, create.Work.PartTag));
                }
                err.AddRange(LoadWorkpiece(edmModel.PartTag, ct));
            }
            return(err);
        }
        /// <summary>
        /// 复制work
        /// </summary>
        /// <param name="ct"></param>
        /// <param name="work"></param>
        /// <param name="workpieceNumber"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        private List <string> CopyWork(NXOpen.Assemblies.Component ct, WorkModel work, string workpieceNumber, UserModel user)
        {
            List <string> err = new List <string>();
            Matrix4       mat = new Matrix4();

            mat.Identity();
            MoldInfo mold = work.Info.MoldInfo.Clone() as MoldInfo;

            NXOpen.Assemblies.Component moveCt = null;
            try
            {
                moveCt = AssmbliesUtils.MoveCompCopyPart(ct, new Vector3d(), mat);
            }
            catch (NXException ex)
            {
                err.Add("无法移动工件!" + ex.Message);
                return(err);
            }
            mold.WorkpieceNumber = workpieceNumber;
            string name = work.WorkpieceDirectoryPath + mold.MoldNumber + "-" + mold.WorkpieceNumber + "-";

            if (moveCt != null)
            {
                foreach (NXOpen.Assemblies.Component com in moveCt.GetChildren())
                {
                    if (ParentAssmblieInfo.IsParent(com))
                    {
                        ParentAssmblieInfo info1 = ParentAssmblieInfo.GetAttribute(com);
                        if (info1.Type == PartType.EDM)
                        {
                            string edmName = name + "EDM";
                            if (File.Exists(edmName + ".prt"))
                            {
                                edmName = edmName + "5";
                            }
                            EDMInfo edm = new EDMInfo(mold, user);
                            try
                            {
                                NXObject make = AssmbliesUtils.MakeUnique(com, edmName + ".prt");
                                edm.SetAttribute(com.Prototype as Part);
                                break;
                            }
                            catch (NXException ex)
                            {
                                err.Add(name + "EDM.prt" + ex.Message + "无法创建唯一");
                            }
                        }
                    }
                }
                try
                {
                    NXObject make1 = AssmbliesUtils.MakeUnique(moveCt, name + "WORK" + work.Info.WorkNumber.ToString() + ".prt");
                    WorkInfo wk    = new WorkInfo(mold, user, work.Info.WorkNumber, work.Info.Matr);
                    wk.SetAttribute(moveCt.Prototype as Part);
                }
                catch (NXException ex)
                {
                    err.Add(name + "WORK" + work.Info.WorkNumber.ToString() + ".prt" + ex.Message + "无法创建唯一");
                }
            }

            return(err);
        }