PR

関節操作ツール DAZフィギュアなどの関節をボタン操作で曲げる

練習的なやつ。

スクリプトをDAZ STUDIOのIDE Script(Window > Panes(Tabs) > Script IDE )に貼り付けてExcecuteボタンクリックで動く。

関連)DAZ スクリプトの導入・自作方法 【DAZ SCRIPT】

ちゃんと角度に合わせて3Dプレビューも動く。

パーツの選択し直しは出来ない。

スクリプトで動いている以上、DAZ STUDIOの通常機能は使えないのかも知れない。

市販品のツールでも、そういうの見たことないしな…。

DAZ Scriptの関節曲げツールのソース

(function() {
    var dlg = new DzDialog();
    dlg.caption = "関節操作ツール";
    
    var mainLayout = new DzVBoxLayout(dlg);
    mainLayout.margin = 10;
    mainLayout.spacing = 5;

    // 選択中のノードを取得
    var selectedNode = Scene.getPrimarySelection();
    if (!selectedNode) {
        MessageBox.information("パーツを選択してください。", "エラー", "OK");
        return;
    }

    // 回転コントロールの取得
    var rotControls = {
        "xRotate": selectedNode.getXRotControl(),
        "yRotate": selectedNode.getYRotControl(),
        "zRotate": selectedNode.getZRotControl()
    };

    var valueLabels = {};

    // 各軸のコントロール作成
    Object.keys(rotControls).forEach(function(axis) {
        var groupBox = new DzGroupBox(dlg);
        groupBox.title = axis;
        mainLayout.addWidget(groupBox);

        var hLayout = new DzHBoxLayout(groupBox);

        var decreaseBtn = new DzPushButton(groupBox);
        decreaseBtn.text = "-";
        decreaseBtn.minimumWidth = 40;
        hLayout.addWidget(decreaseBtn);

        valueLabels[axis] = new DzLabel(groupBox);
        valueLabels[axis].minimumWidth = 80;
        valueLabels[axis].alignment = DzTextEdit.AlignCenter;
        updateValueLabel(axis);
        hLayout.addWidget(valueLabels[axis]);

        var increaseBtn = new DzPushButton(groupBox);
        increaseBtn.text = "+";
        increaseBtn.minimumWidth = 40;
        hLayout.addWidget(increaseBtn);

        decreaseBtn.clicked.connect(function() {
            var currentValue = rotControls[axis].getValue();
            rotControls[axis].setValue(currentValue - 5);
            updateValueLabel(axis);
            Scene.update();
            MainWindow.updateViewport();
        });

        increaseBtn.clicked.connect(function() {
            var currentValue = rotControls[axis].getValue();
            rotControls[axis].setValue(currentValue + 5);
            updateValueLabel(axis);
            Scene.update();
            MainWindow.updateViewport();
        });
    });

    function updateValueLabel(axis) {
        var currentValue = rotControls[axis].getValue();
        valueLabels[axis].text = currentValue.toFixed(2) + "°";
    }

    dlg.exec();
})();