sketchucation logo sketchucation
    • Login
    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

    Scheduled Pinned Locked Moved Plugins
    35 Posts 11 Posters 12.2k Views 11 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R Offline
      rv1974 @TIG
      last edited by

      @TIG Many thanks!

      designerbursaD 1 Reply Last reply Reply Quote 0
      • designerbursaD Offline
        designerbursa @rv1974
        last edited by Rich O Brien

        @rv1974

        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
        
        R 1 Reply Last reply Reply Quote 0
        • R Offline
          rv1974 @designerbursa
          last edited by

          @designerbursa what do you mean?

          designerbursaD 1 Reply Last reply Reply Quote 0
          • designerbursaD Offline
            designerbursa @rv1974
            last edited by

            @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.

            R 1 Reply Last reply Reply Quote 0
            • R Offline
              rv1974 @designerbursa
              last edited by

              @designerbursa
              I might be missing something but currently I can do it without any plugin

              designerbursaD 1 Reply Last reply Reply Quote 0
              • designerbursaD Offline
                designerbursa @rv1974
                last edited by designerbursa

                @rv1974 If you can paste without extensions, I really congratulate you...

                R 1 Reply Last reply Reply Quote 0
                • R Offline
                  rv1974 @designerbursa
                  last edited by

                  @designerbursa
                  ?
                  85dfe1a8-ee4c-4834-b2ed-f896caf03ad8-SketchUp_ozyex36IzG.gif

                  designerbursaD 1 Reply Last reply Reply Quote 0
                  • designerbursaD Offline
                    designerbursa @rv1974
                    last edited by

                    @rv1974 I am using Sketchup 2021 version
                    Kayıt 2024-06-10 000123.gif

                    designerbursaD 1 Reply Last reply Reply Quote 0
                    • designerbursaD Offline
                      designerbursa @designerbursa
                      last edited by designerbursa

                      @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
                      R 1 Reply Last reply Reply Quote 0
                      • R Offline
                        rv1974 @designerbursa
                        last edited by

                        @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.

                        1 Reply Last reply Reply Quote 0
                        • designerbursaD Offline
                          designerbursa
                          last edited by designerbursa

                          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
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • 1
                          • 2
                          • 2 / 2
                          • First post
                            Last post
                          Buy SketchPlus
                          Buy SUbD
                          Buy WrapR
                          Buy eBook
                          Buy Modelur
                          Buy Vertex Tools
                          Buy SketchCuisine
                          Buy FormFonts

                          Advertisement