Skip to content
Merged
8 changes: 8 additions & 0 deletions doc/manual/development/api_redirect.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.. _sec-dev-api:

C++ API
=======

.. raw:: html

<meta http-equiv="refresh" content="0; url=../extra_html/api/namespacecodac2.html">
95 changes: 69 additions & 26 deletions doc/manual/manual/visualization/colors.rst
Original file line number Diff line number Diff line change
Expand Up @@ -146,29 +146,20 @@ It can also be deduced from one or two ``Color`` objects.
fig.draw_box({{2,5},{2,5}}, Color::red()); // red edge, no fill
fig.draw_box({{2,5},{2,5}}, {Color::blue(),Color::green()}); // blue edge, green fill

In addition, a line style, a line width and/or a layer can be added to the ``StyleProperties`` object. The line style is defined by a string, and the layer is defined by its name (string).

Available line styles are:
- ``"-"`` (solid)
- ``"--"`` (dashed)
- ``".."`` (dotted)
- ``"-."`` (dash-dotted)
- ``"-.."`` (dash-dot-dotted)

These three arguments are optional, only one can be added and they can be added in any order.
Note that by convention a parameter starting with a number is interpreted as a line width.
In addition, optional arguments can be passed to the ``StyleProperties`` object to define line style, line width, layer and Z-value.
For more information, see :ref:`subsec-graphics-colors-optional-arguments`.

.. tabs::

.. code-tab:: py

fig.draw_box([[2,5],[2,5]], StyleProperties(Color.red(), "..", "layer1", "0.1"))
# Red edge, dotted line, line width of 0.1 and layer1
fig.draw_box([[2,5],[2,5]], StyleProperties(Color.red(), "..", "layer1", "w:0.1", "z:1.5"))
# Red edge, dotted line, line width of 0.1, z-value of 1.5 and on layer1

.. code-tab:: c++

fig.draw_box({{2,5},{2,5}}, StyleProperties(Color::red(), "..", "layer1", "0.1"));
// Red edge, dotted line, line width of 0.1 and layer1
fig.draw_box({{2,5},{2,5}}, StyleProperties(Color::red(), "..", "layer1", "w:0.1", "z:1.5"));
// Red edge, dotted line, line width of 0.1, z-value of 1.5 and on layer1


Color maps
Expand Down Expand Up @@ -274,7 +265,33 @@ It can also be deduced from a ``ColorMap`` object.
fig.draw_trajectory(traj); // Default style
fig.draw_trajectory(traj,ColorMap::haxby()); // haxby color map

In addition, a line style, a line width and/or a layer can be added to the ``StyleGradientProperties`` object. The line style is defined by a string, and the layer is defined by its name (string).
In addition, optional arguments can be passed to the ``StyleProperties`` object to define line style, line width, layer and Z-value.
For more information, see :ref:`subsec-graphics-colors-optional-arguments`.

.. tabs::

.. code-tab:: py

fig.draw_trajectory(traj, StyleGradientProperties(ColorMap.haxby(), "..", "layer1", "w:0.1", "z:1.5"))
# haxby color map, dotted line, line width of 0.1, z-value of 1.5 and on layer1

.. code-tab:: c++

fig.draw_trajectory(traj, StyleGradientProperties(ColorMap::haxby(), "..", "layer1", "w:0.1", "z:1.5"));
// haxby color map, dotted line, line width of 0.1, z-value of 1.5 and on layer1

.. _subsec-graphics-colors-optional-arguments:

Optional arguments
------------------

For every constructor of ``StyleProperties`` and ``StyleGradientProperties``, optional arguments can be passed to define a line style, a line width, a layer and/or a Z-value.
Note that these four arguments are optional, only the desired ones can be added and they can be added in any order.

Line style
~~~~~~~~~~

A string can be passed to define the line style (default is solid).

Available line styles are:
- ``"-"`` (solid)
Expand All @@ -283,18 +300,44 @@ Available line styles are:
- ``"-."`` (dash-dotted)
- ``"-.."`` (dash-dot-dotted)

These three arguments are optional, only one can be added and they can be added in any order.
Line width
~~~~~~~~~~

Note that by convention a parameter starting with a number is interpreted as a line width.
A string starting with ``"w:"`` followed by a float can be passed to define the line width (default is 0)

.. tabs::
Z-value
~~~~~~~~

.. code-tab:: py

fig.draw_trajectory(traj, StyleGradientProperties(ColorMap.haxby(), "..", "layer1", "0.1"))
# haxby color map, dotted line, line width of 0.1 and layer1
**Warning: the Z-value has been added to VIBes since PR #150, a release is being prepared**

.. code-tab:: c++
A string starting with ``"z:"`` followed by a float can be passed to define the Z-value (default is 0)

This Z-value represents the height of an object : the higher the Z-value, the higher the object will be.
An object with a Z-value of 0.5 will be drawn on top of an object with a Z-value of 0, but behin an object of Z-value 1.

**Notes**

Some objects have a non-null default Z-value.

- Tubes are by default drawn at ``z=-1``
- On pavings (and in the corresponding predefined styles)
- Outside boxes are drawn at ``z=-3``
- Boundary boxes are drawn at ``z=-2``
- Inside boxes are drawn at ``z=-1``

Layer
~~~~~

A string can be passed to define the layer to draw on (default is "alpha").
Note that this case is the last as it is the "fallback" case :
if the string is not a line style and does not start with ``"w:"`` or ``"z:"``, it is a layer name.

Note that these layers are only used in IPE (see :ref:`sec-graphics-ipe`). Only the layers for paving are converted as VIBes groups.

**Notes**

On pavings and in the corresponding predefined styles

fig.draw_trajectory(traj, StyleGradientProperties(ColorMap::haxby(), "..", "layer1"));
// haxby color map, dotted line, line width of 0.1 and layer1
- Outside boxes are drawn on layer ``outside``
- Boundary boxes are drawn on layer ``boundary``
- Inside boxes are drawn on layer ``inside``
4 changes: 2 additions & 2 deletions doc/manual/manual/visualization/figures.rst
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ Any Figure2D object can be used as DefaultFigure with the set method:
.. code-tab:: c++

std::shared_ptr<codac2::Figure2D> fig = std::make_shared<Figure2D>("My Figure",GraphicOutput::VIBES|GraphicOutput::IPE);
fig->is_default() // is false
fig->is_default(); // is false
DefaultFigure::set(fig);
fig->is_default() // is true
fig->is_default(); // is true

Note that in C++ the figure must be a shared pointer in order to be passed to the `set` method.

Expand Down
12 changes: 8 additions & 4 deletions examples/00_graphics/graphic_examples.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,10 @@ int main(){
DefaultFigure::set(fig1);
DefaultFigure::draw_box({{2.2,2.5},{2.2,2.5}},{Color::blue(),Color::cyan(0.8)});

fig2->draw_AUV({1,1,3.14/2},2.,{{Color::black(),Color::yellow()}, "0.1", "vehicles"});
fig2->draw_tank({2,1,3.14/2},1.5,{{Color::black(),Color::yellow()},"vehicles","0.1"});
fig2->draw_circle({2.,2.},0.5,{{Color::red(),Color::red(0.2)}, "z:1."}); // will alway be on top despite being "drawn" first

fig2->draw_AUV({1,1,3.14/2},2.,{{Color::black(),Color::yellow()}, "w:0.1", "vehicles"});
fig2->draw_tank({2,1,3.14/2},1.5,{{Color::black(),Color::yellow()},"vehicles","w:0.1"});
fig2->draw_motor_boat({0,0,0}, 1., {{Color::black(),Color::yellow()},"vehicles"});
fig2->draw_pie({2,2},{1.5,2.5},{(3*3.14/4)-0.5,(3*3.14/4)+0.5},{Color::blue(),Color::cyan()});
fig2->draw_polyline({{2,-0.5},{4,0.5},{3,1.5},{4,2.5},{3,3}}, {Color::red(),".."});
Expand All @@ -55,12 +57,12 @@ int main(){
fig2->draw_ellipse({1,1},{0.5,2}, 0.2, {Color::blue(),Color::blue(0.3)});
fig2->draw_line({1,1},{3,3}, Color::blue());
fig2->draw_arrow({3,1},{2.2,2}, 0.2, {Color::red(),Color::black(0.3)});
fig2->draw_parallelepiped({{1.5,2.8},Matrix({{0.5,0.4},{0,0.2}})}, {{Color::red(),Color::green(0.5)}, "parallelepiped", "0.1"});
fig2->draw_parallelepiped({{1.5,2.8},Matrix({{0.5,0.4},{0,0.2}})}, {{Color::red(),Color::green(0.5)}, "parallelepiped", "w:0.1"});

fig2->draw_zonotope({{4,1.5},
{{-0.2,-0.06,0.2,0.06,0.01,0.08,0},
{0.1,0.04,0.04,-0.04,-0.03,0.18,0}}},
{{Color::red(),Color::yellow(0.4)},"zonotope", "0.05"});
{{Color::red(),Color::yellow(0.4)},"zonotope", "w:0.05"});

Parallelepiped p_3d ({1.2,3.5,2.2},Matrix({{0.5,0.4,0},{0,0.2,0.1},{0,0,0.3}}));
fig2->draw_zonotope(p_3d.proj({0,1}), {{Color::green(),Color::yellow(0.4)}, "zonotope"});
Expand All @@ -70,6 +72,8 @@ int main(){
std::filesystem::path p = __FILE__;
fig2->draw_raster(p.parent_path().string()+"/logo_codac.png", IntervalVector({{2.5,5},{-1,-0.4}}), StyleProperties("raster"));

fig2->draw_circle({0.5,0.5},0.5,{{Color::orange(),Color::orange(0.2)}, "z:-1."}); // will alway be in the bottom despite being "drawn" last

// Colors
// predefined colors without and with opacity
fig2->draw_point({2,2}, {Color::red(),Color::yellow(0.5)});
Expand Down
12 changes: 8 additions & 4 deletions examples/00_graphics/graphic_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,10 @@
DefaultFigure.set(fig1)
DefaultFigure.draw_box([[2.2,2.5],[2.2,2.5]],[Color.blue(),Color.cyan(0.8)])

fig2.draw_AUV([1,1,3.14/2],2.,StyleProperties([Color.black(),Color.yellow()], "0.1", "vehicles"))
fig2.draw_tank([2,1,3.14/2],1.5,StyleProperties([Color.black(),Color.yellow()],"vehicles","0.1"))
fig2.draw_circle([2,2],0.5,StyleProperties([Color.red(),Color.red(0.2)], "z:1.")) # will alway be on top despite being "drawn" first

fig2.draw_AUV([1,1,3.14/2],2.,StyleProperties([Color.black(),Color.yellow()], "w:0.1", "vehicles"))
fig2.draw_tank([2,1,3.14/2],1.5,StyleProperties([Color.black(),Color.yellow()],"vehicles","w:0.1"))
fig2.draw_motor_boat([0,0,0], 1.,StyleProperties([Color.black(),Color.yellow()],"vehicles"))
fig2.draw_pie([2,2],[1.5,2.5],[(3*3.14/4)-0.5,(3*3.14/4)+0.5],[Color.blue(),Color.cyan()])
fig2.draw_polyline([[2,-0.5],[4,0.5],[3,1.5],[4,2.5],[3,3]], StyleProperties(Color.red(),".."))
Expand All @@ -49,10 +51,10 @@
fig2.draw_ellipse([1,1],[0.5,2], 0.2, [Color.blue(),Color.blue(0.3)])
fig2.draw_line([1,1],[3,3], Color.blue())
fig2.draw_arrow([3,1],[2.2,2], 0.2, [Color.red(),Color.black(0.3)])
fig2.draw_parallelepiped(Parallelepiped([1.5,2.8],Matrix([[0.5,0.4],[0,0.2]])), StyleProperties([Color.red(),Color.green(0.5)],"parallelepiped","0.1"))
fig2.draw_parallelepiped(Parallelepiped([1.5,2.8],Matrix([[0.5,0.4],[0,0.2]])), StyleProperties([Color.red(),Color.green(0.5)],"parallelepiped","w:0.1"))

fig2.draw_zonotope(Zonotope([4,1.5],Matrix([[-0.2,-0.06,0.2,0.06,0.01,0.08,0],
[0.1,0.04,0.04,-0.04,-0.03,0.18,0]])),StyleProperties([Color.red(),Color.yellow(0.4)],"zonotope","0.05"))
[0.1,0.04,0.04,-0.04,-0.03,0.18,0]])),StyleProperties([Color.red(),Color.yellow(0.4)],"zonotope","w:0.05"))

p_3d = Parallelepiped([1.2,3.5,2.2],Matrix([[0.5,0.4,0],[0,0.2,0.1],[0,0,0.3]]))
fig2.draw_zonotope(p_3d.proj([0,1]), StyleProperties([Color.green(),Color.yellow(0.4)],"zonotope"))
Expand All @@ -62,6 +64,8 @@
current_folder = os.path.dirname(os.path.abspath(__file__))
fig2.draw_raster(current_folder+"/logo_codac.png", IntervalVector([[2.5,5],[-1,-0.4]]),StyleProperties("raster"))

fig2.draw_circle([0.5,0.5],0.5,StyleProperties([Color.orange(),Color.orange(0.2)], "z:-1.")) # will alway be in the bottom despite being "drawn" last

# Colors
# predefined colors without and with opacity
fig2.draw_point([2,2], [Color.red(),Color.yellow(0.5)])
Expand Down
2 changes: 2 additions & 0 deletions examples/01_batman/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ int main()
{{-8,8},{-4,4}}, bat.create_sep(), 0.1,
PavingStyle::black_white());

DefaultFigure::draw_ellipse({0,0}, {7.5,3.5}, 0, {{Color::black(0.5),Color::yellow(0.5)},"z:-2.5"});

#if 0 // towards paving features..
auto p = pave({{-8,8},{-4,4}}, *bat.create_sep(), e);
for(const auto& ci : p.connected_subsets())
Expand Down
15 changes: 10 additions & 5 deletions examples/09_robot_simu/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,20 @@ int main()
SampledTraj<Vector> u;
auto x = s.simulate({0,0,0,0}, 1e-2, wpts, u);

Figure2D g("Robot simulation", GraphicOutput::VIBES);
Figure2D g("Robot simulation", GraphicOutput::VIBES | GraphicOutput::IPE);

g.set_axes(
{0,x.codomain()[0].inflate(1.)},
{1,x.codomain()[1].inflate(1.)}
).auto_scale();

g.draw_tank(x(5.), 0.5, {Color::black(),Color::yellow()});
g.draw_trajectory(x);
for(const auto& wpt : wpts)
g.draw_circle(wpt, 0.1, Color::red());

g.set_axes(
{0,x.codomain()[0].inflate(1.)},
{1,x.codomain()[1].inflate(1.)}
).auto_scale();
// Optional tube built from a trajectory:
auto tdomain = create_tdomain(x.tdomain(),1e-2);
SlicedTube<IntervalVector> ix(tdomain,x);
g.draw_tube(ix.inflate(1e-1));
}
15 changes: 10 additions & 5 deletions examples/09_robot_simu/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,19 @@
u = SampledVectorTraj()
x = s.simulate([0,0,0,0], 1e-2, wpts, u)

g = Figure2D("Robot simulation", GraphicOutput.VIBES)
g = Figure2D("Robot simulation", GraphicOutput.VIBES | GraphicOutput.IPE)

g.set_axes( \
axis(0,x.codomain()[0].inflate(1.)), \
axis(1,x.codomain()[1].inflate(1.)) \
).auto_scale()

g.draw_tank(x(5.), 0.5, [Color.black(),Color.yellow()])
g.draw_trajectory(x)
for wi in wpts:
g.draw_circle(wi, 0.1, Color.red())

g.set_axes( \
axis(0,x.codomain()[0].inflate(1.)), \
axis(1,x.codomain()[1].inflate(1.)) \
).auto_scale()
# Optional tube built from a trajectory:
tdomain = create_tdomain(x.tdomain(),1e-2)
ix = SlicedTube_IntervalVector(tdomain,x)
g.draw_tube(ix.inflate(1e-1))
18 changes: 9 additions & 9 deletions python/src/graphics/figures/codac2_py_Figure2D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -224,27 +224,27 @@ void export_Figure2D(py::module& m)
VOID_FIGURE2D_PLOT_TRAJECTORIES_CONST_SAMPLEDTRAJ_VECTOR_REF_CONST_STYLEPROPERTIES_REF,
"x"_a, "style"_a)

.def("draw_tube", [](Figure2D& fig, const py::object& x, const StyleProperties& s, int max_nb_slices_to_display)
.def("draw_tube", [](Figure2D& fig, const py::object& x, const StyleGradientProperties& style, int max_nb_slices_to_display)
{
if(!is_instance<SlicedTube<IntervalVector>>(x)) {
assert_release("draw_tube: invalid function type");
}

fig.draw_tube(cast<SlicedTube<IntervalVector>>(x), s, max_nb_slices_to_display);
fig.draw_tube(cast<SlicedTube<IntervalVector>>(x), style, max_nb_slices_to_display);
},
VOID_FIGURE2D_DRAW_TUBE_CONST_SLICEDTUBE_INTERVALVECTOR_REF_CONST_STYLEPROPERTIES_REF_INT,
"x"_a, "style"_a=StyleProperties(), "max_nb_slices_to_display"_a=5000)
VOID_FIGURE2D_DRAW_TUBE_CONST_SLICEDTUBE_INTERVALVECTOR_REF_CONST_STYLEGRADIENTPROPERTIES_REF_INT,
"x"_a, "style"_a=StyleGradientProperties(ColorMap::blue_tube(), "z:-1"), "max_nb_slices_to_display"_a=5000)

.def("draw_tube", [](Figure2D& fig, const py::object& x, const StyleGradientProperties& style, int max_nb_slices_to_display)
.def("draw_tube", [](Figure2D& fig, const py::object& x, const StyleProperties& s, int max_nb_slices_to_display)
{
if(!is_instance<SlicedTube<IntervalVector>>(x)) {
assert_release("draw_tube: invalid function type");
}

fig.draw_tube(cast<SlicedTube<IntervalVector>>(x), style, max_nb_slices_to_display);
fig.draw_tube(cast<SlicedTube<IntervalVector>>(x), s, max_nb_slices_to_display);
},
VOID_FIGURE2D_DRAW_TUBE_CONST_SLICEDTUBE_INTERVALVECTOR_REF_CONST_STYLEGRADIENTPROPERTIES_REF_INT,
"x"_a, "style"_a=StyleGradientProperties(ColorMap::blue_tube()), "max_nb_slices_to_display"_a=5000)
VOID_FIGURE2D_DRAW_TUBE_CONST_SLICEDTUBE_INTERVALVECTOR_REF_CONST_STYLEPROPERTIES_REF_INT,
"x"_a, "style"_a=StyleProperties(), "max_nb_slices_to_display"_a=5000)

.def("plot_tube", [](Figure2D& fig, const py::object& x, const StyleProperties& s)
{
Expand Down Expand Up @@ -489,7 +489,7 @@ void export_Figure2D(py::module& m)
DefaultFigure::draw_tube(cast<SlicedTube<IntervalVector>>(x), style);
},
STATIC_VOID_DEFAULTFIGURE_DRAW_TUBE_CONST_SLICEDTUBE_INTERVALVECTOR_REF_CONST_STYLEGRADIENTPROPERTIES_REF,
"x"_a, "style"_a=StyleGradientProperties(ColorMap::blue_tube()))
"x"_a, "style"_a=StyleGradientProperties(ColorMap::blue_tube(), "z:-1"))

.def_static("plot_tube", [](const py::object& x, const StyleProperties& s)
{
Expand Down
12 changes: 6 additions & 6 deletions python/src/graphics/styles/codac2_py_StyleGradientProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ void export_StyleGradientProperties(py::module& m)
.def(py::init<>(),
STYLEGRADIENTPROPERTIES_STYLEGRADIENTPROPERTIES)

.def(py::init<const std::string&, const std::string&, const std::string&>(),
STYLEGRADIENTPROPERTIES_STYLEGRADIENTPROPERTIES_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"param1"_a, "param2"_a="", "param3"_a="")
.def(py::init<const std::string&, const std::string&, const std::string&, const std::string&>(),
STYLEGRADIENTPROPERTIES_STYLEGRADIENTPROPERTIES_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"param1"_a, "param2"_a="", "param3"_a="", "param4"_a="")

.def(py::init<const ColorMap&, const std::string&, const std::string&, const std::string&>(),
STYLEGRADIENTPROPERTIES_STYLEGRADIENTPROPERTIES_CONST_COLORMAP_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"cmap"_a, "param1"_a="", "param2"_a="", "param3"_a="")
.def(py::init<const ColorMap&, const std::string&, const std::string&, const std::string&, const std::string&>(),
STYLEGRADIENTPROPERTIES_STYLEGRADIENTPROPERTIES_CONST_COLORMAP_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"cmap"_a, "param1"_a="", "param2"_a="", "param3"_a="", "param4"_a="")

;

Expand Down
22 changes: 11 additions & 11 deletions python/src/graphics/styles/codac2_py_StyleProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,29 +26,29 @@ void export_StyleProperties(py::module& m)
.def(py::init<>(),
STYLEPROPERTIES_STYLEPROPERTIES)

.def(py::init<const std::string&, const std::string&, const std::string&>(),
STYLEPROPERTIES_STYLEPROPERTIES_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"param1"_a, "param2"_a="", "param3"_a="")
.def(py::init<const std::string&, const std::string&, const std::string&, const std::string&>(),
STYLEPROPERTIES_STYLEPROPERTIES_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"param1"_a, "param2"_a="", "param3"_a="", "param4"_a="")

.def(py::init<const Color&, const std::string&, const std::string&, const std::string&>(),
STYLEPROPERTIES_STYLEPROPERTIES_CONST_COLOR_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"stroke_color"_a, "param1"_a="", "param2"_a="", "param3"_a="")
.def(py::init<const Color&, const std::string&, const std::string&, const std::string&, const std::string&>(),
STYLEPROPERTIES_STYLEPROPERTIES_CONST_COLOR_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"stroke_color"_a, "param1"_a="", "param2"_a="", "param3"_a="", "param4"_a="")

.def(py::init(
[](const std::vector<Color>& v, const std::string& param1, const std::string& param2, const std::string& param3)
[](const std::vector<Color>& v, const std::string& param1, const std::string& param2, const std::string& param3, const std::string& param4)
{
if(v.size() == 1)
return std::make_unique<StyleProperties>(v[0], param1, param2, param3);
return std::make_unique<StyleProperties>(v[0], param1, param2, param3, param4);
else if(v.size() == 2)
return std::make_unique<StyleProperties,std::initializer_list<Color>>({ v[0], v[1] }, param1, param2, param3);
return std::make_unique<StyleProperties,std::initializer_list<Color>>({ v[0], v[1] }, param1, param2, param3, param4);
else
{
throw invalid_argument("StyleProperties must be built from one (edge) or two (edge/fill) colors.");
return std::make_unique<StyleProperties>();
}
}),
STYLEPROPERTIES_STYLEPROPERTIES_INITIALIZER_LIST_COLOR_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"v"_a, "param1"_a="", "param2"_a="", "param3"_a="")
STYLEPROPERTIES_STYLEPROPERTIES_INITIALIZER_LIST_COLOR_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF_CONST_STRING_REF,
"v"_a, "param1"_a="", "param2"_a="", "param3"_a="", "param4"_a="")


.def_static("inside", &StyleProperties::inside,
Expand Down
Loading
Loading