/// <summary>
        /// Updates template based on properties in the joint
        /// </summary>
        /// <param name="joint"></param>
        public void UpdateTemplate(Joint joint)
        {
            //1.Create list with only (WELD)workshop operations
            List <CutBeamByBeamData> cut = new List <CutBeamByBeamData>();

            foreach (var c in connectionTemplate.Properties.Items)
            {
                if (c.Value.GetType() == typeof(CutBeamByBeamData))
                {
                    CutBeamByBeamData cutBeamByBeamData = (c.Value as CutBeamByBeamData);
                    if (cutBeamByBeamData.FlangesWeld != null)
                    {
                        cut.Add(cutBeamByBeamData);
                    }
                }
            }

            //make all updates relevant to the template here.
            foreach (ConnectingMember con in joint.attachedMembers.OfType <ConnectingMember>())
            {
                foreach (CutBeamByBeamData c in cut)
                {
                    string modifiedObject = c.ModifiedObjectPath;
                    string modifiedId     = modifiedObject.Remove(0, 18).Remove(1, 1);
                    int    modId          = Convert.ToInt32(modifiedId);

                    if (con.ideaOperationID == modId)
                    {
                        c.FlangesWeld.Size = (con.flangeWeld.size) / 1000; //mm to m
                        c.Weld.Size        = (con.webWeld.size) / 1000;    //mm to m
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Map the weld IDs and operation Ids corresponding to ids used by Idea
        /// </summary>
        public void MapWeldsIdsAndOperationIds()
        {
            // no direct relation between weld ID and operation is present.
            // therefore we will derive this relation by specificating of unique sizes for welds
            // as adjustment of the template
            //steps:
            // 0 temporary store welds sizes
            // 1 Set unique welds sizes
            // 2 Analyse
            // 3 match weld and operation
            // 4 reset weld sizes

            // 0+1 temporary store welds sizes and set unique weld sizes

            //4.Modify template set unique weldsizes
            //4.1.in cornerjoints there are weldless workshop operations
            List <CutBeamByBeamData> cut = new List <CutBeamByBeamData>();
            ConnectionTemplate       connectionTemplate1 = this.connectionTemplateGenerator.connectionTemplate;

            foreach (var c in connectionTemplate1.Properties.Items)
            {
                if (c.Value.GetType() == typeof(CutBeamByBeamData))
                {
                    CutBeamByBeamData cutBeamByBeamData = (c.Value as CutBeamByBeamData);
                    if (cutBeamByBeamData.FlangesWeld != null)
                    {
                        cut.Add(cutBeamByBeamData);
                    }
                }
            }

            //4.2
            double flangesize = 0.001; //flange odd
            double websize    = 0.002; //web even
            List <ConnectingMember> conlist2 = joint.attachedMembers.OfType <ConnectingMember>().ToList();

            foreach (ConnectingMember con in conlist2)
            {
                foreach (CutBeamByBeamData c in cut)
                {
                    string modifiedObject = c.ModifiedObjectPath;
                    string modifiedId     = modifiedObject.Remove(0, 18).Remove(1, 1);
                    int    modId          = Convert.ToInt32(modifiedId);

                    if (con.ideaOperationID == modId)
                    {
                        if (con.flangeWeld.weldType == Weld.WeldType.Fillet)
                        {
                            c.FlangesWeld.WeldType = WeldTypeCode.Fillet;
                            c.Weld.WeldType        = WeldTypeCode.Fillet;
                        }
                        else
                        {
                            c.FlangesWeld.WeldType = WeldTypeCode.DoubleFillet;
                            c.Weld.WeldType        = WeldTypeCode.DoubleFillet;
                        }
                        c.FlangesWeld.Size  = flangesize;        //m
                        con.flangeWeld.size = flangesize * 1000; //m to mm
                        c.Weld.Size         = websize;           //m
                        con.webWeld.size    = websize * 1000;    //m to mm
                    }
                }
                flangesize = flangesize + 0.002; //flange odd
                websize    = websize + 0.002;    //web evem
            }



            // 2 run analysis
            this.RunAnalysis();
            //8. get connection data
            IdeaRS.OpenModel.Connection.ConnectionData connectionData = this.GetConnectionData();


            // 3 match weld and operaton:
            foreach (IdeaRS.OpenModel.Connection.WeldData weldData in connectionData.Welds)
            {
                foreach (ConnectingMember con in this.joint.attachedMembers.OfType <ConnectingMember>().ToList())
                {
                    if (weldData.Thickness == (con.flangeWeld.size) / 1000)//compare m with mm
                    {
                        con.flangeWeld.Ids.Add(weldData.Id);
                    }
                    else
                    {
                        if (weldData.Thickness == (con.webWeld.size) / 1000)//compare m with mm
                        {
                            con.webWeld.Ids.Add(weldData.Id);
                        }
                    }
                }
            }

            // 5 reset original weldsizes
            double startsize = this.joint.project.minthroat;

            foreach (ConnectingMember con in this.joint.attachedMembers.OfType <ConnectingMember>().ToList())
            {
                con.flangeWeld.size = startsize;
                con.webWeld.size    = startsize;
            }
            this.connectionTemplateGenerator.UpdateTemplate(joint);
        }