home *** CD-ROM | disk | FTP | other *** search
- # Copyright 2005-2008, Google, Inc.
-
- # This software is provided as an example of using the Ruby interface
- # to SketchUp.
-
- # Permission to use, copy, modify, and distribute this software for
- # any purpose and without fee is hereby granted, provided that the above
- # copyright notice appear in all copies.
-
- # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- #-----------------------------------------------------------------------------
-
- # This file includes a number of examples of how to use the Ruby interface
- # to access a SketchUp model and perform various kinds of operations.
-
- # To test the examples you must first load the files.
- # There are two ways that you can do this.
-
- # The first way is to manually load it from the Ruby console. You can show
- # the Ruby console by selecting View/Ruby Console. (This is actually added
- # to the View menu when the Ruby script sketchup.rb is loaded.) In the
- # Ruby console, type the following line:
- # load 'examples/examples.rb'
- # If there are no syntax errors in the file, it will display "true" in the
- # Ruby console. Otherwise it will show error messages and information about
- # the line on which errors were found.
-
- # The second way to load this file is to copy it into the SketchUp plugins
- # directory. Any files with the extension .rb that are in the plugins
- # directory are automatically loaded when you start SketchUp.
-
- # The following line includes some common useful scripts. The file
- # sketchup.rb is automatically put in the SketchUp plugins directory
- # when SketchUp is installed, so it should always get automatically
- # loaded anyway, but it is good practice to explicitly require any
- # files that you have dependencies on to make sure that they are loaded.
- require 'sketchup.rb'
-
- #-----------------------------------------------------------------------------
- # box.rb is an example of how to create simple geometry using Ruby.
- # It also shows how to create a dialog box to prompt for user input
- # and how to add an item to a menu.
-
- require 'examples/box.rb'
-
- #-----------------------------------------------------------------------------
- # selection.rb has a number of examples of how to traverse the model and
- # select things in Ruby.
-
- require 'examples/selection.rb'
-
- #-----------------------------------------------------------------------------
- # contextmenu.rb shows how you can add new choices to context menus. It
- # adds an item to the context menu for arcs and circles to create a
- # point at the center of the arc.
-
- require 'examples/contextmenu.rb'
-
- #-----------------------------------------------------------------------------
- # linetool.rb shows how you can create tools that respond to mouse event
- # in Ruby. It defines a simple tool that behave similar to the pencil
- # tool in SketchUp except that it creates finite length construction lines
- # instead of regular SketchUp edges
-
- require 'examples/linetool.rb'
-
- #-----------------------------------------------------------------------------
- # animation.rb has an example of how you can create animations in Ruby.
- # It creates a simple animation that spins the view around.
-
- require 'examples/animation.rb'
-
- # attributes.rb shows how to attach arbitrary application specific attribute
- # data to SketchUp Entities.
-
- require 'examples/attributes.rb'
-
- #=============================================================================
- # This will set the layer of everything that is selected to
- # a layer with the given name. It will create a new layer if needed
- def setLayer(layerName)
-
- model = Sketchup.active_model
- ss = model.selection
- if( ss.empty? )
- return nil
- end
-
- # If there is alread a Layer with the given name, the add method on the
- # Layers object will return the existing Layer. Otherwise it will
- # create a new one and return it.
- layer = model.layers.add(layerName)
-
- # now iterate through everything that is selected and set its layer
- for ent in ss
- ent.layer = layer
- end
-
- # Here is another way that you could do the same thing
- #ss.each {|ent| ent.layer = layer}
-
- end
-
- #-------------------------------------------------------------------------
- # compute the total area of all faces
- def totalArea
- area = 0
-
- model = Sketchup.active_model
-
- # this shows a different syntax for iterating through the model
- model.entities.each { |ent| area += ent.area if( ent.is_a? Sketchup::Face ) }
-
- # here is a different way you could do it
- # for ent in model.entities
- # if( ent.is_a? Sketchup::Face )
- # area += ent.area
- # end
- # end
-
- area
- end
-
- #-------------------------------------------------------------------------
- # Get the perimeter of the selected faces
- def perimeter
-
- length = 0
- edges = []
-
- # First collect all of the edges that bound all of the selected faces.
- model = Sketchup.active_model
- ss = model.selection
- for ent in ss
- if( ent.is_a? Sketchup::Face )
- edges.concat ent.edges
- end
- end
-
- # remove duplicate edges
- edges.uniq!
-
- # sum the lengths of all of the edges
- edges.each {|e| length += e.length}
-
- length
- end
-
- #-----------------------------------------------------------------------------
- # SketchUp sets up Ruby to look for files in its plugins directory when you
- # use the load command. You can add additional directories to its search path.
- # This can be useful when you are developing new scripts because it can
- # make it easier to load them during testing.
- # This command adds your home directory to the search path. Note that this
- # only works if the environment variable HOME is defined.
- # $: is a special system variable in Ruby that defines the search path.
- if( ENV["HOME"] )
- homedir = File.expand_path("~")
- $:.push homedir
- end
-