Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 56 additions & 7 deletions Robot_Adapter/CRUD/Create/Elements/Bars.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,66 @@ private bool CreateCollection(IEnumerable<Bar> bhomBars)
int barNum = 0;
Dictionary<int, HashSet<string>> barTags = GetTypeTags(typeof(Bar));

// First pass: handle existing bars with FramingElementDesignProperties
List<Bar> existingBarsWithProperties = new List<Bar>();
foreach (Bar bhomBar in bars)
{
if (!CheckInputObjectAndExtractAdapterIdInt(bhomBar, out barNum, EventType.Error))
continue;

if (barServer.Exist(barNum) > 0)
{
IFragment designFragment;
if (bhomBar.Fragments.TryGetValue(typeof(FramingElementDesignProperties), out designFragment))
{
FramingElementDesignProperties framEleDesProps = designFragment as FramingElementDesignProperties;
if (framEleDesProps != null)
{
existingBarsWithProperties.Add(bhomBar);
}
}
}
}

// Process existing bars with properties separately to avoid cache conflicts
foreach (Bar bhomBar in existingBarsWithProperties)
{
if (!CheckInputObjectAndExtractAdapterIdInt(bhomBar, out barNum, EventType.Error))
continue;

RobotBar existingBar = barServer.Get(barNum) as RobotBar;
if (existingBar != null)
{
IFragment designFragment;
if (bhomBar.Fragments.TryGetValue(typeof(FramingElementDesignProperties), out designFragment))
{
FramingElementDesignProperties framEleDesProps = designFragment as FramingElementDesignProperties;
if (framEleDesProps != null)
{
// Ensure the properties definition exists in Robot
if (m_RobotApplication.Project.Structure.Labels.Exist(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name) == 0)
{
Create(framEleDesProps);
}
// Assign the properties to the bar
existingBar.SetLabel(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name);
}
}
}
}

// Second pass: handle new bars through cache system
List<Bar> nonCacheBars = new List<Bar>();
foreach (Bar bhomBar in bars)
{
//Check bar itself is not null and correctly set up and extract ID information
if (!CheckInputObjectAndExtractAdapterIdInt(bhomBar, out barNum, EventType.Error))
continue;

// Skip bars that already exist (already processed above)
if (barServer.Exist(barNum) > 0)
continue;

int stNodeId, endNodeId;

//Check nodes are not null and correctly set up and extract id information
Expand Down Expand Up @@ -122,16 +175,12 @@ private bool CreateCollection(IEnumerable<Bar> bhomBars)
FramingElementDesignProperties framEleDesProps = designFragment as FramingElementDesignProperties;
if (framEleDesProps != null)
{
if (m_RobotApplication.Project.Structure.Labels.Exist(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name) != -1)
if (m_RobotApplication.Project.Structure.Labels.Exist(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name) == 0)
{
Create(framEleDesProps);
}
else
{
List<FramingElementDesignProperties> framEleDesPropsList = new List<FramingElementDesignProperties>();
framEleDesPropsList.Add(framEleDesProps);
Update(framEleDesPropsList);
}
// If the FramingElementDesignProperties already exists, just assign it to the bar
// No need to update the properties themselves when they're attached as fragments
rcache.SetBarLabel(barNum, IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,52 +42,8 @@ private bool Create(FramingElementDesignProperties framEleDesProps) //TODO: move
IRobotLabelServer labelServer = m_RobotApplication.Project.Structure.Labels;
IRobotLabel label = labelServer.CreateLike(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name, labelServer.GetDefault(IRobotLabelType.I_LT_MEMBER_TYPE));

IRDimMembDef memberDef = label.Data;

if (framEleDesProps.MemberLengthYIsRelative)
memberDef.SetLengthYZUV(IRDimMembDefLengthDataType.I_DMDLDT_LENGTH_Y, -framEleDesProps.MemberLengthY);
else
memberDef.SetLengthYZUV(IRDimMembDefLengthDataType.I_DMDLDT_LENGTH_Y, framEleDesProps.MemberLengthY);

if (framEleDesProps.MemberLengthZIsRelative)
memberDef.SetLengthYZUV(IRDimMembDefLengthDataType.I_DMDLDT_LENGTH_Z, -framEleDesProps.MemberLengthZ);
else
memberDef.SetLengthYZUV(IRDimMembDefLengthDataType.I_DMDLDT_LENGTH_Z, framEleDesProps.MemberLengthZ);


string steelMembersCodeType = m_RobotApplication.Project.Preferences.GetActiveCode(IRobotCodeType.I_CT_STEEL_STRUCTURES);

if (steelMembersCodeType == BHE.Query.GetStringFromEnum(DesignCode_Steel.BS_EN_1993_1_2005_NA_2008_A1_2014))
{
IRDimMembParamsE32 memberDesignParams_EC3 = memberDef.CodeParams;
memberDesignParams_EC3.BuckLengthCoeffY = framEleDesProps.EulerBucklingLengthCoefficientY;
memberDesignParams_EC3.BuckLengthCoeffZ = framEleDesProps.EulerBucklingLengthCoefficientZ;
memberDef.CodeParams = memberDesignParams_EC3;
}

if (steelMembersCodeType == BHE.Query.GetStringFromEnum(DesignCode_Steel.BS5950))
{
IRDimMembParamsBS59 memberDesignParams_BS5950 = memberDef.CodeParams;
memberDesignParams_BS5950.BuckLengthCoeffY = framEleDesProps.EulerBucklingLengthCoefficientY;
memberDesignParams_BS5950.BuckLengthCoeffZ = framEleDesProps.EulerBucklingLengthCoefficientZ;
memberDef.CodeParams = memberDesignParams_BS5950;
}

if (steelMembersCodeType == BHE.Query.GetStringFromEnum(DesignCode_Steel.BS5950_2000))
{
IRDimMembParamsBS59_2000 memberDesignParams_BS5950_2000 = memberDef.CodeParams;
memberDesignParams_BS5950_2000.BuckLengthCoeffY = framEleDesProps.EulerBucklingLengthCoefficientY;
memberDesignParams_BS5950_2000.BuckLengthCoeffZ = framEleDesProps.EulerBucklingLengthCoefficientZ;
memberDef.CodeParams = memberDesignParams_BS5950_2000;
}

if (steelMembersCodeType == BHE.Query.GetStringFromEnum(DesignCode_Steel.ANSI_AISC_360_10))
{
IRDimMembParamsANS memberDesignParams_AISC_360_10 = memberDef.CodeParams;
memberDesignParams_AISC_360_10.BuckLenghtCoeffY = framEleDesProps.EulerBucklingLengthCoefficientY;
memberDesignParams_AISC_360_10.BuckLenghtCoeffZ = framEleDesProps.EulerBucklingLengthCoefficientZ;
memberDef.CodeParams = memberDesignParams_AISC_360_10;
}
// Use the ToRobot method with the configured design code
Convert.ToRobot(label, framEleDesProps, RobotConfig.DatabaseSettings.SteelDesignCode);

labelServer.Store(label);

Expand All @@ -109,6 +65,9 @@ private bool CreateCollection(IEnumerable<FramingElementDesignProperties> framEl

IRobotLabel label = labelServer.CreateLike(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name, labelServer.GetDefault(IRobotLabelType.I_LT_MEMBER_TYPE));

// Use the ToRobot method with the configured design code
Convert.ToRobot(label, framEleDesProps, RobotConfig.DatabaseSettings.SteelDesignCode);

labelServer.Store(label);
}
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,45 @@ private List<FramingElementDesignProperties> ReadFramingElementDesignProperties(
IRDimMembParamsE32 memberDesignParams_EC3 = memberDef.CodeParams;
bhomDesignProps.EulerBucklingLengthCoefficientY = memberDesignParams_EC3.BuckLengthCoeffY;
bhomDesignProps.EulerBucklingLengthCoefficientZ = memberDesignParams_EC3.BuckLengthCoeffZ;

// Read lateral torsional buckling parameters
LateralTorsionalBucklingParameters ltbParams = new LateralTorsionalBucklingParameters();
ltbParams.LateralBucklingEnabled = memberDesignParams_EC3.LateralBuckling;

if (ltbParams.LateralBucklingEnabled)
{
ltbParams.LoadLevelUpperFlangeValue = memberDesignParams_EC3.LatCoeffUpperFlangeValue;
ltbParams.LoadLevelLowerFlangeValue = memberDesignParams_EC3.LatCoeffLowerFlangeValue;
ltbParams.LoadLevelUpperFlangeAuto = memberDesignParams_EC3.LatCoeffUpperFlangeValue == 0;
ltbParams.LoadLevelLowerFlangeAuto = memberDesignParams_EC3.LatCoeffLowerFlangeValue == 0;
ltbParams.LambdaLT0 = memberDesignParams_EC3.LamLT0;
ltbParams.Beta = memberDesignParams_EC3.Beta;
ltbParams.Kfl = memberDesignParams_EC3.Kfl;

IRDimLatBuckMethodTypeE32 lateralBucklingMethodType = memberDesignParams_EC3.LatBuckMethodType;
// Convert enum to int - values will be preserved
ltbParams.LateralBucklingMethodType = (int)lateralBucklingMethodType;
}

bhomDesignProps.LateralTorsionalBuckling = ltbParams;

// Read service limit state parameters
ServiceLimitStateParameters slsParams = new ServiceLimitStateParameters();
double deflectionLimit_relativeY = memberDesignParams_EC3.RelLimitDeflUy;
double deflectionLimit_relativeZ = memberDesignParams_EC3.RelLimitdeflUz;

// Check if deflection limits are set (non-zero values indicate they are configured)
if (deflectionLimit_relativeY > 0 || deflectionLimit_relativeZ > 0)
{
slsParams.DeflectionLimitEnabled = true;
slsParams.RelativeDeflectionLimitY = deflectionLimit_relativeY;
slsParams.RelativeDeflectionLimitZ = deflectionLimit_relativeZ;
slsParams.UseRelativeLimitY = true;
slsParams.UseRelativeLimitZ = true;
}

bhomDesignProps.ServiceLimitState = slsParams;

//RobotEurocodeSteelDesignFactors mEuroCodeDesignFactors = rMemberType.Data;
bool angle_conn = memberDesignParams_EC3.AngleConn;
double beta = memberDesignParams_EC3.Beta;
Expand All @@ -94,7 +133,7 @@ private List<FramingElementDesignProperties> ReadFramingElementDesignProperties(
bool isHotRolledPipe = memberDesignParams_EC3.HotRolledPipes;
double kfi = memberDesignParams_EC3.Kfl;
double lambda_LT0 = memberDesignParams_EC3.LamLT0;
IRDimLatBuckMethodTypeE32 lateralBucklingMethodType = memberDesignParams_EC3.LatBuckMethodType;
IRDimLatBuckMethodTypeE32 lateralBucklingMethodType2 = memberDesignParams_EC3.LatBuckMethodType;
IRDimLatBuckCoeffDiagramE32 lateralBucklingCoefficientDiagram_LowerFlange = memberDesignParams_EC3.LatCoeffLowerFlange;
IRDimLatBuckCoeffDiagramE32 lateralBucklingCoefficientDiagram_UpperFlange = memberDesignParams_EC3.LatCoeffUpperFlange;
double lateralBucklingCoefficient_LowerFlange = memberDesignParams_EC3.LatCoeffLowerFlangeValue;
Expand All @@ -107,8 +146,7 @@ private List<FramingElementDesignProperties> ReadFramingElementDesignProperties(
double materialCoefficient_Gamma0 = memberDesignParams_EC3.MaterCoeffGamma0;
double materialCoefficient_Gamma1 = memberDesignParams_EC3.MaterCoeffGamma1;
double materialCoefficient_Gamma2 = memberDesignParams_EC3.MaterCoeffGamma2;
double deflectionLimit_relativeY = memberDesignParams_EC3.RelLimitDeflUy;
double deflectionLimit_relativeZ = memberDesignParams_EC3.RelLimitdeflUz;
// Deflection limits already read above for service limit state parameters
bool isSimplifiedParameters = memberDesignParams_EC3.Simplified;
double tensileAreaNetGrossRatio = memberDesignParams_EC3.TensAreaNetGros;
IRDimThinWalledE32 thinWalledProperties = memberDesignParams_EC3.ThinWalled;
Expand All @@ -124,6 +162,18 @@ private List<FramingElementDesignProperties> ReadFramingElementDesignProperties(
IRDimMembParamsBS59 memberDesignParams_BS5950 = memberDef.CodeParams;
bhomDesignProps.EulerBucklingLengthCoefficientY = memberDesignParams_BS5950.BuckLengthCoeffY;
bhomDesignProps.EulerBucklingLengthCoefficientZ = memberDesignParams_BS5950.BuckLengthCoeffZ;

// Read lateral torsional buckling parameters
LateralTorsionalBucklingParameters ltbParams = new LateralTorsionalBucklingParameters();
// Note: BS5950 interface may not have direct LateralBuckling property
// Check for alternative properties or set default values
ltbParams.LateralBucklingEnabled = false; // Default value
bhomDesignProps.LateralTorsionalBuckling = ltbParams;

// Read service limit state parameters
ServiceLimitStateParameters slsParams = new ServiceLimitStateParameters();
// Note: BS5950 deflection parameters would be added here if available in Robot API
bhomDesignProps.ServiceLimitState = slsParams;
}


Expand All @@ -132,6 +182,37 @@ private List<FramingElementDesignProperties> ReadFramingElementDesignProperties(
IRDimMembParamsBS59_2000 memberDesignParams_BS5950_2000 = memberDef.CodeParams;
bhomDesignProps.EulerBucklingLengthCoefficientY = memberDesignParams_BS5950_2000.BuckLengthCoeffY;
bhomDesignProps.EulerBucklingLengthCoefficientZ = memberDesignParams_BS5950_2000.BuckLengthCoeffZ;

// Read lateral torsional buckling parameters
LateralTorsionalBucklingParameters ltbParams = new LateralTorsionalBucklingParameters();
// Note: BS5950_2000 interface may not have direct LateralBuckling property
// Check for alternative properties or set default values
ltbParams.LateralBucklingEnabled = false; // Default value
bhomDesignProps.LateralTorsionalBuckling = ltbParams;

// Read service limit state parameters
ServiceLimitStateParameters slsParams = new ServiceLimitStateParameters();
// Note: BS5950_2000 deflection parameters would be added here if available in Robot API
bhomDesignProps.ServiceLimitState = slsParams;
}

if (steelMembersCodeType == BHE.Query.GetStringFromEnum(DesignCode_Steel.ANSI_AISC_360_10))
{
IRDimMembParamsANS memberDesignParams_AISC_360_10 = memberDef.CodeParams;
bhomDesignProps.EulerBucklingLengthCoefficientY = memberDesignParams_AISC_360_10.BuckLenghtCoeffY;
bhomDesignProps.EulerBucklingLengthCoefficientZ = memberDesignParams_AISC_360_10.BuckLenghtCoeffZ;

// Read lateral torsional buckling parameters
LateralTorsionalBucklingParameters ltbParams = new LateralTorsionalBucklingParameters();
// Note: ANSI_AISC_360_10 interface may not have direct LateralBuckling property
// Check for alternative properties or set default values
ltbParams.LateralBucklingEnabled = false; // Default value
bhomDesignProps.LateralTorsionalBuckling = ltbParams;

// Read service limit state parameters
ServiceLimitStateParameters slsParams = new ServiceLimitStateParameters();
// Note: ANSI_AISC_360_10 deflection parameters would be added here if available in Robot API
bhomDesignProps.ServiceLimitState = slsParams;
}


Expand Down
2 changes: 1 addition & 1 deletion Robot_Adapter/CRUD/Update/Elements/Bars.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ protected bool Update(IEnumerable<Bar> bars)
FramingElementDesignProperties framEleDesProps = designFragment as FramingElementDesignProperties;
if (framEleDesProps != null)
{
if (m_RobotApplication.Project.Structure.Labels.Exist(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name) != -1)
if (m_RobotApplication.Project.Structure.Labels.Exist(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name) == 0)
Create(framEleDesProps);
robotBar.SetLabel(IRobotLabelType.I_LT_MEMBER_TYPE, framEleDesProps.Name);
}
Expand Down
Loading