Народ, нужна помощь.
Есть один замечательный скрипт для разгрузки хоткеев при работе в 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"
)
)
)
)