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

контроллер attachment, как в скрипте пикнуть ноду?

Тема в разделе "MAXScript", создана пользователем Andrew Lopatin, 16 сен 2014.

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

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    Доброго времени господа!) помогите пожалуйста разобраться, никак не дается решение, задача: указать обьект, клонировать его, назначить контр.аттачмент, указать цел.обьект и разместить на нем созданый. Застрял на моменте пиканья, никак не удается "привязать" мышку к ноде( вот собсна что получилось, не много, только учусь, подскажите плиз, а

    rollout unnamedRollout "Untitled" width:162 height:300
    (
    pickbutton pickbutton "PickButton" pos:[8,8] width:145 height:33
    pickbutton DriverPicker "DrvPick" pos:[8,48] width:145 height:33 enabled:true
    on pickbutton picked obj do
    (
    if SuperClassOf(obj) == GeometryClass then

    (

    PickButton.caption = obj.name

    select obj

    s=obj

    actrl = Attachment()

    s.position.controller = actrl

    (

    actrl.node = on mousePoint clickno do

    if on == 1 then obj select else #stop

    )

    )

    else

    messageBox "bla-bla-bla"

    )
    )
    createdialog unnamedRollout
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Пример: Запускаем скрипт. Открывается новое окно.
    Нажимаем кнопку SrcPick и выбираем нужный обьект.
    Нажимаем кнопку DrvPick и выбираем нужный цел.обьект.
    Нажимаем кнопку CloneSetPosition и перемещаем курсор мыши над поверхностью цел.обьекта.
    Нажимаем левую или правую кнопку мыши, чтобы зафиксировать положение объекта.
    Код:
    rollout unnamedRollout "Untitled" 
    (
    fn obj_filt obj = SuperClassOf obj == GeometryClass 
    pickbutton sourcePicker "SrcPick"  width:145 height:33 filter:obj_filt
    pickbutton DriverPicker "DrvPick" width:145 height:33 filter:obj_filt
    button btnsetpos "CloneSetPosition"  width:145 height:33
    local source_obj, driver_obj, cloned_obj
    tool select_pos
    (
    on mousePoint clickno do if clickno == 1 then 
    (try deletemodifier driver_obj 1 catch(); #stop)
    on mouseAbort clickno do try deletemodifier driver_obj 1 catch()
    on freeMove do
    (
    try
    (
    theRay = mapScreenToWorldRay mouse.pos
    theInt = IntersectRayEx driver_obj theRay
    if theInt !=undefined then
    (
    actrl=cloned_obj.pos.controller
    theAKey=AttachCtrl.getKey actrl 1 
    p=theInt[1].pos; i=theInt[2]; bc=theInt[3]
    theAKey.coord=[bc.x,bc.y]; theAKey.face=i-1;
    AttachCtrl.update actrl
    )--if theInt !=undefined then
    )catch()
    )--on freeMove do
    )--tool PointCreator
    on bbb picked obj do starttool select_pos
    on sourcePicker picked obj do (source_obj=obj;sourcePicker.caption = obj.name)
    on DriverPicker picked obj do (driver_obj=obj;DriverPicker.caption = obj.name)
    on btnsetpos pressed do
    (
    try
    (
    maxOps.cloneNodes source_obj cloneType:#copy newNodes:&nnl; cloned_obj=nnl[1]
    m=Turn_to_Mesh(); addmodifier driver_obj m
    select cloned_obj;
    actrl = Attachment();cloned_obj.position.controller = actrl
    actrl.node = driver_obj; addNewKey actrl 0f
    starttool select_pos
    )catch()
    )--on btnsetpos pressed do
    );createdialog unnamedRollout
     
  3. Andrew Lopatin

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    спасибо большое!!!:)
     
  4. Andrew Lopatin

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    Доброго времени уважаемые) а подскажите пожалуйста, возможноли средствами кода выделить обьект мышкой, тоесть написать код, а выделять обьект мышкой, ну например чтоб записать его в переменную
     
  5. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Если я вас правильно понял, тогда используйте функцию pickObject.
    Пример: Запускаем скрипт. Открывается новое окно.
    Нажимаем один раз кнопку CloneSetPosition и выбираем нужный обьект.
    Потом выбираем нужный цел.обьект и перемещаем курсор мыши над поверхностью цел.обьекта.
    Нажимаем левую или правую кнопку мыши, чтобы зафиксировать положение объекта.
    Код:
    try destroydialog unnamedRollout catch()
    rollout unnamedRollout "Untitled" 
    (
    fn obj_filt obj = SuperClassOf obj == GeometryClass 
    button btnsetpos "CloneSetPosition"  width:145 height:33
    local driver_obj, cloned_obj
    tool select_pos
    (
    on mousePoint clickno do if clickno == 1 then 
    (try deletemodifier driver_obj 1 catch(); #stop)
    on mouseAbort clickno do try deletemodifier driver_obj 1 catch()
    on freeMove do
    (
    try
    (
    theRay = mapScreenToWorldRay mouse.pos
    theInt = IntersectRayEx driver_obj theRay
    if theInt !=undefined then
    (
    actrl=cloned_obj.pos.controller
    theAKey=AttachCtrl.getKey actrl 1 
    p=theInt[1].pos; i=theInt[2]; bc=theInt[3]
    theAKey.coord=[bc.x,bc.y]; theAKey.face=i-1;
    AttachCtrl.update actrl
    )--if theInt !=undefined then
    )catch()
    )--on freeMove do
    )--tool PointCreator
    on btnsetpos pressed do
    (
    try
    (
    source_obj=pickObject filter:obj_filt
    if isvalidnode source_obj then
    (
    driver_obj=pickObject filter:obj_filt rubberBand:source_obj.pos
    if isvalidnode driver_obj then
    (
    maxOps.cloneNodes source_obj cloneType:#copy newNodes:&nnl; cloned_obj=nnl[1]
    m=Turn_to_Mesh(); addmodifier driver_obj m
    select cloned_obj;
    actrl = Attachment();cloned_obj.position.controller = actrl
    actrl.node = driver_obj; addNewKey actrl 0f
    starttool select_pos
    )--if driver_obj source_obj then
    )--if isvalidnode source_obj then
    )catch()
    )--on btnsetpos pressed do
    );createdialog unnamedRollout
     
    Andrew Lopatin нравится это.
  6. Andrew Lopatin

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    Спасибо большое) решил в конце концов начать изучать MS) вот и лезут мысли всякие в голову)))
     
  7. Andrew Lopatin

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    Доброго времени господа! Чет никак не могу я понять систему написания скриптов( вот Вы igorznag написали скрипт таким образом что на каждое "действие" своя кнопка т.е. соурс, драйвер и конформ (помоему так называются)), а я изначально думал что можно все эти действия в скрипте заложить, и нажав одну кнопку поочередно пикнуть соурс, затем указать драйвер и тутже начнется размещение на драйвере. И вот же засада, ну никак не получается у меня такое написать((( может я неправильно понимаю все, может нельза такова впринципе написать?(
     
  8. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Я написал такой скрипт в сообщение 2.
    Я написал такой скрипт в сообщение 5.
    Вы читали сообщение 5? Чем вас не устраивает скрипт из сообщения 5?
     
  9. Andrew Lopatin

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    очень извиняюсь)сам не пойму как так произошло,но я скопировал видимо дважды один и тот же код, блин, мой косяк, сори)
     
  10. Andrew Lopatin

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    Доброго всем времени и хорошего настроения!!!никак не выходит у меня каменный цветок))) возраст чтоли, не пойму(, может подскажете как работать с кнопкой checkedButon, почитал во здесь http://forum.darkdragons.ru/showthread.php?t=1024 чет ничего не понятно, не дает никакой инфы про то как ей(кнопкой) пользоваться. А задачу я себе поставил следующую: нажимаем чекБатон, выполняется какой нибудь скрипт(да хоть бокс создается) и кнопка отключается(сама). Ну никак не получается( может такова вообще нельзя сделать? Хотя этож максскрипт, я думаю там все можно(
     
  11. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Пример: Запускаем скрипт. Открывается новое окно.
    Включаем кнопку CloneSetPosition и выбираем нужный обьект.
    Потом выбираем нужный цел.обьект и перемещаем курсор мыши над поверхностью цел.обьекта.
    Нажимаем левую или правую кнопку мыши, чтобы зафиксировать положение объекта.
    Код:
    try destroydialog unnamedRollout catch()
    rollout unnamedRollout "Untitled" 
    (
    fn obj_filt obj = SuperClassOf obj == GeometryClass 
    checkbutton btnsetpos "CloneSetPosition"  width:145 height:33
    local driver_obj, cloned_obj
    tool select_pos
    (
    on mousePoint clickno do if clickno == 1 then 
    (try deletemodifier driver_obj 1 catch(); #stop)
    on mouseAbort clickno do try deletemodifier driver_obj 1 catch()
    on freeMove do
    (
    try
    (
    theRay = mapScreenToWorldRay mouse.pos
    theInt = IntersectRayEx driver_obj theRay
    if theInt !=undefined then
    (
    actrl=cloned_obj.pos.controller
    theAKey=AttachCtrl.getKey actrl 1 
    p=theInt[1].pos; i=theInt[2]; bc=theInt[3]
    theAKey.coord=[bc.x,bc.y]; theAKey.face=i-1;
    AttachCtrl.update actrl
    )--if theInt !=undefined then
    )catch()
    )--on freeMove do
    )--tool PointCreator
    on btnsetpos changed theState  do
    (
    if theState==true then
    (
    try
    (
    source_obj=pickObject filter:obj_filt
    if isvalidnode source_obj then
    (
    driver_obj=pickObject filter:obj_filt rubberBand:source_obj.pos
    if isvalidnode driver_obj then
    (
    maxOps.cloneNodes source_obj cloneType:#copy newNodes:&nnl; cloned_obj=nnl[1]
    m=Turn_to_Mesh(); addmodifier driver_obj m
    select cloned_obj;
    actrl = Attachment();cloned_obj.position.controller = actrl
    actrl.node = driver_obj; addNewKey actrl 0f
    starttool select_pos
    )--if driver_obj source_obj then
    )--if isvalidnode source_obj then
    btnsetpos.checked=false
    )catch()
    )--if theState==true then
    else btnsetpos.checked=true
    )--on btnsetpos changed theState  do
    );createdialog unnamedRollout
     
    Andrew Lopatin нравится это.
  12. Andrew Lopatin

    Andrew Lopatin Активный участник

    С нами с:
    10.12.2006
    Сообщения:
    66
    Симпатии:
    0
    Баллы:
    5
    Игорь, спасибо огромное!!! хотел сам сделать))) ну попробую разобраться что там к чему) я через вот такую форму пробовал

    rollout unnamedRollout "Untitled" width:162 height:300

    (

    fn MoF = ckb1 checked == false

    checkbutton ckb1 "CheckButton" pos:[5,10] width:148 height:44

    on ckb1 changed state do

    (if state == true then

    box()

    else MoF

    )
    )
    createdialog unnamedRollout


    видимо я еще просто не понимаю синтаксис построения скриптов, хотя самому кажется что все понятно, вот же незадача)))
     
Модераторы: Savin Denis

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