On Thu, Oct 24, 2013 at 3:46 AM, Martin Dobias <wonder...@gmail.com> wrote: > On Thu, Oct 24, 2013 at 1:32 AM, Radim Blazek <radim.bla...@gmail.com> wrote: >> On Wed, Oct 23, 2013 at 7:07 PM, Martin Dobias <wonder...@gmail.com> wrote: >>> When I enter those two lines into QGIS python console, it work fine >>> (no debug output, result of setColor() call is True). Tested on linux >>> 64bit, QGIS master (debug), SIP v4.15.2. >> >> could you also test if you get the right value from block back >> block.color( index ) >> and with indexes > 0 > > Yes, I get correct values. > >>> Otherwise I do not really have an idea what goes wrong there (btw. the >>> index is an interesting number - in hex it is 0x7ff800000000 >> >> it does not seem to be really correct >> >>> - maybe it is not handling size_t type correctly? >> >> yes, size_t seems to be the problem, it is not defined in qgsrasterblock.sip, >> probably the definition from qgsgeometry.sip is used: >> %If (WS_MACX) >> typedef unsigned long size_t; >> %End >> %If (WS_X11 || WS_WIN) >> typedef unsigned int size_t; >> %End >> which does not seem to be very robust. > > Indeed, the definition does not look robust. Will it help if you > change size_t definition for your platform to "unsigned long long" ? > (assuming you are on 64bit OS)
Then I get >>> block.setColor( 0, QColor ().rgb() ) Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: arguments did not match any overloaded call: QgsRasterBlock.setColor(int, int, int): not enough arguments QgsRasterBlock.setColor(int, int): argument 1 has unexpected type 'int' works with "unsigned long". In C++ I have size_t defined as "long unsigned int" (gives compilation error if used in sip file) which should be the same as "unsigned long" I believe. The problem is wrong definition of size_t in sip file. It should not work for you as well, right? If you are on Linux you get "typedef unsigned int size_t" in sip which is not the same as size_t in C++. I guess that it accidentally works because by chance the memory used by wider type is zeroed. > There was a thread on size_t in PyQt some time ago: > http://www.riverbankcomputing.com/pipermail/pyqt/2006-March/012753.html Yes, I saw, quite old and no solution. If I look into stddef.h (/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h) the typedef of size_t is quite complex. So how can we reliably define size_t in sip file? >> BTW, how to define such things >> correctly, in each sip file or globally in another sip file for all? > > You need to define these things just once in one of the .sip files. > The order is not important (unlike c/c++). I mean what is the best practice to do that in QGIS. Would not it be better to have shared definitions separated into some common.sip? Radim > Martin _______________________________________________ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer