- Ifc: implement basic support for IfcSweptDiskSolid elements.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1287 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
This commit is contained in:
aramis_acg 2012-07-11 22:11:16 +00:00
parent c70646912c
commit d7410e6f08
5 changed files with 238 additions and 106 deletions

View File

@ -549,7 +549,8 @@ bool Curve :: InRange(IfcFloat u) const
ai_assert(range.first != std::numeric_limits<IfcFloat>::infinity() && range.second != std::numeric_limits<IfcFloat>::infinity());
u = range.first + fmod(u-range.first,range.second-range.first);
}
return u >= range.first && u <= range.second;
const IfcFloat epsilon = 1e-5;
return u - range.first > -epsilon && range.second - u > -epsilon;
}
#endif

View File

@ -451,7 +451,6 @@ void ProcessConnectedFaceSet(const IfcConnectedFaceSet& fset, TempMesh& result,
// ------------------------------------------------------------------------------------------------
void ProcessRevolvedAreaSolid(const IfcRevolvedAreaSolid& solid, TempMesh& result, ConversionData& conv)
{
@ -539,6 +538,109 @@ void ProcessRevolvedAreaSolid(const IfcRevolvedAreaSolid& solid, TempMesh& resul
IFCImporter::LogDebug("generate mesh procedurally by radial extrusion (IfcRevolvedAreaSolid)");
}
// ------------------------------------------------------------------------------------------------
void ProcessSweptDiskSolid(const IfcSweptDiskSolid solid, TempMesh& result, ConversionData& conv)
{
const Curve* const curve = Curve::Convert(*solid.Directrix, conv);
if(!curve) {
IFCImporter::LogError("failed to convert Directrix curve (IfcSweptDiskSolid)");
return;
}
const std::vector<IfcVector3>& in = result.verts;
const size_t size=in.size();
const unsigned int cnt_segments = 16;
const IfcFloat deltaAngle = AI_MATH_TWO_PI/cnt_segments;
const size_t samples = curve->EstimateSampleCount(solid.StartParam,solid.EndParam);
result.verts.reserve(cnt_segments * samples * 4);
result.vertcnt.reserve((cnt_segments - 1) * samples);
// XXX while EstimateSampleCount() works well for non-composite curves, it
// fails badly for composite curves that require non-uniform sampling
// for good results.
IfcFloat p = solid.StartParam, delta = (solid.EndParam-solid.StartParam)/ (samples - 1);
IfcVector3 current = curve->Eval(p);
IfcVector3 previous = current;
IfcVector3 next;
IfcVector3 startvec;
startvec.x = 1.0f;
startvec.y = 1.0f;
startvec.z = 1.0f;
std::vector<IfcVector3> points;
points.reserve(cnt_segments * samples);
p += delta;
// generate circles at the sweep positions
for(size_t i = 0; i < samples; ++i, p += delta) {
next = curve->Eval(p);
// get a direction vector reflecting the approximate curvature (i.e. tangent)
IfcVector3 d = (current-previous) + (next-previous);
d.Normalize();
// figure out an arbitrary point q so that (p-q) * d = 0,
// try to maximize ||(p-q)|| * ||(p_last-q_last)||
IfcVector3 q;
if (abs(d.x) > 1e-6) {
q.y = startvec.y;
q.z = startvec.z;
q.x = -(d.y * q.y + d.z * q.z) / d.x;
}
else if (abs(d.y) > 1e-6) {
q.x = startvec.x;
q.z = startvec.z;
q.y = -(d.x * q.x + d.z * q.z) / d.y;
}
else { // if (abs(d.z) > 1e-6)
q.y = startvec.y;
q.x = startvec.x;
q.z = -(d.y * q.y + d.x * q.x) / d.z;
}
startvec = q;
q *= solid.Radius / q.Length();
// generate a rotation matrix to rotate q around d
IfcMatrix4 rot;
IfcMatrix4::Rotation(deltaAngle,d,rot);
for (unsigned int seg = 0; seg < cnt_segments; ++seg, q *= rot ) {
points.push_back(q + current);
}
previous = current;
current = next;
}
// make quads
for(size_t i = 0; i < samples - 1; ++i) {
for (unsigned int seg = 0; seg < cnt_segments - 1; ++seg) {
result.verts.push_back(points[ i * cnt_segments + seg]);
result.verts.push_back(points[ i * cnt_segments + seg + 1]);
result.verts.push_back(points[ (i+1) * cnt_segments + seg + 1]);
result.verts.push_back(points[ (i+1) * cnt_segments + seg]);
result.vertcnt.push_back(4);
}
}
IFCImporter::LogDebug("generate mesh procedurally by sweeping a disk along a curve (IfcSweptDiskSolid)");
}
// ------------------------------------------------------------------------------------------------
IfcMatrix3 DerivePlaneCoordinateSpace(const TempMesh& curmesh) {
@ -1723,6 +1825,9 @@ bool ProcessGeometricItem(const IfcRepresentationItem& geo, std::vector<unsigned
else if(const IfcSweptAreaSolid* swept = geo.ToPtr<IfcSweptAreaSolid>()) {
ProcessSweptAreaSolid(*swept,meshtmp,conv);
}
else if(const IfcSweptDiskSolid* disk = geo.ToPtr<IfcSweptDiskSolid>()) {
ProcessSweptDiskSolid(*disk,meshtmp,conv);
}
else if(const IfcManifoldSolidBrep* brep = geo.ToPtr<IfcManifoldSolidBrep>()) {
ProcessConnectedFaceSet(brep->Outer,meshtmp,conv);
}

View File

@ -1,8 +1,8 @@
/*
Open Asset Import Library (assimp)
Open Asset Import Library (ASSIMP)
----------------------------------------------------------------------
Copyright (c) 2006-2012, assimp team
Copyright (c) 2006-2010, ASSIMP Development Team
All rights reserved.
Redistribution and use of this software in source and binary forms,
@ -18,10 +18,10 @@ following conditions are met:
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
* Neither the name of the ASSIMP team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
written permission of the ASSIMP Development Team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@ -96,7 +96,6 @@ namespace {
, SchemaEntry("ifcobjecttypeenum",NULL )
, SchemaEntry("ifcthermalloadtypeenum",NULL )
, SchemaEntry("ifcionconcentrationmeasure",NULL )
, SchemaEntry("ifcobjectreferenceselect",NULL )
, SchemaEntry("ifcclassificationnotationselect",NULL )
, SchemaEntry("ifcbsplinecurveform",NULL )
, SchemaEntry("ifcelementcompositionenum",NULL )
@ -158,6 +157,7 @@ namespace {
, SchemaEntry("ifcidentifier",NULL )
, SchemaEntry("ifcradioactivitymeasure",NULL )
, SchemaEntry("ifcsymbolstyleselect",NULL )
, SchemaEntry("ifcobjectreferenceselect",NULL )
, SchemaEntry("ifcrooftypeenum",NULL )
, SchemaEntry("ifcreal",NULL )
, SchemaEntry("ifcroleenum",NULL )
@ -168,6 +168,7 @@ namespace {
, SchemaEntry("ifcfiltertypeenum",NULL )
, SchemaEntry("ifctransformertypeenum",NULL )
, SchemaEntry("ifcsurfaceside",NULL )
, SchemaEntry("ifcspaceheatertypeenum",NULL )
, SchemaEntry("ifcthermaltransmittancemeasure",NULL )
, SchemaEntry("ifctubebundletypeenum",NULL )
, SchemaEntry("ifclightfixturetypeenum",NULL )
@ -239,7 +240,6 @@ namespace {
, SchemaEntry("ifcvolumemeasure",NULL )
, SchemaEntry("ifcbeamtypeenum",NULL )
, SchemaEntry("ifcstateenum",NULL )
, SchemaEntry("ifcspaceheatertypeenum",NULL )
, SchemaEntry("ifcsectiontypeenum",NULL )
, SchemaEntry("ifcfootingtypeenum",NULL )
, SchemaEntry("ifcmonetarymeasure",NULL )
@ -379,6 +379,9 @@ namespace {
, SchemaEntry("ifcpermeablecoveringoperationenum",NULL )
, SchemaEntry("ifcmagneticfluxdensitymeasure",NULL )
, SchemaEntry("ifcmoisturediffusivitymeasure",NULL )
, SchemaEntry("ifcprofiledef",&STEP::ObjectHelper<IfcProfileDef,2>::Construct )
, SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper<IfcParameterizedProfileDef,1>::Construct )
, SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper<IfcZShapeProfileDef,6>::Construct )
, SchemaEntry("ifcroot",&STEP::ObjectHelper<IfcRoot,4>::Construct )
, SchemaEntry("ifcobjectdefinition",&STEP::ObjectHelper<IfcObjectDefinition,0>::Construct )
, SchemaEntry("ifctypeobject",&STEP::ObjectHelper<IfcTypeObject,2>::Construct )
@ -463,7 +466,6 @@ namespace {
, SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifcprofiledef",&STEP::ObjectHelper<IfcProfileDef,2>::Construct )
, SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper<IfcArbitraryClosedProfileDef,1>::Construct )
, SchemaEntry("ifccurve",&STEP::ObjectHelper<IfcCurve,0>::Construct )
, SchemaEntry("ifcconic",&STEP::ObjectHelper<IfcConic,1>::Construct )
@ -550,6 +552,7 @@ namespace {
, SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper<IfcAxis1Placement,1>::Construct )
, SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifccolourspecification",&STEP::ObjectHelper<IfcColourSpecification,1>::Construct )
, SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper<IfcStructuralPointAction,0>::Construct )
, SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper<IfcSpatialStructureElement,2>::Construct )
, SchemaEntry("ifcspace",&STEP::ObjectHelper<IfcSpace,2>::Construct )
@ -583,7 +586,6 @@ namespace {
, SchemaEntry("ifcvertex",&STEP::ObjectHelper<IfcVertex,0>::Construct )
, SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper<IfcVertexPoint,1>::Construct )
, SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper<IfcFlowInstrumentType,1>::Construct )
, SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper<IfcParameterizedProfileDef,1>::Construct )
, SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper<IfcUShapeProfileDef,8>::Construct )
, SchemaEntry("ifcramp",&STEP::ObjectHelper<IfcRamp,1>::Construct )
, SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
@ -869,7 +871,6 @@ namespace {
, SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper<IfcRelAggregates,0>::Construct )
, SchemaEntry("ifcboilertype",&STEP::ObjectHelper<IfcBoilerType,1>::Construct )
, SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifccolourspecification",&STEP::ObjectHelper<IfcColourSpecification,1>::Construct )
, SchemaEntry("ifccolourrgb",&STEP::ObjectHelper<IfcColourRgb,3>::Construct )
, SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper<IfcDoorStyle,4>::Construct )
@ -881,7 +882,6 @@ namespace {
, SchemaEntry("ifcsensortype",&STEP::ObjectHelper<IfcSensorType,1>::Construct )
, SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper<IfcAirTerminalBoxType,1>::Construct )
, SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper<IfcAnnotationSurfaceOccurrence,0>::Construct )
, SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper<IfcZShapeProfileDef,6>::Construct )
, SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
, SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper<IfcRationalBezierCurve,1>::Construct )
, SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper<IfcCartesianTransformationOperator2D,0>::Construct )
@ -1052,6 +1052,44 @@ template <> size_t GenericFill<NotImplemented>(const STEP::DB& db, const LIST& p
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcProfileDef>(const DB& db, const LIST& params, IfcProfileDef* in)
{
size_t base = 0;
if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[0]=true; break; }
try { GenericConvert( in->ProfileType, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); }
} while(0);
do { // convert the 'ProfileName' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[1]=true; break; }
if (dynamic_cast<const UNSET*>(&*arg)) break;
try { GenericConvert( in->ProfileName, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); }
} while(0);
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcParameterizedProfileDef>(const DB& db, const LIST& params, IfcParameterizedProfileDef* in)
{
size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcParameterizedProfileDef,1>::aux_is_derived[0]=true; break; }
try { GenericConvert( in->Position, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); }
} while(0);
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcZShapeProfileDef>(const DB& db, const LIST& params, IfcZShapeProfileDef* in)
{
size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
// this data structure is not used yet, so there is no code generated to fill its members
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcRoot>(const DB& db, const LIST& params, IfcRoot* in)
{
@ -1519,25 +1557,6 @@ template <> size_t GenericFill<IfcPlacement>(const DB& db, const LIST& params, I
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcProfileDef>(const DB& db, const LIST& params, IfcProfileDef* in)
{
size_t base = 0;
if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[0]=true; break; }
try { GenericConvert( in->ProfileType, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); }
} while(0);
do { // convert the 'ProfileName' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[1]=true; break; }
if (dynamic_cast<const UNSET*>(&*arg)) break;
try { GenericConvert( in->ProfileName, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); }
} while(0);
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcArbitraryClosedProfileDef>(const DB& db, const LIST& params, IfcArbitraryClosedProfileDef* in)
{
size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
@ -2068,6 +2087,19 @@ template <> size_t GenericFill<IfcAxis1Placement>(const DB& db, const LIST& para
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcColourSpecification>(const DB& db, const LIST& params, IfcColourSpecification* in)
{
size_t base = 0;
if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcColourSpecification,1>::aux_is_derived[0]=true; break; }
if (dynamic_cast<const UNSET*>(&*arg)) break;
try { GenericConvert( in->Name, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); }
} while(0);
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcStructuralPointAction>(const DB& db, const LIST& params, IfcStructuralPointAction* in)
{
size_t base = GenericFill(db,params,static_cast<IfcStructuralAction*>(in));
@ -2236,18 +2268,6 @@ template <> size_t GenericFill<IfcFlowInstrumentType>(const DB& db, const LIST&
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcParameterizedProfileDef>(const DB& db, const LIST& params, IfcParameterizedProfileDef* in)
{
size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcParameterizedProfileDef,1>::aux_is_derived[0]=true; break; }
try { GenericConvert( in->Position, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); }
} while(0);
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcUShapeProfileDef>(const DB& db, const LIST& params, IfcUShapeProfileDef* in)
{
size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
@ -3375,7 +3395,32 @@ template <> size_t GenericFill<IfcSubContractResource>(const DB& db, const LIST&
template <> size_t GenericFill<IfcSweptDiskSolid>(const DB& db, const LIST& params, IfcSweptDiskSolid* in)
{
size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
// this data structure is not used yet, so there is no code generated to fill its members
if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcSweptDiskSolid"); } do { // convert the 'Directrix' argument
boost::shared_ptr<const DataType> arg = params[base++];
try { GenericConvert( in->Directrix, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptDiskSolid to be a `IfcCurve`")); }
} while(0);
do { // convert the 'Radius' argument
boost::shared_ptr<const DataType> arg = params[base++];
try { GenericConvert( in->Radius, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); }
} while(0);
do { // convert the 'InnerRadius' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const UNSET*>(&*arg)) break;
try { GenericConvert( in->InnerRadius, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); }
} while(0);
do { // convert the 'StartParam' argument
boost::shared_ptr<const DataType> arg = params[base++];
try { GenericConvert( in->StartParam, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSweptDiskSolid to be a `IfcParameterValue`")); }
} while(0);
do { // convert the 'EndParam' argument
boost::shared_ptr<const DataType> arg = params[base++];
try { GenericConvert( in->EndParam, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcSweptDiskSolid to be a `IfcParameterValue`")); }
} while(0);
return base;
}
// -----------------------------------------------------------------------------------------------------------
@ -3980,19 +4025,6 @@ template <> size_t GenericFill<IfcBoilerType>(const DB& db, const LIST& params,
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcColourSpecification>(const DB& db, const LIST& params, IfcColourSpecification* in)
{
size_t base = 0;
if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument
boost::shared_ptr<const DataType> arg = params[base++];
if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcColourSpecification,1>::aux_is_derived[0]=true; break; }
if (dynamic_cast<const UNSET*>(&*arg)) break;
try { GenericConvert( in->Name, arg, db ); break; }
catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); }
} while(0);
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcColourRgb>(const DB& db, const LIST& params, IfcColourRgb* in)
{
size_t base = GenericFill(db,params,static_cast<IfcColourSpecification*>(in));
@ -4063,13 +4095,6 @@ template <> size_t GenericFill<IfcAnnotationSurfaceOccurrence>(const DB& db, con
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcZShapeProfileDef>(const DB& db, const LIST& params, IfcZShapeProfileDef* in)
{
size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
// this data structure is not used yet, so there is no code generated to fill its members
return base;
}
// -----------------------------------------------------------------------------------------------------------
template <> size_t GenericFill<IfcRationalBezierCurve>(const DB& db, const LIST& params, IfcRationalBezierCurve* in)
{
size_t base = GenericFill(db,params,static_cast<IfcBezierCurve*>(in));

View File

@ -1,8 +1,8 @@
/*
Open Asset Import Library (assimp)
Open Asset Import Library (ASSIMP)
----------------------------------------------------------------------
Copyright (c) 2006-2012, assimp team
Copyright (c) 2006-2010, ASSIMP Development Team
All rights reserved.
Redistribution and use of this software in source and binary forms,
@ -18,10 +18,10 @@ following conditions are met:
following disclaimer in the documentation and/or other
materials provided with the distribution.
* Neither the name of the assimp team, nor the names of its
* Neither the name of the ASSIMP team, nor the names of its
contributors may be used to endorse or promote products
derived from this software without specific prior
written permission of the assimp team.
written permission of the ASSIMP Development Team.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
@ -149,8 +149,6 @@ namespace IFC {
typedef ENUMERATION IfcThermalLoadTypeEnum;
// C++ wrapper type for IfcIonConcentrationMeasure
typedef REAL IfcIonConcentrationMeasure;
// C++ wrapper type for IfcObjectReferenceSelect
typedef SELECT IfcObjectReferenceSelect;
// C++ wrapper type for IfcClassificationNotationSelect
typedef SELECT IfcClassificationNotationSelect;
// C++ wrapper type for IfcBSplineCurveForm
@ -273,6 +271,8 @@ namespace IFC {
typedef REAL IfcRadioActivityMeasure;
// C++ wrapper type for IfcSymbolStyleSelect
typedef SELECT IfcSymbolStyleSelect;
// C++ wrapper type for IfcObjectReferenceSelect
typedef SELECT IfcObjectReferenceSelect;
// C++ wrapper type for IfcRoofTypeEnum
typedef ENUMERATION IfcRoofTypeEnum;
// C++ wrapper type for IfcReal
@ -293,6 +293,8 @@ namespace IFC {
typedef ENUMERATION IfcTransformerTypeEnum;
// C++ wrapper type for IfcSurfaceSide
typedef ENUMERATION IfcSurfaceSide;
// C++ wrapper type for IfcSpaceHeaterTypeEnum
typedef ENUMERATION IfcSpaceHeaterTypeEnum;
// C++ wrapper type for IfcThermalTransmittanceMeasure
typedef REAL IfcThermalTransmittanceMeasure;
// C++ wrapper type for IfcTubeBundleTypeEnum
@ -433,8 +435,6 @@ namespace IFC {
typedef ENUMERATION IfcBeamTypeEnum;
// C++ wrapper type for IfcStateEnum
typedef ENUMERATION IfcStateEnum;
// C++ wrapper type for IfcSpaceHeaterTypeEnum
typedef ENUMERATION IfcSpaceHeaterTypeEnum;
// C++ wrapper type for IfcSectionTypeEnum
typedef ENUMERATION IfcSectionTypeEnum;
// C++ wrapper type for IfcFootingTypeEnum
@ -719,6 +719,9 @@ namespace IFC {
// IFC Entities
// ******************************************************************************
struct IfcProfileDef;
struct IfcParameterizedProfileDef;
struct IfcZShapeProfileDef;
struct IfcRoot;
struct IfcObjectDefinition;
struct IfcTypeObject;
@ -803,7 +806,6 @@ namespace IFC {
typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp)
typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp)
typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp)
struct IfcProfileDef;
struct IfcArbitraryClosedProfileDef;
struct IfcCurve;
struct IfcConic;
@ -890,6 +892,7 @@ namespace IFC {
struct IfcAxis1Placement;
typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp)
typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp)
struct IfcColourSpecification;
struct IfcStructuralPointAction;
struct IfcSpatialStructureElement;
struct IfcSpace;
@ -923,7 +926,6 @@ namespace IFC {
struct IfcVertex;
struct IfcVertexPoint;
struct IfcFlowInstrumentType;
struct IfcParameterizedProfileDef;
struct IfcUShapeProfileDef;
struct IfcRamp;
typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp)
@ -1209,7 +1211,6 @@ namespace IFC {
struct IfcRelAggregates;
struct IfcBoilerType;
typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp)
struct IfcColourSpecification;
struct IfcColourRgb;
typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp)
struct IfcDoorStyle;
@ -1221,7 +1222,6 @@ namespace IFC {
struct IfcSensorType;
struct IfcAirTerminalBoxType;
struct IfcAnnotationSurfaceOccurrence;
struct IfcZShapeProfileDef;
typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp)
struct IfcRationalBezierCurve;
struct IfcCartesianTransformationOperator2D;
@ -1375,6 +1375,27 @@ namespace IFC {
// C++ wrapper for IfcProfileDef
struct IfcProfileDef : ObjectHelper<IfcProfileDef,2> { IfcProfileDef() : Object("IfcProfileDef") {}
IfcProfileTypeEnum::Out ProfileType;
Maybe< IfcLabel::Out > ProfileName;
};
// C++ wrapper for IfcParameterizedProfileDef
struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper<IfcParameterizedProfileDef,1> { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {}
Lazy< IfcAxis2Placement2D > Position;
};
// C++ wrapper for IfcZShapeProfileDef
struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcZShapeProfileDef,6> { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {}
IfcPositiveLengthMeasure::Out Depth;
IfcPositiveLengthMeasure::Out FlangeWidth;
IfcPositiveLengthMeasure::Out WebThickness;
IfcPositiveLengthMeasure::Out FlangeThickness;
Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
};
// C++ wrapper for IfcRoot
struct IfcRoot : ObjectHelper<IfcRoot,4> { IfcRoot() : Object("IfcRoot") {}
IfcGloballyUniqueId::Out GlobalId;
@ -1654,12 +1675,6 @@ namespace IFC {
Lazy< IfcCartesianPoint > Location;
};
// C++ wrapper for IfcProfileDef
struct IfcProfileDef : ObjectHelper<IfcProfileDef,2> { IfcProfileDef() : Object("IfcProfileDef") {}
IfcProfileTypeEnum::Out ProfileType;
Maybe< IfcLabel::Out > ProfileName;
};
// C++ wrapper for IfcArbitraryClosedProfileDef
struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper<IfcArbitraryClosedProfileDef,1> { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {}
Lazy< IfcCurve > OuterCurve;
@ -1997,6 +2012,11 @@ namespace IFC {
Maybe< Lazy< IfcDirection > > Axis;
};
// C++ wrapper for IfcColourSpecification
struct IfcColourSpecification : ObjectHelper<IfcColourSpecification,1> { IfcColourSpecification() : Object("IfcColourSpecification") {}
Maybe< IfcLabel::Out > Name;
};
// C++ wrapper for IfcStructuralPointAction
struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper<IfcStructuralPointAction,0> { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {}
@ -2103,11 +2123,6 @@ namespace IFC {
IfcFlowInstrumentTypeEnum::Out PredefinedType;
};
// C++ wrapper for IfcParameterizedProfileDef
struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper<IfcParameterizedProfileDef,1> { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {}
Lazy< IfcAxis2Placement2D > Position;
};
// C++ wrapper for IfcUShapeProfileDef
struct IfcUShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcUShapeProfileDef,8> { IfcUShapeProfileDef() : Object("IfcUShapeProfileDef") {}
IfcPositiveLengthMeasure::Out Depth;
@ -3215,11 +3230,6 @@ namespace IFC {
IfcBoilerTypeEnum::Out PredefinedType;
};
// C++ wrapper for IfcColourSpecification
struct IfcColourSpecification : ObjectHelper<IfcColourSpecification,1> { IfcColourSpecification() : Object("IfcColourSpecification") {}
Maybe< IfcLabel::Out > Name;
};
// C++ wrapper for IfcColourRgb
struct IfcColourRgb : IfcColourSpecification, ObjectHelper<IfcColourRgb,3> { IfcColourRgb() : Object("IfcColourRgb") {}
IfcNormalisedRatioMeasure::Out Red;
@ -3270,16 +3280,6 @@ namespace IFC {
};
// C++ wrapper for IfcZShapeProfileDef
struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcZShapeProfileDef,6> { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {}
IfcPositiveLengthMeasure::Out Depth;
IfcPositiveLengthMeasure::Out FlangeWidth;
IfcPositiveLengthMeasure::Out WebThickness;
IfcPositiveLengthMeasure::Out FlangeThickness;
Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
};
// C++ wrapper for IfcRationalBezierCurve
struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper<IfcRationalBezierCurve,1> { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {}
ListOf< REAL, 2, 0 >::Out WeightsData;
@ -3829,6 +3829,9 @@ namespace STEP {
#define DECL_CONV_STUB(type) template <> size_t GenericFill<IFC::type>(const STEP::DB& db, const EXPRESS::LIST& params, IFC::type* in)
DECL_CONV_STUB(IfcProfileDef);
DECL_CONV_STUB(IfcParameterizedProfileDef);
DECL_CONV_STUB(IfcZShapeProfileDef);
DECL_CONV_STUB(IfcRoot);
DECL_CONV_STUB(IfcObjectDefinition);
DECL_CONV_STUB(IfcTypeObject);
@ -3880,7 +3883,6 @@ namespace STEP {
DECL_CONV_STUB(IfcUnitaryEquipmentType);
DECL_CONV_STUB(IfcPort);
DECL_CONV_STUB(IfcPlacement);
DECL_CONV_STUB(IfcProfileDef);
DECL_CONV_STUB(IfcArbitraryClosedProfileDef);
DECL_CONV_STUB(IfcCurve);
DECL_CONV_STUB(IfcConic);
@ -3943,6 +3945,7 @@ namespace STEP {
DECL_CONV_STUB(IfcDimensionCurve);
DECL_CONV_STUB(IfcBoundedCurve);
DECL_CONV_STUB(IfcAxis1Placement);
DECL_CONV_STUB(IfcColourSpecification);
DECL_CONV_STUB(IfcStructuralPointAction);
DECL_CONV_STUB(IfcSpatialStructureElement);
DECL_CONV_STUB(IfcSpace);
@ -3963,7 +3966,6 @@ namespace STEP {
DECL_CONV_STUB(IfcVertex);
DECL_CONV_STUB(IfcVertexPoint);
DECL_CONV_STUB(IfcFlowInstrumentType);
DECL_CONV_STUB(IfcParameterizedProfileDef);
DECL_CONV_STUB(IfcUShapeProfileDef);
DECL_CONV_STUB(IfcRamp);
DECL_CONV_STUB(IfcCompositeCurve);
@ -4150,7 +4152,6 @@ namespace STEP {
DECL_CONV_STUB(IfcConstructionMaterialResource);
DECL_CONV_STUB(IfcRelAggregates);
DECL_CONV_STUB(IfcBoilerType);
DECL_CONV_STUB(IfcColourSpecification);
DECL_CONV_STUB(IfcColourRgb);
DECL_CONV_STUB(IfcDoorStyle);
DECL_CONV_STUB(IfcDuctSilencerType);
@ -4159,7 +4160,6 @@ namespace STEP {
DECL_CONV_STUB(IfcSensorType);
DECL_CONV_STUB(IfcAirTerminalBoxType);
DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence);
DECL_CONV_STUB(IfcZShapeProfileDef);
DECL_CONV_STUB(IfcRationalBezierCurve);
DECL_CONV_STUB(IfcCartesianTransformationOperator2D);
DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform);

View File

@ -94,6 +94,7 @@ IfcSurfaceStyleRendering
IfcSurfaceStyleShading
IfcSurfaceStyleWithTextures
IfcSweptAreaSolid
IfcSweptDiskSolid
IfcTopologicalRepresentationItem
IfcTrimmedCurve
IfcUnit