protected override void SolveInstance(IGH_DataAccess DA) { //---variables--- int surfNo = 0; Vector3d forceVec = new Vector3d(); BrepGeometry brp = new BrepGeometry(); MeshGeometry mesh = new MeshGeometry(); //---input--- if (!DA.GetData(0, ref surfNo)) { return; } if (!DA.GetData(1, ref forceVec)) { return; } if (!DA.GetData(2, ref mesh)) { return; } //---solve--- brp = mesh.GetBrep(); Brep surface = mesh.GetSurfaceAsBrep(surfNo); double area = surface.GetArea(); List <Node> nodes = mesh.GetNodeList(); (List <string> pointLoads, double maxLoad) = FindPointLoads(surfNo, area, forceVec, nodes, brp); // For previewing of loads double refLength = brp.GetRefLength(); List <Line> arrows = DrawLoads(pointLoads, refLength, maxLoad); Color color = Color.FromArgb(135, 206, 255); //---output--- DA.SetDataList(0, pointLoads); DA.SetDataList(1, arrows); DA.SetData(2, color); }
protected override void SolveInstance(IGH_DataAccess DA) { //---variables--- int surfNo = 0; string restrains = "0,0,0"; MeshGeometry mesh = new MeshGeometry(); //---input--- if (!DA.GetData(0, ref surfNo)) { return; } if (!DA.GetData(1, ref mesh)) { return; } BrepGeometry brp = mesh.GetBrep(); List <Node> nodes = mesh.GetNodeList(); //---solve--- List <string> pointsBC = FindBCPoints(surfNo, restrains, nodes); //For previewing of bc double refLength = brp.GetRefLength(); List <Brep> cones = DrawBC(pointsBC, refLength); Color color = Color.FromArgb(0, 100, 255); //---output--- DA.SetDataList(0, pointsBC); DA.SetDataList(1, cones); DA.SetData(2, color); }
public void SetBrep(BrepGeometry _brp) { brp = _brp; }
public (List <string>, double) FindPointLoads(int surfNo, double area, Vector3d forceVec, List <Node> nodes, BrepGeometry brp) { List <string> pointLoads = new List <string>(); Vector3d maxLoads = new Vector3d(0, 0, 0); double maxLoad = 0; List <string> centerPointsString = new List <string>(); List <string> cornerPointsString = new List <string>(); List <string> edgePointsString = new List <string>(); forceVec = forceVec * area; for (int i = 0; i < nodes.Count; i++) { if (nodes[i].GetSurfaceNum().Contains(surfNo)) { nodes[i].SetRemovable(false); if (nodes[i].GetIsMiddle()) { Point3d node = nodes[i].GetCoord(); string pointString = node.X.ToString() + "," + node.Y.ToString() + "," + node.Z.ToString(); centerPointsString.Add(pointString); } else if (nodes[i].GetIsCorner()) { Point3d node = nodes[i].GetCoord(); string pointString = node.X.ToString() + "," + node.Y.ToString() + "," + node.Z.ToString(); cornerPointsString.Add(pointString); } else if (nodes[i].GetIsEdge()) { Point3d node = nodes[i].GetCoord(); string pointString = node.X.ToString() + "," + node.Y.ToString() + "," + node.Z.ToString(); edgePointsString.Add(pointString); } } } double pointsCount = 4 * centerPointsString.Count + cornerPointsString.Count + 2 * edgePointsString.Count; List <string> centerPointLoads = new List <string>(); List <string> cornerPointLoads = new List <string>(); List <string> edgePointLoads = new List <string>(); string centerVector = 4 * (forceVec.X) / pointsCount + "," + 4 * (forceVec.Y) / pointsCount + "," + 4 * (forceVec.Z) / pointsCount; string cornerVector = (forceVec.X) / pointsCount + "," + (forceVec.Y) / pointsCount + "," + (forceVec.Z) / pointsCount; string edgeVector = 2 * (forceVec.X) / pointsCount + "," + 2 * (forceVec.Y) / pointsCount + "," + 2 * (forceVec.Z) / pointsCount; foreach (string s in centerPointsString) { centerPointLoads.Add(s + ";" + centerVector); string[] centerLoads = (centerVector.Split(',')); double loadX = Math.Round(double.Parse(centerLoads[0]), 8); double loadY = Math.Round(double.Parse(centerLoads[1]), 8); double loadZ = Math.Round(double.Parse(centerLoads[2]), 8); Vector3d loads = new Vector3d(loadX, loadY, loadZ); if (loads.Length > maxLoads.Length) { maxLoads = loads; maxLoad = Math.Abs(maxLoads.MaximumCoordinate); } } foreach (string s in cornerPointsString) { cornerPointLoads.Add(s + ";" + cornerVector); } foreach (string s in edgePointsString) { edgePointLoads.Add(s + ";" + edgeVector); } pointLoads.AddRange(centerPointLoads); pointLoads.AddRange(edgePointLoads); pointLoads.AddRange(cornerPointLoads); return(pointLoads, maxLoad); }
protected override void SolveInstance(IGH_DataAccess DA) { //---variables--- MeshGeometry mesh = new MeshGeometry(); GH_Structure <GH_Number> treeStress = new GH_Structure <GH_Number>(); int dir = new int(); double scale = new double(); //---input--- if (!DA.GetData(0, ref mesh)) { return; } if (!DA.GetDataTree(1, out treeStress)) { return; } if (!DA.GetData(2, ref dir)) { return; } if (!DA.GetData(3, ref scale)) { return; } //---setup--- BrepGeometry brp = mesh.GetBrep(); Brep brep = brp.GetBrep(); Point3d centroid = brp.GetCentroid(); double refLength = brp.GetRefLength(); Point3d center = Point3d.Add(centroid, new Point3d(0, -refLength * 6.5, 0)); double angle = 90 * Math.PI / 180; //---solve--- List <Element> elements = mesh.GetElements(); List <Node> nodes = mesh.GetNodeList(); List <Brep> breps = CreateDefBreps(elements, scale, angle, center); //Getting colors for each brep (List <Color> brepColors, List <string> rangeValues) = ColorBreps(elements, breps, dir); //Creating breps stress legend List <Brep> brepRanges = CreateBrepRanges(centroid, refLength, center, angle); //Getting colors stress legend List <Color> colorRange = CreateColorRange(); //Output brep colors legend (List <Plane> planeRanges, double textSize) = CreateTextPlanes(brepRanges, refLength); List <double> textSizeRange = Enumerable.Repeat(textSize, rangeValues.Count).ToList(); //Output text legend size List <Color> textColorRange = Enumerable.Repeat(Color.White, rangeValues.Count).ToList(); // Output text color legend //Createing headline for area var tuple3 = CreateHeadline(centroid, angle, center, refLength); string headText = tuple3.Item1; double headSize = tuple3.Item2; Plane headPlane = tuple3.Item3; Color headColor = tuple3.Item4; //Adding the different text components together to one output. rangeValues.Add(headText); List <string> text = rangeValues; textSizeRange.Add(headSize); List <double> textSizes = textSizeRange; planeRanges.Add(headPlane); List <Plane> textPlanes = planeRanges; textColorRange.Add(headColor); List <Color> textColors = textColorRange; //---output--- DA.SetDataList(0, breps); DA.SetDataList(1, brepColors); DA.SetDataList(2, brepRanges); DA.SetDataList(3, colorRange); DA.SetDataList(4, text); DA.SetDataList(5, textSizes); DA.SetDataList(6, textPlanes); DA.SetDataList(7, textColors); }
protected override void SolveInstance(IGH_DataAccess DA) { //---variables--- MeshGeometry mesh = new MeshGeometry(); GH_Structure <GH_Number> treeDef = new GH_Structure <GH_Number>(); double scale = 1; //---input--- if (!DA.GetData(0, ref mesh)) { return; } if (!DA.GetDataTree(1, out treeDef)) { return; } if (!DA.GetData(2, ref scale)) { return; } //---setup--- List <Brep> breps = new List <Brep>(); BrepGeometry brp = mesh.GetBrep(); Brep brep = brp.GetBrep(); Point3d centroid = brp.GetCentroid(); double refLength = brp.GetRefLength(); double refSize = (double)(refLength / 10); double angle = 270 * Math.PI / 180; Point3d center = Point3d.Add(centroid, new Point3d(0, -refLength * 6.5, 0)); //Center for viewpoint //---solve--- List <Element> elements = mesh.GetElements(); List <Node> nodes = mesh.GetNodeList(); breps = CreateDefBreps(elements, scale, angle, center); //Finding point with max deformation (double defMax, Node nodeMax) = GetMaxDeformation(nodes); Brep sphere = DrawSphere(nodeMax, angle, center, scale, refSize); Color colorSphere = Color.Orange; VolumeMassProperties vmpt = VolumeMassProperties.Compute(sphere); Point3d centroidt = vmpt.Centroid; //Creating text for displaying it for max value var tuple2 = CreateText(defMax, nodeMax, scale, refSize, angle, center); string textDef = tuple2.Item1; double textDefSize = tuple2.Item2; Plane textDefPlane = tuple2.Item3; Color textDefColor = tuple2.Item4; //Createing headline for area var tuple3 = CreateHeadline(centroid, angle, center, refLength); string headText = tuple3.Item1; double headSize = tuple3.Item2; Plane headPlane = tuple3.Item3; Color headColor = tuple3.Item4; //Adding geometry together for output List <Color> brepColors = AssignColors(breps); breps.Add(sphere); List <Brep> geoBreps = breps; brepColors.Add(colorSphere); List <Color> geoColor = brepColors; Curve[] lines = DrawOuterCurves(brep, angle, center); Color linesColor = Color.White; //Adding the different text components together to one output. List <string> text = new List <String> { textDef, headText, }; List <double> textSizes = new List <double> { textDefSize, headSize, }; List <Plane> textPlanes = new List <Plane> { textDefPlane, headPlane, }; List <Color> textColors = new List <Color> { textDefColor, headColor, }; //---output--- //Geometry DA.SetDataList(0, geoBreps); DA.SetDataList(1, geoColor); DA.SetDataList(2, lines); DA.SetData(3, linesColor); DA.SetDataList(4, text); DA.SetDataList(5, textSizes); DA.SetDataList(6, textPlanes); DA.SetDataList(7, textColors); }