使う時は使うような感じですが頑張れば作れそうな感じですね。
4ドルを高いととるか作るの面倒くさいか
cromeのタブモニターサイズによって開きすぎると壊滅的に小さくなりますね。
昔もコレ使ってたのですが仕様上確か勝手に閉じるとかだった気がするんですけど
それでもコレ使えるって事でご紹介。
(閉じる云々は違う奴かもしれないしどうか分かんないので…まぁ気にせず読み進めて下さい。)
cromeストアでコイツをインストールしたら速攻アイコンが追加されると思います
cromeが起動してタブに有るものはコイツが覚えてくれます。
クリックすると
こういうふうに別ウィンドウでタブが開く訳です。
多段のタブの代わりに一覧ランチャーって感じですね。
理屈に慣れたら履歴と同じような物なので視認性はこっちのほうが高いので良いと思います。
なんで使ってなかったんだろう。
基本的なzscriptでは、ZBrushは順番にコマンドを順番に実行しますが、プログラムで作業している人は、他のものが最初に実行された後にのみ可能なことを認識しています。より複雑なzscriptを書くときは、ZBrushが入る状態を予測することが重要です。そのため、スクリプトアクションを実行しようとする試みは失敗しません。 ZBrushインターフェイスの状態を確認することは、zscriptを動かすことができる1つの方法です。 さまざまな状況に対処できるようにコードを整理したいという理由があります。ユーザーに選択肢を与えます。ユーザーがファイルを選択できるようにする必要があるかもしれません。次に、選択されたファイルを処理する場所と、ユーザーが気を変えてファイルを選択しないように対処する2つの状況を処理するコードを記述する必要があります。
これが何を意味するのかは、 'これが起これば、コードはこれをしなければならない。そうでなければ、それをしなければならない'という一般的な表現である。 Ifコマンドは、これらの状況に最適です。それはかなり簡単です:
[If,/*condition to check goes here*/,
/*commands if condition true go here*/
,//else
/*commands if condition false go here*/
]//end of if command
一連のコマンドを実行する前に、編集モードでモデルが存在するかどうかをチェックしたいとします。 [変換]パレットの[編集]ボタンは、モデルが編集モードのときにのみ表示されるため、これをチェック条件として使用できます。しかし、私たちのコードでそれをどのようにテストするのですか?さて、まずEditボタンの状態について調べる必要があります。これを行うために、ノートを使用することができます。
zscriptがユーザーにメッセージを表示する方法はいくつかあります。一番便利なのがノートコマンドです。 (これはすでにzscriptのチュートリアルで説明しているかもしれません)。基本的な形式は次のとおりです。
[Note,"message to user" ,, display duration ]
(メッセージと期間の間に2つのカンマがあることに注意してください)。
ユーザーに何かを伝えたいときはいつでもノートを使うことができます。唯一の要件は、ボタンや他の 'container'タイプのコマンドの中にラップする必要があることです。
メモはメッセージを表示するので、ZBrushインターフェイスに関する情報を表示するのに使用できます。つまり、編集ボタンの状態を調べるためのテストzscriptを書くことができます。これは私たちのやり方です:
[VarDef,editMode,0] //defines a variable to store Edit mode
[IButton,"Test Edit","Test Edit button for its State", //beginning of button code
[VarSet,editMode,[IGet,Transform:Edit]] //gets value of Edit button
[Note,editMode,,3] //displays the value of Edit button for 3 seconds
] //end of button
このzscriptを試してみると、編集ボタンがオンになっているときに値が1で、オフになっているときに値が0になっていることがわかります。これを見つけたら、コードでこれらの値を使用できます。ですから、先ほど見たIfコマンドでは、次のように書くことができます:
[VarDef,editMode,0] //defines a variable to store Edit mode
[IButton,"EditMode","Display Edit Mode to User", //button start
[VarSet,editMode,[IGet,Transform:Edit]] //gets value of Edit button
[If,editMode = 1, // test value
[Note,"Edit is ON",,3] //commands for when Edit is on
, //else (when editMode is 0 and Edit button is off)
[Note,"Edit is OFF",,3] //commands for when Edit is on
]//end of If command
]//end of button
あなたがzscriptを書くのに多くの時間を費やしたら、遅かれ早かれあなたは何度も繰り返したいコードを少し持っています。これを行う方法は、Loopコマンドを使用することです。ここにあります:
[Loop,/*number of times*/,
/*commands go here*/
]//end of Loop
私たちがやる必要があるのは、繰り返したいコマンドの周りにループをラップし、コードを繰り返す回数を指定することだけです。ここに例があります:
[VarDef,counter,0] //defines a number variable called counter
[Loop,10, //loop set to 10 times
[VarSet,counter,(counter+1)] //adds 1 to the value of counter variable
[Note, counter,,1] //displays value of counter for 1 second
] //end of Loop
前に議論したときから覚えているように、変数には2つのタイプがあります。数字を格納する変数と文字列を格納する変数です。
文字列は、単語やフレーズなどの文字の単なるグループです。変数は空の文字列と呼ばれる文字列を255文字まで格納することができます。文字列内の文字を数えたときにもスペースを数えておくことが重要です。 "Hello World"というフレーズには10文字ではなく11文字があります。単一の文字列で255の制限を超えた場合、ZBrushはエラーメッセージを表示し、zscriptは失敗します。 zscriptで文字列を使うときはいつでも、 "これと同じように"二重引用符で囲むことをお勧めします。これはそれを文字列として識別するだけでなく、ZBrushがスペースを表示する際にスペースを無視しないようにします。
文字列変数を定義するには、単純に空の文字列( "")を初期値として設定します。
[VarDef,myString,""]
ある時点では、おそらく2つ以上の文字列を結合したいと思うでしょう。これは、StrMergeコマンドを使用して実行できます。StrMergeコマンドは、その名前が示すように、文字列をマージします。
[StrMerge, //first string, //second string]
コンマで区切られた最大12文字の文字列を一度にマージできますが、マージされた文字列は255文字以内でなければなりません。 ループサンプルの新しいバージョンを書くことができます:
[VarDef,counter,0] //defines a number variable called counter
[VarDef,message,""] //defines a string variable called message
[Loop,10, //loop set to 10 times
[VarSet,counter,(counter+1)] //adds 1 to the value of counter variable
[VarSet,message,[StrMerge,"The counter is now at : ",counter]] //merges string with value of counter and stores it in message variable
[Note, message,,1] //displays message for 1 second
] //end of Loop
ノートを表示したいが、メッセージの長さが255文字を超える場合があります。この問題を解決する簡単な方法があります。表示期間が-1のノートは次のノートと結合されるので、メッセージを255文字以下のチャックに分割し、チャンクを複数のノートに広げるだけです。
[Note,"This message will be displayed at the top of the next Note.",,-1]
[Note,"\nThis is the end of the message.\nThe combined Note displays for 5 seconds.",,5]
(注:上で使用された特殊文字の組み合わせ\ nは改行を作成します)。
一連の値を保存したい場合、ZScript言語はリスト変数を提供します。これは、さまざまなテクスチャ幅やファイル名のリストなどを格納するのに非常に便利です。変数は次のように定義されます:
[VarDef,textureWidth(10),0]//defines a list variable of 10 numbers
[VarDef,fileName(10),""]//defines a list variable of 10 strings
次のように、リストの1つの値を設定します。
[VarSet,textureWidth(9),1024]//sets value of list variable at index9
[VarSet,fileName(0),"Franks_Head.ztl"]//sets value of list variable at index 0
上記の例では、インデックス0の変数があることに気づいたでしょう。これはかなり正しいです。多くのプログラミング言語と共通して、ZScriptはインデックスを0から開始します。したがって、10番目のアイテムは実際にはインデックス9を持つ変数です。したがって、インデックス10はありません(10個のリスト変数の場合)、ZBrushを使用しようとするとエラーを返します。
ここまでで、zscriptingの本質を掴み、かなり複雑なzscriptを書くことができるようになりました。あなたが実験したことがあれば、コードの一部を複製する必要があることが分かっているでしょう。たとえば、異なるコマンドを実行する前に、編集モードでモデルがあるかどうかを確認するためのボタンがいくつかあるとします。ルーチンは、この種のコードの重複を減らす方法を提供します。このプロセスでは、zscriptを分かりやすくして、問題が起こったときに修正しやすくします。また、何かを変更しなければならない場合は、ルーチン内で1回だけ実行する必要があり、時間と労力を大幅に節約できます。
[RoutineDef,routine name,//defines a routine
/*commands go here*/
]//end of Routine
[RoutineDef,CheckEditButton,//defines a routine called CheckEditButton
//start of command block (a series of commands run one after another)
[VarSet,editMode,[IGet,Transform:Edit]] //gets value of Edit button
[If,editMode = 1, // test value
[Note,"Tool is in Edit mode. ZScript aborted",,3] //commands for when Edit is on
[Exit]//exits the zscript
]//end of If command
//end of command block
]//end of Routine
ファイルを扱うことができれば、zscriptの能力に大きく貢献します。ファイル操作には多くの異なるコマンドがありますが、ここではそれらのうちのいくつかしか調べません。
FileExistsは、名前付きファイルが実際にユーザーのコンピュータに存在していることを確認するのに非常に便利です。 Ifコマンドと共にFileExistsを使用することにより、名前付きファイルが存在しない場合にzscriptの停止を回避することができます。使用方法は次のとおりです。
[If,[FileExists,"MyModel.ztl"], / / test to see if file "MyModel.ztl" exists
[Note,"File is present",,3] //commands for when the file is present
, //else file isn't present
[Note,"File is missing!",,3] //commands for when the file is absent
] //end of If command
ファイルが存在するかどうかを確認することは、ファイルを何らかの方法で使用できる場合を除いてあまり役に立ちません。 FileNameSetNextは、必要なコマンドです。次の保存アクションまたはロードアクションのファイル名を設定します。特定のイメージファイルをテクスチャとしてロードするには、次のように記述します。
[FileNameSetNext,"MyTexture.psd"] //sets "MyTexture.psd" as the next file to be saved/loaded
[IPress,Texture:Load] //loads "MyTexture.psd" into the Texture palette
ファイルを指定するときには、パスを含めることが重要です。単純にファイル名がある場合(パスがない場合)、ZBrushはファイルが実行中のzscriptと同じフォルダにあるとみなします。
パスは相対パスでも絶対パスでもかまいません。相対パスの例は次のとおりです。
"MyZScriptData\Settings.zvr"
実行中のzscriptが存在するのと同じフォルダのサブフォルダである "MyZScriptData"というフォルダ内のファイル "Settings.zvr"を指定します。
絶対パスの例は次のとおりです。
"C:\Program Files\Pixologic\ZBrush3\ZScripts\MyZScript.txt"
絶対パスの問題は、ユーザーのファイルがデフォルトの場所にあることを確認できないことです。幸いにも、ZBrushは特別な形式を使用してこれを克服する手段を提供します:
"ZBRUSH_ZScripts\MyZScript.txt"
これはデフォルトのZBrushフォルダのいずれかに使用できます。
ファイルパスは変数に格納できます。単純にそれらを文字列型として定義します:
[VarDef,filePath,""]
変数はファイルとして保存することもできます。これは、zscriptが実行されるときにロードできる設定を保存する場合に特に便利です。コマンドのペアは、VarSaveとVarLoadです。 "myVariable"という名前の変数を "mySettings.zvr"という名前のファイルに保存するには、次のコードを使用します。
[VarSave,myVariable,"mySetting.zvr"]
値をロードするには:
[VarLoad,myVariable,"mySetting.zvr"]
(* .zvrはZBrushデータファイルのデフォルトのファイル拡張子です。)
リスト変数は同じ方法で保存/ロードできます。 myListVariable(10)として定義されたリスト変数の場合、リストイング変数の要素のインジケータなしでリスト変数の名前を置くだけで、保存するコードは次のようになります。
[VarSave,myListVariable,"mySetting.zvr"]
メモリブロックは、単にコンピュータメモリの塊である。彼らは非常に便利です。たとえば、ファイル形式を理解すれば、zscriptで作成されたメモリブロックを使用してファイルを読み書きすることができ、ファイルデータを直接操作することができます。しかし、これはこの簡単な紹介の範囲を超えています。ここでは、メモリブロックの用途を1つだけ検討します。それが変数の使用とどのように違うのか疑問に思うかもしれません。まあ、メモリブロックの大きな利点は、それらが永続的なものであることです。つまり、削除されない限り、ZBrushセッション全体で利用可能であるということです。変数は永続的ではなく、その値はzscriptが終了するたびにリセットされます。これは、一度に1つのzscriptまたはプラグインのみがアクティブになるため、頻繁に発生します。したがって、後で呼び出すためにzscriptに値を格納させたい場合は、メモリブロックを使用する必要があります。
ここでは、3Dモデルの位置をキャンバスに保存する例を示します。
まず、値を格納するメモリブロックを作成する必要があります。 zscriptingでは、名前を付けてそのサイズを指定することによってメモリブロックが作成されます。これを行うにはいくつかの方法がありますが、ここでは最も単純なMVarDefコマンドを使用します。このコマンドは実際には 'メモリブロック変数'を作成する単なる方法です。それは数字だけを格納することを覚えておくことが重要です。
メモリブロックの名前を付けるときは、可能な限り固有の名前を使用することをお勧めします。これは、名前が同じになった場合、他のzscriptやプラグインが間違ってメモリブロックにアクセスする可能性があるからです。あなたのイニシャルとzscriptに固有の名前を使用するのがよい方法です。たとえば、あなたの名前がJames Bondで、zscriptがZCasinoと呼ばれる場合、メモリブロックはJB_ZCasinoDataと呼ばれます。
メモリブロック名は、zscriptingの一般的な規則の例外です。大文字と小文字が区別されます。 メモリブロックを作成するためにMVarDefを使用するときには、格納する値の数を指定するだけで済みます。これは1つでも可能ですが、9つの変換値(位置、スケール、回転)があるので、この例では9を使用します。
[MVarDef,JB_ZCasinoData,9]
リスト変数と同様に、各値の 'ボックス'は、最初の値が0から始まるインデックス番号を使用して指定されます。最初のインデックスに '775'を格納するには、次のように書く:
[MVarSet,JB_ZCasinoData,0,775]
そして、9番目のインデックスに格納された値を取得するには:
[MVarGet,JB_ZCasinoData,8]
3Dモデルの変換値を取得するには、TransformGetコマンドを使用することができます。これを使ってメモリブロックの値を取得することもできますが、MTransformGetコマンドを使用する方が簡単です。これにより、値が同じ順番で取得され、メモリブロックに直接格納されます。
[MTransformGet,JB_ZCasinoData]
モデルに格納された値を設定するには、MTransformSetコマンドを使用します。
[MTransformSet,JB_ZCasinoData]
終了したメモリブロックはゴミです。それが取り除かれなければ、それは他の場所で必要とされる貴重な資源を使用しています。メモリブロックが終了するとすぐにメモリブロックを削除することをお勧めします。これのコマンドはMemDeleteです。
[MemDelete,JB_ZCasinoData]
ただし、存在しないメモリブロックを削除しようとするとエラーが発生するため、最初にそのブロックが存在するかどうかを確認することをお勧めします。 MemGetSizeコマンド(メモリブロックのサイズを示す)は、メモリブロックが存在しない場合に0を返し、このように使用できます。
[If,[MemGetSize,JB_ZCasinoData], // test for memory block, returns 1 or more if exists
[MemDelete,JB_ZCasinoData]//deletes memory block
, //else (when memory size is 0 and so doesn't exist)
[Note,"No memory block found",,3]
]//end of If command
メモリブロックを作成する場合を含め、すべてのメモリブロックアクションにこのメソッドを使用することをお勧めします。
[If,[MemGetSize,JB_ZCasinoData],
//does nothing - memory block already exists
, //else (when memory size is 0 and so doesn't exist)
[MVarDef,JB_ZCasinoData,9]//creates memory block
]//end of If command
zscriptやプラグインを書く貴重な時間を費やすつもりなら、それを使いたいと思うでしょう。ユーザーが自分の望むことをすることができなければ、そのことを書いている点はあまりありません。右のボタンやスライダーを用意するだけでは不十分かもしれません。複雑なzscriptの場合は、すべてのことを理解して使いやすくする何らかの方法でそれらを整理したいと思うでしょう。
インタフェース設計は複雑なテーマですが、ここでは説明しません。 zscriptingの可能性の概要を簡単に説明します。
チュートリアルウィンドウは、ZBrushインターフェイスの一番下にあります。ハンドルをクリックまたはドラッグするか、ホットキー「H」を押して開きます。 zscriptの録音用の「再生」ボタンがここに表示され、zscriptボタンとスライダのデフォルトの場所になります。
魅力的で機能的なインターフェイスは、チュートリアルウィンドウ用に設計できます。チュートリアルウィンドウのインターフェイスの詳細については、「ZScriptチュートリアルウィンドウのインターフェイス」を参照してください。
zscriptをZPluginにすることで、ZBrushインターフェイスのデフォルトパレットのほとんどすべてにボタンを追加できます。これには多くの利点があります。たとえば、任意のカスタムインターフェイスの配置でzpluginボタンを使用することができます。しかし、zpluginインターフェースは、設計の観点からは幾分制限されています。
ZPluginインタフェースの詳細については、「ZPluginインタフェース」を参照してください。
Note Interfaceの例はProjection Masterダイアログです。注記インタフェースは、画像を表示し、ユーザの入力を得るための優れた方法です。背景やボタンに画像を使うことができるので、どのように見えるようにすることもできます。注意インタフェースは単独では存在せず、zscriptまたはpluginボタンから呼び出さなければなりません。
Noteインターフェイスの詳細については、「ZScriptノートインターフェイス」を参照してください。
あなたがこれを遠くに持っていれば、あなたは熟練したzscripterであることへの道のりです。このセクションでは、知識を広げて才能を伸ばすためのオプションについて簡単に説明します。
もしあなたがzscriptingのバグを持っていれば、プログラマのために設計されたテキストエディタを入手することを検討したいかもしれません。多くの便利な機能の中で最も有用なのは、さまざまなコマンドが異なる色で表示される構文ハイライトです。コードの読み取りと編集が非常に簡単です。
UltraEditの例を以下に示します
テキストエディタの選択
あなたのzscriptに何をしたいかについていくつかの考えを持っていることは明らかに最初のステップです。しかし、あなたが望むようにzscriptが動作するなら、ZBrushがどのように動くかを知る必要もあります。いくつかのアクションは、他のものが最初に実行された後にのみ可能です。たとえば、モーフィングブラシは、モーフィングターゲットが最初に格納されている場合にのみ使用できます。
この種の情報を得る1つの方法は、あなたの行動のzscriptを記録しながら、あなたが興味を持っていることをすることです。終了したら、zscript記録をオフにしてファイルを保存します。これをテキストエディタで開き、それを調べることができます。この方法は、zscriptingについてもっと知る良い方法を提供します。
最も基本的な形式では、Zスクリプトを使用して、ZBrushのインターフェイスボタンを1つずつ押すことができます。上で示唆したように、zscript記録を調べようとしたなら、あなたはおそらく[IPress]コマンドを見つけたでしょう。次のように表示されます。
[IPress,Tool:PolyMesh3D]
このコマンドは、ZBrushに何かを押すように指示するIPressビットと、押されるべきインターフェイス項目であるTool:Simple Brushの2つの部分に分かれています。 zscriptingでは、Interface Button Pathを使用してZBrushインターフェイス項目を指定します。
ZBrushインターフェイスを構成するすべてのものにボタンパスがあります。 (これはボタンパスと呼ばれますが、ボタン、スイッチ、スライダーなど、どのインターフェース項目にも適用されます)一般的にボタンパスは、インターフェース項目の前にメニューとサブメニュー(存在する場合)を記述します。それぞれはコロンで区切られています:
Tool:PolyMesh3D
インターフェイス上の項目のボタンパスを見つけるには、項目の上にカーソルを置き、キーボードのCtrlキーを押したままにします。説明的なメモが表示され、ボタンのパスは説明的なメモの一番下に表示されます。 ZBrushインターフェイス上のボタンを押す方法があります。コマンド[IPressとボタンパスを組み合わせてください。これは良いスタートですが、ZScriptのコマンドをもっと詳しく調べる前に、私たちがしようとしていることを把握するのに良い方法を考えていきます。そうすれば、私たちのコードは結びつくことができない結び目に結びつくことはありません。
言語の要点は、対話を可能にすることであり、対話を行うためには、双方が何が言われているのかを理解する必要があります。 zscriptingでは、ZScriptコマンドはコンピュータの側面を提供するためのコマンドです。人間zscripterには、コメントや変数名など、意味のあるものを保つのに役立ついくつかの方法があります。
コメントは、コードの特定のビットの目的を説明するzscriptを書く人が作成したメモです。全体のポイントは、コードを理解しやすくすることです。なぜ気に?驚いたことに、書かれた日と同じくらい明瞭なものが、数週間後には泥と同じくらい明確になることがあります。しかし、コードのコメントは、他の人が理解できるように、また必要であればそれらによって更新(または保守)されていることを保証する、あらゆる種類のプログラミングにとっては良い習慣です。 コメントは、コンピュータで無視されるように記述する必要があります。そうでなければ、コードとして解釈しようとする可能性があります。 ZScriptでは、これは2つの方法のいずれかで実行できます。次のような行の先頭に2つのスラッシュを使用します。
//This is a comment
またはコメント全体をスラッシュ - アスタリスク、アスタリスク - フォワードスラッシュの組み合わせで囲むことで、次のようになります。
/*This is another comment*/
この第1の方法は、短い単一の行に有効です。 2番目の方法は、大きなテキストブロックに適しています。 これらのコメント記号は、zscriptからコードを一時的に削除するためにも使用できます(コメントアウトとも呼ばれます)。これは、エラーを追跡しようとしているときや、効果がわからない変更を行っているときに役立ちます。このコード行はコメントアウトされています:
//[CanvasZoomSet,1]
コンピュータはコマンドを無視し、zscriptの一部を形成しません。
変数は後で使用するために情報を格納する方法です。それは単にあなたが名前で識別するコンピュータのメモリのチャンクです。情報はいつでも変更(または変更)できるため、変数と呼ばれます。あなたがその情報のビットを使いたいときは、単に変数の名前を入れてください。そして、コンピュータはそのメモリから情報を取得します。
変数を定義して作成します。これは、[Variable Definition]を表す[VarDef]コマンドで行います。コマンドの後に、必要な名前と初期値を入力します。これは基本的な形式です:
[VarDef, variable name,initial value ]
変数を作成するときは、変数を簡単に識別できる名前を付けます。あなたのコードは書いている間に意味をなさけるだけでなく、後で理解しやすくなります。あなたは変数名をかなり書くことができますが、ここでは小文字の変数名を他のコードと区別するために開始します。ですから、テクスチャの幅を格納するために使用したい変数に対して、次のように書くことができます:
[VarDef,textureWidth,0]
ここの0が初期値です。これは、主に変数のタイプを定義するのに役立ちます。この場合、数値を格納する変数です。 zscriptingには他のタイプの変数が1つしかありません。単語や文字のグループ(文字列として知られています)を格納しますが、後でこの型を扱います。 これで、textureWidthという名前の変数を使用して、テクスチャの幅を格納できます。それだけで十分だと思うかもしれませんが、最初にテクスチャの幅をどのように見つけますか?次のセクションでそれについて検討します。
ZScriptのコマンド名には、GetとSetという2つの単語が頻繁に表示されます。あなたは既に一例を見てきました:
[CanvasZoomSet,1]
当然もう一組のペアがあります:
[CanvasZoomGet]
推測したように、GetコマンドはZBrushインターフェイスから情報または値を取得し、SetコマンドはZBrushインターフェイス項目を特定の状態または値に設定します。 ZBrushインターフェイス上の大半のボタンとスライダでは、
[IGet,interface item path]
or
[ISet,interface item path,value]
関連するボタンのパスを使用します。 これらの2つのコマンドグループは、zscriptingで最も有用なものです。
変数にはSetコマンドもあります(ただし、同等の値は得られませんが、変数を指定するだけで十分です)。変数Setコマンドの基本的な形式は次のとおりです。
[VarSet, variable name,value to set ]
では、先ほど作成したtextureWidth変数をどのように設定するのですか?まず、現在のテクスチャの幅を調べる必要があります。これはテクスチャパレットの幅スライダに表示されます。この値をzscriptで使用するには、最初にButton Pathを見つけて、それを[IGetコマンド]と組み合わせます。そうすれば、現在のテクスチャの幅を使用していることを確認できます。このように変数に変数を格納することができます:
[VarSet,textureWidth,[IGet,Texture:Width]]
これがどのように役立つのかはすでに考えているかもしれません。ここでは、完全なzscriptで1つの可能性を探求します。
これを遠くに持っていると、その古い格言は「実行するよりも学ぶのが良い方法はない」というのはおそらく適切なので、私たちは全体のzscriptを作成します。
特定の値を格納する変数を定義することから始めます。 zscriptの始めに変数を定義するのは良い方針です。それらがコード全体で利用可能であることを確認することができます。このため、グローバル変数と呼ばれることもあります。このzscriptでは2つしか定義しません。それらは現在のテクスチャの幅と高さを保存するので、textureWidthとtextureHeightを呼び出します。また、初期値として0を指定します。そうすることで、数値を格納することになります。コードは次のとおりです:
[VarDef,textureWidth,0]
[VarDef,textureHeight,0]
ここでボタンを追加します。これにはzscriptの主なコマンドが含まれています - ZBrushが実際にやりたいもの。ボタンの始めは次のようになります:
[IButton,"FillCanvas","Fill Canvas with Texture",
FillCanvasがボタンラベルになり、キャンバスをテクスチャで塗りつぶすと、カーソルがボタンの上にあるときに表示されるポップアップ情報になります。この後にコマンドが来て、それらの間にカンマを入れずに次々にリストされます:
[IPress,Texture:Txtr01] //select a texture
[VarSet,textureWidth,[IGet,Texture:Width]] //set variable to texture width
[VarSet,textureHeight,[IGet,Texture:Height]] //set variable to texture height
[IUnPress,Document:Pro] //turn of document proportional button
[ISet,Document:Width,textureWidth] //change document width to value of textureWidth
[ISet,Document:Height,textureHeight] //change document height to value of textureHeight
[IPress,Document:Resize] //resize document
[IPress,Material:Flat Color] //select Flat Color material
[IPress,Color:FillLayer] //fill canvas with texture image
ご覧のとおり、どのコマンドが実行されたかがわかるように、各コマンドにはコメントが付けられています。すべてのコマンドが入力されたら、閉じる括弧でボタンを終了する必要があります:
]//end of button
それは、完全なzscriptです! zscriptをテストするには、テキストファイル(* .txt)として保存し、ZScriptパレットの[ロード]ボタンを使用してZBrushにロードします。ボタンがZScriptチュートリアルウィンドウに表示されます。 (ボタンが表示されない場合は、ハンドルをドラッグしてチュートリアルウィンドウを拡大します。)ボタンを押してzscriptを実行します。 [重要] ZScriptチュートリアルウィンドウは、インターフェイスの一番下にあります。ハンドルをドラッグして表示するか、キーボードのHを押します。ボタンを表示するには、ウィンドウ内をクリックして上下にドラッグする必要があります。 標準のzscriptとzscriptの記録は、常にこのウィンドウに表示されます。 zscriptがプラグインの場合、ボタンはパレットの1つにあり、通常は独自のサブパレットがあります。コード内のボタン名を調べることで、どこにあるかを知ることができます。プラグインの作成については、このドキュメントの後半で説明します。
[/important]
このzscriptを実行すると警告メッセージが表示されることがあります。そのようなメッセージに対処する方法、またはユーザーがzscriptを実行したときに問題が起こらないようにすることは、zscriptingの不可欠な部分です。そのため、zscriptをテストすることが重要です。さまざまな状況を扱ういくつかの方法については、次のセクションで扱います。
これがzscriptingの基本です。次のページに進む:高度なテクニック
ZScriptは、コンピュータではなく人間によって簡単に理解できるように設計されています。基本的には英語ですが、ZBrushが解釈して関連するタスクを実行できる特別な方法で書かれています。他の言語と同様に、従わなければならない規則がありますが、これらはかなりシンプルです。 ZScriptはプレーンテキストとして書かれているので、必要なのはテキストエディタだけです。空の書式設定は必要ありませんので、NotePadのような基本的なエディタが可能ですが、ZScriptのようなプログラミングコードを書くための特別なテキストエディタが用意されています。 必要なファイルが書き込まれると、.txt拡張子で保存されます。その後、ZBrushにロードする準備が整います。 (これ以降は、このzscriptコマンドのテキストファイルをzscriptと呼んでいます)。
ZScript言語は一連のコマンドで構成されています。これらのコマンドは、ZBrushに何かをさせるために、さまざまな方法で組み合わせることができます。 zscriptを書いたとか、ZBCのような場所から取得したとします。まず、ZScriptメニューの「読み込み」ボタンを押して、zscriptをZBrushに読み込む必要があります。この時点で、ZBrushは、人間が読めるzscriptテキストファイルを、コンピュータが読めるコード(または既知の「マシンコード」)に変換しようとします。このプロセスはコンパイルと呼ばれ、すべてがうまくいけば、「再生」ボタンや他のインタフェースコンポーネントが表示され、プロセスの次の部分が実行されます。 しかし、我々は少し先を行っている。最初にzscript言語をもう少し詳しく考えてみましょう。
すべてのZScriptコマンドは、大括弧で囲まれています。
[ like this ]
これらの括弧の中には、コマンドのさまざまな部分がカンマで区切られています。
[ like , this , and ,this]
これらは、スクリプトの2つの重要な句読点です。残りは特別なコマンドワードとさまざまなオプションで構成されています。
コマンドはすべて同じ基本形式に従います。開始角括弧が続き、その後にコマンド名が続きます。その後、カンマで区切られた様々なオプション(あれば)が来て、最後に最後の角カッコがあります。キャンバスズームを設定するコマンドは次のとおりです。 1はズームを実際のサイズに設定する値です。
[CanvasZoomSet,1]
あなたのzscriptを整理するときに見るべき1つのことは、コマンドがお互いにどのように関連しているかです。いくつかのzscriptコマンドは、常にzscriptで独自になければなりません - これらはトップレベルコマンドと呼ばれます。他のコマンドは常に他のコマンドの中に入っていなければなりません。これらはサブレベルと呼ばれます。しかし、大多数はどこにでも行くことができます。内側か外側か。 だから、物事を置く場所をどうやって教えていますか?トップレベルまたはサブレベルのコマンドを区別する明確な方法はありません。しかし、今これについて心配しないでください。 ZScript Command Referenceを見てみると、さまざまなタイプのコマンドが明確に示されていることがわかります。
前述したように、ZScript言語は基本的に英語であり、コンピュータによって解釈されるようになっています。上記の例から分かるように、コマンドが何をするのかを理解することはそれほど難しいことではありません。 CanvasZoomSetは単に「キャンバスズームを設定...」という圧縮された方法です。同様に、インターフェイスボタンを作成するコマンドはIButtonです.IはInterfaceの略語です。あなたが見るように、この特定のフォームは、コマンドの最初の私と一緒に、多く使用されます。
ZScriptingは大文字と小文字を区別しません。つまり、コードをすべて小文字で入力するか、大文字で入力するか、またはその両方を組み合わせて入力するかは関係ありません。 [もちろんいくつかの例外がありますが、後で扱います。]ここでは、CanvasZoomSetのように、大文字と小文字を混在させて新しい単語を示す形式を取ります。この方法は一般的に読みやすく、したがって分かりやすいものです。
コンピュータプログラミング言語と人間の言論との大きな違いは、コンピュータが非常にエラーを許さないということです。 「猫白い」と言うと、ほとんどの人が「猫は白い」ということを理解するでしょう。しかし、コンピュータ言語で同様のミスを犯すと、コンピュータは理解できず、コードは使用できません。正しい場所と正しい順序ですべてを置くことは、正しい '構文'が意味することです。 ZBrushはまず、zscriptテキストファイルがロードされたときの構文をチェックします。構文が間違っていれば、それ以上は取得できません.ZBrushは「マシンコード」を作成できず、メッセージはZBrushインターフェイスの下部にあるzscriptウィンドウに表示されます。 (Zscriptウィンドウを開くには、ハンドルをクリックするか、キーボードの「H」を押す必要があります)。ZBrushはコードを表示し、次にエラーがあると思われるメッセージを表示します。追跡する!ここに例があります:
これはすべてこれまでのことです。開き角カッコが閉じ角カッコで、カンマが正しい場所にあることを確認してください。このような状況に陥ることもあり得ますが、この種のエラーは後で見つけるのが難しい場合があります。
今度は、zscriptをもう少し詳しく見て、次のページ:Nuts&Boltsに進みます。
まぁ軽く気になる部分を抜粋と思ったけど多分長く無いしリンク見たほうが良いかも知れなす。
WEB1ページ位の内容です。
アップデートは新規だとダウンロードセンターから通常で落とせば良いみたいです
(うちの環境では起きてないですがセキュリティソフトで蹴られるケースとZUPが管理権限が無くて実行出来ないパターンもあるようです)
問題は追加でP1にアップデートする場合です。
言語関係が上書きされます。
多分余り居ないとは思いますが他言語を偽装して丸々変えている場合は元の言語に戻ってしまうので注意して下さい。
(万が一上書きで偽装が解けても言語フォルダーの中身を差し替えれば差し替えられた言語に変わります)
なのでアップデートの前にZLNGはバックアップして下さい。
UI ショートカットも初期化されるようなので、
この最低三点は設定は環境維持するなら取ったほうが良いです。
シンボリック張ってても上書きされるのでご注意を
ではアップデート方法
コレを直で起動すれば良いです。
ZB起動してない方が良いので直が良いでしょうね。
自分は…面倒くさいのでエブリシングで調べますけどね。
起動すると言語の選択が出てOKするとダウンロードし始めて
又言語を聞かれるのでOK
ZBを起動します。
左上のタイトルがP1になっていたら完了
osの再起動求められるようです。
Logitech (ロジクール) Unifying レシーバー ( ワイヤレス マウス、キーボード、スナンバーパッド テンキー 、タッチパッド などに)
最近ロジクールの受信機(レシーバー)が意外とUnifying非対応なのが多くて個人的にはUnifying詐欺と言ってますが…普通コイツを単体では要らない物なのですが
ノートとデスクトップで共有とかって考えるとレシーバーの抜き差しって無くなるリスクが結構上がる物のですよね。
ウチのは一個壊れて一個どっかに行きました・・・
んでこの単体1400円位します…
「高い」
んでまぁ別の考えで行きます。
まぁ付属品を狙うという形ですね。
たまに500円マウスが出るんですが…これはUnifying詐欺。。。
あくまで狙うのはレシーバー安さでは無い訳です。
最安値の入手方法。
それは……多分(見つけた範囲では
Logicool ロジクール ワイヤレスマウス M235r シルバー
M235系こいつが900円位。
「マウスも付いてきてレシーバーまで有る」
余った無線マウスの為にレシーバーを用意したはすがマウスが増えるというマジック。。。
まぁ……安いし良しとしましょうか。