ネジ穴付きの小型ケース
PythonSCADコミュニティ・開発者に感謝申し上げます。ありがとうございます。
今回は、コメントアウト(#)を1行ずつ外していくことで、ただの四角いブロックが「実用的なケース(容器)」へと進化していく様子を体験しましょう。
特に今回は、「プログラミングならではの魔法」とも言える、記号を使った図形の移動(+)や一括コピー(^)の書き方をメインに解説していきます。後で記事にしやすいよう、図面やJIS規格を意識した解説も交えてまとめました。
まずは、ベースとなる完成コードです。
1. 完成コード(PythonSCAD)
# ==========================================
# [ネジ穴付きの小型ケース]
# 作成日: 2026/07/30
# ==========================================
from pythonscad import *
# --- パラメータ設定 (単位: mm) ---
fn_val = 60 # 円の滑らかさ(数が多いほどキレイな円になる)
eps = 0.1 # くり抜きの時の「削り残し」を防ぐための微小値
# --- メイン処理 ---
# 以下の # を1行ずつ外して(コメントアウトを解除して)実行してみてね!
# 【ステップ1】土台となる外側の箱を作る
box = cube([40, 40, 10], center=False)
# 【ステップ2】内側をくり抜いて「容器」にする(移動:+ リスト)
# box -= cube([36, 36, 40], center=False) + [2, 2, 2]
# 【ステップ3】底の裏側に円柱のくぼみを作る(移動:+ リスト)
# box -= cylinder(r=10, h=5, fn=fn_val) + [20, 20, -eps]
# 【ステップ4】四隅にネジ用の小さな穴を開ける(一括コピー配置:^ 演算子)
# box -= cylinder(r=1.5, h=15, fn=fn_val) ^ [[5, 35], [5, 35], -eps]
# 3Dプレビュー表示
show(box)
2. 段階的な解説(ステップバイステップ)
このプログラムが「なぜこう動くのか」、1行ずつ秘密を解き明かしていきましょう!
【ステップ1】ただのブロック(ベース)
box = cube([40, 40, 10], center=False)
最初は、幅(X)40mm、奥行き(Y)40mm、高さ(Z)10mm の黄色の直方体が表示されます。
今回は座標計算の都合上、原点 [0,0,0] を左下の手前(center=False)として作っています。ここからこの box をどんどん削っていきますよ。
【ステップ2】内側をくり抜く(引き算と移動の魔法)
box -= cube([36, 36, 40], center=False) + [2, 2, 2]
# を外して実行すると、中がくり抜かれて「箱」になります。
ここでのポイントは2つ!
-
-=演算子:Pythonで「元の変数から引き算して更新する」という意味です。3D CADでは「元の形から右側の形を削り取る(ブーリアン演算の差)」という動作になります。 - **移動の書き方
+ [2, 2, 2]**:普通、図形を動かすときはtranslate(図形, [X, Y, Z])という関数を使いますが、PythonSCADでは 図形に+ [X座標, Y座標, Z座標]を足すだけで移動 できてしまいます!
- ここでは、XとYに2mmずつズラし、Z(高さ)も2mm浮かせています。これにより、外壁の厚み2mm、底の厚み2mmが残るというわけです。
【ステップ3】裏側のくぼみを作る
box -= cylinder(r=10, h=5, fn=fn_val) + [20, 20, -eps]
箱の裏側(底)を見ると、丸いくぼみができています。
直径20mm(r=10)の円柱(cylinder)を使って削っています。
ここでも + [20, 20, -eps] を使って移動させています。XとYを20mm移動させて「箱のど真ん中」に合わせ、Z軸は少しだけマイナス(-eps)にしています。
※ワンポイント:ぴったり 0 の位置から削ろうとすると、パソコンの計算誤差で薄い膜が残ってしまう(Zファイティング)ことがあります。そのため、ほんの少し(eps = 0.1)だけはみ出させて削るのが、キレイな3Dモデルを作るプロのコツです。
【ステップ4】四隅の穴を一気に開ける(最強のコピー機能)
box -= cylinder(r=1.5, h=15, fn=fn_val) ^ [[5, 35], [5, 35], -eps]
いよいよ最後の行です。四隅にネジを通すための直径3mm(r=1.5)の穴(キリ穴)が開きます。
ここで登場するのが、PythonSCADの超便利機能 ^ 演算子 です!
【基本の書き方】
配置した図形 = 元のパーツ ^ [X座標のリスト, Y座標のリスト, Z座標のリスト]
^ 演算子は、「左側の形」を「右側の座標の組み合わせ」すべてに一気にコピーして配置する機能です。
今回の指定 [[5, 35], [5, 35], -eps] を読み解いてみましょう。
- X座標は
5と35の2パターン - Y座標も
5と35の2パターン - Z座標は
-epsの1パターン
これが掛け算のように組み合わさって、
[5, 5, -eps][5, 35, -eps][35, 5, -eps]-
[35, 35, -eps]
という 4箇所に同時に円柱が配置 されます。これを一気にboxから引き算(-=)しているため、たった1行で四隅に正確な穴が開くのです。工業製品の設計(例えばM3ネジ用の3.2mmバカ穴を四隅に開ける等)で、この機能はめちゃくちゃ役立ちます。
プロンプト例
PythonSCADを使って、高校生が1行ずつ実行しながら形状の変化と特殊な文法を学ぶためのチュートリアル用コードを作成し、わかりやすく解説してください。
【作成するパーツ】
ネジ穴付きの小型ケース
【形状の寸法・配置ステップ】
・ステップ1(土台): 40×40×10の直方体を作る(center=False)
・ステップ2(くり抜き): 36×36×40の直方体を [2, 2, 2] に移動して土台から削る
・ステップ3(底面のくぼみ): 半径10、高さ5の円柱を [20, 20, -eps] に配置して底の裏側から削る
・ステップ4(四隅のネジ穴): 半径1.5、高さ15の円柱を X座標(5, 35), Y座標(5, 35) の4箇所に配置して削る
【コードの条件】
・今回は生徒がコードの構造を直感的に理解しやすいよう、あえて寸法は変数化せず直書きとし、パラメータ設定は fn_val と eps のみにしてください。
・ベースとなる変数(boxなど)に対して、-= 演算子を使って順番に削っていくスタイルにしてください。
・ステップ2とステップ3の移動処理には、translate 関数ではなく、PythonSCAD特有のリスト加算による移動(例: + [x, y, z])を使用してください。
・ステップ4の四隅への一括配置には、PythonSCAD特有のコピー演算子(例: ^ [[x1, x2], [y1, y2], z])を使用してください。
・学習体験のため、ステップ2〜4の処理は最初 # でコメントアウトしておき、直前に「以下の # を1行ずつ外して(コメントアウトを解除して)実行してみてね!」というメッセージを書いてください。
【解説の要望】
以下の点を高校生向けに解説してください。
- リストを加算する
+ [x, y, z]演算子での移動(translateとの違いや手軽さ) -
^演算子を使った配列(グリッド)コピーの仕組みと、複数の穴を一気に開けるメリット - 1行ずつ
#を外して変化を確認する学習アプローチ(プログラミングにおけるデバッグやステップ実行の考え方)



