Накатал для себя скрипт по образу и подобию для работы в 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"
)
)
)
)
Ещё появилась идея скрипта для оптимизации сплайна с тремя гладкими вершинами.
Например, нужно оптимизировать сплайн с тремя "Smooth" вершинами до двух "Bezier", сохранив форму сплайна.
Последовательность действий:
1) Выделить все вершины и перевести их в "Bezier".
2) Выбрать вершину под номером 2 и удалить её. Если таких сплайнов несколько, то необходимо выбрать вторую вершину у каждого сплайна.
3)Выбрать все оставшиеся Bezier вершины и увеличить их кривизну в 2 раза с помощью Scale.
Все известные оптимизаторы с такой задачей не справляются, а в ручную делать достаточно долго, когда таких сплайнов около сотни.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
ДенисИЩЕ
либо
1)по ходу перетаскивания досок у каждой доски сам по себе менялся seed в модификаторе noise
или
2)когда я закончу моделирование, скрипт сам расставил для каждого объекта свой случайный seed в модификаторе noise.
Royal Ghost
KoL'T
Есть один замечательный скрипт для разгрузки хоткеев при работе в 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" ) ) ) )KoL'T
Например, нужно оптимизировать сплайн с тремя "Smooth" вершинами до двух "Bezier", сохранив форму сплайна.
Последовательность действий:
1) Выделить все вершины и перевести их в "Bezier".
2) Выбрать вершину под номером 2 и удалить её. Если таких сплайнов несколько, то необходимо выбрать вторую вершину у каждого сплайна.
3)Выбрать все оставшиеся Bezier вершины и увеличить их кривизну в 2 раза с помощью Scale.
Все известные оптимизаторы с такой задачей не справляются, а в ручную делать достаточно долго, когда таких сплайнов около сотни.
Подскажите, пожалуйста, как это сделать?
Вложения