Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
box3d.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2#ifndef SEEN_SP_BOX3D_H
3#define SEEN_SP_BOX3D_H
4
5/*
6 * SVG <box3d> implementation
7 *
8 * Authors:
9 * Lauris Kaplinski <lauris@kaplinski.com>
10 * Maximilian Albert <Anhalter42@gmx.de>
11 * Abhishek Sharma
12 * Jon A. Cruz <jon@joncruz.org.
13 *
14 * Copyright (C) 2007 Authors
15 * Copyright (C) 1999-2002 Lauris Kaplinski
16 * Copyright (C) 2000-2001 Ximian, Inc.
17 *
18 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
19 */
20
21#include "sp-item-group.h"
22#include "proj_pt.h"
23#include "axis-manip.h"
24
25#define SP_TYPE_BOX3D (box3d_get_type ())
26
27class Persp3D;
29
30class SPBox3D final : public SPGroup {
31public:
32 SPBox3D();
33 ~SPBox3D() override;
34 int tag() const override { return tag_of<decltype(*this)>; }
35
36 int z_orders[6]; // z_orders[i] holds the ID of the face at position #i in the group (from top to bottom)
37
40
43
46
47 Box3D::Axis swapped; // to indicate which coordinates are swapped during dragging
48
49 int my_counter; // for debugging only
50
54 static SPBox3D * createBox3D(SPItem * parent);
55
57 void release() override;
58 void set(SPAttr key, char const* value) override;
59 void update(SPCtx *ctx, unsigned int flags) override;
60 Inkscape::XML::Node* write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, unsigned int flags) override;
61
62 virtual const char* display_name();
64 void convert_to_guides() const override;
65 const char* displayName() const override;
66 char *description() const override;
67
68 void position_set ();
69 Geom::Point get_corner_screen (unsigned int id, bool item_coords = true) const;
72
73 void set_corner (unsigned int id, Geom::Point const &new_pos, Box3D::Axis movement, bool constrained);
74 void set_center (Geom::Point const &new_pos, Geom::Point const &old_pos, Box3D::Axis movement, bool constrained);
75 void corners_for_PLs (Proj::Axis axis, Geom::Point &corner1, Geom::Point &corner2, Geom::Point &corner3, Geom::Point &corner4) const;
76 bool recompute_z_orders ();
77 void set_z_orders ();
78
79 int pt_lies_in_PL_sector (Geom::Point const &pt, int id1, int id2, Box3D::Axis axis) const;
80 int VP_lies_in_PL_sector (Proj::Axis vpdir, int id1, int id2, Box3D::Axis axis) const;
81
82 void relabel_corners();
84
85 static std::list<SPBox3D *> extract_boxes(SPObject *obj);
86
87 Persp3D *get_perspective() const;
88 void switch_perspectives(Persp3D *old_persp, Persp3D *new_persp, bool recompute_corners = false);
89
91};
92
93#endif // SEEN_SP_BOX3D_H
94
95/*
96 Local Variables:
97 mode:c++
98 c-file-style:"stroustrup"
99 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
100 indent-tabs-mode:nil
101 fill-column:99
102 End:
103*/
104// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
SPAttr
Definition attributes.h:27
constexpr int tag_of
Convenience function to retrieve the tag (class id) of a given type.
Definition cast.h:26
3x3 matrix representing an affine transformation.
Definition affine.h:70
Two-dimensional point that doubles as a vector.
Definition point.h:66
Interface for refcounted XML nodes.
Definition node.h:80
void update(SPCtx *ctx, unsigned int flags) override
Definition box3d.cpp:178
Proj::Pt3 save_corner7
Definition box3d.h:45
void release() override
Definition box3d.cpp:77
virtual const char * display_name()
Definition box3d.cpp:237
void set_corner(unsigned int id, Geom::Point const &new_pos, Box3D::Axis movement, bool constrained)
Definition box3d.cpp:430
char * description() const override
Definition box3d.cpp:1300
int tag() const override
Definition box3d.h:34
static SPBox3D * createBox3D(SPItem *parent)
Create a SPBox3D and append it to the parent.
Definition box3d.cpp:419
Geom::Point get_center_screen()
Definition box3d.cpp:319
SPBox3D()
Definition box3d.cpp:41
Proj::Pt3 orig_corner0
Definition box3d.h:41
void check_for_swapped_coords()
Definition box3d.cpp:1194
int my_counter
Definition box3d.h:49
int z_orders[6]
Definition box3d.h:36
char * persp_href
Definition box3d.h:38
int VP_lies_in_PL_sector(Proj::Axis vpdir, int id1, int id2, Box3D::Axis axis) const
Definition box3d.cpp:1136
bool recompute_z_orders()
Definition box3d.cpp:906
~SPBox3D() override
static std::list< SPBox3D * > extract_boxes(SPObject *obj)
Definition box3d.cpp:1214
void set_z_orders()
Definition box3d.cpp:1077
Geom::Affine set_transform(Geom::Affine const &transform) override
Definition box3d.cpp:253
Persp3DReference * persp_ref
Definition box3d.h:39
int pt_lies_in_PL_sector(Geom::Point const &pt, int id1, int id2, Box3D::Axis axis) const
Definition box3d.cpp:1104
Persp3D * get_perspective() const
Definition box3d.cpp:1221
void corners_for_PLs(Proj::Axis axis, Geom::Point &corner1, Geom::Point &corner2, Geom::Point &corner3, Geom::Point &corner4) const
Definition box3d.cpp:536
void position_set()
Definition box3d.cpp:241
Geom::Point get_corner_screen(unsigned int id, bool item_coords=true) const
Definition box3d.cpp:295
Inkscape::XML::Node * write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, unsigned int flags) override
Definition box3d.cpp:191
Box3D::Axis swapped
Definition box3d.h:47
void set_center(Geom::Point const &new_pos, Geom::Point const &old_pos, Box3D::Axis movement, bool constrained)
Definition box3d.cpp:483
void convert_to_guides() const override
Definition box3d.cpp:1311
SPGroup * convert_to_group()
Definition box3d.cpp:1252
void build(SPDocument *document, Inkscape::XML::Node *repr) override
Definition box3d.cpp:56
Proj::Pt3 save_corner0
Definition box3d.h:44
void switch_perspectives(Persp3D *old_persp, Persp3D *new_persp, bool recompute_corners=false)
Definition box3d.cpp:1229
Proj::Pt3 orig_corner7
Definition box3d.h:42
Proj::Pt3 get_proj_center()
Definition box3d.cpp:309
const char * displayName() const override
The item's type name as a translated human string.
Definition box3d.cpp:1296
void relabel_corners()
Definition box3d.cpp:1161
Typed SVG document implementation.
Definition document.h:101
Base class for visual SVG elements.
Definition sp-item.h:109
Geom::Affine transform
Definition sp-item.h:138
SPObject is an abstract base class of all of the document nodes at the SVG document level.
Definition sp-object.h:160
Inkscape::XML::Node * repr
Definition sp-object.h:193
SPDocument * document
Definition sp-object.h:188
static char const *const parent
Definition dir-util.cpp:70
static cairo_user_data_key_t key
Interface for XML documents.
Definition document.h:43
Unused.
Definition sp-object.h:94