1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "MAXScript", создана пользователем -, 12 апр 2003.

Модераторы: Savin Denis
  1. Guest

    Я тута вздумал 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 вродь теперь цвет пикселей должон быть настраеваемым, но этого не происходит.Пишет ошибку какуюто. Помогите разобраться с ним, пожалуйста,
    спасибо всем.
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    в setpixels ты должен передовать не цвет а указатель на массив

    setpixels bmap ppos #(Picker.Color)
     
  3. Guest

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

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    надо приводить сам текст скрипта иначе непоятно где ошибка

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

    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. Guest

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

    /*
    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 и др. Так можно будет рисовать точки на рисунке...
     
Модераторы: Savin Denis

Поделиться этой страницей