Hi Alok. I'm using this for the first time and loving it, however my immediate crit would be that it would be great if it could resolve tokens. In my case [Project Path] specifically.
Thanks again for this! DAN On Sun, Nov 17, 2013 at 9:52 AM, Dan Yargici <[email protected]> wrote: > 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. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> >>>> >>>> >>> >>> >>> -- >>> >> >> >

