Advertisement
Guest User

Untitled

a guest
Oct 9th, 2015
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.13 KB | None | 0 0
  1. module JF
  2. module Nudge
  3.  
  4. class NudgeTool
  5.  
  6.  
  7. def enableVCB?
  8. true
  9. end
  10.  
  11. def activate
  12. @dist ||= 1.0.to_l
  13. @ent = Sketchup.active_model.selection[0]
  14. Sketchup.vcb_label = "Nudge dist"
  15. Sketchup.vcb_value = @dist
  16. axes = best_axes()
  17. end
  18.  
  19. def onKeyUp(key, repeat, flags, view)
  20. case key
  21. when COPY_MODIFIER_KEY
  22. @ctrl = nil
  23. when CONSTRAIN_MODIFIER_KEY
  24. @shift = nil
  25. when ALT_MODIFIER_KEY
  26. @alt = nil
  27. end
  28. end
  29.  
  30. def onKeyDown(key, repeat, flags, view)
  31. sel = Sketchup.active_model.selection[0]
  32. dist = @dist
  33. axes = best_axes()
  34.  
  35. case key
  36. when COPY_MODIFIER_KEY
  37. @ctrl = true
  38. when CONSTRAIN_MODIFIER_KEY
  39. @shift = true
  40. when ALT_MODIFIER_KEY
  41. @alt = true
  42. end
  43.  
  44. if sel.class == Sketchup::SectionPlane
  45. move_section_plane(sel, key)
  46.  
  47. elsif sel == nil
  48. move_camera(key)
  49.  
  50. else
  51.  
  52. case key
  53. when VK_UP
  54. dist = @ent.bounds.height if @dist == 0
  55. #vec = [0, dist, 0]
  56. vec = axes
  57. make_copy(@ent) if @ctrl
  58. do_move(@ent, dist, vec[2])
  59. when VK_DOWN
  60. dist = @ent.bounds.height if @dist == 0
  61. vec = [0, -dist, 0]
  62. vec = axes
  63. make_copy(@ent) if @ctrl
  64. do_move(@ent, dist, vec[2])
  65. when VK_RIGHT
  66. dist = @ent.bounds.width if @dist == 0
  67. vec = [dist, 0, 0]
  68. vec = axes
  69. vec.length = dist
  70. make_copy(@ent) if @ctrl
  71. do_move(@ent, dist, vec)
  72. when VK_LEFT
  73. dist = @ent.bounds.width if @dist == 0
  74. vec = [-dist, 0, 0]
  75. vec = axes
  76. vec.length = -dist
  77. make_copy(@ent) if @ctrl
  78. do_move(@ent, dist, vec)
  79. end
  80. # p [@shift, @ctrl, @alt]
  81. view.invalidate
  82. end
  83. end
  84.  
  85. def do_move(ent, dist=1, vec)
  86. origin = ent.transformation.origin
  87. new_pt = origin.offset(vec)
  88. tr = Geom::Transformation.new(new_pt)
  89. ent.move!(tr)
  90. end
  91.  
  92. def move_section_plane(splane, key)
  93. dist = @dist == 0 ? 1.to_l : @dist
  94. plane = splane.get_plane
  95. if key == VK_UP
  96. plane[-1] += dist
  97. elsif key == VK_DOWN
  98. plane[-1] -= dist
  99. end
  100. splane.set_plane(plane)
  101. end
  102.  
  103. def move_camera(key)
  104. cam = Sketchup.active_model.active_view.camera
  105. eye = cam.eye
  106. target = cam.target
  107. up = cam.up
  108. vec = cam.xaxis
  109. vec.length = @dist
  110. case key
  111. when VK_RIGHT
  112. eye = eye.offset(vec)
  113. target = target.offset(vec)
  114. when VK_LEFT
  115. eye = eye.offset(vec.reverse)
  116. target = target.offset(vec.reverse)
  117. end
  118. cam.set(eye, target, up)
  119. end
  120.  
  121. def best_axes
  122. cam = Sketchup.active_model.active_view.camera
  123. xaxis = cam.xaxis
  124. xangle = (cam.xaxis.angle_between(X_AXIS)).radians
  125. yangle = (cam.xaxis.angle_between(Y_AXIS)).radians
  126. if xangle <= 45.0
  127. vec = [1, 0, 0]
  128. elsif xangle > 135.0
  129. vec = [-1, 0, 0]
  130. elsif yangle > 135.0
  131. vec = [0, -1, 0]
  132. else
  133. vec = [0, 1, 0]
  134. end
  135. Geom::Vector3d.new(vec)
  136. end
  137.  
  138. def make_copy(ent)
  139. if ent.is_a?(Sketchup::Group)
  140. copy = ent.copy
  141. copy.transformation = ent.transformation
  142. end
  143. if ent.is_a?(Sketchup::ComponentInstance)
  144. ent.parent.entities.add_instance(ent.definition, ent.transformation)
  145. end
  146. end
  147.  
  148. def onUserText(text, view)
  149. begin
  150. l = text.to_l
  151. rescue
  152. nil
  153. else
  154. @dist = l
  155. Sketchup.vcb_value = @dist
  156. end
  157. end
  158.  
  159. def draw(view)
  160. #view.refresh
  161. end
  162.  
  163. end # NudgeTool
  164.  
  165. end # Nudge
  166.  
  167. end # JF
  168.  
  169.  
  170. menu = defined?(JF.menu) ? JF.menu : UI.menu('Plugins')
  171. menu.add_item("Nudge Tool") {
  172. Sketchup.active_model.select_tool(JF::Nudge::NudgeTool.new)
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement