Render.ru

Помогите с установкой цвета в скрипте.

#1
Я тута вздумал MaxScript посмотреть.....Правда он трудноват, перевод скачал, но всё же сижу с рефренсом по максСкрипт на ангийском.Приходится с некоторыми вещами разбираться на примерах. Дык вот, скрипт , наверное многим, известный нашёл в книге по максу. Там всё путём про него написано. Сразу говорю я ооочень мало шарю в языке этом. Вот его текст:
--(сразу скажу я в нём сам (без книги) практически ничего не понял)
--ну-у, я думая начинающий врядли чего может понять...
plugin textureMap drawMap
name:"DrawMap"
classid:#(0xb01b213a,0xdbe89dc8)
extends:bitmaptexture
replaceui:true
(
local pointarray = #(),tmap,t_draw
fn getuvinfo obj sray =
(
local intray,tvface,tvarray,tv
if obj == undefined do return()
intray = intersectrayex obj sray
if intray == undefined do return()
try
(
tvface = gettvface obj intray[2]
)
catch (
print "No tv faces"
return()
)
tvarray = #(gettvert obj tvface.x,
gettvert obj tvface.y,gettvert obj tvface.z)
tv = (tvarray[1]*intray[3].x)+(tvarray[2] * intray[3].y)+(tvarray[3] * intray[3].z)
)

fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
setpixels bmap ppos #(color 255 255 0)
)

fn drawhelper obj sray =
(
local intray
if obj == undefined do return()
intray = intersectray obj sray
if intray == undefined do return()
append pointArray (point pos:intRay.pos showaxis:false)
)

parameters main rollout:params
(
cbt_draw type:#boolean ui:cbt_draw

on cbt_draw set state do
(
if $ == undefined do (
cbt_draw = false;return()
)
if not (iskindof $ editadlemesh) do addmodifier $ (normalmodifier())
while state == true do (
starttool t_draw
)
if state == false do stoptool t_draw
)
)

rollout params "DrawMap Parameters"
(

checkbutton cbt_draw "Draw" highlightcolor:(color 180 255 180)
)

tool t_draw
(
local uvdata

on mousepoint click do
(
if click == 1 then (
uvdata = getuvinfo $ (mapscreentoworldray viewpoint)
if uvdata == undefined do return()
drawbitmap delegate.bitmap uvdata
drawhelper $ (mapscreentoworldray viewpoint)
)
else
(
delete pointarray; pointarray = #()
delegate.apply = true
#stop
)
)

on mouseabort click do cbt_draw = false
)

on create do
(
save (bitmap 256 256 filename:("c:\\drawmap.bmp"))
tmap = (openbitmap ("c:\\drawmap.bmp"));close tmap
delegate.filename = ("c:\\drawmap.bmp")

)
)
КОроче кому интересно скажу чо он делает: запускаешь его, в матэд выбираешь карту общего цвета, потом текстуру DrawMap, там появляется ктопочка Draw её жмеш и щелчками мыши делаешь точки на объекте.
В общем, я в строчке "rollout params "DrawMap Parameters""
указываю объект ,ColorPicker и все его параметры, потом хочу сделать чтоб цвета пикселей, которые устанавливаются в этой строке "setpixels bmap ppos #(color 255 255 0)" . В скобке цвет пикселей. Я там пишу Picker.Color вродь теперь цвет пикселей должон быть настраеваемым, но этого не происходит.Пишет ошибку какуюто. Помогите разобраться с ним, пожалуйста,
спасибо всем.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
в setpixels ты должен передовать не цвет а указатель на массив

setpixels bmap ppos #(Picker.Color)
 
#3
Большое спасибо.
Я указываю в скобках указание на цвет из ColorPicker'а
setpixels bmap ppos #(Picker.Color). Ведь что ему ещё надо???
Синтаксически как бы даже правильно ....
А он в листнере пишет:(свойство"Color" не идентефицированно)
>> MAXScript Mouse Tool event handler Exception:
-- Unknown property: "color"
in undefined <<
И выделяет эту строчку, в которой, были сделаны изменения.
Я ради "спортивного" попробовал вставить RANDOM BLACK WHITE-
ЭТО он понял а с пикером не хотит.....
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#4
надо приводить сам текст скрипта иначе непоятно где ошибка

-- =========================================================

plugin textureMap drawMap
name:"DrawMap"
classid:#(0xb01b213a,0xdbe89dc8)
extends:bitmaptexture
replaceui:true
(
local pointarray = #(),tmap,t_draw
--local color = #(color 255 255 0)

fn getuvinfo obj sray =
(
local intray,tvface,tvarray,tv
if obj == undefined do return()
intray = intersectrayex obj sray
if intray == undefined do return()
try
(
tvface = gettvface obj intray[2]
)
catch (
print "No tv faces"
return()
)
tvarray = #(gettvert obj tvface.x,
gettvert obj tvface.y,gettvert obj tvface.z)
tv = (tvarray[1]*intray[3].x)+(tvarray[2] * intray[3].y)+(tvarray[3] * intray[3].z)
)
/*
fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos c -- #(color 255 255 0)
)
*/
fn drawhelper obj sray =
(
local intray
if obj == undefined do return()
intray = intersectray obj sray
if intray == undefined do return()
append pointArray (point pos:intRay.pos showaxis:false)
)

parameters main rollout:params
(
clp_color type:#color ui:clp_color
cbt_draw type:#boolean ui:cbt_draw

on cbt_draw set state do
(
if $ == undefined do (
cbt_draw = false;return()
)
if not (iskindof $ editadlemesh) do addmodifier $ (normalmodifier())
while state == true do (
starttool t_draw
)
if state == false do stoptool t_draw
)
)

rollout params "DrawMap Parameters"
(
colorpicker clp_color "SetColor" color:(color 255 255 0)
checkbutton cbt_draw "Draw" highlightcolor:(color 180 255 180)

)
fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos #(c) -- #(color 255 255 0)
)

tool t_draw
(
local uvdata

on mousepoint click do
(
if click == 1 then (
uvdata = getuvinfo $ (mapscreentoworldray viewpoint)
if uvdata == undefined do return()
drawbitmap delegate.bitmap uvdata
drawhelper $ (mapscreentoworldray viewpoint)
)
else
(
delete pointarray; pointarray = #()
delegate.apply = true
#stop
)
)

on mouseabort click do cbt_draw = false
)

on create do
(
save (bitmap 256 256 filename:("c:\\drawmap.bmp"))
tmap = (openbitmap ("c:\\drawmap.bmp"));close tmap
delegate.filename = ("c:\\drawmap.bmp")

)
)


-- =========================================================
 
#5
ООГРОМНОЕ СПАСИБО за вашу помощь теперь всё работает. Я даже чуть-чуть понял что Вы и зачем изменили --как я понял:

/*
fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos c -- #(color 255 255 0)
)
*/

В этот фрагмент был перенесён в окнчание скрипта, и в нем создаётся переменная которая будет хранить текущий цвет пикера(clp_color) , по умолчанию цвет чёрный.

parameters main rollout:params
(
clp_color type:#color ui:clp_color... А здесь новый тип, который наследует параметры от пикера clp_color.
Ещё раз благодарю. Теперь буду бошку ломать над тем чтоб, была кнопочка, которая откроет текстуру из файла --Jpg и др. Так можно будет рисовать точки на рисунке...
 
Сверху