merlin11188

MrNicNac's Meshizer

Jun 23rd, 2011
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.39 KB | None | 0 0
  1. --[[
  2.  
  3. The below only works for meshes on Roblox.
  4.  
  5. ----------------------------------------------------------
  6.  
  7. 1) Find the mesh you want,
  8. 2) Copy the meshId and put it into a script's LinkedSource (Yes really!).
  9. 3) Then look in the scripts source (double-click).
  10. 4) Now copy all those numbers and brackets at the bottom of the script's source.
  11. 5) Then reaplce the ones in my meshizer with the vertices you copied.
  12.  
  13. -- MrNicNac
  14.  
  15. ]]
  16.  
  17. local MeshVertices = ""
  18. local Size = 15
  19. TB = {}
  20. tmodel = Instance.new("Model", workspace)
  21.  
  22. for vertex in string.gmatch(MeshVertices, "%[.-%]",1,true) do
  23.     local v3, n = vertex:gsub("%[",""):gsub("%]","")
  24.     table.insert(TB, loadstring("return Vector3.new("..v3..")")())
  25. end
  26.  
  27. local ply = Instance.new("WedgePart")
  28. ply.formFactor = "Custom"
  29. ply.TopSurface = 0
  30. ply.BottomSurface = 0
  31. ply.Anchored = true
  32. ply.Size = Vector3.new(0.2,7,7)
  33.  
  34. local msh = Instance.new("SpecialMesh")
  35. msh.MeshType = 2
  36. msh.Parent = ply
  37.  
  38. function ParaD(a, b, c)
  39.     local dot = (b-a).x*(c-a).x + (b-a).y*(c-a).y + (b-a).z*(c-a).z
  40.     return dot / (a-b).magnitude
  41. end
  42.  
  43. function PerpD(a, b, c)
  44.     local par = ParaD(a, b, c)
  45.     return math.sqrt((c-a).magnitude^2 - par^2)
  46. end
  47.  
  48. local _P0, _P1 = nil, nil
  49.  
  50. function DrawTriangle(vec1, vec2, vec3)
  51.     local A, B, C = nil, nil, nil
  52.     local p0, p1 = ply:clone(), ply:clone()
  53.     _P0 = p0
  54.     _P1 = p1
  55.     local s1 = (vec1 - vec2).magnitude
  56.             s2 = (vec2 - vec3).magnitude
  57.             s3 = (vec3 - vec1).magnitude
  58.     local smax = math.max(s1, s2, s3)
  59.     if (vec1 - vec2).magnitude == smax then
  60.         A = vec1
  61.         B = vec2
  62.         C = vec3
  63.     elseif (vec2 - vec3).magnitude == smax then
  64.         A = vec2
  65.         B = vec3
  66.         C = vec1   
  67.     elseif (vec3 - vec1).magnitude == smax then
  68.         A = vec3
  69.         B = vec1
  70.         C = vec2   
  71.     end
  72.     local perp = PerpD(A, B, C)
  73.     local para = ParaD(A, B, C)
  74.     local dif_para = (A-B).magnitude - para
  75.     local ambig = false
  76.     p0.Mesh.Scale = Vector3.new(0.1, 1,1)
  77.     p0.Size = Vector3.new(.2, perp, para)
  78.     p0.CFrame = CFrame.new(B, A)
  79.     local Top_Look = (p0.CFrame * CFrame.fromEulerAnglesXYZ(math.pi/2, 0, 0)).lookVector
  80.     local Mid_Point = A + CFrame.new(A, B).lookVector * para
  81.     local Needed_Look = CFrame.new(Mid_Point, C).lookVector
  82.     local dot = Top_Look.x*Needed_Look.x + Top_Look.y*Needed_Look.y + Top_Look.z*Needed_Look.z
  83.     p0.CFrame = p0.CFrame * CFrame.fromEulerAnglesXYZ(0, 0, math.acos(dot))
  84.     if ((p0.CFrame * CFrame.fromEulerAnglesXYZ(math.pi/2, 0, 0)).lookVector - Needed_Look).magnitude > 0.01 then
  85.         p0.CFrame = p0.CFrame * CFrame.fromEulerAnglesXYZ(0, 0, -2*math.acos(dot))
  86.         ambig = true
  87.     end
  88.     p0.CFrame = p0.CFrame * CFrame.new(0, perp/2, -(dif_para + para/2))
  89.     p0.Parent = tmodel
  90.     p0.Name = "P0"
  91.     p1.Mesh.Scale = Vector3.new(0, 1,1)
  92.     p1.Size = Vector3.new(.2, perp, dif_para)
  93.     p1.CFrame = CFrame.new(B, A)  * CFrame.fromEulerAnglesXYZ(0, 0, math.acos(dot)) * CFrame.fromEulerAnglesXYZ(0, math.pi, 0)
  94.     if ((p1.CFrame * CFrame.fromEulerAnglesXYZ(math.pi/2, 0, 0)).lookVector - Needed_Look).magnitude > 0.01 then
  95.         p1.CFrame = p1.CFrame * CFrame.fromEulerAnglesXYZ(0, 0, 2*math.acos(dot))
  96.         ambig = true
  97.     end
  98.     p1.CFrame = p1.CFrame * CFrame.new(0, perp/2, dif_para/2)
  99.     p1.Parent = tmodel
  100.     p1.Name = "P1"
  101. end
  102.  
  103. local cIndex = 1
  104. while TB[cIndex] do
  105.     if TB[cIndex] and TB[cIndex+3] and TB[cIndex+6] then
  106.         DrawTriangle(TB[cIndex]*Size, TB[cIndex + 3]*Size, TB[cIndex + 6]*Size)
  107.     end
  108.     cIndex = cIndex + 9
  109.     if math.random(1,5) == 1 then
  110.         wait()
  111.     end
  112. end
Advertisement
Add Comment
Please, Sign In to add comment