kivio_arrowhead.cpp
1/*
2 * Kivio - Visual Modelling and Flowcharting
3 * Copyright (C) 2000-2001 theKompany.com & Dave Marotti
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 */
19#include "kivio_arrowhead.h"
20#include "kivio_common.h"
21#include "kivio_painter.h"
22#include "kivio_point.h"
23#include "kivio_fill_style.h"
24
25#include <math.h>
26#include <kdebug.h>
27#include <KoZoomHandler.h>
28
29KivioArrowHead::KivioArrowHead()
30{
31 // Both of these values are in pixels
32 m_cut = 0.0f;
33 m_w = m_l = 10.0f;
34
35 m_type = kahtNone;
36}
37
38KivioArrowHead::~KivioArrowHead()
39{
40}
41
42TQDomElement KivioArrowHead::saveXML( TQDomDocument &doc )
43{
44 TQDomElement e = doc.createElement("KivioArrowHead");
45
46 XmlWriteFloat( e, "cut", m_cut );
47 XmlWriteFloat( e, "w", m_w );
48 XmlWriteFloat( e, "l", m_l );
49 XmlWriteInt( e, "type", m_type );
50
51 return e;
52}
53
54bool KivioArrowHead::loadXML( const TQDomElement &e )
55{
56 m_cut = XmlReadFloat( e, "cut", 0.0f );
57 m_w = XmlReadFloat( e, "w", 10.0f );
58 m_l = XmlReadFloat( e, "l", 10.0f );
59 m_type = XmlReadInt( e, "type", m_type );
60
61 return true;
62}
63
64void KivioArrowHead::setType(int t)
65{
66 m_type = t;
67
68 switch( t )
69 {
70 case kahtNone:
71 m_cut = 0.0f;
72 break;
73
74 case kahtArrowLine:
75 case kahtForwardSlash:
76 case kahtBackSlash:
77 case kahtPipe:
78 case kahtCrowFoot:
79 case kahtFork:
80 case kahtCrowFootPipe:
81 case kahtMidForwardSlash:
82 case kahtMidBackSlash:
83 case kahtMidPipe:
84 m_cut = 0.0f;
85 break;
86
87 case kahtArrowTriangleSolid:
88 case kahtArrowTriangleHollow:
89 case kahtDoubleTriangleSolid:
90 case kahtDoubleTriangleHollow:
91 case kahtDiamondSolid:
92 case kahtDiamondHollow:
93// case kahtCircleSolid:
94// case kahtCircleHollow:
95 m_cut = KIVIO_CUT_LENGTH;
96 break;
97
98 default:
99 m_type = kahtNone;
100 m_cut = 0.0f;
101 break;
102 }
103}
104
105float KivioArrowHead::cut()
106{
107 if( m_cut == KIVIO_CUT_LENGTH )
108 return m_l;
109
110 else if( m_cut == KIVIO_CUT_HALF_LENGTH )
111 return m_l / 2.0f;
112
113 return m_cut;
114}
115
130void KivioArrowHead::paint( KivioPainter *painter, float x, float y, float vecX, float vecY, KoZoomHandler* zoomHandler )
131{
132 KivioArrowHeadData d;
133
134 d.painter = painter;
135 d.x = x;
136 d.y = y;
137 d.vecX = vecX;
138 d.vecY = vecY;
139 d.zoomHandler = zoomHandler;
140
141 // One big-ass switch statement
142 switch( m_type )
143 {
144 case kahtNone:
145 return;
146
147 case kahtArrowLine:
148 paintArrowLine( &d );
149 break;
150
151 case kahtArrowTriangleSolid:
152 paintArrowTriangle( &d, true );
153 break;
154
155 case kahtArrowTriangleHollow:
156 paintArrowTriangle( &d, false );
157 break;
158
159 case kahtDoubleTriangleSolid:
160 paintDoubleTriangle( &d, true );
161 break;
162
163 case kahtDoubleTriangleHollow:
164 paintDoubleTriangle( &d, false );
165 break;
166
167 case kahtForwardSlash:
168 paintForwardSlash( &d );
169 break;
170
171 case kahtBackSlash:
172 paintBackSlash( &d );
173 break;
174
175 case kahtPipe:
176 paintPipe( &d );
177 break;
178
179 case kahtMidForwardSlash:
180 paintMidForwardSlash( &d );
181 break;
182
183 case kahtMidBackSlash:
184 paintMidBackSlash( &d );
185 break;
186
187 case kahtMidPipe:
188 paintMidPipe( &d );
189 break;
190
191 case kahtDiamondSolid:
192 paintDiamond( &d, true );
193 break;
194
195 case kahtDiamondHollow:
196 paintDiamond( &d, false );
197 break;
198
199 case kahtCrowFoot:
200 paintCrowFoot( &d );
201 break;
202
203 case kahtFork:
204 paintFork( &d );
205 break;
206
207 case kahtCrowFootPipe:
208 paintCrowFootPipe( &d );
209 break;
210/*
211 case kahtCircleSolid:
212 paintCircle( &d, true );
213 break;
214
215 case kahtCircleHollow:
216 paintCircle( &d, false );
217 break;
218*/
219 default:
220 break;
221 }
222}
223
224void KivioArrowHead::paintArrowLine( KivioArrowHeadData *d )
225{
226 KivioPainter *painter = d->painter;
227
228 float vecX = d->vecX;
229 float vecY = d->vecY;
230
231 float length;
232
233 KoZoomHandler* zoomHandler = d->zoomHandler;
234
235 float nvecX, nvecY; // normalized vectors
236 float pvecX, pvecY; // normal perpendicular vector
237
238 length = sqrt( vecX*vecX + vecY*vecY );
239
240 nvecX = - vecX / length;
241 nvecY = - vecY / length;
242
243 pvecX = nvecY;
244 pvecY = -nvecX;
245
246 TQPtrList<KivioPoint>l;
247 l.setAutoDelete(true);
248
249 float _x;
250 float _y;
251
252 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
253 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
254
255 l.append( new KivioPoint( _x, _y ) );
256
257 _x = zoomHandler->zoomItX(d->x);
258 _y = zoomHandler->zoomItY(d->y);
259
260 l.append( new KivioPoint( _x, _y ) ); // point
261
262
263 pvecX *= -1.0f;
264 pvecY *= -1.0f;
265
266 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
267 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
268
269 l.append( new KivioPoint( _x, _y ) );
270
271
272 painter->drawPolyline( &l );
273}
274
275void KivioArrowHead::paintArrowTriangle( KivioArrowHeadData *d, bool solid )
276{
277 KivioPainter *painter = d->painter;
278 TQColor cbg = painter->bgColor();
279
280 if(solid) {
281 painter->setBGColor(painter->fgColor());
282 }
283
284 float vecX = d->vecX;
285 float vecY = d->vecY;
286
287 float length;
288
289 KoZoomHandler* zoomHandler = d->zoomHandler;
290
291 float nvecX, nvecY; // normalized vectors
292 float pvecX, pvecY; // normal perpendicular vector
293
294 length = sqrt( vecX*vecX + vecY*vecY );
295
296 nvecX = - vecX / length;
297 nvecY = - vecY / length;
298
299 pvecX = nvecY;
300 pvecY = -nvecX;
301
302 TQPtrList<KivioPoint>l;
303 l.setAutoDelete(true);
304
305 float _x = zoomHandler->zoomItX(d->x);
306 float _y = zoomHandler->zoomItY(d->y);
307
308 l.append( new KivioPoint( _x, _y ) );
309
310 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
311 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
312
313 l.append( new KivioPoint( _x, _y ) );
314
315 pvecX *= -1.0f;
316 pvecY *= -1.0f;
317
318 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
319 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
320
321 l.append( new KivioPoint( _x, _y ) );
322
323 l.append( new KivioPoint( zoomHandler->zoomItX(d->x), zoomHandler->zoomItY(d->y) ) );
324
325 painter->drawPolygon( &l );
326 painter->setBGColor(cbg);
327}
328
329void KivioArrowHead::paintDoubleTriangle( KivioArrowHeadData *d, bool solid )
330{
331 KivioPainter *painter = d->painter;
332 TQColor cbg = painter->bgColor();
333
334 if(solid) {
335 painter->setBGColor(painter->fgColor());
336 }
337
338 float vecX = d->vecX;
339 float vecY = d->vecY;
340
341 float length;
342
343 KoZoomHandler* zoomHandler = d->zoomHandler;
344
345 float nvecX, nvecY; // normalized vectors
346 float pvecX, pvecY; // normal perpendicular vector
347
348 length = sqrt( vecX*vecX + vecY*vecY );
349
350 nvecX = - vecX / length;
351 nvecY = - vecY / length;
352
353 pvecX = nvecY;
354 pvecY = -nvecX;
355
356 TQPtrList<KivioPoint> l1;
357 l1.setAutoDelete(true);
358 TQPtrList<KivioPoint> l2;
359 l2.setAutoDelete(true);
360
361 float _x = zoomHandler->zoomItX(d->x);
362 float _y = zoomHandler->zoomItY(d->y);
363 l1.append( new KivioPoint( _x, _y ) );
364
365 _x = zoomHandler->zoomItX(d->x + nvecX * (m_l / 2.0f));
366 _y = zoomHandler->zoomItY(d->y + nvecY * (m_l / 2.0f));
367 l2.append( new KivioPoint( _x, _y ) );
368
369 _x = zoomHandler->zoomItX((d->x + nvecX * (m_l / 2.0f)) + pvecX*(m_w/2.0f));
370 _y = zoomHandler->zoomItY((d->y + nvecY * (m_l / 2.0f)) + pvecY*(m_w/2.0f));
371 l1.append( new KivioPoint( _x, _y ) );
372
373 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
374 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
375 l2.append( new KivioPoint( _x, _y ) );
376
377 pvecX *= -1.0f;
378 pvecY *= -1.0f;
379
380 _x = zoomHandler->zoomItX((d->x + nvecX * (m_l / 2.0f)) + pvecX*(m_w/2.0f));
381 _y = zoomHandler->zoomItY((d->y + nvecY * (m_l / 2.0f)) + pvecY*(m_w/2.0f));
382 l1.append( new KivioPoint( _x, _y ) );
383
384 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
385 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
386 l2.append( new KivioPoint( _x, _y ) );
387
388 l1.append( new KivioPoint( zoomHandler->zoomItX(d->x), zoomHandler->zoomItY(d->y) ) );
389
390 _x = zoomHandler->zoomItX(d->x + nvecX * (m_l / 2.0f));
391 _y = zoomHandler->zoomItY(d->y + nvecY * (m_l / 2.0f));
392 l2.append( new KivioPoint( _x, _y ) );
393
394 painter->drawPolygon( &l1 );
395 painter->drawPolygon( &l2 );
396 painter->setBGColor(cbg);
397}
398
399void KivioArrowHead::paintForwardSlash( KivioArrowHeadData *d )
400{
401 KivioPainter *painter = d->painter;
402
403 float vecX = d->vecX;
404 float vecY = d->vecY;
405
406 KoZoomHandler* zoomHandler = d->zoomHandler;
407
408 float nvecX, nvecY; // normalized vectors
409 float pvecX, pvecY; // normal perpendicular vector
410
411 float length = sqrt( vecX*vecX + vecY*vecY );
412
413 nvecX = - vecX / length;
414 nvecY = - vecY / length;
415
416 pvecX = nvecY;
417 pvecY = -nvecX;
418
419 int x1 = zoomHandler->zoomItX((d->x + nvecX * (m_l/2.0f)) + pvecX*(m_w/2.0f));
420 int y1 = zoomHandler->zoomItY((d->y + nvecY * (m_l/2.0f)) + pvecY*(m_w/2.0f));
421 int x2 = zoomHandler->zoomItX((d->x - nvecX * (m_l/2.0f)) - pvecX*(m_w/2.0f));
422 int y2 = zoomHandler->zoomItY((d->y - nvecY * (m_l/2.0f)) - pvecY*(m_w/2.0f));
423
424 painter->drawLine(x1, y1, x2, y2);
425}
426
427void KivioArrowHead::paintBackSlash( KivioArrowHeadData *d )
428{
429 KivioPainter *painter = d->painter;
430
431 float vecX = d->vecX;
432 float vecY = d->vecY;
433
434 KoZoomHandler* zoomHandler = d->zoomHandler;
435
436 float nvecX, nvecY; // normalized vectors
437 float pvecX, pvecY; // normal perpendicular vector
438
439 float length = sqrt( vecX*vecX + vecY*vecY );
440
441 nvecX = - vecX / length;
442 nvecY = - vecY / length;
443
444 pvecX = nvecY;
445 pvecY = -nvecX;
446
447 int x1 = zoomHandler->zoomItX((d->x - nvecX * (m_l/2.0f)) + pvecX*(m_w/2.0f));
448 int y1 = zoomHandler->zoomItY((d->y - nvecY * (m_l/2.0f)) + pvecY*(m_w/2.0f));
449 int x2 = zoomHandler->zoomItX((d->x + nvecX * (m_l/2.0f)) - pvecX*(m_w/2.0f));
450 int y2 = zoomHandler->zoomItY((d->y + nvecY * (m_l/2.0f)) - pvecY*(m_w/2.0f));
451
452 painter->drawLine(x1, y1, x2, y2);
453}
454
455void KivioArrowHead::paintPipe( KivioArrowHeadData *d )
456{
457 KivioPainter *painter = d->painter;
458
459 float vecX = d->vecX;
460 float vecY = d->vecY;
461
462 KoZoomHandler* zoomHandler = d->zoomHandler;
463
464 float nvecX, nvecY; // normalized vectors
465 float pvecX, pvecY; // normal perpendicular vector
466
467 float length = sqrt( vecX*vecX + vecY*vecY );
468
469 nvecX = - vecX / length;
470 nvecY = - vecY / length;
471
472 pvecX = nvecY;
473 pvecY = -nvecX;
474
475 int x1 = zoomHandler->zoomItX(d->x + pvecX*(m_w/2.0f));
476 int y1 = zoomHandler->zoomItY(d->y + pvecY*(m_w/2.0f));
477 int x2 = zoomHandler->zoomItX(d->x - pvecX*(m_w/2.0f));
478 int y2 = zoomHandler->zoomItY(d->y - pvecY*(m_w/2.0f));
479
480 painter->drawLine(x1, y1, x2, y2);
481}
482
483void KivioArrowHead::paintDiamond( KivioArrowHeadData *d, bool solid )
484{
485 KivioPainter *painter = d->painter;
486 TQColor cbg = painter->bgColor();
487
488 if(solid) {
489 painter->setBGColor(painter->fgColor());
490 }
491
492 float vecX = d->vecX;
493 float vecY = d->vecY;
494
495 KoZoomHandler* zoomHandler = d->zoomHandler;
496
497 float nvecX, nvecY; // normalized vectors
498 float pvecX, pvecY; // normal perpendicular vector
499
500 float length = sqrt( vecX*vecX + vecY*vecY );
501
502 nvecX = - vecX / length;
503 nvecY = - vecY / length;
504
505 pvecX = nvecY;
506 pvecY = -nvecX;
507
508 TQPtrList<KivioPoint> l;
509 l.setAutoDelete(true);
510
511 float _x = zoomHandler->zoomItX(d->x);
512 float _y = zoomHandler->zoomItY(d->y);
513 l.append( new KivioPoint( _x, _y ) );
514
515 _x = zoomHandler->zoomItX((d->x + nvecX * (m_l/2.0f)) - pvecX*(m_w/2.0f));
516 _y = zoomHandler->zoomItY((d->y + nvecY * (m_l/2.0f)) - pvecY*(m_w/2.0f));
517 l.append( new KivioPoint( _x, _y ) );
518
519 _x = zoomHandler->zoomItX((d->x + nvecX * m_l));
520 _y = zoomHandler->zoomItY((d->y + nvecY * m_l));
521 l.append( new KivioPoint( _x, _y ) );
522
523 _x = zoomHandler->zoomItX((d->x + nvecX * (m_l/2.0f)) + pvecX*(m_w/2.0f));
524 _y = zoomHandler->zoomItY((d->y + nvecY * (m_l/2.0f)) + pvecY*(m_w/2.0f));
525 l.append( new KivioPoint( _x, _y ) );
526
527 _x = zoomHandler->zoomItX(d->x);
528 _y = zoomHandler->zoomItY(d->y);
529 l.append( new KivioPoint( _x, _y ) );
530
531 painter->drawPolygon( &l );
532 painter->setBGColor(cbg);
533}
534
535void KivioArrowHead::paintCircle( KivioArrowHeadData *d, bool solid )
536{
537 KivioPainter *painter = d->painter;
538 TQColor cbg = painter->bgColor();
539
540 if(solid) {
541 painter->setBGColor(painter->fgColor());
542 }
543
544 float vecX = d->vecX;
545 float vecY = d->vecY;
546
547 KoZoomHandler* zoomHandler = d->zoomHandler;
548
549 float nvecX, nvecY; // normalized vectors
550 float pvecX, pvecY; // normal perpendicular vector
551
552 float length = sqrt( vecX*vecX + vecY*vecY );
553
554 nvecX = - vecX / length;
555 nvecY = - vecY / length;
556
557 pvecX = nvecY;
558 pvecY = -nvecX;
559
560 int x = zoomHandler->zoomItX(d->x + nvecX * (m_l / 2.0f));
561 int y = zoomHandler->zoomItY(d->y + nvecY * (m_l / 2.0f));
562 int w = zoomHandler->zoomItY(m_w);
563 int h = zoomHandler->zoomItX(m_l);
564
565 painter->drawEllipse(x, y, w, h);
566 painter->setBGColor(cbg);
567}
568
569void KivioArrowHead::paintCrowFoot( KivioArrowHeadData *d )
570{
571 KivioPainter *painter = d->painter;
572
573 float vecX = d->vecX;
574 float vecY = d->vecY;
575
576 float length;
577
578 KoZoomHandler* zoomHandler = d->zoomHandler;
579
580 float nvecX, nvecY; // normalized vectors
581 float pvecX, pvecY; // normal perpendicular vector
582
583 length = sqrt( vecX*vecX + vecY*vecY );
584
585 nvecX = - vecX / length;
586 nvecY = - vecY / length;
587
588 pvecX = nvecY;
589 pvecY = -nvecX;
590
591 TQPtrList<KivioPoint>l;
592 l.setAutoDelete(true);
593
594 float _x;
595 float _y;
596
597 _x = zoomHandler->zoomItX(d->x + pvecX*(m_w/2.0f));
598 _y = zoomHandler->zoomItY(d->y + pvecY*(m_w/2.0f));
599
600 l.append( new KivioPoint( _x, _y ) );
601
602 _x = zoomHandler->zoomItX(d->x + nvecX * m_l);
603 _y = zoomHandler->zoomItY(d->y + nvecY * m_l);
604
605 l.append( new KivioPoint( _x, _y ) ); // point
606
607
608 pvecX *= -1.0f;
609 pvecY *= -1.0f;
610
611 _x = zoomHandler->zoomItX(d->x + pvecX*(m_w/2.0f));
612 _y = zoomHandler->zoomItY(d->y + pvecY*(m_w/2.0f));
613
614 l.append( new KivioPoint( _x, _y ) );
615
616
617 painter->drawPolyline( &l );
618}
619
620void KivioArrowHead::paintFork( KivioArrowHeadData *d )
621{
622 KivioPainter *painter = d->painter;
623
624 float vecX = d->vecX;
625 float vecY = d->vecY;
626
627 float length;
628
629 KoZoomHandler* zoomHandler = d->zoomHandler;
630
631 float nvecX, nvecY; // normalized vectors
632 float pvecX, pvecY; // normal perpendicular vector
633
634 length = sqrt( vecX*vecX + vecY*vecY );
635
636 nvecX = - vecX / length;
637 nvecY = - vecY / length;
638
639 pvecX = nvecY;
640 pvecY = -nvecX;
641
642 TQPtrList<KivioPoint>l;
643 l.setAutoDelete(true);
644
645 float _x;
646 float _y;
647
648 _x = zoomHandler->zoomItX(d->x + pvecX*(m_w/2.0f));
649 _y = zoomHandler->zoomItY(d->y + pvecY*(m_w/2.0f));
650
651 l.append( new KivioPoint( _x, _y ) );
652
653 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
654 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
655
656 l.append( new KivioPoint( _x, _y ) );
657
658 pvecX *= -1.0f;
659 pvecY *= -1.0f;
660
661 _x = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
662 _y = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
663
664 l.append( new KivioPoint( _x, _y ) );
665
666 _x = zoomHandler->zoomItX(d->x + pvecX*(m_w/2.0f));
667 _y = zoomHandler->zoomItY(d->y + pvecY*(m_w/2.0f));
668
669 l.append( new KivioPoint( _x, _y ) );
670
671
672 painter->drawPolyline( &l );
673}
674
675void KivioArrowHead::paintCrowFootPipe( KivioArrowHeadData *d )
676{
677 KivioPainter *painter = d->painter;
678
679 float vecX = d->vecX;
680 float vecY = d->vecY;
681
682 KoZoomHandler* zoomHandler = d->zoomHandler;
683
684 float nvecX, nvecY; // normalized vectors
685 float pvecX, pvecY; // normal perpendicular vector
686
687 float length = sqrt( vecX*vecX + vecY*vecY );
688
689 nvecX = - vecX / length;
690 nvecY = - vecY / length;
691
692 pvecX = nvecY;
693 pvecY = -nvecX;
694
695 int x1 = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
696 int y1 = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
697 int x2 = zoomHandler->zoomItX((d->x + nvecX * m_l) - pvecX*(m_w/2.0f));
698 int y2 = zoomHandler->zoomItY((d->y + nvecY * m_l) - pvecY*(m_w/2.0f));
699
700 painter->drawLine(x1, y1, x2, y2);
701 paintCrowFoot( d );
702}
703
704void KivioArrowHead::paintMidForwardSlash( KivioArrowHeadData *d )
705{
706 KivioPainter *painter = d->painter;
707
708 float vecX = d->vecX;
709 float vecY = d->vecY;
710
711 KoZoomHandler* zoomHandler = d->zoomHandler;
712
713 float nvecX, nvecY; // normalized vectors
714 float pvecX, pvecY; // normal perpendicular vector
715
716 float length = sqrt( vecX*vecX + vecY*vecY );
717
718 nvecX = - vecX / length;
719 nvecY = - vecY / length;
720
721 pvecX = nvecY;
722 pvecY = -nvecX;
723
724 int x1 = zoomHandler->zoomItX(d->x + pvecX*(m_w/2.0f));
725 int y1 = zoomHandler->zoomItY(d->y + pvecY*(m_w/2.0f));
726 int x2 = zoomHandler->zoomItX((d->x + nvecX * m_l) - pvecX*(m_w/2.0f));
727 int y2 = zoomHandler->zoomItY((d->y + nvecY * m_l) - pvecY*(m_w/2.0f));
728
729 painter->drawLine(x1, y1, x2, y2);
730}
731
732void KivioArrowHead::paintMidBackSlash( KivioArrowHeadData *d )
733{
734 KivioPainter *painter = d->painter;
735
736 float vecX = d->vecX;
737 float vecY = d->vecY;
738
739 KoZoomHandler* zoomHandler = d->zoomHandler;
740
741 float nvecX, nvecY; // normalized vectors
742 float pvecX, pvecY; // normal perpendicular vector
743
744 float length = sqrt( vecX*vecX + vecY*vecY );
745
746 nvecX = - vecX / length;
747 nvecY = - vecY / length;
748
749 pvecX = nvecY;
750 pvecY = -nvecX;
751
752 int x1 = zoomHandler->zoomItX((d->x + nvecX * m_l) + pvecX*(m_w/2.0f));
753 int y1 = zoomHandler->zoomItY((d->y + nvecY * m_l) + pvecY*(m_w/2.0f));
754 int x2 = zoomHandler->zoomItX(d->x - pvecX*(m_w/2.0f));
755 int y2 = zoomHandler->zoomItY(d->y - pvecY*(m_w/2.0f));
756
757 painter->drawLine(x1, y1, x2, y2);
758}
759
760void KivioArrowHead::paintMidPipe( KivioArrowHeadData *d )
761{
762 KivioPainter *painter = d->painter;
763
764 float vecX = d->vecX;
765 float vecY = d->vecY;
766
767 KoZoomHandler* zoomHandler = d->zoomHandler;
768
769 float nvecX, nvecY; // normalized vectors
770 float pvecX, pvecY; // normal perpendicular vector
771
772 float length = sqrt( vecX*vecX + vecY*vecY );
773
774 nvecX = - vecX / length;
775 nvecY = - vecY / length;
776
777 pvecX = nvecY;
778 pvecY = -nvecX;
779
780 int x1 = zoomHandler->zoomItX((d->x + nvecX * (m_l/2.0f)) + pvecX*(m_w/2.0f));
781 int y1 = zoomHandler->zoomItY((d->y + nvecY * (m_l/2.0f)) + pvecY*(m_w/2.0f));
782 int x2 = zoomHandler->zoomItX((d->x + nvecX * (m_l/2.0f)) - pvecX*(m_w/2.0f));
783 int y2 = zoomHandler->zoomItY((d->y + nvecY * (m_l/2.0f)) - pvecY*(m_w/2.0f));
784
785 painter->drawLine(x1, y1, x2, y2);
786}