Skip to content

Instantly share code, notes, and snippets.

@partybusiness
Last active June 15, 2020 03:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save partybusiness/f6639997a7af7dcee24aacb3f03cac16 to your computer and use it in GitHub Desktop.
Save partybusiness/f6639997a7af7dcee24aacb3f03cac16 to your computer and use it in GitHub Desktop.
Gemstones
# Adding Mesh Function
#################################################
import bpy
def add_mesh(name, verts, faces, edges=None, col_name="Collection"):
if edges is None:
edges = []
mesh = bpy.data.meshes.new(name)
obj = bpy.data.objects.new(mesh.name, mesh)
col = bpy.data.collections.get(col_name)
col.objects.link(obj)
bpy.context.view_layer.objects.active = obj
mesh.from_pydata(verts, edges, faces)
# Gem generation functions
################################
def make_gem(rings, faces, gemName):
verts = []
for ring in rings:
for ringPoint in ring:
verts.append(ringPoint[0])
add_mesh(gemName, verts, faces)
def new_ring(numberOfVertices, height, radius=1, rotOffset=0.0):
global globalIndex
newRing = []
for localIndex in range(0, numberOfVertices):
angleStep = 3.141592653589793 * 2 / numberOfVertices
rot = localIndex * angleStep + rotOffset * angleStep
vertex = (sin(rot)*radius,height,cos(rot)*radius)
newRing.append(( vertex, localIndex, globalIndex))
globalIndex = globalIndex + 1
return newRing
def cap_ring(ring):
global faces
newFace = []
for ringPoint in ring:
newFace.append(ringPoint[2])
faces.append(newFace)
def connect_rings(ring1, ring2, connectionPattern, count1=1, count2=1):
global faces
index1 = 0
index2 = 0
while (index1 < len(ring1)):
newFace = []
for conIndex in connectionPattern[0]:
newFace.append(ring1[(index1 + conIndex)%len(ring1)][2])
for conIndex in connectionPattern[1]:
newFace.append(ring2[(index2 + conIndex)%len(ring2)][2])
index1 = index1 + count1
index2 = index2 + count2
faces.append(newFace)
# OLD EUROPEAN CUT
###############################
verts = []
faces = []
rings = []
globalIndex = 0
r1 = new_ring(8,0.48,0.3)
r2 = new_ring(8,0.27,0.534,0.5)
r3 = new_ring(16,0,0.75)
r4 = new_ring(8,-0.27,0.6,0.5)
r5 = new_ring(8,-0.95,0.05,0.5)
cap_ring(r1)
connect_rings(r1,r2,[[0,1],[0]])
connect_rings(r1,r2,[[1],[1,0]])
connect_rings(r2,r3,[[0,1],[2]],1,2)
connect_rings(r2,r3,[[1],[4,3,2]],1,2)
connect_rings(r3,r4,[[1,2],[0]],2,1)
connect_rings(r3,r4,[[2,3],[1]],2,1)
connect_rings(r3,r4,[[2],[1,0]],2,1)
connect_rings(r4,r5,[[0,1],[1,0]])
cap_ring(r5)
rings.append(r1)
rings.append(r2)
rings.append(r3)
rings.append(r4)
rings.append(r5)
make_gem(rings,faces, "Old European Cut")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment