[Plugin] ReGlue
-
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...
-
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 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.
Advertisement