21bba923a2aacb803d687294e880bdb1d6b0b106
[blender.git] / release / scripts / freestyle / style_modules / PredicatesB1D.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 #  Filename : PredicatesB1D.py
20 #  Authors  : Fredo Durand, Stephane Grabli, Francois Sillion, Emmanuel Turquin 
21 #  Date     : 08/04/2005
22 #  Purpose  : Binary predicates (functors) to be used for 1D elements
23
24 from freestyle import BinaryPredicate1D, GetZF1D, IntegrationType, Nature, SameShapeIdBP1D, ZDiscontinuityF1D
25 from Functions1D import pyViewMapGradientNormF1D
26
27 import random
28
29 class pyZBP1D(BinaryPredicate1D):
30         def __call__(self, i1, i2):
31                 func = GetZF1D()
32                 return (func(i1) > func(i2))
33
34 class pyZDiscontinuityBP1D(BinaryPredicate1D):
35         def __init__(self, iType = IntegrationType.MEAN):
36                 BinaryPredicate1D.__init__(self)
37                 self._GetZDiscontinuity = ZDiscontinuityF1D(iType)
38         def __call__(self, i1, i2):
39                 return (self._GetZDiscontinuity(i1) > self._GetZDiscontinuity(i2))
40
41 class pyLengthBP1D(BinaryPredicate1D):
42         def __call__(self, i1, i2):
43                 return (i1.length_2d > i2.length_2d)
44
45 class pySilhouetteFirstBP1D(BinaryPredicate1D):
46         def __call__(self, inter1, inter2):
47                 bpred = SameShapeIdBP1D()
48                 if (bpred(inter1, inter2) != 1):
49                         return 0
50                 if (inter1.nature & Nature.SILHOUETTE):
51                         return (inter2.nature & Nature.SILHOUETTE) != 0
52                 return (inter1.nature == inter2.nature)
53
54 class pyNatureBP1D(BinaryPredicate1D):
55         def __call__(self, inter1, inter2):
56                 return (inter1.nature & inter2.nature)
57
58 class pyViewMapGradientNormBP1D(BinaryPredicate1D):
59         def __init__(self,l, sampling=2.0):
60                 BinaryPredicate1D.__init__(self)
61                 self._GetGradient = pyViewMapGradientNormF1D(l, IntegrationType.MEAN)
62         def __call__(self, i1,i2):
63                 print("compare gradient")
64                 return (self._GetGradient(i1) > self._GetGradient(i2))
65
66 class pyShuffleBP1D(BinaryPredicate1D):
67         def __init__(self):
68                 BinaryPredicate1D.__init__(self)
69                 random.seed(1)
70         def __call__(self, inter1, inter2):
71                 r1 = random.uniform(0,1)
72                 r2 = random.uniform(0,1)
73                 return (r1<r2)