Python

【Substance Designer】pythonコードメモ

サブスタンスデザイナーのpython情報はとても少なく、ちょっとした事でも残しておけば組み合わせでやりたい事にたどり着ける可能性もあるのでメモ用記事を作りました。
随時追加していく予定です。

python コードメモ

A4サイズの画像を扱いたい

読み込んだA4サイズ画像を選択して以下のコマンドを実行すると、ほぼA4比率に設定されたトランスフォーム2Dに接続されます。
詳しく見る場合はこちら↓

【Substance Designer】A4サイズの画像を扱いたいver.2021を使用 チラシ等のデザインでサブスタンスデザイナー上でA4サイズの画像を扱いたいと思う時がたまにあるのですが読み込むと...
import sd
from sd.api.sdproperty import SDPropertyInheritanceMethod
from sd.api.sdproperty import SDPropertyCategory
from sd.api.sdvalueenum import SDValueEnum
from sd.api.sdbasetypes import float4
from sd.api.sdvaluefloat4 import SDValueFloat4

cxt = sd.getContext()
app = cxt.getSDApplication()
UImgr = app.getQtForPythonUIMgr()

#選択ノードを取得 今回はビットマップ
sels = UImgr.getCurrentGraphSelection()
sel = sels[0]

#現在のグラフを取得
graph = UImgr.getCurrentGraph()

#トランスフォーム2Dを作成して、タイリングなし 比率変更
node = graph.newNode('sbs::compositing::transformation')
node.setInputPropertyInheritanceMethodFromId('$tiling', SDPropertyInheritanceMethod.Absolute)
node.setInputPropertyValueFromId('$tiling', SDValueEnum.sFromValueId('sbs::compositing::tiling', 'no_tiling'))
node.setInputPropertyValueFromId('matrix22', SDValueFloat4.sNew(float4(1.415,0,0,1)))

#ビットマップとトランスフォーム2Dを接続
bitmap_output = sel.getProperties(SDPropertyCategory.Output)[0]
sel.newPropertyConnectionFromId(bitmap_output.getId(), node, 'input1')

 

HSLノードの値を指定して配置

初期値は通常すべて0.5です。
HSL以外の一部ノードでも応用が効くと思います。
参考資料:https://forum.substance3d.com/index.php?topic=28926.0

import sd
from sd.api.sdvaluefloat import SDValueFloat

cxt = sd.getContext()
app = cxt.getSDApplication()
UImgr = app.getQtForPythonUIMgr()

#現在のグラフを取得
graph = UImgr.getCurrentGraph()

#HSL 色相 彩度 明度の値を指定して配置
node = graph.newNode('sbs::compositing::hsl')
node.setInputPropertyValueFromId('hue', SDValueFloat.sNew(0.1))
node.setInputPropertyValueFromId('saturation', SDValueFloat.sNew(0.2))
node.setInputPropertyValueFromId('luminosity', SDValueFloat.sNew(0.3))

テキストノードの値を指定して配置

カラーモード、テキスト、フォント、サイズ、カラーを指定してみました。

import sd
from sd.api.sdvaluefloat import SDValueFloat
from sd.api.sdvaluestring import SDValueString
from sd.api.sdvaluefloat import SDValueFloat
from sd.api.sdvaluebool import SDValueBool
from sd.api.sdvaluecolorrgba import SDValueColorRGBA
from sd.api.sdbasetypes import ColorRGBA

cxt = sd.getContext()
app = cxt.getSDApplication()
UImgr = app.getQtForPythonUIMgr()

#現在のグラフを取得
graph = UImgr.getCurrentGraph()

#テキスト 文字列、フォント、サイズを指定して配置
node = graph.newNode('sbs::compositing::text')
node.setInputPropertyValueFromId('colorswitch', SDValueBool.sNew(1))
node.setInputPropertyValueFromId('text', SDValueString.sNew('python'))
node.setInputPropertyValueFromId('fontdata', SDValueString.sNew('Century Gothic|Regular'))
node.setInputPropertyValueFromId('fontsize', SDValueFloat.sNew(0.3))
node.setInputPropertyValueFromId('frontcolor', SDValueColorRGBA.sNew(ColorRGBA(1,1,0,1)))

週択したノードの設定項目の名称を表示

1つのノードを選択した時しか処理しません。
参考:https://zhuanlan.zhihu.com/p/78296429

import sd
from sd.api.sdproperty import SDPropertyCategory
cxt = sd.getContext()
app = cxt.getSDApplication()
UImgr = app.getQtForPythonUIMgr()

sels = UImgr.getCurrentGraphSelection()

if not sels:
    print('何も選択されていません')

elif len (sels) == 1:
    sels = UImgr.getCurrentGraphSelection()
    sel = sels[0]
    props = sel.getProperties(SDPropertyCategory.Input)
    for prop in props :
        print(prop.getId())

else:
    print('ノードは1つしか遇択できません')

sys.exit()を使うと強制終了してしまう

mayapyでは個人的によく使っていたので強制終了には驚きました。
sys.exit()は次のコードがあっても処理をそこで止めるというコマンドです。
sys — システムパラメータと関数 — Python 3.9.1 ドキュメント

100%落ちるため試す場合は気を付けてください

import sd
import sys

print('shamimatsu blog')
sys.exit()