はじめに
ノードのカスタマイズがしたくなったので関連するっぽいドキュメントを読んでみます
参照元
File not found · nortikin/sverchok
Sverchok. Contribute to nortikin/sverchok development by creating an account on GitHub.
Contribute
私達のワークフロー
- あなたは自由にコードを書くことができますが、Pep8に従い既存のノードのスタイルを使ってください。あなたが使っているエディターでPyLintが使えるならPep8を使ってください。私達のコードベースから”Pyling ignore”を検索してください、そこに私たちが日常的に意識的に無視するルールがあるからです。しかしPep8 の大部分は純金であり、あなたのコードを受け入れるためのパスの一部です。
- アジャイルソフトウェア開発 – http://en.wikipedia.org/wiki/Agile_software_developmentを見てください
- 適切なライセンス (GPL) と書面による同意や権利があれば、他のアドオンからアイデアを実装しても構いません。あなたが書いていない無属性のコードは受け付けません。
- 何かを作成するために多くの時間を費やす前に、前もって私達に伝えることをおすすめします。時にすでに存在している場合もあったり、すでにそのことについて計画している場合があります。
- ブレインストーミングを行い、解決策を議論します。私たちはイシュートラッカーをよく利用しており、新しいコードの正直な意見や解釈を提供します。私たちはアーティストであり技術者であり、コードとBlenderを使って複雑で興味深い問題を解決しようとしています。私たちは最適なコードに関心を持っていますが、作業中のものや斬新な解決策も受け入れています。
- あなたのコードをテストし、提案された変更点をテストします。意味のあるときにはいつでもあなたのコードの自動テストを書いてください。詳細はこちらのドキュメントを参照してください。
してはいけないこと
これらのことを行うと古いレイアウトが壊れたり意図しない結果となります
- ノードの
bl_idname
の変更 - ソケットの削除またはリネーム
- upgrade.pyの更新をせずに既存のソケットの間に新しいソケットを追加する。self.inputsまたはself.outputsにソケットを追加する時は末尾に追加する事を私達は好みます
- ノードプロパティの
current_mode
は予約語です。使用しないでください - 他にも予約されたプロパティ名があり、Blenderのドキュメントのbpy.types.Node baseclassや、Sverchokのカスタムノードミキシンクラスを参照してください。
役に立つヒント
BlenderコンソールでSverchokシステムを簡単にインスペクトできます
import sverchok print(dir(sverchok.nodes))
ノードを作成する
- アイデアをテストするためにスクリプトノードで作成する
- issueまたはブランチを作成、またはマスタをフォークして私達にそれを見せてください。もしそれがかなり複雑であれば協力者として協力して貰う場合があります。
- 類似した既存のノードをコピーし、それをベースとして開始する
- クラス名、bl_idname、docstring、そして登録セクションを変更
- bl_idnameをmenu.pyの適切なカテゴリへ追加
- マッチしたカテゴリへファイルを追加:
..sverchok/nodes/whatever_existing_category/your_file.py
- Pullリクエストの作成
いくつかの規則
- 全てのクラスは Blenderクラスのサブクラスです。接頭辞に Svを付けてください。例えば SvColor
- node_tree.pyはノードツリーのベースクラスを含みます、おそらくコレクションプロパティまたは新しいソケットを生成するでしょう。ここから作成してください。(全くの新しいタイプのソケットの場合はまず教えて下さい)
- data_structure.pyは次のような魔法があります:
- 定義の更新。これはソケットとノードの更新にかなりよく動作しています
- いくつかのbmesh関数
- cache ハンドルを使って操作する。私達はノードデータを操作するために使用します。これは辞書でノード名、ノードツリー名とデータをもっています
- レベル定義をリストアップします。必ず使用する必要があります
- データ修正によってカオスなデータから4次元レベルのリストを作成します。f/iまたは[[f/i]]ではなく[floats/integers]のようになります
- usage: dataCorrect(data, nominal_dept=2)
- データスポイル – 深さの値のためにリストを台無しにする
- usage: dataSpoil(data, dept)
- リストのレベル – ネストレベルを調べる
- usage: levelsOflist(list) – リストのレベルを返す [] は2, [[]]は3
- データ修正によってカオスなデータから4次元レベルのリストを作成します。f/iまたは[[f/i]]ではなく[floats/integers]のようになります
- マトリックス定義 – matrics/verticesで何かを作る。色々書いてあるが難解すぎて難しい
- リスト定義色 色々書いてあるが難解すぎて難しい
- ソケット更新 – ノード内で変更可能なソケットを使用できるようにする。色々書いてあるが難解すぎて難しい
- 複数ソケット multi_socket(node, min=1) ListJoin、ListZip、ConnectUVなどで使用している。色々書いてあるが難解すぎて難しい
- Utilsフォルダーには下記があります
- CADmodule – 線の交差を提供する
- indexViewerDraw – INDX viewノードのOpenGL描画を提供する
- sv_bmeshutils
- sv_tools – これは、更新ボタン、アップグレードボタン、およびレイヤー表示ボタンのノード領域のツールボックスです。また、このプロセスを自動化するためにノードとアップグレード機能を更新します。
- text_editor_plugins
- text_editor_submenu – SNのテンプレート
- upgrade – 古いレイアウトを壊さないようにするため。。新しい簡略化されたインターフェースのオーバーライドを定義します。draw_buttons()でなにかのプロパティを変更した場合、古いレイアウトを壊さないようにここに新しいプロパティを持ってくる。
- viewer_draw – ViewerDrawのOpenGLを扱ったり描画したりする為。
- voronoi – 対応するノードのボロノイまたは泥ねーの為
- Node scripts フォルダーはすべてのSNのテンプレートの為のもの(utils-eを見てください)
- Nodes フォルダーはカテゴライズされたノードの為のもの。 init.pyにアタナのノードを記載するのを忘れないようにしてください
- enumerateプロパティを使用するには、アイテムにインデックスを割り当てる必要があります。追加されたアイテムのインデックスは変更しないでください。
さらに機能を追加すると機能しなくなります。 - 多機能でなくても達成できる多くのノードを作らないでください
- レベルを使ってください。それがどのように動作するかを知ってください。drawにあるlevel intPropertyを使って操作するレベルを定義してください。私達は標準で1,2,3、そして追加の4を操作します。あなたのレベルが制限されている事を確認してください。levelsOflistによって最大値としてドロップダウンされていることを確認してください
- 出力と同様にノードの定義更新の順番を保ってください。出力ソケットが組み立てられている場合のみ入力をカウントします
- Todoリストを見て現在何が起きているか、また何ができるかを知ってください。あなたのノードを使いテストしてください
- 他のノードで進めるのに必要以上に自動でラッピングしたり、ラッピングのレベルを低くしたりする理由はありません。今の所、単純なデータの場合は0,1,2,3となり。辺、頂点、マトリックス等の実データは[0,1,2,3]やよりネストされた形になります。しかし少なくないネストとラッピングは根拠のある理由を提示する必要があります
- ソケットがupdate(self)でリンクされているかどうかテストするためにis_linkedを使わないでください。process(self)がis_linkedを使っています。
- ノードを変更するには次に従ってください
- 古いノードファイルを./old_nodesに置いて、init.pyの中の対応するbl_idnameをテーブルに追加します。(READMEファイルもあります)。
- 新しい変更されたノードを mk2(3,4…n) として作成し、すべての変更を新しいノード、変更名、bl_idname として古いノードが置かれた場所に配置します (現在のインストラクションの ‘To create a node:’ を参照してください)。
最後に
半分以上意味がわからなかった。ハードルが高い