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