Render.ru

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

Andrew Lopatin

Активный участник
Рейтинг
5
#1
Доброго времени господа!) помогите пожалуйста разобраться, никак не дается решение, задача: указать обьект, клонировать его, назначить контр.аттачмент, указать цел.обьект и разместить на нем созданый. Застрял на моменте пиканья, никак не удается "привязать" мышку к ноде( вот собсна что получилось, не много, только учусь, подскажите плиз, а

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
 

igorznag

Мастер
Рейтинг
103
#2
Пример: Запускаем скрипт. Открывается новое окно.
Нажимаем кнопку 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
 

Andrew Lopatin

Активный участник
Рейтинг
5
#4
Доброго времени уважаемые) а подскажите пожалуйста, возможноли средствами кода выделить обьект мышкой, тоесть написать код, а выделять обьект мышкой, ну например чтоб записать его в переменную
 

igorznag

Мастер
Рейтинг
103
#5
Если я вас правильно понял, тогда используйте функцию 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

Активный участник
Рейтинг
5
#6
Спасибо большое) решил в конце концов начать изучать MS) вот и лезут мысли всякие в голову)))
 

Andrew Lopatin

Активный участник
Рейтинг
5
#7
Доброго времени господа! Чет никак не могу я понять систему написания скриптов( вот Вы igorznag написали скрипт таким образом что на каждое "действие" своя кнопка т.е. соурс, драйвер и конформ (помоему так называются)), а я изначально думал что можно все эти действия в скрипте заложить, и нажав одну кнопку поочередно пикнуть соурс, затем указать драйвер и тутже начнется размещение на драйвере. И вот же засада, ну никак не получается у меня такое написать((( может я неправильно понимаю все, может нельза такова впринципе написать?(
 

igorznag

Мастер
Рейтинг
103
#8
Вы igorznag написали скрипт таким образом что на каждое "действие" своя кнопка т.е. соурс, драйвер и конформ
Я написал такой скрипт в сообщение 2.
я изначально думал что можно все эти действия в скрипте заложить, и нажав одну кнопку поочередно пикнуть соурс, затем указать драйвер и тутже начнется размещение на драйвере. И вот же засада, ну никак не получается у меня такое написать
Я написал такой скрипт в сообщение 5.
Вы читали сообщение 5? Чем вас не устраивает скрипт из сообщения 5?
 

Andrew Lopatin

Активный участник
Рейтинг
5
#9
очень извиняюсь)сам не пойму как так произошло,но я скопировал видимо дважды один и тот же код, блин, мой косяк, сори)
 

Andrew Lopatin

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

igorznag

Мастер
Рейтинг
103
#11
А задачу я себе поставил следующую: нажимаем чекБатон, выполняется какой нибудь скрипт(да хоть бокс создается) и кнопка отключается(сама).
Пример: Запускаем скрипт. Открывается новое окно.
Включаем кнопку 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

Активный участник
Рейтинг
5
#12
Игорь, спасибо огромное!!! хотел сам сделать))) ну попробую разобраться что там к чему) я через вот такую форму пробовал

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


видимо я еще просто не понимаю синтаксис построения скриптов, хотя самому кажется что все понятно, вот же незадача)))
 
Сверху