File indexing completed on 2026-09-28 09:19:36
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef _BRepGraph_RefsIterator_HeaderFile
0015 #define _BRepGraph_RefsIterator_HeaderFile
0016
0017 #include <BRepGraph.hxx>
0018 #include <BRepGraph_RefsView.hxx>
0019 #include <BRepGraph_TopoView.hxx>
0020 #include <BRepGraphInc_Storage.hxx>
0021 #include <NCollection_ForwardRange.hxx>
0022 #include <NCollection_LinearVector.hxx>
0023 #include <type_traits>
0024
0025
0026
0027
0028
0029
0030 namespace BRepGraph_RefsIterator
0031 {
0032 namespace Detail
0033 {
0034 template <typename T>
0035 struct RefTraits;
0036
0037 template <>
0038 struct RefTraits<BRepGraphInc::ShellRef>
0039 {
0040 using RefId = BRepGraph_ShellRefId;
0041
0042 static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Shells().Nb(); }
0043
0044 static const BRepGraphInc::ShellRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0045 {
0046 return theGraph.Refs().Shells().Entry(theRefId);
0047 }
0048 };
0049
0050 template <>
0051 struct RefTraits<BRepGraphInc::FaceRef>
0052 {
0053 using RefId = BRepGraph_FaceRefId;
0054
0055 static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Faces().Nb(); }
0056
0057 static const BRepGraphInc::FaceRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0058 {
0059 return theGraph.Refs().Faces().Entry(theRefId);
0060 }
0061 };
0062
0063 template <>
0064 struct RefTraits<BRepGraphInc::WireRef>
0065 {
0066 using RefId = BRepGraph_WireRefId;
0067
0068 static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Wires().Nb(); }
0069
0070 static const BRepGraphInc::WireRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0071 {
0072 return theGraph.Refs().Wires().Entry(theRefId);
0073 }
0074 };
0075
0076 template <>
0077 struct RefTraits<BRepGraphInc::VertexRef>
0078 {
0079 using RefId = BRepGraph_VertexRefId;
0080
0081 static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Vertices().Nb(); }
0082
0083 static const BRepGraphInc::VertexRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0084 {
0085 return theGraph.Refs().Vertices().Entry(theRefId);
0086 }
0087 };
0088
0089 template <>
0090 struct RefTraits<BRepGraphInc::SolidRef>
0091 {
0092 using RefId = BRepGraph_SolidRefId;
0093
0094 static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Solids().Nb(); }
0095
0096 static const BRepGraphInc::SolidRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0097 {
0098 return theGraph.Refs().Solids().Entry(theRefId);
0099 }
0100 };
0101
0102 template <>
0103 struct RefTraits<BRepGraphInc::ChildRef>
0104 {
0105 using RefId = BRepGraph_ChildRefId;
0106
0107 static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Children().Nb(); }
0108
0109 static const BRepGraphInc::ChildRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0110 {
0111 return theGraph.Refs().Children().Entry(theRefId);
0112 }
0113 };
0114
0115 template <>
0116 struct RefTraits<BRepGraphInc::OccurrenceRef>
0117 {
0118 using RefId = BRepGraph_OccurrenceRefId;
0119
0120 static uint32_t Count(const BRepGraph& theGraph) { return theGraph.Refs().Occurrences().Nb(); }
0121
0122 static const BRepGraphInc::OccurrenceRef& Get(const BRepGraph& theGraph, const RefId theRefId)
0123 {
0124 return theGraph.Refs().Occurrences().Entry(theRefId);
0125 }
0126 };
0127 }
0128
0129 template <typename RefType, bool TheFullTraverse = false>
0130 class RefIterator
0131 {
0132 public:
0133 using Traits = Detail::RefTraits<RefType>;
0134 using RefId = typename Traits::RefId;
0135
0136 RefIterator(const BRepGraph& theGraph)
0137 : myGraph(theGraph),
0138 myLength(RefId(Traits::Count(theGraph)))
0139 {
0140 skipRemoved();
0141 }
0142
0143 RefIterator(const BRepGraph& theGraph, const RefId theStartId)
0144 : myGraph(theGraph),
0145 myCurrent(theStartId),
0146 myLength(RefId(Traits::Count(theGraph)))
0147 {
0148 if (myCurrent < RefId::Start())
0149 {
0150 myCurrent = RefId::Start();
0151 }
0152 skipRemoved();
0153 }
0154
0155 [[nodiscard]] bool More() const { return myCurrent < myLength; }
0156
0157 void Next()
0158 {
0159 ++myCurrent;
0160 skipRemoved();
0161 }
0162
0163 [[nodiscard]] const RefType& Current() const { return Traits::Get(myGraph, myCurrent); }
0164
0165 [[nodiscard]] RefId CurrentId() const { return myCurrent; }
0166
0167 NCollection_ForwardRangeIterator<RefIterator> begin()
0168 {
0169 return NCollection_ForwardRangeIterator<RefIterator>(this);
0170 }
0171
0172 NCollection_ForwardRangeSentinel end() const { return NCollection_ForwardRangeSentinel{}; }
0173
0174 private:
0175 void skipRemoved()
0176 {
0177 if constexpr (!TheFullTraverse)
0178 {
0179 while (myCurrent < myLength && myCurrent.IsRemoved(myGraph))
0180 {
0181 ++myCurrent;
0182 }
0183 }
0184 }
0185
0186 const BRepGraph& myGraph;
0187 RefId myCurrent = RefId::Start();
0188 RefId myLength;
0189 };
0190
0191 template <typename ParentIdT, typename RefIdT, typename RefEntryT>
0192 struct BaseTraits
0193 {
0194 using ParentId = ParentIdT;
0195 using RefId = RefIdT;
0196 using RefEntry = RefEntryT;
0197
0198 static constexpr bool THE_IS_DIRECT = false;
0199 };
0200
0201 struct ShellOfSolidTraits
0202 : public BaseTraits<BRepGraph_SolidId, BRepGraph_ShellRefId, BRepGraphInc::ShellRef>
0203 {
0204 using ChildId = BRepGraph_ShellId;
0205
0206 static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0207 {
0208 return theParent.IsValid(theGraph.Topo().Solids().Nb()) && !theParent.IsRemoved(theGraph);
0209 }
0210
0211 static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0212 const ParentId theParent)
0213 {
0214 return theGraph.Topo().Solids().Relations(theParent).ShellRefIds;
0215 }
0216
0217 static const BRepGraphInc::ShellRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0218 {
0219 return theGraph.Refs().Shells().Entry(theRefId);
0220 }
0221
0222 static BRepGraph_ShellId ChildIdOf(const BRepGraph&, const BRepGraphInc::ShellRef& theRef)
0223 {
0224 return theRef.ChildShellId;
0225 }
0226 };
0227
0228 struct FaceOfShellTraits
0229 : public BaseTraits<BRepGraph_ShellId, BRepGraph_FaceRefId, BRepGraphInc::FaceRef>
0230 {
0231 using ChildId = BRepGraph_FaceId;
0232
0233 static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0234 {
0235 return theParent.IsValid(theGraph.Topo().Shells().Nb()) && !theParent.IsRemoved(theGraph);
0236 }
0237
0238 static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0239 const ParentId theParent)
0240 {
0241 return theGraph.Topo().Shells().Relations(theParent).FaceRefIds;
0242 }
0243
0244 static const BRepGraphInc::FaceRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0245 {
0246 return theGraph.Refs().Faces().Entry(theRefId);
0247 }
0248
0249 static BRepGraph_FaceId ChildIdOf(const BRepGraph&, const BRepGraphInc::FaceRef& theRef)
0250 {
0251 return theRef.ChildFaceId;
0252 }
0253 };
0254
0255 struct WireOfFaceTraits
0256 : public BaseTraits<BRepGraph_FaceId, BRepGraph_WireRefId, BRepGraphInc::WireRef>
0257 {
0258 using ChildId = BRepGraph_WireId;
0259
0260 static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0261 {
0262 return theParent.IsValid(theGraph.Topo().Faces().Nb()) && !theParent.IsRemoved(theGraph);
0263 }
0264
0265 static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0266 const ParentId theParent)
0267 {
0268 return theGraph.Topo().Faces().Relations(theParent).WireRefIds;
0269 }
0270
0271 static const BRepGraphInc::WireRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0272 {
0273 return theGraph.Refs().Wires().Entry(theRefId);
0274 }
0275
0276 static BRepGraph_WireId ChildIdOf(const BRepGraph&, const BRepGraphInc::WireRef& theRef)
0277 {
0278 return theRef.ChildWireId;
0279 }
0280 };
0281
0282 struct CoEdgeOfWireTraits
0283 : public BaseTraits<BRepGraph_WireId, BRepGraph_CoEdgeId, BRepGraphInc::CoEdgeDef>
0284 {
0285 using ChildId = BRepGraph_CoEdgeId;
0286
0287 static constexpr bool THE_IS_DIRECT = true;
0288
0289 static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0290 {
0291 return theParent.IsValid(theGraph.Topo().Wires().Nb()) && !theParent.IsRemoved(theGraph);
0292 }
0293
0294 static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0295 const ParentId theParent)
0296 {
0297 return theGraph.Topo().Wires().Relations(theParent).CoEdgeIds;
0298 }
0299
0300 static const BRepGraphInc::CoEdgeDef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0301 {
0302 return theGraph.Topo().CoEdges().Definition(theRefId);
0303 }
0304 };
0305
0306 struct SolidOfCompSolidTraits
0307 : public BaseTraits<BRepGraph_CompSolidId, BRepGraph_SolidRefId, BRepGraphInc::SolidRef>
0308 {
0309 using ChildId = BRepGraph_SolidId;
0310
0311 static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0312 {
0313 return theParent.IsValid(theGraph.Topo().CompSolids().Nb()) && !theParent.IsRemoved(theGraph);
0314 }
0315
0316 static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0317 const ParentId theParent)
0318 {
0319 return theGraph.Topo().CompSolids().Relations(theParent).SolidRefIds;
0320 }
0321
0322 static const BRepGraphInc::SolidRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0323 {
0324 return theGraph.Refs().Solids().Entry(theRefId);
0325 }
0326
0327 static BRepGraph_SolidId ChildIdOf(const BRepGraph&, const BRepGraphInc::SolidRef& theRef)
0328 {
0329 return theRef.ChildSolidId;
0330 }
0331 };
0332
0333 struct ChildOfCompoundTraits
0334 : public BaseTraits<BRepGraph_CompoundId, BRepGraph_ChildRefId, BRepGraphInc::ChildRef>
0335 {
0336 using ChildId = BRepGraph_NodeId;
0337
0338 static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0339 {
0340 return theParent.IsValid(theGraph.Topo().Compounds().Nb()) && !theParent.IsRemoved(theGraph);
0341 }
0342
0343 static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0344 const ParentId theParent)
0345 {
0346 return theGraph.Topo().Compounds().Relations(theParent).ChildRefIds;
0347 }
0348
0349 static const BRepGraphInc::ChildRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0350 {
0351 return theGraph.Refs().Children().Entry(theRefId);
0352 }
0353
0354 static BRepGraph_NodeId ChildIdOf(const BRepGraph&, const BRepGraphInc::ChildRef& theRef)
0355 {
0356 return theRef.ChildNodeId;
0357 }
0358 };
0359
0360 struct OccurrenceOfProductTraits
0361 : public BaseTraits<BRepGraph_ProductId, BRepGraph_OccurrenceRefId, BRepGraphInc::OccurrenceRef>
0362 {
0363 using ChildId = BRepGraph_OccurrenceId;
0364
0365 static bool IsParentValid(const BRepGraph& theGraph, const ParentId theParent)
0366 {
0367 return theParent.IsValid(theGraph.Topo().Products().Nb()) && !theParent.IsRemoved(theGraph);
0368 }
0369
0370 static const NCollection_LinearVector<RefId>& RefIds(const BRepGraph& theGraph,
0371 const ParentId theParent)
0372 {
0373 return theGraph.Topo().Products().Relations(theParent).OccurrenceRefIds;
0374 }
0375
0376 static const BRepGraphInc::OccurrenceRef& Ref(const BRepGraph& theGraph, const RefId theRefId)
0377 {
0378 return theGraph.Refs().Occurrences().Entry(theRefId);
0379 }
0380
0381 static BRepGraph_OccurrenceId ChildIdOf(const BRepGraph&,
0382 const BRepGraphInc::OccurrenceRef& theRef)
0383 {
0384 return theRef.ChildOccurrenceId;
0385 }
0386 };
0387
0388 template <typename TraitsT>
0389 class RefsOfParent
0390 {
0391 public:
0392 using ParentId = typename TraitsT::ParentId;
0393 using RefId = typename TraitsT::RefId;
0394 using ChildId = typename TraitsT::ChildId;
0395
0396 RefsOfParent(const BRepGraph& theGraph, const ParentId theParent)
0397 : myGraph(theGraph)
0398 {
0399 if (!TraitsT::IsParentValid(theGraph, theParent))
0400 {
0401 return;
0402 }
0403
0404 myRefIds = &TraitsT::RefIds(theGraph, theParent);
0405 myLength = static_cast<uint32_t>(myRefIds->Size());
0406 if constexpr (std::is_convertible_v<RefId, BRepGraph_NodeId>)
0407 {
0408 myNbRefs = theGraph.Topo().Gen().Nb(BRepGraph_NodeId(RefId()).NodeKind);
0409 }
0410 else
0411 {
0412 myNbRefs = theGraph.Refs().Gen().Nb(BRepGraph_RefId(RefId()).RefKind);
0413 }
0414
0415 if constexpr (TraitsT::THE_IS_DIRECT)
0416 {
0417 myNbChildren = myNbRefs;
0418 }
0419 else
0420 {
0421 if constexpr (!std::is_same_v<ChildId, BRepGraph_NodeId>)
0422 {
0423 myNbChildren = theGraph.Topo().Gen().Nb(BRepGraph_NodeId(ChildId()).NodeKind);
0424 }
0425 }
0426 skipRemoved();
0427 }
0428
0429 [[nodiscard]] bool More() const { return myRefIds != nullptr && myIndex < myLength; }
0430
0431 void Next()
0432 {
0433 ++myIndex;
0434
0435 if (myRefIds != nullptr && myIndex < myLength)
0436 {
0437 const RefId aRefId = myRefIds->Value(static_cast<size_t>(myIndex));
0438 if (aRefId.IsValid(myNbRefs) && !aRefId.IsRemoved(myGraph))
0439 {
0440 if constexpr (TraitsT::THE_IS_DIRECT)
0441 {
0442 return;
0443 }
0444 else
0445 {
0446 const typename TraitsT::RefEntry& aRef = TraitsT::Ref(myGraph, aRefId);
0447 const auto aChildId = TraitsT::ChildIdOf(myGraph, aRef);
0448 if constexpr (std::is_same_v<ChildId, BRepGraph_NodeId>)
0449 {
0450 if (myGraph.Topo().Gen().IsActive(aChildId))
0451 return;
0452 }
0453 else if (aChildId.IsValid(myNbChildren) && !aChildId.IsRemoved(myGraph))
0454 {
0455 return;
0456 }
0457 }
0458 }
0459 }
0460 skipRemoved();
0461 }
0462
0463 [[nodiscard]] RefId CurrentId() const
0464 {
0465 Standard_ASSERT_VOID(More(), "RefsOfParent::CurrentId() called on exhausted iterator");
0466 return myRefIds->Value(static_cast<size_t>(myIndex));
0467 }
0468
0469 [[nodiscard]] uint32_t Index() const { return myIndex; }
0470
0471
0472 NCollection_ForwardRangeIterator<RefsOfParent> begin()
0473 {
0474 return NCollection_ForwardRangeIterator<RefsOfParent>(this);
0475 }
0476
0477
0478 NCollection_ForwardRangeSentinel end() const { return NCollection_ForwardRangeSentinel{}; }
0479
0480 private:
0481 void skipRemoved()
0482 {
0483 while (myRefIds != nullptr && myIndex < myLength)
0484 {
0485 const RefId aRefId = myRefIds->Value(static_cast<size_t>(myIndex));
0486 if (aRefId.IsValid(myNbRefs) && !aRefId.IsRemoved(myGraph))
0487 {
0488 const auto aChildId = [&]() {
0489 if constexpr (TraitsT::THE_IS_DIRECT)
0490 {
0491 return aRefId;
0492 }
0493 else
0494 {
0495 const typename TraitsT::RefEntry& aRef = TraitsT::Ref(myGraph, aRefId);
0496 return TraitsT::ChildIdOf(myGraph, aRef);
0497 }
0498 }();
0499 if constexpr (std::is_same_v<ChildId, BRepGraph_NodeId>)
0500 {
0501 if (myGraph.Topo().Gen().IsActive(aChildId))
0502 {
0503 return;
0504 }
0505 }
0506 else if (aChildId.IsValid(myNbChildren) && !aChildId.IsRemoved(myGraph))
0507 {
0508 return;
0509 }
0510 }
0511 ++myIndex;
0512 }
0513 }
0514
0515 const BRepGraph& myGraph;
0516 const NCollection_LinearVector<RefId>* myRefIds = nullptr;
0517 uint32_t myIndex = 0;
0518 uint32_t myLength = 0;
0519 uint32_t myNbRefs = 0;
0520 uint32_t myNbChildren = 0;
0521 };
0522
0523
0524
0525
0526 class RefsVertexOfEdge
0527 {
0528 public:
0529 using RefId = BRepGraph_VertexRefId;
0530
0531 RefsVertexOfEdge(const BRepGraph& theGraph, const BRepGraph_EdgeId theEdgeId)
0532 : myGraph(theGraph)
0533 {
0534 if (!theEdgeId.IsValid(theGraph.Topo().Edges().Nb()) || theEdgeId.IsRemoved(theGraph))
0535 {
0536 return;
0537 }
0538
0539 myEdge = &theGraph.Topo().Edges().Definition(theEdgeId);
0540 myLength = 2u;
0541 myNbVertexRefs = theGraph.Refs().Vertices().Nb();
0542 myNbVertices = theGraph.Topo().Vertices().Nb();
0543 skipRemoved();
0544 }
0545
0546 [[nodiscard]] bool More() const { return myEdge != nullptr && myIndex < myLength; }
0547
0548 void Next()
0549 {
0550 ++myIndex;
0551 skipRemoved();
0552 }
0553
0554 [[nodiscard]] RefId CurrentId() const { return refIdAt(myIndex); }
0555
0556 [[nodiscard]] uint32_t Index() const { return myIndex; }
0557
0558
0559 NCollection_ForwardRangeIterator<RefsVertexOfEdge> begin()
0560 {
0561 return NCollection_ForwardRangeIterator<RefsVertexOfEdge>(this);
0562 }
0563
0564
0565 NCollection_ForwardRangeSentinel end() const { return NCollection_ForwardRangeSentinel{}; }
0566
0567 private:
0568 [[nodiscard]] RefId refIdAt(const uint32_t theIndex) const
0569 {
0570 if (theIndex == 0)
0571 {
0572 return myEdge->StartVertexRefId;
0573 }
0574 return myEdge->EndVertexRefId;
0575 }
0576
0577 void skipRemoved()
0578 {
0579 while (myEdge != nullptr && myIndex < myLength)
0580 {
0581 const RefId aRefId = refIdAt(myIndex);
0582 if (aRefId.IsValid(myNbVertexRefs) && !myGraph.Refs().Gen().IsRemoved(aRefId))
0583 {
0584 const BRepGraphInc::VertexRef& aRef = myGraph.Refs().Vertices().Entry(aRefId);
0585 if (!aRef.ChildVertexId.IsValid(myNbVertices) || aRef.ChildVertexId.IsRemoved(myGraph))
0586 {
0587 ++myIndex;
0588 continue;
0589 }
0590 return;
0591 }
0592 ++myIndex;
0593 }
0594 }
0595
0596 const BRepGraph& myGraph;
0597 const BRepGraphInc::EdgeDef* myEdge = nullptr;
0598 uint32_t myIndex = 0;
0599 uint32_t myLength = 0;
0600 uint32_t myNbVertexRefs = 0;
0601 uint32_t myNbVertices = 0;
0602 };
0603
0604 }
0605
0606 using BRepGraph_RefsShellOfSolid =
0607 BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::ShellOfSolidTraits>;
0608 using BRepGraph_RefsFaceOfShell =
0609 BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::FaceOfShellTraits>;
0610 using BRepGraph_RefsWireOfFace =
0611 BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::WireOfFaceTraits>;
0612 using BRepGraph_CoEdgesOfWire =
0613 BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::CoEdgeOfWireTraits>;
0614 using BRepGraph_RefsSolidOfCompSolid =
0615 BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::SolidOfCompSolidTraits>;
0616 using BRepGraph_RefsChildOfCompound =
0617 BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::ChildOfCompoundTraits>;
0618 using BRepGraph_RefsOccurrenceOfProduct =
0619 BRepGraph_RefsIterator::RefsOfParent<BRepGraph_RefsIterator::OccurrenceOfProductTraits>;
0620 using BRepGraph_RefsVertexOfEdge = BRepGraph_RefsIterator::RefsVertexOfEdge;
0621
0622 using BRepGraph_ShellRefIterator = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ShellRef>;
0623 using BRepGraph_FaceRefIterator = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::FaceRef>;
0624 using BRepGraph_WireRefIterator = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::WireRef>;
0625 using BRepGraph_VertexRefIterator = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::VertexRef>;
0626 using BRepGraph_SolidRefIterator = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::SolidRef>;
0627 using BRepGraph_ChildRefIterator = BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ChildRef>;
0628 using BRepGraph_OccurrenceRefIterator =
0629 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::OccurrenceRef>;
0630
0631 using BRepGraph_FullShellRefIterator =
0632 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ShellRef, true>;
0633 using BRepGraph_FullFaceRefIterator =
0634 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::FaceRef, true>;
0635 using BRepGraph_FullWireRefIterator =
0636 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::WireRef, true>;
0637 using BRepGraph_FullVertexRefIterator =
0638 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::VertexRef, true>;
0639 using BRepGraph_FullSolidRefIterator =
0640 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::SolidRef, true>;
0641 using BRepGraph_FullChildRefIterator =
0642 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::ChildRef, true>;
0643 using BRepGraph_FullOccurrenceRefIterator =
0644 BRepGraph_RefsIterator::RefIterator<BRepGraphInc::OccurrenceRef, true>;
0645
0646 #endif