另存为一份新的文档数据
HRESULT SaveAs(CATIAdpPLMIdentificator *ipPLMId, CATUnicodeString istrPrefix)
{
HRESULT rc = E_FAIL;
if (NULL == ipPLMId)
{
cout << "SaveAs() 形参 CATIAdpPLMIdentificator NULL! " << endl;
return rc;
}
CATAdpAttributeSet attributeSet;
CATAdpDuplicator duplicator;
if (FAILED(duplicator.AddElement(ipPLMId, attributeSet)))
{
cout << "SaveAs() AddElement KO! " << endl;
return rc;
}
if (FAILED(duplicator.Duplicate()))
{
return s_FALSE;
}
return S_OK;
}
显示/隐藏对象
void HideSpecObject( CATISpecObject_var spSpec,CATBoolean bShown )
{
HRESULT rc=S_OK;
if(spSpec!=NULL_var)
{
CATIVisProperties* piVisProp=NULL;
CATVisPropertiesValues ioValues;
CATShowAttribut oShow;
if(bShown)
{
oShow=CATShowAttr;
}
else
{
oShow=CATNoShowAttr;
}
ioValues.SetShowAttr(oShow);
if(SUCCEEDED(spSpec->QueryInterface(IID_CATIVisProperties,(void**)&piVisProp)))
{
rc=piVisProp->SetPropertiesAtt(ioValues,CATVPShow,CATVPGlobalType);
piVisProp->Release();
piVisProp=NULL;
}
CATIModelEvents_var spEvents = spSpec;
if (NULL_var != spEvents)
{
CATModifyVisProperties ModifyNotification(spSpec, NULL, CATVPGlobalType, CATVPShow, ioValues);
spEvents->Dispatch(ModifyNotification);
}
}
}
更新视图
void RefreshView3D(CATISpecObject_var ispSpec)
{
if (ispSpec==NULL_var)
return;
CATIModelEvents_var spModel = ispSpec;
CATModify notif(ispSpec);
if ( !!spModel )
{
spModel->Dispatch(notif);
}
CATIRedrawEvent_var spRedraw = ispSpec;
if(spRedraw != NULL_var)
{
spRedraw->Redraw();
}
}
设置颜色
HRESULT SetColorOnObject(CATISpecObject_var ispiSpecOnObject,unsigned int iRed,unsigned int iGreen,unsigned int iBlue,CATVisGeomType iGeoType)
{
HRESULT rc=E_FAIL;
if( !ispiSpecOnObject ) return rc;
CATVisPropertiesValues AttributeValue;
AttributeValue.SetColor(iRed,iGreen,iBlue);
CATIVisProperties *piGraphProp=NULL;
rc = ispiSpecOnObject->QueryInterface(IID_CATIVisProperties,(void **)&piGraphProp);
if( FAILED(rc) || !piGraphProp ) return rc;
rc = piGraphProp->SetPropertiesAtt(AttributeValue,CATVPColor,iGeoType);
piGraphProp->Release(); piGraphProp = NULL;
return rc;
}
获取系统的环境变量值
CATUnicodeString GetEnvValue(CATUnicodeString iEnvName)
{
const char * pPath = iEnvName.ConvertToChar();
char * t_Value = "";
CATGetEnvValue(pPath, &t_Value);
CATUnicodeString sEnvValue = t_Value;
return sEnvValue;
}
提示信息框
int MessageBoxShow(CATUnicodeString iMessage, CATUnicodeString iTitle, CATDlgStyle iStyle)
{
int value = -1;
CATApplicationFrame *pApplication = CATApplicationFrame::GetFrame();
if (NULL != pApplication)
{
CATDlgWindow * pMainWindow = pApplication->GetMainWindow();
CATDlgNotify *pNotifyDlg = new CATDlgNotify(pMainWindow, iTitle.ConvertToChar(), iStyle);
if (NULL != pNotifyDlg)
{
value = pNotifyDlg->DisplayBlocked(iMessage, iTitle);
pNotifyDlg->RequestDelayedDestruction();
}
}
return value;
}
GetRootOccurrence
注:CATIPLMNavOccurrence:实例-引用对的投影:在PLM系统中,一个"Occurrence"是某个实例(Instance)和引用(Reference)对的投影。这意味着它是实际对象在特定上下文中的一个表示或映射
HRESULT GetRootOccurrence(const CATBaseUnknown_var &ispRootRef, CATBaseUnknown_var &ospRootOcc)
{
if (!ispRootRef) return (E_INVALIDARG);
HRESULT oRc = E_FAIL;
CATIPrdOccurrenceMngt *piOccMngt = NULL;
if (SUCCEEDED(CATPrdGetOccurrenceMngt(piOccMngt)))
{
CATIPLMNavOccurrence_var spRootOcc;
CATIPLMNavReference_var spRootRef(ispRootRef);
if (!!spRootRef)
{
if (SUCCEEDED(oRc = piOccMngt->GetOrCreateRootOccurrence(spRootRef, spRootOcc)))
{
ospRootOcc = spRootOcc;
}
}
piOccMngt->Release();
piOccMngt = NULL;
}
//}
return (oRc);
}
更新特征的方法
HRESULT UpdateFeature(CATIMmiMechanicalFeature_var ispMmiMechanicalFeature, CATBoolean IfInsertInProceduralView)
{
HRESULT rc = E_FAIL;
if (IfInsertInProceduralView)
{
CATIGSMUseProceduralView_var spProceduralView = ispMmiMechanicalFeature;
if (NULL_var == spProceduralView)
{
cout << " UpdateFeature KO 1" << endl;
return rc;
}
rc = spProceduralView->InsertInProceduralView();
if (FAILED(rc))
{
cout << " UpdateFeature KO 2" << endl;
return rc;
}
}
CATIUseEntity_var hUseEnt(ispMmiMechanicalFeature);
if (NULL_var == hUseEnt)
{
cout << " UpdateFeature KO 3" << endl;
return E_FAIL;
}
rc = DataCommonProtocolServices::Update(hUseEnt);
if (FAILED(rc))
{
cout << " UpdateFeature KO 4" << endl;
return rc;
}
return rc;
}
针对一些对象,无法快速获取该对象的类型,可通过以下方法
HRESULT GetObjectType(CATBaseUnknown* ipUKObject, CATUnicodeString& oustrObjectType)
{
HRESULT hr = E_FAIL;
if (NULL == ipUKObject)
{
return E_INVALIDARG;
}
CATIPLMNavOccurrence_var spiNavOccOnObject = ipUKObject;
if (NULL_var == spiNavOccOnObject)
{
return E_FAIL;
}
CATIPLMNavReference* piNavRefOnObject = NULL;
hr = spiNavOccOnObject->GetRelatedReference(piNavRefOnObject);
if (FAILED(hr) || NULL == piNavRefOnObject)
{
return E_FAIL;
}
CATIPLMComponent_var spiComponentOnObject = piNavRefOnObject;
if (NULL_var == spiComponentOnObject)
{
return E_FAIL;
}
CATIAdpType* piAdpType = NULL;
spiComponentOnObject->GetAdpType(piAdpType);
CATIType* piType = NULL;
CATPLMTypeServices::GetKweTypeFromAdpType(piAdpType, piType); // CATIType
oustrObjectType = piType->Name();
return S_OK;
}
转换到编辑模式
CATBoolean ChangeOccModeToEdit(CATIPLMNavOccurrence_var ispOcc)
{
HRESULT rc = E_FAIL;
if (NULL_var == ispOcc) { return FALSE; }
CATListPtrCATIPLMNavRepOccurrence listRepChildren;
rc = ispOcc->ListRepChildren(listRepChildren);
if (SUCCEEDED(rc))
{
for (int i = 1; i <= listRepChildren.Size(); i++)
{
CATIPLMNavRepReference * pRepRefOnChild = NULL;
CATIPLMNavRepOccurrence_var spRepOcc = listRepChildren[i];
rc = spRepOcc->GetRelatedRepReference(pRepRefOnChild);
if (SUCCEEDED(rc) && NULL != pRepRefOnChild)
{
CATIPsiRepresentationLoadMode *piRepLoadMode = NULL;
rc = pRepRefOnChild->QueryInterface(IID_CATIPsiRepresentationLoadMode, (void **)&piRepLoadMode);
if (piRepLoadMode && SUCCEEDED(rc))
{
rc = piRepLoadMode->ChangeLoadingMode(CATIPsiRepresentationLoadMode::EditMode);
if (FAILED(rc))
{
return FALSE;
}
if (piRepLoadMode) { piRepLoadMode->Release(); piRepLoadMode = NULL; }
}
if (pRepRefOnChild) { pRepRefOnChild->Release(); pRepRefOnChild = NULL; }
}
}
listRepChildren.RemoveAll();
}
if (FAILED(rc)) return FALSE;
return TRUE;
}
获取属性值
CATUnicodeString GetObjectAttrValue(CATBaseUnknown * ipBaseUnknown, CATUnicodeString sAttrName)
{
CATUnicodeString sExternalID("");
if (ipBaseUnknown == NULL)
return sExternalID;
CATIPLMComponent *spCompObject = NULL;
HRESULT rc = ipBaseUnknown->QueryInterface(IID_CATIPLMComponent, (void**)&spCompObject);
if (spCompObject == NULL)
return S_FALSE;
CATICkeObject * spCkeObject = NULL;
rc = spCompObject->QueryInterface(IID_CATICkeObject, (void**)&spCkeObject);
_RELEASE_PTR_(spCompObject);
if (spCkeObject == NULL)
return sExternalID;
CATCkeObjectAttrReadServices::GetValueAsString(spCkeObject, sAttrName, sExternalID);
_RELEASE_PTR_(spCkeObject);
return sExternalID;
}
CAA命令中检查许可证或产品是否已启用
在命令的实际代码开始之前插入以下代码行:
int isAuthorized = 0;
isAuthorized = CATSysCAALM::IsProductAuthorized("ABC.prd");
其中“ABC”是某个特定产品的三字母缩写。(例如:FDE 表示 Fasteners Designer,MDG 表示 Mechanical Designer,依此类推。)
代码返回值情况:
-
0 - 该产品未启用。
-
非0 - 该产品已启用。
评论