Compare commits

..

101 Commits

Author SHA1 Message Date
Ralph Wessel df1ef686f2 Merge branch 'feature/CNX_783_Create_receive_bridge' into develop
MSBuild / build (push) Has been cancelled
MSBuild / deploy-installers (push) Has been cancelled
2024-11-21 16:35:29 +00:00
Ralph Wessel 4ff7d68516 ElementHighlighter ensures layers are visible (on request) before selecting target elements
Updates to allow attribute changes to be written
Workaround to force VS to recognise template specialisations
2024-11-20 21:49:47 +00:00
Ralph Wessel d21f3da414 Prep for receive:
- Database transactions added for write access to model
- Attribute database write added (for layers, materials etc)
User prompted to show layers when model card selection is not visible
2024-11-20 09:15:57 +00:00
Ralph Wessel 18ca0318a7 ReceiveBridge and Receive method classes added (no receive implementation yet) 2024-11-14 21:14:44 +00:00
Ralph Wessel e9dff1a12d Zoom and zoom-to-selection reversed 2024-11-14 16:20:24 +00:00
Ralph Wessel 67cbcba357 Bridge methods that set the current selection also zoom to the selection 2024-11-14 15:50:36 +00:00
Ralph Wessel 2784e6c38d Connected structure and treads to stair class
Removed hack for stair 3D body
2024-11-14 13:24:58 +00:00
Ralph Wessel 90e133b03e Updated VS projects 2024-11-14 12:51:16 +00:00
Ralph Wessel 861d6bf7b2 Stair elements broken into components (CNX-781) 2024-11-14 12:43:31 +00:00
Ralph Wessel 482f7a08a6 AC28 compatibility (VS) 2024-11-13 18:49:50 +00:00
Ralph Wessel 7fb898cc47 AC28 compatibility (Xcode) 2024-11-13 17:52:24 +00:00
Ralph Wessel ac16fe2974 VS projects updated for AC26 2024-11-13 16:37:28 +00:00
Ralph Wessel d78a443395 AC26 compatibility (Xcode) 2024-11-13 15:05:22 +00:00
Ralph Wessel 30b1d4d8b9 Updated VS projects for AC25 2024-11-12 22:32:11 +00:00
Ralph Wessel e5754d51f0 Compatibility with AC25 (Xcode projects) 2024-11-12 12:41:51 +00:00
Ralph Wessel 4abf2b5719 Merge pull request #13 from specklesystems/alan/ci-start
CI in cpp connectors
2024-11-11 09:34:29 +00:00
Alan Rynne 84b234f26b use develop branch of ActiveLib
MSBuild / build (push) Has been cancelled
MSBuild / deploy-installers (push) Has been cancelled
2024-11-11 10:26:02 +01:00
Alan Rynne b71728086c Merge remote-tracking branch 'origin/develop' into alan/ci-start 2024-11-11 10:04:24 +01:00
Ralph Wessel 79570b4070 ConversionReporter incremented incorrecrt field when records skipped 2024-11-08 16:31:49 +00:00
Ralph Wessel e974b360c1 Updated VS projects
Set model card ID in projectCollection object at start of Send
2024-11-08 16:02:42 +00:00
Ralph Wessel ca52be3c48 Clickling cancel during Send emits "triggerCancelSend" event in JS UI 2024-11-08 15:13:55 +00:00
Ralph Wessel 38a5254b30 docs 2024-11-08 09:51:01 +00:00
Ralph Wessel 37e04368ed Updated VS projects 2024-11-08 09:28:33 +00:00
Ralph Wessel 7ffdc289d0 Added BaseBridge::HighlightObjects 2024-11-08 08:49:36 +00:00
Ralph Wessel 09b7ae77d5 Don't send call stack when a model card id is passed in SendError 2024-11-07 18:26:01 +00:00
Ralph Wessel 73df695458 Fixed SendError message tag and add stackTrace even when empty 2024-11-07 18:20:52 +00:00
Ralph Wessel 03dd5e5f5d Really added error message for unsupported conversions 2024-11-07 18:02:20 +00:00
Ralph Wessel d2dde18fdb Added error message for unsupported conversions 2024-11-07 17:55:09 +00:00
Ralph Wessel 8c12621772 Can't retrieve type names for unsupported elements 2024-11-07 17:54:12 +00:00
Ralph Wessel c0d42b8316 Updated VS projects 2024-11-07 17:39:37 +00:00
Ralph Wessel a38e44f2ea Conversion report log added to send argument
Added SendConversionResult
2024-11-07 17:36:39 +00:00
Ralph Wessel 5d0e8d3ae4 Updated Progress component to hold a weak reference 2024-11-07 11:55:31 +00:00
Ralph Wessel de0c645f5b Updated VS projects 2024-11-07 11:41:53 +00:00
Ralph Wessel 218a67d92d Added collection of conversion outcomes during send
Added progress display in UI (with ability to cancel)
2024-11-07 11:37:54 +00:00
Ralph Wessel d6b76cfd56 Merge pull request #19 from specklesystems/david/get_element_type
getting element type string from actual element type typeID
2024-11-07 11:34:36 +00:00
David Kekesi 45ccebc710 cleanup 2024-11-07 12:34:07 +01:00
David Kekesi b7c1f75d6a getting element type string from actual element type typeID 2024-11-07 12:31:37 +01:00
Ralph Wessel c51b67318d Merge pull request #18 from specklesystems/david/disable_grid_elements
disabled sending grid elements
2024-11-07 10:09:20 +00:00
David Kekesi a330baf5da cleanup 2024-11-07 11:08:56 +01:00
David Kekesi ea103f3849 disabled sending grid elements, disabled element change subscription on new element event 2024-11-07 11:05:16 +01:00
Ralph Wessel 664fdaf39a Merge pull request #17 from specklesystems/david/cnx-716-documentless-state-in-archicad
cnx 716 documentless state in archicad
2024-11-06 19:35:38 +00:00
David Kekesi a6f15e9a53 review comments fixed 2024-11-06 20:34:46 +01:00
David Kekesi 0e0dc7da2d switching to 3D window before send operation implemented 2024-11-06 20:24:03 +01:00
Ralph Wessel cdd4df09ca Added setDefaultTable and getDefaultTable for BIMElementDatabase 2024-11-06 19:18:37 +00:00
David Kekesi e612ed1192 attaching observer to all elements is too slow, commented out for now 2024-11-06 20:18:36 +01:00
David Kekesi ed75c2110c Merge branch 'develop' into david/cnx-716-documentless-state-in-archicad 2024-11-06 19:44:40 +01:00
David Kekesi 96759f7e9e very slow in a 3D view - attaching element observers to all elements 2024-11-06 19:43:01 +01:00
Ralph Wessel 902ddcc8f1 Updated VS projects 2024-11-06 18:11:45 +00:00
Ralph Wessel b62201cf95 BIMElementDatabase::getTables and bringToFront added
BIMElementDatabase::getElements allows a target table to be specified
2024-11-06 18:03:26 +00:00
Ralph Wessel 4e60d95ce9 DocumentID is now generated, saved and recalled using ModelCardDatabase 2024-11-06 16:25:13 +00:00
Ralph Wessel 03ad5a80af Merge branch 'develop' of https://github.com/specklesystems/speckle-cpp-connectors into develop 2024-11-06 13:06:38 +00:00
Ralph Wessel fbbf559e83 ConnectorProject should add its model card database to the add-on as a subscriber in order to receive document events, e.g. merge 2024-11-06 13:06:25 +00:00
David Kekesi da457a3438 subscribing all elements to element events 2024-11-06 11:51:29 +01:00
Ralph Wessel 767e379ff3 Updated Windows resources 2024-11-05 19:05:30 +00:00
Ralph Wessel 08c15c87a2 Updated menu icons 2024-11-05 18:50:14 +00:00
Ralph Wessel 1827323712 Added Speckle menu icon 2024-11-05 18:30:17 +00:00
Ralph Wessel 653824c498 Updated VS projects
GetDocumentInfo returns null if no project open
2024-11-05 17:01:51 +00:00
Ralph Wessel 0dc823785d Removed test code from ConnectorPalette 2024-11-05 16:37:27 +00:00
Ralph Wessel bacdbc4d61 Added ConnectorProject as a container for ModelCardDatabase
Moved ownership of ModelCardDatabase from Addon to ConnectorProject
Tools requiring access to the model card database now need to check for an open project first and then obtain the database from it (prevents attempts to access model cards when no project is open)
2024-11-05 16:34:49 +00:00
Alan Rynne 0343ac95ca fix: Stop tracking output apx 2024-11-05 15:04:08 +00:00
Alan Rynne 53589d7ea0 fix: CI triggers and delete artifacts 2024-11-05 12:27:18 +00:00
Alan Rynne 98c6ac7c9e fix: Modified CI trigger actions 2024-11-05 12:24:50 +00:00
Alan Rynne 6d0cc1f7e6 fix: File_version and correct env for powershell 2024-11-05 12:14:51 +00:00
Alan Rynne 077a74b2a3 fix: Use file_version not file-version 2024-11-05 12:01:51 +00:00
Ralph Wessel ef989ad8c7 Merge pull request #16 from specklesystems/david/cnx-720-no-objects-were-found-to-convert-please-update-your-publish
cnx 720 no objects were found to convert please update your publish
2024-11-05 11:53:44 +00:00
David Kekesi 8d8934657c get the selected element ids from the modelcard instead of the application during a send operation 2024-11-05 12:46:14 +01:00
Alan Rynne f019c88b27 fix: Export file version and use for installer trigger 2024-11-05 11:39:38 +00:00
Ralph Wessel d7a95fd37c Added BIMElementDatabase::findObjects 2024-11-05 11:25:33 +00:00
Alan Rynne 246b9099c4 fix: Use bulid output version instead of fake 2024-11-05 11:21:13 +00:00
Ralph Wessel 74d4871fbd Added ArchicadElementDBaseEngine::find
Implemented ArchicadElementDBaseEngine::getObjects
2024-11-05 11:15:53 +00:00
Alan Rynne 2f83e01f66 feat: Add gitversion config 2024-11-05 11:11:51 +00:00
Alan Rynne 9e126e3dbf run gitversion as separate ci step 2024-11-05 11:10:06 +00:00
Alan Rynne c646129244 fix: Fetch with 0 depth for gitversion 2024-11-05 11:04:41 +00:00
Alan Rynne 29e786574c feat: Adds gitversion step 2024-11-05 11:01:56 +00:00
Ralph Wessel f634f158f9 Use FastDoubleWrap for serialising Mesh vertices 2024-11-05 08:33:53 +00:00
Ralph Wessel 48988fbe53 Updated VS projects
Renamed Element/Mesh.cpp for VS compilation
2024-11-01 23:25:49 +00:00
Ralph Wessel 2c0d53c186 Added materials quants for mesh, morph, roof, shell, slab and wall 2024-11-01 22:57:47 +00:00
Ralph Wessel 51370ababc Updated VS projects 2024-11-01 22:56:39 +00:00
Ralph Wessel 8132eec03e Material quantities add, implement for column and beam segments
Added Material class
Renamed variables for finishes from "material" to "finish"
Fixed major memory leak in ModelElement::getBody
Updated element BIMLink to include a type identifier
2024-11-01 17:01:56 +00:00
Alan Rynne 86373c01c9 fix: final deploy test 2024-10-31 14:30:17 +01:00
Alan Rynne 718c673845 fix: Archicad zipping for deployment 2024-10-31 13:27:18 +01:00
Alan Rynne af8eb2c817 fix: Correct zipping path and print zip info 2024-10-31 12:04:54 +01:00
Alan Rynne 0d2d8028a2 fix: Refactor zip logic to be extendable 2024-10-31 11:20:40 +01:00
Alan Rynne bed2cf9d42 fix: Use right path to find zip files 2024-10-31 10:59:20 +01:00
Alan Rynne 5e4bcf48d6 chore: Remove unnecessary restore step 2024-10-31 10:54:39 +01:00
Alan Rynne 59549e1065 fix: Use right path for zip file 2024-10-31 10:50:26 +01:00
Alan Rynne 16bbfae097 feat: Testing Bullseye pipeline 2024-10-31 10:39:10 +01:00
Alan Rynne 326cb80f89 use main for deploy 2024-10-30 15:17:55 +01:00
Alan Rynne 787b2aa6e8 try with hash? 2024-10-30 13:22:49 +01:00
Alan Rynne 7d29bad9b5 test: try with yaml 2024-10-30 13:17:27 +01:00
Alan Rynne ba193c9dda test: Try with new name 2024-10-30 13:10:45 +01:00
Alan Rynne 794658ed9c feat: Add deploy step 2024-10-30 10:40:46 +01:00
Alan Rynne 141c503e81 upload APX to verify it's there 2024-10-29 16:15:22 +01:00
Alan Rynne 319bc2826c fix build path 2024-10-29 16:09:56 +01:00
Alan Rynne dee45512a1 fix: nested checkouts 2024-10-29 16:09:39 +01:00
Alan Rynne ce18804c95 fix: Use relative paths 2024-10-29 16:08:02 +01:00
Alan Rynne 2cfb66a872 run on the correct working directory 2024-10-29 16:05:31 +01:00
Alan Rynne ed59150363 download and extract archicad dev kit 2024-10-29 15:59:40 +01:00
Alan Rynne 5715148cdd msbuild version 2024-10-29 15:50:06 +01:00
Alan Rynne 2f534e3fd0 build only connector 2024-10-29 15:49:00 +01:00
Alan Rynne dd0cb8feb8 feat: Initial CI commit 2024-10-29 15:45:17 +01:00
232 changed files with 17793 additions and 1542 deletions
+11
View File
@@ -0,0 +1,11 @@
{
"version": 1,
"isRoot": true,
"tools": {
"gitversion.tool": {
"version": "6.0.2",
"commands": ["dotnet-gitversion"],
"rollForward": false
}
}
}
+91
View File
@@ -0,0 +1,91 @@
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: MSBuild
on:
push:
branches: ["main", "develop", "release/*", "alan/*"] # Continuous delivery on every long-lived branch
tags: ["v3.*"] # Manual delivery on every 3.x tag
permissions:
contents: read
jobs:
build:
runs-on: windows-latest
outputs:
version: ${{ steps.set-version.outputs.version }}
file_version: ${{ steps.set-info-version.outputs.file_version }}
steps:
- uses: actions/checkout@v4
with:
path: speckle-cpp-connectors
fetch-depth: 0
- uses: actions/checkout@v4
with:
repository: r-wessel/ActiveLib
path: ActiveLib
ref: develop
- name: Download zip file
run: |
New-Item -ItemType Directory -Path "Archicad 27" -Force
Invoke-WebRequest -Uri "https://github.com/GRAPHISOFT/archicad-api-devkit/releases/download/27.3001/API.Development.Kit.WIN.27.3001.zip" -OutFile "file.zip"
- name: Extract zip file to Archicad 27 folder
run: |
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::ExtractToDirectory("file.zip", "Archicad 27")
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
- name: ⚒️ Run GitVersion
working-directory: speckle-cpp-connectors
run: ./build.ps1 build-server-version
- name: Build
working-directory: speckle-cpp-connectors
run: ./build.ps1
- uses: actions/upload-artifact@v4
with:
name: output-${{ env.GitVersion_FullSemVer }}
path: speckle-cpp-connectors/output/*.zip
retention-days: 1
- id: set-version
name: Set version to output
run: echo "version=${{ env.GitVersion_FullSemVer }}" >> "$Env:GITHUB_OUTPUT"
- id: set-info-version
name: Set file version to output
run: echo "file_version=${{ env.GitVersion_AssemblySemVer}}" >> "$Env:GITHUB_OUTPUT" # version will be retrieved from tag?
deploy-installers:
runs-on: ubuntu-latest
needs: build
env:
IS_TAG_BUILD: ${{ github.ref_type == 'tag' }}
IS_RELEASE_BRANCH: true
steps:
- name: 🔫 Trigger Build Installers
uses: ALEEF02/workflow-dispatch@v3.0.0
continue-on-error: true
with:
workflow: build-cpp-installers
repo: specklesystems/connector-installers
token: ${{ secrets.CONNECTORS_GH_TOKEN }}
inputs: '{ "run_id": "${{ github.run_id }}", "version": "${{ needs.build.outputs.version }}", "file_version": "${{needs.build.outputs.file_version}}", "public_release": ${{ env.IS_TAG_BUILD }}, "store_artifacts": ${{ env.IS_RELEASE_BRANCH }} }'
ref: main
wait-for-completion: true
wait-for-completion-interval: 10s
wait-for-completion-timeout: 10m
display-workflow-run-url: true
display-workflow-run-url-interval: 10s
- uses: geekyeggo/delete-artifact@v5
with:
name: output-*
+4
View File
@@ -3,6 +3,7 @@ build/
Documents/ Documents/
ResourceObjects/ ResourceObjects/
Install/ Install/
enc_temp_folder/
.vs/ .vs/
.vscode/ .vscode/
xcuserdata/ xcuserdata/
@@ -26,3 +27,6 @@ XCBuildData/
.idea .idea
*.mui *.mui
*.aps *.aps
**/obj
**/bin
output/
+6
View File
@@ -0,0 +1,6 @@
workflow: GitFlow/v1
next-version: 3.0.0
branches:
release:
prevent-increment:
when-current-commit-tagged: true
+138
View File
@@ -13,22 +13,36 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ActiveLib17", "..\..\Active
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SpeckleLib17", "..\SpeckleLib\SpeckleLib17.vcxproj", "{942743B7-B3CB-4F91-BE46-28937F5E3FD1}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SpeckleLib17", "..\SpeckleLib\SpeckleLib17.vcxproj", "{942743B7-B3CB-4F91-BE46-28937F5E3FD1}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "..\ci-build\Build.csproj", "{702DE13A-1CCF-485D-A50D-846F645F07D3}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug16|x64 = Debug16|x64 Debug16|x64 = Debug16|x64
Debug16|x86 = Debug16|x86 Debug16|x86 = Debug16|x86
Debug17|x64 = Debug17|x64 Debug17|x64 = Debug17|x64
Debug17|x86 = Debug17|x86 Debug17|x86 = Debug17|x86
DebugAC25|x64 = DebugAC25|x64
DebugAC25|x86 = DebugAC25|x86
DebugAC26|x64 = DebugAC26|x64
DebugAC26|x86 = DebugAC26|x86
DebugAC27|x64 = DebugAC27|x64 DebugAC27|x64 = DebugAC27|x64
DebugAC27|x86 = DebugAC27|x86 DebugAC27|x86 = DebugAC27|x86
DebugAC28|x64 = DebugAC28|x64
DebugAC28|x86 = DebugAC28|x86
DebugVS2022|x64 = DebugVS2022|x64 DebugVS2022|x64 = DebugVS2022|x64
DebugVS2022|x86 = DebugVS2022|x86 DebugVS2022|x86 = DebugVS2022|x86
Release16|x64 = Release16|x64 Release16|x64 = Release16|x64
Release16|x86 = Release16|x86 Release16|x86 = Release16|x86
Release17|x64 = Release17|x64 Release17|x64 = Release17|x64
Release17|x86 = Release17|x86 Release17|x86 = Release17|x86
ReleaseAC25|x64 = ReleaseAC25|x64
ReleaseAC25|x86 = ReleaseAC25|x86
ReleaseAC26|x64 = ReleaseAC26|x64
ReleaseAC26|x86 = ReleaseAC26|x86
ReleaseAC27|x64 = ReleaseAC27|x64 ReleaseAC27|x64 = ReleaseAC27|x64
ReleaseAC27|x86 = ReleaseAC27|x86 ReleaseAC27|x86 = ReleaseAC27|x86
ReleaseAC28|x64 = ReleaseAC28|x64
ReleaseAC28|x86 = ReleaseAC28|x86
ReleaseVS2019|x64 = ReleaseVS2019|x64 ReleaseVS2019|x64 = ReleaseVS2019|x64
ReleaseVS2019|x86 = ReleaseVS2019|x86 ReleaseVS2019|x86 = ReleaseVS2019|x86
ReleaseVS2022|x64 = ReleaseVS2022|x64 ReleaseVS2022|x64 = ReleaseVS2022|x64
@@ -43,10 +57,22 @@ Global
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Debug17|x64.Build.0 = DebugVW2024|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Debug17|x64.Build.0 = DebugVW2024|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Debug17|x86.ActiveCfg = DebugAC27|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Debug17|x86.ActiveCfg = DebugAC27|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Debug17|x86.Build.0 = DebugAC27|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Debug17|x86.Build.0 = DebugAC27|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC25|x64.ActiveCfg = DebugAC25|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC25|x64.Build.0 = DebugAC25|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC25|x86.ActiveCfg = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC25|x86.Build.0 = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC26|x64.ActiveCfg = DebugAC26|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC26|x64.Build.0 = DebugAC26|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC26|x86.ActiveCfg = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC26|x86.Build.0 = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x64.ActiveCfg = DebugAC27|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x64.ActiveCfg = DebugAC27|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x64.Build.0 = DebugAC27|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x64.Build.0 = DebugAC27|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x86.ActiveCfg = DebugVW2024|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x86.ActiveCfg = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x86.Build.0 = DebugVW2024|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC27|x86.Build.0 = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC28|x64.ActiveCfg = DebugAC28|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC28|x64.Build.0 = DebugAC28|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC28|x86.ActiveCfg = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugAC28|x86.Build.0 = DebugVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugVS2022|x64.ActiveCfg = DebugVW2024|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugVS2022|x64.ActiveCfg = DebugVW2024|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugVS2022|x64.Build.0 = DebugVW2024|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugVS2022|x64.Build.0 = DebugVW2024|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugVS2022|x86.ActiveCfg = DebugRV2024|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.DebugVS2022|x86.ActiveCfg = DebugRV2024|Win32
@@ -59,10 +85,22 @@ Global
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Release17|x64.Build.0 = ReleaseVW2024|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Release17|x64.Build.0 = ReleaseVW2024|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Release17|x86.ActiveCfg = ReleaseAC27|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Release17|x86.ActiveCfg = ReleaseAC27|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Release17|x86.Build.0 = ReleaseAC27|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.Release17|x86.Build.0 = ReleaseAC27|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC25|x64.ActiveCfg = ReleaseAC25|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC25|x64.Build.0 = ReleaseAC25|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC25|x86.ActiveCfg = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC25|x86.Build.0 = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC26|x64.ActiveCfg = ReleaseAC26|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC26|x64.Build.0 = ReleaseAC26|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC26|x86.ActiveCfg = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC26|x86.Build.0 = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x64.ActiveCfg = ReleaseAC27|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x64.ActiveCfg = ReleaseAC27|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x64.Build.0 = ReleaseAC27|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x64.Build.0 = ReleaseAC27|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x86.ActiveCfg = ReleaseVW2024|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x86.ActiveCfg = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x86.Build.0 = ReleaseVW2024|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC27|x86.Build.0 = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC28|x64.ActiveCfg = ReleaseAC28|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC28|x64.Build.0 = ReleaseAC28|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC28|x86.ActiveCfg = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseAC28|x86.Build.0 = ReleaseVW2024|Win32
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseVS2019|x64.ActiveCfg = ReleaseVW2024|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseVS2019|x64.ActiveCfg = ReleaseVW2024|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseVS2019|x64.Build.0 = ReleaseVW2024|x64 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseVS2019|x64.Build.0 = ReleaseVW2024|x64
{CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseVS2019|x86.ActiveCfg = ReleaseRV2024|Win32 {CB120C04-054F-485B-BB5F-1EDE23F7FACB}.ReleaseVS2019|x86.ActiveCfg = ReleaseRV2024|Win32
@@ -79,10 +117,22 @@ Global
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Debug17|x64.Build.0 = Debug17|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Debug17|x64.Build.0 = Debug17|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Debug17|x86.ActiveCfg = Debug17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Debug17|x86.ActiveCfg = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Debug17|x86.Build.0 = Debug17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Debug17|x86.Build.0 = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC25|x64.ActiveCfg = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC25|x64.Build.0 = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC25|x86.ActiveCfg = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC25|x86.Build.0 = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC26|x64.ActiveCfg = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC26|x64.Build.0 = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC26|x86.ActiveCfg = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC26|x86.Build.0 = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x64.ActiveCfg = Debug16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x64.ActiveCfg = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x64.Build.0 = Debug16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x64.Build.0 = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x86.ActiveCfg = Debug17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x86.ActiveCfg = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x86.Build.0 = Debug17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC27|x86.Build.0 = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC28|x64.ActiveCfg = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC28|x64.Build.0 = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC28|x86.ActiveCfg = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugAC28|x86.Build.0 = Debug17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugVS2022|x64.ActiveCfg = Debug16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugVS2022|x64.ActiveCfg = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugVS2022|x64.Build.0 = Debug16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugVS2022|x64.Build.0 = Debug16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugVS2022|x86.ActiveCfg = Debug17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.DebugVS2022|x86.ActiveCfg = Debug17|Win32
@@ -95,10 +145,22 @@ Global
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Release17|x64.Build.0 = Release17|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Release17|x64.Build.0 = Release17|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Release17|x86.ActiveCfg = Release17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Release17|x86.ActiveCfg = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Release17|x86.Build.0 = Release17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.Release17|x86.Build.0 = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC25|x64.ActiveCfg = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC25|x64.Build.0 = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC25|x86.ActiveCfg = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC25|x86.Build.0 = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC26|x64.ActiveCfg = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC26|x64.Build.0 = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC26|x86.ActiveCfg = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC26|x86.Build.0 = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x64.ActiveCfg = Release16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x64.ActiveCfg = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x64.Build.0 = Release16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x64.Build.0 = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x86.ActiveCfg = Release17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x86.ActiveCfg = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x86.Build.0 = Release17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC27|x86.Build.0 = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC28|x64.ActiveCfg = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC28|x64.Build.0 = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC28|x86.ActiveCfg = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseAC28|x86.Build.0 = Release17|Win32
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseVS2019|x64.ActiveCfg = Release16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseVS2019|x64.ActiveCfg = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseVS2019|x64.Build.0 = Release16|x64 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseVS2019|x64.Build.0 = Release16|x64
{64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseVS2019|x86.ActiveCfg = Release17|Win32 {64EBDBC7-AB2D-4AE1-8E54-922B6FA6E1CC}.ReleaseVS2019|x86.ActiveCfg = Release17|Win32
@@ -115,10 +177,22 @@ Global
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Debug17|x64.Build.0 = DebugAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Debug17|x64.Build.0 = DebugAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Debug17|x86.ActiveCfg = DebugAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Debug17|x86.ActiveCfg = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Debug17|x86.Build.0 = DebugAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Debug17|x86.Build.0 = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC25|x64.ActiveCfg = DebugAC25|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC25|x64.Build.0 = DebugAC25|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC25|x86.ActiveCfg = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC25|x86.Build.0 = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC26|x64.ActiveCfg = DebugAC26|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC26|x64.Build.0 = DebugAC26|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC26|x86.ActiveCfg = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC26|x86.Build.0 = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x64.ActiveCfg = DebugAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x64.ActiveCfg = DebugAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x64.Build.0 = DebugAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x64.Build.0 = DebugAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x86.ActiveCfg = DebugAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x86.ActiveCfg = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x86.Build.0 = DebugAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC27|x86.Build.0 = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC28|x64.ActiveCfg = DebugAC28|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC28|x64.Build.0 = DebugAC28|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC28|x86.ActiveCfg = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugAC28|x86.Build.0 = DebugAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugVS2022|x64.ActiveCfg = DebugAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugVS2022|x64.ActiveCfg = DebugAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugVS2022|x64.Build.0 = DebugAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugVS2022|x64.Build.0 = DebugAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugVS2022|x86.ActiveCfg = DebugAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.DebugVS2022|x86.ActiveCfg = DebugAC27|Win32
@@ -131,10 +205,22 @@ Global
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Release17|x64.Build.0 = ReleaseAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Release17|x64.Build.0 = ReleaseAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Release17|x86.ActiveCfg = ReleaseAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Release17|x86.ActiveCfg = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Release17|x86.Build.0 = ReleaseAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.Release17|x86.Build.0 = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC25|x64.ActiveCfg = ReleaseAC25|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC25|x64.Build.0 = ReleaseAC25|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC25|x86.ActiveCfg = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC25|x86.Build.0 = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC26|x64.ActiveCfg = ReleaseAC26|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC26|x64.Build.0 = ReleaseAC26|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC26|x86.ActiveCfg = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC26|x86.Build.0 = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x64.ActiveCfg = ReleaseAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x64.ActiveCfg = ReleaseAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x64.Build.0 = ReleaseAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x64.Build.0 = ReleaseAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x86.ActiveCfg = ReleaseAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x86.ActiveCfg = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x86.Build.0 = ReleaseAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC27|x86.Build.0 = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC28|x64.ActiveCfg = ReleaseAC28|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC28|x64.Build.0 = ReleaseAC28|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC28|x86.ActiveCfg = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseAC28|x86.Build.0 = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2019|x64.ActiveCfg = ReleaseAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2019|x64.ActiveCfg = ReleaseAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2019|x64.Build.0 = ReleaseAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2019|x64.Build.0 = ReleaseAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2019|x86.ActiveCfg = ReleaseAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2019|x86.ActiveCfg = ReleaseAC27|Win32
@@ -143,6 +229,58 @@ Global
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2022|x64.Build.0 = ReleaseAC27|x64 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2022|x64.Build.0 = ReleaseAC27|x64
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2022|x86.ActiveCfg = ReleaseAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2022|x86.ActiveCfg = ReleaseAC27|Win32
{942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2022|x86.Build.0 = ReleaseAC27|Win32 {942743B7-B3CB-4F91-BE46-28937F5E3FD1}.ReleaseVS2022|x86.Build.0 = ReleaseAC27|Win32
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug16|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug16|x64.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug16|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug16|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug17|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug17|x64.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug17|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Debug17|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC25|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC25|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC25|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC26|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC26|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC26|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC27|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC27|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC27|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC28|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC28|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugAC28|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugVS2022|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugVS2022|x64.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugVS2022|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.DebugVS2022|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release16|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release16|x64.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release16|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release16|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release17|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release17|x64.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release17|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.Release17|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC25|x64.ActiveCfg = Release|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC25|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC25|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC26|x64.ActiveCfg = Release|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC26|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC26|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC27|x64.ActiveCfg = Release|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC27|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC27|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC28|x64.ActiveCfg = Release|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC28|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseAC28|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2019|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2019|x64.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2019|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2019|x86.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2022|x64.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2022|x64.Build.0 = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2022|x86.ActiveCfg = Debug|Any CPU
{702DE13A-1CCF-485D-A50D-846F645F07D3}.ReleaseVS2022|x86.Build.0 = Debug|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
+803
View File
@@ -1,6 +1,22 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="DebugAC25|Win32">
<Configuration>DebugAC25</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="DebugAC25|x64">
<Configuration>DebugAC25</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="DebugAC26|Win32">
<Configuration>DebugAC26</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="DebugAC26|x64">
<Configuration>DebugAC26</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="DebugAC27|Win32"> <ProjectConfiguration Include="DebugAC27|Win32">
<Configuration>DebugAC27</Configuration> <Configuration>DebugAC27</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -9,6 +25,14 @@
<Configuration>DebugAC27</Configuration> <Configuration>DebugAC27</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="DebugAC28|Win32">
<Configuration>DebugAC28</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="DebugAC28|x64">
<Configuration>DebugAC28</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="DebugRV2024|Win32"> <ProjectConfiguration Include="DebugRV2024|Win32">
<Configuration>DebugRV2024</Configuration> <Configuration>DebugRV2024</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -21,6 +45,22 @@
<Configuration>DebugVW2024</Configuration> <Configuration>DebugVW2024</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="ReleaseAC25|Win32">
<Configuration>ReleaseAC25</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseAC25|x64">
<Configuration>ReleaseAC25</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseAC26|Win32">
<Configuration>ReleaseAC26</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseAC26|x64">
<Configuration>ReleaseAC26</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseAC27|Win32"> <ProjectConfiguration Include="ReleaseAC27|Win32">
<Configuration>ReleaseAC27</Configuration> <Configuration>ReleaseAC27</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -29,6 +69,14 @@
<Configuration>ReleaseAC27</Configuration> <Configuration>ReleaseAC27</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="ReleaseAC28|Win32">
<Configuration>ReleaseAC28</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseAC28|x64">
<Configuration>ReleaseAC28</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="ReleaseRV2024|Win32"> <ProjectConfiguration Include="ReleaseRV2024|Win32">
<Configuration>ReleaseRV2024</Configuration> <Configuration>ReleaseRV2024</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
@@ -64,12 +112,24 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseRV2024|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseRV2024|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugRV2024|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugRV2024|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC27|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC27|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC28|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC26|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC25|x64'">true</ExcludedFromBuild>
</None> </None>
<None Include="RFIX.win\Connector.rc2"> <None Include="RFIX.win\Connector.rc2">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC27|x64'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC27|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC28|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC26|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='DebugAC25|x64'">true</ExcludedFromBuild>
</None> </None>
<None Include="RINT\Connector.grc" /> <None Include="RINT\Connector.grc" />
<None Include="RINT\ConnectorMenu.grc" /> <None Include="RINT\ConnectorMenu.grc" />
@@ -94,6 +154,7 @@
<ItemGroup> <ItemGroup>
<ClCompile Include="Connector\Connector.cpp" /> <ClCompile Include="Connector\Connector.cpp" />
<ClCompile Include="Connector\Database\ModelCardDatabase.cpp" /> <ClCompile Include="Connector\Database\ModelCardDatabase.cpp" />
<ClCompile Include="Connector\Environment\ConnectorProject.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Account\AccountBridge.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Account\AccountBridge.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Account\GetAccounts.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Account\GetAccounts.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\AddModel.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\AddModel.cpp" />
@@ -105,6 +166,7 @@
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationName.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationName.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\HighlightModel.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\HighlightModel.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\HighlightObjects.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.cpp" />
@@ -113,6 +175,8 @@
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetConfig.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetConfig.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\UpdateConfig.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Config\UpdateConfig.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Receive\Receive.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Receive\ReceiveBridge.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Selection\Arg\SelectionInfo.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Selection\Arg\SelectionInfo.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Selection\GetSelection.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Selection\GetSelection.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Selection\SelectionBridge.cpp" /> <ClCompile Include="Connector\Interface\Browser\Bridge\Selection\SelectionBridge.cpp" />
@@ -144,12 +208,14 @@
<ClCompile Include="Connector\Record\Model\ModelCard.cpp" /> <ClCompile Include="Connector\Record\Model\ModelCard.cpp" />
<ClCompile Include="Connector\Record\Model\ReceiverModelCard.cpp" /> <ClCompile Include="Connector\Record\Model\ReceiverModelCard.cpp" />
<ClCompile Include="Connector\Record\Model\SenderModelCard.cpp" /> <ClCompile Include="Connector\Record\Model\SenderModelCard.cpp" />
<ClCompile Include="Connector\Tool\ElementHighlighter.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Connector\Connector.h" /> <ClInclude Include="Connector\Connector.h" />
<ClInclude Include="Connector\ConnectorResource.h" /> <ClInclude Include="Connector\ConnectorResource.h" />
<ClInclude Include="Connector\Database\Identity\RecordID.h" /> <ClInclude Include="Connector\Database\Identity\RecordID.h" />
<ClInclude Include="Connector\Database\ModelCardDatabase.h" /> <ClInclude Include="Connector\Database\ModelCardDatabase.h" />
<ClInclude Include="Connector\Environment\ConnectorProject.h" />
<ClInclude Include="Connector\Event\ConnectorEventID.h" /> <ClInclude Include="Connector\Event\ConnectorEventID.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Account\AccountBridge.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Account\AccountBridge.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Account\GetAccounts.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Account\GetAccounts.h" />
@@ -162,6 +228,7 @@
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationName.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationName.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\HighlightModel.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Base\HighlightModel.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\HighlightObjects.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.h" />
@@ -170,10 +237,13 @@
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetConfig.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetConfig.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\UpdateConfig.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Config\UpdateConfig.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Receive\Receive.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Receive\ReceiveBridge.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Selection\Arg\SelectionInfo.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Selection\Arg\SelectionInfo.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Selection\GetSelection.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Selection\GetSelection.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Selection\SelectionBridge.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Selection\SelectionBridge.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\ConversionResult.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\ConversionResult.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendConversionResult.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendError.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendError.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendObject.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendObject.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendViaBrowserArgs.h" /> <ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendViaBrowserArgs.h" />
@@ -203,6 +273,7 @@
<ClInclude Include="Connector\Record\Model\ModelCard.h" /> <ClInclude Include="Connector\Record\Model\ModelCard.h" />
<ClInclude Include="Connector\Record\Model\ReceiverModelCard.h" /> <ClInclude Include="Connector\Record\Model\ReceiverModelCard.h" />
<ClInclude Include="Connector\Record\Model\SenderModelCard.h" /> <ClInclude Include="Connector\Record\Model\SenderModelCard.h" />
<ClInclude Include="Connector\Tool\ElementHighlighter.h" />
<ClInclude Include="Connector\Version.h" /> <ClInclude Include="Connector\Version.h" />
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
@@ -232,6 +303,24 @@
<PlatformToolset>v143</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
@@ -253,6 +342,27 @@
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
@@ -278,6 +388,30 @@
<VCToolsVersion> <VCToolsVersion>
</VCToolsVersion> </VCToolsVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
<VCToolsVersion />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
<VCToolsVersion />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
<VCToolsVersion />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
@@ -306,6 +440,33 @@
<VCToolsVersion> <VCToolsVersion>
</VCToolsVersion> </VCToolsVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
<VCToolsVersion />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
<VCToolsVersion />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<PreferredToolArchitecture>x64</PreferredToolArchitecture>
<VCToolsVersion />
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
</ImportGroup> </ImportGroup>
@@ -320,6 +481,15 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC27|Win32'" Label="PropertySheets"> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC27|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
@@ -329,6 +499,15 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|Win32'" Label="PropertySheets"> <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\VW2024.props" /> <Import Project="..\SpeckleLib\Make.win\VW2024.props" />
@@ -344,6 +523,21 @@
<Import Project="..\SpeckleLib\Make.win\AC27.props" /> <Import Project="..\SpeckleLib\Make.win\AC27.props" />
<Import Project="Make.win\ConnectorAC27.props" /> <Import Project="Make.win\ConnectorAC27.props" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\AC28.props" />
<Import Project="Make.win\ConnectorAC28.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\AC26.props" />
<Import Project="Make.win\ConnectorAC26.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\AC25.props" />
<Import Project="Make.win\ConnectorAC25.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'"> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\VW2024.props" /> <Import Project="..\SpeckleLib\Make.win\VW2024.props" />
@@ -359,6 +553,21 @@
<Import Project="..\SpeckleLib\Make.win\AC27.props" /> <Import Project="..\SpeckleLib\Make.win\AC27.props" />
<Import Project="Make.win\ConnectorAC27.props" /> <Import Project="Make.win\ConnectorAC27.props" />
</ImportGroup> </ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\AC28.props" />
<Import Project="Make.win\ConnectorAC28.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\AC26.props" />
<Import Project="Make.win\ConnectorAC26.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\SpeckleLib\Make.win\AC25.props" />
<Import Project="Make.win\ConnectorAC25.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /> <PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|Win32'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
@@ -369,6 +578,15 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC27|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC27|Win32'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
</PropertyGroup> </PropertyGroup>
@@ -378,6 +596,15 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC27|Win32'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<SourcePath>$(SourcePath)</SourcePath> <SourcePath>$(SourcePath)</SourcePath>
@@ -399,6 +626,27 @@
<OutDir>$(Platform)\$(Configuration)\</OutDir> <OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName> <TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|x64'">
<LinkIncremental>true</LinkIncremental>
<SourcePath>$(SourcePath)</SourcePath>
<TargetExt>.apx</TargetExt>
<OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|x64'">
<LinkIncremental>true</LinkIncremental>
<SourcePath>$(SourcePath)</SourcePath>
<TargetExt>.apx</TargetExt>
<OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|x64'">
<LinkIncremental>true</LinkIncremental>
<SourcePath>$(SourcePath)</SourcePath>
<TargetExt>.apx</TargetExt>
<OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'">
<LinkIncremental>false</LinkIncremental> <LinkIncremental>false</LinkIncremental>
<TargetExt>.vlb</TargetExt> <TargetExt>.vlb</TargetExt>
@@ -417,6 +665,24 @@
<OutDir>$(Platform)\$(Configuration)\</OutDir> <OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName> <TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.apx</TargetExt>
<OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.apx</TargetExt>
<OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|x64'">
<LinkIncremental>false</LinkIncremental>
<TargetExt>.apx</TargetExt>
<OutDir>$(Platform)\$(Configuration)\</OutDir>
<TargetName>$(BASE_NAME)</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|Win32'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
@@ -462,6 +728,51 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|Win32'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
@@ -519,6 +830,63 @@
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugVW2024|x64'">
<ClCompile> <ClCompile>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
@@ -680,6 +1048,219 @@ CALL "$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
<PostBuildEvent> <PostBuildEvent>
<Command>REM Archicad installbuild script <Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir)
SET BIMVERSION=$(BIM_VERSION)
ECHO ON
ECHO "Starting Install"
set CONFIGURATION=$(Configuration)
set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Creating VWR File</Message>
</PostBuildEvent>
<PreBuildEvent>
<Command>set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\buildResAC.bat"</Command>
</PreBuildEvent>
<ResourceCompile>
<AdditionalIncludeDirectories>$(HEADER_PATH_5)\Inc;$(HEADER_PATH_5)\Modules\DGLib;$(RES_OUTPUT);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>
</SDLCheck>
<PreprocessorDefinitions>TESTING_MODE;DEBUG;ARCHICAD;"__ACENV_CALL= ";WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_STLP_DONT_FORCE_MSVC_LIB_NAME;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>./;$(HEADER_PATH_1)/;$(HEADER_PATH_2)/;$(HEADER_PATH_3)/;$(HEADER_PATH_3)/$(BIM_PLATFORM)/;$(HEADER_PATH_4)/;$(HEADER_PATH_5)/;$(HEADER_PATH_5)/Inc;$(HEADER_PATH_5)/Modules/AnalyticalModelAPI;$(HEADER_PATH_5)/Modules/ArchicadAPI;$(HEADER_PATH_5)/Modules/Brep;$(HEADER_PATH_5)/Modules/BuiltInLibrary;$(HEADER_PATH_5)/Modules/CADInfrastructureBase;$(HEADER_PATH_5)/Modules/CommunicationClient;$(HEADER_PATH_5)/Modules/CommunicationCommon;$(HEADER_PATH_5)/Modules/DGGraphix;$(HEADER_PATH_5)/Modules/DGLib;$(HEADER_PATH_5)/Modules/DesignVariantAPI;$(HEADER_PATH_5)/Modules/GDL;$(HEADER_PATH_5)/Modules/GSMSections;$(HEADER_PATH_5)/Modules/GSModelDevLib;$(HEADER_PATH_5)/Modules/GSModeler;$(HEADER_PATH_5)/Modules/GSModeler2D;$(HEADER_PATH_5)/Modules/GSRoot;$(HEADER_PATH_5)/Modules/GSUtils;$(HEADER_PATH_5)/Modules/GSXML;$(HEADER_PATH_5)/Modules/GSXMLUtils;$(HEADER_PATH_5)/Modules/GX;$(HEADER_PATH_5)/Modules/GXImage;$(HEADER_PATH_5)/Modules/GXImageBase;$(HEADER_PATH_5)/Modules/GXMedia;$(HEADER_PATH_5)/Modules/Geometry;$(HEADER_PATH_5)/Modules/Graphix;$(HEADER_PATH_5)/Modules/HTTP;$(HEADER_PATH_5)/Modules/InputOutput;$(HEADER_PATH_5)/Modules/JSON;$(HEADER_PATH_5)/Modules/JSONConversion;$(HEADER_PATH_5)/Modules/JavascriptEngine;$(HEADER_PATH_5)/Modules/LibXL;$(HEADER_PATH_5)/Modules/MEPAPI;$(HEADER_PATH_5)/Modules/MPIInterfaceDevLib;$(HEADER_PATH_5)/Modules/MPIInterfaceImpDevLib;$(HEADER_PATH_5)/Modules/Model3D;$(HEADER_PATH_5)/Modules/Model3DViewerControl;$(HEADER_PATH_5)/Modules/Network;$(HEADER_PATH_5)/Modules/Pattern;$(HEADER_PATH_5)/Modules/PointCloud;$(HEADER_PATH_5)/Modules/PointCloudManager;$(HEADER_PATH_5)/Modules/QGDrawing;$(HEADER_PATH_5)/Modules/RS;$(HEADER_PATH_5)/Modules/RapidJSON;$(HEADER_PATH_5)/Modules/SecureCommunication;$(HEADER_PATH_5)/Modules/TWClientLib;$(HEADER_PATH_5)/Modules/TWRoot;$(HEADER_PATH_5)/Modules/TextEngine;$(HEADER_PATH_5)/Modules/TransparentWindowLib;$(HEADER_PATH_5)/Modules/UCLib;$(HEADER_PATH_5)/Modules/UDLib;$(HEADER_PATH_5)/Modules/UserInterfaceAPI;$(HEADER_PATH_5)/Modules/VBElemDialogs;$(HEADER_PATH_5)/Modules/VBUtils;$(HEADER_PATH_5)/Modules/VectorImage $(inherited)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<StringPooling>true</StringPooling>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
<ForcedIncludeFiles>
</ForcedIncludeFiles>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FunctionLevelLinking>
</FunctionLevelLinking>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\ACAP_STATD.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JavascriptEngine\Win\JavascriptEngineImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
<AdditionalLibraryDirectories>$(HEADER_PATH_5)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<EntryPointSymbol>DllMainEntry</EntryPointSymbol>
<AdditionalOptions>/export:GetExportedFuncAddrs,%401 /export:SetImportedFuncAddrs,%402 %(AdditionalOptions)</AdditionalOptions>
</Link>
<Lib>
<AdditionalDependencies>../zlib/x64/ZlibStatRelease/zlibstat.lib</AdditionalDependencies>
</Lib>
<PostBuildEvent>
<Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir)
SET BIMVERSION=$(BIM_VERSION)
ECHO ON
ECHO "Starting Install"
set CONFIGURATION=$(Configuration)
set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Creating VWR File</Message>
</PostBuildEvent>
<PreBuildEvent>
<Command>set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\buildResAC.bat"</Command>
</PreBuildEvent>
<ResourceCompile>
<AdditionalIncludeDirectories>$(HEADER_PATH_5)\Inc;$(HEADER_PATH_5)\Modules\DGLib;$(RES_OUTPUT);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>
</SDLCheck>
<PreprocessorDefinitions>TESTING_MODE;DEBUG;ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_STLP_DONT_FORCE_MSVC_LIB_NAME;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>./;$(HEADER_PATH_1)/;$(HEADER_PATH_2)/;$(HEADER_PATH_3)/;$(HEADER_PATH_3)/$(BIM_PLATFORM)/;$(HEADER_PATH_4)/;$(HEADER_PATH_5)/;$(HEADER_PATH_5)/Inc;$(HEADER_PATH_5)/Modules/AnalyticalModelAPI;$(HEADER_PATH_5)/Modules/ArchicadAPI;$(HEADER_PATH_5)/Modules/Brep;$(HEADER_PATH_5)/Modules/BuiltInLibrary;$(HEADER_PATH_5)/Modules/CADInfrastructureBase;$(HEADER_PATH_5)/Modules/CommunicationClient;$(HEADER_PATH_5)/Modules/CommunicationCommon;$(HEADER_PATH_5)/Modules/DGGraphix;$(HEADER_PATH_5)/Modules/DGLib;$(HEADER_PATH_5)/Modules/DesignVariantAPI;$(HEADER_PATH_5)/Modules/GDL;$(HEADER_PATH_5)/Modules/GSMSections;$(HEADER_PATH_5)/Modules/GSModelDevLib;$(HEADER_PATH_5)/Modules/GSModeler;$(HEADER_PATH_5)/Modules/GSModeler2D;$(HEADER_PATH_5)/Modules/GSRoot;$(HEADER_PATH_5)/Modules/GSUtils;$(HEADER_PATH_5)/Modules/GSXML;$(HEADER_PATH_5)/Modules/GSXMLUtils;$(HEADER_PATH_5)/Modules/GX;$(HEADER_PATH_5)/Modules/GXImage;$(HEADER_PATH_5)/Modules/GXImageBase;$(HEADER_PATH_5)/Modules/GXMedia;$(HEADER_PATH_5)/Modules/Geometry;$(HEADER_PATH_5)/Modules/Graphix;$(HEADER_PATH_5)/Modules/HTTP;$(HEADER_PATH_5)/Modules/InputOutput;$(HEADER_PATH_5)/Modules/JSON;$(HEADER_PATH_5)/Modules/JSONConversion;$(HEADER_PATH_5)/Modules/JavascriptEngine;$(HEADER_PATH_5)/Modules/LibXL;$(HEADER_PATH_5)/Modules/MEPAPI;$(HEADER_PATH_5)/Modules/MPIInterfaceDevLib;$(HEADER_PATH_5)/Modules/MPIInterfaceImpDevLib;$(HEADER_PATH_5)/Modules/Model3D;$(HEADER_PATH_5)/Modules/Model3DViewerControl;$(HEADER_PATH_5)/Modules/Network;$(HEADER_PATH_5)/Modules/Pattern;$(HEADER_PATH_5)/Modules/PointCloud;$(HEADER_PATH_5)/Modules/PointCloudManager;$(HEADER_PATH_5)/Modules/QGDrawing;$(HEADER_PATH_5)/Modules/RS;$(HEADER_PATH_5)/Modules/RapidJSON;$(HEADER_PATH_5)/Modules/SecureCommunication;$(HEADER_PATH_5)/Modules/TWClientLib;$(HEADER_PATH_5)/Modules/TWRoot;$(HEADER_PATH_5)/Modules/TextEngine;$(HEADER_PATH_5)/Modules/TransparentWindowLib;$(HEADER_PATH_5)/Modules/UCLib;$(HEADER_PATH_5)/Modules/UDLib;$(HEADER_PATH_5)/Modules/UserInterfaceAPI;$(HEADER_PATH_5)/Modules/VBElemDialogs;$(HEADER_PATH_5)/Modules/VBUtils;$(HEADER_PATH_5)/Modules/VectorImage $(inherited)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<StringPooling>true</StringPooling>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
<ForcedIncludeFiles>
</ForcedIncludeFiles>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FunctionLevelLinking>
</FunctionLevelLinking>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\Win\ACAP_STATD.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
<AdditionalLibraryDirectories>$(HEADER_PATH_5)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<EntryPointSymbol>DllMainEntry</EntryPointSymbol>
<AdditionalOptions>/export:GetExportedFuncAddrs,%401 /export:SetImportedFuncAddrs,%402 %(AdditionalOptions)</AdditionalOptions>
</Link>
<Lib>
<AdditionalDependencies>../zlib/x64/ZlibStatRelease/zlibstat.lib</AdditionalDependencies>
</Lib>
<PostBuildEvent>
<Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir)
SET BIMVERSION=$(BIM_VERSION)
ECHO ON
ECHO "Starting Install"
set CONFIGURATION=$(Configuration)
set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Creating VWR File</Message>
</PostBuildEvent>
<PreBuildEvent>
<Command>set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\buildResAC.bat"</Command>
</PreBuildEvent>
<ResourceCompile>
<AdditionalIncludeDirectories>$(HEADER_PATH_5)\Inc;$(HEADER_PATH_5)\Modules\DGLib;$(RES_OUTPUT);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>
</SDLCheck>
<PreprocessorDefinitions>TESTING_MODE;DEBUG;ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_STLP_DONT_FORCE_MSVC_LIB_NAME;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>./;$(HEADER_PATH_1)/;$(HEADER_PATH_2)/;$(HEADER_PATH_3)/;$(HEADER_PATH_3)/$(BIM_PLATFORM)/;$(HEADER_PATH_4)/;$(HEADER_PATH_5)/;$(HEADER_PATH_5)/Inc;$(HEADER_PATH_5)/Modules/AnalyticalModelAPI;$(HEADER_PATH_5)/Modules/ArchicadAPI;$(HEADER_PATH_5)/Modules/Brep;$(HEADER_PATH_5)/Modules/BuiltInLibrary;$(HEADER_PATH_5)/Modules/CADInfrastructureBase;$(HEADER_PATH_5)/Modules/CommunicationClient;$(HEADER_PATH_5)/Modules/CommunicationCommon;$(HEADER_PATH_5)/Modules/DGGraphix;$(HEADER_PATH_5)/Modules/DGLib;$(HEADER_PATH_5)/Modules/DesignVariantAPI;$(HEADER_PATH_5)/Modules/GDL;$(HEADER_PATH_5)/Modules/GSMSections;$(HEADER_PATH_5)/Modules/GSModelDevLib;$(HEADER_PATH_5)/Modules/GSModeler;$(HEADER_PATH_5)/Modules/GSModeler2D;$(HEADER_PATH_5)/Modules/GSRoot;$(HEADER_PATH_5)/Modules/GSUtils;$(HEADER_PATH_5)/Modules/GSXML;$(HEADER_PATH_5)/Modules/GSXMLUtils;$(HEADER_PATH_5)/Modules/GX;$(HEADER_PATH_5)/Modules/GXImage;$(HEADER_PATH_5)/Modules/GXImageBase;$(HEADER_PATH_5)/Modules/GXMedia;$(HEADER_PATH_5)/Modules/Geometry;$(HEADER_PATH_5)/Modules/Graphix;$(HEADER_PATH_5)/Modules/HTTP;$(HEADER_PATH_5)/Modules/InputOutput;$(HEADER_PATH_5)/Modules/JSON;$(HEADER_PATH_5)/Modules/JSONConversion;$(HEADER_PATH_5)/Modules/JavascriptEngine;$(HEADER_PATH_5)/Modules/LibXL;$(HEADER_PATH_5)/Modules/MEPAPI;$(HEADER_PATH_5)/Modules/MPIInterfaceDevLib;$(HEADER_PATH_5)/Modules/MPIInterfaceImpDevLib;$(HEADER_PATH_5)/Modules/Model3D;$(HEADER_PATH_5)/Modules/Model3DViewerControl;$(HEADER_PATH_5)/Modules/Network;$(HEADER_PATH_5)/Modules/Pattern;$(HEADER_PATH_5)/Modules/PointCloud;$(HEADER_PATH_5)/Modules/PointCloudManager;$(HEADER_PATH_5)/Modules/QGDrawing;$(HEADER_PATH_5)/Modules/RS;$(HEADER_PATH_5)/Modules/RapidJSON;$(HEADER_PATH_5)/Modules/SecureCommunication;$(HEADER_PATH_5)/Modules/TWClientLib;$(HEADER_PATH_5)/Modules/TWRoot;$(HEADER_PATH_5)/Modules/TextEngine;$(HEADER_PATH_5)/Modules/TransparentWindowLib;$(HEADER_PATH_5)/Modules/UCLib;$(HEADER_PATH_5)/Modules/UDLib;$(HEADER_PATH_5)/Modules/UserInterfaceAPI;$(HEADER_PATH_5)/Modules/VBElemDialogs;$(HEADER_PATH_5)/Modules/VBUtils;$(HEADER_PATH_5)/Modules/VectorImage $(inherited)</AdditionalIncludeDirectories>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<StringPooling>true</StringPooling>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
<ForcedIncludeFiles>
</ForcedIncludeFiles>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<FunctionLevelLinking>
</FunctionLevelLinking>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<FloatingPointExceptions>false</FloatingPointExceptions>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\Win\ACAP_STATD.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBAttributes\Win\VBAttributesImp.LIB;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\ObjectDatabase\Win\ObjectDatabaseImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;%(AdditionalDependencies)</AdditionalDependencies>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
<AdditionalLibraryDirectories>$(HEADER_PATH_5)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<EntryPointSymbol>DllMainEntry</EntryPointSymbol>
<AdditionalOptions>/export:GetExportedFuncAddrs,%401 /export:SetImportedFuncAddrs,%402 %(AdditionalOptions)</AdditionalOptions>
</Link>
<Lib>
<AdditionalDependencies>../zlib/x64/ZlibStatRelease/zlibstat.lib</AdditionalDependencies>
</Lib>
<PostBuildEvent>
<Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir) SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName) SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir) SET TARGETDIR=$(TargetDir)
@@ -867,6 +1448,228 @@ CALL "$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
<PostBuildEvent> <PostBuildEvent>
<Command>REM Archicad installbuild script <Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir)
SET BIMVERSION=$(BIM_VERSION)
ECHO ON
ECHO "Starting Install $(TargetName)"
set CONFIGURATION=$(Configuration)
set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Creating VWR File</Message>
</PostBuildEvent>
<PreBuildEvent>
<Command>set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\buildResAC.bat"</Command>
</PreBuildEvent>
<ResourceCompile>
<AdditionalIncludeDirectories>$(HEADER_PATH_5)\Inc;$(HEADER_PATH_5)\Modules\DGLib;$(RES_OUTPUT);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>
</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>
</SDLCheck>
<PreprocessorDefinitions>NDEBUG;ARCHICAD;"__ACENV_CALL= ";WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>./;$(HEADER_PATH_1)/;$(HEADER_PATH_2)/;$(HEADER_PATH_3)/;$(HEADER_PATH_3)/$(BIM_PLATFORM)/;$(HEADER_PATH_4)/;$(HEADER_PATH_5)/;$(HEADER_PATH_5)/Inc;$(HEADER_PATH_5)/Modules/AnalyticalModelAPI;$(HEADER_PATH_5)/Modules/ArchicadAPI;$(HEADER_PATH_5)/Modules/Brep;$(HEADER_PATH_5)/Modules/BuiltInLibrary;$(HEADER_PATH_5)/Modules/CADInfrastructureBase;$(HEADER_PATH_5)/Modules/CommunicationClient;$(HEADER_PATH_5)/Modules/CommunicationCommon;$(HEADER_PATH_5)/Modules/DGGraphix;$(HEADER_PATH_5)/Modules/DGLib;$(HEADER_PATH_5)/Modules/DesignVariantAPI;$(HEADER_PATH_5)/Modules/GDL;$(HEADER_PATH_5)/Modules/GSMSections;$(HEADER_PATH_5)/Modules/GSModelDevLib;$(HEADER_PATH_5)/Modules/GSModeler;$(HEADER_PATH_5)/Modules/GSModeler2D;$(HEADER_PATH_5)/Modules/GSRoot;$(HEADER_PATH_5)/Modules/GSUtils;$(HEADER_PATH_5)/Modules/GSXML;$(HEADER_PATH_5)/Modules/GSXMLUtils;$(HEADER_PATH_5)/Modules/GX;$(HEADER_PATH_5)/Modules/GXImage;$(HEADER_PATH_5)/Modules/GXImageBase;$(HEADER_PATH_5)/Modules/GXMedia;$(HEADER_PATH_5)/Modules/Geometry;$(HEADER_PATH_5)/Modules/Graphix;$(HEADER_PATH_5)/Modules/HTTP;$(HEADER_PATH_5)/Modules/InputOutput;$(HEADER_PATH_5)/Modules/JSON;$(HEADER_PATH_5)/Modules/JSONConversion;$(HEADER_PATH_5)/Modules/JavascriptEngine;$(HEADER_PATH_5)/Modules/LibXL;$(HEADER_PATH_5)/Modules/MEPAPI;$(HEADER_PATH_5)/Modules/MPIInterfaceDevLib;$(HEADER_PATH_5)/Modules/MPIInterfaceImpDevLib;$(HEADER_PATH_5)/Modules/Model3D;$(HEADER_PATH_5)/Modules/Model3DViewerControl;$(HEADER_PATH_5)/Modules/Network;$(HEADER_PATH_5)/Modules/Pattern;$(HEADER_PATH_5)/Modules/PointCloud;$(HEADER_PATH_5)/Modules/PointCloudManager;$(HEADER_PATH_5)/Modules/QGDrawing;$(HEADER_PATH_5)/Modules/RS;$(HEADER_PATH_5)/Modules/RapidJSON;$(HEADER_PATH_5)/Modules/SecureCommunication;$(HEADER_PATH_5)/Modules/TWClientLib;$(HEADER_PATH_5)/Modules/TWRoot;$(HEADER_PATH_5)/Modules/TextEngine;$(HEADER_PATH_5)/Modules/TransparentWindowLib;$(HEADER_PATH_5)/Modules/UCLib;$(HEADER_PATH_5)/Modules/UDLib;$(HEADER_PATH_5)/Modules/UserInterfaceAPI;$(HEADER_PATH_5)/Modules/VBElemDialogs;$(HEADER_PATH_5)/Modules/VBUtils;$(HEADER_PATH_5)/Modules/VectorImage $(inherited)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp20</LanguageStandard>
<ForcedIncludeFiles>
</ForcedIncludeFiles>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<WholeProgramOptimization>false</WholeProgramOptimization>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<StringPooling>true</StringPooling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<ForceConformanceInForLoopScope>
</ForceConformanceInForLoopScope>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\ACAP_STAT.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JavascriptEngine\Win\JavascriptEngineImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;msvcrt.lib;msvcprt.lib;IPHLPAPI.lib;Wininet.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(HEADER_PATH_5)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>msvcrtd.lib</IgnoreSpecificDefaultLibraries>
<AdditionalOptions>/export:GetExportedFuncAddrs,%401 /export:SetImportedFuncAddrs,%402 %(AdditionalOptions)</AdditionalOptions>
</Link>
<Lib>
<AdditionalDependencies>../zlib/x64/ZlibStatRelease/zlibstat.lib</AdditionalDependencies>
</Lib>
<PostBuildEvent>
<Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir)
SET BIMVERSION=$(BIM_VERSION)
ECHO ON
ECHO "Starting Install $(TargetName)"
set CONFIGURATION=$(Configuration)
set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Creating VWR File</Message>
</PostBuildEvent>
<PreBuildEvent>
<Command>set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\buildResAC.bat"</Command>
</PreBuildEvent>
<ResourceCompile>
<AdditionalIncludeDirectories>$(HEADER_PATH_5)\Inc;$(HEADER_PATH_5)\Modules\DGLib;$(RES_OUTPUT);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>
</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>
</SDLCheck>
<PreprocessorDefinitions>NDEBUG;ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>./;$(HEADER_PATH_1)/;$(HEADER_PATH_2)/;$(HEADER_PATH_3)/;$(HEADER_PATH_3)/$(BIM_PLATFORM)/;$(HEADER_PATH_4)/;$(HEADER_PATH_5)/;$(HEADER_PATH_5)/Inc;$(HEADER_PATH_5)/Modules/AnalyticalModelAPI;$(HEADER_PATH_5)/Modules/ArchicadAPI;$(HEADER_PATH_5)/Modules/Brep;$(HEADER_PATH_5)/Modules/BuiltInLibrary;$(HEADER_PATH_5)/Modules/CADInfrastructureBase;$(HEADER_PATH_5)/Modules/CommunicationClient;$(HEADER_PATH_5)/Modules/CommunicationCommon;$(HEADER_PATH_5)/Modules/DGGraphix;$(HEADER_PATH_5)/Modules/DGLib;$(HEADER_PATH_5)/Modules/DesignVariantAPI;$(HEADER_PATH_5)/Modules/GDL;$(HEADER_PATH_5)/Modules/GSMSections;$(HEADER_PATH_5)/Modules/GSModelDevLib;$(HEADER_PATH_5)/Modules/GSModeler;$(HEADER_PATH_5)/Modules/GSModeler2D;$(HEADER_PATH_5)/Modules/GSRoot;$(HEADER_PATH_5)/Modules/GSUtils;$(HEADER_PATH_5)/Modules/GSXML;$(HEADER_PATH_5)/Modules/GSXMLUtils;$(HEADER_PATH_5)/Modules/GX;$(HEADER_PATH_5)/Modules/GXImage;$(HEADER_PATH_5)/Modules/GXImageBase;$(HEADER_PATH_5)/Modules/GXMedia;$(HEADER_PATH_5)/Modules/Geometry;$(HEADER_PATH_5)/Modules/Graphix;$(HEADER_PATH_5)/Modules/HTTP;$(HEADER_PATH_5)/Modules/InputOutput;$(HEADER_PATH_5)/Modules/JSON;$(HEADER_PATH_5)/Modules/JSONConversion;$(HEADER_PATH_5)/Modules/JavascriptEngine;$(HEADER_PATH_5)/Modules/LibXL;$(HEADER_PATH_5)/Modules/MEPAPI;$(HEADER_PATH_5)/Modules/MPIInterfaceDevLib;$(HEADER_PATH_5)/Modules/MPIInterfaceImpDevLib;$(HEADER_PATH_5)/Modules/Model3D;$(HEADER_PATH_5)/Modules/Model3DViewerControl;$(HEADER_PATH_5)/Modules/Network;$(HEADER_PATH_5)/Modules/Pattern;$(HEADER_PATH_5)/Modules/PointCloud;$(HEADER_PATH_5)/Modules/PointCloudManager;$(HEADER_PATH_5)/Modules/QGDrawing;$(HEADER_PATH_5)/Modules/RS;$(HEADER_PATH_5)/Modules/RapidJSON;$(HEADER_PATH_5)/Modules/SecureCommunication;$(HEADER_PATH_5)/Modules/TWClientLib;$(HEADER_PATH_5)/Modules/TWRoot;$(HEADER_PATH_5)/Modules/TextEngine;$(HEADER_PATH_5)/Modules/TransparentWindowLib;$(HEADER_PATH_5)/Modules/UCLib;$(HEADER_PATH_5)/Modules/UDLib;$(HEADER_PATH_5)/Modules/UserInterfaceAPI;$(HEADER_PATH_5)/Modules/VBElemDialogs;$(HEADER_PATH_5)/Modules/VBUtils;$(HEADER_PATH_5)/Modules/VectorImage $(inherited)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp20</LanguageStandard>
<ForcedIncludeFiles>
</ForcedIncludeFiles>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<WholeProgramOptimization>false</WholeProgramOptimization>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<StringPooling>true</StringPooling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<ForceConformanceInForLoopScope>
</ForceConformanceInForLoopScope>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\Win\ACAP_STAT.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;msvcrt.lib;msvcprt.lib;IPHLPAPI.lib;Wininet.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(HEADER_PATH_5)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>msvcrtd.lib</IgnoreSpecificDefaultLibraries>
<AdditionalOptions>/export:GetExportedFuncAddrs,%401 /export:SetImportedFuncAddrs,%402 %(AdditionalOptions)</AdditionalOptions>
</Link>
<Lib>
<AdditionalDependencies>../zlib/x64/ZlibStatRelease/zlibstat.lib</AdditionalDependencies>
</Lib>
<PostBuildEvent>
<Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir)
SET BIMVERSION=$(BIM_VERSION)
ECHO ON
ECHO "Starting Install $(TargetName)"
set CONFIGURATION=$(Configuration)
set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\install.bat"</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>Creating VWR File</Message>
</PostBuildEvent>
<PreBuildEvent>
<Command>set PLATFORM_NAME=$(Platform)
set SYMROOT=$(SolutionDir)
"$(ProjectDir)..\SpeckleLib\Make.win\buildResAC.bat"</Command>
</PreBuildEvent>
<ResourceCompile>
<AdditionalIncludeDirectories>$(HEADER_PATH_5)\Inc;$(HEADER_PATH_5)\Modules\DGLib;$(RES_OUTPUT);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>
</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>
</SDLCheck>
<PreprocessorDefinitions>NDEBUG;ARCHICAD;WIN32;_WINDOWS;WINDOWS;AddOn_EXPORTS;ACExtension;_USRDLL;_WIN_EXTERNAL_;_WINDLL;_CRT_SECURE_NO_WARNINGS;_SILENCE_ALL_CXX20_DEPRECATION_WARNINGS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>./;$(HEADER_PATH_1)/;$(HEADER_PATH_2)/;$(HEADER_PATH_3)/;$(HEADER_PATH_3)/$(BIM_PLATFORM)/;$(HEADER_PATH_4)/;$(HEADER_PATH_5)/;$(HEADER_PATH_5)/Inc;$(HEADER_PATH_5)/Modules/AnalyticalModelAPI;$(HEADER_PATH_5)/Modules/ArchicadAPI;$(HEADER_PATH_5)/Modules/Brep;$(HEADER_PATH_5)/Modules/BuiltInLibrary;$(HEADER_PATH_5)/Modules/CADInfrastructureBase;$(HEADER_PATH_5)/Modules/CommunicationClient;$(HEADER_PATH_5)/Modules/CommunicationCommon;$(HEADER_PATH_5)/Modules/DGGraphix;$(HEADER_PATH_5)/Modules/DGLib;$(HEADER_PATH_5)/Modules/DesignVariantAPI;$(HEADER_PATH_5)/Modules/GDL;$(HEADER_PATH_5)/Modules/GSMSections;$(HEADER_PATH_5)/Modules/GSModelDevLib;$(HEADER_PATH_5)/Modules/GSModeler;$(HEADER_PATH_5)/Modules/GSModeler2D;$(HEADER_PATH_5)/Modules/GSRoot;$(HEADER_PATH_5)/Modules/GSUtils;$(HEADER_PATH_5)/Modules/GSXML;$(HEADER_PATH_5)/Modules/GSXMLUtils;$(HEADER_PATH_5)/Modules/GX;$(HEADER_PATH_5)/Modules/GXImage;$(HEADER_PATH_5)/Modules/GXImageBase;$(HEADER_PATH_5)/Modules/GXMedia;$(HEADER_PATH_5)/Modules/Geometry;$(HEADER_PATH_5)/Modules/Graphix;$(HEADER_PATH_5)/Modules/HTTP;$(HEADER_PATH_5)/Modules/InputOutput;$(HEADER_PATH_5)/Modules/JSON;$(HEADER_PATH_5)/Modules/JSONConversion;$(HEADER_PATH_5)/Modules/JavascriptEngine;$(HEADER_PATH_5)/Modules/LibXL;$(HEADER_PATH_5)/Modules/MEPAPI;$(HEADER_PATH_5)/Modules/MPIInterfaceDevLib;$(HEADER_PATH_5)/Modules/MPIInterfaceImpDevLib;$(HEADER_PATH_5)/Modules/Model3D;$(HEADER_PATH_5)/Modules/Model3DViewerControl;$(HEADER_PATH_5)/Modules/Network;$(HEADER_PATH_5)/Modules/Pattern;$(HEADER_PATH_5)/Modules/PointCloud;$(HEADER_PATH_5)/Modules/PointCloudManager;$(HEADER_PATH_5)/Modules/QGDrawing;$(HEADER_PATH_5)/Modules/RS;$(HEADER_PATH_5)/Modules/RapidJSON;$(HEADER_PATH_5)/Modules/SecureCommunication;$(HEADER_PATH_5)/Modules/TWClientLib;$(HEADER_PATH_5)/Modules/TWRoot;$(HEADER_PATH_5)/Modules/TextEngine;$(HEADER_PATH_5)/Modules/TransparentWindowLib;$(HEADER_PATH_5)/Modules/UCLib;$(HEADER_PATH_5)/Modules/UDLib;$(HEADER_PATH_5)/Modules/UserInterfaceAPI;$(HEADER_PATH_5)/Modules/VBElemDialogs;$(HEADER_PATH_5)/Modules/VBUtils;$(HEADER_PATH_5)/Modules/VectorImage $(inherited)</AdditionalIncludeDirectories>
<LanguageStandard>stdcpp20</LanguageStandard>
<ForcedIncludeFiles>
</ForcedIncludeFiles>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<WholeProgramOptimization>false</WholeProgramOptimization>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<StringPooling>true</StringPooling>
<BufferSecurityCheck>false</BufferSecurityCheck>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<PrecompiledHeaderOutputFile>
</PrecompiledHeaderOutputFile>
<ForceConformanceInForLoopScope>
</ForceConformanceInForLoopScope>
<CallingConvention>FastCall</CallingConvention>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>
</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<TreatLinkerWarningAsErrors>false</TreatLinkerWarningAsErrors>
<AdditionalDependencies>$(HEADER_PATH_5)\Lib\Win\ACAP_STAT.lib;$(HEADER_PATH_5)\Modules\DGGraphix\Win\DGGraphixImp.LIB;$(HEADER_PATH_5)\Modules\DGLib\Win\DGImp.lib;$(HEADER_PATH_5)\Modules\Geometry\Win\GeometryImp.LIB;$(HEADER_PATH_5)\Modules\Graphix\Win\GraphixImp.LIB;$(HEADER_PATH_5)\Modules\GSModeler\Win\GSModelerImp.LIB;$(HEADER_PATH_5)\Modules\GSRoot\Win\GSRootImp.lib;$(HEADER_PATH_5)\Modules\GXImage\Win\GXImageImp.lib;$(HEADER_PATH_5)\Modules\GXImageBase\Win\GXImageBaseImp.lib;$(HEADER_PATH_5)\Modules\GX\Win\GXImp.LIB;$(HEADER_PATH_5)\Modules\InputOutput\Win\InputOutputImp.lib;$(HEADER_PATH_5)\Modules\RS\Win\RSImp.LIB;$(HEADER_PATH_5)\Modules\TextEngine\Win\TextEngineImp.LIB;$(HEADER_PATH_5)\Modules\UCLib\Win\UCImp.lib;$(HEADER_PATH_5)\Modules\UDLib\Win\UDImp.lib;$(HEADER_PATH_5)\Modules\VBAttributes\Win\VBAttributesImp.LIB;$(HEADER_PATH_5)\Modules\VBElemDialogs\Win\VBElemDialogsImp.LIB;$(HEADER_PATH_5)\Modules\VectorImage\Win\VectorImageImp.LIB;$(HEADER_PATH_5)\Modules\ObjectDatabase\Win\ObjectDatabaseImp.LIB;$(HEADER_PATH_5)\Modules\JSON\Win\JSONImp.LIB;msvcrt.lib;msvcprt.lib;IPHLPAPI.lib;Wininet.lib;Dbghelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(HEADER_PATH_5)\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>msvcrtd.lib</IgnoreSpecificDefaultLibraries>
<AdditionalOptions>/export:GetExportedFuncAddrs,%401 /export:SetImportedFuncAddrs,%402 %(AdditionalOptions)</AdditionalOptions>
</Link>
<Lib>
<AdditionalDependencies>../zlib/x64/ZlibStatRelease/zlibstat.lib</AdditionalDependencies>
</Lib>
<PostBuildEvent>
<Command>REM Archicad installbuild script
SET PROJECTDIR=$(ProjectDir) SET PROJECTDIR=$(ProjectDir)
SET TARGETNAME=$(TargetName) SET TARGETNAME=$(TargetName)
SET TARGETDIR=$(TargetDir) SET TARGETDIR=$(TargetDir)
+51 -5
View File
@@ -71,6 +71,15 @@
<Filter Include="Connector\Interface\Browser\Bridge\Selection\Arg"> <Filter Include="Connector\Interface\Browser\Bridge\Selection\Arg">
<UniqueIdentifier>{8bb3df60-affe-4b66-8d78-f1b98e6ba8df}</UniqueIdentifier> <UniqueIdentifier>{8bb3df60-affe-4b66-8d78-f1b98e6ba8df}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Connector\Environment">
<UniqueIdentifier>{1d9a10c3-cac6-4b15-afb9-f117b99b3a24}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Interface\Browser\Bridge\Receive">
<UniqueIdentifier>{896b7b9b-61d8-46e7-8432-cfbdab4918fb}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Tool">
<UniqueIdentifier>{f9330e8f-8242-4605-b25c-b1ba24451825}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="RFIX.win\Connector.rc2"> <None Include="RFIX.win\Connector.rc2">
@@ -95,9 +104,6 @@
</ResourceCompile> </ResourceCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="Connector\Connector.cpp">
<Filter>Connector</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\ConnectorMenu.cpp"> <ClCompile Include="Connector\Interface\ConnectorMenu.cpp">
<Filter>Connector\Interface</Filter> <Filter>Connector\Interface</Filter>
</ClCompile> </ClCompile>
@@ -164,7 +170,6 @@
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\SendBridge.cpp"> <ClCompile Include="Connector\Interface\Browser\Bridge\Send\SendBridge.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter> <Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.cpp" />
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Send.cpp"> <ClCompile Include="Connector\Interface\Browser\Bridge\Send\Send.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter> <Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClCompile> </ClCompile>
@@ -249,6 +254,27 @@
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.cpp"> <ClCompile Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter> <Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Connector\Environment\ConnectorProject.cpp">
<Filter>Connector\Environment</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\HighlightObjects.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.cpp">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Receive\Receive.cpp">
<Filter>Connector\Interface\Browser\Bridge\Receive</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Receive\ReceiveBridge.cpp">
<Filter>Connector\Interface\Browser\Bridge\Receive</Filter>
</ClCompile>
<ClCompile Include="Connector\Tool\ElementHighlighter.cpp">
<Filter>Connector\Tool</Filter>
</ClCompile>
<ClCompile Include="Connector\Connector.cpp">
<Filter>Connector</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Connector\ConnectorResource.h"> <ClInclude Include="Connector\ConnectorResource.h">
@@ -329,7 +355,6 @@
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\SendBridge.h"> <ClInclude Include="Connector\Interface\Browser\Bridge\Send\SendBridge.h">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter> <Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.h" />
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Send.h"> <ClInclude Include="Connector\Interface\Browser\Bridge\Send\Send.h">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter> <Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClInclude> </ClInclude>
@@ -423,5 +448,26 @@
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.h"> <ClInclude Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter> <Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Connector\Environment\ConnectorProject.h">
<Filter>Connector\Environment</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendConversionResult.h">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\HighlightObjects.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetIsDevMode.h">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Receive\Receive.h">
<Filter>Connector\Interface\Browser\Bridge\Receive</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Receive\ReceiveBridge.h">
<Filter>Connector\Interface\Browser\Bridge\Receive</Filter>
</ClInclude>
<ClInclude Include="Connector\Tool\ElementHighlighter.h">
<Filter>Connector\Tool</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
</Project> </Project>
+30
View File
@@ -15,6 +15,21 @@
<LocalDebuggerAttach>false</LocalDebuggerAttach> <LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC28|x64'">
<LocalDebuggerCommand>C:\Program Files\Graphisoft\Archicad 28\Archicad.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC26|x64'">
<LocalDebuggerCommand>C:\Program Files\Graphisoft\Archicad 26\Archicad.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugAC25|x64'">
<LocalDebuggerCommand>C:\Program Files\Graphisoft\ARCHICAD 25\Archicad.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseVW2024|x64'">
<LocalDebuggerCommand>C:\Program Files\Vectorworks 2024\Vectorworks2024.exe</LocalDebuggerCommand> <LocalDebuggerCommand>C:\Program Files\Vectorworks 2024\Vectorworks2024.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach> <LocalDebuggerAttach>false</LocalDebuggerAttach>
@@ -30,4 +45,19 @@
<LocalDebuggerAttach>false</LocalDebuggerAttach> <LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC28|x64'">
<LocalDebuggerCommand>C:\Program Files\Graphisoft\Archicad 28\Archicad.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC26|x64'">
<LocalDebuggerCommand>C:\Program Files\Graphisoft\Archicad 26\Archicad.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseAC25|x64'">
<LocalDebuggerCommand>C:\Program Files\Graphisoft\ARCHICAD 25\Archicad.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project> </Project>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21BD79802CE23E4D00526AD1"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC25-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Graphisoft/ARCHICAD 25/ARCHICAD 25.app">
</PathRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21BD79802CE23E4D00526AD1"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC25-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21BD79802CE23E4D00526AD1"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC25-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Graphisoft/ARCHICAD 25/ARCHICAD 25.app">
</PathRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21BD79802CE23E4D00526AD1"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC25-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Release">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8A922CE4F3370076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC26-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
BundleIdentifier = "com.graphisoft.archicad26"
FilePath = "/Applications/Graphisoft/Archicad 26/Archicad 26.app">
</PathRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8A922CE4F3370076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC26-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8A922CE4F3370076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC26-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Graphisoft/Archicad 26/Archicad 26.app">
</PathRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8A922CE4F3370076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC26-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Release">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1530" LastUpgradeVersion = "1610"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1530" LastUpgradeVersion = "1610"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1530" LastUpgradeVersion = "1610"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -39,6 +39,10 @@
debugDocumentVersioning = "YES" debugDocumentVersioning = "YES"
debugServiceExtension = "internal" debugServiceExtension = "internal"
allowLocationSimulation = "YES"> allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Graphisoft/Archicad 27/Archicad 27.app">
</PathRunnable>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1530" LastUpgradeVersion = "1610"
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8DD22CE5137C0076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC28-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Graphisoft/Archicad 28/Archicad 28.app">
</PathRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8DD22CE5137C0076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC28-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8DD22CE5137C0076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC28-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Graphisoft/Archicad 28/Archicad 28.app">
</PathRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "21CE8DD22CE5137C0076522F"
BuildableName = "Speckle Connector.bundle"
BlueprintName = "Connector-AC28-EN-GB"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Release">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
+53 -9
View File
@@ -1,17 +1,28 @@
#include "Active/File/Directory.h" #include "Active/File/Directory.h"
#include "ConnectorResource.h" #include "ConnectorResource.h"
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Environment/ConnectorProject.h"
#include "Connector/Interface/ConnectorMenu.h" #include "Connector/Interface/ConnectorMenu.h"
#include "Connector/Interface/ConnectorPalette.h" #include "Connector/Interface/ConnectorPalette.h"
#include "Connector/Tool/ElementHighlighter.h"
#include "Speckle/Database/AccountDatabase.h" #include "Speckle/Database/AccountDatabase.h"
#include "Speckle/Environment/Addon.h" #include "Speckle/Environment/Addon.h"
#include "Speckle/Utility/String.h" #include "Speckle/Utility/String.h"
#include <mutex>
#ifdef WINDOWS
//NB: VS is ignoring template specialisations unless they are explicitly used in the top-level project
#include "Active/Setting/Values/GuidValue.h"
#include "Active/Setting/Values/TimeValue.h"
#include "Active/Setting/Values/StringValue.h"
using namespace active::setting;
#endif
using namespace active::file; using namespace active::file;
using namespace active::environment; using namespace active::environment;
using namespace connector; using namespace connector;
using namespace connector::database; using namespace connector::environment;
using namespace speckle::database; using namespace speckle::database;
using namespace speckle::environment; using namespace speckle::environment;
using namespace speckle::utility; using namespace speckle::utility;
@@ -23,14 +34,24 @@ namespace {
//The account database name //The account database name
const char* accountDBaseName = "Accounts.db"; const char* accountDBaseName = "Accounts.db";
///The Connector addon class
/*!
Class for a concrete instance of an add-on
This class is private to prevent ad-hoc construction of instances while fulfilling the requirements of the public interface. Essentially
this should behave as a singleton, representing the sole instance of the running add-on
*/
class ConnectorInstance : public ConnectorAddon { class ConnectorInstance : public ConnectorAddon {
public: public:
/*!
Constructor
@param name The connector add-on name
*/
ConnectorInstance(const String& name) : ConnectorAddon{name} { ConnectorInstance(const String& name) : ConnectorAddon{name} {
//Define the connector UI components
add<ConnectorMenu>(); add<ConnectorMenu>();
add<ConnectorPalette>(); add<ConnectorPalette>();
//The connector 'owns' the model card database, so the publisher list should only hold a weak reference add<ElementHighlighter>();
addWeak(m_modelCards.getSubscription());
} }
// MARK: Functions (const) // MARK: Functions (const)
@@ -40,17 +61,24 @@ namespace {
@return The account database @return The account database
*/ */
const AccountDatabase* getAccountDatabase() const override; const AccountDatabase* getAccountDatabase() const override;
protected:
/*! /*!
Get the model card database Make a new new project. Allows Addon subclasses to define a Project subclass with additional functions/databases
@return The model card database @return A new project instance
*/ */
const ModelCardDatabase* getModelCardDatabase() const override { return &m_modelCards; } virtual std::shared_ptr<Project> makeProject() const override {
return std::dynamic_pointer_cast<Project>(std::make_shared<ConnectorProject>());
}
private: private:
///The accounts database - always a single instance for the active user
mutable std::unique_ptr<AccountDatabase> m_account; mutable std::unique_ptr<AccountDatabase> m_account;
ModelCardDatabase m_modelCards; ///Mutex to control access to the accounts database
mutable std::mutex m_accountMutex;
}; };
///The active addon instance ///The active addon instance
std::unique_ptr<ConnectorAddon> m_addonInstance; std::unique_ptr<ConnectorAddon> m_addonInstance;
@@ -67,6 +95,18 @@ namespace {
return Directory{*appData, speckleDataDirName, true}; return Directory{*appData, speckleDataDirName, true};
} //getAppDataDirectory } //getAppDataDirectory
#ifdef WINDOWS
//NB: VS is ignoring template specialisations unless they are explicitly used in the top-level project
void invokeSpecialisation() {
StringValue stringValue;
active::utility::String unusedString = stringValue;
GuidValue guidValue;
active::utility::Guid unusedGuid = guidValue;
TimeValue timeValue;
active::utility::Time unusedTime = timeValue;
}
#endif
} }
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
@@ -75,6 +115,9 @@ namespace {
name: The add-on name name: The add-on name
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
ConnectorAddon::ConnectorAddon(const speckle::utility::String& name) : Addon{name} { ConnectorAddon::ConnectorAddon(const speckle::utility::String& name) : Addon{name} {
#ifdef WINDOWS
invokeSpecialisation();
#endif
} //ConnectorAddon::ConnectorAddon } //ConnectorAddon::ConnectorAddon
@@ -84,6 +127,7 @@ ConnectorAddon::ConnectorAddon(const speckle::utility::String& name) : Addon{nam
return: The account database return: The account database
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
const AccountDatabase* ConnectorInstance::getAccountDatabase() const { const AccountDatabase* ConnectorInstance::getAccountDatabase() const {
const std::lock_guard<std::mutex> lock{m_accountMutex};
if (!m_account) { if (!m_account) {
auto speckleDirectory = getAppDataDirectory(); auto speckleDirectory = getAppDataDirectory();
if (!speckleDirectory) if (!speckleDirectory)
-10
View File
@@ -1,12 +1,7 @@
#include "Speckle/Environment/Addon.h" #include "Speckle/Environment/Addon.h"
#include "Speckle/Utility/String.h"
namespace speckle::database { namespace speckle::database {
class AccountDatabase; class AccountDatabase;
class BIMElementDatabase;
}
namespace connector::database {
class ModelCardDatabase;
} }
namespace connector { namespace connector {
@@ -22,11 +17,6 @@ namespace connector {
@return The account database @return The account database
*/ */
const virtual speckle::database::AccountDatabase* getAccountDatabase() const = 0; const virtual speckle::database::AccountDatabase* getAccountDatabase() const = 0;
/*!
Get the model card database
@return The model card database
*/
const virtual database::ModelCardDatabase* getModelCardDatabase() const = 0;
protected: protected:
/*! /*!
@@ -29,6 +29,7 @@ enum TitleString {
addonNameID = 1, addonNameID = 1,
addonDescriptionID, addonDescriptionID,
noStoreyID, noStoreyID,
showLayersID,
}; };
@@ -44,6 +45,7 @@ enum GeneralString {
//Notification strings (advice displayed in alerts) //Notification strings (advice displayed in alerts)
enum NotifyString { enum NotifyString {
showHiddenLayersID = 1,
}; };
@@ -58,6 +60,7 @@ enum ErrorString {
modelCardNotFoundID, modelCardNotFoundID,
noProjectOpenID, noProjectOpenID,
accountNotFoundID, accountNotFoundID,
elementTypeNotConvertedID,
}; };
#endif //CONNECTOR_RESOURCE #endif //CONNECTOR_RESOURCE
@@ -96,7 +96,7 @@ Vector<ModelCard> ModelCardDatabase::getCards() const {
card: The card to write card: The card to write
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void ModelCardDatabase::write(const ModelCard& card) const { void ModelCardDatabase::write(ModelCard& card) const {
m_store->write(card); m_store->write(card);
} //ModelCardDatabase::write } //ModelCardDatabase::write
@@ -43,7 +43,7 @@ namespace connector::database {
Write a card to storage Write a card to storage
@param card The card to write @param card The card to write
*/ */
void write(const record::ModelCard& card) const; void write(record::ModelCard& card) const;
/*! /*!
Erase a card Erase a card
@param cardID The ID of the card to erase @param cardID The ID of the card to erase
@@ -0,0 +1,33 @@
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Connector.h"
#include "Connector/Database/ModelCardDatabase.h"
using namespace active::event;
using namespace connector::database;
using namespace connector::environment;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
ConnectorProject::ConnectorProject() {
m_modelCards = std::make_shared<ModelCardDatabase>();
connector()->addWeak(m_modelCards->getSubscription());
}
/*--------------------------------------------------------------------
Destructor
--------------------------------------------------------------------*/
ConnectorProject::~ConnectorProject() {}
/*--------------------------------------------------------------------
Get the model card database
return; The model card database
--------------------------------------------------------------------*/
const ModelCardDatabase* ConnectorProject::getModelCardDatabase() const {
return m_modelCards.get();
} //ConnectorProject::getModelCardDatabase
@@ -0,0 +1,53 @@
#ifndef CONNECTOR_ENVIRONMENT_CONNECTOR_PROJECT
#define CONNECTOR_ENVIRONMENT_CONNECTOR_PROJECT
#include "Speckle/Environment/Project.h"
namespace connector::database {
class ModelCardDatabase;
}
namespace connector::environment {
/*!
A BIM project contained Speckle connector data, e.g. a model card database
*/
class ConnectorProject : public speckle::environment::Project {
public:
// MARK: - Types
///Shared pointer
using Shared = std::shared_ptr<ConnectorProject>;
///Weak pointer
using Weak = std::weak_ptr<ConnectorProject>;
// MARK: - Constructors
/*!
Default constructor
*/
ConnectorProject();
ConnectorProject(const ConnectorProject&) = delete;
/*!
Destructor
*/
~ConnectorProject();
// MARK: - Functions (const)
/*!
Get the model card database
@return The model card database
*/
const connector::database::ModelCardDatabase* getModelCardDatabase() const;
private:
///The model card database
std::shared_ptr<connector::database::ModelCardDatabase> m_modelCards;
};
}
#endif //CONNECTOR_ENVIRONMENT_CONNECTOR_PROJECT
@@ -3,6 +3,20 @@
#include "Active/Utility/NameID.h" #include "Active/Utility/NameID.h"
// MARK: - Event identities
//Identifier for event signalling the connector palette visibility should be toggled
inline const active::utility::NameID toggleConnectorPaletteID{"toggleConnectorPalette"}; inline const active::utility::NameID toggleConnectorPaletteID{"toggleConnectorPalette"};
//Identifier for event signalling the connector palette has changed (state carried with event)
inline const active::utility::NameID reflectPaletteVisibilityID{"setConnectorMenuCheck"};
//Identifier for event signalling the that an attached list of elements should be highlighted
inline const active::utility::NameID setElementHighlight{"setElementHighlight"};
// MARK: - Event setting identities
//Identifier for setting carrying a menu state
inline const active::utility::NameID paletteVisibilityStateID{"menuCheckState"};
//Identifier for setting carrying a list of element links
inline const active::utility::NameID recordLinks{"recordLinks"};
#endif //CONNECTOR_EVENT_ID #endif //CONNECTOR_EVENT_ID
@@ -1,10 +1,12 @@
#include "Connector/Interface/Browser/Bridge/Base/AddModel.h" #include "Connector/Interface/Browser/Bridge/Base/AddModel.h"
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
using namespace active::container; using namespace active::container;
using namespace active::serialise; using namespace active::serialise;
using namespace connector::environment;
using namespace connector::record; using namespace connector::record;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace speckle::utility; using namespace speckle::utility;
@@ -23,6 +25,12 @@ AddModel::AddModel() : BridgeMethod{"AddModel", [&](const ModelCardEventWrapper&
card: The card to add card: The card to add
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void AddModel::run(const ModelCard& card) const { void AddModel::run(const ModelCard& card) const {
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr) auto project = connector()->getActiveProject().lock();
modelCardDBase->write(card); auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return;
if (auto modelCardDBase = connectorProject->getModelCardDatabase(); modelCardDBase != nullptr) {
auto newCard = clone(card);
modelCardDBase->write(*newCard);
}
} //AddModel::run } //AddModel::run
@@ -8,9 +8,20 @@
#include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h" #include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h"
#include "Connector/Interface/Browser/Bridge/Base/UpdateModel.h" #include "Connector/Interface/Browser/Bridge/Base/UpdateModel.h"
#include "Connector/Interface/Browser/Bridge/Base/HighlightModel.h" #include "Connector/Interface/Browser/Bridge/Base/HighlightModel.h"
#include "Connector/Interface/Browser/Bridge/Base/HighlightObjects.h"
#include "Connector/Interface/Browser/Bridge/Base/OpenUrl.h" #include "Connector/Interface/Browser/Bridge/Base/OpenUrl.h"
#include "Speckle/Event/Type/ProjectEvent.h" #include "Speckle/Event/Type/ProjectEvent.h"
#include "Speckle/Environment/Project.h"
#include "Speckle/Record/Element/Element.h"
#include "Connector/Connector.h"
#include "Connector/ConnectorResource.h"
#include "Speckle/Database/Identity/RecordID.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Connector/Record/Model/SenderModelCard.h"
#include "Connector/Record/Model/Filter/SendFilter.h"
#include "Connector/Database/ModelCardDatabase.h"
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
@@ -24,10 +35,11 @@ BaseBridge::BaseBridge() : BrowserBridge{"baseBinding"} {
addMethod<GetDocumentState>(); addMethod<GetDocumentState>();
addMethod<GetSourceApplicationName>(); addMethod<GetSourceApplicationName>();
addMethod<GetSourceApplicationVersion>(); addMethod<GetSourceApplicationVersion>();
addMethod<HighlightModel>();
addMethod<HighlightObjects>();
addMethod<OpenUrl>();
addMethod<RemoveModel>(); addMethod<RemoveModel>();
addMethod<UpdateModel>(); addMethod<UpdateModel>();
addMethod<HighlightModel>();
addMethod<OpenUrl>();
} //BaseBridge::BaseBridge } //BaseBridge::BaseBridge
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
@@ -2,6 +2,7 @@
#include "Active/Serialise/CargoHold.h" #include "Active/Serialise/CargoHold.h"
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h" #include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
#include "Speckle/Environment/Project.h" #include "Speckle/Environment/Project.h"
@@ -9,6 +10,7 @@
using namespace active::container; using namespace active::container;
using namespace active::serialise; using namespace active::serialise;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace speckle::utility; using namespace speckle::utility;
@@ -33,14 +35,17 @@ GetDocumentInfo::GetDocumentInfo() : BridgeMethod{"GetDocumentInfo", [&]() {
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetDocumentInfo::run() const { std::unique_ptr<Cargo> GetDocumentInfo::run() const {
auto docInfo = std::make_unique<DocumentInfo>(); auto docInfo = std::make_unique<DocumentInfo>();
if (auto project = connector()->getActiveProject().lock(); project) { auto project = connector()->getActiveProject().lock();
auto info = project->getInfo(); auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return nullptr;
auto info = connectorProject->getInfo();
docInfo->name = info.name; docInfo->name = info.name;
if (info.path) if (info.path)
docInfo->location = *info.path; docInfo->location = *info.path;
if (auto cardDatabase = connector()->getModelCardDatabase(); cardDatabase != nullptr) if (auto cardDatabase = connectorProject->getModelCardDatabase(); cardDatabase != nullptr)
docInfo->ID = cardDatabase->getStoreID(); docInfo->ID = cardDatabase->getStoreID();
else
docInfo->ID = Guid{true}.operator String(); docInfo->ID = Guid{true}.operator String();
}
return std::make_unique<WrappedValue>(std::move(docInfo)); return std::make_unique<WrappedValue>(std::move(docInfo));
} //GetDocumentInfo::run } //GetDocumentInfo::run
@@ -1,15 +1,13 @@
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentState.h" #include "Connector/Interface/Browser/Bridge/Base/GetDocumentState.h"
#include "Active/Serialise/CargoHold.h"
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/Record/Model/ModelCard.h" #include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
using namespace active::container; using namespace active::container;
using namespace active::serialise; using namespace active::serialise;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace connector::database;
using namespace connector::record;
using namespace speckle::utility; using namespace speckle::utility;
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
@@ -26,7 +24,11 @@ GetDocumentState::GetDocumentState() : BridgeMethod{"GetDocumentState", [&]() {
return: The document model cards return: The document model cards
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetDocumentState::run() const { std::unique_ptr<Cargo> GetDocumentState::run() const {
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr) { auto project = connector()->getActiveProject().lock();
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return nullptr;
if (auto modelCardDBase = connectorProject->getModelCardDatabase(); modelCardDBase != nullptr) {
return modelCardDBase->wrapper(); return modelCardDBase->wrapper();
} }
return nullptr; return nullptr;
@@ -1,6 +1,11 @@
#include "Active/Setting/ValueSetting.h"
#include "Active/Setting/Values/GuidValue.h"
#include "Active/Event/Event.h"
#include "Connector/Interface/Browser/Bridge/Base/HighlightModel.h" #include "Connector/Interface/Browser/Bridge/Base/HighlightModel.h"
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/ConnectorResource.h" #include "Connector/ConnectorResource.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Event/ConnectorEventID.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h"
#include "Connector/Record/Model/SenderModelCard.h" #include "Connector/Record/Model/SenderModelCard.h"
@@ -8,17 +13,22 @@
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h" #include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Record/Element/Element.h" #include "Speckle/Record/Element/Element.h"
#include "Speckle/Database/BIMElementDatabase.h" #include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Environment/Host.h"
#include "Speckle/Environment/Project.h" #include "Speckle/Environment/Project.h"
using namespace speckle::record::element; using namespace active::event;
using namespace active::setting;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace connector::record; using namespace connector::record;
using namespace speckle::environment;
using namespace speckle::record::element;
using namespace speckle::utility; using namespace speckle::utility;
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Default constructor Default constructor
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
HighlightModel::HighlightModel() : BridgeMethod{"HighlightModel", [&](const SendArgs& args) { HighlightModel::HighlightModel() : BridgeMethod{"HighlightModel", [&](const HighlightModelArgs& args) {
run(args); run(args);
}} {} }} {}
@@ -29,27 +39,22 @@ HighlightModel::HighlightModel() : BridgeMethod{"HighlightModel", [&](const Send
modelCardID: The ID of the target model card modelCardID: The ID of the target model card
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void HighlightModel::run(const String& modelCardID) const { void HighlightModel::run(const String& modelCardID) const {
auto project = connector()->getActiveProject().lock();
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return;
//Find the specified model card //Find the specified model card
auto modelCardDatabase = connector()->getModelCardDatabase(); auto modelCardDatabase = connectorProject->getModelCardDatabase();
auto modelCard = modelCardDatabase->getCard(modelCardID); auto modelCard = modelCardDatabase->getCard(modelCardID);
if (!modelCard) { if (!modelCard) {
getBridge()->sendEvent("setModelError", getBridge()->sendEvent("setModelError",
std::make_unique<SendError>(connector()->getLocalString(errorString, modelCardNotFoundID), modelCardID)); std::make_unique<SendError>(connector()->getLocalString(errorString, modelCardNotFoundID), modelCardID));
return; return;
} }
if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get())) { if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get())) {
auto modelCardSelection = senderCard->getFilter().getElementIDs(); ValueSetting elementIDs{recordLinks};
for (const auto& elementID : senderCard->getFilter().getElementIDs())
auto project = connector()->getActiveProject().lock(); elementIDs.emplace_back(GuidValue{elementID});
if (!project) { connector()->publish(Event{setElementHighlight, { elementIDs }});
// TODO: is this OK? should this throw?
return;
} }
auto elementDatabase = project->getElementDatabase();
elementDatabase->clearSelection();
elementDatabase->setSelection(modelCardSelection);
}
} //HighlightModel::run } //HighlightModel::run
@@ -3,22 +3,19 @@
#include "Active/Serialise/CargoHold.h" #include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h" #include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h" #include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge { namespace connector::interfac::browser::bridge {
class ConnectorConfig;
///Argument parameter for a string ///Argument parameter for a string
using StringHold = active::serialise::CargoHold<active::serialise::ValueWrap<speckle::utility::String>, speckle::utility::String>; using StringHold = active::serialise::CargoHold<active::serialise::ValueWrap<speckle::utility::String>, speckle::utility::String>;
///Argument type for this method ///Argument type for this method
using SendArgs = speckle::interfac::browser::bridge::JSArgType<StringHold>; using HighlightModelArgs = speckle::interfac::browser::bridge::JSArgType<StringHold>;
/*! /*!
JS Function class to highlight elements from the selected model card in the open document JS Function class to highlight elements from the selected model card in the open document
*/ */
class HighlightModel : public speckle::interfac::browser::bridge::BridgeMethod<SendArgs, void> { class HighlightModel : public speckle::interfac::browser::bridge::BridgeMethod<HighlightModelArgs, void> {
public: public:
// MARK: - Constructors // MARK: - Constructors
@@ -0,0 +1,31 @@
#include "Connector/Interface/Browser/Bridge/Base/HighlightObjects.h"
#include "Active/Setting/ValueSetting.h"
#include "Active/Event/Event.h"
#include "Connector/Connector.h"
#include "Connector/Event/ConnectorEventID.h"
using namespace active::event;
using namespace active::setting;
using namespace connector;
using namespace connector::interfac::browser::bridge;
using namespace speckle::database;
using namespace speckle::environment;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
HighlightObjects::HighlightObjects() : BridgeMethod{"HighlightObjects", [&](const HighlightObjectArgs& args) {
run(args);
}} {}
/*--------------------------------------------------------------------
Highlight specified objects
objectIDs: List of object IDs to be highlighted
--------------------------------------------------------------------*/
void HighlightObjects::run(const StringList& objectIDs) const {
connector()->publish(Event{setElementHighlight, { ValueSetting{objectIDs, recordLinks} }});
} //HighlightObjects::run
@@ -0,0 +1,42 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_OBJECTS
#define CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_OBJECTS
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
///List of strings
using StringList = std::vector<active::utility::String>;
///Argument parameter for a string
using StringListHold = active::serialise::CargoHold<active::serialise::ContainerWrap<StringList>, StringList>;
///Argument type for this method
using HighlightObjectArgs = speckle::interfac::browser::bridge::JSArgType<StringListHold>;
/*!
JS Function class to highlight objects using passed application IDs
*/
class HighlightObjects : public speckle::interfac::browser::bridge::BridgeMethod<HighlightObjectArgs, void> {
public:
// MARK: - Constructors
/*!
Constructor
*/
HighlightObjects();
// MARK: - Functions (const)
/*!
Highlight specified objects
@param objectIDs List of object IDs to be highlighted
*/
void run(const StringList& objectIDs) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_OBJECTS
@@ -1,22 +1,16 @@
#include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h" #include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h"
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
using namespace active::container; using namespace active::container;
using namespace active::serialise; using namespace active::serialise;
using namespace connector::database; using namespace connector::environment;
using namespace connector::record; using namespace connector::record;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace speckle::utility; using namespace speckle::utility;
namespace {
using WrappedValue = active::serialise::CargoHold<PackageWrap, DocumentInfo>;
}
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Default constructor Default constructor
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
@@ -31,6 +25,10 @@ RemoveModel::RemoveModel() : BridgeMethod{"RemoveModel", [&](const ModelCardEven
card: The card to add card: The card to add
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void RemoveModel::run(const ModelCard& card) const { void RemoveModel::run(const ModelCard& card) const {
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr) auto project = connector()->getActiveProject().lock();
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return;
if (auto modelCardDBase = connectorProject->getModelCardDatabase(); modelCardDBase != nullptr)
modelCardDBase->erase(card.getID()); modelCardDBase->erase(card.getID());
} //RemoveModel::run } //RemoveModel::run
@@ -2,11 +2,12 @@
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h" #include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
using namespace active::container; using namespace active::container;
using namespace active::serialise; using namespace active::serialise;
using namespace connector::database; using namespace connector::environment;
using namespace connector::record; using namespace connector::record;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace speckle::utility; using namespace speckle::utility;
@@ -31,6 +32,12 @@ UpdateModel::UpdateModel() : BridgeMethod{"UpdateModel", [&](const ModelCardEven
card: The card to update card: The card to update
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void UpdateModel::run(const ModelCard& card) const { void UpdateModel::run(const ModelCard& card) const {
if (auto modelCardDBase = connector()->getModelCardDatabase(); modelCardDBase != nullptr) auto project = connector()->getActiveProject().lock();
modelCardDBase->write(card); auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return;
if (auto modelCardDBase = connectorProject->getModelCardDatabase(); modelCardDBase != nullptr) {
auto newCard = clone(card);
modelCardDBase->write(*newCard);
}
} //UpdateModel::run } //UpdateModel::run
@@ -0,0 +1,46 @@
#include "Connector/Interface/Browser/Bridge/Receive/Receive.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
#include "Connector/Connector.h"
#include "Connector/ConnectorResource.h"
#include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Record/Collection/ProjectCollection.h"
#include "Connector/Record/Model/ReceiverModelCard.h"
#include "Speckle/Database/AccountDatabase.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Database/Content/BIMRecord.h"
#include "Speckle/Environment/Project.h"
#include "Speckle/Environment/Host.h"
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Record/Credentials/Account.h"
#include "Speckle/Record/Element/Element.h"
#include "Speckle/Serialise/Detached/Storage/DetachedMemoryStore.h"
#include "Speckle/Utility/Exception.h"
using namespace active::serialise;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge;
using namespace connector::record;
using namespace speckle::database;
using namespace speckle::environment;
using namespace speckle::record::element;
using namespace speckle::serialise;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
Receive::Receive() : BridgeMethod{"Receive", [&](const ReceiveArgs& args) {
run(args);
}} {}
/*--------------------------------------------------------------------
Receive a specified model
modelCardID: The ID of the model card identifying the objects to receive
--------------------------------------------------------------------*/
void Receive::run(const String& modelCardID) const {
} //Receive::run
@@ -0,0 +1,39 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_RECEIVE
#define CONNECTOR_INTERFACE_BRIDGE_RECEIVE
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
///Argument parameter for a string
using StringHold = active::serialise::CargoHold<active::serialise::ValueWrap<speckle::utility::String>, speckle::utility::String>;
///Argument type for this method
using ReceiveArgs = speckle::interfac::browser::bridge::JSArgType<StringHold>;
/*!
JS Function class to receive a specified model
*/
class Receive : public speckle::interfac::browser::bridge::BridgeMethod<ReceiveArgs, void> {
public:
// MARK: - Constructors
/*!
Constructor
*/
Receive();
// MARK: - Functions (const)
/*!
Receive a specified model
@param modelCardID The ID of the model card identifying the objects to receive
*/
void run(const speckle::utility::String& modelCardID) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_RECEIVE
@@ -0,0 +1,30 @@
#include "Connector/Interface/Browser/Bridge/Receive/ReceiveBridge.h"
#include "Connector/Interface/Browser/Bridge/Receive/Receive.h"
#include "Connector/Connector.h"
#include "Connector/ConnectorResource.h"
#include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Speckle/Event/Type/ElementEvent.h"
#include "Speckle/Record/Element/Element.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Environment/Project.h"
#include "Speckle/Database/Identity/RecordID.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Record/Model/ReceiverModelCard.h"
using namespace speckle::database;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
using namespace speckle::event;
using namespace active::serialise;
using namespace connector::record;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
ReceiveBridge::ReceiveBridge() : BrowserBridge{"receiveBinding"} {
//Add bridge methods
addMethod<Receive>();
} //ReceiveBridge::ReceiveBridge
@@ -0,0 +1,29 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_RECEIVE_BRIDGE
#define CONNECTOR_INTERFACE_BRIDGE_RECEIVE_BRIDGE
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
namespace connector::interfac::browser::bridge {
/*!
A browser bridge to support receiving model data from a Speckle server
*/
class ReceiveBridge : public speckle::interfac::browser::bridge::BrowserBridge {
public:
// MARK: - Types
using base = speckle::interfac::browser::bridge::BrowserBridge;
// MARK: - Constructors
using base::base;
/*!
Default constructor
*/
ReceiveBridge();
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_RECEIVE_BRIDGE
@@ -1,5 +1,6 @@
#include "Connector/Interface/Browser/Bridge/Send/Arg/ConversionResult.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/ConversionResult.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h" #include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include <array> #include <array>
@@ -12,14 +13,30 @@ namespace {
///Serialisation fields ///Serialisation fields
enum FieldIndex { enum FieldIndex {
statusID,
srcID,
srcTypeID,
resID,
resTypeID,
errorID, errorID,
cardID,
}; };
///Serialisation field IDs ///Serialisation field IDs
static std::array fieldID = { static std::array fieldID = {
Identity{"status"},
Identity{"sourceId"},
Identity{"sourceType"},
Identity{"resultId"},
Identity{"resultType"},
Identity{"error"}, Identity{"error"},
Identity{"modelCardId"}, };
///Conversion status enumerator names
std::array statusName{
"success",
"warning",
"info",
"error",
}; };
} }
@@ -35,8 +52,12 @@ bool ConversionResult::fillInventory(active::serialise::Inventory& inventory) co
using enum Entry::Type; using enum Entry::Type;
inventory.merge(Inventory{ inventory.merge(Inventory{
{ {
{ fieldID[errorID], errorID, element }, { fieldID[statusID], statusID, element },
{ fieldID[cardID], cardID, element }, { fieldID[srcID], srcID, element, !sourceID.empty() },
{ fieldID[srcTypeID], srcTypeID, element, !sourceType.empty() },
{ fieldID[resID], resID, element, !resultID.empty() },
{ fieldID[resTypeID], resTypeID, element, !resultType.empty() },
{ fieldID[errorID], errorID, element, error.operator bool() },
}, },
}.withType(&typeid(ConversionResult))); }.withType(&typeid(ConversionResult)));
return true; return true;
@@ -55,11 +76,46 @@ Cargo::Unique ConversionResult::getCargo(const active::serialise::Inventory::Ite
return nullptr; return nullptr;
using namespace active::serialise; using namespace active::serialise;
switch (item.index) { switch (item.index) {
case statusID:
return Cargo::Unique{new CargoHold<ValueWrap<uint16_t>, uint16_t>(static_cast<uint16_t>(status))};
case srcID:
return std::make_unique<ValueWrap<String>>(sourceID);
case srcTypeID:
return std::make_unique<ValueWrap<String>>(sourceType);
case resID:
return std::make_unique<ValueWrap<String>>(resultID);
case resTypeID:
return std::make_unique<ValueWrap<String>>(resultType);
case errorID: case errorID:
return std::make_unique<ValueWrap<String>>(message); return std::make_unique<PackageWrap>(*error);
case cardID:
return std::make_unique<ValueWrap<String>>(modelCardID);
default: default:
return nullptr; //Requested an unknown index return nullptr; //Requested an unknown index
} }
} //ConversionResult::getCargo } //ConversionResult::getCargo
/*--------------------------------------------------------------------
Get a conversion status enumerator from text
text; The incoming text
return: The equivalent conversion status (nullopt on failure)
--------------------------------------------------------------------*/
std::optional<ConversionResult::Status> connector::interfac::browser::bridge::toConversionStatus(const String& text) {
for (auto i = 0; i < statusName.size(); ++i)
if (text == statusName[i])
return static_cast<ConversionResult::Status>(i + 1);
return std::nullopt;
} //active::geometry::toAnchor2D
/*--------------------------------------------------------------------
Get the text for a conversion status value
status: The incoming status
return: The conversion status as text
--------------------------------------------------------------------*/
String connector::interfac::browser::bridge::fromConversionStatus(ConversionResult::Status status) {
return statusName.at(static_cast<size_t>(status) - 1);
} //active::geometry::fromAnchor2D
@@ -1,47 +1,42 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_CONVERSION_RESULT #ifndef CONNECTOR_INTERFACE_BRIDGE_CONVERSION_RESULT
#define CONNECTOR_INTERFACE_BRIDGE_SEND_CONVERSION_RESULT #define CONNECTOR_INTERFACE_BRIDGE_CONVERSION_RESULT
#include "Active/Serialise/Package/Wrapper/PackageWrap.h" #include "Active/Serialise/Package/Package.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h"
#include "Speckle/Utility/String.h" #include "Speckle/Utility/String.h"
namespace connector::interfac::browser::bridge { namespace connector::interfac::browser::bridge {
/*! /*!
A send error to return to the JS in the event of an error The result of a conversion process (BIM records to/from Speckle)
*/ */
class ConversionResult final : public active::serialise::Package { class ConversionResult : public active::serialise::Package {
public: public:
enum class Status { enum class Status : uint16_t {
success = 1, success = 1, ///<The conversion was successful
info, info, ///<Not in use yet, maybe later as discussed
warning, warning, ///<Not in use yet, maybe later as discussed
error, error, ///<An error occurred during conversion
}; };
// MARK: - Constructors // MARK: - Constructors
/*! /*!
Constructor Default constructor
@param errMess The error message
@param card The ID of the model card associated with the wrror
*/ */
ConversionResult(const speckle::utility::String& errMess, const speckle::utility::String& card) : message{errMess}, modelCardID{card} {} ConversionResult() {}
// MARK: - Public variables // MARK: - Public variables
///The error message
speckle::utility::String message;
///The ID of the model card associated with the data
speckle::utility::String modelCardID;
///The element conversion status ///The element conversion status
Status status = Status::info; Status status = Status::info;
///For receive conversion reports, this is the id of the speckle object. For send, it's the host app object id. ///For receive conversion reports, this is the id of the speckle object. For send, it's the host app object id.
speckle::utility::String sourceId; speckle::utility::String sourceID;
///For receive conversion reports, this is the type of the speckle object. For send, it's the host app object type. ///For receive conversion reports, this is the type of the speckle object. For send, it's the host app object type.
speckle::utility::String sourceType; speckle::utility::String sourceType;
///For receive conversion reports, this is the id of the host app object. For send, it's the speckle object id. ///For receive conversion reports, this is the id of the host app object. For send, it's the speckle object id.
speckle::utility::String resultId; speckle::utility::String resultID;
///For receive conversion reports, this is the type of the host app object. For send, it's the speckle object type. ///For receive conversion reports, this is the type of the host app object. For send, it's the speckle object type.
speckle::utility::String resultType; speckle::utility::String resultType;
///The exception (nullopt = no exception) ///The exception (nullopt = no exception)
@@ -63,6 +58,60 @@ namespace connector::interfac::browser::bridge {
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override; Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
}; };
/*!
Get a conversion status enumerator from text
@param text The incoming text
@return The equivalent conversion status (nullopt on failure)
*/
std::optional<ConversionResult::Status> toConversionStatus(const speckle::utility::String& text);
/*!
Get the text for a conversion status value
@param status The incoming status
@return The conversion status as text
*/
speckle::utility::String fromConversionStatus(ConversionResult::Status status);
} }
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_CONVERSION_RESULT namespace active::serialise {
/*!
Import the object from the specified string (specialisation for bool)
@param source The string to read
@return True if the data was successfully read
*/
template<> inline
bool ValueWrap<connector::interfac::browser::bridge::ConversionResult::Status>::read(const utility::String& source) {
auto converted = connector::interfac::browser::bridge::toConversionStatus(source);
if (!converted)
return false;
base::get() = *converted;
return true;
} //ValueWrap<bool>::read
/*!
Import the object from the specified string (specialisation for bool)
@param source The string to read
@return True if the data was successfully read
*/
template<> inline
bool ValueWrap<std::optional<connector::interfac::browser::bridge::ConversionResult::Status>>::read(const utility::String& source) {
auto converted = connector::interfac::browser::bridge::toConversionStatus(source);
base::get() = converted;
return converted.operator bool();
} //ValueWrap<bool>::read
/*!
Export the object to the specified string (specialisation for bool)
@param dest The string to write the data to
@return True if the data was successfully written
*/
template<> inline
bool ValueWrap<connector::interfac::browser::bridge::ConversionResult::Status>::write(utility::String& dest) const {
dest = connector::interfac::browser::bridge::fromConversionStatus(get());
return true;
} //ValueWrap<bool>::write
}
#endif //CONNECTOR_INTERFACE_BRIDGE_CONVERSION_RESULT
@@ -0,0 +1,49 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_CONVERSION_RESULT
#define CONNECTOR_INTERFACE_BRIDGE_SEND_CONVERSION_RESULT
#include "Connector/Interface/Browser/Bridge/Send/Arg/ConversionResult.h"
#include "Speckle/Serialise/Collection/ConversionReporter.h"
namespace connector::interfac::browser::bridge {
/*!
A result from converting a record to Speckle
*/
class SendConversionResult : public ConversionResult {
public:
// MARK: - Constructors
/*!
Constructor
@param stat The send/conversion status of the target record
@param srcID The record application ID
@param srcType The record application type name
@param err An optional error report
*/
SendConversionResult(Status stat, speckle::utility::String srcID, speckle::utility::String srcType, SendError::Option err = std::nullopt) {
status = stat;
sourceID = srcID;
sourceType = srcType;
error = err;
}
/*!
Constructor
@param stat The send/conversion status of the target record
@param srcID The record application ID
@param srcType The record application type name
@param err An optional error report
*/
SendConversionResult(const speckle::database::BIMRecordID& srcID, const speckle::serialise::ConversionReporter::Data& data) {
status = data.status == speckle::serialise::ConversionReporter::Data::Status::success ?
ConversionResult::Status::success : ConversionResult::Status::error;
sourceID = srcID.operator speckle::utility::String();
sourceType = data.typeName;
if (!data.message.empty())
error = SendError{data.message};
}
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_CONVERSION_RESULT
@@ -12,14 +12,16 @@ namespace {
///Serialisation fields ///Serialisation fields
enum FieldIndex { enum FieldIndex {
errorID, messageID,
cardID, cardID,
stackID,
}; };
///Serialisation field IDs ///Serialisation field IDs
static std::array fieldID = { static std::array fieldID = {
Identity{"error"}, Identity{"message"},
Identity{"modelCardId"}, Identity{"modelCardId"},
Identity{"stackTrace"},
}; };
} }
@@ -35,8 +37,9 @@ bool SendError::fillInventory(active::serialise::Inventory& inventory) const {
using enum Entry::Type; using enum Entry::Type;
inventory.merge(Inventory{ inventory.merge(Inventory{
{ {
{ fieldID[errorID], errorID, element }, { fieldID[messageID], messageID, element },
{ fieldID[cardID], cardID, element }, { fieldID[cardID], cardID, element, !modelCardID.empty() },
{ fieldID[stackID], stackID, element, modelCardID.empty() }, //Field not included when a model card is sent
}, },
}.withType(&typeid(SendError))); }.withType(&typeid(SendError)));
return true; return true;
@@ -55,10 +58,12 @@ Cargo::Unique SendError::getCargo(const active::serialise::Inventory::Item& item
return nullptr; return nullptr;
using namespace active::serialise; using namespace active::serialise;
switch (item.index) { switch (item.index) {
case errorID: case messageID:
return std::make_unique<ValueWrap<String>>(message); return std::make_unique<ValueWrap<String>>(message);
case cardID: case cardID:
return std::make_unique<ValueWrap<String>>(modelCardID); return std::make_unique<ValueWrap<String>>(modelCardID);
case stackID:
return std::make_unique<ValueWrap<String>>(stackTrace);
default: default:
return nullptr; //Requested an unknown index return nullptr; //Requested an unknown index
} }
@@ -24,7 +24,7 @@ namespace connector::interfac::browser::bridge {
@param errMess The error message @param errMess The error message
@param card The ID of the model card associated with the wrror @param card The ID of the model card associated with the wrror
*/ */
SendError(const speckle::utility::String& errMess, const speckle::utility::String& card) : message{errMess}, modelCardID{card} {} SendError(const speckle::utility::String& errMess, const speckle::utility::String& card = {}) : message{errMess}, modelCardID{card} {}
// MARK: - Public variables // MARK: - Public variables
@@ -32,6 +32,8 @@ namespace connector::interfac::browser::bridge {
speckle::utility::String message; speckle::utility::String message;
///The ID of the model card associated with the data ///The ID of the model card associated with the data
speckle::utility::String modelCardID; speckle::utility::String modelCardID;
///The error stack trace
speckle::utility::String stackTrace;
// MARK: - Serialisation // MARK: - Serialisation
@@ -1,12 +1,14 @@
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendObject.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/SendObject.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h" #include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Record/Collection/ProjectCollection.h"
#include <array> #include <array>
using namespace active::serialise; using namespace active::serialise;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace connector::record;
using namespace speckle::serialise; using namespace speckle::serialise;
using namespace speckle::utility; using namespace speckle::utility;
@@ -67,3 +69,19 @@ Cargo::Unique SendObject::getCargo(const active::serialise::Inventory::Item& ite
return nullptr; //Requested an unknown index return nullptr; //Requested an unknown index
} }
} //SendObject::getCargo } //SendObject::getCargo
/*--------------------------------------------------------------------
Get the conversion results from the send object serialisation
return: The serialisation conversion results
--------------------------------------------------------------------*/
std::vector<SendConversionResult> SendObject::getConversionResults() const {
std::vector<SendConversionResult> convertResults;
auto collection = dynamic_cast<const ProjectCollection*>(m_object.get());
if (collection == nullptr)
return convertResults;
for (const auto& item : collection->getLog())
convertResults.emplace_back(SendConversionResult{item.first, item.second});
return convertResults;
} //SendObject::getConversionResults
@@ -3,6 +3,7 @@
#include "Active/Serialise/CargoHold.h" #include "Active/Serialise/CargoHold.h"
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h" #include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendConversionResult.h"
#include "Speckle/Database/Content/Record.h" #include "Speckle/Database/Content/Record.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h" #include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
@@ -53,6 +54,11 @@ namespace connector::interfac::browser::bridge {
@return The active management @return The active management
*/ */
active::serialise::Management* management() const override { return m_object->management(); } active::serialise::Management* management() const override { return m_object->management(); }
/*!
Get the conversion results from the send object serialisation
@return The serialisation conversion results
*/
std::vector<SendConversionResult> getConversionResults() const;
private: private:
///The object to send ///The object to send
@@ -1,5 +1,6 @@
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendViaBrowserArgs.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/SendViaBrowserArgs.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Record/Model/ModelCard.h" #include "Connector/Record/Model/ModelCard.h"
#include "Speckle/Record/Credentials/Account.h" #include "Speckle/Record/Credentials/Account.h"
@@ -25,6 +26,7 @@ namespace {
accID, accID,
messageID, messageID,
sendObjectID, sendObjectID,
convResultID,
}; };
///Serialisation field IDs ///Serialisation field IDs
@@ -37,6 +39,7 @@ namespace {
Identity{"accountId"}, Identity{"accountId"},
Identity{"message"}, Identity{"message"},
Identity{"sendObject"}, Identity{"sendObject"},
Identity{"sendConversionResults"},
}; };
} }
@@ -47,11 +50,11 @@ namespace {
modelCard: The model card to populate into the send info for the browser modelCard: The model card to populate into the send info for the browser
account: The account linked to the send account: The account linked to the send
object: The object to be sent object: The object to be sent
results: The conversion results (reporting any conversion errors etc)
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
SendViaBrowserArgs::SendViaBrowserArgs(const ModelCard& modelCard, const Account& account, SendObject&& object) : SendViaBrowserArgs::SendViaBrowserArgs(const ModelCard& modelCard, const Account& account, SendObject&& object) :
modelCardID(modelCard.getID()), projectID(modelCard.getProjectID()), modelID(modelCard.getModelID()), token{account.getToken()}, modelCardID(modelCard.getID()), projectID(modelCard.getProjectID()), modelID(modelCard.getModelID()), token{account.getToken()},
serverURL{account.getServerURL()}, accountID{account.getID()}, sendObject{std::move(object)} { serverURL{account.getServerURL()}, accountID{account.getID()}, sendObject{std::move(object)} {
} //SendViaBrowserArgs::SendViaBrowserArgs } //SendViaBrowserArgs::SendViaBrowserArgs
@@ -74,6 +77,7 @@ bool SendViaBrowserArgs::fillInventory(active::serialise::Inventory& inventory)
{ fieldID[accID], accID, element }, { fieldID[accID], accID, element },
{ fieldID[messageID], messageID, element }, { fieldID[messageID], messageID, element },
{ fieldID[sendObjectID], sendObjectID, element }, { fieldID[sendObjectID], sendObjectID, element },
{ fieldID[convResultID], convResultID, element },
}, },
}.withType(&typeid(SendViaBrowserArgs))); }.withType(&typeid(SendViaBrowserArgs)));
return true; return true;
@@ -108,6 +112,9 @@ Cargo::Unique SendViaBrowserArgs::getCargo(const active::serialise::Inventory::I
return std::make_unique<StringWrap>(message); return std::make_unique<StringWrap>(message);
case sendObjectID: case sendObjectID:
return std::make_unique<PackageWrap>(sendObject); return std::make_unique<PackageWrap>(sendObject);
case convResultID:
sendConversionResults = sendObject.getConversionResults();
return Cargo::Unique{new ContainerWrap{sendConversionResults}};
default: default:
return nullptr; //Requested an unknown index return nullptr; //Requested an unknown index
} }
@@ -3,7 +3,7 @@
#include "Active/Serialise/Package/Package.h" #include "Active/Serialise/Package/Package.h"
#include "Active/Utility/String.h" #include "Active/Utility/String.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/ConversionResult.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/SendConversionResult.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendObject.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/SendObject.h"
#include "Speckle/Database/Identity/RecordID.h" #include "Speckle/Database/Identity/RecordID.h"
@@ -54,7 +54,7 @@ namespace connector::interfac::browser::bridge {
///The send message ///The send message
speckle::utility::String message; //TODO: Clarify what this is used for speckle::utility::String message; //TODO: Clarify what this is used for
///The conversion report (summarising the conversion results on an element-by-element basis) ///The conversion report (summarising the conversion results on an element-by-element basis)
std::vector<ConversionResult> sendConversionResults; mutable std::vector<SendConversionResult> sendConversionResults;
///The commit content ///The commit content
SendObject sendObject; SendObject sendObject;
@@ -5,25 +5,30 @@
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/ConnectorResource.h" #include "Connector/ConnectorResource.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h" #include "Connector/Environment/ConnectorProject.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendConversionResult.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendViaBrowserArgs.h" #include "Connector/Interface/Browser/Bridge/Send/Arg/SendViaBrowserArgs.h"
#include "Connector/Record/Collection/ProjectCollection.h" #include "Connector/Record/Collection/ProjectCollection.h"
#include "Connector/Record/Model/SenderModelCard.h"
#include "Connector/Record/Model/Filter/SendFilter.h"
#include "Speckle/Database/AccountDatabase.h" #include "Speckle/Database/AccountDatabase.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Database/Content/BIMRecord.h" #include "Speckle/Database/Content/BIMRecord.h"
#include "Speckle/Environment/Project.h"
#include "Speckle/Environment/Host.h"
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h" #include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Record/Credentials/Account.h" #include "Speckle/Record/Credentials/Account.h"
#include "Speckle/Record/Element/Element.h"
#include "Speckle/Serialise/Detached/Storage/DetachedMemoryStore.h" #include "Speckle/Serialise/Detached/Storage/DetachedMemoryStore.h"
#include "Speckle/Utility/Exception.h" #include "Speckle/Utility/Exception.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Environment/Project.h"
#include "Speckle/Record/Element/Element.h"
using namespace speckle::record::element;
using namespace active::serialise; using namespace active::serialise;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace connector::record; using namespace connector::record;
using namespace speckle::database; using namespace speckle::database;
using namespace speckle::environment;
using namespace speckle::record::element;
using namespace speckle::serialise; using namespace speckle::serialise;
using namespace speckle::utility; using namespace speckle::utility;
@@ -41,8 +46,20 @@ Send::Send() : BridgeMethod{"Send", [&](const SendArgs& args) {
modelCardID: The ID of the model card identifying the objects to send modelCardID: The ID of the model card identifying the objects to send
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void Send::run(const String& modelCardID) const { void Send::run(const String& modelCardID) const {
//We can currently only send from the 3D model view
host()->makeModelViewActive(true);
//Get the active project
auto project = connector()->getActiveProject().lock();
if (!project) {
getBridge()->sendEvent("setModelError",
std::make_unique<SendError>(connector()->getLocalString(errorString, noProjectOpenID), modelCardID));
return;
}
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return;
//Find the specified model card //Find the specified model card
auto modelCardDatabase = connector()->getModelCardDatabase(); auto modelCardDatabase = connectorProject->getModelCardDatabase();
auto modelCard = modelCardDatabase->getCard(modelCardID); auto modelCard = modelCardDatabase->getCard(modelCardID);
if (!modelCard) { if (!modelCard) {
getBridge()->sendEvent("setModelError", getBridge()->sendEvent("setModelError",
@@ -57,26 +74,22 @@ void Send::run(const String& modelCardID) const {
std::make_unique<SendError>(connector()->getLocalString(errorString, accountNotFoundID), modelCardID)); std::make_unique<SendError>(connector()->getLocalString(errorString, accountNotFoundID), modelCardID));
return; return;
} }
//Get the active project //Get the selected elements from the modelcard
auto project = connector()->getActiveProject().lock();
if (!project) {
getBridge()->sendEvent("setModelError",
std::make_unique<SendError>(connector()->getLocalString(errorString, noProjectOpenID), modelCardID));
return;
}
//Get the selected elements
auto elementDatabase = project->getElementDatabase(); auto elementDatabase = project->getElementDatabase();
auto selected = elementDatabase->getSelection(); BIMRecordIDList selected{};
if (selected.empty()) { if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get()))
getBridge()->sendEvent("setModelError", selected = senderCard->getFilter().getElementIDs();
std::make_unique<SendError>(connector()->getLocalString(errorString, noSelectedModelItemsID), modelCardID));
return;
}
//Build a collection from the selected elements //Build a collection from the selected elements
auto collection = std::make_unique<ProjectCollection>(project); auto collection = std::make_unique<ProjectCollection>(project, modelCard->getID());
for (const auto& link : selected) { for (const auto& link : selected) {
if (auto element = elementDatabase->getElement(link); element) if (auto element = elementDatabase->getElement(link); element)
collection->addElement(*element); collection->addElement(*element);
else {
//Report failure to convert element
collection->logRecord(link, {ConversionReporter::Data::Status::failure, String{}, String{},
connector()->getLocalString(errorString, elementTypeNotConvertedID)}, false);
collection->incrementSkippedRecords();
}
} }
//Send the collected information //Send the collected information
auto result = std::make_unique<SendViaBrowserArgs>(*modelCard, *account, SendObject{std::move(collection)}); auto result = std::make_unique<SendViaBrowserArgs>(*modelCard, *account, SendObject{std::move(collection)});
@@ -5,6 +5,7 @@
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/ConnectorResource.h" #include "Connector/ConnectorResource.h"
#include "Connector/Database/ModelCardDatabase.h" #include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Speckle/Event/Type/ElementEvent.h" #include "Speckle/Event/Type/ElementEvent.h"
#include "Speckle/Record/Element/Element.h" #include "Speckle/Record/Element/Element.h"
#include "Speckle/Database/BIMElementDatabase.h" #include "Speckle/Database/BIMElementDatabase.h"
@@ -16,6 +17,7 @@
#include "Connector/Record/Model/Filter/SendFilter.h" #include "Connector/Record/Model/Filter/SendFilter.h"
using namespace speckle::database; using namespace speckle::database;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
using namespace speckle::utility; using namespace speckle::utility;
using namespace speckle::event; using namespace speckle::event;
@@ -30,22 +32,6 @@ SendBridge::SendBridge() : BrowserBridge{"sendBinding"} {
addMethod<GetSendFilters>(); addMethod<GetSendFilters>();
addMethod<GetSendSettings>(); addMethod<GetSendSettings>();
addMethod<Send>(); addMethod<Send>();
// POC: do we have a better place to attach observer to elements?
#ifdef ARCHICAD
auto project = connector()->getActiveProject().lock();
if (!project) {
// TODO: is this OK? should this throw?
return;
}
auto elementDatabase = project->getElementDatabase();
auto elements = elementDatabase->getElements();
ElementIDList elementIds;
for (const auto& id : elementIds) {
ACAPI_Element_AttachObserver(id);
}
#endif
} //SendBridge::SendBridge } //SendBridge::SendBridge
@@ -64,15 +50,18 @@ bool SendBridge::handle(const ElementEvent& event) {
m_changedElements.clear(); m_changedElements.clear();
break; break;
case end: { case end: {
auto modelCardDatabase = connector()->getModelCardDatabase(); auto project = connector()->getActiveProject().lock();
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return false;
auto modelCardDatabase = connectorProject->getModelCardDatabase();
auto modelCards = modelCardDatabase->getCards(); auto modelCards = modelCardDatabase->getCards();
// POC: this is probably not efficient, should test, review and refactor it // POC: this is probably not efficient, should test, review and refactor it
RecordIDList expiredModelCardIds; RecordIDList expiredModelCardIds;
for (const auto& modelCard : modelCards) { for (const auto& modelCard : modelCards) {
if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get())) { if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get()); senderCard) {
auto modelCardSelection = senderCard->getFilter().getElementIDs(); for (const auto& recordID : m_changedElements) {
for (const auto& elemId : modelCardSelection) { if (senderCard->contains(recordID)) {
if (std::find(m_changedElements.begin(), m_changedElements.end(), elemId) != m_changedElements.end()) {
expiredModelCardIds.push_back(modelCard->getID()); expiredModelCardIds.push_back(modelCard->getID());
break; break;
} }
@@ -86,12 +75,12 @@ bool SendBridge::handle(const ElementEvent& event) {
break; break;
} }
case changeElem: case editElem: case deleteElem: { case changeElem: case editElem: case deleteElem: {
if (event.getElmentID()) if (event.getElementID())
m_changedElements.push_back(*event.getElmentID()); m_changedElements.insert(*event.getElementID());
break; break;
} }
default: default:
break; break;
} }
return true; return false;
} //SendBridge::handle } //SendBridge::handle
@@ -31,6 +31,10 @@ namespace connector::interfac::browser::bridge {
@return True if the event should be closed @return True if the event should be closed
*/ */
bool handle(const speckle::event::ElementEvent& event) override; bool handle(const speckle::event::ElementEvent& event) override;
private:
///List of changed element IDs
speckle::database::BIMRecordIDList m_changedElements;
}; };
} }
@@ -11,6 +11,12 @@ using namespace active::event;
using namespace connector; using namespace connector;
using namespace speckle::event; using namespace speckle::event;
namespace {
auto connectorMenuItem = 1;
}
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Default constructor Default constructor
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
@@ -22,6 +28,35 @@ ConnectorMenu::ConnectorMenu()
} //ConnectorMenu::ConnectorMenu } //ConnectorMenu::ConnectorMenu
/*--------------------------------------------------------------------
Get the event subscription list
return: The subscription list (an empty list will put the subscriber into a suspended state)
--------------------------------------------------------------------*/
Subscriber::Subscription ConnectorMenu::subscription() const {
auto result = MenuSubscriber::subscription();
result.insert(reflectPaletteVisibilityID);
return result;
} //ConnectorMenu::subscription
/*--------------------------------------------------------------------
Receive a subscribed event
event: The incoming event
return: True if the event should be closed
--------------------------------------------------------------------*/
bool ConnectorMenu::receive(const active::event::Event& event) {
if (event != reflectPaletteVisibilityID)
return MenuSubscriber::receive(event);
//Set the menu checked state based on the palette visibility from the event
if (auto menuState = event.findValue(paletteVisibilityStateID); menuState != nullptr)
setMenuChecked(connectorMenuItem, menuState->boolVal());
return false;
} //ConnectorMenu::receive
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Handle the menu selection Handle the menu selection
@@ -12,6 +12,21 @@ namespace connector {
*/ */
ConnectorMenu(); ConnectorMenu();
/*!
Get the event subscription list
@return The subscription list (an empty list will put the subscriber into a suspended state)
*/
Subscription subscription() const override;
// MARK: - Functions (mutating)
/*!
Receive a subscribed event
@param event The incoming event
@return True if the event should be closed
*/
bool receive(const active::event::Event& event) override;
protected: protected:
/*! /*!
Handle the menu selection Handle the menu selection
@@ -1,20 +1,23 @@
#include "Connector/Interface/ConnectorPalette.h" #include "Connector/Interface/ConnectorPalette.h"
#include "Active/Event/Event.h" #include "Active/Event/Event.h"
#include "Active/Utility/String.h" #include "Active/Setting/ValueSetting.h"
#include "Active/Serialise/JSON/JSONTransport.h" #include "Active/Serialise/JSON/JSONTransport.h"
#include "Active/Utility/BufferOut.h" #include "Active/Utility/BufferOut.h"
#include "Active/Utility/String.h"
#include "Connector/Connector.h" #include "Connector/Connector.h"
#include "Connector/ConnectorResource.h" #include "Connector/ConnectorResource.h"
#include "Connector/Event/ConnectorEventID.h" #include "Connector/Event/ConnectorEventID.h"
#include "Connector/Interface/Browser/Bridge/Account/AccountBridge.h" #include "Connector/Interface/Browser/Bridge/Account/AccountBridge.h"
#include "Connector/Interface/Browser/Bridge/Base/BaseBridge.h" #include "Connector/Interface/Browser/Bridge/Base/BaseBridge.h"
#include "Connector/Interface/Browser/Bridge/Config/ConfigBridge.h" #include "Connector/Interface/Browser/Bridge/Config/ConfigBridge.h"
#include "Connector/Interface/Browser/Bridge/Receive/ReceiveBridge.h"
#include "Connector/Interface/Browser/Bridge/Send/SendBridge.h" #include "Connector/Interface/Browser/Bridge/Send/SendBridge.h"
#include "Connector/Interface/Browser/Bridge/Selection/SelectionBridge.h" #include "Connector/Interface/Browser/Bridge/Selection/SelectionBridge.h"
#include "Connector/Interface/Browser/Bridge/Test/TestBridge.h" #include "Connector/Interface/Browser/Bridge/Test/TestBridge.h"
#include "Speckle/Environment/Addon.h" #include "Speckle/Environment/Addon.h"
#include "Speckle/Event/Type/MenuEvent.h" #include "Speckle/Event/Type/MenuEvent.h"
#include "Speckle/Event/Type/ProjectEvent.h"
#include "Speckle/Interface/Browser/JSPortal.h" #include "Speckle/Interface/Browser/JSPortal.h"
#include <ACAPinc.h> #include <ACAPinc.h>
@@ -23,6 +26,7 @@
using namespace active::environment; using namespace active::environment;
using namespace active::event; using namespace active::event;
using namespace active::setting;
using namespace connector; using namespace connector;
using namespace speckle::interfac::browser; using namespace speckle::interfac::browser;
using namespace connector::interfac::browser::bridge; using namespace connector::interfac::browser::bridge;
@@ -73,7 +77,7 @@ namespace {
std::shared_ptr<DG::Browser> browser; std::shared_ptr<DG::Browser> browser;
void InitBrowserControl(); void InitBrowserControl();
void SetMenuItemCheckedState(bool); void publshVisibilityChange(bool);
virtual void PanelResized(const DG::PanelResizeEvent& ev) override; virtual void PanelResized(const DG::PanelResizeEvent& ev) override;
virtual void PanelCloseRequested(const DG::PanelCloseRequestEvent& ev, bool* accepted) override; virtual void PanelCloseRequested(const DG::PanelCloseRequestEvent& ev, bool* accepted) override;
@@ -108,7 +112,9 @@ ConnectorPalette::ConnectorPalette() {
return: The subscription list (an empty list will put the subscriber into a suspended state) return: The subscription list (an empty list will put the subscriber into a suspended state)
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
ConnectorPalette::Subscription ConnectorPalette::subscription() const { ConnectorPalette::Subscription ConnectorPalette::subscription() const {
return { {toggleConnectorPaletteID} }; auto result = ProjectSubscriber::subscription();
result.insert(toggleConnectorPaletteID);
return result;
} //ConnectorPalette::subscription } //ConnectorPalette::subscription
@@ -130,16 +136,48 @@ bool ConnectorPalette::start() {
return: True if the event should be closed return: True if the event should be closed
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
bool ConnectorPalette::receive(const active::event::Event& event) { bool ConnectorPalette::receive(const active::event::Event& event) {
if (event == toggleConnectorPaletteID) {
if (BrowserPalette::HasInstance() && BrowserPalette::GetInstance().IsVisible()) { if (BrowserPalette::HasInstance() && BrowserPalette::GetInstance().IsVisible()) {
BrowserPalette::GetInstance().Hide(); BrowserPalette::GetInstance().Hide();
} else { }
else {
if (!BrowserPalette::HasInstance()) if (!BrowserPalette::HasInstance())
BrowserPalette::CreateInstance(); BrowserPalette::CreateInstance();
BrowserPalette::GetInstance().Show(); BrowserPalette::GetInstance().Show();
} }
return true; return true;
}
return ProjectSubscriber::receive(event);
} //ConnectorPalette::receive } //ConnectorPalette::receive
/*--------------------------------------------------------------------
Handle a project event
event: The project event
return: True if the event should be closed
--------------------------------------------------------------------*/
bool ConnectorPalette::handle(const speckle::event::ProjectEvent& event) {
using enum speckle::event::ProjectEvent::Type;
switch (event.getType()) {
case open: {
if (BrowserPalette::HasInstance() && !BrowserPalette::GetInstance().IsVisible()) {
BrowserPalette::GetInstance().Show();
BrowserPalette::GetInstance().EnableItems();
}
} break;
case close: {
if (BrowserPalette::HasInstance() && BrowserPalette::GetInstance().IsVisible()) {
BrowserPalette::GetInstance().Hide();
}
} break;
default:
break;
}
return false;
} //ConnectorPalette::handle
//NB: Following is placeholder from GS example code - will be refactored to better suit our purposes //NB: Following is placeholder from GS example code - will be refactored to better suit our purposes
@@ -161,34 +199,34 @@ static GSErrCode __ACENV_CALL NotificationHandler(API_NotifyEventID notifID, Int
BrowserPalette::BrowserPalette() : BrowserPalette::BrowserPalette() :
DG::Palette(ACAPI_GetOwnResModule(), BrowserPaletteResId, ACAPI_GetOwnResModule(), paletteGuid) { DG::Palette(ACAPI_GetOwnResModule(), BrowserPaletteResId, ACAPI_GetOwnResModule(), paletteGuid) {
browser = std::make_shared<DG::Browser>(GetReference(), BrowserId); browser = std::make_shared<DG::Browser>(GetReference(), BrowserId);
#ifdef ServerMainVers_2700
ACAPI_ProjectOperation_CatchProjectEvent(APINotify_Quit, NotificationHandler); ACAPI_ProjectOperation_CatchProjectEvent(APINotify_Quit, NotificationHandler);
#else
ACAPI_Notify_CatchProjectEvent(APINotify_Quit, NotificationHandler);
#endif
Attach(*this); Attach(*this);
BeginEventProcessing(); BeginEventProcessing();
//Install required connector bridges //Install required connector bridges
install<AccountBridge>(); install<AccountBridge>();
if (auto ref = install<BaseBridge>(); ref) { if (auto ref = install<BaseBridge>(); ref) {
if (auto baseBridgeRef = std::dynamic_pointer_cast<BaseBridge>(ref); baseBridgeRef) { if (auto baseBridgeRef = std::dynamic_pointer_cast<BaseBridge>(ref); baseBridgeRef) {
connector::connector()->addWeak(baseBridgeRef); connector::connector()->addWeak(baseBridgeRef);
} }
} }
install<ConfigBridge>(); install<ConfigBridge>();
install<ReceiveBridge>();
if (auto ref = install<SendBridge>(); ref) { if (auto ref = install<SendBridge>(); ref) {
if (auto sendBridgeRef = std::dynamic_pointer_cast<SendBridge>(ref); sendBridgeRef) { if (auto sendBridgeRef = std::dynamic_pointer_cast<SendBridge>(ref); sendBridgeRef) {
connector::connector()->addWeak(sendBridgeRef); connector::connector()->addWeak(sendBridgeRef);
sendBridgeRef->start(); sendBridgeRef->start();
} }
} }
if (auto ref = install<SelectionBridge>(); ref) { if (auto ref = install<SelectionBridge>(); ref) {
if (auto selectionBridgeRef = std::dynamic_pointer_cast<SelectionBridge>(ref); selectionBridgeRef) { if (auto selectionBridgeRef = std::dynamic_pointer_cast<SelectionBridge>(ref); selectionBridgeRef) {
connector::connector()->addWeak(selectionBridgeRef); connector::connector()->addWeak(selectionBridgeRef);
selectionBridgeRef->start(); selectionBridgeRef->start();
} }
} }
install<TestBridge>(); install<TestBridge>();
InitBrowserControl(); InitBrowserControl();
} }
@@ -218,37 +256,27 @@ void BrowserPalette::DestroyInstance() {
void BrowserPalette::Show() { void BrowserPalette::Show() {
DG::Palette::Show(); DG::Palette::Show();
SetMenuItemCheckedState(true); publshVisibilityChange(true);
} }
void BrowserPalette::Hide() { void BrowserPalette::Hide() {
DG::Palette::Hide(); DG::Palette::Hide();
SetMenuItemCheckedState(false); publshVisibilityChange(false);
} }
void BrowserPalette::InitBrowserControl() { void BrowserPalette::InitBrowserControl() {
#ifdef TESTING_MODE #ifdef TESTING_MODE
browser->LoadURL("https://deploy-preview-3180--boisterous-douhua-e3cefb.netlify.app/");
//browser->LoadURL("https://boisterous-douhua-e3cefb.netlify.app/test"); //browser->LoadURL("https://boisterous-douhua-e3cefb.netlify.app/test");
browser->LoadURL("https://boisterous-douhua-e3cefb.netlify.app");
#else #else
browser->LoadURL("https://boisterous-douhua-e3cefb.netlify.app/"); browser->LoadURL("https://boisterous-douhua-e3cefb.netlify.app/");
#endif #endif
} }
void BrowserPalette::SetMenuItemCheckedState(bool isChecked) { void BrowserPalette::publshVisibilityChange(bool isChecked) {
API_MenuItemRef itemRef = {}; //Signal that the palette visibility has changed
GSFlags itemFlags = {}; app()->publish(Event{reflectPaletteVisibilityID, { ValueSetting{isChecked, paletteVisibilityStateID} }});
itemRef.menuResID = BrowserPaletteMenuResId;
itemRef.itemIndex = BrowserPaletteMenuItemIndex;
ACAPI_MenuItem_GetMenuItemFlags(&itemRef, &itemFlags);
if(isChecked)
itemFlags |= API_MenuItemChecked;
else
itemFlags &= ~API_MenuItemChecked;
ACAPI_MenuItem_SetMenuItemFlags(&itemRef, &itemFlags);
} }
void BrowserPalette::PanelResized(const DG::PanelResizeEvent& ev) { void BrowserPalette::PanelResized(const DG::PanelResizeEvent& ev) {
@@ -283,17 +311,9 @@ GSErrCode __ACENV_CALL BrowserPalette::PaletteControlCallBack(Int32, API_Palette
case APIPalMsg_HidePalette_End: case APIPalMsg_HidePalette_End:
if(HasInstance() && !GetInstance().IsVisible()) if(HasInstance() && !GetInstance().IsVisible())
{
GetInstance().Show(); GetInstance().Show();
break; }
case APIPalMsg_DisableItems_Begin:
if(HasInstance() && GetInstance().IsVisible())
GetInstance().DisableItems();
break;
case APIPalMsg_DisableItems_End:
if(HasInstance() && GetInstance().IsVisible())
GetInstance().EnableItems();
break; break;
case APIPalMsg_IsPaletteVisible: case APIPalMsg_IsPaletteVisible:
@@ -2,10 +2,11 @@
#define CONNECTOR_CONNECTOR_PALETTE #define CONNECTOR_CONNECTOR_PALETTE
#include "Active/Event/Subscriber.h" #include "Active/Event/Subscriber.h"
#include "Speckle/Event/Subscriber/ProjectSubscriber.h"
namespace connector { namespace connector {
class ConnectorPalette : public active::event::Subscriber { class ConnectorPalette : public speckle::event::ProjectSubscriber {
public: public:
/*! /*!
Default constructor Default constructor
@@ -32,6 +33,13 @@ namespace connector {
@return True if the event should be closed @return True if the event should be closed
*/ */
bool receive(const active::event::Event& event) override; bool receive(const active::event::Event& event) override;
protected:
/*!
Handle the project events
@param event The project event
@return True if the event should be closed
*/
bool handle(const speckle::event::ProjectEvent& event) override;
}; };
} }
@@ -12,6 +12,8 @@
#include "Speckle/Record/Attribute/Finish.h" #include "Speckle/Record/Attribute/Finish.h"
#include "Speckle/Record/Element/Element.h" #include "Speckle/Record/Element/Element.h"
#include <limits>
#ifdef ARCHICAD #ifdef ARCHICAD
#include <ACAPinc.h> #include <ACAPinc.h>
#include <ModelMaterial.hpp> #include <ModelMaterial.hpp>
@@ -49,9 +51,12 @@ namespace {
Constructor Constructor
project: The source project project: The source project
modelCardID: The model card ID for the send operation
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
ProjectCollection::ProjectCollection(speckle::environment::Project::Shared project) : base{project->getInfo().name, project}, ProjectCollection::ProjectCollection(speckle::environment::Project::Shared project, const RecordID& modelCardID) :
m_management{std::make_unique<Management>()} { base{project->getInfo().name, project}, ConversionReporter{modelCardID}, m_management {
std::make_unique<Management>()
} {
m_management->push_back(this); m_management->push_back(this);
m_finishes = std::make_unique<FinishCache>(); m_finishes = std::make_unique<FinishCache>();
base::useManagement(m_management.get()); base::useManagement(m_management.get());
@@ -103,7 +108,10 @@ bool ProjectCollection::addElement(const speckle::record::element::Element& elem
RecordCollection* collection = this; RecordCollection* collection = this;
for (const auto& childName : collectionNames) for (const auto& childName : collectionNames)
collection = collection->getChild(childName); collection = collection->getChild(childName);
return collection->addIndex(BIMIndex{element.getBIMID(), element.getTableID()}); if (!collection->addIndex(BIMIndex{element.getBIMID(), element.getTableID()}))
return false;
incrementProjectedRecords();
return true;
} //ProjectCollection::addElement } //ProjectCollection::addElement
@@ -115,15 +123,14 @@ bool ProjectCollection::addElement(const speckle::record::element::Element& elem
return: True if the material proxy was added (false typically means the record already exists) return: True if the material proxy was added (false typically means the record already exists)
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
bool ProjectCollection::addMaterialProxy(const speckle::database::BIMIndex& materialIndex, const speckle::database::BIMRecordID& objectID) { bool ProjectCollection::addFinishProxy(const speckle::database::BIMIndex& materialIndex, const speckle::database::BIMRecordID& objectID) {
auto iter = m_finishProxies.find(materialIndex); auto iter = m_finishProxies.find(materialIndex);
if (iter == m_finishProxies.end()) if (iter == m_finishProxies.end())
iter = m_finishProxies.insert({materialIndex, {}}).first; iter = m_finishProxies.insert({materialIndex, {}}).first;
return iter->second.insert(objectID).second; return iter->second.insert(objectID).second;
} //ProjectCollection::addMaterialProxy } //ProjectCollection::addFinishProxy
#ifdef ARCHICAD
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Add a ModelerAPI material to the collection (NB: These are not persistent so need to be captured by this method) Add a ModelerAPI material to the collection (NB: These are not persistent so need to be captured by this method)
@@ -132,13 +139,12 @@ bool ProjectCollection::addMaterialProxy(const speckle::database::BIMIndex& mate
return: True if the material proxy was added (false typically means the record already exists) return: True if the material proxy was added (false typically means the record already exists)
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
bool ProjectCollection::addMaterialProxy(const Finish& finish, const speckle::database::BIMRecordID& objectID) { bool ProjectCollection::addFinishProxy(const Finish& finish, const speckle::database::BIMRecordID& objectID) {
auto iter = m_finishes->find(finish.getBIMID()); auto iter = m_finishes->find(finish.getBIMID());
if (iter == m_finishes->end()) if (iter == m_finishes->end())
iter = m_finishes->insert({finish.getBIMID(), finish}).first; iter = m_finishes->insert({finish.getBIMID(), finish}).first;
return addMaterialProxy(speckle::database::BIMIndex{finish.getBIMID()}, objectID); return addFinishProxy(speckle::database::BIMIndex{finish.getBIMID()}, objectID);
} //ProjectCollection::addMaterialProxy } //ProjectCollection::addFinishProxy
#endif
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
@@ -153,7 +159,7 @@ bool ProjectCollection::fillInventory(active::serialise::Inventory& inventory) c
base::fillInventory(inventory); base::fillInventory(inventory);
inventory.merge(Inventory{ inventory.merge(Inventory{
{ {
{ Identity{fieldID[finishProxyID]}, finishProxyID, 100, std::nullopt }, { Identity{fieldID[finishProxyID]}, finishProxyID, std::numeric_limits<size_t>::max(), std::nullopt },
}, },
}.withType(&typeid(ProjectCollection))); }.withType(&typeid(ProjectCollection)));
return true; return true;
@@ -3,6 +3,7 @@
#include "Connector/Record/Collection/RecordCollection.h" #include "Connector/Record/Collection/RecordCollection.h"
#include "Speckle/Serialise/Collection/FinishCollector.h" #include "Speckle/Serialise/Collection/FinishCollector.h"
#include "Speckle/Serialise/Collection/ConversionReporter.h"
#include <stack> #include <stack>
@@ -25,7 +26,7 @@ namespace connector::record {
- Other attributes, e.g. materials - Other attributes, e.g. materials
Add all this supplementary data to the root container as required Add all this supplementary data to the root container as required
*/ */
class ProjectCollection : public RecordCollection, public speckle::serialise::FinishCollector { class ProjectCollection : public RecordCollection, public speckle::serialise::FinishCollector, public speckle::serialise::ConversionReporter {
public: public:
// MARK: - Types // MARK: - Types
@@ -37,8 +38,9 @@ namespace connector::record {
/*! /*!
Constructor Constructor
@param project The source project @param project The source project
@param modelCardID The model card ID for the send operation
*/ */
ProjectCollection(speckle::environment::Project::Shared project); ProjectCollection(speckle::environment::Project::Shared project, const speckle::database::RecordID& modelCardID);
ProjectCollection(const ProjectCollection&) = delete; ProjectCollection(const ProjectCollection&) = delete;
/*! /*!
Destructor Destructor
@@ -69,14 +71,14 @@ namespace connector::record {
@param objectID The object the material is applied to @param objectID The object the material is applied to
@return True if the material proxy was added (false typically means the record already exists) @return True if the material proxy was added (false typically means the record already exists)
*/ */
bool addMaterialProxy(const speckle::database::BIMIndex& materialIndex, const speckle::database::BIMRecordID& objectID) override; bool addFinishProxy(const speckle::database::BIMIndex& materialIndex, const speckle::database::BIMRecordID& objectID) override;
/*! /*!
Add a ModelerAPI material to the collection (NB: These are not persistent so need to be captured by this method) Add a ModelerAPI material to the collection (NB: These are not persistent so need to be captured by this method)
@param finish A finish @param finish A finish
@param objectID The object the material is applied to @param objectID The object the material is applied to
@return True if the material proxy was added (false typically means the record already exists) @return True if the material proxy was added (false typically means the record already exists)
*/ */
bool addMaterialProxy(const speckle::record::attribute::Finish& finish, const speckle::database::BIMRecordID& objectID) override; bool addFinishProxy(const speckle::record::attribute::Finish& finish, const speckle::database::BIMRecordID& objectID) override;
// MARK: - Serialisation // MARK: - Serialisation
@@ -56,7 +56,7 @@ Cargo::Unique DirectSelectionSendFilter::getCargo(const Inventory::Item& item) c
using namespace active::serialise; using namespace active::serialise;
switch (item.index) { switch (item.index) {
case selectedElemID: case selectedElemID:
return std::make_unique<ContainerWrap<ElementIDList>>(m_selectedElements, false, fieldID[selectedElemID].name); return std::make_unique<ContainerWrap<BIMRecordIDList>>(m_selectedElements, false, fieldID[selectedElemID].name);
default: default:
return nullptr; //Requested an unknown index return nullptr; //Requested an unknown index
} }
@@ -32,11 +32,17 @@ namespace connector::record {
// MARK: - Functions (const) // MARK: - Functions (const)
/*!
Determine if the send filter contains a specified record ID
@param recordID The record ID to search for
@return True if the filter contains the record ID
*/
virtual bool contains(const speckle::database::BIMRecordID& recordID) const override { return m_selectedElements.contains(recordID); }
/*! /*!
Get the filtered element IDs Get the filtered element IDs
@return The filter elements @return The filter elements
*/ */
const speckle::database::ElementIDList& getElementIDs() const override { return m_selectedElements; } const speckle::database::BIMRecordIDList& getElementIDs() const override { return m_selectedElements; }
// MARK: - Serialisation // MARK: - Serialisation
@@ -59,7 +65,7 @@ namespace connector::record {
private: private:
///A list of selected element IDs ///A list of selected element IDs
speckle::database::ElementIDList m_selectedElements; speckle::database::BIMRecordIDList m_selectedElements;
}; };
} }
@@ -58,7 +58,7 @@ Cargo::Unique EverythingSendFilter::getCargo(const Inventory::Item& item) const
using namespace active::serialise; using namespace active::serialise;
switch (item.index) { switch (item.index) {
case selectedElemID: case selectedElemID:
return std::make_unique<ContainerWrap<ElementIDList>>(m_emptyList); return std::make_unique<ContainerWrap<BIMRecordIDList>>(m_emptyList);
default: default:
return nullptr; //Requested an unknown index return nullptr; //Requested an unknown index
} }
@@ -32,17 +32,23 @@ namespace connector::record {
// MARK: - Functions (const) // MARK: - Functions (const)
/*!
Determine if the send filter contains a specified record ID
@param recordID The record ID to search for
@return True if the filter contains the record ID
*/
virtual bool contains(const speckle::database::BIMRecordID& recordID) const override { return true; }
/*! /*!
Get the filtered element IDs Get the filtered element IDs
@return The filter elements @return The filter elements
*/ */
const speckle::database::ElementIDList& getElementIDs() const override { return m_emptyList; } const speckle::database::BIMRecordIDList& getElementIDs() const override { return m_emptyList; }
/*! /*!
Determine if the filter has expired because an element in the selection has changed Determine if the filter has expired because an element in the selection has changed
@param changed The list of changed element IDs @param changed The list of changed element IDs
@return True if the one of the changed elements is in the selection @return True if the one of the changed elements is in the selection
*/ */
virtual bool checkExpiry(const speckle::database::ElementIDList& changed) const override { return true; } virtual bool checkExpiry(const speckle::database::BIMRecordIDList& changed) const override { return true; }
// MARK: - Serialisation // MARK: - Serialisation
@@ -65,7 +71,7 @@ namespace connector::record {
private: private:
///Enables a const empty list to be returned ///Enables a const empty list to be returned
speckle::database::ElementIDList m_emptyList; speckle::database::BIMRecordIDList m_emptyList;
}; };
} }
@@ -34,12 +34,10 @@ namespace {
return: True if the one of the changed elements is in the selection return: True if the one of the changed elements is in the selection
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
bool SendFilter::checkExpiry(const ElementIDList& changed) const { bool SendFilter::checkExpiry(const BIMRecordIDList& changed) const {
ElementIDList intersect; BIMRecordIDList intersect;
ElementIDList mine{getElementIDs()}, theirs{changed}; BIMRecordIDList mine{getElementIDs()}, theirs{changed};
std::sort(mine.begin(), mine.end()); std::set_intersection(mine.begin(), mine.end(), theirs.begin(), theirs.end(), std::inserter(intersect, intersect.begin()));
std::sort(theirs.begin(), theirs.end());
std::set_intersection (mine.begin(), mine.end(), theirs.begin(), theirs.end(), std::back_inserter(intersect));
return !intersect.empty(); return !intersect.empty();
} //SendFilter::checkExpiry } //SendFilter::checkExpiry
@@ -4,6 +4,7 @@
#include "Active/Serialise/Package/Package.h" #include "Active/Serialise/Package/Package.h"
#include "Active/Utility/Cloner.h" #include "Active/Utility/Cloner.h"
#include "Speckle/Database/Identity/RecordID.h" #include "Speckle/Database/Identity/RecordID.h"
#include "Speckle/Database/Identity/BIMRecordID.h"
#include "Speckle/Utility/String.h" #include "Speckle/Utility/String.h"
namespace connector::record { namespace connector::record {
@@ -55,17 +56,23 @@ namespace connector::record {
@return True if this is the default filter @return True if this is the default filter
*/ */
bool isDefault() const { return m_isDefault; }; bool isDefault() const { return m_isDefault; };
/*!
Determine if the send filter contains a specified record ID
@param recordID The record ID to search for
@return True if the filter contains the record ID
*/
virtual bool contains(const speckle::database::BIMRecordID& recordID) const = 0;
/*! /*!
Get the filtered element IDs Get the filtered element IDs
@return The filter elements @return The filter elements
*/ */
virtual const speckle::database::ElementIDList& getElementIDs() const = 0; virtual const speckle::database::BIMRecordIDList& getElementIDs() const = 0;
/*! /*!
Determine if the filter has expired because an element in the selection has changed Determine if the filter has expired because an element in the selection has changed
@param changed The list of changed element IDs @param changed The list of changed element IDs
@return True if the one of the changed elements is in the selection @return True if the one of the changed elements is in the selection
*/ */
virtual bool checkExpiry(const speckle::database::ElementIDList& changed) const; virtual bool checkExpiry(const speckle::database::BIMRecordIDList& changed) const;
// MARK: - Serialisation // MARK: - Serialisation
@@ -2,6 +2,7 @@
#include "Active/Serialise/Item/Wrapper/ValueWrap.h" #include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h" #include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Speckle/Database/Identity/BIMRecordID.h"
#include <array> #include <array>
@@ -81,7 +82,7 @@ Cargo::Unique ReceiverModelCard::getCargo(const Inventory::Item& item) const {
case warningDismissedID: case warningDismissedID:
return std::make_unique<BoolWrap>(m_hasDismissedUpdateWarning); return std::make_unique<BoolWrap>(m_hasDismissedUpdateWarning);
case bakedObjectsID: case bakedObjectsID:
return std::make_unique<ContainerWrap<ElementIDList>>(m_bakedObjectIDs); return std::make_unique<ContainerWrap<BIMRecordIDList>>(m_bakedObjectIDs);
default: default:
return nullptr; //Requested an unknown index return nullptr; //Requested an unknown index
} }
@@ -1,7 +1,7 @@
#ifndef CONNECTOR_RECORD_RECEIVER_MODEL_CARD #ifndef CONNECTOR_RECORD_RECEIVER_MODEL_CARD
#define CONNECTOR_RECORD_RECEIVER_MODEL_CARD #define CONNECTOR_RECORD_RECEIVER_MODEL_CARD
#include "Speckle/Database/Identity/RecordID.h" #include "Speckle/Database/Identity/BIMRecordID.h"
#include "Connector/Record/Model/ModelCard.h" #include "Connector/Record/Model/ModelCard.h"
namespace connector::record { namespace connector::record {
@@ -37,7 +37,7 @@ namespace connector::record {
const speckle::database::RecordID& modelID, const speckle::utility::String& modelName, const speckle::database::RecordID& modelID, const speckle::utility::String& modelName,
const speckle::database::RecordID& selectedVersion, const speckle::database::RecordID& latestVersion, const speckle::database::RecordID& selectedVersion, const speckle::database::RecordID& latestVersion,
const speckle::database::RecordID& accountID, const speckle::utility::String& serverURL, const speckle::database::RecordID& accountID, const speckle::utility::String& serverURL,
bool hasDimissedWarning, speckle::database::ElementIDList&& bakedObjects, const SettingList& settings) : bool hasDimissedWarning, speckle::database::BIMRecordIDList&& bakedObjects, const SettingList& settings) :
ModelCard{modelID, projectID, accountID, serverURL, settings}, ModelCard{modelID, projectID, accountID, serverURL, settings},
m_projectName{projectName}, m_modelName{modelName}, m_selectedVersionID{selectedVersion}, m_latestVersionID{latestVersion}, m_projectName{projectName}, m_modelName{modelName}, m_selectedVersionID{selectedVersion}, m_latestVersionID{latestVersion},
m_hasDismissedUpdateWarning{hasDimissedWarning}, m_bakedObjectIDs{bakedObjects} {} m_hasDismissedUpdateWarning{hasDimissedWarning}, m_bakedObjectIDs{bakedObjects} {}
@@ -78,7 +78,7 @@ namespace connector::record {
Get the IDs of objects accepted in the receive Get the IDs of objects accepted in the receive
@return The accepted object IDs @return The accepted object IDs
*/ */
const speckle::database::ElementIDList& getBakedObjectIDs() const { return m_bakedObjectIDs; } const speckle::database::BIMRecordIDList& getBakedObjectIDs() const { return m_bakedObjectIDs; }
// MARK: - Serialisation // MARK: - Serialisation
@@ -111,7 +111,7 @@ namespace connector::record {
///True if the user has already dismissed an alert to update ///True if the user has already dismissed an alert to update
bool m_hasDismissedUpdateWarning = false; bool m_hasDismissedUpdateWarning = false;
///IDs of objects accepted in the receive ///IDs of objects accepted in the receive
speckle::database::ElementIDList m_bakedObjectIDs; speckle::database::BIMRecordIDList m_bakedObjectIDs;
}; };
} }
@@ -61,6 +61,18 @@ SenderModelCard::~SenderModelCard() {
} //SenderModelCard::~SenderModelCard } //SenderModelCard::~SenderModelCard
/*--------------------------------------------------------------------
Determine if the send filter contains a specified record ID
recordID: The record ID to search for
return: True if the filter contains the record ID
--------------------------------------------------------------------*/
bool SenderModelCard::contains(const speckle::database::BIMRecordID& recordID) const {
return m_filter->contains(recordID);
} //SenderModelCard::contains
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Fill an inventory with the package items Fill an inventory with the package items
@@ -2,6 +2,7 @@
#define CONNECTOR_RECORD_SENDER_MODEL_CARD #define CONNECTOR_RECORD_SENDER_MODEL_CARD
#include "Connector/Record/Model/ModelCard.h" #include "Connector/Record/Model/ModelCard.h"
#include "Speckle/Database/Identity/BIMRecordID.h"
namespace connector::record { namespace connector::record {
@@ -46,6 +47,12 @@ namespace connector::record {
// MARK: - Functions (const) // MARK: - Functions (const)
/*!
Determine if the send filter contains a specified record ID
@param recordID The record ID to search for
@return True if the filter contains the record ID
*/
bool contains(const speckle::database::BIMRecordID& recordID) const;
/*! /*!
Get the filter applied when the model was sent Get the filter applied when the model was sent
@return The model filter @return The model filter
@@ -0,0 +1,123 @@
#include "Connector/Tool/ElementHighlighter.h"
#include "Active/Database/Transaction.h"
#include "Active/Event/Event.h"
#include "Connector/Connector.h"
#include "Connector/ConnectorResource.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Event/ConnectorEventID.h"
#include "Speckle/Database/BIMAttributeDatabase.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Database/Identity/BIMLink.h"
#include "Speckle/Environment/Host.h"
#include "Speckle/Record/Filter/ElementVisibilityCollector.h"
#include "Speckle/Utility/Guid.h"
using namespace active::database;
using namespace active::event;
using namespace active::setting;
using namespace connector;
using namespace connector::environment;
using namespace speckle::database;
using namespace speckle::environment;
using namespace speckle::record;
using namespace speckle::utility;
namespace {
/*!
Transaction to make a selection of layers visible
*/
class ShowLayers : public Transaction {
public:
/*!
Constructor
@param project The target project
@param layers The layers in the project to be made visible
*/
ShowLayers(Project::Shared project, ElementVisibilityCollector::Layers& layers) :
Transaction{connector::connector()->getLocalString(titleString, showLayersID)}, m_project{project}, m_layers{layers} {}
protected:
//MARK: - Functions (App management)
/*!
Perform the transaction. Database writes can be performed. NB: this function is not called if the prepare phase was unsuccessful)
@return True if the transaction was successfully performed
*/
bool perform() override {
auto attributeDatabase = m_project->getAttributeDatabase();
for (auto& layer : m_layers) {
if (layer.second.isHidden()) {
layer.second.setHidden(false);
attributeDatabase->write(layer.second);
}
}
return true;
}
private:
///The target project for showing layers
Project::Shared m_project;
///The layers to be made visible
ElementVisibilityCollector::Layers& m_layers;
};
}
/*--------------------------------------------------------------------
Get the event subscription list
return: The subscription list (an empty list will put the subscriber into a suspended state)
--------------------------------------------------------------------*/
Subscriber::Subscription ElementHighlighter::subscription() const {
return Subscription{setElementHighlight};
} //ElementHighlighter::subscription
/*--------------------------------------------------------------------
Receive a subscribed event
event: The incoming event
return: True if the event should be closed
--------------------------------------------------------------------*/
bool ElementHighlighter::receive(const active::event::Event& event) {
//Collect the IDs of elements to be highlighted
ValueSetting* elementIDs = nullptr;
if (elementIDs = event.findValue(recordLinks); elementIDs == nullptr)
return false;
BIMLinkList elementSelection;
for (const auto& value : *elementIDs)
if (Guid guid{value->operator active::utility::Guid()}; guid)
elementSelection.emplace_back(guid);
if (elementSelection.empty())
return false;
auto project = connector()->getActiveProject().lock();
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return false;
auto elementDatabase = project->getElementDatabase();
//Collect the layers assigned to the model card elements
ElementVisibilityCollector collector;
BIMElementDatabase::Filter filter = [&collector](const speckle::record::element::Element& elem) { return collector(elem); };
elementDatabase->findElements(&filter, elementSelection);
//If any collected layers are hidden, the useer is prompted to show them (otherwise they may see nothing happen when a model card is clicked)
for (const auto& layer : collector.getLayers()) {
if (layer.second.isHidden()) {
//If a hidden layer is found, ask the user before taking any action
if (host()->displayConfirmation(addon()->getLocalString(notifyString, showHiddenLayersID))) {
//Run a transaction to ensure all layers are visible
ShowLayers showLayers{project, collector.getLayers()};
connector()->makeTransaction(showLayers);
}
break;
}
}
host()->makeModelViewActive();
elementDatabase->clearSelection();
elementDatabase->setSelection(elementSelection);
host()->zoomToFit(true);
return false;
} //ElementHighlighter::receive
@@ -0,0 +1,28 @@
#ifndef CONNECTOR_ELEMENT_HIGHLIGHTER
#define CONNECTOR_ELEMENT_HIGHLIGHTER
#include "Active/Event/Subscriber.h"
namespace connector {
class ElementHighlighter : public active::event::Subscriber {
public:
/*!
Get the event subscription list
@return The subscription list (an empty list will put the subscriber into a suspended state)
*/
Subscription subscription() const override;
// MARK: - Functions (mutating)
/*!
Receive a subscribed event
@param event The incoming event
@return True if the event should be closed
*/
bool receive(const active::event::Event& event) override;
};
}
#endif //CONNECTOR_ELEMENT_HIGHLIGHTER
@@ -0,0 +1,43 @@
#include "ActiveLibDoctest/TestingPlatforms.h"
#include "Connector/Record/Model/CardMover.h"
#include "Connector/Record/Model/ModelCard.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/JSON/JSONTransport.h"
#include "Active/Utility/BufferIn.h"
#include "Speckle/Utility/String.h"
namespace {
speckle::utility::String json{"{\n\
\"typeDiscriminator\": \"SenderModelCard\",\n\
\"modelCardId\": \"8a007ac08b43771ec20d\",\n\
\"modelId\": \"c9b5a4fa94\",\n\
\"projectId\": \"ce9a0d130e\",\n\
\"workspaceId\": \"10ee1c0f73\",\n\
\"accountId\": \"5724C96F3FF796628292B6E67E86CC2F\",\n\
\"serverUrl\": \"https://app.speckle.systems\",\n\
\"expired\": false,\n\
\"sendFilter\": {\n\
\"typeDiscriminator\": \"ArchicadSelectionFilter\",\n\
\"selectedObjectIds\": [\n\
\"7B531D03-0219-420F-BE86-633451AEF19B\"\n\
],\n\
\"name\": \"Selection\",\n\
\"summary\": \"1 objects selected.\"\n\
}\n\
}"};
}
using namespace speckle::utility;
TEST_SUITE(TESTQ(ModelCardSerialiseTest)) TEST_SUITE_OPEN
///Test for deserialising a ModelCard
TEST_CASE(TESTQ(deserialiseModelCard)) {
using CardHold = active::serialise::CargoHold<connector::record::CardMover, connector::record::ModelCard>;
CardHold result;
active::serialise::json::JSONTransport().receive(std::forward<CardHold&&>(result), active::serialise::Identity{}, json);
}
TEST_SUITE_CLOSE
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<HEADER_PATH_7>$(SolutionDir)RINT.$(BIM_PLATFORM)/$(LOCALISATION_SUFFIX)</HEADER_PATH_7>
<WORD_SIZE>64</WORD_SIZE>
<BASE_NAME>Speckle Connector</BASE_NAME>
<DISPLAY_NAME>$(BASE_NAME)</DISPLAY_NAME>
<WRAPPER_EXTENSION>apx</WRAPPER_EXTENSION>
<LOCALISATION_SUFFIX>EN-GB</LOCALISATION_SUFFIX>
<EXEC_PATH>$(BIM_PATH)</EXEC_PATH>
<INSTALL_FOLDER>$(BASE_NAME)Win$(WORD_SIZE)-$(BIM_PLATFORM)$(BIM_VERSION)-$(LOCALISATION_SUFFIX)</INSTALL_FOLDER>
<INSTALL_PATH>$(SolutionDir)Install/$(BASE_NAME)/$(LOCALISATION_SUFFIX)</INSTALL_PATH>
<PLUGIN_FOLDER>Add-Ons</PLUGIN_FOLDER>
<RESOURCE_EXTENSION>lcf</RESOURCE_EXTENSION>
<RES_OUTPUT>$(SolutionDir)ResourceObjects</RES_OUTPUT>
<RES_SOURCE>$(SolutionDir)RFIX.Win</RES_SOURCE>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="HEADER_PATH_7">
<Value>$(HEADER_PATH_7)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WORD_SIZE">
<Value>$(WORD_SIZE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="BASE_NAME">
<Value>$(BASE_NAME)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="DISPLAY_NAME">
<Value>$(DISPLAY_NAME)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WRAPPER_EXTENSION">
<Value>$(WRAPPER_EXTENSION)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="LOCALISATION_SUFFIX">
<Value>$(LOCALISATION_SUFFIX)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="EXEC_PATH">
<Value>$(EXEC_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="INSTALL_FOLDER">
<Value>$(INSTALL_FOLDER)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="INSTALL_PATH">
<Value>$(INSTALL_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="PLUGIN_FOLDER">
<Value>$(PLUGIN_FOLDER)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RESOURCE_EXTENSION">
<Value>$(RESOURCE_EXTENSION)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RES_OUTPUT">
<Value>$(RES_OUTPUT)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RES_SOURCE">
<Value>$(RES_SOURCE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
</Project>
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<HEADER_PATH_7>$(SolutionDir)RINT.$(BIM_PLATFORM)/$(LOCALISATION_SUFFIX)</HEADER_PATH_7>
<WORD_SIZE>64</WORD_SIZE>
<BASE_NAME>Speckle Connector</BASE_NAME>
<DISPLAY_NAME>$(BASE_NAME)</DISPLAY_NAME>
<WRAPPER_EXTENSION>apx</WRAPPER_EXTENSION>
<LOCALISATION_SUFFIX>EN-GB</LOCALISATION_SUFFIX>
<EXEC_PATH>$(BIM_PATH)</EXEC_PATH>
<INSTALL_FOLDER>$(BASE_NAME)Win$(WORD_SIZE)-$(BIM_PLATFORM)$(BIM_VERSION)-$(LOCALISATION_SUFFIX)</INSTALL_FOLDER>
<INSTALL_PATH>$(SolutionDir)Install/$(BASE_NAME)/$(LOCALISATION_SUFFIX)</INSTALL_PATH>
<PLUGIN_FOLDER>Add-Ons</PLUGIN_FOLDER>
<RESOURCE_EXTENSION>lcf</RESOURCE_EXTENSION>
<RES_OUTPUT>$(SolutionDir)ResourceObjects</RES_OUTPUT>
<RES_SOURCE>$(SolutionDir)RFIX.Win</RES_SOURCE>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="HEADER_PATH_7">
<Value>$(HEADER_PATH_7)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WORD_SIZE">
<Value>$(WORD_SIZE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="BASE_NAME">
<Value>$(BASE_NAME)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="DISPLAY_NAME">
<Value>$(DISPLAY_NAME)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WRAPPER_EXTENSION">
<Value>$(WRAPPER_EXTENSION)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="LOCALISATION_SUFFIX">
<Value>$(LOCALISATION_SUFFIX)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="EXEC_PATH">
<Value>$(EXEC_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="INSTALL_FOLDER">
<Value>$(INSTALL_FOLDER)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="INSTALL_PATH">
<Value>$(INSTALL_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="PLUGIN_FOLDER">
<Value>$(PLUGIN_FOLDER)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RESOURCE_EXTENSION">
<Value>$(RESOURCE_EXTENSION)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RES_OUTPUT">
<Value>$(RES_OUTPUT)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RES_SOURCE">
<Value>$(RES_SOURCE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
</Project>
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<HEADER_PATH_7>$(SolutionDir)RINT.$(BIM_PLATFORM)/$(LOCALISATION_SUFFIX)</HEADER_PATH_7>
<WORD_SIZE>64</WORD_SIZE>
<BASE_NAME>Speckle Connector</BASE_NAME>
<DISPLAY_NAME>$(BASE_NAME)</DISPLAY_NAME>
<WRAPPER_EXTENSION>apx</WRAPPER_EXTENSION>
<LOCALISATION_SUFFIX>EN-GB</LOCALISATION_SUFFIX>
<EXEC_PATH>$(BIM_PATH)</EXEC_PATH>
<INSTALL_FOLDER>$(BASE_NAME)Win$(WORD_SIZE)-$(BIM_PLATFORM)$(BIM_VERSION)-$(LOCALISATION_SUFFIX)</INSTALL_FOLDER>
<INSTALL_PATH>$(SolutionDir)Install/$(BASE_NAME)/$(LOCALISATION_SUFFIX)</INSTALL_PATH>
<PLUGIN_FOLDER>Add-Ons</PLUGIN_FOLDER>
<RESOURCE_EXTENSION>lcf</RESOURCE_EXTENSION>
<RES_OUTPUT>$(SolutionDir)ResourceObjects</RES_OUTPUT>
<RES_SOURCE>$(SolutionDir)RFIX.Win</RES_SOURCE>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="HEADER_PATH_7">
<Value>$(HEADER_PATH_7)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WORD_SIZE">
<Value>$(WORD_SIZE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="BASE_NAME">
<Value>$(BASE_NAME)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="DISPLAY_NAME">
<Value>$(DISPLAY_NAME)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WRAPPER_EXTENSION">
<Value>$(WRAPPER_EXTENSION)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="LOCALISATION_SUFFIX">
<Value>$(LOCALISATION_SUFFIX)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="EXEC_PATH">
<Value>$(EXEC_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="INSTALL_FOLDER">
<Value>$(INSTALL_FOLDER)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="INSTALL_PATH">
<Value>$(INSTALL_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="PLUGIN_FOLDER">
<Value>$(PLUGIN_FOLDER)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RESOURCE_EXTENSION">
<Value>$(RESOURCE_EXTENSION)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RES_OUTPUT">
<Value>$(RES_OUTPUT)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="RES_SOURCE">
<Value>$(RES_SOURCE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
</Project>
+1
View File
@@ -11,5 +11,6 @@
#include "Speckle.grc.rc2" #include "Speckle.grc.rc2"
#include "ConnectorFix.grc.rc2" #include "ConnectorFix.grc.rc2"
#include "ConnectorImagesFix.grc.rc2"
1 ICON LOADONCALL MOVEABLE IMPURE ACAP.ico 1 ICON LOADONCALL MOVEABLE IMPURE ACAP.ico
@@ -0,0 +1,10 @@
#ifdef macintosh
'GICN' 32500 "Speckle menu icon" {
"32500Mac"
}
#else
'GICN' 32500 "Speckle menu icon" {
"32500Win"
}
#endif
@@ -0,0 +1,5 @@
<svg width="52" height="52" viewBox="0 0 52 52" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9 10L2 4V44L9 50V10Z" stroke="black" stroke-width="3" stroke-linejoin="round"/>
<path d="M43 2L2 4L9 10L50 8L43 2Z" stroke="black" stroke-width="3" stroke-linejoin="round"/>
<path d="M50 8L9 10V50L50 48V8Z" stroke="black" stroke-width="3" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 378 B

@@ -0,0 +1,5 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7 8L0 2V42L7 48V8Z" fill="#313BCF"/>
<path d="M41 0L0 2L7 8L48 6L41 0Z" fill="#7BBCFF"/>
<path d="M48 6L7 8V48L48 46V6Z" fill="#047EFB"/>
</svg>

After

Width:  |  Height:  |  Size: 251 B

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleGetInfoString</key>
<string>Speckle Connector for Archicad 25</string>
<key>CFBundleIconFile</key>
<string>ArchiCADPlugin.icns</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Speckle Connector</string>
<key>CFBundlePackageType</key>
<string>.APX</string>
<key>CFBundleShortVersionString</key>
<string>Speckle Connector</string>
<key>CFBundleSignature</key>
<string>GSAP</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>LSRequiresCarbon</key>
<true/>
</dict>
</plist>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleGetInfoString</key>
<string>Speckle Connector for Archicad 26</string>
<key>CFBundleIconFile</key>
<string>ArchiCADPlugin.icns</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Speckle Connector</string>
<key>CFBundlePackageType</key>
<string>.APX</string>
<key>CFBundleShortVersionString</key>
<string>Speckle Connector</string>
<key>CFBundleSignature</key>
<string>GSAP</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>LSRequiresCarbon</key>
<true/>
</dict>
</plist>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleGetInfoString</key>
<string>Speckle Connector for Archicad 28</string>
<key>CFBundleIconFile</key>
<string>ArchiCADPlugin.icns</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Speckle Connector</string>
<key>CFBundlePackageType</key>
<string>.APX</string>
<key>CFBundleShortVersionString</key>
<string>Speckle Connector</string>
<key>CFBundleSignature</key>
<string>GSAP</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>LSRequiresCarbon</key>
<true/>
</dict>
</plist>
+8
View File
@@ -2,11 +2,19 @@
/* [ 1] */ "Speckle Connector" /* [ 1] */ "Speckle Connector"
/* [ 2] */ "Connector to share model content with Speckle" /* [ 2] */ "Connector to share model content with Speckle"
/* [ 3] */ "No level" /* [ 3] */ "No level"
/* [ 4] */ "Show Layers"
} }
'STR#' 32602 "Notify strings" {
/* [ 1] */ "Some elements published with the selected model card are on hidden layers - do you wish to make these layers visible?"
}
'STR#' 32604 "Error strings" { 'STR#' 32604 "Error strings" {
/* [ 1] */ "No objects were found to convert. Please update your publish filter!" /* [ 1] */ "No objects were found to convert. Please update your publish filter!"
/* [ 2] */ "The specified model card cannot be found. Try another card or create a new one" /* [ 2] */ "The specified model card cannot be found. Try another card or create a new one"
/* [ 3] */ "Please open a project first" /* [ 3] */ "Please open a project first"
/* [ 4] */ "The specified Speckle account cannot be found. Check that you have logged into your Speckle account with the Speckle Manager" /* [ 4] */ "The specified Speckle account cannot be found. Check that you have logged into your Speckle account with the Speckle Manager"
/* [ 5] */ "Unsupported conversion"
} }
+1 -1
View File
@@ -1,5 +1,5 @@
'STR#' 32500 "Connector Menu" { 'STR#' 32500 "Connector Menu" {
/*[ 1]*/ "Speckle Connector^E3^EL^ES^ED^EE^EI^EW^ET^" /*[ 1]*/ "Speckle Connector^E3^EL^ES^ED^EE^EI^EW^ET^32500"
} }
+6 -11
View File
@@ -41,23 +41,19 @@ class ResourceCompiler (object):
return True return True
def RunResConv (self, platformSign, codepage, inputFilePath, nativeResourceFileExtenion): def RunResConv (self, platformSign, codepage, inputFilePath, nativeResourceFileExtenion):
resourcesFolders = [ imageResourcesFolder = os.path.join (self.resourcesPath, 'RFIX', 'Images')
os.path.join (self.resourcesPath, 'RFIX', 'Images'),
os.path.join (self.resourcesPath, 'RFIX')
]
inputFileBaseName = os.path.splitext (os.path.split (inputFilePath)[1])[0] inputFileBaseName = os.path.splitext (os.path.split (inputFilePath)[1])[0]
nativeResourceFilePath = os.path.join (self.resourceObjectsPath, inputFileBaseName + nativeResourceFileExtenion) nativeResourceFilePath = os.path.join (self.resourceObjectsPath, inputFileBaseName + nativeResourceFileExtenion)
buildcommand = [ result = subprocess.call ([
self.resConvPath, self.resConvPath,
'-m', 'r', # resource compile mode '-m', 'r', # resource compile mode
'-T', platformSign, # target platform '-T', platformSign, # target platform
'-q', 'utf8', codepage, # code page conversion '-q', 'utf8', codepage, # code page conversion
'-w', '2', # HiDPI image size list '-w', '2', # HiDPI image size list
'-p', ';'.join (resourcesFolders), # resource search paths '-p', imageResourcesFolder, # image search path
'-i', inputFilePath, # input path '-i', inputFilePath, # input path
'-o', nativeResourceFilePath # output path '-o', nativeResourceFilePath # output path
] ])
result = subprocess.call (buildcommand)
if result != 0: if result != 0:
return False return False
return True return True
@@ -98,13 +94,13 @@ class WinResourceCompiler (ResourceCompiler):
'/I', os.path.join (self.devKitPath, 'Support', 'Modules', 'DGLib'), '/I', os.path.join (self.devKitPath, 'Support', 'Modules', 'DGLib'),
'/I', self.sourcesPath, '/I', self.sourcesPath,
'/DWINDOWS', '/DWINDOWS',
'/utf-8', '/execution-charset:utf-8',
'/Fi{}'.format (precompiledGrcFilePath), '/Fi{}'.format (precompiledGrcFilePath),
grcFilePath, grcFilePath,
]) ])
if result != 0: if result != 0:
return False return False
return self.RunResConv ('W', 'utf8', precompiledGrcFilePath, '.rc2') return self.RunResConv ('W', '1252', precompiledGrcFilePath, '.rc2')
def CompileNativeResource (self, resultResourcePath): def CompileNativeResource (self, resultResourcePath):
nativeResourceFiles = self.CollectFilesFromFolderWithExtension (os.path.join (self.resourcesPath, 'RFIX.win'), '.rc2') nativeResourceFiles = self.CollectFilesFromFolderWithExtension (os.path.join (self.resourcesPath, 'RFIX.win'), '.rc2')
@@ -116,7 +112,6 @@ class WinResourceCompiler (ResourceCompiler):
return False return False
result = subprocess.call ([ result = subprocess.call ([
'rc', 'rc',
'/c65001',
'/i', os.path.join (self.devKitPath, 'Support', 'Inc'), '/i', os.path.join (self.devKitPath, 'Support', 'Inc'),
'/i', os.path.join (self.devKitPath, 'Support', 'Modules', 'DGLib'), '/i', os.path.join (self.devKitPath, 'Support', 'Modules', 'DGLib'),
'/i', self.sourcesPath, '/i', self.sourcesPath,
+280
View File
@@ -0,0 +1,280 @@
#! /usr/bin/perl -w
use FindBin ;
use File::Spec::Functions qw(splitpath catfile updir);
use File::Copy;
use Cwd;
my $os;
my $devKitPath;
my $acVersion = $ENV{BIM_VERSION};
if ($^O =~ /MSWin/) {
$os = "Win";
} else {
$os = "Mac";
}
$devKitPath = catfile ($FindBin::Bin, updir (), updir (), "ArchiCAD " . $acVersion);
#-----------------------------------------------------------------------
# Strip redundant expressions from the target file
# $targetDirectory: The target directory
# $$targetFile: The target file
#-----------------------------------------------------------------------
sub StripRedundancies ($$)
{
my ($source, $destination) = @_ ;
open my $fh, "< :raw", $source or die "Cannot open $filename for reading: $!\n";
my $saved_sep = $/;
undef $/;
$content = <$fh>;
close ($fh) or die "Can't close file: $!";
#Strip out comments
$content =~ s { ( [^"'/]*
+r comment.
| "[^\\"]*(?:\\.[^\\"]*)*"
| '[^\\']*(?:\\.[^\\']*)*'
| / (?![*])
)
|
( /[*] [^*]* (?: [*] [^*/]* )* [*]/ )
}
{ $2 ? "" : $1 }gsex;
open $fh, "+> :raw", $destination or die "Cannot open $filename for writing: $!\n";
print $fh $content;
$/ = $saved_sep;
close ($fh) or die "Can't close file: $!";
} #StripRedundancies
#-----------------------------------------------------------------------
# Convert all image resources to the svg format for AC >= 20
# $intermediaryFile: The target file
#-----------------------------------------------------------------------
sub UpdateSVG($)
{
my ($target) = @_;
open my $fh, "< :raw", $target or die "Cannot open $filename for reading: $!\n";
local $/ = undef;
$contents = <$fh>;
close ($fh) or die "Can't close file: $!";
my @svg_defs = ();
while ($contents =~ /('GBMP'|'GICN')\s*(\d{5})\s*("[^"]*")\s*\{/sg)
{
push @svg_defs, "'GICN' $2 $3 {\n}\n\n";
}
if (@svg_defs) {
open $fh, "> :raw", $target or die "Cannot open $filename for writing: $!\n";
print $fh "@ #include \"MDIDs_APICD.h\"\n\n";
print $fh @svg_defs;
close ($fh) or die "Can't close file: $!";
}
} #UpdateSVG
#-----------------------------------------------------------------------
# Executes one GRC conversion command
# tool: Path to the GRC converter tool
# headerDir: Path to headers included in resource files
# sourceDir: Path to the input GRC source directory
# inputFile: Name of the input GRC file
# destinationDir: Path to the output native resource file directory
# localCode: The localisation code, e.g. "EN-GB"
# platformName: Name of the target platform, e.g. "ArchiCAD18"
# resourcePath: Optional path to any supplementary resources, e.g. images
#-----------------------------------------------------------------------
sub DoGRC ($$$$$$$$)
{
my ($tool, $headerDir, $sourceDir, $inputFile, $destinationDir, $localCode, $platformName, $resourcePath) = @_ ;
#Get the bare resource name
my $outputName = $inputFile;
$outputName =~ s/.grc//;
#And extract the version number (if found)
my ($outputNumber) = $outputName =~ /([0-9]+)$/;
#If it has a version that doesn't match this build, we don't want it
if ($outputNumber) {
if ($outputNumber != $ENV{BIM_VERSION}) {
return;
}
$outputName =~ s/$outputNumber\z//;
}
my $outputFile = $outputName . ".ro";
my $imageRes = "";
#Optional path to a resource directory
if ($resourcePath ne "") {
if ($ENV{BIM_VERSION} > 16) {
$resourcePath = " -p \"" . $resourcePath . "\"";
if ($ENV{BIM_VERSION} >= 20) {
$imageRes = " -w 2";
}
} else {
$resourcePath = " -j .roo -p \"" . $resourcePath . "\""
}
}
#Create the destination directory
if ( $localCode ne "" ) {
$destinationDir = catfile ($destinationDir, $localCode) ;
}
mkdir $destinationDir;
$destinationDir = catfile ($destinationDir, $platformName);
mkdir $destinationDir;
#Run the tool on the file
print "\t$inputFile\n";
my $toolOptions = "";
if ($os eq "Win") {
$toolOptions = " -m r -q utf8 0 -T W";
} else {
$toolOptions = " -m r -q utf8 utf16 -T M -n";
}
my $intermediaryFile = catfile ($destinationDir, $outputFile .".i");
if ($os eq "Win") {
StripRedundancies(catfile ($sourceDir, $inputFile), $intermediaryFile);
}
if ($os eq "Mac") {
my $frameworkVersion = catfile ($ENV{FRAMEWORK_PATH}, "Speckle" . $acVersion );
my $incHeaderDir = catfile (Cwd::realpath ($devKitPath), "Support", "Inc");
system ("xcrun clang -x c++ -E -P -DPREPROCESS_GRC -DGS_64BIT -Dmacintosh -DINT__APP -I \"" . $headerDir . "\" -I \"" . $incHeaderDir . "\" -I \"" . $frameworkVersion . "\" \"" . catfile ($sourceDir, $inputFile) . "\" > \"" . $intermediaryFile . "\"");
}
UpdateSVG($intermediaryFile);
if ($os eq "Win") {
chdir($devKitPath);
}
system ($tool . $toolOptions . " -i \"" . $intermediaryFile . "\"" . $resourcePath . " -o \"" . catfile ($destinationDir, $outputFile) . "\"" . $imageRes);
unlink($intermediaryFile);
} #DoGRC
#-----------------------------------------------------------------------
# Main - Convert GRC files
my ($localCode) = $ENV{LOCALISATION_SUFFIX};
my $suffix = ".r" . $acVersion;
my $fixed = "RFIX";
my $output = "RO";
my $platform = "ArchiCAD" . $acVersion;
my $baseName = $ENV{BASE_NAME};
my $makeResConvTool;
if ($os eq "Win") {
$makeResConvTool = catfile ("Support", "Tools", "Win", "ResConv");
} else {
$makeResConvTool = "\"" . catfile (Cwd::realpath ($devKitPath), "Support", "Tools", "OSX", "ResConv") . "\"";
}
my $projectPath = $ENV{PROJECT_PATH};
my $resTarget = catfile ($ENV{TARGET_BUILD_DIR}, $ENV{UNLOCALIZED_RESOURCES_FOLDER_PATH});
my $roFolder = catfile ($projectPath, $output);
my $rfixFolder = catfile ($projectPath, $fixed);
my $rintFolder = catfile ($projectPath, "RINT", $localCode);
my $srcFolder = catfile ($projectPath, "Src");
my @files;
print "Converting resource files:\n";
mkdir $roFolder;
#Convert the project fixed resources
print $projectPath . "RFIX\n";
opendir (DIR, catfile ($projectPath, "RFIX"));
@files = readdir (DIR);
closedir (DIR);
foreach $path (@files) {
($volume,$directories,$file) = splitpath ($path);
DoGRC ($makeResConvTool, $srcFolder, $rfixFolder, $file, $roFolder, $fixed, $platform, catfile ($projectPath, "RFIX/Images") ) if ($file =~ /.*\.grc$/i);
}
#Convert the project localisable resources
opendir (DIR, $rintFolder);
@files = readdir (DIR);
closedir (DIR);
foreach $path (@files) {
($volume,$directories,$file) = splitpath ($path);
if ((index($file, "Subtype") != -1) || (index($file, "SubType") != -1)) {
DoGRC ($makeResConvTool, $srcFolder, $rintFolder, $file, $roFolder, $localCode, $platform, catfile ($projectPath, "GDL", $baseName, $localCode, $os, $platform, "Built-in") ) if ($file =~ /.*\.grc$/i);
} else {
DoGRC ($makeResConvTool, $srcFolder, $rintFolder, $file, $roFolder, $localCode, $platform, "") if ($file =~ /.*\.grc$/i);
}
}
#-----------------------------------------------------------------------
# Copy tiff resources
$roFolder = catfile ($projectPath, $output, $fixed, $platform);
opendir (DIR, $roFolder);
@files = readdir (DIR);
closedir (DIR);
mkdir $resTarget;
foreach $file (@files) {
copy (catfile ($roFolder, $file), $resTarget) if ($file =~ /.*\.tif$/);
}
#-----------------------------------------------------------------------
# Copy localisable resource files and merge string resources to "Localizable.strings"
if (($os eq "Mac") && ($ENV{BIM_VERSION} > 17)) {
$roFolder = catfile ($projectPath, $output, $localCode, $platform);
my $localResources = $ENV{LANGUAGE_NAME} . ".lproj";
system ("mkdir -p \"" . catfile ($resTarget, $localResources) . "\"") ;
my $locStrings = catfile ($resTarget, $localResources, "Localizable.strings");
open (OFILE, ">:encoding(UTF-16LE)", $locStrings) or die "Can't create file: $!";
my $buf = "\x{feff}";
print OFILE $buf;
printf "\t=> Localizable resources\n";
opendir (DIR, $roFolder);
@files = readdir (DIR);
closedir (DIR);
undef $/; # enable slurp mode
foreach $file (@files) {
if ($file =~ /.*\.strings$/) {
printf "\t\t$file\n";
my $stringsFile = catfile ($roFolder, $file);
if ((stat ($stringsFile))[7] > 2) { # check file size
open (IFILE, "<:encoding(UTF-16LE)", $stringsFile) or die "Can't open file: $!";
read (IFILE, $buf, 1); # skip byte order mark
if ($buf ne "\x{feff}") {
print OFILE $buf;
}
my $content = <IFILE>;
close (IFILE) or die "Can't close file: $!";
print OFILE $content;
}
} else {
if ($file =~ /.*\.rsrd$/) {
printf "\t\t$file\n";
copy (catfile ($roFolder, $file), catfile ($resTarget, $localResources));
}
}
}
close (OFILE) or die "Can't close $locStrings: $!";
}
#-----------------------------------------------------------------------
# Copy nonlocalisable resource files
if ($os eq "Mac") {
$roFolder = catfile ($projectPath, $output, $fixed, $platform);
my $localResources = $ENV{LANGUAGE_NAME} . ".lproj";
system ("mkdir -p \"" . catfile ($resTarget, $localResources) . "\"") ;
printf "\t=> Fixed resources\n";
opendir (DIR, $roFolder);
@files = readdir (DIR);
closedir (DIR);
foreach $file (@files) {
if ($file =~ /.*\.rsrd$/) {
printf "\t\t$file\n";
copy (catfile ($roFolder, $file), catfile ($resTarget, $localResources));
}
}
}
print "done.\n";
+63
View File
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<BIM_VERSION>25</BIM_VERSION>
<BIM_PLATFORM>ARCHICAD</BIM_PLATFORM>
<BIM_PATH>C:\Program Files\Graphisoft\$(BIM_PLATFORM) $(BIM_VERSION)</BIM_PATH>
<HEADER_PATH_1>$(SolutionDir)..\..\ActiveLib</HEADER_PATH_1>
<HEADER_PATH_2>$(SolutionDir)</HEADER_PATH_2>
<HEADER_PATH_3>$(SolutionDir)..\SpeckleLib\Make.win</HEADER_PATH_3>
<HEADER_PATH_4>$(SolutionDir)..\SpeckleLib</HEADER_PATH_4>
<HEADER_PATH_5>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support</HEADER_PATH_5>
<HEADER_PATH_6>$(SolutionDir)</HEADER_PATH_6>
<WORD_SIZE>64</WORD_SIZE>
<ARCHICAD>1</ARCHICAD>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="BIM_VERSION">
<Value>$(BIM_VERSION)</Value>
</BuildMacro>
<BuildMacro Include="BIM_PLATFORM">
<Value>$(BIM_PLATFORM)</Value>
</BuildMacro>
<BuildMacro Include="BIM_PATH">
<Value>$(BIM_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_1">
<Value>$(HEADER_PATH_1)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_2">
<Value>$(HEADER_PATH_2)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_3">
<Value>$(HEADER_PATH_3)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_4">
<Value>$(HEADER_PATH_4)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_5">
<Value>$(HEADER_PATH_5)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_6">
<Value>$(HEADER_PATH_6)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WORD_SIZE">
<Value>$(WORD_SIZE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="ARCHICAD">
<Value>$(ARCHICAD)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
</Project>
+63
View File
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<BIM_VERSION>26</BIM_VERSION>
<BIM_PLATFORM>ARCHICAD</BIM_PLATFORM>
<BIM_PATH>C:\Program Files\Graphisoft\$(BIM_PLATFORM) $(BIM_VERSION)</BIM_PATH>
<HEADER_PATH_1>$(SolutionDir)..\..\ActiveLib</HEADER_PATH_1>
<HEADER_PATH_2>$(SolutionDir)</HEADER_PATH_2>
<HEADER_PATH_3>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support\Tools</HEADER_PATH_3>
<HEADER_PATH_4>$(SolutionDir)..\SpeckleLib</HEADER_PATH_4>
<HEADER_PATH_5>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support</HEADER_PATH_5>
<HEADER_PATH_6>$(SolutionDir)</HEADER_PATH_6>
<WORD_SIZE>64</WORD_SIZE>
<ARCHICAD>1</ARCHICAD>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="BIM_VERSION">
<Value>$(BIM_VERSION)</Value>
</BuildMacro>
<BuildMacro Include="BIM_PLATFORM">
<Value>$(BIM_PLATFORM)</Value>
</BuildMacro>
<BuildMacro Include="BIM_PATH">
<Value>$(BIM_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_1">
<Value>$(HEADER_PATH_1)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_2">
<Value>$(HEADER_PATH_2)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_3">
<Value>$(HEADER_PATH_3)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_4">
<Value>$(HEADER_PATH_4)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_5">
<Value>$(HEADER_PATH_5)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_6">
<Value>$(HEADER_PATH_6)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WORD_SIZE">
<Value>$(WORD_SIZE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="ARCHICAD">
<Value>$(ARCHICAD)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
</Project>
+1 -2
View File
@@ -7,8 +7,7 @@
<BIM_PATH>C:\Program Files\Graphisoft\$(BIM_PLATFORM) $(BIM_VERSION)</BIM_PATH> <BIM_PATH>C:\Program Files\Graphisoft\$(BIM_PLATFORM) $(BIM_VERSION)</BIM_PATH>
<HEADER_PATH_1>$(SolutionDir)..\..\ActiveLib</HEADER_PATH_1> <HEADER_PATH_1>$(SolutionDir)..\..\ActiveLib</HEADER_PATH_1>
<HEADER_PATH_2>$(SolutionDir)</HEADER_PATH_2> <HEADER_PATH_2>$(SolutionDir)</HEADER_PATH_2>
<HEADER_PATH_3> <HEADER_PATH_3>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support\Tools</HEADER_PATH_3>
</HEADER_PATH_3>
<HEADER_PATH_4>$(SolutionDir)..\SpeckleLib</HEADER_PATH_4> <HEADER_PATH_4>$(SolutionDir)..\SpeckleLib</HEADER_PATH_4>
<HEADER_PATH_5>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support</HEADER_PATH_5> <HEADER_PATH_5>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support</HEADER_PATH_5>
<HEADER_PATH_6>$(SolutionDir)</HEADER_PATH_6> <HEADER_PATH_6>$(SolutionDir)</HEADER_PATH_6>
+63
View File
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<BIM_VERSION>28</BIM_VERSION>
<BIM_PLATFORM>ARCHICAD</BIM_PLATFORM>
<BIM_PATH>C:\Program Files\Graphisoft\$(BIM_PLATFORM) $(BIM_VERSION)</BIM_PATH>
<HEADER_PATH_1>$(SolutionDir)..\..\ActiveLib</HEADER_PATH_1>
<HEADER_PATH_2>$(SolutionDir)</HEADER_PATH_2>
<HEADER_PATH_3>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support\Tools</HEADER_PATH_3>
<HEADER_PATH_4>$(SolutionDir)..\SpeckleLib</HEADER_PATH_4>
<HEADER_PATH_5>$(SolutionDir)..\..\$(BIM_PLATFORM) $(BIM_VERSION)\Support</HEADER_PATH_5>
<HEADER_PATH_6>$(SolutionDir)</HEADER_PATH_6>
<WORD_SIZE>64</WORD_SIZE>
<ARCHICAD>1</ARCHICAD>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="BIM_VERSION">
<Value>$(BIM_VERSION)</Value>
</BuildMacro>
<BuildMacro Include="BIM_PLATFORM">
<Value>$(BIM_PLATFORM)</Value>
</BuildMacro>
<BuildMacro Include="BIM_PATH">
<Value>$(BIM_PATH)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_1">
<Value>$(HEADER_PATH_1)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_2">
<Value>$(HEADER_PATH_2)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_3">
<Value>$(HEADER_PATH_3)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_4">
<Value>$(HEADER_PATH_4)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_5">
<Value>$(HEADER_PATH_5)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="HEADER_PATH_6">
<Value>$(HEADER_PATH_6)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="WORD_SIZE">
<Value>$(WORD_SIZE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="ARCHICAD">
<Value>$(ARCHICAD)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
</Project>
+212
View File
@@ -0,0 +1,212 @@
import os
import sys
import platform
import subprocess
import shutil
import codecs
import glob
class ResourceCompiler (object):
def __init__ (self, devKitPath, languageCode, sourcesPath, resourcesPath, resourceObjectsPath):
self.devKitPath = devKitPath
self.languageCode = languageCode
self.sourcesPath = sourcesPath
self.resourcesPath = resourcesPath
self.resourceObjectsPath = resourceObjectsPath
self.resConvPath = None
def IsValid (self):
if self.resConvPath == None:
return False
if not os.path.exists (self.resConvPath):
return False
return True
def CompileLocalizedResources (self):
locResourcesFolder = os.path.join (self.resourcesPath, 'R' + self.languageCode)
grcFiles = self.CollectFilesFromFolderWithExtension (locResourcesFolder, '.grc')
for grcFilePath in grcFiles:
if not self.CompileResourceFile (grcFilePath):
print ('Failed to compile resource: ' + grcFilePath)
return False
return True
def CompileFixResources (self):
fixResourcesFolder = os.path.join (self.resourcesPath, 'RFIX')
grcFiles = self.CollectFilesFromFolderWithExtension (fixResourcesFolder, '.grc')
for grcFilePath in grcFiles:
if not self.CompileResourceFile (grcFilePath):
print ('Failed to compile resource: ' + grcFilePath)
return False
return True
def RunResConv (self, platformSign, codepage, inputFilePath, nativeResourceFileExtenion):
imageResourcesFolder = os.path.join (self.resourcesPath, 'RFIX', 'Images')
inputFileBaseName = os.path.splitext (os.path.split (inputFilePath)[1])[0]
nativeResourceFilePath = os.path.join (self.resourceObjectsPath, inputFileBaseName + nativeResourceFileExtenion)
result = subprocess.call ([
self.resConvPath,
'-m', 'r', # resource compile mode
'-T', platformSign, # target platform
'-q', 'utf8', codepage, # code page conversion
'-w', '2', # HiDPI image size list
'-p', imageResourcesFolder, # image search path
'-i', inputFilePath, # input path
'-o', nativeResourceFilePath # output path
])
if result != 0:
return False
return True
def CollectFilesFromFolderWithExtension (self, folderPath, extension):
result = []
for fileName in os.listdir (folderPath):
fileExtension = os.path.splitext (fileName)[1]
if fileExtension == extension:
fullPath = os.path.join (folderPath, fileName)
result.append (fullPath)
return result
def CollectFilesFromFolderRecursive (self, path, name):
result = []
for folder, subs, files in os.walk (path):
for fileName in files + subs:
if fileName.lower () == name.lower ():
fullPath = os.path.join (folder, fileName)
result.append (fullPath)
return result
class WinResourceCompiler (ResourceCompiler):
def __init__ (self, devKitPath, languageCode, sourcesPath, resourcesPath, resourceObjectsPath):
super (WinResourceCompiler, self).__init__ (devKitPath, languageCode, sourcesPath, resourcesPath, resourceObjectsPath)
self.resConvPath = os.path.join (devKitPath, 'Support', 'Tools', 'Win', 'ResConv.exe')
def CompileResourceFile (self, grcFilePath):
grcFileName = os.path.split (grcFilePath)[1]
precompiledGrcFilePath = os.path.join (self.resourceObjectsPath, grcFileName + '.i')
result = subprocess.call ([
'cl',
'/nologo',
'/X',
'/EP',
'/P',
'/I', os.path.join (self.devKitPath, 'Support', 'Inc'),
'/I', os.path.join (self.devKitPath, 'Support', 'Modules', 'DGLib'),
'/I', self.sourcesPath,
'/DWINDOWS',
'/execution-charset:utf-8',
'/Fi{}'.format (precompiledGrcFilePath),
grcFilePath,
])
if result != 0:
return False
return self.RunResConv ('W', '1252', precompiledGrcFilePath, '.rc2')
def CompileNativeResource (self, resultResourcePath):
nativeResourceFiles = self.CollectFilesFromFolderWithExtension (os.path.join (self.resourcesPath, 'RFIX.win'), '.rc2')
if not nativeResourceFiles:
print ('Native resource file was not found')
return False
if len (nativeResourceFiles) > 1:
print ('More than one native resource file was found')
return False
result = subprocess.call ([
'rc',
'/i', os.path.join (self.devKitPath, 'Support', 'Inc'),
'/i', os.path.join (self.devKitPath, 'Support', 'Modules', 'DGLib'),
'/i', self.sourcesPath,
'/i', self.resourceObjectsPath,
'/fo', resultResourcePath,
nativeResourceFiles[0]
])
if result != 0:
print ('Failed to compile native resource')
return False
return True
class MacResourceCompiler (ResourceCompiler):
def __init__ (self, devKitPath, languageCode, sourcesPath, resourcesPath, resourceObjectsPath):
super (MacResourceCompiler, self).__init__ (devKitPath, languageCode, sourcesPath, resourcesPath, resourceObjectsPath)
self.resConvPath = os.path.join (devKitPath, 'Support', 'Tools', 'OSX', 'ResConv')
def CompileResourceFile (self, grcFilePath):
grcFileName = os.path.split (grcFilePath)[1]
precompiledGrcFilePath = os.path.join (self.resourceObjectsPath, grcFileName + '.i')
result = subprocess.call ([
'clang',
'-x', 'c++',
'-E',
'-P',
'-Dmacintosh',
'-I', os.path.join (self.devKitPath, 'Support', 'Inc'),
'-I', os.path.join (self.devKitPath, 'Support', 'Modules', 'DGLib'),
'-I', self.sourcesPath,
'-o', precompiledGrcFilePath,
grcFilePath,
])
if result != 0:
return False
return self.RunResConv ('M', 'utf16', precompiledGrcFilePath, '.ro')
def CompileNativeResource (self, resultResourcePath):
resultLocalizedResourcePath = os.path.join (resultResourcePath, 'English.lproj')
if not os.path.exists (resultLocalizedResourcePath):
os.makedirs (resultLocalizedResourcePath)
resultLocalizableStringsPath = os.path.join (resultLocalizedResourcePath, 'Localizable.strings')
resultLocalizableStringsFile = codecs.open (resultLocalizableStringsPath, 'w', 'utf-16')
for fileName in os.listdir (self.resourceObjectsPath):
filePath = os.path.join (self.resourceObjectsPath, fileName)
extension = os.path.splitext (fileName)[1]
if extension == '.tif':
shutil.copy (filePath, resultResourcePath)
elif extension == '.rsrd':
shutil.copy (filePath, resultLocalizedResourcePath)
elif extension == '.strings':
stringsFile = codecs.open (filePath, 'r', 'utf-16')
resultLocalizableStringsFile.write (stringsFile.read ())
stringsFile.close ()
resultLocalizableStringsFile.close ()
return True
def Main (argv):
if len (argv) != 7:
print ('Usage: CompileResources.py <languageCode> <devKitPath> <sourcesPath> <resourcesPath> <resourceObjectsPath> <resultResourcePath>')
return 1
currentDir = os.path.dirname (os.path.abspath (__file__))
os.chdir (currentDir)
languageCode = argv[1]
devKitPath = os.path.abspath (argv[2])
sourcesPath = os.path.abspath (argv[3])
resourcesPath = os.path.abspath (argv[4])
resourceObjectsPath = os.path.abspath (argv[5])
resultResourcePath = os.path.abspath (argv[6])
resourceCompiler = None
system = platform.system ()
if system == 'Windows':
resourceCompiler = WinResourceCompiler (devKitPath, languageCode, sourcesPath, resourcesPath, resourceObjectsPath)
elif system == 'Darwin':
resourceCompiler = MacResourceCompiler (devKitPath, languageCode, sourcesPath, resourcesPath, resourceObjectsPath)
if resourceCompiler == None:
print ('Platform is not supported')
return 1
if not resourceCompiler.IsValid ():
print ('Invalid resource compiler')
return 1
if not resourceCompiler.CompileLocalizedResources ():
return 1
if not resourceCompiler.CompileFixResources ():
return 1
if not resourceCompiler.CompileNativeResource (resultResourcePath):
return 1
return 0
sys.exit (Main (sys.argv))
+2 -2
View File
@@ -3,7 +3,7 @@ REM AC Resource build script
ECHO "Building AC Resources" ECHO "Building AC Resources"
if not exist "%RES_OUTPUT%" MD "%RES_OUTPUT%" if not exist "%RES_OUTPUT%" MD "%RES_OUTPUT%"
python "%HEADER_PATH_5%\Tools\CompileResources.py" "INT" "%HEADER_PATH_5%\.." "%HEADER_PATH_6%\Connector" "%SYMROOT%\" "%RES_OUTPUT%" "%RES_SOURCE%\Speckle Connector.apx.mui" python "%HEADER_PATH_3%\CompileResources.py" "INT" "%HEADER_PATH_5%\.." "%HEADER_PATH_6%\Connector" "%SYMROOT%\" "%RES_OUTPUT%" "%RES_SOURCE%\Speckle Connector.apx.mui"
python "%HEADER_PATH_5%\Tools\CompileResources.py" "INT" "%HEADER_PATH_5%\.." "%HEADER_PATH_4%\Speckle" "%HEADER_PATH_4%" "%RES_OUTPUT%" "%RES_SOURCE%\Speckle Connector.apx.mui" python "%HEADER_PATH_3%\CompileResources.py" "INT" "%HEADER_PATH_5%\.." "%HEADER_PATH_4%\Speckle" "%HEADER_PATH_4%" "%RES_OUTPUT%" "%RES_SOURCE%\Speckle Connector.apx.mui"
ECHO "Finished AC Resource" ECHO "Finished AC Resource"
+6
View File
@@ -1,4 +1,10 @@
'STR#' 32700 "Speckle Title strings" { 'STR#' 32700 "Speckle Title strings" {
/* [ 1] */ "Untitled" /* [ 1] */ "Untitled"
/* [ 2] */ "Unknown" /* [ 2] */ "Unknown"
/* [ 3] */ "Converting elements"
/* [ 4] */ "Notification"
/* [ 5] */ "Confirm"
/* [ 6] */ "Yes"
/* [ 7] */ "No"
/* [ 8] */ "OK"
} }
@@ -27,7 +27,7 @@ namespace speckle::database {
///Attribute database engine declaration ///Attribute database engine declaration
class BIMAttributeDatabase::Engine : public AttributeDatabaseEngine { class BIMAttributeDatabase::Engine : public AttributeDatabaseEngine {
using base = ArchicadAttributeDBaseEngine; using base = AttributeDatabaseEngine;
using base::base; using base::base;
}; };
@@ -102,7 +102,7 @@ Vector<Attribute> BIMAttributeDatabase::getAttributes() const {
attribute: The attribute to write attribute: The attribute to write
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void BIMAttributeDatabase::write(const Attribute& attribute) const { void BIMAttributeDatabase::write(Attribute& attribute) const {
m_store->write(attribute); m_store->write(attribute);
} //BIMAttributeDatabase::write } //BIMAttributeDatabase::write
@@ -55,7 +55,7 @@ namespace speckle::database {
Write an attribute to storage Write an attribute to storage
@param attribute The attribute to write @param attribute The attribute to write
*/ */
void write(const record::attribute::Attribute& attribute) const; void write(record::attribute::Attribute& attribute) const;
/*! /*!
Erase an attribute Erase an attribute
@param attributeID The ID of the attribute to erase @param attributeID The ID of the attribute to erase
@@ -33,8 +33,9 @@ namespace speckle::database {
}; };
///Element database storage declaration ///Element database storage declaration
class BIMElementDatabase::Store : public Storage<Element, UnboxedTransport, BIMRecordID, BIMRecordID, BIMRecordID, BIMRecordID> { class BIMElementDatabase::Store : public Storage<Element, UnboxedTransport, BIMRecordID, BIMRecordID,
using base = Storage<Element, UnboxedTransport, BIMRecordID, BIMRecordID, BIMRecordID, BIMRecordID>; BIMRecordID, BIMRecordID, ElementStorage::TableType> {
using base = Storage<Element, UnboxedTransport, BIMRecordID, BIMRecordID, BIMRecordID, BIMRecordID, ElementStorage::TableType>;
using base::base; using base::base;
}; };
@@ -75,6 +76,48 @@ BIMElementDatabase::BIMElementDatabase() {
BIMElementDatabase::~BIMElementDatabase() {} BIMElementDatabase::~BIMElementDatabase() {}
/*--------------------------------------------------------------------
Get the available element tables
targetType: An optional filtr for table type to retrieve, e.g. get all sections (nullopt = all table types)
return: A list of available tables
--------------------------------------------------------------------*/
BIMRecordIDList BIMElementDatabase::getTables(std::optional<TableType> targetType) const {
return m_engine->getTables(targetType);
} //BIMElementDatabase::getTables
/*--------------------------------------------------------------------
Get the default dbase table
return: The default dbase table (nullopt if no table is available)
--------------------------------------------------------------------*/
std::optional<BIMRecordID> BIMElementDatabase::getDefaultTable() const {
return m_engine->getDefaultTable();
} //BIMElementDatabase::getDefaultTable
/*--------------------------------------------------------------------
Set the default dbase table
tableID: The new default dbase table
--------------------------------------------------------------------*/
void BIMElementDatabase::setDefaultTable(const BIMRecordID& tableID) const {
m_engine->setDefaultTable(tableID);
} //BIMElementDatabase::setDefaultTable
/*--------------------------------------------------------------------
Bring the view of this database to the front (i.e. so the user sees it)
tableID: The ID of the table to bring to the front
--------------------------------------------------------------------*/
void BIMElementDatabase::bringViewToFront(BIMRecordID tableID) const {
m_engine->bringViewToFront(tableID);
} //BIMElementDatabase::bringViewToFront
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Get the current user element selection Get the current user element selection
@@ -101,10 +144,28 @@ void BIMElementDatabase::clearSelection() const {
} //BIMElementDatabase::clearSelection } //BIMElementDatabase::clearSelection
/*--------------------------------------------------------------------
Find a filtered list of objects
filter: The object filter (nullptr = find all objects)
subset: A subset of the database content to search (specified by record ID)
tableID: Optional table ID (defaults to the first table)
documentID: Optional document ID (filter for this document only - nullopt = all objects)
return: A list containing IDs of found elements (empty if none found)
--------------------------------------------------------------------*/
BIMRecordIDList BIMElementDatabase::findElements(const Filter* filter, const BIMRecordIDList& subset, std::optional<BIMRecordID> tableID,
std::optional<BIMRecordID> documentID) const {
return m_engine->findObjects(filter, subset, tableID, documentID);
} //BIMElementDatabase::findElements
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Get a specified element Get a specified element
elementID: The ID of the target element elementID: The ID of the target element
tableID: Optional table ID (defaults to the first table)
documentID: Optional document ID (filter for this document only - nullopt = all objects)
return: The requested element (nullptr on failure) return: The requested element (nullptr on failure)
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
@@ -117,10 +178,14 @@ Element::Unique BIMElementDatabase::getElement(const BIMRecordID& elementID, std
/*-------------------------------------------------------------------- /*--------------------------------------------------------------------
Get all elements Get all elements
tableID: Optional table ID (defaults to the first table)
documentID: Optional document ID (filter for this document only - nullopt = all objects)
return: All the elements return: All the elements
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
Vector<Element> BIMElementDatabase::getElements() const { Vector<Element> BIMElementDatabase::getElements(std::optional<BIMRecordID> tableID,
return m_store->getObjects(); std::optional<BIMRecordID> documentID) const {
return m_store->getObjects(tableID, documentID);
} //BIMElementDatabase::getElements } //BIMElementDatabase::getElements
@@ -148,7 +213,7 @@ Memo::Unique BIMElementDatabase::getMemo(const BIMRecordID& elementID, Part::fil
element: The element to write element: The element to write
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void BIMElementDatabase::write(const Element& element) const { void BIMElementDatabase::write(Element& element) const {
m_store->write(element); m_store->write(element);
} //BIMElementDatabase::write } //BIMElementDatabase::write
@@ -2,6 +2,7 @@
#define CONNECTOR_DATABASE_BIM_ELEMENT_DATABASE #define CONNECTOR_DATABASE_BIM_ELEMENT_DATABASE
#include "Speckle/Database/Identity/BIMLink.h" #include "Speckle/Database/Identity/BIMLink.h"
#include "Speckle/Database/Storage/Element/ElementStorage.h"
#include "Speckle/Record/Element/Element.h" #include "Speckle/Record/Element/Element.h"
#include "Speckle/Record/Element/Interface/Part.h" #include "Speckle/Record/Element/Interface/Part.h"
#include "Speckle/Utility/Guid.h" #include "Speckle/Utility/Guid.h"
@@ -19,7 +20,7 @@ namespace speckle::database {
/*! /*!
Database of model elements relating to a specific project Database of model elements relating to a specific project
*/ */
class BIMElementDatabase { class BIMElementDatabase : public ElementStorage {
public: public:
// MARK: - Constructors // MARK: - Constructors
@@ -36,6 +37,27 @@ namespace speckle::database {
// MARK: - Functions (const) // MARK: - Functions (const)
/*!
Get the available element tables
@param targetType An optional filtr for table type to retrieve, e.g. get all sections (nullopt = all table types)
@return A set of available tables
*/
BIMRecordIDList getTables(std::optional<TableType> targetType) const;
/*!
Get the default dbase table
@return The default dbase table (nullopt if no table is available)
*/
std::optional<BIMRecordID> getDefaultTable() const;
/*!
Set the default dbase table
@param tableID The new default dbase table
*/
void setDefaultTable(const BIMRecordID& tableID) const;
/*!
Bring the view of this database to the front (i.e. so the user sees it)
@param tableID The ID of the table to bring to the front
*/
void bringViewToFront(BIMRecordID tableID) const;
/*! /*!
Get the current user element selection Get the current user element selection
@return A list of selected element IDs @return A list of selected element IDs
@@ -49,6 +71,16 @@ namespace speckle::database {
Clear the element selection Clear the element selection
*/ */
void clearSelection() const; void clearSelection() const;
/*!
Find a filtered list of objects
@param filter The object filter (nullptr = find all objects)
@param subset A subset of the database content to search (specified by record ID)
@param tableID Optional table ID (defaults to the first table)
@param documentID Optional document ID (filter for this document only - nullopt = all objects)
@return A list containing IDs of found elements (empty if none found)
*/
BIMRecordIDList findElements(const Filter* filter = nullptr, const BIMRecordIDList& subset = {},
std::optional<BIMRecordID> tableID = std::nullopt, std::optional<BIMRecordID> documentID = std::nullopt) const;
/*! /*!
Get a specified element Get a specified element
@param elementID The ID of the target element @param elementID The ID of the target element
@@ -66,9 +98,12 @@ namespace speckle::database {
std::unique_ptr<record::element::Element> getElement(const BIMLink& link) const { return getElement(link, link.tableID, link.docID); } std::unique_ptr<record::element::Element> getElement(const BIMLink& link) const { return getElement(link, link.tableID, link.docID); }
/*! /*!
Get all model elements Get all model elements
@param tableID Optional table ID (defaults to the first table)
@param documentID Optional document ID (filter for this document only - nullopt = all objects)
@return All the elements @return All the elements
*/ */
active::container::Vector<record::element::Element> getElements() const; active::container::Vector<record::element::Element> getElements(std::optional<BIMRecordID> tableID = std::nullopt,
std::optional<BIMRecordID> documentID = std::nullopt) const;
/*! /*!
Get memo memo (supplementary) data for a specified element Get memo memo (supplementary) data for a specified element
@param elementID The of the source element @param elementID The of the source element
@@ -80,7 +115,7 @@ namespace speckle::database {
Write an element to storage Write an element to storage
@param element The element to write @param element The element to write
*/ */
void write(const record::element::Element& element) const; void write(record::element::Element& element) const;
/*! /*!
Erase an element Erase an element
@param elementID The ID of the element to erase @param elementID The ID of the element to erase
@@ -114,7 +114,7 @@ Vector<Group> BIMGroupDatabase::getGroups() const {
group: The group to write group: The group to write
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void BIMGroupDatabase::write(const Group& group) const { void BIMGroupDatabase::write(Group& group) const {
m_store->write(group); m_store->write(group);
} //BIMGroupDatabase::write } //BIMGroupDatabase::write
@@ -57,7 +57,7 @@ namespace speckle::database {
Write an group to storage Write an group to storage
@param group The group to write @param group The group to write
*/ */
void write(const record::property::Group& group) const; void write(record::property::Group& group) const;
/*! /*!
Erase an group Erase an group
@param groupID The ID of the group to erase @param groupID The ID of the group to erase
@@ -126,7 +126,7 @@ std::vector<std::shared_ptr<Template>> BIMPropertyDatabase::findTemplatesByClass
property: The property to write property: The property to write
--------------------------------------------------------------------*/ --------------------------------------------------------------------*/
void BIMPropertyDatabase::write(const Template& property) const { void BIMPropertyDatabase::write(Template& property) const {
m_store->write(property); m_store->write(property);
} //BIMPropertyDatabase::write } //BIMPropertyDatabase::write

Some files were not shown because too many files have changed in this diff Show More