Duplicate Art from one document to another document by sAIArt->DuplicateArt() ,AI will crash.
starnight1981 Dec 13, 2010 1:00 AMI 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(¤tlayer);
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 ?

