Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module JF
- module Nudge
- class NudgeTool
- def enableVCB?
- true
- end
- def activate
- @dist ||= 1.0.to_l
- @ent = Sketchup.active_model.selection[0]
- Sketchup.vcb_label = "Nudge dist"
- Sketchup.vcb_value = @dist
- axes = best_axes()
- end
- def onKeyUp(key, repeat, flags, view)
- case key
- when COPY_MODIFIER_KEY
- @ctrl = nil
- when CONSTRAIN_MODIFIER_KEY
- @shift = nil
- when ALT_MODIFIER_KEY
- @alt = nil
- end
- end
- def onKeyDown(key, repeat, flags, view)
- sel = Sketchup.active_model.selection[0]
- dist = @dist
- axes = best_axes()
- case key
- when COPY_MODIFIER_KEY
- @ctrl = true
- when CONSTRAIN_MODIFIER_KEY
- @shift = true
- when ALT_MODIFIER_KEY
- @alt = true
- end
- if sel.class == Sketchup::SectionPlane
- move_section_plane(sel, key)
- elsif sel == nil
- move_camera(key)
- else
- case key
- when VK_UP
- dist = @ent.bounds.height if @dist == 0
- #vec = [0, dist, 0]
- vec = axes
- make_copy(@ent) if @ctrl
- do_move(@ent, dist, vec[2])
- when VK_DOWN
- dist = @ent.bounds.height if @dist == 0
- vec = [0, -dist, 0]
- vec = axes
- make_copy(@ent) if @ctrl
- do_move(@ent, dist, vec[2])
- when VK_RIGHT
- dist = @ent.bounds.width if @dist == 0
- vec = [dist, 0, 0]
- vec = axes
- vec.length = dist
- make_copy(@ent) if @ctrl
- do_move(@ent, dist, vec)
- when VK_LEFT
- dist = @ent.bounds.width if @dist == 0
- vec = [-dist, 0, 0]
- vec = axes
- vec.length = -dist
- make_copy(@ent) if @ctrl
- do_move(@ent, dist, vec)
- end
- # p [@shift, @ctrl, @alt]
- view.invalidate
- end
- end
- def do_move(ent, dist=1, vec)
- origin = ent.transformation.origin
- new_pt = origin.offset(vec)
- tr = Geom::Transformation.new(new_pt)
- ent.move!(tr)
- end
- def move_section_plane(splane, key)
- dist = @dist == 0 ? 1.to_l : @dist
- plane = splane.get_plane
- if key == VK_UP
- plane[-1] += dist
- elsif key == VK_DOWN
- plane[-1] -= dist
- end
- splane.set_plane(plane)
- end
- def move_camera(key)
- cam = Sketchup.active_model.active_view.camera
- eye = cam.eye
- target = cam.target
- up = cam.up
- vec = cam.xaxis
- vec.length = @dist
- case key
- when VK_RIGHT
- eye = eye.offset(vec)
- target = target.offset(vec)
- when VK_LEFT
- eye = eye.offset(vec.reverse)
- target = target.offset(vec.reverse)
- end
- cam.set(eye, target, up)
- end
- def best_axes
- cam = Sketchup.active_model.active_view.camera
- xaxis = cam.xaxis
- xangle = (cam.xaxis.angle_between(X_AXIS)).radians
- yangle = (cam.xaxis.angle_between(Y_AXIS)).radians
- if xangle <= 45.0
- vec = [1, 0, 0]
- elsif xangle > 135.0
- vec = [-1, 0, 0]
- elsif yangle > 135.0
- vec = [0, -1, 0]
- else
- vec = [0, 1, 0]
- end
- Geom::Vector3d.new(vec)
- end
- def make_copy(ent)
- if ent.is_a?(Sketchup::Group)
- copy = ent.copy
- copy.transformation = ent.transformation
- end
- if ent.is_a?(Sketchup::ComponentInstance)
- ent.parent.entities.add_instance(ent.definition, ent.transformation)
- end
- end
- def onUserText(text, view)
- begin
- l = text.to_l
- rescue
- nil
- else
- @dist = l
- Sketchup.vcb_value = @dist
- end
- end
- def draw(view)
- #view.refresh
- end
- end # NudgeTool
- end # Nudge
- end # JF
- menu = defined?(JF.menu) ? JF.menu : UI.menu('Plugins')
- menu.add_item("Nudge Tool") {
- Sketchup.active_model.select_tool(JF::Nudge::NudgeTool.new)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement