3DCenter.ru

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

79 страниц V  « < 76 77 78 79 >  
Reply to this topicStart new topic
> Я только начинаю изучать Maxscript
Jahman
сообщение 01/09/2016, 22:18
Сообщение #1156


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

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



как вариант попробовать заменить "DependsOn_0.rotation.controller.value" на "$Char_R_UpperArm.rotation.controller.value"
в скриптовых контроллерах едва понимаю что куда
Go to the top of the page
 
+Quote Post
Ded_
сообщение 03/09/2016, 08:40
Сообщение #1157


Бывалый
Иконка группы

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



Цитата(Jahman @ 01/09/2016, 23:18) *
как вариант попробовать заменить "DependsOn_0.rotation.controller.value" на "$Char_R_UpperArm.rotation.controller.value"
в скриптовых контроллерах едва понимаю что куда

Ок.
Спасибо, то что надо!
Go to the top of the page
 
+Quote Post
Kar2912
сообщение 16/09/2016, 17:13
Сообщение #1158


Советчик
Иконка группы

Группа: Пользователи
Сообщений: 75
Регистрация: 09/06/2009
Пользователь №: 70 500



можно ли повернуть на 90 градусов в любую сторону выделительный Segment или отдельный Spline?
Например: У меня есть два Circle они приатачины друг к другу, один из них выделен с помощью Spline, и его мне нужно повернуть на 90 градусов!

Заранее спасибо с Уважением Александр!
Go to the top of the page
 
+Quote Post
Jahman
сообщение 16/09/2016, 18:45
Сообщение #1159


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

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



можно конечно. со сплайнами целая морока

поворачивать надо по одному сплайну/сегменту, поскольку поворачивать он будет вокруг центра выделения

CODE
fn splineRotateSel90 shp axis: = ( -- rotate subobject selection (spline/segment) by 90degrees

            if superclassof shp == shape do (
                max modify mode
                with redraw off (
                    
                    modPanel.addModToSelection (xform())
                    axis = if classof axis != point3 then (if random 0.0 1.0 > 0.5 then [1,0,0] else [0,1,0]) else axis
                    shp.modifiers[1].gizmo.rotation = quat 90 axis
                    collapseStack shp

                )
            )
        )

splineRotateSel90 $


в необязательной переменной axis можно указать ось вращения

Сообщение отредактировал Jahman - 16/09/2016, 18:52
Go to the top of the page
 
+Quote Post
Kar2912
сообщение 19/09/2016, 09:40
Сообщение #1160


Советчик
Иконка группы

Группа: Пользователи
Сообщений: 75
Регистрация: 09/06/2009
Пользователь №: 70 500



Цитата(Jahman @ 16/09/2016, 19:45) *
можно конечно. со сплайнами целая морока

поворачивать надо по одному сплайну/сегменту, поскольку поворачивать он будет вокруг центра выделения

Код
fn splineRotateSel90 shp axis: = ( -- rotate subobject selection (spline/segment) by 90degrees

            if superclassof shp == shape do (
                max modify mode
                with redraw off (
                    
                    modPanel.addModToSelection (xform())
                    axis = if classof axis != point3 then (if random 0.0 1.0 > 0.5 then [1,0,0] else [0,1,0]) else axis
                    shp.modifiers[1].gizmo.rotation = quat 90 axis
                    collapseStack shp

                )
            )
        )

splineRotateSel90 $


в необязательной переменной axis можно указать ось вращения



Спасибо все работает ))
Go to the top of the page
 
+Quote Post
bizkitlimp1
сообщение 25/09/2016, 10:35
Сообщение #1161


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

Группа: Пользователи
Сообщений: 65
Регистрация: 24/06/2010
Пользователь №: 79 099



Как-то накопилось за пару недель.

1.
А как копировать особую коллекцию через CopyTo? Мне нужно чрезвычайно быстро продублировать SelectedIndices в ListView, у него есть метод .CopyTo <System.Array>dest <System.Int32>index. Тест скрипт:
CODE
rollout Test "Test"
(
dotNetControl lvlist "System.Windows.Forms.ListView" width:1050 height:300 align:#center
on Test open do
(
lvlist.GridLines = true
lvlist.FullRowSelect = true
lvlist.HideSelection = false
lvlist.View = (dotNetClass "System.Windows.Forms.View").Details
lvlist.columns.add "Object" 180
for i = 1 to 10 do
lvlist.items.add "Blah"
)
on lvlist MouseUp e do
(
if lvlist.selectedindices.count > 0 do
(
local Selected = #()
lvlist.selectedindices.CopyTo Selected 1
print Selected
)
)
)

try destroyDialog Test catch()
createDialog Test width:1050 height:450

Ни as array, ни #() ничего ему не подоходит! Как создать System.Array нужный просто ума не приложу, там такие классовые методы и типы нужны, тайга сплошная. Сейчас всегда выдает Runtime error: No method found which matched argument list.
Если что, сейчас пользуюсь таким кодом, сработал довольно шустро с несколькими тысячами айтемов:
CODE
lvSelected = #()
local ls = lvlist.items
for i = 0 to ls.count-1 do
(
local li = ls.item[i]
if li.selected do append lvSelected li
)


2.
Есть ли событие на изменение properties в объекте? Это которые Object Properties... там есть кастомные плагинские свойства и нужно знать когда там че-то изменяется. Потому что у меня скрипт это список ListView с 15-ю столбцами именно с этими свойтвами, чтобы массово и быстро редактировать, но вот если через Object Properties поменять напрямую в скрипте никак не отобразить
48[1].gif

3.
Возможно делать потоки(threads)? Я могу делать таймеры, делал 4 штуки, но они все на одном ядре =(
Go to the top of the page
 
+Quote Post
Jahman
сообщение 25/09/2016, 21:40
Сообщение #1162


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

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



1.
CODE
        local Selected = dotnetobject "int32[]" lvlist.selectedindices.count            
        lvlist.selectedindices.CopyTo Selected 1
        format "%\n" selected

дотнет желает дотнетовский массив
тыц

2. Смотря как реализованы твои кастомные свойства на объекте. Такое видел? можно при изменении запустить апдейт интерфейса. Вобщем нужны подробности

3. есть Backgroundworker как вариант. На cgsociety.org полно примеров
Go to the top of the page
 
+Quote Post
bizkitlimp1
сообщение 26/09/2016, 09:02
Сообщение #1163


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

Группа: Пользователи
Сообщений: 65
Регистрация: 24/06/2010
Пользователь №: 79 099



Jahman, спасибо!

Насчет второго, да они в каждом рендере есть вот такие:


Я ешё раз посмотрел хэлп и кажется да. нашел, как бонус ещё NodeEventCallback доступный в "3ds Max 2009 and higher ". Буду разбираться. backgroundworker в копилку. Очень круто, спасибо!
Go to the top of the page
 
+Quote Post
GC3-SLIM
сообщение 19/10/2016, 06:58
Сообщение #1164


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 467
Регистрация: 19/10/2006
Пользователь №: 38 802



Привет всем, последнее время надоело мне постоянно применять к обьектам модификатор Unwrap UVW, и каждый раз настраивать окошко UV эдитора, думал сделать скрипт для того чтобы одним нажатием на него, у меня применялся модификатор и открывалось окно с нужными мне вкладками, например чтобы помимо окошка UV эдитора, ещё раскрывалось окошко релакса с настроенными параметрами, но когда я создаю скрипт с помощью копирования из MAXScript Listener нужных строчек последовательности моих действий, окна у меня не раскрываются, а лишь применяются модификаторы с параметрами, а как сделать чтобы открылось окно с подменюшками?
Может уже и есть чтото подобное для максовского анврапа, если подскажете буду благодарен, я бы вообще не хотел применять этот модификатор, было бы круто если бы он всегда присутствовал на обьекте без самого модификатора, вроде в Майке такое. Может встречали чтото подобное для макса?.

И можно ли сделать чтобы кнопочка Select by Element UV Toggle активировалась допустим при удержании клавиши Ctrl, а если не удерживать её то происходит обычное выделение отдельного элемента?

Сообщение отредактировал GC3-SLIM - 19/10/2016, 07:04
Go to the top of the page
 
+Quote Post
Vilan
сообщение 28/01/2017, 17:10
Сообщение #1165


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 21
Регистрация: 01/03/2016
Пользователь №: 111 388



Добрый день. При создании скрипта используются массивы. К окончанию очень много массивов в памяти.
Как по мере использования массива его удалять, если он больше не нужен?
Возможно ли это делать внутри цикла? Чтобы если есть массив с 1000 единиц при вкладывании один в другой будет 1млн. и тд.
Если 3000 уже 9млн. Как удалять? чтобы быстрее работал скрипт. Спасибо.
Go to the top of the page
 
+Quote Post
Jahman
сообщение 28/01/2017, 17:40
Сообщение #1166


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

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



прежде чем беспокоиться за память надо узнать, а жрется ли она при выполнении скрипта. при смене контекста сборщик мусора может сам удалить все ненужное из памяти. об этом в референсе можно почитать.
и еще надо иметь ввиду, что некоторые функции в максскрипте имеют утечки по памяти, которые не лечатся даже сборщиком мусора.
подобная обертка позволяет довольно наглядно профилировать скрипт при написании

CODE
gc()
t1=timestamp()
hf = heapfree

    -- тут какой-либо скрипт


format "Time: %sec. Mem: %\n" ((timestamp()-t1)/1000 as float) (hf-heapfree)




Сообщение отредактировал Jahman - 28/01/2017, 17:42
Go to the top of the page
 
+Quote Post
Vilan
сообщение 26/02/2017, 13:51
Сообщение #1167


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 21
Регистрация: 01/03/2016
Пользователь №: 111 388



Спасибо, полезно.

Помогите пожалуйста в модификации. Хочу сделать рандом с размещением вершин.

1) Исходные данные:
На плоскости есть разбитая плоскость некими полигонами. Все вершины этих полигонов совпадают между собой.
Полигоны полилиниями каждый отдельно. Полигоны могут быть или сплайн или "едитбл поли". На этом мой алгоритм заканчивается.
Полигоны соприкасаются друг с другом, тоисть на грани соприкосновения находится два обьекта.
В одной вершине может соприкосаться один, два, три, четыре или больше полигонов. Зависит от рандома.

Задача:
(мой предположительный порядок действий)
помогите пожалуйста реализовать, написать скрипт.

- определить какие вершини между собой совпадают;
- как-то связать эти вершини разных обьектов;
- в каждой вершине сделать невидимый круг некого радиуса;
- круги в каждой вершине рандомного радиуса;
- возможность задать мин и макс радиус, или иметь возможность задать два одинаковых радиуса если круги одинаковые хочется;
- переместить вершину всех совпадающих обьектов на любую точку окружности;
- в результате рандомно изменяется разбитие полигонами, модифицыруется размещение всех вершин;
- разные сплайны или полики остаются разными обьектами, только движуться вершины на некое растояние в неком направлении.

Большое спасибо за помощь.
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Jahman
сообщение 26/02/2017, 16:23
Сообщение #1168


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

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



первый пункт показал.
остальное, надеюсь не должно вызывать затруднений

1. Найти все индексы вершин лежащие в некоторой близости друг от друга.
2. Зная какие индексы образуют группу вычислить среднюю позицию, или взять любую позицию вершины из группы вершин
3. Для каждой группы создать окружность
4. Найти рандомную точку на окружности и перенести в нее все вершины группы
~the end~

CODE
fn closeEnough pt1 pt2 dist:0.001 = ( distance pt1 pt2 <= dist )

num = polyop.getNumVerts $
pts = for i=1 to num collect polyop.getVert $ i




vertIndexes = #()
alreadytaken = #{}

for i=1 to num do (
    
    
    for j=1 to num where i != j and closeEnough pts[i] pts[j] and not alreadytaken[j] do (
        
        alreadytaken[i] = true
        alreadytaken[j] = true
        
        if not isKindOf vertIndexes[i] array do vertIndexes[i] = #( i )
        
        appendIfUnique vertIndexes[i] j
        
    )
        
)

vertIndexes = for vi in vertIndexes where vi != undefined collect vi


/* -- можно раскомментить, чтоб выделить все группы вершин
selectionMask = #{}
for vi in vertIndexes do selectionMask += vi as BitArray
polyop.setvertselection $ selectionMask
update $
*/


Сообщение отредактировал Jahman - 26/02/2017, 16:35
Go to the top of the page
 
+Quote Post
Vilan
сообщение 03/03/2017, 23:52
Сообщение #1169


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 21
Регистрация: 01/03/2016
Пользователь №: 111 388



Смотрю и туплю. Прошу помощи в завершении. Спасибо за помощь, хотя конешно прошу все пункты.
Много пишу спасибо, надеюсь это здесь приятно, что помогло человеку.

Напишите пожалуйста второй, третий, четвертый пункты.
Go to the top of the page
 
+Quote Post
Jahman
сообщение 04/03/2017, 02:31
Сообщение #1170


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

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



2. Зная какие индексы образуют группу вычислить среднюю позицию, или взять любую позицию вершины из группы вершин

CODE
averagePositions = for vi in vertIndexes collect (
    pos = [0,0,0]
    for i in vi do pos += pts[ i ]
    pos / vi.count
)




3. Для каждой группы создать окружность

CODE
minr = 10.0
maxr = 15.0
circles = for a in averagePositions collect random minr maxr




4. Найти рандомную точку на окружности и перенести в нее все вершины группы
CODE
for i=1 to vertIndexes.count do (

    randomAngle = random 0.0 360.0
    randomPointOnCircle =  averagePositions[ i ]  + [ cos randomAngle,  sin randomAngle, 0 ] * circles[ i ]

    polyop.setVert $ vertIndexes[i] randomPointOnCircle

)
update $





Это все геометрия класс 8-9, наверное. Синусы, косинусы, вектора. И простейший максскрипт. Тут не должно быть никаких проблем, кроме синтаксиса.
Сразу хочу сказать, что ничего из выше написанного я в максе не запускал.

зы. В любом случае лучше писать самому и просить указать на ошибку нежели пытаться разобраться в чужом коде. Либо сперва поискать чужой код, разобраться, написать свое и спрашивать. В ином случае какой практический смысл?

Сообщение отредактировал Jahman - 04/03/2017, 02:34
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






79 страниц V  « < 76 77 78 79 >
Reply to this topicStart new topic

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

 



RSS Текстовая версия Сейчас: 23/07/2017 - 09:35