34
34
35
35
import unittest
36
36
import sys
37
+ import os
37
38
import imath
38
39
39
40
import IECore
40
41
import IECoreImage
41
42
42
43
class DisplayDriverServerTest ( unittest .TestCase ) :
43
44
45
+ def __prepareBuf ( self , buf , width , offset , red , green , blue ):
46
+ for i in range ( 0 , width ):
47
+ buf [3 * i ] = blue [i + offset ]
48
+ buf [3 * i + 1 ] = green [i + offset ]
49
+ buf [3 * i + 2 ] = red [i + offset ]
50
+
44
51
def testPortNumber ( self ) :
45
52
46
53
s1 = IECoreImage .DisplayDriverServer ( 1559 )
@@ -122,22 +129,37 @@ def testPortRangeRegistry( self ) :
122
129
def testMergeMap ( self ) :
123
130
server = IECoreImage .DisplayDriverServer ( 45001 )
124
131
125
- displayWindow = imath .Box2i ( imath .V2i (0 ,0 ), imath .V2i (100 ,100 ) )
126
- dataWindow = imath .Box2i ( imath .V2i (0 ,0 ), imath .V2i (100 ,100 ) )
132
+ img = IECore .Reader .create ( os .path .join ( "test" , "IECoreImage" , "data" , "tiff" , "bluegreen_noise.400x300.tif" ) )()
133
+ self .assertEqual ( img .keys (), [ 'B' , 'G' , 'R' ] )
134
+ red = img ['R' ]
135
+ green = img ['G' ]
136
+ blue = img ['B' ]
137
+ width = img .dataWindow .max ().x - img .dataWindow .min ().x + 1
127
138
128
139
params = IECore .CompoundData ()
129
140
params ['displayHost' ] = IECore .StringData ('localhost' )
130
141
params ['displayPort' ] = IECore .StringData ( '45001' )
131
142
params ['displayDriverServer:mergeId' ] = IECore .IntData ( 42 )
132
143
params ['displayDriverServer:mergeClients' ] = IECore .IntData ( 2 )
133
144
params ["remoteDisplayType" ] = IECore .StringData ( "ImageDisplayDriver" )
145
+ params ["handle" ] = IECore .StringData ( "myHandle1" )
146
+
147
+ idd1 = IECoreImage .ClientDisplayDriver ( img .displayWindow , img .dataWindow , list ( img .channelNames () ), params )
134
148
135
- idd1 = IECoreImage . ClientDisplayDriver ( displayWindow , dataWindow , list ( [ "R" , "G" ] ), params )
136
- idd2 = IECoreImage .ClientDisplayDriver ( displayWindow , dataWindow , list ( [ "R" , "G" ] ), params )
149
+ params [ "handle" ] = IECore . StringData ( "myHandle2" )
150
+ idd2 = IECoreImage .ClientDisplayDriver ( img . displayWindow , img . dataWindow , list ( img . channelNames () ), params )
137
151
138
152
params ['displayDriverServer:mergeId' ] = IECore .IntData ( 666 )
139
153
params ['displayDriverServer:mergeClients' ] = IECore .IntData ( 1 )
140
- idd3 = IECoreImage .ClientDisplayDriver ( displayWindow , dataWindow , list ( ["R" , "G" ] ), params )
154
+ params ["handle" ] = IECore .StringData ( "myHandle3" )
155
+ idd3 = IECoreImage .ClientDisplayDriver ( img .displayWindow , img .dataWindow , list ( img .channelNames () ), params )
156
+
157
+ buf = IECore .FloatVectorData ( width * 3 )
158
+ for i in range ( 0 , img .dataWindow .max ().y - img .dataWindow .min ().y + 1 ):
159
+ self .__prepareBuf ( buf , width , i * width , red , green , blue )
160
+ idd1 .imageData ( imath .Box2i ( imath .V2i ( img .dataWindow .min ().x , i + img .dataWindow .min ().y ), imath .V2i ( img .dataWindow .max ().x , i + img .dataWindow .min ().y ) ), buf )
161
+ idd2 .imageData ( imath .Box2i ( imath .V2i ( img .dataWindow .min ().x , i + img .dataWindow .min ().y ), imath .V2i ( img .dataWindow .max ().x , i + img .dataWindow .min ().y ) ), buf )
162
+ idd3 .imageData ( imath .Box2i ( imath .V2i ( img .dataWindow .min ().x , i + img .dataWindow .min ().y ), imath .V2i ( img .dataWindow .max ().x , i + img .dataWindow .min ().y ) ), buf )
141
163
142
164
# Test that the merge map has merge id 42 and that there are two clients
143
165
mergeDriverInfo = IECoreImage .DisplayDriverServer .getMergeDriverInfo ( 42 )
@@ -158,6 +180,22 @@ def testMergeMap( self ) :
158
180
159
181
idd3 .imageClose ()
160
182
183
+ newImg = IECoreImage .ImageDisplayDriver .removeStoredImage ( "myHandle1" )
184
+ newImg2 = IECoreImage .ImageDisplayDriver .removeStoredImage ( "myHandle2" )
185
+ newImg3 = IECoreImage .ImageDisplayDriver .removeStoredImage ( "myHandle3" )
186
+
187
+ # merge drivers share the same display driver - so second image should be none,
188
+ # as there is no image drivere associated with it.
189
+ self .assertIsNone ( newImg2 )
190
+
191
+ # remove blindData for comparison
192
+ newImg .blindData ().clear ()
193
+ img .blindData ().clear ()
194
+ self .assertEqual ( newImg , img )
195
+
196
+ newImg3 .blindData ().clear ()
197
+ self .assertEqual ( newImg3 , img )
198
+
161
199
server = None
162
200
163
201
if __name__ == "__main__" :
0 commit comments