iCAx开思工具箱
标题:
请教交互式工程图元的拷贝问题
[打印本页]
作者:
zcsq
时间:
2005-9-14 16:19
标题:
请教交互式工程图元的拷贝问题
想把工程图中一个SHEET的内容拷到另一个SHEET里,现通过spcurrenView=spcurrentSheet->GetCurrentView();
然后把spcurrentView拷贝到spNewSheet.实现过程如下.
此程序可实现自己画的工程图的拷贝及图框的拷贝。但对于由CATIA的3维图直接生成的2维工程图却不能拷贝,编译可通过,但运行出错“检测到空指针”,请教各位高手,如何入手解决呢?
问题可能是处在,交互产生的工程图,和PART文档之间的连接问题。对否?
请各位指点,多谢了!:)
ListOfVarBaseUnknown newListToCopy;
ListOfVarBaseUnknown listFromCopy;
CATIView_var spView=spSheet1->GetCurrentView();
CATISpecObject_var spViewToPaste(spView);
listFromCopy.Append(spViewToPaste);
result = piCutAndPastableOnSourceCont -> BoundaryExtract (newListToCopy, &listFromCopy,NULL);
if (NULL != result)
{
cout<<"........."<<endl;
}
else
{
cout << "BoundaryExtract failed" << endl << flush;
piCutAndPastableOnSourceCont -> Release();
piCutAndPastableOnTargetCont -> Release();
return 10;
}
VarBaseUnknown pExtractedList;
pExtractedList = piCutAndPastableOnSourceCont -> Extract (newListToCopy, NULL);
piCutAndPastableOnSourceCont -> Release();
piCutAndPastableOnSourceCont = NULL;
CATICutAndPastable *piCutAndPastableOnExtractedList = NULL;
rc = pExtractedList -> QueryInterface(IID_CATICutAndPastable,
(void**) &piCutAndPastableOnExtractedList);
if (FAILED(rc))
{
cout << "ERROR in QueryInterface on CATICutAndPastable on Target Container" << endl ;
return 3;
}
if(piCutAndPastableOnExtractedList)cout<<"piCutAndPastableOnExtractedList!=0"<<endl;
ListOfVarBaseUnknown extractedListToCopy;
result = NULL;
result = piCutAndPastableOnExtractedList -> BoundaryExtract (extractedListToCopy,
NULL,
NULL);
if (NULL != result)
{
cout << "BoundaryExtract from Clipboard succeeded" << endl << flush;
cout << "Number of objects extractedListToCopy= " << extractedListToCopy.Size() << endl;
}
else
{
cout << "BoundaryExtract failed" << endl << flush;
piCutAndPastableOnTargetCont -> Release();
return 10;
}
piCutAndPastableOnExtractedList -> Release();
piCutAndPastableOnExtractedList = NULL;
if(piCutAndPastableOnTargetCont!=NULL)cout<<"piCutAndPastableOnTargetCont!=0"<<endl;
else cout<<"piCutAndPastableOnTargetCont==0"<<endl;
cout << "Number of objects extractedListToCopy= " << extractedListToCopy.Size() << endl;
ListOfVarBaseUnknown listPastedObjects ;
listPastedObjects= piCutAndPastableOnTargetCont -> Paste (extractedListToCopy,NULL,NULL)
作者:
zcsq
时间:
2005-9-16 09:12
几位高手帮我看看呀,多谢了!
作者:
hick
时间:
2005-9-16 09:26
没做过,具体问题不太清楚
可以给点建议,加上粘贴方式 CATFormat *pFormat 试试
呵呵,不保证
作者:
zcsq
时间:
2005-9-16 14:10
谢谢,hick!试试看!
acoka,saeba兄,帮我看看呀,指点一二!多谢!
作者:
saeba
时间:
2005-9-16 17:00
试了一下,“由CATIA的3维图直接生成的2维工程图”也可以的。
试试下面的source吧
CATBoolean TSTSampleCmd::ActionTwo( void *data ){
HRESULT hr = S_OK;
CATBaseUnknown *pUnk = _Indication2->GetElementValue();
if (!pUnk) hr = E_FAIL;
cout << "LateType: " << pUnk->GetImpl()->IsA() << endl;
CATISheet_var spSheet2(pUnk);
CATISheet_var spSheet1(_spObject1); //_spObject1is set by last selection
if (!spSheet1)
cout << "Sheet1 is NULL" << endl;
CATIView_var spSrcView = spSheet1->GetCurrentView();
CATIView_var spTarView = spSheet2->GetMainView();
if (!spSrcView)
cout << "spSrcView is NULL" << endl;
CATICutAndPastable_var spSrcCCP(CATISpecObject_var(spSheet1)->GetFeatContainer());
CATICutAndPastable_var spTarCCP(CATISpecObject_var(spSheet2)->GetFeatContainer());
CATLISTP(CATFormat) listFmt = spSrcCCP->ListPasteFormats();
int cFmt = listFmt.Size();
for (int i = 1; i <= cFmt; i++){
cout << listFmt[i]->Name() << endl;
}
IdFormat MyFmy = "CATDrwCont";
const CATFormat* pFmt = CATFormat::GetRegisteredFormat(MyFmy);
ListOfVarBaseUnknown newListToCopy;
ListOfVarBaseUnknown listFromCopy;
listFromCopy.Append(spSrcView);
hr = spSrcCCP -> BoundaryExtract (newListToCopy, &listFromCopy,pFmt);
if (NULL != hr)
{
cout<<"........."<<endl;
}
else
{
cout << "BoundaryExtract1 failed" << endl << flush;
return FALSE;
}
ListOfVarBaseUnknown extractedListToCopy;
CATICutAndPastable_var spSrcCCPExt = spSrcCCP -> Extract (newListToCopy, pFmt);
int r = 0;
if (!!spSrcCCPExt)
r = spSrcCCPExt->BoundaryExtract(extractedListToCopy, NULL,pFmt);
if (0 != r)
{
cout << "BoundaryExtract from Clipboard succeeded" << endl << flush;
cout << "Number of objects extractedListToCopy= " << extractedListToCopy.Size() << endl;
}
else
{
cout << "BoundaryExtract2 failed" << endl << flush;
return FALSE;
}
cout << CATIAlias_var(extractedListToCopy[1])->GetAlias() << endl;
cout << CATIAlias_var(extractedListToCopy[2])->GetAlias() << endl;
ListOfVarBaseUnknown listPastedObjects ;
ListOfVarBaseUnknown listTargetObjects ;
listTargetObjects.Append(spSheet2);
listPastedObjects= spTarCCP -> Paste (extractedListToCopy, &listTargetObjects,pFmt);
cout << listPastedObjects.Size() <<endl;
CATISpecObject_var(spSheet2)->Update();
}
在我这里是可以的。
作者:
zcsq
时间:
2005-9-17 09:22
saeba兄,非常感谢!真佩服!
先收下,好好研究!成功后和大家分享我的体会!
欢迎光临 iCAx开思工具箱 (https://t.icax.org/)
Powered by Discuz! X3.3