Menu: Extension / Support BirdCage by Dezmo
'quick&dirty! Does not really tested.
No warranties, use at your own risk!
module Dezmo
module SupportBirdCage
extend self
@@loaded = false unless defined?(@@loaded)
def draw_wireframe_cube(pt, model)
entities = model.active_entities
bb = Geom::BoundingBox.new
bb.add(ORIGIN, pt)
cr = (0..7).map{ |i| bb.corner(i) }
qd = [
[cr[0], cr[1], cr[3], cr[2]],
[cr[0], cr[1], cr[5], cr[4]],
[cr[1], cr[3], cr[7], cr[5]],
[cr[3], cr[2], cr[6], cr[7]],
[cr[2], cr[0], cr[4], cr[6]],
[cr[4], cr[5], cr[7], cr[6]]
]
group = entities.add_group
qd.each{|q|
face = group.entities.add_face q
face.erase!
}
lx = model.layers.add("Ledgers")
ly = model.layers.add("Transoms")
lz = model.layers.add("Standards")
lb = model.layers.add("Braces")
group.entities.grep(Sketchup::Edge){|e|
if e.line[1].parallel?(X_AXIS)
e.layer = lx
elsif e.line[1].parallel?(Y_AXIS)
e.layer = ly
elsif e.line[1].parallel?(Z_AXIS)
e.layer = lz
end
}
groupx = entities.add_group
ex = groupx.entities.add_line(cr[0], cr[5])
groupy = entities.add_group
ey = groupy.entities.add_line(cr[2], cr[4])
groupx.layer = lb
groupy.layer = lb
[ group, groupx, groupy ]
end
def create_ui
prompts = ['Cube Size X:', 'Cube Size Y:', 'Cube Size Z:', 'Overall Length X:', 'Overall Length Y:', 'Overall Length Z:']
@defaults ||= ['100', '100', '100', '500', '500', '500']
input = UI.inputbox(prompts, @defaults, 'Wireframe Cubes')
if input
model = Sketchup.active_model
model.start_operation("Wireframe Cubes", true)
cube_x = input[0].to_l
cube_y = input[1].to_l
cube_z = input[2].to_l
overall_x = input[3].to_l
overall_y = input[4].to_l
overall_z = input[5].to_l
@defaults = [cube_x, cube_y, cube_z, overall_x, overall_y, overall_z]
cube_group, groupx, groupy = draw_wireframe_cube([cube_x, cube_y, cube_z], model)
count = 0
for i in 0..(overall_x / cube_x).to_i - 1
for j in 0..(overall_y / cube_y).to_i - 1
for k in 0..(overall_z / cube_z).to_i - 1
new_cube_group = cube_group.copy
new_cube_group.move!([cube_x * i, cube_y * j, cube_z * k])
count += 1
end
end
end
cube_group.erase!
ptsx = groupx.entities.grep(Sketchup::Edge)[0].vertices.map(&:position)
ptsy = groupy.entities.grep(Sketchup::Edge)[0].vertices.map(&:position)
((overall_z / cube_z).to_i - 1).times do
ptsx[0].z += cube_z
ptsx[1].z += cube_z
groupx.entities.add_edges(ptsx)
ptsy[0].z += cube_z
ptsy[1].z += cube_z
groupy.entities.add_edges(ptsy)
end
model.commit_operation
plural = count > 1 ? "s" : ""
UI.messagebox("#{count} Wireframe cube#{plural} created\n1-1 X-Y base 'Braces' added.")
end
end
unless @@loaded
@@loaded = true
UI.menu('Plugins').add_item('Support BirdCage by Dezmo') { create_ui }
end
end
end