sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    [Plugin] ReGlue

    Scheduled Pinned Locked Moved Plugins
    35 Posts 11 Posters 11.9k 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