Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,22 @@ All notable changes to the `IfcIO` library are documented in this file.

## [Unreleased]

## [0.11.1] - 2026-11-13

### Fixed
- **`IfcIO.Scene` NuGet package**: published for the first time. nuget.org refused `IfcIO.Scene` 0.11.0 because the
upper bound of its `IOScene` range, `0.2.0-0`, is a version it does not accept in a dependency (a prerelease label of
one part must start with a letter). The range is now `[0.1.0, 0.2.0-0.0)`, which keeps out every 0.2.0 preview
except `0.2.0-0`, a version IOScene does not publish.
`IfcIO` and `IfcIO.Cli` 0.11.1 have the same code as 0.11.0.
- `tools/pack-release.ps1` fails a release whose `IfcIO.Scene` dependency bounds nuget.org would refuse, and one whose
`IOScene` range has no lower bound.

## [0.11.0] - 2026-11-13

### Added
- **`IfcIO.Scene`**: `IfcSceneReader` converts an IFC file or `IfcModel` into an `IOScene` `SceneDocument` in metres with Z up (GlobalIds as `SourceId` and `IfcGuid`, storeys as levels and tree nodes, property and quantity sets keyed `ifc:`, materials, 4D schedules), with diagnostics for elements without geometry. See `docs/scene-adapter.md`.
- **`IfcIO.Scene` NuGet package**: published on the `IfcIO` release tag and depends on exactly the same `IfcIO` version (`[X.Y.Z]`). It references `IOScene` with the range `[0.1.0, 0.2.0-0)`; a release that would depend on an `IOScene` preview fails.
- **`IfcIO.Scene` NuGet package**: published on the `IfcIO` release tag and depends on exactly the same `IfcIO` version (`[X.Y.Z]`). It references `IOScene` with the range `[0.1.0, 0.2.0-0)`; a release that would depend on an `IOScene` preview fails. Not published with 0.11.0: nuget.org refused the package because of that range (see 0.11.1).

### Fixed
- **World placement of geometry read from IFC (`IfcModel.Open`)**: element meshes are now in world coordinates. Previously object placements were ignored and every element sat at its local origin.
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ Report security vulnerabilities privately through the **Security** tab.
## Scene adapter

`src/IfcIO.Scene` converts IfcIO models into `IOScene` documents and uses only the public API of `IfcIO`; the `IfcIO`
package itself keeps no dependencies. `IOScene` is referenced with the range `[0.1.0, 0.2.0-0)`, and restore takes the
package itself keeps no dependencies. `IOScene` is referenced with the range `[0.1.0, 0.2.0-0.0)`, and restore takes the
lowest version in it, 0.1.0 from NuGet.org. To build against an `IOScene` version that is not on NuGet.org yet, start
the range in `Directory.Packages.props` at that version (for a new minor, move the upper bound too, for example
`[0.2.0-preview.1, 0.3.0-0)`) and restore from a local folder of packages:
`[0.2.0-preview.1, 0.3.0-0.0)`) and restore from a local folder of packages:
`dotnet build IfcIO.slnx -p:RestoreAdditionalProjectSources=<folder>`. Changing the `SceneModel.Key`, `SourceId` or
`IfcGuid` the adapter writes, its `ifc:` key format, or the value form (`Text`, `Kind`, `Unit`) it writes under a key
fails the golden identity test and is a breaking release.
Expand Down
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
</PropertyGroup>

<PropertyGroup>
<Version>0.11.0</Version>
<Version>0.11.1</Version>
<Authors>mahach666</Authors>
<Copyright>Copyright (c) 2026 IOExtend</Copyright>
<Product>IfcIO</Product>
Expand Down
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
</PropertyGroup>

<ItemGroup>
<PackageVersion Include="IOScene" Version="[0.1.0, 0.2.0-0)" />
<PackageVersion Include="IOScene" Version="[0.1.0, 0.2.0-0.0)" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageVersion Include="xunit" Version="2.9.3" />
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.4" />
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ Reads and writes ISO 10303-21 STEP physical files conforming to **IFC2x3 Coordin

## Limitations

- Version 0.11.0 is a preview. The API can evolve before 1.0.
- Version 0.11.1 is a preview. The API can evolve before 1.0.
- IFC5 (USD/JSON) is not yet supported.
- Boolean mesh cutting evaluates planar CSG half-spaces; non-planar curved intersections are tessellated.

Expand Down
4 changes: 2 additions & 2 deletions docs/scene-adapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ that read scenes work from it. The scene model and its rules are specified in th
its [key registry](https://github.com/IOExtend/IOScene/blob/main/docs/keys.md).

Status: preview. The `IfcIO.Scene` package is released with IfcIO, on the same tag, and depends on exactly the same
`IfcIO` version. It references `IOScene` with the range `[0.1.0, 0.2.0-0)`: any 0.1 release from 0.1.0 on, and no
preview of the next breaking line.
`IfcIO` version. It references `IOScene` with the range `[0.1.0, 0.2.0-0.0)`: any 0.1 release from 0.1.0 on, and no
preview of the next breaking line except `0.2.0-0`, which IOScene does not publish. Its first release is 0.11.1.

## Usage

Expand Down
2 changes: 1 addition & 1 deletion src/IfcIO.Scene/IfcIO.Scene.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<Description>Converts IFC models read by IfcIO into IOScene documents in metres with Z up, keeping GlobalIds, storeys, property sets, quantities and 4D schedules.</Description>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<!-- IOScene is referenced by a range whose upper bound is a prerelease ([0.N.0, 0.N+1.0-0)); NU5104 is expected. -->
<!-- IOScene is referenced by a range whose upper bound is a prerelease ([0.N.0, 0.N+1.0-0.0)); NU5104 is expected. -->
<NoWarn>$(NoWarn);NU5104</NoWarn>
</PropertyGroup>

Expand Down
17 changes: 15 additions & 2 deletions tools/pack-release.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,21 @@ function Assert-AdapterNuspec([string]$NuspecPath, [string]$EngineId, [string]$V
if ($scene.Count -eq 0) { throw "$NuspecPath has no dependency on IOScene." }
foreach ($dependency in $scene) {
$range = $dependency.GetAttribute('version')
if ($range.TrimStart('[', '(').Split(',')[0].Contains('-')) {
throw "$NuspecPath depends on IOScene '$range', whose lower bound is a prerelease; release IOScene first and require its stable version."
$lower = $range.TrimStart('[', '(').Split(',')[0].Trim()
if ($lower -eq '' -or $lower.Contains('-')) {
throw "$NuspecPath depends on IOScene '$range', whose lower bound is missing or a prerelease; release IOScene first and require its stable version."
}
}
# (c) nuget.org refuses a dependency bound with metadata, or one whose prerelease label has one part and does not start
# with a letter (NuGetGallery ManifestValidator.ValidateDependencyVersion); dotnet pack accepts both, so only the push would fail.
foreach ($dependency in $dependencies) {
$range = $dependency.GetAttribute('version')
foreach ($bound in $range.Trim('[', ']', '(', ')').Split(',')) {
$bound = $bound.Trim()
$label = if ($bound.Contains('-')) { $bound.Substring($bound.IndexOf('-') + 1) } else { '' }
if ($bound.Contains('+') -or ($label -ne '' -and -not $label.Contains('.') -and $label -notmatch '^[a-z][0-9a-z-]*$')) {
throw "$NuspecPath depends on $($dependency.GetAttribute('id')) '$range', whose bound '$bound' nuget.org refuses."
}
}
}
}
Expand Down
Loading