Blender와 FreeCAD를 조합하여 Loft 기능(복수 단면을 연결하는 기능)을 작성했다
동기 부여
회사에서 사용하는 유료 CAD의 Loft 기능이 너무 멋지기 때문에 Blender와 FreeCAD를 조합하여 자작했습니다. FreeCAD만으로도 할 수 있지만, 유감스럽지만 형상이나 포인트수에 의해서 잘 연결되지 않았기 때문에, 단면을 연결하는 기능은 Blender에 맡겼습니다.
환경 만들기 (windows10)
conda install -c conda-forge freecad
conda install -c kitsune.one python-blender
하고 싶은 일
좌표(x, y, z)로 정의된 단면을 연결하여 CAD 형상을 만들고 싶다.
※CAE로 해석하기 위해서는, CAD형상이 편리하기 때문에. . . STL을 성공적으로 리메시하고 분석 할 수 있으면 좋겠다.
했던 일
sectiondata.py
import pandas as pd
df1 = pd.DataFrame([[0.0, -0.16, -1.61],
[0.0, -1.86, -1.26],
[0.0, -1.67, 0.77],
[0.0, -0.14, 1.29],
[0.0, 1.08, 1.58],
[0.0, -0.16, -1.61]],columns=["x","y","z"])
df2 = pd.DataFrame([[1.0, -0.76, -1.38],
[1.0, -1.77, -0.12],
[1.0, -1.1, 1.02],
[1.0, 0.14, 1.9],
[1.0, 0.9, 1.87],
[1.0, 1.31, 2.22],
[1.0, 0.99, -0.54],
[1.0, -0.17, -0.84],
[1.0, -0.76, -1.38]],columns=["x","y","z"])
lim=(-3,3)
df1.plot(x="y",y="z",xlim=lim,ylim=lim,linestyle='-',marker='.',title="section1")
df2.plot(x="y",y="z",xlim=lim,ylim=lim,linestyle='-',marker='.',title="section2")
【실행 결과】
blender.py
import bpy
#立ち上げ時に存在するオブジェクト(立方体)を削除
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=True)
#前処理
n1,n2 = len(df1),len(df2)#座標点の数を取得
verts = pd.concat([df1,df2]).values.tolist()#blenderで認識できるように座標点をリスト化する
faces = [[i for i in range(n1)], [i for i in range(n1,n1+n2)]]#各々の面を定義するリストを作成
#Loftの作成
mesh = bpy.data.meshes.new(name="test")
mesh.from_pydata(verts,[],faces)#点と面を作成
mesh.update
obj = bpy.data.objects.new(name="test",object_data=mesh)
scene =bpy.context.scene
bpy.context.scene.objects.link(obj)
bpy.context.scene.objects.active = obj
bpy.ops.object.mode_set(mode = "EDIT")
bpy.ops.mesh.bridge_edge_loops()#辺ループのブリッジ->ここでLoft形状が作成される
bpy.ops.object.mode_set(mode = "OBJECT")
#output
bpy.ops.wm.save_mainfile(filepath="test.blend")#blenderfileを出力
bpy.ops.export_mesh.stl(filepath="test.stl")#STLを出力
【실행 결과】
test.blender와 test.stl이 토출됩니다. 아래 그림과 같이 훌륭하게 Loft 해줍니다. Blender는 매우 우수합니다! ! !
freecad.py
import FreeCAD as APP
import Mesh
import Part
freecad = APP.newDocument("model")
meshobj = freecad.addObject("Mesh::Feature","MyMesh")
meshobj.Mesh = Mesh.Mesh("test.stl")
shape = Part.Shape()
shape.makeShapeFromMesh(meshobj.Mesh.Topology,0.100000)
freecad.addObject("Part::Feature","test").Shape=Part.Solid(shape)
freecad.removeObject(meshobj.Name)
freecad.recompute()
freecad.saveAs("test.FCStd")
Part.export([freecad.Objects[0]],"test.iges")
【실행 결과】
test.FCStd와 test.iges가 토출됩니다. CAD의 Solid가 되었습니다!
소스 코드
아래 사이트의 Loft.ipynb에 있습니다.
htps : // 기주 b. 코 m / 미오 9494 / ぉ ft_ 훗 아츠레 _ py
혼자
포인트 클라우드를 CAD화하는 유료 소프트 등을 사용할 수 있으면, 고생하지 않아도 좋을지도. . . 좋은 점이 있으면 알려주세요.
(뭐, 좋은 것도, 간단하게 사서 받을 수 없는 회사입니다만...하지만 덕분에, OpenSource에 동동 자세하게 되어 간다)
Reference
이 문제에 관하여(Blender와 FreeCAD를 조합하여 Loft 기능(복수 단면을 연결하는 기능)을 작성했다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/myao9494/items/2b1da4b4d7ea3ac714e1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)