sketchucation logo sketchucation
    • Login
    1. Home
    2. bagatelo
    3. Best
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 43
    • Posts 284
    • Groups 1

    Posts

    Recent Best Controversial
    • RE: "Transforming Colors into Materials: A Plugin Inspired by Adobe Kuler"

      @Dave-R I felt like a complete idiot, I knew there was this function but I couldn't use it, I haven't used Sketchup lately.

      posted in Extensions & Applications Discussions
      bagateloB
      bagatelo
    • RE: "Transforming Colors into Materials: A Plugin Inspired by Adobe Kuler"

      @Dave-R Thank you very much

      posted in Extensions & Applications Discussions
      bagateloB
      bagatelo
    • Automate Color Variations in SketchUp with Ease

      HSL.jpg

      Automate color variations in SketchUp with ease

      This simple SketchUp script is designed to help you easily generate and visualize color variations for a selected object. The script creates three sets of variations: luminance, hue, and saturation. Each set forms a circle of rectangles around the original object, illustrating different levels of brightness, color, and saturation changes. Just select a face with any desired color and run the script to see the variations. It's a simple tool that can help you explore color options more effectively in your models.

      require 'sketchup'
      
      module CombinedVariations
        extend self
      
        def create_variations
          create_luminance_variations
          create_color_variations
          create_saturation_variations
        end
      
        def create_luminance_variations
          puts "Iniciando a criação de variações de luminância..."
          model = Sketchup.active_model
          selection = model.selection
      
          unless selection.length == 1 && selection[0].is_a?(Sketchup::Face)
            puts "Por favor, selecione apenas um objeto com uma cor só."
            return
          end
      
          puts "Objeto selecionado encontrado."
      
          original_color = selection[0].material.color
          center_point = selection[0].bounds.center
          circle_radius = 400.cm
      
          puts "Cor original do objeto: #{original_color}"
          puts "Criando retângulos com variações de luminância..."
      
          colors = generate_luminance_colors(original_color)
          create_rectangles_around_object(center_point, circle_radius, colors, 'LUM')
          
          puts "Variações de luminância criadas com sucesso."
        end
      
        def generate_luminance_colors(original_color)
          puts "Gerando variações de luminância..."
          colors = []
      
          hsl_color = rgb_to_hsl(original_color.red, original_color.green, original_color.blue)
          original_hue, original_saturation, original_lightness = hsl_color[:h], hsl_color[:s], hsl_color[:l]
      
          luminance_stages = (0..100).map { |i| i / 100.0 }
          selected_luminance_stages = luminance_stages.select.with_index { |_, i| i.even? }
      
          selected_luminance_stages.each do |lightness|
            color = hsl_to_rgb(original_hue, original_saturation, lightness)
            colors << Sketchup::Color.new(color[:r], color[:g], color[:b])
          end
      
          colors
        end
      
        def create_color_variations
          puts "Iniciando a criação de variações de cores..."
          model = Sketchup.active_model
          selection = model.selection
      
          unless selection.length == 1 && selection[0].is_a?(Sketchup::Face)
            puts "Por favor, selecione apenas um objeto com uma cor só."
            return
          end
      
          puts "Objeto selecionado encontrado."
      
          original_color = selection[0].material.color
          center_point = selection[0].bounds.center
          circle_radius = 500.cm
      
          puts "Cor original do objeto: #{original_color}"
          puts "Criando retângulos com variações de cores..."
      
          colors = generate_color_variations(original_color)
          create_rectangles_around_object(center_point, circle_radius, colors, 'HUE')
          
          puts "Variações de cores criadas com sucesso."
        end
      
        def generate_color_variations(original_color)
          puts "Gerando variações de cores..."
          hue_step = 360.0 / 64.0
          colors = []
      
          hsv_color = rgb_to_hsv(original_color.red, original_color.green, original_color.blue)
          original_hue, original_saturation, original_value = hsv_color[:h], hsv_color[:s], hsv_color[:v]
      
          64.times do |i|
            hue = (original_hue + i * hue_step) % 360
            color = hsv_to_rgb(hue, original_saturation, original_value)
            colors << Sketchup::Color.new(color[:r], color[:g], color[:b])
          end
      
          colors
        end
      
        def create_saturation_variations
          puts "Iniciando a criação de variações de saturação..."
          model = Sketchup.active_model
          selection = model.selection
      
          unless selection.length == 1 && selection[0].is_a?(Sketchup::Face)
            puts "Por favor, selecione apenas um objeto com uma cor só."
            return
          end
      
          puts "Objeto selecionado encontrado."
      
          original_color = selection[0].material.color
          center_point = selection[0].bounds.center
          circle_radius = 300.cm
      
          puts "Cor original do objeto: #{original_color}"
          puts "Criando retângulos com variações de saturação..."
      
          colors = generate_saturation_colors(original_color)
          create_rectangles_around_object(center_point, circle_radius, colors, 'SAT')
          
          puts "Variações de saturação criadas com sucesso."
        end
      
        def generate_saturation_colors(original_color)
          puts "Gerando variações de saturação..."
          colors = []
      
          hsl_color = rgb_to_hsl(original_color.red, original_color.green, original_color.blue)
          original_hue, original_saturation, original_lightness = hsl_color[:h], hsl_color[:s], hsl_color[:l]
      
          saturation_stages = (0..35).map { |i| i / 35.0 }
      
          saturation_stages.each do |saturation|
            color = hsl_to_rgb(original_hue, saturation, original_lightness)
            colors << Sketchup::Color.new(color[:r], color[:g], color[:b])
          end
      
          colors
        end
      
        def rgb_to_hsl(r, g, b)
          r, g, b = r / 255.0, g / 255.0, b / 255.0
          max = [r, g, b].max
          min = [r, g, b].min
          delta = max - min
      
          l = (max + min) / 2.0
          if delta == 0
            h = 0
            s = 0
          else
            s = delta / (1 - (2 * l - 1).abs)
            h = if max == r
                  ((g - b) / delta) % 6
                elsif max == g
                  (b - r) / delta + 2
                else
                  (r - g) / delta + 4
                end
            h *= 60
            h += 360 if h < 0
          end
      
          { h: h, s: s, l: l }
        end
      
        def hsl_to_rgb(h, s, l)
          c = (1 - (2 * l - 1).abs) * s
          x = c * (1 - ((h / 60.0) % 2 - 1).abs)
          m = l - c / 2.0
      
          r, g, b = case h
                    when 0..60 then [c, x, 0]
                    when 60..120 then [x, c, 0]
                    when 120..180 then [0, c, x]
                    when 180..240 then [0, x, c]
                    when 240..300 then [x, 0, c]
                    else [c, 0, x]
                    end
      
          { r: ((r + m) * 255).round, g: ((g + m) * 255).round, b: ((b + m) * 255).round }
        end
      
        def rgb_to_hsv(r, g, b)
          r, g, b = r / 255.0, g / 255.0, b / 255.0
          max = [r, g, b].max
          min = [r, g, b].min
          delta = max - min
      
          h = if max == min
                0
              elsif max == r
                60 * (((g - b) / delta) % 6)
              elsif max == g
                60 * (((b - r) / delta) + 2)
              else
                60 * (((r - g) / delta) + 4)
              end
      
          s = max == 0 ? 0 : delta / max
          v = max
      
          { h: h, s: s, v: v }
        end
      
        def hsv_to_rgb(h, s, v)
          h = h / 60.0
          i = h.floor
          f = h - i
          p = v * (1 - s)
          q = v * (1 - f * s)
          t = v * (1 - (1 - f) * s)
      
          r, g, b = case i % 6
                    when 0 then [v, t, p]
                    when 1 then [q, v, p]
                    when 2 then [p, v, t]
                    when 3 then [p, q, v]
                    when 4 then [t, p, v]
                    when 5 then [v, p, q]
                    end
      
          { r: (r * 255).to_i, g: (g * 255).to_i, b: (b * 255).to_i }
        end
      
        def create_rectangles_around_object(center_point, circle_radius, colors, prefix)
          puts "Criando retângulos em torno do objeto..."
      
          model = Sketchup.active_model
          entities = model.active_entities
      
          rectangle_size = [35.cm, 35.cm]
      
          angle_step = 2 * Math::PI / colors.length
          current_angle = 0
          k = 0
          colors.each do |color|
            x = center_point.x + circle_radius * Math.cos(current_angle)
            y = center_point.y + circle_radius * Math.sin(current_angle)
            position = Geom::Point3d.new(x, y, center_point.z)
      
            group = entities.add_group
            pt1 = position
            pt2 = Geom::Point3d.new(x + rectangle_size[0], y, center_point.z)
            pt3 = Geom::Point3d.new(x + rectangle_size[0], y + rectangle_size[1], center_point.z)
            pt4 = Geom::Point3d.new(x, y + rectangle_size[1], center_point.z)
            face = group.entities.add_face(pt1, pt2, pt3, pt4)
            face.reverse!
      
            material_name = "#{prefix}_#{'%02d' % k}_#{color.red}_#{color.green}_#{color.blue}"
            material = model.materials[material_name] || model.materials.add(material_name)
            material.color = color
            face.material = material
      
            current_angle += angle_step
            k += 1
          end
      
          puts "Retângulos criados."
        end
      end
      
      UI.menu("Edit").add_item("Create Combined Variations") { CombinedVariations.create_variations }
      
      
      posted in Extensions & Applications Discussions
      bagateloB
      bagatelo
    • 1 / 1