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

    ObjectPlugin and material

    Scheduled Pinned Locked Moved PYTHON Development
    4 Posts 0 Posters 588 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 15/11/2017 at 07:20, xxxxxxxx wrote:

      I have an objectplugin with 2 children.
      In GetVirtualObjects(), the children are placed under a Boolean and converted to a mesh using MCOMMAND_CURRENTSTATETOOBJECT.

      That is all ok, but when I place a texture behind the generator and a second texture on one of the children, the texture on the generator is not displayed. The texture on the child is displayed.

      Example:
      - generator + texture
        - child 1
        - child 2 + texture

      I am obviously forgetting a flag, but which one?
       
      Here the code:

          def GetVirtualObjects(self, op, hierarchyhelp) :
          
              doc = op.GetDocument()
        
              if op.GetDown() is None or op.GetDown().GetNext() is None:
                  return c4d.BaseObject(c4d.Onull)
        
              res = op.GetAndCheckHierarchyClone(hierarchyhelp, op.GetDown(), c4d.HIERARCHYCLONEFLAGS_0, True)
              if res['dirty'] == False:
                  return res['clone']
                  
              objA = res['clone'].GetDown()
              objB = objA.GetNext()
              
              boolObj = c4d.BaseObject(c4d.Oboole) 
              boolObj[c4d.BOOLEOBJECT_HIGHQUALITY] = True
              boolObj[c4d.BOOLEOBJECT_SINGLE_OBJECT] = True 
              boolObj[c4d.BOOLEOBJECT_SEL_CUT_EDGES] = True
              boolObj[c4d.BOOLEOBJECT_HIDE_NEW_EDGES] = True
              boolObj[c4d.BOOLEOBJECT_BREAK_CUT_EDGES] = True
              boolObj[c4d.BOOLEOBJECT_TYPE] = 1
              
              objB.InsertUnder(boolObj)
              objA.InsertUnder(boolObj)
              
              objList = c4d.utils.SendModelingCommand(
                  command = c4d.MCOMMAND_CURRENTSTATETOOBJECT,
                  list = [boolObj],
                  mode = c4d.MODELINGCOMMANDMODE_ALL,
                  doc = doc)
              if objList == False:
                  #print "Error Current State to object Bool!"  
                  return None
                  
              return objList[0]
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 15/11/2017 at 07:41, xxxxxxxx wrote:

        Didn't remember in which post I read that (but I remember to have read inside plugincafe), that you need to create texturetag / uv yourself.

        Could be wrong since it's something I get in my far far memories, and never really tested.

        EDIT: https://developers.maxon.net/forum/topic/5148/5133_generator-plugin-problems-with-tags

        So it's looks like you can't create Material ( wich is obvious since, it's a threaded function), but you can create tag and assign Material within a GetVirtualObjects environment.
        You also seem to need a proper uv projection.

        Hope it's help.

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

          On 15/11/2017 at 10:04, xxxxxxxx wrote:

          I did some further investigation and I think it has to do with the behavior of MCOMMAND_CURRENTSTATETOOBJECT (CSTO)

          What I detected is that CSTO:
          * returns a Null, with the csto result as child of that Null and with the texture assigned to the null, if there is a texture on one of the children

          Input
          - generator + texture 1
            - child 1
            - child 2 + texture 2

          Result
          -  csto result + texture
          - Null + texture 1
            - csto result + texture 2

          * returns the csto result with the texture assigned to this csto result, if there is NO texture assigned to the children.

          Input
          - generator + texture 1
            - child 1
            - child 2

          Result
          -  csto result + texture 1

          So, I guess I have to check whether csto returned a Null and then add the texture to its child.

          -Pim

          PS See also https://developers.maxon.net/forum/topic/648/13804_strange-behavior-boolean

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

            On 16/11/2017 at 08:48, xxxxxxxx wrote:

            Hi Pim,

            we discussed your question in today's meeting, but we came to the conclusion, we don't fully understand, what you are trying to achieve.

            Maybe you can provide us with some details:
            How does the setup look like in OM?
            What's the desired outcome?
            Or maybe you can show some code, how you try to assign the materials?

            In order to not leave you with questions only, OBJECT_USECACHECOLOR might have an influence, but without having understood, that's of course difficult to say for sure...

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