[Code] Scarpino's SphereUtil Sample ver 1.1.0
-
Here's slightly modified sphere drawing code from:
[ Code ] Scarpino's SphereTool SampleThis edition is a combo Library & Mixin module.
ver 1.0.0
-
initial posting (not tested)
ver 1.1.0 -
draw_group() method: fixed call to draw()
4th arg was passing a group object, instead of an entities object.
# --------------------------------------------------------- # file ; 'sphereutil.rb' # by ; Dan Rathbun # --------------------------------------------------------- # Example of combo Library/Mixin module, sphere utilities. # based on draw code from SphereTool example... # from "Automatic SketchUp" by Matthew Scarpino, pg 260. # --------------------------------------------------------- # Versions; # # 1.0.0 ; 02-09-2012 # # 1.1.0 ; 02-10-2012 # ~ draw_group() method; fixed call to draw() # 4th arg now; sgrp.entities, was; sgrp. # # --------------------------------------------------------- require('sketchup.rb') module Scarpino # <-- Author's namespace module SphereUtil # <-- plugin namespace ### CONSTANTS # VERSION = '1.1.0' # make the following methods work as library functions # and as instance methods when this module is mixed-in. module_function # draw() # # Args; # center, # [Geom;;Point3d] The sphere's center point. # size = 1, # if [Numeric] then the length of the radius, # # if [Geom;;Point3d] a point on the surface. # segs = 24, # [Integer] number of segments used for surface. # ents = Sketchup.active_model.active_entities, # [Entities] # mod = Sketchup.active_model # [Sketchup;;Model] # # Returns an array of entities belonging to the new sphere. # def draw(center, size=1, segs=24, ents = Sketchup.active_model.active_entities, mod = Sketchup.active_model ) before = ents.to_a segs = segs.to_i # Draw the circles begin mod.start_operation('Draw Sphere') # if size.is_a?(Numeric) rad = size else rad = center.distance( size ) end circle = ents.add_circle( center.position, [1, 0, 0], rad, segs ) path = ents.add_circle( center.position, [0, 1, 0], rad + 1, segs ) circle_face = ents.add_face( circle ) # Extrude the sphere and erase the extrusion path circle_face.followme( path ) ents.erase_entities( path ) # mod.commit_operation rescue mod.abort_operation return nil else before - ents.to_a end end # draw_group() # # Args; # center, # [Geom;;Point3d] The sphere's center point. # size = 1, # if [Numeric] then the length of the radius, # # if [Geom;;Point3d] a point on the surface. # segs = 24, # [Integer] number of segments used for surface. # ents = Sketchup.active_model.active_entities, # [Entities] # mod = Sketchup.active_model # # Returns a new group object enclosing the new sphere, # within the given entities context. # def draw_group(center, size=1, segs=24, ents = Sketchup.active_model.active_entities, mod = Sketchup.active_model ) sgrp = ents.add_group ret = draw(center,size,segs,sgrp.entities,mod) if ( ret.nil? || ret==[] ) && sgrp.entities.length==0 sgrp.entities.clear! ents.erase_entities( sgrp ) else return sgrp end end ### RUN ONCE # unless file_loaded?(File.basename(__FILE__)) file_loaded(File.basename(__FILE__)) end end # module SphereUtil end # module Scarpino -
-
@driven said:
With Mat's help, I attempted to have this one work along the user drawn axis, so you could e.g. create a string of pearls.
Could you add or suggest how that could be done?
I would suppose you would write a loop of some kind and call the lib methods x number of times, using the same radius, but incrementing the center point within the loop (2 * rad ?). The result would be a line of spheres.
If you wished to write a
Tool, where the user draws the path, you can mix in the methods using:module Driven class PearlPathTool require('Scarpino/sphereutil.rb') include(Scarpino;;SphereUtil) # now your tool has the mixin's methods end#class end -
Fixed a small booboo (see the docheader in file.)
@John.. perhaps a good example tool, to make a path, might be a modified edition of the "Examples/linetool.rb"
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better đź’—
Register LoginAdvertisement