###############################################################################

# #
# This file is part of a style sheet example from the Freestyle application #
# Copyright (C) 2001-2004 Stephane Grabli (Stephane.Grabli@imag.fr) #
# #
# http://artis.imag.fr/Software/Freestyle #
# #
###############################################################################


from Freestyle import * import string

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" % (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, p.x()+self._step, p.y())\
- ReadCompleteViewMapPixelCF(self._l, p.x(), p.y())
gy = ReadCompleteViewMapPixelCF(self._l, p.x(), p.y()+self._step)\
- ReadCompleteViewMapPixelCF(self._l, p.x(), p.y())
return Vec2f(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, p.x()+self._step, p.y())- ReadCompleteViewMapPixelCF(self._l, p.x(), p.y())
gy = ReadCompleteViewMapPixelCF(self._l, p.x(), p.y()+self._step)- ReadCompleteViewMapPixelCF(self._l, p.x(), p.y())
grad = Vec2f(gx, gy)
return grad.norm()