[PD-dev] pyext users?
Thomas Grill
gr at grrrr.org
Sat Jul 30 13:48:54 CEST 2005
Hi Ben,
could you send me an associated test patch?
Also, calling your class array might not be a good idea, as you also
imported numarray.array as array.
best,
Thomas
B. Bogart schrieb:
> Funny you mention that Frank,
>
> I'm currently hacking away at a py/numarray external storing control
> points for a Gem object.
>
> All is great until I try and make multiple instances of the py object,
> things get funny. All of a sudden some methods are no longer accepted: I
> get an "unhandled" message, while others work fine.
>
> Anyhow for the python hackers out there here is my current code:
>
> (obviously some things are inefficient but I'd like to get it to work
> before I worry about elegance! Why might this not work when I create a
> second instance?)
>
> import pyext
> import sys
> from numarray import *
>
> class array(pyext._class):
>
> # number of inlets and outlets
> _inlets=1
> _outlets=1
>
> # Vars
> width = 0
> height = 0
> points = array()
>
> print "curve3d scripts init"
>
> # Definitions
> def send_array(self):
>
> for i in xrange(self.width):
> for j in xrange(self.height):
> self._outlet(1,"set",(i,j)+tuple(self.points[i,j]))
>
> # Generates Array of Control points
> def generate_array(self,w,h,w_lower,w_upper,h_lower,h_upper):
>
> # Set values
>
> self.width = w
> self.height = h
>
> # Create Array
> self.points=zeros((w,h,3),Float32)
>
> # Calculate Size
> w_range = w_upper-w_lower
> h_range = h_upper-h_lower
>
> z=0
>
> for i in xrange(w):
> for j in xrange(h):
> x=i*(w_range/(w-1.0))+w_lower
> y=j*(h_range/(h-1.0))+h_lower
> self.points[i,j] = [x,y,z]
>
> # if the point matches then subtract 0.1
> def change_(self,n,*args):
> if len(args) == 5:
> x = args[0]
> y = args[1]
> test_width = args[2]
> test_height = args[3]
> z = args[4]
> for i in xrange(self.width):
> for j in xrange(self.height):
> if x < self.points[i,j,0]+test_width:
> if x > self.points[i,j,0]-test_width:
> if y < self.points[i,j,1]+test_height:
> if y > self.points[i,j,1]-test_height:
> # Note multiple matches are possible here
> self.points[i,j,2] -= z
> #print "X: "+str(x)+" Y: "+str(y)+" Z:
> "+str(points[i,j,2])+" I: "+str(i)+" J: "+str(j)
> self.send_array()
> else:
> print "Change requires 5 arguments: 'change <X> <Y> <test-width>
> <test-height> <z>'"
>
> # methods for first inlet
> def generate_(self,n,*args):
> if len(args) == 6:
>
> self.generate_array(*args)
> self.send_array()
>
> else:
> print "generate_array requires 6 arguments: <width> <height>
> <width lower> <width upper> <height lower> <height upper>"
>
> Thanks all.
>
> b>
>
> Frank Barknecht wrote:
>
>> Hallo,
>> Georg Holzmann hat gesagt: // Georg Holzmann wrote:
>>
>>
>>> I guess the iem matrix objects count from 1 because matlab/octave also
>>> counts from 1 :)
>>
>>
>>
>> Well, there's always numarray. ;)
>>
>> Ciao
>
>------------------------------------------------------------------------
>
>_______________________________________________
>PD-dev mailing list
>PD-dev at iem.at
>http://lists.puredata.info/listinfo/pd-dev
>
>
More information about the Pd-dev
mailing list