Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    Alembic baking round 2 [SOLVED]

    Scheduled Pinned Locked Moved PYTHON Development
    4 Posts 0 Posters 348 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      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()
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        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

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          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

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            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.

            1 Reply Last reply Reply Quote 0
            • First post
              Last post