1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00
occt/src/XCAFDoc/XCAFDoc_LayerTool.cxx
dpasukhi a5a7b3185b Coding - Apply .clang-format formatting #286
Update empty method guards to new style with regex (see PR).
Used clang-format 18.1.8.
New actions to validate code formatting is added.
Update .clang-format with disabling of include sorting.
  It is temporary changes, then include will be sorted.
Apply formatting for /src and /tools folder.
The files with .hxx,.cxx,.lxx,.h,.pxx,.hpp,*.cpp extensions.
2025-01-26 00:43:57 +00:00

524 lines
17 KiB
C++

// Created on: 2000-10-02
// Created by: Pavel TELKOV
// Copyright (c) 2000-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <XCAFDoc_LayerTool.hxx>
#include <Standard_Type.hxx>
#include <TCollection_ExtendedString.hxx>
#include <TDataStd_Name.hxx>
#include <TDataStd_UAttribute.hxx>
#include <TDF_Attribute.hxx>
#include <TDF_ChildIDIterator.hxx>
#include <TDF_ChildIterator.hxx>
#include <TDF_Label.hxx>
#include <TDF_RelocationTable.hxx>
#include <TDF_Tool.hxx>
#include <TopoDS_Shape.hxx>
#include <XCAFDoc.hxx>
#include <XCAFDoc_DocumentTool.hxx>
#include <XCAFDoc_GraphNode.hxx>
#include <XCAFDoc_ShapeTool.hxx>
IMPLEMENT_DERIVED_ATTRIBUTE_WITH_TYPE(XCAFDoc_LayerTool, TDataStd_GenericEmpty, "xcaf", "LayerTool")
//=================================================================================================
XCAFDoc_LayerTool::XCAFDoc_LayerTool() {}
//=================================================================================================
Handle(XCAFDoc_LayerTool) XCAFDoc_LayerTool::Set(const TDF_Label& L)
{
Handle(XCAFDoc_LayerTool) A;
if (!L.FindAttribute(XCAFDoc_LayerTool::GetID(), A))
{
A = new XCAFDoc_LayerTool();
L.AddAttribute(A);
A->myShapeTool = XCAFDoc_DocumentTool::ShapeTool(L);
}
return A;
}
//=================================================================================================
const Standard_GUID& XCAFDoc_LayerTool::GetID()
{
static Standard_GUID LayerTblID("efd212f4-6dfd-11d4-b9c8-0060b0ee281b");
return LayerTblID;
}
//=================================================================================================
TDF_Label XCAFDoc_LayerTool::BaseLabel() const
{
return Label();
}
//=================================================================================================
const Handle(XCAFDoc_ShapeTool)& XCAFDoc_LayerTool::ShapeTool()
{
if (myShapeTool.IsNull())
myShapeTool = XCAFDoc_DocumentTool::ShapeTool(Label());
return myShapeTool;
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::IsLayer(const TDF_Label& lab) const
{
TCollection_ExtendedString aLayer;
return GetLayer(lab, aLayer);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::GetLayer(const TDF_Label& lab,
TCollection_ExtendedString& aLayer) const
{
if (lab.Father() != Label())
return Standard_False;
// Handle(XCAFDoc_GraphNode) aGN;
// if (! lab.FindAttribute (XCAFDoc::LayerRefGUID(), aGN))
// return Standard_False;
Handle(TDataStd_Name) aName;
Standard_Boolean status = Standard_False;
if (lab.FindAttribute(TDataStd_Name::GetID(), aName))
{
aLayer = aName->Get();
status = Standard_True;
}
return status;
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::FindLayer(const TCollection_ExtendedString& aLayer,
TDF_Label& lab) const
{
lab = FindLayer(aLayer);
return (!lab.IsNull());
}
//=================================================================================================
TDF_Label XCAFDoc_LayerTool::FindLayer(const TCollection_ExtendedString& aLayer,
const Standard_Boolean theToFindWithProperty,
const Standard_Boolean theToFindVisible) const
{
TDF_ChildIterator it(Label());
TDF_Label lab;
for (; it.More(); it.Next())
{
TDF_Label aLabel = it.Value();
Handle(TDataStd_Name) aName;
if (aLabel.FindAttribute(TDataStd_Name::GetID(), aName) && (aName->Get().IsEqual(aLayer))
&& (!theToFindWithProperty
|| (theToFindWithProperty && (IsVisible(aLabel) == theToFindVisible))))
{
lab = aLabel;
break;
}
}
return lab;
}
//=================================================================================================
TDF_Label XCAFDoc_LayerTool::AddLayer(const TCollection_ExtendedString& theLayer) const
{
TDF_Label lab;
if (FindLayer(theLayer, lab))
return lab;
TDF_TagSource aTag;
TDF_Label aLabel = aTag.NewChild(Label());
Handle(TDataStd_Name) aName = new TDataStd_Name;
aName->Set(aLabel, theLayer);
return aLabel;
}
//=================================================================================================
TDF_Label XCAFDoc_LayerTool::AddLayer(const TCollection_ExtendedString& theLayer,
const Standard_Boolean theToFindVisible) const
{
TDF_Label lab = FindLayer(theLayer, Standard_True, theToFindVisible);
if (!lab.IsNull())
return lab;
TDF_TagSource aTag;
TDF_Label aLabel = aTag.NewChild(Label());
Handle(TDataStd_Name) aName = new TDataStd_Name;
aName->Set(aLabel, theLayer);
return aLabel;
}
//=================================================================================================
void XCAFDoc_LayerTool::RemoveLayer(const TDF_Label& lab) const
{
lab.ForgetAllAttributes(Standard_True);
}
//=================================================================================================
void XCAFDoc_LayerTool::GetLayerLabels(TDF_LabelSequence& Labels) const
{
Labels.Clear();
TDF_ChildIterator ChildIterator(Label());
for (; ChildIterator.More(); ChildIterator.Next())
{
TDF_Label L = ChildIterator.Value();
if (IsLayer(L))
Labels.Append(L);
}
}
//=================================================================================================
void XCAFDoc_LayerTool::SetLayer(const TDF_Label& L,
const TDF_Label& LayerL,
const Standard_Boolean shapeInOneLayer) const
{
if (shapeInOneLayer)
UnSetLayers(L);
Handle(XCAFDoc_GraphNode) FGNode;
Handle(XCAFDoc_GraphNode) ChGNode;
if (!LayerL.FindAttribute(XCAFDoc::LayerRefGUID(), FGNode))
{
FGNode = XCAFDoc_GraphNode::Set(LayerL);
}
if (!L.FindAttribute(XCAFDoc::LayerRefGUID(), ChGNode))
{
ChGNode = XCAFDoc_GraphNode::Set(L);
}
FGNode->SetGraphID(XCAFDoc::LayerRefGUID());
ChGNode->SetGraphID(XCAFDoc::LayerRefGUID());
FGNode->SetChild(ChGNode);
ChGNode->SetFather(FGNode);
}
//=================================================================================================
void XCAFDoc_LayerTool::SetLayer(const TDF_Label& L,
const TCollection_ExtendedString& aLayer,
const Standard_Boolean shapeInOneLayer) const
{
TDF_Label aLayerL = AddLayer(aLayer);
SetLayer(L, aLayerL, shapeInOneLayer);
}
//=================================================================================================
void XCAFDoc_LayerTool::UnSetLayers(const TDF_Label& L) const
{
Handle(XCAFDoc_GraphNode) ChGNode, FGNode;
if (L.FindAttribute(XCAFDoc::LayerRefGUID(), ChGNode))
{
while (ChGNode->NbFathers() != 0)
{
FGNode = ChGNode->GetFather(1);
FGNode->UnSetChild(ChGNode);
// ChGNode->GetFather(1)->UnSetChild(ChGNode);
}
L.ForgetAttribute(XCAFDoc::LayerRefGUID());
}
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TDF_Label& L,
const TCollection_ExtendedString& aLayer) const
{
TDF_Label alab;
if (!FindLayer(aLayer, alab))
return Standard_False;
return UnSetOneLayer(L, alab);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TDF_Label& L,
const TDF_Label& aLayerL) const
{
Handle(XCAFDoc_GraphNode) FGNode, ChGNode;
if (!L.FindAttribute(XCAFDoc::LayerRefGUID(), ChGNode))
return Standard_False;
if (!aLayerL.FindAttribute(XCAFDoc::LayerRefGUID(), FGNode))
return Standard_False;
ChGNode->UnSetFather(FGNode);
return Standard_True;
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::IsSet(const TDF_Label& L,
const TCollection_ExtendedString& aLayer) const
{
Handle(XCAFDoc_GraphNode) Node;
Handle(TDataStd_Name) aName;
TDF_Label lab;
if (L.FindAttribute(XCAFDoc::LayerRefGUID(), Node) && (Node->NbFathers() != 0))
{
Standard_Integer i = 1;
for (; i <= Node->NbFathers(); i++)
{
lab = Node->GetFather(i)->Label();
if (lab.FindAttribute(TDataStd_Name::GetID(), aName) && (aName->Get().IsEqual(aLayer)))
return Standard_True;
}
}
return Standard_False;
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::IsSet(const TDF_Label& L, const TDF_Label& aLayerL) const
{
Handle(XCAFDoc_GraphNode) Node;
Handle(TDataStd_Name) aName;
TDF_Label lab;
if (L.FindAttribute(XCAFDoc::LayerRefGUID(), Node) && (Node->NbFathers() != 0))
{
Standard_Integer i = 1;
for (; i <= Node->NbFathers(); i++)
{
lab = Node->GetFather(i)->Label();
if (lab == aLayerL)
return Standard_True;
}
}
return Standard_False;
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TDF_Label& L,
Handle(TColStd_HSequenceOfExtendedString)& aLayerS)
{
aLayerS = GetLayers(L);
return (aLayerS->Length() != 0);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TDF_Label& L, TDF_LabelSequence& aLayerLS)
{
aLayerLS.Clear();
Handle(XCAFDoc_GraphNode) aGNode;
if (L.FindAttribute(XCAFDoc::LayerRefGUID(), aGNode))
{
for (Standard_Integer i = 1; i <= aGNode->NbFathers(); i++)
{
aLayerLS.Append(aGNode->GetFather(i)->Label());
}
}
return aLayerLS.Length() > 0;
}
//=================================================================================================
Handle(TColStd_HSequenceOfExtendedString) XCAFDoc_LayerTool::GetLayers(const TDF_Label& L)
{
Handle(TColStd_HSequenceOfExtendedString) aLayerS = new TColStd_HSequenceOfExtendedString;
TDF_LabelSequence aLayerLS;
if (GetLayers(L, aLayerLS))
{
for (Standard_Integer i = 1; i <= aLayerLS.Length(); ++i)
{
const TDF_Label& aLab = aLayerLS(i);
Handle(TDataStd_Name) aName;
if (aLab.FindAttribute(TDataStd_Name::GetID(), aName))
{
aLayerS->Append(aName->Get());
}
}
}
return aLayerS;
}
//=================================================================================================
void XCAFDoc_LayerTool::GetShapesOfLayer(const TDF_Label& theLayerL, TDF_LabelSequence& theShLabels)
{
theShLabels.Clear();
Handle(XCAFDoc_GraphNode) aGNode;
if (theLayerL.FindAttribute(XCAFDoc::LayerRefGUID(), aGNode))
{
for (Standard_Integer aChildInd = 1; aChildInd <= aGNode->NbChildren(); aChildInd++)
{
theShLabels.Append(aGNode->GetChild(aChildInd)->Label());
}
}
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::IsVisible(const TDF_Label& layerL) const
{
Handle(TDataStd_UAttribute) aUAttr;
return (!layerL.FindAttribute(XCAFDoc::InvisibleGUID(), aUAttr));
}
//=================================================================================================
void XCAFDoc_LayerTool::SetVisibility(const TDF_Label& layerL,
const Standard_Boolean isvisible) const
{
Handle(TDataStd_UAttribute) aUAttr;
if (!isvisible)
{
if (!layerL.FindAttribute(XCAFDoc::InvisibleGUID(), aUAttr))
{
TDataStd_UAttribute::Set(layerL, XCAFDoc::InvisibleGUID());
}
}
else
layerL.ForgetAttribute(XCAFDoc::InvisibleGUID());
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::SetLayer(const TopoDS_Shape& Sh,
const TDF_Label& LayerL,
const Standard_Boolean shapeInOneLayer)
{
TDF_Label aLab;
// PTV 22.01.2003 set layer for shape with location if it is necessary
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
SetLayer(aLab, LayerL, shapeInOneLayer);
return Standard_True;
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::SetLayer(const TopoDS_Shape& Sh,
const TCollection_ExtendedString& aLayer,
const Standard_Boolean shapeInOneLayer)
{
TDF_Label aLayerL = AddLayer(aLayer);
return SetLayer(Sh, aLayerL, shapeInOneLayer);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::UnSetLayers(const TopoDS_Shape& Sh)
{
TDF_Label aLab;
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
UnSetLayers(aLab);
return Standard_True;
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TopoDS_Shape& Sh,
const TCollection_ExtendedString& aLayer)
{
TDF_Label aLab;
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
return UnSetOneLayer(aLab, aLayer);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::UnSetOneLayer(const TopoDS_Shape& Sh, const TDF_Label& aLayerL)
{
TDF_Label aLab;
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
return UnSetOneLayer(aLab, aLayerL);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::IsSet(const TopoDS_Shape& Sh,
const TCollection_ExtendedString& aLayer)
{
TDF_Label aLab;
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
return IsSet(aLab, aLayer);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::IsSet(const TopoDS_Shape& Sh, const TDF_Label& aLayerL)
{
TDF_Label aLab;
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
return IsSet(aLab, aLayerL);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TopoDS_Shape& Sh,
Handle(TColStd_HSequenceOfExtendedString)& aLayerS)
{
TDF_Label aLab;
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
return GetLayers(aLab, aLayerS);
}
//=================================================================================================
Standard_Boolean XCAFDoc_LayerTool::GetLayers(const TopoDS_Shape& Sh, TDF_LabelSequence& aLayerLS)
{
TDF_Label aLab;
if (!myShapeTool->Search(Sh, aLab))
return Standard_False;
return GetLayers(aLab, aLayerLS);
}
//=================================================================================================
Handle(TColStd_HSequenceOfExtendedString) XCAFDoc_LayerTool::GetLayers(const TopoDS_Shape& Sh)
{
Handle(TColStd_HSequenceOfExtendedString) aLayerS = new TColStd_HSequenceOfExtendedString;
TDF_Label aLab;
if (myShapeTool->Search(Sh, aLab))
aLayerS = GetLayers(aLab);
return aLayerS;
}
//=================================================================================================
const Standard_GUID& XCAFDoc_LayerTool::ID() const
{
return GetID();
}
//=================================================================================================
void XCAFDoc_LayerTool::DumpJson(Standard_OStream& theOStream, Standard_Integer theDepth) const
{
OCCT_DUMP_TRANSIENT_CLASS_BEGIN(theOStream)
OCCT_DUMP_BASE_CLASS(theOStream, theDepth, TDF_Attribute)
TDF_LabelSequence aLabels;
GetLayerLabels(aLabels);
for (TDF_LabelSequence::Iterator aLayerLabelIt(aLabels); aLayerLabelIt.More();
aLayerLabelIt.Next())
{
TCollection_AsciiString aLayerLabel;
TDF_Tool::Entry(aLayerLabelIt.Value(), aLayerLabel);
OCCT_DUMP_FIELD_VALUE_STRING(theOStream, aLayerLabel)
}
}