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)