Hi everyone,
I’m having trouble with a custom SketchUp tool that was created by AI. The tool correctly highlights a selected plane and applies materials to it when clicked. Additionally, this code works for closed groups and components. However, the CTRL modifier functionality is not working as expected. Here’s a summary of the issues I’m facing:
Plane Highlighting: The tool highlights the plane correctly when hovered over and works on closed groups and components.
Material Application: Materials are correctly applied to the selected plane or to closed groups and components when clicked.
CTRL Modifier: The CTRL key should trigger the application of the material to the entire object (group or component) rather than just the selected plane. This should work for both closed groups and components, but this functionality is not working.
Here is the relevant code:
module CustomSelectionTool
  class SelectPlaneTool
    def initialize
      @ip = Sketchup::InputPoint.new
      @view = Sketchup.active_model.active_view
      @last_face = nil
      @model = Sketchup.active_model
      @selection = @model.selection
      @materials = @model.materials
    end
    def onMouseMove(flags, x, y, view)
      @ip.pick(view, x, y)
      face = @ip.face
      if face && face.is_a?(Sketchup::Face)
        if face != @last_face
          # Clear previous selection
          @selection.clear
          # Select the new face
          @selection.add(face)
          @last_face = face
          view.invalidate
        end
      else
        if @last_face
          # Clear selection when there is no face
          @selection.clear
          @last_face = nil
          view.invalidate
        end
      end
      view.tooltip = @last_face ? "Face selected" : "No face selected"
    end
    def onLButtonDown(flags, x, y, view)
      if @last_face
        if (flags & MK_CONTROL) == MK_CONTROL
          # Apply material to the entire object (group or component)
          apply_material_to_object(@last_face.parent)
        else
          # Apply material to the selected face
          apply_material(@last_face)
        end
        @last_face = nil
        view.invalidate
      end
    end
    def apply_material(face)
      material = @model.materials.current
      if material
        face.material = material
      else
        puts "No material to apply"
      end
    end
    def apply_material_to_object(entity)
      material = @model.materials.current
      if material
        if entity.is_a?(Sketchup::Group) || entity.is_a?(Sketchup::ComponentInstance)
          entity.entities.grep(Sketchup::Face).each { |f| f.material = material }
        elsif entity.is_a?(Sketchup::Face)
          entity.material = material
        else
          puts "Cannot apply material to this type of object"
        end
      else
        puts "No material to apply"
      end
    end
  end
  def self.activate_select_plane_tool
    Sketchup.active_model.select_tool(SelectPlaneTool.new)
  end
end
if !file_loaded?(__FILE__)
  UI.menu('Plugins').add_item('Select Plane Tool') {
    CustomSelectionTool.activate_select_plane_tool
  }
  file_loaded(__FILE__)
end
What I’ve Tried:
Using Sketchup::InputModifier::CTRL to check if the CTRL key is pressed.
Ensuring the current material is selected before applying it.
Any suggestions or insights on why the CTRL key functionality is not applying the material to the entire object (including closed groups and components) as intended would be greatly appreciated. Thank you!
The code is written in Ruby 1.8, which is compatible with SketchUp 8.
Robert
 

















