mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-21 14:23:53 +00:00
surface style ids on serialization
This commit is contained in:
@@ -36,21 +36,28 @@ IfcGeom::Representation::Serialization::Serialization(const BRep& brep)
|
|||||||
{
|
{
|
||||||
TopoDS_Compound compound = brep.as_compound();
|
TopoDS_Compound compound = brep.as_compound();
|
||||||
for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = brep.begin(); it != brep.end(); ++ it) {
|
for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = brep.begin(); it != brep.end(); ++ it) {
|
||||||
|
int sid = -1;
|
||||||
|
|
||||||
if (it->hasStyle() && it->Style().Diffuse()) {
|
if (it->hasStyle() && it->Style().Diffuse()) {
|
||||||
const IfcGeom::SurfaceStyle::ColorComponent& clr = *it->Style().Diffuse();
|
const IfcGeom::SurfaceStyle::ColorComponent& clr = *it->Style().Diffuse();
|
||||||
surface_styles_.push_back(clr.R());
|
surface_styles_.push_back(clr.R());
|
||||||
surface_styles_.push_back(clr.G());
|
surface_styles_.push_back(clr.G());
|
||||||
surface_styles_.push_back(clr.B());
|
surface_styles_.push_back(clr.B());
|
||||||
|
|
||||||
|
sid = it->Style().Id().get_value_or(-1);
|
||||||
} else {
|
} else {
|
||||||
surface_styles_.push_back(-1.);
|
surface_styles_.push_back(-1.);
|
||||||
surface_styles_.push_back(-1.);
|
surface_styles_.push_back(-1.);
|
||||||
surface_styles_.push_back(-1.);
|
surface_styles_.push_back(-1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (it->hasStyle() && it->Style().Transparency()) {
|
if (it->hasStyle() && it->Style().Transparency()) {
|
||||||
surface_styles_.push_back(1. - *it->Style().Transparency());
|
surface_styles_.push_back(1. - *it->Style().Transparency());
|
||||||
} else {
|
} else {
|
||||||
surface_styles_.push_back(1.);
|
surface_styles_.push_back(1.);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
surface_style_ids_.push_back(sid);
|
||||||
}
|
}
|
||||||
std::stringstream sstream;
|
std::stringstream sstream;
|
||||||
BRepTools::Write(compound,sstream);
|
BRepTools::Write(compound,sstream);
|
||||||
|
|||||||
@@ -87,9 +87,11 @@ namespace IfcGeom {
|
|||||||
std::string id_;
|
std::string id_;
|
||||||
std::string brep_data_;
|
std::string brep_data_;
|
||||||
std::vector<double> surface_styles_;
|
std::vector<double> surface_styles_;
|
||||||
|
std::vector<int> surface_style_ids_;
|
||||||
public:
|
public:
|
||||||
const std::string& brep_data() const { return brep_data_; }
|
const std::string& brep_data() const { return brep_data_; }
|
||||||
const std::vector<double>& surface_styles() const { return surface_styles_; }
|
const std::vector<double>& surface_styles() const { return surface_styles_; }
|
||||||
|
const std::vector<int>& surface_style_ids() const { return surface_style_ids_; }
|
||||||
Serialization(const BRep& brep);
|
Serialization(const BRep& brep);
|
||||||
virtual ~Serialization() {}
|
virtual ~Serialization() {}
|
||||||
const std::string& id() const { return id_; }
|
const std::string& id() const { return id_; }
|
||||||
|
|||||||
@@ -90,10 +90,13 @@ namespace IfcGeom {
|
|||||||
const boost::optional<ColorComponent>& Specular() const { return specular; }
|
const boost::optional<ColorComponent>& Specular() const { return specular; }
|
||||||
const boost::optional<double>& Transparency() const { return transparency; }
|
const boost::optional<double>& Transparency() const { return transparency; }
|
||||||
const boost::optional<double>& Specularity() const { return specularity; }
|
const boost::optional<double>& Specularity() const { return specularity; }
|
||||||
|
const boost::optional<int>& Id() const { return id; }
|
||||||
|
|
||||||
boost::optional<ColorComponent>& Diffuse() { return diffuse; }
|
boost::optional<ColorComponent>& Diffuse() { return diffuse; }
|
||||||
boost::optional<ColorComponent>& Specular() { return specular; }
|
boost::optional<ColorComponent>& Specular() { return specular; }
|
||||||
boost::optional<double>& Transparency() { return transparency; }
|
boost::optional<double>& Transparency() { return transparency; }
|
||||||
boost::optional<double>& Specularity() { return specularity; }
|
boost::optional<double>& Specularity() { return specularity; }
|
||||||
|
boost::optional<int>& Id() { return id; }
|
||||||
};
|
};
|
||||||
|
|
||||||
IFC_GEOM_API const SurfaceStyle* get_default_style(const std::string& ifc_type);
|
IFC_GEOM_API const SurfaceStyle* get_default_style(const std::string& ifc_type);
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ except ImportError:
|
|||||||
|
|
||||||
USE_OCCT_HANDLE = True
|
USE_OCCT_HANDLE = True
|
||||||
|
|
||||||
shape_tuple = namedtuple("shape_tuple", ("data", "geometry", "styles"))
|
shape_tuple = namedtuple("shape_tuple", ("data", "geometry", "styles", "style_ids"))
|
||||||
|
|
||||||
handle, main_loop, add_menu, add_function_to_menu = None, None, None, None
|
handle, main_loop, add_menu, add_function_to_menu = None, None, None, None
|
||||||
|
|
||||||
@@ -216,16 +216,18 @@ def serialize_shape(shape):
|
|||||||
|
|
||||||
|
|
||||||
def create_shape_from_serialization(brep_object):
|
def create_shape_from_serialization(brep_object):
|
||||||
brep_data, occ_shape, styles = None, None, ()
|
brep_data, occ_shape, styles, style_ids = None, None, (), ()
|
||||||
|
|
||||||
is_product_shape = True
|
is_product_shape = True
|
||||||
try:
|
try:
|
||||||
brep_data = brep_object.geometry.brep_data
|
brep_data = brep_object.geometry.brep_data
|
||||||
styles = brep_object.geometry.surface_styles
|
styles = brep_object.geometry.surface_styles
|
||||||
|
style_ids = brep_object.geometry.surface_style_ids
|
||||||
except BaseException:
|
except BaseException:
|
||||||
try:
|
try:
|
||||||
brep_data = brep_object.brep_data
|
brep_data = brep_object.brep_data
|
||||||
styles = brep_object.surface_styles
|
styles = brep_object.surface_styles
|
||||||
|
style_ids = brep_object.surface_style_ids
|
||||||
is_product_shape = False
|
is_product_shape = False
|
||||||
except BaseException:
|
except BaseException:
|
||||||
pass
|
pass
|
||||||
@@ -233,7 +235,7 @@ def create_shape_from_serialization(brep_object):
|
|||||||
styles = tuple(styles[i : i + 4] for i in range(0, len(styles), 4))
|
styles = tuple(styles[i : i + 4] for i in range(0, len(styles), 4))
|
||||||
|
|
||||||
if not brep_data:
|
if not brep_data:
|
||||||
return shape_tuple(brep_object, None, styles)
|
return shape_tuple(brep_object, None, styles, style_ids)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ss = BRepTools.BRepTools_ShapeSet()
|
ss = BRepTools.BRepTools_ShapeSet()
|
||||||
@@ -243,6 +245,6 @@ def create_shape_from_serialization(brep_object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
if is_product_shape:
|
if is_product_shape:
|
||||||
return shape_tuple(brep_object, occ_shape, styles)
|
return shape_tuple(brep_object, occ_shape, styles, style_ids)
|
||||||
else:
|
else:
|
||||||
return occ_shape
|
return occ_shape
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ struct ShapeRTTI : public boost::static_visitor<PyObject*>
|
|||||||
id = property(id)
|
id = property(id)
|
||||||
brep_data = property(brep_data)
|
brep_data = property(brep_data)
|
||||||
surface_styles = property(surface_styles)
|
surface_styles = property(surface_styles)
|
||||||
|
surface_style_ids = property(surface_style_ids)
|
||||||
%}
|
%}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user