Compare commits

..

331 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
Ralph Wessel 82bd96de61 Updated Xcode project 2024-10-30 22:55:23 +00:00
Ralph Wessel 51ed951d7d Added Platform::openURL to open a URL cross-platform 2024-10-30 22:54:17 +00:00
Ralph Wessel cc6c884f47 Merge pull request #15 from specklesystems/david/wire-in-view-button
view button on modelcard works
2024-10-30 22:42:57 +00:00
David Kekesi 4afed92ba9 view button on modelcard works 2024-10-30 19:34:27 +01:00
Alan Rynne 326cb80f89 use main for deploy 2024-10-30 15:17:55 +01:00
Ralph Wessel ca2df4c020 Finish assignment operator did not call assignment operator for bae class 2024-10-30 12:38:20 +00: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
Ralph Wessel 764b548900 Updated VS projects 2024-10-30 11:48:54 +00:00
Ralph Wessel 71dac48830 Updated Xcode project
Implemented caching to avoid slow API material lookup
Some minor fixes
Eliminated some warnings
2024-10-30 11:47:48 +00:00
Ralph Wessel 5684364119 Merge pull request #14 from specklesystems/david/cnx-693-archicad-missing-elements
cnx 693 archicad missing elements
2024-10-30 10:25:18 +00:00
David Kekesi 45c4311d95 temporary hack to send DisplayValues of Stairs, Rails, CurtainWalls 2024-10-30 10:51:08 +01:00
Alan Rynne 794658ed9c feat: Add deploy step 2024-10-30 10:40:46 +01:00
kekesidavid ae521de698 Merge pull request #12 from specklesystems/david/cnx-665-object-tracking
cnx 665 object tracking
2024-10-29 17:02:08 +01:00
kekesidavid 0ff87576da Merge branch 'develop' into david/cnx-665-object-tracking 2024-10-29 17:01:27 +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
Ralph Wessel 63c3c9befa Fixed applicationId tag 2024-10-29 13:16:41 +00:00
David Kekesi 281a2654c9 comment 2024-10-29 12:48:57 +01:00
David Kekesi 8fdbaaa52d ElementChangedSubscriber renamed to ElementSubscriber 2024-10-29 11:03:21 +01:00
David Kekesi 67b12ae353 ElementChangedEvent renamed to ElementEvent 2024-10-29 10:54:47 +01:00
David Kekesi 690e527b81 attach element observer to existing elements 2024-10-29 10:48:43 +01:00
David Kekesi 8f2e31c16e searching for expired ModelCards, naive, not efficient solution for now 2024-10-29 10:32:26 +01:00
Ralph Wessel e9b768daec Updated JSBaseTransport for new read/writeSetting functions
Updated VS projects
2024-10-29 09:05:38 +00:00
David Kekesi e5bf001590 handling Begin, End event types, sending setModelsExpired event to UI 2024-10-28 21:58:07 +01:00
Ralph Wessel 7c0ac2e8f6 Updated Xcode projects
Added environment Host to represent host BIM application
Updated for latest ActiveLib
2024-10-28 17:27:46 +00:00
David Kekesi 0969026f39 ElementChangedSubscriber, ElementChangedEvent added 2024-10-28 11:22:27 +01:00
Ralph Wessel 3d2aab8862 Updated documentation 2024-10-24 18:06:18 +01:00
Ralph Wessel bdea330c2e Moved include file to implementation
Fixed docs typo
2024-10-24 16:50:58 +01:00
Ralph Wessel b066b4ba3c Merge pull request #11 from specklesystems/david/cnx-660-document-switch-and-model-cards
cnx 660 document switch and model cards
2024-10-24 15:38:40 +01:00
David Kekesi 3f772150ff no need to start project subscriber after installation 2024-10-24 16:28:57 +02:00
David Kekesi e00fd99d3c modelcards are loaded on document switch 2024-10-24 16:25:27 +02:00
David Kekesi 72e8ea78d9 Merge branch 'develop' into david/cnx-660-document-switch-and-model-cards 2024-10-24 15:50:42 +02:00
Ralph Wessel ede131ca0b Merge pull request #10 from specklesystems/david/cnx-667-model-card-highlighting
cnx 667 model card highlighting
2024-10-24 13:03:32 +01:00
David Kekesi c4fcce4df8 BimElementDatabase setSelection, clearSelection implemented 2024-10-24 13:59:17 +02:00
David Kekesi dcbd795b1f ElementIDList moved to SpeckleLib, added setSelection method to BIMElementDatabase 2024-10-24 12:28:04 +02:00
David Kekesi 8a37d3fbd6 Beam regression fixed 2024-10-24 11:28:32 +02:00
David Kekesi 7256e11c3a Merge branch 'develop' into david/cnx-667-model-card-highlighting 2024-10-24 10:32:06 +02:00
David Kekesi 9b8ab47eab code cleanup 2024-10-24 10:31:25 +02:00
Ralph Wessel f72d5202f9 ModelElement should be an abstract base rather than holding an element
ModelElement::getBody didn't check for null m_data
ArchicadElementDBaseEngine should default to returning GenericModelElement is type is unknown
2024-10-24 09:24:01 +01:00
David Kekesi dcac8390cf Merge branch 'develop' into david/cnx-667-model-card-highlighting 2024-10-24 09:21:40 +02:00
Ralph Wessel 8893653583 ContainerWrap should specify item tag where it differs from the default 2024-10-23 22:53:26 +01:00
David Kekesi 0d5dd7156e Merge branch 'develop' into david/cnx-667-model-card-highlighting 2024-10-23 15:20:35 +02:00
David Kekesi a5b681a6ed added HighlightModel method 2024-10-23 15:19:52 +02:00
Ralph Wessel 0c09205935 JSArgs for incoming commands need to allow the wrapped argument object to reset to its default values 2024-10-23 13:47:28 +01:00
Ralph Wessel 405d183124 Updated Xcode projects 2024-10-23 09:59:55 +01:00
Ralph Wessel 7a1335681a Merge branch 'feature/CNX-651_Add_Properties_from_Properties_and_Classification_tab_to_send' into develop 2024-10-23 09:54:55 +01:00
Ralph Wessel 889019a3e8 Merge branch 'develop' into feature/CNX-651_Add_Properties_from_Properties_and_Classification_tab_to_send
# Conflicts:
#	SpeckleLib/Speckle/Database/Storage/ArchicadDBase/Element/ArchicadElementDBaseEngine.cpp
#	SpeckleLib/Speckle/Record/Element/Element.cpp
#	SpeckleLib/SpeckleLib17.vcxproj.filters
2024-10-23 09:54:11 +01:00
Ralph Wessel 0dee313366 Fixed conversion of enum property values 2024-10-23 09:32:05 +01:00
Ralph Wessel a169d8b1d2 Improved detection of null property settings/values to avoid serialising null values in PropertiedWrap 2024-10-22 21:49:37 +01:00
Ralph Wessel 6d51b2d868 Updated VS projects
Added missing break statements in Value.cpp
2024-10-22 21:24:19 +01:00
Ralph Wessel 2c6909e98e Added property::Group
Added property Group database
Property template group & group name access added
2024-10-22 20:09:01 +01:00
Ralph Wessel eeb4dab690 Property dbase should not check tableID if none is specified 2024-10-22 16:31:30 +01:00
Ralph Wessel e27808b73d Updated VS projects 2024-10-22 16:09:33 +01:00
Ralph Wessel 5f1c942584 Added serialisation for Propertied objects and Properties
Added serialisation hierarchy for properties within ModelElements
Additional data access to Setting, Template, Value and Property
2024-10-22 15:49:16 +01:00
kekesidavid 7dfe8fb964 Merge pull request #9 from specklesystems/david/cnx-664-create-one-mesh-per-material
cnx 664 create one mesh per material
2024-10-22 13:39:04 +02:00
David Kekesi 73b04a7588 code cleanup 2024-10-22 12:38:22 +02:00
Ralph Wessel 63bb28db0f Adding properties to element serialisation 2024-10-22 10:24:46 +01:00
David Kekesi 3368e7a6dc one mesh per material, Mesh::appendFace 2024-10-22 10:34:04 +02:00
Ralph Wessel 01bb88b4a1 ModelElement subclassed from Classified and Propertied 2024-10-21 21:45:07 +01:00
Ralph Wessel 35f4e58a58 Added BIM property database + engine
Added property classes including:
- templates
- settings
- values
Added Classified interface for records supporting classification
Added Propertied interface for records supporting attached properties
Distinguished model elements from drawing elements (only model elements support classification/properties) with:
- DrawingElement (2D only)
- ModelElement (having a 3D/model presence)
2024-10-21 16:25:23 +01:00
David Kekesi 6d14607634 bridge listens to open event instead of close 2024-10-21 16:36:39 +02:00
David Kekesi 5363819e8d BaseBridge listens to project events 2024-10-21 16:35:30 +02:00
kekesidavid 3be1676b1a Merge pull request #8 from specklesystems/david/cnx-650-create-beam-and-supporting-classes
Create beam and supporting classes
2024-10-21 10:04:41 +02:00
David Kekesi f5b5ff6487 create Beam and supporting classes 2024-10-21 09:41:55 +02:00
Ralph Wessel 878988df95 Update Xcode project
BIM core dbase engines should be able to react to project events
Attribute dbase resets storey cache on project changes
2024-10-17 17:22:51 +01:00
Ralph Wessel f44f0413d0 ColumnSegment move constructor should be noexcept 2024-10-16 17:00:03 +01:00
Ralph Wessel b80b5aef94 Fixed ColumnSegment copy constructor 2024-10-16 16:44:38 +01:00
Ralph Wessel 702f99eced Reduced the number of objects that define a name for 'speckle_type' (default to 'Base' instead) 2024-10-16 15:06:06 +01:00
Ralph Wessel 42cf641a01 Merge pull request #7 from specklesystems/david/cnx-150-implement-selectionbinding
David/cnx 150 implement selectionbinding
2024-10-16 15:04:58 +01:00
Ralph Wessel 8e80d5ddd5 Merge branch 'develop' into david/cnx-150-implement-selectionbinding 2024-10-16 15:04:07 +01:00
David Kekesi 3813c8740f SelectionInfo::initialize changed to private 2024-10-16 15:53:59 +02:00
David Kekesi 5c1511e850 code cleanup 2024-10-16 15:50:15 +02:00
David Kekesi 511311eb84 selectionBridge works 2024-10-16 15:08:34 +02:00
Ralph Wessel ebed71a791 Removed unused static var from SelectionSubscriber 2024-10-16 11:03:38 +01:00
Ralph Wessel 3e7b78e50d Allow SelectionSubscriber to start/stop outside initialisation phase 2024-10-16 10:31:11 +01:00
Ralph Wessel 2d23eb6b28 Fixes to Column and ColumnSegment classes 2024-10-15 23:05:07 +01:00
Ralph Wessel ffb9cf0cef Updated VS projects 2024-10-15 21:12:37 +01:00
Ralph Wessel e54962e76f Added Column support:
- Column element
- ColumnSegment element
- SegmentedColumn for managing segment retrieval
- Segment/Path interfaces
- Element Part interface
GenericElement now represents all element types with no specific class
Element becomes abstract base for all elements
Added Memo to handle supplementary element data
Added BIMMemory for common BIM memory utilities
BIMElementDatabase adds Memo table support
ArchicadElementDBaseEngine creates GenericElement, Column or ColumnSegment elements
2024-10-15 21:05:57 +01:00
David Kekesi def9162e4c added SelectionBridge, SelectionInfo, GetSelection 2024-10-15 17:13:06 +02:00
Ralph Wessel 9c10300f01 Merge pull request #6 from specklesystems/FinishProxies_WIP
Finish proxies wip
2024-10-14 16:04:52 +01:00
David Kekesi 902fb0f626 changed ArchicadRGB::write to export ARGB colors instead of RGB 2024-10-14 15:46:12 +02:00
Ralph Wessel 432e5a0b0b Merge branch 'FinishProxies_WIP' of https://github.com/specklesystems/speckle-cpp-connectors into FinishProxies_WIP 2024-10-14 11:25:32 +01:00
Ralph Wessel a67361c903 FinishProxy should call base object when (de)serialising 2024-10-14 11:25:09 +01:00
Ralph Wessel e82698ac3a Shininess in Modeler::Material is 1-100 scale (NB: looks logarithmic but will resolve on advice from GS) 2024-10-14 11:18:48 +01:00
Ralph Wessel 2fab7da57d Update FinishProxy to be a BIMRecord, i.e. export speckle_type and applicaiton ID
BIMRecord constructor should allow units to be initialised to nullopt
2024-10-14 11:17:17 +01:00
Ralph Wessel 36b95436ae Finishes have no unit of measurement 2024-10-14 10:13:23 +01:00
Ralph Wessel 24f6a6349a Capture ID of Modeler::Material in Finish 2024-10-14 10:00:23 +01:00
Ralph Wessel bd54ae3995 Change JSON tag from "unit" to "units" 2024-10-14 09:50:07 +01:00
Ralph Wessel 7e742796f5 Corrected Mesh speckle_type
Mesh constructor failed to set BIM ID
2024-10-13 22:27:59 +01:00
Ralph Wessel 373179fa65 Assigned serialisation type for Str256
Linked mesh IDs in finish proxies is a single array
2024-10-13 22:16:52 +01:00
Ralph Wessel 11bfb9333f Updated VS projects 2024-10-13 21:35:10 +01:00
Ralph Wessel 45c0705a60 #include <ACAPinc.h> prior to other includes 2024-10-13 19:57:01 +01:00
Ralph Wessel 7f4b7112ae Finishes incorporates all Archicad material properties
Serialisation wrapper for Archicad colour rgb colour
2024-10-13 17:49:17 +01:00
Ralph Wessel 05c2cdc47a Updated VS projects
Using Str256 for AC attribute name
WIP - using fixed size for material proxy serialisation count (actual count not known at this point - may need to use something like max size_t)
2024-10-12 09:19:09 +01:00
Ralph Wessel dbc2c79f2a Added serilaisation wrapper for 256-byte char array (used for some AC string types) 2024-10-12 09:06:32 +01:00
Ralph Wessel 36e50bb63e SendObject and SendViaBrowserArgs forward the wrapped object management to the serialiser
ProjectCollection defines itself as a serialisation manager (to collect material proxies)
2024-10-11 17:44:41 +01:00
Ralph Wessel d3492512cd Update SendObject and SendViaBrowserArgs to use serialisation management (to support collection of material proxies) 2024-10-11 17:19:04 +01:00
Ralph Wessel 65b636accb Mesh serialisation now directly engages with management to populate material proxies rather than using a "dummy" field 2024-10-11 16:53:42 +01:00
David Kekesi 791e9f072f finish proxies wip 2024-10-11 17:10:05 +02:00
kekesidavid 68c98abde9 Merge pull request #5 from specklesystems/david/cnx-576-implement-element-getbody
David/cnx 576 implement element getbody
2024-10-11 13:20:44 +02:00
Ralph Wessel a117e327c7 Updated VS project 2024-10-11 11:47:35 +01:00
Ralph Wessel de46d899b0 Added FinishProxy to collect mesh finishes (to build 'material proxy collection) 2024-10-11 11:45:10 +01:00
David Kekesi 30163bfd9d export mesh, vertices, faces, colors 2024-10-11 12:44:55 +02:00
Ralph Wessel 21fc2cff25 Added FinishCollector interface as a serialisation manager to collect finishes from meshes as they are serialised
ProjectCollection is now a FinishCollector (accumulates the finishes to write the material proxies at the end)
2024-10-11 09:58:26 +01:00
Ralph Wessel 0c74a28982 Fixes to Storey attribute class 2024-10-10 13:45:36 +01:00
Ralph Wessel cc64d7df44 Added lookup for AC storeys using an element floor index 2024-10-10 13:02:57 +01:00
Ralph Wessel f7112a407c Set correct base class for RecordCollection
RecordCollection serialises name
2024-10-10 12:12:35 +01:00
Ralph Wessel 7ed4d8c807 Updated VS projects 2024-10-10 10:45:35 +01:00
Ralph Wessel b5447b263e NB: Interim commit - new code is untested at this point
Information sent to Speckle is now presented in hiearchical collections:
- Root level contains material proxies
- Second level is project storeys
- Third level is element type
Added database and record definitions for attributes including:
- Finishes (surface rendering material)
- Storeys
Element getters for storey and type name
Aligned some speckle_type names to Revit (where possible)
2024-10-10 08:52:18 +01:00
Ralph Wessel b51b0ecb13 Mesh serialises with speckle_type and units - now appears in 3D view 2024-10-04 22:13:32 +01:00
Ralph Wessel 72cd75d2e6 Added speckle_type and unit properties to Record, BIMRecord, Element and Mesh classes
Defined (de)serialisation for LengthType
2024-10-04 21:03:54 +01:00
Ralph Wessel 3e2777a38f Merge branch 'david/cnx-577-implement-mesh-class' into develop 2024-10-03 17:55:44 +01:00
Ralph Wessel 042a515dc4 Removed test code from palette 2024-10-03 17:54:01 +01:00
Ralph Wessel f5bb3dc454 Fix to element mesh face indices 2024-10-03 17:50:50 +01:00
Ralph Wessel f066b0ee02 Send bridge method injects the first selected element into the sent data for testing
Mesh vertices, faces and colours are all single arrays
2024-10-03 17:05:02 +01:00
Ralph Wessel 8dd00005b1 Element is a type of BIMRecord 2024-10-03 16:39:21 +01:00
Ralph Wessel 0592bcc947 BIMRecord is a type of Record (adds applicationID) 2024-10-03 16:31:58 +01:00
Ralph Wessel 76348c8fd1 Merge branch 'develop' into david/cnx-577-implement-mesh-class 2024-10-03 15:51:27 +01:00
Ralph Wessel 1a61608c42 Using preview interface for testing 2024-10-03 14:33:52 +01:00
Ralph Wessel 844ab3544b Commit working 2024-10-03 14:32:30 +01:00
Ralph Wessel 990a1ab9e1 Updated for VS 2024-10-03 13:48:22 +01:00
David Kekesi 6cf03010bd mesh export WIP 2024-10-03 14:39:09 +02:00
Ralph Wessel a0413d0d3a SendObject now holds and sends a Record 2024-10-03 13:12:57 +01:00
Ralph Wessel 8539129e7c SendObject now the owner of the object to be sent 2024-10-03 12:33:08 +01:00
Ralph Wessel 1a901b0a6c Send bridge is updated:
- total children removed
- rootObject replaces batches (sent as an object rather than a string)
2024-10-03 12:05:48 +01:00
Ralph Wessel cc034191b4 Updated with GetSendSettings 2024-10-02 12:54:48 +01:00
Ralph Wessel a6911fad1c Added GetSendSettings binding 2024-10-02 10:09:28 +01:00
Ralph Wessel fdf371732b Updated serialisation for send objects 2024-10-02 09:30:53 +01:00
Ralph Wessel e9f8e86f95 Dummy information in SendObject 2024-10-01 18:58:50 +01:00
Ralph Wessel 8eae1e9967 Updated VS projects 2024-10-01 18:24:33 +01:00
Ralph Wessel 8ed2abea04 Implemented skeleton of SendObject 2024-10-01 18:21:30 +01:00
Ralph Wessel e148094c81 ModelCardDatabase can retrieve a card by ID
Added numerous Send argument classes:
- ConversionResult (incomplete)
- SendError
- SendObject
- SendViaBrowserArgs (incomplete)
Send method looks up model card and account details, constructs send arguments
AccountDatabase can find an account by ID or server URL
Added DetachedMemoryStore
2024-10-01 17:24:59 +01:00
Ralph Wessel deee1e80c5 Added classes for managing detached objects:
- DetachmentManager: Manages detached objects during (de)serialisation
- DetachedWrap: Wrapper for detached objects, generating references on demand from serialised data
- DetachedReference: Wrapper for representation of wrapped objects with a reference
- DetachedObjectStore: Interface for filing/retrieving detached objects in storage
2024-09-30 10:50:24 +01:00
Ralph Wessel 4c8a2237bf Removed testing code 2024-09-26 13:28:14 +01:00
Ralph Wessel 5abc831473 Implemented Archicad element database functionality:
- Retrieving the database from the Project
- Gettting selected elements
- Getting an element from an index/link
2024-09-26 13:05:22 +01:00
Ralph Wessel b8d952c9a3 Updated Send method to trigger a browser event rather than throwing an exception
Added new resources
2024-09-25 13:29:33 +01:00
Ralph Wessel 7baedf707a Updated VS projects 2024-09-24 22:29:40 +01:00
Ralph Wessel 4dd0a1b1b6 Added skeleton BIM database, element, collection and Mesh classes to support sending model data 2024-09-24 21:50:28 +01:00
Ralph Wessel 29ece2282f Added DocumentStoreEngine::getUniqueID
Added ModelCardDatabase::getStoreID
2024-09-23 16:01:35 +01:00
Ralph Wessel 8dceee52f2 Merge branch 'release/0.2.4' 2024-09-23 14:10:34 +01:00
Ralph Wessel f0fc7e8fec Merge tag '0.2.4' into develop
0.2.4
2024-09-23 14:10:34 +01:00
Ralph Wessel 5149449513 Version bump 2024-09-23 14:10:09 +01:00
Ralph Wessel 0336b1b6f9 DocumentStoreEngine can return its records as wrapped cargo for external serialisation 2024-09-23 09:18:04 +01:00
Ralph Wessel 5e152313eb DocumentStoreEngine getCache() should use PackageWrap for receiving serialised records 2024-09-23 02:40:37 +01:00
Ralph Wessel 4c47cba247 GetComplexType didn't allocate transportable result 2024-09-22 17:49:52 +01:00
Ralph Wessel 0060aabd8b Added Doxyfile
Updated gitignore to skip doxygen output
Removed redundant namespaces from CardMover
2024-09-21 01:13:54 +01:00
Ralph Wessel daae9fd6e3 ModelCard arguments should use CardMover 2024-09-20 23:48:19 +01:00
Ralph Wessel b44644ad88 Bridge methods using CargoHold to return results need to allocate results in a unique_ptr (can't reference local vars that go out of scope) 2024-09-20 14:17:39 +01:00
Ralph Wessel 6d3126e1e1 Updated GetSendFilters to support export of polymorphic objects
DocumentStoreCore didn't check for null handle when retrieving stored data
2024-09-20 11:34:46 +01:00
Ralph Wessel bd200492fd Docs 2024-09-19 22:13:48 +01:00
Ralph Wessel 9f35e86372 Update browser bridge functions names retrieval 2024-09-19 22:02:39 +01:00
Ralph Wessel 3c1a4f9694 Merge branch 'develop' of https://github.com/specklesystems/speckle-cpp-connectors into develop 2024-09-19 13:40:09 +01:00
Ralph Wessel 009f670af7 ModelCard incorrectly identified base Record type 2024-09-19 13:39:58 +01:00
Ralph Wessel 6e0cc4d5f3 Updated VS projects and resources
More document info retrieved from open project
2024-09-19 11:23:19 +01:00
Ralph Wessel e6543fe065 Clarified DocumentInfo documentation 2024-09-19 10:31:32 +01:00
Ralph Wessel 6f7bd66a2d "Send" method argument updated
Serialisation tag for server URL of ModelCard fixed
2024-09-19 10:20:03 +01:00
Ralph Wessel 95e0033d2a Updated ModelCard to the latest schema 2024-09-19 09:06:29 +01:00
Ralph Wessel d3c7341314 Updated Xcode project 2024-09-19 08:20:06 +01:00
Ralph Wessel 5a77e7b30a Include SpeckleLib resources in build process 2024-09-18 16:24:04 +01:00
Ralph Wessel 4fadcaf466 Added Project class
Addon class now manages an active project instance that can be accessed with getActiveProject
GetDocumentInfo now uses information extracted from the active project
Updated ProjectSubscriber and ProjectEvent accordingly
"Send" bridge method now throws exception reporting no selected elements (placeholder until we implement a real send process)
2024-09-18 15:48:20 +01:00
Ralph Wessel 945fa86c7c SendFilters populated with class names via 'typeDiscriminator' 2024-09-17 16:20:08 +01:00
Ralph Wessel c4610626b6 Merge tag '0.2.3' into develop
0.2.3
2024-09-17 13:09:25 +01:00
Ralph Wessel 48314ab1f6 Merge branch 'release/0.2.3' 2024-09-17 13:09:24 +01:00
Ralph Wessel 03e74e5195 Version bump 2024-09-17 13:09:07 +01:00
Ralph Wessel ce6306c1de CardMover should validate handler before constructing base Mover
ReceiverModelCar constructor should also construct base ModelCard
SenderModelCar didn't populate member filter
DocumentStoreCore now loads objects when project reopened
DocumentStoreCore uses defer for safer handle release
DocumentStoreCore::resetStore must reset object ID
DocumentStoreEngine must reset cache and DocumentStoreCore
2024-09-16 22:54:55 +01:00
Ralph Wessel 1f6bcbd947 Not using ArchicadEverythingFilter yet
DocumentCoreStore now records and applies document storage ID correctly
2024-09-16 16:32:03 +01:00
Ralph Wessel 220c9a5a40 ModelCard record and dbase fixes 2024-09-16 15:00:55 +01:00
Ralph Wessel 8ea4ced153 Updated VS projects 2024-09-16 08:54:18 +01:00
Ralph Wessel e92729e10f Added RecordID to express common ID types for Archicad
Added ArchicadEverythingFilter
Added ArchicadSelectionFilter
Added EverythingSendFilter
Updated SendFilter bridge method with defined filter types
Updated FilterMover with defined filter types
Implemented SendFilter::checkExpiry
Updated CardMover with ReceiverModelCard
Updated all bridge method args as const reference
2024-09-15 22:23:12 +01:00
Ralph Wessel e75ef3133d Clarified concepts for Storage and Engine types
Added FilterMover and CardMover to deal with polymorphic ModelCard and Sendfilter types
Implemented more of SenderModelCard (more needed)
2024-09-14 02:06:02 +01:00
Ralph Wessel 90211900e1 Interim commit - builds with some warnings
Simplication of record identifiers
Starting implementation of SenderModelCar
Implementation of SendFilters in progress
2024-09-13 11:51:40 +01:00
Ralph Wessel 850cd36d73 Added UpdateModel and RemoveModel
Linked new methods to baseBinding
2024-09-12 18:48:57 +01:00
Ralph Wessel 5dcab38086 Added "base.AddModel" method
Storage write methods
Subscriber implementations should be 'virtual Subscriber' to allow multiple inheritance
2024-09-12 18:00:22 +01:00
Ralph Wessel 461047f04a Updated VS projects
Updated gitignore for temp resource files
2024-09-12 00:10:03 +01:00
Ralph Wessel 8b765ec3d7 Added ModelCardDatabase::getSubscription 2024-09-11 23:18:03 +01:00
Ralph Wessel d00c20f0c6 ModelCardDatabase subscribes to project/merge events
ModelCardDatabase can be serialised as required for GetDocumentState method
Added ProjectSubscriber
Added ProjectEvent
2024-09-11 23:11:40 +01:00
Ralph Wessel 53dd72989a Added DocStoreSubscriber
Added DocStoreMergeEvent
DocumentStoreCore now handles merge events
Fixes to SelectionSubscriber
2024-09-10 23:35:12 +01:00
Ralph Wessel 7d9f939b8b Added DocumentStoreCore
Added DocumentStoreEngine
Added Addon::isSharedDocument
2024-09-10 22:28:29 +01:00
Ralph Wessel 7fe5ba6e9d Defined CardSetting and ModelCard classes 2024-09-09 16:45:41 +01:00
Ralph Wessel 00d76dbe12 Merge branch 'release/0.2.2' 2024-09-09 13:07:25 +01:00
Ralph Wessel 47b2e0b513 Merge tag '0.2.2' into develop
0.2.2
2024-09-09 13:07:25 +01:00
Ralph Wessel 7393fac437 Version bump 2024-09-09 13:07:05 +01:00
Ralph Wessel 997545b6ac Updated VS projects 2024-09-09 13:03:13 +01:00
Ralph Wessel ea3152d942 Added GetSendFilter
Reactivated sendBinding
2024-09-09 12:59:07 +01:00
Ralph Wessel 0b00af7d1d Updated VS project
Temporarily deactived "sendBinding" - appears to stop usual palette rendering (possibly further implementation required)
2024-09-09 09:39:47 +01:00
Ralph Wessel c68d2f3e25 Added placeholder Send binding 2024-09-09 09:28:00 +01:00
Ralph Wessel 9acc058f07 Simplified add/install syntax 2024-09-08 23:01:22 +01:00
Ralph Wessel c14e3ac095 Use system-path include for AC API headers to avoid API-code warnings 2024-09-06 23:38:57 +01:00
Ralph Wessel 83f38e946e Added account send test 2024-09-06 23:21:50 +01:00
Ralph Wessel 09bf8f9ffa Restructured objects to support optional (nullable) members 2024-09-06 18:55:13 +01:00
Ralph Wessel 7aa4cc9a51 Updated Xcode project 2024-09-06 09:24:14 +01:00
Jedd Morgan f22b19993a Added GetIsDevMode (#3) 2024-09-05 16:50:53 +01:00
Ralph Wessel 70ebe53335 Added unit test for account deserialisation 2024-09-05 14:42:37 +01:00
Ralph Wessel b491d901a1 Merge branch 'release/0.2.1' 2024-09-05 12:02:17 +01:00
Ralph Wessel 6d0340b310 Merge tag '0.2.1' into develop
0.2.1
2024-09-05 12:02:17 +01:00
Ralph Wessel eede544f69 Version bump 2024-09-05 12:01:57 +01:00
Ralph Wessel 7ffe7e3a82 Updated VS project - Debug configurations need DEBUG macro 2024-09-05 11:57:49 +01:00
Ralph Wessel e18d967c07 Updated VS project
Temporarily disabled SendBinding to allow GetAccounts testing
2024-09-05 11:41:46 +01:00
Ralph Wessel 7a3f46f54d Added empty SendBridge 2024-09-05 11:34:09 +01:00
Ralph Wessel 05b8e0343c Merge branch 'develop' of https://github.com/specklesystems/speckle-cpp-connectors into develop 2024-09-04 23:42:47 +01:00
Ralph Wessel 3f285a0fc7 Included ServerInfo and UserInfo in Accounts 2024-09-04 23:42:36 +01:00
Ralph Wessel 5a2d12e33c Updated VS projects 2024-09-04 23:21:28 +01:00
Ralph Wessel 03e8798128 Filled in additonal account classes, e.g. ServerInfo, UserInfo etc
Additions to speckle::Record
2024-09-04 23:14:57 +01:00
Ralph Wessel c64596fb57 Included Accounts filename in path to dbase 2024-09-04 17:52:29 +01:00
Ralph Wessel 4209afa9fa Updated VS projects 2024-09-04 16:31:01 +01:00
Ralph Wessel 7a01feab57 Connector class now includes 'getAccountDatabase'
AccountDatabase loaded on demand from Speckle App data directory
2024-09-04 13:18:37 +01:00
Ralph Wessel 471e2d5312 AccountsDBase additions/corrections (can now retrieve all accounts) 2024-09-04 09:33:53 +01:00
Ralph Wessel bb451fbc90 Defined AccountsDatabase
Filled in methods for Account
Database classes/methods refined
2024-09-04 01:19:12 +01:00
Ralph Wessel 8b00e88f63 Merge branch 'release/0.2.0' 2024-08-30 14:46:45 +01:00
Ralph Wessel bee15b4e77 Merge tag '0.2.0' into develop
0.2.0
2024-08-30 14:46:45 +01:00
Ralph Wessel 85f12793de Version bump 2024-08-30 14:46:17 +01:00
Ralph Wessel 485f021c6f Linked missing library to release build on VS 2024-08-30 14:44:49 +01:00
Ralph Wessel da9e9c1a67 Updated VS project 2024-08-30 13:43:01 +01:00
Ralph Wessel 48d2e11194 Generate unique ID for requestID 2024-08-30 13:37:00 +01:00
Ralph Wessel 2911afa3e7 Added Platform class
Console logging restricted to debug build
Some tidying
2024-08-30 13:32:41 +01:00
Ralph Wessel 49aae8d44f Updated VS project 2024-08-30 09:47:14 +01:00
Ralph Wessel ec85f534b3 Added Guid64 to requestID in BrowserBridge::sendEvent
Created Guid64 class
2024-08-30 09:43:46 +01:00
Ralph Wessel d1c314f2ad Fixed JSON tags 2024-08-29 23:39:47 +01:00
Ralph Wessel 9a8087b180 TriggerEvent tests working 2024-08-29 23:29:50 +01:00
Ralph Wessel cf3aa86ee4 Simplified BridgeArgument wrapper 2024-08-29 23:16:00 +01:00
Ralph Wessel fca1f0b999 Checking number of parameters in bridge function argument 2024-08-29 23:10:53 +01:00
Ralph Wessel 9e22d3b3b8 Added TriggerEvent test
Bridge functions now comply with BridgeChild interface and are populated with parent browser bridge when embedded
Some classes renamed for clarity
2024-08-29 21:23:34 +01:00
Ralph Wessel bd0be2bb42 Changed model card dagtabase tag to "models"
Minor namespace tweaks
2024-08-29 14:07:01 +01:00
Ralph Wessel c218da359f Logging working cross-platform 2024-08-28 23:22:44 +01:00
Ralph Wessel 4202e9f92c Removed temp DarkTheme tag from ConnectorConfig
Added code to log send/receive activity in JSBaseTransport
JSBaseTransport can export null
2024-08-28 23:13:37 +01:00
Ralph Wessel 9232b205d9 Fixed testBinding name
Added TEST_MODE macro for testBinding
RunMethod now return null for methods that don't return anything
2024-08-28 14:05:20 +01:00
Ralph Wessel 8e0d0f5c27 Updated VS project
Added ConnectorConfig.darkTheme (check if this is required)
JSArgType wrapper uses embedded value for serialisation
2024-08-28 00:53:57 +01:00
Ralph Wessel 550e9caa9c Argument for BrowserBridge methods is stringified JSON array of stringified JSON parameters - updated to facilitate import:
- Classes potentially used as JS argument templates can define this state by subclassing JSArgumentBase
- JSBridgeArgumentWrap now unpacks and deserialises each stringified parameter
- Argument template state automatically applied as argument types are defined
2024-08-27 23:47:30 +01:00
Ralph Wessel 2ca1713766 Added JSArgTye copy constructor 2024-08-27 22:46:58 +01:00
Ralph Wessel 3c5097e950 Updated VS projects 2024-08-27 17:40:48 +01:00
Jedd Morgan c0e46f1d23 small tweaks (#1) 2024-08-27 17:08:46 +01:00
Jedd Morgan 674ef928e0 escape buildresAC.bat (#2) 2024-08-27 17:08:31 +01:00
Ralph Wessel 696a4ea870 Added TestBinding and implemented associated test methods
Added speckle::utility::Exception
Added ErrorReport for BrowserBridge method execution
JSBridgeArgument is capable of capturing error conditions for later reporting
Implemented additional exception handling and return report to JS on method execution failure
2024-08-27 16:48:42 +01:00
Ralph Wessel 2d6412efd1 Fixed resource inputs 2024-08-22 17:05:08 +01:00
Ralph Wessel fe42f29275 Linked baseBinding to Speckle pallete 2024-08-22 16:50:47 +01:00
402 changed files with 43074 additions and 1946 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-*
+11 -3
View File
@@ -3,14 +3,17 @@ build/
Documents/
ResourceObjects/
Install/
enc_temp_folder/
.vs/
.vscode/
xcuserdata/
x64/
.DS_Store
.cache/
Documentation/*
!Documentation/Doxyfile
SpeckleConnector/Documentation/*
!SpeckleConnector/Documentation/Doxyfile
SpeckleLib/Documentation/*
!SpeckleLib/Documentation/Doxyfile
CMakeCache.txt
_deps/
CMakeFiles/
@@ -21,4 +24,9 @@ CMakeFiles/
XCBuildData/
**/*.xcsettings
*.log
.idea
.idea
*.mui
*.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
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SpeckleLib17", "..\SpeckleLib\SpeckleLib17.vcxproj", "{942743B7-B3CB-4F91-BE46-28937F5E3FD1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "..\ci-build\Build.csproj", "{702DE13A-1CCF-485D-A50D-846F645F07D3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug16|x64 = Debug16|x64
Debug16|x86 = Debug16|x86
Debug17|x64 = Debug17|x64
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|x86 = DebugAC27|x86
DebugAC28|x64 = DebugAC28|x64
DebugAC28|x86 = DebugAC28|x86
DebugVS2022|x64 = DebugVS2022|x64
DebugVS2022|x86 = DebugVS2022|x86
Release16|x64 = Release16|x64
Release16|x86 = Release16|x86
Release17|x64 = Release17|x64
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|x86 = ReleaseAC27|x86
ReleaseAC28|x64 = ReleaseAC28|x64
ReleaseAC28|x86 = ReleaseAC28|x86
ReleaseVS2019|x64 = ReleaseVS2019|x64
ReleaseVS2019|x86 = ReleaseVS2019|x86
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|x86.ActiveCfg = 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.Build.0 = DebugAC27|x64
{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}.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.Build.0 = DebugVW2024|x64
{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|x86.ActiveCfg = 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.Build.0 = ReleaseAC27|x64
{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}.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.Build.0 = ReleaseVW2024|x64
{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|x86.ActiveCfg = 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.Build.0 = Debug16|x64
{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}.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.Build.0 = Debug16|x64
{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|x86.ActiveCfg = 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.Build.0 = Release16|x64
{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}.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.Build.0 = Release16|x64
{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|x86.ActiveCfg = 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.Build.0 = DebugAC27|x64
{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}.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.Build.0 = DebugAC27|x64
{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|x86.ActiveCfg = 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.Build.0 = ReleaseAC27|x64
{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}.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.Build.0 = ReleaseAC27|x64
{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|x86.ActiveCfg = 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
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
File diff suppressed because it is too large Load Diff
+317 -23
View File
@@ -32,11 +32,53 @@
<Filter Include="Connector\Database">
<UniqueIdentifier>{2f459f56-86f0-4794-b4b7-1bd7b8ee5617}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Database\Model">
<UniqueIdentifier>{2820ad4f-60d9-436e-a7a2-d019d7e0ce0c}</UniqueIdentifier>
<Filter Include="Connector\Interface\Browser\Bridge\Config\Arg">
<UniqueIdentifier>{6a2f1f18-a554-4546-bba3-314d5f2ec9f9}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Database\Model\Card">
<UniqueIdentifier>{85935d00-16ac-466a-a614-ad9ea802bffa}</UniqueIdentifier>
<Filter Include="Connector\Interface\Browser\Bridge\Base\Arg">
<UniqueIdentifier>{d74446ad-e141-48ac-9fa0-8b82279bbdbf}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Interface\Browser\Bridge\Test">
<UniqueIdentifier>{9976ca16-8f99-44a2-b596-b81df82d847a}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Interface\Browser\Bridge\Test\Arg">
<UniqueIdentifier>{1656a0df-aa39-4f41-860f-7b278b31784a}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Interface\Browser\Bridge\Send">
<UniqueIdentifier>{2b87cf11-87cd-435f-ab24-42170c2e657e}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Database\Identity">
<UniqueIdentifier>{41395ee2-50f3-49c0-8859-23a3ad19a2fa}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Record">
<UniqueIdentifier>{a915e7ee-849f-48a9-aa7b-0ef6e358bee7}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Record\Model">
<UniqueIdentifier>{2b16c188-1d80-4d4d-830e-5c1e56ecf46e}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Record\Model\Filter">
<UniqueIdentifier>{b6d6326c-77f4-414a-bda6-e3e587c7ded2}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Record\Collection">
<UniqueIdentifier>{0ac4b0a4-6a2a-4a48-9757-1172effc20e7}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Interface\Browser\Bridge\Send\Arg">
<UniqueIdentifier>{6693f9a9-5ece-4853-b008-4064d1c551ab}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Interface\Browser\Bridge\Selection">
<UniqueIdentifier>{806f4af5-fa02-49b8-ac01-297991fe90ea}</UniqueIdentifier>
</Filter>
<Filter Include="Connector\Interface\Browser\Bridge\Selection\Arg">
<UniqueIdentifier>{8bb3df60-affe-4b66-8d78-f1b98e6ba8df}</UniqueIdentifier>
</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>
@@ -62,9 +104,6 @@
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Connector\Connector.cpp">
<Filter>Connector</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\ConnectorMenu.cpp">
<Filter>Connector\Interface</Filter>
</ClCompile>
@@ -80,9 +119,6 @@
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\ConfigBridge.cpp">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\ConnectorConfig.cpp">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\GetConfig.cpp">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClCompile>
@@ -92,9 +128,6 @@
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\BaseBridge.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\DocumentInfo.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetConnectorVersion.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
@@ -110,8 +143,137 @@
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\GetSourceApplicationVersion.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Database\Model\Card\ModelCardDatabase.cpp">
<Filter>Connector\Database\Model\Card</Filter>
<ClCompile Include="Connector\Interface\Browser\Bridge\Config\Arg\ConnectorConfig.cpp">
<Filter>Connector\Interface\Browser\Bridge\Config\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\Arg\DocumentInfo.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\GetComplexType.cpp">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\GoAway.cpp">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\SayHi.cpp">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TestBridge.cpp">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.cpp">
<Filter>Connector\Interface\Browser\Bridge\Test\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.cpp">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\SendBridge.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Send.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\GetSendFilters.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClCompile>
<ClCompile Include="Connector\Database\ModelCardDatabase.cpp">
<Filter>Connector\Database</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\CardMover.cpp">
<Filter>Connector\Record\Model</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\CardSetting.cpp">
<Filter>Connector\Record\Model</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\ModelCard.cpp">
<Filter>Connector\Record\Model</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\ReceiverModelCard.cpp">
<Filter>Connector\Record\Model</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\SenderModelCard.cpp">
<Filter>Connector\Record\Model</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\Filter\DirectSelectionSendFilter.cpp">
<Filter>Connector\Record\Model\Filter</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\Filter\EverythingSendFilter.cpp">
<Filter>Connector\Record\Model\Filter</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\Filter\FilterMover.cpp">
<Filter>Connector\Record\Model\Filter</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Model\Filter\SendFilter.cpp">
<Filter>Connector\Record\Model\Filter</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\AddModel.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Collection\RecordCollection.cpp">
<Filter>Connector\Record\Collection</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Arg\ConversionResult.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Arg\SendError.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Arg\SendViaBrowserArgs.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\Arg\SendObject.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Send\GetSendSettings.cpp">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Collection\FinishProxy.cpp">
<Filter>Connector\Record\Collection</Filter>
</ClCompile>
<ClCompile Include="Connector\Record\Collection\ProjectCollection.cpp">
<Filter>Connector\Record\Collection</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Selection\GetSelection.cpp">
<Filter>Connector\Interface\Browser\Bridge\Selection</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Selection\SelectionBridge.cpp">
<Filter>Connector\Interface\Browser\Bridge\Selection</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Selection\Arg\SelectionInfo.cpp">
<Filter>Connector\Interface\Browser\Bridge\Selection\Arg</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\HighlightModel.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClCompile>
<ClCompile Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.cpp">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</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>
@@ -136,9 +298,6 @@
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\ConfigBridge.h">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\ConnectorConfig.h">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\GetConfig.h">
<Filter>Connector\Interface\Browser\Bridge\Config</Filter>
</ClInclude>
@@ -148,9 +307,6 @@
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\BaseBridge.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\DocumentInfo.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\GetConnectorVersion.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
@@ -172,8 +328,146 @@
<ClInclude Include="Connector\Version.h">
<Filter>Connector</Filter>
</ClInclude>
<ClInclude Include="Connector\Database\Model\Card\ModelCardDatabase.h">
<Filter>Connector\Database\Model\Card</Filter>
<ClInclude Include="Connector\Interface\Browser\Bridge\Config\Arg\ConnectorConfig.h">
<Filter>Connector\Interface\Browser\Bridge\Config\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\Arg\DocumentInfo.h">
<Filter>Connector\Interface\Browser\Bridge\Base\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\GetComplexType.h">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\GoAway.h">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\SayHi.h">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TestBridge.h">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.h">
<Filter>Connector\Interface\Browser\Bridge\Test\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.h">
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\SendBridge.h">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Send.h">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\GetSendFilters.h">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClInclude>
<ClInclude Include="Connector\Database\ModelCardDatabase.h">
<Filter>Connector\Database</Filter>
</ClInclude>
<ClInclude Include="Connector\Database\Identity\RecordID.h">
<Filter>Connector\Database\Identity</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\CardMover.h">
<Filter>Connector\Record\Model</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\CardSetting.h">
<Filter>Connector\Record\Model</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\ModelCard.h">
<Filter>Connector\Record\Model</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\ReceiverModelCard.h">
<Filter>Connector\Record\Model</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\SenderModelCard.h">
<Filter>Connector\Record\Model</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\Filter\ArchicadEverythingFilter.h">
<Filter>Connector\Record\Model\Filter</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\Filter\ArchicadSelectionFilter.h">
<Filter>Connector\Record\Model\Filter</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\Filter\DirectSelectionSendFilter.h">
<Filter>Connector\Record\Model\Filter</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\Filter\EverythingSendFilter.h">
<Filter>Connector\Record\Model\Filter</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\Filter\FilterMover.h">
<Filter>Connector\Record\Model\Filter</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Model\Filter\SendFilter.h">
<Filter>Connector\Record\Model\Filter</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\AddModel.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\RemoveModel.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\UpdateModel.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Collection\RecordCollection.h">
<Filter>Connector\Record\Collection</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\ConversionResult.h">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendError.h">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendObject.h">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\Arg\SendViaBrowserArgs.h">
<Filter>Connector\Interface\Browser\Bridge\Send\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Send\GetSendSettings.h">
<Filter>Connector\Interface\Browser\Bridge\Send</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Collection\FinishProxy.h">
<Filter>Connector\Record\Collection</Filter>
</ClInclude>
<ClInclude Include="Connector\Record\Collection\ProjectCollection.h">
<Filter>Connector\Record\Collection</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Selection\GetSelection.h">
<Filter>Connector\Interface\Browser\Bridge\Selection</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Selection\SelectionBridge.h">
<Filter>Connector\Interface\Browser\Bridge\Selection</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Selection\Arg\SelectionInfo.h">
<Filter>Connector\Interface\Browser\Bridge\Selection\Arg</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\HighlightModel.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</ClInclude>
<ClInclude Include="Connector\Interface\Browser\Bridge\Base\OpenUrl.h">
<Filter>Connector\Interface\Browser\Bridge\Base</Filter>
</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>
</Project>
+30
View File
@@ -15,6 +15,21 @@
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</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'">
<LocalDebuggerCommand>C:\Program Files\Vectorworks 2024\Vectorworks2024.exe</LocalDebuggerCommand>
<LocalDebuggerAttach>false</LocalDebuggerAttach>
@@ -30,4 +45,19 @@
<LocalDebuggerAttach>false</LocalDebuggerAttach>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</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>
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"?>
<Scheme
LastUpgradeVersion = "1530"
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
@@ -29,7 +29,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "219F30342C768F0A009834E9"
BuildableName = "Connector-AC27-Test.vwlibrary"
BuildableName = "Connector-AC27-Test.bundle"
BlueprintName = "Connector-AC27-Test"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1530"
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1530"
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
@@ -39,6 +39,10 @@
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Graphisoft/Archicad 27/Archicad 27.app">
</PathRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1530"
LastUpgradeVersion = "1610"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
@@ -20,7 +20,7 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "219F30342C768F0A009834E9"
BuildableName = "Connector-AC27-Test.vwlibrary"
BuildableName = "Connector-AC27-Test.bundle"
BlueprintName = "Connector-AC27-Test"
ReferencedContainer = "container:Connector.xcodeproj">
</BuildableReference>
@@ -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>
+113 -13
View File
@@ -1,42 +1,112 @@
#include "Active/File/Directory.h"
#include "ConnectorResource.h"
#include "Connector/Connector.h"
#include "Connector/Database/Model/Card/ModelCardDatabase.h"
#include "Interface/ConnectorMenu.h"
#include "Interface/ConnectorPalette.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Interface/ConnectorMenu.h"
#include "Connector/Interface/ConnectorPalette.h"
#include "Connector/Tool/ElementHighlighter.h"
#include "Speckle/Database/AccountDatabase.h"
#include "Speckle/Environment/Addon.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::environment;
using namespace connector;
using namespace connector::database;
using namespace connector::environment;
using namespace speckle::database;
using namespace speckle::environment;
using namespace speckle::utility;
namespace {
///The Connector addon class
//The Speckle application data/support directory name
const char* speckleDataDirName = "Speckle";
//The account database name
const char* accountDBaseName = "Accounts.db";
/*!
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 {
public:
/*!
Constructor
@param name The connector add-on name
*/
ConnectorInstance(const String& name) : ConnectorAddon{name} {
add(std::make_shared<ConnectorMenu>());
add(std::make_shared<ConnectorPalette>());
//Define the connector UI components
add<ConnectorMenu>();
add<ConnectorPalette>();
add<ElementHighlighter>();
}
// MARK: Functions (const)
/*!
Get the model card database
@return The model card database
Get the account database
@return The account database
*/
const ModelCardDatabase* getModelCards() const override { return &m_modelCards; }
const AccountDatabase* getAccountDatabase() const override;
protected:
/*!
Make a new new project. Allows Addon subclasses to define a Project subclass with additional functions/databases
@return A new project instance
*/
virtual std::shared_ptr<Project> makeProject() const override {
return std::dynamic_pointer_cast<Project>(std::make_shared<ConnectorProject>());
}
private:
ModelCardDatabase m_modelCards;
///The accounts database - always a single instance for the active user
mutable std::unique_ptr<AccountDatabase> m_account;
///Mutex to control access to the accounts database
mutable std::mutex m_accountMutex;
};
///The active addon instance
std::unique_ptr<ConnectorAddon> m_addonInstance;
/*--------------------------------------------------------------------
Get the speckle application data directory (creating if missing)
return: The application data directory (nullopt = missing and unable to create)
--------------------------------------------------------------------*/
Directory::Option getAppDataDirectory() {
auto appData = Directory::appData();
if (!appData)
return std::nullopt;
return Directory{*appData, speckleDataDirName, true};
} //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
}
/*--------------------------------------------------------------------
@@ -45,16 +115,46 @@ namespace {
name: The add-on name
--------------------------------------------------------------------*/
ConnectorAddon::ConnectorAddon(const speckle::utility::String& name) : Addon{name} {
#ifdef WINDOWS
invokeSpecialisation();
#endif
} //ConnectorAddon::ConnectorAddon
/*--------------------------------------------------------------------
Get the account database
return: The account database
--------------------------------------------------------------------*/
const AccountDatabase* ConnectorInstance::getAccountDatabase() const {
const std::lock_guard<std::mutex> lock{m_accountMutex};
if (!m_account) {
auto speckleDirectory = getAppDataDirectory();
if (!speckleDirectory)
return nullptr;
m_account = std::make_unique<AccountDatabase>(speckleDirectory->getPath() / accountDBaseName);
}
return m_account.get();
} //ConnectorInstance::getAccounts
/*--------------------------------------------------------------------
Get an object representing the connector instance
@return The active connector instance (nullptr if no connector is running)
--------------------------------------------------------------------*/
ConnectorAddon* connector::connector() {
return m_addonInstance.get();
} //connector::connector
#ifdef ARCHICAD
/*!
The following is the C interface for the plugin to Archicad as specified by the API
*/
#include "ACAPinc.h"
#include "APIdefs_Registration.h"
#include <ACAPinc.h>
#include <APIdefs_Registration.h>
/*--------------------------------------------------------------------
Confirm that the plugin is able to run in the current environment
+5 -8
View File
@@ -1,10 +1,7 @@
#include "Speckle/Environment/Addon.h"
#include "Speckle/Utility/String.h"
namespace connector::database {
class ModelCardDatabase;
namespace speckle::database {
class AccountDatabase;
}
namespace connector {
@@ -16,10 +13,10 @@ namespace connector {
// MARK: Functions (const)
/*!
Get the model card database
@return The model card database
Get the account database
@return The account database
*/
const virtual database::ModelCardDatabase* getModelCards() const = 0;
const virtual speckle::database::AccountDatabase* getAccountDatabase() const = 0;
protected:
/*!
@@ -28,6 +28,8 @@ enum StringResource {
enum TitleString {
addonNameID = 1,
addonDescriptionID,
noStoreyID,
showLayersID,
};
@@ -37,12 +39,13 @@ enum PromptString {
//Information strings (in UI content, logging, reports)
enum InfoString {
enum GeneralString {
};
//Notification strings (advice displayed in alerts)
enum NotifyString {
showHiddenLayersID = 1,
};
@@ -53,6 +56,11 @@ enum WarningString {
//Error strings (errors displayed in alerts)
enum ErrorString {
noSelectedModelItemsID = 1,
modelCardNotFoundID,
noProjectOpenID,
accountNotFoundID,
elementTypeNotConvertedID,
};
#endif //CONNECTOR_RESOURCE
@@ -0,0 +1,8 @@
#ifndef CONNECTOR_DATABASE_ID
#define CONNECTOR_DATABASE_ID
namespace connector::database {
}
#endif //CONNECTOR_DATABASE_ID
@@ -0,0 +1,141 @@
#include "Connector/Database/ModelCardDatabase.h"
#include "Active/Database/Storage/Storage.h"
#include "Active/Serialise/JSON/JSONTransport.h"
#include "Connector/Record/Model/CardMover.h"
#include "Speckle/Database/Identity/RecordID.h"
#include "Speckle/Database/Storage/DocumentStore/DocumentStoreEngine.h"
#include <array>
using namespace active::container;
using namespace active::database;
using namespace active::event;
using namespace active::serialise;
using namespace active::serialise::json;
using namespace connector::database;
using namespace connector::record;
using namespace speckle::database;
using namespace speckle::utility;
namespace connector::database {
///ModelCard database engine declaration
class ModelCardDatabase::Engine : public DocumentStoreEngine<ModelCard, CardMover, JSONTransport, RecordID> {
using base = DocumentStoreEngine<ModelCard, CardMover, JSONTransport, RecordID>;
using base::base;
};
///ModelCard database storage declaration
class ModelCardDatabase::Store : public Storage<ModelCard, JSONTransport,
RecordID, RecordID, RecordID, RecordID> {
using base = Storage<ModelCard, JSONTransport,
RecordID, RecordID, RecordID, RecordID>;
using base::base;
};
}
namespace {
///The document storage identifier for model cards
const char* modelCardDBaseName = "connector::database::ModelModelCardDatabase";
///The document storage identifier for model cards
const char* modelCardTableName = "models";
}
/*--------------------------------------------------------------------
Constructor
--------------------------------------------------------------------*/
ModelCardDatabase::ModelCardDatabase() {
m_engine = std::make_shared<Engine>(modelCardDBaseName,
//Schema
DBaseSchema{active::utility::String{modelCardDBaseName},
//Tables
{
//Model card table
{
modelCardTableName, 0, 0, {} //The table specifics aren't relevant in this context
}
}
}
);
m_store = std::make_shared<Store>(m_engine);
} //ModelCardDatabase::ModelCardDatabase
/*--------------------------------------------------------------------
Destructor
--------------------------------------------------------------------*/
ModelCardDatabase::~ModelCardDatabase() {}
/*--------------------------------------------------------------------
Get a specified card from the database
return: The requested card (nullptr on failure)
--------------------------------------------------------------------*/
ModelCard::Unique ModelCardDatabase::getCard(const speckle::utility::String& cardID) const {
return m_store->getObject(cardID);
} //ModelCardDatabase::getCard
/*--------------------------------------------------------------------
Get all model cards
return: All the cards
--------------------------------------------------------------------*/
Vector<ModelCard> ModelCardDatabase::getCards() const {
return m_store->getObjects();
} //ModelCardDatabase::getCards
/*--------------------------------------------------------------------
Write a card to storage
card: The card to write
--------------------------------------------------------------------*/
void ModelCardDatabase::write(ModelCard& card) const {
m_store->write(card);
} //ModelCardDatabase::write
/*--------------------------------------------------------------------
Erase a card
cardID: The ID of the card to erase
--------------------------------------------------------------------*/
void ModelCardDatabase::erase(const String& cardID) const {
m_store->erase(cardID);
} //ModelCardDatabase::erase
/*--------------------------------------------------------------------
Get the unique ID of the engine storage
return: The databas unique ID
--------------------------------------------------------------------*/
RecordID ModelCardDatabase::getStoreID() const {
return m_engine->getUniqueID();
} //ModelCardDatabase::getStoreID
/*--------------------------------------------------------------------
Get a serialisation wrapper for the database
return: A database wrapper
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> ModelCardDatabase::wrapper() const {
return m_store->wrapper();
} //ModelCardDatabase::wrapper
/*--------------------------------------------------------------------
Get the database subscription (the content is document-based, and must react to document operations)
return: The database subscription (add weakly to publisher)
--------------------------------------------------------------------*/
std::shared_ptr<active::event::Subscriber> ModelCardDatabase::getSubscription() {
return std::dynamic_pointer_cast<Subscriber>(m_engine);
} //ModelCardDatabase::getSubscription
@@ -0,0 +1,81 @@
#ifndef CONNECTOR_DATABASE_MODEL_CARD_DATABASE
#define CONNECTOR_DATABASE_MODEL_CARD_DATABASE
#include "Connector/Record/Model/ModelCard.h"
namespace active::event {
class Subscriber;
}
namespace connector::database {
/*!
Database of model cards relating to a specific project
*/
class ModelCardDatabase {
public:
// MARK: - Constructors
/*!
Constructor
*/
ModelCardDatabase();
ModelCardDatabase(const ModelCardDatabase&) = delete;
/*!
Destructor
*/
~ModelCardDatabase();
// MARK: - Functions (const)
/*!
Get a specified card from the database
@return The requested card (nullptr on failure)
*/
record::ModelCard::Unique getCard(const speckle::utility::String& cardID) const;
/*!
Get all model cards
@return All the cards
*/
active::container::Vector<record::ModelCard> getCards() const;
/*!
Write a card to storage
@param card The card to write
*/
void write(record::ModelCard& card) const;
/*!
Erase a card
@param cardID The ID of the card to erase
*/
void erase(const speckle::utility::String& cardID) const;
/*!
Get a serialisation wrapper for the database
@return A database wrapper
*/
std::unique_ptr<active::serialise::Cargo> wrapper() const;
/*!
Get the unique ID of the engine storage
@return The database unique ID
*/
speckle::database::RecordID getStoreID() const;
// MARK: - Functions (mutating)
/*!
Get the database subscription (the content is document-based, and must react to document operations)
@return The database subscription (add weakly to publisher)
*/
std::shared_ptr<active::event::Subscriber> getSubscription();
private:
class Engine;
class Store;
///Model card database storage
std::shared_ptr<Engine> m_engine;
std::shared_ptr<Store> m_store;
};
}
#endif //CONNECTOR_DATABASE_MODEL_CARD_DATABASE
@@ -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"
// MARK: - Event identities
//Identifier for event signalling the connector palette visibility should be toggled
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
@@ -2,6 +2,8 @@
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Connector.h"
#include "Speckle/Database/AccountDatabase.h"
#include "Speckle/Record/Credentials/Account.h"
using namespace active::container;
@@ -12,14 +14,14 @@ using namespace speckle::utility;
namespace {
using WrappedValue = active::serialise::CargoHold<ContainerWrap<Vector, Account>, Vector<Account>>;
using WrappedValue = CargoHold<ContainerWrap<Vector<Account>>, Vector<Account>>;
}
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetAccounts::GetAccounts() : JSBridgeMethod{"GetAccounts", [&]() {
GetAccounts::GetAccounts() : BridgeMethod{"GetAccounts", [&]() {
return run();
}} {}
@@ -29,8 +31,11 @@ GetAccounts::GetAccounts() : JSBridgeMethod{"GetAccounts", [&]() {
return: The accounts (empty array when none defined)
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetAccounts::run(void) const {
Vector<Account> accounts;
///TODO: Get the accounts here - returning an empty array for testing only
return std::make_unique<WrappedValue>(accounts);
std::unique_ptr<Cargo> GetAccounts::run() const {
std::unique_ptr<Vector<Account>> result;
if (auto accountDBase = connector()->getAccountDatabase(); accountDBase != nullptr)
result = std::make_unique<Vector<Account>>(accountDBase->getAccounts());
else
result = std::make_unique<Vector<Account>>();
return std::make_unique<WrappedValue>(std::move(result));
} //GetAccounts::run
@@ -1,14 +1,14 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_ACCOUNTS
#define CONNECTOR_INTERFACE_BRIDGE_GET_ACCOUNTS
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to retrieve the names of the methods supported by the bridge
JS Function class to retrieve the user's account(s)
*/
class GetAccounts : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
class GetAccounts : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
@@ -24,7 +24,7 @@ namespace connector::interfac::browser::bridge {
Get the accounts
@return The accounts (empty array when none defined)
*/
std::unique_ptr<active::serialise::Cargo> run(void) const;
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
@@ -0,0 +1,36 @@
#include "Connector/Interface/Browser/Bridge/Base/AddModel.h"
#include "Connector/Connector.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h"
using namespace active::container;
using namespace active::serialise;
using namespace connector::environment;
using namespace connector::record;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
AddModel::AddModel() : BridgeMethod{"AddModel", [&](const ModelCardEventWrapper& card) {
return run(card.get());
}} {}
/*--------------------------------------------------------------------
Add a model card to document storage
card: The card to add
--------------------------------------------------------------------*/
void AddModel::run(const ModelCard& card) const {
auto project = connector()->getActiveProject().lock();
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
@@ -0,0 +1,40 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_ADD_MODEL
#define CONNECTOR_INTERFACE_BRIDGE_ADD_MODEL
#include "Active/Serialise/CargoHold.h"
#include "Connector/Record/Model/CardMover.h"
#include "Connector/Record/Model/ModelCard.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
///Argument parameter for a model card
using CardHold = active::serialise::CargoHold<connector::record::CardMover, connector::record::ModelCard>;
///Argument type for this method
using ModelCardEventWrapper = speckle::interfac::browser::bridge::JSArgType<CardHold>;
/*!
JS Function class to add a model card to the document storage
*/
class AddModel : public speckle::interfac::browser::bridge::BridgeMethod<ModelCardEventWrapper, void> {
public:
// MARK: - Constructors
/*!
Default constructor
*/
AddModel();
// MARK: - Functions (const)
/*!
Add a model card to document storage
@param card The card to add
*/
void run(const connector::record::ModelCard& card) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_ADD_MODEL
@@ -1,4 +1,4 @@
#include "Connector/Interface/Browser/Bridge/Base/DocumentInfo.h"
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
@@ -19,9 +19,9 @@ namespace {
///Serialisation field IDs
static std::array fieldID = {
Identity{"Location"},
Identity{"Name"},
Identity{"Id"},
Identity{"location"},
Identity{"name"},
Identity{"id"},
};
}
@@ -1,5 +1,5 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
#define CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
#ifndef CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO
#define CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO
#include "Active/Serialise/Package/Package.h"
#include "Speckle/Utility/String.h"
@@ -29,33 +29,33 @@ namespace connector::interfac::browser::bridge {
// MARK: - Public variables (NB: Assuming to class invariants or overrides for this data, so making public for simplicity)
///The project location
speckle::utility::String location; //TODO: Confirm this is an address
///The URL of the project file (non-teamwork) or server (teamwork)
speckle::utility::String location;
///The project name
speckle::utility::String name; //TODO: Assume project name rather than document (file) name - need to confirm
speckle::utility::String name;
///A unique, persistent ID for the project document
speckle::utility::String ID; //TODO: should possibly be a guid - need to check
speckle::utility::String ID;
// MARK: - Serialisation
/*!
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
bool fillInventory(active::serialise::Inventory& inventory) const override;
/*!
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
/*!
Set to the default package content
*/
Set to the default package content
*/
void setDefault() override;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
#endif //CONNECTOR_INTERFACE_BRIDGE_DOCUMENT_INFO
@@ -1,10 +1,26 @@
#include "Connector/Interface/Browser/Bridge/Base/BaseBridge.h"
#include "Connector/Interface/Browser/Bridge/Base/AddModel.h"
#include "Connector/Interface/Browser/Bridge/Base/GetConnectorVersion.h"
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentInfo.h"
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentState.h"
#include "Connector/Interface/Browser/Bridge/Base/GetSourceApplicationName.h"
#include "Connector/Interface/Browser/Bridge/Base/GetSourceApplicationVersion.h"
#include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h"
#include "Connector/Interface/Browser/Bridge/Base/UpdateModel.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 "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;
@@ -13,9 +29,34 @@ using namespace connector::interfac::browser::bridge;
--------------------------------------------------------------------*/
BaseBridge::BaseBridge() : BrowserBridge{"baseBinding"} {
//Add bridge methods
addMethod<AddModel>();
addMethod<GetConnectorVersion>();
addMethod<GetDocumentInfo>();
addMethod<GetDocumentState>();
addMethod<GetSourceApplicationName>();
addMethod<GetSourceApplicationVersion>();
addMethod<HighlightModel>();
addMethod<HighlightObjects>();
addMethod<OpenUrl>();
addMethod<RemoveModel>();
addMethod<UpdateModel>();
} //BaseBridge::BaseBridge
/*--------------------------------------------------------------------
Handle a project event
event: The project event
return: True if the event should be closed
--------------------------------------------------------------------*/
bool BaseBridge::handle(const speckle::event::ProjectEvent& event) {
using enum speckle::event::ProjectEvent::Type;
switch (event.getType()) {
case open:
sendEvent("documentChanged");
break;
default:
break;
}
return false;
} //BaseBridge::handle
@@ -2,13 +2,14 @@
#define CONNECTOR_INTERFACE_BRIDGE_BASE_BRIDGE
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Event/Subscriber/ProjectSubscriber.h"
namespace connector::interfac::browser::bridge {
/*!
A browser bridge to provide configuration settings
A browser bridge to manage document settings
*/
class BaseBridge : public speckle::interfac::browser::bridge::BrowserBridge {
class BaseBridge : public speckle::interfac::browser::bridge::BrowserBridge, public speckle::event::ProjectSubscriber {
public:
// MARK: - Types
@@ -22,6 +23,14 @@ namespace connector::interfac::browser::bridge {
Default constructor
*/
BaseBridge();
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;
};
}
@@ -19,19 +19,19 @@ namespace {
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetConnectorVersion::GetConnectorVersion() : JSBridgeMethod{"GetConnectorVersion", [&]() {
GetConnectorVersion::GetConnectorVersion() : BridgeMethod{"GetConnectorVersion", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Get the host application version
Get the connector software version
return: The application version
return: The connector software version
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetConnectorVersion::run() const {
//Implement other platforms as required
String result{active::utility::String{connector::versionMajor} + "." + active::utility::String{connector::versionMinor} + "." +
active::utility::String{connector::versionPatch}};
String result{String{connector::versionMajor} + "." + String{connector::versionMinor} + "." +
String{connector::versionPatch}};
return std::make_unique<WrappedValue>(result);
} //GetConnectorVersion::run
@@ -1,16 +1,16 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_VERSION
#define CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_VERSION
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
class ConnectorConfig;
/*!
JS Function class to retrieve the names of the methods supported by the bridge
JS Function class to get the connector software version
*/
class GetConnectorVersion : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
class GetConnectorVersion : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
@@ -23,8 +23,8 @@ namespace connector::interfac::browser::bridge {
// MARK: - Functions (const)
/*!
Get the host application version
@return The application version
Get the connector software version
@return The connector software version
*/
std::unique_ptr<active::serialise::Cargo> run() const;
};
@@ -1,11 +1,16 @@
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentInfo.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Interface/Browser/Bridge/Base/DocumentInfo.h"
#include "Connector/Connector.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
#include "Speckle/Environment/Project.h"
#include "Speckle/Utility/Guid.h"
using namespace active::container;
using namespace active::serialise;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
@@ -18,7 +23,7 @@ namespace {
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetDocumentInfo::GetDocumentInfo() : JSBridgeMethod{"GetDocumentInfo", [&]() {
GetDocumentInfo::GetDocumentInfo() : BridgeMethod{"GetDocumentInfo", [&]() {
return run();
}} {}
@@ -28,8 +33,19 @@ GetDocumentInfo::GetDocumentInfo() : JSBridgeMethod{"GetDocumentInfo", [&]() {
return: The document info
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetDocumentInfo::run(void) const {
///TODO: Get the document info here - returning mocked values for now
DocumentInfo docInfo{"Somewhere", "Something", String{active::utility::Guid{true}.operator active::utility::String()}};
return std::make_unique<WrappedValue>(docInfo);
std::unique_ptr<Cargo> GetDocumentInfo::run() const {
auto docInfo = std::make_unique<DocumentInfo>();
auto project = connector()->getActiveProject().lock();
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return nullptr;
auto info = connectorProject->getInfo();
docInfo->name = info.name;
if (info.path)
docInfo->location = *info.path;
if (auto cardDatabase = connectorProject->getModelCardDatabase(); cardDatabase != nullptr)
docInfo->ID = cardDatabase->getStoreID();
else
docInfo->ID = Guid{true}.operator String();
return std::make_unique<WrappedValue>(std::move(docInfo));
} //GetDocumentInfo::run
@@ -1,14 +1,14 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_INFO
#define CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_INFO
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to retrieve the information about the active document
*/
class GetDocumentInfo : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
class GetDocumentInfo : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
@@ -24,7 +24,7 @@ namespace connector::interfac::browser::bridge {
Get the document info
@return The document info
*/
std::unique_ptr<active::serialise::Cargo> run(void) const;
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
@@ -1,37 +1,35 @@
#include "Connector/Interface/Browser/Bridge/Base/GetDocumentState.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Interface/Browser/Bridge/Base/DocumentInfo.h"
#include "Connector/Database/Model/Card/ModelCardDatabase.h"
#include "Connector/Connector.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h"
using namespace active::container;
using namespace active::serialise;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge;
using namespace connector::database;
using namespace speckle::utility;
namespace {
using WrappedValue = active::serialise::CargoHold<PackageWrap, ModelCardDatabase>;
}
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetDocumentState::GetDocumentState() : JSBridgeMethod{"GetDocumentState", [&]() {
GetDocumentState::GetDocumentState() : BridgeMethod{"GetDocumentState", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Get the document info
Get the document model cards
return: The document info
return: The document model cards
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetDocumentState::run(void) const {
///TODO: Retrieve the model card database from connector()->getModelCards() in future (when implemented)
ModelCardDatabase modelCards; //This is just a temp so something can be sent back to the JS for the interim
return std::make_unique<WrappedValue>(modelCards);
std::unique_ptr<Cargo> GetDocumentState::run() const {
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 nullptr;
} //GetDocumentState::run
@@ -1,14 +1,14 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_STATE
#define CONNECTOR_INTERFACE_BRIDGE_GET_DOCUMENT_STATE
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to retrieve the information about the active document
JS Function class to retrieve model cards stored in the current document
*/
class GetDocumentState : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
class GetDocumentState : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
@@ -21,10 +21,10 @@ namespace connector::interfac::browser::bridge {
// MARK: - Functions (const)
/*!
Get the document info
@return The document info
Get the document model cards
@return The document model cards
*/
std::unique_ptr<active::serialise::Cargo> run(void) const;
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
@@ -18,7 +18,7 @@ namespace {
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetSourceApplicationName::GetSourceApplicationName() : JSBridgeMethod{"GetSourceApplicationName", [&]() {
GetSourceApplicationName::GetSourceApplicationName() : BridgeMethod{"GetSourceApplicationName", [&]() {
return run();
}} {}
@@ -28,7 +28,7 @@ GetSourceApplicationName::GetSourceApplicationName() : JSBridgeMethod{"GetSource
return: The application name
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetSourceApplicationName::run(void) const {
std::unique_ptr<Cargo> GetSourceApplicationName::run() const {
//Implement other platforms as required
#ifdef ARCHICAD
String result{"Archicad"};
@@ -1,14 +1,14 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_APP_NAME
#define CONNECTOR_INTERFACE_BRIDGE_GET_APP_NAME
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to retrieve the host application name
*/
class GetSourceApplicationName : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
class GetSourceApplicationName : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
@@ -18,7 +18,7 @@ namespace {
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetSourceApplicationVersion::GetSourceApplicationVersion() : JSBridgeMethod{"GetSourceApplicationVersion", [&]() {
GetSourceApplicationVersion::GetSourceApplicationVersion() : BridgeMethod{"GetSourceApplicationVersion", [&]() {
return run();
}} {}
@@ -1,7 +1,7 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_APP_VERSION
#define CONNECTOR_INTERFACE_BRIDGE_GET_APP_VERSION
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
@@ -10,7 +10,7 @@ namespace connector::interfac::browser::bridge {
/*!
JS Function class to get the host application version
*/
class GetSourceApplicationVersion : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
class GetSourceApplicationVersion : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
@@ -0,0 +1,60 @@
#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/Connector.h"
#include "Connector/ConnectorResource.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Event/ConnectorEventID.h"
#include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h"
#include "Connector/Record/Model/SenderModelCard.h"
#include "Connector/Record/Model/Filter/SendFilter.h"
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Record/Element/Element.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Environment/Host.h"
#include "Speckle/Environment/Project.h"
using namespace active::event;
using namespace active::setting;
using namespace connector::environment;
using namespace connector::interfac::browser::bridge;
using namespace connector::record;
using namespace speckle::environment;
using namespace speckle::record::element;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
HighlightModel::HighlightModel() : BridgeMethod{"HighlightModel", [&](const HighlightModelArgs& args) {
run(args);
}} {}
/*--------------------------------------------------------------------
Highlight elements linked to the model card selection
modelCardID: The ID of the target model card
--------------------------------------------------------------------*/
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
auto modelCardDatabase = connectorProject->getModelCardDatabase();
auto modelCard = modelCardDatabase->getCard(modelCardID);
if (!modelCard) {
getBridge()->sendEvent("setModelError",
std::make_unique<SendError>(connector()->getLocalString(errorString, modelCardNotFoundID), modelCardID));
return;
}
if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get())) {
ValueSetting elementIDs{recordLinks};
for (const auto& elementID : senderCard->getFilter().getElementIDs())
elementIDs.emplace_back(GuidValue{elementID});
connector()->publish(Event{setElementHighlight, { elementIDs }});
}
} //HighlightModel::run
@@ -0,0 +1,39 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_MODEL
#define CONNECTOR_INTERFACE_BRIDGE_HIGHLIGHT_MODEL
#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 HighlightModelArgs = speckle::interfac::browser::bridge::JSArgType<StringHold>;
/*!
JS Function class to highlight elements from the selected model card in the open document
*/
class HighlightModel : public speckle::interfac::browser::bridge::BridgeMethod<HighlightModelArgs, void> {
public:
// MARK: - Constructors
/*!
Constructor
*/
HighlightModel();
// MARK: - Functions (const)
/*!
Highlight elements linked to the model card selection
@param modelCardID The ID of the target model card
*/
void run(const speckle::utility::String& modelCardID) const;
};
}
#endif //CONNECTOR_INTERFACE_HIGHLIGHT_MODEL
@@ -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
@@ -0,0 +1,24 @@
#include "Connector/Interface/Browser/Bridge/Base/OpenUrl.h"
#include "Speckle/Environment/Platform.h"
using namespace connector::interfac::browser::bridge;
using namespace speckle::environment;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
OpenUrl::OpenUrl() : BridgeMethod{"OpenUrl", [&](const SendArgs& args) {
run(args);
}} {}
/*--------------------------------------------------------------------
Opens an url
url: The URL to open
--------------------------------------------------------------------*/
void OpenUrl::run(const String& url) const {
platform()->openURL(url);
} //OpenUrl::run
@@ -0,0 +1,41 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_OPEN_URL
#define CONNECTOR_INTERFACE_BRIDGE_OPEN_URL
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
class ConnectorConfig;
///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 SendArgs = speckle::interfac::browser::bridge::JSArgType<StringHold>;
/*!
JS Function class to highlight elements from the selected model card in the open document
*/
class OpenUrl : public speckle::interfac::browser::bridge::BridgeMethod<SendArgs, void> {
public:
// MARK: - Constructors
/*!
Constructor
*/
OpenUrl();
// MARK: - Functions (const)
/*!
Opens an url
@param url The URL to open
*/
void run(const speckle::utility::String& url) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_OPEN_URL
@@ -0,0 +1,34 @@
#include "Connector/Interface/Browser/Bridge/Base/RemoveModel.h"
#include "Connector/Connector.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Database/ModelCardDatabase.h"
using namespace active::container;
using namespace active::serialise;
using namespace connector::environment;
using namespace connector::record;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
RemoveModel::RemoveModel() : BridgeMethod{"RemoveModel", [&](const ModelCardEventWrapper& card) {
return run(card.get());
}} {}
/*--------------------------------------------------------------------
Add a model card to document storage
card: The card to add
--------------------------------------------------------------------*/
void RemoveModel::run(const ModelCard& card) const {
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());
} //RemoveModel::run
@@ -0,0 +1,40 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_REMOVE_MODEL
#define CONNECTOR_INTERFACE_BRIDGE_REMOVE_MODEL
#include "Active/Serialise/CargoHold.h"
#include "Connector/Record/Model/CardMover.h"
#include "Connector/Record/Model/ModelCard.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
///Argument parameter for a model card
using CardHold = active::serialise::CargoHold<connector::record::CardMover, connector::record::ModelCard>;
///Argument type for this method
using ModelCardEventWrapper = speckle::interfac::browser::bridge::JSArgType<CardHold>;
/*!
JS Function class to remove a model card from the document storage
*/
class RemoveModel : public speckle::interfac::browser::bridge::BridgeMethod<ModelCardEventWrapper, void> {
public:
// MARK: - Constructors
/*!
Default constructor
*/
RemoveModel();
// MARK: - Functions (const)
/*!
Remove a model card from document storage
@param card The card to remove
*/
void run(const connector::record::ModelCard& card) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_REMOVE_MODEL
@@ -0,0 +1,43 @@
#include "Connector/Interface/Browser/Bridge/Base/UpdateModel.h"
#include "Connector/Connector.h"
#include "Connector/Database/ModelCardDatabase.h"
#include "Connector/Environment/ConnectorProject.h"
#include "Connector/Interface/Browser/Bridge/Base/Arg/DocumentInfo.h"
using namespace active::container;
using namespace active::serialise;
using namespace connector::environment;
using namespace connector::record;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
using WrappedValue = active::serialise::CargoHold<PackageWrap, DocumentInfo>;
}
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
UpdateModel::UpdateModel() : BridgeMethod{"UpdateModel", [&](const ModelCardEventWrapper& card) {
return run(card.get());
}} {}
/*--------------------------------------------------------------------
Update a model card in document storage
card: The card to update
--------------------------------------------------------------------*/
void UpdateModel::run(const ModelCard& card) const {
auto project = connector()->getActiveProject().lock();
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
@@ -0,0 +1,40 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_UPDATE_MODEL
#define CONNECTOR_INTERFACE_BRIDGE_UPDATE_MODEL
#include "Active/Serialise/CargoHold.h"
#include "Connector/Record/Model/CardMover.h"
#include "Connector/Record/Model/ModelCard.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
///Argument parameter for a model card
using CardHold = active::serialise::CargoHold<connector::record::CardMover, connector::record::ModelCard>;
///Argument type for this method
using ModelCardEventWrapper = speckle::interfac::browser::bridge::JSArgType<CardHold>;
/*!
JS Function class to update a model card in document storage
*/
class UpdateModel : public speckle::interfac::browser::bridge::BridgeMethod<ModelCardEventWrapper, void> {
public:
// MARK: - Constructors
/*!
Default constructor
*/
UpdateModel();
// MARK: - Functions (const)
/*!
Update a model card in document storage
@param card The card to update
*/
void run(const connector::record::ModelCard& card) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_UPDATE_MODEL
@@ -1,6 +1,7 @@
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
#include <array>
@@ -16,7 +17,7 @@ namespace {
///Serialisation field IDs
static std::array fieldID = {
Identity{"DarkTheme"},
Identity{"darkTheme"},
};
}
@@ -2,6 +2,7 @@
#define CONNECTOR_INTERFACE_BRIDGE_CONNECTOR_CONFIG
#include "Active/Serialise/Package/Package.h"
#include "Speckle/Interface/Browser/Bridge/ArgumentBase.h"
namespace connector::interfac::browser::bridge {
@@ -24,7 +25,7 @@ namespace connector::interfac::browser::bridge {
// MARK: - Public variables (NB: Assuming to class invariants or overrides for this data, so making public for simplicity)
///?
///True if the UI renders in dark mode
bool isDarkTheme = true;
// MARK: - Serialisation
@@ -2,6 +2,7 @@
#include "Connector/Interface/Browser/Bridge/Config/GetConfig.h"
#include "Connector/Interface/Browser/Bridge/Config/UpdateConfig.h"
#include "Connector/Interface/Browser/Bridge/Config/GetIsDevMode.h"
using namespace connector::interfac::browser::bridge;
@@ -12,4 +13,5 @@ ConfigBridge::ConfigBridge() : BrowserBridge{"configBinding"} {
//Add bridge methods
addMethod<GetConfig>();
addMethod<UpdateConfig>();
addMethod<GetIsDevMode>();
} //ConfigBridge::ConfigBridge
@@ -1,8 +1,8 @@
#include "Connector/Interface/Browser/Bridge/Config/GetConfig.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/PackageWrap.h"
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
@@ -18,7 +18,7 @@ namespace {
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetConfig::GetConfig() : JSBridgeMethod{"GetConfig", [&]() {
GetConfig::GetConfig() : BridgeMethod{"GetConfig", [&]() {
return run();
}} {}
@@ -28,8 +28,8 @@ GetConfig::GetConfig() : JSBridgeMethod{"GetConfig", [&]() {
return: The settings
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetConfig::run(void) const {
ConnectorConfig config;
///TODO: Get the accounts here - returning an empty array for testing only
return std::make_unique<WrappedValue>(config);
std::unique_ptr<Cargo> GetConfig::run() const {
auto config = std::make_unique<ConnectorConfig>();
///TODO: Get the data from a local SQLite database
return std::make_unique<WrappedValue>(std::move(config));
} //GetConfig::run
@@ -1,22 +1,20 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_CONFIG
#define CONNECTOR_INTERFACE_BRIDGE_GET_CONFIG
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to retrieve the names of the methods supported by the bridge
JS Function class to retrieve the current display configuration settings
*/
class GetConfig : public speckle::interfac::browser::bridge::JSBridgeMethod<void, active::serialise::Cargo> {
class GetConfig : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
/*!
Constructor
@param bridge The parent bridge object (provides access to bridge methods)
*/
GetConfig();
@@ -26,7 +24,7 @@ namespace connector::interfac::browser::bridge {
Get the configuration settings
@return The settings
*/
std::unique_ptr<active::serialise::Cargo> run(void) const;
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
@@ -0,0 +1,39 @@
#include "Connector/Interface/Browser/Bridge/Config/GetIsDevMode.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
///Return type for retrieving the current configuration
using WrappedValue = CargoHold<ValueWrap<bool>, bool>;
}
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetIsDevMode::GetIsDevMode() : BridgeMethod{"GetIsDevMode", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Get the DEBUG mode
return: true for DEBUG, false otherwise
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetIsDevMode::run() const {
#if DEBUG
bool value = true;
#else
bool value = false;
#endif
return std::make_unique<WrappedValue>(value);
} //GetIsDevMode::run
@@ -0,0 +1,32 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_IS_DEV_MODE
#define CONNECTOR_INTERFACE_BRIDGE_GET_IS_DEV_MODE
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to retrieve IsDebugMode
*/
class GetIsDevMode : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
/*!
Constructor
*/
GetIsDevMode();
// MARK: - Functions (const)
/*!
Get the DEBUG mode
@return true for DEBUG, false otherwise
*/
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_GET_IS_DEV_MODE
@@ -1,8 +1,7 @@
#include "Connector/Interface/Browser/Bridge/Config/UpdateConfig.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/PackageWrap.h"
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
@@ -11,8 +10,8 @@ using namespace speckle::utility;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
UpdateConfig::UpdateConfig() : JSBridgeMethod{"UpdateConfig", [&](UpdateArgs args) {
run(args.value);
UpdateConfig::UpdateConfig() : BridgeMethod{"UpdateConfig", [&](const UpdateArgs& args) {
run(args);
}} {}
@@ -22,5 +21,5 @@ UpdateConfig::UpdateConfig() : JSBridgeMethod{"UpdateConfig", [&](UpdateArgs arg
config: The new settings
--------------------------------------------------------------------*/
void UpdateConfig::run(const ConnectorConfig& config) const {
///TODO: Store the active configuration settings here
///TODO: Store the active configuration settings in a local SQLite database
} //UpdateConfig::run
@@ -2,27 +2,26 @@
#define CONNECTOR_INTERFACE_BRIDGE_UPDATE_CONFIG
#include "Active/Serialise/CargoHold.h"
#include "Connector/Interface/Browser/Bridge/Config/ConnectorConfig.h"
#include "Speckle/Interface/Browser/Bridge/JSBridgeMethod.h"
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
class ConnectorConfig;
///Argument for a JS call to update the configuration
///Argument for a JS call to update the display configuration settings
using UpdateArgs = speckle::interfac::browser::bridge::JSArgType<ConnectorConfig>;
/*!
JS Function class to retrieve the names of the methods supported by the bridge
JS Function class to update the display configuration settings
*/
class UpdateConfig : public speckle::interfac::browser::bridge::JSBridgeMethod<UpdateArgs, void> {
class UpdateConfig : public speckle::interfac::browser::bridge::BridgeMethod<UpdateArgs, void> {
public:
// MARK: - Constructors
/*!
Constructor
@param bridge The parent bridge object (provides access to bridge methods)
*/
UpdateConfig();
@@ -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
@@ -0,0 +1,89 @@
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Connector.h"
#include "Connector/Interface/Browser/Bridge/Selection/Arg/SelectionInfo.h"
#include "Speckle/Database/BIMElementDatabase.h"
#include "Speckle/Environment/Project.h"
#include "Speckle/Record/Element/Element.h"
#include <array>
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
using namespace speckle::record::element;
namespace {
///Serialisation fields
enum FieldIndex {
selectedObjectIdsID,
summaryID,
};
///Serialisation field IDs
static std::array fieldID = {
Identity{"selectedObjectIds"},
Identity{"summary"},
};
}
SelectionInfo::SelectionInfo() {
auto project = connector()->getActiveProject().lock();
if (!project) {
// TODO: is this OK?
return;
}
auto elementDatabase = project->getElementDatabase();
auto selected = elementDatabase->getSelection();
active::utility::String summary(selected.size());
summary += " objects selected.";
m_summary = summary;
for (const auto& link : selected) {
m_selectedElementIds.push_back(link);
}
}
/*--------------------------------------------------------------------
Fill an inventory with the package items
inventory: The inventory to receive the package items
return: True if the package has added items to the inventory
--------------------------------------------------------------------*/
bool SelectionInfo::fillInventory(Inventory& inventory) const {
using enum Entry::Type;
inventory.merge(Inventory{
{
{ fieldID[selectedObjectIdsID], selectedObjectIdsID, element },
{ fieldID[summaryID], summaryID, element },
},
}.withType(&typeid(SelectionInfo)));
return true;
} //SelectionInfo::fillInventory
/*--------------------------------------------------------------------
Get the specified cargo
item: The inventory item to retrieve
return: The requested cargo (nullptr on failure)
--------------------------------------------------------------------*/
Cargo::Unique SelectionInfo::getCargo(const Inventory::Item& item) const {
if (item.ownerType != &typeid(SelectionInfo))
return nullptr;
using namespace active::serialise;
switch (item.index) {
case selectedObjectIdsID:
return std::make_unique<ContainerWrap<std::vector<active::utility::Guid>>>(m_selectedElementIds, false, fieldID[selectedObjectIdsID].name);
case summaryID:
return std::make_unique<ValueWrap<active::utility::String>>(m_summary);
default:
return nullptr; //Requested an unknown index
}
} //SelectionInfo::getCargo
@@ -0,0 +1,45 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SELECTION_INFO
#define CONNECTOR_INTERFACE_BRIDGE_SELECTION_INFO
#include "Active/Serialise/Package/Package.h"
namespace connector::interfac::browser::bridge {
/*!
Configuration settings class
*/
class SelectionInfo : public active::serialise::Package {
public:
// MARK: - Types
using base = active::serialise::Package;
// MARK: - Constructors
/*!
Default constructor
*/
SelectionInfo();
active::utility::String m_summary = "No objects selected";
std::vector<active::utility::Guid> m_selectedElementIds;
// MARK: - Serialisation
/*!
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
bool fillInventory(active::serialise::Inventory& inventory) const override;
/*!
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SELECTION_INFO
@@ -0,0 +1,23 @@
#include "Active/Serialise/CargoHold.h"
#include "Connector/Interface/Browser/Bridge/Selection/GetSelection.h"
#include "Connector/Interface/Browser/Bridge/Selection/Arg/SelectionInfo.h"
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetSelection::GetSelection() : BridgeMethod{"GetSelection", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Get the current selection info
based on the ArchiCAD mdoel selection
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetSelection::run() const {
auto selectionInfo = std::make_unique<SelectionInfo>();
return std::make_unique<CargoHold<PackageWrap, SelectionInfo>>(std::move(selectionInfo));
} //GetSelection::run
@@ -0,0 +1,29 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GETSELECTION
#define CONNECTOR_INTERFACE_BRIDGE_GETSELECTION
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
class GetSelection : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
/*!
Constructor
*/
GetSelection();
// MARK: - Functions (const)
/*!
Get the current selection info
based on the ArchiCAD mdoel selection
*/
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_GETSELECTION
@@ -0,0 +1,30 @@
#include "Active/Serialise/CargoHold.h"
#include "Connector/Interface/Browser/Bridge/Selection/SelectionBridge.h"
#include "Connector/Interface/Browser/Bridge/Selection/GetSelection.h"
#include "Connector/Interface/Browser/Bridge/Selection/Arg/SelectionInfo.h"
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
SelectionBridge::SelectionBridge() : BrowserBridge{"selectionBinding"} {
//Add bridge methods
addMethod<GetSelection>();
} //SelectionBridge::SelectionBridge
/*--------------------------------------------------------------------
Handle a selection change
event: The selection event
return: True if the event should be closed
--------------------------------------------------------------------*/
bool SelectionBridge::handle(const speckle::event::SelectionEvent& event) {
auto selectionInfo = std::make_unique<SelectionInfo>();
auto wrapped = std::make_unique<CargoHold<PackageWrap, SelectionInfo>>(std::move(selectionInfo));
sendEvent("setSelection", std::move(wrapped));
return true;
} //SelectionBridge::handle
@@ -0,0 +1,39 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SELECTION_BRIDGE
#define CONNECTOR_INTERFACE_BRIDGE_SELECTION_BRIDGE
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Event/Subscriber/SelectionSubscriber.h"
#include "Speckle/Event/Type/SelectionEvent.h"
namespace connector::interfac::browser::bridge {
/*!
A browser bridge to manage element selection information passed between the JS UI and the BIM application
*/
class SelectionBridge : public speckle::interfac::browser::bridge::BrowserBridge, public speckle::event::SelectionSubscriber {
public:
// MARK: - Types
using base = speckle::interfac::browser::bridge::BrowserBridge;
// MARK: - Constructors
using base::base;
/*!
Default constructor
*/
SelectionBridge();
protected:
/*!
Handle a selection change
@param event The selection event
@return True if the event should be closed
*/
bool handle(const speckle::event::SelectionEvent& event) override;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SELECTION_BRIDGE
@@ -0,0 +1,121 @@
#include "Connector/Interface/Browser/Bridge/Send/Arg/ConversionResult.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include <array>
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
///Serialisation fields
enum FieldIndex {
statusID,
srcID,
srcTypeID,
resID,
resTypeID,
errorID,
};
///Serialisation field IDs
static std::array fieldID = {
Identity{"status"},
Identity{"sourceId"},
Identity{"sourceType"},
Identity{"resultId"},
Identity{"resultType"},
Identity{"error"},
};
///Conversion status enumerator names
std::array statusName{
"success",
"warning",
"info",
"error",
};
}
/*--------------------------------------------------------------------
Fill an inventory with the package items
inventory: The inventory to receive the package items
return: True if the package has added items to the inventory
--------------------------------------------------------------------*/
bool ConversionResult::fillInventory(active::serialise::Inventory& inventory) const {
using enum Entry::Type;
inventory.merge(Inventory{
{
{ fieldID[statusID], statusID, 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)));
return true;
} //ConversionResult::fillInventory
/*--------------------------------------------------------------------
Get the specified cargo
item: The inventory item to retrieve
return: The requested cargo (nullptr on failure)
--------------------------------------------------------------------*/
Cargo::Unique ConversionResult::getCargo(const active::serialise::Inventory::Item& item) const {
if (item.ownerType != &typeid(ConversionResult))
return nullptr;
using namespace active::serialise;
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:
return std::make_unique<PackageWrap>(*error);
default:
return nullptr; //Requested an unknown index
}
} //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
@@ -0,0 +1,117 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_CONVERSION_RESULT
#define CONNECTOR_INTERFACE_BRIDGE_CONVERSION_RESULT
#include "Active/Serialise/Package/Package.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h"
#include "Speckle/Utility/String.h"
namespace connector::interfac::browser::bridge {
/*!
The result of a conversion process (BIM records to/from Speckle)
*/
class ConversionResult : public active::serialise::Package {
public:
enum class Status : uint16_t {
success = 1, ///<The conversion was successful
info, ///<Not in use yet, maybe later as discussed
warning, ///<Not in use yet, maybe later as discussed
error, ///<An error occurred during conversion
};
// MARK: - Constructors
/*!
Default constructor
*/
ConversionResult() {}
// MARK: - Public variables
///The element conversion status
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.
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.
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.
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.
speckle::utility::String resultType;
///The exception (nullopt = no exception)
SendError::Option error;
// MARK: - Serialisation
/*!
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
bool fillInventory(active::serialise::Inventory& inventory) const override;
/*!
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
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);
}
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
@@ -0,0 +1,70 @@
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendError.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include <array>
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
///Serialisation fields
enum FieldIndex {
messageID,
cardID,
stackID,
};
///Serialisation field IDs
static std::array fieldID = {
Identity{"message"},
Identity{"modelCardId"},
Identity{"stackTrace"},
};
}
/*--------------------------------------------------------------------
Fill an inventory with the package items
inventory: The inventory to receive the package items
return: True if the package has added items to the inventory
--------------------------------------------------------------------*/
bool SendError::fillInventory(active::serialise::Inventory& inventory) const {
using enum Entry::Type;
inventory.merge(Inventory{
{
{ fieldID[messageID], messageID, 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)));
return true;
} //SendError::fillInventory
/*--------------------------------------------------------------------
Get the specified cargo
item: The inventory item to retrieve
return: The requested cargo (nullptr on failure)
--------------------------------------------------------------------*/
Cargo::Unique SendError::getCargo(const active::serialise::Inventory::Item& item) const {
if (item.ownerType != &typeid(SendError))
return nullptr;
using namespace active::serialise;
switch (item.index) {
case messageID:
return std::make_unique<ValueWrap<String>>(message);
case cardID:
return std::make_unique<ValueWrap<String>>(modelCardID);
case stackID:
return std::make_unique<ValueWrap<String>>(stackTrace);
default:
return nullptr; //Requested an unknown index
}
} //SendError::getCargo
@@ -0,0 +1,56 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_ERROR
#define CONNECTOR_INTERFACE_BRIDGE_SEND_ERROR
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
#include "Speckle/Utility/String.h"
namespace connector::interfac::browser::bridge {
/*!
A send error to return to the JS in the event of an error
*/
class SendError final : public active::serialise::Package {
public:
// MARK: Types
///Optional
using Option = std::optional<SendError>;
// MARK: - Constructors
/*!
Constructor
@param errMess The error message
@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} {}
// 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 error stack trace
speckle::utility::String stackTrace;
// MARK: - Serialisation
/*!
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
bool fillInventory(active::serialise::Inventory& inventory) const override;
/*!
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_ERROR
@@ -0,0 +1,87 @@
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendObject.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Record/Collection/ProjectCollection.h"
#include <array>
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
using namespace connector::record;
using namespace speckle::serialise;
using namespace speckle::utility;
namespace {
///Serialisation fields
enum FieldIndex {
idID,
rootObjID,
};
///Serialisation field IDs
static std::array fieldID = {
Identity{"id"},
Identity{"rootObject"},
};
}
/*--------------------------------------------------------------------
Fill an inventory with the package items
inventory: The inventory to receive the package items
return: True if the package has added items to the inventory
--------------------------------------------------------------------*/
bool SendObject::fillInventory(active::serialise::Inventory& inventory) const {
using enum Entry::Type;
inventory.merge(Inventory{
{
{ fieldID[idID], idID, element },
{ fieldID[rootObjID], rootObjID, element },
},
}.withType(&typeid(SendObject)));
return true;
} //SendObject::fillInventory
/*--------------------------------------------------------------------
Get the specified cargo
item: The inventory item to retrieve
return: The requested cargo (nullptr on failure)
--------------------------------------------------------------------*/
Cargo::Unique SendObject::getCargo(const active::serialise::Inventory::Item& item) const {
if (item.ownerType != &typeid(SendObject))
return nullptr;
using namespace active::serialise;
switch (item.index) {
case idID:
return std::make_unique<StringWrap>(id);
case rootObjID:
if (m_object)
return std::make_unique<PackageWrap>(*m_object);
return std::make_unique<NullPackage>();
default:
return nullptr; //Requested an unknown index
}
} //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
@@ -0,0 +1,70 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_OBJECT
#define CONNECTOR_INTERFACE_BRIDGE_SEND_OBJECT
#include "Active/Serialise/CargoHold.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/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
Class defining the primary content of a send
*/
class SendObject final : public active::serialise::Package {
public:
using base = std::reference_wrapper<active::serialise::Package>;
// MARK: - Constructors
/*!
Default constructor
@param object The object to send
*/
SendObject(std::unique_ptr<speckle::database::Record> object) : m_object{std::move(object)} { id = m_object->getID(); }
// MARK: - Public variables
///The root object id which should be used for creating the version
speckle::utility::String id;
// MARK: - Serialisation
/*!
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
bool fillInventory(active::serialise::Inventory& inventory) const override;
/*!
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
/*!
Use a manager in (de)serialisation processes
@param management The management to use
*/
void useManagement(active::serialise::Management* management) const override { m_object->useManagement(management); }
/*!
Get the cargo management
@return The active 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:
///The object to send
std::unique_ptr<speckle::database::Record> m_object;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_OBJECT
@@ -0,0 +1,121 @@
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendViaBrowserArgs.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Record/Model/ModelCard.h"
#include "Speckle/Record/Credentials/Account.h"
#include <array>
using namespace active::serialise;
using namespace connector::record;
using namespace connector::interfac::browser::bridge;
using namespace speckle::database;
using namespace speckle::record::cred;
using namespace speckle::serialise;
using namespace speckle::utility;
namespace {
///Serialisation fields
enum FieldIndex {
cardID,
projID,
modID,
tokenID,
serverID,
accID,
messageID,
sendObjectID,
convResultID,
};
///Serialisation field IDs
static std::array fieldID = {
Identity{"modelCardId"},
Identity{"projectId"},
Identity{"modelId"},
Identity{"token"},
Identity{"serverUrl"},
Identity{"accountId"},
Identity{"message"},
Identity{"sendObject"},
Identity{"sendConversionResults"},
};
}
/*--------------------------------------------------------------------
Constructor
modelCard: The model card to populate into the send info for the browser
account: The account linked to the send
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) :
modelCardID(modelCard.getID()), projectID(modelCard.getProjectID()), modelID(modelCard.getModelID()), token{account.getToken()},
serverURL{account.getServerURL()}, accountID{account.getID()}, sendObject{std::move(object)} {
} //SendViaBrowserArgs::SendViaBrowserArgs
/*--------------------------------------------------------------------
Fill an inventory with the package items
inventory: The inventory to receive the package items
return: True if the package has added items to the inventory
--------------------------------------------------------------------*/
bool SendViaBrowserArgs::fillInventory(active::serialise::Inventory& inventory) const {
using enum Entry::Type;
inventory.merge(Inventory{
{
{ fieldID[cardID], cardID, element },
{ fieldID[projID], projID, element },
{ fieldID[modID], modID, element },
{ fieldID[tokenID], tokenID, element },
{ fieldID[serverID], serverID, element },
{ fieldID[accID], accID, element },
{ fieldID[messageID], messageID, element },
{ fieldID[sendObjectID], sendObjectID, element },
{ fieldID[convResultID], convResultID, element },
},
}.withType(&typeid(SendViaBrowserArgs)));
return true;
} //SendViaBrowserArgs::fillInventory
/*--------------------------------------------------------------------
Get the specified cargo
item: The inventory item to retrieve
return: The requested cargo (nullptr on failure)
--------------------------------------------------------------------*/
Cargo::Unique SendViaBrowserArgs::getCargo(const active::serialise::Inventory::Item& item) const {
if (item.ownerType != &typeid(SendViaBrowserArgs))
return nullptr;
using namespace active::serialise;
switch (item.index) {
case cardID:
return std::make_unique<StringWrap>(modelCardID);
case projID:
return std::make_unique<StringWrap>(projectID);
case modID:
return std::make_unique<StringWrap>(modelID);
case tokenID:
return std::make_unique<StringWrap>(token);
case serverID:
return std::make_unique<StringWrap>(serverURL);
case accID:
return std::make_unique<StringWrap>(accountID);
case messageID:
return std::make_unique<StringWrap>(message);
case sendObjectID:
return std::make_unique<PackageWrap>(sendObject);
case convResultID:
sendConversionResults = sendObject.getConversionResults();
return Cargo::Unique{new ContainerWrap{sendConversionResults}};
default:
return nullptr; //Requested an unknown index
}
} //SendViaBrowserArgs::getCargo
@@ -0,0 +1,89 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_VIA_BROWSER_ARGS
#define CONNECTOR_INTERFACE_BRIDGE_SEND_VIA_BROWSER_ARGS
#include "Active/Serialise/Package/Package.h"
#include "Active/Utility/String.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendConversionResult.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendObject.h"
#include "Speckle/Database/Identity/RecordID.h"
namespace speckle::record::cred {
class Account;
}
namespace connector::record {
class ModelCard;
}
namespace connector::interfac::browser::bridge {
class ConnectorConfig;
/*!
A commit of a project version (model) to the Speckle server
An object of this type is prepared by the Send bridge method
*/
class SendViaBrowserArgs final : public active::serialise::Package {
public:
// MARK: - Constructors
/*!
Constructor
@param modelCard The model card to populate into the send info for the browser
@param account The account linked to the send
@param object The object to be sent
*/
SendViaBrowserArgs(const connector::record::ModelCard& modelCard, const speckle::record::cred::Account& account, SendObject&& object);
// MARK: - Public variables
///ID of the model card driving the send request
speckle::database::RecordID modelCardID;
///The source project ID (from the model card)
speckle::database::RecordID projectID;
///The model ID (from the model card)
speckle::database::RecordID modelID;
///The account token (from the user account info)
speckle::utility::String token;
///The server URL (from the user account info)
speckle::utility::String serverURL;
///The user account ID
speckle::utility::String accountID;
///The send message
speckle::utility::String message; //TODO: Clarify what this is used for
///The conversion report (summarising the conversion results on an element-by-element basis)
mutable std::vector<SendConversionResult> sendConversionResults;
///The commit content
SendObject sendObject;
// MARK: - Serialisation
/*!
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
bool fillInventory(active::serialise::Inventory& inventory) const override;
/*!
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override;
/*!
Use a manager in (de)serialisation processes
@param management The management to use
*/
void useManagement(active::serialise::Management* management) const override { sendObject.useManagement(management); }
/*!
Get the cargo management
@return The active management
*/
active::serialise::Management* management() const override { return sendObject.management(); }
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_VIA_BROWSER_ARGS
@@ -0,0 +1,41 @@
#include "Connector/Interface/Browser/Bridge/Send/GetSendFilters.h"
#include "Active/Container/Vector.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
#include "Connector/Record/Model/Filter/ArchicadEverythingFilter.h"
#include "Connector/Record/Model/Filter/FilterMover.h"
#include "Connector/Record/Model/Filter/ArchicadSelectionFilter.h"
using namespace active::container;
using namespace active::serialise;
using namespace connector::record;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
using WrappedValue = active::serialise::CargoHold<ContainerWrap<Vector<SendFilter>, FilterMover>, Vector<SendFilter>>;
}
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetSendFilters::GetSendFilters() : BridgeMethod{"GetSendFilters", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Get the send filters
return: The send filters
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetSendFilters::run() const {
auto filters = std::make_unique<Vector<SendFilter>>();
//filters.emplace_back(ArchicadEverythingFilter{}); //TODO: Implement as required
filters->emplace_back(ArchicadSelectionFilter{});
return std::make_unique<WrappedValue>(std::move(filters));
} //GetSendFilters::run
@@ -0,0 +1,35 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_SEND_FILTERS
#define CONNECTOR_INTERFACE_BRIDGE_GET_SEND_FILTERS
#include "Active/Serialise/CargoHold.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
class ConnectorConfig;
/*!
JS Function class to retrieve the send filters
*/
class GetSendFilters : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
/*!
Constructor
*/
GetSendFilters();
// MARK: - Functions (const)
/*!
Get the send filters
@return The send filters
*/
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_GET_SEND_FILTERS
@@ -0,0 +1,36 @@
#include "Connector/Interface/Browser/Bridge/Send/GetSendSettings.h"
#include "Active/Container/Vector.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Package/Wrapper/ContainerWrap.h"
#include "Connector/Record/Model/CardSetting.h"
using namespace active::container;
using namespace active::serialise;
using namespace connector::record;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
using WrappedValue = CargoHold<ContainerWrap<Vector<CardSetting>, PackageWrap>, Vector<CardSetting>>;
}
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetSendSettings::GetSendSettings() : BridgeMethod{"GetSendSettings", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Get send settings relevant to the host BIM application
return: The send settings
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetSendSettings::run() const {
auto filters = std::make_unique<Vector<CardSetting>>();
return std::make_unique<WrappedValue>(std::move(filters));
} //GetSendSettings::run
@@ -0,0 +1,35 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_SEND_SETTINGS
#define CONNECTOR_INTERFACE_BRIDGE_GET_SEND_SETTINGS
#include "Active/Serialise/CargoHold.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
class ConnectorConfig;
/*!
JS Function class to retrieve the send settings relevant to the host BIM application
*/
class GetSendSettings : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
/*!
Constructor
*/
GetSendSettings();
// MARK: - Functions (const)
/*!
Get send settings relevant to the host BIM application
@return The send settings
*/
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_GET_SEND_SETTINGS
@@ -0,0 +1,97 @@
#include "Connector/Interface/Browser/Bridge/Send/Send.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/Interface/Browser/Bridge/Send/Arg/SendConversionResult.h"
#include "Connector/Interface/Browser/Bridge/Send/Arg/SendViaBrowserArgs.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/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
--------------------------------------------------------------------*/
Send::Send() : BridgeMethod{"Send", [&](const SendArgs& args) {
run(args);
}} {}
/*--------------------------------------------------------------------
Send a specified model
modelCardID: The ID of the model card identifying the objects to send
--------------------------------------------------------------------*/
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
auto modelCardDatabase = connectorProject->getModelCardDatabase();
auto modelCard = modelCardDatabase->getCard(modelCardID);
if (!modelCard) {
getBridge()->sendEvent("setModelError",
std::make_unique<SendError>(connector()->getLocalString(errorString, modelCardNotFoundID), modelCardID));
return;
}
//Get the user account
auto accountDatabase = connector()->getAccountDatabase();
auto account = accountDatabase->getAccount(modelCard->getAccountID(), modelCard->getServerURL());
if (!account) {
getBridge()->sendEvent("setModelError",
std::make_unique<SendError>(connector()->getLocalString(errorString, accountNotFoundID), modelCardID));
return;
}
//Get the selected elements from the modelcard
auto elementDatabase = project->getElementDatabase();
BIMRecordIDList selected{};
if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get()))
selected = senderCard->getFilter().getElementIDs();
//Build a collection from the selected elements
auto collection = std::make_unique<ProjectCollection>(project, modelCard->getID());
for (const auto& link : selected) {
if (auto element = elementDatabase->getElement(link); 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
auto result = std::make_unique<SendViaBrowserArgs>(*modelCard, *account, SendObject{std::move(collection)});
getBridge()->sendEvent("sendByBrowser", std::move(result));
} //Send::run
@@ -0,0 +1,42 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND
#define CONNECTOR_INTERFACE_BRIDGE_SEND
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Connector/Interface/Browser/Bridge/Config/Arg/ConnectorConfig.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
class ConnectorConfig;
///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 SendArgs = speckle::interfac::browser::bridge::JSArgType<StringHold>;
/*!
JS Function class to send a specified model
*/
class Send : public speckle::interfac::browser::bridge::BridgeMethod<SendArgs, void> {
public:
// MARK: - Constructors
/*!
Constructor
*/
Send();
// MARK: - Functions (const)
/*!
Send a specified model
@param modelCardID The ID of the model card identifying the objects to send
*/
void run(const speckle::utility::String& modelCardID) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND
@@ -0,0 +1,86 @@
#include "Connector/Interface/Browser/Bridge/Send/SendBridge.h"
#include "Connector/Interface/Browser/Bridge/Send/GetSendFilters.h"
#include "Connector/Interface/Browser/Bridge/Send/GetSendSettings.h"
#include "Connector/Interface/Browser/Bridge/Send/Send.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/SenderModelCard.h"
#include "Connector/Record/Model/Filter/SendFilter.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
--------------------------------------------------------------------*/
SendBridge::SendBridge() : BrowserBridge{"sendBinding"} {
//Add bridge methods
addMethod<GetSendFilters>();
addMethod<GetSendSettings>();
addMethod<Send>();
} //SendBridge::SendBridge
/*--------------------------------------------------------------------
Handle an element change
event: The selection event
return: True if the event should be closed
--------------------------------------------------------------------*/
bool SendBridge::handle(const ElementEvent& event) {
using enum ElementEvent::Type;
auto eventType = event.getEventType();
switch (eventType) {
case begin:
m_changedElements.clear();
break;
case end: {
auto project = connector()->getActiveProject().lock();
auto connectorProject = dynamic_cast<ConnectorProject*>(project.get());
if (!connectorProject)
return false;
auto modelCardDatabase = connectorProject->getModelCardDatabase();
auto modelCards = modelCardDatabase->getCards();
// POC: this is probably not efficient, should test, review and refactor it
RecordIDList expiredModelCardIds;
for (const auto& modelCard : modelCards) {
if (auto senderCard = dynamic_cast<SenderModelCard*>(modelCard.get()); senderCard) {
for (const auto& recordID : m_changedElements) {
if (senderCard->contains(recordID)) {
expiredModelCardIds.push_back(modelCard->getID());
break;
}
}
}
}
if (!expiredModelCardIds.empty()) {
auto wrapped = std::make_unique<CargoHold<ContainerWrap<RecordIDList>, RecordIDList>>(std::move(expiredModelCardIds));
sendEvent("setModelsExpired", std::move(wrapped));
}
break;
}
case changeElem: case editElem: case deleteElem: {
if (event.getElementID())
m_changedElements.insert(*event.getElementID());
break;
}
default:
break;
}
return false;
} //SendBridge::handle
@@ -0,0 +1,42 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SEND_BRIDGE
#define CONNECTOR_INTERFACE_BRIDGE_SEND_BRIDGE
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
#include "Speckle/Event/Subscriber/ElementSubscriber.h"
namespace connector::interfac::browser::bridge {
/*!
A browser bridge to support sending model data to a Speckle server
*/
class SendBridge : public speckle::interfac::browser::bridge::BrowserBridge, public speckle::event::ElementSubscriber {
public:
// MARK: - Types
using base = speckle::interfac::browser::bridge::BrowserBridge;
// MARK: - Constructors
using base::base;
/*!
Default constructor
*/
SendBridge();
protected:
/*!
Handle an element change
@param event The selection event
@return True if the event should be closed
*/
bool handle(const speckle::event::ElementEvent& event) override;
private:
///List of changed element IDs
speckle::database::BIMRecordIDList m_changedElements;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SEND_BRIDGE
@@ -0,0 +1,80 @@
#include "Connector/Interface/Browser/Bridge/Test/Arg/SayHiArg.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include <array>
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
///Serialisation fields
enum FieldIndex {
nameID,
countID,
isHelloID,
};
///Serialisation field IDs. NB: This structure is never exported, so we only define the incoming argument indices
static std::array fieldID = {
Identity{"0"},
Identity{"1"},
Identity{"2"},
};
}
/*--------------------------------------------------------------------
Fill an inventory with the package items
inventory: The inventory to receive the package items
return: True if the package has added items to the inventory
--------------------------------------------------------------------*/
bool SayHiArg::fillInventory(Inventory& inventory) const {
using enum Entry::Type;
inventory.merge(Inventory{
{
{ fieldID[nameID], nameID, element },
{ fieldID[countID], countID, element },
{ fieldID[isHelloID], isHelloID, element },
},
}.withType(&typeid(SayHiArg)));
return true;
} //SayHiArg::fillInventory
/*--------------------------------------------------------------------
Get the specified cargo
item: The inventory item to retrieve
return: The requested cargo (nullptr on failure)
--------------------------------------------------------------------*/
Cargo::Unique SayHiArg::getCargo(const Inventory::Item& item) const {
if (item.ownerType != &typeid(SayHiArg))
return nullptr;
using namespace active::serialise;
switch (item.index) {
case nameID:
return std::make_unique<ValueWrap<String>>(name);
case countID:
return std::make_unique<ValueWrap<int32_t>>(count);
case isHelloID:
return std::make_unique<ValueWrap<bool>>(isHello);
default:
return nullptr; //Requested an unknown index
}
} //SayHiArg::getCargo
/*--------------------------------------------------------------------
Set to the default package content
--------------------------------------------------------------------*/
void SayHiArg::setDefault() {
name.clear();
count = 0;
isHello = false;
} //SayHiArg::setDefault
@@ -1,15 +1,15 @@
#ifndef CONNECTOR_DATABASE_MODEL_CARD_DATABASE
#define CONNECTOR_DATABASE_MODEL_CARD_DATABASE
#ifndef CONNECTOR_INTERFACE_BRIDGE_SAYHI_ARG
#define CONNECTOR_INTERFACE_BRIDGE_SAYHI_ARG
#include "Active/Serialise/Package/Package.h"
#include "Speckle/Utility/String.h"
namespace connector::database {
namespace connector::interfac::browser::bridge {
/*!
Database of model cards relating to a specific project
Object for testing JS comms (with TestBridge binding)
*/
class ModelCardDatabase : public active::serialise::Package {
class SayHiArg : public active::serialise::Package {
public:
// MARK: - Types
@@ -21,14 +21,14 @@ namespace connector::database {
/*!
Default constructor
*/
ModelCardDatabase() {}
SayHiArg() = default;
// MARK: - Public variables (NB: Assuming to class invariants or overrides for this data, so making public for simplicity)
// MARK: Functions (const)
//Implement card access when necessary
///Sample parameters for testing only
speckle::utility::String name;
int32_t count = 0;
bool isHello = false;
// MARK: - Serialisation
@@ -48,10 +48,8 @@ namespace connector::database {
Set to the default package content
*/
void setDefault() override;
private:
//TODO: Model card array here - implement when necessary
};
}
#endif //CONNECTOR_DATABASE_MODEL_CARD_DATABASE
#endif //CONNECTOR_INTERFACE_BRIDGE_SAYHI_ARG
@@ -0,0 +1,133 @@
#include "Connector/Interface/Browser/Bridge/Test/GetComplexType.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
#include "Active/Serialise/Package/Wrapper/PackageWrap.h"
#include <array>
using namespace active::serialise;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
///Serialisation fields
enum FieldIndex {
unID,
countID,
isTestID,
};
///Serialisation field IDs
static std::array fieldID = {
Identity{"id"},
Identity{"count"},
Identity{"thisIsABoolean"},
};
/*!
Object for testing Javascript communication (with TestBridge binding)
*/
class ComplexType final : public active::serialise::Package {
public:
// MARK: - Types
using base = active::serialise::Package;
// MARK: - Constructors
/*!
Default constructor
*/
ComplexType();
// MARK: - Public variables
///Sample parameters for testing only
speckle::utility::String ID;
int32_t count = 0;
bool testBool = false;
// MARK: - Serialisation
/*!
Fill an inventory with the package items
@param inventory The inventory to receive the package items
@return True if the package has added items to the inventory
*/
bool fillInventory(active::serialise::Inventory& inventory) const override {
using enum Entry::Type;
inventory.merge(Inventory{
{
{ fieldID[unID], unID, element, !ID.empty() },
{ fieldID[countID], countID, element, count != 0 },
{ fieldID[isTestID], isTestID, element, testBool },
},
}.withType(&typeid(ComplexType)));
return true;
}
/*!
Get the specified cargo
@param item The inventory item to retrieve
@return The requested cargo (nullptr on failure)
*/
Cargo::Unique getCargo(const active::serialise::Inventory::Item& item) const override {
if (item.ownerType != &typeid(ComplexType))
return nullptr;
using namespace active::serialise;
switch (item.index) {
case unID:
return std::make_unique<ValueWrap<String>>(ID);
case countID:
return std::make_unique<ValueWrap<int32_t>>(count);
case isTestID:
return std::make_unique<ValueWrap<bool>>(testBool);
default:
return nullptr; //Requested an unknown index
}
}
};
///Return type for retrieving the current configuration
using WrappedValue = CargoHold<PackageWrap, ComplexType>;
}
//Hashing specialisation
template<>
struct std::hash<ComplexType> {
auto operator()(const ComplexType& obj) const {
return hash<std::string>()(obj.ID) ^ rotl(hash<int32_t>()(obj.count), 1) ^ rotl(hash<bool>()(obj.testBool), 2);
}
};
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
ComplexType::ComplexType() {
//This is the required test values
count = static_cast<int32_t>(std::hash<ComplexType>()(*this));
ID = String{count} + " - I am a string";
} //ComplexType::ComplexType
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GetComplexType::GetComplexType() : BridgeMethod{"GetComplexType", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Get the required object type
return: The required object
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> GetComplexType::run() const {
auto object = std::make_unique<ComplexType>();
return std::make_unique<WrappedValue>(std::move(object));
} //GetComplexType::run
@@ -0,0 +1,32 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GET_COMPLEX_TYPE
#define CONNECTOR_INTERFACE_BRIDGE_GET_COMPLEX_TYPE
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to return a specific object type
*/
class GetComplexType : public speckle::interfac::browser::bridge::BridgeMethod<void, active::serialise::Cargo> {
public:
// MARK: - Constructors
/*!
Constructor
*/
GetComplexType();
// MARK: - Functions (const)
/*!
Get the required object type
@return The required object
*/
std::unique_ptr<active::serialise::Cargo> run() const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_GET_COMPLEX_TYPE
@@ -0,0 +1,21 @@
#include "Connector/Interface/Browser/Bridge/Test/GoAway.h"
#include "Speckle/Environment/Platform.h"
using namespace connector::interfac::browser::bridge;
using namespace speckle::environment;
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
GoAway::GoAway() : BridgeMethod{"GoAway", [&]() {
return run();
}} {}
/*--------------------------------------------------------------------
Write a message to the console
--------------------------------------------------------------------*/
void GoAway::run() const {
platform()->writeToConsole("Okay, going away.");
} //GoAway::run
@@ -0,0 +1,31 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_GO_AWAY
#define CONNECTOR_INTERFACE_BRIDGE_GO_AWAY
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
/*!
JS Function class to print a fixed message to the console
*/
class GoAway : public speckle::interfac::browser::bridge::BridgeMethod<void, void> {
public:
// MARK: - Constructors
/*!
Default constructor
*/
GoAway();
// MARK: - Functions (const)
/*!
Write a message to the console
*/
void run() const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_GO_AWAY
@@ -0,0 +1,38 @@
#include "Connector/Interface/Browser/Bridge/Test/SayHi.h"
#include "Active/Serialise/CargoHold.h"
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
using namespace active::serialise;
using namespace active::setting;
using namespace connector::interfac::browser::bridge;
using namespace speckle::utility;
namespace {
///Return type for the test message
using WrappedValue = CargoHold<ValueWrap<String>, String>;
}
/*--------------------------------------------------------------------
Default constructor
--------------------------------------------------------------------*/
SayHi::SayHi() : BridgeMethod{"SayHi", [&](SayHiWrapper arg) {
return run(arg);
}} {}
/*--------------------------------------------------------------------
Return a message based on sample data
arg: The sample data
return: The message based on sample data
--------------------------------------------------------------------*/
std::unique_ptr<Cargo> SayHi::run(SayHiArg arg) const {
String result, baseGreeting{(arg.isHello ? "Hello" : "Hi") + arg.name + "!\n"};
for (auto i = arg.count; i--; )
result += baseGreeting;
return std::make_unique<WrappedValue>(result);
} //SayHi::run
@@ -0,0 +1,37 @@
#ifndef CONNECTOR_INTERFACE_BRIDGE_SAYHI
#define CONNECTOR_INTERFACE_BRIDGE_SAYHI
#include "Connector/Interface/Browser/Bridge/Test/Arg/SayHiArg.h"
#include "Speckle/Interface/Browser/Bridge/BridgeMethod.h"
namespace connector::interfac::browser::bridge {
///Argument for the parameters of a test message
using SayHiWrapper = speckle::interfac::browser::bridge::JSArgType<SayHiArg, 3>;
/*!
JS Function class to return a test message based on sample data
*/
class SayHi : public speckle::interfac::browser::bridge::BridgeMethod<SayHiWrapper, active::serialise::Cargo> {
public:
// MARK: - Constructors
/*!
Default constructor
*/
SayHi();
// MARK: - Functions (const)
/*!
Return a message based on sample data
@param arg The sample data
@return The message based on sample data
*/
std::unique_ptr<active::serialise::Cargo> run(SayHiArg arg) const;
};
}
#endif //CONNECTOR_INTERFACE_BRIDGE_SAYHI

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