I recently started experimenting with PlantUML to programmatically generate markup and diagrams for different parts of our infrastructure.
However, while I have been successful in generating some basic level diagrams, I am encountering issues with using them in combination with other tools and programs.
Mainly looking for a way to import or convert PlantUML markup or diagram as an editable diagram in other tools such Miro, draw.io or Visio. Issue is though I can import PlantUML as a let's say a SVG in draw.io but those are just images which aren’t editable for some extra formatting or editing neither text searchable.
So, is there a way to achieve that in combination or PlantUML and other GUI tools? Or if not are there any other alternative which can let me generate diagrams as code with the possibility or manually editing them in a standard tool?
I'm working on a creating a genetic algorithm for a class project in python. The algorithm works perfectly, but I want to create an image of the tree, rather than just a simple text output. I have written a function that performs well for trees up to about 4 levels. Above that, the display doesn't work well, and there ends up with too much blank space. I know why, but it might take me too long to come up with a better solution.
Does anyone know if there exists a function to create a compact non-binary tree display? I'm looking for one that adjusts each branch so there isn't a ton of blank space between them, given that a lot of the branch depths are un-even. I've found a lot of binary tree display functions, but that doesn't work because some of my nodes have 3 children.
You can see it working well and not working well in the images.
Decent looking tree:
https://drive.google.com/file/d/1j2BQjanTDgvzttedUyhxnbWhkXuQwyaG/view?usp=sharing
Not so great tree (too much blank space):
https://drive.google.com/file/d/1Gh90e3JvAeCB_U2NhvvouZulM4CVQ8ZH/view?usp=sharing
Thanks in advance.
Use graphviz.
In particular, the dot layout generator should be a good match for your needs.
You may also find the NetworkX drawing module helpful.
As in title , I try to develop as few schemes for hte 3d graphics enigne -- ogre3d ; problem is the big picture scheme the class Ogre::Root requires quite many arrows descending from it.
The model of joining boxes with relational arrows is they can only go in / out by specific points around the border ( called "joints" or something ) . Now, however I wouldn't try there are always 4 + 4 + 3 + 3 joints displaced at four sides , suppose I need to place seven arrows on one side, how do I do that ?
EDIT:
Here is what I mean, the "flies" or "crosses" to which one can bind the arrows are limited in number. I marked one of them with double circle ....
MyDiaScreenCaputre
TL;DR Don't fight Dia to draw complex UML models. It is not appropriate tool for this task
1) the points around the border in Dia are called connection points. According to the official Dia FAQ their number is fixed in the shape's definition (see https://wiki.gnome.org/Apps/Dia/Faq → Why do elements have a fixed number of connection points?). However, it is possible to edit the shape definition and add your own points, see http://sdteffen.blogspot.cz/2012/08/improved-dia-shape-export-draw-your.html for more
2) using software designed for just drawing pictures for documenting UML models is not very smart neither useful. First and foremost such tools create pictures and can not work with or exchange UML models with other tools (see Wikipedia: XML Metadata Interchange for description of *.xmi format)
3) in the category of free editors for just pictures capable of drawing some simple UML diagrams I'd recommend the multiplatform yWorks yEd Graph Editor. An exceptional feature of this tool is the ability to automatically layout large graphs using several configurable algorithms and the ability to create nested/collapsible graphs + the output looks cool and the tool is quite easy to work with
4) in the category of real UML tools I'd recommend the Sparx Systems Enterprise Architect as commercial tool for Windows and Modeliosoft's Modelio as multiplatform open source tool. However, recommending a tool is out of the scope of the Stack Overflow site (§4) so I won't give you a comprehensive answer neither you'll find such a recommendation in older Stack Overflow answers also because the market of online html5 tools changes quickly and new tools appear quite often
Let me explain what I mean by "two-dimensional code editor": imagine of using Inkscape or Gimp in a big canvas (say infinite). The "T - add text" tool is used to write the code. Additionally, all function definitions will be framed and links will connect the called functions.
In other words: you have a very large sheet of (virtual) paper where you can write.
It would be really useful. I don't want to write code as a long list of lines, especially now that big monitors are cheaper.
Is such a code editor out there?
What's your opinion? Would you use a 2d code editor?
I've written 3 or 4 visual editors and my second one worked like this, that was for java and c++ (never published, though I did use it for some published research work)
I still don't like much to write my code 'as a long list of lines'. My point is, after trying a system like this, I tried a windowed system (class outlines in windows, right click to open code editors), then a tree based system...
in the long run (I wrote several apps using all of those), the tree based system with non overlapping windows felt at once most scalable (to different monitor sizes) and foremost, most productive, because dragging the text boxes and links and/or windows in the first version was necessary, without adding much to the programming experience, so it felt wasteful.
If you want to try some of this stuff out, you can google antegram for java (java only) antegram for web (javascript/php/actionscript) and ee-ide (on oogtech.org). I'm not sure if I could dig up the original c++/java textbox + links editor (which could collapse graphs as well, and had an infinite canvas, so pretty close to what you describe).
I'm not working on this as much as I used to as few programmers ever seemed to like it except me, but if you like working the tree way, or feel like adding stuff for your own purposes, ee-ide would be the way to go, as it's nicely modular and easy to extend compared to the rest.
On the commercial side, you can configure visual studio to work with UML-like diagrams. I have a feel it might be a little too heavy (although it's definitely more coding than UML oriented), but I'm not sure, I haven't really tried yet.
This probably doesn't answer your question exactly, but anyway.
Have a look at the NodeBox beta . It is a visual programming environment mostly for creating generative graphics. You can program and edit the nodes with python code, connect and reuse them in multiple ways. (Windows and Mac OS)
Also worth mentioning (in terms of concept) is Field . It is for programming performances and arranges bits of code on a stage/timeline. Very interesting but also very confusing. (Mac OS only)
Third one is vvvv. It is used a lot by graphical artists to create realtime 3d visuals. Node based. (Windows only)
NodeBox and Field are open-source, so if you are looking to create something yourself you can see how it's done there.
Check this out. I came across it today and remembered this question.
Code Bubbles
Developers spend significant time
reading and navigating code fragments
spread across multiple locations. The
file-based nature of contemporary IDEs
makes it prohibitively difficult to
create and maintain a simultaneous
view of such fragments. We propose a
novel user interface metaphor for code
understanding and maintanence based on
collections of lightweight, editable
fragments called bubbles, which form
concurrently visible working sets.
The essential goal of this project is
to make it easier for developers to
see many fragments of code (or other
information) at once without having to
navigate back and forth. Each of these
fragments is shown in a bubble.
A bubble is a fully editable and
interactive view of a fragment such as
a method or collection of member
variables. Bubbles, in contrast to
windows, have minimal border
decoration, avoid clipping their
contents by using automatic code
reflow and elision, and do not overlap
but instead push each other out of the
way. Bubbles exist in a large,
pannable 2-D virtual space where a
cluster of bubbles comprises a
concurrently visible working set.
Bubbles support a lightweight grouping
mechanism, and further support
connections between them.
A quantiative user study indicates
that Code Bubbles increased
performance significantly for two
controlled code understanding tasks. A
qualitative user study with 23
professional developers indicates
substantial interest and enthusiasm
for the approach, despite the radical
departure from what developers are
used to.
http://www.cs.brown.edu/people/acb/codebubbles_site.htm
At one point, LabView had a programming mode like this. You connected program blocks together in a graphical way.
It's been so long since I've used LabView that I don't know if it is still the same.
For me, the MVVM pattern means that there's no code behind the UI controls anyway. The logic is all in a class with properties.
The properties use WPF databinding to update the UI controls. For example, on the form or window, page, whatever, MySearchButton.IsEnabled is bound to ViewModel.MySearchButtonIsEnabled property. So the app logic runs in the ViewModel class and just sets its own properties and the UI updates automatically.
Although this is specific to MS WPF the pattern actually stems from SmallTalk and is found across the development field as MVP. Without WPF one would need to write the databinding or 'presenter' logic, which is common.
This means the UI can be torn off and a new one pasted-in really quickly and with little code knowledge from the UI guy - who, in an ideal world, is a crack creative guy that drives a 70s Citroen.
So my point is that, although it sounds like a neat innovation, a 2D editor like this would be assisting a coding style that is no longer considered optimal.
I am working on extending a small application that uses the 'dot' tool to draw UML class and state diagrams, to implement component diagrams (I am running into a lot of problems accommodating the UML 2.x notation for the same).
I intend to display the interfaces that a particular component requires and provides through the use of lollipop notations. Now while trying to do so, I am not able to display the edges between two nodes as a straight line. Even if I am able to display one edge as a straight edge, I am unable to maintain that state for all the edges.
Just wanted to know is there any particular way apart from the usual attributes like weight, len (for neato), k, etc.? (or indeed any other tools that u may suggest ?) Appreciate your help.
Best,
Arun
Sorry I never used TinyUML, but as you asked for any other tool suggestion let me tell you that I'm very comfortable using StarUML (Open Source).