1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Помогите с найти/написать скрипт

Тема в разделе "MAXScript", создана пользователем ДенисИЩЕ, 18 апр 2016.

Модераторы: Savin Denis
  1. ДенисИЩЕ

    ДенисИЩЕ Активный участник

    С нами с:
    19.12.2015
    Сообщения:
    43
    Симпатии:
    5
    Баллы:
    7
    Суть проблемы следущаяя. Я моделирую телегу. она будет сколочена из досок. И мне надо, чтобы
    либо

    1)по ходу перетаскивания досок у каждой доски сам по себе менялся seed в модификаторе noise

    или

    2)когда я закончу моделирование, скрипт сам расставил для каждого объекта свой случайный seed в модификаторе noise.
     
  2. Royal Ghost

    Royal Ghost Мастер

    С нами с:
    17.03.2001
    Сообщения:
    306
    Симпатии:
    41
    Баллы:
    214
  3. KoL'T

    KoL'T Пользователь сайта

    С нами с:
    15.04.2009
    Сообщения:
    9
    Симпатии:
    1
    Баллы:
    4
    Народ, нужна помощь.
    Есть один замечательный скрипт для разгрузки хоткеев при работе в EditablePoly.
    http://www.scriptspot.com/3ds-max/scripts/magic-hotkey

    Накатал для себя скрипт по образу и подобию для работы в EditableSpline и дописал его в конце исходного скрипта.
    Всё работает на ура, но хотелось бы сделать также, как и в исходном скрипте с возможностью программирования условий для одного или нескольких выбранных элементов подобъектов.

    Например, при выборе 1 vertex в сплайне, включится chamfer, а при двух и более fuse. И точно также с Segment и Spline.

    Облазил весь help по скриптам и даже что-то похожее для сплайнов не нашёл:

    local vertSel = (polyop.getVertSelection curObj) as array
    case vertSel.count of

    Сам код скрипта с моей дописанной частью внизу:

    Код:
    macroScript HotKey_Magic
    category:"miauu"
    internalCategory:"miauu"
    Tooltip:"Magic HotKey"
    ButtonText:"Magic HotKey"
    (
        if (selection.count == 1 and classOf selection[1].baseobject  == Editable_Poly) then
        (
            local curObj = $.baseobject
            case subobjectlevel of
            (
                1:    --    Vertex subobject level
                (
                    local vertSel = (polyop.getVertSelection curObj) as array
                    case vertSel.count of
                    (
                        0:      --    no selected vertices - Start Cut tool
                        (
                            macros.run "Editable Polygon Object" "EPoly_Cut"
                        )
                    
                        1:    --    if only one vertex is selected - Start Targed Weld
                        (
                            macros.run "Editable Polygon Object" "EPoly_TargetWeld"
                            --    to change what the script do when one vertex is selected comment line above
                            --    and uncomment the desired operation
    --                         macros.run "Editable Polygon Object" "EPoly_Break"
    --                         macros.run "Editable Polygon Object" "EPoly_Chamfer"
    --                         macros.run "Editable Polygon Object" "EPoly_Extrude"
    --                         macros.run "Editable Polygon Object" "EPoly_Remove"
                        )
                    
                        default: --    if two or more vertices are selected - Connect them
                        (
                            $.EditablePoly.ConnectVertices ()
                        
    --                         macros.run "Editable Polygon Object" "EPoly_Collapse"
                        )
                    )
                )
    
                2:    --    Edge subobject level
                (
                    local edgeSel = (polyop.getEdgeSelection curObj)as array
                    case edgeSel.count of
                    (
                        0: --    no edges selected - create Edge from vert to vert
                        (
                            macros.run "Editable Polygon Object" "EPoly_Create"
                        )
                        1:    --    one edge selected - divide edge
                        (
                            $.EditablePoly.divideEdge edgeSel[1] 0.5 select:on
                            subobjectLevel = 1
                        )                
                        default: -- if two or more edges are selected -    bridge or connect edges
                        (
                            $.bridgeSelected = 1    --    will bridge only selected edges
                            $.bridgeSegments = 1    --    change the value will change the number of Bridge Segments
                        
                            if ($.EditablePoly.Bridge () == false) do
                            (    --    if Bridge operation can not be done - connect edges
                                $.connectEdgeSegments = 1        --    change the value will chagne the default Connect Edge Segments value
                                $.EditablePoly.ConnectEdges ()
                            )
                        
                            --    to change what the script do when 2 or more edges are selected comment all 7 lines above
                            --    (from $.bridgeSelected = 1 to ")" ) and uncomment the desired operation
    --                         macros.run "Editable Polygon Object" "EPoly_Remove"    --    remove selected edge/edges(and shared verts)
    --                         macros.run "Editable Polygon Object" "EPoly_InsertVertex"
    --                         macros.run "Editable Polygon Object" "EPoly_Extrude"
    --                         macros.run "Editable Polygon Object" "EPoly_Chamfer"                     
    --                         macros.run "Editable Polygon Object" "EPoly_Split"
    --                         macros.run "Editable Polygon Object" "EPoly_ShapeFromEdges"
    --                         macros.run "Editable Polygon Object" "EPoly_Collapse"
                        )
                    )
                )
            
                3:    --    Border subobject level
                (    --    Cap
                    macros.run "Editable Polygon Object" "EPoly_Cap"
                
    --                 macros.run "Editable Polygon Object" "EPoly_Collapse"
                )
            
                4:    --    Polygon subobject level
                (
                    local faceSel = (polyop.getFaceSelection $) as array
                    case faceSel.count of
                    (
                        0: --    no face selected - start creating polygons
                        (
                            macros.run "Editable Polygon Object" "EPoly_Create"
                        )
                    
                        default: --    one or more faces selected - extrude them
                        (
                            macros.run "Editable Polygon Object" "EPoly_Extrude"
                            --    to change Extrude command with Bevel, Outline, Inset or Flip
                            --    uncomment desired command and comment "Extrude" command
    --                         macros.run "Editable Polygon Object" "EPoly_Bevel"
    --                         macros.run "Editable Polygon Object" "EPoly_Outline"
    --                         macros.run "Editable Polygon Object" "EPoly_Inset"
    --                         macros.run "Editable Polygon Object" "EPoly_Flip"
    --                         macros.run "Editable Polygon Object" "EPoly_Detach"
    --                         macros.run "Editable Polygon Object" "EPoly_Collapse"                    
                        )
                    )
                )
            )
        )
    
    -- Это уже моя часть скрипта:
    
    else
        (
            local curObj = $.baseobject
            case subobjectlevel of
            (
                1:    --    Vertex subobject level
                (
                    macros.run "Editable Spline Object" "ESpline_Connect"
    --                $.modifiers[#Edit_Poly].ButtonOp #ConnectVertices
                )
                2:    --    Segment subobject level
                (
                    macros.run "Editable Spline Object" "ESpline_Create_Line"
    --                $.modifiers[#Edit_Poly].ButtonOp #ConnectEdges
                )
                3:    --    Spline subobject level
                (  
                    macros.run "Editable Spline Object" "ESpline_Trim"
    --                macros.run "Editable Polygon Object" "EPoly_Cap"
                )
                4:    --    Polygon subobject level
                (
                    macros.run "Editable Polygon Object" "EPoly_Create"
                )
            )
        )
    )
    
     
    Последнее редактирование: 21 ноя 2016
  4. KoL'T

    KoL'T Пользователь сайта

    С нами с:
    15.04.2009
    Сообщения:
    9
    Симпатии:
    1
    Баллы:
    4
    Ещё появилась идея скрипта для оптимизации сплайна с тремя гладкими вершинами.

    Например, нужно оптимизировать сплайн с тремя "Smooth" вершинами до двух "Bezier", сохранив форму сплайна.

    Последовательность действий:
    1) Выделить все вершины и перевести их в "Bezier".
    2) Выбрать вершину под номером 2 и удалить её. Если таких сплайнов несколько, то необходимо выбрать вторую вершину у каждого сплайна.
    3)Выбрать все оставшиеся Bezier вершины и увеличить их кривизну в 2 раза с помощью Scale.

    Все известные оптимизаторы с такой задачей не справляются, а в ручную делать достаточно долго, когда таких сплайнов около сотни.

    Подскажите, пожалуйста, как это сделать?
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      332,8 КБ
      Просмотров:
      14
    Последнее редактирование: 16 ноя 2016
Модераторы: Savin Denis

Поделиться этой страницей