ObjectData/Draw/DrawPolygonObject in XRay Mode



  • On 15/02/2016 at 10:53, xxxxxxxx wrote:

    Hello everybody,

    i´d like to draw a PolygonObject in Xray mode into the viewport. Im able to draw the object, but just without xray.

    def Draw(self, op, drawpass, bd, bh) :  
      if drawpass!=c4d.DRAWPASS_XRAY:  
          obj = MachCube(100, 75, 50)  
          bd.DrawPolygonObject(bh, obj, c4d.DRAWOBJECT_0)  
      
      return c4d.DRAWRESULT_OK  
      
    ...  
      
    def MachCube(size_x, size_y, size_z) :  
      size = c4d.Vector()  
      size.x = size_x  
      size.y = size_y  
      size.z = size_z  
        
      cube = c4d.PolygonObject(8, 6)  
        
      pnts = [c4d.Vector() for x in xrange(8)]  
      pnts[0] = c4d.Vector(-size.x/2, -size.y/2, -size.z/2)  
      pnts[1] = c4d.Vector(-size.x/2,  size.y/2, -size.z/2)  
      pnts[2] = c4d.Vector( size.x/2, -size.y/2, -size.z/2)  
      pnts[3] = c4d.Vector( size.x/2,  size.y/2, -size.z/2)  
      pnts[4] = c4d.Vector( size.x/2, -size.y/2,  size.z/2)  
      pnts[5] = c4d.Vector( size.x/2,  size.y/2,  size.z/2)  
      pnts[6] = c4d.Vector(-size.x/2, -size.y/2,  size.z/2)  
      pnts[7] = c4d.Vector(-size.x/2,  size.y/2,  size.z/2)  
        
      plys = c4d.CPolygon(0,1,3,2), c4d.CPolygon(2,3,5,4), c4d.CPolygon(4,5,7,6), c4d.CPolygon(6,7,1,0), c4d.CPolygon(1,7,5,3), c4d.CPolygon(6,0,2,4)  
        
      cube.SetAllPoints(pnts)  
      for index, ply in enumerate(plys) : cube.SetPolygon(index, ply)  
        
      return cube  
    

    Is it possible to do?

    Greetings
    rown



  • On 16/02/2016 at 03:07, xxxxxxxx wrote:

    Hello,

    It seems to work fine using DrawObject() and setting the ID_BASEOBJECT_XRAY parameter of the drawn object.

      
    def Draw(self, op, drawpass, bd, bh) :  
      
     self._cube[c4d.ID_BASEOBJECT_XRAY] = op[c4d.ID_BASEOBJECT_XRAY]  
      
     bd.DrawObject(bh, self._cube, c4d.DRAWOBJECT_0, drawpass, op)  
      
     return c4d.DRAWRESULT_OK  
    

    Also it seems to be the best solution to store the geometry as a member of your class.

    Best wishes,
    Sebastian



  • On 16/02/2016 at 07:27, xxxxxxxx wrote:

    Hey Sebastian,

    thx alot. I also tried to set the ID_BASEOBJECT_XRAY parameter yesterday. But I didnt try to let the object be a member. Thats the solution.

    if drawpass!=c4d.DRAWPASS_XRAY:  
      self.cube[c4d.ID_BASEOBJECT_XRAY] = op[c4d.ID_BASEOBJECT_XRAY]  
      bd.DrawObject(bh, self.cube, c4d.DRAWOBJECT_0, drawpass, op)  
      c4d.DRAWRESULT_OK
    

    One other question just for knowing. Why cant I draw a primitive object like c4d.BaseObject(c4d.Ocube)? At this point its not importaint to know, but it was noticed by me.

    Thx and greetings
    rown


Log in to reply