2015-08-18 38 views
2

任何人都可以顯示一種方法來製作maxscript中的動態UI元素嗎?例如, 。我可以在UI中插入圖像按鈕,但我想根據滑塊元素的值控制圖像的比例。maxscript中的動態UI元素

回答

1

我確實找到了一種製作動態用戶界面的方法,即 這是問題的第一部分。

,但我沒有得到它使圖像按鈕大小的動態呢。(主要是因爲如果我在路上使用組元素,我想,那麼每一個元素的位置是硬編碼。

try(destroydialog dRolH) catch() 
rollout dRolH "Dialog" height:200 width:200 
(
dropdownlist rolList "Rollouts: " items:#("Rollout A", "Rollout B", "Rollout C") width:175 offset:[0,0] 
checkbox lbA "A" pos:[14,50] visible:off 
checkbox lbB "B" pos:[14,50] visible:off 
checkbox lbC "C" pos:[14,50] visible:off 

local rolls = #(#(lbA), #(lbB), #(lbC)) 
on rolList selected sel do 
(
for k=1 to rolls.count do for c in rolls[k] do c.visible = (k == sel) 
) 
) 
createDialog dRolH pos:[740, 200] 
0

。看,這是一個比較複雜 更改位圖元素的寬度和高度值是很容易的:

bitmap bm "Bitmap:" filename:@"some/file/path.jpg" -- create the bitmap UI element 
bm.width = 100 
bm.height = 100 

但這隻會更改位圖幀的大小也將需要重新描繪的。以新的分辨率顯示位圖,並將舊圖像切換出來即我已經在你的代碼中實現了這一點:

try(destroydialog dRolH) catch() 
rollout dRolH "Dialog" height:200 width:200 
(
    dropdownlist rolList "Rollouts: " items:#("Rollout A", "Rollout B", "Rollout C") width:175 offset:[0,0] 
    checkbox lbA "A" pos:[14,50] visible:off 
    checkbox lbB "B" pos:[14,50] visible:off 
    checkbox lbC "C" pos:[14,50] visible:off 
    spinner s "Size (%)" range:[0,1000,100] 
    local bm_height = 128 
    local bm_width = 128 
    bitmap bm "Bitmap" height:bm_height width:bm_width fileName:@"C:\ProgramData\Microsoft\User Account Pictures\Default Pictures\usertile12.bmp" 

    fn scaleAndReloadImage factor = 
    (
     -- New sizes 
     bm.height = bm_height * factor   
     bm.width = bm_width * factor 
     -- Loadimage and 
     local image = Bitmaptexture filename:@"C:\ProgramData\Microsoft\User Account Pictures\Default Pictures\usertile12.bmp" 
     -- Rerender into new bitmap 
     local new_bm = bitmap bm.width bm.height 
     rendermap image into:new_bm size:([image.bitmap.width,image.bitmap.height]) filter:on display:off gamma:2.2 
     -- Assign new bitmap 
     bm.bitmap = new_bm 
    ) 

    -- EVENTS 
    local rolls = #(#(lbA), #(lbB), #(lbC)) 
    on rolList selected sel do 
    (
     for k=1 to rolls.count do for c in rolls[k] do c.visible = (k == sel) 
    ) 

    on s changed val do 
    (
     if val == 0 then s.value = val = 100 -- Resets to 100 on rightclick 
     local factor = val/100     -- Scaling factor 
     scaleAndReloadImage factor 
    ) 

    on dRolH open do 
    (
     scaleAndReloadImage 1   -- Render image from start, to secure uniform gamma 
    ) 
) 
createDialog dRolH pos:[740, 200] height:400 

我已經爲你寫了一些評論。

快樂黑客:d :)

/goehler

注:我使用的位圖的地址有可能僅在Windows 7的工作 - 但我想你必須使用,如果需要另一個地址的意義是:)