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

    find all cameras in a scene ?

    Scheduled Pinned Locked Moved SDK Help
    7 Posts 0 Posters 495 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 05/08/2007 at 04:26, xxxxxxxx wrote:

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

      ---------I need to find all cameras in a scene ? how can I to do?

      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 05/08/2007 at 20:29, xxxxxxxx wrote:

        Hi ...

        Will it do my friend?

        void GetAllCameras(AtomArray *oCams,BaseObject *oCam)
        {
             if(oCam)
             {
                  if(oCam->GetType()==Ocamera)
                       oCams->Append(oCam);

        if(oCam->GetDown())
                       GetAllCameras(oCams,oCam->GetDown());
                  if(oCam->GetNext())
                       GetAllCameras(oCams,oCam->GetNext());
             }
        }

        LONG GetAllCameras(AtomArray *oCams)
        {
             if(!oCams) return 0;

        BaseDocument *doc=GetActiveDocument();
             BaseObject *obj=doc->GetFirstObject();
             if(obj)
             {
                  GetAllCameras(oCams,obj);
             }

        return oCams->GetCount();
        }

        You need to call the second function and then all the cameras will be in the AtomArray parameter you passed ...
        If you just want the count only ... you don't need that parameter ...
        For example ... you are using a command plugin and you got a button ... Then your command function will be ... like below ...

        Bool dlgYourPlugin::Command(LONG id,const BaseContainer &msg;)
        {
             BaseDocument *doc=GetActiveDocument();
             switch(id)
             {
             case BTN_DISPLAY_CAMERAS:
                  {
                       LONG i;
                       AtomArray *oCameras=AtomArray::Alloc();
                       LONG lCamCnt=GetAllCameras(oCameras);
                       for(i=0;i<lCamCnt;i++)
                       {
                            BaseObject *obj=(BaseObject * )oCameras->GetIndex(i);
                            MessageDialog(obj->GetName());
                       }
                       AtomArray::Free(oCameras);
                  }
                  break;
             }
        }

        Wishing it can help you in a way ...
        Zaw Min Tun

        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 05/08/2007 at 22:30, xxxxxxxx wrote:

          hi, Zaw Min Tun
          thank you for your help?

          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 06/08/2007 at 03:07, xxxxxxxx wrote:

            I was added to two camera of target; but the return result is 0;  🙂

            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 06/08/2007 at 18:57, xxxxxxxx wrote:

              Hi ...
              I also tested before I post ... 🙂 ... and it worked ...
              So pls ... be sure to allocate the AtomArray before you pass to the LONG GetAllCameras(AtomArray *oCams) function ...
              AtomArray *varX=AtomArray::Alloc();
              LONG l=GetAllCameras(varX);
              MessageDialog(LongToString(l)+ " cameras!");
               
              It'll be more helpful if you can show me your code lines?
              Regards ...
              Zaw Min Tun

              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 06/08/2007 at 22:41, xxxxxxxx wrote:

                static void GetCameraSnapshoot( void );
                void LauntchWindow()
                {
                 Bool bSingleModul = FALSE;
                 LONG OldProc = 0;
                 BaseDocument* doc = GetActiveDocument();
                 BaseObject* null = doc->GetActiveObject();
                 if (!null)
                 {
                  null = doc->GetFirstObject();
                   if (!null)
                   {
                   return ;
                   }
                 }
                 BaseTrack *track = null->GetTrack(Spla);
                 if (!track )
                 {
                  //is picture
                  nTypeObj = 0;
                 }
                 else
                 {
                  //is animal
                  nTypeObj = 1;
                 }
                 
                 for ( LONG num = 0 ; num< 4; num++ )
                 {
                  //set view to active
                  SetActiveViewFromNum(num);
                  LONG proc = doc->GetBaseDraw( num )->GetProjection();
                  if ( OldProc == proc )
                  {
                   bSingleModul = TRUE;
                   break;
                  }
                  switch(proc )
                  {
                  case Pperspective:
                   {
                    if ( nTypeObj == 0)
                    {
                     Snapshoot("0_perspective"); //perspective is snapshoot name
                    }
                    else
                    {
                     Snapshoot("1_perspective"); //perspective is snapshoot name
                    }
                    break;
                   }
                  case Ptop:
                   {
                    if ( nTypeObj == 0)
                    {
                     Snapshoot("0_top");        //top is snapshoot name
                     
                    }
                    else
                    {
                     Snapshoot("1_top");        //top is snapshoot name
                    }
                    break;
                   }
                  case Pright:
                   {
                    if ( nTypeObj == 0)
                    {
                     Snapshoot("0_right");
                    }
                    else
                    {
                     Snapshoot("1_right");
                    }
                   break;
                   }
                  case Pfront:
                   {
                    if ( nTypeObj == 0)
                    {
                     Snapshoot("0_front");
                    }
                    else
                    {
                     Snapshoot("1_front");
                    }
                    break;
                   }
                  }
                  OldProc = proc;
                 }
                 //is single view modul
                 if ( bSingleModul == TRUE )
                 {
                  BaseDraw *bd = doc->GetActiveBaseDraw();
                  for ( LONG num = 0 ; num< 4; num++ )
                  {
                   switch( num )
                   {
                   case 0:
                    {     
                     GeData da(BASEDRAW_PROJECTION_PERSPECTIVE);
                     bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                     DrawViews(DA_ONLY_ACTIVE_VIEW);
                     //get snapshoot
                     if ( nTypeObj == 0)
                     {
                      Snapshoot("0_perspective"); //perspective is snapshoot name
                     }
                     else
                     {
                      Snapshoot("1_perspective"); //perspective is snapshoot name
                     }
                     break;
                    }
                         
                   case 1:
                    {     
                     GeData da(BASEDRAW_PROJECTION_TOP);
                     bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                     DrawViews(DA_ONLY_ACTIVE_VIEW);
                     //get snapshoot
                     if ( nTypeObj == 0)
                     {
                      Snapshoot("0_top");        //top is snapshoot name
                      
                     }
                     else
                     {
                      Snapshoot("1_top");        //top is snapshoot name
                     }
                     break;
                    }
                   
                   case 2:
                    {     
                     GeData da(BASEDRAW_PROJECTION_RIGHT);
                     bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                     DrawViews(DA_ONLY_ACTIVE_VIEW);
                     //get snapshoot
                     if ( nTypeObj == 0)
                     {
                      Snapshoot("0_right");
                     }
                     else
                     {
                      Snapshoot("1_right");
                     }
                     break;
                    }
                     
                   case 3:
                    {     
                     GeData da(BASEDRAW_PROJECTION_FRONT);
                     bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                     DrawViews(DA_ONLY_ACTIVE_VIEW);
                     //get snapshoot
                     if ( nTypeObj == 0)
                     {
                      Snapshoot("0_front");
                     }
                     else
                     {
                      Snapshoot("1_front");
                     }
                     break;
                    }
                    
                   }//end switch

                }//end for
                  //reset to PERSPECTIVE
                  GeData da(BASEDRAW_PROJECTION_PERSPECTIVE);
                  bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                  EventAdd();

                }
                 GetCameraSnapshoot();
                }
                 
                void Snapshoot( char FileName[] )
                {
                 BaseDocument* doc = GetActiveDocument();
                 if (!doc) return;
                 String sFileName = String( FileName ) + String(".jpg");
                 BaseObject* null = doc->GetActiveObject();
                    if (!null)
                 {
                  null = doc->GetFirstObject();
                  if (!null)
                  {
                   return;  //have't object
                  }
                 }
                 BaseContainer rdata = doc->GetActiveRenderData()->GetData();
                 //set to render as editor
                 rdata.SetBool(RDATA_RENDERASEDITOR, TRUE);
                 char* szPath = bNew CHAR[512];
                 GetShadeImageDir( szPath );
                 //MessageDialog(szPath);
                    //char * szPath = "C:\\Documents and Settings\\Administrator\\Turbo Squid Tentacles\\Uploaded\\Shade";
                 String sPath = String( szPath );
                  bDelete(szPath);
                   
                 Filename renderpath = Filename( sPath ); // for instance
                 rdata.SetFilename(RDATA_PATH, renderpath);
                   
                 //BaseBitmap* bmp = AllocBaseBitmap();
                 BaseBitmap* bmp = BaseBitmap::Alloc();
                 BaseBitmap* desbmp =  BaseBitmap::Alloc();
                 
                 bmp->Init(rdata.GetLong(RDATA_XRES),
                    rdata.GetLong(RDATA_YRES));
                 desbmp->Init(rdata.GetLong(RDATA_XRES),
                    rdata.GetLong(RDATA_YRES));
                 
                 RenderDocument(doc, rdata, NULL, NULL, bmp, TRUE , NULL);
                 String sFullPath = sPath + "\" + sFileName;
                    //MessageDialog(sFullPath);
                 bmp->Save( Filename(sFullPath), FILTER_JPG, NULL, SAVEBIT_32b*tchANNELS);
                 
                 BaseBitmap::Free( bmp );
                 
                    BaseBitmap::Free( desbmp );
                }

                static void SetActiveViewFromNum( LONG iNUM = 0 )
                {
                 BaseDocument* doc = GetActiveDocument();
                 LONG lngIndex = 0;
                 lngIndex = iNUM;
                  
                 BaseDraw *bd = doc->GetActiveBaseDraw();
                  
                 switch( lngIndex )
                 {
                 case 0:
                  {
                   //BaseDraw *bd = doc->GetBaseDraw( 0);
                   //bd->SetBit( BIT_ACTIVE );
                   //bd->SetBit( BIT_DOCUMENT_CHECKREWIND );
                   //SendCoreMessage(EVMSG_ACTIVEVIEWCHANGED);
                   //EventAdd(EVMSG_ACTIVEVIEWCHANGED);
                      
                   GeData da(BASEDRAW_PROJECTION_PERSPECTIVE);
                   bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                  }
                       break;
                 case 1:
                  {
                   //BaseDraw *bd = doc->GetBaseDraw( 1 );
                   //bd->SetBit( BIT_ACTIVE );
                   //bd->SetBit( BIT_DOCUMENT_CHECKREWIND );
                   //EventAdd(EVMSG_ACTIVEVIEWCHANGED);
                   GeData da(BASEDRAW_PROJECTION_TOP);
                   bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                  }
                  break;
                 case 2:
                  {
                   //BaseDraw *bd = doc->GetBaseDraw( 2);
                   //bd->SetBit( BIT_ACTIVE );
                   //bd->SetBit( BIT_DOCUMENT_CHECKREWIND );
                   GeData da(BASEDRAW_PROJECTION_RIGHT);
                   bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                  }
                  
                  break;
                 case 3:
                  {
                   //BaseDraw *bd = doc->GetBaseDraw( 3);
                   //bd->SetBit( BIT_ACTIVE );
                   //bd->SetBit( BIT_DOCUMENT_CHECKREWIND );
                  
                   GeData da(BASEDRAW_PROJECTION_FRONT);
                   bd->SetParameter(DescLevel(BASEDRAW_DATA_PROJECTION),da,NULL);
                  }
                  break;
                 }
                 
                 EventAdd();
                }

                void GetAllCameras(AtomArray *oCams,BaseObject *oCam)
                {
                     if(oCam)
                     {
                          if(oCam->GetType()==Ocamera)
                               oCams->Append(oCam);
                          if(oCam->GetDown())
                               GetAllCameras(oCams,oCam->GetDown());
                          if(oCam->GetNext())
                               GetAllCameras(oCams,oCam->GetNext());
                     }
                }
                LONG GetAllCameras(AtomArray *oCams)
                {
                     if(!oCams)
                  {
                   //MessageDialog("Alloc AtomArray Fail that Can't get Camera ");
                   return 0;
                  }
                     BaseDocument *doc=GetActiveDocument();
                     BaseObject *obj=doc->GetFirstObject();
                     if(obj)
                     {
                          GetAllCameras(oCams,obj);
                     }
                     return oCams->GetCount();
                }
                 
                static void GetCameraSnapshoot( void )
                {
                 LONG nCount = 0;
                 LONG nIndex[256] ={0};
                 
                 
                 AtomArray *oCameras = AtomArray::Alloc();
                 if ( !oCameras )
                 {
                  return ;
                 }
                  
                    LONG lCamCnt = GetAllCameras(oCameras);
                 BaseDocument* doc = GetActiveDocument();
                 
                 //MessageDialog( LongToString(lCamCnt) );
                    for(LONG i = 0;i < lCamCnt; i++)
                    {
                        BaseObject *obj=(BaseObject * )oCameras->GetIndex(i);
                        MessageDialog(obj->GetName());
                  if ( !obj) break;
                       
                  String camname = obj->GetName();
                  LONG iLen = camname.GetCStringLen(St8bit)+1;
                  char* pName = bNew CHAR[iLen];
                   
                  camname.GetCString( pName,iLen);
                  BaseObject * oldcam = doc->GetRenderBaseDraw()->GetSceneCamera( doc );
                  doc->GetRenderBaseDraw()->SetSceneCamera( obj );
                    
                  Snapshoot( pName ); //perspective is snapshoot name
                  bDelete(pName);
                 
                    }
                 AtomArray::Free(oCameras) ;
                 
                 return ;
                }

                this is my some codes: to get snapshoot (viewport and cameras) when the plugin be clicked and launch my operation windonws

                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 06/08/2007 at 22:43, xxxxxxxx wrote:

                  AtomArray *oCameras = AtomArray::Alloc();
                     the oCamera is NULL  when testing.  it was alloc failed

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