Нормализованные XYZ векторы камеры въюпорта 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Нормализованные XYZ векторы камеры въюпорта



Их можно использовать для рассчёта положений, трансформаций и перемещений относительно камеры въюпорта

VectViewX=(inverse(getViewTM())).row1

VectViewY=(inverse(getViewTM())).row2

VectViewZ=(inverse(getViewTM())).row3

point wirecolor:red size: 1 pos: VectViewX

point wirecolor:green size: 1 pos: VectViewY

point wirecolor:blue size: 1 pos: VectViewZ

 

_______________________________________________________________

Функция проверки пуста ли папка

CurFolder="c: \\ test"
makeDir CurFolder all:on -- Создать каталог, all:on - все суб-директории уровней, указанных в пути будут созданы, если они не существуют
 
fn Folder_isEmpty_fn folder=(
inFolder=((dotnetclass "System.IO.Directory").GetFiles folder)
inFolder.count>0
)
Folder_isEmpty_fn CurFolder

 

Источник: http://www.scriptspot.com/forums/3ds-max/general-scripting/isfolderempty-function

_______________________________________________________________

Русский (кириллица) в редакторе MaxScript

Если редакторе MaxScript, кириллица отображается некорректно, то в файле <maxroot>/MXS_Editor.properties

(Например C:\Program Files\Autodesk\3ds Max 2012\MXS_Editor.properties)

необходимо заменить значение code.page на 0 (вместо      -1) и перезапустить 3ds Max

Источник: http://vraydoc.narod.ru/tutors/msx-rotation/index.html

_______________________________________________________________

Фильтр по классу SplineShape, LinearShape, line

fn filterShapes obj = isKindOf obj Shape AND findItem shape.classes (classOf obj) < 4
 
isKindOf obj Shape -- проверка принадлежности к классу Shape
shape.classes -- массив всех классов сплайнов, первыми среди которых перечислены SplineShape, LinearShape, line
findItem shape.classes (classOf obj) -- найти позицию элемента (класса текущего объекта), в массиве shape.classes
< 4 -- значит, что захвачены будут как раз первые 3 элемента, кроме остальных

_______________________________________________________________

Применение структур.

Универсальные методы работы Edit_Poly и Editable_Poly

Суть в том, что организованы 2 структуры, содержащие одинаковые методы работы с объектами классов Edit_Poly и Editable_Poly, после проверки класса объекта, универсальный метод universal получает свою структуру, после чего синтаксис обращения к объекту получается одинаков и к объектам различных классов можно применять одинаковые строки кода. Это очень полезно с точки зрения организации UI скриптов, где необходимо единообразно увязать все методы в одном элементе.

 

 

obj

universal

edgeSel = #{}

 

struct polyFns -- структура для объекта класса Editable_Poly

       (

                   getVertPos = polyOp.getVert,

                   getEdgeVerts = polyOp.getEdgeVerts,

                   getEdgeSel = polyOp.getEdgeSelection,

                   setEdgeSel = polyOp.setEdgeSelection,

                   getVertsByEdges = polyOp.getVertsUsingEdge,

                   getEdgesByVerts = polyOp.getEdgesUsingVert

      )

 

 

struct polyModFns -- структура для модификатора Edit_Poly

       (

                   fn getListData list = case (classOf list) of (BitArray: list; Integer: #{list}; default: #{});,

                   fn getVertPos obj vert = obj.getVertex vert,

                   fn getEdgeVerts obj edge = #(obj.getEdgeVertex edge 1, obj.getEdgeVertex edge 2),

                   fn getEdgeSel obj = obj.getSelection #Edge,

                   fn setEdgeSel obj edgeList =

                   (

                               obj.setEPolySelLevel #Edge

                               obj.setSelection #Edge #{}

                               obj.select #Edge edgeList

                  ),

                   fn getVertsByEdges obj edgeList vertList:#{} =

                   (

                               edgeList = getListData edgeList

                               obj.getVertsUsingEdge &vertList &edgeList

                               vertList

                  ),

                   fn getEdgesByVerts obj vertList edgeList:#{} =

                   (

                               vertList = getListData vertList

                               obj.getEdgesUsingVert &edgeList &vertList

                               edgeList

                  )

      )          

       fn tryInit =

       (

                   if subObjectLevel == undefined then max modify mode

                   obj = Filters.GetModOrObj()

                   case (classOf obj) of

                   (

                   Editable_Poly: (universal = polyFns(); true)

                   Edit_Poly: (universal = polyModFns(); true)

                   default: (messageBox "This script only works with Edit/Editable_Poly objects."; false)

                  )

      )

tryInit() -- вызов функции проверки

universal.getEdgeSel obj

universal.getEdgesByVerts obj

universal.getVertsByEdges obj

universal.setEdgeSel obj

universal.getEdgeSel obj

universal.getEdgeVerts obj

universal.getVertPos obj

Источник: http://www.scriptspot.com/3ds-max/scripts/heuristic-edge-select

_______________________________________________________________

Тестовый пример для понимания работы со структурами

struct Counter (
       num=0,
       fn up_fn = (num+=1
       num),
       fn down_fn = (num-=1
       num)
)
test=Counter()
test.up_fn()
test.down_fn()
 
test2=Counter()
test2.up_fn()
test2.down_fn()
 
getPropNames test
getProperty test #num
getProperty test #down_fn

 

Источник: http://forums.cgsociety.org/archive/index.php?t-272425.html

_______________________________________________________________



Поделиться:


Последнее изменение этой страницы: 2021-04-13; просмотров: 54; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.2.184 (0.005 с.)