~inkscape.dev/inkscape/lattice2

« back to all changes in this revision

Viewing changes to src/live_effects/lpe-lattice2.cpp

  • Committer: root
  • Date: 2014-03-29 13:36:41 UTC
  • Revision ID: root@jtx.marker.es-20140329133641-dugmpw04fzfy07h7
Refactor to simplify the code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 */
18
18
 
19
19
#include "live_effects/lpe-lattice2.h"
20
 
#include "display/canvas-bpath.h"
 
20
 
21
21
#include "sp-shape.h"
22
 
#include "sp-object.h"
23
22
#include "sp-item.h"
24
 
#include "sp-item-group.h"
25
23
#include "sp-path.h"
26
24
#include "display/curve.h"
27
25
#include "svg/svg.h"
 
26
 
28
27
#include <2geom/sbasis.h>
29
28
#include <2geom/sbasis-2d.h>
30
29
#include <2geom/sbasis-geometric.h>
33
32
#include <2geom/d2.h>
34
33
#include <2geom/piecewise.h>
35
34
#include <2geom/transforms.h>
36
 
#include "selection.h"
37
35
#include <tools-switch.h>
38
36
 
39
37
#include "desktop.h" // TODO: should be factored out (see below)
40
38
 
41
 
 
42
39
using namespace Geom;
43
40
 
44
41
namespace Inkscape {
47
44
LPELattice2::LPELattice2(LivePathEffectObject *lpeobject) :
48
45
    Effect(lpeobject),
49
46
    // initialise your parameters here:
50
 
    grid_point0(_("Control handle 0:"), _("Control handle 0 - Ctrl+Alt to reset"), "gridpoint0", &wr, this),
51
 
    grid_point1(_("Control handle 1:"), _("Control handle 1 - Ctrl+Alt to reset"), "gridpoint1", &wr, this),
52
 
    grid_point2(_("Control handle 2:"), _("Control handle 2 - Ctrl+Alt to reset"), "gridpoint2", &wr, this),
53
 
    grid_point3(_("Control handle 3:"), _("Control handle 3 - Ctrl+Alt to reset"), "gridpoint3", &wr, this),
54
 
    grid_point4(_("Control handle 4:"), _("Control handle 4 - Ctrl+Alt to reset"), "gridpoint4", &wr, this),
55
 
    grid_point5(_("Control handle 5:"), _("Control handle 5 - Ctrl+Alt to reset"), "gridpoint5", &wr, this),
56
 
    grid_point6(_("Control handle 6:"), _("Control handle 6 - Ctrl+Alt to reset"), "gridpoint6", &wr, this),
57
 
    grid_point7(_("Control handle 7:"), _("Control handle 7 - Ctrl+Alt to reset"), "gridpoint7", &wr, this),
58
 
    grid_point8x9(_("Control handle 8x9:"), _("Control handle 8x9 - Ctrl+Alt to reset"), "gridpoint8x9", &wr, this),
59
 
    grid_point10x11(_("Control handle 10x11:"), _("Control handle 10x11 - Ctrl+Alt to reset"), "gridpoint10x11", &wr, this),
60
 
    grid_point12(_("Control handle 12:"), _("Control handle 12 - Ctrl+Alt to reset"), "gridpoint12", &wr, this),
61
 
    grid_point13(_("Control handle 13:"), _("Control handle 13 - Ctrl+Alt to reset"), "gridpoint13", &wr, this),
62
 
    grid_point14(_("Control handle 14:"), _("Control handle 14 - Ctrl+Alt to reset"), "gridpoint14", &wr, this),
63
 
    grid_point15(_("Control handle 15:"), _("Control handle 15 - Ctrl+Alt to reset"), "gridpoint15", &wr, this),
64
 
    grid_point16(_("Control handle 16:"), _("Control handle 16 - Ctrl+Alt to reset"), "gridpoint16", &wr, this),
65
 
    grid_point17(_("Control handle 17:"), _("Control handle 17 - Ctrl+Alt to reset"), "gridpoint17", &wr, this),
66
 
    grid_point18(_("Control handle 18:"), _("Control handle 18 - Ctrl+Alt to reset"), "gridpoint18", &wr, this),
67
 
    grid_point19(_("Control handle 19:"), _("Control handle 19 - Ctrl+Alt to reset"), "gridpoint19", &wr, this),
68
 
    grid_point20x21(_("Control handle 20x21:"), _("Control handle 20x21 - Ctrl+Alt to reset"), "gridpoint20x21", &wr, this),
69
 
    grid_point22x23(_("Control handle 22x23:"), _("Control handle 22x23 - Ctrl+Alt to reset"), "gridpoint22x23", &wr, this),
70
 
    grid_point24x26(_("Control handle 24x26:"), _("Control handle 24x26 - Ctrl+Alt to reset"), "gridpoint24x26", &wr, this),
71
 
    grid_point25x27(_("Control handle 25x27:"), _("Control handle 25x27 - Ctrl+Alt to reset"), "gridpoint25x27", &wr, this),
72
 
    grid_point28x30(_("Control handle 28x30:"), _("Control handle 28x30 - Ctrl+Alt to reset"), "gridpoint28x30", &wr, this),
73
 
    grid_point29x31(_("Control handle 29x31:"), _("Control handle 29x31 - Ctrl+Alt to reset"), "gridpoint29x31", &wr, this),
74
 
    grid_point32x33x34x35(_("Control handle 32x33x34x35:"), _("Control handle 32x33x34x35 - Ctrl+Alt to reset"), "gridpoint32x33x34x35", &wr, this)
 
47
    grid_point0(_("Control handle 0:"), _("Control handle 0 - Ctrl+Alt+Click to reset"), "gridpoint0", &wr, this),
 
48
    grid_point1(_("Control handle 1:"), _("Control handle 1 - Ctrl+Alt+Click to reset"), "gridpoint1", &wr, this),
 
49
    grid_point2(_("Control handle 2:"), _("Control handle 2 - Ctrl+Alt+Click to reset"), "gridpoint2", &wr, this),
 
50
    grid_point3(_("Control handle 3:"), _("Control handle 3 - Ctrl+Alt+Click to reset"), "gridpoint3", &wr, this),
 
51
    grid_point4(_("Control handle 4:"), _("Control handle 4 - Ctrl+Alt+Click to reset"), "gridpoint4", &wr, this),
 
52
    grid_point5(_("Control handle 5:"), _("Control handle 5 - Ctrl+Alt+Click to reset"), "gridpoint5", &wr, this),
 
53
    grid_point6(_("Control handle 6:"), _("Control handle 6 - Ctrl+Alt+Click to reset"), "gridpoint6", &wr, this),
 
54
    grid_point7(_("Control handle 7:"), _("Control handle 7 - Ctrl+Alt+Click to reset"), "gridpoint7", &wr, this),
 
55
    grid_point8x9(_("Control handle 8x9:"), _("Control handle 8x9 - Ctrl+Alt+Click to reset"), "gridpoint8x9", &wr, this),
 
56
    grid_point10x11(_("Control handle 10x11:"), _("Control handle 10x11 - Ctrl+Alt+Click to reset"), "gridpoint10x11", &wr, this),
 
57
    grid_point12(_("Control handle 12:"), _("Control handle 12 - Ctrl+Alt+Click to reset"), "gridpoint12", &wr, this),
 
58
    grid_point13(_("Control handle 13:"), _("Control handle 13 - Ctrl+Alt+Click to reset"), "gridpoint13", &wr, this),
 
59
    grid_point14(_("Control handle 14:"), _("Control handle 14 - Ctrl+Alt+Click to reset"), "gridpoint14", &wr, this),
 
60
    grid_point15(_("Control handle 15:"), _("Control handle 15 - Ctrl+Alt+Click to reset"), "gridpoint15", &wr, this),
 
61
    grid_point16(_("Control handle 16:"), _("Control handle 16 - Ctrl+Alt+Click to reset"), "gridpoint16", &wr, this),
 
62
    grid_point17(_("Control handle 17:"), _("Control handle 17 - Ctrl+Alt+Click to reset"), "gridpoint17", &wr, this),
 
63
    grid_point18(_("Control handle 18:"), _("Control handle 18 - Ctrl+Alt+Click to reset"), "gridpoint18", &wr, this),
 
64
    grid_point19(_("Control handle 19:"), _("Control handle 19 - Ctrl+Alt+Click to reset"), "gridpoint19", &wr, this),
 
65
    grid_point20x21(_("Control handle 20x21:"), _("Control handle 20x21 - Ctrl+Alt+Click to reset"), "gridpoint20x21", &wr, this),
 
66
    grid_point22x23(_("Control handle 22x23:"), _("Control handle 22x23 - Ctrl+Alt+Click to reset"), "gridpoint22x23", &wr, this),
 
67
    grid_point24x26(_("Control handle 24x26:"), _("Control handle 24x26 - Ctrl+Alt+Click to reset"), "gridpoint24x26", &wr, this),
 
68
    grid_point25x27(_("Control handle 25x27:"), _("Control handle 25x27 - Ctrl+Alt+Click to reset"), "gridpoint25x27", &wr, this),
 
69
    grid_point28x30(_("Control handle 28x30:"), _("Control handle 28x30 - Ctrl+Alt+Click to reset"), "gridpoint28x30", &wr, this),
 
70
    grid_point29x31(_("Control handle 29x31:"), _("Control handle 29x31 - Ctrl+Alt+Click to reset"), "gridpoint29x31", &wr, this),
 
71
    grid_point32x33x34x35(_("Control handle 32x33x34x35:"), _("Control handle 32x33x34x35 - Ctrl+Alt+Click to reset"), "gridpoint32x33x34x35", &wr, this)
75
72
 
76
73
    
77
74
{
108
105
{
109
106
}
110
107
 
111
 
 
112
108
Geom::Piecewise<Geom::D2<Geom::SBasis> >
113
109
LPELattice2::doEffect_pwd2 (Geom::Piecewise<Geom::D2<Geom::SBasis> > const & pwd2_in)
114
110
{
259
255
{
260
256
    original_bbox(lpeitem);
261
257
    setDefaults();
262
 
263
 
/*
264
 
void LPELattice2::original_bbox(SPLPEItem const* lpeitem, bool absolute)
265
 
{
266
 
    // Get item bounding box
267
 
    Geom::Affine transform;
268
 
    //Geom::OptRect bbox;
269
 
        if (absolute) {
270
 
            transform = lpeitem->i2doc_affine();
271
 
        }
272
 
        else {
273
 
            transform = Geom::identity();
274
 
        }
275
 
        Geom::OptRect bbox = lpeitem->geometricBounds(transform);
276
 
    //}
277
 
    if (bbox) {
278
 
        double expandX=((*bbox)[Geom::X].max()-(*bbox)[Geom::X].min())/7;
279
 
        double expandY=((*bbox)[Geom::Y].max()-(*bbox)[Geom::Y].min())/7;
280
 
        double expand = std::min(expandX,expandY);
281
 
        boundingbox_X = (*bbox)[Geom::X];
282
 
        boundingbox_X.expandBy(expand);
283
 
        boundingbox_Y = (*bbox)[Geom::Y];
284
 
        boundingbox_Y.expandBy(expand);
285
 
    } else {
286
 
        boundingbox_X = Geom::Interval();
287
 
        boundingbox_Y = Geom::Interval();
288
 
    }
289
 
}
290
 
*/
291
 
 
292
 
void
293
 
LPELattice2::resetGrid()
294
 
{
295
 
    grid_point0[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
296
 
    grid_point0[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
297
 
    grid_point0.param_set_and_write_new_value(grid_point0);
298
 
 
299
 
    grid_point1[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
300
 
    grid_point1[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
301
 
    grid_point1.param_set_and_write_new_value(grid_point1);
302
 
 
303
 
    grid_point2[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
304
 
    grid_point2[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
305
 
    grid_point2.param_set_and_write_new_value(grid_point2);
306
 
 
307
 
    grid_point3[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
308
 
    grid_point3[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
309
 
    grid_point3.param_set_and_write_new_value(grid_point3);
310
 
 
311
 
    grid_point4[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
312
 
    grid_point4[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
313
 
    grid_point4.param_set_and_write_new_value(grid_point4);
314
 
 
315
 
    grid_point5[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
316
 
    grid_point5[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
317
 
    grid_point5.param_set_and_write_new_value(grid_point5);
318
 
 
319
 
    grid_point6[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
320
 
    grid_point6[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
321
 
    grid_point6.param_set_and_write_new_value(grid_point6);
322
 
 
323
 
    grid_point7[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
324
 
    grid_point7[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
325
 
    grid_point7.param_set_and_write_new_value(grid_point7);
326
 
 
327
 
    grid_point8x9[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
328
 
    grid_point8x9[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
329
 
    grid_point8x9.param_set_and_write_new_value(grid_point8x9);
330
 
 
331
 
    grid_point10x11[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
332
 
    grid_point10x11[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
333
 
    grid_point10x11.param_set_and_write_new_value(grid_point10x11);
334
 
 
335
 
    grid_point12[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
336
 
    grid_point12[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
337
 
    grid_point12.param_set_and_write_new_value(grid_point12);
338
 
 
339
 
    grid_point13[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
340
 
    grid_point13[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
341
 
    grid_point13.param_set_and_write_new_value(grid_point13);
342
 
 
343
 
    grid_point14[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
344
 
    grid_point14[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
345
 
    grid_point14.param_set_and_write_new_value(grid_point14);
346
 
 
347
 
    grid_point15[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
348
 
    grid_point15[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
349
 
    grid_point15.param_set_and_write_new_value(grid_point15);
350
 
 
351
 
    grid_point16[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
352
 
    grid_point16[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
353
 
    grid_point16.param_set_and_write_new_value(grid_point16);
354
 
 
355
 
    grid_point17[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
356
 
    grid_point17[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
357
 
    grid_point17.param_set_and_write_new_value(grid_point17);
358
 
 
359
 
    grid_point18[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
360
 
    grid_point18[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
361
 
    grid_point18.param_set_and_write_new_value(grid_point18);
362
 
 
363
 
    grid_point19[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
364
 
    grid_point19[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
365
 
    grid_point19.param_set_and_write_new_value(grid_point19);
366
 
 
367
 
    grid_point20x21[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
368
 
    grid_point20x21[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
369
 
    grid_point20x21.param_set_and_write_new_value(grid_point20x21);
370
 
 
371
 
    grid_point22x23[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
372
 
    grid_point22x23[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
373
 
    grid_point22x23.param_set_and_write_new_value(grid_point22x23);
374
 
 
375
 
    grid_point24x26[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
376
 
    grid_point24x26[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
377
 
    grid_point24x26.param_set_and_write_new_value(grid_point24x26);
378
 
 
379
 
    grid_point25x27[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
380
 
    grid_point25x27[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
381
 
    grid_point25x27.param_set_and_write_new_value(grid_point25x27);
382
 
 
383
 
    grid_point28x30[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
384
 
    grid_point28x30[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
385
 
    grid_point28x30.param_set_and_write_new_value(grid_point28x30);
386
 
 
387
 
    grid_point29x31[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
388
 
    grid_point29x31[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
389
 
    grid_point29x31.param_set_and_write_new_value(grid_point29x31);
390
 
 
391
 
    grid_point32x33x34x35[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
392
 
    grid_point32x33x34x35[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
393
 
    grid_point32x33x34x35.param_set_and_write_new_value(grid_point32x33x34x35);
394
 
    SPDesktop * desktop = inkscape_active_desktop();
395
 
    tools_switch(desktop, TOOLS_NODES);
396
 
}
397
 
 
398
 
void
399
 
LPELattice2::resetDefaults(SPItem const* item)
400
 
{
401
 
    Effect::resetDefaults(item);
402
 
    original_bbox(SP_LPE_ITEM(item));
403
 
    resetGrid();
404
 
    setDefaults();
405
 
}
406
 
 
 
258
}
407
259
 
408
260
void
409
261
LPELattice2::setDefaults()
410
262
{
411
 
    Geom::Point gp0(0,0);
412
 
    gp0[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
413
 
    gp0[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
414
 
 
415
 
    Geom::Point gp1(0,0);
416
 
    gp1[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
417
 
    gp1[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
418
 
 
419
 
    Geom::Point gp2(0,0);
420
 
    gp2[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
421
 
    gp2[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
422
 
 
423
 
    Geom::Point gp3(0,0);
424
 
    gp3[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
425
 
    gp3[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
426
 
 
427
 
    Geom::Point gp4(0,0);
428
 
    gp4[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
429
 
    gp4[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
430
 
 
431
 
    Geom::Point gp5(0,0);
432
 
    gp5[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
433
 
    gp5[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
434
 
 
435
 
    Geom::Point gp6(0,0);
436
 
    gp6[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
437
 
    gp6[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
438
 
 
439
 
    Geom::Point gp7(0,0);
440
 
    gp7[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
441
 
    gp7[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
442
 
 
443
 
    Geom::Point gp8x9(0,0);
444
 
    gp8x9[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
445
 
    gp8x9[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min();
446
 
 
447
 
    Geom::Point gp10x11(0,0);
448
 
    gp10x11[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
449
 
    gp10x11[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min();
450
 
 
451
 
    Geom::Point gp12(0,0);
452
 
    gp12[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
453
 
    gp12[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
454
 
 
455
 
    Geom::Point gp13(0,0);
456
 
    gp13[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
457
 
    gp13[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
458
 
 
459
 
    Geom::Point gp14(0,0);
460
 
    gp14[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
461
 
    gp14[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
462
 
 
463
 
    Geom::Point gp15(0,0);
464
 
    gp15[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
465
 
    gp15[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
466
 
 
467
 
    Geom::Point gp16(0,0);
468
 
    gp16[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
469
 
    gp16[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
470
 
 
471
 
    Geom::Point gp17(0,0);
472
 
    gp17[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
473
 
    gp17[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
474
 
 
475
 
    Geom::Point gp18(0,0);
476
 
    gp18[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
477
 
    gp18[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
478
 
 
479
 
    Geom::Point gp19(0,0);
480
 
    gp19[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
481
 
    gp19[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
482
 
 
483
 
    Geom::Point gp20x21(0,0);
484
 
    gp20x21[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
485
 
    gp20x21[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min();
486
 
 
487
 
    Geom::Point gp22x23(0,0);
488
 
    gp22x23[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
489
 
    gp22x23[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min();
490
 
 
491
 
    Geom::Point gp24x26(0,0);
492
 
    gp24x26[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min();
493
 
    gp24x26[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
494
 
 
495
 
    Geom::Point gp25x27(0,0);
496
 
    gp25x27[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min();
497
 
    gp25x27[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
498
 
 
499
 
    Geom::Point gp28x30(0,0);
500
 
    gp28x30[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min();
501
 
    gp28x30[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
502
 
 
503
 
    Geom::Point gp29x31(0,0);
504
 
    gp29x31[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min();
505
 
    gp29x31[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
506
 
 
507
 
    Geom::Point gp32x33x34x35(0,0);
508
 
    gp32x33x34x35[Geom::X] = (boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min();
509
 
    gp32x33x34x35[Geom::Y] = (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min();
 
263
    Geom::Point gp0((boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min(),
 
264
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min());
 
265
 
 
266
    Geom::Point gp1((boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min(),
 
267
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min());
 
268
 
 
269
    Geom::Point gp2((boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min(),
 
270
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min());
 
271
 
 
272
    Geom::Point gp3((boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min(),
 
273
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min());
 
274
 
 
275
    Geom::Point gp4((boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min(),
 
276
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min());
 
277
 
 
278
    Geom::Point gp5((boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min(),
 
279
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min());
 
280
 
 
281
    Geom::Point gp6((boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min(),
 
282
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min());
 
283
 
 
284
    Geom::Point gp7((boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min(),
 
285
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min());
 
286
 
 
287
    Geom::Point gp8x9((boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min(),
 
288
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*0+boundingbox_Y.min());
 
289
 
 
290
    Geom::Point gp10x11((boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min(),
 
291
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*4+boundingbox_Y.min());
 
292
 
 
293
    Geom::Point gp12((boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min(),
 
294
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min());
 
295
 
 
296
    Geom::Point gp13((boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min(),
 
297
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min());
 
298
 
 
299
    Geom::Point gp14((boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min(),
 
300
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min());
 
301
 
 
302
    Geom::Point gp15((boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min(),
 
303
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min());
 
304
 
 
305
    Geom::Point gp16((boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min(),
 
306
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min());
 
307
 
 
308
    Geom::Point gp17((boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min(),
 
309
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min());
 
310
 
 
311
    Geom::Point gp18((boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min(),
 
312
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min());
 
313
 
 
314
    Geom::Point gp19((boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min(),
 
315
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min());
 
316
 
 
317
    Geom::Point gp20x21((boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min(),
 
318
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*1+boundingbox_Y.min());
 
319
 
 
320
    Geom::Point gp22x23((boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min(),
 
321
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*3+boundingbox_Y.min());
 
322
 
 
323
    Geom::Point gp24x26((boundingbox_X.max()-boundingbox_X.min())/4*0+boundingbox_X.min(),
 
324
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min());
 
325
 
 
326
    Geom::Point gp25x27((boundingbox_X.max()-boundingbox_X.min())/4*4+boundingbox_X.min(),
 
327
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min());
 
328
 
 
329
    Geom::Point gp28x30((boundingbox_X.max()-boundingbox_X.min())/4*1+boundingbox_X.min(),
 
330
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min());
 
331
 
 
332
    Geom::Point gp29x31((boundingbox_X.max()-boundingbox_X.min())/4*3+boundingbox_X.min(),
 
333
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min());
 
334
 
 
335
    Geom::Point gp32x33x34x35((boundingbox_X.max()-boundingbox_X.min())/4*2+boundingbox_X.min(),
 
336
                    (boundingbox_Y.max()-boundingbox_Y.min())/4*2+boundingbox_Y.min());
 
337
 
510
338
    grid_point0.param_update_default(gp0);
511
339
    grid_point1.param_update_default(gp1);
512
340
    grid_point2.param_update_default(gp2);
535
363
}
536
364
 
537
365
void
 
366
LPELattice2::resetGrid()
 
367
{
 
368
    grid_point0.param_set_and_write_default();
 
369
    grid_point1.param_set_and_write_default();
 
370
    grid_point2.param_set_and_write_default();
 
371
    grid_point3.param_set_and_write_default();
 
372
    grid_point4.param_set_and_write_default();
 
373
    grid_point5.param_set_and_write_default();
 
374
    grid_point6.param_set_and_write_default();
 
375
    grid_point7.param_set_and_write_default();
 
376
    grid_point8x9.param_set_and_write_default();
 
377
    grid_point10x11.param_set_and_write_default();
 
378
    grid_point12.param_set_and_write_default();
 
379
    grid_point13.param_set_and_write_default();
 
380
    grid_point14.param_set_and_write_default();
 
381
    grid_point15.param_set_and_write_default();
 
382
    grid_point16.param_set_and_write_default();
 
383
    grid_point17.param_set_and_write_default();
 
384
    grid_point18.param_set_and_write_default();
 
385
    grid_point19.param_set_and_write_default();
 
386
    grid_point20x21.param_set_and_write_default();
 
387
    grid_point22x23.param_set_and_write_default();
 
388
    grid_point24x26.param_set_and_write_default();
 
389
    grid_point25x27.param_set_and_write_default();
 
390
    grid_point28x30.param_set_and_write_default();
 
391
    grid_point29x31.param_set_and_write_default();
 
392
    grid_point32x33x34x35.param_set_and_write_default();
 
393
    //todo:this hack is only to reposition the knots on reser grid button
 
394
    //Better update path effect in LPEITEM
 
395
    SPDesktop * desktop = inkscape_active_desktop();
 
396
    tools_switch(desktop, TOOLS_SELECT);
 
397
    tools_switch(desktop, TOOLS_NODES);
 
398
}
 
399
 
 
400
void
 
401
LPELattice2::resetDefaults(SPItem const* item)
 
402
{
 
403
    Effect::resetDefaults(item);
 
404
    original_bbox(SP_LPE_ITEM(item));
 
405
    setDefaults();
 
406
    resetGrid();
 
407
}
 
408
 
 
409
void
538
410
LPELattice2::calculateCurve(Geom::Point a,Geom::Point b, SPCurve* c, bool horizontal, bool move)
539
411
{
540
412
    using Geom::X;