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

    Polygons disappear with Polygon Object Generator

    Scheduled Pinned Locked Moved PYTHON Development
    3 Posts 0 Posters 756 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 13/02/2018 at 11:00, xxxxxxxx wrote:

      (Object Generator Plugin in Python for Cinema 4D R19.024 on macOS Sierra)

      Hello Everyone!

      If I register an object plugin as a c4d.OBJECT_GENERATOR | c4d.OBJECT_POLYGONOBJECT and return a polygon object from the GetVirtualObjects() method, the polygon object will disappear from the view, when I switch from model mode to point mode.

      If the plugin will be registered as a c4d.OBJECT_GENERATOR | c4d.OBJECT_POINTOBJECT, the polygon object will NOT disappear from the view, when I switch from model mode to point mode.

      Like with the point object generator, I would like to be able to see the polygon object of a polygon object generator when I switch to point mode. Is this possible?

      See the code below for a simplified example.

      Best regards
      Tim

      PS: I'm new to Cinema 4D plugin development and new to Cinema 4D in general.

        
      import math  
      import sys  
      import os  
      import c4d  
      from c4d import bitmaps, gui, plugins, utils  
        
        
      PLUGIN_ID = 9119119  
        
        
      class TestPlugin(plugins.ObjectData) :  
          
        def Init(self, node) :  
            return True  
        
        
        def GetVirtualObjects(self, op, hierarchyhelp) :  
            dirty = op.CheckCache(hierarchyhelp) or op.IsDirty(c4d.DIRTY_DATA)  
            if dirty is False: return op.GetCache(hierarchyhelp)  
        
            return self.CreateSimplePolyObj()  
        
        
        def CreateSimplePolyObj(self) :  
            op = c4d.PolygonObject(4, 1)  
        
            op.SetPoint(0, c4d.Vector(  0.0, 0.0,   0.0))  
            op.SetPoint(1, c4d.Vector(100.0, 0.0,   0.0))  
            op.SetPoint(2, c4d.Vector(100.0, 0.0, 100.0))  
            op.SetPoint(3, c4d.Vector(  0.0, 0.0, 100.0))  
        
            polygon = c4d.CPolygon(0, 1, 2, 3)  
            op.SetPolygon(0, polygon)  
        
            op.SetPhong(True, 1, utils.Rad(80.0))  
        
            op.Message(c4d.MSG_UPDATE)  
        
            return op  
        
        
      if __name__ == "__main__":  
        path, file = os.path.split(__file__)  
        bmp = bitmaps.BaseBitmap()  
        bmp.InitWith(os.path.join(path, "res", "some.tif"))  
        plugins.RegisterObjectPlugin(  
            id = PLUGIN_ID,  
            str = "Py-TestPlugin",  
            g = TestPlugin,  
            description = "Opytestplugin",  
            icon = bmp,  
            info = c4d.OBJECT_GENERATOR | c4d.OBJECT_POLYGONOBJECT )  
        
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 14/02/2018 at 03:05, xxxxxxxx wrote:

        Hi,

        welcome to the Plugin Café forums 🙂

        There seems to be common misconception of our SDK docs (a sign we need to improve them). Just recently we had another thread by merkvilson with the same issue: "Hide child of Object plugin" (a bit down the line).
        To make it short, don't use OBJECT_POLYGONOBJECT when registering your generator. It's just a generator (even if generating a polygon object). OBJECT_POLYGONOBJECT is used in special cases only. The objectdata_latticeplanemodifier example (sorry, just realized I'm linking to a C++ example in Python forum) uses OBJECT_POINTOBJECT to achieve the behavior of the controlling plane. OBJECT_POLYGONOBJECT would be used similarly.

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

          On 14/02/2018 at 05:29, xxxxxxxx wrote:

          Hi Andreas,

          the code above is only a simplified example of the problem.

          I'm working on a more complex point generator plugin. The generated object has some (control) points which should be editable in point mode. The final object, which will be displayed in model mode, is a complex polygon object, which is based on the (control) points of the point object. Everything worked as expected until I tried to delete points of the point object in point mode. I created another post about that problem. A solution was to switch the plugin registration from a point object to a polygon object. Now I'm able to delete the (control) points, but the polygon object, which I generate in GetVirtualObjects(), will not be displayed anymore when I switch from model mode to point mode!

          Best regards
          Tim

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