private void Stream( ArrayList data, AreaLoad areaload ) { data.Add( new Snoop.Data.ClassSeparator( typeof( AreaLoad ) ) ); data.Add( new Snoop.Data.Xyz( "Force 1", areaload.ForceVector1 ) ); data.Add( new Snoop.Data.Xyz( "Force 2", areaload.ForceVector2 ) ); data.Add( new Snoop.Data.Xyz( "Force 3", areaload.ForceVector3 ) ); data.Add( new Snoop.Data.CategorySeparator( "Loops" ) ); data.Add( new Snoop.Data.Int( "Number of loops", areaload.GetLoops().Count ) ); int i = 0, j = 0; foreach( var loop in areaload.GetLoops() ) { foreach( var curve in loop ) { data.Add( new Snoop.Data.Object( string.Format( "Loop [{0:d}], Curve [{1:d}]", i, j ), curve ) ); j++; } i++; } data.Add( new Snoop.Data.CategorySeparator( "Reference Points" ) ); data.Add( new Snoop.Data.Int( "Number of reference points", areaload.NumRefPoints ) ); for( i = 0; i < areaload.NumRefPoints; i++ ) { data.Add( new Snoop.Data.Xyz( string.Format( "Reference PT [{0:d}]", i ), areaload.GetRefPoint( i ) ) ); } }
private void Stream( ArrayList data, AreaLoad areaload ) { data.Add( new Snoop.Data.ClassSeparator( typeof( AreaLoad ) ) ); data.Add( new Snoop.Data.Xyz( "Force 1", areaload.ForceVector1 ) ); data.Add( new Snoop.Data.Xyz( "Force 2", areaload.ForceVector2 ) ); data.Add( new Snoop.Data.Xyz( "Force 3", areaload.ForceVector3 ) ); data.Add( new Snoop.Data.CategorySeparator( "Loops" ) ); data.Add( new Snoop.Data.Int( "Number of loops", areaload.GetLoops().Count ) ); for( int i = 0; i < areaload.GetLoops().Count; i++ ) { CurveLoop curveloop = areaload.GetLoops()[i] as CurveLoop; CurveLoopIterator iter = curveloop.GetCurveLoopIterator(); iter.Reset(); int j = 0; while( iter.MoveNext() ) { data.Add( new Snoop.Data.Object( string.Format( "Loop [{0:d}], Curve [{1:d}]", i, j ), ( iter.Current as Curve ) ) ); j++; } } data.Add( new Snoop.Data.CategorySeparator( "Reference Points" ) ); data.Add( new Snoop.Data.Int( "Number of reference points", areaload.NumRefPoints ) ); for( int i = 0; i < areaload.NumRefPoints; i++ ) { data.Add( new Snoop.Data.Xyz( string.Format( "Reference PT [{0:d}]", i ), areaload.GetRefPoint( i ) ) ); } }
public static List <SpeckleObject> ToSpeckle(this AreaLoad myAreaLoad) { var polylines = new List <double[]>(); var loops = myAreaLoad.GetLoops(); foreach (var loop in loops) { var coor = new List <double>(); foreach (var curve in loop) { var points = curve.Tessellate(); foreach (var p in points.Skip(1)) { coor.Add(p.X / Scale); coor.Add(p.Y / Scale); coor.Add(p.Z / Scale); } } polylines.Add(coor.ToArray()); // Only get outer loop break; } var forces = new StructuralVectorThree(new double[3]); forces.Value[0] = myAreaLoad.ForceVector1.X; forces.Value[1] = myAreaLoad.ForceVector1.Y; forces.Value[2] = myAreaLoad.ForceVector1.Z; if (myAreaLoad.OrientTo == LoadOrientTo.HostLocalCoordinateSystem) { var hostTransform = myAreaLoad.HostElement.GetLocalCoordinateSystem(); var b0 = hostTransform.get_Basis(0); var b1 = hostTransform.get_Basis(1); var b2 = hostTransform.get_Basis(2); var fx = forces.Value[0] * b0.X + forces.Value[1] * b1.X + forces.Value[2] * b2.X; var fy = forces.Value[0] * b0.Y + forces.Value[1] * b1.Y + forces.Value[2] * b2.Y; var fz = forces.Value[0] * b0.Z + forces.Value[1] * b1.Z + forces.Value[2] * b2.Z; forces = new StructuralVectorThree(new double[] { fx, fy, fz }); } else if (myAreaLoad.OrientTo == LoadOrientTo.WorkPlane) { var workPlane = ((SketchPlane)Doc.GetElement(myAreaLoad.WorkPlaneId)).GetPlane(); var b0 = workPlane.XVec; var b1 = workPlane.YVec; var b2 = workPlane.Normal; var fx = forces.Value[0] * b0.X + forces.Value[1] * b1.X + forces.Value[2] * b2.X; var fy = forces.Value[0] * b0.Y + forces.Value[1] * b1.Y + forces.Value[2] * b2.Y; var fz = forces.Value[0] * b0.Z + forces.Value[1] * b1.Z + forces.Value[2] * b2.Z; forces = new StructuralVectorThree(new double[] { fx, fy, fz }); } var myLoadCase = new StructuralLoadCase(); myLoadCase.Name = myAreaLoad.LoadCaseName; myLoadCase.ApplicationId = myAreaLoad.LoadCase.UniqueId; switch (myAreaLoad.LoadCategoryName) { case "Dead Loads": myLoadCase.CaseType = StructuralLoadCaseType.Dead; break; case "Live Loads": myLoadCase.CaseType = StructuralLoadCaseType.Live; break; case "Seismic Loads": myLoadCase.CaseType = StructuralLoadCaseType.Earthquake; break; case "Snow Loads": myLoadCase.CaseType = StructuralLoadCaseType.Snow; break; case "Wind Loads": myLoadCase.CaseType = StructuralLoadCaseType.Wind; break; default: myLoadCase.CaseType = StructuralLoadCaseType.Generic; break; } var myLoads = new List <SpeckleObject>(); var counter = 0; foreach (var vals in polylines) { var myLoad = new Structural2DLoadPanel(); myLoad.Name = myAreaLoad.Name; myLoad.Value = vals.ToList(); myLoad.Loading = forces; myLoad.LoadCaseRef = myLoadCase.ApplicationId; myLoad.Closed = true; myLoad.ApplicationId = myAreaLoad.UniqueId + "_" + (counter++).ToString(); myLoads.Add(myLoad); } return(myLoads.Concat(new List <SpeckleObject>() { myLoadCase }).ToList()); }