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.8k 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
      last edited by

      TIG, Is it possible to enable multiple components (implemented above by TommyK) re-glueing to multiple faces please?

      1 Reply Last reply Reply Quote 0
      • TIGT Offline
        TIG Moderator
        last edited by

        An instance can only glue to one face.
        It's a limitation within SketchUp, not the API.

        TIG

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

          Does this API the Great and Powerful, allows to select all the components glued to a preselected face? If yes, maybe the script could take one face, select all the glued and reglue; then go to another face, repeat reglueing, and so on?

          1 Reply Last reply Reply Quote 0
          • PixeroP Offline
            Pixero
            last edited by

            Maybe Fredotools Move along could be helpful?

            1 Reply Last reply Reply Quote 0
            • TIGT Offline
              TIG Moderator
              last edited by

              @rv1974 said:

              Does this API the Great and Powerful, allows to select all the components glued to a preselected face? If yes, maybe the script could take one face, select all the glued and reglue; then go to another face, repeat reglueing, and so on?
              ToomyK's version a few posts back does that.
              Just replace the text in the RB file with his alternative and save it.
              Use a plain-text editor like Notepad++ to do the editing.

              TIG

              1 Reply Last reply Reply Quote 0
              • TIGT Offline
                TIG Moderator
                last edited by

                How is the code to determine which of the selected components gets glued to which selected face ?
                Please outline the 'logic'...

                TIG

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

                  @tig said:

                  @rv1974 said:

                  Does this API the Great and Powerful, allows to select all the components glued to a preselected face? If yes, maybe the script could take one face, select all the glued and reglue; then go to another face, repeat reglueing, and so on?
                  ToomyK's version a few posts back does that.
                  Just replace the text in the RB file with his alternative and save it.
                  Use a plain-text editor like Notepad++ to do the editing.

                  No, TommyK's code works only with one face.
                  @Pixero, the connection between MoveAlong and reglueing slips away from me.

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

                    @tig said:

                    How is the code to determine which of the selected components gets glued to which selected face ?
                    Please outline the 'logic'...

                    Thats what I tried to ask you earlier- Whether API allows to detect the components glued to a preselected face. IF the answer is YES, then MAYBE the script could(?) progressevly take face by face and reglue corresponding components.

                    1 Reply Last reply Reply Quote 0
                    • hdpvH Offline
                      hdpv
                      last edited by

                      @rv1974
                      I did this but it’s small script. Select face and components for reglue.

                      Suforyou
                      http://www.sketchupforyou.com

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

                        @hdpv said:

                        @rv1974
                        I did this but it’s small script. Select face and components for reglue.

                        and components? or face only?

                        1 Reply Last reply Reply Quote 0
                        • TIGT Offline
                          TIG Moderator
                          last edited by

                          There is a method:
                          glued = face.get_glued_instances
                          And it'd be easy to grep then iterate all of the faces and their glued components etc...
                          BUT there's no API ' .could_be_glued_instances' method...

                          BUT here's some possible [pretty much untested] code which might just do it...

                          
                          ctr=0
                          model=Sketchup.active_model
                          faces=model.active_entities.grep(Sketchup;;Face)
                          comps=model.active_entities.grep(Sketchup;;ComponentInstance).find_all{|e|
                            e.definition.behavior.is2d? && ! e.glued_to
                          }
                          ### collect if comp can glue, but not glued !
                          cct=comps.length
                          faces.each{|f|
                            plane=f.plane
                            norm =f.normal
                            comps.dup.each{|e|
                              pt=e.transformation.origin
                              nm=e.transformation.zaxis
                              if pt.distance_to_plane(plane)==0 && norm==nm
                                ### glue-able
                                cp=f.classify_point(pt)
                                if cp==Sketchup;;Face;;PointInside || cp==Sketchup;;Face;;PointOnEdge || cp==Sketchup;;Face;;PointOnVertex
                                  ### on face so can glue
                                  e.glued_to=f
                                  comps.delete(e)
                                  ctr+=1
                                  ### reduce tested comps collection for speed
                                end
                              end
                            }
                          }
                          puts "\n\nReglued #{ctr} of #{cct}" ### print how many reglued
                          
                          

                          TIG

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

                            @TIG This plugin reglues multiple components in SU 2022. In v2023 and newer it reglues only one component.
                            What is the reason for this degradation? Thanks
                            Screenshot 2024-05-08 112951.png

                            TIGT 1 Reply Last reply Reply Quote 0
                            • TIGT Offline
                              TIG Moderator @rv1974
                              last edited by

                              @rv1974

                              This plugin is over a decade old !
                              As far as I recall, and tell from the code and version, it has always needed a selection of one face and one component to work. for 19 years.
                              Although I do see from my posts do speaks of one or more components being processed...

                              As far as I can see this old code is very simplistic... e.g.

                              It does not check for gluing properties, or face-normal, or Z-axis, or position on the face.plane, or transformation.origin point on the face at all.

                              If it checked for several components being on the face and sharing the face.normal as their Z-axis etc, then it would be possible the get it to process several gluing components. However, this would require a complete rewrite...

                              I'll back check...

                              TIG

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

                                            Advertisement