/usr/include/tulip/LayoutProperty.h is in libtulip-dev 3.1.2-2.3ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | //-*-c++-*-
/**
Authors: David Auber, Patrick Mary, Morgan Mathiaut
from the LaBRI Visualization Team
Email : auber@tulip-software.org
Last modification : 13/03/2009
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
*/
#ifndef TULIP_LAYOUT_H
#define TULIP_LAYOUT_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "tulip/AbstractProperty.h"
#include "tulip/TemplateFactory.h"
#include "tulip/LayoutAlgorithm.h"
#include "tulip/Types.h"
namespace tlp {
class PropertyContext;
class Graph;
/** \addtogroup properties */
/*@{*/
class TLP_SCOPE LayoutProperty:public AbstractProperty<PointType, LineType, LayoutAlgorithm>, public PropertyObserver {
friend class LayoutAlgorithm;
public:
LayoutProperty (Graph *);
PropertyInterface* clonePrototype(Graph *, std::string );
void copy( const node, const node, PropertyInterface * );
void copy( const edge, const edge, PropertyInterface * );
//=======================================
//Functions for extra layout information
Coord getMax(Graph *graph=0);
Coord getMin(Graph *graph=0);
//============================================
//Functions for layout modification
void translate(const tlp::Vector<float,3>& v, Graph *graph=0);
/*
* translate a set of nodes and edges. Warning : the iterators are not deleted.
*/
void translate(const tlp::Vector<float,3>& v, Iterator<node> *, Iterator<edge> *);
void scale(const tlp::Vector<float,3>& v, Graph *graph=0);
void scale(const tlp::Vector<float,3>& v, Iterator<node> *, Iterator<edge> *);
/**
* Rotates the layout proxy of the passed graph by alpha degrees
*/
void rotateZ(const double& alpha, Graph *graph=0);
/**
* Rotates the passed nodes and edges in the given layout proxy by
* alpha degrees
*/
void rotateX(const double& alpha, Iterator<node> *, Iterator<edge> *);
void rotateY(const double& alpha, Iterator<node> *, Iterator<edge> *);
void rotateZ(const double& alpha, Iterator<node> *, Iterator<edge> *);
void center(Graph *graph = 0);
void normalize(Graph *graph = 0);
void perfectAspectRatio();
void resetBoundingBox();
//=======================================================================
// Set of function in order to measure the quality of the LayoutAlgorithm
//======================================================================
/**
* Returns the length of an edge, the bends are taken into account.
* Thus, it measure the length of a polyline. Warning this function
* only measure the length of the polyline between bends, when using
* curves like bezier etc... the result will not be the length of the curve.
*/
double edgeLength(edge e);
/**
* Returns the average angular resolution of the layout
* it is defined for 2D drawing, the third coordinates
* is omitted
*/
double averageAngularResolution(Graph *graph=0);
/**
* Returns the average angular resolution of a node
* it is defined for 2D drawing, the third coordinates
* is omitted
*/
double averageAngularResolution(const node n,Graph *graph=0);
/**
* Returns a vector of all angular resolution of a node
* it is defined for 2D drawing, the third coordinates
* is omitted
*/
std::vector<double> angularResolutions(const node n, Graph *graph=0);
/**
* Returns the number of crossings in the layout
*/
unsigned int crossingNumber();
// redefinition of some PropertyObserver methods
virtual void beforeSetNodeValue(PropertyInterface* prop, const node n);
virtual void beforeSetEdgeValue(PropertyInterface* prop, const edge e);
virtual void beforeSetAllNodeValue(PropertyInterface* prop);
virtual void beforeSetAllEdgeValue(PropertyInterface* prop);
protected:
void clone_handler(AbstractProperty<PointType,LineType> &);
private:
stdext::hash_map<unsigned long,Coord> max,min;
stdext::hash_map<unsigned long,bool> minMaxOk;
void computeMinMax(Graph * graph=NULL);
void rotate(const double& alpha, int rot, Iterator<node> *, Iterator<edge> *);
};
/*@}*/
}
#endif
|