WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
components.h
Go to the documentation of this file.
1#pragma once
2#include "component_view.h"
6
8
9namespace internal {
10class ViewBuf;
11}
12
22template <bool V, bool C2, bool C3>
27
28 TemporalComponent() = default;
29 template <typename VT, typename C2T, typename C3T>
30 TemporalComponent(VT v_type, C2T c2_type, C3T c3_type)
31 : component_v(v_type), component_2d(c2_type), component_3d(c3_type) {
32 // V, C2, C3 がtrue <=> VT, C2T, C3T にnullptrでない値を渡して初期化する
33 // V, C2, C3 がfalse <=> VT, C2T, C3T にnullptrを渡す
34 static_assert(V == !std::is_same_v<VT, std::nullptr_t>);
35 static_assert(C2 == !std::is_same_v<C2T, std::nullptr_t>);
36 static_assert(C3 == !std::is_same_v<C3T, std::nullptr_t>);
37 }
38
39 friend class Func;
40 friend class Canvas2D;
41 friend class Canvas3D;
42 friend class View;
43 friend class internal::ViewBuf;
44
52 if constexpr (V) {
53 component_v.id(id);
54 }
55 if constexpr (C2) {
56 component_2d.id(id);
57 }
58 if constexpr (C3) {
59 component_3d.id(id);
60 }
61 return *this;
62 }
67 this->id(id);
68 return std::move(*this);
69 }
70
79 TemporalComponent &onClick(const Func &func) & {
80 static_assert(V || C2,
81 "onClick can be set only for View, Canvas2D components");
82 if constexpr (V) {
83 component_v.onClick(func);
84 }
85 if constexpr (C2) {
86 component_2d.onClick(func);
87 }
88 return *this;
89 }
90
94 TemporalComponent &&onClick(const Func &func) && {
95 this->onClick(func);
96 return std::move(*this);
97 }
107 static_assert(V || C2,
108 "onClick can be set only for View, Canvas2D components");
109 if constexpr (V) {
110 component_v.onClick(func);
111 }
112 if constexpr (C2) {
113 component_2d.onClick(func);
114 }
115 return *this;
116 }
121 this->onClick(func);
122 return std::move(*this);
123 }
124
132 template <typename T, typename std::enable_if_t<std::is_invocable_v<T>,
133 std::nullptr_t> = nullptr>
135 static_assert(V || C2,
136 "onClick can be set only for View, Canvas2D components");
137 auto func_shared =
138 std::make_shared<std::function<void WEBCFACE_CALL_FP()>>(
139 std::move(func));
140 if constexpr (V) {
141 component_v.onClick(func_shared);
142 }
143 if constexpr (C2) {
144 component_2d.onClick(func_shared);
145 }
146 return *this;
147 }
151 template <typename T, typename std::enable_if_t<std::is_invocable_v<T>,
152 std::nullptr_t> = nullptr>
154 this->onClick(std::move(func));
155 return std::move(*this);
156 }
162 static_assert(
163 C2 || C3,
164 "origin can be set only for Canvas2D, Canvas3D components");
165 if constexpr (C2) {
166 component_2d.origin(origin);
167 }
168 if constexpr (C3) {
169 component_3d.origin(origin);
170 }
171 return *this;
172 }
176 TemporalComponent &&origin(const Transform &origin) && {
177 this->origin(origin);
178 return std::move(*this);
179 }
186 if constexpr (V) {
187 component_v.textColor(c);
188 }
189 if constexpr (C2) {
190 component_2d.color(c);
191 }
192 if constexpr (C3) {
193 component_3d.color(c);
194 }
195 return *this;
196 }
201 this->color(c);
202 return std::move(*this);
203 }
212 static_assert(V || C2,
213 "text can be set only for View, Canvas2D components");
214 if constexpr (V) {
215 component_v.text(str);
216 }
217 if constexpr (C2) {
218 component_2d.text(str);
219 }
220 return *this;
221 }
229 this->text(str);
230 return std::move(*this);
231 }
238 static_assert(
239 V || C2, "textColor can be set only for View, Canvas2D components");
240 if constexpr (V) {
241 component_v.textColor(c);
242 }
243 if constexpr (C2) {
244 component_2d.fillColor(c);
245 }
246 return *this;
247 }
252 this->textColor(c);
253 return std::move(*this);
254 }
260 static_assert(
261 V || C2, "fillColor can be set only for View, Canvas2D components");
262 if constexpr (V) {
263 component_v.bgColor(c);
264 }
265 if constexpr (C2) {
266 component_2d.fillColor(c);
267 }
268 return *this;
269 }
274 this->fillColor(c);
275 return std::move(*this);
276 }
282 static_assert(V || C2,
283 "bgColor can be set only for View, Canvas2D components");
284 return fillColor(c);
285 }
290 this->bgColor(c);
291 return std::move(*this);
292 }
299 static_assert(C2,
300 "strokeWidth can be set only for Canvas2D components");
301 if constexpr (C2) {
302 component_2d.strokeWidth(s);
303 }
304 return *this;
305 }
310 this->strokeWidth(s);
311 return std::move(*this);
312 }
318 static_assert(C2, "textSize can be set only for Canvas2D components");
319 if constexpr (C2) {
320 component_2d.textSize(s);
321 }
322 return *this;
323 }
328 this->textSize(s);
329 return std::move(*this);
330 }
331
336 TemporalComponent &width(int width) & {
337 static_assert(V, "width can be set only for View components");
338 if constexpr (V) {
339 component_v.width(width);
340 }
341 return *this;
342 }
347 TemporalComponent &&width(int width) && {
348 this->width(width);
349 return std::move(*this);
350 }
355 TemporalComponent &height(int height) & {
356 static_assert(V, "height can be set only for View components");
357 if constexpr (V) {
358 component_v.height(height);
359 }
360 return *this;
361 }
366 TemporalComponent &&height(int height) && {
367 this->height(height);
368 return std::move(*this);
369 }
370};
371class TemporalGeometry : public TemporalComponent<false, true, true>,
372 public Geometry {
373 public:
374 TemporalGeometry(GeometryType type, std::vector<double> &&properties)
377 Geometry(type, std::move(properties)) {
378 this->component_2d.geometry(static_cast<Geometry &>(*this));
379 this->component_3d.geometry(static_cast<Geometry &>(*this));
380 }
381};
382
383inline namespace components {
384inline namespace geometries {
385
386struct Line {
388 explicit Line(const Geometry &rg) : base(rg) {
389 if (base.properties.size() != 6) {
390 throw InvalidArgument("Geometry type does not match: expected 6 "
391 "properties for Line, got " +
392 std::to_string(base.properties.size()));
393 }
394 }
395 Point begin() const {
396 return Point{base.properties[0], base.properties[1],
397 base.properties[2]};
398 }
399 Point end() const {
400 return Point{base.properties[3], base.properties[4],
401 base.properties[5]};
402 }
403};
404inline TemporalGeometry line(const Point &begin, const Point &end) {
405 return TemporalGeometry(GeometryType::line,
406 {begin.pos()[0], begin.pos()[1], begin.pos()[2],
407 end.pos()[0], end.pos()[1], end.pos()[2]});
408}
409struct Polygon {
411 explicit Polygon(const Geometry &rg) : base(rg) {
412 if (base.properties.size() % 3 != 0 || size() == 0) {
413 throw InvalidArgument("Geometry type does not match: expected "
414 "properties multiple of 3 for Polygon, got " +
415 std::to_string(base.properties.size()));
416 }
417 }
418 std::size_t size() const { return base.properties.size() / 3; }
419 Point at(std::size_t i) const {
420 if (i >= size()) {
421 throw OutOfRange("Polygon::at(" + std::to_string(i) +
422 "), size = " + std::to_string(size()));
423 }
424 return Point{base.properties[i * 3 + 0], base.properties[i * 3 + 1],
425 base.properties[i * 3 + 2]};
426 }
427 Point operator[](std::size_t i) const { return at(i); }
428};
429inline TemporalGeometry polygon(const std::vector<Point> &points) {
430 std::vector<double> properties;
431 properties.reserve(points.size() * 3);
432 for (const auto &p : points) {
433 properties.push_back(p.pos(0));
434 properties.push_back(p.pos(1));
435 properties.push_back(p.pos(2));
436 }
437 return TemporalGeometry(GeometryType::polygon, std::move(properties));
438}
439struct Plane {
441 explicit Plane(const Geometry &rg) : base(rg) {
442 if (base.properties.size() != 8) {
443 throw InvalidArgument("Geometry type does not match: expected 8 "
444 "properties for Plane, got " +
445 std::to_string(base.properties.size()));
446 }
447 }
449 return Transform(
450 {base.properties[0], base.properties[1], base.properties[2]},
451 rotFromEuler(base.properties[3], base.properties[4],
452 base.properties[5]));
453 }
454 double width() const { return base.properties[6]; }
455 double height() const { return base.properties[7]; }
460 Point vertex1() const {
461 return {base.properties[0] - width() / 2,
462 base.properties[1] - height() / 2, base.properties[2]};
463 }
464 Point vertex2() const {
465 return {base.properties[0] + width() / 2,
466 base.properties[1] + height() / 2, base.properties[2]};
467 }
468};
469inline TemporalGeometry plane(const Transform &origin, double width,
470 double height) {
471 return TemporalGeometry(GeometryType::plane,
472 {origin.pos()[0], origin.pos()[1], origin.pos()[2],
473 origin.rotEuler()[0], origin.rotEuler()[1],
474 origin.rotEuler()[2], width, height});
475}
476using Rect = Plane;
477inline TemporalGeometry rect(const Point &origin, double width, double height) {
478 return TemporalGeometry{GeometryType::plane,
479 {origin.pos()[0], origin.pos()[1], origin.pos()[2],
480 0, 0, 0, width, height}};
481}
482inline TemporalGeometry rect(const Point &p1, const Point &p2) {
483 Transform origin = identity();
484 for (int i = 0; i < 2; i++) {
485 origin.pos(i) = (p1.pos(i) + p2.pos(i)) / 2;
486 }
487 double width = std::abs(p1.pos(0) - p2.pos(0));
488 double height = std::abs(p1.pos(0) - p2.pos(0));
489 return TemporalGeometry{GeometryType::plane,
490 {origin.pos(0), origin.pos(1), origin.pos(2),
491 origin.rotEuler()[0], origin.rotEuler()[1],
492 origin.rotEuler()[2], width, height}};
493}
494
495struct Box {
497 explicit Box(const Geometry &rg) : base(rg) {
498 if (base.properties.size() != 6) {
499 throw InvalidArgument("Geometry type does not match: expected 6 "
500 "properties for Box, got " +
501 std::to_string(base.properties.size()));
502 }
503 }
504 Point vertex1() const {
505 return Point{base.properties[0], base.properties[1],
506 base.properties[2]};
507 }
508 Point vertex2() const {
509 return Point{base.properties[3], base.properties[4],
510 base.properties[5]};
511 }
512};
513inline TemporalGeometry box(const Point &vertex1, const Point &vertex2) {
514 return TemporalGeometry{GeometryType::box,
515 {vertex1.pos()[0], vertex1.pos()[1],
516 vertex1.pos()[2], vertex2.pos()[0],
517 vertex2.pos()[1], vertex2.pos()[2]}};
518}
519
520struct Circle {
522 explicit Circle(const Geometry &rg) : base(rg) {
523 if (base.properties.size() != 7) {
524 throw InvalidArgument("Geometry type does not match: expected 7 "
525 "properties for Circle, got " +
526 std::to_string(base.properties.size()));
527 }
528 }
530 return Transform(
531 {base.properties[0], base.properties[1], base.properties[2]},
532 rotFromEuler(base.properties[3], base.properties[4],
533 base.properties[5]));
534 }
535 double radius() const { return base.properties[6]; }
536};
537inline TemporalGeometry circle(const Transform &origin, double radius) {
538 return TemporalGeometry{GeometryType::circle,
539 {origin.pos()[0], origin.pos()[1], origin.pos()[2],
540 origin.rotEuler()[0], origin.rotEuler()[1],
541 origin.rotEuler()[2], radius}};
542}
543inline TemporalGeometry circle(const Point &origin, double radius) {
544 return TemporalGeometry{
545 GeometryType::circle,
546 {origin.pos()[0], origin.pos()[1], origin.pos()[2], 0, 0, 0, radius}};
547}
548
549struct Cylinder {
551 explicit Cylinder(const Geometry &rg) : base(rg) {
552 if (base.properties.size() != 8) {
553 throw InvalidArgument("Geometry type does not match: expected 8 "
554 "properties for Cylinder, got " +
555 std::to_string(base.properties.size()));
556 }
557 }
559 return Transform(
560 {base.properties[0], base.properties[1], base.properties[2]},
561 rotFromEuler(base.properties[3], base.properties[4],
562 base.properties[5]));
563 }
564 double radius() const { return base.properties[6]; }
565 double length() const { return base.properties[7]; }
566};
567inline TemporalGeometry cylinder(const Transform &origin, double radius,
568 double length) {
569 return TemporalGeometry{GeometryType::cylinder,
570 {origin.pos()[0], origin.pos()[1], origin.pos()[2],
571 origin.rotEuler()[0], origin.rotEuler()[1],
572 origin.rotEuler()[2], radius, length}};
573}
574
575struct Sphere {
577 explicit Sphere(const Geometry &rg) : base(rg) {
578 if (base.properties.size() != 4) {
579 throw InvalidArgument("Geometry type does not match: expected 4 "
580 "properties for Sphere, got " +
581 std::to_string(base.properties.size()));
582 }
583 }
584 Point origin() const {
585 return Point{base.properties[0], base.properties[1],
586 base.properties[2]};
587 }
588 double radius() const { return base.properties[3]; }
589};
590inline TemporalGeometry sphere(const Point &origin, double radius) {
591 return TemporalGeometry{
592 GeometryType::sphere,
593 {origin.pos()[0], origin.pos()[1], origin.pos()[2], radius}};
594}
595
596
597} // namespace geometries
598
599namespace Geometries = geometries; // 〜ver1.11
600
609 ViewComponentType::text, Canvas2DComponentType::text, nullptr)
610 .text(text);
611}
617 return TemporalViewComponent(ViewComponentType::new_line);
618}
619
626template <typename T>
627inline TemporalViewComponent button(const StringInitializer &text, T &&func) {
628 return TemporalViewComponent(ViewComponentType::button)
629 .text(text)
630 .onClick(std::forward<T>(func));
631}
636template <typename T>
637inline TemporalViewComponent button(std::wstring_view text, T &&func) {
638 return TemporalViewComponent(ViewComponentType::button)
639 .text(text)
640 .onClick(std::forward<T>(func));
641}
642
644 return TemporalViewComponent(ViewComponentType::text_input).text(text);
645}
647 return TemporalViewComponent(ViewComponentType::decimal_input)
648 .text(text)
649 .init(0);
650}
652 return TemporalViewComponent(ViewComponentType::number_input)
653 .text(text)
654 .init(0);
655}
657 return TemporalViewComponent(ViewComponentType::toggle_input).text(text);
658}
660 return TemporalViewComponent(ViewComponentType::select_input).text(text);
661}
663 return TemporalViewComponent(ViewComponentType::slider_input)
664 .text(text)
665 .init(0);
666}
668 return TemporalViewComponent(ViewComponentType::check_input)
669 .text(text)
670 .init(false);
671}
672} // namespace components
673
674namespace Components = components; // 〜ver1.11
675namespace ViewComponents = components; // 〜ver1.8
676
Canvas2Dの送受信データを表すクラス
Definition canvas2d.h:24
Canvas3Dの送受信データを表すクラス
Definition canvas3d.h:28
Definition func.h:616
関数1つを表すクラス
Definition func.h:106
3次元 or 2次元の座標を表すクラス。
Definition transform.h:23
std::array< double, 3 > pos() const
3次元座標を取得
Definition transform.h:62
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:215
Definition component_canvas2d.h:148
TemporalCanvas2DComponent & onClick(const Func &func) &
クリック時に実行される関数を設定 (Funcオブジェクト)
Definition component_canvas2d.cc:172
TemporalCanvas2DComponent & strokeWidth(double s) &
線の太さ
Definition component_canvas2d.cc:126
TemporalCanvas2DComponent & text(StringInitializer text) &
表示する文字列を設定
Definition component_canvas2d.cc:138
TemporalCanvas2DComponent & color(const ViewColor &color) &
図形の輪郭の色
Definition component_canvas2d.cc:109
TemporalCanvas2DComponent & id(StringInitializer id)
idを設定
Definition component_canvas2d.cc:84
TemporalCanvas2DComponent & textSize(double s) &
文字の大きさ(高さ)
Definition component_canvas2d.h:260
TemporalCanvas2DComponent & origin(const Transform &origin) &
要素の移動・回転
Definition component_canvas2d.cc:99
TemporalCanvas2DComponent & fillColor(const ViewColor &color) &
塗りつぶし色
Definition component_canvas2d.cc:118
Canvas3Dを構築するときに使う一時的なCanvas3DComponent.
Definition component_canvas3d.h:121
TemporalCanvas3DComponent & color(ViewColor color) &
Definition component_canvas3d.cc:97
TemporalCanvas3DComponent & origin(const Transform &origin) &
要素の移動
Definition component_canvas3d.cc:88
TemporalCanvas3DComponent & id(StringInitializer id)
idを設定
Definition component_canvas3d.cc:74
Definition components.h:372
TemporalGeometry(GeometryType type, std::vector< double > &&properties)
Definition components.h:374
Viewを構築するときに使う一時的なViewComponent.
Definition component_view.h:292
TemporalViewComponent & text(StringInitializer text) &
表示する文字列を設定
Definition component_view.cc:268
TemporalViewComponent & height(int height) &
要素の高さを設定する。
Definition component_view.cc:405
TemporalViewComponent & init(const T &init) &
デフォルト値を設定する。
Definition component_view.h:507
TemporalViewComponent & bgColor(ViewColor c) &
背景色を設定
Definition component_view.cc:348
TemporalViewComponent & width(int width) &
要素の幅を設定する。
Definition component_view.cc:397
TemporalViewComponent & textColor(ViewColor c) &
文字色を設定
Definition component_view.cc:340
TemporalViewComponent & onClick(const Func &func) &
クリック時に実行される関数を設定 (登録済みFunc)
Definition component_view.cc:291
TemporalViewComponent & id(StringInitializer id)
idを設定
Definition component_view.cc:256
3次元の平行移動と回転
Definition transform.h:652
std::array< double, 3 > pos() const
3次元座標を取得
Definition transform.h:62
std::array< double, 3 > rotEuler(AxisSequence axis=AxisSequence::ZYX) const
3次元の回転をオイラー角として取得
Definition transform.h:384
Viewの送受信データを表すクラス
Definition view.h:36
Viewの送信用データを保持する
Definition data_buffer.h:108
TemporalGeometry line(const Point &begin, const Point &end)
Definition components.h:404
TemporalGeometry rect(const Point &origin, double width, double height)
Definition components.h:477
TemporalGeometry circle(const Transform &origin, double radius)
Definition components.h:537
TemporalGeometry cylinder(const Transform &origin, double radius, double length)
Definition components.h:567
TemporalGeometry plane(const Transform &origin, double width, double height)
Definition components.h:469
TemporalGeometry polygon(const std::vector< Point > &points)
Definition components.h:429
TemporalGeometry box(const Point &vertex1, const Point &vertex2)
Definition components.h:513
TemporalGeometry sphere(const Point &origin, double radius)
Definition components.h:590
TemporalViewComponent toggleInput(const StringInitializer &text={})
Definition components.h:656
TemporalViewComponent button(const StringInitializer &text, T &&func)
buttonコンポーネント
Definition components.h:627
TemporalViewComponent selectInput(const StringInitializer &text={})
Definition components.h:659
TemporalViewComponent numberInput(const StringInitializer &text={})
Definition components.h:651
TemporalViewComponent checkInput(const StringInitializer &text={})
Definition components.h:667
TemporalViewComponent newLine()
newLineコンポーネント
Definition components.h:616
TemporalViewComponent decimalInput(const StringInitializer &text={})
Definition components.h:646
TemporalViewComponent textInput(const StringInitializer &text={})
Definition components.h:643
TemporalViewComponent sliderInput(const StringInitializer &text={})
Definition components.h:662
Canvas2DComponentType
Definition component_canvas2d.h:22
GeometryType
Canvas3Dと2Dで共用、図形の種類を表す
Definition geometry.h:15
ViewColor
Definition component_view.h:41
Rotation rotFromEuler(const std::array< double, 3 > &rot, AxisSequence axis=AxisSequence::ZYX)
回転をオイラー角から初期化
Definition transform.h:519
Transform identity()
移動なし、回転なしのTransform
Definition transform.h:831
Canvas3DComponentType
Definition component_canvas3d.h:20
Definition geometry.h:26
std::vector< double > properties
Definition geometry.h:28
その他のパラメーターエラー
Definition exception.h:89
その他のパラメーターエラー
Definition exception.h:98
Canvas2D, Canvas3D (, View) に要素をaddするときに使うインタフェース
Definition components.h:23
TemporalComponent & onClick(T func) &
クリック時に実行される関数を設定 (Viewまたは2D)
Definition components.h:134
TemporalComponent && onClick(const Func &func) &&
Definition components.h:94
TemporalComponent & width(int width) &
要素の幅 (Viewのみ)
Definition components.h:336
TemporalComponent && fillColor(ViewColor c) &&
Definition components.h:273
TemporalComponent && id(const StringInitializer &id) &&
Definition components.h:66
TemporalComponent & strokeWidth(double s) &
線の太さ (2Dのみ)
Definition components.h:298
TemporalComponent && strokeWidth(double s) &&
Definition components.h:309
TemporalComponent & id(const StringInitializer &id) &
idを設定
Definition components.h:51
TemporalComponent & textColor(ViewColor c) &
文字色 (Viewまたは2D)
Definition components.h:237
TemporalComponent & color(ViewColor c) &
Definition components.h:185
TemporalComponent & height(int height) &
要素の高さ (Viewのみ)
Definition components.h:355
TemporalComponent & text(const StringInitializer &str) &
表示する文字列 (View, Canvas2D)
Definition components.h:211
TemporalComponent && text(const StringInitializer &str) &&
Definition components.h:228
TemporalComponent && origin(const Transform &origin) &&
Definition components.h:176
TemporalComponent && bgColor(ViewColor c) &&
Definition components.h:289
TemporalComponent & origin(const Transform &origin) &
要素の移動 (2Dまたは3D)
Definition components.h:161
TemporalComponent && textColor(ViewColor c) &&
Definition components.h:251
TemporalCanvas2DComponent component_2d
Definition components.h:25
TemporalComponent & bgColor(ViewColor c) &
背景色 (Viewまたは2D)
Definition components.h:281
TemporalComponent && width(int width) &&
要素の幅 (Viewのみ)
Definition components.h:347
TemporalComponent & textSize(double s) &
文字の大きさ (2Dのみ)
Definition components.h:317
TemporalCanvas3DComponent component_3d
Definition components.h:26
TemporalViewComponent component_v
Definition components.h:24
TemporalComponent & fillColor(ViewColor c) &
背景色 (Viewまたは2D)
Definition components.h:259
TemporalComponent && textSize(double s) &&
Definition components.h:327
TemporalComponent & onClick(const FuncListener &func) &
クリック時に実行される関数を設定 (Viewまたは2D, FuncListener)
Definition components.h:106
TemporalComponent & onClick(const Func &func) &
クリック時に実行される関数を設定 (Viewまたは2D, Funcオブジェクト)
Definition components.h:79
TemporalComponent && onClick(T func) &&
Definition components.h:153
TemporalComponent && onClick(const FuncListener &func) &&
Definition components.h:120
TemporalComponent && height(int height) &&
要素の高さ (Viewのみ)
Definition components.h:366
TemporalComponent && color(ViewColor c) &&
Definition components.h:200
TemporalComponent(VT v_type, C2T c2_type, C3T c3_type)
Definition components.h:30
Definition components.h:495
const Geometry & base
Definition components.h:496
Box(const Geometry &rg)
Definition components.h:497
Point vertex2() const
Definition components.h:508
Point vertex1() const
Definition components.h:504
Definition components.h:520
const Geometry & base
Definition components.h:521
Circle(const Geometry &rg)
Definition components.h:522
double radius() const
Definition components.h:535
Transform origin() const
Definition components.h:529
Definition components.h:549
const Geometry & base
Definition components.h:550
double radius() const
Definition components.h:564
double length() const
Definition components.h:565
Cylinder(const Geometry &rg)
Definition components.h:551
Transform origin() const
Definition components.h:558
Definition components.h:386
const Geometry & base
Definition components.h:387
Point end() const
Definition components.h:399
Line(const Geometry &rg)
Definition components.h:388
Point begin() const
Definition components.h:395
Definition components.h:439
const Geometry & base
Definition components.h:440
double width() const
Definition components.h:454
double height() const
Definition components.h:455
Transform origin() const
Definition components.h:448
Point vertex2() const
Definition components.h:464
Plane(const Geometry &rg)
Definition components.h:441
Point vertex1() const
Definition components.h:460
const Geometry & base
Definition components.h:410
Point at(std::size_t i) const
Definition components.h:419
Point operator[](std::size_t i) const
Definition components.h:427
Polygon(const Geometry &rg)
Definition components.h:411
std::size_t size() const
Definition components.h:418
Definition components.h:575
const Geometry & base
Definition components.h:576
double radius() const
Definition components.h:588
Point origin() const
Definition components.h:584
Sphere(const Geometry &rg)
Definition components.h:577
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107