0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FreeCADのサイコロのマクロ「(その2/5) 11パターン(Gemini中断)」をAI先生に教えてもらいました。

0
Last updated at Posted at 2026-02-27

(その1/5) 展開図
(その2/5) 本ページ
(その3/5) 作成中
(その4/5) 作成中
(その5/5) 作成中

・私の質問は、わかるのに?OK部分を、勝手に変更する。また戻る。
・語彙は、私より豊富です。
・消してと言っていないのに、勝手に消して戻してと言ったら、復活させましたじゃ困ります。

・文字を立体の内側に押し出していませんか

ハッとしました。ご指摘の通りです。...

???

・3−3から間違っていました。申し訳ありません。

??? Gemin3先生より

情報を記憶しました。保存した情報は設定ページでいつでも確認や削除が可能です。

以下、事例集として見て下さい。

・Ver1.0.2(2026-04-28) スクショの背景の色が変わるようです。
Screenshot 2026-04-28 12.57.01.png

00.png

・Ver0.20.0
00.png

・(新技)ソースコードの1行目にコメント行で、タイトルを入れて。

(本日の)ChatGPT先生へ

なし。

(本日の)Gemini3先生へ

「十字型(1-4-1型)」の展開図 の他のパターンを教えて下さい。11パターンですか。

(途中回答省略)

立方体の展開図 11パターン分類

  1. 「1-4-1型」 (6種類)
    ・真ん中に4つの面が並び、その上下に1つずつ面がある、最もポピュラーな形です。
    基本形(十字型): 上下に1つずつ、左右対称に近い形。
    階段形: 上の面と下の面の位置を左右にずらしたもの。
  2. 「2-3-1型」 (3種類)
    真ん中に3つの面が並び、その上下に「2つの面」と「1つの面」が分かれて付くタイプです。
  3. 「2-2-2型」 (1種類)
    階段のように、2つの面が3段にわたって連なっている形です。
  4. 「3-3型」 (1種類)
    3つの面が2段に並んでいる、非常にコンパクトな形です。
    パターン別:座標リストの例
    FreeCADのスクリプトで、特定のパターンに変更したい場合、以下のインデックス(x, y)を unfold_layout に当てはめてみてください。分類
    分類 レイアウトの座標(x, y)の例
    1-4-1型 (Z字) (0,0), (1,0), (2,0), (3,0), (0,1), (3,-1)
    2-2-2型     (0,0), (1,0), (1,1), (2,1), (2,2), (3,2)
    3-3型 (0,0), (1,0), (2,0), (2,1), (3,1), (4,1)
上記の参考文献を教えて下さい。wikipediaにありますか。

(雑に、回答コピーです。)

はい、ご指摘の通りです。立方体の展開図が11種類であることや、その分類(1-4-1型など)については、Wikipediaの「展開図」または「正六面体」の項目に詳しく記載されています。
数学的には「ポリオミノ(特に6つの正方形をつなげたヘキソミノ)」の一種として研究されており、11種類という数字はそこから導き出されたものです。
・Wikipediaでの参照先
https://ja.wikipedia.org/wiki/展開図
「正多面体の展開図」のセクションに、11パターンの画像が掲載されています。
・正六面体 (Wikipedia)
https://ja.wikipedia.org/wiki/正六面体
立方体の性質の一つとして、展開図のバリエーションが紹介されています。
11パターンの内訳(参考)
Wikipediaや数学の教科書でよく使われる分類は以下の通りです。
型(グループ)種類数 特徴
1-4-1型6種類中央に4つ並び、上下に1つずつ。最も一般的。
1-3-2型3種類中央に3つ並び、片側に1つ、反対側に2つ。
2-2-2型1種類2個ずつが階段状にずれて並ぶ。
3-3型1種類3個ずつが互い違いに並ぶ(「馬」のような形)。

最初の立方体で、全11パターンPythonコードを教えて下さい。面番号を忘れないでね。全11パターンを一度に。

この拡張機能を有効にするには、Google Workspace に接続する必要があります。

??? 中断

(翌日の)Gemini3先生へ

・???そのまま。のためでしょうか。
・延々とです。省略。

大変失礼いたしました。何度も同じ過ちを繰り返し、貴重なお時間を無駄にしてしまったことを深くお詫び申し上げます。

# 立方体展開図 11パターン(1-4-1x6, 2-3-1x3, 2-2-2x1, 3-3x1)最終確定版
import FreeCAD as App
import Part
import Draft
import os

def create_hexomino_nets_final_fixed():
    doc = App.activeDocument()
    if not doc:
        doc = App.newDocument("Cube_Net_11_Verified")

    size = 20.0
    f_size = 8.0         # 面番号サイズ
    l_size = 10.0 * 1.5  # 見出しサイズ(1.5倍)
    sx, sy = 220.0, 220.0 # 重ならないよう間隔を広く

    # フォントパスの自動探索(OSに合わせて変更)
    f_paths = [
        "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
        "/usr/share/fonts/fonts-go/Go-Regular.ttf",
        "C:/Windows/Fonts/arial.ttf",
        "/System/Library/Fonts/Helvetica.ttc"
    ]
    f_path = ""
    for path in f_paths:
        if os.path.exists(path):
            f_path = path
            break

    cols = [(1.0, 0.0, 0.0), (0.0, 0.8, 0.0), (0.0, 0.0, 1.0),
            (0.9, 0.9, 0.0), (1.0, 0.5, 0.0), (0.6, 0.0, 0.6)]
    lbls = ["1", "6", "2", "5", "3", "4"]

    p = []
    # --- 1段目: 1-4-1型 (6種) ---
    p.append(("1-4-1 (1)", [(0,0),(1,0),(2,0),(3,0),(1,1),(1,-1)]))
    p.append(("1-4-1 (2)", [(0,0),(1,0),(2,0),(3,0),(1,1),(2,-1)]))
    p.append(("1-4-1 (3)", [(0,0),(1,0),(2,0),(3,0),(1,1),(3,-1)]))
    p.append(("1-4-1 (4)", [(0,0),(1,0),(2,0),(3,0),(0,1),(3,-1)]))
    p.append(("1-4-1 (5)", [(0,0),(1,0),(2,0),(3,0),(0,1),(2,-1)]))
    p.append(("1-4-1 (6)", [(0,0),(1,0),(2,0),(3,0),(0,1),(1,-1)]))

    # --- 2段目: 2-3-1型 (3種) ---
    # (A) 横3連[(0,0)-(2,0)] に対して 左端上に2連[(0,1),(0,2)]、右端下に1面[(2,-1)]
    p.append(("2-3-1 (A)", [(0,0),(1,0),(2,0), (0,1),(0,2), (2,-1)]))
    # (B) 横3連[(0,0)-(2,0)] に対して 中央上に2連[(1,1),(1,2)]、左端下に1面[(0,-1)]
    p.append(("2-3-1 (B)", [(0,0),(1,0),(2,0), (1,1),(1,2), (0,-1)]))
    # (C) 横3連[(0,0)-(2,0)] に対して 中央上に2連[(1,1),(1,2)]、右端下に1面[(2,-1)]
    p.append(("2-3-1 (C)", [(0,0),(1,0),(2,0), (1,1),(1,2), (2,-1)]))

    # --- 3段目: 2-2-2型 (1種) ---
    p.append(("2-2-2",     [(0,0),(1,0), (1,1),(2,1), (2,2),(3,2)]))

    # --- 4段目: 3-3型 (1種) ---
    p.append(("3-3",       [(0,0),(1,0),(2,0), (1,1),(2,1),(3,1)]))

    for idx, (name, layout) in enumerate(p):
        if idx < 6: r, c = 0, idx
        elif idx < 9: r, c = 1, idx - 6
        elif idx < 10: r, c = 2, idx - 9
        else: r, c = 3, idx - 10
            
        bx, by = c * sx, -r * sy
        
        # 見出し(文字高さ 1.5倍)
        if f_path:
            try:
                t = Draft.make_shapestring(name, f_path, l_size)
                t.Placement = App.Placement(App.Vector(bx, by + 80, 0), App.Rotation())
            except: pass

        # 面の描画
        for i, (lx, ly) in enumerate(layout):
            ux, uy = bx + lx * size, by + ly * size
            rect = Draft.make_rectangle(size, size)
            rect.Placement = App.Placement(App.Vector(ux, uy, 0), App.Rotation())
            rect.ViewObject.ShapeColor = cols[i]
            rect.ViewObject.LineColor = (0.0, 0.0, 0.0)
            
            # 面番号
            if f_path:
                try:
                    n = Draft.make_shapestring(lbls[i], f_path, f_size)
                    n.Placement = App.Placement(App.Vector(ux+size/4, uy+size/4, 0.1), App.Rotation())
                    n.ViewObject.ShapeColor = (0.0, 0.0, 0.0)
                except: pass

    doc.recompute()
    print("Execution completed successfully.")

create_hexomino_nets_final_fixed()

(翌々日の)Gemini3先生へ

展開図から立体(Solid)を推測し、それを3Dで描画するのは非常に面白い試みですね。

(延々とです。)

接続関係は守って。
立体は一個ずつ組み立てて。コピーの手抜きはしないで。

🛠️ 手抜きなし:展開図の面を1つずつ組み立てるスクリプト
???

「手抜きはしない」というお言葉、真摯に受け止めました。...

立体の番号が間違っています。同じになるはずがありません。

...まさに「手抜き」の状態になっていました。...

ソースコードの1行目にふさわしいコメントを追加して。忘れないでね。

(延々とです。)

拡大しても番号が消えてしまうのは、FreeCADの描画エンジンにおいて、拡大率が上がると「非常に薄い空間」にあるオブジェクト(面と文字)の前後関係が計算しきれず、文字が面の下に潜り込んでしまう(ニア・クリッピングやZファイティングの一種)ことが原因です。
これを解決するために、**「文字を単なる薄い面ではなく、わずかに厚み(0.1mm)のあるソリッドにする」**ことで、描画エンジンに「これは面よりも手前にある物体だ」と明確に認識させ、拡大しても消えないように修正しました。

(延々とです。)

何度も修正が及んでしまい、大変失礼いたしました。
原因を突き止めたところ、FreeCADの「面(Rectangle)」と「文字(ShapeString)」が同じ平面にある場合、カメラの角度や拡大率によって**面が文字を飲み込んでしまう(Zファイティング)**現象が、想定以上に強く発生していました。

ご指摘の通り、「展開図は厚みがないのに、立体で厚みが出るのはおかしい」というのは全くその通りです。立体側も厚みを持たせず、かつ文字の向き(表裏)を正しく外側に向けるために、配置計算を根本から整理しました。

立体の上面の番号の定義を教えて下さい。
  1. 基準面(底面)の定義
    プログラム内の以下の行で、展開図の最初(インデックス 0)の正方形を基準としています。
    ...

ご指摘ありがとうございます。**「文字の位置を正方形の中心にする」こと、および「文字の向きを一貫してY軸方向(展開図の正立方向)に揃える」**ための最終調整を行いました。
...

立体全部の上面を番号1 にして下さい。

いつもの? sympyの実行環境と 参考のおすすめです。

・最初のページの末尾を見て下さい。

いつもと違うおすすめです。

・最初のページの末尾の共通編を見て下さい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?