部分特征的接口只有在EditMode下才能获取到,所以需要改变为EditMode。很费时间。
ExportedByARKDocumentStructureItf void ARKEProduct::ChangeLoadModeToEditMode(){
CATIPLMNavOccurrence_var spOccOnThis = this;
CATIPLMNavReference *pRefOnThis = NULL;
if(FAILED(spOccOnThis -> GetRelatedReference(pRefOnThis))||pRefOnThis==NULL){
CATIPLMNavInstance *pInstOnThis = NULL;
if(SUCCEEDED(spOccOnThis -> GetRelatedInstance(pInstOnThis))&&pInstOnThis!=NULL){
pInstOnThis -> GetReferenceInstanceOf(pRefOnThis);
ReleaseInterface(pInstOnThis);
}
}
CATIPLMRepInstances_var spRepInsances=pRefOnThis;
ReleaseInterface(pRefOnThis);
CATIPrdIterator *pIter=NULL;
spRepInsances->Iterator(pIter);
CATIPLMNavRepReference *pRepRef=NULL;
CATIPLMNavRepInstance_var spRepInstance = NULL_var;
CATBaseUnknown *pNextElement = NULL;
while(SUCCEEDED(pIter -> Next(pNextElement))){
spRepInstance = pNextElement;
ReleaseInterface(pNextElement);
spRepInstance -> GetRepReferenceInstanceOf(pRepRef);
CATIPsiRepresentationLoadMode_var spLoadMode=pRepRef;
CATIPsiRepresentationLoadMode::LoadingMode loadMode;
clock_t start=clock();
spLoadMode->ComputeLoadingMode(loadMode);
clock_t end=clock();
if (loadMode!=CATIPsiRepresentationLoadMode::LoadingMode:: EditMode)
cout<<endl<<"Compute时间:"<<(double)(end-start)/CLOCKS_PER_SEC<<"秒"<<endl;
{
clock_t start=clock();
spLoadMode->ChangeLoadingMode(CATIPsiRepresentationLoadMode::LoadingMode:: EditMode);
clock_t end=clock();
cout<<endl<<"Edit时间:"<<(double)(end-start)/CLOCKS_PER_SEC<<"秒"<<endl;
}
}
ReleaseInterface(pIter);
vector<ARKIProduct *> listChildren;
this -> ListChildren(listChildren);
for(vector<ARKIProduct *>::iterator iter = listChildren.begin();iter!=listChildren.end();++iter)
(*iter) -> ChangeLoadModeToEditMode();
}