公式の「複合ジオメトリの作成」のヘルプの補足をメモした

# 公式の複合ジオメトリの作成ヘルプの補足をメモした

リンクの形状を任意の形に調整したいけど、公式のヘルプにわかりにくいところがあって、2度も3度も調べているので、自分のためのメモを残します。

# 複合ジオメトリ
リンク部品をBrick Solidの直方体だけで作るなら問題ないけど、ちょっと形状を工夫したいとき、複合ジオメトリを使うことができます。
しかし、ちょっとヘルプが不親切で、どこのペインを開けばいいのかわからないので、補足します。

**もっとすっきりとジオメトリの初期化プログラムを記述する記事を追加しましたので、合わせてお読みください。**

https://qiita.com/t_kumazawa/items/c867c73c5e8340e4b484


# 補足

↓これが公式のヘルプ
https://jp.mathworks.com/help/sm/ug/compounding-body-elements.html

以下のコマンドでサンプルを開きます。

```
openExample('sm/CompoundBodyExample')
```

こんなのが開きます。
プレビューを見ると、リンクがピン構造になっていますね。
私も自分のリンクをピン構造にしたい。

いつも使っている立方体のBrick Solid（レンガソリッド）ではなく、**Extruded Solid**（押出しソリッド）を使ってBodyを作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/08376e20-e2a7-d008-9819-33c835867549.png)

# ジオメトリ形状を編集する
**もっとすっきりとジオメトリの初期化プログラムを記述する記事を追加しました。MATLABコードを書くところはこちらを参照してください。**

https://qiita.com/t_kumazawa/items/c867c73c5e8340e4b484


「モデル化」タブを選び、「モデルエクスプローラー」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/51364d1e-6122-0aa8-cecf-583eb13ac447.png)

「Model Workspace」を選ぶと、右側の「ワークスペースデータ」に初期化用のMATLABコードが表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/90d103f4-1b34-e1a6-248d-7bcc5c0c3284.png)

このMATLABコードを実行すると、初期化された2次元座標上の点列を変数に代入する。
変数をSolidに設定する。

ただ、なぜか「MATLABコード」のウィンドウではコピペができなくて大変不便だったので、以下の様にMATLABファイルをインポートすることにした。
フォームの「システムマスクの作成」を使って、パラメータ設定もできるようなので、L/T/W/rhoなどはこちらで定義した方がいいかも。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/81e8469e-f977-244f-e9c8-8d22ac7940d7.png)

Mファイルは普通にMATLABのエディタが使えるのでファイルを使うほうが簡単そうです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/d458c2cc-6d46-5ef2-5d3f-36960211ec44.png)

「Cross-section」にlink_xs変数を設定して、形状を設定する。
これで押出しモードで形状を設定できる。



# スクリプトの内容を理解する

Matlabの記述がわからないので、内容を調べてみる。
最初の部分は、変数の初期設定。

```
rho = 1000; % density of material (kg/m^3)
L = 20; % length from hole to peg centers (cm)
W = 2; % width of link (cm)
T = 0.5; % thickenss of link (cm)
r = 0.5; % hole/peg radius (cm)
```

変数を行列で初期化。

```
% Main link cross-section
top_xsec = [L/2 W/2; -L/2 W/2];
theta = (90:-1:-90)*pi/180;
semi_hole_xsec = [-L/2+r*cos(theta') r*sin(theta')];
```
top_xsec は 2x2行列。
theta は 90度から-90度まで-1ステップ刻みで182の配列を作ってラジアンにしたもの。右側の弧の半円。CW。
semi_hole_xsec は 右側の弧の半円で、座標(-L/2,0)で半径r。

```
bottom_xsec = [-L/2 -W/2; L/2 -W/2];
theta = (-89:1:89)*pi/180;
right_end_xsec = [L/2+(W/2)*cos(theta') (W/2)*sin(theta')];
```
bottom_xsec は 2x2行列。
theta は -89度から89度まで+1ステップ刻みで182の配列を作ってラジアンにしたもの。右側の弧の半円。CCW。
right_end_xsec は 右側の弧の半円で、座標(L/2,0)で半径W/2。

```
link_xs = [ top_xsec; semi_hole_xsec; bottom_xsec; right_end_xsec];
```
link_xsで一筆書きで形状をつなげていく。
➀－➁ は top_xsecの(L/2,W/2) - (-L/2,W/2)
➂－➃ は semi_hole_xsecで、半径rの半弧を描く。
➄－➅ は bottom_xsecの、(-L/2,-W/2) - (L/2,-W/2)
➅－➆ は right_end_xsecで、半径W/2の半弧を描く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/fd353fdf-0ef1-bca6-4925-05134dfaa4ed.png)


```
% Left end cap cross-section
theta = (90:1:270)*pi/180;
outer_xsec = [(W/2)*cos(theta') (W/2)*sin(theta')];
```
90度から270度で1度刻み、左回り、左側の半円。
座標(0,0)で半径W/2の半円。

```
theta = (270:-1:90)*pi/180;
inner_xsec = [r*cos(theta') r*sin(theta')];
```
270度から90度へ-1度刻み、右回り、左側の半円。
座標(0,0)で半径rの半円。

```
end_cap_xs = [outer_xsec; inner_xsec];
```

end_cap_xsで一筆書きで形状をつなげていく。
➀－➁ は outer_xsecで、半径W/2の半弧を描く。
➂－➃ は inner_xsecで、半径rの半弧を描く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/8e4b6db9-7b51-946b-591a-7e99e988fd05.png)

この形状を押し出したものを組み合わせて、リンク形状を作る。

# 実際に並べてみる

こんな感じになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/23851b3d-f111-a0e1-dbe4-2151c69c6e09.png)

# アイコンを変更してみる

サブシステムを右クリックして、「マスク」→「アイコンイメージの編集」で、pngファイルを選択してアイコンを変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/65cbe726-b7b1-3b31-b8a7-9e2d815cb922.png)

それっぽい感じにしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328520/92ca0ee9-7a7d-fec6-ae58-927e7089d8c6.png)

部品を見やすく並べて、組み合わせることが簡単にできそうです。