public float[,] GetCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, int numPoints) { if (!model.HasResults) return null; /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle float[,] controlPoints = new float[numPoints, 3]; float[] controlPointsX = new float[1]; // requestXCtrlPts(load); for (int i = 0, bufi = 0; i < numPoints; i++) { controlPoints[i, 0] = i / (numPoints - 1f); // Adjust control points if ((bufi < controlPointsX.Length) && (controlPointsX[bufi] <= controlPoints[i, 0])) controlPoints[i, 0] = controlPointsX[bufi++]; controlPoints[i, 1] = 0f; // controlPoints[i, 0] * (fdJ - fdI); controlPoints[i, 2] = 0.0f; } getCurvedAxis(l, ac, component, controlPoints); return controlPoints; }
public float[,] GetCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, int numPoints) { if (!model.HasResults) { return(null); } /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle float[,] controlPoints = new float[numPoints, 3]; float[] controlPointsX = new float[1]; // requestXCtrlPts(load); for (int i = 0, bufi = 0; i < numPoints; i++) { controlPoints[i, 0] = i / (numPoints - 1f); // Adjust control points if ((bufi < controlPointsX.Length) && (controlPointsX[bufi] <= controlPoints[i, 0])) { controlPoints[i, 0] = controlPointsX[bufi++]; } controlPoints[i, 1] = 0f; // controlPoints[i, 0] * (fdJ - fdI); controlPoints[i, 2] = 0.0f; } getCurvedAxis(l, ac, component, controlPoints); return(controlPoints); }
public float[] GetCurvedPoint(LineElement l, AbstractCase ac, DeformationAxis component, float xPos) { if (!model.HasResults) { return(null); } /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle float[,] controlPoints = new float[1, 3]; controlPoints[0, 0] = xPos; controlPoints[0, 1] = 0f; controlPoints[0, 2] = 0.0f; getCurvedAxis(l, ac, component, controlPoints); // Copy to 1-dimensional array float[] ret = new float[3]; for (int i = 0; i < 3; i++) { ret[i] = controlPoints[0, i]; } return(ret); }
private void getCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, float[,] controlPoints) { }
public float[] GetCurvedPoint(AreaElement area, AbstractCase ac, DeformationAxis component, float xPos) { return null; }
public float[,] GetCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, int numPoints) { return null; }
public float[] GetCurvedPoint(AreaElement area, AbstractCase ac, DeformationAxis component, float xPos) { return(null); }
public float[,] GetCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, int numPoints) { return(null); }
private void getCurvedAxis(AreaElement area, AbstractCase ac, DeformationAxis component, float[,] controlPoints) { }
//public Vector3 GetPoint(LineElement l, AbstractCase ac, float xPos, float deformationScale, float paintScaleFactorTranslation) //{ // if (l == null) // { // return Vector3.Empty; // } // Vector3 iPos, jPos; // iPos = new Vector3(model.Results.JointDisplacements[l.I.Id, 0], // model.Results.JointDisplacements[l.I.Id, 1], // model.Results.JointDisplacements[l.I.Id, 2]); // iPos = deformationScale * paintScaleFactorTranslation * iPos + l.I.Position; // jPos = new Vector3(model.Results.JointDisplacements[l.J.Id, 0], // model.Results.JointDisplacements[l.J.Id, 1], // model.Results.JointDisplacements[l.J.Id, 2]); // jPos = deformationScale * paintScaleFactorTranslation * jPos + l.J.Position; // float[,] local2Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local2, xPos); // float[,] local3Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local3, xPos); // Vector3 point = iPos + local2Values[0, 0] * (jPos - iPos) + // local2Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[1] + // local3Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[2]; // return point; //} private void getCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, float[,] controlPoints) { Vector3 vI, vJ, mI, mJ, dI, dJ; vI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 0], model.Results.ElementJointForces[l.Id, 0, 1], model.Results.ElementJointForces[l.Id, 0, 2]); vJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 0], model.Results.ElementJointForces[l.Id, 1, 1], model.Results.ElementJointForces[l.Id, 1, 2]); mI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 3], model.Results.ElementJointForces[l.Id, 0, 4], model.Results.ElementJointForces[l.Id, 0, 5]); mJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 3], model.Results.ElementJointForces[l.Id, 1, 4], model.Results.ElementJointForces[l.Id, 1, 5]); dI = l.I.Position + new Vector3(model.Results.JointDisplacements[l.I.Id, 0], model.Results.JointDisplacements[l.I.Id, 1], model.Results.JointDisplacements[l.I.Id, 2]); dJ = l.J.Position + new Vector3(model.Results.JointDisplacements[l.J.Id, 0], model.Results.JointDisplacements[l.J.Id, 1], model.Results.JointDisplacements[l.J.Id, 2]); // Transform to the line's local coordinate system // From the global system // (WARNING: This is supposed to come in the joint's local coordinate system) vI = toLocal(l, vI); vJ = toLocal(l, vJ); mI = toLocal(l, mI); mJ = toLocal(l, mJ); dI = toLocal(l, dI); dJ = toLocal(l, dJ); float fI = 0f, fJ = 0f, fmI = 0f, fmJ = 0f, fdI = 0f, fdJ = 0f; float EI = ((StraightFrameProps)l.Properties).Section.Material.TypeProperties.E; float lineLength = l.Length; switch (component) { case DeformationAxis.Local2: fI = vI.Y; fmI = -mI.Z; fdI = dI.Y; fJ = vJ.Y; fmJ = -mJ.Z; fdJ = dJ.Y; EI *= ((StraightFrameProps)l.Properties).Section.I33; break; case DeformationAxis.Local3: fI = vI.Z; fmI = mI.Y; fdI = dI.Z; fJ = vJ.Z; fmJ = mJ.Y; fdJ = dJ.Z; EI *= ((StraightFrameProps)l.Properties).Section.I22; break; } addLoadDeflection(ac, l, lineLength, controlPoints, component, 1.0f, EI); addMomentDeflection(fmI, lineLength, controlPoints, EI, -1); addMomentDeflection(fmJ, lineLength, controlPoints, EI, 1); }
private void addLoadDeflection(LineElement line, float lineLength, DirectionalLineLoad load, float[,] controlPoints, DeformationAxis component, float scale, float EI) { if (load == null) return; Vector3 dir = getLocalDir(line, load.Direction); float dirComponent = 0.0f; switch (component) { case DeformationAxis.Local2: dirComponent = dir.Y; break; case DeformationAxis.Local3: dirComponent = dir.Z; break; } if (load is ConcentratedSpanLoad) { if (load.Type == LineLoad.LoadType.Force) addConcentratedForceDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI); else addConcentratedMomentDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI); } else if (load is DistributedSpanLoad) { DistributedSpanLoad dsl = (DistributedSpanLoad)load; float a, b, c; a = dsl.Da * lineLength; b = (dsl.Db - dsl.Da) * lineLength; c = (1.0f - dsl.Db) * lineLength; if (load.Type == LineLoad.LoadType.Force) { addUniformForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI); addTriangularForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI); } else { // TODO: Partial Uniform and Triangular Moments Deflection calculator } } }
private void addLoadDeflection(AbstractCase ac, LineElement line, float lineLength, float[,] controlPoints, DeformationAxis component, float scale, float EI) { if (ac == null) return; if (ac is LoadCombination) { foreach (AbstractCaseFactor acf in ((LoadCombination)ac).Cases) addLoadDeflection(acf.Case, line, lineLength, controlPoints, component, acf.Factor, EI); } else if (ac is AnalysisCase) { if (((AnalysisCase)ac).Properties is StaticCaseProps) { foreach (StaticCaseFactor staticCase in ((StaticCaseProps)((AnalysisCase)ac).Properties).Loads) { if (staticCase.AppliedLoad is LoadCase) { LoadCase lc = staticCase.AppliedLoad as LoadCase; if (line.Loads[lc] != null) { foreach (Load load in line.Loads[lc]) { //addUniformLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI); //addTriangularLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI); if (load is DirectionalLineLoad) addLoadDeflection(line, lineLength, load as DirectionalLineLoad, controlPoints, component, scale, EI); } } if (lc.SelfWeight > 0f) { if (line.Properties is StraightFrameProps) { StraightFrameProps frameProps = line.Properties as StraightFrameProps; selfWeight.La = selfWeight.Lb = frameProps.Section.Area * frameProps.Section.Material.UnitWeight; //addUniformLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI); addLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI); } } } } } } }
public float[] GetCurvedPoint(LineElement l, AbstractCase ac, DeformationAxis component, float xPos) { if (!model.HasResults) return null; /// controlPoints[i, 0]: x position on Beam, controlPoints[i, 1]: 'deflection' for x position, controlPoints[i,2]: deformation angle float[,] controlPoints = new float[1, 3]; controlPoints[0, 0] = xPos; controlPoints[0, 1] = 0f; controlPoints[0, 2] = 0.0f; getCurvedAxis(l, ac, component, controlPoints); // Copy to 1-dimensional array float[] ret = new float[3]; for (int i = 0; i < 3; i++) ret[i] = controlPoints[0, i]; return ret; }
//public Vector3 GetPoint(LineElement l, AbstractCase ac, float xPos, float deformationScale, float paintScaleFactorTranslation) //{ // if (l == null) // { // return Vector3.Empty; // } // Vector3 iPos, jPos; // iPos = new Vector3(model.Results.JointDisplacements[l.I.Id, 0], // model.Results.JointDisplacements[l.I.Id, 1], // model.Results.JointDisplacements[l.I.Id, 2]); // iPos = deformationScale * paintScaleFactorTranslation * iPos + l.I.Position; // jPos = new Vector3(model.Results.JointDisplacements[l.J.Id, 0], // model.Results.JointDisplacements[l.J.Id, 1], // model.Results.JointDisplacements[l.J.Id, 2]); // jPos = deformationScale * paintScaleFactorTranslation * jPos + l.J.Position; // float[,] local2Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local2, xPos); // float[,] local3Values = GetCurvedPoint(l, model.Results.ActiveCase.AbstractCase, Analysis.LineDeformationCalculator.DeformationAxis.Local3, xPos); // Vector3 point = iPos + local2Values[0, 0] * (jPos - iPos) + // local2Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[1] + // local3Values[0, 1] * deformationScale * paintScaleFactorTranslation * l.LocalAxes[2]; // return point; //} private void getCurvedAxis(LineElement l, AbstractCase ac, DeformationAxis component, float[,] controlPoints) { Vector3 vI, vJ, mI, mJ, dI, dJ; vI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 0], model.Results.ElementJointForces[l.Id, 0, 1], model.Results.ElementJointForces[l.Id, 0, 2]); vJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 0], model.Results.ElementJointForces[l.Id, 1, 1], model.Results.ElementJointForces[l.Id, 1, 2]); mI = new Vector3(model.Results.ElementJointForces[l.Id, 0, 3], model.Results.ElementJointForces[l.Id, 0, 4], model.Results.ElementJointForces[l.Id, 0, 5]); mJ = new Vector3(model.Results.ElementJointForces[l.Id, 1, 3], model.Results.ElementJointForces[l.Id, 1, 4], model.Results.ElementJointForces[l.Id, 1, 5]); dI = l.I.Position + new Vector3(model.Results.JointDisplacements[l.I.Id, 0], model.Results.JointDisplacements[l.I.Id, 1], model.Results.JointDisplacements[l.I.Id, 2]); dJ = l.J.Position + new Vector3(model.Results.JointDisplacements[l.J.Id, 0], model.Results.JointDisplacements[l.J.Id, 1], model.Results.JointDisplacements[l.J.Id, 2]); // Transform to the line's local coordinate system // From the global system // (WARNING: This is supposed to come in the joint's local coordinate system) vI = toLocal(l, vI); vJ = toLocal(l, vJ); mI = toLocal(l, mI); mJ = toLocal(l, mJ); dI = toLocal(l, dI); dJ = toLocal(l, dJ); float fI = 0f, fJ = 0f, fmI = 0f, fmJ = 0f, fdI = 0f, fdJ = 0f; float EI = ((StraightFrameProps)l.Properties).Section.Material.TypeProperties.E; float lineLength = l.Length; switch (component) { case DeformationAxis.Local2: fI = vI.Y; fmI = -mI.Z; fdI = dI.Y; fJ = vJ.Y; fmJ = -mJ.Z; fdJ = dJ.Y; EI *= ((StraightFrameProps)l.Properties).Section.I33; break; case DeformationAxis.Local3: fI = vI.Z; fmI = mI.Y; fdI = dI.Z; fJ = vJ.Z; fmJ = mJ.Y; fdJ = dJ.Z; EI *= ((StraightFrameProps)l.Properties).Section.I22; break; } addLoadDeflection(ac, l, lineLength, controlPoints, component, 1.0f, EI); addMomentDeflection(fmI, lineLength, controlPoints, EI, -1); addMomentDeflection(fmJ, lineLength, controlPoints, EI, 1); }
private void addLoadDeflection(LineElement line, float lineLength, DirectionalLineLoad load, float[,] controlPoints, DeformationAxis component, float scale, float EI) { if (load == null) { return; } Vector3 dir = getLocalDir(line, load.Direction); float dirComponent = 0.0f; switch (component) { case DeformationAxis.Local2: dirComponent = dir.Y; break; case DeformationAxis.Local3: dirComponent = dir.Z; break; } if (load is ConcentratedSpanLoad) { if (load.Type == LineLoad.LoadType.Force) { addConcentratedForceDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI); } else { addConcentratedMomentDeflection(line, lineLength, (ConcentratedSpanLoad)load, controlPoints, dirComponent, scale, EI); } } else if (load is DistributedSpanLoad) { DistributedSpanLoad dsl = (DistributedSpanLoad)load; float a, b, c; a = dsl.Da * lineLength; b = (dsl.Db - dsl.Da) * lineLength; c = (1.0f - dsl.Db) * lineLength; if (load.Type == LineLoad.LoadType.Force) { addUniformForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI); addTriangularForceDeflection(line, lineLength, dsl, a, b, c, controlPoints, dirComponent, scale, EI); } else { // TODO: Partial Uniform and Triangular Moments Deflection calculator } } }
private void addLoadDeflection(AbstractCase ac, LineElement line, float lineLength, float[,] controlPoints, DeformationAxis component, float scale, float EI) { if (ac == null) { return; } if (ac is LoadCombination) { foreach (AbstractCaseFactor acf in ((LoadCombination)ac).Cases) { addLoadDeflection(acf.Case, line, lineLength, controlPoints, component, acf.Factor, EI); } } else if (ac is AnalysisCase) { if (((AnalysisCase)ac).Properties is StaticCaseProps) { foreach (StaticCaseFactor staticCase in ((StaticCaseProps)((AnalysisCase)ac).Properties).Loads) { if (staticCase.AppliedLoad is LoadCase) { LoadCase lc = staticCase.AppliedLoad as LoadCase; if (line.Loads[lc] != null) { foreach (Load load in line.Loads[lc]) { //addUniformLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI); //addTriangularLoadDeflection(line, lineLength, load as LineLoad, controlPoints, component, scale, EI); if (load is DirectionalLineLoad) { addLoadDeflection(line, lineLength, load as DirectionalLineLoad, controlPoints, component, scale, EI); } } } if (lc.SelfWeight > 0f) { if (line.Properties is StraightFrameProps) { StraightFrameProps frameProps = line.Properties as StraightFrameProps; selfWeight.La = selfWeight.Lb = frameProps.Section.Area * frameProps.Section.Material.UnitWeight; //addUniformLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI); addLoadDeflection(line, lineLength, selfWeight, controlPoints, component, lc.SelfWeight * scale, EI); } } } } } } }