Welcome to mirror list, hosted at ThFree Co, Russian Federation.

Functions0D.py « style_modules « freestyle « scripts « release - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 38dd4b770a6564b07b24939fb7c05632b7b7e030 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from freestyle_init import *

class CurveMaterialF0D(UnaryFunction0DMaterial):
	# A replacement of the built-in MaterialF0D for stroke creation.
	# MaterialF0D does not work with Curves and Strokes.
	def getName(self):
		return "CurveMaterialF0D"
	def __call__(self, inter):
		cp = inter.getObject()
		assert(isinstance(cp, CurvePoint))
		fe = cp.A().getFEdge(cp.B())
		assert(fe is not None)
		return fe.material() if fe.isSmooth() else fe.bMaterial()

class pyInverseCurvature2DAngleF0D(UnaryFunction0DDouble):
	def getName(self):
		return "InverseCurvature2DAngleF0D"

	def __call__(self, inter):
		func = Curvature2DAngleF0D()
		c = func(inter)
		return (3.1415 - c)

class pyCurvilinearLengthF0D(UnaryFunction0DDouble):
	def getName(self):
		return "CurvilinearLengthF0D"

	def __call__(self, inter):
		i0d = inter.getObject()
		s = i0d.getExactTypeName()
		if (string.find(s, "CurvePoint") == -1):
			print("CurvilinearLengthF0D: not implemented yet for", s)
			return -1
		cp = castToCurvePoint(i0d)
		return cp.t2d()

## estimate anisotropy of density
class pyDensityAnisotropyF0D(UnaryFunction0DDouble):
	def __init__(self,level):
		UnaryFunction0DDouble.__init__(self)
		self.IsoDensity = ReadCompleteViewMapPixelF0D(level)
		self.d0Density = ReadSteerableViewMapPixelF0D(0, level)
		self.d1Density = ReadSteerableViewMapPixelF0D(1, level)
		self.d2Density = ReadSteerableViewMapPixelF0D(2, level)
		self.d3Density = ReadSteerableViewMapPixelF0D(3, level)
	def getName(self):
		return "pyDensityAnisotropyF0D"
	def __call__(self, inter):
		c_iso = self.IsoDensity(inter) 
		c_0 = self.d0Density(inter) 
		c_1 = self.d1Density(inter) 
		c_2 = self.d2Density(inter) 
		c_3 = self.d3Density(inter) 
		cMax = max( max(c_0,c_1), max(c_2,c_3))
		cMin = min( min(c_0,c_1), min(c_2,c_3))
		if ( c_iso == 0 ):
			v = 0
		else:
			v = (cMax-cMin)/c_iso
		return (v)

## Returns the gradient vector for a pixel 
## 	l
##	  the level at which one wants to compute the gradient
class pyViewMapGradientVectorF0D(UnaryFunction0DVec2f):
	def __init__(self, l):
		UnaryFunction0DVec2f.__init__(self)
		self._l = l
		self._step = pow(2,self._l)
	def getName(self):
		return "pyViewMapGradientVectorF0D"
	def __call__(self, iter):
		p = iter.getObject().getPoint2D()
		gx = ReadCompleteViewMapPixelCF(self._l, int(p.x()+self._step), int(p.y()))- ReadCompleteViewMapPixelCF(self._l, int(p.x()), int(p.y()))
		gy = ReadCompleteViewMapPixelCF(self._l, int(p.x()), int(p.y()+self._step))- ReadCompleteViewMapPixelCF(self._l, int(p.x()), int(p.y()))
		return Vector([gx, gy])

class pyViewMapGradientNormF0D(UnaryFunction0DDouble):
	def __init__(self, l):
		UnaryFunction0DDouble.__init__(self)
		self._l = l
		self._step = pow(2,self._l)
	def getName(self):
		return "pyViewMapGradientNormF0D"
	def __call__(self, iter):
		p = iter.getObject().getPoint2D()
		gx = ReadCompleteViewMapPixelCF(self._l, int(p.x()+self._step), int(p.y()))- ReadCompleteViewMapPixelCF(self._l, int(p.x()), int(p.y()))
		gy = ReadCompleteViewMapPixelCF(self._l, int(p.x()), int(p.y()+self._step))- ReadCompleteViewMapPixelCF(self._l, int(p.x()), int(p.y()))
		grad = Vector([gx, gy])
		return grad.length