From 175f552dd10451feb5f3c7fdfae57b9dc4bb4726 Mon Sep 17 00:00:00 2001
From: Thomas Bouffard <27200110+tbouffard@users.noreply.github.com>
Date: Fri, 17 Jan 2025 15:12:54 +0100
Subject: [PATCH] docs: add technical information (#91)
New contents:
- information from draw.io and the implementation of this repository
- class diagram
Also mark the repository as archived.
---
README.md | 102 +++++++++++++++++-
.../diagram-example.png | Bin
docs/mxgraph-sketch_class_diagram.drawio | 89 +++++++++++++++
docs/mxgraph-sketch_class_diagram.png | Bin 0 -> 43027 bytes
4 files changed, 187 insertions(+), 4 deletions(-)
rename diagram-example.png => docs/diagram-example.png (100%)
create mode 100644 docs/mxgraph-sketch_class_diagram.drawio
create mode 100644 docs/mxgraph-sketch_class_diagram.png
diff --git a/README.md b/README.md
index ab4ef01..f131238 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
MxGraph Sketch
-
+
@@ -23,11 +23,105 @@
-Used with the [MxGraph](https://github.com/jgraph/mxgraph) library, this library updates the render with a Sketch style.
+
+| Archived on 2025-01-17 | We no longer maintain this repository. |
+| -------- | -------- |
+
+
+Used with the [mxGraph](https://github.com/jgraph/mxgraph) library, this library updates the render with a Sketch style.
## 🎨 Features
-:warning: **THIS LIBRARY IS CURRENTLY UNDER DEVELOPMENT** :warning:
+⚠️ **THIS LIBRARY IS CURRENTLY UNDER DEVELOPMENT** ⚠️
+
+This is a demo only.
+
+
+## 🚢 Build and run locally
+
+Run `npm install` to install the dependencies.
+
+The, run `npm start` to start the development server.
+
+
+## 🧩 Technical details (from draw.io)
+
+### Technical Analysis: Sketch and Hand Jiggle Implementation
+
+See [Introducing draw.io’s new sketch feature](https://drawio-app.com/introducing-draw-ios-new-sketch-feature/). It leverages [Rough.js](https://roughjs.com/) to create hand-drawn effects. The feature can be applied to the entire graph or specific elements by defining a style. For compatibility, the property names used in draw.io's styles have been retained.
+
+### Key Details of draw.io’s Implementation
+
+- **Style Property**:
+ Draw.io introduces a `sketchStyle` property in its style definitions, which can take the values `'comic'` or `'rough'`. By default, it falls back to `'rough'` if not explicitly set.
+ The visual difference is notable: the `'sketch'` style creates a more pronounced effect than `'comic'`.
+ This behavior was observed by modifying the `sketchStyle` value in draw.io—replacing `sketch=1` with `comic=1`.
+
+- **Canvas Handling**:
+ The `sketchStyle` property determines which type of `handJiggleCanvas` (comic or rough) is created and used for rendering.
+
+- **New Functionality**:
+ A new function, `mxShape.createHandJiggle`, is introduced, as seen in the draw.io codebase:
+ [Relevant code in Editor.js](https://github.com/jgraph/drawio/blob/acd938b1e42cff3be3b629e6239cdec9a9baddcc/src/main/webapp/js/diagramly/Editor.js#L1412).
+
+### draw.io’s Sketch Feature: Implementation Details
+
+1. **New Concept: HandJiggle**
+ - This concept introduces hand-drawn effects applied via **canvas**.
+ - A new field, `defaultJiggle`, is added to shapes. Default values are set to `1.5` for `mxShape` and `2` for `mxRhombus`.
+ - A new `createHandJiggle` function is added to `mxShape`. If the style is set to `sketch`, this function is called.
+
+2. **Testing the Style**:
+ - The `jiggle` property defines the "noise" level for sketch effects. This can be tested manually by modifying styles using the “Update Style” button and entering values in the input window.
+
+3. **Comic Mode**:
+ - Comic effects are entirely coded manually in a class named `HandJiggle`.
+ - This class takes an `mxCanvas` as a parameter and performs additional actions for rendering.
+
+### Rough.js and Fill Styles
+
+When using Rough.js for sketch effects, specific styles can be applied to **fills**, showcasing various visual options.
+In the `Editor` class, the supported fill styles are defined as follows:
+
+```javascript
+/**
+ * All fill styles supported by rough.js.
+ */
+Editor.roughFillStyles = [
+ {val: 'auto', dispName: 'Auto'},
+ {val: 'hachure', dispName: 'Hachure'},
+ {val: 'solid', dispName: 'Solid'},
+ {val: 'zigzag', dispName: 'ZigZag'},
+ {val: 'cross-hatch', dispName: 'Cross Hatch'},
+ {val: 'dots', dispName: 'Dots'},
+ {val: 'dashed', dispName: 'Dashed'},
+ {val: 'zigzag-line', dispName: 'ZigZag Line'}
+];
+```
+
+This allows for showcasing custom fill effects, such as colorized fills, which are visually appealing.
+
+### Adapter for Rough.js Integration
+
+1. **RoughCanvas Adapter**:
+ A new adapter, `RoughCanvas`, is introduced to handle calls to Rough.js. It converts mxGraph styles to Rough.js styles.
+ For example, the `jiggle` property is transformed into `roughness` for Rough.js.
+
+2. **SVG Canvas Integration**:
+ An implementation extends `mxSvgCanvas2D` to proxy an `mxCanvas`. This implementation delegates certain rendering tasks to `RoughCanvas` when needed.
+
+
+## 🛠️ Technical details about the implementation of `mxgraph-sketch`
+
+This implementation is inspired by **draw.io's sketch feature** and uses the same style properties to ensure potential compatibility with draw.io.
+
+The `src/mxgraph-sketch.ts` file provides functions to override certain prototypes and add support for the sketch style by applying a dedicated `mxSvgCanvas2D`.
+
+A specialized `SketchySvgCanvas` (extending `mxSvgCanvas2D`) is responsible for enabling the sketch style. It recalculates paths and applies sketchy effects to the rendering.
+
+The concept of **`passThrough`** is introduced to manage styles seamlessly, whether the sketch style is enabled or not.
+
+![class diagram](docs/mxgraph-sketch_class_diagram.png)
## 🔧 Contributing
@@ -38,7 +132,7 @@ The repository contains configuration for [Eclipse Theia](https://theia-ide.org/
You can find more detail in our [Contributing guide](CONTRIBUTING.md). Participation in this open source project is subject to a [Code of Conduct](https://github.com/process-analytics/.github/blob/main/CODE_OF_CONDUCT.md).
-:sparkles: A BIG thanks to all our contributors :slightly_smiling_face:
+✨ A BIG thanks to all our contributors 🙂
## 📃 License
diff --git a/diagram-example.png b/docs/diagram-example.png
similarity index 100%
rename from diagram-example.png
rename to docs/diagram-example.png
diff --git a/docs/mxgraph-sketch_class_diagram.drawio b/docs/mxgraph-sketch_class_diagram.drawio
new file mode 100644
index 0000000..762b6bb
--- /dev/null
+++ b/docs/mxgraph-sketch_class_diagram.drawio
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/mxgraph-sketch_class_diagram.png b/docs/mxgraph-sketch_class_diagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc04724036f91fda203152515334234f751d644e
GIT binary patch
literal 43027
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
NNPpkXCwkU_{{iV#9s~dY
literal 0
HcmV?d00001