勘違いしていました。追記訂正しました。ありがとうございます。
🛠️ PythonSCAD 演算子チートシート
3Dモデリングで最もよく使う「図形の足し引き」は、Pythonの「集合(Set)」を扱う記号と同じように設計されています。
-
足し算(くっつける / 和集合):
+または|(OR) -
例:
result = part1 + part2 -
基本的には
+を使いますが、Pythonの集合演算としての|(パイプ記号:ORの意味) でも同じように結合できることが多いです -
**引き算(削り取る / 差集合):
-** -
例:
result = base - cutter -
メインの部品から、穴あけ用のカッター部品を引く時によく使いますね。Zファイティング(面のチラつき)を防ぐための少し長めのカッター作りが腕の見せ所です!
-
掛け合わせ(重なりを残す / 積集合):
&(AND) -
例:
result = s1 & s2 -
今回マスターした記号です!「両方の図形が存在している空間(AND)」だけを残します。レンズを作ったり、複雑な曲面を切り出したりする高度なモデリングに欠かせません
【誤り訂正】 ~~排他的論理和 (重なった部分だけ消す): ^ (XOR)
- 例:
result = part1 ^ part2 少しマニアックですが、「どちらか一方だけにある部分」を残し、「重なっている部分はくり抜く」という面白い形を作れます
訂正です。
^ 演算子を使った方法は、
配置した図形 = 元のパーツ ^ [X座標のリスト, Y座標のリスト, Z座標のリスト]
PythonSCADにおいて、^ 演算子は「XOR(排他的論理和)」ではありません。「一括スタンプ機能」として、「配列コピー(スタンプ一括配置)」の機能になります。
「2つの球の積集合」のコード
2つの球を横に並べて、重なるように配置し、積集合で、重なる部分を求めるスクリプト
# ==========================================
# 2つの球の積集合(重なり部分)でレンズを作る
# 作成日: 2026/07/29
# ==========================================
from pythonscad import *
# --- パラメータ設定 (単位: mm) ---
sphere_r = 20.0 # 球の半径
center_gap = 25.0 # 2つの球の中心間距離(2 * sphere_r より小さいと重なる)
fn_val = 80 # 球の滑らかさ(分割数)
# --- メイン処理 ---
# 1. 球を「横(X方向)」に並べるために、中心を ±center_gap / 2 に配置する
# 左側の球(X軸のマイナス方向へ移動)
s1 = translate(sphere(r=sphere_r, fn=fn_val), [-center_gap / 2, 0, 0])
# 右側の球(X軸のプラス方向へ移動)
s2 = translate(sphere(r=sphere_r, fn=fn_val), [center_gap / 2, 0, 0])
# 2. 2つの球の「重なっている部分」だけを抽出する(積集合)
# ※ 形状同士の共通部分は & (AND演算子) を使います
result = s1 & s2
# 3. 3Dプレビュー表示
show(result)
解説ポイント
① 重なった部分はどんな形になる?(魔法のレンズ作り)
このプログラムを実行すると、虫眼鏡の「凸レンズ」のような、どら焼きのような形ができあがります。
2つのまん丸な球体を少しだけめり込ませて、その「両方が重なっている(AND)空間」だけを削り出すと、美しいカーブを持ったレンズの形になるんです。3Dモデリングでは、このように「基本的な図形の重なり(&)」を利用して複雑な部品を作ることがよくあります。
② center_gap を変えて実験してみよう!
プログラミングでものづくりをする最大のメリットは、「数字を1つ変えるだけで形がパッと変わる」ことです。
ぜひ、center_gap(中心同士の距離)の数値を変えて実行してみてください。
-
center_gapを10.0に小さくすると? -
2つの球が深くめり込むので、分厚いレンズになります。
-
center_gapを35.0に大きくすると? -
めり込む量が減るので、薄くて鋭いレンズになります。
-
center_gapを40.0(半径の2倍)にするとどうなる? -
球と球がギリギリ触れ合うだけになり、重なる部分がなくなるので図形が消えてしまいます!
③ +(結合)と &(共通部分)の違い
もし、プログラムの result = s1 & s2 の部分を、result = s1 + s2 に書き換えたらどうなるでしょうか?
+ は「くっつける(OR)」なので、重なっている部分だけでなく、2つの球が雪ダルマ(あるいはダンベル)のように繋がった形が表示されます。
「足し算(+)」と「共通部分(&)」の違いを、ぜひ画面上で見比べてみてください。
^演算子の使い方補足です。
参考資料
追記:練習帳です。

