0.2.0 #71

Merged
altavir merged 139 commits from dev into master 2022-01-24 09:44:18 +03:00
6 changed files with 35 additions and 9 deletions
Showing only changes of commit a027e71c48 - Show all commits

32
docs/hierarchy.md Normal file
View File

@ -0,0 +1,32 @@
# Hierarchy
![](../docs/images/hierarchy.png)
### Vision
* function `getProperty(name: Name, inherit: Boolean, includeStyles: Boolean, includeDefaults: Boolean)`.
It gets properties of element with `name` identification.
`inherit` — toggles parent node property lookup. Null means inference from descriptor. Default is false.
`includeStyles` — toggles inclusion of. Null means inference from descriptor. Default is true.
`includeDefaults` — default is false.
* function `setProperty(name: Name, item: MetaItem?, notify: Boolean = true)`
Sets the `item` property to the element with the `name` identification. `notify` is a value which toggles the necessity of the change notification. Default is true.
### About properties
**Properties have to be set in particular order:**
* styles
* prototypes
* parent
* parent's styles
* defaults
## Inheritance
Inheritance is a very useful ability of `children` elements to get the same property in default as his parent does have (to 'inherit' it).

BIN
docs/images/hierarchy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -42,9 +42,7 @@ fun main(){
*Basic properties:* *Basic properties:*
1. `opacity` — It is set in `float`. It takes on values from 0 to 1, which represent percents of solid opacity. It's initial value is 1. 1. `opacity` — It is set in `float`. It takes on values from 0 to 1, which represent percents of solid opacity. It's initial value is 1.
2. `color` — It can be specified as `Int`, `String`, or as three `Ubytes`, which represent color in `rgb`. Elementally, the solid will have `green` color. 2. `color` — It can be specified as `Int`, `String`, or as three `Ubytes`, which represent color in `rgb`. Elementally, the solid will have `green` color.
3. `rotation` — it's the point, which sets rotations along axes. Initially, the value is `Point3D(0, 0, 0)`. Changing `x` coordinate of the point, you make pivot around `x axis`. The same for other coordinates: changing `y` — pivot around `y axis`, changing `z` — pivot around `z axis`. 3. `rotation` — it's the point, which sets rotations along axes. Initially, the value is `Point3D(0, 0, 0)`. Changing `x` coordinate of the point, you make pivot around `x axis`. The same for other coordinates: changing `y` — pivot around `y axis`, changing `z` — pivot around `z axis`.
4. position, which is given by values `x`, `y`, `z`. Initial values are `x = 0`, `y = 0`, `z = 0`. The coordinate system is Cartesian. It's elemental position is this — vertical `y` axis and horizontal `Oxz` plane. 4. position, which is given by values `x`, `y`, `z`. Initial values are `x = 0`, `y = 0`, `z = 0`. The coordinate system is Cartesian. It's elemental position is this — vertical `y` axis and horizontal `Oxz` plane.
Let's see how properties are set in solids. Let's see how properties are set in solids.

View File

@ -5,6 +5,7 @@ interface Vision{
val parent: Vision? val parent: Vision?
fun getProperty(name): MetaItem? fun getProperty(name): MetaItem?
fun setProperty(name, value) fun setProperty(name, value)
} }
class VisionBase{ class VisionBase{

View File

@ -17,11 +17,6 @@ import space.kscience.dataforge.values.ValueType
import space.kscience.visionforge.Vision.Companion.STYLE_KEY import space.kscience.visionforge.Vision.Companion.STYLE_KEY
import kotlin.jvm.Synchronized import kotlin.jvm.Synchronized
internal data class PropertyListener(
val owner: Any? = null,
val action: (name: Name) -> Unit,
)
/** /**
* A full base implementation for a [Vision] * A full base implementation for a [Vision]
* @param properties Object own properties excluding styles and inheritance * @param properties Object own properties excluding styles and inheritance
@ -43,7 +38,7 @@ public open class VisionBase(
} }
/** /**
* A fast accessor method to get own property (no inheritance or styles * A fast accessor method to get own property (no inheritance or styles)
*/ */
override fun getOwnProperty(name: Name): MetaItem? = if (name == Name.EMPTY) { override fun getOwnProperty(name: Name): MetaItem? = if (name == Name.EMPTY) {
properties?.asMetaItem() properties?.asMetaItem()