Format obj and dae output predictably based on rfc notation of GlobalId. As discussed in https://sourceforge.net/p/ifcopenshell/discussion/1782717/thread/cbb0c8ca/

This commit is contained in:
Thomas Krijnen
2015-05-13 14:30:21 +00:00
parent b37a684eb9
commit 9bf9f82b3b
15 changed files with 176 additions and 115 deletions
+18 -2
View File
@@ -20,10 +20,14 @@
#ifndef IFCGEOMELEMENT_H
#define IFCGEOMELEMENT_H
#include <string>
#include <algorithm>
#include "../ifcparse/IfcGlobalId.h"
#include "../ifcgeom/IfcGeomRepresentation.h"
#include "../ifcgeom/IfcGeomIteratorSettings.h"
namespace IfcGeom {
template <typename P>
@@ -73,6 +77,7 @@ namespace IfcGeom {
std::string _type;
std::string _guid;
std::string _context;
std::string _unique_id;
Transformation<P> _transformation;
public:
int id() const { return _id; }
@@ -81,10 +86,21 @@ namespace IfcGeom {
const std::string& type() const { return _type; }
const std::string& guid() const { return _guid; }
const std::string& context() const { return _context; }
const std::string& unique_id() const { return _unique_id; }
const Transformation<P>& transformation() const { return _transformation; }
Element(const ElementSettings& settings, int id, int parent_id, const std::string& name, const std::string& type, const std::string& guid, const std::string& context, const gp_Trsf& trsf)
: _id(id), _parent_id(parent_id), _name(name), _type(type), _guid(guid), _context(context), _transformation(settings, trsf)
{}
{
std::ostringstream oss;
oss << "product-" << IfcParse::IfcGlobalId(guid).formatted();
if (!_context.empty()) {
std::string ctx = _context;
std::transform(ctx.begin(), ctx.end(), ctx.begin(), ::tolower);
std::replace(ctx.begin(), ctx.end(), ' ', '-');
oss << "-" << ctx;
}
_unique_id = oss.str();
}
virtual ~Element() {}
};
+6 -3
View File
@@ -57,17 +57,20 @@ namespace IfcGeom {
boost::optional<double> specularity;
public:
SurfaceStyle() {
this->name = "IfcSurfaceStyleShading";
this->name = "surface-style";
}
SurfaceStyle(int id) : id(id) {
std::stringstream sstr;
sstr << "IfcSurfaceStyleShading_" << id;
sstr << "surface-style-" << id;
this->name = sstr.str();
}
SurfaceStyle(const std::string& name) : name(name) {}
SurfaceStyle(int id, const std::string& name) : id(id) {
std::stringstream sstr;
sstr << id << "_" << name;
std::string sanitized = name;
std::transform(sanitized.begin(), sanitized.end(), sanitized.begin(), ::tolower);
std::replace(sanitized.begin(), sanitized.end(), ' ', '-');
sstr << "surface-style-" << id << "-" << sanitized;
this->name = sstr.str();
}