Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
🫛 Lightbeans Update | Metallic and Roughness auto-applied in SketchUp 2025+ Download
[Plugin] ReGlue
-
@TIG Many thanks!
-
def self.glue_components_to_faces model = Sketchup.active_model selection = model.selection return UI.messagebox("Error: No selection!") if selection.empty? faces = selection.grep(Sketchup::Face) components = selection.grep(Sketchup::ComponentInstance) return UI.messagebox("Error: Select faces and components!") if faces.empty? || components.empty? model.start_operation("Glue Components to Faces", true) begin components.each do |component| closest_face = find_closest_aligned_face(component, faces) component.glued_to = closest_face if closest_face end ensure model.commit_operation end end def self.find_closest_aligned_face(component, faces) component_normal = component.transformation.zaxis closest_face = faces.min_by { |face| face.normal.angle_between(component_normal) } closest_face end -
@designerbursa what do you mean?
-
@rv1974 I developed the code for pasting on all selected surfaces at once, it would be useful for everyone if it is updated in this way.
-
@designerbursa
I might be missing something but currently I can do it without any plugin -
@rv1974 If you can paste without extensions, I really congratulate you...
-
-
@rv1974 I am using Sketchup 2021 version

-
@designerbursa ```
module GlueComponentsToFaces extend self def glue_components_to_faces model = Sketchup.active_model selection = model.selection if selection.empty? return UI.messagebox("Error: No selection! Please select faces and components.") end faces = selection.grep(Sketchup::Face) components = selection.grep(Sketchup::ComponentInstance) if faces.empty? || components.empty? return UI.messagebox("Error: Select faces and components!") end model.start_operation("Glue Components to Faces", true) begin components.each do |component| closest_face = find_closest_aligned_face(component, faces) component.glued_to = closest_face if closest_face end rescue => e UI.messagebox("An error occurred: #{e.message}") ensure model.commit_operation end end def find_closest_aligned_face(component, faces) component_normal = component.transformation.zaxis closest_face = faces.min_by { |face| face.normal.angle_between(component_normal) } closest_face end end # Adding a menu item for ease of use in SketchUp if not file_loaded?(__FILE__) UI.menu("Plugins").add_item("Glue Components to Faces") { GlueComponentsToFaces.glue_components_to_faces } file_loaded(__FILE__) end### I haven't tested it on the 2024 version but you can try this, maybe it will work. It works smoothly on my 2021 version -
@designerbursa I took a closer look.. your version is indeed more advanced and user friendly, many thanks!
P.S. you can cut and paste in place multiple and un-glued components in any SU version to get the same positive result, but your script is less laborious indeed. -
module Reglue extend self # Menü öğesinin eklenme konumunu belirleyen değişken SUPPORT_MENU_POSITION ||= Sketchup::Menu.instance_method(:add_item).arity != 1 ? 8 : nil def glue_components_to_faces model = Sketchup.active_model selection = model.selection if selection.empty? UI.messagebox("Hata: Hiçbir seçim yapılmadı!") return end faces = selection.grep(Sketchup::Face) components = selection.grep(Sketchup::ComponentInstance).select { |comp| comp.glued_to.nil? } if faces.empty? || components.empty? UI.messagebox("Hata: Lütfen hem yüzeyleri hem de yapıştırılabilir bileşenleri seçin!") return end model.start_operation("Bileşenleri Yüzeylere Yeniden Yapıştır", true) components.each do |component| closest_face = find_closest_aligned_face(component, faces) component.glued_to = closest_face if closest_face end model.commit_operation end def find_closest_aligned_face(component, faces) component_normal = component.transformation.zaxis faces.min_by { |face| face.normal.angle_between(component_normal) } end unless @loaded UI.add_context_menu_handler do |menu| selection = Sketchup.active_model.selection next if selection.empty? has_faces = selection.any? { |entity| entity.is_a?(Sketchup::Face) } has_glueable_components = selection.any? { |entity| entity.is_a?(Sketchup::ComponentInstance) && entity.glued_to.nil? } if has_faces && has_glueable_components position = SUPPORT_MENU_POSITION menu.add_item("Reglue", position) { glue_components_to_faces } end end @loaded = true end end
Advertisement
