Большое спасибо за отклик и помощь,
вопрос как раз в том в каом виде, формате и куда предоставлять данные для анимации,
это не единичный массив, а потоковые данные с 20 - 30 девятиосевых датчиков мокап системы, обработанные альфа бета фильтром и произведенными вычислениями абсолютных координат на контроллерах и последующая концентрация данных в общем контроллере,
как вариант - запись анимации через юсб комп мыши(запись анимации мыши), но там две координаты , или через вход клавиатуры, но пока не ясно будет ли достаточной скорость прохождения данных
в данном случае передаетя три координаты, может еще какой способ есть?
с примером из хелпа еще не разбирался, переводчик не срабатывает почему то
скрипт рабочий - но не у меня. Ошибка следующая:
>> MAXScript MacroScript Error Exception:
-- Unknown property: "EditablePoly" in $selection <<
Макс 2016 SP2. До этого были странные ошибки с другими примитивными скриптами: "ожидается действие или функция", но то излечилось методом тыка неведомым образом. Не подскажете, я тупой или лыжи реально не едут?
Stalker_Lomigorznag, к сожалению, что так, что так - ошибка та же.
Вы выделяете один объект или несколько объектов? Объект является Editable Poly?
Если выделено несколько объектов, тогда нужно использовать первый вариант.
Предоставьте короткое видео или пару скринов, чтобы я увидел ошибку.
Временно запускайте скрипты напрямую (без макроскрипта) и откройте окно MaxScript Listener.
Добрый день.
Есть команда Editable Poly, которая, может при своем некрасивом оформлении, вроде срабатывает хорошо
do ($.EditablePoly.Bridge ()) or ($.EditablePoly.ConnectEdges ())
если выделены открытые грани - то срабатывает Bridge, если закрытые - то срабатывает Connect
Подскажите - как такое реализовать в Edit Poly:
Последнее на чем я остановился:
(
$.modifiers[#Edit_Poly].ButtonOp #ConnectEdges
if ($.modifiers[#Edit_Poly].bridgeselected != undefined) do
(
res = $.modifiers[#Edit_Poly].ButtonOp #BridgeEdge
)
)
На "Варианте слева на картинке" срабатывает, а "на варианте справа" вместо Bridge происходит Connect.
Понимаю, что в условии написана какая-то ерунда, но не знаю - как правильно
co=modPanel.getCurrentObject()
if classof co==Editable_Poly do
(
es=polyop.getedgeselection co; oe=polyop.getOpenEdges co
if (es*oe).numberSet>0 then co.Bridge () else co.ConnectEdges ()
)
if classof co==Edit_Poly do
(
es=co.GetSelection #Edge; co.ConvertSelection #Edge #Border
oe=co.GetSelection #Edge
co.Select #Edge oe invert:true; co.Select #Edge es
if (es*oe).numberSet>0 then co.ButtonOp #BridgeEdge
else co.ButtonOp #ConnectEdges
)
co=modPanel.getCurrentObject()
if classof co==Editable_Poly do
(
es=polyop.getedgeselection co; oe=polyop.getOpenEdges co
if (es*oe).numberSet>0 then co.Bridge () else co.ConnectEdges ()
)
if classof co==Edit_Poly do
(
es=co.GetSelection #Edge; co.ConvertSelection #Edge #Border
oe=co.GetSelection #Edge
co.Select #Edge oe invert:true; co.Select #Edge es
if (es*oe).numberSet>0 then co.ButtonOp #BridgeEdge
else co.ButtonOp #ConnectEdges
)
KoL'TЯ делал через проверку геометрии на изменение полигонов.
Понятно. Тогда будет так:
co=modPanel.getCurrentObject()
if classof co==Editable_Poly do
(
if not co.Bridge() do co.ConnectEdges ()
)
if classof co==Edit_Poly do
(
n1=co.GetNumFaces(); co.ButtonOp #BridgeEdge
n2=co.GetNumFaces()
if n2==n1 do co.ButtonOp #ConnectEdges
)
Супер! Спасибо)) уже 2й раз меня выручаете, не могу найти как - вам кармы добавить.
Я в максскрипте еще профан., но очень интересна эта тема.
С английским не дружу, нашел книгу на русском "Основы 3ds Max 8 Maxscript", Help - пытаюсь переводить в гугл переводчике.
Может вы посоветуете еще какую русскую литературу - с чего можно начать?
d1myanСупер! Спасибо)) уже 2й раз меня выручаете, не могу найти как - вам кармы добавить.
Я в максскрипте еще профан., но очень интересна эта тема.
С английским не дружу, нашел книгу на русском "Основы 3ds Max 8 Maxscript", Help - пытаюсь переводить в гугл переводчике.
Может вы посоветуете еще какую русскую литературу - с чего можно начать?
Подскажите еще со скриптом отключения и включения слоев:
Нашел на scriptspot.com такой скрипт
(
for i = 0 to (layermanager.count - 1) do -- loops through all the layers in the scene
(
x = layermanager.getlayer i -- gets layer
test = x.name as string -- applies the name of layer to test
location = findString test "ref" -- finds "ref" in layer name, output 1 if present
if location == 1 do -- if ref is present in the layer name at the begining, 1 then
(
if x.on == true then x.on = false -- the layer x is on, then turn it off
else x.on = true -- the layer x is off, then turn it on. A toggle on/off really
) -- end if
) -- end loop
)
Он отключает слой с началом названия в примере "ref". Но если в сцене несколько таких слоев и некоторые включены, а некоторые выключены, то он включенные - отключает, а выключенные - включает.
Возможно ли изменить: чтобы если некоторые включены- то он все выключил, а следующим нажатием все включил?
d1myanВозможно ли изменить: чтобы если некоторые включены- то он все выключил, а следующим нажатием все включил?
(
layers_ref=#(); layers_ref_true_count=0
for i = 0 to (layermanager.count - 1) do
(
x = layermanager.getlayer i; test = x.name as string
location = findString test "ref"
if location == 1 do
(
append layers_ref x; if x.on == true do layers_ref_true_count+=1
)-- if location == 1 do
)-- for i = 0 to (layermanager.count - 1) do
for x in layers_ref do if layers_ref_true_count>0 then x.on=false else x.on=true
)
Просмотреть все слои
если в слое количество мешей == 1
(
переименовать меш по названию слоя
переместить этот меш в нулевой слой
удалить слой
)
другое если количество мешей > 1
(
в начале имени названию меша добавит название слоя
)
иначе (удалит слой)
все что я осилил пока, только это.
for i = 0 to (layermanager.count - 1) do
(
_sl = layermanager.getlayer i
_slname = _sl.name as string
_slnode = _sl.getNumNodes()
if _slnode == 1 do
(
format "Layer: %; nodes: %\n" _slname _slnode
)
)
Как работать с имеющимися мешами в слоях не понял.
WandererkzПривет. Как написать скрипт, который:
Просмотреть все слои
если в слое количество мешей == 1
(
переименовать меш по названию слоя
переместить этот меш в нулевой слой
удалить слой
)
другое если количество мешей > 1
(
в начале имени названию меша добавит название слоя
)
иначе (удалит слой)
for i = layerManager.count-1 to 1 by -1 do
(
ilayer = layerManager.getLayer i
layerName = ilayer.name
layer = ILayerManager.getLayerObject i
layer.nodes &layerObjects
if layerObjects.count > 0 then
(
if layerObjects.count > 1 then
(
for o in layerObjects where not matchPattern o.name pattern:(layerName + "_*") do
(
o.name = (layerName + "_" + o.name)
)
)
else
(
(layerManager.getLayer 0).addNode layerObjects[1]
LayerManager.deleteLayerByName layer.name
)
)
else
(
LayerManager.deleteLayerByName layer.name
)
)
добрый день,
подскажите можно ли из макса с помощью макс скрипт напрямую обращаться к базам данных
типа таблицы mysql, не обычные файлы (filestream) ,а постоянно меняющийся поток данных изменяющихся координат объекта?
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Belprof
вопрос как раз в том в каом виде, формате и куда предоставлять данные для анимации,
это не единичный массив, а потоковые данные с 20 - 30 девятиосевых датчиков мокап системы, обработанные альфа бета фильтром и произведенными вычислениями абсолютных координат на контроллерах и последующая концентрация данных в общем контроллере,
как вариант - запись анимации через юсб комп мыши(запись анимации мыши), но там две координаты , или через вход клавиатуры, но пока не ясно будет ли достаточной скорость прохождения данных
в данном случае передаетя три координаты, может еще какой способ есть?
с примером из хелпа еще не разбирался, переводчик не срабатывает почему то
Belprof
Игорь Видлацкий (Stalker_Lom)
Не в первый раз решил осваивать скрипты - подаётся так себе. Есть скрипт:
macroScript Bridge
category: "SLScripts"
tooltip: "Bridge selected edges"
(
selection.bridgeSelected = 1
selection.EditablePoly.Bridge ()
)
скрипт рабочий - но не у меня. Ошибка следующая:
>> MAXScript MacroScript Error Exception:
-- Unknown property: "EditablePoly" in $selection <<
Макс 2016 SP2. До этого были странные ошибки с другими примитивными скриптами: "ожидается действие или функция", но то излечилось методом тыка неведомым образом. Не подскажете, я тупой или лыжи реально не едут?
igorznag
или так:
Игорь Видлацкий (Stalker_Lom)
igorznag
Если выделено несколько объектов, тогда нужно использовать первый вариант.
Предоставьте короткое видео или пару скринов, чтобы я увидел ошибку.
Временно запускайте скрипты напрямую (без макроскрипта) и откройте окно MaxScript Listener.
Игорь Видлацкий (Stalker_Lom)
Дмитрий П (d1myan)
Есть команда Editable Poly, которая, может при своем некрасивом оформлении, вроде срабатывает хорошо
если выделены открытые грани - то срабатывает Bridge, если закрытые - то срабатывает Connect
Подскажите - как такое реализовать в Edit Poly:
Последнее на чем я остановился:
( $.modifiers[#Edit_Poly].ButtonOp #ConnectEdges if ($.modifiers[#Edit_Poly].bridgeselected != undefined) do ( res = $.modifiers[#Edit_Poly].ButtonOp #BridgeEdge ) )На "Варианте слева на картинке" срабатывает, а "на варианте справа" вместо Bridge происходит Connect.Понимаю, что в условии написана какая-то ерунда, но не знаю - как правильно
Вложения
igorznag
co=modPanel.getCurrentObject() if classof co==Editable_Poly do ( es=polyop.getedgeselection co; oe=polyop.getOpenEdges co if (es*oe).numberSet>0 then co.Bridge () else co.ConnectEdges () ) if classof co==Edit_Poly do ( es=co.GetSelection #Edge; co.ConvertSelection #Edge #Border oe=co.GetSelection #Edge co.Select #Edge oe invert:true; co.Select #Edge es if (es*oe).numberSet>0 then co.ButtonOp #BridgeEdge else co.ButtonOp #ConnectEdges )Вложения
KoL'T
Вот ссылка на скрипт:
https://yadi.sk/d/cHa2iiC_32iw8B
igorznag
co=modPanel.getCurrentObject() if classof co==Editable_Poly do ( if not co.Bridge() do co.ConnectEdges () ) if classof co==Edit_Poly do ( n1=co.GetNumFaces(); co.ButtonOp #BridgeEdge n2=co.GetNumFaces() if n2==n1 do co.ButtonOp #ConnectEdges )Дмитрий П (d1myan)
Я в максскрипте еще профан., но очень интересна эта тема.
С английским не дружу, нашел книгу на русском "Основы 3ds Max 8 Maxscript", Help - пытаюсь переводить в гугл переводчике.
Может вы посоветуете еще какую русскую литературу - с чего можно начать?
KoL'T
http://scriptattack.com/theory/theory.html
Дмитрий П (d1myan)
Нашел на scriptspot.com такой скрипт
( for i = 0 to (layermanager.count - 1) do -- loops through all the layers in the scene ( x = layermanager.getlayer i -- gets layer test = x.name as string -- applies the name of layer to test location = findString test "ref" -- finds "ref" in layer name, output 1 if present if location == 1 do -- if ref is present in the layer name at the begining, 1 then ( if x.on == true then x.on = false -- the layer x is on, then turn it off else x.on = true -- the layer x is off, then turn it on. A toggle on/off really ) -- end if ) -- end loop )Он отключает слой с началом названия в примере "ref". Но если в сцене несколько таких слоев и некоторые включены, а некоторые выключены, то он включенные - отключает, а выключенные - включает.Возможно ли изменить: чтобы если некоторые включены- то он все выключил, а следующим нажатием все включил?
igorznag
( layers_ref=#(); layers_ref_true_count=0 for i = 0 to (layermanager.count - 1) do ( x = layermanager.getlayer i; test = x.name as string location = findString test "ref" if location == 1 do ( append layers_ref x; if x.on == true do layers_ref_true_count+=1 )-- if location == 1 do )-- for i = 0 to (layermanager.count - 1) do for x in layers_ref do if layers_ref_true_count>0 then x.on=false else x.on=true )Wandererkz
Просмотреть все слои если в слое количество мешей == 1 ( переименовать меш по названию слоя переместить этот меш в нулевой слой удалить слой ) другое если количество мешей > 1 ( в начале имени названию меша добавит название слоя ) иначе (удалит слой)все что я осилил пока, только это.for i = 0 to (layermanager.count - 1) do ( _sl = layermanager.getlayer i _slname = _sl.name as string _slnode = _sl.getNumNodes() if _slnode == 1 do ( format "Layer: %; nodes: %\n" _slname _slnode ) )Как работать с имеющимися мешами в слоях не понял.Владислав Бодюл
for i = layerManager.count-1 to 1 by -1 do ( ilayer = layerManager.getLayer i layerName = ilayer.name layer = ILayerManager.getLayerObject i layer.nodes &layerObjects if layerObjects.count > 0 then ( if layerObjects.count > 1 then ( for o in layerObjects where not matchPattern o.name pattern:(layerName + "_*") do ( o.name = (layerName + "_" + o.name) ) ) else ( (layerManager.getLayer 0).addNode layerObjects[1] LayerManager.deleteLayerByName layer.name ) ) else ( LayerManager.deleteLayerByName layer.name ) )Wandererkz
Владислав Бодюл
Нужно перед строкой
добавить
Belprof
подскажите можно ли из макса с помощью макс скрипт напрямую обращаться к базам данных
типа таблицы mysql, не обычные файлы (filestream) ,а постоянно меняющийся поток данных изменяющихся координат объекта?