[備忘録]CADqueryサンプルコード

# はじめに

本記事は、PythonモジュールであるCadQueryのサンプルコード集です。

導入方法は、[CadQueryを使って、3Dプリンタデータ(STLファイル)を作成する](https://qiita.com/kotaproj/items/781aa28fd4c20f504890)を参照ください。

※適宜更新予定です。

# [box]直方体をかく

- x:2mm, y:2mm, z:0.5mmの直方体を作成

```python:test.py
import cadquery as cq

result = cq.Workplane("front").box(2.0, 2.0, 0.5)
show_object(result)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/8094d8af-773e-5b1f-f1f9-aa42a282a6a9.png)



# [translate]直方体を座標指定で移動する

- x:2mm, y:2mm, z:0.5mmの直方体を作成
- 直方体の中心座標をx方向に2mm, y方向に3mm, z方向に1mm移動

```python:test.py
import cadquery as cq

result = cq.Workplane("front").box(2.0, 2.0, 0.5)
result = result.translate((2, 3, 1))
show_object(result)

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/e113d16e-7a52-a271-c0c4-5b447c8f58a3.png)




# [hole]直方体に穴をあける

- x:80mm, y:60mm, z:10mmの直方体を作成
- 直径22mの穴を直方体にあける

```python:test.py
import cadquery as cq

length = 80.0
height = 60.0
thickness = 10.0
center_hole_dia = 22.0

result = (cq.Workplane("XY").box(length, height, thickness)
    .faces(">Z").workplane().hole(center_hole_dia))

show_object(result)

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/8e6f0b45-8194-b792-49dd-dbc6bcea60d7.png)


# [hole]直方体に穴をあける(座標指定)

- x:80mm, y:60mm, z:10mmの直方体を作成
- 中心に対し(10, 20)をずらすした直径16mの穴を直方体にあける

```python:test.py
import cadquery as cq

length = 80.0
height = 60.0
thickness = 10.0
center_hole_dia = 16.0

result = cq.Workplane("XY").box(length, height, thickness)
result = result.faces(">Z").workplane().center(10, 20).hole(center_hole_dia)

show_object(result)

```



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/8bc79ad0-bd3e-9feb-2c50-152fec1bc20c.png)


# [cboreHole]直方体にネジ穴をあける

- x:80mm, y:60mm, z:10mmの直方体を作成
- faces(">Z")
  - Z方向の一番大きい面を取得するため指定
- rect(70.0, 50.0, forConstruction=True)
  - 70.0 x 50.0の大きさを指定
  - forConstruction=Trueは、ワイヤー参照
  - ※forConstruction=Falseは、パーツジオメトリ用
- vertices()
  - 頂点を選択
- cboreHole(3.0, 4.0, 2.0, depth=None)
  - 3.0mmのネジ穴
  - 4.0mmのネジ頭穴
  - 2.0mmは、ネジ頭の深さ
  - depthで、ネジ穴の深さ。None指定で貫通




```python:test.py
import cadquery as cq

length = 80.0
height = 60.0
thickness = 10.0

result = (cq.Workplane(cq.Plane.XY()).box(length, height, thickness))
result = result.faces(">Z").workplane().rect(70.0, 50.0, forConstruction=True).vertices().cboreHole(3.0, 4.0, 2.0, depth=None)

show_object(result)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/b768df70-6e64-1a3b-db4b-bcbe9cb800b2.png)



# [union]直方体を融合する

- x:2mm, y:2mm, z:0.5mmの2つの直方体(r1, r2)を作成
- r1をx方向に1mm, y方向に1mm移動
- r1とr2を融合

```python:test.py
import cadquery as cq

r1 = cq.Workplane("front").box(2.0, 2.0, 0.5)
r1 = r1.translate((1, 1, 0))
r2 = cq.Workplane("front").box(2.0, 2.0, 0.5)
r2 = r2.translate((0, 0, 0))

r1 = r1.union(r2)

show_object(r1)

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/cea2297e-4df2-aa67-307b-9ddbed01d02c.png)



# [cut]直方体をカットする

- x:2mm, y:2mm, z:0.5mmの2つの直方体(r1, r2)を作成
- r1をx方向に1mm, y方向に1mm移動
- r1からr2の部分をカット

```python:test.py
import cadquery as cq

r1 = cq.Workplane("front").box(2.0, 2.0, 0.5)
r1 = r1.translate((1, 1, 0))
r2 = cq.Workplane("front").box(2.0, 2.0, 0.5)
r2 = r2.translate((0, 0, 0))

r1 = r1.cut(r2)

show_object(r1)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/c9f6a398-c6cb-79bf-60ee-e1eed7fa3f29.png)


# [circle]円柱をつくる

- 直径2mm, 高さ:3mmの円柱を作成

```python:test.py
import cadquery as cq

result = cq.Workplane("front").circle(2).extrude(3)
show_object(result)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559938/f1752179-3d3b-1e40-56d6-a08b4b2cd998.png)