Skip to content
This repository was archived by the owner on Aug 6, 2025. It is now read-only.

Commit 43c9ff3

Browse files
committed
patch
1 parent b2a2395 commit 43c9ff3

2 files changed

Lines changed: 51 additions & 46 deletions

File tree

src/Occt/OcctHelper/AisHelper.cxx

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,53 @@ TopoDS_Shape AisHelper::GetShapeFromEntityOwner(const Handle(SelectMgr_EntityOwn
2727

2828
return TopoDS_Shape(brepOwner->Shape());
2929
}
30+
31+
int AisHelper::GetPickedFromSelector(const Handle(StdSelect_ViewerSelector3d)& selector,
32+
std::vector<Handle(AIS_InteractiveObject)>& interactives,
33+
std::vector<TopoDS_Shape>& shapes)
34+
{
35+
int count = 0;
36+
bool doInteractives = !interactives.empty();
37+
bool doShapes = !shapes.empty();
38+
39+
// 清空输出向量
40+
interactives.clear();
41+
shapes.clear();
42+
43+
// 遍历拾取结果
44+
for(Standard_Integer aPickIter = 1; aPickIter <= selector->NbPicked(); ++aPickIter)
45+
{
46+
Handle(SelectMgr_EntityOwner) owner = selector->Picked(aPickIter);
47+
if(owner.IsNull() || !owner->HasSelectable())
48+
{
49+
continue;
50+
}
51+
52+
count++;
53+
54+
// 处理交互对象
55+
if(doInteractives)
56+
{
57+
Handle(AIS_InteractiveObject) interactive =
58+
Handle(AIS_InteractiveObject)::DownCast(owner->Selectable());
59+
interactives.push_back(interactive); // 空 Handle 表示 nullptr
60+
}
61+
62+
// 处理形状
63+
if(doShapes)
64+
{
65+
Handle(StdSelect_BRepOwner) brepOwner =
66+
Handle(StdSelect_BRepOwner)::DownCast(owner);
67+
if(!brepOwner.IsNull() && brepOwner->HasShape())
68+
{
69+
shapes.push_back(brepOwner->Shape());
70+
}
71+
else
72+
{
73+
shapes.push_back(TopoDS_Shape()); // 空形状表示 nullptr
74+
}
75+
}
76+
}
77+
78+
return count;
79+
}

src/Occt/OcctHelper/AisHelper.hxx

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -19,53 +19,8 @@ public:
1919
// 静态函数:从选择器中获取拾取的交互对象和形状
2020
static int GetPickedFromSelector(const Handle(StdSelect_ViewerSelector3d)& selector,
2121
std::vector<Handle(AIS_InteractiveObject)>& interactives,
22-
std::vector<TopoDS_Shape>& shapes)
23-
{
24-
int count = 0;
25-
bool doInteractives = !interactives.empty();
26-
bool doShapes = !shapes.empty();
22+
std::vector<TopoDS_Shape>& shapes);
2723

28-
// 清空输出向量
29-
interactives.clear();
30-
shapes.clear();
31-
32-
// 遍历拾取结果
33-
for(Standard_Integer aPickIter = 1; aPickIter <= selector->NbPicked(); ++aPickIter)
34-
{
35-
Handle(SelectMgr_EntityOwner) owner = selector->Picked(aPickIter);
36-
if(owner.IsNull() || !owner->HasSelectable())
37-
{
38-
continue;
39-
}
40-
41-
count++;
42-
43-
// 处理交互对象
44-
if(doInteractives)
45-
{
46-
Handle(AIS_InteractiveObject) interactive =
47-
Handle(AIS_InteractiveObject)::DownCast(owner->Selectable());
48-
interactives.push_back(interactive); // 空 Handle 表示 nullptr
49-
}
50-
51-
// 处理形状
52-
if(doShapes)
53-
{
54-
Handle(StdSelect_BRepOwner) brepOwner =
55-
Handle(StdSelect_BRepOwner)::DownCast(owner);
56-
if(!brepOwner.IsNull() && brepOwner->HasShape())
57-
{
58-
shapes.push_back(brepOwner->Shape());
59-
}
60-
else
61-
{
62-
shapes.push_back(TopoDS_Shape()); // 空形状表示 nullptr
63-
}
64-
}
65-
}
66-
67-
return count;
68-
}
6924
};
7025

7126
#endif // OCCT_OCCTHELPER_AISHELPER_H_

0 commit comments

Comments
 (0)