Thanks Alok, much appreciated! DAN
On Sun, Nov 17, 2013 at 3:01 AM, Alan Fregtman <[email protected]>wrote: > 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. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> >>>> >>>> >>>> >>>> -- >>>> >>> >>> >> >> >> -- >> > >

