summaryrefslogtreecommitdiff
path: root/graphics/sketch/scene.h
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/sketch/scene.h
Initial commit
Diffstat (limited to 'graphics/sketch/scene.h')
-rw-r--r--graphics/sketch/scene.h230
1 files changed, 230 insertions, 0 deletions
diff --git a/graphics/sketch/scene.h b/graphics/sketch/scene.h
new file mode 100644
index 0000000000..9313d80175
--- /dev/null
+++ b/graphics/sketch/scene.h
@@ -0,0 +1,230 @@
+/* scene.h
+ Copyright (C) 2005,2006,2007 Eugene K. Ressler, Jr.
+
+This file is part of Sketch, a small, simple system for making
+3d drawings with LaTeX and the PSTricks or TikZ package.
+
+Sketch is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+Sketch is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Sketch; see the file COPYING.txt. If not, see
+http://www.gnu.org/copyleft */
+
+#ifndef __SCENE_H
+#define __SCENE_H
+
+#include "opts.h"
+#include "error.h"
+#include "geometry.h"
+#include "expr.h"
+#include "bsp.h"
+#include "dynarray.h"
+#include "global.h"
+
+typedef struct point_list_3d_t
+{
+ DYNAMIC_2D_ARRAY_FIELDS (POINT_3D, v, n_pts);
+}
+POINT_LIST_3D;
+
+DECLARE_DYNAMIC_2D_ARRAY_PROTOS (POINT_LIST_3D, POINT_3D, FLOAT,
+ point_list_3d, v, n_pts)
+ typedef struct transform_list_t
+ {
+ DYNAMIC_2D_ARRAY_FIELDS (TRANSFORM, xf, n_xfs);
+ }
+TRANSFORM_LIST;
+
+DECLARE_DYNAMIC_2D_ARRAY_PROTOS (TRANSFORM_LIST, TRANSFORM, FLOAT,
+ transform_list, xf, n_xfs)
+// object_type_str[] definition in scene.c must match!
+ typedef enum object_type_t
+ {
+ O_BASE,
+ O_TAG_DEF,
+ O_OPTS_DEF,
+ O_SCALAR_DEF,
+ O_POINT_DEF,
+ O_VECTOR_DEF,
+ O_TRANSFORM_DEF,
+ O_DOTS,
+ O_LINE,
+ O_CURVE,
+ O_POLYGON,
+ O_SPECIAL,
+ O_SWEEP,
+ O_REPEAT,
+ O_COMPOUND,
+ }
+OBJECT_TYPE;
+
+#define is_drawable(P) ((P)->tag >= O_DOTS)
+
+ extern char *object_type_str[];
+
+#define BASE_OBJECT_FIELDS \
+ struct object_t *sibling; \
+ OBJECT_TYPE tag
+
+ typedef struct object_t
+ {
+ BASE_OBJECT_FIELDS;
+ }
+OBJECT;
+
+ typedef OBJECT TAG_DEF;
+ OBJECT *new_tag_def (void);
+
+ typedef struct opts_def_t
+ {
+ BASE_OBJECT_FIELDS;
+ OPTS *opts;
+ }
+OPTS_DEF;
+
+ OBJECT *new_opts_def (char *opts_str, SRC_LINE line);
+
+ typedef struct scalar_def_t
+ {
+ BASE_OBJECT_FIELDS;
+ FLOAT val;
+ }
+SCALAR_DEF;
+
+ OBJECT *new_scalar_def (FLOAT val);
+
+ typedef struct point_def_t
+ {
+ BASE_OBJECT_FIELDS;
+ POINT_3D p;
+ }
+POINT_DEF;
+
+ OBJECT *new_point_def (POINT_3D p);
+
+ typedef struct vector_def_t
+ {
+ BASE_OBJECT_FIELDS;
+ VECTOR_3D v;
+ }
+VECTOR_DEF;
+
+ OBJECT *new_vector_def (VECTOR_3D v);
+
+ typedef struct transform_def_t
+ {
+ BASE_OBJECT_FIELDS;
+ TRANSFORM xf;
+ }
+TRANSFORM_DEF;
+
+ OBJECT *new_transform_def (TRANSFORM xf);
+
+ typedef struct dots_t
+ {
+ BASE_OBJECT_FIELDS;
+ OPTS *opts;
+ POINT_LIST_3D pts[1];
+ }
+DOTS_OBJECT;
+
+ OBJECT *new_dots (OPTS * opts, OBJECT * pts);
+
+ typedef struct line_object_t
+ {
+ BASE_OBJECT_FIELDS;
+ OPTS *opts;
+ POINT_LIST_3D pts[1];
+ }
+LINE_OBJECT;
+
+ OBJECT *new_line (OPTS * opts, OBJECT * pts);
+
+ typedef struct curve_t
+ {
+ BASE_OBJECT_FIELDS;
+ OPTS *opts;
+ POINT_LIST_3D pts[1];
+ }
+CURVE_OBJECT;
+
+ OBJECT *new_curve (OPTS * opts, OBJECT * pts);
+
+ typedef struct polygon_t
+ {
+ BASE_OBJECT_FIELDS;
+ OPTS *opts;
+ int border_p;
+ POINT_LIST_3D pts[1];
+ }
+POLYGON_OBJECT;
+
+ OBJECT *new_polygon (OPTS * opts, OBJECT * pts);
+
+ typedef struct special_t
+ {
+ BASE_OBJECT_FIELDS;
+ char *code;
+ OPTS *opts;
+ POINT_LIST_3D pts[1];
+ }
+SPECIAL_OBJECT;
+
+ OBJECT *new_special (char *code, OPTS * opts, OBJECT * pts,
+ SRC_LINE line);
+
+ typedef struct sweep_t
+ {
+ BASE_OBJECT_FIELDS;
+ OPTS *opts;
+ int n_slices;
+ int closed_p;
+ TRANSFORM_LIST xforms[1];
+ OBJECT *swept;
+ }
+SWEEP_OBJECT;
+
+ OBJECT *new_sweep (OPTS * opts, int n_slices, int closed_p, OBJECT * xfs,
+ OBJECT * swept);
+
+ typedef struct repeat_t
+ {
+ BASE_OBJECT_FIELDS;
+ int n;
+ TRANSFORM_LIST xforms[1];
+ OBJECT *repeated;
+ }
+REPEAT_OBJECT;
+
+ OBJECT *new_repeat (int n, OBJECT * xfs, OBJECT * repeated);
+
+ typedef struct compound_t
+ {
+ BASE_OBJECT_FIELDS;
+ TRANSFORM xform;
+ OBJECT *child;
+ }
+COMPOUND_OBJECT;
+
+ OBJECT *new_compound (TRANSFORM xform, OBJECT * child);
+
+ OBJECT *copy_drawable (OBJECT * obj);
+ OBJECT *cat_objects (OBJECT * lft, OBJECT * rgt);
+ OBJECT *sibling_reverse (OBJECT * obj);
+ OBJECT *object_from_expr (EXPR_VAL * val);
+
+ OBJECT *flat_scene (OBJECT * obj, GLOBAL_ENV * env);
+ OBJECT *hsr_scene_with_bsp (OBJECT * scene);
+ OBJECT *hsr_scene_with_depth_sort (OBJECT * scene);
+ void get_extent (OBJECT * obj, BOX_3D * e, int *n_obj);
+ int xy_overlap_p (OBJECT * obj, BOX_3D * e);
+
+#endif