DrawPolygoneObject - Overlapping wrong direction



  • On 02/09/2017 at 10:50, xxxxxxxx wrote:

    Hi there,

    I draw some polygon objects into viewport from ObjectData.Draw and have troubles with the overlapping of the objects. It seems that the objects are drawn from the foreground to the background of the scene, so the objects closer to the editorcam are overlapped by the objects with a larger distance. Ive tried to reverse the order of drawing, but it didnt fixed it. Flipping polygon normals didnt fixed it, too. Has anyone an idea?

    Here 2 screenshots to illustrate the problem better.

    https://www.dropbox.com/s/s6qd8edceh0hfph/Screenshot_2017-09-02 19_24_36.png?dl=0
    https://www.dropbox.com/s/4jm261xv2qx457c/Screenshot_2017-09-02 19_24_58.png?dl=0

    Thx and Greetings
    rownn



  • On 05/09/2017 at 04:01, xxxxxxxx wrote:

    Hi Rownn, thanks for writing us.

    With reference to your question, i wasn't able to reproduce the issue you mentioned. It's also unclear if the ObjectData is only responsible for drawing the polygon or also for generating some geometry in the scene. In my tests the polygon drawn by the ObjectData::Draw function appears properly represented in terms of draw-depth.

    Might you provide some additional information?

    I also suggest, although not 100% related, to have a look here where Frank (a former colleague of us) touched the draw topic concerning 2D primitives in TagData.

    Best, Riccardo



  • On 05/09/2017 at 06:39, xxxxxxxx wrote:

    Hey Riccardo,

    alot of thx for your efforts!

    I´ve also wrote a special to test objectData and it produce the same issue.

    import os  
    import math  
    import sys  
    import c4d  
      
    from c4d import plugins, utils, bitmaps, gui  
      
    PLUGIN_ID = 1234589123 #TestID  
      
    print "DrawTest"  
      
    class DrawTest(plugins.ObjectData) :  
      
      
      def GetVirtualObjects(self, op, hierarchyhelp) :  
          return None  
      
      def Draw(self, op, drawpass, bd, bh) :  
          if drawpass!=c4d.DRAWPASS_HANDLES: return c4d.DRAWRESULT_SKIP  
      
          bd.SetMatrix_Matrix(op, bh.GetMg())  
      
          A = op.GetDown()  
          if not A: return c4d.DRAWRESULT_OK  
          B = A.GetNext()  
          if not B: return c4d.DRAWRESULT_OK  
      
          Ac = A.GetClone()  
          Ac[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] = 0  
          Bc = B.GetClone()  
          Bc[c4d.ID_BASEOBJECT_VISIBILITY_EDITOR] = 0  
      
          bd.DrawPolygonObject(bh, Ac, c4d.DRAWOBJECT_0)  
          bd.DrawPolygonObject(bh, Bc, c4d.DRAWOBJECT_0)  
            
          return c4d.DRAWRESULT_OK  
      
      
      
    if __name__ == "__main__":  
      dir, file = os.path.split(__file__)  
      icon = bitmaps.BaseBitmap()  
      icon.InitWith(os.path.join(dir, "res", "Icon_Default.png"))  
      plugins.RegisterObjectPlugin(id=PLUGIN_ID, str="DrawTest",  
                                  g=DrawTest,  
                                  description="DrawTest", icon=icon,  
                                  info=c4d.OBJECT_GENERATOR)
    

    https://www.dropbox.com/s/ahvqxl020tblzub/drawtest.gif?dl=0

    greetings
    rownn



  • On 05/09/2017 at 07:02, xxxxxxxx wrote:

    Make sure to reset the 3D matrix after you have draw everything in order to correctly set it back to 3D space as said in the article from Frank Willeke given by Riccardo

    bd.SetMatrix_Matrix(None, Matrix())
      
    return c4d.DRAWRESULT_OK
    


  • On 05/09/2017 at 07:42, xxxxxxxx wrote:

    Unfortunately, it makes no difference. And in Py-RoundedTube.pyp this line is missed, too. But I´ll keep it in mind if I´ve to fix other issues.


Log in to reply