コンテンツにスキップ

付録

押出し(Extrude)の例

import Part
from FreeCAD import Base

# ドキュメントの作成
doc = App.newDocument()

# 線分の定義
edges = [Part.Edge(Base.Vector(0, 0, 0), Base.Vector(10, 0, 0)),
         Part.Edge(Base.Vector(10, 0, 0), Base.Vector(10, 5, 0)),
         Part.Edge(Base.Vector(10, 5, 0), Base.Vector(0, 5, 0)),
         Part.Edge(Base.Vector(0, 5, 0), Base.Vector(0, 0, 0))]

# 線分から面の作成
face = Part.Face(edges)

# 面を3次元空間に投影して立体を作成
extrusion_vector = Base.Vector(0, 0, 10)
solid = face.extrude(extrusion_vector)

# ドキュメントに追加
doc.addObject("Part::Feature", "Solid").Shape = solid

# ビューの更新
Gui.updateGui()

このスクリプトは、FreeCADで断面形状を3次元空間に投影して立体を作成する方法を示している。extrudeメソッドを使用して、指定された方向に立体を押し出す。

ロフト(Loft)の例

ロフトは複数の断面形状を連続的に投影して立体を作成する。

import FreeCAD as App
import Part
from FreeCAD import Base

# ドキュメントの作成
doc = App.newDocument()

# 線分の定義
edges1 = [Part.Edge(Base.Vector(0, 0, 0), Base.Vector(10, 0, 0)),
          Part.Edge(Base.Vector(10, 0, 0), Base.Vector(10, 5, 0)),
          Part.Edge(Base.Vector(10, 5, 0), Base.Vector(0, 5, 0)),
          Part.Edge(Base.Vector(0, 5, 0), Base.Vector(0, 0, 0))]

edges2 = [Part.Edge(Base.Vector(0, 0, 10), Base.Vector(10, 0, 10)),
          Part.Edge(Base.Vector(10, 0, 10), Base.Vector(10, 5, 10)),
          Part.Edge(Base.Vector(10, 5, 10), Base.Vector(0, 5, 10)),
          Part.Edge(Base.Vector(0, 5, 10), Base.Vector(0, 0, 10))]

# 線分から面の作成
face1 = Part.Face(edges1)
face2 = Part.Face(edges2)

# ロフトを作成(第2引数に True を指定するとソリッドになります。シェルの場合は False または省略)
loft = Part.makeLoft([face1, face2], True)

# ドキュメントにシェイプを追加して画面に表示
feature = doc.addObject("Part::Feature", "Loft")
feature.Shape = loft

# ビューの更新
Gui.updateGui()

見た目全く形状の違うものをロフト(Loft)でつなげようとすると失敗する。

翼素の基本的な形状

翼素の基本的な形状は以下のようになる。この形状は流体解析や空力中心をもとめるために使用される。 理論的な形状であり、翼型データベースとあわせて理解する。

import numpy as np
import matplotlib.pyplot as plt

def airfoil(x, a=0.1):
    # 余弦関数を用いてなめらかな翼型(厚み分布)を定義
    y = a * (1 - np.cos(2 * np.pi * x)) / 2
    return y

# 弦長に沿ったx座標の生成 (0 から 1 まで)
x = np.linspace(0, 1, 500)
y = airfoil(x)

# 上面・下面のプロット作成
plt.figure(figsize=(10, 4))
plt.plot(x, y, label="Upper Surface", color="blue")
plt.plot(x, -y, label="Lower Surface", color="red")
plt.title("Airfoil Profile (Basic Shape)")
plt.xlabel("x / c")
plt.ylabel("y / c")
plt.axhline(0, color='black', linewidth=0.8, linestyle='--')
plt.grid(True)
plt.axis('equal')
plt.legend()
plt.show()

Ubuntuでsnapバージョンの不一致がでたときの対処

$ sudo snap revert kf6-core24
kf6-core24 reverted to 6.11.1-6.27.0-6.7.0-26.04.2