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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    Init PRIM_PLANE problem

    Scheduled Pinned Locked Moved PYTHON Development
    2 Posts 0 Posters 282 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

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 17/04/2012 at 03:49, xxxxxxxx wrote:

      For some reason this parameter will not initialise

      I want it to initialise to ZY  - not the default XY

      in the build - the same approach sets the parameter correctly

      see below under ...

      1 of 2 ############ just testing stuff.
      2 of 2 ############ just testing stuff.
      import c4d, sys, os
      from c4d import plugins, utils as u, bitmaps, gui,documents, Vector as v
        
      PLUGIN_ID = 1028416		#unique plugin id from plugincafe.com
        
      class JSplineObject(plugins.ObjectData) :
        
      		########################## Init interface and values
      	def Init(self, op) :
      		op.SetName("J Spline Creator")	#op is the generator object
      		doc = documents.GetActiveDocument
        
      		
      		self.InitAttr(op, float, [c4d.P1])       #Init the values you defined in your res file
      		op[c4d.P1] = 40.0                        #Set a default value for point1
        
      		self.InitAttr(op, float, [c4d.P2])
      		op[c4d.P2] = 20.0
        
      		self.InitAttr(op, float, [c4d.P3]) 
      		op[c4d.P3] = 10.0
      		
      		self.InitAttr(op, float, [c4d.CHAMFER])
      		op[c4d.CHAMFER]= 1.0
      		
      		self.InitAttr(op, bool, [c4d.CHAMFER_FLAT])
      		op[c4d.CHAMFER_FLAT] = False
      		
      		self.InitAttr(op, bool, [c4d.OUTLINE])
      		op[c4d.OUTLINE] = True
      		
      		self.InitAttr(op, float, [c4d.OUTLINE_OFFSET])
      		op[c4d.OUTLINE_OFFSET] = 5.0
      		
      		self.InitAttr(op, bool, [c4d.CHAMFER_BASE])
      		op[c4d.CHAMFER_BASE] = False
      		
      		self.InitAttr(op, bool, [c4d.CHAMFER_TAIL])
      		op[c4d.CHAMFER_TAIL] = False
      		
      		
      		
      		
      ########################### 1 of 2 ############ just testing stuff...
      		op[c4d.PRIM_PLANE] = c4d.PRIM_PLANE_ZY #### NEITHER THIS OR 1 Works??
      		op[c4d.PRIM_REVERSE] = 1 #True
      		op[c4d.SPLINEOBJECT_INTERPOLATION] = c4d.SPLINEOBJECT_INTERPOLATION_SUBDIV
      		op[c4d.SPLINEOBJECT_SUB] = 8 # long?
      		op[c4d.SPLINEOBJECT_ANGLE] = u.Rad(4) # float?
      		op[c4d.SPLINEOBJECT_MAXIMUMLENGTH] = 5 # float?
        
        
      ########################### 1 of 2 ############ test to here
      		
      		return True
      		###################END#### Init interface and values 
        
        
      		########################## Build
      	def Build(self,op) :
        
      		p1 = op[c4d.P1]
      		p2 = op[c4d.P2]
      		p3 = op[c4d.P3]
      		chamfer_amount = op[c4d.CHAMFER]
      		chamfer_flat_switch = op[c4d.CHAMFER_FLAT]
      		outline_switch = op[c4d.OUTLINE]
      		outline_offset = op[c4d.OUTLINE_OFFSET]
      		chamfer_base_switch = op[c4d.CHAMFER_BASE]
      		chamfer_tail_switch = op[c4d.CHAMFER_TAIL]
        
      		############# a few limits
      		if p2 < chamfer_amount : 
      			p2 =  chamfer_amount
      			op[c4d.P2] = p2
        
      		############# a few limits - dont let the tail be bigger than J Height
      		if p3 > p1 : 
      			p3 =  p1
      			op[c4d.P3] = p3
        
      		if p3 < -p1 : 
      			p3 =  -p1+ 0.1
      			op[c4d.P3] = p3
        
      		############# if both swiches off - ignore amount in AM and zero
      		if (chamfer_base_switch == False) and (chamfer_tail_switch == False) :
      			chamfer_amount = 0 
      		
      		jspline = c4d.SplineObject(4,c4d.SPLINETYPE_BEZIER)
      		
      		jspline.SetPoint( 0, v(0.0, p1, 0.0))
      		jspline.SetPoint( 1, v(0.0, 0.0, 0.0))
      		jspline.SetPoint( 2, v(-p2, 0.0, 0.0))
      		jspline.SetPoint( 3, v(-p2, p3, 0.0))
      		
      		jspline[c4d.SPLINEOBJECT_CLOSED] = False
        
      		sel = jspline.GetPointS()
      		sel.DeselectAll()
        
      		############# select points depending on AM checkbox
      		if chamfer_base_switch == True:
      			sel.Select(1)
        
      		if chamfer_tail_switch == True:
      			sel.Select(2)
      			
      		############# chamfer the spline
      		bc = c4d.BaseContainer()
        
      		bc.SetData(c4d.MDATA_SPLINE_CHAMFERFLAT, chamfer_flat_switch ) 
      		bc.SetData(c4d.MDATA_SPLINE_CHAMFERRADIUS, chamfer_amount)    
      		result = u.SendModelingCommand(c4d.ID_MODELING_SPLINE_CHAMFER_TOOL, [jspline],c4d.MODELINGCOMMANDMODE_POINTSELECTION, bc)
        
      		############# outline the spline
      		if outline_switch == True:
      			bc.SetData(c4d.MDATA_SPLINE_OUTLINE, outline_offset)
      			u.SendModelingCommand(c4d.MCOMMAND_SPLINE_CREATEOUTLINE,[jspline],c4d.MODELINGCOMMANDMODE_ALL,bc)   		
        
      ########################### 2 of 2 ############ test testing stuff...
      ########following same logic as above but prim_plane actually works 
      		plane = op[c4d.PRIM_PLANE]
      		reverse = op[c4d.PRIM_REVERSE]
      		interp = op[c4d.SPLINEOBJECT_INTERPOLATION]
      		subd = op[c4d.SPLINEOBJECT_SUB]
      		ang = op[c4d.SPLINEOBJECT_ANGLE]
      		maxlen = op[c4d.SPLINEOBJECT_MAXIMUMLENGTH]
        
        
        
      		#### do some processing from  included res Osplineprimitive;
      		#### in this case just print to console to check
        
      		print 'PLANE: ', plane
      		print 'REVERSE: ', reverse 
      		print 'INTERP: ',interp 
      		print 'SUBDIV: ', subd 
      		print 'ANGLE: ', ang 
      		print 'MAXLENGTH: ', maxlen
      		print ' ' 
        
      		
      		
      		############# just testing - put the values back????
      		op[c4d.PRIM_PLANE] = plane ##### essentially the same thing as the init WORKS?
      		op[c4d.SPLINEOBJECT_INTERPOLATION] = interp
      		op[c4d.PRIM_REVERSE] = reverse
      		op[c4d.SPLINEOBJECT_SUB] = subd
      		op[c4d.SPLINEOBJECT_ANGLE] = ang
      		op[c4d.SPLINEOBJECT_MAXIMUMLENGTH] = maxlen
      		
        
      ########################### 2 of 2 ############  test to here
        
        
        
        
      		return jspline.GetClone()
      	############# Return the built spline 
      	
      	############# Go and return the built spline
      	def GetContour(self, op, doc, lod, bt) :
      		return self.Build(op)     
        
        
      		
      if __name__ == "__main__":
          dir, file = os.path.split(__file__)
          icon = bitmaps.BaseBitmap()
          icon.InitWith(os.path.join(dir, "res", "icon.png"))
          JSplineCreator = plugins.RegisterObjectPlugin(id=PLUGIN_ID, str="JSplineObject",
                                      g=JSplineObject,
                                      description="JSplineObject", icon=icon,
                                      info=c4d.OBJECT_GENERATOR  | c4d.OBJECT_ISSPLINE)
                                      
          if JSplineCreator:
          	print 'JSplineCreator Loaded'
        
      
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 17/04/2012 at 08:25, xxxxxxxx wrote:

        Setting PRIM_REVERSE works as expected but PRIM_PLANE not. I contacted the developers on this issue.

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