1. KTakahiro1729

    No comment

    KTakahiro1729
Changes in body
Source | HTML | Preview
@@ -1,195 +1,64 @@
-Pythonを使ってBlenderでできる事を、出題->解答の形式でまとめています。
+# レシピ一覧 (Python for Blender クックブック)
+Pythonを使ってBlenderでできる事をまとめています。解説もあります。
+[はじめに](https://qiita.com/KTakahiro1729/items/5de5f60982af37d23aa0)
-# はじめに
-Blenderってたまに面倒臭いですよね?
-Pythonで自動化しちゃいましょう!
-
-# レシピ一覧
-[レシピ一覧用ページ](https://qiita.com/KTakahiro1729/items/57f4e1f5495c5e54d431)
+# 簡潔な一覧
## 3D操作
- [一辺の大きさが1の立方体を追加する](https://qiita.com/KTakahiro1729/items/fdd904e151ebd56ea361)
- [デフォルトキューブをz方向に1動かす](https://qiita.com/KTakahiro1729/items/71f1e2a2f0859ea5b158)
- [メッシュの名前をオブジェクトと同じにする](https://qiita.com/KTakahiro1729/items/3a30d78a43c555de3bda)
- [「数字->新名」の対応を元に、「Bone_L.数字」を「新名_L」に改名する(正規表現)](https://qiita.com/KTakahiro1729/items/5c5724b091ff820ccfa5)
-# 使い方
-## 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文法の難易度が★☆☆☆☆~★★★★★で表されています。
-下にある各難易度のサンプルコードが理解できたら、文法上は問題ないでしょう。
-
-### ★☆☆☆☆のサンプルコード
-
-```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を使った出力
-- コメント
-- 型の変換
-- リスト、辞書、タプルの利用
-- プロパティー、メソッドの利用
-- ライブラリーのインポート
-
-### ★★☆☆☆のサンプルコード
-
-```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です。(例外は明記します)
-どこかに使いたければ、勝手に使ってください。
-## 編集リクエスト
-編集リクエストは歓迎しますが、その内容には上記ライセンスが適用される事を了承したものと見なします。
+# 詳細
+## 3D操作
+
+### [一辺の大きさが1の立方体を追加する](https://qiita.com/KTakahiro1729/items/fdd904e151ebd56ea361)
+Pythonの難易度: ★☆☆☆☆
+
+#### 動機
+普通の立方体追加で追加される立方体は一辺の長さが2です。
+スクリプトを使うことで、最初から長さ1の立方体を追加してみましょう。
+
+#### 細かい仕様
+- オブジェクトモードのとき、一辺の長さが1の立方体を追加してください。
+- スケールは1にしてください。
+- 3Dカーソルの位置に立方体を追加してください。
+
+### [メッシュの名前をオブジェクトと同じにする](https://qiita.com/KTakahiro1729/items/3a30d78a43c555de3bda)
+Pythonの難易度: ★★☆☆☆
+
+#### 動機
+オブジェクトの名前を変更しても、メッシュの名前までは変わりません。
+いちいち変えるのも面倒くさいので、Pythonにやってもらいましょう。
+
+#### 細かい仕様
+- 様々な種類のオブジェクト(メッシュ、ランプ、カメラなど)があるファイルを使ってください。
+- 一つのメッシュデータが複数のメッシュオブジェクトに共有されている状態は考慮しなくてもいいです。
+ - 共有されている時のコードも書いてあります。
+- メッシュオブジェクトの中のメッシュデータの名前を、メッシュオブジェクトと同じにしてください。
+
+### [デフォルトキューブをz方向に1動かす](https://qiita.com/KTakahiro1729/items/71f1e2a2f0859ea5b158)
+Pythonの難易度: ★☆☆☆☆
+
+#### 細かい仕様
+- 開いたばかりのファイルを使ってください
+- オブジェクトをまるごとz方向に移動してください(原点の位置を移動する)
+
+### [「数字->新名」の対応を元に、「Bone_L.数字」を「新名_L」に改名する(正規表現)](https://qiita.com/KTakahiro1729/items/5c5724b091ff820ccfa5)
+Pythonの難易度: ★★★★★
+
+#### 動機
+左右対称のリグを作るとき、ボーンの名前に左右を表す`_L`や`_R`が付いていると便利です。
+しかし、`X-Axis Mirror`を有効にボーン編集をしても、`Bone_[LかR].[三桁数字]`というボーンが作られてしまいます。(「001」のように0埋めがされた数字も三桁数字と表現しています)
+これを`Bone.[三桁数字]_[LかR]`に名付け直せると便利ですね。
+また、`.001`が付いているボーンは`Sholder`に、`.002`なら`Arm`のように、数字に基づいて改名してみましょう。
+
+#### 細かい仕様
+- 名称変更を施したいアーマチュアがオブジェクトモードでアクティブだとします。
+- アーマチュアのボーンの名称は「`Bone_L.[三桁数字]`/`Bone_R.[三桁数字]`/その他」のいずれかが含まれています。この内、`.[三桁数字]`は省略されている時もありますが`.000`と同じとみなします。
+- `["Sholder", "Arm", ...]`のような、新しいボーンの名称がリストの形式で定義されています。(以下、`name`)
+- `Bone_L.i`は`[nameのi番目の要素]_L`に、`Bone_R.i`は`[nameのi番目の要素]_R`に改名してください。
+- `_L`や`_R`の一方しかない場合も、改名してください。
+- その他のボーンは名前を変えないでください。
+