top of page

Bulk Export - SketchUp Models to .dae

This script selects everything in a SketchUp file, explodes the model, and then exports selections by tags to a .dae file location of your choosing.

Bulk Export - SketchUp Models to .dae

Broken button... I'll fix it eventually...

model = Sketchup.active_model

layers = model.layers


# Ensure all layers/tags are visible and nothing is hidden

layers.each do |layer|

  layer.visible = true

end


# Unhide all entities in the model

model.entities.each do |entity|

  entity.hidden = false if entity.respond_to?(:hidden=)

end


# Display a friendly greeting and information about the script

UI.messagebox("Welcome to the 'SketchUp Tags Batch Exporter to .DAE Files'!\n\nThis tool will help you by exploding all groups and components in your model and exporting each layer/tag as a separate .dae file. You'll be prompted to choose where to save the files.\n\nPlease ensure you save your work before continuing, as this process is destructive and will modify your model structure.", MB_OK)


# Prompt user for export directory

export_dir = UI.select_directory(title: "Select Export Directory for .dae Files")

if export_dir.nil?

  puts "Export directory selection was canceled. Exiting script."

  return

end


# Check if layers are enumerable

if layers.respond_to?(:each)

  layers.each do |layer|

    # Create a new selection set for entities with the current layer

    selection = model.selection

    selection.clear


    # Add entities with the current layer to the selection

    model.entities.each do |entity|

      if entity.respond_to?(:layer) && entity.layer == layer

        selection.add(entity)

      end

    end


    next if selection.empty? # Skip if no entities are tagged with this layer


    # Explode all groups and components in the selection

    entities_to_explode = selection.to_a

    while !entities_to_explode.empty?

      new_entities = []

      entities_to_explode.each do |entity|

        if entity.is_a?(Sketchup::Group) || entity.is_a?(Sketchup::ComponentInstance)

          exploded = entity.explode

          new_entities.concat(exploded) if exploded

        end

      end

      entities_to_explode = new_entities

    end


    # Ensure the export path is valid and sanitize the layer name

    layer_name = layer.name.gsub(/[<>:"\/\\|?*]/, "_") # Sanitize layer name to avoid invalid characters

    export_path = File.join(export_dir, "#{layer_name}.dae") # Use the selected directory

    options = { :selectionset_only => true } # Export only what is selected


    # Export the selection to a .dae file

    status = model.export(export_path, options)

    if status

      puts "Exported #{layer.name} successfully to #{export_path}!"

    else

      puts "Failed to export #{layer.name}."

    end

  end


  # Notify user that export has completed

  UI.messagebox("Export completed successfully!\n\nReminder: Do not save the project to preserve your original groups and components as they have been deleted.", MB_OK)

else

  puts "Unexpected type for layers: #{layers.class}. Expected an Enumerable collection of layers."

end


# Safely reset the model without saving changes

Sketchup.file_new # Open a new blank model to discard any changes


Description

It is an amazing time to be alive. I use a variety of tools for my job and most of the AVL industry is not using Blender as a way to distribute product files. 


Understandable but sad.


To get these models into Blender, SketchUp supports exports to .dae files which Blender can then import.

I CAN get my hands on quite a few SketchUp files but I don't want to sit exporting every single model and reimporting them one by one into Blender. I want to do it in batches. With the help of ChatGPT, here is a script that I am using to speed up the process.


Hopefully, it can help you too! If you are using SketchUp 2024, you may get errors related to tags vs. layers but if you just copy the code and put it back in ChatGPT and ask it to switch out for tags instead of layers it should work.


Happy Sketching & Blending!

bottom of page