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.
    • TIGT Offline
      TIG Moderator
      last edited by TIG

      Here's v2.0 in the PluginStore...
      https://sketchucation.com/pluginstore?pln=Re_Glue
      It now allows multiple pre selected component-instances, but still only one preselected face.
      These are glued to the face [is possible], any errors or unsuitable instances are reported in the Ruby Console...

      TIG

      R 1 Reply Last reply Reply Quote 1
      • 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