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

    Editor draw in a object plugin[SOLVED]

    Scheduled Pinned Locked Moved PYTHON Development
    9 Posts 0 Posters 707 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 22/10/2014 at 13:15, xxxxxxxx wrote:

      Does anyone have a sample object plugin they would be willing to share?
      I'm using it to simply do what a null does (store children) but it has custom functions.

      My issue is what it looks like in the editor. If I "include Onull" in the .res file, i can control parameters for what it should draw, but it doesn't work. Is it possible to use those draw parameters and get it to work?
      If not, then just drawing a flat square would be fine. (it would need to scale and rotate with the op).

      Thanks,
      Joe

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

        On 22/10/2014 at 17:54, xxxxxxxx wrote:

        Hi Joe,

        two month ago I used a gizmo box for doing somthing similar.
        I´m not sure, if that helps.

          
          def Draw(self, node, drawpass, bd, bh) :   
          
              if drawpass==c4d.DRAWPASS_HANDLES:  
                
                  data= node.GetDataInstance()  
                  size= data.GetVector(10001)/2  
                  mat = node.GetMg()  
                  bd.SetMatrix_Matrix(None, mat)  
                  box = c4d.Matrix()  
                  box.v1 = box.v1 * size.x  
                  box.v2 = box.v2 * size.y  
                  box.v3 = box.v3 * size.z  
                  bd.DrawBox(box, 1.0, c4d.GetViewColor(c4d.VIEWCOLOR_ACTIVEPOINT), True)  
        

        Best wishes
        Martin

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

          On 23/10/2014 at 07:24, xxxxxxxx wrote:

          That helps. Now, to make it another color when highlighted.. I want it to work the way a Null does. Black lines then white when highlighted/selected. Heres what I got.

          	def Draw(self, op, drawpass, bd, bh) :
          		
          		if drawpass==c4d.DRAWPASS_HIGHLIGHTS:
          			bd.SetPen(c4d.Vector(1,1,1))
          			return c4d.DRAWRESULT_SKIP
            
          		data= op.GetDataInstance()
          		size= c4d.Vector(25,0,25)
          		mat = op.GetMg()
          		bd.SetMatrix_Matrix(None, mat)
          		box = c4d.Matrix()
          		box.v1 = box.v1 * size.x
          		box.v2 = box.v2 * size.y
          		box.v3 = box.v3 * size.z
          		bd.SetPen(c4d.GetViewColor(c4d.VIEWCOLOR_ACTIVEBOX))
          		bd.DrawBox(box, 1.0, c4d.GetViewColor(c4d.VIEWCOLOR_SHADEDWIRE), True)
          		return c4d.DRAWRESULT_OK
          
          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 23/10/2014 at 07:45, xxxxxxxx wrote:

            Hello,

            you can use IsActive()[URL-REMOVED] and IsHighlight()[URL-REMOVED] to find out if the current object is selected or highlighted.

            Best wishes,
            Sebastian


            [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.

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

              On 23/10/2014 at 11:08, xxxxxxxx wrote:

              Right. I can get it to like "print "Highlighted"". So I know when it's highlighted, but how can I change the color of the basedraw? Do I have to redraw it? Or just somehow change the pen color..

              Thanks.

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

                On 23/10/2014 at 12:09, xxxxxxxx wrote:

                Hi Joe,

                you can use a custom color definition like:

                  
                  def Draw(self, node, drawpass, bd, bh) :   
                        
                      pencolor = c4d.Vector(0,0,0)  
                  
                      if bh.IsHighlight() :  
                          pencolor = c4d.Vector(1,1,1)  
                          print "highlight"  
                  
                      if bh.IsActive() :  
                          pencolor = c4d.Vector(1,1,0)  
                          print "active"  
                  
                      data= op.GetDataInstance()  
                      size= c4d.Vector(25,0,25)  
                      mat = op.GetMg()  
                      bd.SetMatrix_Matrix(None, mat)  
                      box = c4d.Matrix()  
                      box.v1 = box.v1 * size.x  
                      box.v2 = box.v2 * size.y  
                      box.v3 = box.v3 * size.z  
                      bd.DrawBox(box, 1.0, pencolor, True)  
                  
                

                or have a look at the c++ sdk
                [URL-REMOVED]___v_i_e_w_c_o_l_o_r.html#ga59ce3d29b2ad9c9e57410cefd023adbb

                Best wishes
                Martin


                [URL-REMOVED] @maxon: This section contained a non-resolving link which has been removed.

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

                  On 23/10/2014 at 18:28, xxxxxxxx wrote:

                  Here's my code. If I have one object selected, I don't see the Active color, It appears as black. Highlight works though.

                  But, If I have multiple objects selected, they appear yellow (which is correct). Any ideas?

                  	def Draw(self, op, drawpass, bd, bh) :
                  		pencolor = c4d.Vector(0,0,0)
                  		if bh.IsHighlight() :
                  			pencolor = c4d.GetViewColor(c4d.VIEWCOLOR_OBJECTHIGHLIGHT)
                    
                  		if bh.IsActive() :
                  			pencolor = c4d.GetViewColor(c4d.VIEWCOLOR_OBJECTSELECT)
                    
                  		data= op.GetDataInstance()
                  		size= c4d.Vector(10,0,10)
                  		mat = op.GetMg()
                  		bd.SetMatrix_Matrix(None, mat)
                  		box = c4d.Matrix()
                  		box.v1 = box.v1 * size.x
                  		box.v2 = box.v2 * size.y
                  		box.v3 = box.v3 * size.z
                  		bd.DrawBox(box, 1.0, pencolor, True)
                    
                  		return c4d.DRAWRESULT_OK
                  
                  1 Reply Last reply Reply Quote 0
                  • H Offline
                    Helper
                    last edited by

                    On 24/10/2014 at 02:47, xxxxxxxx wrote:

                    Hi Joe,

                    this works,
                    Just a better setup for the different cases with if and elif...
                    And you use the colors the user predefined in his preferences

                      
                          if drawpass==c4d.DRAWPASS_OBJECT:  
                      
                              data= node.GetDataInstance()  
                              size= c4d.Vector(10,0,10)  
                              mat = node.GetMg()  
                              bd.SetMatrix_Matrix(None, mat)  
                              box = c4d.Matrix()  
                              box.v1 = box.v1 * size.x  
                              box.v2 = box.v2 * size.y  
                              box.v3 = box.v3 * size.z  
                      
                              if bh.IsHighlight() :  
                                  pencolor=c4d.GetViewColor(c4d.VIEWCOLOR_SELECTION_PREVIEW)  
                              elif bh.IsActive() :  
                                  pencolor=c4d.GetViewColor(c4d.VIEWCOLOR_ACTIVEPOINT)  
                              else:  
                                  pencolor=c4d.GetViewColor(c4d.VIEWCOLOR_INACTIVEPOINT)  
                              bd.DrawBox(box, 1.0, pencolor, True)  
                    

                    Best wishes
                    Martin

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

                      On 24/10/2014 at 05:58, xxxxxxxx wrote:

                      That did it! Thanks Martin

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