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.