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.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>
>>>
>>
>>
>> --
>>
>
>

Reply via email to