Alembic baking round 2 [SOLVED]

On 07/04/2015 at 00:55, xxxxxxxx wrote:

So I got back into it, and discover that the points link method will indeed work in some form of fashion. I'm tackling this from a different perspective, I generate a Spline object from a number of alembic curve manually this time, but all I get in the end is a mass of points, not a bunch of segments with individual splines. I was curious as to what i may be doing wrong

import c4d
import os, hashlib, csv
  
from c4d import bitmaps, gui, plugins, documents, utils
from types import *
  
  
if __name__ == '__main__':
    # Get active doc
    doc = c4d.documents.GetActiveDocument()
  
    # Get project current start and end frames
    startFrameValue = int(doc.GetMinTime().GetFrame(doc.GetFps()))
    endFrameValue = int(doc.GetMaxTime().GetFrame(doc.GetFps()))
  
    #pointCount = op.GetGuides().GetPointCount()
    newSpline = c4d.SplineObject(0, c4d.SPLINETYPE_LINEAR)
    #newSpline = c4d.BaseObject(c4d.Ospline) # Create new null
    newSpline.SetName("hair_baked")
    doc.InsertObject(newSpline)
  
    extCurves = op.GetChildren()
    
    for curve in extCurves:
        realSpline = curve.GetRealSpline()
        obj = realSpline.GetClone()
  
        if(obj) :
            curvePntCnt = obj.GetPointCount()
            segPntStart = newSpline.GetPointCount() # the start of the new segment's points should be here
            print "Segment point start: " + str(segPntStart) 
  
            # if the point count for this alembic curve is zero with shouldn't make a new segment
            if(curvePntCnt != 0) :
                newSpline.ResizeObject(newSpline.GetPointCount()+curvePntCnt, newSpline.GetSegmentCount()+1)
  
                print "Segment count: " + str(newSpline.GetSegmentCount())
                print "Point count: " + str(newSpline.GetPointCount())
  
                # transfer point positions from alembic curve to combined spline
                print "-----------Point vectors----------"
                for i in range(0, curvePntCnt-1) :       
                    print obj.GetPoint(i)
                    newSpline.SetPoint(segPntStart + i, obj.GetPoint(i))
                print "---------Point vectors end--------"
         
    c4d.EventAdd()

On 07/04/2015 at 01:55, xxxxxxxx wrote:

Hello,

the segments can be defined with SplineObject.SetSegment().
You can set up your segments e.g. in the last for loop of your script.

marginalia...
(I always sent an update message if the bounding box of an object has changed.
C4DAtom.Message(c4d.MSG_UPDATE))

Hope this helps!
Best wishes
Martin

On 07/04/2015 at 06:44, xxxxxxxx wrote:

Hello,

as Martin said, you must use SetSegment() to define the segments of the spline you create. You find a example on how to us this function in the Double Circle plugin.

Best wishes,
Sebastian

On 08/04/2015 at 01:11, xxxxxxxx wrote:

there were just a few more complications but the SetSegment advice and several hours of looking at documentation and point counts got me the rest of the way. Once I had the splines showing up I began to realize C4Ds hair system uses the same point count for each guide, whereas upon export/import that count gets jacked up. Incorporating a guide point count and the  ID_MODELING_SPLINE_ROUND_TOOL via SendModelingCommand got me the rest of the way there.