mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-18 06:21:40 +00:00
Fixes to examples
This commit is contained in:
@@ -40,13 +40,16 @@
|
|||||||
|
|
||||||
#ifdef USE_IFC4
|
#ifdef USE_IFC4
|
||||||
#include "../ifcparse/Ifc4.h"
|
#include "../ifcparse/Ifc4.h"
|
||||||
|
#define IfcSchema Ifc4
|
||||||
#else
|
#else
|
||||||
#include "../ifcparse/Ifc2x3.h"
|
#include "../ifcparse/Ifc2x3.h"
|
||||||
|
#define IfcSchema Ifc2x3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../ifcparse/IfcBaseClass.h"
|
#include "../ifcparse/IfcBaseClass.h"
|
||||||
#include "../ifcparse/IfcHierarchyHelper.h"
|
#include "../ifcparse/IfcHierarchyHelper.h"
|
||||||
#include "../ifcgeom/IfcGeom.h"
|
#include "../ifcgeom/IfcGeom.h"
|
||||||
|
#include "../ifcgeom_schema_agnostic/Serialization.h"
|
||||||
|
|
||||||
#if USE_VLD
|
#if USE_VLD
|
||||||
#include <vld.h>
|
#include <vld.h>
|
||||||
@@ -59,7 +62,7 @@ int main() {
|
|||||||
|
|
||||||
// The IfcHierarchyHelper is a subclass of the regular IfcFile that provides several
|
// The IfcHierarchyHelper is a subclass of the regular IfcFile that provides several
|
||||||
// convenience functions for working with geometry in IFC files.
|
// convenience functions for working with geometry in IFC files.
|
||||||
IfcHierarchyHelper file;
|
IfcHierarchyHelper<IfcSchema> file;
|
||||||
file.header().file_name().name("IfcAdvancedHouse.ifc");
|
file.header().file_name().name("IfcAdvancedHouse.ifc");
|
||||||
|
|
||||||
IfcSchema::IfcBuilding* building = file.addBuilding();
|
IfcSchema::IfcBuilding* building = file.addBuilding();
|
||||||
@@ -91,7 +94,7 @@ int main() {
|
|||||||
// IfcFacetedBRep. If it would not be a polyhedron, serialise() can only be successful when linked
|
// IfcFacetedBRep. If it would not be a polyhedron, serialise() can only be successful when linked
|
||||||
// to the IFC4 model and with `advanced` set to `true` which introduces IfcAdvancedFace. It would
|
// to the IFC4 model and with `advanced` set to `true` which introduces IfcAdvancedFace. It would
|
||||||
// return `0` otherwise.
|
// return `0` otherwise.
|
||||||
IfcSchema::IfcProductDefinitionShape* building_shape = IfcGeom::serialise(building_shell, false);
|
IfcSchema::IfcProductDefinitionShape* building_shape = IfcGeom::serialise(STRINGIFY(IfcSchema), building_shell, false)->as<IfcSchema::IfcProductDefinitionShape>();
|
||||||
|
|
||||||
file.addEntity(building_shape);
|
file.addEntity(building_shape);
|
||||||
IfcSchema::IfcRepresentation* rep = *building_shape->Representations()->begin();
|
IfcSchema::IfcRepresentation* rep = *building_shape->Representations()->begin();
|
||||||
@@ -108,9 +111,9 @@ int main() {
|
|||||||
TopoDS_Shape shape;
|
TopoDS_Shape shape;
|
||||||
createGroundShape(shape);
|
createGroundShape(shape);
|
||||||
|
|
||||||
IfcSchema::IfcProductDefinitionShape* ground_representation = IfcGeom::serialise(shape, true);
|
IfcSchema::IfcProductDefinitionShape* ground_representation = IfcGeom::serialise(STRINGIFY(IfcSchema), shape, true)->as<IfcSchema::IfcProductDefinitionShape>();
|
||||||
if (!ground_representation) {
|
if (!ground_representation) {
|
||||||
ground_representation = IfcGeom::tesselate(shape, 100.);
|
ground_representation = IfcGeom::tesselate(STRINGIFY(IfcSchema), shape, 100.)->as<IfcSchema::IfcProductDefinitionShape>();
|
||||||
}
|
}
|
||||||
file.getSingle<IfcSchema::IfcSite>()->setRepresentation(ground_representation);
|
file.getSingle<IfcSchema::IfcSite>()->setRepresentation(ground_representation);
|
||||||
|
|
||||||
|
|||||||
@@ -28,18 +28,23 @@
|
|||||||
|
|
||||||
#include <Geom_BSplineSurface.hxx>
|
#include <Geom_BSplineSurface.hxx>
|
||||||
#include <BRepBuilderAPI_MakeFace.hxx>
|
#include <BRepBuilderAPI_MakeFace.hxx>
|
||||||
|
|
||||||
#include <Standard_Version.hxx>
|
#include <Standard_Version.hxx>
|
||||||
|
|
||||||
|
#include <BRepGProp.hxx>
|
||||||
|
#include <GProp_GProps.hxx>
|
||||||
|
|
||||||
#ifdef USE_IFC4
|
#ifdef USE_IFC4
|
||||||
#include "../ifcparse/Ifc4.h"
|
#include "../ifcparse/Ifc4.h"
|
||||||
|
#define IfcSchema Ifc4
|
||||||
#else
|
#else
|
||||||
#include "../ifcparse/Ifc2x3.h"
|
#include "../ifcparse/Ifc2x3.h"
|
||||||
|
#define IfcSchema Ifc2x3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../ifcparse/IfcBaseClass.h"
|
#include "../ifcparse/IfcBaseClass.h"
|
||||||
#include "../ifcparse/IfcHierarchyHelper.h"
|
#include "../ifcparse/IfcHierarchyHelper.h"
|
||||||
#include "../ifcgeom/IfcGeom.h"
|
#include "../ifcgeom/IfcGeom.h"
|
||||||
|
#include "../ifcgeom_schema_agnostic/Serialization.h"
|
||||||
|
|
||||||
#if USE_VLD
|
#if USE_VLD
|
||||||
#include <vld.h>
|
#include <vld.h>
|
||||||
@@ -58,7 +63,7 @@ int main() {
|
|||||||
|
|
||||||
// The IfcHierarchyHelper is a subclass of the regular IfcFile that provides several
|
// The IfcHierarchyHelper is a subclass of the regular IfcFile that provides several
|
||||||
// convenience functions for working with geometry in IFC files.
|
// convenience functions for working with geometry in IFC files.
|
||||||
IfcHierarchyHelper file;
|
IfcHierarchyHelper<IfcSchema> file;
|
||||||
file.header().file_name().name("IfcOpenHouse.ifc");
|
file.header().file_name().name("IfcOpenHouse.ifc");
|
||||||
|
|
||||||
// Start by adding a wall to the file, initially leaving most attributes blank.
|
// Start by adding a wall to the file, initially leaving most attributes blank.
|
||||||
@@ -262,11 +267,13 @@ int main() {
|
|||||||
// will be tesselated using the deflection specified.
|
// will be tesselated using the deflection specified.
|
||||||
TopoDS_Shape shape;
|
TopoDS_Shape shape;
|
||||||
createGroundShape(shape);
|
createGroundShape(shape);
|
||||||
IfcSchema::IfcProductDefinitionShape* ground_representation = IfcGeom::tesselate(shape, 100.);
|
IfcSchema::IfcProductDefinitionShape* ground_representation = IfcGeom::tesselate(STRINGIFY(IfcSchema), shape, 100.)->as<IfcSchema::IfcProductDefinitionShape>();
|
||||||
file.getSingle<IfcSchema::IfcSite>()->setRepresentation(ground_representation);
|
file.getSingle<IfcSchema::IfcSite>()->setRepresentation(ground_representation);
|
||||||
|
|
||||||
// Relate a property set to the IfcSite
|
GProp_GProps prop;
|
||||||
const double site_area = IfcGeom::Kernel::face_area(TopoDS::Face(shape)) / 1000 / 1000;
|
BRepGProp::SurfaceProperties(shape, prop);
|
||||||
|
const double site_area = prop.Mass() / 1000 / 1000;
|
||||||
|
|
||||||
IfcSchema::IfcProperty::list::ptr properties(new IfcSchema::IfcProperty::list);
|
IfcSchema::IfcProperty::list::ptr properties(new IfcSchema::IfcProperty::list);
|
||||||
properties->push(new IfcSchema::IfcPropertySingleValue("TotalArea", null, new IfcSchema::IfcAreaMeasure(site_area), 0));
|
properties->push(new IfcSchema::IfcPropertySingleValue("TotalArea", null, new IfcSchema::IfcAreaMeasure(site_area), 0));
|
||||||
IfcSchema::IfcPropertySet* pset = new IfcSchema::IfcPropertySet(guid(), file.getSingle<IfcSchema::IfcOwnerHistory>(), S("Pset_SiteCommon"), null, properties);
|
IfcSchema::IfcPropertySet* pset = new IfcSchema::IfcPropertySet(guid(), file.getSingle<IfcSchema::IfcOwnerHistory>(), S("Pset_SiteCommon"), null, properties);
|
||||||
@@ -334,9 +341,9 @@ int main() {
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
#ifdef USE_IFC4
|
#ifdef USE_IFC4
|
||||||
file.entitiesByType<IfcSchema::IfcWallStandardCase>()->generalize(),
|
file.instances_by_type<IfcSchema::IfcWallStandardCase>()->generalize(),
|
||||||
#else
|
#else
|
||||||
file.entitiesByType<IfcSchema::IfcWallStandardCase>()->as<IfcSchema::IfcRoot>(),
|
file.instances_by_type<IfcSchema::IfcWallStandardCase>()->as<IfcSchema::IfcRoot>(),
|
||||||
#endif
|
#endif
|
||||||
layer_usage);
|
layer_usage);
|
||||||
|
|
||||||
@@ -391,7 +398,7 @@ int main() {
|
|||||||
IfcSchema::IfcShapeRepresentation* door_body = 0;
|
IfcSchema::IfcShapeRepresentation* door_body = 0;
|
||||||
for (IfcSchema::IfcRepresentation::list::it i = door_representations->begin(); i != door_representations->end(); ++i) {
|
for (IfcSchema::IfcRepresentation::list::it i = door_representations->begin(); i != door_representations->end(); ++i) {
|
||||||
IfcSchema::IfcRepresentation* rep = *i;
|
IfcSchema::IfcRepresentation* rep = *i;
|
||||||
if (rep->is(IfcSchema::Type::IfcShapeRepresentation) && rep->RepresentationIdentifier() == "Body") {
|
if (rep->declaration().is(IfcSchema::IfcShapeRepresentation::Class()) && rep->RepresentationIdentifier() == "Body") {
|
||||||
door_body = (IfcSchema::IfcShapeRepresentation*) rep;
|
door_body = (IfcSchema::IfcShapeRepresentation*) rep;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,16 @@
|
|||||||
* *
|
* *
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
|
|
||||||
|
// TODO: Multiple schemas
|
||||||
|
#define IfcSchema Ifc2x3
|
||||||
|
|
||||||
#include "../ifcparse/IfcFile.h"
|
#include "../ifcparse/IfcFile.h"
|
||||||
|
#include "../ifcparse/Ifc2x3.h"
|
||||||
|
|
||||||
#if USE_VLD
|
#if USE_VLD
|
||||||
#include <vld.h>
|
#include <vld.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
using namespace IfcSchema;
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
|
|
||||||
if ( argc != 2 ) {
|
if ( argc != 2 ) {
|
||||||
@@ -36,8 +38,8 @@ int main(int argc, char** argv) {
|
|||||||
Logger::SetOutput(&std::cout,&std::cout);
|
Logger::SetOutput(&std::cout,&std::cout);
|
||||||
|
|
||||||
// Parse the IFC file provided in argv[1]
|
// Parse the IFC file provided in argv[1]
|
||||||
IfcParse::IfcFile file;
|
IfcParse::IfcFile file(argv[1]);
|
||||||
if ( ! file.Init(argv[1]) ) {
|
if (!file.good()) {
|
||||||
std::cout << "Unable to parse .ifc file" << std::endl;
|
std::cout << "Unable to parse .ifc file" << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -58,19 +60,18 @@ int main(int argc, char** argv) {
|
|||||||
// we need to cast them to IfcWindows. Since these properties
|
// we need to cast them to IfcWindows. Since these properties
|
||||||
// are optional we need to make sure the properties are
|
// are optional we need to make sure the properties are
|
||||||
// defined for the window in question before accessing them.
|
// defined for the window in question before accessing them.
|
||||||
IfcBuildingElement::list::ptr elements = file.entitiesByType<IfcBuildingElement>();
|
IfcSchema::IfcBuildingElement::list::ptr elements = file.instances_by_type<IfcSchema::IfcBuildingElement>();
|
||||||
|
|
||||||
std::cout << "Found " << elements->size() << " elements in " << argv[1] << ":" << std::endl;
|
std::cout << "Found " << elements->size() << " elements in " << argv[1] << ":" << std::endl;
|
||||||
|
|
||||||
for ( IfcBuildingElement::list::it it = elements->begin(); it != elements->end(); ++ it ) {
|
for (IfcSchema::IfcBuildingElement::list::it it = elements->begin(); it != elements->end(); ++it) {
|
||||||
|
|
||||||
const IfcBuildingElement* element = *it;
|
const IfcSchema::IfcBuildingElement* element = *it;
|
||||||
std::cout << element->entity->toString() << std::endl;
|
std::cout << element->data().toString() << std::endl;
|
||||||
|
|
||||||
if ( element->is(IfcWindow::Class()) ) {
|
const IfcSchema::IfcWindow* window;
|
||||||
const IfcWindow* window = (IfcWindow*)element;
|
if ((window = element->as<IfcSchema::IfcWindow>()) != 0) {
|
||||||
|
if (window->hasOverallWidth() && window->hasOverallHeight()) {
|
||||||
if ( window->hasOverallWidth() && window->hasOverallHeight() ) {
|
|
||||||
const double area = window->OverallWidth()*window->OverallHeight();
|
const double area = window->OverallWidth()*window->OverallHeight();
|
||||||
std::cout << "The area of this window is " << area << std::endl;
|
std::cout << "The area of this window is " << area << std::endl;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user