@@ -770,7 +770,7 @@ def draw_path_collection(self, gc, master_transform, paths, all_transforms,
770
770
771
771
self ._path_collection_id += 1
772
772
773
- def _draw_gouraud_triangle (self , gc , points , colors , trans ):
773
+ def _draw_gouraud_triangle (self , transformed_points , colors ):
774
774
# This uses a method described here:
775
775
#
776
776
# http://www.svgopen.org/2005/papers/Converting3DFaceToSVG/index.html
@@ -782,43 +782,17 @@ def _draw_gouraud_triangle(self, gc, points, colors, trans):
782
782
# opposite edge. Underlying these three gradients is a solid
783
783
# triangle whose color is the average of all three points.
784
784
785
- writer = self .writer
786
- if not self ._has_gouraud :
787
- self ._has_gouraud = True
788
- writer .start (
789
- 'filter' ,
790
- id = 'colorAdd' )
791
- writer .element (
792
- 'feComposite' ,
793
- attrib = {'in' : 'SourceGraphic' },
794
- in2 = 'BackgroundImage' ,
795
- operator = 'arithmetic' ,
796
- k2 = "1" , k3 = "1" )
797
- writer .end ('filter' )
798
- # feColorMatrix filter to correct opacity
799
- writer .start (
800
- 'filter' ,
801
- id = 'colorMat' )
802
- writer .element (
803
- 'feColorMatrix' ,
804
- attrib = {'type' : 'matrix' },
805
- values = '1 0 0 0 0 \n 0 1 0 0 0 \n 0 0 1 0 0' +
806
- ' \n 1 1 1 1 0 \n 0 0 0 0 1 ' )
807
- writer .end ('filter' )
808
-
809
785
avg_color = np .average (colors , axis = 0 )
810
786
if avg_color [- 1 ] == 0 :
811
787
# Skip fully-transparent triangles
812
788
return
813
789
814
- trans_and_flip = self ._make_flip_transform (trans )
815
- tpoints = trans_and_flip .transform (points )
816
-
790
+ writer = self .writer
817
791
writer .start ('defs' )
818
792
for i in range (3 ):
819
- x1 , y1 = tpoints [i ]
820
- x2 , y2 = tpoints [(i + 1 ) % 3 ]
821
- x3 , y3 = tpoints [(i + 2 ) % 3 ]
793
+ x1 , y1 = transformed_points [i ]
794
+ x2 , y2 = transformed_points [(i + 1 ) % 3 ]
795
+ x3 , y3 = transformed_points [(i + 2 ) % 3 ]
822
796
rgba_color = colors [i ]
823
797
824
798
if x2 == x3 :
@@ -858,9 +832,9 @@ def _draw_gouraud_triangle(self, gc, points, colors, trans):
858
832
writer .end ('defs' )
859
833
860
834
# triangle formation using "path"
861
- dpath = "M " + _short_float_fmt (x1 )+ ',' + _short_float_fmt (y1 )
862
- dpath += " L " + _short_float_fmt (x2 ) + ',' + _short_float_fmt (y2 )
863
- dpath += " " + _short_float_fmt (x3 ) + ',' + _short_float_fmt (y3 ) + " Z"
835
+ dpath = ( f "M { _short_float_fmt (x1 )} , { _short_float_fmt (y1 )} "
836
+ f" L { _short_float_fmt (x2 )} , { _short_float_fmt (y2 )} "
837
+ f" { _short_float_fmt (x3 )} , { _short_float_fmt (y3 )} Z" )
864
838
865
839
writer .element (
866
840
'path' ,
@@ -902,11 +876,36 @@ def _draw_gouraud_triangle(self, gc, points, colors, trans):
902
876
903
877
def draw_gouraud_triangles (self , gc , triangles_array , colors_array ,
904
878
transform ):
905
- self .writer .start ('g' , ** self ._get_clip_attrs (gc ))
879
+ writer = self .writer
880
+ writer .start ('g' , ** self ._get_clip_attrs (gc ))
906
881
transform = transform .frozen ()
907
- for tri , col in zip (triangles_array , colors_array ):
908
- self ._draw_gouraud_triangle (gc , tri , col , transform )
909
- self .writer .end ('g' )
882
+ trans_and_flip = self ._make_flip_transform (transform )
883
+
884
+ if not self ._has_gouraud :
885
+ self ._has_gouraud = True
886
+ writer .start (
887
+ 'filter' ,
888
+ id = 'colorAdd' )
889
+ writer .element (
890
+ 'feComposite' ,
891
+ attrib = {'in' : 'SourceGraphic' },
892
+ in2 = 'BackgroundImage' ,
893
+ operator = 'arithmetic' ,
894
+ k2 = "1" , k3 = "1" )
895
+ writer .end ('filter' )
896
+ # feColorMatrix filter to correct opacity
897
+ writer .start (
898
+ 'filter' ,
899
+ id = 'colorMat' )
900
+ writer .element (
901
+ 'feColorMatrix' ,
902
+ attrib = {'type' : 'matrix' },
903
+ values = '1 0 0 0 0 \n 0 1 0 0 0 \n 0 0 1 0 0 \n 1 1 1 1 0 \n 0 0 0 0 1 ' )
904
+ writer .end ('filter' )
905
+
906
+ for points , colors in zip (triangles_array , colors_array ):
907
+ self ._draw_gouraud_triangle (trans_and_flip .transform (points ), colors )
908
+ writer .end ('g' )
910
909
911
910
def option_scale_image (self ):
912
911
# docstring inherited
0 commit comments