FreeCAD0.20の勉強動画
FreeCadの勉強はこの49個の動画を見て真似をすればOK
有難い事です。
FreeCADでDXFファイルからパーツを作る方法
[設定]でDXFファイルのインポート・オプションを設定する。 スケッチとジオメトリー結合をチェック [ファイル]の[インポート]で読み込むDXFファイルを選択 Shapeが読み込まれる。 ここでスケッチが出来るはずだが、出来ていない。
[Draft]に切り替えて、Shapeをすべて選択する。
[変更]から[ドラフトからスケッチへ]でスケッチを作成。
Sketchが出来上がる。
Shapeはもう不要なのですべて選択して[削除]する。
Sketchを押し出すために[ボディーを作成]を押す。
[XY_Plane]を選択して[OK]を押す。
Sketchの上にBodyが出来たので[パッド]で押し出す。
パッドパラメータに押し出し量を設定して[OK]を押す。 Partが完成する。
wxPythonでマウスカーソルをbusyにする方法
カーソルを矢印からグルグル回りのBUSYにするには
wait = wx.BusyCursor()
元に戻すには
del wait
wxPythonで自作ダイアログを表示
wxPythonでファイルダイアログ - メグタンの何でもブログ の続き
wxformbuilderでオリジナルダイアログを作成
wxformbuilderでFormsの左から3番目のDialogを追加
その下にLayoutの左端wxBoxSizerを追加
このwxBoxSizerの中に自由にボタンとかテキストボックスを配置
その下にLayoutの左端wxBoxSizerと右から2番目のwxStdDialogButtonSizerを追加
wxStdDialogButtonSizerにはOK、Cancelボタンが配置されている。
このボタンを押すとダイアログが閉じてwx.ID_OKもしくはwx.ID_CANCELが戻される。
Generate Code で画面の.pyファイルを書き出す。
設定した対応するイベント部分を本体プログラムにコピーして修正する。
Generate Code で作成したファイルはインデントがタブなので必要に応じてスペース4個に修正
本体プログラムから呼び出す
表示前にダイアログ上に表示するデータを設定
ダイアログをOKボタンで閉じた時にはデータを読み出して保存
def m_bDialogOnButtonClick( self, event ): dlg = o3dtest.MyDialog1(self) dlg.CenterOnScreen() dlg.m_textCtrl1.SetValue(self.t) # this does not return until the dialog is closed. val = dlg.ShowModal() if val == wx.ID_OK: self.t = dlg.m_textCtrl1.GetValue() dlg.Destroy()
pythonでgray16画像ファイルを読み込む方法
open3dでカラー画像と奥行き画像からポイントクラウドデータを作成する時に、RGB画像ファイルと16bitUINTグレー画像の読み込みが必要となる。
open3dには標準でこの読込み関数が定義されている。
import open3d as o3d source_color = o3d.io.read_image("../../TestData/RGBD/color/00000.jpg") source_depth = o3d.io.read_image("../../TestData/RGBD/depth/00000.png")
しかしながら
RGB画像ファイルはjpg
奥行き画像は16bitグレーのpng
と限定されている。また、日本語のファイル名でエラーとなる。
pillowを使用し、次の様にすることで日本語ファイル名に対応して、更に16bitグレーのtiffファイルの読み込みも可能となる。
import open3d as o3d from PIL import Image fn1 = "../../TestData/RGBD/color/00000.jpg" im = Image.open(fn1) source_color = o3d.geometry.Image(np.asarray(im)) #open3d形式に変換 fn2 = "../../TestData/RGBD/depth/00000.png" ima = Image.open(fn2) #int32で読み込まれる im = ima.convert("I;16") #uint16に変換 source_depth = o3d.geometry.Image(np.asarray(im)) #open3d形式に変換
また、日本語ファイル名ではエラーとなるがopencvで読み込む時には次の様になる。
import open3d as o3d import cv2 fn1 = "../../TestData/RGBD/color/00000.jpg" source_color = o3d.geometry.Image( cv2.cvtColor(cv2.imread(fn1, -1), cv2.COLOR_BGR2RGB)) fn2 = "../../TestData/RGBD/depth/00000.png" source_depth = o3d.geometry.Image(cv2.imread(fn2, -1))
opencvでは色の順番がBGRなので、ファイル読込後RGBへ変換している。 その後 以下のようにしてポイントクラウドを作り、表示する事が出来る。
rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth( source_color , source_depth , convert_rgb_to_intensity = False) cameraIntrinsic = o3d.camera.PinholeCameraIntrinsic( o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault) pcd = o3d.geometry.PointCloud.create_from_rgbd_image( rgbd_image , cameraIntrinsic) # Flip it, otherwise the pointcloud will be upside down pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]) o3d.visualization.draw_geometries([pcd]) #表示
参考 redwood-data.org