From f787e31fc3ffae2f5d9678e95ba49cc28251a3cd Mon Sep 17 00:00:00 2001
From: Ueli Saluz
Date: Thu, 11 Jul 2024 20:04:06 +0200
Subject: [PATCH] =?UTF-8?q?=E2=AC=86=EF=B8=8FUpdated=20example=E2=AC=86?=
=?UTF-8?q?=EF=B8=8FUpdated=20sketchpad=20node=20modules?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Example:
➕Added glbs, icons and representations for ellipsoid capsules and cylindric shafts.
➕Added metadata (construction cost, maintenance expenses, income, global warming potential, heating demand, cooling demand, technical equipment demand).
➕Added generic performance assessment based on the above metadata.
Sketchpad:
⬆️Updated node modules.
Docs:
🔄Replaced badges.
🔁Rewrote description.
---
README.md | 39 +-
docs/badges/latestrelease.shields | 2 +-
docs/badges/latestrelease.svg | 2 +-
docs/badges/poweredbycsharp.shields | 1 +
docs/badges/poweredbycsharp.svg | 1 +
docs/badges/poweredbygraphql.shields | 1 -
docs/badges/poweredbygraphql.svg | 1 -
docs/badges/poweredbyqt.shields | 1 -
docs/badges/poweredbyqt.svg | 1 -
docs/badges/poweredbytypescript.shields | 1 +
docs/badges/poweredbytypescript.svg | 1 +
docs/badges/uiplanneddynamo.shields | 1 +
docs/badges/uiplanneddynamo.svg | 1 +
docs/badges/uiplannedrevit.shields | 1 -
docs/badges/uiplannedrevit.svg | 1 -
docs/badges/uiplannedrhino.shields | 1 -
docs/badges/uiplannedrhino.svg | 1 -
docs/engineering/ports/directed.puml | 44 +
.../ports/directed_directed-ports.puml | 54 +
.../ports/directed_typed-ports.puml | 52 +
docs/engineering/ports/undirected-convex.puml | 52 +
docs/engineering/ports/undirected.puml | 47 +
.../softwarearchitecture/dataarchitecture.pu | 82 +-
.../interfacearchitecture.txt | 36 +-
.../softwarearchitecture.pu | 95 +-
examples/metabolism/.semio/kit.sqlite3 | Bin 552960 -> 905216 bytes
examples/metabolism/ai.gh | Bin 0 -> 4357242 bytes
examples/metabolism/base.gh | Bin 197950 -> 178133 bytes
examples/metabolism/bridge.gh | Bin 253497 -> 220754 bytes
examples/metabolism/capital.gh | Bin 86908 -> 116665 bytes
examples/metabolism/capsule.gh | Bin 182461 -> 167358 bytes
examples/metabolism/cylindric-capital.gh | Bin 0 -> 118631 bytes
examples/metabolism/cylindric-shaft.gh | Bin 0 -> 186562 bytes
examples/metabolism/cylindriccapital.gh | Bin 80624 -> 0 bytes
examples/metabolism/cylindricshaft.gh | Bin 146402 -> 0 bytes
examples/metabolism/ellipsoid-capsule.gh | Bin 0 -> 198713 bytes
examples/metabolism/futuristiccapsule.gh | Bin 146012 -> 0 bytes
.../metabolism/icons/cylindric-capital.3dm | Bin 0 -> 68714 bytes
.../metabolism/icons/cylindric-capital.svg | 74 +
.../metabolism/icons/cylindric-shaft_1.3dm | Bin 0 -> 96658 bytes
.../metabolism/icons/cylindric-shaft_1.svg | 347 ++
.../metabolism/icons/cylindric-shaft_2.3dm | Bin 0 -> 73450 bytes
.../metabolism/icons/cylindric-shaft_2.svg | 411 ++
.../metabolism/icons/cylindric-shaft_3.3dm | Bin 0 -> 80941 bytes
.../metabolism/icons/cylindric-shaft_3.svg | 259 +
.../metabolism/icons/cylindric-shaft_4.3dm | Bin 0 -> 89022 bytes
.../metabolism/icons/cylindric-shaft_4.svg | 315 ++
.../metabolism/icons/ellipsoid-capsule_1.3dm | Bin 0 -> 84299 bytes
.../metabolism/icons/ellipsoid-capsule_1.svg | 167 +
.../metabolism/icons/ellipsoid-capsule_2.3dm | Bin 0 -> 96427 bytes
.../metabolism/icons/ellipsoid-capsule_2.svg | 195 +
.../metabolism/icons/ellipsoid-capsule_3.3dm | Bin 0 -> 94227 bytes
.../metabolism/icons/ellipsoid-capsule_3.svg | 371 ++
.../metabolism/icons/ellipsoid-capsule_4.3dm | Bin 0 -> 97839 bytes
.../metabolism/icons/ellipsoid-capsule_4.svg | 191 +
.../metabolism/icons/ellipsoid-capsule_5.3dm | Bin 0 -> 88955 bytes
.../metabolism/icons/ellipsoid-capsule_5.svg | 187 +
.../metabolism/icons/ellipsoid-capsule_6.3dm | Bin 0 -> 92794 bytes
.../metabolism/icons/ellipsoid-capsule_6.svg | 155 +
.../metabolism/icons/ellipsoid-capsule_7.3dm | Bin 0 -> 94707 bytes
.../metabolism/icons/ellipsoid-capsule_7.svg | 207 +
.../metabolism/icons/ellipsoid-capsule_8.3dm | Bin 0 -> 85390 bytes
.../metabolism/icons/ellipsoid-capsule_8.svg | 407 ++
examples/metabolism/icons/shaft_3.3dm | Bin 0 -> 61180 bytes
examples/metabolism/icons/shaft_3.svg | 307 ++
examples/metabolism/icons/shaft_4.3dm | Bin 0 -> 95580 bytes
examples/metabolism/icons/shaft_4.svg | 50 +
examples/metabolism/kit.gh | Bin 0 -> 46286 bytes
examples/metabolism/nakagin-capsule-tower.gh | Bin 0 -> 320179 bytes
examples/metabolism/nakagincapsuletower.gh | Bin 345596 -> 0 bytes
.../representations/base_1to200_volume.3dm | Bin 282733 -> 282645 bytes
.../representations/base_1to500_volume.3dm | Bin 195131 -> 195043 bytes
.../representations/bridge_1to200_volume.3dm | Bin 610812 -> 609238 bytes
.../representations/bridge_1to500_volume.3dm | Bin 187022 -> 186918 bytes
.../representations/capital_1to200_volume.3dm | Bin 47588 -> 47580 bytes
.../representations/capital_1to500_volume.3dm | Bin 30069 -> 30061 bytes
.../capsule_1_1to200_volume.3dm | Bin 103510 -> 103502 bytes
.../capsule_1_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../capsule_2_1to200_volume.3dm | Bin 103574 -> 103566 bytes
.../capsule_2_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../capsule_3_1to200_volume.3dm | Bin 103510 -> 103502 bytes
.../capsule_3_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../capsule_4_1to200_volume.3dm | Bin 103574 -> 103566 bytes
.../capsule_4_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../capsule_5_1to200_volume.3dm | Bin 103582 -> 103574 bytes
.../capsule_5_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../capsule_6_1to200_volume.3dm | Bin 103574 -> 103566 bytes
.../capsule_6_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../capsule_7_1to200_volume.3dm | Bin 103582 -> 103574 bytes
.../capsule_7_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../capsule_8_1to200_volume.3dm | Bin 103574 -> 103566 bytes
.../capsule_8_1to500_volume.3dm | Bin 47781 -> 47717 bytes
.../representations/cylindric-capital.3dm | Bin 0 -> 179628 bytes
.../representations/cylindric-capital.glb | Bin 0 -> 60348 bytes
.../cylindric-capital_1to200_volume.3dm | Bin 0 -> 35407 bytes
.../cylindric-capital_1to500_volume.3dm | Bin 0 -> 25930 bytes
.../representations/cylindric-shaft_1.3dm | Bin 0 -> 162194 bytes
.../representations/cylindric-shaft_1.glb | Bin 0 -> 37372 bytes
.../cylindric-shaft_1_1to200_volume.3dm | Bin 0 -> 1125811 bytes
.../cylindric-shaft_1_1to500_volume.3dm | Bin 0 -> 93907 bytes
.../representations/cylindric-shaft_2.3dm | Bin 0 -> 182631 bytes
.../representations/cylindric-shaft_2.glb | Bin 0 -> 40040 bytes
.../cylindric-shaft_2_1to200_volume.3dm | Bin 0 -> 1371619 bytes
.../cylindric-shaft_2_1to500_volume.3dm | Bin 0 -> 110403 bytes
.../representations/cylindric-shaft_3.3dm | Bin 0 -> 127837 bytes
.../representations/cylindric-shaft_3.glb | Bin 0 -> 30540 bytes
.../cylindric-shaft_3_1to200_volume.3dm | Bin 0 -> 757099 bytes
.../cylindric-shaft_3_1to500_volume.3dm | Bin 0 -> 69163 bytes
.../representations/cylindric-shaft_4.3dm | Bin 0 -> 149940 bytes
.../representations/cylindric-shaft_4.glb | Bin 0 -> 36040 bytes
.../cylindric-shaft_4_1to200_volume.3dm | Bin 0 -> 1002907 bytes
.../cylindric-shaft_4_1to500_volume.3dm | Bin 0 -> 85659 bytes
.../representations/ellipsoid-capsule_1.3dm | Bin 0 -> 1403359 bytes
.../representations/ellipsoid-capsule_1.glb | Bin 0 -> 342264 bytes
.../ellipsoid-capsule_1_1to200_volume.3dm | Bin 0 -> 813155 bytes
.../ellipsoid-capsule_1_1to500_volume.3dm | Bin 0 -> 147908 bytes
.../representations/ellipsoid-capsule_2.3dm | Bin 0 -> 1048946 bytes
.../representations/ellipsoid-capsule_2.glb | Bin 0 -> 402964 bytes
.../ellipsoid-capsule_2_1to200_volume.3dm | Bin 0 -> 813283 bytes
.../ellipsoid-capsule_2_1to500_volume.3dm | Bin 0 -> 148036 bytes
.../representations/ellipsoid-capsule_3.3dm | Bin 0 -> 1327349 bytes
.../representations/ellipsoid-capsule_3.glb | Bin 0 -> 357296 bytes
.../ellipsoid-capsule_3_1to200_volume.3dm | Bin 0 -> 854863 bytes
.../ellipsoid-capsule_3_1to500_volume.3dm | Bin 0 -> 153981 bytes
.../representations/ellipsoid-capsule_4.3dm | Bin 0 -> 1323730 bytes
.../representations/ellipsoid-capsule_4.glb | Bin 0 -> 353716 bytes
.../ellipsoid-capsule_4_1to200_volume.3dm | Bin 0 -> 852057 bytes
.../ellipsoid-capsule_4_1to500_volume.3dm | Bin 0 -> 153293 bytes
.../representations/ellipsoid-capsule_5.3dm | Bin 0 -> 1352530 bytes
.../representations/ellipsoid-capsule_5.glb | Bin 0 -> 341600 bytes
.../ellipsoid-capsule_5_1to200_volume.3dm | Bin 0 -> 808709 bytes
.../ellipsoid-capsule_5_1to500_volume.3dm | Bin 0 -> 143462 bytes
.../representations/ellipsoid-capsule_6.3dm | Bin 0 -> 971883 bytes
.../representations/ellipsoid-capsule_6.glb | Bin 0 -> 344464 bytes
.../ellipsoid-capsule_6_1to200_volume.3dm | Bin 0 -> 808709 bytes
.../ellipsoid-capsule_6_1to500_volume.3dm | Bin 0 -> 143462 bytes
.../representations/ellipsoid-capsule_7.3dm | Bin 0 -> 1091971 bytes
.../representations/ellipsoid-capsule_7.glb | Bin 0 -> 324784 bytes
.../ellipsoid-capsule_7_1to200_volume.3dm | Bin 0 -> 847483 bytes
.../ellipsoid-capsule_7_1to500_volume.3dm | Bin 0 -> 148719 bytes
.../representations/ellipsoid-capsule_8.3dm | Bin 0 -> 789575 bytes
.../ellipsoid-capsule_8.3dmbak | Bin 0 -> 850417 bytes
.../representations/ellipsoid-capsule_8.glb | Bin 0 -> 351628 bytes
.../ellipsoid-capsule_8_1to200_volume.3dm | Bin 0 -> 850417 bytes
.../ellipsoid-capsule_8_1to500_volume.3dm | Bin 0 -> 149535 bytes
.../representations/shaft_1_1to200_volume.3dm | Bin 101671 -> 101087 bytes
.../representations/shaft_1_1to500_volume.3dm | Bin 101671 -> 101087 bytes
.../representations/shaft_2_1to200_volume.3dm | Bin 117975 -> 117263 bytes
.../representations/shaft_2_1to500_volume.3dm | Bin 117975 -> 117263 bytes
.../representations/shaft_3_1to200_volume.3dm | Bin 37004 -> 76823 bytes
.../representations/shaft_3_1to500_volume.3dm | Bin 37004 -> 76823 bytes
.../representations/shaft_4_1to200_volume.3dm | Bin 42169 -> 92999 bytes
.../representations/shaft_4_1to500_volume.3dm | Bin 42169 -> 92999 bytes
examples/metabolism/shaft.gh | Bin 176717 -> 190572 bytes
webstack/sketchpad/package-lock.json | 4659 +++++++++++------
webstack/sketchpad/package.json | 4 +-
webstack/sketchpad/src/renderer/src/App.tsx | 30 +-
157 files changed, 6978 insertions(+), 1877 deletions(-)
create mode 100644 docs/badges/poweredbycsharp.shields
create mode 100644 docs/badges/poweredbycsharp.svg
delete mode 100644 docs/badges/poweredbygraphql.shields
delete mode 100644 docs/badges/poweredbygraphql.svg
delete mode 100644 docs/badges/poweredbyqt.shields
delete mode 100644 docs/badges/poweredbyqt.svg
create mode 100644 docs/badges/poweredbytypescript.shields
create mode 100644 docs/badges/poweredbytypescript.svg
create mode 100644 docs/badges/uiplanneddynamo.shields
create mode 100644 docs/badges/uiplanneddynamo.svg
delete mode 100644 docs/badges/uiplannedrevit.shields
delete mode 100644 docs/badges/uiplannedrevit.svg
delete mode 100644 docs/badges/uiplannedrhino.shields
delete mode 100644 docs/badges/uiplannedrhino.svg
create mode 100644 docs/engineering/ports/directed.puml
create mode 100644 docs/engineering/ports/directed_directed-ports.puml
create mode 100644 docs/engineering/ports/directed_typed-ports.puml
create mode 100644 docs/engineering/ports/undirected-convex.puml
create mode 100644 docs/engineering/ports/undirected.puml
create mode 100644 examples/metabolism/ai.gh
create mode 100644 examples/metabolism/cylindric-capital.gh
create mode 100644 examples/metabolism/cylindric-shaft.gh
delete mode 100644 examples/metabolism/cylindriccapital.gh
delete mode 100644 examples/metabolism/cylindricshaft.gh
create mode 100644 examples/metabolism/ellipsoid-capsule.gh
delete mode 100644 examples/metabolism/futuristiccapsule.gh
create mode 100644 examples/metabolism/icons/cylindric-capital.3dm
create mode 100644 examples/metabolism/icons/cylindric-capital.svg
create mode 100644 examples/metabolism/icons/cylindric-shaft_1.3dm
create mode 100644 examples/metabolism/icons/cylindric-shaft_1.svg
create mode 100644 examples/metabolism/icons/cylindric-shaft_2.3dm
create mode 100644 examples/metabolism/icons/cylindric-shaft_2.svg
create mode 100644 examples/metabolism/icons/cylindric-shaft_3.3dm
create mode 100644 examples/metabolism/icons/cylindric-shaft_3.svg
create mode 100644 examples/metabolism/icons/cylindric-shaft_4.3dm
create mode 100644 examples/metabolism/icons/cylindric-shaft_4.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_1.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_1.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_2.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_2.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_3.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_3.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_4.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_4.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_5.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_5.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_6.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_6.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_7.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_7.svg
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_8.3dm
create mode 100644 examples/metabolism/icons/ellipsoid-capsule_8.svg
create mode 100644 examples/metabolism/icons/shaft_3.3dm
create mode 100644 examples/metabolism/icons/shaft_3.svg
create mode 100644 examples/metabolism/icons/shaft_4.3dm
create mode 100644 examples/metabolism/icons/shaft_4.svg
create mode 100644 examples/metabolism/kit.gh
create mode 100644 examples/metabolism/nakagin-capsule-tower.gh
delete mode 100644 examples/metabolism/nakagincapsuletower.gh
create mode 100644 examples/metabolism/representations/cylindric-capital.3dm
create mode 100644 examples/metabolism/representations/cylindric-capital.glb
create mode 100644 examples/metabolism/representations/cylindric-capital_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-capital_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_1.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_1.glb
create mode 100644 examples/metabolism/representations/cylindric-shaft_1_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_1_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_2.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_2.glb
create mode 100644 examples/metabolism/representations/cylindric-shaft_2_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_2_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_3.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_3.glb
create mode 100644 examples/metabolism/representations/cylindric-shaft_3_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_3_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_4.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_4.glb
create mode 100644 examples/metabolism/representations/cylindric-shaft_4_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/cylindric-shaft_4_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_1.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_1.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_1_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_1_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_2.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_2.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_2_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_2_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_3.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_3.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_3_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_3_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_4.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_4.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_4_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_4_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_5.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_5.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_5_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_5_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_6.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_6.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_6_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_6_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_7.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_7.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_7_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_7_1to500_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_8.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_8.3dmbak
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_8.glb
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_8_1to200_volume.3dm
create mode 100644 examples/metabolism/representations/ellipsoid-capsule_8_1to500_volume.3dm
diff --git a/README.md b/README.md
index 68a7a467..ebc36c05 100644
--- a/README.md
+++ b/README.md
@@ -10,14 +10,12 @@
-
-
+
+
-
-
-
+
+
Collaborative, scalable and cross-platform designing.
@@ -46,7 +44,7 @@ You want to ✏️ the next 🏛️🏘️🏢🏭🏫🏨
-semio is an open ecosystem for component-based design of architecture. The decomposition of a design by a graph enables a collaborative, scalable and cross-platform design process. Instead of 3D-blobs, proprietary or documentary file formats from which it is difficult to extract individual parts, the heart of semio consists of an open data model. All components can be easily shared, searched and reused. Unlike existing data models, not every design is squeezed into a handful of standard types such as floors, walls or windows. Instead, individual, complex and flexible types can be defined and freely combined via a generalized port mechanism.
+semio is an open ecosystem for component-based design of architecture. You can capture and link design knowledge. Preparing for the next generation of AI. In the mean time, automatic file federation enables collaboration, automation and reuse.
# Getting started
@@ -54,17 +52,10 @@ semio is an open ecosystem for component-based design of architecture. The decom
- Windows
- Rhino 7 or greater
-semio has currently two user-interfaces: a server which runs locally ([portable windows program](https://github.com/usalu/semio/releases/download/2.0/semio.zip)) and a Grasshopper user-interface.
+semio has currently two user-interfaces. One in Grasshopper and one that is native (sketchpad).
## Installation
-The local server needs no installation. Just unpack the folder and run it. When it runs, you should see a system tray icon.
-
-![System Tray](https://raw.githubusercontent.com/usalu/semio/main/docs/installation/systemtray.png)
-
-> NOTE: It doesn't run? `semio.exe` might be blocked by Windows, or a custom Firewall because the binary is not signed yet. Otherwise if you receive an error message about a missing file, module, package or folder, then it is most likely that some files were not correctly unzipped. Reasons for this can be too long paths, synchronized folders, etc. Try unzipping it in a flat folder like C:\ and copy it to the target destination afterwards.
-
-
The Grasshopper plugin can be installed over the Rhino Package Manager.
1. Open Rhino Package Manger
1. Search for semio
@@ -73,11 +64,14 @@ The Grasshopper plugin can be installed over the Rhino Package Manager.
![Rhino Package](https://raw.githubusercontent.com/usalu/semio/main/docs/installation/rhinopackage.gif)
+[sketchpad](https://github.com/usalu/semio/releases/download/r24.07-1/engine.zip) needs no installation. Just unpack the folder and run it. If you run sketchpad without Grasshopper then you need to manually download and start the [engine](https://github.com/usalu/semio/releases/download/r24.07-1/engine.zip).
+> NOTE: The binaries are not signed (yet). Therefor Windows might give a warning.
+
That's it!
## Examples
-You can download the examples from the [release](https://github.com/usalu/semio/releases/download/2.0/examples.zip).
+You can download the examples from the [latest release](https://github.com/usalu/semio/releases/download/r24.07-1/examples.zip).
### Nakagin Capsule Tower
@@ -94,7 +88,7 @@ Ever wanted to change the capsules or the shaft with one click? While having dif
# How does semio work?
->NOTE: This is outdated. Version 2 was a complete rewrite. It is way better now!
+>NOTE: This is outdated. Release r23.07 was a complete rewrite. It is way better now!
-## UIs
-
-Currently there is one UI for Grasshopper.
-![Menu ribbon](https://raw.githubusercontent.com/usalu/semio/main/docs/adapters/grasshopper/ribbon.png)
-
-
# Contribution
-![]()
-
-If you want to contribute to the project, there are lot's of opportunities! Do you want to write an apapter for a platform or contribute to the core?
-If you are not sure what your contribution could exactly be, feel free to take a look under the [project site](https://github.com/users/usalu/projects/2) and see if find something.
\ No newline at end of file
+If you want to contribute to the project, feel free to open an issue. If you are not sure what your contribution could exactly be, feel free to take a look under the [project site](https://github.com/users/usalu/projects/2) and see if find something.
\ No newline at end of file
diff --git a/docs/badges/latestrelease.shields b/docs/badges/latestrelease.shields
index 570bdb15..4c3a1529 100644
--- a/docs/badges/latestrelease.shields
+++ b/docs/badges/latestrelease.shields
@@ -1 +1 @@
-https://img.shields.io/github/v/release/usalu/semio?style=flat-square&color=ff344f
\ No newline at end of file
+https://img.shields.io/badge/latest-r24.07--1-pink?style=flat-squaret&color=ff344f
\ No newline at end of file
diff --git a/docs/badges/latestrelease.svg b/docs/badges/latestrelease.svg
index 1c63698c..492def8b 100644
--- a/docs/badges/latestrelease.svg
+++ b/docs/badges/latestrelease.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/badges/poweredbycsharp.shields b/docs/badges/poweredbycsharp.shields
new file mode 100644
index 00000000..fef7962d
--- /dev/null
+++ b/docs/badges/poweredbycsharp.shields
@@ -0,0 +1 @@
+https://img.shields.io/badge/powered_by-C%23-blue?style=flat-square&logo=csharp&color=512bd4
\ No newline at end of file
diff --git a/docs/badges/poweredbycsharp.svg b/docs/badges/poweredbycsharp.svg
new file mode 100644
index 00000000..4069850d
--- /dev/null
+++ b/docs/badges/poweredbycsharp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/badges/poweredbygraphql.shields b/docs/badges/poweredbygraphql.shields
deleted file mode 100644
index 7ba720eb..00000000
--- a/docs/badges/poweredbygraphql.shields
+++ /dev/null
@@ -1 +0,0 @@
-https://img.shields.io/badge/powered_by-GraphQL-pink?style=flat-square&logo=graphql&color=e10098
\ No newline at end of file
diff --git a/docs/badges/poweredbygraphql.svg b/docs/badges/poweredbygraphql.svg
deleted file mode 100644
index c8f1a806..00000000
--- a/docs/badges/poweredbygraphql.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/badges/poweredbyqt.shields b/docs/badges/poweredbyqt.shields
deleted file mode 100644
index e1251a68..00000000
--- a/docs/badges/poweredbyqt.shields
+++ /dev/null
@@ -1 +0,0 @@
-https://img.shields.io/badge/powered_by-Qt-green?style=flat-square&logo=qt&color=41cd52
\ No newline at end of file
diff --git a/docs/badges/poweredbyqt.svg b/docs/badges/poweredbyqt.svg
deleted file mode 100644
index 701d8481..00000000
--- a/docs/badges/poweredbyqt.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/badges/poweredbytypescript.shields b/docs/badges/poweredbytypescript.shields
new file mode 100644
index 00000000..04cdee11
--- /dev/null
+++ b/docs/badges/poweredbytypescript.shields
@@ -0,0 +1 @@
+https://img.shields.io/badge/powered_by-Typescript-blue?style=flat-square&logo=typescript&color=3178c6
\ No newline at end of file
diff --git a/docs/badges/poweredbytypescript.svg b/docs/badges/poweredbytypescript.svg
new file mode 100644
index 00000000..b1b6180b
--- /dev/null
+++ b/docs/badges/poweredbytypescript.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/badges/uiplanneddynamo.shields b/docs/badges/uiplanneddynamo.shields
new file mode 100644
index 00000000..cd5d6158
--- /dev/null
+++ b/docs/badges/uiplanneddynamo.shields
@@ -0,0 +1 @@
+https://img.shields.io/badge/ui-planned-blue?style=flat-square&logo=data:image/png;base64,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&color=dd007e
\ No newline at end of file
diff --git a/docs/badges/uiplanneddynamo.svg b/docs/badges/uiplanneddynamo.svg
new file mode 100644
index 00000000..4aa71368
--- /dev/null
+++ b/docs/badges/uiplanneddynamo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/badges/uiplannedrevit.shields b/docs/badges/uiplannedrevit.shields
deleted file mode 100644
index 88ea4d91..00000000
--- a/docs/badges/uiplannedrevit.shields
+++ /dev/null
@@ -1 +0,0 @@
-https://img.shields.io/badge/ui-planned-blue?style=flat-square&logo=data:image/svg%2bxml;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAAAW9yTlQBz6J3mgAACddJREFUeNrtmwlUlNcVxx9glG0Q44IgbayJSySJWqUqIuDRGrBGo6LGVqJFJEIUotTUyBoUBWVRUFk0xxqNGpdYNZi0yVEbm+BSNbglita6oVHrgiwCyr/3vTczgGUGBEbCfPPO+Z9h3ve+O3y/ufe++973DQPAquqdrOt1Uti6Ky6+yf/NtQ8EOgSjoOO7zVolam0nOZJYTWL1gNWCtJpggWBBDQtkzFh0i9ShMWD5kUpIMGJYXKkNgdWDdJRD0sjIYR2uDyxzUkZVSAqBdfxpYU0iFdUESnGwgsEcQ2uG1ZV0WBckxcEiUE5h9BpUUCOsrbWBUgwsDahZZUzltcYESycsNShHAmXrmc6s+oWbYNWoYByvBJUhQNl6pDUtrE4hgNUU+tDxpLfqqEmAxduAbYD8XMeZjQ4KTrPJs2aWE6hMZq0GZTt4edPCavMO4BoJjEoChsfXrtcTAK844JV5dG4Q/bMTSKMI+B/pAmcRuEaA5RjCXyvyVEOyBpBHuROooQTKm+TVZLD4OdyjthzEU7fyx8DVO8DfTgBhG6U3sJGA/XTAOaRhsJzmAO2nXoW1azRs3VNAkDQqaJawnmzFpcDcTWRvHNDSr2HAKATRwf8mbNyWwnZQkvHB0rQvTsic1mqKDEsTrFraxwfIri+FUpDCYN0tAo5dBE5dAXIvAWevA2WPagc2NkUCq89M2WxhbfxOJm5rfylLmvW6hgE7j+qHxW1y2/X5v5otrE05sjSwo5qKf45doEzi7HfA3h90n3eOPLANHz9dQbC2HJJjHKrY70SJm40AArJ0n3enEOhCF91qqsJhcXHv8kvXfd79YhmuLU2wJKypmSZYtcLiSxo2Bpi8Uv8s+uIchYehKAVIbCgQ95nu887fAJ6ndacqQEGw1u2nMW7qGdBXehQbBvQJB0rKdJ/3aY4CS4d/UHkwKBbwXQ6MoUJzYhqw7EvgQYn+OmvEEmlbUUVpfVpStvRAB9NCWn/L2Es2x1KummZaSOtsF34CRiWTvTcJlL/cgTVt0eiaCL4iWwNpSTRDVvgN2vxrrrB+zAcW7gSWUB5aQzNjuZ4dB89YOWs6KRXWun00pr9cOPPaSt9uQ/YxWV60C1IoLG1ROlOCGPyh/nAcnSjzVkNC0SgqeDGewuyvR3SPP5QHmP1ebucoGpaT2rs8YvV71+QVNM6n/jOi0awN2wfLOmqHHu+6fIc8i+os5kVlBC2knUMVCkt4F4XisDj93nXqKhC9HegfLW/AKnaLRpw3Rn/u0rTIbdITFQtLeNf42mdGxcHaqmOnlO8m8BsZkVuUBGsCsDlHXtijx9Ul9qUO6obFn2vgIHhu0tUitsqQbfawxOxG1Xb3uUC/KKB3eHXxPn5MV0XOC8/nA2URyp+qid0h7zNuOwxs+BaY8wnQ+T2gdaCRwOIXzG+esj8A5n7Vxfv4MX3VOM9fvLq3mEzjR0tPE48hjZXv+f3Gp31I5GcLq7GlqfQdgo2sgv+5ygTLBMsEywTLBMsEywTLQLCuYtKqArTlRd9s+Ui0Mcj5A6rTZkhYNg2FNT3jGmb95TYW7CrGm/FXYD3xItq9fRntpxiHOky7jbaTThKoRNi6J9cPVmBmPmasvoEPtj9E2MYCuIfuh7VbElr1jYHNgDjjUf8FsBm4mOCkVgVVd1gB6dfw3vp7CN9RhnFxJ+HgvRqsRxSec02Ancdy+UsEY1N1UHWDxT1q9oZ7CP7oZrmL3w6w1xaAvRorDKg8UmsyaqyqHRZBwp+3FAe85LspkHV+H1ZuyfWGpDnPrHcCAV9M4OOlXiX9eims3ZeRp6ZC5ZkKi75LwVwWiXFWbimw85Tn2nmmkUcnqo/Fi2Mt+NhXqtirKurntlSeqYaFRcn8CIVeF5+II4y9HDXdhi6mIR9o4y5fO76+Cp18MuDknU6v6XCiv63INusUCYuei2A3dAU6v5EF5xGZ6PjbVbAlIDbcBoW81cAU2JMdJ+8MvDAyCx3oeFsa76y296ScR2TQmJXiizAErL+rw28ShR8jz2L0bTOzPosCGxp23Hta0zecd/mu2Mkselhe+Rzog4f4+Msf0I5Ds/kT0j/LrXw47d2tYJ1jBDD2Qgwytx4X/QVFpeg5fi32HrmkHVtYUoZ7haXVbO/59t9g3RbC0i2l0WG9RXLhv8CP2FHO+vjvZqxHJFN5pgU2NO5ZnyWw90pD/q1C+VO4R4/F3w+KK595PHrmBli7+RgZWvnQaNzqHDDHSJj/JgnmBPz0+Vui/2TeLWHz4Kl8rT1Nq6iofL/7m/Ng3Q0Di1H4sXnbStj4+DOMvbaQWQ5M4r/kbBRY3LOu3XwgLuJfHEzXhWBdYvH5gQvaC3UP2CT6796Xz0PuO/Qf4Rmsexy6jV6NiscVoj/902MUulGwH5IGCwLZbthKXL8tv4hTBJT3WQ9aRl9QqgxjA4Qho6KTUS3FHH3WMJr5yKtSDQLryOnrAgBjQQiP+UILyy96D/WFYNe+czLcKESdKO8w1fuYPP/zylv183eDOUfBnCd4Am7RN1FrO/fsTbCXFgj7Fv0SG2Pm/n9YlKso/MqYR+g+Cr8oZushQBkG1sl8EXKszTxs/vqsFoJPyHaCNQuhCV9r+8bP3Ul9M5G+RearQspXzsNXiRlRa5tCXONZJ8mzeI5s0T/JcKXD3M2FzH/lZfac6xIhlQFhFVMS/uf3V5F77mblDyx5MuZlwIuxeJlCTtMWr6G81XIOcr6/Jt5/9d1F4TmWg5Y1HSwqFViXcZ8w1jOGJ3UNKIPAerIdyL0mchDrlYCWBIG5LMbhEzJ579qfB9WAZNwvfChvoK74hpJ+hCgnmgzW4JC9jPVayKimqgrKILCO/fgTzPotxS6areS0Xw7nISuEV9nRhbOOEcKjRMKmmc8/PFsLdsi0jWC/+rC67WcNq0XfeGY9KKVq+BkuZ526LnKT64S1Wgjrs0+DtZ8PS/IiDsM7SN6jLy17hONnZbhezr9Pi90UMErsTQpLB6hGg1W1zuKexUOOOUTQzJenBbZhzxkxlh+zdE3CBXURq2lrqWDl4WpTg+1nCqsGSI0HS13Bn7t0R+YoSu6MpnX2y2h0G5mJe0Vl2gs1o34zqpPYL6KRpa7Yi9Q/2JkamS1KBk2+0tomWJrVAS9UJazk5glLuzakKZ+v5fi6jvepqKjkRWd7OjYxIht9J68XF8k9h68FW9MSiK8T+VrPcXg6bKnvybXek7Yd1LYNuutgSFjVdh1cFsGcQof3iX7yCvPeS+Sypsci8V5FnsMTvXaXQb2LYDkwWbsLUWlbvpr1qm67qvc9S1j+Ctq7ajAsVxOsusPiWmeCVXdYXDGku6RS0gNuRAHisPL/BydUJ5BSafkiAAAAAElFTkSuQmCC&color=1d69fc
\ No newline at end of file
diff --git a/docs/badges/uiplannedrevit.svg b/docs/badges/uiplannedrevit.svg
deleted file mode 100644
index cf7233e7..00000000
--- a/docs/badges/uiplannedrevit.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/badges/uiplannedrhino.shields b/docs/badges/uiplannedrhino.shields
deleted file mode 100644
index 9b3c0786..00000000
--- a/docs/badges/uiplannedrhino.shields
+++ /dev/null
@@ -1 +0,0 @@
-https://img.shields.io/badge/ui-planned-grey?style=flat-square&logo=data:image/svg%2bxml;base64,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&color=e4e4e4
\ No newline at end of file
diff --git a/docs/badges/uiplannedrhino.svg b/docs/badges/uiplannedrhino.svg
deleted file mode 100644
index 61f4fb06..00000000
--- a/docs/badges/uiplannedrhino.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/docs/engineering/ports/directed.puml b/docs/engineering/ports/directed.puml
new file mode 100644
index 00000000..144898c9
--- /dev/null
+++ b/docs/engineering/ports/directed.puml
@@ -0,0 +1,44 @@
+@startuml "data architecture"
+skinparam linetype ortho
+
+entity Type {
+ *id : int <>
+ ..
+}
+
+entity Port {
+ *id : int <>
+ ..
+ *plane : plane
+ ..
+ *type_id : int <>
+ ..
+ ...
+}
+
+entity Piece{
+ *id : int <>
+ ..
+ *type_id : int <>
+ ..
+ root_plane : plane
+ ..
+ ...
+}
+
+entity Attraction {
+ *attracting_piece_id : int <>
+ *attracting_piece_type_port_id : int <>
+ ..
+ *attracted_piece_id : int <>
+ *attracted_piece_type_port_id : int <>
+ ..
+ ...
+}
+
+Type ||--|{ Port
+Type <-- Piece
+Piece <-- Attraction
+Port <-- Attraction
+
+@enduml
\ No newline at end of file
diff --git a/docs/engineering/ports/directed_directed-ports.puml b/docs/engineering/ports/directed_directed-ports.puml
new file mode 100644
index 00000000..212c441a
--- /dev/null
+++ b/docs/engineering/ports/directed_directed-ports.puml
@@ -0,0 +1,54 @@
+@startuml "data architecture"
+skinparam linetype ortho
+
+entity Type {
+ *id : int <>
+ ..
+ ...
+}
+
+entity Port {
+ *id : int <>
+ ..
+ *local_id : string
+ ..
+ *out : bool
+ ..
+ *plane : plane
+ ..
+ *type_id : int <>
+ ..
+ ...
+}
+note top of Port
+ (local_id,out) unique.
+end note
+
+entity Piece{
+ *id : int <>
+ ..
+ *local_id : string
+ ..
+ *type_id : int <>
+ ..
+ root_plane : plane
+ ..
+ ...
+}
+
+entity Attraction {
+ *attracting_piece_id : int <>
+ *attracting_piece_type_port_id : int <>
+ ..
+ *attracted_piece_id : int <>
+ *attracted_piece_type_port_id : int <>
+ ..
+ ...
+}
+
+Type ||--|{ Port
+Type <-- Piece
+Piece <-- Attraction
+Port <-- Attraction
+
+@enduml
\ No newline at end of file
diff --git a/docs/engineering/ports/directed_typed-ports.puml b/docs/engineering/ports/directed_typed-ports.puml
new file mode 100644
index 00000000..a9029f4c
--- /dev/null
+++ b/docs/engineering/ports/directed_typed-ports.puml
@@ -0,0 +1,52 @@
+@startuml "data architecture"
+skinparam linetype ortho
+
+entity Type {
+ *id : int <>
+ ..
+ ...
+}
+
+entity Port {
+ *id : int <>
+ ..
+ *local_id : string
+ ..
+ *kind : string
+ ..
+ *plane : plane
+ ..
+ *type_id : int <>
+ ..
+ ...
+}
+note top of Port
+ (local_id,kind) unique.
+end note
+
+entity Piece{
+ *id : int <>
+ ..
+ *type_id : int <>
+ ..
+ root_plane : plane
+ ..
+ ...
+}
+
+entity Attraction {
+ *attracting_piece_id : int <>
+ *attracting_piece_type_port_id : int <>
+ ..
+ *attracted_piece_id : int <>
+ *attracted_piece_type_port_id : int <>
+ ..
+ ...
+}
+
+Type ||--|{ Port
+Type <-- Piece
+Piece <-- Attraction
+Port <-- Attraction
+
+@enduml
\ No newline at end of file
diff --git a/docs/engineering/ports/undirected-convex.puml b/docs/engineering/ports/undirected-convex.puml
new file mode 100644
index 00000000..856fea51
--- /dev/null
+++ b/docs/engineering/ports/undirected-convex.puml
@@ -0,0 +1,52 @@
+@startuml "data architecture"
+skinparam linetype ortho
+
+entity Type {
+ *id : int <>
+ ..
+ ...
+}
+
+entity Port {
+ *id : int <>
+ ..
+ *local_id : string
+ ..
+ *origin : point
+ *normal : vector
+ ..
+ *type_id : int <>
+ ..
+ ...
+}
+
+entity Piece{
+ *id : int <>
+ ..
+ *type_id : int <>
+ ..
+ root_plane : plane
+ ..
+ ...
+}
+
+entity Connection {
+ *connecting_piece_id : int <>
+ *connecting_piece_type_port_id : int <>
+ *connecting_piece_rotation : phi
+ ..
+ *connected_piece_id : int <>
+ *connected_piece_type_port_id : int <>
+ *connected_piece_rotation : phi
+ ' ..
+ ' *normal_offset : float
+ ..
+ ...
+}
+
+Type ||--|{ Port
+Type <-- Piece
+Piece <-- Connection
+Port <-- Connection
+
+@enduml
\ No newline at end of file
diff --git a/docs/engineering/ports/undirected.puml b/docs/engineering/ports/undirected.puml
new file mode 100644
index 00000000..d46af930
--- /dev/null
+++ b/docs/engineering/ports/undirected.puml
@@ -0,0 +1,47 @@
+@startuml "data architecture"
+skinparam linetype ortho
+
+entity Type {
+ *id : int <>
+ ..
+ ...
+}
+
+entity Port {
+ *id : int <>
+ ..
+ *local_id : string
+ ..
+ *plane : plane
+ ..
+ *type_id : int <>
+ ..
+ ...
+}
+
+entity Piece{
+ *id : int <>
+ ..
+ *type_id : int <>
+ ..
+ root_plane : plane
+ ..
+ ...
+}
+
+entity Connection {
+ *connecting_piece_id : int <>
+ *connecting_piece_type_port_id : int <>
+ ..
+ *connected_piece_id : int <>
+ *connected_piece_type_port_id : int <>
+ ..
+ ...
+}
+
+Type ||--|{ Port
+Type <-- Piece
+Piece <-- Connection
+Port <-- Connection
+
+@enduml
\ No newline at end of file
diff --git a/docs/softwarequality/softwarearchitecture/dataarchitecture.pu b/docs/softwarequality/softwarearchitecture/dataarchitecture.pu
index 5519b672..5e060076 100644
--- a/docs/softwarequality/softwarearchitecture/dataarchitecture.pu
+++ b/docs/softwarequality/softwarearchitecture/dataarchitecture.pu
@@ -60,31 +60,22 @@ entity Tag {
*representation_id : int <>
}
-entity Plane{
- *id : int <>
- ..
- *origin_x : float
- *origin_y : float
- *origin_z : float
- ..
- *x_axis_x : float
- *x_axis_y : float
- *x_axis_z : float
- ..
- *y_axis_x : float
- *y_axis_y : float
- *y_axis_z : float
-}
-
entity Port {
*id : int <>
..
*local_id : string
- *plane_id : int <>
+ ..
+ *plane_origin_x : float
+ *plane_origin_y : float
+ *plane_origin_z : float
+ ..
+ *plane_normal_x : float
+ *plane_normal_y : float
+ *plane_normal_z : float
..
*type_id : int <>
}
-note top of Port
+note right of Port
local_id and type_id
is unique.
local_id="" means default.
@@ -96,6 +87,7 @@ entity Quality {
*name : string
*value : string
*unit : string
+ *definition : string
..
type_id : int <>
formation_id : int <>
@@ -106,6 +98,8 @@ note bottom of Quality
value="" means true.
unit is optional
(can be set to "").
+ definition is optional.
+ (can be set to "").
end note
@@ -115,7 +109,7 @@ entity Locator {
..
*port_id : int <>
}
-note bottom of Locator
+note right of Locator
subgroup is optional
(can be set to "").
end note
@@ -126,10 +120,22 @@ entity Piece{
*local_id: string
*type_id : int <>
..
- root_plane_id : int <>
+ is_root : bool
+ ..
+ root_plane_origin_x : float
+ root_plane_origin_y : float
+ root_plane_origin_z : float
+ ..
+ root_plane_x_axis_x : float
+ root_plane_x_axis_y : float
+ root_plane_x_axis_z : float
..
- *diagram_point_x : float
- *diagram_point_y : float
+ root_plane_y_axis_x : float
+ root_plane_y_axis_y : float
+ root_plane_y_axis_z : float
+ ..
+ *diagram_point_x : int
+ *diagram_point_y : int
..
*formation_id : int <>
}
@@ -138,17 +144,31 @@ note right of Piece
is unique.
root plane can only be set
when piece is root.
+ Otherwise all values 0.
end note
-entity Attraction {
- *attracting_piece_id : int <>
- *attracting_piece_type_port_id : int <>
+entity Connection {
+ *connecting_piece_id : int <>
+ *connecting_piece_type_port_id : int <>
+ ..
+ *connected_piece_id : int <>
+ *connected_piece_type_port_id : int <>
..
- *attracted_piece_id : int <>
- *attracted_piece_type_port_id : int <>
+ *offset : float
+ *rotation : float
..
*formation_id : int <>
}
+note right of Connection
+ offset is in normal
+ direction and optional
+ (can be set to 0).
+ rotation is azimuthal
+ angle of normal in
+ degree [0,360[
+ and optional
+ (can be set to 0).
+end note
entity Formation {
*id : int <>
@@ -170,14 +190,12 @@ Representation }|--|| Type
Type ||--|{ Port
Type ||--o{ Quality
Formation ||--|{ Piece
-Formation ||--o{ Attraction
+Formation ||--o{ Connection
Formation ||--o{ Quality
-Port ||--|| Plane
Port ||--o{ Locator
-Piece ||--o| Plane
Type <-- Piece
-Piece <-- Attraction
-Port <-- Attraction
+Piece <-- Connection
+Port <-- Connection
Artifact <|-- Kit
Artifact <|-- Formation
diff --git a/docs/softwarequality/softwarearchitecture/interfacearchitecture.txt b/docs/softwarequality/softwarearchitecture/interfacearchitecture.txt
index 9ca0ec20..391f4db9 100644
--- a/docs/softwarequality/softwarearchitecture/interfacearchitecture.txt
+++ b/docs/softwarequality/softwarearchitecture/interfacearchitecture.txt
@@ -22,18 +22,13 @@ kit : !Kit{
y : !Float
z : !Float
}
- xAxis : !{
- x : !Float
- y : !Float
- z : !Float
- }
- yAxis : !{
+ normal : !{
x : !Float
y : !Float
z : !Float
}
}
- locators : +[
+ locators : *[
group : !String
subgroup : !String
]
@@ -63,12 +58,12 @@ kit : !Kit{
y : !Float
z : !Float
}
- xAxis : !{
+ x_axis : !{
x : !Float
y : !Float
z : !Float
}
- yAxis : !{
+ y_axis : !{
x : !Float
y : !Float
z : !Float
@@ -76,36 +71,35 @@ kit : !Kit{
}
}
diagram : ?{
-
+ point : !{
+ x : !Integer
+ y : !Integer
+ }
}
]
- attractions : +[
- attracting : !{
+ connections : +[
+ connected : !{
piece : !{
id : !String
type : !{
port : !{
- locators : +[
- group : !String
- subgroup : !String
- ]
+ id : !String
}
}
}
}
- attracted : !{
+ connecting : !{
piece : !{
id : !String
type : !{
port : !{
- locators : +[
- group : !String
- subgroup : !String
- ]
+ id : !String
}
}
}
}
+ rotation : ?Float
+ offset : ?Float
]
qualities : *[
name : !String
diff --git a/docs/softwarequality/softwarearchitecture/softwarearchitecture.pu b/docs/softwarequality/softwarearchitecture/softwarearchitecture.pu
index a2a6ad0b..64d6121b 100644
--- a/docs/softwarequality/softwarearchitecture/softwarearchitecture.pu
+++ b/docs/softwarequality/softwarearchitecture/softwarearchitecture.pu
@@ -1,93 +1,104 @@
-@startuml "data architecture"
+@startuml "software architecture"
skinparam linetype ortho
-interface Document {
- name : string
- description : string
- icon : string
+interface Artifact {
+ name : String
+ description : String
+ icon : String
}
class Kit {
- url : string
+ url : String
}
class Type {
}
class Representation{
- url : string
- lod : string
- tags: string[]
- format() : string
+ url : String
+ lod : String
+ tags: String[]
}
class Point {
- x : float
- y : float
- z : float
+ x : Float
+ y : Float
+ z : Float
}
class Vector {
- x : float
- y : float
- z : float
+ x : Float
+ y : Float
+ z : Float
}
class Plane {
- origin : Point
- x_axis : Vector
- y_axis : Vector
}
class Port {
+ id : String
}
class Quality {
- name : string
- value : string
+ name : String
+ value : String
unit : String
+ definition : String
}
class Locator {
- group : string
- subgroup : string
+ group : String
+ subgroup : String
}
class Piece{
+ id : String
}
-class Attraction {
- attracting : Side
- attracted : Side
+class Root {
+
+}
+
+class Connection {
+ offset : Float
+ rotation : Float
}
class Side {
+
}
class Formation {
}
-Kit *-- Type
-Kit *-- Formation
-Representation --* Type
-Type *-- Port
-Type *-- Quality
-Formation *-- Piece
-Formation *-- Attraction
-Formation *-- Quality
-Attraction *-- Side
-Port *-- Locator
-Plane --* Port
-Point --* Plane
-Plane *-- Vector
+Kit *-- "0..*" Type
+Kit *-- "0..*" Formation
+Representation "1..*" --* Type
+Type *-- "1..*" Port
+Type *-- "0..*" Quality
+Formation *-- "1..*" Piece
+Piece *-- "0..1" Root
+Root *-- Plane
+Formation *-- "0..*" Connection
+Formation *-- "0..*" Quality
+Connection *-- Side : connected
+Connection *-- Side : connecting
+
+Port *-- Plane
+Port *-- "0..*" Locator
+Point --* Plane : origin
+Plane *-- Vector : x_axis
+Plane *-- Vector : y_axis
+Plane *-- Vector : normal
+
Type <-- Piece
Piece <-- Side
Port <-- Side
-Document <|-- Kit
-Document <|-- Type
-Document <|-- Formation
+Artifact <|-- Kit
+Artifact <|-- Type
+Artifact <|-- Formation
@enduml
\ No newline at end of file
diff --git a/examples/metabolism/.semio/kit.sqlite3 b/examples/metabolism/.semio/kit.sqlite3
index 66736a3b3f3c4a967beeda84ce7fdd62780640e3..ff4aab5f1fe3044029019b7e0ff3a6190d7e6062 100644
GIT binary patch
literal 905216
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