Find on this site:

Recent Trackbacks

Daily modo Tips

Luxology Community Blog

mars weblog

Luxology TV

The Enable State

lx.symbol.sITYPE_ で指定されたアイテムタイプが選択されている場合にのみコマンドは使用可能となる。
Disabled
ただどのタイミングでこれがUI表示に反映されるのかが不明。

def basic_Enable(self, msg):
    for item in lxu.select.ItemSelection().current():
        if lx.object.Item(item).TestType(
                lx.service.Scene().ItemTypeLookup(lx.symbol.sITYPE_MESH)):
            return True

    return False
			

Make Tri (Python API version)

以前C++で作ったプラグイン(SDK (in Visual C++) 001)をPython APIで書き直したもの。
こうしてみるとさほど違いはないもののPython API特有の作法もあり情報不足なのが残念。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import lx
import lxu.command

class PMakeTri(lxu.command.BasicCommand):
    def cmd_Flags(self):
        return lx.symbol.fCMD_MODEL | lx.symbol.fCMD_UNDO


    def basic_Execute(self, msg, flags):
        s_layer = lx.service.Layer()
        scan = lx.object.LayerScan(
                    s_layer.ScanAllocate(lx.symbol.f_LAYERSCAN_EDIT))
        if not scan.test():
            return

        user_mesh = lx.object.Mesh(scan.MeshEdit(0))
        user_point = lx.object.Point(user_mesh.PointAccessor())
        user_poly = lx.object.Polygon(user_mesh.PolygonAccessor())

        points = ()
        for num in xrange(3):
            # (vector pos, id pointID) = New()
            point_obj = user_point.New()
            user_point.Select(point_obj[1])

            pos = (1.0, 0.0, 0.0)
            if num == 1:
                pos = (0.0, 1.0, 0.0)
            elif num == 2:
                pos = (0.0, 0.0, 1.0)

            user_point.SetPos(pos)
            points += (point_obj[1],)

        storage = lx.object.storage()
        storage.setType('p')
        storage.setSize(3)
        storage.set(points)

        user_poly.New(lx.symbol.iPTYP_FACE, storage, 3, 0)

        scan.SetMeshChange(0, lx.symbol.f_MESHEDIT_GEOMETRY)
        scan.Apply()


lx.bless(PMakeTri, 'pmaketri')

Pmaketri

Hello Python API

HelloPyApi.pyというファイルを作成し下記を記述する。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import lx
import lxifc

class HelloPyApi(lxifc.Command):
    def cmd_Enable(self, msg):
        lx.result.OK

    def cmd_Execute(self, flags):
        lx.out('Hello World.')

lx.bless(HelloPyApi, 'hello')

これを
resource、module:Scripts、configs、scripts、kits、
またはキットのimport' pathいずれかの下に作成した「lxserv」というフォルダへ置く。

今回はscripts下へlxservフォルダを作成しこのファイルを置いた。
Lxserv

modo 701を起動。
自動でインポートされるのでコマンドヒストリーで"hello"を検索。
ダブルクリックでコマンドを実行。
Result

-console:python

"C:\Program Files\Luxology\modo\701\modo_cl.exe" -console:python
Scut

Scprop

Cs

Pysc

Auto Completion

前回抽出したテキストをPyScripterの自動補完のために使用。
ピリオドを打つと入力候補とヘルプが自動で現れる。
今後modoのバージョンが上がりモジュールやオブジェクト、メソッドが増えたときにきっと役立つはず。
Ihelp1

メソッドヘルプ
Ihelp2
メソッドによっては引数のタイプや戻り値、使い方なども表示される。

抽出作業をどれだけ自動化できるかが課題。

Commands for Python (modo 601)

lx.arg
Get the argument string for the script.

lx.command
Execute a command with a variable argument list.

lx.eval
Evaluate a command string.

lx.eval1
Evaluate a command string, returning a single value.

lx.evalN
Evaluate a command string, returning a tuple.

lx.option
Get the current state of an option

lx.out
Output to log.

lx.queryToggle
Query a command with a ToggleValue style argument.

lx.setOption
Set options that affect how the lx methods act

lx.test
Test the state of a toggle argument.

lx.trace
Toggle extra Event Log output for each lx function call.

lx.Monitor
Initialize the monitor with the total number of steps

lx.Monitor.step
Increment the monitor by one or by step it by an arbitrary amount

lx.Service.name
Return the name of the script service.

lx.Service.query
Query an attribute from the selection.

lx.Service.query1
Query an attribute from the selection, returning a single value.

lx.Service.queryN
Query an attribute from the selection, returning a tuple.

lx.Service.select
Select a an attribute (and element) for query.

The HDRI Handbook 2.0

翻訳版は出版されるのか?
Thh2
Thh2
table of contents
Hardcopy Out Now!
The HDRI Handbook 2.0

sIBLedit 1.2

ひっそりと新バージョンが公開されていた。

Windows 7 64bit version
Support for Rectangular Backplates
Multiple Directory Support Started
Object Mapping
Preview Image Support
Improvements In Linear & Gamma-Based Workflows
New Tonemap Operators
Various Bugfixes And Workflow Improvements
Sibl

トライ1
- 解凍。
- exe実行。
- オプション設定のウィンドウが開きプロジェクトディレクトリを指定。
- グローバルガンマに1.0を入力したところでアプリケーション消失。

トライ2
- グローバルガンマを変更せずに設定保存。
- ブラウズウィンドウが現れる前にクラッシュ。

ここで、設定ファイル作成で問題が起きていると推測。

トライ3
- 1.03のsE.iniをコピーしてフォルダ内にペースト。
- exe実行。
- オプション設定はスキップされてブラウズウィンドウが開く。
- 次のメインウィンドウでオプションを変更。
- グローバルガンマを入力するとアプリケーション消失。

やはりオプションウィンドウからの設定ファイル書き出しは失敗するが、アプリケーションによる自動保存はちゃんと機能するようなので設定ファイルはテキストエディタで編集することにした。

これで使用可能な状態になったので、新機能についてサイトの説明を解読しつつmodo用envプリセット作成開始。

SelMask

選択ポリゴンにSelection Setを設定してマスク及び解除する。

このクラスを使ったKit
SelMask Kit 20130118
lock.selと組み合わせて選択不可にしたポリゴンがどこにあるか見付けやすくする。

- ポリゴン選択
Select

- メニューからスクリプト起動
Menu

- マスクされた部分は選択不可となる。
Disable


このkitの使用例以外にも、モデリング中ワイヤーが見辛い場合に一時的部分的にマテリアルを変更するという使い方も可能。

My Set Position

VertInfo20130102.zip
Setpos