Git Product home page Git Product logo

curtisz / dia Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gnome/dia

0.0 3.0 0.0 40.64 MB

Dia is a program for drawing structured diagrams.

Home Page: http://www.gnome.org/projects/dia

License: GNU General Public License v2.0

Makefile 1.32% M4 0.59% C 86.44% C++ 3.34% Shell 0.34% Python 3.50% Roff 0.26% NSIS 2.70% Objective-C 0.03% XSLT 0.94% Perl 0.07% Gnuplot 0.14% TeX 0.31%

dia's Introduction

Dia is a program for drawing structured diagrams.

Dia is a GNU program, and is Free Software.  See the COPYING file for
the licence.

Documentation is a bit sparse at the moment.  Some info can be
found in the doc/ directory.

--

I haven't had time to write anything here yet.
Read INSTALL for some brief installation instructions.

Homepage for Dia is at:
 https://wiki.gnome.org/Apps/Dia

Some comments about the source:
-------------------------------

 Everything on the screen 'inherits' from the structure Object 
in lib/object.h. (ps. this is a nice place to start reading the code.).
Inherits in C means (as in gtk) that it begins with a copy of that structure. 
Some base classes exists in lib/, like element.h (for doing 'box-like' 
objects), connection.h (for doing 'line-like' objects), orth_conn.h (for doing 
connections with orthogonal lines, like the uml-stuff) and render_object.h 
(for doing picture-like objects). These base classes are then subclassed in 
the different object in the object-libraries like objects/standard object/UML 
and object/network.

 The objects work by filling out two structures that the main program (app/*) 
uses to handle the objects. The ObjectType structure which consists of some 
info and a pointer to the type-operations (create+load+save). There's one 
ObjectType per object type currently loaded. Then the Object structure, there 
exists a copy of this for each object of the kind on screen (and in 
copy-buffers). This contains some info like: type, bounding_box, position, 
handles (the rectangles you move with the mouse) and connections. It also 
contains a pointer to the object-operations. These are called from the main 
program when if wants the object to do something. All ops take an Object as 
the first argument. This is usually casted to the subtype in the function 
headed (gives all those pita warnings) so that you directly can use the info 
stored in the subclasses. Most ops are quite self-describing, and the code can 
be copy-pasted from an object like the one you're doing. Rendering to 
screen/postscript is done through a 'Renderer' abstraction that can be found 
in lib/render.h.
 
XML based objects:
------------------
You can (from version 0.80) create new objects using a SVG like XML languange.
The file doc/custom-shapes has more information about this.
 
Note on handles and connection points:
--------------------------------------

An object has handles to resize it. A handle can be moved either because
the user dragged it with the mouse, or the handle is attached to another
object, which moved itself. The handles are diplayed as little squares
(red: normal, green: attached to an object, blue: can't be moved).

When the handle of an object is connected to another object, it's always
on special points called connection points, displayed as crosses.

Implementation:
- each object has an array of pointer to ConnectionPoint.
- each object has an array of pointer to Handle.
- each Handle has a pointer to 1 ConnectionPoint (NULL if the handle if
the Handle is not connected).
- each ConnectionPoint has a list of all objects connected to it.

The Object type does not manage the allocation/deallocation of handles and
connection points. When saving a diagram the pointer from the handle to
the connectionpoint is saved as the index of the connectionpoint. So make
sure the order of the connectionpoints is the same when loading the saved
object.

Notes on static analysis
------------------------
Some of the recent changes (log message starting with [scan-build] are suggested
by static source analysis, see http://clang-analyzer.llvm.org/scan-build
To use it just run ./configure and make through the scan-build script, like:

PATH=/mnt/Home/from-svn/llvm/Release/bin:$PATH /mnt/Home/from-svn/llvm/tools/clang/tools/scan-build/scan-build ./configure --prefix=/opt --enable-debug=yes
  and
PATH=/mnt/Home/from-svn/llvm/Release/bin:$PATH /mnt/Home/from-svn/llvm/tools/clang/tools/scan-build/scan-build -v -v make -j3
  view with
PATH=/mnt/Home/from-svn/llvm/Release/bin:$PATH /mnt/Home/from-svn/llvm/tools/clang/tools/scan-view/scan-view

(given an uninstalled checkout of llvm to /mnt/Home/from-svn/llvm)

dia's People

Contributors

adambuchbinder avatar atriwidada avatar aurisc4 avatar cedric31 avatar dankor avatar dmtrs32 avatar dmustieles avatar dooteo avatar enrico-br avatar frandieguez avatar fridrich avatar gmdvieira avatar hfiguiere avatar joedalton2 avatar jordimas avatar kelemeng avatar mariobl avatar marv-cz avatar mirosnik1 avatar mtrmac avatar nazgul77 avatar nma-2009 avatar piotrdrag avatar polch avatar prokoudine avatar pwithnall avatar stephane avatar takeshi-aihana avatar tvainika avatar ymyasoedov avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.