Skip to content

Developer Notes

Continuous Integration CodeQL Total alerts Latest tagged version

The source code of the Rhino Plugin is available on Github.

Build

The build system is captured in a vagrant image. Please consider the notes in /tools/vagrant in the source distribution for the setup of the vagrant container. There is a Github Action which reuses the same vagrant setup scripts to build and test StrucEng Lib on each commit.

$ git clone git@github.com:StrucEng-Library-kfmresearch/strucenglib-rhino3d-plugin.git && cd strucenglib-rhino3d-plugin
$ vagrant up
$ ./distrib_vagrant.sh help
+ vagrant ssh -c 'cd /vagrant/tools/distrib/; ./distrib.sh help'
distrib.sh: ./distrib.sh {update_version|version|build|package|deploy_test|deploy|distrib|distrib_test}
commands:
  update_version <version>.....: updates version
  version......................: list version
  build........................: build dotnet solution
  test.........................: build dotnet solution, run tests
  package......................: builds solution, creates yak package format
  deploy_test..................: deploys the yak package found to test store
  deploy.......................: deploys the yak package found store
  distrib......................: builds, packages, deploys package to store
  distrib_test.................: builds, packages, deploys package to test store

Connection to 127.0.0.1 closed.

Release

StrucEng Lib Release management is captured in /tools/distrib/. Rhino uses a proprietary package manager, yak.exe, to create a packaged artifact and publish to Rhino store.

Github Workflows

distrib.sh build (CI) distrib.sh build

Main Build workflow, uses vagrant build script to build the project in an ubuntu-box. This ensures continuous integration and checks that the build is reproducible.

dotnet build (CI) dotnet build

Builds the solution with dotnet and powershell. This is for testing to ensure a build outside of vagrant box.

Deploy (CD) deploy

This action captures the process to deploy into Rhino store. It builds and tests the source tree with a new version and deploys the artifacts into Rhino store. This can be used if built tools are not installed on the local machine.

image

Design Notes

StrucEng Lib Plugin implements a MVVM pattern to separate UI boiler plate code from presentation and business logic. Since UI code is described in C#, it is a key goal to keep UI code as simple and straight forward as possible.

To unify code, we align with the following key decisions:

  • Eto components are described in C#. A view containing constructions of Eto component is suffixed with View.
  • Eto components in View classes use bindings to sync their state with a ViewModel.
  • If an action is not complicated, a ViewModel may implement it directly with a RelayCommand. Otherwise the action is implemented in a class prefixed with Exec. Action classes inherit from CommandBase.
  • Every ViewModel inherits from StrucEngLib#ViewModelBase and is suffixed with ViewModel.
  • Where possible, every View contains a corresponding ViewModel class.
  • A ViewModel is instantiated first and typically stored for later access in a shared context class. A ViewModel is then passed via constructor when instantiating a View class.
  • There are two ways to sync model state with view model state: Classes (for instance those for LinFE) sync view model state on every change to their corresponding model class. This is a decision up to each class. To unify sync, a ViewModel may choose to implement ViewModelBase#UpdateModel and ViewModelBase#UpdateViewModel to sync state. These methods are called after init and before code emit.

Updating Sandwich Model

The dependency installer will download the latest state of SandwichModel located in branch strucenglib_plugin. Any changes committed to this branch will be used upon reinstallation of dependency with dependency installer.