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!
    šŸ›£ļø Road Profile Builder | Generate roads, curbs and pavements easily Download

    How to copy a hole component inside to another component ?

    Scheduled Pinned Locked Moved Developers' Forum
    1 Posts 1 Posters 313 Views 1 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.
    • P Offline
      PRBO
      last edited by

      I would like to know how to copy a hole-type component (for carpentry work) into an MDF-type component. The basic idea is: I have a hole-type component that, when applied to a surface, makes the cutout correctly. I copy it from the environment and paste it into the MDF component. However, when I do this, it does not cut via script. I have to go inside the MDF component and move the hole so that it makes the cutout. I would like to know if my scripting approach is wrong, if there is another easier way. I would like your help.

      # Default code, use or delete...
      mod = Sketchup.active_model # Open model
      ent = mod.entities # All entities in model
      sel = mod.selection # Current selection
      
      def find_subentity_by_name(parent_instance, subentity_name)
        #p parent_instance.definition.name
        if parent_instance.is_a?(Sketchup::ComponentInstance)
          p "é uma instância"
          parent_instance.definition.entities.each do |entity|
            if entity.is_a?(Sketchup::ComponentInstance)
              if entity.definition.name == subentity_name
                return entity
              end
              subentity = find_subentity_by_name(entity, subentity_name)
              return subentity if subentity  # Retorna se encontrado.
            end
          end
        end
        return nil
      end
      
      def copy_component_into(component_instance, target_instance, transformation_array)
        component_definition = component_instance.definition
        target_entities = target_instance.definition.entities
        transformation = Geom::Transformation.new(transformation_array)
        new_instance = target_entities.add_instance(component_definition, transformation) 
        puts "Component copied successfully into target component."
        return new_instance
      end
      
      def mm_p(medida)
        return medida / 25.4
      end
      
      def findInstanceByName(selecao, nome)
        selecao.each do |entity|
           #p entity.definition.name
           if (entity.definition.name == nome)
             return entity
           end
         end
      end
      
      p sel.to_a
      destino = findInstanceByName(sel, "p_r_horizontal")
      p "destino " + destino.definition.name 
      origem = findInstanceByName(sel, "quadradao_v2")
      p "origem " + origem.definition.name
      
      p_r = find_subentity_by_name(destino, "p_r")
      mdf_r = find_subentity_by_name(p_r, "mdf_r")
      
      component_instance = origem
      target_instance = mdf_r
      
      if component_instance.is_a?(Sketchup::ComponentInstance) && target_instance.is_a?(Sketchup::ComponentInstance)
        transformation_array = [
          1, 0, 0, 50,  # Primeira linha (sem rotação, translação em X)
          0, 1, 0, -50,  # Segunda linha (sem rotação, translação em Y)
          0, 0, 1, 0,    # Terceira linha (sem rotação, sem translação em Z)
          0, 0, 0, 1     # Linha de identidade (para compatibilidade)
        ] #This transformation its not working
        newInstance = copy_component_into(component_instance, target_instance, transformation_array)
        sleep(2)
        ents = Sketchup.active_model.entities
        tr = Geom::Transformation.translation [50, -40, 15.mm]
        ents.transform_entities tr, newInstance
        newInstance.transform! ()
      else
        puts "Ensure both selected entities are component instances."
      end
      
      

      RubyScriptHoleProblem.PNG](image url)

      1 Reply Last reply Reply Quote 0
      • 1 / 1
      • First post
        Last post
      Buy SketchPlus
      Buy SUbD
      Buy WrapR
      Buy eBook
      Buy Modelur
      Buy Vertex Tools
      Buy SketchCuisine
      Buy FormFonts

      Advertisement