/*清除所有组件并关闭组件*/
void clear_Close_AllParts(vector<tag_t> part_tags)
{
//清除所有的加载的组件,并关闭
remove_Part_Occs(part_tags);
for (int i = 0; i < part_tags.size(); i++)
{
UF_CALL(UF_PART_close(part_tags[i], 0, 1));
}
}
/*删除PART对应的组件*/
void remove_Part_Occs(std::vector<tag_t> part_tags)
{
std::vector<tag_t> part_occs;
for (int i = 0; i < part_tags.size(); i++)
{
tag_t* occs;
int num = UF_ASSEM_ask_occs_of_part(NULL_TAG, part_tags[i], &occs);
std::vector<tag_t> temp_occ;
for (int j = 0; j < num; j++)
temp_occ.push_back(occs[j]);
part_occs.insert(part_occs.end(), temp_occ.begin(), temp_occ.end());
}
del_assem_part(part_occs);
}
//批量删除组件
void del_assem_part(std::vector<tag_t> part_occ)
{
if (part_occ.size() > 0)
{
Session *theSession = Session::GetSession();
Part *workPart(theSession->Parts()->Work());
Part *displayPart(theSession->Parts()->Display());
Session::UndoMarkId markId1;
markId1 = theSession->SetUndoMark(Session::MarkVisibilityInvisible, "Delete");
bool notifyOnDelete1;
notifyOnDelete1 = theSession->Preferences()->Modeling()->NotifyOnDelete();
theSession->UpdateManager()->ClearErrorList();
Session::UndoMarkId markId2;
markId2 = theSession->SetUndoMark(Session::MarkVisibilityVisible, "Delete");
std::vector<NXObject *> objects1;
for (int i = 0; i < part_occ.size(); i++)
objects1.push_back(dynamic_cast<Assemblies::Component *>(NXObjectManager::Get(part_occ[i])));
int nErrs1;
nErrs1 = theSession->UpdateManager()->AddToDeleteList(objects1);
bool notifyOnDelete2;
notifyOnDelete2 = theSession->Preferences()->Modeling()->NotifyOnDelete();
int nErrs2;
nErrs2 = theSession->UpdateManager()->DoUpdate(markId2);
theSession->DeleteUndoMark(markId1, NULL);
}
}
【UG\NX二次开发】清除所有组件并关闭组件、删除PART对应的组件、批量删除组件
于 2023-11-10 08:54:15 首次发布