-- ************************************************** -- Provide Moho with the name of this script object -- ************************************************** ScriptName = "AE_SelectShape" -- ************************************************** -- General information about this script -- ************************************************** AE_SelectShape = {} AE_SelectShape.BASE_STR = 2320 function AE_SelectShape:Name() return "Select Shape" end function AE_SelectShape:Version() return "6.01.7" end function AE_SelectShape:IsBeginnerScript() return true end function AE_SelectShape:Description() return MOHO.Localize("/Scripts/Tool/SelectShape/Description=Click on a shape to select it (hold <shift> to select additional shapes, <alt> to deselect shapes, <cmd/ctrl> to invoke the Eyedropper tool)") end function AE_SelectShape:BeginnerDescription() return MOHO.Localize("/Scripts/Tool/SelectShape/BeginnerDescription=Click on an existing shape to select it. Quickly choose a Fill color from the color swatch at the bottom of the Style window (Window > Style) or right-click a color swatch to change the Stroke color.") end function AE_SelectShape:BeginnerDisabledDescription() return MOHO.Localize("/Scripts/Tool/SelectShape/BeginnerDisabledDescription=You need to create a shape first using the 'Create Shape' or 'Paint Bucket' tool before you can use this tool.") end function AE_SelectShape:Creator() return "Smith Micro Software, Inc., tweak by A.Evseeva" end function AE_SelectShape:UILabel() return(MOHO.Localize("/Scripts/Tool/SelectShape/SelectShape=Select Shape")) end -- ************************************************** -- Recurring values -- ************************************************** AE_SelectShape.prevMousePt = LM.Point:new_local() AE_SelectShape.prevSelID = -1 AE_SelectShape.handleRadius = 0.03 AE_SelectShape.dragMode = -1 --0:shape picker, 1:center point, 2:handle point AE_SelectShape.eyedropperMode = false AE_SelectShape.selShape = nil AE_SelectShape.startVec = LM.Vector2:new_local() AE_SelectShape.lastVec = LM.Vector2:new_local() AE_SelectShape.effectScale = 1.0 AE_SelectShape.tracing = false -- ************************************************** -- The guts of this script -- ************************************************** function AE_SelectShape:IsEnabled(moho) if (moho:CountShapes() > 0) then return true end return false end function AE_SelectShape:IsRelevant(moho) local mesh = moho:DrawingMesh() if (mesh == nil) then return false end return true end function AE_SelectShape:HideConstructionCurves(moho) return true end function AE_SelectShape:SupportsGPUMode(moho) if (self.eyedropperMode) then return false else return true end end function AE_SelectShape:OnMouseDown(moho, mouseEvent) self.eyedropperMode = false if (mouseEvent.ctrlKey) then mouseEvent.ctrlKey = false self.eyedropperMode = true LM_Eyedropper:OnMouseDown(moho, mouseEvent) return end local mesh = moho:DrawingMesh() if (mesh == nil) then return end self.prevMousePt:Set(mouseEvent.pt) self.prevSelID = mouseEvent.view:PickShape(mouseEvent.pt) self.selShape = nil self.dragMode = 0 -- shape picker (default) -- cycle through shapes and see if the user clicked on an effect handle local g = mouseEvent.view:Graphics() local matrix = LM.Matrix:new_local() moho.drawingLayer:GetFullTransform(moho.frame, matrix, moho.document) g:Push() g:ApplyMatrix(matrix) local graphicsScale = g:CurrentScale(false) g:Pop() for i = 0, mesh:CountShapes() - 1 do local shape = mesh:Shape(i) if (shape:HasPositionDependentStyles()) then local center = shape:EffectHandle1() local handleLocation = shape:EffectHandle2() self.effectScale = shape.fEffectScale.value if ((center - mouseEvent.drawingVec):Mag() < self.handleRadius / graphicsScale) then self.dragMode = 1 self.selShape = shape self.startVec:Set(shape.fEffectOffset.value) break elseif ((handleLocation - mouseEvent.drawingVec):Mag() < self.handleRadius / graphicsScale) then self.dragMode = 2 self.selShape = shape self.startVec:Set(handleLocation) self.lastVec:Set(mouseEvent.drawingVec) break end end end if (self.dragMode == 0) then -- shape picker if (not mouseEvent.shiftKey and not mouseEvent.altKey) then for i = 0, mesh:CountShapes() - 1 do mesh:Shape(i).fSelected = false end end if (self.prevSelID >= 0) then if (mouseEvent.altKey) then mesh:Shape(self.prevSelID).fSelected = false else mesh:Shape(self.prevSelID).fSelected = true end end moho:UpdateSelectedChannels() elseif (self.dragMode == 1 or self.dragMode == 2) then -- move an effect handle moho.document:PrepUndo(moho.drawingLayer) moho.document:SetDirty() end mouseEvent.view:DrawMe() end function AE_SelectShape:OnMouseMoved(moho, mouseEvent) if (self.eyedropperMode) then mouseEvent.ctrlKey = false LM_Eyedropper:OnMouseMoved(moho, mouseEvent) return end local mesh = moho:DrawingMesh() if (mesh == nil) then return end self.prevMousePt:Set(mouseEvent.pt) self.prevSelID = mouseEvent.view:PickShape(mouseEvent.pt) if (self.dragMode == 0) then -- shape picker if (not mouseEvent.shiftKey and not mouseEvent.altKey) then for i = 0, mesh:CountShapes() - 1 do mesh:Shape(i).fSelected = false end end if (self.prevSelID >= 0) then if (mouseEvent.altKey) then mesh:Shape(self.prevSelID).fSelected = false else mesh:Shape(self.prevSelID).fSelected = true end end moho:UpdateSelectedChannels() elseif (self.dragMode == 1 or self.dragMode == 2) then -- move an effect handle if (self.selShape ~= nil) then if (self.dragMode == 1) then self.selShape.fEffectOffset:SetValue(moho.drawingLayerFrame, self.startVec + (mouseEvent.drawingVec - mouseEvent.drawingStartVec)) else local center = self.selShape:EffectHandle1() local handleLocation = self.selShape:EffectHandle2() local min = LM.Vector2:new_local() local max = LM.Vector2:new_local() self.selShape:ShapeBounds(min, max, 0) handleLocation = self.startVec + (mouseEvent.drawingVec - mouseEvent.drawingStartVec) local v = handleLocation - center local v1 = self.lastVec - center local v2 = mouseEvent.drawingVec - center v2:Rotate(-math.atan2(v1.y, v1.x)) local angle = math.atan2(v2.y, v2.x) angle = angle + self.selShape.fEffectRotation.value self.lastVec:Set(mouseEvent.drawingVec) self.selShape.fEffectRotation:SetValue(moho.drawingLayerFrame, angle) if (mouseEvent.shiftKey) then self.selShape.fEffectRotation:SetValue(moho.drawingLayerFrame, self.selShape.fEffectRotation.value / (math.pi / 4)) self.selShape.fEffectRotation:SetValue(moho.drawingLayerFrame, (math.pi / 4) * LM.Round(self.selShape.fEffectRotation.value)) end if (mouseEvent.ctrlKey) then self.selShape.fEffectScale:SetValue(moho.drawingLayerFrame, self.effectScale) else if (max.y - min.y > max.x - min.x) then self.selShape.fEffectScale:SetValue(moho.drawingLayerFrame, v:Mag() / ((max.y - min.y) / 2.0)) else self.selShape.fEffectScale:SetValue(moho.drawingLayerFrame, v:Mag() / ((max.x - min.x) / 2.0)) end end end moho:NewKeyframe(CHANNEL_FXXFORM) moho:UpdateSelectedChannels() end end mouseEvent.view:DrawMe() end function AE_SelectShape:OnMouseUp(moho, mouseEvent) if (self.eyedropperMode) then mouseEvent.ctrlKey = false LM_Eyedropper:OnMouseUp(moho, mouseEvent) self.eyedropperMode = false return end self.eyedropperMode = false end function AE_SelectShape:OnKeyDown(moho, keyEvent) local mesh = moho:DrawingMesh() if (mesh == nil) then return end local selectedShapes = {} for i = 0, mesh:CountShapes() - 1 do if mesh:Shape(i).fSelected then table.insert(selectedShapes, mesh:Shape(i)) end end if (keyEvent.keyCode == LM.GUI.KEY_UP) then if (keyEvent.ctrlKey) then -- select higher in the stacking order self.prevSelID = self.prevSelID + 1 local id = keyEvent.view:PickShape(self.prevMousePt, self.prevSelID) for i = 0, mesh:CountShapes() - 1 do mesh:Shape(i).fSelected = false end if (id >= 0) then mesh:Shape(id).fSelected = true end moho:UpdateSelectedChannels() elseif (keyEvent.shiftKey) then -- raise shape to top moho.document:PrepUndo(moho.drawingLayer) moho.document:SetDirty() --[[ for i = 0, mesh:CountShapes() - 1 do if (mesh:Shape(i).fSelected) then mesh:RaiseShape(i, true) end end --]] for j,shape in pairs(selectedShapes) do mesh:RaiseShape(mesh:ShapeID(shape), true) end else -- raise shape moho.document:PrepUndo(moho.drawingLayer) moho.document:SetDirty() --[[ for i = mesh:CountShapes() - 1, 0, -1 do if (mesh:Shape(i).fSelected) then mesh:RaiseShape(i, false) end end --]] for j = #selectedShapes, 1, -1 do mesh:RaiseShape(mesh:ShapeID(selectedShapes[j]), false) end end keyEvent.view:DrawMe() elseif (keyEvent.keyCode == LM.GUI.KEY_DOWN) then if (keyEvent.ctrlKey) then -- select lower in the stacking order self.prevSelID = self.prevSelID - 1 id = keyEvent.view:PickShape(self.prevMousePt, self.prevSelID) for i = 0, mesh:CountShapes() - 1 do mesh:Shape(i).fSelected = false end if (id >= 0) then mesh:Shape(id).fSelected = true end moho:UpdateSelectedChannels() elseif (keyEvent.shiftKey) then -- lower shape to bottom moho.document:PrepUndo(moho.drawingLayer) moho.document:SetDirty() --[[ for i = 0, mesh:CountShapes() - 1 do if (mesh:Shape(i).fSelected) then mesh:LowerShape(i, true) end end --]] for j = #selectedShapes, 1, -1 do mesh:LowerShape(mesh:ShapeID(selectedShapes[j]), true) end else -- lower shape moho.document:PrepUndo(moho.drawingLayer) moho.document:SetDirty() --[[ for i = 0, mesh:CountShapes() - 1 do if (mesh:Shape(i).fSelected) then mesh:LowerShape(i, false) end end --]] for j,shape in pairs(selectedShapes) do mesh:LowerShape(mesh:ShapeID(shape), false) end end keyEvent.view:DrawMe() elseif ((keyEvent.keyCode == LM.GUI.KEY_DELETE) or (keyEvent.keyCode == LM.GUI.KEY_BACKSPACE)) then moho.document:PrepUndo(moho.drawingLayer) moho.document:SetDirty() local i = 0 while i < mesh:CountShapes() do if (mesh:Shape(i).fSelected) then mesh:DeleteShape(i) else i = i + 1 end end keyEvent.view:DrawMe() end --[[ self.dlog.mesh = moho:Mesh() self.dlog:PopulateList(moho) --]] end function AE_SelectShape:DrawMe(moho, view) if (self.eyedropperMode) then LM_Eyedropper:DrawMe(moho, view) return end local mesh = moho:DrawingMesh() if (mesh == nil) then return end local g = view:Graphics() local matrix = LM.Matrix:new_local() g:SetSmoothing(true) g:SetBezierTolerance(2.0) moho.drawingLayer:GetFullTransform(moho.frame, matrix, moho.document) g:Push() g:ApplyMatrix(matrix) local graphicsScale = g:CurrentScale(false) for i = 0, mesh:CountShapes() - 1 do local shape = mesh:Shape(i) if (shape:HasPositionDependentStyles()) then local center = shape:EffectHandle1() local handleLocation = shape:EffectHandle2() local handleColor = MOHO.MohoGlobals.ElemCol if (shape.fSelected) then handleColor = MOHO.MohoGlobals.SelCol end g:SetColor(handleColor.r, handleColor.g, handleColor.b, 96) g:FillCircle(center, self.handleRadius / graphicsScale) g:SetColor(handleColor) g:FrameCircle(center, self.handleRadius / graphicsScale) g:FrameCircle(handleLocation, self.handleRadius / graphicsScale) local v = handleLocation - center v:NormMe() v = v * self.handleRadius / graphicsScale center = center + v handleLocation = handleLocation - v g:DrawLine(center.x, center.y, handleLocation.x, handleLocation.y) end end g:Pop() g:SetSmoothing(false) if self.tracing then self:TraceSelected(moho, view) end end -- ************************************************** -- Tool options - create and respond to tool's UI -- ************************************************** AE_SelectShape.FILL = MOHO.MSG_BASE AE_SelectShape.FILLCOLOR = MOHO.MSG_BASE + 1 AE_SelectShape.LINE = MOHO.MSG_BASE + 2 AE_SelectShape.LINECOLOR = MOHO.MSG_BASE + 3 AE_SelectShape.LINEWIDTH = MOHO.MSG_BASE + 4 AE_SelectShape.REORDERBUTTON = MOHO.MSG_BASE + 5 AE_SelectShape.TRACECHECK = MOHO.MSG_BASE + 6 AE_SelectShape.OFFBUTTON = MOHO.MSG_BASE + 7 AE_SelectShape.SELECTALLBUTTON = MOHO.MSG_BASE + 8 AE_SelectShape.SELECTFROMPOINTSBUTTON = MOHO.MSG_BASE + 11 AE_SelectShape.NAMEFIELD = MOHO.MSG_BASE + 9 AE_SelectShape.ADDPOINTSBUTTON = MOHO.MSG_BASE + 10 AE_SelectShape.SHAPELIST = MOHO.MSG_BASE + 100 function AE_SelectShape:UpdateWidgets(moho) local mesh = moho:DrawingMesh() if (mesh == nil) then return end local style = moho:CurrentEditStyle() if (style ~= nil) then self.fillCol:SetValue(style.fFillCol.value) self.lineCol:SetValue(style.fLineCol.value) self.lineWidth:SetValue(style.fLineWidth * moho.document:Height()) end local shape = moho:SelectedShape() if (shape ~= nil) then self.fillCheck:SetValue(shape.fHasFill) self.fillCheck:Enable(shape.fFillAllowed) self.fillCol:Enable(shape.fHasFill) self.lineCheck:SetValue(shape.fHasOutline) self.lineCheck:Enable(true) self.lineCol:Enable(shape.fHasOutline) else self.fillCheck:SetValue(false) self.fillCheck:Enable(false) self.lineCheck:SetValue(false) self.lineCheck:Enable(false) end self:PopulateMenu(moho) self.selectShapeMenu_popup:Redraw() local singleSelected = false for i=0, mesh:CountShapes()-1 do if mesh:Shape(i).fSelected then if not singleSelected then singleSelected = true else singleSelected = false break end end end if shape then if singleSelected then local name = shape:Name() if name == "" then name = tostring(shape:ShapeID()) end self.shapeName:SetValue(name) self.shapeName:Enable(true) self.addPointsButton:Enable(true) else self.shapeName:SetValue(" multiple selected") self.shapeName:Enable(false) self.addPointsButton:Enable(false) end else self.shapeName:SetValue(" nothing selected") self.shapeName:Enable(false) self.addPointsButton:Enable(false) end self.traceCheck:SetValue(self.tracing) end function AE_SelectShape:HandleMessage(moho, view, msg) local mesh = moho:DrawingMesh() if (mesh == nil) then return end local style = moho:CurrentEditStyle() local shape = moho:SelectedShape() if (style == nil and shape == nil) then return end moho.document:PrepUndo(moho.drawingLayer) moho.document:SetDirty() if (msg == self.FILL) then if (shape ~= nil) then if (shape.fFillAllowed) then shape.fHasFill = self.fillCheck:Value() end end for i = 0, mesh:CountShapes() - 1 do local shape = mesh:Shape(i) if (shape.fSelected) then if (shape.fFillAllowed) then shape.fHasFill = self.fillCheck:Value() end end end moho:UpdateUI() elseif (msg == self.FILLCOLOR) then if (style ~= nil) then style.fFillCol:SetValue(moho.drawingLayerFrame, self.fillCol:Value()) end for i = 0, mesh:CountShapes() - 1 do local shape = mesh:Shape(i) if (shape.fSelected) then shape.fMyStyle.fFillCol:SetValue(moho.drawingLayerFrame, self.fillCol:Value()) end end moho:UpdateUI() elseif (msg == self.LINE) then if (shape ~= nil) then shape.fHasOutline = self.lineCheck:Value() end for i = 0, mesh:CountShapes() - 1 do local shape = mesh:Shape(i) if (shape.fSelected) then shape.fHasOutline = self.lineCheck:Value() end end moho:UpdateUI() elseif (msg == self.LINECOLOR) then if (style ~= nil) then style.fLineCol:SetValue(moho.drawingLayerFrame, self.lineCol:Value()) end for i = 0, mesh:CountShapes() - 1 do local shape = mesh:Shape(i) if (shape.fSelected) then shape.fMyStyle.fLineCol:SetValue(moho.drawingLayerFrame, self.lineCol:Value()) end end moho:UpdateUI() elseif (msg == self.LINEWIDTH) then if (style ~= nil) then local lineWidth = self.lineWidth:FloatValue() lineWidth = LM.Clamp(lineWidth, 0.25, 256) style.fLineWidth = lineWidth / moho.document:Height() end for i = 0, mesh:CountShapes() - 1 do local shape = mesh:Shape(i) if (shape.fSelected) then local lineWidth = self.lineWidth:FloatValue() lineWidth = LM.Clamp(lineWidth, 0.25, 256) shape.fMyStyle.fLineWidth = lineWidth / moho.document:Height() end end moho:UpdateUI() elseif (msg == self.REORDERBUTTON) then self:ReorderShapes(moho) moho:UpdateUI() elseif (msg == self.OFFBUTTON) then self:ToggleTransparency(moho) moho:UpdateUI() elseif (msg == self.SELECTALLBUTTON) then if moho:Mesh() then for i=0, moho:Mesh():CountShapes()-1 do moho:Mesh():Shape(i).fSelected = true end end moho:UpdateUI() elseif (msg == self.SELECTFROMPOINTSBUTTON) then if moho:Mesh() then for i=0, moho:Mesh():CountShapes()-1 do local nextShape = moho:Mesh():Shape(i) nextShape.fSelected = false for shapePointID = 0, nextShape:CountPoints()-1 do meshPointID = nextShape:GetPoint(shapePointID) if moho:Mesh():Point(meshPointID).fSelected then nextShape.fSelected = true break end end end end moho:UpdateUI() elseif (msg == self.TRACECHECK) then self.tracing = self.traceCheck:Value() elseif msg == self.NAMEFIELD then if shape then shape:SetName(self.shapeName:Value()) self:PopulateMenu(moho) self.selectShapeMenu_popup:Redraw() end elseif msg >= self.SHAPELIST then local s = msg - self.SHAPELIST --for i=0, mesh:CountShapes()-1 do mesh:Shape(i).fSelected = false end self.selectShapeMenu:SetChecked(msg, not self.selectShapeMenu:IsChecked(msg)) mesh:Shape(s).fSelected = self.selectShapeMenu:IsChecked(msg) moho:UpdateUI() elseif msg == self.ADDPOINTSBUTTON then for curve = 0, mesh:CountCurves()-1 do for segment = 0, mesh:Curve(curve):CountSegments()-1 do if mesh:Curve(curve):IsSegmentSelected(segment) then shape:AddEdge(curve, segment) end end end moho:UpdateUI() end end function AE_SelectShape:GetShapeByGroup(moho, groupName) local mesh = moho:Mesh() local group = nil for g=0, mesh:CountGroups()-1 do if mesh:Group(g):Name() == groupName then group = mesh:Group(g) break end end if not group then return nil end local numPoints = group:CountPoints() for s=0, mesh:CountShapes()-1 do if mesh:Shape(s):CountPoints() == numPoints then local equal = true for p=0, countPoints-1 do local point = group:Point(p) if not mesh:Shape(s):ContainsPoint(mesh:PointID(point)) then equal = false break end end if equal then return mesh:Shape(s) end end end return nil end function AE_SelectShape:GetGroupByShape(moho, shape) local mesh = moho:Mesh() local numPoints = shape:CountPoints() for g=0, mesh:CountGroups()-1 do if mesh:Group(g):CountPoints() == numPoints then local equal = true for p=0,numPoints-1 do local point = mesh:Group(g):Point(p) if not shape:ContainsPoint(mesh:PointID(point)) then equal = false break end end if equal then return mesh:Group(g):Name(), mesh:Group(g) end end end return nil end function AE_SelectShape:TraceSelected(moho, view) local mesh = moho:Mesh() if mesh == nil then return end local g = view:Graphics() local matrix = LM.Matrix:new_local() moho.drawingLayer:GetFullTransform(moho.frame, matrix, moho.document) g:Push() g:ApplyMatrix(matrix) for s = 0, mesh:CountShapes()-1 do local shape = mesh:Shape(s) if shape.fSelected then for e = 0, shape:CountEdges()-1 do local c,p = shape:GetEdge(e) local startPercent, endPercent = mesh:Curve(c):GetSegmentRange(p) local step = (endPercent-startPercent)/10 local p1 = mesh:Curve(c):GetPercentLocation(startPercent) for i=1,10 do local nextPercent = startPercent + step * i if nextPercent > endPercent then nextPercent = endPercent end local p2 = mesh:Curve(c):GetPercentLocation(nextPercent) g:DrawFatLine(3, p1.x, p1.y, p2.x, p2.y) p1:Set(p2) end end end end g:Pop() end function AE_SelectShape:ToggleTransparency(moho) local mesh = moho:Mesh() if mesh == nil then return end for s = 0, mesh:CountShapes()-1 do if mesh:Shape(s).fSelected then local shape = mesh:Shape(s) local style = shape.fMyStyle if shape.fHasFill then local color = style.fFillCol.value if color.a == 0 then color.a = 255 else color.a = 0 end style.fFillCol:SetValue(moho.frame, color) end if shape.fHasOutline then local color = style.fLineCol.value if color.a == 0 then color.a = 255 else color.a = 0 end style.fLineCol:SetValue(moho.frame, color) end end end end function AE_SelectShape:GetShapeOrderChannel(moho, layer) local maxChannel = layer:CountChannels()-1 local chInfo = MOHO.MohoLayerChannel:new_local() local orderChannel = nil for i=0, maxChannel do layer:GetChannelInfo(i, chInfo) if chInfo.channelID == CHANNEL_SHAPE_ORDER then return moho:ChannelAsAnimString(layer:Channel(i, 0, moho.document)) end end end function AE_SelectShape:DoLayout(moho, layout) self.fillCheck = LM.GUI.CheckBox(MOHO.Localize("/Scripts/Tool/SelectShape/Fill=Fill:"), self.FILL) layout:AddChild(self.fillCheck) self.fillCol = LM.GUI.ShortColorSwatch(true, self.FILLCOLOR) layout:AddChild(self.fillCol) self.lineCheck = LM.GUI.CheckBox(MOHO.Localize("/Scripts/Tool/SelectShape/Stroke=Stroke:"), self.LINE) layout:AddChild(self.lineCheck) self.lineCol = LM.GUI.ShortColorSwatch(true, self.LINECOLOR) layout:AddChild(self.lineCol) layout:AddChild(LM.GUI.StaticText(MOHO.Localize("/Scripts/Tool/SelectShape/Width=Width:"))) self.lineWidth = LM.GUI.TextControl(0, "00.0000", self.LINEWIDTH, LM.GUI.FIELD_UFLOAT) self.lineWidth:SetWheelInc(1.0) self.lineWidth:SetWheelInteger(true) layout:AddChild(self.lineWidth) layout:AddPadding(20) self.addPointsButton = LM.GUI.Button("add points", self.ADDPOINTSBUTTON) layout:AddChild(self.addPointsButton) self.addPointsButton:SetToolTip("Add edges between selected points to selected shape") self.traceCheck = LM.GUI.CheckBox("Trace selected shapes", self.TRACECHECK) layout:AddChild(self.traceCheck) layout:AddChild(LM.GUI.Button("on/off", self.OFFBUTTON)) layout:AddPadding(20) self.shapeName = LM.GUI.TextControl(120, "", self.NAMEFIELD, LM.GUI.FIELD_TEXT, "Name:") layout:AddChild(self.shapeName) self.selectShapeMenu = LM.GUI.Menu("select shapes") self.selectShapeMenu_popup = LM.GUI.PopupMenu(120, false) self.selectShapeMenu_popup:SetMenu(self.selectShapeMenu) layout:AddChild(self.selectShapeMenu_popup) self.selectShapeMenu_popup:SetToolTip("Select shape") layout:AddChild(LM.GUI.Button("select ALL", self.SELECTALLBUTTON)) layout:AddChild(LM.GUI.Button("select from points", self.SELECTFROMPOINTSBUTTON)) end function AE_SelectShape:PopulateMenu(moho) self.selectShapeMenu:RemoveAllItems() local mesh = moho:Mesh() if not mesh then return end for s = mesh:CountShapes()-1,0,-1 do local nextShape = mesh:Shape(s) local nextName = nextShape:Name() if nextName == "" then nextName = tostring(nextShape:ShapeID()) end self.selectShapeMenu:AddItem(nextName, 0, self.SHAPELIST + s) if nextShape.fSelected then self.selectShapeMenu:SetChecked(self.SHAPELIST + s, true) end end end
Tweak for Select Shape
Listed
Author: A.Evseeva
View Script
Script type: Tool
Uploaded: Sep 21 2020, 11:14
Last modified: Aug 11 2021, 23:50
Script Version: 6.01.7
Select shape by name, turn shape on and off, trace outlines, fixed up/down moving of several shapes at a time
Also (new):Â
- select all shapes buttonÂ
- select from (selected) points button (transform existing poins selection into shapes selection)
This script, and all other scripts on this site are distributed as free software under the GNU General Public License 3.0 or later.
Downloads count: 1085
Tweak for Select Shape
Listed
Author: A.Evseeva
View Script
Script type: Tool
Uploaded: Sep 21 2020, 11:14
Last modified: Aug 11 2021, 23:50
Script Version: 6.01.7
Select shape by name, turn shape on and off, trace outlines, fixed up/down moving of several shapes at a time
Also (new):Â
- select all shapes buttonÂ
- select from (selected) points button (transform existing poins selection into shapes selection)
- select all shapes buttonÂ
- select from (selected) points button (transform existing poins selection into shapes selection)
This script, and all other scripts on this site are distributed as free software under the GNU General Public License 3.0 or later.
Downloads count: 1085