At work we are, yeah. I'll see about getting it compiled.
On Sat, Nov 16, 2013 at 4:16 PM, Alok Gandhi <[email protected]>wrote: > Yea it may be that. I presume you are using linux. If not then test out > the node to check if it works. > > > On Sat, Nov 16, 2013 at 4:01 PM, Alan Fregtman <[email protected]>wrote: > >> Interesting... I wonder if this is why I've been having problems with >> KP's PC2 reader with huge files just over 2GB? I ended up splitting my >> meshes to work around it, but now I wonder... >> >> >> >> >> On Sat, Nov 16, 2013 at 2:18 PM, Alok Gandhi >> <[email protected]>wrote: >> >>> Hi All, >>> >>> I have update the ReadPC2ICE node to version 1.1 >>> >>> You can find the addon here <http://bit.ly/1axgUea> and code >>> here<http://bit.ly/17ZKRpU> >>> . >>> >>> Change Log: >>> >>> Bug fixes: >>> >>> >>> >>> · Point data for files over 2 GB was not read correctly due to >>> limitations of <int> data type. It is changed to <__int64> which can handle >>> the data > 2 GB. Now the node can easily read files over 2 GB. >>> >>> >>> >>> *Notes* >>> >>> · The same changes needs to be applied for *KP_PointCacheReader*for >>> this bugfix. I am not aware if Kai has fixed this already in other >>> updates to his code. But the >>> one<http://sculptwork.com/rr/bak/kaipirinha/KP_PointCacheV25.zip> I >>> had from rray.de does not have this change. Kai, if you are listening >>> can you confirm that? >>> >>> >>> >>> · The code for this bugfix is not supported on Linux. However, >>> in case you want to compile for Linux, please note that the <__int64> data >>> type for windows translates to <long long> on a gcc compiler for Linux. I >>> will add support for Linux once I have a machine with Linux up and running. >>> Till then you have to change the code yourself. >>> >>> >>> >>> >>> >>> · Suppressed unnecessary warning messages in cases of pc2 file >>> not specified and unable to open file. They were kind of annoying. Just >>> uncomment my code lines to bring them back if you want. >>> >>> >>> >>> >>> >>> New features: >>> >>> >>> >>> · When working with pc2 files I always missed the ability to >>> know beforehand the start and end frame of the file. Now the node supports >>> this. There are two new output ports that furnish the start and end frames >>> as scalars. You can use this to do time warps, offsets, view them in >>> viewports as custom attributes or whatever else you might find it useful >>> for. >>> >>> Please feel free to mail me if you have any question or problems/bugs >>> with this addon. >>> >>> Thanks. >>> >>> >>> >>> On Mon, Nov 4, 2013 at 9:00 PM, Alok Gandhi >>> <[email protected]>wrote: >>> >>>> And here is the github for the code: >>>> >>>> https://github.com/alok1974/KP_PointCache-Reader-ICE-Node >>>> >>>> >>>> On Mon, Nov 4, 2013 at 8:42 PM, Alok Gandhi >>>> <[email protected]>wrote: >>>> >>>>> Here is the code for the pc2 reader: >>>>> >>>>> ---------------------------------------------------------- >>>>> """ >>>>> .PC2 File Format: >>>>> You can create or modify PointCache2 files by hand using the following >>>>> file format. >>>>> The start of the file is a header containing: >>>>> >>>>> char cacheSignature[12]; // Will be 'POINTCACHE2' followed by a >>>>> trailing null character. >>>>> int fileVersion; // Currently 1 >>>>> int numPoints; // Number of points per sample >>>>> float startFrame; // Corresponds to the UI value of the >>>>> same name. >>>>> float sampleRate; // Corresponds to the UI value of the >>>>> same name. >>>>> int numSamples; // Defines how many samples are stored >>>>> in the file. >>>>> >>>>> Be sure to check the version number. If it isn't 1, then don't mess >>>>> with the file, >>>>> as the format will change in the future. >>>>> >>>>> Following the header, there is a straight dump of all the cache >>>>> samples (which are snapshots of all the point positions for an object). >>>>> Each sample is stored one after the other as a flat array of x/y/z >>>>> floats >>>>> for each point (so each sample is (numPoints * sizeof(float) * 3) >>>>> bytes). >>>>> """ >>>>> >>>>> >>>>> # Note for Alan : You might want to extend this class by adding a >>>>> method to fetch the frame data >>>>> # for a prticular frame. It is trivial to do so, just >>>>> look at my code below for >>>>> # getting bounding box data. >>>>> >>>>> import os >>>>> import sys >>>>> import time >>>>> from struct import unpack >>>>> >>>>> class CacheObject(object): >>>>> def __init__(self, pth): >>>>> self._dFile = None >>>>> self.fPath = pth >>>>> self._headerString = '' >>>>> self._cacheFileVersionNumber = 0 >>>>> self._pCount = 0 >>>>> self._startFrame = 0 >>>>> self._sampleRate = 0 >>>>> self._numSamples = 0 >>>>> self._mshBBox = {} >>>>> self._headerRead = False >>>>> self._dataRead = False >>>>> >>>>> def _setFile(self): >>>>> if not self._dFile: >>>>> self._dFile = open(self.fPath, 'rb') >>>>> self._msh = >>>>> os.path.splitext(os.path.basename(self.fPath))[0] >>>>> >>>>> if not self._headerRead: >>>>> self._processHeader() >>>>> >>>>> >>>>> >>>>> def _processHeader(self): >>>>> self._headerRead = True >>>>> >>>>> self._setFile() >>>>> >>>>> dfile = self._dFile >>>>> >>>>> self._headerString = unpack('12s', dfile.read(12))[0] >>>>> self._cacheFileVersionNumber = unpack('I', dfile.read(4))[0] >>>>> self._pCount = unpack('L', dfile.read(4))[0] >>>>> self._startFrame = unpack('f', dfile.read(4))[0] >>>>> self._sampleRate = unpack('f', dfile.read(4))[0] >>>>> self._numSamples = unpack('L', dfile.read(4))[0] >>>>> >>>>> if not self._dataRead: >>>>> dfile.flush() >>>>> dfile.close() >>>>> self._dFile = None >>>>> >>>>> >>>>> >>>>> def _processBBoxData(self): >>>>> self._dataRead = True >>>>> self._setFile() >>>>> >>>>> dfile = self._dFile >>>>> data = {} >>>>> >>>>> >>>>> s = int(self._startFrame) >>>>> e = int(s + self._numSamples) >>>>> >>>>> for f in range(s, e): >>>>> xArr = [] >>>>> yArr = [] >>>>> zArr = [] >>>>> >>>>> for i in range(self._pCount): >>>>> x = unpack('f', dfile.read(4))[0] >>>>> y = unpack('f', dfile.read(4))[0] >>>>> z = unpack('f', dfile.read(4))[0] >>>>> >>>>> xArr.append((x, i)) >>>>> yArr.append((y, i)) >>>>> zArr.append((z, i)) >>>>> >>>>> # min\max data >>>>> d = (max(xArr)[0], max(yArr)[0], max(zArr)[0], >>>>> min(xArr)[0], min(yArr)[0], min(zArr)[0]) >>>>> >>>>> data[f] = { 0:(d[3], d[4], d[5]), >>>>> 1:(d[3], d[1], d[5]), >>>>> 2:(d[0], d[1], d[5]), >>>>> 3:(d[0], d[4], d[5]), >>>>> 4:(d[3], d[4], d[2]), >>>>> 5:(d[3], d[1], d[2]), >>>>> 6:(d[0], d[1], d[2]), >>>>> 7:(d[0], d[4], d[2]), >>>>> } >>>>> >>>>> self._mshBBox = data >>>>> >>>>> dfile.flush() >>>>> dfile.close() >>>>> self._dFile = None >>>>> >>>>> def getHeaderInfo(self): >>>>> self._processHeader() >>>>> return {'HEADER': self._headerString, >>>>> 'VERSION': self._cacheFileVersionNumber, >>>>> 'NB_POINTS': self._pCount, >>>>> 'START_FRAME': self._startFrame, >>>>> 'SAMPLE_RATE': self._sampleRate, >>>>> 'NB_SAMPLES': self._numSamples,} >>>>> >>>>> def getBBoxData(self): >>>>> self._processBBoxData() >>>>> return self._mshBBox >>>>> >>>>> if __name__ == '__main__': >>>>> f = r'<pc2 file path>' >>>>> o = CacheObject(f) >>>>> print o.getHeaderInfo() >>>>> >>>>> --------------------------------------------------------- >>>>> >>>>> >>>>> On Mon, Nov 4, 2013 at 8:37 PM, Alok Gandhi < >>>>> [email protected]> wrote: >>>>> >>>>>> Hmm, there are a few options to load the data in reader operator. >>>>>> Stream, Frame or Memory. Try selecting the frame or memory options. By >>>>>> default, it is the stream which might have problems similar to one you >>>>>> have. Anyways, in addition to the ICE Node, few years back, I also wrote >>>>>> a >>>>>> python reader class to read the pc2 file data directly through python. >>>>>> Not >>>>>> optimised using numpy or scipy but it can still let you investigate the >>>>>> contents of a ,pc2 file in a human-readable format. I will also post the >>>>>> code to it. >>>>>> >>>>>> >>>>>> On Mon, Nov 4, 2013 at 8:33 PM, Alan Fregtman < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Intermittent empty frames. Sometimes they work, sometimes not. Mind >>>>>>> you... it's very dense topo, and the pc2 file is about 2GB. It might be >>>>>>> reaching some sort of limit somewhere. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, Nov 4, 2013 at 8:29 PM, Alok Gandhi < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> You do realise that my node is an exact copy of the KP_PointCache >>>>>>>> Reader Operator. Only difference is that instead of applying the >>>>>>>> pointposition on the host mesh posarray, it furnishes the same data in >>>>>>>> the >>>>>>>> vector array format in ICE. >>>>>>>> >>>>>>>> I am not sure if reading the pointpositions in ICE through my node >>>>>>>> will give you any extra functionality that Kai's original operator >>>>>>>> can't. >>>>>>>> But anyways, feel free to try it. >>>>>>>> >>>>>>>> Btw, may I know what is the issue that you are having ? >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Nov 4, 2013 at 8:25 PM, Alan Fregtman < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> Great! Thank you. Just today we've been experiencing an issue with >>>>>>>>> KP's reader for this one specific mesh. We're temporarily using >>>>>>>>> Alembic >>>>>>>>> manually, but I'm curious if your reader will be any better. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Nov 4, 2013 at 7:45 PM, Alok Gandhi < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Surething, will post the source probably on github. My old laptop >>>>>>>>>> with ubuntu died a few months ago :( so I cant compile it myself. >>>>>>>>>> >>>>>>>>>> I will post the link here soon. >>>>>>>>>> >>>>>>>>>> Sent from my iPhone >>>>>>>>>> >>>>>>>>>> On Nov 4, 2013, at 7:20 PM, Alan Fregtman < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>> Hey Alok, >>>>>>>>>> >>>>>>>>>> Any chance for a Linux compile? Or sources to attempt a compile >>>>>>>>>> ourselves? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Mon, Nov 4, 2013 at 11:21 AM, Alok Gandhi < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> Glad it helped you. And yea, now thinking in retrospect, you >>>>>>>>>>> won't need the switch context as the getpointid already does that. >>>>>>>>>>> >>>>>>>>>>> Sent from my iPhone >>>>>>>>>>> >>>>>>>>>>> On Nov 4, 2013, at 9:23 AM, Cristobal Infante <[email protected]> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> VERY HANDY Alok, I can confirm you don't need the switch context >>>>>>>>>>> node, all the rest worked fine.. >>>>>>>>>>> >>>>>>>>>>> By the way, the BIG difference in relation to the default >>>>>>>>>>> "Cache on File" read node, is that you are able to move your cached >>>>>>>>>>> geometry >>>>>>>>>>> around the scene. So if you have a last minute layout change you >>>>>>>>>>> can deal with it in rendering. This is way we've stuck with KP op >>>>>>>>>>> reader so far.. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On 4 November 2013 13:58, Alok Gandhi <[email protected] >>>>>>>>>>> > wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Cristobal, >>>>>>>>>>>> >>>>>>>>>>>> The node output a single array of pointpositions. So you have >>>>>>>>>>>> to convert the array to per point attribute. A getpointid plugged >>>>>>>>>>>> into the >>>>>>>>>>>> select in array and them set pointposition will do the trick. Of >>>>>>>>>>>> course you >>>>>>>>>>>> know that the target mesh or pointcloud should have same number >>>>>>>>>>>> points as >>>>>>>>>>>> in the pc2 file. Also you might need a switch context node before >>>>>>>>>>>> set >>>>>>>>>>>> pointposition. >>>>>>>>>>>> >>>>>>>>>>>> In case of an empty pointcloud, it is easier. Just plug the >>>>>>>>>>>> output of the node directly into an add points node. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Sent from my iPhone >>>>>>>>>>>> >>>>>>>>>>>> On Nov 4, 2013, at 8:13 AM, Cristobal Infante <[email protected]> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi Alok, >>>>>>>>>>>> >>>>>>>>>>>> Thanks again for sharing this tool, we still rely KP pc2 reader >>>>>>>>>>>> so having an alternative is really handy. >>>>>>>>>>>> >>>>>>>>>>>> I was guessing "Read PC2 File" > "Set Point Position"? >>>>>>>>>>>> >>>>>>>>>>>> But I am getting a structure mismatch, probably doing the wrong >>>>>>>>>>>> thing! >>>>>>>>>>>> >>>>>>>>>>>> Thanks, >>>>>>>>>>>> Cris >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On 4 November 2013 05:40, Alok Gandhi < >>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Ah I see, I was confused when you said " i haven't tried >>>>>>>>>>>>> multiple files per frame (does softimage even export pc2 files >>>>>>>>>>>>> this way?) >>>>>>>>>>>>> ". >>>>>>>>>>>>> >>>>>>>>>>>>> Well in that, sure you can export single file per frame per >>>>>>>>>>>>> object through KP_PointCache manager, you simply have to select >>>>>>>>>>>>> the start >>>>>>>>>>>>> and end frame as the same. PC2 file format have the notion of >>>>>>>>>>>>> "samples" >>>>>>>>>>>>> rather than frame, so if you have one sample per frame set then >>>>>>>>>>>>> basically >>>>>>>>>>>>> you are exporting one data set (pointpositions) per frame. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> On Mon, Nov 4, 2013 at 12:26 AM, Steven Caron < >>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> no one said that you could have multiple objects in the same >>>>>>>>>>>>>> .pc2 file. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Sun, Nov 3, 2013 at 8:37 PM, Alok Gandhi < >>>>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> I am a little confused... >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>>> For sure, you cannot have multiple objects in the same .pc2 >>>>>>>>>>>>>>> file, the format simply doesn't support that. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> >>>> >>>> >>>> >>>> -- >>>> >>> >>> >>> >>> -- >>> >> >> > > > -- >

