import Part
import math
#from random import *
import random
from FreeCAD import Base
#length
L = 30
#width
W = 2
V1 = Base.Vector(0,W,0)
V2 = Base.Vector(L,W,0)
V3 = Base.Vector(L,-W,0)
V4 = Base.Vector(0,-W,0)
V5 = Base.Vector(L+1,0,0)
V6 = Base.Vector(0-1,0,0)
branchL = Part.makePolygon([V1,V2,V5,V3,V4,V6,V1])
branchW = Part.Wire(branchL)
branchF = Part.Face(branchW)
branch = branchF.extrude(Base.Vector(0,0,1))

snflake = branch.copy()

for i in range(1,4):
	ramiL = branchL.copy()
	ramiR = branchL.copy()
	myMat = Base.Matrix()
	len = random.random()
	wid = random.uniform(0.5,1)
	myMat.scale(len,wid,1)
	ramiL = ramiL.transformGeometry(myMat)
	ramiR = ramiR.transformGeometry(myMat)
	
	pos = random.random()
	
	if i==1:
		if random.uniform(-1,1)>=0:
			angle = 120
		else:
			angle = 60
	else:
		angle = 60
		
	
	ramiL.rotate(Base.Vector(0,0,0),Base.Vector(0,0,1),angle)
	ramiL.translate(Base.Vector(30 * pos,0,0))
	
	ramiR.rotate(Base.Vector(0,0,0),Base.Vector(0,0,1),-angle)
	ramiR.translate(Base.Vector(30 * pos,0,0))
	
	ramiW = Part.Wire(ramiL)
	ramiF = Part.Face(ramiW)
	ramil = ramiF.extrude(Base.Vector(0,0,1))
	
	ramiW = Part.Wire(ramiR)
	ramiF = Part.Face(ramiW)
	ramir = ramiF.extrude(Base.Vector(0,0,1))
	
	branch = ramil.fuse(branch)
	branch = ramir.fuse(branch)
	snflake = branch.fuse(snflake)
	#branch = branch.removeSplitter()


for i in range(1,6):
	branch.rotate(Base.Vector(0,0,0),Base.Vector(0,0,1),60)
	snflake = snflake.fuse(branch)

cylinder1 = Part.makeCylinder(W*2,1,Base.Vector(30,0,0),Base.Vector(0,0,1))
snflake = snflake.fuse(cylinder1)
cylinder1 = Part.makeCylinder(W,1,Base.Vector(30,0,0),Base.Vector(0,0,1))
snflake = snflake.cut(cylinder1)

snflake = snflake.removeSplitter()



Part.show(snflake)

#import importDXF
#string = 'flake'+str(5)
#importDXF.export(snflake,u"/Volumes/ROSSELET/flake1.dxf")