0 Replies Latest reply: Dec 13, 2010 1:00 AM by starnight1981 RSS

    Duplicate Art from one document to another document by sAIArt->DuplicateArt() ,AI will crash.

    starnight1981 Community Member

      I encountered such a problem:


      I want to duplicate a Art from one document to another document :


      AIErr   DuplicateAllArtFromAIFileToCurrentDoc(std::string &aiFilePath,AIArtHandle &outArtRoot)

      {

           AIErr error=kNoErr;



       

           try

           {

       

                ai::FilePath filepath1(ai::UnicodeString(aiFilePath),true );

       

                if( filepath1.Exists(false ) == false) aisdk::check_ai_error(-1);

                SnpDocumentHelper snpdochelp;

                AIDocumentHandle currentdochandle,newdochandle;


       


                error = snpdochelp.GetCurrentDocument(currentdochandle);

                aisdk::check_ai_error(error);


                error = snpdochelp.CanPlaceFile();

                aisdk::check_ai_error(!error);


                AILayerHandle currentlayer;

                error = sAILayer->GetCurrentLayer(&currentlayer);

                aisdk::check_ai_error(error);


                AIArtHandle layerGroup;

                error = sAIArt->GetFirstArtOfLayer(currentlayer,&layerGroup);

                aisdk::check_ai_error(error);


                error = sAIArt->NewArt(kGroupArt,kPlaceInsideOnTop,layerGroup,&outArtRoot);

                aisdk::check_ai_error(error);


                error = snpdochelp.OpenDocument( ai::UnicodeString(aiFilePath),newdochandle);

                aisdk::check_ai_error(error);


                error = snpdochelp.ActivateDocument(newdochandle);

                aisdk::check_ai_error(error);


                long layerCount=0;

                error = sAILayer->CountLayers( &layerCount );

                aisdk::check_ai_error(error);


       

       


                for (int i=0;i<layerCount;i++)

                {

                     AILayerHandle nlayer;

                     error = sAILayer->GetNthLayer(i,&nlayer);

                     aisdk::check_ai_error(error);


                     AIArtHandle nlayerGroup;

                     error = sAIArt->GetFirstArtOfLayer(nlayer,&nlayerGroup);

                     aisdk::check_ai_error(error);


                     AIArtHandle dupArt,newlaygroup;


                     error  = sAIArt->NewArt(kGroupArt,kPlaceInsideOnBottom,outArtRoot,&newlaygroup);

                     aisdk::check_ai_error(error);


                     AIArtHandle artfirst = NULL ,artsib = NULL;

                     sAIArt->GetArtFirstChild(nlayerGroup,&artfirst);

                     while ( artfirst )

                     {

                          error  = sAIArt->DuplicateArt(artfirst,kPlaceInsideOnBottom,newlaygroup,&dupArt);

                          aisdk::check_ai_error(error);

                          sAIArt->ReleaseToLayers(dupArt,true);

                          sAIArt->GetArtSibling(artfirst,&artsib);

                          artfirst = artsib;

                     }


                }


                error = sAIDocument->SetDocumentModified(false);

                aisdk::check_ai_error(error);


               //error = snpdochelp.CloseDocument(newdochandle);    // if close  source doc , ai will crash.

                aisdk::check_ai_error(error);


                error = snpdochelp.ActivateDocument(currentdochandle);

                aisdk::check_ai_error(error);



       

       

           }

       

           catch (ai::Error& ex)

            {

                error = ex;

           }

       



           return error;

      }



      if I using this function Duplicate All Art From my AI File To CurrentDoc , and then close Source Ai File, and move a Duplicated art, ai will crash. 

      if do not close Source Ai File,there is nothing.



      Any body could help me ?