File: OrientableLayout.cpp

package info (click to toggle)
tulip 3.7.0dfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 39,428 kB
  • sloc: cpp: 231,403; php: 11,023; python: 1,128; sh: 671; yacc: 522; makefile: 315; xml: 63; lex: 55
file content (129 lines) | stat: -rwxr-xr-x 4,358 bytes parent folder | download
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
122
123
124
125
126
127
128
129
/**
 *
 * This file is part of Tulip (www.tulip-software.org)
 *
 * Authors: David Auber and the Tulip development Team
 * from LaBRI, University of Bordeaux 1 and Inria Bordeaux - Sud Ouest
 *
 * Tulip is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * Tulip is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 */
#include <algorithm>

#include "OrientableLayout.h"

using namespace tlp;

//====================================================================
OrientableLayout::OrientableLayout(tlp::LayoutProperty* layoutParam,
                                   orientationType mask) {
  layout = layoutParam;
  setOrientation(mask);
}

//====================================================================
void OrientableLayout::setOrientation(orientationType mask) {
  orientation = mask;

  readX  = &Coord::getX;
  readY  = &OrientableCoord::getInvertedY;
  readZ  = &Coord::getZ;
  writeX = &Coord::setX;
  writeY = &OrientableCoord::setInvertedY;
  writeZ = &Coord::setZ;

  if (orientation & ORI_INVERSION_HORIZONTAL) {
    readX   = &OrientableCoord::getInvertedX;
    writeX  = &OrientableCoord::setInvertedX;
  }

  if (orientation & ORI_INVERSION_VERTICAL) {
    readY   = &Coord::getY;
    writeY  = &Coord::setY;
  }

  if (orientation & ORI_INVERSION_Z) {
    readZ   = &OrientableCoord::getInvertedZ;
    writeZ  = &OrientableCoord::setInvertedZ;
  }

  if (orientation & ORI_ROTATION_XY) {
    std::swap(readX, readY);
    std::swap(writeX, writeY);
  }
}

//====================================================================
OrientableCoord OrientableLayout::createCoord(const float x, const float y,
    const float z) {
  return OrientableCoord(this, x, y, z);
}

//====================================================================
OrientableCoord OrientableLayout::createCoord(const tlp::Coord& v) {
  return OrientableCoord(this, v);
}

//====================================================================
std::vector<OrientableCoord> OrientableLayout::
convertEdgeLinetype(const std::vector<tlp::Coord>& v) {
  std::vector<OrientableCoord>  orientableLine;
  CoordLineType::const_iterator itCoordLineType = v.begin();

  for ( ; itCoordLineType < v.end() ; itCoordLineType++ )  {
    OrientableCoord newOrientableCoord(this, *itCoordLineType);
    orientableLine.push_back(newOrientableCoord);
  }

  return orientableLine;
}

//====================================================================
void OrientableLayout::setAllNodeValue(const PointType& v) {
  layout->setAllNodeValue(v);
}

//====================================================================
void OrientableLayout::setNodeValue(tlp::node n, const PointType& v) {
  layout->setNodeValue(n, v);
}

//====================================================================
OrientableLayout::PointType OrientableLayout::getNodeValue(const tlp::node n) {
  return OrientableCoord(this, layout->getNodeValue(n));
}

//====================================================================
OrientableLayout::PointType OrientableLayout::getNodeDefaultValue() {
  return OrientableCoord(this, layout->getNodeDefaultValue());
}

//====================================================================
void OrientableLayout::setAllEdgeValue(const LineType& v) {
  CoordLineType vecCoord(v.begin(), v.end());
  layout->setAllEdgeValue(vecCoord);
}

//====================================================================
void OrientableLayout::setEdgeValue(const tlp::edge e, const LineType& v) {
  CoordLineType vecCoord(v.begin(), v.end());
  layout->setEdgeValue(e, vecCoord);
}

//====================================================================
OrientableLayout::LineType OrientableLayout::getEdgeValue(const tlp::edge e) {
  return convertEdgeLinetype(layout->getEdgeValue(e));
}

//====================================================================
OrientableLayout::LineType OrientableLayout::getEdgeDefaultValue() {
  return convertEdgeLinetype(layout->getEdgeDefaultValue());
}