Merge pull request #19907 from benj5378/getAttribute

Base: make getAttribute template
This commit is contained in:
Chris Hennes
2025-05-12 10:39:55 -05:00
committed by GitHub
64 changed files with 834 additions and 677 deletions

View File

@@ -921,60 +921,60 @@ void CenterLine::Restore(Base::XMLReader &reader)
// read my Element
reader.readElement("Start");
// get the value of my Attribute
m_start.x = reader.getAttributeAsFloat("X");
m_start.y = reader.getAttributeAsFloat("Y");
m_start.z = reader.getAttributeAsFloat("Z");
m_start.x = reader.getAttribute<double>("X");
m_start.y = reader.getAttribute<double>("Y");
m_start.z = reader.getAttribute<double>("Z");
reader.readElement("End");
m_end.x = reader.getAttributeAsFloat("X");
m_end.y = reader.getAttributeAsFloat("Y");
m_end.z = reader.getAttributeAsFloat("Z");
m_end.x = reader.getAttribute<double>("X");
m_end.y = reader.getAttribute<double>("Y");
m_end.z = reader.getAttribute<double>("Z");
reader.readElement("Mode");
m_mode = static_cast<Mode>(reader.getAttributeAsInteger("value"));
m_mode = reader.getAttribute<Mode>("value");
reader.readElement("HShift");
m_hShift = reader.getAttributeAsFloat("value");
m_hShift = reader.getAttribute<double>("value");
reader.readElement("VShift");
m_vShift = reader.getAttributeAsFloat("value");
m_vShift = reader.getAttribute<double>("value");
reader.readElement("Rotate");
m_rotate = reader.getAttributeAsFloat("value");
m_rotate = reader.getAttribute<double>("value");
reader.readElement("Extend");
m_extendBy = reader.getAttributeAsFloat("value");
m_extendBy = reader.getAttribute<double>("value");
reader.readElement("Type");
m_type = static_cast<Type>(reader.getAttributeAsInteger("value"));
m_type = reader.getAttribute<Type>("value");
reader.readElement("Flip");
m_flip2Line = (bool)reader.getAttributeAsInteger("value")==0?false:true;
m_flip2Line = reader.getAttribute<bool>("value") == 0;
reader.readElement("Faces");
int count = reader.getAttributeAsInteger("FaceCount");
int count = reader.getAttribute<long>("FaceCount");
int i = 0;
for ( ; i < count; i++) {
reader.readElement("Face");
std::string f = reader.getAttribute("value");
std::string f = reader.getAttribute<const char*>("value");
m_faces.push_back(f);
}
reader.readEndElement("Faces");
reader.readElement("Edges");
count = reader.getAttributeAsInteger("EdgeCount");
count = reader.getAttribute<long>("EdgeCount");
i = 0;
for ( ; i < count; i++) {
reader.readElement("Edge");
std::string e = reader.getAttribute("value");
std::string e = reader.getAttribute<const char*>("value");
m_edges.push_back(e);
}
reader.readEndElement("Edges");
reader.readElement("CLPoints");
count = reader.getAttributeAsInteger("CLPointCount");
count = reader.getAttribute<long>("CLPointCount");
i = 0;
for ( ; i < count; i++) {
reader.readElement("CLPoint");
std::string p = reader.getAttribute("value");
std::string p = reader.getAttribute<const char*>("value");
m_verts.push_back(p);
}
reader.readEndElement("CLPoints");
@@ -982,20 +982,20 @@ void CenterLine::Restore(Base::XMLReader &reader)
// style is deprecated in favour of line number, but we still save and restore it
// to avoid problems with old documents.
reader.readElement("Style");
m_format.setStyle(reader.getAttributeAsInteger("value"));
m_format.setStyle(reader.getAttribute<long>("value"));
reader.readElement("Weight");
m_format.setWidth(reader.getAttributeAsFloat("value"));
m_format.setWidth(reader.getAttribute<double>("value"));
reader.readElement("Color");
std::string tempHex = reader.getAttribute("value");
std::string tempHex = reader.getAttribute<const char*>("value");
Base::Color tempColor;
tempColor.fromHexString(tempHex);
m_format.setColor(tempColor);
reader.readElement("Visible");
m_format.setVisible( (int)reader.getAttributeAsInteger("value")==0 ? false : true);
m_format.setVisible(reader.getAttribute<bool>("value"));
//stored geometry
reader.readElement("GeometryType");
GeomType gType = static_cast<GeomType>(reader.getAttributeAsInteger("value"));
GeomType gType = reader.getAttribute<GeomType>("value");
if (gType == GeomType::GENERIC) {
TechDraw::GenericPtr gen = std::make_shared<TechDraw::Generic> ();
gen->Restore(reader);
@@ -1024,7 +1024,7 @@ void CenterLine::Restore(Base::XMLReader &reader)
if(strcmp(reader.localName(),"LineNumber") == 0 ||
strcmp(reader.localName(),"ISOLineNumber") == 0 ) {
// this centerline has an LineNumber attribute
m_format.setLineNumber(reader.getAttributeAsInteger("value"));
m_format.setLineNumber(reader.getAttribute<long>("value"));
} else {
// LineNumber not found.
m_format.setLineNumber(LineFormat::InvalidLine);

View File

@@ -237,19 +237,19 @@ void CosmeticEdge::Restore(Base::XMLReader &reader)
}
// Base::Console().message("CE::Restore - reading elements\n");
reader.readElement("Style");
m_format.setStyle(reader.getAttributeAsInteger("value"));
m_format.setStyle(reader.getAttribute<long>("value"));
reader.readElement("Weight");
m_format.setWidth(reader.getAttributeAsFloat("value"));
m_format.setWidth(reader.getAttribute<double>("value"));
reader.readElement("Color");
std::string tempHex = reader.getAttribute("value");
std::string tempHex = reader.getAttribute<const char*>("value");
Base::Color tempColor;
tempColor.fromHexString(tempHex);
m_format.setColor(tempColor);
reader.readElement("Visible");
m_format.setVisible(reader.getAttributeAsInteger("value") != 0);
m_format.setVisible(reader.getAttribute<long>("value") != 0);
reader.readElement("GeometryType");
GeomType gType = static_cast<GeomType>(reader.getAttributeAsInteger("value"));
GeomType gType = reader.getAttribute<GeomType>("value");
if (gType == GeomType::GENERIC) {
TechDraw::GenericPtr gen = std::make_shared<TechDraw::Generic> ();
@@ -283,7 +283,7 @@ void CosmeticEdge::Restore(Base::XMLReader &reader)
if (reader.readNextElement()) {
if(strcmp(reader.localName(),"LineNumber") == 0 ) {
// this CosmeticEdge has an LineNumber attribute
m_format.setLineNumber(reader.getAttributeAsInteger("value"));
m_format.setLineNumber(reader.getAttribute<long>("value"));
} else {
// LineNumber not found.
// TODO: line number should be set to DashedLineGenerator.fromQtStyle(m_format.m_style)
@@ -391,21 +391,21 @@ void GeomFormat::Restore(Base::XMLReader &reader)
// read my Element
reader.readElement("GeomIndex");
// get the value of my Attribute
m_geomIndex = reader.getAttributeAsInteger("value");
m_geomIndex = reader.getAttribute<long>("value");
// style is deprecated in favour of line number, but we still save and restore it
// to avoid problems with old documents.
reader.readElement("Style");
m_format.setStyle(reader.getAttributeAsInteger("value"));
m_format.setStyle(reader.getAttribute<long>("value"));
reader.readElement("Weight");
m_format.setWidth(reader.getAttributeAsFloat("value"));
m_format.setWidth(reader.getAttribute<double>("value"));
reader.readElement("Color");
std::string tempHex = reader.getAttribute("value");
std::string tempHex = reader.getAttribute<const char*>("value");
Base::Color tempColor;
tempColor.fromHexString(tempHex);
m_format.setColor(tempColor);
reader.readElement("Visible");
m_format.setVisible((int)reader.getAttributeAsInteger("value") == 0 ? false : true);
m_format.setVisible(reader.getAttribute<bool>("value"));
// older documents may not have the LineNumber element, so we need to check the
// next entry. if it is a start element, then we check if it is a start element
// for LineNumber.
@@ -414,7 +414,7 @@ void GeomFormat::Restore(Base::XMLReader &reader)
if (reader.readNextElement()) {
if(strcmp(reader.localName(),"LineNumber") == 0 ||
strcmp(reader.localName(),"ISOLineNumber") == 0 ) { // this GeomFormat has an LineNumber attribute
m_format.setLineNumber(reader.getAttributeAsInteger("value"));
m_format.setLineNumber(reader.getAttribute<long>("value"));
} else {
// LineNumber not found.
// TODO: line number should be set to DashedLineGenerator.fromQtStyle(m_format.m_style),

View File

@@ -136,20 +136,20 @@ void CosmeticVertex::Restore(Base::XMLReader &reader)
}
TechDraw::Vertex::Restore(reader);
reader.readElement("PermaPoint");
permaPoint.x = reader.getAttributeAsFloat("X");
permaPoint.y = reader.getAttributeAsFloat("Y");
permaPoint.z = reader.getAttributeAsFloat("Z");
permaPoint.x = reader.getAttribute<double>("X");
permaPoint.y = reader.getAttribute<double>("Y");
permaPoint.z = reader.getAttribute<double>("Z");
reader.readElement("LinkGeom");
linkGeom = reader.getAttributeAsInteger("value");
linkGeom = reader.getAttribute<long>("value");
reader.readElement("Color");
std::string temp = reader.getAttribute("value");
std::string temp = reader.getAttribute<const char*>("value");
color.fromHexString(temp);
reader.readElement("Size");
size = reader.getAttributeAsFloat("value");
size = reader.getAttribute<double>("value");
reader.readElement("Style");
style = reader.getAttributeAsInteger("value");
style = reader.getAttribute<long>("value");
reader.readElement("Visible");
visible = (int)reader.getAttributeAsInteger("value")==0?false:true;
visible = reader.getAttribute<bool>("value");
Tag::Restore(reader);
}

View File

@@ -260,25 +260,25 @@ void BaseGeom::Save(Base::Writer &writer) const
void BaseGeom::Restore(Base::XMLReader &reader)
{
reader.readElement("GeomType");
geomType = static_cast<GeomType>(reader.getAttributeAsInteger("value"));
geomType = reader.getAttribute<GeomType>("value");
reader.readElement("ExtractType");
extractType = static_cast<ExtractionType>(reader.getAttributeAsInteger("value"));
extractType = reader.getAttribute<ExtractionType>("value");
reader.readElement("EdgeClass");
classOfEdge = static_cast<EdgeClass>(reader.getAttributeAsInteger("value"));
classOfEdge = reader.getAttribute<EdgeClass>("value");
reader.readElement("HLRVisible");
hlrVisible = reader.getAttributeAsInteger("value") != 0;
hlrVisible = reader.getAttribute<bool>("value");
reader.readElement("Reversed");
reversed = reader.getAttributeAsInteger("value") != 0;
reversed = reader.getAttribute<bool>("value");
reader.readElement("Ref3D");
ref3D = reader.getAttributeAsInteger("value");
ref3D = reader.getAttribute<long>("value");
reader.readElement("Cosmetic");
cosmetic = reader.getAttributeAsInteger("value") != 0;
cosmetic = reader.getAttribute<bool>("value");
reader.readElement("Source");
m_source = static_cast<SourceType>(reader.getAttributeAsInteger("value"));
m_source = reader.getAttribute<SourceType>("value");
reader.readElement("SourceIndex");
m_sourceIndex = reader.getAttributeAsInteger("value");
m_sourceIndex = reader.getAttribute<long>("value");
reader.readElement("CosmeticTag");
cosmeticTag = reader.getAttribute("value");
cosmeticTag = reader.getAttribute<const char*>("value");
}
std::vector<Base::Vector3d> BaseGeom::findEndPoints()
@@ -768,12 +768,12 @@ void Circle::Restore(Base::XMLReader &reader)
// read my Element
reader.readElement("Center");
// get the value of my Attribute
center.x = reader.getAttributeAsFloat("X");
center.y = reader.getAttributeAsFloat("Y");
center.z = reader.getAttributeAsFloat("Z");
center.x = reader.getAttribute<double>("X");
center.y = reader.getAttribute<double>("Y");
center.z = reader.getAttribute<double>("Z");
reader.readElement("Radius");
radius = reader.getAttributeAsFloat("value");
radius = reader.getAttribute<double>("value");
}
AOC::AOC(const TopoDS_Edge &e) : Circle(e)
@@ -979,26 +979,26 @@ void AOC::Restore(Base::XMLReader &reader)
{
Circle::Restore(reader);
reader.readElement("Start");
startPnt.x = reader.getAttributeAsFloat("X");
startPnt.y = reader.getAttributeAsFloat("Y");
startPnt.z = reader.getAttributeAsFloat("Z");
startPnt.x = reader.getAttribute<double>("X");
startPnt.y = reader.getAttribute<double>("Y");
startPnt.z = reader.getAttribute<double>("Z");
reader.readElement("End");
endPnt.x = reader.getAttributeAsFloat("X");
endPnt.y = reader.getAttributeAsFloat("Y");
endPnt.z = reader.getAttributeAsFloat("Z");
endPnt.x = reader.getAttribute<double>("X");
endPnt.y = reader.getAttribute<double>("Y");
endPnt.z = reader.getAttribute<double>("Z");
reader.readElement("Middle");
midPnt.x = reader.getAttributeAsFloat("X");
midPnt.y = reader.getAttributeAsFloat("Y");
midPnt.z = reader.getAttributeAsFloat("Z");
midPnt.x = reader.getAttribute<double>("X");
midPnt.y = reader.getAttribute<double>("Y");
midPnt.z = reader.getAttribute<double>("Z");
reader.readElement("StartAngle");
startAngle = reader.getAttributeAsFloat("value");
startAngle = reader.getAttribute<double>("value");
reader.readElement("EndAngle");
endAngle = reader.getAttributeAsFloat("value");
endAngle = reader.getAttribute<double>("value");
reader.readElement("Clockwise");
cw = (int)reader.getAttributeAsInteger("value")==0?false:true;
cw = reader.getAttribute<bool>("value");
reader.readElement("Large");
largeArc = (int)reader.getAttributeAsInteger("value")==0?false:true;
largeArc = reader.getAttribute<bool>("value");
}
//! Generic is a multiline
@@ -1072,14 +1072,14 @@ void Generic::Restore(Base::XMLReader &reader)
{
BaseGeom::Restore(reader);
reader.readElement("Points");
int stop = reader.getAttributeAsInteger("PointsCount");
int stop = reader.getAttribute<long>("PointsCount");
int i = 0;
for ( ; i < stop; i++) {
reader.readElement("Point");
Base::Vector3d p;
p.x = reader.getAttributeAsFloat("X");
p.y = reader.getAttributeAsFloat("Y");
p.z = reader.getAttributeAsFloat("Z");
p.x = reader.getAttribute<double>("X");
p.y = reader.getAttribute<double>("Y");
p.z = reader.getAttribute<double>("Z");
points.push_back(p);
}
reader.readEndElement("Points");
@@ -1341,28 +1341,28 @@ void Vertex::Save(Base::Writer &writer) const
void Vertex::Restore(Base::XMLReader &reader)
{
reader.readElement("Point");
pnt.x = reader.getAttributeAsFloat("X");
pnt.y = reader.getAttributeAsFloat("Y");
pnt.z = reader.getAttributeAsFloat("Z");
pnt.x = reader.getAttribute<double>("X");
pnt.y = reader.getAttribute<double>("Y");
pnt.z = reader.getAttribute<double>("Z");
reader.readElement("Extract");
extractType = static_cast<ExtractionType>(reader.getAttributeAsInteger("value"));
extractType = reader.getAttribute<ExtractionType>("value");
// reader.readElement("Visible");
// hlrVisible = (bool)reader.getAttributeAsInteger("value")==0?false:true;
// hlrVisible = reader.getAttribute<bool>("value");
reader.readElement("Ref3D");
ref3D = reader.getAttributeAsInteger("value");
ref3D = reader.getAttribute<long>("value");
reader.readElement("IsCenter");
hlrVisible = reader.getAttributeAsInteger("value") != 0;
hlrVisible = reader.getAttribute<bool>("value");
reader.readElement("Cosmetic");
cosmetic = reader.getAttributeAsInteger("value") != 0;
cosmetic = reader.getAttribute<bool>("value");
reader.readElement("CosmeticLink");
cosmeticLink = reader.getAttributeAsInteger("value");
cosmeticLink = reader.getAttribute<long>("value");
reader.readElement("CosmeticTag");
cosmeticTag = reader.getAttribute("value");
cosmeticTag = reader.getAttribute<const char*>("value");
//will restore read to eof looking for "Reference" in old docs?? YES!!
// reader.readElement("Reference");
// m_reference = (bool)reader.getAttributeAsInteger("value")==0?false:true;
// m_reference = reader.getAttribute<bool>("value");
Tag::Restore(reader, "VertexTag");

View File

@@ -147,12 +147,12 @@ void PropertyCenterLineList::Restore(Base::XMLReader &reader)
reader.clearPartialRestoreObject();
reader.readElement("CenterLineList");
// get the value of my attribute
int count = reader.getAttributeAsInteger("count");
int count = reader.getAttribute<long>("count");
std::vector<CenterLine*> values;
values.reserve(count);
for (int i = 0; i < count; i++) {
reader.readElement("CenterLine");
const char* TypeName = reader.getAttribute("type");
const char* TypeName = reader.getAttribute<const char*>("type");
CenterLine *newG = static_cast<CenterLine *>(Base::Type::fromName(TypeName).createInstance());
newG->Restore(reader);

View File

@@ -151,12 +151,12 @@ void PropertyCosmeticEdgeList::Restore(Base::XMLReader &reader)
reader.clearPartialRestoreObject();
reader.readElement("CosmeticEdgeList");
// get the value of my attribute
int count = reader.getAttributeAsInteger("count");
int count = reader.getAttribute<long>("count");
std::vector<CosmeticEdge*> values;
values.reserve(count);
for (int i = 0; i < count; i++) {
reader.readElement("CosmeticEdge");
const char* TypeName = reader.getAttribute("type");
const char* TypeName = reader.getAttribute<const char*>("type");
CosmeticEdge *newG = static_cast<CosmeticEdge *>(Base::Type::fromName(TypeName).createInstance());
newG->Restore(reader);

View File

@@ -149,12 +149,12 @@ void PropertyCosmeticVertexList::Restore(Base::XMLReader &reader)
reader.clearPartialRestoreObject();
reader.readElement("CosmeticVertexList");
// get the value of my attribute
int count = reader.getAttributeAsInteger("count");
int count = reader.getAttribute<long>("count");
std::vector<CosmeticVertex*> values;
values.reserve(count);
for (int i = 0; i < count; i++) {
reader.readElement("CosmeticVertex");
const char* TypeName = reader.getAttribute("type");
const char* TypeName = reader.getAttribute<const char*>("type");
CosmeticVertex *newG = static_cast<CosmeticVertex *>(Base::Type::fromName(TypeName).createInstance());
newG->Restore(reader);

View File

@@ -161,12 +161,12 @@ void PropertyGeomFormatList::Restore(Base::XMLReader &reader)
reader.clearPartialRestoreObject();
reader.readElement("GeomFormatList");
// get the value of my attribute
int count = reader.getAttributeAsInteger("count");
int count = reader.getAttribute<long>("count");
std::vector<GeomFormat*> values;
values.reserve(count);
for (int i = 0; i < count; i++) {
reader.readElement("GeomFormat");
const char* TypeName = reader.getAttribute("type");
const char* TypeName = reader.getAttribute<const char*>("type");
GeomFormat *newG = static_cast<GeomFormat *>(Base::Type::fromName(TypeName).createInstance());
newG->Restore(reader);

View File

@@ -86,7 +86,7 @@ void Tag::Restore(Base::XMLReader& reader, std::string_view elementName)
{
// Setting elementName is only for backwards compatibility!
reader.readElement(elementName.data());
std::string temp = reader.getAttribute("value");
std::string temp = reader.getAttribute<const char*>("value");
boost::uuids::string_generator gen;
boost::uuids::uuid u1 = gen(temp);
tag = u1;