【FreeCAD使い方講座】Pythonコンソールから操作する方法③ ~ 翼形状をスクリプトで生成する
※ 当ページには【広告/PR】を含む場合があります。
2021/02/15
2022/08/18
DraftからPartへ ~ ワイヤーモデルからソリッド化まで
アップグレード
ダウングレード
エッジ
ワイヤー
フェイス
Draftオブジェクトの変換
エッジ
ワイヤー
フェイス
シェル
エッジ:
点か辺のどちらかの1つのオブジェクト。
これ以上は分解できない最小の構成要素
ワイヤー:
複数のエッジをグループ化したユニットを表すオブジェクト
フェイス:
閉じたワイヤーによって面を定義したオブジェクト
シェル:
複数のフェイスで閉じた空間を定義したオブジェクト

ダウングレード
アップグレード
アップグレード

アップグレードの変換則
変換前の状態 | 変換後 |
---|---|
複数のエッジ(ただし切断していない) | 閉じたワイヤー |
開いたワイヤー | 閉じたワイヤー |
閉じたワイヤー | (一つの)フェイス |
複数のフェイス(同一平面) | 和集合として統合された一つのフェイス |
複数のフェイス(立体的に閉じている) | シェル(閉じたソリッド) |
ダウングレード

変換前の状態 | 変換後 |
---|---|
シェル(閉じたソリッド) | シェルを構成するフェイスに分解 |
フェイス | フェイスを構成するワイヤー |
複数のフェイス | 1番目のフェイスから2番目以降のフェイスで差集合をとった一つのフェイス |
ワイヤー | ワイヤーを構成するエッジに分解 |
翼形状を作る ~ 手動編
'blade'

points = [FreeCAD.Vector(20.0,0.0,0.0),FreeCAD.Vector(-20.0,10.0,0.0),FreeCAD.Vector(-24.0,0.0,0.0),FreeCAD.Vector(-19.0,-7.0,0.0),FreeCAD.Vector(20.0,0.0,0.0)]
bez = Draft.makeBezCurve(points,closed=False,support=None)
Draft.autogroup(bez)

Draft.downgrade(FreeCADGui.Selection.getSelection(),delete=True)

Draft.clone(FreeCAD.ActiveDocument.Edge)

FreeCAD.getDocument("blade").getObject("Clone").Placement = App.Placement(App.Vector(0,0,64),App.Rotation(App.Vector(0,0,1),0))
Part


App.getDocument('blade').addObject('Part::Loft','Loft')
App.getDocument('blade').ActiveObject.Sections=[App.getDocument('blade').Edge, App.getDocument('blade').Clone, ]
App.getDocument('blade').ActiveObject.Solid=True
App.getDocument('blade').ActiveObject.Ruled=False
App.getDocument('blade').ActiveObject.Closed=False

Shaded

FreeCADGui.getDocument("blade").getObject("Loft").DisplayMode = u"Shaded"
FreeCAD.getDocument("blade").getObject("Clone").Placement = App.Placement(App.Vector(0,0,32),App.Rotation(App.Vector(0,0,1),18))
FreeCAD.getDocument("blade").getObject("Clone").Scale = (0.50, 0.50, 1.00)

Pythonスクリプトの作成
import FreeCAD
import FreeCADGui
import Draft
import Part
App.newDocument("blade")
points = [FreeCAD.Vector(20.0,0.0,0.0),FreeCAD.Vector(-20.0,10.0,0.0),FreeCAD.Vector(-24.0,0.0,0.0),FreeCAD.Vector(-19.0,-7.0,0.0),FreeCAD.Vector(20.0,0.0,0.0)]
bez = Draft.makeBezCurve(points,closed=False,support=None)
Draft.autogroup(bez)
Draft.downgrade(FreeCADGui.Selection.getSelection(),delete=True)
Draft.clone(FreeCAD.ActiveDocument.Edge)
FreeCAD.getDocument("blade").getObject("Clone").Placement = App.Placement(App.Vector(0,0,64),App.Rotation(App.Vector(0,0,1),0))
App.getDocument('blade').addObject('Part::Loft','Loft')
App.getDocument('blade').ActiveObject.Sections=[App.getDocument('blade').Edge, App.getDocument('blade').Clone, ]
App.getDocument('blade').ActiveObject.Solid=True
App.getDocument('blade').ActiveObject.Ruled=False
App.getDocument('blade').ActiveObject.Closed=False
FreeCADGui.getDocument("blade").getObject("Loft").DisplayMode = u"Shaded"
FreeCAD.getDocument("blade").getObject("Clone").Placement = App.Placement(App.Vector(0,0,32),App.Rotation(App.Vector(0,0,1),18))
FreeCAD.getDocument("blade").getObject("Clone").Scale = (0.50, 0.50, 1.00)
FreeCAD.ActiveDocument.recompute()
#👇はファイルを保存する場合に追記する
App.getDocument("blade").saveAs("[保存先までのパス]/blade.FCStd")
まとめ
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー