在 3DEXPERIENCE 宏中将零件插入装配体
Insert part to assembly in 3DEXPERIENCE macro
有人有在 Catia 3DEXPERIENCE 中将零件插入装配体的经验吗?不管用什么语言。我只是在找线索。
我可以毫无问题地从数据库中查找或打开零件,但我需要知道如何将此对象插入到已打开的产品中。
我很高兴得到任何答案或提示。
我的观点是,我想插入到数据库中找到的程序集项目中,例如通过这样的方法:
public DatabaseSearch SearchItemInDB(string searchString)
{
SearchService oSearchService = (SearchService)CATIA.GetSessionService("Search");
DatabaseSearch oDatabaseSearch = oSearchService.DatabaseSearch;
oDatabaseSearch.set_BaseType("VPMReference");
oDatabaseSearch.AddEasyCriteria("V_Name", searchString);
oSearchService.Search();
return oDatabaseSearch;
}
提前致谢。
智日
在 VB 中尝试这样的事情:
Public Function CopyPaste(ByRef MyInObj As AnyObject, ByRef MyOutObj As AnyObject)
Dim MaSel As INFITF.Selection = CATIA.ActiveEditor.Selection
'********************
'* Copy file *
'********************
MaSel = CATIA.ActiveEditor.Selection
MaSel.Clear()
MaSel.Add(MyInObj)
MaSel.Copy()
'**************
'* paste file *
'**************
MaSel = CATIA.ActiveEditor.Selection
MaSel.Clear()
MaSel.Add(MyOutObj)
MaSel.Paste()
End Sub
注意:没有任何错误提示
我非常感谢为本次讨论做出贡献的人们所付出的努力。
我得出的结论是无法直接从数据库搜索中将项目插入程序集,我通过简单地从另一个编辑器复制项目来做到这一点。
private Editor OpenProductAndGetEditor(DatabaseSearch oDBSearch)
{
PLMEntities cPLMEntititiesFound = oDBSearch.Results;
if (cPLMEntititiesFound.Count > 0 && cPLMEntititiesFound.Count < 2)
{
oPLMEntityFound = cPLMEntititiesFound.Item(1);
PLMOpenService oPLMOpenService = (PLMOpenService)CATIA.GetSessionService("PLMOpenService");
oPLMOpenService.PLMOpen(oPLMEntityFound, out oFoundEditor);
model.InfoAboutSearching = "Object found: " + oPLMEntityFound.get_Name();
BItemFound = true;
}
return oFoundEditor;
}
private void CopyOpenedPart(Editor oEditor)
{
PLMProductService oProductService = (PLMProductService)oEditor.GetService("PLMProductService");
VPMRootOccurrence oCompRootOccur = oProductService.RootOccurrence;
Selection tempSel = oEditor.Selection;
tempSel.Clear();
tempSel.Add(oCompRootOccur);
tempSel.Copy();
tempSel.Clear();
Window oCurrentWindow = CATIA.Windows.Item(2);
oSel.Add(oVPMOccurSwitchboard);
oSel.Paste();
oSel.Clear();
oCurrentWindow.Close();
}
如果有人知道这个问题的解决方案,我会很乐意与我联系。
谢谢
有人有在 Catia 3DEXPERIENCE 中将零件插入装配体的经验吗?不管用什么语言。我只是在找线索。
我可以毫无问题地从数据库中查找或打开零件,但我需要知道如何将此对象插入到已打开的产品中。
我很高兴得到任何答案或提示。
我的观点是,我想插入到数据库中找到的程序集项目中,例如通过这样的方法:
public DatabaseSearch SearchItemInDB(string searchString)
{
SearchService oSearchService = (SearchService)CATIA.GetSessionService("Search");
DatabaseSearch oDatabaseSearch = oSearchService.DatabaseSearch;
oDatabaseSearch.set_BaseType("VPMReference");
oDatabaseSearch.AddEasyCriteria("V_Name", searchString);
oSearchService.Search();
return oDatabaseSearch;
}
提前致谢。
智日
在 VB 中尝试这样的事情:
Public Function CopyPaste(ByRef MyInObj As AnyObject, ByRef MyOutObj As AnyObject)
Dim MaSel As INFITF.Selection = CATIA.ActiveEditor.Selection
'********************
'* Copy file *
'********************
MaSel = CATIA.ActiveEditor.Selection
MaSel.Clear()
MaSel.Add(MyInObj)
MaSel.Copy()
'**************
'* paste file *
'**************
MaSel = CATIA.ActiveEditor.Selection
MaSel.Clear()
MaSel.Add(MyOutObj)
MaSel.Paste()
End Sub
注意:没有任何错误提示
我非常感谢为本次讨论做出贡献的人们所付出的努力。 我得出的结论是无法直接从数据库搜索中将项目插入程序集,我通过简单地从另一个编辑器复制项目来做到这一点。
private Editor OpenProductAndGetEditor(DatabaseSearch oDBSearch)
{
PLMEntities cPLMEntititiesFound = oDBSearch.Results;
if (cPLMEntititiesFound.Count > 0 && cPLMEntititiesFound.Count < 2)
{
oPLMEntityFound = cPLMEntititiesFound.Item(1);
PLMOpenService oPLMOpenService = (PLMOpenService)CATIA.GetSessionService("PLMOpenService");
oPLMOpenService.PLMOpen(oPLMEntityFound, out oFoundEditor);
model.InfoAboutSearching = "Object found: " + oPLMEntityFound.get_Name();
BItemFound = true;
}
return oFoundEditor;
}
private void CopyOpenedPart(Editor oEditor)
{
PLMProductService oProductService = (PLMProductService)oEditor.GetService("PLMProductService");
VPMRootOccurrence oCompRootOccur = oProductService.RootOccurrence;
Selection tempSel = oEditor.Selection;
tempSel.Clear();
tempSel.Add(oCompRootOccur);
tempSel.Copy();
tempSel.Clear();
Window oCurrentWindow = CATIA.Windows.Item(2);
oSel.Add(oVPMOccurSwitchboard);
oSel.Paste();
oSel.Clear();
oCurrentWindow.Close();
}
如果有人知道这个问题的解决方案,我会很乐意与我联系。
谢谢