home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / share / k3d / scripts / scripted_plugins / create_trim_curve.py < prev    next >
Encoding:
Text File  |  2008-05-01  |  3.0 KB  |  94 lines

  1. #python
  2.  
  3. # k3d:plugin-class="document"
  4. # k3d:plugin-type="MeshModifierScript"
  5. # k3d:plugin-name="CreateTrimCurve"
  6. # k3d:plugin-description="Adds a circular trim curve to the input"
  7.  
  8. import k3d
  9. import math
  10.  
  11. Output.copy(Input)
  12.  
  13. nurbs_patches = Output.writable_nurbs_patches()
  14.  
  15. #create the output arrays
  16. patch_trim_curve_loop_counts = nurbs_patches.create_patch_trim_curve_loop_counts()
  17. patch_first_trim_curve_loops = nurbs_patches.create_patch_first_trim_curve_loops()
  18. trim_points = nurbs_patches.create_trim_points()
  19. trim_point_selection = nurbs_patches.create_trim_point_selection()
  20. first_trim_curves = nurbs_patches.create_first_trim_curves()
  21. trim_curve_counts = nurbs_patches.create_trim_curve_counts()
  22. trim_curve_loop_selection = nurbs_patches.create_trim_curve_loop_selection()
  23. trim_curve_first_points = nurbs_patches.create_trim_curve_first_points()
  24. trim_curve_point_counts = nurbs_patches.create_trim_curve_point_counts()
  25. trim_curve_orders = nurbs_patches.create_trim_curve_orders()
  26. trim_curve_first_knots = nurbs_patches.create_trim_curve_first_knots()
  27. trim_curve_selection = nurbs_patches.create_trim_curve_selection()
  28. trim_curve_points = nurbs_patches.create_trim_curve_points()
  29. trim_curve_point_weights = nurbs_patches.create_trim_curve_point_weights()
  30. trim_curve_knots = nurbs_patches.create_trim_curve_knots()
  31.  
  32. #circle parameters
  33. segments = 4
  34. start_angle = 0.0
  35. end_angle = 2*math.pi
  36. theta = (end_angle - start_angle) / segments
  37. weight = math.cos(theta * 0.5)
  38.  
  39. first_trim_curves.append(0)
  40. trim_curve_counts.append(1)
  41. trim_curve_first_points.append(0)
  42. trim_curve_loop_selection.append(0)
  43. trim_curve_point_counts.append(2*segments+1)
  44. trim_curve_orders.append(3)
  45. trim_curve_first_knots.append(0)
  46. trim_curve_selection.append(0.0)
  47.  
  48. #knots
  49. for i in range(0, 3):
  50.   trim_curve_knots.append(0)
  51. for i in range(1, segments):
  52.   trim_curve_knots.append(i)
  53.   trim_curve_knots.append(i)
  54. for i in range(0, 3):
  55.   trim_curve_knots.append(segments)
  56.  
  57. #weights
  58. trim_curve_point_weights.append(1)
  59. for i in range(segments):
  60.   trim_curve_point_weights.append(weight)
  61.   trim_curve_point_weights.append(1)
  62. #trim_curve_point_weights.append(weight)
  63.  
  64. #control points
  65. X = k3d.point3(1, 0, 0)
  66. Y = k3d.point3(0, 1, 0)
  67.  
  68. trim_points.append(math.cos(start_angle) * k3d.point2(0.75, 0.5) + math.sin(start_angle) * k3d.point2(0.5, 0.75))
  69. for i in range(segments):
  70.   a0 = start_angle + (theta * (i))
  71.   a2 = start_angle + (theta * (i + 1))
  72.  
  73.   p0 = k3d.point3(math.cos(a0) * X + math.sin(a0) * Y)
  74.   p2 = k3d.point3(math.cos(a2) * X + math.sin(a2) * Y)
  75.  
  76.   t0 = k3d.point3(-math.sin(a0) * X + math.cos(a0) * Y)
  77.   t2 = k3d.point3(-math.sin(a2) * X + math.cos(a2) * Y)
  78.  
  79.   p1 = k3d.point3(0, 0, 0)
  80.   k3d.intersect_lines(p0, k3d.to_vector3(t0), p2, k3d.to_vector3(t2), p1)
  81.  
  82.   trim_points.append(k3d.point2(0.25*p1[0] + 0.5, 0.25*p1[1] + 0.5))
  83.   trim_points.append(k3d.point2(0.25*p2[0] + 0.5, 0.25*p2[1] + 0.5))
  84.  
  85. for i in range(len(trim_points)):
  86.   trim_point_selection.append(0)
  87.  
  88. for i in range(2*segments):
  89.   trim_curve_points.append(i)
  90. trim_curve_points.append(0)
  91.  
  92. patch_trim_curve_loop_counts.append(1)
  93. patch_first_trim_curve_loops.append(0)
  94.