InsertNewPart插入零件

*/

// ------------------------------------------------

CATBoolean YFBOCreMarkLinesCmd::InsertNewPart(

CATISpecObject_var& ospNewPart

)

{

CATFrmEditor *pEditor = CATFrmEditor::GetCurrentEditor();

if (pEditor==NULL)

{

return FALSE;

}

CATDocument *pDoc = NULL;

pDoc = pEditor->GetDocument();

if (NULL == pDoc)

{

return FALSE;

}

// Search for the document's root product (RootProduct)

CATUnicodeString ustrTemp = "";

CATIProduct* piProductOnRoot = NULL;

CATIDocRoots* piDocRootsOnDoc = NULL;

CATISpecObject_var spSpecOnDocRoots = NULL_var;

HRESULT rc = pDoc->QueryInterface(IID_CATIDocRoots,(void) &piDocRootsOnDoc);

if ( SUCCEEDED(rc) )

{

CATListValCATBaseUnknown_var pRootProducts = piDocRootsOnDoc->GiveDocRoots();

if (NULL != pRootProducts)

{

if (pRootProducts->Size())

{

CATBaseUnknown_var spBaseTemp = (pRootProducts)[1];

if ( NULL_var != spBaseTemp )

{

spBaseTemp->QueryInterface(IID_CATIProduct,(void) &piProductOnRoot);

}

spSpecOnDocRoots = spBaseTemp;

}

delete pRootProducts;

pRootProducts = NULL;

}

piDocRootsOnDoc->Release();

piDocRootsOnDoc=NULL;

}

if (NULL == piProductOnRoot)

{

return FALSE;

}

else

{

// Adds a new CATPart under the root product.

// creates a new part document

CATDocument *pPartDoc1 = NULL;

rc = CATDocumentServices::New("Part", pPartDoc1);

if ( FAILED(rc) || NULL == pPartDoc1 )

{

return FALSE;

}

else

{

// 遍历所有Product

CATUnicodeString ustrAliasName = "";

CATUnicodeString ustrSubString = "";

int iFindPos = 0;

int iNum = 0;

int iTempNum = 0;

CATUnicodeString ustrPartName = "MakeLinePart_";

CATListValCATBaseUnknown_var pChildProducts = piProductOnRoot->GetAllChildren();

if (NULL == pChildProducts)

{

return FALSE;

}

if (pChildProducts->Size() != 0)

{

for (int iLoop = 1; iLoop <= pChildProducts->Size();iLoop++)

{

CATBaseUnknown_var spChildProductTemp = (pChildProducts)[iLoop];

CATIAlias_var spiAs = spChildProductTemp;

if (spiAs == NULL_var)

{

continue;

}

ustrAliasName = spiAs->GetAlias();

iFindPos = ustrAliasName.SearchSubString(ustrPartName);

if (iFindPos != -1)

{

iTempNum = ustrAliasName.GetLengthInChar() - ustrPartName.GetLengthInChar();

ustrSubString=ustrAliasName.SubString(iFindPos + ustrPartName.GetLengthInChar(),iTempNum);

// 将尾数转化为数字

ustrSubString.ConvertToNum(&iTempNum);

if (iTempNum > iNum)

{

iNum = iTempNum;

}

}

}

ustrTemp = "";

iNum = iNum + 1;

ustrTemp.BuildFromNum(iNum);

ustrPartName = ustrPartName + ustrTemp;

}

CATIProduct *piInstanceProd1 = NULL;

// imports the new document in root product

CATIDocRoots *piDocRootsOnNewDoc = NULL;

rc = pPartDoc1->QueryInterface(IID_CATIDocRoots, (void**) &piDocRootsOnNewDoc);

if (SUCCEEDED(rc))

{

rc = E_FAIL;

CATListValCATBaseUnknown_var * pRootProducts = piDocRootsOnNewDoc->GiveDocRoots();

if (NULL != pRootProducts)

{

if (pRootProducts->Size() > 0)

{

CATIProduct_var spRootProduct = (*pRootProducts)[1];

if (NULL_var != spRootProduct)

{

// 设定零件编号

spRootProduct->SetPartNumber(ustrPartName);

CATIProduct_var spProduct = piProductOnRoot->AddProduct(spRootProduct);

if (NULL_var != spProduct )

{

rc = spProduct->QueryInterface(IID_CATIProduct,

(void**) &piInstanceProd1);

if (NULL == piInstanceProd1 || FAILED(rc))

{

return FALSE;

}

}

}

}

delete pRootProducts;

pRootProducts = NULL;

}

piDocRootsOnNewDoc->Release();

piDocRootsOnNewDoc=NULL;

}

if ( NULL == piInstanceProd1 )

{

return FALSE;

}

CATILinkableObject_var spLinkInstProduct;

if(SUCCEEDED(piInstanceProd1->GetShapeRep(spLinkInstProduct, "Default", CATPrd3D, TRUE)))

{

CATIPrtPart *pPartInstProduct = NULL;

rc = spLinkInstProduct->QueryInterface(IID_CATIPrtPart, (void **) &pPartInstProduct);

if (NULL == pPartInstProduct || FAILED(rc))

{

return FALSE;

}

CATISpecObject_var spNewPart = pPartInstProduct;

if (NULL_var == spNewPart)

{

return FALSE;

}

// 输出插入的零件

ospNewPart = spNewPart;

}

}

// 刷新装配树

CATISpecObject* pSpecOnRoot = spSpecOnDocRoots;

if (NULL == pSpecOnRoot)

{

return FALSE;

}

CATIRedrawEvent_var spRedrawOnRoot(pSpecOnRoot);

if (NULL_var == spRedrawOnRoot)

{

return FALSE;

}

spRedrawOnRoot->Redraw();

// 刷新模型

CATModify pModifyOnRoot(pSpecOnRoot);

CATIModelEvents_var spMeOnRoot = pSpecOnRoot;

if (NULL_var == spMeOnRoot)

{

return FALSE;

}

spMeOnRoot->Dispatch(pModifyOnRoot);

if (NULL != pSpecOnRoot)

{

pSpecOnRoot->Release();

pSpecOnRoot = NULL;

}

}

return TRUE;

}
网上转载
posted @ 2022-11-04 16:40  Breadss  阅读(44)  评论(0编辑  收藏  举报