Skip to content

Commit 4cf787c

Browse files
committed
Fix some phrasing
1 parent 7bcb080 commit 4cf787c

File tree

2 files changed

+61
-41
lines changed

2 files changed

+61
-41
lines changed

website/docs/Coding/GetModelData.md

Lines changed: 43 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ id: GetModelData
33
title: Get model data & draw
44
---
55

6-
ここでは節点と部材の接続情報を取得して、Rhino 上にラインを書き出す方法について紹介します
6+
ここでは節点と部材の情報を取得して、Rhino 上にラインとその情報を書き出す方法について紹介します
77

88
## ST-Bridge のデータの構造について
99

10-
初めに、どこに情報があるか探しやすくするために、ST-Bridge のデータ構造について簡単に説明します。
11-
基本的なイメージとしては一貫構造計算ソフトに近いものと考えていただくのが早いと思います
10+
はじめに、どこに情報があるか探しやすくするため、ST-Bridge のデータ構造について簡単に説明します。
11+
基本的なイメージとしては一貫構造計算ソフトのように、「節点があって、その間に梁があって、その梁には断面などの情報がある」ような形式だと考えていただくのが早いと思います
1212

13-
モデルの位置、断面情報は、`StbModel` に含まれ、以下のような構成になっています。
13+
例えばモデルの位置、断面情報は、`StbModel` に含まれ、以下のような構成になっています。
1414
部材の情報を取得したければ `StbMember`、断面の情報を取得したければ `StbSections` を使用する形になります。
1515

1616
```
@@ -26,22 +26,24 @@ ST_BRIDGE
2626

2727
各データ間の参照は id によって行っています。
2828
例えば`柱 A``節点 1-2` 間を繋ぎ、`断面番号 5` の断面を持つといった形で StbMember はデータを保持しています。
29-
ですので、柱 A の節点座標を知りたければ、 StbNodes の id が 1 と 2 のものを探すことになります。
29+
ですので、柱 A の節点座標を知りたければ、 StbNodes の中から id が 1 と 2 のものを探し、断面を知りたければ StbSections の中から id が 5 のものを探すことになります。
30+
31+
少しわかりづらいのが部材がどこの階、軸に属するかについてです。
32+
ST-Bridge データでは部材は軸や階の情報を持っていません。
33+
全て節点がどこかに属しているので、部材に属する節点からその値を取得して部材の階や軸情報を取得することになります。
3034

3135
## 節点情報の取得
3236

33-
部材を構成する最も基本的な要素である節点の一覧を取得します。
34-
節点情報は以下で取得できます
37+
部材を構成する最も基本的な要素である節点の一覧を取得します。
38+
節点情報は `StbNodes` から配列で返ってくる [StbNode](https://hiron.dev/STBDotNet/docs/STBDotNet.v202.StbNode.html) より取得できます
3539

3640
```cs
3741
// model は v202.ST_BRIDGE 型のインスタンス
3842
StbNode[] nodes = model.StbModel.StbNodes;
3943
```
4044

41-
配列で [StbNode](https://hiron.dev/STBDotNet/docs/STBDotNet.v202.StbNode.html) が取得できます。
42-
4345
StbNode は節点の id や座標情報を持つクラスになっています。
44-
仕様上は配列のインデックスと StbNode がもつ id は一致することを強制していないので、部材の節点を参照する際は必ず id を使って参照してください。
46+
仕様上、配列のインデックスと StbNode がもつ id は一致することを強制されていないので、部材の節点を参照する際は必ず id を使って参照してください。
4547
id が "1" の節点情報を取得する際は、例えば Linq を使うと以下のように書くことができます。
4648

4749
```cs {1,4}
@@ -51,11 +53,16 @@ StbNode[] nodes = model.StbModel.StbNodes;
5153
StbNode node1 = nodes.FirstOrDefault(n => n.id == "1");
5254
```
5355

56+
FirstOrDefault は配列から条件が true になる最初の値、発見されてなかった場合は Default(指定しない場合は null) の値を返すメソッドです。
57+
58+
:::important
5459
id は数字で与えられている場合が多いですが、データの形式は文字列になっていますので注意してください。
60+
:::
5561

5662
### Point3d での図化
5763

5864
Rhino の Point3d として可視化したい場合は以下のように取得した節点情報から Point3d の配列を作成することで可能です。
65+
コンソールアプリで作成する場合は RhinoCommon ではなく Rhino3dm を参照した状態で行ってください。
5966

6067
```cs {4}
6168
// using System.Linq をあらかじめしてください。
@@ -68,7 +75,7 @@ Point3d[] pts = nodes.Select(n => new Point3d(n.x, n.y, n.z)).ToArray();
6875

6976
## 部材情報の取得
7077

71-
ここでは例として柱の情報を取得する方法について紹介します
78+
ここでは例として部材の中でも柱の情報を取得する方法について紹介します
7279
柱の情報は `StbColumn` にあるので、その値を取得します。
7380

7481
```cs
@@ -109,12 +116,15 @@ foreach ((StbColumn column, int i) in columns.Select((column, index) => (column,
109116
}
110117
```
111118

112-
なおより正確に部材を描画したい場合は、例えば StbColumn には offset のプロパティが含まれますので、それを端部の節点座標に反映することで柱のオフセットを考慮することができます。
119+
:::note
120+
なおより正確に部材を描画したい場合は、例えば StbColumn には offset や rotate のプロパティが含まれますので、それを端部の節点座標に反映することで柱のオフセットや回転を考慮することができます。
121+
:::
113122

114123
### 部材断面情報の取得
115124

116125
部材の符号は `name` のプロパティから取得できます。
117-
name は書き出すソフトによりますが、2C1 のような 階 + 符号 で表される名前になります。
126+
name は書き出すソフトによりますが、例えば 2C1 のような 階 + 符号 で表される名前になります。
127+
断面ではなく部材の名前になります。
118128

119129
断面形状の情報は `id_section` のプロパティから取得できます。
120130
節点の場合と同様に、実際の断面情報を持つ `StbSections` の中での id を表す文字列になります。
@@ -162,7 +172,7 @@ foreach ((string id, int i) in idSection.Select((id, index) => (id, index)))
162172
{
163173
var hasName = false;
164174

165-
// RC 断面に該当す id があるか確認
175+
// RC 断面に該当する id があるか確認
166176
if (sections.StbSecColumn_RC != null)
167177
{
168178
foreach (StbSecColumn_RC columnRc in sections.StbSecColumn_RC)
@@ -174,7 +184,7 @@ foreach ((string id, int i) in idSection.Select((id, index) => (id, index)))
174184
}
175185
}
176186

177-
// S 断面に該当す id があるか確認
187+
// S 断面に該当する id があるか確認
178188
if (sections.StbSecColumn_S != null && !hasName)
179189
{
180190
foreach (StbSecColumn_S columnS in sections.StbSecColumn_S)
@@ -190,13 +200,18 @@ foreach ((string id, int i) in idSection.Select((id, index) => (id, index)))
190200

191201
id がどこに該当するかは調べるまでわからないので、上記のように 1 つ 1 つ確認していく必要があります。
192202

193-
今回は使用していませんが、構造種別は `StbColumn` の中の `kind_structure` で取得することができますので、StbSecColum_XX の XX の部分の構造種別がどれかは判別して調べることができます。
203+
今回は使用していませんが、構造種別は `StbColumn` の中の `kind_structure` で取得することができますので、StbSecColum_XX の XX の部分の構造種別がどれかは事前に判別して調べることができます。
204+
205+
:::note
206+
`StbSecXXX_RC` などの RC 部材は中に断面の外形や配筋などの情報を含みますが、`StbSecXXX_S` などの鉄骨部材の断面情報は、断面の形状名(例えば H-300x150x10x15)が取得できるのみで具体的な形状情報は取得できません。
207+
鉄骨の具体的な断面情報は `StbSecSteel` の中に含まれています。これまでの節点などの id と同様の考え方で、取得した断面の形状名と一致する形状名を持つ StbSecSteel の子要素を探す必要があり、鉄骨は RC に比べひと手間必要です。
208+
:::
194209

195210
## C# Script コンポーネント化
196211

197212
これまでのことを踏まえて Grasshopper で動作するラインにタグ付けできるコンポーネントを作成します。
198213

199-
タグ付け自体は TextTag コンポーネントを使うとして、タグとなる文字列とそれを付ける Line を出力する C# Script コンポーネントを書いていきます。
214+
タグ付け自体は TextTag コンポーネントを使うとし、タグとなる文字列とそれを付ける Line を出力する C# Script コンポーネントを書いていきます。
200215

201216
コンポーネントの中身は以下のようにしてください。これまで書いてきた内容をベースに作成しています。
202217

@@ -220,6 +235,7 @@ public class Script_Instance: GH_ScriptInstance
220235
var idSection = new string[columns.Length];
221236
var sectionNames = new string[columns.Length];
222237

238+
// foreach ではなく for 文で書いています。
223239
for (var i = 0; i < columns.Length; i++)
224240
{
225241
StbNode nodeStart = nodes.FirstOrDefault(n => n.id == columns[i].id_node_bottom);
@@ -234,6 +250,7 @@ public class Script_Instance: GH_ScriptInstance
234250

235251
StbSections sections = model.StbModel.StbSections;
236252

253+
// foreach ではなく for 文で書いています。
237254
for (var i = 0; i < idSection.Length; i++)
238255
{
239256
var hasName = false;
@@ -242,20 +259,20 @@ public class Script_Instance: GH_ScriptInstance
242259
{
243260
foreach (StbSecColumn_RC columnRc in sections.StbSecColumn_RC)
244261
{
245-
if (columnRc.id != idSection[i]) continue;
246-
sectionNames[i] = columnRc.name;
247-
hasName = true;
248-
break;
262+
if (columnRc.id != idSection[i]) continue;
263+
sectionNames[i] = columnRc.name;
264+
hasName = true;
265+
break;
249266
}
250267
}
251268

252269
if (sections.StbSecColumn_S != null && !hasName)
253270
{
254271
foreach (StbSecColumn_S columnS in sections.StbSecColumn_S)
255272
{
256-
if (columnS.id != idSection[i]) continue;
257-
sectionNames[i] = columnS.name;
258-
break;
273+
if (columnS.id != idSection[i]) continue;
274+
sectionNames[i] = columnS.name;
275+
break;
259276
}
260277
}
261278
}
@@ -269,6 +286,7 @@ public class Script_Instance: GH_ScriptInstance
269286

270287
作成した結果を以下に示します。図化しているのは HoaryFox の Sample フォルダ内にあるデータを使用しています。
271288

272-
タグ付けする位置は CurveMiddle コンポーネントを使って各Lineの中点を取得しその点に対して TextTag でタグを割り当てています。
289+
タグ付けする位置は CurveMiddle コンポーネントを使って各 Line の中点を取得しその点に対して TextTag でタグを割り当てています。
290+
Grasshopper と Karamba3D で断面最適化をした部材の結果のモデルなため、断面がたくさんありますが、それを図化しています。
273291

274292
![](../../images/Coding/GetModelData/column&tag.png)

website/docs/Coding/GettingStart.md

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ title: Getting Start
66
ここでは、コードを書くことで ST-Bridge データを扱う方法について紹介します。
77
基本的には HoaryFox の内部実装を基にしてどのように処理していくかを紹介していく形になっています。
88

9-
実際のHoaryFoxの実装については様々なケースにエラーなく対応するため複雑になっていますが、ベースとなる動作を理解し必要な場合に自分でカスタマイズための参考にしてください
9+
実際の HoaryFox の実装については様々なケースにエラーなく対応するため複雑になっていますが、ベースとなる動作を理解し必要な場合に自分でカスタマイズするための参考にしてください
1010

1111
なお、HoaryFox の実装は以下で見ることができます。
12+
1213
- [hrntsm/HoaryFox](https://github.com/hrntsm/HoaryFox/tree/main/HoaryFox/RH7/Component)
1314

1415
## 環境構築
@@ -27,14 +28,14 @@ STBDotNet は OSS で開発しているライブラリになります。
2728

2829
### IDE 向け
2930

30-
パッケージマネージャーを使って nuget から参照してください。
31-
以下では VisualStudio を使った場合の例をあげます。
31+
ここでは VisualStudio のような統合開発環境(IDE)を使ってコードを書く場合の方法について紹介します。
3232

33+
VisualStudio ではパッケージマネージャーを使って nuget から参照してください。
3334
VisualStudio を起動して ツール から NuGet パッケージマネージャー の ソリューションの NuGet パッケージの管理を選択してください。
3435

3536
![](../../images/Coding/GettingStart/nuget.png)
3637

37-
参照のタブを選び STBDotNet を検索し、対象のプロジェクトにインストールしてください。
38+
参照のタブを選び STBDotNet を検索し、対象のプロジェクトにインストールしてください。使用するバージョンは最新のものを推奨します。
3839

3940
![](../../images/Coding/GettingStart/install_stbdotnet.png)
4041

@@ -56,7 +57,8 @@ C# Script コンポーネントを配置して、右クリックし Manage Assem
5657
#### HoaryFox がない場合
5758

5859
Nuget のサイトから必要なバージョンをダウンロードしてください。
59-
STBDotNet の ページは以下でページ右側の Download package からダウンロードができます。
60+
STBDotNet の ページは以下になります。
61+
ページ右側の Download package からダウンロードができます。
6062

6163
- [Nuget/STBDotNet](https://www.nuget.org/packages/STBDotNet/)
6264

@@ -70,13 +72,12 @@ nuget は C# などが動作している .NET 向けのライブラリがあげ
7072

7173
## ST-Bridge ファイルの読み込み
7274

73-
例として VisualStudio を使用した例をあげますが、Grasshopper の C# コンポーネントを使用する際もコードの内容は同様です。
75+
例として VisualStudio を使用した例を最初にあげますが、Grasshopper の C# Script コンポーネントを使用する際もコードの内容は同様です。
7476

7577
### コンソールアプリの作成
7678

7779
VisualStudio を起動したらコンソールアプリを作成してください。
7880
プロジェクトの名前を ConsoleApp1 とした場合の例をあげます。
79-
8081
program.cs を以下のように書き換えてください。
8182

8283
```cs title=program.cs
@@ -115,15 +116,14 @@ var model = Serializer.Deserialize(stbPath, Version.Stb202) as STBDotNet.v202.ST
115116

116117
### データのバージョン取得方法
117118

118-
もし ST-Bridge のバージョンがわからない場合はバージョンを取得するメソッドがあります。
119-
以下のメソッドでバージョンを取得することができます。
119+
もし ST-Bridge のバージョンがわからない場合は、以下のメソッドでバージョンを取得することができます。
120120

121121
```cs
122122
Version stbVersion = STBDotNet.Utils.Util.GetStbVersion(stbPath);
123123
```
124124

125125
ですが、ST-Bridge データは xml 形式のテキストデータなので、任意のテキストエディタで確認したほうが早いです。
126-
テキストエディタで開くと冒頭で以下のようになっており、そこでバージョンを確認することができます。
126+
テキストエディタで開くとデータの冒頭は以下のようになっており、そこでバージョンを確認することができます。
127127
例えば HoaryFox で書き出した ST-Bridge データの冒頭は以下のようになっており、バージョンが 2.0.2 であることが確認できます。
128128

129129
```xml
@@ -152,16 +152,16 @@ v202 の `ST_BRIDGE` 型は以下のようなデータを持っています。
152152

153153
このデータの構成は、ST-Bridge_XML 仕様説明書 に準拠した形になっているので、STBDotNet のドキュメントを見なくても仕様説明書を見るとデータの構成を概ね把握することができます。
154154

155-
仕様書は BuildingSmartJapan[構造設計小委員会](https://www.building-smart.or.jp/meeting/buildall/structural-design/) のページよりダウンロードしてください。
155+
仕様書は BuildingSmart Japan[構造設計小委員会](https://www.building-smart.or.jp/meeting/buildall/structural-design/) のページよりダウンロードしてください。
156156

157157
以下はバージョン 2.0.2 の仕様書の ST_BRIDGE の箇所の抜粋になります。
158-
属性、子要素がそのまま ST_BRIDGE 型が持つプロパティとなっています。
158+
属性、子要素がそのまま上で示した STBDotNet の ST_BRIDGE 型が持つプロパティとなっています。
159159
これは、この ST_BRIDGE 型に限らず、全てのクラスで共通の形式になります。
160160

161-
![](../../images/Coding/GettingStart/siyoh.png)
161+
> ![](../../images/Coding/GettingStart/siyoh.png)
162162
163-
例えば、書き出したアプリの名前を取得すること考えます
164-
仕様書を確認すると、アプリ名は StbCommon の app_name にあることがわかります。
163+
データの構造を理解するための例として、書き出したアプリの名前を取得する方法を紹介します
164+
仕様書を確認すると、アプリ名は `StbCommon``app_name` にあることがわかります。
165165
C# で値を取得するしてコンソールに表示する方法は以下になります。
166166

167167
```cs title=Program.cs {12,13,14}
@@ -189,7 +189,7 @@ model を取得する際に対象のバージョンの型にキャストし、
189189

190190
### Grasshopper の場合
191191

192-
STBDotNet を参照している状態で以下のようにすることでアプリの名前を返すことができます。
192+
環境構築の箇所であげたように STBDotNet を参照している状態で以下のようにすることでアプリの名前を返すことができます。
193193
path の TypeHint は string にしてください。
194194

195195
![](../../images/Coding/GettingStart/gh.png)
@@ -207,3 +207,5 @@ public class Script_Instance : GH_ScriptInstance
207207
}
208208
}
209209
```
210+
211+
ここでは HoaryFox の Karamba3D 連携機能で書き出した ST-Bridge データを読み込んでいるため、 アプリ名の HoaryFox が出力されています。

0 commit comments

Comments
 (0)