/// <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 } } } }
/// <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); }