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

    Colored objects with BaseDraw/DrawPolygonObject

    Scheduled Pinned Locked Moved SDK Help
    5 Posts 0 Posters 454 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

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 13/06/2011 at 08:52, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   R12 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      How can I make objects drawn with DrawPolygonObject colored?

      I tried the DRAWOBJECT flag DRAWOBJECT_USE_CUSTOM_COLOR as well as DRAWOBJECT_USE_OBJECT_COLOR with and without the RegisterObjectPlugin flag OBJECT_USECACHECOLOR to no avail.

      DrawPolygonObject() has a parameter for the object color but it shows no effect.

      And also a BaseContainer with the Settings ID_BASEOBJECT_USECOLOR_ALWAYS and ID_BASEOBJECT_COLOR don't work.

      What do I miss?

      Here is some sample code I tried:

        
      /////////////////////////////////////////////////////////////   
      // CINEMA 4D BaseDrawTest                                  //   
      /////////////////////////////////////////////////////////////   
        
      #include "c4d.h"   
      #include "c4d_symbols.h"   
      #include "obasedrawtest.h"   
        
        
      #if API_VERSION < 12000   
      #define EXECUTIONRESULT          LONG   
      #define EXECUTIONFLAGS          LONG   
      #define EXECUTIONRESULT_OK     EXECUTION_RESULT_OK   
        
      #define DRAWRESULT               Bool   
      #define DRAWPASS               LONG   
      #define DRAWRESULT_OK          TRUE   
      #endif   
        
        
      /////////////////////////////////////////////////////////   
      // Class functions   
      /////////////////////////////////////////////////////////   
        
      class BaseDrawTest : public ObjectData   
      {   
           INSTANCEOF(BaseDrawTest, ObjectData)   
        
           public:   
                virtual EXECUTIONRESULT Execute(BaseObject* op, BaseDocument* doc, BaseThread* bt, LONG priority, EXECUTIONFLAGS flags);   
                virtual DRAWRESULT Draw(BaseObject* op, DRAWPASS drawpass, BaseDraw* bd, BaseDrawHelp* bh);   
        
                static NodeData *Alloc(void) { return gNew BaseDrawTest; }   
      };   
        
        
      EXECUTIONRESULT BaseDrawTest::Execute(BaseObject* op, BaseDocument* doc, BaseThread* bt, LONG priority, EXECUTIONFLAGS flags)   
      {   
           return EXECUTIONRESULT_OK;   
      }   
        
        
      DRAWRESULT BaseDrawTest::Draw(BaseObject *op, DRAWPASS drawpass, BaseDraw *bd, BaseDrawHelp *bh)   
      {   
           if (drawpass==DRAWPASS_OBJECT)   
           {   
                Vector red = Vector(1.0, 0.0, 0.0);   
                Vector green = Vector(0.0, 1.0, 0.0);   
                Vector blue = Vector(0.0, 0.0, 1.0);   
        
                {   
                     Vector vp[4];   
                     vp[0] = Vector(-100.0, -100.0, 0.0);   
                     vp[1] = Vector(-100.0, 100.0, 0.0);   
                     vp[2] = Vector(100.0, 100.0, 0.0);   
                     vp[3] = Vector(100.0, -100.0, 0.0);   
        
                     Vector vf[4];   
                     vf[0] = red;   
                     vf[1] = red;   
                     vf[2] = red;   
                     vf[3] = red;   
        
                     bd->SetTransparency(128);   
                     bd->DrawPoly(vp, vf, NULL, 4, NULL);   
                }   
        
                {   
                     BaseContainer bc_pplane;   
                     bc_pplane.SetLong(ID_BASEOBJECT_USECOLOR, ID_BASEOBJECT_USECOLOR_ALWAYS);   
                     bc_pplane.SetVector(ID_BASEOBJECT_COLOR, red);   
                     bc_pplane.SetReal(PRIM_POLY_WIDTH, 200.0);   
                     bc_pplane.SetReal(PRIM_POLY_HEIGHT, 200.0);   
                     bc_pplane.SetLong(PRIM_POLY_SUB, 1);   
                     bc_pplane.SetBool(PRIM_POLY_TRIANG, FALSE);   
        
                     PolygonObject* pplane = (PolygonObject* )GeneratePrimitive(bh->GetDocument(), Osinglepoly, bc_pplane, 1.0, FALSE, NULL);   
                     if (pplane)   
                          bd->DrawPolygonObject(bh, pplane, DRAWOBJECT_XRAY_ON, op, green);   
                }   
        
                {   
                     BaseContainer bc_cube;   
                     bc_cube.SetLong(ID_BASEOBJECT_USECOLOR, ID_BASEOBJECT_USECOLOR_ALWAYS);   
                     bc_cube.SetVector(ID_BASEOBJECT_COLOR, green);   
                     bc_cube.SetVector(PRIM_CUBE_LEN, Vector(100.0, 200.0, 100.0));   
        
                     PolygonObject* cube = (PolygonObject* )GeneratePrimitive(bh->GetDocument(), Ocube, bc_cube, 1.0, FALSE, NULL);   
                     if(cube)   
                          bd->DrawPolygonObject(bh, cube, DRAWOBJECT_USE_CUSTOM_COLOR|DRAWOBJECT_XRAY_ON, op, blue);   
                }   
           }   
        
           return DRAWRESULT_OK;   
      }   
        
        
      /////////////////////////////////////////////////////////   
      // Register function   
      /////////////////////////////////////////////////////////   
        
      Bool RegisterBaseDrawTest(void)   
      {   
           // decide by name if the plugin shall be registered - just for user convenience   
           String name = GeLoadString(IDS_BASEDRAWTEST); if (!name.Content()) return TRUE;   
      #if API_VERSION < 12000   
           return RegisterObjectPlugin(ID_BASEDRAWTEST,name,OBJECT_USECACHECOLOR,BaseDrawTest::Alloc,"Obasedrawtest","icon.tif",0);   
      #else   
           return RegisterObjectPlugin(ID_BASEDRAWTEST,name,OBJECT_USECACHECOLOR,BaseDrawTest::Alloc,"Obasedrawtest",AutoBitmap("icon.tif"),0);   
      #endif   
      }   
        
      

      My goal is a transparent but colored object drawn into the view.

      The first approach with DrawPoly works and create a red and transparent plane but I couldn't manage it with DrawPolygonObject. Of course they become transparent with the xray setting but I couldn't make them colored!

      By the way, I know that some of the color definitions above are inconsistent. This was with intent to see if one of the methods work and if yes to know which one.

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

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 13/06/2011 at 14:26, xxxxxxxx wrote:

        Note that this actually sets the color properties of the drawn object, not the color of the draw.  Shouldn't matter.  I've used it to great effect in InterPoser Pro for my Tool support.

        ObjectColorProperties ocp;  
        ocp.usecolor =                ID_BASEOBJECT_USECOLOR_ALWAYS;  
        ocp.xray =                    FALSE;  
        ocp.color = Vector(0.0,1.0,0.0); //green  
        obj->SetColorProperties(&ocp);
        
        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 13/06/2011 at 15:47, xxxxxxxx wrote:

          @kuroyume0161:

          Hi Robert,

          thank you for the tip,
          but unfortunately I have no idea how to use ObjectColorProperties in conjunction with BaseDraw.

          Maybe you can show it to me on the basis of my code example above?

          Kind regrads,
          Tom

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

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 13/06/2011 at 17:11, xxxxxxxx wrote:

            Just add that code for each object using DrawPolygonObject() (before calling DrawPolygonObject()).  ObjectColorProperties and SetColorProperties() are independent of BaseDraw:

            {  
              BaseContainer bc_pplane;  
              bc_pplane.SetLong(ID_BASEOBJECT_USECOLOR, ID_BASEOBJECT_USECOLOR_ALWAYS);  
              bc_pplane.SetVector(ID_BASEOBJECT_COLOR, red);  
              bc_pplane.SetReal(PRIM_POLY_WIDTH, 200.0);  
              bc_pplane.SetReal(PRIM_POLY_HEIGHT, 200.0);  
              bc_pplane.SetLong(PRIM_POLY_SUB, 1);  
              bc_pplane.SetBool(PRIM_POLY_TRIANG, FALSE);  
                
              PolygonObject* pplane = (PolygonObject* )GeneratePrimitive(bh->GetDocument(), Osinglepoly, bc_pplane, 1.0, FALSE, NULL);  
              ObjectColorProperties ocp;  
              ocp.usecolor =    ID_BASEOBJECT_USECOLOR_ALWAYS;  
              ocp.xray =            TRUE;  
              ocp.color =            Vector(0.0,1.0,0.0); //green  
              pplane->SetColorProperties(&ocp);  
              if (pplane)  
                  bd->DrawPolygonObject(bh, pplane, DRAWOBJECT_XRAY_ON, op, green);  
            }  
              
            {  
              BaseContainer bc_cube;  
              bc_cube.SetLong(ID_BASEOBJECT_USECOLOR, ID_BASEOBJECT_USECOLOR_ALWAYS);  
              bc_cube.SetVector(ID_BASEOBJECT_COLOR, green);  
              bc_cube.SetVector(PRIM_CUBE_LEN, Vector(100.0, 200.0, 100.0));  
                
              PolygonObject* cube = (PolygonObject* )GeneratePrimitive(bh->GetDocument(), Ocube, bc_cube, 1.0, FALSE, NULL);  
              ObjectColorProperties ocp;  
              ocp.usecolor =    ID_BASEOBJECT_USECOLOR_ALWAYS;  
              ocp.xray =            TRUE;  
              ocp.color =            Vector(0.0,0.0,1.0); //blue  
              cube->SetColorProperties(&ocp);  
              if(cube)  
                  bd->DrawPolygonObject(bh, cube, DRAWOBJECT_USE_CUSTOM_COLOR|DRAWOBJECT_XRAY_ON, op, blue);  
            }
            
            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 14/06/2011 at 02:23, xxxxxxxx wrote:

              Ah okay, simple and straightforward.
              Thanks a lot, that was easier than I thought!

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