• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

kig

  • sources
  • kde-4.12
  • kdeedu
  • kig
  • filters
asyexporterimpvisitor.cc
Go to the documentation of this file.
1 // Copyright (C) 2010,2011 Raoul Bourquin
2 
3 // This program is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU General Public License
5 // as published by the Free Software Foundation; either version 2
6 // of the License, or (at your option) any later version.
7 
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12 
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16 // 02110-1301, USA.
17 
18 #include "asyexporterimpvisitor.h"
19 
20 #include "../misc/goniometry.h"
21 #include "../objects/circle_imp.h"
22 #include "../objects/cubic_imp.h"
23 #include "../objects/bezier_imp.h"
24 #include "../objects/curve_imp.h"
25 #include "../objects/line_imp.h"
26 #include "../objects/locus_imp.h"
27 #include "../objects/object_drawer.h"
28 #include "../objects/object_holder.h"
29 #include "../objects/object_imp.h"
30 #include "../objects/other_imp.h"
31 #include "../objects/point_imp.h"
32 #include "../objects/polygon_imp.h"
33 #include "../objects/text_imp.h"
34 
35 
36 void AsyExporterImpVisitor::newLine()
37 {
38  mstream << "\n";
39 }
40 
41 
42 QString AsyExporterImpVisitor::emitPenColor( const QColor& c )
43 {
44  QString pencolor("");
45  // Asymptote definition of pen color
46  pencolor = "rgb(" + QString::number(c.red()) + "," + QString::number(c.green()) + "," + QString::number(c.blue()) + ")";
47  return pencolor;
48 }
49 
50 
51 QString AsyExporterImpVisitor::emitPenStyle( const Qt::PenStyle& style )
52 {
53  QString penstyle("");
54  // Asymptote definition of pen (line) style
55  // TODO: Needs finetuning of Asymptote linestyle parameters
56  if ( style == Qt::SolidLine ) {
57  penstyle = "solid";
58  } else if ( style == Qt::DashLine ) {
59  penstyle = "dashed";
60  } else if ( style == Qt::DotLine ) {
61  penstyle = "dotted";
62  } else if ( style == Qt::DashDotLine ) {
63  penstyle = "dashdotted";
64  } else if ( style == Qt::DashDotDotLine ) {
65  penstyle = "longdashdotted";
66  }
67  return penstyle;
68 }
69 
70 
71 QString AsyExporterImpVisitor::emitPenSize( const int width )
72 {
73  // In this function we map the logical (integer) linewidth of Kig
74  // to real line widths that can be used in Asymptote.
75  // Default mapping is currently: asy_width = kig_width / 2.0
76  QString pensize("");
77  if ( width < 0 )
78  {
79  // Nothing specified, use asymptote default
80  pensize = "linewidth(0.5)";
81  }
82  else
83  {
84  // Asymptote definition of pen size
85  pensize = "linewidth(" + QString::number(width/2.0) + ")";
86  }
87  return pensize;
88 }
89 
90 
91 QString AsyExporterImpVisitor::emitPen( const QColor& c, const int width, const Qt::PenStyle& style )
92 {
93  QString pen("");
94  // Asymptote definition of a pen
95  pen = emitPenColor(c) + "+" + emitPenSize(width) + "+" + emitPenStyle(style);
96  return pen;
97 }
98 
99 
100 QString AsyExporterImpVisitor::emitCoord( const Coordinate& c )
101 {
102  QString ret("");
103  ret = "(" + QString::number(c.x) + "," + QString::number(c.y) + ")";
104  return ret;
105 }
106 
107 
108 void AsyExporterImpVisitor::emitLine( const Coordinate& a, const Coordinate& b,
109  const int width, const Qt::PenStyle s,
110  bool vector )
111 {
112  mstream << "path line = "
113  << emitCoord( a )
114  << "--"
115  << emitCoord( b )
116  << ";";
117  newLine();
118 
119  if ( vector == true )
120  {
121  mstream << "draw(line, "
122  << emitPen( mcurobj->drawer()->color(), width, s )
123  << ", Arrow );";
124  }
125  else
126  {
127  mstream << "draw(line, "
128  << emitPen( mcurobj->drawer()->color(), width, s )
129  << " );";
130  }
131  newLine();
132 }
133 
134 
135 double AsyExporterImpVisitor::dimRealToCoord( int dim )
136 {
137  QRect qr( 0, 0, dim, dim );
138  Rect r = mw.screenInfo().fromScreen( qr );
139  return fabs( r.width() );
140 }
141 
142 
143 void AsyExporterImpVisitor::visit( ObjectHolder* obj )
144 {
145  if ( ! obj->drawer()->shown() )
146  return;
147  mcurobj = obj;
148  obj->imp()->visit( this );
149 }
150 
151 
152 void AsyExporterImpVisitor::plotGenericCurve( const CurveImp* imp )
153 {
154  std::vector< std::vector< Coordinate > > coordlist;
155  coordlist.push_back( std::vector< Coordinate >() );
156  uint curid = 0;
157 
158  Coordinate c;
159  Coordinate prev = Coordinate::invalidCoord();
160  for ( double i = 0.0; i <= 1.0; i += 0.0001 )
161  {
162  c = imp->getPoint( i, mw.document() );
163  if ( !c.valid() )
164  {
165  if ( coordlist[curid].size() > 0 )
166  {
167  coordlist.push_back( std::vector< Coordinate >() );
168  ++curid;
169  prev = Coordinate::invalidCoord();
170  }
171  continue;
172  }
173  if ( ! ( ( fabs( c.x ) <= 10000 ) && ( fabs( c.y ) <= 10000 ) ) )
174  continue;
175  // if there's too much distance between this coordinate and the previous
176  // one, then it's another piece of curve not joined with the rest
177  if ( prev.valid() && ( c.distance( prev ) > 50.0 ) )
178  {
179  coordlist.push_back( std::vector< Coordinate >() );
180  ++curid;
181  }
182  coordlist[curid].push_back( c );
183  prev = c;
184  }
185  // special case for ellipse
186  if ( const ConicImp* conic = dynamic_cast< const ConicImp* >( imp ) )
187  {
188  // if ellipse, close its path
189  // THSI IS WRONG, think of ellipse arcs!!
190  if ( conic->conicType() == 1 && coordlist.size() == 1 && coordlist[0].size() > 1 )
191  {
192  coordlist[0].push_back( coordlist[0][0] );
193  }
194  }
195  for ( uint i = 0; i < coordlist.size(); ++i )
196  {
197  uint s = coordlist[i].size();
198  // there's no point in draw curves empty or with only one point
199  if ( s <= 1 )
200  continue;
201 
202  uint linelength = 13;
203  QString tmp;
204  mstream << "path curve = ";
205  for ( uint j = 0; j < s; ++j )
206  {
207  tmp = emitCoord( coordlist[i][j] );
208  // Avoid too long lines in the output file
209  if(linelength + tmp.length() > maxlinelength)
210  {
211  linelength = tmp.length();
212  newLine();
213  }
214  else
215  {
216  linelength += tmp.length();
217  }
218  mstream << tmp;
219  if ( j < s-1 )
220  {
221  linelength += 2;
222  mstream << "--";
223  }
224  else
225  {
226  mstream << ";";
227  newLine();
228  linelength = 0;
229  }
230  }
231  mstream << "draw(curve, "
232  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
233  << " );";
234  newLine();
235  }
236 }
237 
238 
239 void AsyExporterImpVisitor::visit( const LineImp* imp )
240 {
241  Coordinate a = imp->data().a;
242  Coordinate b = imp->data().b;
243  calcBorderPoints( a, b, msr );
244  emitLine( a, b, mcurobj->drawer()->width(), mcurobj->drawer()->style() );
245 }
246 
247 
248 void AsyExporterImpVisitor::visit( const PointImp* imp )
249 {
250  mstream << "pair point = "
251  << emitCoord( imp->coordinate() )
252  << ";";
253  newLine();
254  // The factor of 6 is necessary to get the asymptote default dot size
255  // which is 6*asy_default_linewidth where asy_default_linewidth = 0.5
256  int width = mcurobj->drawer()->width();
257  if ( width == -1 ) width = 6;
258  mstream << "dot(point, "
259  << emitPen( mcurobj->drawer()->color(), width, mcurobj->drawer()->style() )
260  << ");";
261  newLine();
262 }
263 
264 
265 void AsyExporterImpVisitor::visit( const TextImp* imp )
266 {
267  // FIXME: support multiline texts...
268  mstream << "pair anchor = "
269  << emitCoord( imp->coordinate() )
270  << ";";
271  newLine();
272  mstream << "Label l = Label(\""
273  << imp->text()
274  << "\", "
275  << emitPenColor( mcurobj-> drawer()->color() )
276  << ");";
277  newLine();
278  if ( imp->hasFrame() )
279  {
280  mstream << "draw(l, box, anchor, textboxmargin);";
281  }
282  else
283  {
284  mstream << "draw(l, anchor);";
285  }
286  newLine();
287 }
288 
289 
290 void AsyExporterImpVisitor::visit( const AngleImp* imp )
291 {
292  const Coordinate center = imp->point();
293  // TODO: How to choose radius size?
294  const double radius = 0.5;
295  double startangle = imp->startAngle();
296  double endangle = startangle + imp->angle();
297 
298  startangle = Goniometry::convert( startangle, Goniometry::Rad, Goniometry::Deg );
299  endangle = Goniometry::convert( endangle, Goniometry::Rad, Goniometry::Deg );
300 
301  mstream << "path a = Arc("
302  << emitCoord(center)
303  << ", "
304  << radius
305  << ", "
306  << startangle
307  << ", "
308  << endangle
309  << " );";
310  newLine();
311  mstream << "draw(a, "
312  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
313  << ", Arrow );";
314  newLine();
315 }
316 
317 
318 void AsyExporterImpVisitor::visit( const VectorImp* imp )
319 {
320  Coordinate a = imp->data().a;
321  Coordinate b = imp->data().b;
322  emitLine( a, b, mcurobj->drawer()->width(), mcurobj->drawer()->style(), true );
323 }
324 
325 
326 void AsyExporterImpVisitor::visit( const LocusImp* imp )
327 {
328  plotGenericCurve( imp );
329 }
330 
331 
332 void AsyExporterImpVisitor::visit( const CircleImp* imp )
333 {
334  mstream << "pair center = "
335  << emitCoord( imp->center() )
336  << ";";
337  newLine();
338  mstream << "real radius = " << imp->radius()
339  << ";";
340  newLine();
341  mstream << "path circle = Circle(center, radius);";
342  newLine();
343  mstream << "draw(circle, "
344  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
345  << " );";
346  newLine();
347 }
348 
349 
350 void AsyExporterImpVisitor::visit( const ConicImp* imp )
351 {
352  plotGenericCurve( imp );
353 }
354 
355 
356 void AsyExporterImpVisitor::visit( const CubicImp* imp )
357 {
358  // FIXME: cubic are not drawn correctly with plotGenericCurve
359  plotGenericCurve( imp );
360 }
361 
362 
363 void AsyExporterImpVisitor::visit( const SegmentImp* imp )
364 {
365  Coordinate a = imp->data().a;
366  Coordinate b = imp->data().b;
367  emitLine( a, b, mcurobj->drawer()->width(), mcurobj->drawer()->style() );
368 }
369 
370 
371 void AsyExporterImpVisitor::visit( const RayImp* imp )
372 {
373  Coordinate a = imp->data().a;
374  Coordinate b = imp->data().b;
375  calcRayBorderPoints( a, b, msr );
376  emitLine( a, b, mcurobj->drawer()->width(), mcurobj->drawer()->style() );
377 }
378 
379 
380 void AsyExporterImpVisitor::visit( const ArcImp* imp )
381 {
382  const Coordinate center = imp->center();
383  const double radius = imp->radius();
384  double startangle = imp->startAngle();
385  double endangle = startangle + imp->angle();
386 
387  startangle = Goniometry::convert( startangle, Goniometry::Rad, Goniometry::Deg );
388  endangle = Goniometry::convert( endangle, Goniometry::Rad, Goniometry::Deg );
389 
390  mstream << "path arc = Arc("
391  << emitCoord(center)
392  << ", "
393  << radius
394  << ", "
395  << startangle
396  << ", "
397  << endangle
398  << " );";
399  newLine();
400  mstream << "draw(arc, "
401  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
402  << " );";
403  newLine();
404 }
405 
406 
407 void AsyExporterImpVisitor::visit( const FilledPolygonImp* imp )
408 {
409  uint linelength = 15;
410  QString tmp;
411  mstream << "path polygon = ";
412  std::vector<Coordinate> pts = imp->points();
413  for ( uint i = 0; i < pts.size(); i++ )
414  {
415  tmp = emitCoord( pts[i] );
416  tmp.append("--");
417  if ( linelength + tmp.length() > maxlinelength )
418  {
419  newLine();
420  linelength = tmp.length();
421  }
422  else
423  {
424  linelength += tmp.length();
425  }
426  mstream << tmp;
427  }
428  mstream << "cycle;";
429  newLine();
430  mstream << "fill(polygon, "
431  << emitPenColor( mcurobj->drawer()->color() )
432  << "+opacity(0.5) );";
433  newLine();
434  mstream << "draw(polygon, "
435  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
436  << " );";
437  newLine();
438 }
439 
440 
441 void AsyExporterImpVisitor::visit(const ClosedPolygonalImp* imp)
442 {
443  uint linelength = 15;
444  QString tmp;
445  mstream << "path polygon = ";
446  std::vector<Coordinate> pts = imp->points();
447  for ( uint i = 0; i < pts.size(); i++ )
448  {
449  tmp = emitCoord( pts[i] );
450  tmp.append("--");
451  if ( linelength + tmp.length() > maxlinelength )
452  {
453  newLine();
454  linelength = tmp.length();
455  }
456  else
457  {
458  linelength += tmp.length();
459  }
460  mstream << tmp;
461  }
462  mstream << "cycle;";
463  newLine();
464  mstream << "draw(polygon, "
465  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
466  << " );";
467  newLine();
468 }
469 
470 
471 void AsyExporterImpVisitor::visit(const OpenPolygonalImp* imp)
472 {
473  uint linelength = 15;
474  QString tmp;
475  mstream << "path polygon = ";
476  std::vector<Coordinate> pts = imp->points();
477  for ( uint i = 0; i < pts.size(); i++ )
478  {
479  tmp = emitCoord( pts[i] );
480  if ( linelength + tmp.length() > maxlinelength )
481  {
482  newLine();
483  linelength = tmp.length();
484  }
485  else
486  {
487  linelength += tmp.length();
488  }
489  mstream << tmp;
490  if ( i < pts.size()-1 )
491  {
492  linelength += 2;
493  mstream << "--";
494  }
495  else
496  {
497  linelength += 1;
498  mstream << ";";
499  }
500  }
501  newLine();
502  mstream << "draw(polygon, "
503  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
504  << " );";
505  newLine();
506 }
507 
508 
509 void AsyExporterImpVisitor::visit ( const BezierImp* imp )
510 {
511  std::vector<Coordinate> pts = imp->points();
512  switch ( pts.size() )
513  {
514  case 3:
515  // Formula for cubic control points
516  // CP1 = QP0 + 2/3 *(QP1-QP0)
517  // CP2 = CP1 + 1/3 *(QP2-QP0)
518  mstream << "pair cp1 = " << emitCoord(pts.at(0)) << " +2/3*(" << emitCoord(pts.at(1)) << "-" << emitCoord(pts.at(0)) << ");";
519  newLine();
520  mstream << "pair cp2 = cp1 +1/3*(" << emitCoord(pts.at(2)) << "-" << emitCoord(pts.at(0)) << ");";
521  newLine();
522  mstream << "path bezier = ";
523  mstream << emitCoord( pts.at(0) );
524  mstream << " .. controls cp1 and cp2 .. ";
525  mstream << emitCoord( pts.at(2) );
526  mstream << ";";
527  newLine();
528  mstream << "draw(bezier, "
529  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
530  << " );";
531  newLine();
532  break;
533  case 4:
534  mstream << "path bezier = ";
535  mstream << emitCoord( pts.at(0) );
536  mstream << " .. controls ";
537  mstream << emitCoord( pts.at(1) );
538  mstream << " and ";
539  mstream << emitCoord( pts.at(2) );
540  mstream << " .. ";
541  mstream << emitCoord( pts.at(3) );
542  mstream << ";";
543  newLine();
544  mstream << "draw(bezier, "
545  << emitPen( mcurobj->drawer()->color(), mcurobj->drawer()->width(), mcurobj->drawer()->style() )
546  << " );";
547  newLine();
548  break;
549  default:
550  plotGenericCurve ( imp );
551  break;
552  }
553 }
554 
555 
556 void AsyExporterImpVisitor::visit ( const RationalBezierImp* imp )
557 {
558  plotGenericCurve ( imp );
559 }
calcRayBorderPoints
void calcRayBorderPoints(const Coordinate &a, Coordinate &b, const Rect &r)
this does the same as the above function, but only for b.
Definition: common.cpp:131
ClosedPolygonalImp
An ObjectImp representing a closed polygonal.
Definition: polygon_imp.h:130
BezierImp
An ObjectImp representing polynomial Bézier Curve.
Definition: bezier_imp.h:31
CubicImp
An ObjectImp representing a cubic.
Definition: cubic_imp.h:29
LocusImp
LocusImp is an imp that consists of a copy of the curveimp that the moving point moves over...
Definition: locus_imp.h:57
AbstractLineImp::data
LineData data() const
Get the LineData for this AbstractLineImp.
Definition: line_imp.cc:359
VectorImp::data
LineData data() const
Get the LineData for this vector.
Definition: other_imp.cc:771
TextImp::coordinate
const Coordinate coordinate() const
Definition: text_imp.cc:125
Rect::width
double width() const
Definition: rect.cc:204
OpenPolygonalImp
An ObjectImp representing an open polygonal.
Definition: polygon_imp.h:157
ObjectDrawer::shown
bool shown() const
returns whether the object this ObjectDrawer is responsible for will be drawn or not.
Definition: object_drawer.cc:52
AngleImp::point
const Coordinate point() const
Return the center of this angle.
Definition: other_imp.h:79
LineData::b
Coordinate b
Another point on the line.
Definition: misc/common.h:68
Goniometry::Deg
Definition: goniometry.h:31
CircleImp
An ObjectImp representing a circle.
Definition: circle_imp.h:27
ObjectImp::visit
virtual void visit(ObjectImpVisitor *vtor) const =0
TextImp
Definition: text_imp.h:26
RayImp
An ObjectImp representing a ray.
Definition: line_imp.h:136
Rect
This file is part of Kig, a KDE program for Interactive Geometry...
Definition: rect.h:34
RationalBezierImp
An ObjectImp representing a rational Bézier curve.
Definition: bezier_imp.h:100
CircleImp::center
const Coordinate center() const
Return the center of this circle.
Definition: circle_imp.cc:210
ObjectHolder::drawer
const ObjectDrawer * drawer() const
Definition: object_holder.cc:58
PointImp::coordinate
const Coordinate & coordinate() const
Get the coordinate of this PointImp.
Definition: point_imp.h:50
AbstractPolygonImp::points
const std::vector< Coordinate > points() const
Returns the vector with polygon points.
Definition: polygon_imp.cc:571
ArcImp::radius
double radius() const
Return the radius of this arc.
Definition: other_imp.cc:537
Coordinate
The Coordinate class is the basic class representing a 2D location by its x and y components...
Definition: coordinate.h:33
CurveImp::getPoint
virtual const Coordinate getPoint(double param, const KigDocument &) const =0
VectorImp
An ObjectImp representing a vector.
Definition: other_imp.h:99
KigWidget::screenInfo
const ScreenInfo & screenInfo() const
the part of the document we're currently showing i.e.
Definition: kig_view.cpp:272
TextImp::text
QString text() const
Definition: text_imp.cc:115
ArcImp::angle
double angle() const
Return the dimension in radians of this arc.
Definition: other_imp.cc:547
ObjectHolder
An ObjectHolder represents an object as it is known to the document.
Definition: object_holder.h:40
PointImp
An ObjectImp representing a point.
Definition: point_imp.h:27
Coordinate::distance
double distance(const Coordinate &p) const
Distance to another Coordinate.
Definition: coordinate.cpp:139
AngleImp::angle
double angle() const
Return the dimension in radians of this angle.
Definition: other_imp.h:87
LineData::a
Coordinate a
One point on the line.
Definition: misc/common.h:64
asyexporterimpvisitor.h
KigWidget::document
const KigDocument & document() const
Definition: kig_view.cpp:460
ConicImp
An ObjectImp representing a conic.
Definition: conic_imp.h:39
Goniometry::convert
static double convert(const double angle, const Goniometry::System from, const Goniometry::System to)
The most useful method of this class: convert the specified angle from the system from to the system ...
Definition: goniometry.cc:87
ObjectDrawer::width
int width() const
return the width of the object
Definition: object_drawer.cc:134
ArcImp::center
const Coordinate center() const
Return the center of this arc.
Definition: other_imp.cc:532
ObjectHolder::imp
const ObjectImp * imp() const
Definition: object_holder.cc:48
ArcImp::startAngle
double startAngle() const
Return the start angle in radians of this arc.
Definition: other_imp.cc:542
AngleImp::startAngle
double startAngle() const
Return the start angle in radians of this angle.
Definition: other_imp.h:83
Coordinate::invalidCoord
static Coordinate invalidCoord()
Create an invalid Coordinate.
Definition: coordinate.cpp:171
Goniometry::Rad
Definition: goniometry.h:31
CircleImp::radius
double radius() const
Return the radius of this circle.
Definition: circle_imp.cc:215
calcBorderPoints
void calcBorderPoints(Coordinate &p1, Coordinate &p2, const Rect &r)
this sets p1 and p2 to p1' and p2' so that p1'p2' is the same line as p1p2, and so that p1' and p2' a...
Definition: common.cpp:82
LineImp
An ObjectImp representing a line.
Definition: line_imp.h:184
BezierImp::points
const std::vector< Coordinate > points() const
Returns the vector with control points.
Definition: bezier_imp.cc:189
ArcImp
An ObjectImp representing an arc.
Definition: other_imp.h:169
Coordinate::x
double x
X Component.
Definition: coordinate.h:126
ObjectDrawer::color
QColor color() const
returns the color that the object will be drawn in
Definition: object_drawer.cc:57
Coordinate::y
double y
Y Component.
Definition: coordinate.h:129
ObjectDrawer::style
Qt::PenStyle style() const
return PenStyle for all objects except points
Definition: object_drawer.cc:139
FilledPolygonImp
An ObjectImp representing a filled polygon.
Definition: polygon_imp.h:101
ScreenInfo::fromScreen
Coordinate fromScreen(const QPoint &p) const
Definition: screeninfo.cc:35
TextImp::hasFrame
bool hasFrame() const
Definition: text_imp.cc:138
AsyExporterImpVisitor::visit
void visit(ObjectHolder *obj)
Definition: asyexporterimpvisitor.cc:143
uint
unsigned int uint
Definition: object_imp.h:87
Coordinate::valid
bool valid() const
Return whether this is a valid Coordinate.
Definition: coordinate.cpp:176
AngleImp
An ObjectImp representing an angle.
Definition: other_imp.h:28
CurveImp
This class represents a curve: something which is composed of points, like a line, a circle, a locus.
Definition: curve_imp.h:27
SegmentImp
An ObjectImp representing a segment.
Definition: line_imp.h:81
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:35:38 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kig

Skip menu "kig"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal