Comments (3)
Yes, it consumes the object each time one invokes any of the path methods. This was done to allow for chaining operations, like what you have in your code. So all you need to do it assign it back to the original variable or use, for instance, folding:
let data = (0..3).fold(Data::new(), |data, i| data.move_to((10, i + 10)).line_by((5, 0))).close();
from svg.
thank you! I will try that.
Just one more question: can I reuse the variable data
again in another loop if I want to add more lines in a different manner?
What would be the best way of creating n sets of m concentric circles? I have great difficulties understanding how that works, if I cannot re-use the data
-element in which I want to dump my circles in.
Also: what is a "path method"? Is it a method that acts on a Path
-struct or is it a method that acts on Data
and creates a path? In the main example the "path" (in the conventional sense) is created by invoking Data's line_by()
-method. But the actual path-named variable is a different object. I think it would be tremendously helpful to add a few sentences explaining the concepts used in this crate and how they relate to each other. I am very confused right now.
It would also be nice to extend the examples-section of this crate a little e.g. several different ways of adding elements loops, conditions e.g. adding several discrete lines (not connected) in a loop (like i tried). Or maybe even recreate the example document used in the wikipedia article for svg.
from svg.
Yes, you can keep chaining operations in different ways. Just remember that they consume the object but then return it back to you. So you have to either append another operation directly or reuse the original or create a new variable binding for future use:
let data = Data::new();
let data = data.line_by((10, 10));
let data = data.line_by((10, 10));
let data = data.line_by((10, 10));
let data = data.line_by((10, 10));
let mut data = Data::new();
data = data.line_by((10, 10));
data = data.line_by((10, 10));
data = data.line_by((10, 10));
data = data.line_by((10, 10));
Think also that you might want to have a separate path with a separate data attribute for each your object instead of putting them all into the same path.
Yes, by a path method, I meant those available in Data
. Here is the corresponding part of the spec:
https://www.w3.org/TR/SVG2/paths.html#PathData
Regarding the documentation, there was this issue where I shared my thoughts:
I agree that it would be nice to have move examples of how this crate is supposed to be used—and please feel free to contribute—but the SVG specification is beyond the scope, including what one can compose and how.
from svg.
Related Issues (20)
- Question: how can I get Text node size (w, h) before adding it?
- How to modify children of `svg::Document`? HOT 3
- How to get large-arc-flag and sweep-flag from Parameters? HOT 1
- Strict Type for `set(name, value)` HOT 4
- How to copy a child into another Element HOT 1
- Update Data Element within a struct HOT 8
- Add support for transformations HOT 2
- How do I get their nested relationship from the parsing, because some properties might be in the parent like g HOT 2
- feature request: expose a way to create arbitrary element? HOT 2
- Add more documentation with examples HOT 2
- Allow for custom formatting HOT 1
- Allow for custom storage of `Attributes` HOT 1
- Avoid string conversion when working with `Value` HOT 1
- Publish new version on crates.io HOT 2
- `<` in Text nodes is not escaped HOT 2
- Question: How do you assign the text content for a `element::Text` node? HOT 2
- Add the ability to disable escaping the content of `Text` nodes HOT 5
- Remove newlines around node::Text? HOT 2
- The <textPath> element cannot set inner text HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from svg.