Switch all generation and rendering to blender.
This commit is contained in:
parent
57c2414e6b
commit
ea74f4c7ab
38 changed files with 248 additions and 385933 deletions
|
@ -1,65 +1,100 @@
|
|||
import bpy
|
||||
from mathutils import Vector
|
||||
import bmesh
|
||||
|
||||
import sys
|
||||
# freecad setup
|
||||
FREECADPATH = "/usr/lib/freecad/lib/"
|
||||
sys.path.append(FREECADPATH)
|
||||
import numpy as np
|
||||
import FreeCAD
|
||||
import Part
|
||||
def NormalInDirection(normal, direction, limit = 0.99):
|
||||
return abs(direction.dot( normal )) > limit
|
||||
|
||||
def generate_cone_shade(height, radius, thickness):
|
||||
|
||||
edge0 = Part.makeLine((0.0, 0.0, 0),
|
||||
(-radius, -height, 0))
|
||||
edge1 = Part.makeLine((-radius, -height, 0),
|
||||
(-radius -thickness, -height, 0))
|
||||
edge2 = Part.makeLine((-radius -thickness, -height, 0),
|
||||
(-thickness, 0.0, 0))
|
||||
edge3 = Part.makeLine((-thickness, 0.0, 0),
|
||||
(0.0, 0.0, 0))
|
||||
wire1 = Part.Wire([edge0, edge1, edge2, edge3])
|
||||
face = Part.Face([wire1,])
|
||||
def UpOrDown(normal):
|
||||
|
||||
pos = FreeCAD.Vector(0.0, 0.0, 0.0)
|
||||
vec = FreeCAD.Vector(0.0, 1.0, 0.0)
|
||||
angle = 360
|
||||
solid = face.revolve(pos, vec, angle)
|
||||
return solid
|
||||
up = NormalInDirection(normal, Vector((0.0, 0.0, 1.0)), limit = 0.99)
|
||||
down = NormalInDirection(normal, Vector((0.0, 0.0, -1.0)), limit = 0.99)
|
||||
if up or down:
|
||||
return True
|
||||
return False
|
||||
|
||||
def generate_mesh_shade(height, radius, thickness):
|
||||
def generate_cone_shade(radius1, radius2, depth):
|
||||
|
||||
edge0 = Part.makeLine((0.0, 0.0, 0),
|
||||
(-radius, -height, 0))
|
||||
edge1 = Part.makeLine((-radius, -height, 0),
|
||||
(-radius -thickness, -height, 0))
|
||||
edge2 = Part.makeLine((-radius -thickness, -height, 0),
|
||||
(-thickness, 0.0, 0))
|
||||
edge3 = Part.makeLine((-thickness, 0.0, 0),
|
||||
(0.0, 0.0, 0))
|
||||
wire1 = Part.Wire([edge0, edge1, edge2, edge3])
|
||||
face = Part.Face([wire1,])
|
||||
bpy.ops.mesh.primitive_cone_add(radius1=radius1,
|
||||
radius2=radius2,
|
||||
depth=depth)
|
||||
cone = bpy.data.objects["Cone"]
|
||||
cone.name = "shade"
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
bm = bmesh.from_edit_mesh(cone.data)
|
||||
for face in bm.faces:
|
||||
if UpOrDown(face.normal):
|
||||
face.select = True
|
||||
else:
|
||||
face.select = False
|
||||
faces_select = [f for f in bm.faces if f.select]
|
||||
bmesh.ops.delete(bm, geom=faces_select, context=3)
|
||||
bmesh.update_edit_mesh(cone.data, True)
|
||||
|
||||
pos = FreeCAD.Vector(0.0, 0.0, 0.0)
|
||||
vec = FreeCAD.Vector(0.0, 1.0, 0.0)
|
||||
angle = 360
|
||||
solid = face.revolve(pos, vec, angle)
|
||||
return solid
|
||||
# Extrude faces
|
||||
bpy.ops.mesh.select_mode( type = 'FACE' )
|
||||
bpy.ops.mesh.select_all( action = 'SELECT' )
|
||||
bpy.ops.mesh.extrude_region_move(
|
||||
TRANSFORM_OT_translate={"value":(0, 0, 0.01)} )
|
||||
bpy.ops.mesh.extrude_region_shrink_fatten(
|
||||
TRANSFORM_OT_shrink_fatten={"value":-0.05})
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
return cone
|
||||
|
||||
def generate_bio_shade(height, radius, thickness):
|
||||
def generate_mesh_shade(radius1, radius2, depth):
|
||||
|
||||
edge0 = Part.makeLine((0.0, 0.0, 0),
|
||||
(-radius, -height, 0))
|
||||
edge1 = Part.makeLine((-radius, -height, 0),
|
||||
(-radius -thickness, -height, 0))
|
||||
edge2 = Part.makeLine((-radius -thickness, -height, 0),
|
||||
(-thickness, 0.0, 0))
|
||||
edge3 = Part.makeLine((-thickness, 0.0, 0),
|
||||
(0.0, 0.0, 0))
|
||||
wire1 = Part.Wire([edge0, edge1, edge2, edge3])
|
||||
face = Part.Face([wire1,])
|
||||
bpy.ops.mesh.primitive_cone_add(radius1=radius1,
|
||||
radius2=radius2,
|
||||
depth=depth)
|
||||
cone = bpy.data.objects["Cone"]
|
||||
cone.name = "shade"
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
bm = bmesh.from_edit_mesh(cone.data)
|
||||
for face in bm.faces:
|
||||
if UpOrDown(face.normal):
|
||||
face.select = True
|
||||
else:
|
||||
face.select = False
|
||||
faces_select = [f for f in bm.faces if f.select]
|
||||
bmesh.ops.delete(bm, geom=faces_select, context=3)
|
||||
bmesh.update_edit_mesh(cone.data, True)
|
||||
|
||||
pos = FreeCAD.Vector(0.0, 0.0, 0.0)
|
||||
vec = FreeCAD.Vector(0.0, 1.0, 0.0)
|
||||
angle = 360
|
||||
solid = face.revolve(pos, vec, angle)
|
||||
return solid
|
||||
# Extrude faces
|
||||
bpy.ops.mesh.select_mode( type = 'FACE' )
|
||||
bpy.ops.mesh.select_all( action = 'SELECT' )
|
||||
bpy.ops.mesh.extrude_region_move(
|
||||
TRANSFORM_OT_translate={"value":(0, 0, 0.01)} )
|
||||
bpy.ops.mesh.extrude_region_shrink_fatten(
|
||||
TRANSFORM_OT_shrink_fatten={"value":-0.05})
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
return cone
|
||||
|
||||
def generate_bio_shade(radius1, radius2, depth):
|
||||
|
||||
bpy.ops.mesh.primitive_cone_add(radius1=radius1,
|
||||
radius2=radius2,
|
||||
depth=depth)
|
||||
cone = bpy.data.objects["Cone"]
|
||||
cone.name = "shade"
|
||||
bpy.ops.object.mode_set(mode='EDIT')
|
||||
bm = bmesh.from_edit_mesh(cone.data)
|
||||
for face in bm.faces:
|
||||
if UpOrDown(face.normal):
|
||||
face.select = True
|
||||
else:
|
||||
face.select = False
|
||||
faces_select = [f for f in bm.faces if f.select]
|
||||
bmesh.ops.delete(bm, geom=faces_select, context=3)
|
||||
bmesh.update_edit_mesh(cone.data, True)
|
||||
|
||||
# Extrude faces
|
||||
bpy.ops.mesh.select_mode( type = 'FACE' )
|
||||
bpy.ops.mesh.select_all( action = 'SELECT' )
|
||||
bpy.ops.mesh.extrude_region_move(
|
||||
TRANSFORM_OT_translate={"value":(0, 0, 0.01)} )
|
||||
bpy.ops.mesh.extrude_region_shrink_fatten(
|
||||
TRANSFORM_OT_shrink_fatten={"value":-0.05})
|
||||
bpy.ops.object.mode_set(mode='OBJECT')
|
||||
return cone
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue