# Editable Terrain Manager and its Brushes

SomeFusion

10-05-2009 13:01:57

Hi,

I'm currently trying to convert this code from C++ to Python:
viewtopic.php?t=6370

This is the code I have till now:
``` def averageFilter(self, x, z, brush, intensity): #When you're doing a loop possibly thousands of times, it's worth setting these #aside rather than calling a function every iteration. iWidth = brush.getWidth() iHeight = brush.getHeight() storageclass = ctypes.c_float * (iWidth * iHeight) vecReturnBuffer = storageclass() vecHeightBuffer = storageclass() ptr = ctypes.pointer(vecReturnBuffer) brushReturn = ET.Brush(ctypes.pointer(vecReturnBuffer), iWidth, iHeight) brushHeights = ET.Brush(ctypes.pointer(vecHeightBuffer), iWidth, iHeight) self.terrainManager.getHeights(x, z, brushHeights) fSumHeights = 0.0 iNumHeights = iWidth * iHeight # Find the sum of all the heights within the sample i = 0 j = 0 while i < iWidth: while j < iHeight: fSumHeights += brushHeights.at(i, j) j += 1 i += 1 #Find the average height within the sample fAvgHeight = fSumHeights / iNumHeights i = 0 j = 0 while i < iWidth: while j < iHeight: fHeight = brushHeights.at(i, j) fDelta = fHeight - fAvgHeight fShapeMask = shape.at(i, j) fDelta = fDelta * fShapeMask * fIntensity val = brushReturn.at(i, j) val = fHeight - fDelta j += 1 i += 1 ```

The problem is here when I try to create the brushes.

brushReturn = ET.Brush(ctypes.pointer(vecReturnBuffer), iWidth, iHeight)
brushHeights = ET.Brush(ctypes.pointer(vecHeightBuffer), iWidth, iHeight)

ctypes.pointer(vecReturnBuffer) won't give me the correct type which the Brush constructor expects. This is the error I get.
[attachment=0]error.png[/attachment]

This is propably more a python question than a python-ogre question but I don't think its a horribly wrong place to ask here .
How do I get the correct results from cpython? The other method would be an std::vector of floats, but I don't think this type is wrapped.

Thanks!

dermont

11-05-2009 14:22:31

For std::vector<float> I think it's ogre.LodDistanceList() for earlier versions of python-ogre and
ogre.stdVectorFloat() for later versions.