From 8364a847e5faee219e02da0a94cdd0fc96c3ac18 Mon Sep 17 00:00:00 2001 From: Jon Mirtschin Date: Fri, 23 Aug 2024 21:38:27 +1000 Subject: [PATCH] v24.08.23 --- Core/IFC/DatabaseIFC.cs | 10 ++++++---- Core/IFC/IFC A.cs | 11 +++++++++-- Core/IFC/IFC B.cs | 4 +--- Core/IFC/IFC G.cs | 5 +++-- Core/IFC/IFC O.cs | 7 ++++--- Core/IFC/IFC P.cs | 2 +- Core/IFC/IFC R.cs | 1 + Core/IFC/IFC V.cs | 6 ++++-- Core/IFC/ParserIFC.cs | 2 +- Core/IFC/Property Sets.cs | 2 +- Core/IFC/STEP/IFC A STEP.cs | 11 ++++++----- Core/IFC/STEP/IFC R STEP.cs | 2 ++ Core/STEP/ParserSTEP.cs | 8 ++++++-- .../GeometryGymIFC/Properties/AssemblyInfo.cs | 4 ++-- .../Properties/AssemblyInfo.cs | 4 ++-- .../GeometryGymIFCcore/GeometryGymIFCcore.csproj | 6 +++--- Extensions/RhinoCommon IFC/IFC B RhinoCommon.cs | 16 ++++++++-------- Extensions/RhinoCommon IFC/IFC C RhinoCommon.cs | 4 ++-- 18 files changed, 62 insertions(+), 43 deletions(-) diff --git a/Core/IFC/DatabaseIFC.cs b/Core/IFC/DatabaseIFC.cs index 425601e..a27946d 100644 --- a/Core/IFC/DatabaseIFC.cs +++ b/Core/IFC/DatabaseIFC.cs @@ -153,11 +153,13 @@ namespace GeometryGym.Ifc mRelease = schema; mModelView = view; #if (RHINO || GH) - //mModelSIScale = 1 / Utils.mLengthConversion[(int) GeometryGym.GGRhino.GGRhino.ActiveUnits()]; Rhino.RhinoDoc doc = Rhino.RhinoDoc.ActiveDoc; if (doc != null) { - Tolerance = doc.ModelAbsoluteTolerance; + double tol = doc.ModelAbsoluteTolerance; + if (tol * GGRhino.GGRhino.mScaleFromCAD > 0.0001) + tol = 0.0001 / GGRhino.GGRhino.mScaleFromCAD; + Tolerance = tol; ToleranceAngleRadians = Math.Min(Math.PI/1800, doc.ModelAngleToleranceRadians); } #endif @@ -590,7 +592,7 @@ namespace GeometryGym.Ifc internal IfcProduct ConstructProduct(string className, IfcObjectDefinition host, IfcObjectPlacement placement, IfcProductDefinitionShape representation, IfcDistributionSystem system) { - string str = className, predefinedTypeConstant = ""; + string str = className.Trim(), predefinedTypeConstant = ""; ReleaseVersion release = mDatabase.Release; if (string.IsNullOrEmpty(str)) return null; @@ -2601,7 +2603,7 @@ namespace GeometryGym.Ifc BaseClassIfc o = obj.Object; if (o is IfcPropertySet || o is IfcMaterialConstituentSet || o is IfcPropertySetTemplate) secondPass.Add(obj); - else if (o is IfcTessellatedFaceSet || o is IfcPolyLoop || o is IfcFacetedBrep) + else if (o is IfcTriangulatedFaceSet || o is IfcPolyLoop || o is IfcFacetedBrep) threadSafeConstructors.Add(obj); else firstPass.Add(obj); diff --git a/Core/IFC/IFC A.cs b/Core/IFC/IFC A.cs index 2e0a589..4a8ebac 100644 --- a/Core/IFC/IFC A.cs +++ b/Core/IFC/IFC A.cs @@ -895,15 +895,22 @@ namespace GeometryGym.Ifc catch (Exception) { } } IfcCompositeCurve compositeCurve = new IfcCompositeCurve(curveSegments); + var subContext = mDatabase.Factory.SubContext(IfcGeometricRepresentationSubContext.SubContextIdentifier.FootPrint); + IfcShapeRepresentation shapeRepresentation = new IfcShapeRepresentation(subContext, compositeCurve, ShapeRepresentationType.Curve2D); if (alignment != null) { - var subContext = mDatabase.Factory.SubContext(IfcGeometricRepresentationSubContext.SubContextIdentifier.FootPrint); - IfcShapeRepresentation shapeRepresentation = new IfcShapeRepresentation(subContext, compositeCurve, ShapeRepresentationType.Curve2D); if (alignment.Representation == null) alignment.Representation = new IfcProductDefinitionShape(shapeRepresentation); else alignment.Representation.Representations.Add(shapeRepresentation); } + else + { + if(Representation == null) + Representation = new IfcProductDefinitionShape(shapeRepresentation); + else + Representation.Representations.Add(shapeRepresentation); + } return compositeCurve; } diff --git a/Core/IFC/IFC B.cs b/Core/IFC/IFC B.cs index b226600..fbc06ab 100644 --- a/Core/IFC/IFC B.cs +++ b/Core/IFC/IFC B.cs @@ -635,13 +635,11 @@ namespace GeometryGym.Ifc { private IfcBuildingElementProxyTypeEnum mPredefinedType = IfcBuildingElementProxyTypeEnum.NOTDEFINED; // : OPTIONAL IfcBuildingElementProxyTypeEnum; //Ifc2x3 internal IfcElementCompositionEnum mCompositionType = IfcElementCompositionEnum.NA;// : OPTIONAL IfcElementCompositionEnum; - public IfcBuildingElementProxyTypeEnum PredefinedType { get { return mPredefinedType; } set { mPredefinedType = validPredefinedType(value, mDatabase == null ? ReleaseVersion.IFC4X3 : mDatabase.Release); } } - public override string Name { get { return base.Name; } set { base.Name = (string.IsNullOrEmpty(value) ? "NOTDEFINED" : value); } } internal IfcBuildingElementProxy() : base() { } internal IfcBuildingElementProxy(DatabaseIfc db, IfcBuildingElementProxy p, DuplicateOptions options) : base(db, p, options) { PredefinedType = p.PredefinedType; } - public IfcBuildingElementProxy(IfcObjectDefinition host, IfcObjectPlacement p, IfcProductDefinitionShape r) : base(host, p, r) { Name = "NOTDEFINED"; } + public IfcBuildingElementProxy(IfcObjectDefinition host, IfcObjectPlacement p, IfcProductDefinitionShape r) : base(host, p, r) { } public IfcBuildingElementProxy(IfcProduct host, IfcMaterialProfileSetUsage profile, IfcAxis2Placement3D placement, double length) : base(host, profile, placement,length) { } } [Serializable] diff --git a/Core/IFC/IFC G.cs b/Core/IFC/IFC G.cs index 626dc1c..e6f0a69 100644 --- a/Core/IFC/IFC G.cs +++ b/Core/IFC/IFC G.cs @@ -718,10 +718,11 @@ namespace GeometryGym.Ifc } } public IfcGroup(DatabaseIfc db, string name) : base(db) { Name = name; } - public IfcGroup(IfcSpatialElement spatial, string name) : base(spatial.Database) + public IfcGroup(IfcSpatialElement spatial, string name) : base(spatial.Database) { Name = name; - if (!(this is IfcZone)) + var release = (spatial.mDatabase == null ? ReleaseVersion.IFC4 : spatial.mDatabase.Release); + if (!(release < ReleaseVersion.IFC4 && spatial is IfcZone)) { if (spatial.mDatabase.Release <= ReleaseVersion.IFC4X3_RC1) { diff --git a/Core/IFC/IFC O.cs b/Core/IFC/IFC O.cs index e4d0887..7be06ed 100644 --- a/Core/IFC/IFC O.cs +++ b/Core/IFC/IFC O.cs @@ -112,9 +112,10 @@ namespace GeometryGym.Ifc } public IfcPhysicalQuantity FindQuantity(string name) { - foreach(IfcElementQuantity qset in mIsDefinedBy.ConvertAll(x=>x.RelatingPropertyDefinition).OfType()) + List elementQuantities = mIsDefinedBy.SelectMany(x => x.RelatingPropertyDefinition.OfType()).ToList(); + foreach(IfcElementQuantity quantitySet in elementQuantities) { - IfcPhysicalQuantity quantity = qset[name]; + IfcPhysicalQuantity quantity = quantitySet[name]; if (quantity != null) return quantity; } @@ -464,7 +465,7 @@ namespace GeometryGym.Ifc Type enumType = fieldInfo.FieldType; if (enumType != null) { - FieldInfo fi = enumType.GetField(predefinedTypeConstant); + FieldInfo fi = enumType.GetField(predefinedTypeConstant.ToUpper()); if (fi == null) { objectType = predefinedTypeConstant; diff --git a/Core/IFC/IFC P.cs b/Core/IFC/IFC P.cs index 07c7bae..a6e5450 100644 --- a/Core/IFC/IFC P.cs +++ b/Core/IFC/IFC P.cs @@ -2133,7 +2133,7 @@ namespace GeometryGym.Ifc public Dictionary HasProperties { get { return mHasProperties; } } internal IfcPropertySet() : base() { } - protected IfcPropertySet(IfcObjectDefinition obj) : base(obj.mDatabase,"") { Name = this.GetType().Name; new IfcRelDefinesByProperties(obj, this); } + protected IfcPropertySet(IfcObjectDefinition obj) : base(obj.mDatabase, "") { Name = this.GetType().Name; new IfcRelDefinesByProperties(obj, this); } protected IfcPropertySet(IfcTypeObject type) : base(type.mDatabase,"") { Name = this.GetType().Name; type.HasPropertySets.Add(this); } public IfcPropertySet(IfcPropertySet pset) : base(pset) { diff --git a/Core/IFC/IFC R.cs b/Core/IFC/IFC R.cs index af999d4..69a351f 100644 --- a/Core/IFC/IFC R.cs +++ b/Core/IFC/IFC R.cs @@ -2384,6 +2384,7 @@ namespace GeometryGym.Ifc public string RepresentationType { get { return mRepresentationType; } set { mRepresentationType = value; } } public SET Items { get { return mItems; } } + public IfcRepresentationMap RepresentationMap { get { return mRepresentationMap; } set { mRepresentationMap = value; } } public IfcPresentationLayerAssignment LayerAssignment { get { return mLayerAssignment; } set { mLayerAssignment = value; } } public SET OfProductRepresentation { get { return mOfProductRepresentation; } } diff --git a/Core/IFC/IFC V.cs b/Core/IFC/IFC V.cs index 02bddbd..1e3fd72 100644 --- a/Core/IFC/IFC V.cs +++ b/Core/IFC/IFC V.cs @@ -532,8 +532,9 @@ namespace GeometryGym.Ifc public override object Value { get { return mValue; } set { mValue = Convert.ToDouble(value); } } public override Type ValueType { get { return typeof(double); } } public double Measure { get { return mValue; } set { mValue = value; } } + public string Format { get; set; } = "{0:0.0################}"; protected IfcMeasureValue(double value) { mValue = value; } - public override string ToString() { return this.GetType().Name.ToUpper() + "(" + ParserSTEP.DoubleToString(mValue) + ")"; } + public override string ToString() { return this.GetType().Name.ToUpper() + "(" + ParserSTEP.DoubleToString(mValue, Format) + ")"; } public override string ValueString { get { return Value.ToString(); } } } [Serializable] @@ -901,8 +902,9 @@ namespace GeometryGym.Ifc public double Magnitude { get; set; } public override object Value { get { return Magnitude; } set { Magnitude = Convert.ToDouble(value); } } public override Type ValueType { get { return typeof(double); } } + public string Format { get; set; } = "{0:0.0################}"; public IfcReal(double value) { Magnitude = value; } - public override string ToString() { return "IFCREAL(" + ParserSTEP.DoubleToString(Magnitude) + ")"; } + public override string ToString() { return "IFCREAL(" + ParserSTEP.DoubleToString(Magnitude, Format) + ")"; } } [Serializable] public partial class IfcText : IfcSimpleValue diff --git a/Core/IFC/ParserIFC.cs b/Core/IFC/ParserIFC.cs index 6aff58d..c752d80 100644 --- a/Core/IFC/ParserIFC.cs +++ b/Core/IFC/ParserIFC.cs @@ -540,7 +540,7 @@ namespace GeometryGym.Ifc string result = className; if (indexOf > 0) { - result = className.Substring(0, indexOf); + result = className.Substring(0, indexOf).Trim(); string remainder = predefinedConstant = className.Substring(indexOf + 1); indexOf = remainder.IndexOf('('); if (indexOf > 0) diff --git a/Core/IFC/Property Sets.cs b/Core/IFC/Property Sets.cs index 70304e7..5f7b913 100644 --- a/Core/IFC/Property Sets.cs +++ b/Core/IFC/Property Sets.cs @@ -103,7 +103,7 @@ namespace GeometryGym.Ifc public IfcPropertyListValue MessagingIDs { set { value.Name = "MessagingIDs"; addProperty(value); } } public Pset_Address(IfcBuilding instance) : base(instance) { } public Pset_Address(IfcActor instance) : base(instance) { } - public Pset_Address(IfcFacility instance) : base(instance) { } + public Pset_Address(IfcSite instance) : base(instance) { } } public partial class Pset_AirSideSystemInformation : IfcPropertySet { diff --git a/Core/IFC/STEP/IFC A STEP.cs b/Core/IFC/STEP/IFC A STEP.cs index 2282c27..66b8502 100644 --- a/Core/IFC/STEP/IFC A STEP.cs +++ b/Core/IFC/STEP/IFC A STEP.cs @@ -339,7 +339,8 @@ namespace GeometryGym.Ifc } internal override void parse(string str, ref int pos, ReleaseVersion release, int len, ConcurrentDictionary dictionary) { - mTangentialContinuity = ParserIfc.StripLogical(str, ref pos, len); + if (str[0] != '\'') + mTangentialContinuity = ParserIfc.StripLogical(str, ref pos, len); mStartTag = ParserSTEP.Decode(ParserSTEP.StripString(str, ref pos, len)); mEndTag = ParserSTEP.Decode(ParserSTEP.StripString(str, ref pos, len)); } @@ -403,10 +404,10 @@ namespace GeometryGym.Ifc { protected override string BuildStringSTEP(ReleaseVersion release) { - return base.BuildStringSTEP(release) + "," + ParserSTEP.DoubleOptionalToString(mStartDistAlong) + "," + - ParserSTEP.DoubleOptionalToString(mHorizontalLength) + "," + ParserSTEP.DoubleToString(mStartCantLeft) + "," + - ParserSTEP.DoubleOptionalToString(mEndCantLeft) + "," + ParserSTEP.DoubleToString(mStartCantRight) + "," + - ParserSTEP.DoubleOptionalToString(mEndCantRight) + (release == ReleaseVersion.IFC4X3_RC3 ? ",$" : "") + + return base.BuildStringSTEP(release) + "," + formatLength(mStartDistAlong) + "," + + formatLength(mHorizontalLength) + "," + formatLength(mStartCantLeft) + "," + + formatLength(mEndCantLeft) + "," + formatLength(mStartCantRight) + "," + + formatLength(mEndCantRight) + (release == ReleaseVersion.IFC4X3_RC3 ? ",$" : "") + ",." + mPredefinedType.ToString() + "."; } internal override void parse(string str, ref int pos, ReleaseVersion release, int len, ConcurrentDictionary dictionary) diff --git a/Core/IFC/STEP/IFC R STEP.cs b/Core/IFC/STEP/IFC R STEP.cs index 3aed931..c5d63e0 100644 --- a/Core/IFC/STEP/IFC R STEP.cs +++ b/Core/IFC/STEP/IFC R STEP.cs @@ -1583,6 +1583,8 @@ namespace GeometryGym.Ifc protected override string BuildStringSTEP(ReleaseVersion release) { string name = Name; + if(string.IsNullOrEmpty(name) && this is IfcBuildingElementProxy) + name = "NOTDEFINED"; return "'" + mGlobalId + (mOwnerHistory == null ? "',$" : "',#" + mOwnerHistory.StepId) + (string.IsNullOrEmpty(name) ? ",$," : ",'" + ParserSTEP.Encode(name) + "',") + (string.IsNullOrEmpty(mDescription) ? "$" : "'" + ParserSTEP.Encode(mDescription) + "'"); diff --git a/Core/STEP/ParserSTEP.cs b/Core/STEP/ParserSTEP.cs index 6af393a..eb2c49a 100644 --- a/Core/STEP/ParserSTEP.cs +++ b/Core/STEP/ParserSTEP.cs @@ -330,11 +330,15 @@ namespace GeometryGym.STEP return new IfcBinary(array); } public static string BoolToString(bool b) { return (b ? ".T." : ".F."); } - public static string DoubleToString(double d) + public static string DoubleToString(double d) + { + return DoubleToString(d, "{0:0.0################}"); + } + public static string DoubleToString(double d, string format) { if (double.IsNaN(d) || double.IsInfinity(d)) return "0.0"; - return String.Format(CultureInfo.InvariantCulture, "{0:0.0################}", d); + return String.Format(CultureInfo.InvariantCulture, format, d); } public static string DoubleExponentialString(double d) { diff --git a/DLL Projects/GeometryGymIFC/Properties/AssemblyInfo.cs b/DLL Projects/GeometryGymIFC/Properties/AssemblyInfo.cs index a86edbd..e17db55 100644 --- a/DLL Projects/GeometryGymIFC/Properties/AssemblyInfo.cs +++ b/DLL Projects/GeometryGymIFC/Properties/AssemblyInfo.cs @@ -20,8 +20,8 @@ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -[assembly: AssemblyVersion("24.05.08.0")] -[assembly: AssemblyFileVersion("24.05.08.0")] +[assembly: AssemblyVersion("24.08.23.0")] +[assembly: AssemblyFileVersion("24.08.23.0")] [assembly: AssemblyTitle("GeometryGymIFC")] [assembly: AssemblyDescription("C# classes to generate and parse buildingSMART IFC (Industry Foundation Class) files")] diff --git a/DLL Projects/GeometryGymIFCRhinoCommonx64/Properties/AssemblyInfo.cs b/DLL Projects/GeometryGymIFCRhinoCommonx64/Properties/AssemblyInfo.cs index 566a376..5fd2f6e 100644 --- a/DLL Projects/GeometryGymIFCRhinoCommonx64/Properties/AssemblyInfo.cs +++ b/DLL Projects/GeometryGymIFCRhinoCommonx64/Properties/AssemblyInfo.cs @@ -20,8 +20,8 @@ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -[assembly: AssemblyVersion("24.05.08.0")] -[assembly: AssemblyFileVersion("24.05.08.0")] +[assembly: AssemblyVersion("24.08.23.0")] +[assembly: AssemblyFileVersion("24.08.23.0")] // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. diff --git a/DLL Projects/GeometryGymIFCcore/GeometryGymIFCcore.csproj b/DLL Projects/GeometryGymIFCcore/GeometryGymIFCcore.csproj index 6abbbc9..7382bd5 100644 --- a/DLL Projects/GeometryGymIFCcore/GeometryGymIFCcore.csproj +++ b/DLL Projects/GeometryGymIFCcore/GeometryGymIFCcore.csproj @@ -3,7 +3,7 @@ netstandard2.0 GeometryGymIFC_Core - 24.05.08 + 24.08.23 Geometry Gym GeometryGymIFC_Core .Net Standard 2.0 C# classes to generate and parse buildingSMART IFC (Industry Foundation Class) files @@ -14,8 +14,8 @@ License https://github.com/GeometryGym/GeometryGymIFC/blob/master/LICENSE https://github.com/GeometryGym/GeometryGymIFC BIM, IFC, openBIM - 24.05.08.0 - 24.05.08.0 + 24.08.23.0 + 24.08.23.0 diff --git a/Extensions/RhinoCommon IFC/IFC B RhinoCommon.cs b/Extensions/RhinoCommon IFC/IFC B RhinoCommon.cs index 1693ae1..21d6a4e 100644 --- a/Extensions/RhinoCommon IFC/IFC B RhinoCommon.cs +++ b/Extensions/RhinoCommon IFC/IFC B RhinoCommon.cs @@ -29,8 +29,8 @@ namespace GeometryGym.Ifc { public partial class IfcBSplineCurve { - protected IfcBSplineCurve(DatabaseIfc m, NurbsCurve nonRationalCurve, bool twoD) - : this(m, nonRationalCurve.Degree) + protected IfcBSplineCurve(DatabaseIfc db, NurbsCurve nonRationalCurve, bool twoD) + : this(db, nonRationalCurve.Degree) { int ilast = nonRationalCurve.Points.Count - (nonRationalCurve.IsPeriodic ? mDegree : 0); if (twoD) @@ -38,7 +38,7 @@ namespace GeometryGym.Ifc for (int icounter = 0; icounter < ilast; icounter++) { Point3d p3 = nonRationalCurve.Points[icounter].Location; - mControlPointsList.Add(new IfcCartesianPoint(m, new Point2d(p3.X, p3.Y))); + mControlPointsList.Add(new IfcCartesianPoint(db, new Point2d(p3.X, p3.Y))); } if (nonRationalCurve.IsPeriodic) { @@ -49,7 +49,7 @@ namespace GeometryGym.Ifc else { for (int icounter = 0; icounter < ilast; icounter++) - mControlPointsList.Add(new IfcCartesianPoint(m, nonRationalCurve.Points[icounter].Location)); + mControlPointsList.Add(new IfcCartesianPoint(db, nonRationalCurve.Points[icounter].Location)); if (nonRationalCurve.IsPeriodic) { for (int icounter = 0; icounter < mDegree; icounter++) @@ -66,16 +66,16 @@ namespace GeometryGym.Ifc mKnotMultiplicities.AddRange(multiplicities); mKnots.AddRange(knots); } - internal IfcBSplineCurveWithKnots(DatabaseIfc m, NurbsCurve nc, bool twoD) - : base(m, nc, twoD) + internal IfcBSplineCurveWithKnots(DatabaseIfc db, NurbsCurve nc, bool twoD) + : base(db, nc, twoD) { if (mDatabase.mModelView == ModelView.Ifc4Reference) throw new Exception("Invalid Model View for IfcBSplineCurveWithKnots : " + mDatabase.ModelView.ToString()); ClosedCurve = nc.IsClosed ? IfcLogicalEnum.TRUE : IfcLogicalEnum.FALSE; adoptKnotsAndMultiplicities(nc); } - public IfcBSplineCurveWithKnots(DatabaseIfc m, int degree, List controlPoints, IEnumerable multiplicities, IEnumerable knots, IfcKnotType knotSpec) : - base(degree, controlPoints.ConvertAll(x => new IfcCartesianPoint(m, x))) + public IfcBSplineCurveWithKnots(DatabaseIfc db, int degree, List controlPoints, IEnumerable multiplicities, IEnumerable knots, IfcKnotType knotSpec) : + base(degree, controlPoints.ConvertAll(x => new IfcCartesianPoint(db, x))) { if (mDatabase.mModelView != ModelView.Ifc4Reference) throw new Exception("Invalid Model View for IfcBSplineCurveWithKnots : " + mDatabase.ModelView.ToString()); diff --git a/Extensions/RhinoCommon IFC/IFC C RhinoCommon.cs b/Extensions/RhinoCommon IFC/IFC C RhinoCommon.cs index 6a2ef61..9dac8b1 100644 --- a/Extensions/RhinoCommon IFC/IFC C RhinoCommon.cs +++ b/Extensions/RhinoCommon IFC/IFC C RhinoCommon.cs @@ -34,7 +34,7 @@ namespace GeometryGym.Ifc public Point2d Location2d() { return new Point2d(mCoordinateX, double.IsNaN( mCoordinateY) ? 0 : mCoordinateY); } internal Point3d Coordinates3d { set { mCoordinateX = value.X; mCoordinateY = value.Y; mCoordinateZ = value.Z; } } internal Point2d Coordinates2d { set { mCoordinateX = value.X; mCoordinateY = value.Y; mCoordinateZ = double.NaN; } } - internal IfcCartesianPoint(DatabaseIfc m, Point3d pt) : base(m) { Coordinates3d = pt; } + internal IfcCartesianPoint(DatabaseIfc db, Point3d pt) : base(db) { Coordinates3d = pt; } internal void adopt(Point3d pt) { if (this.is2D) @@ -42,7 +42,7 @@ namespace GeometryGym.Ifc else Coordinates3d = pt; } - internal IfcCartesianPoint(DatabaseIfc m, Point2d pt) : base(m) { Coordinates2d = pt; } + internal IfcCartesianPoint(DatabaseIfc db, Point2d pt) : base(db) { Coordinates2d = pt; } } public partial class IfcCartesianPointList {