CLIP STUDIO PAINT EX ではプラグインが使えるんですが、プラグイン開発するには僅かな公式情報と、数件しかないインターネット上の情報に頼むしかなく、ハードルが高い状態です。
ということで、先陣の方にも倣って、わたしも今回のプラグイン開発で得た知識を放流していこうと思います。
なお、プラグイン SDK は 2021/09/09 時点に更新されている SDK を前提にしており、今後の更新で壊れる可能性があります。
文字列を扱うプロパティの実装には、 StringService
を使用します。
基本的にはこれ経由で、既存の std::u16string
などに変換し、使用する感じになります。
プロパティの定義は以下のようにすることでできます:
const auto hostObject = (*pPropertyService).hostObject; TriglavPlugInPropertyObject propertyObject = nullptr; (*pPropertyService).createProc(&propertyService); TriglavPlugInStringObject caption = nullptr; (*pStringService).createWithStringIDProc(&caption, stringId, hostObject); (*pStringService).addItemProc(propertyObject, ITEM_KEY, kTriglavPlugInPropertyValueTypeString, kTriglavPlugInPropertyInputKindDefault, kTriglavPlugInPropertyInputKindDefault, caption, SHORTCUT_KEY);
こう定義することで、ユーザーはダイアログから任意の文字列を入力することが可能になります。
で、取得は以下の要領で出来ます:
// ここでの propertyObject, itemKey は、 Callback にて降ってきたものを使用する想定 TriglavPlugInStringObject stringObject = nullptr; (*pPropertyService2).getStringValueProc(&stringObject, propertyObject, itemKey); TriglavPlugInInt len = 0; (*pStringService).getUnicodeLengthProc(&len, stringObject); TriglavPlugInUniChar* str[]; (*pStringService).getUnicodeCharsProc(&str, stringObject); const auto value = std::u16string(reinterpret_cast<const char16_t*>(str), static_cast<size_t>(len));
これで、最後の変数 value
には、 CLIP STUDIO PAINT EX でユーザーが入力した文字列が入っています。
ということで、メモでした。