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

    ViewportSelect

    Scheduled Pinned Locked Moved SDK Help
    2 Posts 0 Posters 200 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 02/08/2011 at 11:00, xxxxxxxx wrote:

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

      ---------
      Is it okay to use ViewportSelect in Draw() in a tooldata plugin?

      I am trying to implement the following code but vps->Init() keeps returning FALSE.

        
        BaseObject* op = doc->GetActiveObject();  
        if(!op) return TOOLDRAW_0;  
        
        //CONVERT TO POLYGON OBJECT  
        PolygonObject *objPoly = ToPoly(op);  
        if(!objPoly) return TOOLDRAW_0;  
        
        //HELPER VARIABLES  
        //=============================================//  
          
        //Viewport Dimensions  
        LONG left, top, right, bottom, width, height;  
        bd->GetFrame(&left, &top, &right, &bottom);  
        width                    = right - left + 1;  
        height                    = bottom - top + 1;      
        
        LONG editorMode            = doc->GetMode();  
        Vector * points            = objPoly->GetPointW();  
        EditorWindow *win        = bd->GetEditorWindow();  
        
        Real radius                = 50;  
        Vector color            = Vector(1,1,1);  
          
        LONG x = cursorX;  
        LONG y = cursorY;  
        
        GePrint("X: " + LongToString(x) + " Y: " + LongToString(y));  
          
        //Viewport Select Variables  
        AutoAlloc<ViewportSelect> vps;  
        GePrint("1");  
        
      #ifdef C4D_R12  
        if (!vps || !vps->Init(width, height, bd, objPoly, editorMode, TRUE, VIEWPORTSELECTFLAGS_0))  
        {  
            GePrint("NO INIT");  
            return TOOLDRAW_0;  
        }  
      #else  
        if (!vps || !vps->Init(width, height, bd, objPoly, editorMode, TRUE, 0)) return TOOLDRAW_0;  
      #endif     
        
        vps->SetBrushRadius(radius);  
        bd->SetPen(color);  
        
        bd->SetMatrix_Matrix(objPoly, Matrix());  
        vps->ShowHotspot(win, x, y);  
        
        ViewportPixel *vpPoint    = vps->GetNearestPoint(objPoly, x, y, radius, FALSE, NULL, NULL);  
        
        //DeSelect based on pixel radius  
        LONG xmin = x - radius;  
        LONG xmax = x + radius;  
        LONG ymin = y - radius;  
        LONG ymax = y + radius;  
        
        LONG            iy;  
        ViewportPixel*    vp            = NULL;  
        Vector            origin        = Vector(x, y, 0);  
        Vector            current;  
        Vector            dist;  
        Real            dis;  
        
        for(LONG ix = xmin; ix < xmax; ++ix)  
        {  
            for(iy = ymin; iy  < ymax; ++iy)  
            {  
                current        = Vector(ix, iy, 0);  
                dist        = origin - current;  
                dis            = Len(dist);  
        
                if (dis < radius)  
                {  
                        vp = vps->GetPixelInfoPoint(ix, iy);  
                        bd->DrawHandle(points[vp->i], DRAWHANDLE_BIG, NOCLIP_Z);  
                        GePrint("DRAW HANDLE");  
                }  
            }  
        }  
        
        return    TOOLDRAW_AXIS|TOOLDRAW_HANDLES;  
      

      Thanks,  Shawn

      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 11/08/2011 at 06:08, xxxxxxxx wrote:

        I think it's a bad idea to do this in Draw(). You can always store the data obtained by ViewPortSelect in member variables of your tool class and trigger a viewport redraw with DrawViews. Draw will be called then.

        cheers,
        Matthias

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