3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

191 страниц V  « < 173 174 175 176 177 > »   
Reply to this topicStart new topic
> А нет-ли такого скрипта?
Jahman
сообщение 13/12/2017, 09:28
Сообщение #2611


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



ты хочешь разбить сплайн на составные части? т.е. один шейп = один сплайн?
Go to the top of the page
 
+Quote Post
Jahman
сообщение 13/12/2017, 09:45
Сообщение #2612


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



explode spline
CODE
for shp in selection where superclassof shp == shape do (

    local count = shp.numsplines

    for i = 1 to count do
    (
        ns = splineShape ()
        addnewspline ns
        for k = 1 to (numKnots shp i) do(
            
            knotpos  = getKnotPoint shp i k
            segtype  = getSegmentType shp i k
            knottype = getKnotType shp i k
                
            if knottype == #bezier or knottype == #bezierCorner then
            (
                addknot ns 1 knottype segtype knotpos (getInVec shp i k) (getOutVec shp i k)
            )
             else
            (
                addknot ns 1 knottype segtype knotpos
             )
            
            
        )
        if (isClosed shp i) then close ns 1
        
        updateshape ns
        
        ns.name = uniqueName (shp.name + "_spl_" + (i as string))
        
    )

)
Go to the top of the page
 
+Quote Post
Ded_
сообщение 13/12/2017, 18:17
Сообщение #2613


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 180
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Цитата(Jahman @ 13/12/2017, 10:45) *
explode spline
Код
for shp in selection where superclassof shp == shape do (

    local count = shp.numsplines

    for i = 1 to count do
    (
        ns = splineShape ()
        addnewspline ns
        for k = 1 to (numKnots shp i) do(
            
            knotpos  = getKnotPoint shp i k
            segtype  = getSegmentType shp i k
            knottype = getKnotType shp i k
                
            if knottype == #bezier or knottype == #bezierCorner then
            (
                addknot ns 1 knottype segtype knotpos (getInVec shp i k) (getOutVec shp i k)
            )
             else
            (
                addknot ns 1 knottype segtype knotpos
             )
            
            
        )
        if (isClosed shp i) then close ns 1
        
        updateshape ns
        
        ns.name = uniqueName (shp.name + "_spl_" + (i as string))
        
    )

)


Я в общем до этого хоть и посмотрел твою ссылку выше на VG но не фига не запомнил, там есть эта штука что я пытался воспроизвести через Поли объект )
Думаю я просто увлекся самим процессом, да и хоть немного для себя закрепил простые вещи для копирования с листенера.

Я вот про это:
V G .UniformSpline Information:
This plugin allows to modify spline/shape object
Go to the top of the page
 
+Quote Post
Kondo
сообщение 15/01/2018, 20:13
Сообщение #2614


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 72
Регистрация: 08/09/2006
Из: UA
Пользователь №: 36 576



Приветствую всех!
Помогите пожалуйста, кому не лень допилить скрипт. Хочу стандартный максовский Constraints (poly) повесить на кнопки своей панельки. На toolBars знаю как повесить, но это не то. Саму панель с кнопками собрал, и все даже работает, но не так, как хотелось бы.
Хотелось-бы по нормальному: При нажатии Edge, включается констраинт Edge. При нажатии Face, отключается кнопка edge, и включается Face. Ну и с normal так-же. Т.е. при нажатии одной кнопки, отключается другая. Отключаются констраинты отжатием любой кнопки.

CODE
try(destroyDialog MyScripts)catch()
rollout MyScripts "Constraints"

(
checkbutton ckb1 "Edge" tooltip:"Constraint Edge" width:45 height:25 pos:[5,5]
on ckb1 changed state do
if state == on then
$.constrainType = 1
else
$.constrainType = 0

checkButton ckb2 "Face" tooltip:"Constraint Face" width:45 height:25 pos:[52,5]
on ckb2 changed state do
if state == on then
$.constrainType = 2
else
$.constrainType = 0

checkButton ckb3 "Normal" tooltip:"Constraint Normal" width:45 height:25 pos:[99,5]
on ckb3 changed state do
if state == on then
$.constrainType = 3
else
$.constrainType = 0
)
createDialog MyScripts 149 35 800 90
Go to the top of the page
 
+Quote Post
Jahman
сообщение 15/01/2018, 21:16
Сообщение #2615


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



По хорошему это надо совсем по иному делать.
При создании роллаута создается NodeEventCallback который следит за изменением выделения.
Если у выделенного объекта/ов есть свойство constrainType или имеется edit_poly модификатор, кнопки включения/выключения констрейнтов активируются/деактивирутся соответственно.

Если выделено два объекта и у одного активен едж, а у другого фейс констрейнт, какие кнопки включать?

CODE
try (destroydialog X ) catch ()
rollout X "" width:170 (

    checkbutton edgecb "Edge" tooltip:"Constraint Edge" width:45 height:25 across:3
    checkButton facecb "Face" tooltip:"Constraint Face" width:45 height:25
    checkButton normcb "Normal" tooltip:"Constraint Normal" width:45 height:25
    
    local disableConstraints = false
    
    fn setConstraint mode = (
        
        if mode == 0 and disableConstraints then (
            
            edgecb.checked = facecb.checked = normcb.checked = false
            for s in selection where isProperty s #constrainType do s.constrainType = 0
            
        ) else (
            
            disableConstraints = false
            
            case mode of (
                
                1 : facecb.checked = normcb.checked = false
                2 : edgecb.checked = normcb.checked = false
                3 : edgecb.checked = facecb.checked = false                
            )
            
            disableConstraints = true
            
            for s in selection where isProperty s #constrainType do s.constrainType = mode
                
            -- TODO: check if object has Edit_Poly modifier and set constrainType of modifier instead of baseobject
            
        )
        
    )
    
    on edgecb changed state do if state then setConstraint 1 else setConstraint 0
    on facecb changed state do if state then setConstraint 2 else setConstraint 0
    on normcb changed state do if state then setConstraint 3 else setConstraint 0

)
createDialog X pos:[100,100]


Сообщение отредактировал Jahman - 15/01/2018, 21:20
Go to the top of the page
 
+Quote Post
Kondo
сообщение 15/01/2018, 22:30
Сообщение #2616


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 72
Регистрация: 08/09/2006
Из: UA
Пользователь №: 36 576



Цитата(Jahman @ 15/01/2018, 20:16) *
По хорошему это надо совсем по иному делать.

Jahman, спасибо за уделенное время, и помощь! Это то, что было нужно
Как все непросто оказалось.. думал там просто код немного у кнопки поменять надо.. Моих знаний к сожалению хватает только на то, чтоб взять чей-то скрипт, и на его основе попробовать слепить то, что мне надо(
Go to the top of the page
 
+Quote Post
Jahman
сообщение 15/01/2018, 23:14
Сообщение #2617


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



ну, с чего-то надо начинать. расковырять чужой скрипт на детали - лучший как по мне способ освоить максскрипт и заодно познакомиться с практиками его применения.
Go to the top of the page
 
+Quote Post
Никос
сообщение 28/02/2018, 12:15
Сообщение #2618


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 9
Регистрация: 09/02/2017
Пользователь №: 130 198



Доброго времени. Пытаюсь допилить работу с максом под свои нужды. Заинтересовался возможностью вешать на одну клавишу несколько функций в зависимости от количества кликов на нее. И вроде бы даже нашел скрипт на поликаунтере для этого, но он не запускает код, который должен активироваться после двойного нажатия. Может кто в курсе как скрипт нужно откорректировать, чтобы он работал в 2016 максе.

macroscript Doubletap01
Category:" MyTools"
toolTip:"Double Tap 01"
(
fn checklastClicked = (
local thisClicked = timeStamp()
if lastClicked != undefined then (
if (thisClicked - lastClicked) < 500 do (--adjust this value to shorten or lengthen wait time (in milliseconds)
--insert double tap function here
)
lastClicked = thisClicked
)
else (
--insert single tap function here
)
OK
)
checklastClicked()
)

ссылка на тему на поликаунтере. http://polycount.com/discussion/comment/16...Comment_1681417
Go to the top of the page
 
+Quote Post
igorznag2
сообщение 28/02/2018, 22:06
Сообщение #2619


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 153
Регистрация: 14/08/2015
Пользователь №: 109 394



Цитата(Никос @ 28/02/2018, 12:15) *
Заинтересовался возможностью вешать на одну клавишу несколько функций в зависимости от количества кликов на нее.

Попробуйте такой вариант. Используем таймер.
Код
global lastClicked_igorznag, double_click_igorznag, ftm_igorznag
fn onTick s e =
(
    if double_click_igorznag then
    (
        print "double click"--insert double tap function here
    )
    else
    (
        print "single click"--insert single tap function here
    )
    s.Stop()
)
    
macroscript Doubletap01
Category:" MyTools"
toolTip:"Double Tap 01"
(
    fn checklastClicked =
    (
        _interval=250 --adjust this value to shorten or lengthen wait time (in milliseconds)
        if ftm_igorznag==undefined do
        (
            ftm_igorznag = dotnetobject "System.Windows.Forms.Timer"
            ftm_igorznag.Interval = _interval
            dotnet.addEventHandler ftm_igorznag "Tick" onTick
        )--if ftm==undefined do
        thisClicked = timeStamp(); double_click_igorznag=false
        if lastClicked_igorznag != undefined do
        if (thisClicked - lastClicked_igorznag) < _interval do double_click_igorznag=true
        lastClicked_igorznag = thisClicked
        if ftm_igorznag.enabled==false do ftm_igorznag.Start()
        OK
    )
    checklastClicked()
)



Прикрепленное изображение
Go to the top of the page
 
+Quote Post
харумскарум
сообщение 28/02/2018, 22:17
Сообщение #2620


щепдро.
Иконка группы

Группа: Пользователи
Сообщений: 1 530
Регистрация: 24/04/2008
Из: минск
Пользователь №: 63 638



а нет ли такого скрипта чтобы при перемещении крайней точки сплайна с зажатым shift вытягавался новый сегмент (по аналогии shift+drag ребра в editpoly с образованием нового полигона)

Сообщение отредактировал харумскарум - 28/02/2018, 22:18
Go to the top of the page
 
+Quote Post
igorznag2
сообщение 01/03/2018, 10:42
Сообщение #2621


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 153
Регистрация: 14/08/2015
Пользователь №: 109 394



Цитата(харумскарум @ 28/02/2018, 23:17) *
а нет ли такого скрипта чтобы при перемещении крайней точки сплайна с зажатым shift вытягавался новый сегмент (по аналогии shift+drag ребра в editpoly с образованием нового полигона)

Почему для вас не подходит кнопка Insert?
Go to the top of the page
 
+Quote Post
[Vitus]
сообщение 01/03/2018, 11:44
Сообщение #2622


Мастер
Иконка группы

Группа: Участник
Сообщений: 1 280
Регистрация: 30/05/2006
Пользователь №: 32 013



2 харумскарум: Припоминаю, что на cgsociety поднимался такой вопрос. И там что-то такое говорили, что вроде никак. Но это не точно.
Go to the top of the page
 
+Quote Post
Никос
сообщение 01/03/2018, 16:52
Сообщение #2623


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 9
Регистрация: 09/02/2017
Пользователь №: 130 198



Цитата(igorznag2 @ 28/02/2018, 22:06) *
Цитата(Никос @ 28/02/2018, 12:15) *
Заинтересовался возможностью вешать на одну клавишу несколько функций в зависимости от количества кликов на нее.

Попробуйте такой вариант. Используем таймер.
Код
global lastClicked_igorznag, double_click_igorznag, ftm_igorznag
fn onTick s e =
(
    if double_click_igorznag then
    (
        print "double click"--insert double tap function here
    )
    else
    (
        print "single click"--insert single tap function here
    )
    s.Stop()
)
    
macroscript Doubletap01
Category:" MyTools"
toolTip:"Double Tap 01"
(
    fn checklastClicked =
    (
        _interval=250 --adjust this value to shorten or lengthen wait time (in milliseconds)
        if ftm_igorznag==undefined do
        (
            ftm_igorznag = dotnetobject "System.Windows.Forms.Timer"
            ftm_igorznag.Interval = _interval
            dotnet.addEventHandler ftm_igorznag "Tick" onTick
        )--if ftm==undefined do
        thisClicked = timeStamp(); double_click_igorznag=false
        if lastClicked_igorznag != undefined do
        if (thisClicked - lastClicked_igorznag) < _interval do double_click_igorznag=true
        lastClicked_igorznag = thisClicked
        if ftm_igorznag.enabled==false do ftm_igorznag.Start()
        OK
    )
    checklastClicked()
)



Прикрепленное изображение



Благодарю за помощь, попробовал использовать вашу версию. Листнер выдает ошибку. win 10 max 2016

-- Error occurred in checklastClicked(); filename: C:\Users\User18\AppData\Local\Autodesk\3dsMax\2016 - 64bit\ENU\usermacros\Custom-test_double_tap.mcr; position: 731; line: 25
-- Frame:
-- ftm_igorznag: dotNetObject:System.Windows.Forms.Timer
-- _interval: 250
-- thisClicked: undefined
-- lastClicked_igorznag: undefined
-- onTick: undefined
-- double_click_igorznag: undefined
-- called in anonymous codeblock; filename: C:\Users\User18\AppData\Local\Autodesk\3dsMax\2016 - 64bit\ENU\usermacros\Custom-test_double_tap.mcr; position: 1127; line: 35
-- Frame:
-- checklastClicked: checklastClicked()
>> MAXScript MacroScript Error Exception:
-- Runtime error: dotNet event handler must be a functions, got: undefined <<


Go to the top of the page
 
+Quote Post
харумскарум
сообщение 01/03/2018, 19:14
Сообщение #2624


щепдро.
Иконка группы

Группа: Пользователи
Сообщений: 1 530
Регистрация: 24/04/2008
Из: минск
Пользователь №: 63 638



Цитата(igorznag2 @ 01/03/2018, 10:42) *
Цитата(харумскарум @ 28/02/2018, 23:17) *
а нет ли такого скрипта чтобы при перемещении крайней точки сплайна с зажатым shift вытягавался новый сегмент (по аналогии shift+drag ребра в editpoly с образованием нового полигона)

Почему для вас не подходит кнопка Insert?

вот это да! век живи - век учись... ) большое спасибо!
Go to the top of the page
 
+Quote Post
igorznag2
сообщение 01/03/2018, 20:05
Сообщение #2625


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 153
Регистрация: 14/08/2015
Пользователь №: 109 394



Цитата(Никос @ 01/03/2018, 17:52) *
Благодарю за помощь, попробовал использовать вашу версию. Листнер выдает ошибку. win 10 max 2016

Копируйте полностью код или используйте следующий код:
Код
macroscript Doubletap01
Category:" MyTools"
toolTip:"Double Tap 01"
(
    global lastClicked_igorznag, double_click_igorznag, ftm_igorznag
    global onTick
    fn onTick s e =
    (
        if double_click_igorznag then
        (
            print "double click"--insert double tap function here
        )
        else
        (
            print "single click"--insert single tap function here
        )
        s.Stop()
    )
    fn checklastClicked =
    (
        _interval=250 --adjust this value to shorten or lengthen wait time (in milliseconds)
        if ftm_igorznag==undefined do
        (
            ftm_igorznag = dotnetobject "System.Windows.Forms.Timer"
            ftm_igorznag.Interval = _interval
            dotnet.addEventHandler ftm_igorznag "Tick" onTick
        )--if ftm==undefined do
        thisClicked = timeStamp(); double_click_igorznag=false
        if lastClicked_igorznag != undefined do
        if (thisClicked - lastClicked_igorznag) < _interval do double_click_igorznag=true
        lastClicked_igorznag = thisClicked
        if ftm_igorznag.enabled==false do ftm_igorznag.Start()
        OK
    )
    checklastClicked()
)
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






191 страниц V  « < 173 174 175 176 177 > » 
Reply to this topicStart new topic

4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19/04/2024 - 22:39