123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program 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 2
- * of the License, or (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
- #ifndef __BKE_SKETCH_H__
- #define __BKE_SKETCH_H__
- /** \file BKE_sketch.h
- * \ingroup bke
- */
- typedef enum SK_PType {
- PT_CONTINUOUS,
- PT_EXACT,
- } SK_PType;
- typedef enum SK_PMode {
- PT_SNAP,
- PT_PROJECT,
- } SK_PMode;
- typedef struct SK_Point {
- float p[3];
- short p2d[2];
- float no[3];
- float size;
- SK_PType type;
- SK_PMode mode;
- } SK_Point;
- typedef struct SK_Stroke {
- struct SK_Stroke *next, *prev;
- SK_Point *points;
- int nb_points;
- int buf_size;
- int selected;
- } SK_Stroke;
- #define SK_OVERDRAW_LIMIT 5
- typedef struct SK_Overdraw {
- SK_Stroke *target;
- int start, end;
- int count;
- } SK_Overdraw;
- #define SK_Stroke_BUFFER_INIT_SIZE 20
- typedef struct SK_DrawData {
- int mval[2];
- int previous_mval[2];
- SK_PType type;
- } SK_DrawData;
- typedef struct SK_Intersection {
- struct SK_Intersection *next, *prev;
- SK_Stroke *stroke;
- int before;
- int after;
- int gesture_index;
- float p[3];
- float lambda; /* used for sorting intersection points */
- } SK_Intersection;
- typedef struct SK_Sketch {
- ListBase strokes;
- SK_Stroke *active_stroke;
- SK_Stroke *gesture;
- SK_Point next_point;
- SK_Overdraw over;
- } SK_Sketch;
- typedef struct SK_Gesture {
- SK_Stroke *stk;
- SK_Stroke *segments;
- ListBase intersections;
- ListBase self_intersections;
- int nb_self_intersections;
- int nb_intersections;
- int nb_segments;
- } SK_Gesture;
- /************************************************/
- void freeSketch(SK_Sketch *sketch);
- SK_Sketch *createSketch(void);
- void sk_removeStroke(SK_Sketch *sketch, SK_Stroke *stk);
- void sk_freeStroke(SK_Stroke *stk);
- SK_Stroke *sk_createStroke(void);
- SK_Point *sk_lastStrokePoint(SK_Stroke *stk);
- void sk_allocStrokeBuffer(SK_Stroke *stk);
- void sk_shrinkStrokeBuffer(SK_Stroke *stk);
- void sk_growStrokeBuffer(SK_Stroke *stk);
- void sk_growStrokeBufferN(SK_Stroke *stk, int n);
- void sk_replaceStrokePoint(SK_Stroke *stk, SK_Point *pt, int n);
- void sk_insertStrokePoint(SK_Stroke *stk, SK_Point *pt, int n);
- void sk_appendStrokePoint(SK_Stroke *stk, SK_Point *pt);
- void sk_insertStrokePoints(SK_Stroke *stk, SK_Point *pts, int len, int start, int end);
- void sk_trimStroke(SK_Stroke *stk, int start, int end);
- void sk_straightenStroke(SK_Stroke *stk, int start, int end, float p_start[3], float p_end[3]);
- void sk_polygonizeStroke(SK_Stroke *stk, int start, int end);
- void sk_flattenStroke(SK_Stroke *stk, int start, int end);
- void sk_reverseStroke(SK_Stroke *stk);
- void sk_filterLastContinuousStroke(SK_Stroke *stk);
- void sk_filterStroke(SK_Stroke *stk, int start, int end);
- void sk_initPoint(SK_Point *pt, SK_DrawData *dd, const float no[3]);
- void sk_copyPoint(SK_Point *dst, SK_Point *src);
- int sk_stroke_filtermval(SK_DrawData *dd);
- void sk_endContinuousStroke(SK_Stroke *stk);
- void sk_updateNextPoint(SK_Sketch *sketch, SK_Stroke *stk);
- void sk_initDrawData(SK_DrawData *dd, const int mval[2]);
- void sk_deleteSelectedStrokes(SK_Sketch *sketch);
- void sk_selectAllSketch(SK_Sketch *sketch, int mode);
- #endif
|