Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What is going on with this article?
@KTakahiro1729

Python for Blender クックブック ~はじめに~

More than 1 year has passed since last update.

Pythonを使ってBlenderでできる事を、出題->解答の形式でまとめています。

はじめに

Blenderってたまに面倒臭いですよね?
Pythonで自動化しちゃいましょう!

レシピ一覧

レシピ一覧用ページ

3D操作

マテリアル操作

使い方

Q&A

Q. Blenderのバージョンは?

Blender2.79b用、Blender2.80用のコードをそれぞれ記載しています。
Blender2.80のコードはない場合もあります。

Q. Pythonのバージョンは?

Blender2.79bはpython3.?を使います。
Blender2.80はpython3.?を使います。

Q. 出題はどうやって使うの?

解いてもいいし、さっさと答えを見てもいいです。

Q. どの出題をやったらいいの?

難易度やハッシュタグ(例:#メッシュ)を参考にして下さい。
ページ内検索とか便利です。

Q. OOのサンプルコードが欲しい

Qiitaコメント欄や私のツイッターアカウント(@KTakahiro1729)でリクエストを受け付けています。
できるとも限りませんし、作成物は全てここで公開しますが、それでよければお気軽にどうぞ。

Pythonの難易度

各出題には、Python文法の難易度が★☆☆☆☆~★★★★★で表されています。
下にある各難易度のサンプルコードが理解できたら、文法上は問題ないでしょう。

★☆☆☆☆のサンプルコード

a = (4 - 1) * -1
print("aは", a + 1) # 嘘付きな出力
b = str(a)
c = min(len(b),abs(a))
d = [a, b, c]
e = {"整数": (a,abs(a)), "文字列": b}
print(d, d[1],
  list(e.keys()), e["文字列"][0])

import datetime as d
print(d.datetime.now())
  • 数値計算
  • 変数への代入
  • 関数の使用
  • printを使った出力
  • コメント
  • 型の変換
  • リスト、辞書、タプルの利用
  • プロパティー、メソッドの利用
  • ライブラリーのインポート

★★☆☆☆のサンプルコード

def fizzbuzz(i):
    """数字をもらうとfizzbuzzの結果を返す。

    数字というのはint"""
    if type(i) == int:
        pass
    else:
        try:
            i = int(i)
        except:
            print("型が変")
            return None
    if (i % 15) == 0:
        return "fizzbuzz"
    elif not (i - (i // 5)*5):
        print(i)
        return "buzz"
    elif 1- bool(i % 3):
        return "fizz"
    else: return str(i)

while True:
  max_i = input("最大値")
  if not (len(max_i)):
    continue
  max_i = int(max_i)
  break

result = []
for i in range(1,max_i + 1):
    result.append(fizzbuzz(i))

print(",".join(result))
  • 関数の作成
  • 複数行コメント
  • for文
  • if-elif-else文
  • while文
  • try-except文
  • break-continue文
  • 標準入力
  • 型の確認
  • 高度な数値計算(~数IIBレベル)

★★★☆☆のサンプルコード

import random

class Character():
    def __init__(self,name, hp=20):
        self.name = name
        self.hp = hp
        self.atk = 10
        self.isAlive = True
    def calc_damage(self):
        return int(self.atk * random.random())
    def attack(self, target):
        damage = self.calc_damage()
        target.hp -= damage
        print("{0} attacked {1} with {2} so {3} left".format(self.name, target.name, damage, target.hp))
        if target.hp <= 0:
            target.die()
    def die(self):
        self.isAlive = False
        print(self.name, "has died")

class Hero(Character):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.atk = 20
    def introduce(self):
        print ("I'm ",self.name)

class Monster(Character):
    pass

name = input("Please input name: ")
player = Hero(name)
player.introduce()
monster = Monster("monster1", 10)

turn = (player, monster)
while monster.isAlive and player.isAlive:
    turn[0].attack(turn[1])
    turn = turn[::-1]

print("".join(["完" if i == 5 else "=" for i in range(20) if i < 12]))

  • オブジェクト指向
  • ファイル入出力
  • format
  • リスト内包表記
  • 三項演算子

★★★★☆のサンプルコード

  • 細かめな仕様の把握
    • lambda関数
    • デコレーター
    • など……
  • numpy, pandasの基礎的な利用
  • 数IIBより高度な数学の知識
    • 行列
  • 基本的なコンピューターの知識
    • .csv
    • ファイルのパス

★★★★★のサンプルコード

  • ★★★★☆に含めるのに気がひけるもの
    • メタプログラミング
  • 高度なコンピューターの知識
    • 抽象構文木
    • ソケット通信

ただし、★★★★☆の知識だけで分かるように簡単な解説を加えています。

ライセンス

ソースコード

GPLのライブラリー(bpyとかbmeshとか)をインポートしている場合は、当然GPLです。
その他は基本的にMITライセンスです。

本文・画像・サンプルファイルなど

ソースコード以外はCC0です。(例外は明記します)
どこかに使いたければ、勝手に使ってください。

編集リクエスト

編集リクエストは歓迎しますが、その内容には上記ライセンスが適用される事を了承したものと見なします。

13
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
KTakahiro1729
素人ゆえ自由

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
13
Help us understand the problem. What is going on with this article?