ПочемучкинНе подскажите, что и где я делаю не так?
Объясните подробнее. Лучше в Skype: igorznag2012
Каким способом вы получили координаты Position, Rotation, Scale?
В какой системе координат (World или Parent) вы получили координаты Position, Rotation, Scale?
У вас есть информация о родителях/детей костей?
Предоставьте файл с координатами Position, Rotation, Scale, чтобы тестировать скрипт.
igorznagВ какой системе координат (World или Parent) вы получили координаты Position, Rotation, Scale?
Думаю, именно здесь и кроется проблема. Я новичок в максскрипте и многое еще не знаю\не понимаю. Просто пытаюсь смотреть скрипты других авторов и гуглить, но это не всегда дает нужный мне результат.
igorznagУ вас есть информация о родителях/детей костей?
Иерархия костей, и названия костей, имеется. Вот краткий обзор возможностей моего скрипта:
igorznagПредоставьте файл с координатами Position, Rotation, Scale, чтобы тестировать скрипт.
Вам нужен файл самой модели и скелета, если я правильно вас понял?
igorznagОбъясните подробнее. Лучше в Skype: igorznag2012
У меня нет ни видео камеры, ни микрофона, поэтому видео- или голосовой сеанс не получится провести. Если вы согласны на переписку и готовы потратить свое личное время на такого незнайку как я, то скажите в какое время для вас это будет удобно.
ПочемучкинВам нужен файл самой модели и скелета, если я правильно вас понял?
Да. Чтобы я тоже мог тестировать скрипт. Также предоставьте ваш скрипт, чтобы изменить его, а не создавать заново.
ПочемучкинУ меня нет ни видео камеры, ни микрофона, поэтому видео- или голосовой сеанс не получится провести. Если вы согласны на переписку и готовы потратить свое личное время на такого незнайку как я, то скажите в какое время для вас это будет удобно.
Видео камера не нужна. Купите наушники с микрофоном.
Я согласен потратить свое личное время, если вы согласны заплатить мне некую сумму денег.
Мне удобно общаться по скайпу с 12 часов дня до 10 часов вечера. Когда вам удобно общаться по скайпу?
igorznagДа. Чтобы я тоже мог тестировать скрипт. Также предоставьте ваш скрипт, чтобы изменить его, а не создавать заново.
Это уже получится, что скрипт будете делать вы, а не я. Мне же важно самому научиться всем аспектам написания скриптов-импортеров.
igorznagКупите наушники с микрофоном.
Я согласен потратить свое личное время, если вы согласны заплатить мне некую сумму денег.
Простите, но я не готов тратить деньги на не нужные мне наушники с микрофоном и на то, чтобы скрипт писали вместо меня. Как я сказал выше, мне важно самому во всем разобраться.
Что ж, продолжу изучать чужие скрипты и гуглить. Со временем я найду/пойму как мне решить текущую проблему с построением скелета. Простите за беспокойство и отнятое у вас время. И спасибо вам за помощь.)
PenternodeTM ведь используется только в mouse tool. А как смещать уже созданный экземпляр ?
Объясните подробнее. Лучше в Skype: igorznag2012
Для чего вам нужен этот объект?
Вместо SimpleObject можно использовать объект Cone с модификатором Attribute Holder.
Используем контроллеры Position Consrtraint и LookAt Consrtraint.
Для вас подходит такой вариант?
Здравствуйте! Попробую спросить здесь - есть ли какой либо надежный способ создавать группы выделения из полигонов? Желательно чтобы информация хранилась в самом полигоне, чтобы можно было без проблем аттачить и деттачить элементы. Что то вроде MatID, но более надежное) Я думал насчет использования vertex color, но не знаю как конвертить вертексы в полигон так, чтобы выделялись тольк полигоны полностью состоящие из выделенных вертексов, а не те у которых этот вертекс только один из трех\четырех составляющих.
И в догонку еще один вопрос - можно ли автоматом выделять полигоны после чамфера? В смысле не один раз после применения, а в процессе работы над моделью, в любой момент.
Например выделить все полигоны, плоскости которых парраллельны\перпендикулярны координатным осям, а затем инвертировать. Хотя скругления и цилиндры в таком случае будут выделяться неккоректно. Но вот если хотя бы выделять все основные плоскости, это уже было бы здорово.
Спасибо.
GeeksonЯ думал насчет использования vertex color, но не знаю как конвертить вертексы в полигон так, чтобы выделялись тольк полигоны полностью состоящие из выделенных вертексов, а не те у которых этот вертекс только один из трех\четырех составляющих.
С помощью скрипта можно выделить полигоны по цвету полигона.
Ответил вам в личные сообщения. Вы можете объяснить подробнее в Skype: igorznag2012
Добрый день всем! Наткнулся на очень интересный скрипт, который делает переключение видов вьюпорта по аналогии Zbrush: переключает на ближайший вид ортогональной проекции из вида перспективы. Но очень мешает, что после переключения меняется расстояние Zoom до объекта: по умолчанию в скрипте вконце забита команда "Zoom Extens Selected" и выделенный объект зуммируется на весь экран, если убрать эту команду, то объект наоборот сильно отдаляется. Подскажите возможно ли это исправить как-то чтобы при переключение на вид проекции объект оставался приблизительно на таком же удалении?
(
global sType;
vpType = viewport.getType()
if (vpType==#view_left or vpType==#view_right or vpType==#view_front or vpType==#view_back or vpType==#view_bottom or vpType==#view_top)
then(
try(
viewport.setType sType
actionMan.executeAction 0 "40228" — Views: Restore Active View
)catch()
)
else (
temp = viewport.getTM() as EulerAngles
sType = viewport.getType()
actionMan.executeAction 0 "40227" — Views: Save Active View
case of
(
(45<=temp.y and temp.y<=135): viewport.setType #view_left
(-45>=temp.y and temp.y>=-135): viewport.setType #view_right
((-45>=temp.x and temp.x>=-135) and (-45<=temp.y and temp.y<=45)): viewport.setType #view_front
((45<=temp.x and temp.x<=135) and (-45<=temp.y and temp.y<=45)): viewport.setType #view_back
((135<=temp.x and temp.x<=180) or (-135>=temp.x and temp.x>=-180)): viewport.setType #view_bottom
default: viewport.setType #view_top
)
max zoomext sel
)
completeredraw()
)
Сконструировал письменный пол с тумбой и выдвижными ящиками. Использовал только примитивы - сплошные боксы без модификаторов форм.
Как можно выдвигать эти ящики?
Создал линии путей и добавил кастом-спиннер - работает.
Но, если всё это добро объединить в единную группу, каким образом можно управлять её частями без принудительного вскрытия группы?
Можно ли группе назначить несколько спиннеров, чтобы вся группа функционировала как единный письменный стол - объект со спиннерами открытия отдельных ящичков?
Ни Group, ни Assembly-Luminaire не позволяют добавить контроллеры. А если добавляются, то невесть куда, так как в Свойствах ничего не появляется, хотя в древе - видно.
Как вообще правильно организовывать комплексные параметризованные объекты из готовых примитивов?
b.SetSelection #Vertex #{1..15, 17..20, 24..25, 30..33, 36..37, 41, 61..69, 77..82, 84..86, 95..100, 102..103, 113..118, 120, 131..136, 149..154, 167..168}
t=polyop.getnumverts b
for i=1 to t by 2 do(
$.EditablePoly.SetSelection #Vertex #{i}
)
a=#{}
polyop.getnumverts b или
b.numverts выдает общее количество вершин
b.numfaces выдает общее количество полигонов
b.SetSelection #Vertex a
polyop.getedgeselection b возвращает выделенные ребра
polyop.setvertselection b 59 выделяет вершины
polyop.getvertflags b 60 возвращает флаг указанных вершин
polyop.getvertsbyflag p 0 mask:1 выдает все невыделенные вершины
1 выделена
0 не выделена
polyop.setedgeflags $Plane001 #{5} 28 установить флаг ребра
polyop.setfaceflags p #{1..8971} 1 устанавливает флаги для указанных полигонов
polyop.setvertflags b #{60..80} 1 выделяет вершины устанавливает флаги для указанных вершин
b.selectedverts =#{70..73} выделяет вершины
polyop.setfaceselection b #(68) выделяет указанные полигоны
p=plane()
converttopoly(p) конвертировать в editable_poly
convertto p editable_poly
polyop.getvertsusingface p 12 выдает номера вершин прилежащих к полигону
polyop.getvertsusingedge p 13 выдает номера вершин прилежащих к ребру
polyop.getfacesusingvert p 13 возвращает номера прилегающих к вершине полигонов
polyop.getedgesusingvert p 13 возвращает номера исходящих из вершины ребер
polyop.getfaceverts b 33 возвращает номера вершин полигона
polyop.getedgeverts b 64 возвращает номера вершин ребра
polyop.getfacedeg b 33 возвращает количество вершин полигона
polyop.getedgefaces b 64 возвращает номера прилегающих полигонов к ребру
polyop.getfacematid b 37 возвращает ид материала назначенного полигону
polyop.setfacematid b 37 назначает ид материала полигону
polyop.getvert b 55 возвращает позицию вершины [8.60718,590.268,369.402]
polyop.setvert b 55 [10,10,10] устанавливает позицию вершины
move $.selectedVerts [0.934624,0,0] перемещает вершину
olyop.movevert p 13 [10,10,10] ( node: usesoftsel:bool ) перемещает вершину
polyop.movevert b 55 [0,-10,40] передвигает вершину
polyop.getopenedges b возвращает открытые ребра
polyop.getfaceedges b 37 возвращает номера ребер принадлежащие полигону
polyop.getfacesusingedge p #{20} возвращает прилегающие полигоны к ребру
polyop.getvertsusedonlybyfaces p #{4..5} возвращает вершины, которые принадлежат всем указанным полигонам из списка , но никаким другим полигонам вне списка
polyop.getvertsbyflag p 4 возвращает номера вершин с соответствующими флагами
polyop.getfacecenter p 11 центр face позиция
polyop.getsafefacecenter p 11 мягкий центр face позиция
polyop.getedgesusingface p 11 выдает ребра принадлежащие полигону
polyop.deleteverts b 719 удаляет указанные вершины
polyop.getfacenormal p 7 возвращает нормаль полигона
polyop.getfacearea p 7 возвращает площадь полигона
polyop.getopenedges p возвращает все открытые ребра
polyop.getvertflags p 2 возвращает флаг вершины
polyop.movevertstoplane p #{8,9,13,14} [1,1,1] 1.7 вершины перемещает в плоскость
polyop.makefacesplanar p #{7} делает плоский полигон
polyop.getnumedges p возвращает количество ребер в editable_poly
polyop.getfacesbyflag p 1 возвращает номара полигонов по флагу
polyop.getborderfromedge p 2268 выдает номера ребер составляющих бордер вместе с указанным ребром(ами)
polyop.deletefaces b 476 ( delisoverts:true ) удаляет полигон
polyop.deleteverts b 476 удаляет вершину
polyop.deleteedges b 476 ( delisoverts:true ) удаляет ребро
polyop.weldverts b 1463 142 [-5,20,40] сваривает, соединяет указанные вершины и создает новую на позиции от центра координат и назначает самый маленький номер новой вершине
polyop.createvert b [0,5,0] создает вершину в заданной позиции от центра координат
polyop.createedge b 1467 1452 создает ребро между вершинами , если они имеют общий полигон
polyop.createpolygon b <vertex array> создает полигон из указанных вершин
b.remove() удаляет только выделенные вершины или грани без дыр
b.createedge 718 1485 select:true создание ребра и выделение
b.createface #(1,6,5) создание нового полигона по указанным точкам
polyop.divideface p 9 [-27,-64,0] создает точку на полигоне в указанном месте,соединяя её с четырьмя точками полигона. если точка находится за пределами полигона, то создается ребро только между двумя ребрами
polytoolsselect.loop создает петлю по вылеленному ребру
polytoolsselect.numericvertex 2 1 false выделяет вершины на основе количества ребер от них первый аргумент количество ребер выходящих из вершины, второй аргумент если 1, то выделяются вершины только с количеством ребер указанном в первом аргументе. если 2 то выделяются вершины только с меньшем количеством ребер чем указано в первом аргументе. если второй аргумент 3, то выделяются вершины , которые имеют большее количество ребер чем указано в первом аргументе. и третий аргумент если true, то выделяются вершины только на выделенном участке
max modify mode перейти на панель модификации
setcommandpaneltaskmode #modify перейти на панель модификации
subobjectlevel =2 перейти на уровень подобьектов ребер
$.constrainType = 1 ограничение перемещения точек и ребер по ребру
b.createvertex [0,0,0] pointinlocalcoords:false select:true создание вершины по указанным координатам
b.deleteIsoVerts () удалить изолированные вершины
b.createedge 163 192 select:true создание ребра по указанным точкам
b=converttopoly(plane()) конвертировать объект в editable_poly
v=b.createface #(267,268, 269,270 ) select:true создание полигонов по вершинам
b.capholes #face flags:1
b.capholes #vertex flags:1 закрывает дыру, отверстие , если хоть одна вершина выделена на границе дыры
b.delete #face flags:1 deleteisoverts:false удаляет указанный субобъект, если после него остаются несвязанные вершины, то последний аргумент определяет удалять их или нет.
s=$sphere001
b.attach s s присоединение сферы к объекту "b" с перемещением ее в центр объекта
b.attach b s без перемещения
b.detachtoelement #face flags:1 keeporiginal:false отделяет по флагу подобъекты от модели. последний аргумент отвечает за то будет ли элемент копироваться
b.detachtoelement #vertex flags:1 keeporiginal:true если выделена вершина отделяется весь полигон принадлежащий вершине либо оставляя оригинал=keeporiginal:true , либо нет=keeporiginal:false.
$Plane001.breakverts 1 раскалывает полигоны по вершине
p.splitedges edgeflags:1 разрезает, разбивает полигон по ребру
p.divideedge 17 0.2 select:true делит ребро пополам и возвращает индекс новой вершины. 0.2 это 20% растояния от длины ребра со стороны самого большого индекса из двух вертексов ребра
p.insertvertexinedge 3 0.2 вставляет вершину на ребро ребро пополам и возвращает индекс новой вершины. 0.2 это 20% растояния от длины ребра со стороны самого большого индекса из двух вертексов ребра
p.insertvertexinface 13 #(0.5,0.0,0.5,0.0) вставить вершину на полигон по центру . если объект плоскость с одним полигоном то #(0.0,0.0,0.0,0.8) первое значение отсчет от вершины №2 в сторону полигона №3. второе значение от №4 к №1. третье значение от №3 к №2 и четвертое значение от №1 к №4.
p.divideface 13 #(0.5, 0.0,0.5,0.0) select:true разделить полигон, точка посередине.#(0.5, 0.1,0.5,0.1) в направлении одного ребра
p.collapse #face flags:1 коллапс подобъекта
p.slice [1,1,0.0] [0,0,0] flaggedfacesonly:false faceflags:1 режет модель в центре сверху по диагонали [1,1,0.8] [0,0,0] опускает верх
b.extrudefaces 5.0 faceflags:1 выдавливание полигона
b.readytobridgeflagged sellevel:#face flag:1 возвращает true если заданный уровень и флаги готовы к соединению, иначе возвращает false
////
fn msf obj =(classof obj==sphere)
sel=pickobject message:"pick any saphere" filter:msf выбор объекта в сцене
format "you selected: %\n"
sel.name
////
Подскажите, пожалуйста, почему результаты деления по модулю в python и в maxscript разные?
Например:
В python -25.5 % 2.25 дает 1.5.
В maxscript mod -25.5 2.25 дает -0.75.
Что я делаю не так и как сделать так, чтобы в maxscript получить такой же результат как в python?
UPD: Решил проблему с помощью данной функции:
fn modulus v d =
(
r = mod v d
if v < 0 then
(
r += d
)
return r
)
Теперь в maxscript получаю такой же результат как в python.
Роман Марк (Дефсток)Как сохранить другой вид скриптов mse , точнее они нужны на панельки но не в modifer list , попробовал из туда закинуть, при открытие макса, все скрипты выскакивают сами
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
igorznag
Каким способом вы получили координаты Position, Rotation, Scale?
В какой системе координат (World или Parent) вы получили координаты Position, Rotation, Scale?
У вас есть информация о родителях/детей костей?
Предоставьте файл с координатами Position, Rotation, Scale, чтобы тестировать скрипт.
Почемучкин
fn ReadVec3 bs = ( local v = point3 0 0 0 v.x = ReadFloat bs v.y = ReadFloat bs v.z = ReadFloat bs v )Координаты вращения кости я получил с помощью данной функции:fn ReadQuat bs = ( local q = quat 0 0 0 0 q.x = ReadFloat bs q.y = ReadFloat bs q.z = ReadFloat bs q.w = ReadFloat bs q )Думаю, именно здесь и кроется проблема. Я новичок в максскрипте и многое еще не знаю\не понимаю. Просто пытаюсь смотреть скрипты других авторов и гуглить, но это не всегда дает нужный мне результат.Иерархия костей, и названия костей, имеется. Вот краткий обзор возможностей моего скрипта:
Вам нужен файл самой модели и скелета, если я правильно вас понял?
У меня нет ни видео камеры, ни микрофона, поэтому видео- или голосовой сеанс не получится провести. Если вы согласны на переписку и готовы потратить свое личное время на такого незнайку как я, то скажите в какое время для вас это будет удобно.
igorznag
Видео камера не нужна. Купите наушники с микрофоном.
Я согласен потратить свое личное время, если вы согласны заплатить мне некую сумму денег.
Мне удобно общаться по скайпу с 12 часов дня до 10 часов вечера. Когда вам удобно общаться по скайпу?
Почемучкин
Простите, но я не готов тратить деньги на не нужные мне наушники с микрофоном и на то, чтобы скрипт писали вместо меня. Как я сказал выше, мне важно самому во всем разобраться.
Что ж, продолжу изучать чужие скрипты и гуглить. Со временем я найду/пойму как мне решить текущую проблему с построением скелета. Простите за беспокойство и отнятое у вас время. И спасибо вам за помощь.)
igorznag
Penter
parameters main1 rollout:params ( Linked type:#boolean default:false ui:chk_Linked target type:#node subAnim:true ui:pb_target support type:#node subAnim:true ui:pb_support depth type:#float default:0 ui:spn_dep len type:#float default:0 ui:spn_len ) rollout params "Parameters" ( checkbox chk_Linked "Linked" pickbutton pb_target "< No >" autoDisplay:true pickbutton pb_support "< No >" autoDisplay:true button btn_clearObj "All Clear" ... on btn_clearObj pressed do undo on ( target = undefined; pb_target.text = "< No >" support = undefined; pb_support.text = "< No >" ) fn Cone_fn theLen = createinstance cone radius1:depth radius2:.0 height:theLen sides:8 heightsegs:1 fn TransMesh theMesh theTM matID:1 = ( for v = 1 to theMesh.numverts do setVert theMesh v ((getVert theMesh v)*theTM) for f = 1 to theMesh.numfaces do setFacematID theMesh f matID theMesh ) on buildMesh do ( MyLen = if Linked then (if target != undefined and support != undefined then (distance target.pos support.pos) else len) else len MyCone = Cone_fn MyLen TM = matrix3 1 if Linked do ( if target != undefined and support != undefined do ( TM = matrixFromNormal (normalize (target.pos - support.pos)) translate TM support.pos ) ) mesh = TransMesh MyCone.mesh TM matID:1 )Вложения
Penter
local Delta = [0,0,0] parameters main1 rollout:params ( Linked type:#boolean default:false ui:chk_Linked target type:#node subAnim:true ui:pb_target support type:#node subAnim:true ui:pb_support ... on buildMesh do ( ... TM = matrix3 1 if Linked do ( if TargetSupport_fn() do ( TM = matrixFromNormal (normalize (target.transform[4] - support.transform[4])) translate TM (support.transform[4]-Delta) ) ) ... tool create ( on mousePoint click do case click of ( 1: (Delta = nodeTM.translation = gridPoint) 3: #stop ) ... )Как перемещение отследить ?Конструкция << on rollout open do ( when transform obj changes... >> не работает
Вложения
igorznag
Для чего вам нужен этот объект?
Вместо SimpleObject можно использовать объект Cone с модификатором Attribute Holder.
Используем контроллеры Position Consrtraint и LookAt Consrtraint.
Для вас подходит такой вариант?
Вложения
Неваше Дело (Geekson)
И в догонку еще один вопрос - можно ли автоматом выделять полигоны после чамфера? В смысле не один раз после применения, а в процессе работы над моделью, в любой момент.
Например выделить все полигоны, плоскости которых парраллельны\перпендикулярны координатным осям, а затем инвертировать. Хотя скругления и цилиндры в таком случае будут выделяться неккоректно. Но вот если хотя бы выделять все основные плоскости, это уже было бы здорово.
Спасибо.
igorznag
Ответил вам в личные сообщения. Вы можете объяснить подробнее в Skype: igorznag2012
Дмитрий П (d1myan)
Paguo-86PK
Сконструировал письменный пол с тумбой и выдвижными ящиками. Использовал только примитивы - сплошные боксы без модификаторов форм.
Как можно выдвигать эти ящики?
Создал линии путей и добавил кастом-спиннер - работает.
Но, если всё это добро объединить в единную группу, каким образом можно управлять её частями без принудительного вскрытия группы?
Можно ли группе назначить несколько спиннеров, чтобы вся группа функционировала как единный письменный стол - объект со спиннерами открытия отдельных ящичков?
Ни Group, ни Assembly-Luminaire не позволяют добавить контроллеры. А если добавляются, то невесть куда, так как в Свойствах ничего не появляется, хотя в древе - видно.
Как вообще правильно организовывать комплексные параметризованные объекты из готовых примитивов?
Спасибо!
вован1 В
kuirp
(функция доступная в новых версиях макса)
Владислав Бодюл
( local l1 = LayerManager.getLayerFromName "Layer001" local l2 = LayerManager.getLayerFromName "Layer002" l1.setParent l2 )kuirp
как из имени:
object010
удалить паттерн "object0", чтобы осталось только:
10
?
Royal Ghost
DASLON
b.getSelection #Vertex
$.EditablePoly.SetSelection #Edge #{277}
b.SetSelection #Vertex #{1..15, 17..20, 24..25, 30..33, 36..37, 41, 61..69, 77..82, 84..86, 95..100, 102..103, 113..118, 120, 131..136, 149..154, 167..168}
t=polyop.getnumverts b
for i=1 to t by 2 do(
$.EditablePoly.SetSelection #Vertex #{i}
)
a=#{}
polyop.getnumverts b или
b.numverts выдает общее количество вершин
b.numfaces выдает общее количество полигонов
b.SetSelection #Vertex a
polyop.getedgeselection b возвращает выделенные ребра
polyop.setvertselection b 59 выделяет вершины
polyop.getvertflags b 60 возвращает флаг указанных вершин
polyop.getvertsbyflag p 0 mask:1 выдает все невыделенные вершины
1 выделена
0 не выделена
polyop.setedgeflags $Plane001 #{5} 28 установить флаг ребра
polyop.setfaceflags p #{1..8971} 1 устанавливает флаги для указанных полигонов
polyop.setvertflags b #{60..80} 1 выделяет вершины устанавливает флаги для указанных вершин
b.selectedverts =#{70..73} выделяет вершины
polyop.setfaceselection b #(68) выделяет указанные полигоны
p=plane()
converttopoly(p) конвертировать в editable_poly
convertto p editable_poly
polyop.getvertsusingface p 12 выдает номера вершин прилежащих к полигону
polyop.getvertsusingedge p 13 выдает номера вершин прилежащих к ребру
polyop.getfacesusingvert p 13 возвращает номера прилегающих к вершине полигонов
polyop.getedgesusingvert p 13 возвращает номера исходящих из вершины ребер
polyop.getfaceverts b 33 возвращает номера вершин полигона
polyop.getedgeverts b 64 возвращает номера вершин ребра
polyop.getfacedeg b 33 возвращает количество вершин полигона
polyop.getedgefaces b 64 возвращает номера прилегающих полигонов к ребру
polyop.getfacematid b 37 возвращает ид материала назначенного полигону
polyop.setfacematid b 37 назначает ид материала полигону
polyop.getvert b 55 возвращает позицию вершины [8.60718,590.268,369.402]
polyop.setvert b 55 [10,10,10] устанавливает позицию вершины
move $.selectedVerts [0.934624,0,0] перемещает вершину
olyop.movevert p 13 [10,10,10] ( node: usesoftsel:bool ) перемещает вершину
polyop.movevert b 55 [0,-10,40] передвигает вершину
polyop.getopenedges b возвращает открытые ребра
polyop.getfaceedges b 37 возвращает номера ребер принадлежащие полигону
polyop.getfacesusingedge p #{20} возвращает прилегающие полигоны к ребру
polyop.getvertsusedonlybyfaces p #{4..5} возвращает вершины, которые принадлежат всем указанным полигонам из списка , но никаким другим полигонам вне списка
polyop.getvertsbyflag p 4 возвращает номера вершин с соответствующими флагами
polyop.getfacecenter p 11 центр face позиция
polyop.getsafefacecenter p 11 мягкий центр face позиция
polyop.getedgesusingface p 11 выдает ребра принадлежащие полигону
polyop.deleteverts b 719 удаляет указанные вершины
polyop.getfacenormal p 7 возвращает нормаль полигона
polyop.getfacearea p 7 возвращает площадь полигона
polyop.getopenedges p возвращает все открытые ребра
polyop.getvertflags p 2 возвращает флаг вершины
polyop.movevertstoplane p #{8,9,13,14} [1,1,1] 1.7 вершины перемещает в плоскость
polyop.makefacesplanar p #{7} делает плоский полигон
polyop.getnumedges p возвращает количество ребер в editable_poly
polyop.getfacesbyflag p 1 возвращает номара полигонов по флагу
polyop.getborderfromedge p 2268 выдает номера ребер составляющих бордер вместе с указанным ребром(ами)
polyop.deletefaces b 476 ( delisoverts:true ) удаляет полигон
polyop.deleteverts b 476 удаляет вершину
polyop.deleteedges b 476 ( delisoverts:true ) удаляет ребро
polyop.weldverts b 1463 142 [-5,20,40] сваривает, соединяет указанные вершины и создает новую на позиции от центра координат и назначает самый маленький номер новой вершине
polyop.createvert b [0,5,0] создает вершину в заданной позиции от центра координат
polyop.createedge b 1467 1452 создает ребро между вершинами , если они имеют общий полигон
polyop.createpolygon b <vertex array> создает полигон из указанных вершин
b.remove() удаляет только выделенные вершины или грани без дыр
b.createedge 718 1485 select:true создание ребра и выделение
b.createface #(1,6,5) создание нового полигона по указанным точкам
polyop.divideface p 9 [-27,-64,0] создает точку на полигоне в указанном месте,соединяя её с четырьмя точками полигона. если точка находится за пределами полигона, то создается ребро только между двумя ребрами
polytoolsselect.loop создает петлю по вылеленному ребру
polytoolsselect.numericvertex 2 1 false выделяет вершины на основе количества ребер от них первый аргумент количество ребер выходящих из вершины, второй аргумент если 1, то выделяются вершины только с количеством ребер указанном в первом аргументе. если 2 то выделяются вершины только с меньшем количеством ребер чем указано в первом аргументе. если второй аргумент 3, то выделяются вершины , которые имеют большее количество ребер чем указано в первом аргументе. и третий аргумент если true, то выделяются вершины только на выделенном участке
max modify mode перейти на панель модификации
setcommandpaneltaskmode #modify перейти на панель модификации
subobjectlevel =2 перейти на уровень подобьектов ребер
$.constrainType = 1 ограничение перемещения точек и ребер по ребру
b.hide #face #vertex # edge #face # object спрятать, скрыть субобъекты
b.unhideall #currentlevel
b.createvertex [0,0,0] pointinlocalcoords:false select:true создание вершины по указанным координатам
b.deleteIsoVerts () удалить изолированные вершины
b.createedge 163 192 select:true создание ребра по указанным точкам
b=converttopoly(plane()) конвертировать объект в editable_poly
v=b.createface #(267,268, 269,270 ) select:true создание полигонов по вершинам
b.capholes #face flags:1
b.capholes #vertex flags:1 закрывает дыру, отверстие , если хоть одна вершина выделена на границе дыры
b.delete #face flags:1 deleteisoverts:false удаляет указанный субобъект, если после него остаются несвязанные вершины, то последний аргумент определяет удалять их или нет.
s=$sphere001
b.attach s s присоединение сферы к объекту "b" с перемещением ее в центр объекта
b.attach b s без перемещения
b.detachtoelement #face flags:1 keeporiginal:false отделяет по флагу подобъекты от модели. последний аргумент отвечает за то будет ли элемент копироваться
b.detachtoelement #vertex flags:1 keeporiginal:true если выделена вершина отделяется весь полигон принадлежащий вершине либо оставляя оригинал=keeporiginal:true , либо нет=keeporiginal:false.
$Plane001.breakverts 1 раскалывает полигоны по вершине
p.splitedges edgeflags:1 разрезает, разбивает полигон по ребру
p.divideedge 17 0.2 select:true делит ребро пополам и возвращает индекс новой вершины. 0.2 это 20% растояния от длины ребра со стороны самого большого индекса из двух вертексов ребра
p.insertvertexinedge 3 0.2 вставляет вершину на ребро ребро пополам и возвращает индекс новой вершины. 0.2 это 20% растояния от длины ребра со стороны самого большого индекса из двух вертексов ребра
p.insertvertexinface 13 #(0.5,0.0,0.5,0.0) вставить вершину на полигон по центру . если объект плоскость с одним полигоном то #(0.0,0.0,0.0,0.8) первое значение отсчет от вершины №2 в сторону полигона №3. второе значение от №4 к №1. третье значение от №3 к №2 и четвертое значение от №1 к №4.
p.divideface 13 #(0.5, 0.0,0.5,0.0) select:true разделить полигон, точка посередине.#(0.5, 0.1,0.5,0.1) в направлении одного ребра
p.collapse #face flags:1 коллапс подобъекта
p.slice [1,1,0.0] [0,0,0] flaggedfacesonly:false faceflags:1 режет модель в центре сверху по диагонали [1,1,0.8] [0,0,0] опускает верх
b.extrudefaces 5.0 faceflags:1 выдавливание полигона
b.extrudealongspline 3 faceflag:1
b.bevelfaces 3 4 faceflags:1 скос полигона
b.chamfervertices 5 open:false фаска выделенной вершины
////
b.bridgesegments=5
b.bridge sellevel:#face мост между полигонами
////
b.readytobridgeflagged sellevel:#face flag:1 возвращает true если заданный уровень и флаги готовы к соединению, иначе возвращает false
////
fn msf obj =(classof obj==sphere)
sel=pickobject message:"pick any saphere" filter:msf выбор объекта в сцене
format "you selected: %\n"
sel.name
////
Почемучкин
Подскажите, пожалуйста, почему результаты деления по модулю в python и в maxscript разные?
Например:
В python -25.5 % 2.25 дает 1.5.
В maxscript mod -25.5 2.25 дает -0.75.
Что я делаю не так и как сделать так, чтобы в maxscript получить такой же результат как в python?
UPD: Решил проблему с помощью данной функции:
fn modulus v d =
(
r = mod v d
if v < 0 then
(
r += d
)
return r
)
Теперь в maxscript получаю такой же результат как в python.
Илларион К