1. KTakahiro1729

    Posted

    KTakahiro1729
Changes in title
+Python for Blender クックブック ~はじめに~
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,222 @@
+Pythonを使ってBlenderでできる事を、やること->サンプルコードの形式でまとめています。また、雑な解説も添えてあります。
+
+
+# はじめに
+Blenderってたまに面倒臭いですよね?
+Pythonで自動化しちゃいましょう!
+
+<!-- ## Python for Blender 8つ道具
+### 1. コンソール
+BlenderでPythonを使う場合、Blenderの立ち上げをコンソールから開く必要があります。
+TODO
+### 2. 内蔵インタープリター
+TODO
+### 3. 内蔵テキストエディター
+TODO
+### 4. infoの履歴
+TODO
+### 5. マウスホバー
+TODO
+### 6. <kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>Shift</kbd> + <kbd>C</kbd>
+TODO
+### 7. template
+TODO
+### 8. Edit Source
+TODO
+## 便利なサイト
+TODO
+-->
+
+# レシピ一覧
+## 3D操作
+### [3D空間に辺の長さが1の立方体を追加する](https://qiita.com/KTakahiro1729/items/fdd904e151ebd56ea361)
+#### スクリプトとして実行
+Pythonの難易度: ★☆☆☆☆
+タグ: #基本操作
+
+#### コマンドを登録して実行(及び改良)
+Pythonの難易度:★★★☆☆
+
+### [メッシュの名前をオブジェクトと合わせる](https://qiita.com/KTakahiro1729/items/3a30d78a43c555de3bda)
+Pythonの難易度: ★★☆☆☆
+タグ: #基本操作
+
+# 使い方
+## Q&A
+### Q. Blenderのバージョンは?
+Blender2.79b用、Blender2.80用のコードをそれぞれ記載しています。
+Blender2.80のコードはない場合もあります。
+### Q. Pythonのバージョンは?
+Blender2.79bはpython3.5を使います。
+Blender2.80はpython3.7を使います。
+### Q. レシピはどうやって使うの?
+サンプルコードを見ずに実装してみても、さっさと答えを見てもいいです。
+### Q. どのレシピをやったらいいの?
+難易度やハッシュタグ(例:`#メッシュ`)を参考にして下さい。
+ページ内検索とか便利です。
+### Q. OOのサンプルコードが欲しい
+Qiitaコメント欄や私のツイッターアカウント(@KTakahiro1729)でリクエストを受け付けています。
+できるとも限りませんし、作成物は全てここで公開しますが、それでよければお気軽にどうぞ。
+
+
+## Pythonの難易度
+各出題には、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, "文字列": b}
+print(d, d[1],
+ list(e.keys()), e["文字列"][0])
+
+import datetime as d
+print(d.datetime.now())
+```
+
+- 数値計算
+- 変数への代入
+- 関数の使用
+- printを使った出力
+- コメント
+- 型の変換
+- リスト、辞書の利用
+- メソッドの利用
+- ライブラリーのインポート
+
+### ★★のサンプルコード
+
+```python
+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レベル)
+
+### ★★★のサンプルコード
+
+```python
+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("完")
+```
+
+- オブジェクト指向
+- ファイル入出力
+
+
+## ★★★★のサンプルコード
+- 細かめな仕様の把握
+ - リスト内包表記
+ - lambda関数
+ - デコレーター
+ - など……
+- numpy, pandasの基礎的な利用
+- 数IIBより高度な数学の知識
+ - 行列
+- 基本的なコンピューターの知識
+ - .csv
+ - ファイルのパス
+
+## ★★★★★のサンプルコード
+- ★★★★に含めるのに気がひけるもの
+ - メタプログラミング
+- 高度なコンピューターの知識
+ - 抽象構文木
+ - ソケット通信
+
+
+# ライセンス
+## ソースコード
+GPLのライブラリー(bpyとかbmeshとか)をインポートしている場合は、当然GPLです。
+その他は基本的にMITライセンスです。
+
+## 本文・画像・サンプルファイルなど
+ソースコード以外はCC0です。(例外は明記します)
+どこかに使いたければ、勝手に使ってください。
+
+## 編集リクエスト
+編集リクエストは歓迎しますが、その内容には上記ライセンスが適用される事を了承したものと見なします。