Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    R14 Snap system

    SDK Help
    0
    11
    1.1k
    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
      Helper
      last edited by

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

      On 26/09/2012 at 02:29, xxxxxxxx wrote:

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

      ---------
      Hi

      How do I get the position of the settings when you snap and snap the new R14.

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

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

        On 26/09/2012 at 02:43, xxxxxxxx wrote:

        Hi,

        Could you explain better what's the position from snapping you want to get?

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

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

          On 26/09/2012 at 08:33, xxxxxxxx wrote:

          Hi.
          If you check the settings of the snap on the R13 is.

          BaseContainer* bc=doc->GetSettingsInstance(DOCUMENTSETTINGS_MODELING);
          if(bc->GetBool( SNAP_ENABLE))
          {
               ****
          }

          If you want to set the snap.

          BaseContainer bc;
          bc.SetBool( SNAP_ENABLE, TRUE);
          doc->SetData(DOCUMENTSETTINGS_MODELING,bc);

          If you look at the position of the snap when you.

          AutoAlloc<DetectSnapping> snap;
          if (!snap) return FALSE;
          snap->Init(doc, bd, NULL, Vector(), 0, FALSE, TRUE, TRUE);
          Vector delta;
          if(snap->IsEnabled(doc))
          {
               if (snap->SnapTo(pos, δ))
               {
                    pos += delta;
               }
          }

          All the code does not work in R14.
          What I want how I write?
          Thanks in advance.

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

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

            On 26/09/2012 at 12:16, xxxxxxxx wrote:

            Yes the snapping system in CINEMA has been completely changed in R14.

            To check if snapping is enabled in a document we have to call now:

            IsSnapEnabled(doc)
            

            And to enable snapping in a document:

            EnableSnap(TRUE, doc)
            

            These functions are defined c4d_snapdata.h so be sure to include this header.

            And the new snap interface class is SnapCore.
            I'll come up with a working example as soon as possible.

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

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

              On 26/09/2012 at 19:42, xxxxxxxx wrote:

              Now you can set the snap. Thank you.
              I would like to ask another, please tell me how to set up and switching SNAP_SETTINGS_MODE.
              Thank you.

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

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

                On 27/09/2012 at 04:31, xxxxxxxx wrote:

                Originally posted by xxxxxxxx

                I would like to ask another, please tell me how to set up and switching SNAP_SETTINGS_MODE.

                Here's how to setup SNAP_SETTINGS_MODE in R14:

                BaseContainer bc = SnapSettings(doc);
                bc.SetLong(SNAP_SETTINGS_MODE, SNAP_SETTINGS_MODE_2D);
                SnapSettings(doc, bc);
                

                Snap settings are defined in resource\res\description\dmodeling.h.

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

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

                  On 27/09/2012 at 08:15, xxxxxxxx wrote:

                  Originally posted by xxxxxxxx

                  If you look at the position of the snap when you.

                  AutoAlloc<DetectSnapping> snap;
                  if (!snap) return FALSE;
                  snap->Init(doc, bd, NULL, Vector(), 0, FALSE, TRUE, TRUE);
                  Vector delta;
                  if(snap->IsEnabled(doc))
                  {
                     if (snap->SnapTo(pos, &delta))
                     {
                          pos += delta;
                     }
                  }

                  Here's this code converted to use the new snapping classes in R14:

                  SnapResult res;
                    
                  AutoAlloc<SnapCore> snap;
                  if (!snap) return FALSE;
                    
                  snap->Init(doc, bd);
                  if (IsSnapEnabled(doc)) 
                  { 
                       if (snap->Snap(pos, res))
                       { 
                            pos += res.delta;
                       } 
                  }
                  
                  1 Reply Last reply Reply Quote 0
                  • H
                    Helper
                    last edited by

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

                    On 27/09/2012 at 18:22, xxxxxxxx wrote:

                    I understand this snap.
                    Thank you very much.

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

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

                      On 25/10/2012 at 09:28, xxxxxxxx wrote:

                      Following you're examples I have snapping working in my plugin but I've got an issue. I'm calling Snap() from within a MouseDrag while loop which works fine, but once Snap() returns True it will never return False again. Is this a bug or do I need to clear out the SnapCore or something?

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

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

                        On 26/10/2012 at 00:34, xxxxxxxx wrote:

                        Hi,

                        Here's how to use SnapCore within a MouseDrag() loop:

                        Real mx = msg.GetReal(BFM_INPUT_X);
                        Real my = msg.GetReal(BFM_INPUT_Y);
                        LONG button;
                          
                        switch (msg.GetLong(BFM_INPUT_CHANNEL))
                        {
                            case BFM_INPUT_MOUSELEFT : button=KEY_MLEFT; break;
                            case BFM_INPUT_MOUSERIGHT: button=KEY_MRIGHT; break;
                            default: return TRUE;
                        }
                          
                        AutoAlloc<SnapCore> snap;  // Allocate snap
                        if (!snap) return FALSE;
                          
                        snap->Init(doc, bd);
                          
                        Real dx, dy;
                        BaseContainer bc;
                        BaseContainer device;
                        Vector pos;
                        SnapResult res;
                          
                        BaseObject *active = doc->GetActiveObject();
                          
                        win->MouseDragStart(button, mx, my, MOUSEDRAGFLAGS_DONTHIDEMOUSE|MOUSEDRAGFLAGS_NOMOVE);
                        while (win->MouseDrag(&dx,&dy,&device)==MOUSEDRAGRESULT_CONTINUE) // Start drag
                        {
                            // Increment mouse position during drag
                            mx += dx;
                            my += dy;
                            pos = bd->SW(Vector(mx, my, 500)); // Update pos
                          
                            if (snap->Snap(pos, res)) // If point snap anywhere 
                            {
                                pos += res.delta; // Pos will be updated with snapped delta
                            }
                          
                            if (active)
                                active->SetAbsPos(pos); // Set the object position to the new one!
                          
                            DrawViews(DRAWFLAGS_ONLY_ACTIVE_VIEW|DRAWFLAGS_NO_THREAD|DRAWFLAGS_NO_ANIMATION); // Update viewport
                        }
                          
                        win->MouseDragEnd(); // Reset viewport status
                          
                        EventAdd();
                        

                        This code snaps the active object; you can test it in Liquid Painting Tool example (LiquidToolData::MouseInput()).

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

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

                          On 26/10/2012 at 05:31, xxxxxxxx wrote:

                          Yeah that's pretty much the code I was using though you also have to tell the snap system to ignore the active object or it will go crazy, but I still have the issue. It isn't really noticeable on workplane snapping but the other modes it is.

                          So using the code you provided, if you create a scene with a cube and a sphere, if you turn on vertex snapping, select the sphere and then activate the tool, in this case the LiquidTool, you can drag around the scene and the sphere will follow. But once you snap it to one of the vertices on the cube you'll never be able to unsnap it off the cube until you release the mouse button and reclick. I would think if your mouse is nowhere near a vertex it should go back to just following your cursor.

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