Takunojiの日記

自分が勉強したプログラム技術メモ

Blender Python プログラミング 〜倍率の取り方〜

前回は、点(Vertex)から面(face)を作成する方法をやりました。
今回は、簡単に倍率の取り方をやります。
「倍率の取り方」という言葉だけだと「意味わからん」となってしまいますので
今回は、以前作成した家紋のを描画するスクリプトで家紋が画面の外に行ってしまったのでそれを適当なサイズにします。

そのために「倍率」を使用します。
色々と実験したので残骸がありますが。。。
とりあえずコードです。

# 緑色の部分がOpenCv(Python)のインポート処理です。
<ソースファイルはこちら>

import os, sys, numpy as np
import bpy, bmesh

sys.path.append("/usr/local/lib/python3.6/site-packages/")

import cv2
# 読み込むイメージファイルのパス
imgPath = "/yourFolder/BlenderPython/img/kamon/mouri-motonari-kamon.png"

im = cv2.imread(imgPath,0)
thresh = cv2.Canny(im, 100, 200)
x = 0
y = 0
list = []
pickupFlg = False
addListFlg = True

tmp = 0
# 作成モードを切り替え(OBJECT or EDIT)

bpy.ops.object.editmode_toggle()
#ハンドル用メソッド
def judge(col, tmp):
pickupFlg = (not col == tmp)
tmp = col
return pickupFlg
# 対象の座標をリストに追加する
def isAddList(addListFlg, pickUpFlg, row, index):
# pickUpFlg = judge(row[index],tmp)
if pickUpFlg and addListFlg:
addListFlg = judge(row[index + 1], tmp)
return pickUpFlg

# 表示する領域のサイズ
print_size = 2
# イメージの倍率(X座標, Y座標)
x_mag = print_size / len(thresh)
y_mag = print_size / len(thresh[0])
first_x = 0
first_y = 0

for row in thresh:
for col in row:
# 座標をリストに登録するかのフラグ
pickupFlg = judge(col,tmp)
# リストに追加するかのフラグ
addListFlg = isAddList(addListFlg, pickupFlg, row, x)
if pickupFlg:
if addListFlg:
first_x = x * x_mag
first_y = -(y * y_mag)
list.append*1
addListFlg = not addListFlg
x += 1
x = 0
y += 1

#print(list)
ob = bpy.context.object
# エディットモードに設定

bpy.ops.object.mode_set(mode='EDIT')
bm = bmesh.from_edit_mesh(ob.data)

print(len(list))
print(list[0])

for co in list:
# 点の作成処理
bm.verts.new(co)

# 編集を終了する(確定する)
bmesh.update_edit_mesh(ob.data)
#bpy.ops.object.mode_set(mode='OBJECT')

 上記のコードで赤字の部分が倍率を指定している部分になります。
イメージファイルのサイズ(縦と横)に対して、それぞれ倍率
→指定する大きさ / 縦 or 横の最大サイズ
  例: 600 x 1200 pix の画像サイズならば縦=600 横=1200で
     取得したX座標 * ( 1 / 600) ならば表示する領域のX座標の最大(一番右)が1

     同様にY座標 * (1 / 1200) なので表示する領域を変数にしてやると。。。
     結局表示領域の大きさをいじってやれば表示する大きさも変更できます。
   →表示領域を指定する変数が倍率をコントロールします。

今日はここまで

*1:first_x
,first_y, 0