diff --git a/HoaryFox/Component/Base/SecTagBase.cs b/HoaryFox/Component/Base/SecTagBase.cs index 32304cf2..224e71b5 100644 --- a/HoaryFox/Component/Base/SecTagBase.cs +++ b/HoaryFox/Component/Base/SecTagBase.cs @@ -93,7 +93,7 @@ public override void DrawViewportWires(IGH_PreviewArgs args) private void GetTag(StbFrame stbFrame) { var tags = new CreateTag(_stbData.Nodes, _stbData.SecColumnRc, _stbData.SecColumnS, _stbData.SecBeamRc, _stbData.SecBeamS, _stbData.SecBraceS, _stbData.SecSteel); - _frameTags = tags.Frame(stbFrame); + _frameTags = tags.FrameGHStructure(stbFrame); _tagPos = tags.Position; } } diff --git a/HoaryFox/Component/Geometry/Stb2Brep.cs b/HoaryFox/Component/Geometry/Stb2Brep.cs index 289494fe..0709774f 100644 --- a/HoaryFox/Component/Geometry/Stb2Brep.cs +++ b/HoaryFox/Component/Geometry/Stb2Brep.cs @@ -1,7 +1,12 @@ using System; using System.Collections.Generic; +using System.Drawing; +using System.Linq; using Grasshopper.Kernel; using HoaryFox.Member; +using HoaryFox.Properties; +using Rhino; +using Rhino.DocObjects; using Rhino.Geometry; using STBReader; using STBReader.Member; @@ -12,9 +17,7 @@ public class Stb2Brep : GH_Component { private StbData _stbData; - private List _slabBreps = new List(); - private List _wallBreps = new List(); - private readonly List> _frameBreps = new List>(); + private readonly List> _geometryBreps = new List>(); public Stb2Brep() : base("Stb to Brep", "S2B", "Read ST-Bridge file and display", "HoaryFox", "Geometry") @@ -24,14 +27,13 @@ public Stb2Brep() public override void ClearData() { base.ClearData(); - _slabBreps.Clear(); - _wallBreps.Clear(); - _frameBreps.Clear(); + _geometryBreps.Clear(); } protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddGenericParameter("Data", "D", "input ST-Bridge Data", GH_ParamAccess.item); + pManager.AddBooleanParameter("Bake", "Bake", "If it true, bake geometry.", GH_ParamAccess.item, false); } protected override void RegisterOutputParams(GH_OutputParamManager pManager) @@ -47,35 +49,83 @@ protected override void RegisterOutputParams(GH_OutputParamManager pManager) protected override void SolveInstance(IGH_DataAccess DA) { + var isBake = false; if (!DA.GetData("Data", ref _stbData)) { return; } - MakeBrep(); + if (!DA.GetData("Bake", ref isBake)) { return; } + this.MakeBrep(isBake); - for (var i = 0; i < 5; i++) + for (var i = 0; i < 7; i++) { - DA.SetDataList(i, _frameBreps[i]); + DA.SetDataList(i, _geometryBreps[i]); } - DA.SetDataList(5, _slabBreps); - DA.SetDataList(6, _wallBreps); } - protected override System.Drawing.Bitmap Icon => Properties.Resource.Brep; + protected override Bitmap Icon => Resource.Brep; public override Guid ComponentGuid => new Guid("7d2f0c4e-4888-4607-8548-592104f6f06f"); - private void MakeBrep() + private void MakeBrep(bool isBake) { var stbFrames = new List { _stbData.Columns, _stbData.Girders, _stbData.Posts, _stbData.Beams, _stbData.Braces }; - var breps = new FrameBreps(_stbData); - _slabBreps = breps.Slab(_stbData.Slabs); - _wallBreps = breps.Wall(_stbData.Walls); - foreach (StbFrame frame in stbFrames) { - _frameBreps.Add(breps.Frame(frame)); + _geometryBreps.Add(breps.Frame(frame)); + } + _geometryBreps.Add(breps.Slab(_stbData.Slabs)); + _geometryBreps.Add(breps.Wall(_stbData.Walls)); + + if (isBake) + { + this.BakeBreps(stbFrames); + } + } + + private void BakeBreps(IEnumerable stbFrames) + { + RhinoDoc activeDoc = RhinoDoc.ActiveDoc; + var parentLayerNames = new[] { "Column", "Girder", "Post", "Beam", "Brace", "Slab", "Wall" }; + Color[] layerColors = { Color.Red, Color.Green, Color.Aquamarine, Color.LightCoral, Color.MediumPurple, Color.DarkGray, Color.CornflowerBlue }; + Misc.MakeParentLayers(activeDoc, parentLayerNames, layerColors); + + //TODO: このネストは直す + List>> tagList = stbFrames.Select(stbFrame => Misc.GetTag(_stbData, stbFrame)).ToList(); + + foreach ((List frameBreps, int index) in _geometryBreps.Select((frameBrep, index) => (frameBrep, index))) + { + Layer parentLayer = activeDoc.Layers.FindName(parentLayerNames[index]); + int parentIndex = parentLayer.Index; + Guid parentId = parentLayer.Id; + + foreach ((Brep brep, int bIndex) in frameBreps.Select((brep, bIndex) => (brep, bIndex))) + { + var objAttr = new ObjectAttributes(); + objAttr.SetUserString("Type", parentLayerNames[index]); + + if (index < 5) + { + List> tags = tagList[index]; + List tag = tags[bIndex]; + Misc.SetFrameUserString(ref objAttr, tag); + + var layer = new Layer { Name = tag[0], ParentLayerId = parentId, Color = layerColors[index] }; + int layerIndex = activeDoc.Layers.Add(layer); + if (layerIndex == -1) + { + layer = activeDoc.Layers.FindName(tag[0]); + layerIndex = layer.Index; + } + objAttr.LayerIndex = layerIndex; + } + else + { + objAttr.LayerIndex = parentIndex; + } + activeDoc.Objects.AddBrep(brep, objAttr); + } } } } diff --git a/HoaryFox/Component/Geometry/Stb2Line.cs b/HoaryFox/Component/Geometry/Stb2Line.cs index 9db01cac..7550f894 100644 --- a/HoaryFox/Component/Geometry/Stb2Line.cs +++ b/HoaryFox/Component/Geometry/Stb2Line.cs @@ -1,9 +1,14 @@ using System; using System.Collections.Generic; +using System.Drawing; +using System.Linq; using Grasshopper.Kernel; using HoaryFox.Member; +using Rhino; +using Rhino.DocObjects; using Rhino.Geometry; using STBReader; +using STBReader.Member; namespace HoaryFox.Component.Geometry @@ -12,11 +17,7 @@ public class Stb2Line : GH_Component { private StbData _stbData; private List _nodes = new List(); - private List _columns = new List(); - private List _girders = new List(); - private List _posts = new List(); - private List _beams = new List(); - private List _braces = new List(); + private readonly List> _lineList = new List>(); public Stb2Line() : base(name: "Stb to Line", nickname: "S2L", description: "Read ST-Bridge file and display", category: "HoaryFox", subCategory: "Geometry") @@ -26,17 +27,13 @@ public Stb2Line() public override void ClearData() { base.ClearData(); - _nodes.Clear(); - _columns.Clear(); - _girders.Clear(); - _posts.Clear(); - _beams.Clear(); - _braces.Clear(); + _lineList.Clear(); } protected override void RegisterInputParams(GH_InputParamManager pManager) { pManager.AddGenericParameter("Data", "D", "input ST-Bridge Data", GH_ParamAccess.item); + pManager.AddBooleanParameter("Bake", "Bake", "If it true, bake geometry.", GH_ParamAccess.item, false); } protected override void RegisterOutputParams(GH_OutputParamManager pManager) @@ -51,30 +48,82 @@ protected override void RegisterOutputParams(GH_OutputParamManager pManager) protected override void SolveInstance(IGH_DataAccess DA) { + var isBake = false; if (!DA.GetData("Data", ref _stbData)) { return; } + if (!DA.GetData("Bake", ref isBake)) { return; } - MakeLine(); - + MakeLine(isBake); DA.SetDataList(0, _nodes); - DA.SetDataList(1, _columns); - DA.SetDataList(2, _girders); - DA.SetDataList(3, _posts); - DA.SetDataList(4, _beams); - DA.SetDataList(5, _braces); + foreach ((List geometry, int i) in _lineList.Select((geo, index) => (geo, index + 1))) + { + DA.SetDataList(i, geometry); + } } - private void MakeLine() + private void MakeLine(bool isBake) { var createLines = new FrameLines(_stbData); _nodes = createLines.Nodes(); - _columns = createLines.Columns(); - _girders = createLines.Girders(); - _posts = createLines.Posts(); - _beams = createLines.Beams(); - _braces = createLines.Braces(); + _lineList.Add(createLines.Columns()); + _lineList.Add(createLines.Girders()); + _lineList.Add(createLines.Posts()); + _lineList.Add(createLines.Beams()); + _lineList.Add(createLines.Braces()); + + if (isBake) + { + this.BakeLines(); + } + } + + private void BakeLines() + { + RhinoDoc activeDoc = RhinoDoc.ActiveDoc; + + var parentLayerNames = new[] { "Column", "Girder", "Post", "Beam", "Brace", "Slab", "Wall" }; + Color[] layerColors = { Color.Red, Color.Green, Color.Aquamarine, Color.LightCoral, Color.MediumPurple, Color.DarkGray, Color.CornflowerBlue }; + Misc.MakeParentLayers(activeDoc, parentLayerNames, layerColors); + var stbFrames = new List { _stbData.Columns, _stbData.Girders, _stbData.Posts, _stbData.Beams, _stbData.Braces }; + + //TODO: このネストは直す + List>> tagList = stbFrames.Select(stbFrame => Misc.GetTag(_stbData, stbFrame)).ToList(); + + foreach ((List lines, int index) in _lineList.Select((frameBrep, index) => (frameBrep, index))) + { + Layer parentLayer = activeDoc.Layers.FindName(parentLayerNames[index]); + int parentIndex = parentLayer.Index; + Guid parentId = parentLayer.Id; + foreach ((Line line, int bIndex) in lines.Select((brep, bIndex) => (brep, bIndex))) + { + var objAttr = new ObjectAttributes(); + objAttr.SetUserString("Type", parentLayerNames[index]); + + if (index < 5) + { + List> tags = tagList[index]; + List tag = tags[bIndex]; + Misc.SetFrameUserString(ref objAttr, tag); + + var layer = new Layer { Name = tag[0], ParentLayerId = parentId, Color = layerColors[index] }; + int layerIndex = activeDoc.Layers.Add(layer); + if (layerIndex == -1) + { + layer = activeDoc.Layers.FindName(tag[0]); + layerIndex = layer.Index; + } + objAttr.LayerIndex = layerIndex; + } + else + { + objAttr.LayerIndex = parentIndex; + } + + activeDoc.Objects.AddLine(line, objAttr); + } + } } - protected override System.Drawing.Bitmap Icon => Properties.Resource.Line; + protected override Bitmap Icon => Properties.Resource.Line; public override Guid ComponentGuid => new Guid("7d2f0c4e-4888-4607-8548-592104f6f06d"); } } diff --git a/HoaryFox/HoaryFox.csproj b/HoaryFox/HoaryFox.csproj index 314f83a9..f2db0c4b 100644 --- a/HoaryFox/HoaryFox.csproj +++ b/HoaryFox/HoaryFox.csproj @@ -60,6 +60,7 @@ + True diff --git a/HoaryFox/Member/CreateBreps.cs b/HoaryFox/Member/CreateBreps.cs index 981dce05..2104f7bb 100644 --- a/HoaryFox/Member/CreateBreps.cs +++ b/HoaryFox/Member/CreateBreps.cs @@ -20,11 +20,11 @@ public static IEnumerable FromEndPoint(StbData stbData, ShapeInfo shapeInf List> origins = GetOriginPoints(frameType, shapeInfo, angles); List breps = GetSecBrep(stbData, shapeType, origins, shapeInfo); - List brepRot = ApplyRotation(breps, shapeInfo.Rotate, frameType, origins); + IEnumerable brepRot = ApplyRotation(breps, shapeInfo.Rotate, frameType, origins); return brepRot; } - private static List ApplyRotation(List breps, double rotate, FrameType frameType, List> origins) + private static IEnumerable ApplyRotation(IReadOnlyCollection breps, double rotate, FrameType frameType, IReadOnlyList> origins) { double rotateAngle = rotate * Math.PI / 180d; var rotationCenter = new Point3d[2]; @@ -47,11 +47,10 @@ private static List ApplyRotation(List breps, double rotate, FrameTy { b.Rotate(rotateAngle, rotationAxis, rotationCenter[0]); } - return breps; } - private static List GetSecBrep(StbData stbData, ShapeTypes shapeType, List> origins, ShapeInfo shapeInfo) + private static List GetSecBrep(StbData stbData, ShapeTypes shapeType, IReadOnlyList> origins, ShapeInfo shapeInfo) { var secBrep = new SteelCroSecBrep(stbData, origins); switch (shapeType) diff --git a/HoaryFox/Member/CreateTag.cs b/HoaryFox/Member/CreateTag.cs index 877564bd..2c773dbc 100644 --- a/HoaryFox/Member/CreateTag.cs +++ b/HoaryFox/Member/CreateTag.cs @@ -34,7 +34,7 @@ public CreateTag(StbNodes nodes, StbSecColumnRc colRc, StbSecColumnS colS, StbSe _colRc = colRc; } - public GH_Structure Frame(StbFrame frameData) + public GH_Structure FrameGHStructure(StbFrame frameData) { var ghSecStrings = new GH_Structure(); @@ -75,6 +75,49 @@ public GH_Structure Frame(StbFrame frameData) return ghSecStrings; } + public List> FrameList(StbFrame frameData) + { + var tags = new List>(); + + for (var eNum = 0; eNum < frameData.Id.Count; eNum++) + { + TagInfo tagInfo; + var tag = new List(); + int idSection = frameData.IdSection[eNum]; + KindsStructure kind = frameData.KindStructure[eNum]; + SetTagPosition(frameData, eNum); + + switch (kind) + { + case KindsStructure.Rc: + tagInfo = TagRc(frameData, idSection); + break; + case KindsStructure.S: + tagInfo = TagSteel(frameData, idSection); + break; + case KindsStructure.Src: + case KindsStructure.Cft: + case KindsStructure.Deck: + case KindsStructure.Precast: + case KindsStructure.Other: + throw new ArgumentException("Wrong kind structure"); + default: + throw new ArgumentOutOfRangeException(); + } + + tag.Add(tagInfo.Name); + tag.Add(tagInfo.ShapeTypes.ToString()); + tag.Add(tagInfo.P1.ToString()); + tag.Add(tagInfo.P2.ToString()); + tag.Add(tagInfo.P3.ToString()); + tag.Add(tagInfo.P4.ToString()); + tag.Add(kind.ToString()); + tags.Add(tag); + } + + return tags; + } + private void SetTagPosition(StbFrame frame, int eNum) { // 始点と終点の座標取得 diff --git a/HoaryFox/Member/SteelCroSecBrep.cs b/HoaryFox/Member/SteelCroSecBrep.cs index 761801ec..5f79ae3a 100644 --- a/HoaryFox/Member/SteelCroSecBrep.cs +++ b/HoaryFox/Member/SteelCroSecBrep.cs @@ -1,4 +1,6 @@ using System.Collections.Generic; +using System.Linq; +using System.Security.Permissions; using Rhino.Geometry; using STBReader; @@ -7,68 +9,145 @@ namespace HoaryFox.Member public class SteelCroSecBrep { private readonly StbData _stbData; + private readonly double _tol; private readonly List _pointStart; private readonly List _pointEnd; - public SteelCroSecBrep(StbData stbData, List> origins) + public SteelCroSecBrep(StbData stbData, IReadOnlyList> origins) { _stbData = stbData; + _tol = _stbData.ToleLength; _pointStart = origins[0]; _pointEnd = origins[1]; } public List CShape() { - var brep = new List + var breps = new List { - Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[4], _pointEnd[5], _pointEnd[4], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[0], _pointStart[1], _pointEnd[1], _pointEnd[0], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[4], _pointStart[1], _pointEnd[1], _pointEnd[4], _stbData.ToleLength) + Brep.CreateFromCornerPoints(_pointStart[2], _pointStart[1], _pointEnd[1], _pointEnd[2], _tol), + Brep.CreateFromCornerPoints(_pointStart[1], _pointStart[4], _pointEnd[4], _pointEnd[1], _tol), + Brep.CreateFromCornerPoints(_pointStart[4], _pointStart[5], _pointEnd[5], _pointEnd[4], _tol) }; - return brep; + List joinedBrep = Brep.JoinBreps(breps, _tol).ToList(); + + return joinedBrep; } public List TShape() { - var brep = new List + Point3d[] pointIs = MakeHInnerPoint(_pointStart); + Point3d[] pointIe = MakeHInnerPoint(_pointEnd); + + var breps = new List { - Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[5], _pointEnd[5], _pointEnd[3], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[4], _pointStart[1], _pointEnd[1], _pointEnd[4], _stbData.ToleLength) + Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[5], _pointEnd[5], _pointEnd[3], _tol), + Brep.CreateFromCornerPoints(_pointStart[5], pointIs[5], pointIe[5], _pointEnd[5], _tol), + Brep.CreateFromCornerPoints(pointIs[5], pointIs[4], pointIe[4], pointIe[5], _tol), + Brep.CreateFromCornerPoints(pointIs[4], pointIs[1], pointIe[1], pointIe[4], _tol), + Brep.CreateFromCornerPoints(pointIs[1], pointIs[0], pointIe[0], pointIe[1], _tol), + Brep.CreateFromCornerPoints(pointIs[0], pointIs[3], pointIe[3], pointIe[0], _tol), + Brep.CreateFromCornerPoints(pointIs[3], pointIs[2], pointIe[2], pointIe[3], _tol), + Brep.CreateFromCornerPoints(pointIs[2], _pointStart[3], _pointEnd[3], pointIe[2], _tol), }; - return brep; + List joinedBrep = Brep.JoinBreps(breps, _tol).ToList(); + + return joinedBrep.Select(b => b.CapPlanarHoles(_tol)).ToList(); + } + + // o3 - - o4 - - o5 + // | | + // Y i2 - i3 i4 - i5 + // ^ | | + // o > X o0 - i0 - o1 - i1 - o2 + private static Point3d[] MakeTInnerPoint(IReadOnlyList outPoints) + { + var points = new Point3d[6]; + + points[0] = 0.55 * outPoints[0] + 0.45 * outPoints[2]; + points[1] = 0.55 * outPoints[2] + 0.45 * outPoints[0]; + points[2] = 0.95 * outPoints[3] + 0.05 * outPoints[0]; + points[5] = 0.95 * outPoints[5] + 0.05 * outPoints[2]; + + points[3] = 0.55 * points[5] + 0.45 * points[2]; + points[4] = 0.55 * points[2] + 0.45 * points[5]; + + return points; } public List HShape() { - var brep = new List + Point3d[] pointIs = MakeHInnerPoint(_pointStart); + Point3d[] pointIe = MakeHInnerPoint(_pointEnd); + + var breps = new List { - Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[5], _pointEnd[5], _pointEnd[3], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[0], _pointStart[2], _pointEnd[2], _pointEnd[0], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[4], _pointStart[1], _pointEnd[1], _pointEnd[4], _stbData.ToleLength) + Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[5], _pointEnd[5], _pointEnd[3], _tol), + Brep.CreateFromCornerPoints(_pointStart[5], pointIs[7], pointIe[7], _pointEnd[5], _tol), + Brep.CreateFromCornerPoints(pointIs[7], pointIs[6], pointIe[6], pointIe[7], _tol), + Brep.CreateFromCornerPoints(pointIs[6], pointIs[2], pointIe[2], pointIe[6], _tol), + Brep.CreateFromCornerPoints(pointIs[2], pointIs[3], pointIe[3], pointIe[2], _tol), + Brep.CreateFromCornerPoints(pointIs[3], _pointStart[2], _pointEnd[2], pointIe[3], _tol), + Brep.CreateFromCornerPoints(_pointStart[2], _pointStart[0], _pointEnd[0], _pointEnd[2], _tol), + Brep.CreateFromCornerPoints(_pointStart[0], pointIs[0], pointIe[0], _pointEnd[0], _tol), + Brep.CreateFromCornerPoints(pointIs[0], pointIs[1], pointIe[1], pointIe[0], _tol), + Brep.CreateFromCornerPoints(pointIs[1], pointIs[5], pointIe[5], pointIe[1], _tol), + Brep.CreateFromCornerPoints(pointIs[5], pointIs[4], pointIe[4], pointIe[5], _tol), + Brep.CreateFromCornerPoints(pointIs[4], _pointStart[3], _pointEnd[3], pointIe[4], _tol), }; - return brep; + List joinedBrep = Brep.JoinBreps(breps, _tol).ToList(); + + return joinedBrep.Select(b => b.CapPlanarHoles(_tol)).ToList(); + } + + // o3 - o4 - o5 + // | | + // i4 - i5 i6 - i7 + // | | + // Y i0 - i1 i2 - i3 + // ^ | | + // o > X o0 - o1 - o2 + private static Point3d[] MakeHInnerPoint(IReadOnlyList outPoints) + { + var points = new Point3d[8]; + + points[0] = 0.95 * outPoints[0] + 0.05 * outPoints[3]; + points[3] = 0.95 * outPoints[2] + 0.05 * outPoints[5]; + points[4] = 0.95 * outPoints[3] + 0.05 * outPoints[0]; + points[7] = 0.95 * outPoints[5] + 0.05 * outPoints[2]; + + points[1] = 0.55 * points[0] + 0.45 * points[3]; + points[2] = 0.55 * points[3] + 0.45 * points[0]; + points[5] = 0.55 * points[4] + 0.45 * points[7]; + points[6] = 0.55 * points[7] + 0.45 * points[4]; + + return points; } public List BoxShape() { - var brep = new List + var breps = new List { - Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[5], _pointEnd[5], _pointEnd[3], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[0], _pointStart[2], _pointEnd[2], _pointEnd[0], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[0], _pointEnd[0], _pointEnd[3], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[5], _pointStart[2], _pointEnd[2], _pointEnd[5], _stbData.ToleLength) + Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[5], _pointEnd[5], _pointEnd[3], _tol), + Brep.CreateFromCornerPoints(_pointStart[0], _pointStart[2], _pointEnd[2], _pointEnd[0], _tol), + Brep.CreateFromCornerPoints(_pointStart[3], _pointStart[0], _pointEnd[0], _pointEnd[3], _tol), + Brep.CreateFromCornerPoints(_pointStart[5], _pointStart[2], _pointEnd[2], _pointEnd[5], _tol) }; - return brep; + List joinedBrep = Brep.JoinBreps(breps, _tol).ToList(); + + return joinedBrep.Select(b => b.CapPlanarHoles(_tol)).ToList(); } public List LShape() { - var brep = new List + var breps = new List { - Brep.CreateFromCornerPoints(_pointStart[0], _pointStart[2], _pointEnd[2], _pointEnd[0], _stbData.ToleLength), - Brep.CreateFromCornerPoints(_pointStart[5], _pointStart[2], _pointEnd[2], _pointEnd[5], _stbData.ToleLength) + Brep.CreateFromCornerPoints(_pointStart[0], _pointStart[2], _pointEnd[2], _pointEnd[0], _tol), + Brep.CreateFromCornerPoints(_pointStart[5], _pointStart[2], _pointEnd[2], _pointEnd[5], _tol) }; - return brep; + List joinedBrep = Brep.JoinBreps(breps, _tol).ToList(); + + return joinedBrep; } public List PipeShape(ShapeInfo shapeInfo) diff --git a/HoaryFox/Misc.cs b/HoaryFox/Misc.cs new file mode 100644 index 00000000..c902d355 --- /dev/null +++ b/HoaryFox/Misc.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using HoaryFox.Member; +using Rhino; +using Rhino.DocObjects; +using STBReader; +using STBReader.Member; + +namespace HoaryFox +{ + public static class Misc + { + public static List> GetTag(StbData stbData, StbFrame stbFrame) + { + var tags = new CreateTag(stbData.Nodes, stbData.SecColumnRc, stbData.SecColumnS, stbData.SecBeamRc, stbData.SecBeamS, stbData.SecBraceS, stbData.SecSteel); + return tags.FrameList(stbFrame); + } + + public static void MakeParentLayers(RhinoDoc activeDoc, IEnumerable parentLayerNames, IReadOnlyList layerColors) + { + foreach ((string name, int index) in parentLayerNames.Select((name, index) => (name, index))) + { + var parentLayer = new Layer { Name = name, Color = layerColors[index] }; + activeDoc.Layers.Add(parentLayer); + } + } + public static void SetFrameUserString(ref ObjectAttributes objAttr, IReadOnlyList tag) + { + objAttr.SetUserString("Tag", tag[0]); + objAttr.SetUserString("ShapeType", tag[1]); + objAttr.SetUserString("Height", tag[2]); + objAttr.SetUserString("Width", tag[3]); + objAttr.SetUserString("t1", tag[4]); + objAttr.SetUserString("t2", tag[5]); + objAttr.SetUserString("Kind", tag[6]); + } + } +} diff --git a/Samples/Convert_to_Karamba.gh b/Samples/Convert_to_Karamba.gh index 7688bac6..e733fe52 100644 Binary files a/Samples/Convert_to_Karamba.gh and b/Samples/Convert_to_Karamba.gh differ diff --git a/Samples/ExportSTB.gh b/Samples/ExportSTB.gh index c8982650..e40adcf8 100644 Binary files a/Samples/ExportSTB.gh and b/Samples/ExportSTB.gh differ diff --git a/Samples/ShowStbModel.gh b/Samples/ShowStbModel.gh index 62f28f96..02bedb2b 100644 Binary files a/Samples/ShowStbModel.gh and b/Samples/ShowStbModel.gh differ diff --git a/website/blog/2021-02-17-release-v122.md b/website/blog/2021-02-17-release-v122.md new file mode 100644 index 00000000..ad05bbe1 --- /dev/null +++ b/website/blog/2021-02-17-release-v122.md @@ -0,0 +1,28 @@ +--- +slug: release-v122 +title: Ver1.2.2 リリース情報 +author: hiron +author_title: HoaryFox Developper +author_url: https://github.com/hrntsm +author_image_url: + https://avatars2.githubusercontent.com/u/23289252?s=400&u=54afbef081e93b95f772368a02d2be0690ba9287&v=4 +tags: [UpdateInfo] +--- + +HoaryFox をバージョン1.2.2にアップデートしました。 +今回のアップデート内容は以下です。 + +- 本ドキュメントサイトを作成 +- STB から Karamba3D への変換関連 + - 材料特性の単位が間違っていたので修正 + - 断面のファミリー名指定を行う SetCroSecFamilyName コンポーネント追加 + - RC 断面の断面名を "Id + 数字" から BD- または CD- と数字で断面サイズがわかるようにした + - 例えば BD-300x600 のような断面名 +- Karamba3D から STB への変換関連 + - FrameBuilder using Karamba コンポーネントを、部材の変換と節点の変換の部分を分離した。 + - FrameBuilder by angle と NodeBuilder + - 変換の際、柱梁を判定する角度を入力可能にした + - 上記判定結果を Rhino のビューポートにテキストで出力するようにした + +いつも使っていただいてありがとうございます。 +引き続きよろしくお願いいたします。 \ No newline at end of file diff --git a/website/blog/2021-03-28-release-v131.md b/website/blog/2021-03-28-release-v131.md new file mode 100644 index 00000000..5c698f26 --- /dev/null +++ b/website/blog/2021-03-28-release-v131.md @@ -0,0 +1,21 @@ +--- +slug: release-v131 +title: Ver1.3.1 リリース情報 +author: hiron +author_title: HoaryFox Developper +author_url: https://github.com/hrntsm +author_image_url: + https://avatars2.githubusercontent.com/u/23289252?s=400&u=54afbef081e93b95f772368a02d2be0690ba9287&v=4 +tags: [UpdateInfo] +--- + +HoaryFox をバージョン1.3.1にアップデートしました。 +今回のアップデート内容は以下です。 +- Stb2Brep, Stb2Line に Bake 機能を追加 + - 構造種別ごと(主柱、大梁、間柱、小梁、床、壁) のレイヤーにサブレイヤーとして部材符号ごとに Bake します。 + - Bake 時に断面情報などを UserText としてジオメトリに紐づけた +- Bake 機能追加にあわせて、Stb2Brep の出力修正 + - これまでは単一の板のような OpenBrep の集合として出力していたが、上記 UserText の書き出しに合わせて、部材ごとに Brep を結合してジオメトリそのものにも意味があるようにしたした + +いつも使っていただいてありがとうございます。 +引き続きよろしくお願いいたします。 \ No newline at end of file diff --git a/website/docs/Component/Geometry.md b/website/docs/Component/Geometry.md index 6a11ba8f..6a16e872 100644 --- a/website/docs/Component/Geometry.md +++ b/website/docs/Component/Geometry.md @@ -3,7 +3,7 @@ id: Geometry title: Geometry --- -読み込んだ STB データから部材を可視化するコンポーネントのカテゴリ +読み込んだ STB データから部材を可視化、Bake するコンポーネントのカテゴリ --- @@ -11,11 +11,12 @@ title: Geometry ![](../../images/Component/StbToLine.png) -部材をラインで表示する +部材を Line で表示する |入力|説明| |---|:---:| |Data|Load STB file コンポーネントの Data 出力を入力| +|Bake|各 Line を断面符号ごとにレイヤー分けして Bake する| |出力|説明| |---|:---:| @@ -32,21 +33,22 @@ title: Geometry ![](../../images/Component/StbToBrep.png) -部材を Surface で表示する +部材を Brep で表示する |入力|説明| |---|:---:| |Data|Load STB file コンポーネントの Data 出力を入力| +|Bake|各 Brep を断面符号ごとにレイヤー分けして Bake する| |出力|説明| |---|:---:| -|Columns| 柱形状を表す Surface のリストを出力| -|Girders| 大梁形状を表す Surface のリストを出力| -|Posts| 間柱形状を表す Surface のリストを出力| -|Beams| 小梁形状を表す Surface のリストを出力| -|Braces| ブレース形状を表す Surface のリストを出力| -|Slabs| スラブ形状を表す Surface のリストを出力| -|Walls| 壁形状を表す Surface のリストを出力| +|Columns| 柱形状を表す Brep のリストを出力| +|Girders| 大梁形状を表す Brep のリストを出力| +|Posts| 間柱形状を表す Brep のリストを出力| +|Beams| 小梁形状を表す Brep のリストを出力| +|Braces| ブレース形状を表す Brep のリストを出力| +|Slabs| スラブ形状を表す Brep のリストを出力| +|Walls| 壁形状を表す Brep のリストを出力| ### 表示仕様 diff --git a/website/docs/Usage/BakeGeometry.md b/website/docs/Usage/BakeGeometry.md new file mode 100644 index 00000000..266e30b5 --- /dev/null +++ b/website/docs/Usage/BakeGeometry.md @@ -0,0 +1,24 @@ +--- +id: BakeGeometry +title: Bake Geometry +--- + +STB のモデルを Grasshopper に読み込んで、Rhino へ Bake する方法について説明します。こちらの内容は Samples フォルダーの ShowStbModel.gh のモデルを参照してください。 + +## STB ファイルを読み込み + +ファイルを開くと以下のようになっているため、path コンポーネントを右クリックし Select one existing file を選択し可視化したいstbファイルを選択してください。 +読み込みにエラーがない場合、その隣にある Load STB data コンポーネントでデータの変換が行われます。この出力を各可視化コンポーネントにつなぐことで Rhino のビューポート上に情報が可視化されます。 + +![](../../images/ShowStbModel/input.png) + +## ジオメトリの Bake + +Stb2Brep コンポーネントと、Stb2Line コンポーネントに Bake 機能がついています。 +Bake の入力に Button などを使用して True を入力すると Rhino へ Bake されます。Bake の状態は以下の画像のようになっています。 + +レイヤーは、Column、Girder、Post、Beam、Brace、Slab、Wall にわかれ、その中でさらに部材符号ごとのサブレイヤーに分かれます。 + +Bake されたジオメトリには、メタ情報を追加しています。ジオメトリを選択し、Properties の Attribure User Text を確認すると、断面サイズなどの値を確認することができるような BIM 的な機能になっています。 + +![](../../images/BakeGeometry/Bake.png) diff --git a/website/images/BakeGeometry/Bake.png b/website/images/BakeGeometry/Bake.png new file mode 100644 index 00000000..079e7549 Binary files /dev/null and b/website/images/BakeGeometry/Bake.png differ diff --git a/website/images/Component/StbToBrep.png b/website/images/Component/StbToBrep.png index d64da5a8..f0b6d2b5 100644 Binary files a/website/images/Component/StbToBrep.png and b/website/images/Component/StbToBrep.png differ diff --git a/website/images/Component/StbToLine.png b/website/images/Component/StbToLine.png index 3a372de7..9f44f0d6 100644 Binary files a/website/images/Component/StbToLine.png and b/website/images/Component/StbToLine.png differ diff --git a/website/sidebars.js b/website/sidebars.js index 2d565d80..5829066d 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -5,11 +5,14 @@ module.exports = { 'Component/IO', 'Component/NameTag', 'Component/SectionTag', - 'Component/StbBuilder'], + 'Component/StbBuilder' + ], Usage: [ 'Usage/HowToInstall', 'Usage/ShowSTBModel', 'Usage/ConvertToKaramba', - 'Usage/ExportSTB'], + 'Usage/ExportSTB', + 'Usage/BakeGeometry' + ], }, };