├── .gitattributes ├── .gitignore ├── Bimangle.ForgeEngine.3DXML ├── App.config ├── Bimangle.ForgeEngine.3DXML.csproj ├── Config │ ├── AppConfig.cs │ ├── AppConfigCesium3DTiles.cs │ ├── AppConfigGltf.cs │ ├── AppConfigManager.cs │ └── AppConfigSvf.cs ├── Core │ ├── App.cs │ ├── CancellationTokenSourceProxy.cs │ ├── CustomTraceListener.cs │ ├── GeoreferncingAdapter.cs │ ├── ILog.cs │ ├── Job.cs │ ├── LicenseConfig.cs │ ├── LogProgress.cs │ ├── Options.cs │ ├── ProjValidator.cs │ ├── RuntimeLog.cs │ └── TranslateLog.cs ├── NugetCommands.txt ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ ├── Settings.settings │ └── app.manifest ├── Resources │ └── app.ico ├── Strings.Designer.cs ├── Strings.resx ├── Strings.zh-Hans.resx ├── StringsUI.Designer.cs ├── StringsUI.resx ├── StringsUI.zh-Hans.resx ├── Toolset │ ├── CommandToolsetCheckEngineLogs.cs │ ├── CommandToolsetCreateProj.cs │ ├── CommandToolsetPickPositionFromMap.cs │ └── CommandToolsetQuickPreview.cs ├── UI │ ├── Controls │ │ ├── ExportCesium3DTiles.Designer.cs │ │ ├── ExportCesium3DTiles.cs │ │ ├── ExportCesium3DTiles.resx │ │ ├── ExportCesium3DTiles.zh-Hans.resx │ │ ├── ExportGltf.Designer.cs │ │ ├── ExportGltf.cs │ │ ├── ExportGltf.resx │ │ ├── ExportGltf.zh-Hans.resx │ │ ├── ExportSvfzip.Designer.cs │ │ ├── ExportSvfzip.cs │ │ ├── ExportSvfzip.resx │ │ ├── ExportSvfzip.zh-Hans.resx │ │ ├── IExportControl.cs │ │ └── IExportForm.cs │ ├── FormExport.Designer.cs │ ├── FormExport.cs │ ├── FormExport.resx │ ├── FormExport.zh-Hans.resx │ ├── FormProgressEx.cs │ ├── FormProgressEx.designer.cs │ ├── FormProgressEx.resx │ └── FormProgressEx.zh-Hans.resx ├── Utility │ ├── AppHelper.cs │ ├── FormHelper.cs │ └── ProgressExHelper.cs └── packages.config ├── Bimangle.ForgeEngine.Dgn ├── AddIn.cs ├── Bimangle.ForgeEngine.Dgn.csproj ├── Command.cs ├── Config │ ├── AppConfig.cs │ ├── AppConfigCesium3DTiles.cs │ ├── AppConfigGltf.cs │ ├── AppConfigManager.cs │ └── AppConfigSvf.cs ├── Core │ ├── GeoreferncingAdapter.cs │ ├── IExternalCommand.cs │ ├── InnerApp.cs │ ├── LicenseConfig.cs │ ├── ProjValidator.cs │ ├── RuntimeLog.cs │ └── Titles.cs ├── Helpers │ ├── Progress │ │ ├── FormProgress.cs │ │ ├── FormProgress.designer.cs │ │ ├── FormProgress.resx │ │ ├── FormProgress.zh-Hans.resx │ │ ├── FormProgressEx.cs │ │ ├── FormProgressEx.designer.cs │ │ ├── FormProgressEx.resx │ │ └── FormProgressEx.zh-Hans.resx │ ├── ProgressExHelper.cs │ └── ProgressHelper.cs ├── NugetCommands.txt ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Readme.md ├── Resources │ ├── Converter_16px_1061192.png │ └── Converter_32px_1061192.png ├── Strings.Designer.cs ├── Strings.resx ├── Strings.zh-Hans.resx ├── Toolset │ ├── CommandToolsetCheckEngineLogs.cs │ ├── CommandToolsetCreateProj.cs │ ├── CommandToolsetPickPosition.cs │ ├── CommandToolsetPickPositionFromMap.cs │ ├── CommandToolsetQuickPreview.cs │ └── PickPosition │ │ ├── FormPickPosition.Designer.cs │ │ ├── FormPickPosition.cs │ │ ├── FormPickPosition.resx │ │ ├── FormPickPosition.zh-Hans.resx │ │ └── ToolPluginPickPoint.cs ├── UI │ ├── Controls │ │ ├── ExportCesium3DTiles.cs │ │ ├── ExportCesium3DTiles.designer.cs │ │ ├── ExportCesium3DTiles.resx │ │ ├── ExportCesium3DTiles.zh-Hans.resx │ │ ├── ExportGltf.cs │ │ ├── ExportGltf.designer.cs │ │ ├── ExportGltf.resx │ │ ├── ExportGltf.zh-Hans.resx │ │ ├── ExportSvfzip.cs │ │ ├── ExportSvfzip.designer.cs │ │ ├── ExportSvfzip.resx │ │ ├── ExportSvfzip.zh-Hans.resx │ │ └── IExportControl.cs │ ├── FormExport.cs │ ├── FormExport.designer.cs │ ├── FormExport.resx │ └── FormExport.zh-Hans.resx ├── Utility │ ├── AppHelper.cs │ ├── AssemblyResolver.cs │ ├── FormHelper.cs │ └── MsgDialog.cs ├── VersionInfo.cs ├── app.config ├── commands.xml └── packages.config ├── Bimangle.ForgeEngine.Dwg ├── App.config ├── Bimangle.ForgeEngine.Dwg.csproj ├── Config │ ├── AppConfig.cs │ ├── AppConfigManager.cs │ └── AppConfigSvf.cs ├── Core │ ├── App.cs │ ├── Job.cs │ ├── LicenseConfig.cs │ ├── Log │ │ ├── ILog.cs │ │ ├── LogConsole.cs │ │ ├── LogDummy.cs │ │ └── LogTrace.cs │ ├── Options.cs │ └── RuntimeLog.cs ├── Fonts │ ├── Eref.shx │ ├── HZTXT.SHX │ ├── Readme.txt │ ├── acad.fmp │ ├── bigfont.shx │ ├── tssdchn.shx │ ├── tssdeng.shx │ └── whgtxt.shx ├── ForgeEngineCLI.cs ├── Helpers │ ├── Progress │ │ ├── FormProgress.cs │ │ ├── FormProgress.designer.cs │ │ ├── FormProgress.resx │ │ └── FormProgress.zh-Hans.resx │ └── ProgressHelper.cs ├── NugetCommands.txt ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ ├── Settings.settings │ └── app.manifest ├── Strings.Designer.cs ├── Strings.resx ├── Strings.zh-Hans.resx ├── StringsUI.Designer.cs ├── StringsUI.resx ├── StringsUI.zh-Hans.resx ├── UI │ ├── FormExport.cs │ ├── FormExport.designer.cs │ ├── FormExport.resx │ └── FormExport.zh-Hans.resx ├── Utility │ ├── AppHelper.cs │ └── FormHelper.cs └── packages.config ├── Bimangle.ForgeEngine.Georeferncing ├── Bimangle.ForgeEngine.Georeferncing.csproj ├── FormGeoreferncing.Designer.cs ├── FormGeoreferncing.cs ├── FormGeoreferncing.resx ├── FormGeoreferncing.zh-Hans.resx ├── FormGeoreferncingTest.Designer.cs ├── FormGeoreferncingTest.cs ├── FormGeoreferncingTest.resx ├── FormGeoreferncingTest.zh-Hans.resx ├── FormProjCreate.Designer.cs ├── FormProjCreate.cs ├── FormProjCreate.resx ├── FormProjCreate.zh-Hans.resx ├── FormProjParamCalc.Designer.cs ├── FormProjParamCalc.cs ├── FormProjParamCalc.resx ├── FormProjParamCalc.zh-Hans.resx ├── FormTransform.Designer.cs ├── FormTransform.cs ├── FormTransform.resx ├── FormTransform.zh-Hans.resx ├── FormTransformP4.Designer.cs ├── FormTransformP4.cs ├── FormTransformP4.resx ├── FormTransformP4.zh-Hans.resx ├── GeoStrings.Designer.cs ├── GeoStrings.resx ├── GeoStrings.zh-hans.resx ├── GeoreferncingHelper.cs ├── GeoreferncingHost.cs ├── IGeoreferncingHost.cs ├── Interface │ ├── Adapter.cs │ └── IAdapterHost.cs ├── ProjBuilder.cs ├── Properties │ └── AssemblyInfo.cs ├── TestRunState.cs ├── Utility │ ├── ControlEventHandlers.cs │ ├── FormHelper.cs │ ├── MetadataXml.cs │ ├── ProjFile.cs │ └── TextHelper.cs └── packages.config ├── Bimangle.ForgeEngine.Navisworks.Automation.sln ├── Bimangle.ForgeEngine.Navisworks.Automation ├── App.config ├── Bimangle.ForgeEngine.Navisworks.Automation.csproj ├── Config │ └── JobConfig.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings └── packages.config ├── Bimangle.ForgeEngine.Navisworks ├── Bimangle.ForgeEngine.Nw_R2014.csproj ├── Bimangle.ForgeEngine.Nw_R2015.csproj ├── Bimangle.ForgeEngine.Nw_R2016.csproj ├── Bimangle.ForgeEngine.Nw_R2017.csproj ├── Bimangle.ForgeEngine.Nw_R2018.csproj ├── Bimangle.ForgeEngine.Nw_R2019.csproj ├── Bimangle.ForgeEngine.Nw_R2020.csproj ├── Bimangle.ForgeEngine.Nw_R2021.csproj ├── Bimangle.ForgeEngine.Nw_R2022.csproj ├── Bimangle.ForgeEngine.Nw_R2023.csproj ├── Bimangle.ForgeEngine.Nw_R2024.csproj ├── Bimangle.ForgeEngine.Nw_R2025.csproj ├── Bimangle.ForgeEngine.Nw_R2026.csproj ├── Command.cs ├── CommandBatch.cs ├── Config │ ├── AppConfig.cs │ ├── AppConfigCesium3DTiles.cs │ ├── AppConfigGltf.cs │ ├── AppConfigManager.cs │ ├── AppConfigSvf.cs │ └── JobConfig.cs ├── Core │ ├── App.cs │ ├── Batch │ │ └── Router.cs │ ├── GeoreferncingAdapter.cs │ ├── LicenseConfig.cs │ ├── ProjValidator.cs │ └── RuntimeLog.cs ├── Helpers │ ├── Progress │ │ ├── FormProgressEx.cs │ │ ├── FormProgressEx.designer.cs │ │ ├── FormProgressEx.resx │ │ └── FormProgressEx.zh-Hans.resx │ └── ProgressExHelper.cs ├── Images │ ├── ExportToCesium3DTiles_16px.ico │ ├── ExportToCesium3DTiles_32px.ico │ ├── ExportToGltf_16px.ico │ ├── ExportToGltf_32px.ico │ ├── ExportToSvfzip_16px.ico │ ├── ExportToSvfzip_32px.ico │ ├── Toolset_16px.ico │ └── Toolset_32px.ico ├── NugetCommands.txt ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resources │ ├── Converter_32px_1061192.png │ └── app.ico ├── Strings.Designer.cs ├── Strings.resx ├── Strings.zh-Hans.resx ├── Toolset │ ├── CommandToolsetCheckEngineLogs.cs │ ├── CommandToolsetCreateProj.cs │ ├── CommandToolsetPickPosition.cs │ ├── CommandToolsetPickPositionFromMap.cs │ ├── CommandToolsetQuickPreview.cs │ └── PickPosition │ │ ├── FormPickPosition.Designer.cs │ │ ├── FormPickPosition.cs │ │ ├── FormPickPosition.resx │ │ ├── FormPickPosition.zh-Hans.resx │ │ └── ToolPluginPickPoint.cs ├── UI │ ├── Controls │ │ ├── ExportCesium3DTiles.cs │ │ ├── ExportCesium3DTiles.designer.cs │ │ ├── ExportCesium3DTiles.resx │ │ ├── ExportCesium3DTiles.zh-Hans.resx │ │ ├── ExportGltf.cs │ │ ├── ExportGltf.designer.cs │ │ ├── ExportGltf.resx │ │ ├── ExportGltf.zh-Hans.resx │ │ ├── ExportSvfzip.Designer.cs │ │ ├── ExportSvfzip.cs │ │ ├── ExportSvfzip.resx │ │ ├── ExportSvfzip.zh-Hans.resx │ │ └── IExportControl.cs │ ├── FormExport.cs │ ├── FormExport.designer.cs │ ├── FormExport.resx │ └── FormExport.zh-Hans.resx ├── Utility │ ├── AppHelper.cs │ └── FormHelper.cs ├── VersionInfo.cs ├── app.config ├── en-US │ └── Command.xaml ├── packages.Bimangle.ForgeEngine.Nw_R2014.config ├── packages.Bimangle.ForgeEngine.Nw_R2015.config ├── packages.Bimangle.ForgeEngine.Nw_R2016.config ├── packages.Bimangle.ForgeEngine.Nw_R2017.config ├── packages.Bimangle.ForgeEngine.Nw_R2018.config ├── packages.Bimangle.ForgeEngine.Nw_R2019.config ├── packages.Bimangle.ForgeEngine.Nw_R2020.config ├── packages.Bimangle.ForgeEngine.Nw_R2021.config ├── packages.Bimangle.ForgeEngine.Nw_R2022.config ├── packages.Bimangle.ForgeEngine.Nw_R2023.config ├── packages.Bimangle.ForgeEngine.Nw_R2024.config ├── packages.Bimangle.ForgeEngine.Nw_R2025.config ├── packages.Bimangle.ForgeEngine.Nw_R2026.config └── zh-CN │ └── Command.xaml ├── Bimangle.ForgeEngine.Revit ├── App.cs ├── Bimangle.ForgeEngine.Revit_R2014.csproj ├── Bimangle.ForgeEngine.Revit_R2014.csproj.DotSettings ├── Bimangle.ForgeEngine.Revit_R2015.csproj ├── Bimangle.ForgeEngine.Revit_R2015.csproj.DotSettings ├── Bimangle.ForgeEngine.Revit_R2016.csproj ├── Bimangle.ForgeEngine.Revit_R2017.csproj ├── Bimangle.ForgeEngine.Revit_R2017.csproj.DotSettings ├── Bimangle.ForgeEngine.Revit_R2018.csproj ├── Bimangle.ForgeEngine.Revit_R2018.csproj.DotSettings ├── Bimangle.ForgeEngine.Revit_R2019.csproj ├── Bimangle.ForgeEngine.Revit_R2020.csproj ├── Bimangle.ForgeEngine.Revit_R2021.csproj ├── Bimangle.ForgeEngine.Revit_R2022.csproj ├── Bimangle.ForgeEngine.Revit_R2023.csproj ├── Bimangle.ForgeEngine.Revit_R2024.csproj ├── Bimangle.ForgeEngine.Revit_R2025.csproj ├── Bimangle.ForgeEngine.Revit_R2026.csproj ├── Bimangle.ForgeEngine.Samples.addin ├── CommandExportCesium3DTiles.cs ├── CommandExportGltf.cs ├── CommandExportSvfzip.cs ├── Config │ ├── AppConfig.cs │ ├── AppConfigCesium3DTiles.cs │ ├── AppConfigGltf.cs │ ├── AppConfigManager.cs │ └── AppConfigSvf.cs ├── Core │ ├── GeoreferncingAdapter.cs │ ├── GlobalConfig.cs │ ├── InnerApp.cs │ ├── InnerCommandExportCesium3DTiles.cs │ ├── InnerCommandExportGltf.cs │ ├── InnerCommandExportSvfzip.cs │ ├── LicenseConfig.cs │ ├── ProjValidator.cs │ └── RuntimeLog.cs ├── Custom │ ├── ExportHandler.cs │ └── LevelParser.cs ├── Directory.Build.props ├── Helpers │ ├── Progress │ │ ├── FormProgressEx.cs │ │ ├── FormProgressEx.designer.cs │ │ ├── FormProgressEx.resx │ │ └── FormProgressEx.zh-Hans.resx │ └── ProgressExHelper.cs ├── NugetCommands.txt ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resources │ ├── Cesium3DTiles_16px.png │ ├── Cesium3DTiles_32px.png │ ├── Converter_16px_1061192.png │ ├── Converter_32px_1061192.png │ ├── Toolset_16px.png │ ├── Toolset_32px.png │ ├── app.ico │ ├── gltf_16px.png │ └── gltf_32px.png ├── Strings.Designer.cs ├── Strings.resx ├── Strings.zh-Hans.resx ├── Toolset │ ├── CheckEngineLogs │ │ └── CommandToolsetCheckEngineLogs.cs │ ├── CheckRevitJournals │ │ └── CommandToolsetCheckRevitJournals.cs │ ├── CreateProj │ │ └── CommandToolsetCreateProj.cs │ ├── PickPosition │ │ ├── CommandToolsetPickPosition.cs │ │ ├── FormPickPosition.Designer.cs │ │ ├── FormPickPosition.cs │ │ ├── FormPickPosition.resx │ │ └── FormPickPosition.zh-Hans.resx │ ├── PickPositionFromMap │ │ └── CommandToolsetPickPositionFromMap.cs │ └── QuickPreview │ │ └── CommandToolsetQuickPreview.cs ├── UI │ ├── Controls │ │ ├── ExportCesium3DTiles.Designer.cs │ │ ├── ExportCesium3DTiles.cs │ │ ├── ExportCesium3DTiles.resx │ │ ├── ExportCesium3DTiles.zh-Hans.resx │ │ ├── ExportGltf.Designer.cs │ │ ├── ExportGltf.cs │ │ ├── ExportGltf.resx │ │ ├── ExportGltf.zh-Hans.resx │ │ ├── ExportSvfzip.Designer.cs │ │ ├── ExportSvfzip.cs │ │ ├── ExportSvfzip.resx │ │ ├── ExportSvfzip.zh-Hans.resx │ │ └── IExportControl.cs │ ├── FormExport.Designer.cs │ ├── FormExport.cs │ ├── FormExport.resx │ ├── FormExport.zh-Hans.resx │ ├── FormViews.Designer.cs │ ├── FormViews.cs │ ├── FormViews.resx │ └── FormViews.zh-Hans.resx ├── Utility │ ├── AppHelper.cs │ └── FormHelper.cs ├── VersionInfo.cs ├── app.config ├── obj-Bimangle.ForgeEngine.Revit_R2025 │ ├── Bimangle.ForgeEngine.Revit_R2025.csproj.nuget.dgspec.json │ ├── Bimangle.ForgeEngine.Revit_R2025.csproj.nuget.g.props │ ├── Bimangle.ForgeEngine.Revit_R2025.csproj.nuget.g.targets │ └── project.assets.json ├── obj-Bimangle.ForgeEngine.Revit_R2026 │ ├── Bimangle.ForgeEngine.Revit_R2026.csproj.nuget.dgspec.json │ ├── Bimangle.ForgeEngine.Revit_R2026.csproj.nuget.g.props │ ├── Bimangle.ForgeEngine.Revit_R2026.csproj.nuget.g.targets │ └── project.assets.json ├── packages.Bimangle.ForgeEngine.Revit_R2014.config ├── packages.Bimangle.ForgeEngine.Revit_R2015.config ├── packages.Bimangle.ForgeEngine.Revit_R2016.config ├── packages.Bimangle.ForgeEngine.Revit_R2017.config ├── packages.Bimangle.ForgeEngine.Revit_R2018.config ├── packages.Bimangle.ForgeEngine.Revit_R2019.config ├── packages.Bimangle.ForgeEngine.Revit_R2020.config ├── packages.Bimangle.ForgeEngine.Revit_R2021.config ├── packages.Bimangle.ForgeEngine.Revit_R2022.config ├── packages.Bimangle.ForgeEngine.Revit_R2023.config └── packages.Bimangle.ForgeEngine.Revit_R2024.config ├── Bimangle.ForgeEngine.Skp ├── App.config ├── Bimangle.ForgeEngine.Skp.csproj ├── Config │ ├── AppConfig.cs │ ├── AppConfigCesium3DTiles.cs │ ├── AppConfigGltf.cs │ ├── AppConfigManager.cs │ └── AppConfigSvf.cs ├── Core │ ├── App.cs │ ├── GeoreferncingAdapter.cs │ ├── ILog.cs │ ├── Job.cs │ ├── LicenseConfig.cs │ ├── LogProgress.cs │ ├── Options.cs │ ├── ProjValidator.cs │ └── RuntimeLog.cs ├── NugetCommands.txt ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ ├── Settings.settings │ └── app.manifest ├── Resources │ └── app.ico ├── Strings.Designer.cs ├── Strings.resx ├── Strings.zh-Hans.resx ├── StringsUI.Designer.cs ├── StringsUI.resx ├── StringsUI.zh-Hans.resx ├── Toolset │ ├── CommandToolsetCheckEngineLogs.cs │ ├── CommandToolsetCreateProj.cs │ ├── CommandToolsetPickPositionFromMap.cs │ └── CommandToolsetQuickPreview.cs ├── UI │ ├── Controls │ │ ├── ExportCesium3DTiles.Designer.cs │ │ ├── ExportCesium3DTiles.cs │ │ ├── ExportCesium3DTiles.resx │ │ ├── ExportCesium3DTiles.zh-Hans.resx │ │ ├── ExportGltf.Designer.cs │ │ ├── ExportGltf.cs │ │ ├── ExportGltf.resx │ │ ├── ExportGltf.zh-Hans.resx │ │ ├── ExportSvfzip.Designer.cs │ │ ├── ExportSvfzip.cs │ │ ├── ExportSvfzip.resx │ │ ├── ExportSvfzip.zh-Hans.resx │ │ ├── IExportControl.cs │ │ └── IExportForm.cs │ ├── FormExport.Designer.cs │ ├── FormExport.cs │ ├── FormExport.resx │ ├── FormExport.zh-Hans.resx │ ├── FormProgressEx.cs │ ├── FormProgressEx.designer.cs │ ├── FormProgressEx.resx │ └── FormProgressEx.zh-Hans.resx ├── Utility │ ├── AppHelper.cs │ ├── FormHelper.cs │ └── ProgressExHelper.cs └── packages.config ├── Build.sln ├── Build ├── Build.csproj └── NugetCommands.txt ├── Build_VS2022.sln ├── ForgeEngine.Samples.3DXML.sln ├── ForgeEngine.Samples.Dgn.sln ├── ForgeEngine.Samples.Dwg.sln ├── ForgeEngine.Samples.Navisworks2014.sln ├── ForgeEngine.Samples.Navisworks2015.sln ├── ForgeEngine.Samples.Navisworks2016.sln ├── ForgeEngine.Samples.Navisworks2017.sln ├── ForgeEngine.Samples.Navisworks2018.sln ├── ForgeEngine.Samples.Navisworks2019.sln ├── ForgeEngine.Samples.Navisworks2020.sln ├── ForgeEngine.Samples.Navisworks2021.sln ├── ForgeEngine.Samples.Navisworks2022.sln ├── ForgeEngine.Samples.Navisworks2023.sln ├── ForgeEngine.Samples.Navisworks2024.sln ├── ForgeEngine.Samples.Navisworks2025.sln ├── ForgeEngine.Samples.Navisworks2026.sln ├── ForgeEngine.Samples.Revit2014.sln ├── ForgeEngine.Samples.Revit2015.sln ├── ForgeEngine.Samples.Revit2016.sln ├── ForgeEngine.Samples.Revit2017.sln ├── ForgeEngine.Samples.Revit2018.sln ├── ForgeEngine.Samples.Revit2019.sln ├── ForgeEngine.Samples.Revit2020.sln ├── ForgeEngine.Samples.Revit2021.sln ├── ForgeEngine.Samples.Revit2022.sln ├── ForgeEngine.Samples.Revit2023.sln ├── ForgeEngine.Samples.Revit2024.sln ├── ForgeEngine.Samples.Revit2025_VS2022.sln ├── ForgeEngine.Samples.Revit2026_VS2022.sln ├── ForgeEngine.Samples.Skp.sln └── README.md /Bimangle.ForgeEngine.3DXML/Config/AppConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Security.Cryptography; 6 | using System.Text; 7 | using Newtonsoft.Json; 8 | 9 | namespace Bimangle.ForgeEngine._3DXML.Config 10 | { 11 | [Serializable] 12 | class AppConfig 13 | { 14 | public AppConfigSvf Svf { get; set; } 15 | public AppConfigGltf Gltf { get; set; } 16 | public AppConfigCesium3DTiles Cesium3DTiles { get; set; } 17 | 18 | public AppConfig() 19 | { 20 | Svf = new AppConfigSvf(); 21 | Gltf = new AppConfigGltf(); 22 | Cesium3DTiles = new AppConfigCesium3DTiles(); 23 | } 24 | 25 | public AppConfig Clone() 26 | { 27 | return new AppConfig 28 | { 29 | Svf = Svf == null ? new AppConfigSvf() : Svf.Clone(), 30 | Gltf = Gltf == null ? new AppConfigGltf() : Gltf.Clone(), 31 | Cesium3DTiles = Cesium3DTiles == null ? new AppConfigCesium3DTiles() : Cesium3DTiles.Clone() 32 | }; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Config/AppConfigGltf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using FeatureType = Bimangle.ForgeEngine.Common.Formats.Gltf.FeatureType; 5 | 6 | namespace Bimangle.ForgeEngine._3DXML.Config 7 | { 8 | [Serializable] 9 | class AppConfigGltf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigGltf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = false; 22 | AutoOpenAppName = null; 23 | VisualStyle = null; 24 | LevelOfDetail = 6; //默认为 6 25 | Features = new List 26 | { 27 | FeatureType.GenerateModelsDb, 28 | FeatureType.AllowRegroupNodes 29 | }; 30 | } 31 | 32 | public AppConfigGltf Clone() 33 | { 34 | return new AppConfigGltf 35 | { 36 | LastTargetPath = LastTargetPath, 37 | AutoOpenAllow = AutoOpenAllow, 38 | AutoOpenAppName = AutoOpenAppName, 39 | VisualStyle = VisualStyle, 40 | LevelOfDetail = LevelOfDetail, 41 | Features = Features?.ToList() ?? new List() 42 | }; 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Config/AppConfigSvf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Bimangle.ForgeEngine.Common.Formats.Svf._3DXML; 5 | 6 | namespace Bimangle.ForgeEngine._3DXML.Config 7 | { 8 | [Serializable] 9 | class AppConfigSvf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigSvf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = true; 22 | AutoOpenAppName = null; 23 | VisualStyle = null; 24 | LevelOfDetail = -1; 25 | Features = new List 26 | { 27 | FeatureType.GenerateThumbnail, 28 | FeatureType.GenerateModelsDb, 29 | }; 30 | } 31 | 32 | public AppConfigSvf Clone() 33 | { 34 | return new AppConfigSvf 35 | { 36 | LastTargetPath = LastTargetPath, 37 | AutoOpenAllow = AutoOpenAllow, 38 | AutoOpenAppName = AutoOpenAppName, 39 | VisualStyle = VisualStyle, 40 | LevelOfDetail = LevelOfDetail, 41 | Features = Features?.ToList() ?? new List() 42 | }; 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Core/CancellationTokenSourceProxy.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | 4 | namespace Bimangle.ForgeEngine._3DXML.Core 5 | { 6 | [Serializable] 7 | class CancellationTokenSourceProxy : MarshalByRefObject 8 | { 9 | private CancellationTokenSource _Source; 10 | 11 | public CancellationTokenSourceProxy(CancellationTokenSource source) 12 | { 13 | _Source = source; 14 | } 15 | 16 | public void Cancel() 17 | { 18 | _Source?.Cancel(); 19 | } 20 | 21 | #region Overrides of MarshalByRefObject 22 | 23 | public override object InitializeLifetimeService() 24 | { 25 | var lease = (System.Runtime.Remoting.Lifetime.ILease)base.InitializeLifetimeService(); 26 | // Normally, the initial lease time would be much longer. 27 | // It is shortened here for demonstration purposes. 28 | if (lease?.CurrentState == System.Runtime.Remoting.Lifetime.LeaseState.Initial) 29 | { 30 | lease.InitialLeaseTime = TimeSpan.FromSeconds(0);//这里改成0,则是无限期 31 | //lease.SponsorshipTimeout = TimeSpan.FromSeconds(10); 32 | //lease.RenewOnCallTime = TimeSpan.FromSeconds(2); 33 | } 34 | return lease; 35 | } 36 | 37 | #endregion 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Core/CustomTraceListener.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace Bimangle.ForgeEngine._3DXML.Core 9 | { 10 | class CustomTraceListener : TraceListener 11 | { 12 | private Action _Callback; 13 | 14 | public CustomTraceListener(Action callback) 15 | { 16 | _Callback = callback; 17 | } 18 | 19 | #region Overrides of TraceListener 20 | 21 | public override void Write(string message) 22 | { 23 | _Callback?.Invoke(message); 24 | } 25 | 26 | public override void WriteLine(string message) 27 | { 28 | _Callback?.Invoke(message); 29 | } 30 | 31 | #endregion 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Core/ILog.cs: -------------------------------------------------------------------------------- 1 | namespace Bimangle.ForgeEngine._3DXML.Core 2 | { 3 | public interface ILog 4 | { 5 | void WriteLine(string s); 6 | 7 | void Write(string s); 8 | void WriteProgress(int progress); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Core/LogProgress.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using Bimangle.ForgeEngine._3DXML.Utility; 8 | 9 | namespace Bimangle.ForgeEngine._3DXML.Core 10 | { 11 | class LogProgress : ILog 12 | { 13 | private readonly Action _ProgressCallback; 14 | 15 | public LogProgress(ProgressExHelper progress) 16 | { 17 | _ProgressCallback = progress?.GetProgressCallback() ?? throw new ArgumentNullException(nameof(progress)); 18 | } 19 | 20 | #region Implementation of ILog 21 | 22 | public void WriteLine(string s) 23 | { 24 | Debug.WriteLine(s); 25 | } 26 | 27 | public void Write(string s) 28 | { 29 | Debug.Write(s); 30 | } 31 | 32 | public void WriteProgress(int progress) 33 | { 34 | if (progress > 100) progress = 100; 35 | if (progress < 0) progress = 0; 36 | _ProgressCallback(progress); 37 | } 38 | 39 | #endregion 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Core/TranslateLog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace Bimangle.ForgeEngine._3DXML.Core 10 | { 11 | class TranslateLog : IDisposable 12 | { 13 | public static TranslateLog Init(string filePath) 14 | { 15 | var stream = File.OpenWrite(filePath); 16 | return new TranslateLog(stream); 17 | } 18 | 19 | private FileStream _Stream; 20 | private CustomTraceListener _TraceListener; 21 | 22 | private TranslateLog(FileStream stream) 23 | { 24 | _Stream = stream; 25 | _TraceListener = new CustomTraceListener(Log); 26 | } 27 | 28 | public void Debug(string s) 29 | { 30 | Log(s); 31 | } 32 | 33 | public void Log(string s) 34 | { 35 | var log = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + @" " + s + "\r\n"; 36 | 37 | if (_Stream != null) 38 | { 39 | var buffer = Encoding.UTF8.GetBytes(log); 40 | _Stream.Write(buffer, 0, buffer.Length); 41 | _Stream.Flush(true); 42 | } 43 | } 44 | 45 | public TraceListener GetTraceListener() 46 | { 47 | return _TraceListener; 48 | } 49 | 50 | #region IDisposable 51 | 52 | public void Dispose() 53 | { 54 | if (_Stream != null) 55 | { 56 | _Stream.Dispose(); 57 | _Stream = null; 58 | } 59 | 60 | if (_TraceListener != null) 61 | { 62 | _TraceListener.Dispose(); 63 | _TraceListener = null; 64 | } 65 | } 66 | 67 | #endregion 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/NugetCommands.txt: -------------------------------------------------------------------------------- 1 |  2 | # Run follow scripts within Package Manager Console, to ensure the "BimAngle Engine SDK" available. 3 | # Please ignore error messages in the execution of the script, as it is designed to do 4 | 5 | Update-Package -Id Bimangle.ForgeEngine.Common -Project Bimangle.ForgeEngine.Georeferncing 6 | Update-Package -Id Bimangle.ForgeEngine.3DXML -Project Bimangle.ForgeEngine.3DXML 7 | 8 | Update-Package -reinstall 9 | 10 | # You can rebuild now! 11 | 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Runtime.InteropServices; 8 | using System.Threading; 9 | using System.Windows.Forms; 10 | using Bimangle.ForgeEngine._3DXML.Config; 11 | using Bimangle.ForgeEngine._3DXML.Core; 12 | 13 | namespace Bimangle.ForgeEngine._3DXML 14 | { 15 | class Program 16 | { 17 | [STAThread] 18 | static void Main() 19 | { 20 | var appConfig = AppConfigManager.Load(); 21 | var format = Options.DEFAULT_FORMAT; 22 | 23 | Application.EnableVisualStyles(); 24 | Application.SetCompatibleTextRenderingDefault(false); 25 | Application.Run(new UI.FormExport(appConfig, format)); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | #if EXPRESS 9 | [assembly: AssemblyTitle("Bimangle Engine Express (for 3DXML) CLI")] 10 | [assembly: AssemblyProduct("Bimangle Engine Express (for 3DXML)")] 11 | #else 12 | [assembly: AssemblyTitle("Bimangle Engine (for 3DXML) CLI")] 13 | [assembly: AssemblyProduct("Bimangle Engine (for 3DXML)")] 14 | #endif 15 | [assembly: AssemblyDescription("")] 16 | [assembly: AssemblyConfiguration("")] 17 | [assembly: AssemblyCompany("BimAngle")] 18 | [assembly: AssemblyCopyright("Copyright © BimAngle 2017-2025")] 19 | [assembly: AssemblyTrademark("")] 20 | [assembly: AssemblyCulture("")] 21 | 22 | // 将 ComVisible 设置为 false 会使此程序集中的类型 23 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 24 | //请将此类型的 ComVisible 特性设置为 true。 25 | [assembly: ComVisible(false)] 26 | 27 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 28 | [assembly: Guid("ebe269bd-2dc3-410e-a525-e7e7ad97807c")] 29 | 30 | // 程序集的版本信息由下列四个值组成: 31 | // 32 | // 主版本 33 | // 次版本 34 | // 生成号 35 | // 修订号 36 | // 37 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 38 | // 方法是按如下所示使用“*”: : 39 | // [assembly: AssemblyVersion("2022.7.23.1137")] 40 | [assembly: AssemblyVersion("2022.7.23.1137")] 41 | [assembly: AssemblyFileVersion("2022.7.23.1137")] 42 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | True 7 | 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | False 16 | 17 | 18 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Resources/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.3DXML/Resources/app.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Toolset/CommandToolsetCheckEngineLogs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine._3DXML.Core; 6 | using Bimangle.ForgeEngine._3DXML.Utility; 7 | 8 | namespace Bimangle.ForgeEngine._3DXML.Toolset 9 | { 10 | class CommandToolsetCheckEngineLogs 11 | { 12 | public void Execute(Form parentForm) 13 | { 14 | try 15 | { 16 | var logsPath = Path.Combine( 17 | App.GetHomePath(), 18 | @"Logs"); 19 | if (Directory.Exists(logsPath) == false) 20 | { 21 | Directory.CreateDirectory(logsPath); 22 | } 23 | Process.Start(logsPath); 24 | } 25 | catch (Exception ex) 26 | { 27 | parentForm.ShowMessageBox(ex.ToString()); 28 | 29 | Trace.WriteLine(ex.ToString()); 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Toolset/CommandToolsetCreateProj.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | using Bimangle.ForgeEngine.Georeferncing; 5 | using Bimangle.ForgeEngine._3DXML.Config; 6 | using Bimangle.ForgeEngine._3DXML.Core; 7 | using Bimangle.ForgeEngine._3DXML.Utility; 8 | 9 | namespace Bimangle.ForgeEngine._3DXML.Toolset 10 | { 11 | class CommandToolsetCreateProj 12 | { 13 | public void Execute(Form parentForm, string inputFilePath) 14 | { 15 | try 16 | { 17 | var homePath = App.GetHomePath(); 18 | 19 | var appConfig = AppConfigManager.Load(); 20 | var localConfig = appConfig.Cesium3DTiles; 21 | 22 | var adapter = new GeoreferncingAdapter(inputFilePath, localConfig); 23 | var owner = parentForm; 24 | using (var host = GeoreferncingHost.Create(adapter, homePath)) 25 | { 26 | GeoreferncingHelper.ShowProjCreateUI(owner, host); 27 | } 28 | } 29 | catch (Exception ex) 30 | { 31 | parentForm.ShowMessageBox(ex.ToString()); 32 | 33 | Trace.WriteLine(ex.ToString()); 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Toolset/CommandToolsetPickPositionFromMap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine._3DXML.Core; 6 | using Bimangle.ForgeEngine._3DXML.Utility; 7 | 8 | namespace Bimangle.ForgeEngine._3DXML.Toolset 9 | { 10 | class CommandToolsetPickPositionFromMap 11 | { 12 | #region Implementation of IExternalCommand 13 | 14 | public void Execute(Form form) 15 | { 16 | var previewAppPath = Path.Combine( 17 | App.GetHomePath(), 18 | @"Tools", 19 | @"Browser", 20 | @"Bimangle.ForgeBrowser.exe" 21 | ); 22 | 23 | try 24 | { 25 | Process.Start(previewAppPath, @"--PickPosition"); 26 | } 27 | catch (Exception ex) 28 | { 29 | form.ShowMessageBox(ex.ToString()); 30 | 31 | Trace.WriteLine(ex.ToString()); 32 | } 33 | } 34 | 35 | #endregion 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Toolset/CommandToolsetQuickPreview.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine._3DXML.Core; 6 | using Bimangle.ForgeEngine._3DXML.Utility; 7 | 8 | namespace Bimangle.ForgeEngine._3DXML.Toolset 9 | { 10 | class CommandToolsetQuickPreview 11 | { 12 | public void Execute(Form form) 13 | { 14 | var previewAppPath = Path.Combine( 15 | App.GetHomePath(), 16 | @"Tools", 17 | @"Browser", 18 | @"Bimangle.ForgeBrowser.exe" 19 | ); 20 | 21 | try 22 | { 23 | Process.Start(previewAppPath); 24 | } 25 | catch (Exception ex) 26 | { 27 | form.ShowMessageBox(ex.ToString()); 28 | Trace.WriteLine(ex.ToString()); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/UI/Controls/IExportControl.cs: -------------------------------------------------------------------------------- 1 | using Bimangle.ForgeEngine._3DXML.Config; 2 | 3 | namespace Bimangle.ForgeEngine._3DXML.UI.Controls 4 | { 5 | interface IExportControl 6 | { 7 | string Icon { get; } 8 | 9 | string Title { get; } 10 | 11 | void Init(IExportForm form, AppConfig config); 12 | 13 | void Reset(); 14 | 15 | void RefreshCommand(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/UI/Controls/IExportForm.cs: -------------------------------------------------------------------------------- 1 | using Bimangle.ForgeEngine._3DXML.Core; 2 | 3 | namespace Bimangle.ForgeEngine._3DXML.UI.Controls 4 | { 5 | interface IExportForm 6 | { 7 | void RefreshCommand(Options options); 8 | 9 | string GetInputFilePath(); 10 | 11 | /// 12 | /// 是否启用扩展特性 13 | /// 14 | /// 15 | /// 16 | bool UsedExtendFeature(string featureName); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Utility/AppHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace Bimangle.ForgeEngine._3DXML.Utility 5 | { 6 | static class AppHelper 7 | { 8 | /// 9 | /// 确保文件夹路径存在 10 | /// 11 | /// 12 | public static void MakeSureFolderPathExists(string folderPath) 13 | { 14 | var targetFolderPath = Path.GetPathRoot(folderPath); //获得文件夹的根路径 15 | if (string.IsNullOrEmpty(targetFolderPath) == false) 16 | { 17 | folderPath = folderPath.Substring(targetFolderPath.Length); //获得文件夹路径中除了根路径剩余的部分 18 | } 19 | 20 | var segs = folderPath.Split(new[] { @"\", @"/" }, StringSplitOptions.None); 21 | for (var i = 0; i < segs.Length; i++) 22 | { 23 | var seg = segs[i]; 24 | targetFolderPath = Path.Combine(targetFolderPath, seg); 25 | if (Directory.Exists(targetFolderPath) == false) 26 | { 27 | Directory.CreateDirectory(targetFolderPath); 28 | } 29 | } 30 | } 31 | 32 | /// 33 | /// 获得相对路径 34 | /// 35 | /// 36 | /// 37 | public static string GetPath(string relatePath) 38 | { 39 | var dllFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 40 | return Path.Combine(dllFolder, relatePath); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/Utility/ProgressExHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Threading; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine._3DXML.UI; 6 | 7 | namespace Bimangle.ForgeEngine._3DXML.Utility 8 | { 9 | class ProgressExHelper : IDisposable 10 | { 11 | private static ProgressExHelper _Instance; 12 | 13 | public static void Close() 14 | { 15 | var obj = _Instance; 16 | if (obj != null) 17 | { 18 | obj.Dispose(); 19 | } 20 | } 21 | 22 | private FormProgressEx _Form; 23 | 24 | public ProgressExHelper(string title = null, int progressLimit = 100) 25 | { 26 | _Form = new FormProgressEx(title, progressLimit); 27 | _Form.StartPosition = FormStartPosition.CenterScreen; 28 | _Form.Show(); 29 | _Form.Refresh(); 30 | 31 | _Instance = this; 32 | } 33 | 34 | public ProgressExHelper(Form owner, string title = null, int progressLimit = 100) 35 | { 36 | _Form = new FormProgressEx(title, progressLimit); 37 | _Form.StartPosition = FormStartPosition.CenterParent; 38 | _Form.Show(owner); 39 | _Form.Location = new Point( 40 | (owner.Width - _Form.Width)/2 + owner.Left, 41 | (owner.Height - _Form.Height)/2 + owner.Top); 42 | _Form.Refresh(); 43 | 44 | _Instance = this; 45 | } 46 | 47 | public CancellationToken GetCancellationToken() 48 | { 49 | return _Form?.GetCancellationToken() ?? CancellationToken.None; 50 | } 51 | 52 | public Action GetProgressCallback() 53 | { 54 | if (_Form == null) return null; 55 | 56 | Action m = _Form.SetProgressValue; 57 | return m; 58 | } 59 | 60 | public void Dispose() 61 | { 62 | if (_Form != null) 63 | { 64 | _Form.Close(); 65 | _Form = null; 66 | 67 | _Instance = null; 68 | } 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.3DXML/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/AddIn.cs: -------------------------------------------------------------------------------- 1 | //--------------------------------------------------------------------------------------+ 2 | // 3 | // $Source: Bimangle.ForgeEngine.Dgn.Loader.cs $ 4 | // 5 | // $Copyright: (c) 2019 Bentley Systems, Incorporated. All rights reserved. $ 6 | // 7 | //---------------------------------------------------------------------------------------+ 8 | 9 | using System.Diagnostics; 10 | using System.Text; 11 | using Bentley.DgnPlatform; 12 | 13 | namespace Bimangle.ForgeEngine.Dgn 14 | { 15 | [Bentley.MstnPlatformNET.AddIn(MdlTaskID = "BimangleEngineSamples")] 16 | internal sealed class AddIn : Bentley.MstnPlatformNET.AddIn 17 | { 18 | public static AddIn Instance = null; 19 | 20 | private AddIn(System.IntPtr mdlDesc) : base(mdlDesc) 21 | { 22 | Instance = this; 23 | } 24 | 25 | protected override int Run(string[] commandLine) 26 | { 27 | return 0; 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Config/AppConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Security.Cryptography; 6 | using System.Text; 7 | using Newtonsoft.Json; 8 | 9 | namespace Bimangle.ForgeEngine.Dgn.Config 10 | { 11 | [Serializable] 12 | class AppConfig 13 | { 14 | public AppConfigSvf Svf { get; set; } 15 | public AppConfigGltf Gltf { get; set; } 16 | public AppConfigCesium3DTiles Cesium3DTiles { get; set; } 17 | 18 | public AppConfig() 19 | { 20 | Svf = new AppConfigSvf(); 21 | Gltf = new AppConfigGltf(); 22 | Cesium3DTiles = new AppConfigCesium3DTiles(); 23 | } 24 | 25 | public AppConfig Clone() 26 | { 27 | return new AppConfig 28 | { 29 | Svf = Svf == null ? new AppConfigSvf() : Svf.Clone(), 30 | Gltf = Gltf == null ? new AppConfigGltf() : Gltf.Clone(), 31 | Cesium3DTiles = Cesium3DTiles == null ? new AppConfigCesium3DTiles() : Cesium3DTiles.Clone() 32 | }; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Config/AppConfigGltf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using FeatureType = Bimangle.ForgeEngine.Common.Formats.Gltf.FeatureType; 5 | 6 | namespace Bimangle.ForgeEngine.Dgn.Config 7 | { 8 | [Serializable] 9 | class AppConfigGltf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigGltf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = true; 22 | AutoOpenAppName = null; 23 | VisualStyle = @"Auto"; 24 | LevelOfDetail = 6; //默认为 6 25 | Features = new List 26 | { 27 | FeatureType.VisualStyleAuto, 28 | FeatureType.GenerateModelsDb, 29 | FeatureType.AllowRegroupNodes 30 | }; 31 | } 32 | 33 | public AppConfigGltf Clone() 34 | { 35 | return new AppConfigGltf 36 | { 37 | LastTargetPath = LastTargetPath, 38 | AutoOpenAllow = AutoOpenAllow, 39 | AutoOpenAppName = AutoOpenAppName, 40 | VisualStyle = VisualStyle, 41 | LevelOfDetail = LevelOfDetail, 42 | Features = Features?.ToList() ?? new List() 43 | }; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Config/AppConfigSvf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Bimangle.ForgeEngine.Common.Formats.Svf.Dgn; 5 | 6 | namespace Bimangle.ForgeEngine.Dgn.Config 7 | { 8 | [Serializable] 9 | class AppConfigSvf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigSvf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = true; 22 | AutoOpenAppName = null; 23 | VisualStyle = @"Auto"; 24 | LevelOfDetail = -1; 25 | Features = new List 26 | { 27 | FeatureType.VisualStyleAuto, 28 | FeatureType.GenerateThumbnail, 29 | FeatureType.GenerateModelsDb, 30 | FeatureType.ExportElementClassConstruction 31 | }; 32 | } 33 | 34 | public AppConfigSvf Clone() 35 | { 36 | return new AppConfigSvf 37 | { 38 | LastTargetPath = LastTargetPath, 39 | AutoOpenAllow = AutoOpenAllow, 40 | AutoOpenAppName = AutoOpenAppName, 41 | VisualStyle = VisualStyle, 42 | LevelOfDetail = LevelOfDetail, 43 | Features = Features?.ToList() ?? new List() 44 | }; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Core/IExternalCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Bimangle.ForgeEngine.Dgn.Core 8 | { 9 | public interface IExternalCommand 10 | { 11 | int Execute(string unparsed, ref string message); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Core/Titles.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Bimangle.ForgeEngine.Dgn.Core 8 | { 9 | static class Titles 10 | { 11 | #if !EXPRESS 12 | public const string SVFZIP = @"Svfzip"; 13 | #endif 14 | public const string GLTF = @"glTF/glb"; 15 | public const string CESIUM_3D_TILES = @"3D Tiles"; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Helpers/Progress/FormProgress.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace Bimangle.ForgeEngine.Dgn.Helpers.Progress 4 | { 5 | partial class FormProgress : Form 6 | { 7 | public FormProgress() 8 | { 9 | this.InitializeComponent(); 10 | } 11 | 12 | public FormProgress(string title) : this() 13 | { 14 | if(title != null) label1.Text = title; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Helpers/ProgressExHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Threading; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Dgn.Helpers.Progress; 6 | 7 | namespace Bimangle.ForgeEngine.Dgn.Helpers 8 | { 9 | class ProgressExHelper : IDisposable 10 | { 11 | private static ProgressExHelper _Instance; 12 | 13 | public static void Close() 14 | { 15 | var obj = _Instance; 16 | if (obj != null) 17 | { 18 | obj.Dispose(); 19 | } 20 | } 21 | 22 | private FormProgressEx _Form; 23 | 24 | public ProgressExHelper(string title = null, int progressLimit = 100) 25 | { 26 | _Form = new FormProgressEx(title, progressLimit); 27 | _Form.StartPosition = FormStartPosition.CenterScreen; 28 | _Form.Show(); 29 | _Form.Refresh(); 30 | 31 | _Instance = this; 32 | } 33 | 34 | public ProgressExHelper(Form owner, string title = null, int progressLimit = 100) 35 | { 36 | _Form = new FormProgressEx(title, progressLimit); 37 | _Form.StartPosition = FormStartPosition.CenterParent; 38 | _Form.Show(owner); 39 | _Form.Location = new Point( 40 | (owner.Width - _Form.Width)/2 + owner.Left, 41 | (owner.Height - _Form.Height)/2 + owner.Top); 42 | _Form.Refresh(); 43 | 44 | _Instance = this; 45 | } 46 | 47 | public CancellationToken GetCancellationToken() 48 | { 49 | return _Form?.GetCancellationToken() ?? CancellationToken.None; 50 | } 51 | 52 | public Action GetProgressCallback() 53 | { 54 | if (_Form == null) return null; 55 | 56 | Action m = _Form.SetProgressValue; 57 | return m; 58 | } 59 | 60 | public void Dispose() 61 | { 62 | if (_Form != null) 63 | { 64 | _Form.Close(); 65 | _Form = null; 66 | 67 | _Instance = null; 68 | } 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Helpers/ProgressHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | using Bimangle.ForgeEngine.Dgn.Helpers.Progress; 5 | 6 | namespace Bimangle.ForgeEngine.Dgn.Helpers 7 | { 8 | class ProgressHelper : IDisposable 9 | { 10 | private static ProgressHelper _Instance; 11 | 12 | public static void Close() 13 | { 14 | var obj = _Instance; 15 | if (obj != null) 16 | { 17 | obj.Dispose(); 18 | } 19 | } 20 | 21 | private FormProgress _Form; 22 | 23 | public ProgressHelper(string title = null) 24 | { 25 | _Form = new FormProgress(title); 26 | _Form.StartPosition = FormStartPosition.CenterScreen; 27 | _Form.Show(); 28 | _Form.Refresh(); 29 | 30 | _Instance = this; 31 | } 32 | 33 | public ProgressHelper(Form owner, string title = null) 34 | { 35 | _Form = new FormProgress(title); 36 | _Form.StartPosition = FormStartPosition.CenterParent; 37 | _Form.Show(owner); 38 | _Form.Location = new Point( 39 | (owner.Width - _Form.Width)/2 + owner.Left, 40 | (owner.Height - _Form.Height)/2 + owner.Top); 41 | _Form.Refresh(); 42 | 43 | _Instance = this; 44 | } 45 | 46 | public void Dispose() 47 | { 48 | if (_Form != null) 49 | { 50 | _Form.Close(); 51 | _Form = null; 52 | 53 | _Instance = null; 54 | } 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/NugetCommands.txt: -------------------------------------------------------------------------------- 1 |  2 | # Run follow scripts within Package Manager Console, to ensure the "BimAngle Engine SDK" available. 3 | # Please ignore error messages in the execution of the script, as it is designed to do 4 | 5 | Update-Package -Id Bimangle.ForgeEngine.Common -Project Bimangle.ForgeEngine.Georeferncing 6 | Update-Package -Id Bimangle.ForgeEngine.Dgn -Project Bimangle.ForgeEngine.Dgn 7 | 8 | Update-Package -reinstall 9 | 10 | # You can rebuild now! 11 | 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("Bimangle.ForgeEngine.Dgn")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Bimangle.ForgeEngine.Dgn")] 13 | [assembly: AssemblyCopyright("Copyright © BimAngle 2017-2025")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("868c736f-038b-4514-a54b-407e84f20df7")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | // 方法是按如下所示使用“*”: : 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | False 7 | 8 | 9 | False 10 | 11 | 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Readme.md: -------------------------------------------------------------------------------- 1 |  2 | # BimAngle Engine DGN 快速开始 3 | 4 | ## 一. 环境准备 5 | * 开发工具: Visual Studio 2017 (下文简称 VS2017) 6 | * 软件平台: Bentley MicroStation CE (下文简称为 MSCE) 7 | 8 | 9 | ## 二. 下载编译 10 | 11 | ### 1. 下载源码 12 | * 从 https://github.com/bimangle/forge-engine-samples 下载例子源码; 13 | * 用 VS2017 打开解决方案 **ForgeEngine.Samples.Dgn.sln**; 14 | 15 | ### 2. 更新组件 16 | * 打开“程序包管理器控制台”: 菜单->工具->NuGet 包管理器->程序包管理器控制台 17 | * 将文件 NugetCommands.txt 中的脚本全部拷贝粘贴到 “程序包管理器控制台” 执行; 18 | 19 | ### 3. 编译源码 20 | * 重新生成解决方案: 菜单->生成->重新生成解决方案; 21 | * 记录解决方案的输出文件夹路径,例如:“*D:\Test\Bimangle.ForgeEngine.Samples\Bimangle.ForgeEngine.Dgn\bin\Debug*” 22 | > 如果 MSCE 的安装文件夹不在 **C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation** 下,则需要修改"引用"下的相关组件指向到正确路径,否则编译过程将会报错。 23 | 24 | ## 三. 部署运行 25 | * 启动 MSCE, 菜单->文件->设置->配置(列表项)->配置变量(按钮); 26 | * 在弹出的对话框“**配置变量:用户 [Personal]**”中,搜索变量: **MS_ADDINPATH**, 点“编辑”按钮; 27 | * 在弹出的对话框“**编辑环境变量**”的“新值”输入框中,追加之前记录的解决方案输出文件夹路径(分号分隔),点确定; 28 | * 按 F9 打开“键入命令”对话框,输入命令 “**mdl load BimAngleEngineSamples;BimAngleEngineSamples ExportGltf**” 即可弹出导出对话框; 29 | 30 | ## 四. 调试测试 31 | * 如果需要调试,可以设置断点后,在 VS2017 的菜单->附加到进程->选择附加到进程 microstation.exe; 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Resources/Converter_16px_1061192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dgn/Resources/Converter_16px_1061192.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Resources/Converter_32px_1061192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dgn/Resources/Converter_32px_1061192.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Toolset/CommandToolsetCheckEngineLogs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Dgn.Core; 6 | using Bimangle.ForgeEngine.Dgn.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Dgn.Toolset 9 | { 10 | public class CommandToolsetCheckEngineLogs : IExternalCommand 11 | { 12 | #region Implementation of IExternalCommand 13 | 14 | public int Execute(string unparsed, ref string message) 15 | { 16 | try 17 | { 18 | var logsPath = Path.Combine( 19 | VersionInfo.GetHomePath(), 20 | @"Logs"); 21 | if (Directory.Exists(logsPath) == false) 22 | { 23 | Directory.CreateDirectory(logsPath); 24 | } 25 | Process.Start(logsPath); 26 | } 27 | catch (Exception ex) 28 | { 29 | FormHelper.ShowMessageBox(ex.ToString()); 30 | 31 | Trace.WriteLine(ex.ToString()); 32 | } 33 | return 0; 34 | } 35 | 36 | #endregion 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Toolset/CommandToolsetCreateProj.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | using Bentley.MstnPlatformNET; 5 | using Bimangle.ForgeEngine.Dgn.Config; 6 | using Bimangle.ForgeEngine.Dgn.Core; 7 | using Bimangle.ForgeEngine.Dgn.Utility; 8 | using Bimangle.ForgeEngine.Georeferncing; 9 | 10 | namespace Bimangle.ForgeEngine.Dgn.Toolset 11 | { 12 | public class CommandToolsetCreateProj : IExternalCommand 13 | { 14 | 15 | #region Implementation of IExternalCommand 16 | 17 | public int Execute(string unparsed, ref string message) 18 | { 19 | try 20 | { 21 | var homePath = VersionInfo.GetHomePath(); 22 | 23 | var appConfig = AppConfigManager.Load(); 24 | var localConfig = appConfig.Cesium3DTiles; 25 | 26 | var adapter = new GeoreferncingAdapter(localConfig); 27 | Form owner = null; 28 | using (var host = GeoreferncingHost.Create(adapter, homePath)) 29 | { 30 | GeoreferncingHelper.ShowProjCreateUI(owner, host); 31 | } 32 | } 33 | catch (Exception ex) 34 | { 35 | FormHelper.ShowMessageBox(ex.ToString()); 36 | 37 | Trace.WriteLine(ex.ToString()); 38 | } 39 | 40 | return 0; 41 | } 42 | 43 | #endregion 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Toolset/CommandToolsetPickPosition.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bentley.MstnPlatformNET; 6 | using Bimangle.ForgeEngine.Dgn.Core; 7 | using Bimangle.ForgeEngine.Dgn.Utility; 8 | 9 | namespace Bimangle.ForgeEngine.Dgn.Toolset 10 | { 11 | public class CommandToolsetPickPosition : IExternalCommand 12 | { 13 | private readonly AddIn _Addin; 14 | 15 | internal CommandToolsetPickPosition(AddIn addin) 16 | { 17 | _Addin = addin ?? throw new ArgumentNullException(nameof(addin)); 18 | } 19 | 20 | #region Implementation of IExternalCommand 21 | 22 | public int Execute(string unparsed, ref string message) 23 | { 24 | try 25 | { 26 | var dialog = new PickPosition.FormPickPosition(); 27 | dialog.Show(); 28 | dialog.AttachAsTopLevelForm(_Addin, true); 29 | } 30 | catch (Exception ex) 31 | { 32 | FormHelper.ShowMessageBox(ex.ToString()); 33 | 34 | Trace.WriteLine(ex.ToString()); 35 | } 36 | 37 | return 0; 38 | } 39 | 40 | #endregion 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Toolset/CommandToolsetPickPositionFromMap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Dgn.Core; 6 | using Bimangle.ForgeEngine.Dgn.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Dgn.Toolset 9 | { 10 | class CommandToolsetPickPositionFromMap : IExternalCommand 11 | { 12 | 13 | #region Implementation of IExternalCommand 14 | 15 | public int Execute(string unparsed, ref string message) 16 | { 17 | var previewAppPath = Path.Combine( 18 | VersionInfo.GetHomePath(), 19 | @"Tools", 20 | @"Browser", 21 | @"Bimangle.ForgeBrowser.exe" 22 | ); 23 | 24 | try 25 | { 26 | Process.Start(previewAppPath, @"--PickPosition"); 27 | } 28 | catch (Exception ex) 29 | { 30 | FormHelper.ShowMessageBox(ex.ToString()); 31 | 32 | Trace.WriteLine(ex.ToString()); 33 | } 34 | 35 | return 0; 36 | } 37 | 38 | #endregion 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Toolset/CommandToolsetQuickPreview.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Dgn.Core; 6 | using Bimangle.ForgeEngine.Dgn.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Dgn.Toolset 9 | { 10 | public class CommandToolsetQuickPreview : IExternalCommand 11 | { 12 | 13 | #region Implementation of IExternalCommand 14 | 15 | public int Execute(string unparsed, ref string message) 16 | { 17 | var previewAppPath = Path.Combine( 18 | VersionInfo.GetHomePath(), 19 | @"Tools", 20 | @"Browser", 21 | @"Bimangle.ForgeBrowser.exe" 22 | ); 23 | 24 | try 25 | { 26 | Process.Start(previewAppPath); 27 | } 28 | catch (Exception ex) 29 | { 30 | FormHelper.ShowMessageBox(ex.ToString()); 31 | Trace.WriteLine(ex.ToString()); 32 | } 33 | 34 | return 0; 35 | } 36 | 37 | #endregion 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/UI/Controls/IExportControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Bentley.DgnPlatformNET; 7 | using Bimangle.ForgeEngine.Dgn.Config; 8 | 9 | namespace Bimangle.ForgeEngine.Dgn.UI.Controls 10 | { 11 | interface IExportControl 12 | { 13 | string Icon { get; } 14 | 15 | string Title { get; } 16 | 17 | void Init(Viewport view, AppConfig config, bool hasSelectElements); 18 | 19 | bool Run(IExportForm form); 20 | 21 | void Reset(); 22 | } 23 | 24 | interface IExportForm 25 | { 26 | bool UsedExtendFeature(string featureName); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Utility/AssemblyResolver.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace Bimangle.ForgeEngine.Dgn.Utility 11 | { 12 | class AssemblyResolver : IDisposable 13 | { 14 | public static AssemblyResolver Use() 15 | { 16 | return new AssemblyResolver(); 17 | } 18 | 19 | private AssemblyResolver() 20 | { 21 | AppDomain.CurrentDomain.AssemblyResolve += OnCurrentDomainAssemblyResolve; 22 | } 23 | 24 | #region IDisposable 25 | 26 | void IDisposable.Dispose() 27 | { 28 | AppDomain.CurrentDomain.AssemblyResolve -= OnCurrentDomainAssemblyResolve; 29 | } 30 | 31 | #endregion 32 | 33 | private static Assembly OnCurrentDomainAssemblyResolve(object sender, ResolveEventArgs args) 34 | { 35 | var mapping = new Dictionary 36 | { 37 | {"Newtonsoft.Json", "Newtonsoft.Json.dll"}, 38 | {"Ionic.Zip", "Ionic.Zip.dll"}, 39 | {"DotNetZip", "DotNetZip.dll"} 40 | }; 41 | 42 | try 43 | { 44 | var folderPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 45 | if (folderPath == null) return null; 46 | 47 | foreach (var key in mapping.Keys) 48 | { 49 | if (args.Name.Contains(key)) 50 | { 51 | var filePath = Path.Combine(folderPath, mapping[key]); 52 | if (File.Exists(filePath) == false) continue; 53 | 54 | return System.Reflection.Assembly.LoadFrom(filePath); 55 | } 56 | } 57 | } 58 | catch (Exception ex) 59 | { 60 | Trace.WriteLine(ex.ToString()); 61 | } 62 | 63 | return null; 64 | } 65 | 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/Utility/MsgDialog.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.InteropServices; 2 | using System.Text; 3 | 4 | namespace Bimangle.ForgeEngine.Dgn.Utility 5 | { 6 | static class MsgDialog 7 | { 8 | [DllImport(@"ustation.dll")] 9 | public static extern void mdlDialog_dmsgsPrint(byte[] wMsg); 10 | 11 | public static void Log(string message) 12 | { 13 | mdlDialog_dmsgsPrint(Encoding.Unicode.GetBytes(message)); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | False 27 | 28 | 29 | False 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dgn/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Config/AppConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Bimangle.ForgeEngine.Dwg.CLI.Config 4 | { 5 | [Serializable] 6 | class AppConfig 7 | { 8 | public AppConfigSvf Svf { get; set; } 9 | 10 | public AppConfig() 11 | { 12 | Svf = new AppConfigSvf(); 13 | } 14 | 15 | public AppConfig Clone() 16 | { 17 | return new AppConfig 18 | { 19 | Svf = Svf == null ? new AppConfigSvf() : Svf.Clone(), 20 | }; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Config/AppConfigSvf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Bimangle.ForgeEngine.Common.Formats.Svf.Dwg; 5 | 6 | 7 | namespace Bimangle.ForgeEngine.Dwg.CLI.Config 8 | { 9 | [Serializable] 10 | class AppConfigSvf 11 | { 12 | public string InputFilePath { get; set; } 13 | public string LastTargetPath { get; set; } 14 | 15 | public List Features { get; set; } 16 | 17 | public AppConfigSvf() 18 | { 19 | InputFilePath = string.Empty; 20 | LastTargetPath = string.Empty; 21 | Features = new List 22 | { 23 | FeatureType.ExportMode2D, 24 | FeatureType.IncludeInvisibleLayers, 25 | FeatureType.IncludeLayouts, 26 | FeatureType.GenerateThumbnail, 27 | FeatureType.GenerateModelsDb, 28 | FeatureType.OptimizationLineStyle, 29 | FeatureType.ForceRenderModeUseWireframe 30 | }; 31 | } 32 | 33 | public AppConfigSvf Clone() 34 | { 35 | return new AppConfigSvf 36 | { 37 | InputFilePath = InputFilePath, 38 | LastTargetPath = LastTargetPath, 39 | Features = Features?.ToList() ?? new List() 40 | }; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Core/App.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Reflection; 4 | 5 | namespace Bimangle.ForgeEngine.Dwg.CLI.Core 6 | { 7 | class App 8 | { 9 | /// 10 | /// 获得主路径 11 | /// 12 | /// 13 | public static string GetHomePath() 14 | { 15 | var path = Path.Combine( 16 | Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), 17 | @"Bimangle", 18 | @"Bimangle.ForgeEngine.Dwg"); 19 | return path; 20 | } 21 | 22 | public static bool CheckHomeFolder(string homePath) 23 | { 24 | return Directory.Exists(homePath) && 25 | Directory.Exists(Path.Combine(homePath, @"Tools")); 26 | } 27 | 28 | public static string GetFontFolderPath() 29 | { 30 | var folderPath = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location); 31 | return Path.Combine(folderPath, @"Fonts"); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Core/Log/ILog.cs: -------------------------------------------------------------------------------- 1 | namespace Bimangle.ForgeEngine.Dwg.CLI.Core.Log 2 | { 3 | public interface ILog 4 | { 5 | void WriteLine(string s); 6 | 7 | void Write(string s); 8 | 9 | void WriteProgress(int progress); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Core/Log/LogConsole.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Bimangle.ForgeEngine.Dwg.CLI.Core.Log 4 | { 5 | [Serializable] 6 | class LogConsole : MarshalByRefObject, ILog 7 | { 8 | private readonly string _Source; 9 | 10 | public LogConsole(string source) 11 | { 12 | _Source = source; 13 | } 14 | 15 | #region Implementation of ILog 16 | 17 | public void WriteLine(string s) 18 | { 19 | if (string.IsNullOrEmpty(_Source)) 20 | { 21 | Console.WriteLine(s); 22 | } 23 | else 24 | { 25 | Console.WriteLine($@"[{_Source}]{s}"); 26 | } 27 | } 28 | 29 | public void Write(string s) 30 | { 31 | Console.Write(s); 32 | } 33 | 34 | public void WriteProgress(int progress) 35 | { 36 | } 37 | 38 | #endregion 39 | 40 | #region Overrides of MarshalByRefObject 41 | 42 | public override object InitializeLifetimeService() 43 | { 44 | var lease = (System.Runtime.Remoting.Lifetime.ILease)base.InitializeLifetimeService(); 45 | // Normally, the initial lease time would be much longer. 46 | // It is shortened here for demonstration purposes. 47 | if (lease?.CurrentState == System.Runtime.Remoting.Lifetime.LeaseState.Initial) 48 | { 49 | lease.InitialLeaseTime = TimeSpan.FromSeconds(0);//这里改成0,则是无限期 50 | //lease.SponsorshipTimeout = TimeSpan.FromSeconds(10); 51 | //lease.RenewOnCallTime = TimeSpan.FromSeconds(2); 52 | } 53 | return lease; 54 | } 55 | 56 | #endregion 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Core/Log/LogDummy.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Bimangle.ForgeEngine.Dwg.CLI.Core.Log 4 | { 5 | [Serializable] 6 | class LogDummy : MarshalByRefObject, ILog 7 | { 8 | #region Implementation of ILog 9 | 10 | public void WriteLine(string s) 11 | { 12 | } 13 | 14 | public void Write(string s) 15 | { 16 | } 17 | 18 | public void WriteProgress(int progress) 19 | { 20 | } 21 | 22 | #endregion 23 | 24 | #region Overrides of MarshalByRefObject 25 | 26 | public override object InitializeLifetimeService() 27 | { 28 | var lease = (System.Runtime.Remoting.Lifetime.ILease)base.InitializeLifetimeService(); 29 | // Normally, the initial lease time would be much longer. 30 | // It is shortened here for demonstration purposes. 31 | if (lease?.CurrentState == System.Runtime.Remoting.Lifetime.LeaseState.Initial) 32 | { 33 | lease.InitialLeaseTime = TimeSpan.FromSeconds(0);//这里改成0,则是无限期 34 | //lease.SponsorshipTimeout = TimeSpan.FromSeconds(10); 35 | //lease.RenewOnCallTime = TimeSpan.FromSeconds(2); 36 | } 37 | return lease; 38 | } 39 | 40 | #endregion 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Core/Log/LogTrace.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace Bimangle.ForgeEngine.Dwg.CLI.Core.Log 5 | { 6 | [Serializable] 7 | class LogTrace : MarshalByRefObject, ILog 8 | { 9 | private readonly string _Source; 10 | 11 | public LogTrace(string source) 12 | { 13 | _Source = source; 14 | } 15 | 16 | #region Implementation of ILog 17 | 18 | public void WriteLine(string s) 19 | { 20 | if (string.IsNullOrEmpty(_Source)) 21 | { 22 | Trace.WriteLine(s); 23 | } 24 | else 25 | { 26 | Trace.WriteLine($@"[{_Source}]{s}"); 27 | } 28 | } 29 | 30 | public void Write(string s) 31 | { 32 | Trace.Write(s); 33 | } 34 | public void WriteProgress(int progress) 35 | { 36 | } 37 | 38 | #endregion 39 | 40 | #region Overrides of MarshalByRefObject 41 | 42 | public override object InitializeLifetimeService() 43 | { 44 | var lease = (System.Runtime.Remoting.Lifetime.ILease)base.InitializeLifetimeService(); 45 | // Normally, the initial lease time would be much longer. 46 | // It is shortened here for demonstration purposes. 47 | if (lease?.CurrentState == System.Runtime.Remoting.Lifetime.LeaseState.Initial) 48 | { 49 | lease.InitialLeaseTime = TimeSpan.FromSeconds(0);//这里改成0,则是无限期 50 | //lease.SponsorshipTimeout = TimeSpan.FromSeconds(10); 51 | //lease.RenewOnCallTime = TimeSpan.FromSeconds(2); 52 | } 53 | return lease; 54 | } 55 | 56 | #endregion 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Core/Options.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using CommandLine; 4 | using CommandLine.Text; 5 | 6 | namespace Bimangle.ForgeEngine.Dwg.CLI.Core 7 | { 8 | [Serializable] 9 | public class Options 10 | { 11 | private const string FEATURE_HELP_TEXT = @"Translate features(GenerateModelsDb, GenerateThumbnail)"; 12 | 13 | [Option('w', @"winform", HelpText = @"WinForm Mode")] 14 | public bool WinFormMode { get; set; } 15 | 16 | [Option('f', @"features", HelpText = FEATURE_HELP_TEXT, Separator = ',')] 17 | public IEnumerable Features { get; set; } 18 | 19 | [Option('i', @"input", HelpText = @"Source file path")] 20 | public string InputFilePath { get; set; } 21 | 22 | [Option('o', @"output", HelpText = @"Output folder path")] 23 | public string OutputFolderPath { get; set; } 24 | 25 | [Usage(ApplicationAlias = "ForgeEngineDwgCLI.exe")] 26 | public static IEnumerable Examples 27 | { 28 | get 29 | { 30 | yield return new Example("Default", new Options { InputFilePath = @"d:\input.dwg", OutputFolderPath = @"d:\output\" }); 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/Eref.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dwg/Fonts/Eref.shx -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/HZTXT.SHX: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dwg/Fonts/HZTXT.SHX -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/Readme.txt: -------------------------------------------------------------------------------- 1 |  2 | 注意: 由于版权限制, 本软件不提供字体集,请自行将您用到的字体复制到本文件夹。 3 | 4 | 5 | Note: Due to copyright restrictions, this software does not provide font set, please copy the font you use to this folder. 6 | 7 | 8 | ================================================== 9 | acad.fmp 10 | -- Font Mapping File Format 11 | 12 | A font mapping file is a text file where each line specifies a font substitution. A font substitution is of the form: 13 | ; 14 | The original font can be either a typeface name or a file name. However, the substitute font should be a file name. For example: 15 | 16 | romb;ROMAB___.TTF 17 | romi;ROMAI___.TTF -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/acad.fmp: -------------------------------------------------------------------------------- 1 | visiojp;bigfont.shx 2 | visiohg;whgtxt.shx 3 | acaderef;eref.shx 4 | hztxtf;hztxt.shx 5 | hztch;hztxt.shx 6 | cibt;CITYB___.TTF 7 | cobt;COUNB___.TTF 8 | eur;EURR____.TTF 9 | euro;EURRO___.TTF 10 | par;PANROMAN.TTF 11 | rom;ROMANTIC.TTF 12 | romb;ROMAB___.TTF 13 | romi;ROMAI___.TTF 14 | sas;SANSS___.TTF 15 | sasb;SANSSB__.TTF 16 | sasbo;SANSSBO_.TTF 17 | saso;SANSSO__.TTF 18 | suf;SUPEF___.TTF 19 | te;TECHNIC_.TTF 20 | teb;TECHB___.TTF 21 | tel;TECHL___.TTF -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/bigfont.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dwg/Fonts/bigfont.shx -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/tssdchn.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dwg/Fonts/tssdchn.shx -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/tssdeng.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dwg/Fonts/tssdeng.shx -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Fonts/whgtxt.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Dwg/Fonts/whgtxt.shx -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Helpers/ProgressHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Threading; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Dwg.CLI.Helpers.Progress; 6 | 7 | namespace Bimangle.ForgeEngine.Dwg.CLI.Helpers 8 | { 9 | class ProgressHelper : IDisposable 10 | { 11 | private static ProgressHelper _Instance; 12 | 13 | public static void Close() 14 | { 15 | var obj = _Instance; 16 | if (obj != null) 17 | { 18 | obj.Dispose(); 19 | } 20 | } 21 | 22 | private FormProgress _Form; 23 | 24 | public ProgressHelper(string title = null, int progressLimit = 100) 25 | { 26 | _Form = new FormProgress(title, progressLimit); 27 | _Form.StartPosition = FormStartPosition.CenterScreen; 28 | _Form.Show(); 29 | _Form.Refresh(); 30 | 31 | _Instance = this; 32 | } 33 | 34 | public ProgressHelper(Form owner, string title = null, int progressLimit = 100) 35 | { 36 | _Form = new FormProgress(title, progressLimit); 37 | _Form.StartPosition = FormStartPosition.CenterParent; 38 | _Form.Show(owner); 39 | _Form.Location = new Point( 40 | (owner.Width - _Form.Width)/2 + owner.Left, 41 | (owner.Height - _Form.Height)/2 + owner.Top); 42 | _Form.Refresh(); 43 | 44 | _Instance = this; 45 | } 46 | 47 | public CancellationToken GetCancellationToken() 48 | { 49 | return _Form?.GetCancellationToken() ?? CancellationToken.None; 50 | } 51 | 52 | public Action GetProgressCallback() 53 | { 54 | if (_Form == null) return null; 55 | 56 | Action m = _Form.SetProgressValue; 57 | return m; 58 | } 59 | 60 | public void Dispose() 61 | { 62 | if (_Form != null) 63 | { 64 | _Form.Close(); 65 | _Form = null; 66 | 67 | _Instance = null; 68 | } 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/NugetCommands.txt: -------------------------------------------------------------------------------- 1 |  2 | # Run follow scripts within Package Manager Console, to ensure the "BimAngle Engine SDK" available. 3 | # Please ignore error messages in the execution of the script, as it is designed to do 4 | 5 | Update-Package -Id Bimangle.ForgeEngine.Dwg 6 | 7 | Update-Package -reinstall 8 | 9 | # You can rebuild now! 10 | 11 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("Bimangle Engine (for Dwg) CLI")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Bimangle Engine (for Dwg)")] 13 | [assembly: AssemblyCopyright("Copyright © BimAngle 2017-2025")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("c67dc1d3-5dc1-4d42-9a44-26472d3d2272")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | // 方法是按如下所示使用“*”: : 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Bimangle.ForgeEngine.Dwg.CLI.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.ApplicationScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("")] 29 | public string DefaultFontName { 30 | get { 31 | return ((string)(this["DefaultFontName"])); 32 | } 33 | } 34 | 35 | [global::System.Configuration.UserScopedSettingAttribute()] 36 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 37 | [global::System.Configuration.DefaultSettingValueAttribute("")] 38 | public string OptionsInputFilePath { 39 | get { 40 | return ((string)(this["OptionsInputFilePath"])); 41 | } 42 | set { 43 | this["OptionsInputFilePath"] = value; 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/Utility/AppHelper.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace Bimangle.ForgeEngine.Dwg.CLI.Utility 4 | { 5 | static class AppHelper 6 | { 7 | /// 8 | /// 获得相对路径 9 | /// 10 | /// 11 | /// 12 | public static string GetPath(string relatePath) 13 | { 14 | var dllFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 15 | return Path.Combine(dllFolder, relatePath); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Dwg/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Georeferncing/Interface/IAdapterHost.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Bimangle.ForgeEngine.Georeferncing.Interface 8 | { 9 | public interface IAdapterHost 10 | { 11 | /// 12 | /// 从目标文件加载 proj 信息 13 | /// 14 | /// 15 | /// 16 | string GetProjDefinition(string projFilePath); 17 | 18 | /// 19 | /// 检查 proj 定义信息是否有效 20 | /// 21 | /// 22 | /// 23 | /// 24 | bool CheckProjDefinition(string projDefinition, out string projWkt); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Georeferncing/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | [assembly: AssemblyTitle("Bimangle.ForgeEngine.Georeferncing")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Bimangle.ForgeEngine.Georeferncing")] 13 | [assembly: AssemblyCopyright("Copyright © BimAngle 2017-2025")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // 将 ComVisible 设置为 false 会使此程序集中的类型 18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 19 | //请将此类型的 ComVisible 特性设置为 true。 20 | [assembly: ComVisible(false)] 21 | 22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 23 | [assembly: Guid("3c32b366-38a8-4943-95b2-09d6427a1e66")] 24 | 25 | // 程序集的版本信息由下列四个值组成: 26 | // 27 | // 主版本 28 | // 次版本 29 | // 生成号 30 | // 修订号 31 | // 32 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 33 | //通过使用 "*",如下所示: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | 38 | [assembly: InternalsVisibleTo("Bimangle.ForgeEngine.Skp.Test")] 39 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Georeferncing/TestRunState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Bimangle.ForgeEngine.Georeferncing 8 | { 9 | class TestRunState 10 | { 11 | private static TestRunState _LastState; 12 | 13 | public static TestRunState LastState 14 | { 15 | get => _LastState ?? (_LastState = new TestRunState()); 16 | set => _LastState = value; 17 | } 18 | 19 | public string Y { get; set; } = "0"; 20 | public string X { get; set; } = "0"; 21 | public string Z { get; set; } = "0"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Georeferncing/Utility/ProjFile.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Bimangle.ForgeEngine.Georeferncing.Utility 8 | { 9 | class ProjFile 10 | { 11 | private const string PREFIX_PROJCS = @"PROJCS["; 12 | private const string PREFIX_PROJCRS = @"PROJCRS["; 13 | private const string PREFIX_COMPOUNDCRS = @"COMPOUNDCRS["; 14 | 15 | /// 16 | /// 检查是否为有效的 OGC WKT/WKT2 定义格式 17 | /// 18 | /// 19 | /// 20 | public static bool IsValidOgcWkt(string srs) 21 | { 22 | if (string.IsNullOrWhiteSpace(srs)) return false; 23 | 24 | var s = srs.Trim(); 25 | if (s.StartsWith(PREFIX_PROJCS, StringComparison.OrdinalIgnoreCase) || 26 | s.StartsWith(PREFIX_PROJCRS, StringComparison.OrdinalIgnoreCase) || 27 | s.StartsWith(PREFIX_COMPOUNDCRS, StringComparison.OrdinalIgnoreCase)) 28 | { 29 | return true; 30 | } 31 | 32 | return false; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Georeferncing/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks.Automation.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28307.572 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Navisworks.Automation", "Bimangle.ForgeEngine.Navisworks.Automation\Bimangle.ForgeEngine.Navisworks.Automation.csproj", "{0906A065-74E3-482F-99B4-B6DADD947A4F}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {0906A065-74E3-482F-99B4-B6DADD947A4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {0906A065-74E3-482F-99B4-B6DADD947A4F}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {0906A065-74E3-482F-99B4-B6DADD947A4F}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {0906A065-74E3-482F-99B4-B6DADD947A4F}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {220C2CE2-25B6-424F-9651-4F299A9063D2} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks.Automation/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks.Automation/Config/JobConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using Newtonsoft.Json; 7 | 8 | namespace Bimangle.ForgeEngine.Navisworks.Config 9 | { 10 | [Serializable] 11 | [DataContract] 12 | class JobConfig 13 | { 14 | /// 15 | /// 目标数据格式 16 | /// 17 | [DataMember(EmitDefaultValue = false, Name = "format")] 18 | public string Format { get; set; } 19 | 20 | /// 21 | /// 转化模式 22 | /// 23 | /// 24 | /// 目前只对 Cesium 3D Tiles 格式有效 25 | /// 26 | [DataMember(EmitDefaultValue = false, Name = "mode")] 27 | public int Mode { get; set; } 28 | 29 | /// 30 | /// 输出目标文件夹路径 31 | /// 32 | [DataMember(EmitDefaultValue = false, Name = "outputPath")] 33 | public string OutputPath { get; set; } 34 | 35 | /// 36 | /// 输出选项 37 | /// 38 | [DataMember(EmitDefaultValue = false, Name = "outputOptions")] 39 | public List OutputOptions { get; set; } 40 | 41 | /// 42 | /// 加载任务配置 43 | /// 44 | /// 45 | /// 46 | public static JobConfig Load(string jobFilePath) 47 | { 48 | if (File.Exists(jobFilePath) == false) return null; 49 | 50 | var json = File.ReadAllText(jobFilePath, Encoding.UTF8); 51 | var jobConfig = JsonConvert.DeserializeObject(json); 52 | return jobConfig; 53 | } 54 | 55 | /// 56 | /// 保存任务配置 57 | /// 58 | /// 59 | public void Save(string jobFilePath) 60 | { 61 | var json = JsonConvert.SerializeObject(this, Formatting.Indented); 62 | File.WriteAllText(jobFilePath, json, Encoding.UTF8); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks.Automation/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Bimangle.ForgeEngine.Navisworks; 5 | 6 | // 有关程序集的一般信息由以下 7 | // 控制。更改这些特性值可修改 8 | // 与程序集关联的信息。 9 | [assembly: AssemblyTitle(VersionInfo.PRODUCT_NAME)] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany(VersionInfo.COMPANY_NAME)] 13 | [assembly: AssemblyProduct(VersionInfo.PRODUCT_NAME)] 14 | [assembly: AssemblyCopyright(VersionInfo.COPYRIGHT)] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | 18 | // 将 ComVisible 设置为 false 会使此程序集中的类型 19 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 20 | //请将此类型的 ComVisible 特性设置为 true。 21 | [assembly: ComVisible(false)] 22 | 23 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 24 | [assembly: Guid("0906a065-74e3-482f-99b4-b6dadd947a4f")] 25 | 26 | // 程序集的版本信息由下列四个值组成: 27 | // 28 | // 主版本 29 | // 次版本 30 | // 生成号 31 | // 修订号 32 | // 33 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 34 | // 方法是按如下所示使用“*”: : 35 | // [assembly: AssemblyVersion("1.0.*")] 36 | [assembly: AssemblyVersion("1.0.0.0")] 37 | [assembly: AssemblyFileVersion("1.0.0.0")] 38 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks.Automation/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // 此代码由工具生成。 4 | // 运行时版本:4.0.30319.42000 5 | // 6 | // 对此文件的更改可能会导致不正确的行为,并且如果 7 | // 重新生成代码,这些更改将会丢失。 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Bimangle.ForgeEngine.Navisworks.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks.Automation/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks.Automation/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Config/AppConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Bimangle.ForgeEngine.Navisworks.Config 4 | { 5 | [Serializable] 6 | class AppConfig 7 | { 8 | public AppConfigSvf Svf { get; set; } 9 | public AppConfigGltf Gltf { get; set; } 10 | public AppConfigCesium3DTiles Cesium3DTiles { get; set; } 11 | public AppConfig() 12 | { 13 | Svf = new AppConfigSvf(); 14 | Gltf = new AppConfigGltf(); 15 | Cesium3DTiles = new AppConfigCesium3DTiles(); 16 | } 17 | 18 | public AppConfig Clone() 19 | { 20 | return new AppConfig 21 | { 22 | Svf = Svf == null ? new AppConfigSvf() : Svf.Clone(), 23 | Gltf = Gltf == null ? new AppConfigGltf() : Gltf.Clone(), 24 | Cesium3DTiles = Cesium3DTiles == null ? new AppConfigCesium3DTiles() : Cesium3DTiles.Clone() 25 | }; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Config/AppConfigGltf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using FeatureType = Bimangle.ForgeEngine.Common.Formats.Gltf.FeatureType; 5 | 6 | namespace Bimangle.ForgeEngine.Navisworks.Config 7 | { 8 | [Serializable] 9 | class AppConfigGltf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public bool LevelOfDetailAssigned { get; set; } 17 | public List Features { get; set; } 18 | 19 | public AppConfigGltf() 20 | { 21 | LastTargetPath = string.Empty; 22 | AutoOpenAllow = true; 23 | AutoOpenAppName = null; 24 | VisualStyle = @"Auto"; 25 | LevelOfDetail = -1; 26 | LevelOfDetailAssigned = true; 27 | Features = new List 28 | { 29 | FeatureType.VisualStyleAuto, 30 | FeatureType.GenerateModelsDb, 31 | FeatureType.AllowRegroupNodes 32 | }; 33 | } 34 | 35 | public AppConfigGltf Clone() 36 | { 37 | return new AppConfigGltf 38 | { 39 | LastTargetPath = LastTargetPath, 40 | AutoOpenAllow = AutoOpenAllow, 41 | AutoOpenAppName = AutoOpenAppName, 42 | VisualStyle = VisualStyle, 43 | LevelOfDetail = LevelOfDetail, 44 | LevelOfDetailAssigned = LevelOfDetailAssigned, 45 | Features = Features?.ToList() ?? new List() 46 | }; 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Config/AppConfigSvf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Bimangle.ForgeEngine.Common.Formats.Svf.Navisworks; 5 | 6 | namespace Bimangle.ForgeEngine.Navisworks.Config 7 | { 8 | [Serializable] 9 | class AppConfigSvf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public bool LevelOfDetailAssigned { get; set; } 17 | public List Features { get; set; } 18 | 19 | public AppConfigSvf() 20 | { 21 | LastTargetPath = string.Empty; 22 | AutoOpenAllow = true; 23 | AutoOpenAppName = null; 24 | VisualStyle = @"Auto"; 25 | LevelOfDetail = -1; 26 | LevelOfDetailAssigned = true; 27 | Features = new List 28 | { 29 | FeatureType.VisualStyleAuto, 30 | FeatureType.GenerateThumbnail, 31 | FeatureType.GenerateModelsDb 32 | }; 33 | } 34 | 35 | public AppConfigSvf Clone() 36 | { 37 | return new AppConfigSvf 38 | { 39 | LastTargetPath = LastTargetPath, 40 | AutoOpenAllow = AutoOpenAllow, 41 | AutoOpenAppName = AutoOpenAppName, 42 | VisualStyle = VisualStyle, 43 | LevelOfDetail = LevelOfDetail, 44 | LevelOfDetailAssigned = LevelOfDetailAssigned, 45 | Features = Features?.ToList() ?? new List() 46 | }; 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Core/Batch/Router.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Bimangle.ForgeEngine.Navisworks.Core.Batch 8 | { 9 | /// 10 | /// 消息路由器 11 | /// 12 | /// 13 | /// 用于自动转换时,Navisworks 插件向外部控制程序报告转换进度 14 | /// 注: 这里删除了具体实现代码,如果有需要可以自行实现(基于 TCP/IP, 也可以基于内存映射等等) 15 | /// 16 | class Router 17 | { 18 | public static void SetProgressPhase(string name, double weightFactor) 19 | { 20 | } 21 | 22 | public static void SetProgressValue(string name, int progressValue) 23 | { 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Core/RuntimeLog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Text; 5 | using Bimangle.ForgeEngine.Common.Formats; 6 | 7 | namespace Bimangle.ForgeEngine.Navisworks.Core 8 | { 9 | class RuntimeLog : IRuntimeLog, IDisposable 10 | { 11 | private Stream _Stream; 12 | private bool _IsInit; 13 | 14 | public RuntimeLog() 15 | { 16 | _IsInit = false; 17 | } 18 | 19 | private void Init() 20 | { 21 | if (_Stream == null && _IsInit == false) 22 | { 23 | _IsInit = true; 24 | _Stream = OpenLogStream(); 25 | } 26 | } 27 | 28 | private Stream OpenLogStream() 29 | { 30 | try 31 | { 32 | var logFolder = Path.Combine(VersionInfo.GetHomePath(), @"Logs"); 33 | Common.Utils.FileSystemUtility.CreateDirectory(logFolder); 34 | 35 | var logFilePath = Path.Combine(logFolder, $@"{DateTime.Now:yyyy-MM-dd_HHmmss_fff}.log"); 36 | 37 | return File.Open(logFilePath, FileMode.Create); 38 | } 39 | catch (Exception) 40 | { 41 | return null; 42 | } 43 | } 44 | 45 | public void Log(string type, string function, string message) 46 | { 47 | Init(); 48 | 49 | var s = $"[{DateTime.Now:yyyy-MM-dd HH:mm.ss.fff}] {type} {function}\r\n{message}\r\n\r\n"; 50 | if (_Stream == null) 51 | { 52 | Trace.WriteLine(s); 53 | } 54 | else 55 | { 56 | var bytes = Encoding.UTF8.GetBytes(s); 57 | _Stream.Write(bytes, 0, bytes.Length); 58 | } 59 | } 60 | 61 | void IDisposable.Dispose() 62 | { 63 | //Log(@"Info", @"(Internal)", @"End!"); 64 | 65 | _Stream?.Dispose(); 66 | _Stream = null; 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/ExportToCesium3DTiles_16px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/ExportToCesium3DTiles_16px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/ExportToCesium3DTiles_32px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/ExportToCesium3DTiles_32px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/ExportToGltf_16px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/ExportToGltf_16px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/ExportToGltf_32px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/ExportToGltf_32px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/ExportToSvfzip_16px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/ExportToSvfzip_16px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/ExportToSvfzip_32px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/ExportToSvfzip_32px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/Toolset_16px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/Toolset_16px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Images/Toolset_32px.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Images/Toolset_32px.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/NugetCommands.txt: -------------------------------------------------------------------------------- 1 |  2 | # Run follow scripts within Package Manager Console, to ensure the "BimAngle Engine SDK" available. 3 | # Please ignore error messages in the execution of the script, as it is designed to do 4 | 5 | Uninstall-Package -Id Bimangle.ForgeEngine.Extension.Cesium3DTiles 6 | Uninstall-Package -Id Bimangle.ForgeEngine.Extension.Gltf 7 | 8 | Update-Package -Id Bimangle.ForgeEngine.Common -Project Bimangle.ForgeEngine.Georeferncing 9 | 10 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2014 -Project Bimangle.ForgeEngine.Nw_R2014 11 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2015 -Project Bimangle.ForgeEngine.Nw_R2015 12 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2016 -Project Bimangle.ForgeEngine.Nw_R2016 13 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2017 -Project Bimangle.ForgeEngine.Nw_R2017 14 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2018 -Project Bimangle.ForgeEngine.Nw_R2018 15 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2019 -Project Bimangle.ForgeEngine.Nw_R2019 16 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2020 -Project Bimangle.ForgeEngine.Nw_R2020 17 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2021 -Project Bimangle.ForgeEngine.Nw_R2021 18 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2022 -Project Bimangle.ForgeEngine.Nw_R2022 19 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2023 -Project Bimangle.ForgeEngine.Nw_R2023 20 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2024 -Project Bimangle.ForgeEngine.Nw_R2024 21 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2025 -Project Bimangle.ForgeEngine.Nw_R2025 22 | Update-Package -Id Bimangle.ForgeEngine.Navisworks2026 -Project Bimangle.ForgeEngine.Nw_R2026 23 | 24 | Update-Package -reinstall 25 | 26 | # You can rebuild now! 27 | 28 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Bimangle.ForgeEngine.Navisworks; 5 | 6 | // 有关程序集的一般信息由以下 7 | // 控制。更改这些特性值可修改 8 | // 与程序集关联的信息。 9 | [assembly: AssemblyTitle(VersionInfo.PRODUCT_NAME)] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany(VersionInfo.COMPANY_NAME)] 13 | [assembly: AssemblyProduct(VersionInfo.PRODUCT_NAME)] 14 | [assembly: AssemblyCopyright(VersionInfo.COPYRIGHT)] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | 18 | // 将 ComVisible 设置为 false 会使此程序集中的类型 19 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 20 | //请将此类型的 ComVisible 特性设置为 true。 21 | [assembly: ComVisible(false)] 22 | 23 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 24 | [assembly: Guid("11e6eb25-8c8e-4409-97c2-cd21cc29f3e6")] 25 | 26 | // 程序集的版本信息由下列四个值组成: 27 | // 28 | // 主版本 29 | // 次版本 30 | // 生成号 31 | // 修订号 32 | // 33 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 34 | //通过使用 "*",如下所示: 35 | // [assembly: AssemblyVersion("1.0.*")] 36 | [assembly: AssemblyVersion("1.0.0.*")] 37 | [assembly: AssemblyFileVersion("1.0.0.0")] 38 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | False 7 | 8 | 9 | False 10 | 11 | 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Resources/Converter_32px_1061192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Resources/Converter_32px_1061192.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Resources/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Navisworks/Resources/app.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Toolset/CommandToolsetCheckEngineLogs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Navisworks.Core; 6 | using Bimangle.ForgeEngine.Navisworks.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Navisworks.Toolset 9 | { 10 | class CommandToolsetCheckEngineLogs 11 | { 12 | public void Execute(IWin32Window parentForm) 13 | { 14 | try 15 | { 16 | var logsPath = Path.Combine( 17 | VersionInfo.GetHomePath(), 18 | @"Logs"); 19 | if (Directory.Exists(logsPath) == false) 20 | { 21 | Directory.CreateDirectory(logsPath); 22 | } 23 | Process.Start(logsPath); 24 | } 25 | catch (Exception ex) 26 | { 27 | parentForm.ShowMessageBox(ex.ToString()); 28 | 29 | Trace.WriteLine(ex.ToString()); 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Toolset/CommandToolsetCreateProj.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | using Bimangle.ForgeEngine.Georeferncing; 5 | using Bimangle.ForgeEngine.Navisworks.Config; 6 | using Bimangle.ForgeEngine.Navisworks.Core; 7 | using Bimangle.ForgeEngine.Navisworks.Utility; 8 | 9 | namespace Bimangle.ForgeEngine.Navisworks.Toolset 10 | { 11 | class CommandToolsetCreateProj 12 | { 13 | public void Execute(IWin32Window parentForm, string inputFilePath) 14 | { 15 | try 16 | { 17 | var homePath = VersionInfo.GetHomePath(); 18 | 19 | var appConfig = AppConfigManager.Load(); 20 | var localConfig = appConfig.Cesium3DTiles; 21 | 22 | var adapter = new GeoreferncingAdapter(localConfig); 23 | var owner = parentForm; 24 | using (var host = GeoreferncingHost.Create(adapter, homePath)) 25 | { 26 | GeoreferncingHelper.ShowProjCreateUI(owner, host); 27 | } 28 | } 29 | catch (Exception ex) 30 | { 31 | parentForm.ShowMessageBox(ex.ToString()); 32 | 33 | Trace.WriteLine(ex.ToString()); 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Toolset/CommandToolsetPickPosition.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Navisworks.Utility; 6 | 7 | namespace Bimangle.ForgeEngine.Navisworks.Toolset 8 | { 9 | class CommandToolsetPickPosition 10 | { 11 | #region Implementation of IExternalCommand 12 | 13 | public void Execute(IWin32Window form) 14 | { 15 | try 16 | { 17 | if (Autodesk.Navisworks.Api.Application.ActiveDocument.Models.Count == 0) 18 | { 19 | form.ShowMessageBox(Strings.SceneNoData); 20 | return; 21 | } 22 | 23 | var dialog = new PickPosition.FormPickPosition(); 24 | dialog.Show(form); 25 | } 26 | catch (Exception ex) 27 | { 28 | form.ShowMessageBox(ex.ToString()); 29 | 30 | Trace.WriteLine(ex.ToString()); 31 | } 32 | } 33 | 34 | #endregion 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Toolset/CommandToolsetPickPositionFromMap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Navisworks.Core; 6 | using Bimangle.ForgeEngine.Navisworks.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Navisworks.Toolset 9 | { 10 | class CommandToolsetPickPositionFromMap 11 | { 12 | #region Implementation of IExternalCommand 13 | 14 | public void Execute(IWin32Window form) 15 | { 16 | var previewAppPath = Path.Combine( 17 | VersionInfo.GetHomePath(), 18 | @"Tools", 19 | @"Browser", 20 | @"Bimangle.ForgeBrowser.exe" 21 | ); 22 | 23 | try 24 | { 25 | Process.Start(previewAppPath, @"--PickPosition"); 26 | } 27 | catch (Exception ex) 28 | { 29 | form.ShowMessageBox(ex.ToString()); 30 | 31 | Trace.WriteLine(ex.ToString()); 32 | } 33 | } 34 | 35 | #endregion 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Toolset/CommandToolsetQuickPreview.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Navisworks.Core; 6 | using Bimangle.ForgeEngine.Navisworks.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Navisworks.Toolset 9 | { 10 | class CommandToolsetQuickPreview 11 | { 12 | public void Execute(IWin32Window form) 13 | { 14 | var previewAppPath = Path.Combine( 15 | VersionInfo.GetHomePath(), 16 | @"Tools", 17 | @"Browser", 18 | @"Bimangle.ForgeBrowser.exe" 19 | ); 20 | 21 | try 22 | { 23 | Process.Start(previewAppPath); 24 | } 25 | catch (Exception ex) 26 | { 27 | form.ShowMessageBox(ex.ToString()); 28 | Trace.WriteLine(ex.ToString()); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/UI/Controls/IExportControl.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Drawing; 3 | using Bimangle.ForgeEngine.Navisworks.Config; 4 | 5 | namespace Bimangle.ForgeEngine.Navisworks.UI.Controls 6 | { 7 | interface IExportControl 8 | { 9 | string Icon { get; } 10 | 11 | string Title { get; } 12 | 13 | void Init(AppConfig config); 14 | 15 | bool Run(IExportForm form); 16 | 17 | void Reset(); 18 | } 19 | 20 | interface IExportForm 21 | { 22 | bool UsedExtendFeature(string featureName); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/Utility/AppHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using NwVector3D = Autodesk.Navisworks.Api.Vector3D; 6 | 7 | namespace Bimangle.ForgeEngine.Navisworks.Utility 8 | { 9 | static class AppHelper 10 | { 11 | /// 12 | /// 获得相对路径 13 | /// 14 | /// 15 | /// 16 | public static string GetPath(string relatePath) 17 | { 18 | var dllFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 19 | return Path.Combine(dllFolder, relatePath); 20 | } 21 | 22 | public static void SetDirectionLetter(this Label lbl, NwVector3D v, string placeHolder) 23 | { 24 | var letter = GetDirectionLetter(v); 25 | lbl.Text = lbl.Text.Replace(placeHolder, letter); 26 | } 27 | 28 | private static bool IsEqual(this double source, double target, double error = 0.000001) 29 | { 30 | return Math.Abs(source - target) < error; 31 | } 32 | 33 | private static bool IsZero(this double n, double error = 0.000001) 34 | { 35 | return IsEqual(n, 0.0, error); 36 | } 37 | 38 | private static string GetDirectionLetter(this NwVector3D v) 39 | { 40 | if (IsZero(v.X) == false && 41 | IsZero(v.Y) && 42 | IsZero(v.Z)) 43 | { 44 | return v.X >= 0 ? @"X" : @"-X"; 45 | } 46 | 47 | if (IsZero(v.X) && 48 | IsZero(v.Y) == false && 49 | IsZero(v.Z)) 50 | { 51 | return v.Y >= 0 ? @"Y" : @"-Y"; 52 | } 53 | 54 | if (IsZero(v.X) && 55 | IsZero(v.Y) && 56 | IsZero(v.Z) == false) 57 | { 58 | return v.Z >= 0 ? @"Z" : @"-Z"; 59 | } 60 | 61 | return @"*"; 62 | } 63 | 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2014.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2015.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2016.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2017.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2018.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2019.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2020.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2021.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2022.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2023.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2024.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2025.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Navisworks/packages.Bimangle.ForgeEngine.Nw_R2026.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Bimangle.ForgeEngine.Revit_R2014.csproj.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | Yes -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Bimangle.ForgeEngine.Revit_R2015.csproj.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | Yes -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Bimangle.ForgeEngine.Revit_R2017.csproj.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | Yes -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Bimangle.ForgeEngine.Revit_R2018.csproj.DotSettings: -------------------------------------------------------------------------------- 1 |  2 | Yes -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Bimangle.ForgeEngine.Samples.addin: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Bimangle.ForgeEngine.Samples 5 | Bimangle.ForgeEngine.Samples/Bimangle.ForgeEngine.Samples.dll 6 | Bimangle.ForgeEngine.Revit.App 7 | d9413999-d41d-4b4a-8edd-d6a19aabc456 8 | BimAngle 9 | BimAngle.com 10 | 11 | 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/CommandExportCesium3DTiles.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using System.Windows.Forms; 9 | using Autodesk.Revit.Attributes; 10 | using Autodesk.Revit.DB; 11 | using Autodesk.Revit.UI; 12 | using Bimangle.ForgeEngine.Revit.Core; 13 | using Bimangle.ForgeEngine.Revit.UI; 14 | using Newtonsoft.Json.Linq; 15 | 16 | namespace Bimangle.ForgeEngine.Revit 17 | { 18 | [Transaction(TransactionMode.Manual)] 19 | public class CommandExportCesium3DTiles : IExternalCommand, IExternalCommandAvailability 20 | { 21 | private readonly IExternalCommand _Command; 22 | 23 | public CommandExportCesium3DTiles() 24 | { 25 | _Command = new InnerCommandExportCesium3DTiles(); 26 | } 27 | 28 | #region IExternalCommand 成员 29 | 30 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 31 | { 32 | try 33 | { 34 | AppDomain.CurrentDomain.AssemblyResolve += App.OnAssemblyResolve; 35 | 36 | return _Command.Execute(commandData, ref message, elements); 37 | } 38 | finally 39 | { 40 | AppDomain.CurrentDomain.AssemblyResolve -= App.OnAssemblyResolve; 41 | } 42 | } 43 | 44 | #endregion 45 | 46 | #region IExternalCommandAvailability 成员 47 | 48 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 49 | { 50 | return true; 51 | } 52 | 53 | #endregion 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/CommandExportGltf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using System.Windows.Forms; 9 | using Autodesk.Revit.Attributes; 10 | using Autodesk.Revit.DB; 11 | using Autodesk.Revit.UI; 12 | using Bimangle.ForgeEngine.Revit.Core; 13 | using Bimangle.ForgeEngine.Revit.UI; 14 | using Newtonsoft.Json.Linq; 15 | 16 | namespace Bimangle.ForgeEngine.Revit 17 | { 18 | [Transaction(TransactionMode.Manual)] 19 | public class CommandExportGltf : IExternalCommand, IExternalCommandAvailability 20 | { 21 | private readonly IExternalCommand _Command; 22 | 23 | public CommandExportGltf() 24 | { 25 | _Command = new InnerCommandExportGltf(); 26 | } 27 | 28 | #region IExternalCommand 成员 29 | 30 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 31 | { 32 | try 33 | { 34 | AppDomain.CurrentDomain.AssemblyResolve += App.OnAssemblyResolve; 35 | 36 | return _Command.Execute(commandData, ref message, elements); 37 | } 38 | finally 39 | { 40 | AppDomain.CurrentDomain.AssemblyResolve -= App.OnAssemblyResolve; 41 | } 42 | } 43 | 44 | #endregion 45 | 46 | #region IExternalCommandAvailability 成员 47 | 48 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 49 | { 50 | return true; 51 | } 52 | 53 | #endregion 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/CommandExportSvfzip.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | using System.Windows.Forms; 9 | using Autodesk.Revit.Attributes; 10 | using Autodesk.Revit.DB; 11 | using Autodesk.Revit.UI; 12 | using Bimangle.ForgeEngine.Revit.Core; 13 | using Bimangle.ForgeEngine.Revit.UI; 14 | using Newtonsoft.Json.Linq; 15 | 16 | namespace Bimangle.ForgeEngine.Revit 17 | { 18 | [Transaction(TransactionMode.Manual)] 19 | public class CommandExportSvfzip : IExternalCommand, IExternalCommandAvailability 20 | { 21 | private readonly IExternalCommand _Command; 22 | 23 | public CommandExportSvfzip() 24 | { 25 | _Command = new InnerCommandExportSvfzip(); 26 | } 27 | 28 | #region IExternalCommand 成员 29 | 30 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 31 | { 32 | try 33 | { 34 | AppDomain.CurrentDomain.AssemblyResolve += App.OnAssemblyResolve; 35 | 36 | return _Command.Execute(commandData, ref message, elements); 37 | } 38 | finally 39 | { 40 | AppDomain.CurrentDomain.AssemblyResolve -= App.OnAssemblyResolve; 41 | } 42 | } 43 | 44 | #endregion 45 | 46 | #region IExternalCommandAvailability 成员 47 | 48 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 49 | { 50 | return true; 51 | } 52 | 53 | #endregion 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Config/AppConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Security.Cryptography; 6 | using System.Text; 7 | using Newtonsoft.Json; 8 | 9 | namespace Bimangle.ForgeEngine.Revit.Config 10 | { 11 | [Serializable] 12 | class AppConfig 13 | { 14 | public AppConfigSvf Svf { get; set; } 15 | public AppConfigGltf Gltf { get; set; } 16 | public AppConfigCesium3DTiles Cesium3DTiles { get; set; } 17 | 18 | public AppConfig() 19 | { 20 | Svf = new AppConfigSvf(); 21 | Gltf = new AppConfigGltf(); 22 | Cesium3DTiles = new AppConfigCesium3DTiles(); 23 | } 24 | 25 | public AppConfig Clone() 26 | { 27 | return new AppConfig 28 | { 29 | Svf = Svf == null ? new AppConfigSvf() : Svf.Clone(), 30 | Gltf = Gltf == null ? new AppConfigGltf() : Gltf.Clone(), 31 | Cesium3DTiles = Cesium3DTiles == null ? new AppConfigCesium3DTiles() : Cesium3DTiles.Clone() 32 | }; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Config/AppConfigGltf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using FeatureType = Bimangle.ForgeEngine.Common.Formats.Gltf.FeatureType; 5 | 6 | namespace Bimangle.ForgeEngine.Revit.Config 7 | { 8 | [Serializable] 9 | class AppConfigGltf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigGltf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = true; 22 | AutoOpenAppName = null; 23 | VisualStyle = @"Auto"; 24 | LevelOfDetail = 6; //默认为 6 25 | Features = new List 26 | { 27 | FeatureType.VisualStyleAuto, 28 | FeatureType.GenerateModelsDb, 29 | FeatureType.AllowRegroupNodes 30 | }; 31 | } 32 | 33 | public AppConfigGltf Clone() 34 | { 35 | return new AppConfigGltf 36 | { 37 | LastTargetPath = LastTargetPath, 38 | AutoOpenAllow = AutoOpenAllow, 39 | AutoOpenAppName = AutoOpenAppName, 40 | VisualStyle = VisualStyle, 41 | LevelOfDetail = LevelOfDetail, 42 | Features = Features?.ToList() ?? new List() 43 | }; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Config/AppConfigSvf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Bimangle.ForgeEngine.Common.Formats.Svf.Revit; 5 | 6 | namespace Bimangle.ForgeEngine.Revit.Config 7 | { 8 | [Serializable] 9 | class AppConfigSvf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigSvf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = true; 22 | AutoOpenAppName = null; 23 | VisualStyle = @"Auto"; 24 | LevelOfDetail = -1; 25 | Features = new List 26 | { 27 | FeatureType.VisualStyleAuto, 28 | FeatureType.GenerateThumbnail, 29 | FeatureType.GenerateModelsDb, 30 | FeatureType.Export2DViewOnlySheet, 31 | FeatureType.Force2DViewUseWireframe 32 | }; 33 | } 34 | 35 | public AppConfigSvf Clone() 36 | { 37 | return new AppConfigSvf 38 | { 39 | LastTargetPath = LastTargetPath, 40 | AutoOpenAllow = AutoOpenAllow, 41 | AutoOpenAppName = AutoOpenAppName, 42 | VisualStyle = VisualStyle, 43 | LevelOfDetail = LevelOfDetail, 44 | Features = Features?.ToList() ?? new List() 45 | }; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Custom/ExportHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Bimangle.ForgeEngine.Revit.Api; 7 | 8 | namespace Bimangle.ForgeEngine.Revit.Custom 9 | { 10 | class ExportHandler : ExportHandlerBase 11 | { 12 | private readonly bool _EnableCustomLevelParser; 13 | 14 | public ExportHandler() 15 | { 16 | _EnableCustomLevelParser = Properties.Settings.Default.EnableCustomLevelParser; 17 | } 18 | 19 | public override ILevelParser OnCreateLevelParser() 20 | { 21 | return _EnableCustomLevelParser 22 | ? new LevelParser() 23 | : base.OnCreateLevelParser(); 24 | } 25 | 26 | public override bool OnGetUseLevelCategory() 27 | { 28 | return _EnableCustomLevelParser || base.OnGetUseLevelCategory(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | obj-$(MSBuildProjectName) 5 | $(MSBuildProjectExtensionsPath) 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/NugetCommands.txt: -------------------------------------------------------------------------------- 1 |  2 | # Run follow scripts within Package Manager Console, to ensure the "BimAngle Engine SDK" available. 3 | # Please ignore error messages in the execution of the script, as it is designed to do 4 | 5 | Uninstall-Package -Id Bimangle.ForgeEngine.Extension.Cesium3DTiles 6 | Uninstall-Package -Id Bimangle.ForgeEngine.Extension.Gltf 7 | 8 | Update-Package -Id Bimangle.ForgeEngine.Common -Project Bimangle.ForgeEngine.Georeferncing 9 | 10 | Update-Package -Id Bimangle.ForgeEngine.Revit2014 -Project Bimangle.ForgeEngine.Revit_R2014 11 | Update-Package -Id Bimangle.ForgeEngine.Revit2015 -Project Bimangle.ForgeEngine.Revit_R2015 12 | Update-Package -Id Bimangle.ForgeEngine.Revit2016 -Project Bimangle.ForgeEngine.Revit_R2016 13 | Update-Package -Id Bimangle.ForgeEngine.Revit2017 -Project Bimangle.ForgeEngine.Revit_R2017 14 | Update-Package -Id Bimangle.ForgeEngine.Revit2018 -Project Bimangle.ForgeEngine.Revit_R2018 15 | Update-Package -Id Bimangle.ForgeEngine.Revit2019 -Project Bimangle.ForgeEngine.Revit_R2019 16 | Update-Package -Id Bimangle.ForgeEngine.Revit2020 -Project Bimangle.ForgeEngine.Revit_R2020 17 | Update-Package -Id Bimangle.ForgeEngine.Revit2021 -Project Bimangle.ForgeEngine.Revit_R2021 18 | Update-Package -Id Bimangle.ForgeEngine.Revit2022 -Project Bimangle.ForgeEngine.Revit_R2022 19 | Update-Package -Id Bimangle.ForgeEngine.Revit2023 -Project Bimangle.ForgeEngine.Revit_R2023 20 | Update-Package -Id Bimangle.ForgeEngine.Revit2024 -Project Bimangle.ForgeEngine.Revit_R2024 21 | Update-Package -Id Bimangle.ForgeEngine.Revit2025 -Project Bimangle.ForgeEngine.Revit_R2025 22 | Update-Package -Id Bimangle.ForgeEngine.Revit2026 -Project Bimangle.ForgeEngine.Revit_R2026 23 | 24 | Update-Package -reinstall 25 | 26 | # You can rebuild now! 27 | 28 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Bimangle.ForgeEngine.Revit; 5 | 6 | // 有关程序集的一般信息由以下 7 | // 控制。更改这些特性值可修改 8 | // 与程序集关联的信息。 9 | [assembly: AssemblyTitle(VersionInfo.PRODUCT_NAME)] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany(VersionInfo.COMPANY_NAME)] 13 | [assembly: AssemblyProduct(VersionInfo.PRODUCT_NAME)] 14 | [assembly: AssemblyCopyright(VersionInfo.COPYRIGHT)] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | 18 | // 将 ComVisible 设置为 false 会使此程序集中的类型 19 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 20 | //请将此类型的 ComVisible 特性设置为 true。 21 | [assembly: ComVisible(false)] 22 | 23 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 24 | [assembly: Guid("63a8f657-00d3-42b1-a5a9-ca1504945037")] 25 | 26 | // 程序集的版本信息由下列四个值组成: 27 | // 28 | // 主版本 29 | // 次版本 30 | // 生成号 31 | // 修订号 32 | // 33 | // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 34 | //通过使用 "*",如下所示: 35 | // [assembly: AssemblyVersion("1.0.*")] 36 | [assembly: AssemblyVersion("1.0.0.0")] 37 | [assembly: AssemblyFileVersion("1.0.0.0")] 38 | 39 | #if NET8_0_OR_GREATER 40 | [assembly: System.Runtime.Versioning.SupportedOSPlatform("windows")] 41 | #endif -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | False 7 | 8 | 9 | False 10 | 11 | 12 | False 13 | 14 | 15 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/Cesium3DTiles_16px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/Cesium3DTiles_16px.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/Cesium3DTiles_32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/Cesium3DTiles_32px.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/Converter_16px_1061192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/Converter_16px_1061192.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/Converter_32px_1061192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/Converter_32px_1061192.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/Toolset_16px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/Toolset_16px.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/Toolset_32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/Toolset_32px.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/app.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/gltf_16px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/gltf_16px.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Resources/gltf_32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Revit/Resources/gltf_32px.png -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Toolset/CheckEngineLogs/CommandToolsetCheckEngineLogs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Autodesk.Revit.Attributes; 6 | using Autodesk.Revit.DB; 7 | using Autodesk.Revit.UI; 8 | using Bimangle.ForgeEngine.Revit.Core; 9 | using Bimangle.ForgeEngine.Revit.Utility; 10 | using RevitUI = Autodesk.Revit.UI; 11 | 12 | namespace Bimangle.ForgeEngine.Revit.Toolset.CheckEngineLogs 13 | { 14 | [Transaction(TransactionMode.Manual)] 15 | public class CommandToolsetCheckEngineLogs : IExternalCommand, IExternalCommandAvailability 16 | { 17 | #region Implementation of IExternalCommand 18 | 19 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 20 | { 21 | try 22 | { 23 | var logsPath = Path.Combine( 24 | VersionInfo.GetHomePath(), 25 | @"Logs"); 26 | if (Directory.Exists(logsPath) == false) 27 | { 28 | Directory.CreateDirectory(logsPath); 29 | } 30 | Process.Start(logsPath); 31 | } 32 | catch (Exception ex) 33 | { 34 | RevitUI.TaskDialog.Show(@"Error", ex.ToString()); 35 | 36 | Trace.WriteLine(ex.ToString()); 37 | } 38 | 39 | return Result.Succeeded; 40 | } 41 | 42 | #endregion 43 | 44 | #region Implementation of IExternalCommandAvailability 45 | 46 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 47 | { 48 | return true; 49 | } 50 | 51 | #endregion 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Toolset/CheckRevitJournals/CommandToolsetCheckRevitJournals.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Autodesk.Revit.Attributes; 6 | using Autodesk.Revit.DB; 7 | using Autodesk.Revit.UI; 8 | using Bimangle.ForgeEngine.Revit.Core; 9 | using Bimangle.ForgeEngine.Revit.Utility; 10 | using RevitUI = Autodesk.Revit.UI; 11 | 12 | namespace Bimangle.ForgeEngine.Revit.Toolset.CheckRevitJournals 13 | { 14 | [Transaction(TransactionMode.Manual)] 15 | public class CommandToolsetCheckRevitJournals : IExternalCommand, IExternalCommandAvailability 16 | { 17 | #region Implementation of IExternalCommand 18 | 19 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 20 | { 21 | try 22 | { 23 | var journalsPath = Path.Combine( 24 | Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), 25 | @"Autodesk", 26 | @"Revit", 27 | $@"Autodesk Revit {PackageInfo.REVIT_VERSION}", 28 | @"Journals"); 29 | Process.Start(journalsPath); 30 | } 31 | catch (Exception ex) 32 | { 33 | RevitUI.TaskDialog.Show(@"Error", ex.ToString()); 34 | 35 | Trace.WriteLine(ex.ToString()); 36 | } 37 | 38 | return Result.Succeeded; 39 | } 40 | 41 | #endregion 42 | 43 | #region Implementation of IExternalCommandAvailability 44 | 45 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 46 | { 47 | return true; 48 | } 49 | 50 | #endregion 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Toolset/CreateProj/CommandToolsetCreateProj.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Text; 5 | using System.Windows.Forms; 6 | using Autodesk.Revit.Attributes; 7 | using Autodesk.Revit.DB; 8 | using Autodesk.Revit.UI; 9 | using Bimangle.ForgeEngine.Georeferncing; 10 | using Bimangle.ForgeEngine.Revit.Config; 11 | using Bimangle.ForgeEngine.Revit.Core; 12 | using Bimangle.ForgeEngine.Revit.Utility; 13 | using RevitUI = Autodesk.Revit.UI; 14 | 15 | namespace Bimangle.ForgeEngine.Revit.Toolset.CreateProj 16 | { 17 | [Transaction(TransactionMode.Manual)] 18 | public class CommandToolsetCreateProj : IExternalCommand, IExternalCommandAvailability 19 | { 20 | #region Implementation of IExternalCommand 21 | 22 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 23 | { 24 | try 25 | { 26 | var document = commandData.View.Document; 27 | var homePath = VersionInfo.GetHomePath(); 28 | 29 | var appConfig = AppConfigManager.Load(); 30 | var localConfig = appConfig.Cesium3DTiles; 31 | 32 | var adapter = new GeoreferncingAdapter(document, localConfig); 33 | var owner = commandData.GetMainWindowHandle(); 34 | using (var host = GeoreferncingHost.Create(adapter, homePath)) 35 | { 36 | GeoreferncingHelper.ShowProjCreateUI(owner, host); 37 | } 38 | } 39 | catch (Exception ex) 40 | { 41 | RevitUI.TaskDialog.Show(@"Error", ex.ToString()); 42 | 43 | Trace.WriteLine(ex.ToString()); 44 | } 45 | 46 | return Result.Succeeded; 47 | } 48 | 49 | #endregion 50 | 51 | #region Implementation of IExternalCommandAvailability 52 | 53 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 54 | { 55 | return true; 56 | } 57 | 58 | #endregion 59 | 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Toolset/PickPosition/CommandToolsetPickPosition.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | using Autodesk.Revit.Attributes; 5 | using Autodesk.Revit.DB; 6 | using Autodesk.Revit.UI; 7 | using Bimangle.ForgeEngine.Revit.Utility; 8 | 9 | namespace Bimangle.ForgeEngine.Revit.Toolset.PickPosition 10 | { 11 | [Transaction(TransactionMode.Manual)] 12 | public class CommandToolsetPickPosition : IExternalCommand, IExternalCommandAvailability 13 | { 14 | #region Implementation of IExternalCommand 15 | 16 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 17 | { 18 | var form = new FormPickPosition(commandData); 19 | form.InitExternalEvent(); 20 | form.Show(commandData.GetMainWindowHandle()); 21 | 22 | return Result.Succeeded; 23 | } 24 | 25 | #endregion 26 | 27 | #region Implementation of IExternalCommandAvailability 28 | 29 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 30 | { 31 | return true; 32 | } 33 | 34 | #endregion 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Toolset/PickPositionFromMap/CommandToolsetPickPositionFromMap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Autodesk.Revit.Attributes; 6 | using Autodesk.Revit.DB; 7 | using Autodesk.Revit.UI; 8 | using Bimangle.ForgeEngine.Revit.Core; 9 | using Bimangle.ForgeEngine.Revit.Utility; 10 | using RevitUI = Autodesk.Revit.UI; 11 | 12 | namespace Bimangle.ForgeEngine.Revit.Toolset.PickPositionFromMap 13 | { 14 | [Transaction(TransactionMode.Manual)] 15 | public class CommandToolsetPickPositionFromMap : IExternalCommand, IExternalCommandAvailability 16 | { 17 | #region Implementation of IExternalCommand 18 | 19 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 20 | { 21 | var previewAppPath = Path.Combine( 22 | VersionInfo.GetHomePath(), 23 | @"Tools", 24 | @"Browser", 25 | @"Bimangle.ForgeBrowser.exe" 26 | ); 27 | 28 | try 29 | { 30 | 31 | Process.Start(previewAppPath, @"--PickPosition"); 32 | } 33 | catch (Exception ex) 34 | { 35 | RevitUI.TaskDialog.Show(@"Error", ex.ToString()); 36 | 37 | Trace.WriteLine(ex.ToString()); 38 | } 39 | 40 | return Result.Succeeded; 41 | } 42 | 43 | #endregion 44 | 45 | #region Implementation of IExternalCommandAvailability 46 | 47 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 48 | { 49 | return true; 50 | } 51 | 52 | #endregion 53 | 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/Toolset/QuickPreview/CommandToolsetQuickPreview.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Autodesk.Revit.Attributes; 6 | using Autodesk.Revit.DB; 7 | using Autodesk.Revit.UI; 8 | using Bimangle.ForgeEngine.Revit.Core; 9 | using Bimangle.ForgeEngine.Revit.Utility; 10 | using RevitUI = Autodesk.Revit.UI; 11 | 12 | namespace Bimangle.ForgeEngine.Revit.Toolset.QuickPreview 13 | { 14 | [Transaction(TransactionMode.Manual)] 15 | public class CommandToolsetQuickPreview : IExternalCommand, IExternalCommandAvailability 16 | { 17 | #region Implementation of IExternalCommand 18 | 19 | Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 20 | { 21 | var previewAppPath = Path.Combine( 22 | VersionInfo.GetHomePath(), 23 | @"Tools", 24 | @"Browser", 25 | @"Bimangle.ForgeBrowser.exe" 26 | ); 27 | 28 | try 29 | { 30 | Process.Start(previewAppPath); 31 | } 32 | catch (Exception ex) 33 | { 34 | RevitUI.TaskDialog.Show(@"Error", ex.ToString()); 35 | 36 | Trace.WriteLine(ex.ToString()); 37 | } 38 | 39 | return Result.Succeeded; 40 | } 41 | 42 | #endregion 43 | 44 | #region Implementation of IExternalCommandAvailability 45 | 46 | bool IExternalCommandAvailability.IsCommandAvailable(UIApplication applicationData, CategorySet selectedCategories) 47 | { 48 | return true; 49 | } 50 | 51 | #endregion 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/UI/Controls/IExportControl.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using Autodesk.Revit.DB; 7 | using Autodesk.Revit.UI; 8 | using Bimangle.ForgeEngine.Revit.Config; 9 | 10 | namespace Bimangle.ForgeEngine.Revit.UI.Controls 11 | { 12 | interface IExportControl 13 | { 14 | string Icon { get; } 15 | 16 | string Title { get; } 17 | 18 | void Init(UIDocument uidoc, View3D view, AppConfig config, Dictionary elementIds); 19 | 20 | bool Run(IExportForm form, bool enabledSampling); 21 | 22 | void Reset(); 23 | } 24 | 25 | interface IExportForm 26 | { 27 | bool UsedExtendFeature(string featureName); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/obj-Bimangle.ForgeEngine.Revit_R2025/Bimangle.ForgeEngine.Revit_R2025.csproj.nuget.g.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | True 5 | NuGet 6 | $(MSBuildThisFileDirectory)project.assets.json 7 | $(UserProfile)\.nuget\packages\ 8 | C:\Users\kent\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder 9 | PackageReference 10 | 6.13.1 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/obj-Bimangle.ForgeEngine.Revit_R2025/Bimangle.ForgeEngine.Revit_R2025.csproj.nuget.g.targets: -------------------------------------------------------------------------------- 1 |  2 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/obj-Bimangle.ForgeEngine.Revit_R2026/Bimangle.ForgeEngine.Revit_R2026.csproj.nuget.g.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | True 5 | NuGet 6 | $(MSBuildThisFileDirectory)project.assets.json 7 | $(UserProfile)\.nuget\packages\ 8 | C:\Users\kent\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder 9 | PackageReference 10 | 6.13.1 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/obj-Bimangle.ForgeEngine.Revit_R2026/Bimangle.ForgeEngine.Revit_R2026.csproj.nuget.g.targets: -------------------------------------------------------------------------------- 1 |  2 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2014.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2015.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2016.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2017.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2018.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2019.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2020.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2021.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2022.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2023.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Revit/packages.Bimangle.ForgeEngine.Revit_R2024.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Config/AppConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Security.Cryptography; 6 | using System.Text; 7 | using Newtonsoft.Json; 8 | 9 | namespace Bimangle.ForgeEngine.Skp.Config 10 | { 11 | [Serializable] 12 | class AppConfig 13 | { 14 | public AppConfigSvf Svf { get; set; } 15 | public AppConfigGltf Gltf { get; set; } 16 | public AppConfigCesium3DTiles Cesium3DTiles { get; set; } 17 | 18 | public AppConfig() 19 | { 20 | Svf = new AppConfigSvf(); 21 | Gltf = new AppConfigGltf(); 22 | Cesium3DTiles = new AppConfigCesium3DTiles(); 23 | } 24 | 25 | public AppConfig Clone() 26 | { 27 | return new AppConfig 28 | { 29 | Svf = Svf == null ? new AppConfigSvf() : Svf.Clone(), 30 | Gltf = Gltf == null ? new AppConfigGltf() : Gltf.Clone(), 31 | Cesium3DTiles = Cesium3DTiles == null ? new AppConfigCesium3DTiles() : Cesium3DTiles.Clone() 32 | }; 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Config/AppConfigGltf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using FeatureType = Bimangle.ForgeEngine.Common.Formats.Gltf.FeatureType; 5 | 6 | namespace Bimangle.ForgeEngine.Skp.Config 7 | { 8 | [Serializable] 9 | class AppConfigGltf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigGltf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = true; 22 | AutoOpenAppName = null; 23 | VisualStyle = @"Auto"; 24 | LevelOfDetail = 6; //默认为 6 25 | Features = new List 26 | { 27 | FeatureType.VisualStyleAuto, 28 | FeatureType.GenerateModelsDb, 29 | FeatureType.AllowRegroupNodes 30 | }; 31 | } 32 | 33 | public AppConfigGltf Clone() 34 | { 35 | return new AppConfigGltf 36 | { 37 | LastTargetPath = LastTargetPath, 38 | AutoOpenAllow = AutoOpenAllow, 39 | AutoOpenAppName = AutoOpenAppName, 40 | VisualStyle = VisualStyle, 41 | LevelOfDetail = LevelOfDetail, 42 | Features = Features?.ToList() ?? new List() 43 | }; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Config/AppConfigSvf.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Bimangle.ForgeEngine.Common.Formats.Svf.Skp; 5 | 6 | namespace Bimangle.ForgeEngine.Skp.Config 7 | { 8 | [Serializable] 9 | class AppConfigSvf 10 | { 11 | public string LastTargetPath { get; set; } 12 | public bool AutoOpenAllow { get; set; } 13 | public string AutoOpenAppName { get; set; } 14 | public string VisualStyle { get; set; } 15 | public int LevelOfDetail { get; set; } 16 | public List Features { get; set; } 17 | 18 | public AppConfigSvf() 19 | { 20 | LastTargetPath = string.Empty; 21 | AutoOpenAllow = true; 22 | AutoOpenAppName = null; 23 | VisualStyle = @"Auto"; 24 | LevelOfDetail = -1; 25 | Features = new List 26 | { 27 | FeatureType.VisualStyleAuto, 28 | FeatureType.GenerateThumbnail, 29 | FeatureType.GenerateModelsDb, 30 | }; 31 | } 32 | 33 | public AppConfigSvf Clone() 34 | { 35 | return new AppConfigSvf 36 | { 37 | LastTargetPath = LastTargetPath, 38 | AutoOpenAllow = AutoOpenAllow, 39 | AutoOpenAppName = AutoOpenAppName, 40 | VisualStyle = VisualStyle, 41 | LevelOfDetail = LevelOfDetail, 42 | Features = Features?.ToList() ?? new List() 43 | }; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Core/ILog.cs: -------------------------------------------------------------------------------- 1 | namespace Bimangle.ForgeEngine.Skp.Core 2 | { 3 | public interface ILog 4 | { 5 | void WriteLine(string s); 6 | 7 | void Write(string s); 8 | void WriteProgress(int progress); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Core/LogProgress.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using Bimangle.ForgeEngine.Skp.Utility; 8 | 9 | namespace Bimangle.ForgeEngine.Skp.Core 10 | { 11 | class LogProgress : ILog 12 | { 13 | private readonly Action _ProgressCallback; 14 | 15 | public LogProgress(ProgressExHelper progress) 16 | { 17 | _ProgressCallback = progress?.GetProgressCallback() ?? throw new ArgumentNullException(nameof(progress)); 18 | } 19 | 20 | #region Implementation of ILog 21 | 22 | public void WriteLine(string s) 23 | { 24 | Debug.WriteLine(s); 25 | } 26 | 27 | public void Write(string s) 28 | { 29 | Debug.Write(s); 30 | } 31 | 32 | public void WriteProgress(int progress) 33 | { 34 | if (progress > 100) progress = 100; 35 | if (progress < 0) progress = 0; 36 | _ProgressCallback(progress); 37 | } 38 | 39 | #endregion 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/NugetCommands.txt: -------------------------------------------------------------------------------- 1 |  2 | # Run follow scripts within Package Manager Console, to ensure the "BimAngle Engine SDK" available. 3 | # Please ignore error messages in the execution of the script, as it is designed to do 4 | 5 | Update-Package -Id Bimangle.ForgeEngine.Common -Project Bimangle.ForgeEngine.Georeferncing 6 | Update-Package -Id Bimangle.ForgeEngine.Skp -Project Bimangle.ForgeEngine.Skp 7 | 8 | Update-Package -reinstall 9 | 10 | # You can rebuild now! 11 | 12 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Runtime.InteropServices; 8 | using System.Threading; 9 | using System.Windows.Forms; 10 | using Bimangle.ForgeEngine.Skp.Config; 11 | using Bimangle.ForgeEngine.Skp.Core; 12 | 13 | namespace Bimangle.ForgeEngine.Skp 14 | { 15 | class Program 16 | { 17 | [STAThread] 18 | static void Main() 19 | { 20 | var appConfig = AppConfigManager.Load(); 21 | var format = Options.DEFAULT_FORMAT; 22 | 23 | Application.EnableVisualStyles(); 24 | Application.SetCompatibleTextRenderingDefault(false); 25 | Application.Run(new UI.FormExport(appConfig, format)); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // 有关程序集的一般信息由以下 6 | // 控制。更改这些特性值可修改 7 | // 与程序集关联的信息。 8 | #if EXPRESS 9 | [assembly: AssemblyTitle("Bimangle Engine Express (for Skp) CLI")] 10 | [assembly: AssemblyProduct("Bimangle Engine Express (for Skp)")] 11 | #else 12 | [assembly: AssemblyTitle("Bimangle Engine (for Skp) CLI")] 13 | [assembly: AssemblyProduct("Bimangle Engine (for Skp)")] 14 | #endif 15 | [assembly: AssemblyDescription("")] 16 | [assembly: AssemblyConfiguration("")] 17 | [assembly: AssemblyCompany("BimAngle")] 18 | [assembly: AssemblyCopyright("Copyright © BimAngle 2017-2025")] 19 | [assembly: AssemblyTrademark("")] 20 | [assembly: AssemblyCulture("")] 21 | 22 | // 将 ComVisible 设置为 false 会使此程序集中的类型 23 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 24 | //请将此类型的 ComVisible 特性设置为 true。 25 | [assembly: ComVisible(false)] 26 | 27 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID 28 | [assembly: Guid("66dcafc7-1f24-4fb5-8f25-310c1ecbff17")] 29 | 30 | // 程序集的版本信息由下列四个值组成: 31 | // 32 | // 主版本 33 | // 次版本 34 | // 生成号 35 | // 修订号 36 | // 37 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 38 | //通过使用 "*",如下所示: 39 | // [assembly: AssemblyVersion("2021.5.8.1736")] 40 | [assembly: AssemblyVersion("2021.5.8.1736")] 41 | [assembly: AssemblyFileVersion("2021.5.8.1736")] 42 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | True 7 | 8 | 9 | 10 | 11 | 12 | False 13 | 14 | 15 | False 16 | 17 | 18 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Resources/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bimangle/forge-engine-samples/fa5dcd73df9c5668967e02ed2a780104e1a77c7e/Bimangle.ForgeEngine.Skp/Resources/app.ico -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Toolset/CommandToolsetCheckEngineLogs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Skp.Core; 6 | using Bimangle.ForgeEngine.Skp.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Skp.Toolset 9 | { 10 | class CommandToolsetCheckEngineLogs 11 | { 12 | public void Execute(Form parentForm) 13 | { 14 | try 15 | { 16 | var logsPath = Path.Combine( 17 | App.GetHomePath(), 18 | @"Logs"); 19 | if (Directory.Exists(logsPath) == false) 20 | { 21 | Directory.CreateDirectory(logsPath); 22 | } 23 | Process.Start(logsPath); 24 | } 25 | catch (Exception ex) 26 | { 27 | parentForm.ShowMessageBox(ex.ToString()); 28 | 29 | Trace.WriteLine(ex.ToString()); 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Toolset/CommandToolsetCreateProj.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Windows.Forms; 4 | using Bimangle.ForgeEngine.Common.Utils; 5 | using Bimangle.ForgeEngine.Georeferncing; 6 | using Bimangle.ForgeEngine.Skp.Config; 7 | using Bimangle.ForgeEngine.Skp.Core; 8 | using Bimangle.ForgeEngine.Skp.Utility; 9 | 10 | namespace Bimangle.ForgeEngine.Skp.Toolset 11 | { 12 | class CommandToolsetCreateProj 13 | { 14 | public void Execute(Form parentForm, string inputFilePath) 15 | { 16 | try 17 | { 18 | var homePath = App.GetHomePath(); 19 | 20 | var appConfig = AppConfigManager.Load(); 21 | var localConfig = appConfig.Cesium3DTiles; 22 | 23 | var adapter = new GeoreferncingAdapter(inputFilePath, localConfig); 24 | var owner = parentForm; 25 | using (var host = GeoreferncingHost.Create(adapter, homePath)) 26 | { 27 | GeoreferncingHelper.ShowProjCreateUI(owner, host); 28 | } 29 | } 30 | catch (Exception ex) 31 | { 32 | parentForm.ShowMessageBox(ex.ToString()); 33 | 34 | Trace.WriteLine(ex.ToString()); 35 | } 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Toolset/CommandToolsetPickPositionFromMap.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Skp.Core; 6 | using Bimangle.ForgeEngine.Skp.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Skp.Toolset 9 | { 10 | class CommandToolsetPickPositionFromMap 11 | { 12 | #region Implementation of IExternalCommand 13 | 14 | public void Execute(Form form) 15 | { 16 | var previewAppPath = Path.Combine( 17 | App.GetHomePath(), 18 | @"Tools", 19 | @"Browser", 20 | @"Bimangle.ForgeBrowser.exe" 21 | ); 22 | 23 | try 24 | { 25 | Process.Start(previewAppPath, @"--PickPosition"); 26 | } 27 | catch (Exception ex) 28 | { 29 | form.ShowMessageBox(ex.ToString()); 30 | 31 | Trace.WriteLine(ex.ToString()); 32 | } 33 | } 34 | 35 | #endregion 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Toolset/CommandToolsetQuickPreview.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Skp.Core; 6 | using Bimangle.ForgeEngine.Skp.Utility; 7 | 8 | namespace Bimangle.ForgeEngine.Skp.Toolset 9 | { 10 | class CommandToolsetQuickPreview 11 | { 12 | public void Execute(Form form) 13 | { 14 | var previewAppPath = Path.Combine( 15 | App.GetHomePath(), 16 | @"Tools", 17 | @"Browser", 18 | @"Bimangle.ForgeBrowser.exe" 19 | ); 20 | 21 | try 22 | { 23 | Process.Start(previewAppPath); 24 | } 25 | catch (Exception ex) 26 | { 27 | form.ShowMessageBox(ex.ToString()); 28 | Trace.WriteLine(ex.ToString()); 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/UI/Controls/IExportControl.cs: -------------------------------------------------------------------------------- 1 | using Bimangle.ForgeEngine.Skp.Config; 2 | 3 | namespace Bimangle.ForgeEngine.Skp.UI.Controls 4 | { 5 | interface IExportControl 6 | { 7 | string Icon { get; } 8 | 9 | string Title { get; } 10 | 11 | void Init(IExportForm form, AppConfig config); 12 | 13 | void Reset(); 14 | 15 | void RefreshCommand(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/UI/Controls/IExportForm.cs: -------------------------------------------------------------------------------- 1 | using Bimangle.ForgeEngine.Skp.Core; 2 | 3 | namespace Bimangle.ForgeEngine.Skp.UI.Controls 4 | { 5 | interface IExportForm 6 | { 7 | void RefreshCommand(Options options); 8 | 9 | string GetInputFilePath(); 10 | 11 | /// 12 | /// 是否启用扩展特性 13 | /// 14 | /// 15 | /// 16 | bool UsedExtendFeature(string featureName); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Utility/AppHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | 4 | namespace Bimangle.ForgeEngine.Skp.Utility 5 | { 6 | static class AppHelper 7 | { 8 | /// 9 | /// 确保文件夹路径存在 10 | /// 11 | /// 12 | public static void MakeSureFolderPathExists(string folderPath) 13 | { 14 | var targetFolderPath = Path.GetPathRoot(folderPath); //获得文件夹的根路径 15 | if (string.IsNullOrEmpty(targetFolderPath) == false) 16 | { 17 | folderPath = folderPath.Substring(targetFolderPath.Length); //获得文件夹路径中除了根路径剩余的部分 18 | } 19 | 20 | var segs = folderPath.Split(new[] { @"\", @"/" }, StringSplitOptions.None); 21 | for (var i = 0; i < segs.Length; i++) 22 | { 23 | var seg = segs[i]; 24 | targetFolderPath = Path.Combine(targetFolderPath, seg); 25 | if (Directory.Exists(targetFolderPath) == false) 26 | { 27 | Directory.CreateDirectory(targetFolderPath); 28 | } 29 | } 30 | } 31 | 32 | /// 33 | /// 获得相对路径 34 | /// 35 | /// 36 | /// 37 | public static string GetPath(string relatePath) 38 | { 39 | var dllFolder = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 40 | return Path.Combine(dllFolder, relatePath); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/Utility/ProgressExHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Threading; 4 | using System.Windows.Forms; 5 | using Bimangle.ForgeEngine.Skp.UI; 6 | 7 | namespace Bimangle.ForgeEngine.Skp.Utility 8 | { 9 | class ProgressExHelper : IDisposable 10 | { 11 | private static ProgressExHelper _Instance; 12 | 13 | public static void Close() 14 | { 15 | var obj = _Instance; 16 | if (obj != null) 17 | { 18 | obj.Dispose(); 19 | } 20 | } 21 | 22 | private FormProgressEx _Form; 23 | 24 | public ProgressExHelper(string title = null, int progressLimit = 100) 25 | { 26 | _Form = new FormProgressEx(title, progressLimit); 27 | _Form.StartPosition = FormStartPosition.CenterScreen; 28 | _Form.Show(); 29 | _Form.Refresh(); 30 | 31 | _Instance = this; 32 | } 33 | 34 | public ProgressExHelper(Form owner, string title = null, int progressLimit = 100) 35 | { 36 | _Form = new FormProgressEx(title, progressLimit); 37 | _Form.StartPosition = FormStartPosition.CenterParent; 38 | _Form.Show(owner); 39 | _Form.Location = new Point( 40 | (owner.Width - _Form.Width)/2 + owner.Left, 41 | (owner.Height - _Form.Height)/2 + owner.Top); 42 | _Form.Refresh(); 43 | 44 | _Instance = this; 45 | } 46 | 47 | public CancellationToken GetCancellationToken() 48 | { 49 | return _Form?.GetCancellationToken() ?? CancellationToken.None; 50 | } 51 | 52 | public Action GetProgressCallback() 53 | { 54 | if (_Form == null) return null; 55 | 56 | Action m = _Form.SetProgressValue; 57 | return m; 58 | } 59 | 60 | public void Dispose() 61 | { 62 | if (_Form != null) 63 | { 64 | _Form.Close(); 65 | _Form = null; 66 | 67 | _Instance = null; 68 | } 69 | } 70 | } 71 | } -------------------------------------------------------------------------------- /Bimangle.ForgeEngine.Skp/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Build/Build.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {BE444FBE-FEB6-4B39-B4F8-3ED376280F69} 8 | Library 9 | Build 10 | Build 11 | v4.5.2 12 | 512 13 | true 14 | true 15 | 16 | 17 | AnyCPU 18 | true 19 | full 20 | false 21 | bin\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | AnyCPU 28 | pdbonly 29 | true 30 | bin\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.3DXML.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28307.2017 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.3DXML", "Bimangle.ForgeEngine.3DXML\Bimangle.ForgeEngine.3DXML.csproj", "{EBE269BD-2DC3-410E-A525-E7E7AD97807C}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {EBE269BD-2DC3-410E-A525-E7E7AD97807C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {EBE269BD-2DC3-410E-A525-E7E7AD97807C}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {EBE269BD-2DC3-410E-A525-E7E7AD97807C}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {EBE269BD-2DC3-410E-A525-E7E7AD97807C}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {F436E0F8-833A-49D8-BBCF-2015DA42DC68} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Dgn.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28307.902 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Dgn", "Bimangle.ForgeEngine.Dgn\Bimangle.ForgeEngine.Dgn.csproj", "{868C736F-038B-4514-A54B-407E84F20DF7}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {868C736F-038B-4514-A54B-407E84F20DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {868C736F-038B-4514-A54B-407E84F20DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {868C736F-038B-4514-A54B-407E84F20DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {868C736F-038B-4514-A54B-407E84F20DF7}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {28D8D20B-1110-43D3-9E0E-70238E8D1E73} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Dwg.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27703.2035 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Dwg", "Bimangle.ForgeEngine.Dwg\Bimangle.ForgeEngine.Dwg.csproj", "{C67DC1D3-5DC1-4D42-9A44-26472D3D2272}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {C67DC1D3-5DC1-4D42-9A44-26472D3D2272}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {C67DC1D3-5DC1-4D42-9A44-26472D3D2272}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {C67DC1D3-5DC1-4D42-9A44-26472D3D2272}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {C67DC1D3-5DC1-4D42-9A44-26472D3D2272}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {6BDEA4A9-E86A-4BD0-825A-66A045895445} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Navisworks2026.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 17 3 | VisualStudioVersion = 17.9.34728.123 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NW", "NW", "{EA2A53D5-A9D6-424A-9A8C-DF1519DC31B9}" 6 | EndProject 7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 8 | EndProject 9 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Nw_R2026", "Bimangle.ForgeEngine.Navisworks\Bimangle.ForgeEngine.Nw_R2026.csproj", "{B1A1B2B0-7594-4C27-8115-C18E200EFAA1}" 10 | EndProject 11 | Global 12 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 13 | Debug|Any CPU = Debug|Any CPU 14 | Release|Any CPU = Release|Any CPU 15 | EndGlobalSection 16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 17 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 18 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 19 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 21 | {B1A1B2B0-7594-4C27-8115-C18E200EFAA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 22 | {B1A1B2B0-7594-4C27-8115-C18E200EFAA1}.Debug|Any CPU.Build.0 = Debug|Any CPU 23 | {B1A1B2B0-7594-4C27-8115-C18E200EFAA1}.Release|Any CPU.ActiveCfg = Release|Any CPU 24 | {B1A1B2B0-7594-4C27-8115-C18E200EFAA1}.Release|Any CPU.Build.0 = Release|Any CPU 25 | EndGlobalSection 26 | GlobalSection(SolutionProperties) = preSolution 27 | HideSolutionNode = FALSE 28 | EndGlobalSection 29 | GlobalSection(NestedProjects) = preSolution 30 | {B1A1B2B0-7594-4C27-8115-C18E200EFAA1} = {EA2A53D5-A9D6-424A-9A8C-DF1519DC31B9} 31 | EndGlobalSection 32 | GlobalSection(ExtensibilityGlobals) = postSolution 33 | SolutionGuid = {661FB9C3-F8C1-401F-8B2C-0789A9EC6570} 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2014.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2014", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2014.csproj", "{9525695A-6022-4F52-8F4A-A37F7F8C681A}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {9525695A-6022-4F52-8F4A-A37F7F8C681A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {9525695A-6022-4F52-8F4A-A37F7F8C681A}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {9525695A-6022-4F52-8F4A-A37F7F8C681A}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {9525695A-6022-4F52-8F4A-A37F7F8C681A}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {33636576-BAA8-4AF0-B22C-A115932A1720} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2015.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2015", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2015.csproj", "{F8D812C1-E3A3-4773-9DEA-BAB36FF9DABA}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {F8D812C1-E3A3-4773-9DEA-BAB36FF9DABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {F8D812C1-E3A3-4773-9DEA-BAB36FF9DABA}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {F8D812C1-E3A3-4773-9DEA-BAB36FF9DABA}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {F8D812C1-E3A3-4773-9DEA-BAB36FF9DABA}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {F60B7457-FCDA-48D2-8A31-213C4E07B2FD} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2016.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2016", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2016.csproj", "{5EA93FEE-CFB8-4CDB-8456-6821CD874DA1}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {5EA93FEE-CFB8-4CDB-8456-6821CD874DA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {5EA93FEE-CFB8-4CDB-8456-6821CD874DA1}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {5EA93FEE-CFB8-4CDB-8456-6821CD874DA1}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {5EA93FEE-CFB8-4CDB-8456-6821CD874DA1}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {961E9CE8-F31B-4760-9B12-E10D71A78F32} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2017.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2017", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2017.csproj", "{020A9CC2-CA61-4637-93BF-2087A1A9C90A}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {020A9CC2-CA61-4637-93BF-2087A1A9C90A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {020A9CC2-CA61-4637-93BF-2087A1A9C90A}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {020A9CC2-CA61-4637-93BF-2087A1A9C90A}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {020A9CC2-CA61-4637-93BF-2087A1A9C90A}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {9534CB74-9DAC-4079-AAD4-655476CD66AE} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2018.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2018", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2018.csproj", "{63A8F657-00D3-42B1-A5A9-CA1504945037}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {63A8F657-00D3-42B1-A5A9-CA1504945037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {63A8F657-00D3-42B1-A5A9-CA1504945037}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {63A8F657-00D3-42B1-A5A9-CA1504945037}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {63A8F657-00D3-42B1-A5A9-CA1504945037}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {0E49FED7-8F21-4DC8-AC6C-F4DAA1E48B7D} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2019.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2019", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2019.csproj", "{6D32E0A6-B2A2-4149-B54C-16A7047878B2}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {6D32E0A6-B2A2-4149-B54C-16A7047878B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {6D32E0A6-B2A2-4149-B54C-16A7047878B2}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {6D32E0A6-B2A2-4149-B54C-16A7047878B2}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {6D32E0A6-B2A2-4149-B54C-16A7047878B2}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {8110364C-B857-4EF1-B5FD-90781E400467} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2020.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2020", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2020.csproj", "{7EC57A2A-0BB4-4C25-99D2-8D7AB07BA0F7}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {7EC57A2A-0BB4-4C25-99D2-8D7AB07BA0F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {7EC57A2A-0BB4-4C25-99D2-8D7AB07BA0F7}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {7EC57A2A-0BB4-4C25-99D2-8D7AB07BA0F7}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {7EC57A2A-0BB4-4C25-99D2-8D7AB07BA0F7}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {924E58CE-DE23-42C3-B915-E861A93D26A1} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2021.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2021", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2021.csproj", "{1A5D5798-1052-493C-9C25-971F662611F7}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {1A5D5798-1052-493C-9C25-971F662611F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {1A5D5798-1052-493C-9C25-971F662611F7}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {1A5D5798-1052-493C-9C25-971F662611F7}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {1A5D5798-1052-493C-9C25-971F662611F7}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {6DAFC3D7-6FFA-41D4-8D84-337890EF2150} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2022.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2022", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2022.csproj", "{EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {78D4EB77-C24D-4170-A317-4355FC18B371} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2023.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2023", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2023.csproj", "{EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {EE3FBFEF-A851-4AE3-86C7-4892EB3A5603}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {78D4EB77-C24D-4170-A317-4355FC18B371} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2024.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26430.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2024", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2024.csproj", "{B85710EA-CAC0-414C-8DE2-20EE44A738E0}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {B85710EA-CAC0-414C-8DE2-20EE44A738E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {B85710EA-CAC0-414C-8DE2-20EE44A738E0}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {B85710EA-CAC0-414C-8DE2-20EE44A738E0}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {B85710EA-CAC0-414C-8DE2-20EE44A738E0}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {78D4EB77-C24D-4170-A317-4355FC18B371} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2025_VS2022.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 17 3 | VisualStudioVersion = 17.9.34728.123 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 6 | EndProject 7 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bimangle.ForgeEngine.Revit_R2025", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2025.csproj", "{93A082E0-4366-4D03-8958-7C2709A50A64}" 8 | EndProject 9 | Global 10 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 11 | Debug|Any CPU = Debug|Any CPU 12 | Release|Any CPU = Release|Any CPU 13 | EndGlobalSection 14 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 15 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 16 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 17 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 18 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 19 | {93A082E0-4366-4D03-8958-7C2709A50A64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 20 | {93A082E0-4366-4D03-8958-7C2709A50A64}.Debug|Any CPU.Build.0 = Debug|Any CPU 21 | {93A082E0-4366-4D03-8958-7C2709A50A64}.Release|Any CPU.ActiveCfg = Release|Any CPU 22 | {93A082E0-4366-4D03-8958-7C2709A50A64}.Release|Any CPU.Build.0 = Release|Any CPU 23 | EndGlobalSection 24 | GlobalSection(SolutionProperties) = preSolution 25 | HideSolutionNode = FALSE 26 | EndGlobalSection 27 | GlobalSection(ExtensibilityGlobals) = postSolution 28 | SolutionGuid = {661FB9C3-F8C1-401F-8B2C-0789A9EC6570} 29 | EndGlobalSection 30 | EndGlobal 31 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Revit2026_VS2022.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 17 3 | VisualStudioVersion = 17.9.34728.123 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RVT", "RVT", "{B39EF3C3-77DA-4FEE-B880-4B84FA2173A0}" 6 | EndProject 7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 8 | EndProject 9 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Revit_R2026", "Bimangle.ForgeEngine.Revit\Bimangle.ForgeEngine.Revit_R2026.csproj", "{4EFE0171-33A2-BB71-7C0B-8B99BFEB4A3B}" 10 | EndProject 11 | Global 12 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 13 | Debug|Any CPU = Debug|Any CPU 14 | Release|Any CPU = Release|Any CPU 15 | EndGlobalSection 16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 17 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 18 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 19 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 21 | {4EFE0171-33A2-BB71-7C0B-8B99BFEB4A3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 22 | {4EFE0171-33A2-BB71-7C0B-8B99BFEB4A3B}.Debug|Any CPU.Build.0 = Debug|Any CPU 23 | {4EFE0171-33A2-BB71-7C0B-8B99BFEB4A3B}.Release|Any CPU.ActiveCfg = Release|Any CPU 24 | {4EFE0171-33A2-BB71-7C0B-8B99BFEB4A3B}.Release|Any CPU.Build.0 = Release|Any CPU 25 | EndGlobalSection 26 | GlobalSection(SolutionProperties) = preSolution 27 | HideSolutionNode = FALSE 28 | EndGlobalSection 29 | GlobalSection(NestedProjects) = preSolution 30 | {4EFE0171-33A2-BB71-7C0B-8B99BFEB4A3B} = {B39EF3C3-77DA-4FEE-B880-4B84FA2173A0} 31 | EndGlobalSection 32 | GlobalSection(ExtensibilityGlobals) = postSolution 33 | SolutionGuid = {661FB9C3-F8C1-401F-8B2C-0789A9EC6570} 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /ForgeEngine.Samples.Skp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28307.1169 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Skp", "Bimangle.ForgeEngine.Skp\Bimangle.ForgeEngine.Skp.csproj", "{66DCAFC7-1F24-4FB5-8F25-310C1ECBFF17}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bimangle.ForgeEngine.Georeferncing", "Bimangle.ForgeEngine.Georeferncing\Bimangle.ForgeEngine.Georeferncing.csproj", "{3C32B366-38A8-4943-95B2-09D6427A1E66}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Release|Any CPU = Release|Any CPU 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {66DCAFC7-1F24-4FB5-8F25-310C1ECBFF17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {66DCAFC7-1F24-4FB5-8F25-310C1ECBFF17}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {66DCAFC7-1F24-4FB5-8F25-310C1ECBFF17}.Release|Any CPU.ActiveCfg = Release|Any CPU 19 | {66DCAFC7-1F24-4FB5-8F25-310C1ECBFF17}.Release|Any CPU.Build.0 = Release|Any CPU 20 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 21 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Debug|Any CPU.Build.0 = Debug|Any CPU 22 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.ActiveCfg = Release|Any CPU 23 | {3C32B366-38A8-4943-95B2-09D6427A1E66}.Release|Any CPU.Build.0 = Release|Any CPU 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {01E7B77F-68DB-4C72-A5BC-55D2BAE090D7} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## What is BimAngle Engine SDK? 2 | 3 | BimAngle Engine can export your model to other formats, such as **Autodesk Forge Viewer SVF/F2D**, **glTF/glb**, **Cesium 3D Tiles**, etc. No need to rely on other online services, can be run offline. 4 | 5 | BimAngle Engine has six versions so far, namely **RVT**, **NW** ,**DWG**, **DGN**, **SKP** and **3DXML**. 6 | 7 | #### BimAngle Engine RVT 8 | The runtime environment is **Autodesk Revit** addin, support Autodesk Revit 2014-2025. 9 | 10 | #### BimAngle Engine NW 11 | The runtime environment is **Autodesk Navisworks** addin, support Autodesk Navisworks Manager 2014-2025. 12 | 13 | #### BimAngle Engine DWG 14 | For *.dwg(AutoCAD drawing), no other software dependencies are required. 15 | 16 | #### BimAngle Engine DGN 17 | The runtime environment is **Bentley MicroStation CE** addin. 18 | 19 | #### BimAngle Engine SKP 20 | For *.skp(SketchUp model), no other software dependencies are required. 21 | 22 | #### BimAngle Engine 3DXML 23 | For *.3dxml, no other software dependencies are required. 24 | 25 | ## Quick start 26 | 27 | * Clone or download this repository 28 | * Depending on the version you choose, use **Visual Studio 2022** to open the corresponding solution file(*.sln) 29 | * Copy all nuget scripts from **NugetCommands.txt**, paste to VS2022 **(Menu)Tools** -> **NuGet Package Manager** -> **Package Manager Console**, and run these nuget scripts, this step will ensure the "BimAngle Engine SDK" available 30 | * Rebuild the solution 31 | * for BimAngle Engine **RVT**, run Revit and load model, you can find export button in toolbar. 32 | * for BimAngle Engine **NW**, run Navisworks and load model, you can find export button in toolbar. 33 | * for BimAngle Engine **DWG**, just run it 34 | * for BimAngle Engine **DGN**, run MicroStation CE and load model, you can find export button in toolbar. 35 | * for BimAngle Engine **SKP**, just run it 36 | * for BimAngle Engine **3DXML**, just run it 37 | 38 | ## How to purchase licenses? 39 | Please contact liuyongsheng@msn.com 40 | 41 | 42 | --------------------------------------------------------------------------------