Merge branch 'master' into tridify_ifcgeom_dll

# Conflicts:
#	cmake/CMakeLists.txt
This commit is contained in:
Thomas Krijnen
2016-08-08 10:56:06 +02:00
35 changed files with 1349 additions and 1095 deletions
+2 -2
View File
@@ -283,9 +283,9 @@ public:
return _get_surface_style<T>(representation_item->as<IfcSchema::IfcStyledItem>());
}
IfcSchema::IfcStyledItem::list::ptr styled_items = representation_item->StyledByItem();
for (IfcSchema::IfcStyledItem::list::it jt = styled_items->begin(); jt != styled_items->end(); ++jt) {
if (styled_items->size()) {
// StyledByItem is a SET [0:1] OF IfcStyledItem, so we return after the first IfcStyledItem:
return _get_surface_style<T>(*jt);
return _get_surface_style<T>(*styled_items->begin());
}
return std::make_pair<IfcSchema::IfcSurfaceStyle*, T*>(0,0);
}
+2 -3
View File
@@ -1373,7 +1373,6 @@ bool IfcGeom::Kernel::convert_layerset(const IfcSchema::IfcProduct* product, std
const IfcSchema::IfcMaterialLayerSet* layerset = usage->ForLayerSet();
const bool positive = usage->DirectionSense() == IfcSchema::IfcDirectionSenseEnum::IfcDirectionSense_POSITIVE;
double offset = usage->OffsetFromReferenceLine() * getValue(GV_LENGTH_UNIT);
const int axis = usage->LayerSetDirection();
IfcSchema::IfcMaterialLayer::list::ptr material_layers = layerset->MaterialLayers();
@@ -1730,7 +1729,7 @@ bool IfcGeom::Kernel::fold_layers(const IfcSchema::IfcWall* wall, const IfcRepre
bool found_intersection = false;
boost::optional<gp_Pnt> point_outside_param_range;
double param;
//double param;
const Handle_Geom_Surface& surface = *jt;
@@ -1741,7 +1740,7 @@ bool IfcGeom::Kernel::fold_layers(const IfcSchema::IfcWall* wall, const IfcRepre
intersections.Parameters(1, u, v, w);
if (w < axis_u1 || w > axis_u2) {
point_outside_param_range = p;
param = w;
//param = w;
} else {
// Found an intersection. Layer end point is covered by connecting wall
found_intersection = true;
+13 -3
View File
@@ -162,6 +162,11 @@ namespace IfcGeom {
initUnits();
} catch (...) {}
std::set<std::string> allowed_context_types;
allowed_context_types.insert("model");
allowed_context_types.insert("plan");
allowed_context_types.insert("notdefined");
std::set<std::string> context_types;
if (!settings.get(IteratorSettings::EXCLUDE_SOLIDS_AND_SURFACES)) {
// Really this should only be 'Model', as per
@@ -169,8 +174,9 @@ namespace IfcGeom {
// just for backwards compatibility:
context_types.insert("model");
context_types.insert("design");
// DDS likes to output 'model view'
// Some earlier (?) versions DDS-CAD output their own ContextTypes
context_types.insert("model view");
context_types.insert("detail view");
}
if (settings.get(IteratorSettings::INCLUDE_CURVES)) {
context_types.insert("plan");
@@ -199,6 +205,10 @@ namespace IfcGeom {
if (context->hasContextType()) {
std::string context_type = context->ContextType();
boost::to_lower(context_type);
if (allowed_context_types.find(context_type) == allowed_context_types.end()) {
Logger::Message(Logger::LOG_ERROR, std::string("ContextType '") + context->ContextType() + "' not allowed:", context->entity);
}
if (context_types.find(context_type) != context_types.end()) {
filtered_contexts->push(context);
}
@@ -401,8 +411,6 @@ namespace IfcGeom {
}
}
const int repid = representation->entity->id();
bool has_openings = false;
bool has_layers = false;
@@ -558,6 +566,8 @@ namespace IfcGeom {
element = kernel.create_brep_for_processed_representation(settings, representation, product, current_shape_model);
}
Logger::SetProduct(boost::none);
if ( !element ) {
_nextShape();
continue;
+1
View File
@@ -43,6 +43,7 @@ int convert_to_ifc(const gp_Ax2& a, IfcSchema::IfcAxis2Placement3D*& ax, bool ad
IfcSchema::IfcCartesianPoint* p;
IfcSchema::IfcDirection *x, *z;
if (!(convert_to_ifc(a.Location(), p, advanced) && convert_to_ifc(a.Direction(), z, advanced) && convert_to_ifc(a.XDirection(), x, advanced))) {
ax = 0;
return 0;
}
ax = new IfcSchema::IfcAxis2Placement3D(p, z, x);
-1
View File
@@ -1150,7 +1150,6 @@ bool IfcGeom::Kernel::convert(const IfcSchema::IfcTriangulatedFaceSet* l, TopoDS
if (faces.empty()) return false;
const unsigned int num_faces = (unsigned)indices.size();
bool valid_shell = false;
if (faces.size() < getValue(GV_MAX_FACES_TO_SEW)) {